masscomp-request@soma.UUCP (03/09/87)
[I could not get this to work with RTU 3.1 and the C compiler version 1.1
on the MC5700, MC5400, MC5500-PEP. Perhaps it will be useful to someone,
though. -- sob]
#!/bin/sh
echo 'Start of pack.out, part 01 of 01:'
echo 'x - Makefile'
sed 's/^X//' > Makefile << '/'
Xasmprt: exp.i asmprt.o
X cc asmprt.o -o asmprt -lPW
Xexp.i: exp
X regcmp exp
Xasmprt.o: asmprt.c
X cc -c asmprt.c
Xclean:
X rm -f asmprt exp.i asmprt.o
/
echo 'x - asmprt.1'
sed 's/^X//' > asmprt.1 << '/'
X.TH ASMPRT
X.SH NAME
Xasmprt - printout C program with generated assembler code intermixed
X.SH SYNOPSIS
Xasmprt filename
X.SH DESCRIPTION
Xasmprt prints out a C program along with it's generated assembly
Xlanguage code. Input can be either a ".s" file as produced by
X"cc -S" or a listing file as produced by "cc -S" followed by "as -s".
XOutput is to stdout.
X.BUGS
XOnly works with Masscomp's C Compiler. Only tested with MC5500 under
XRTU-3.0a and RTU-3.1a.
X.SH AUTHOR
XBruce Karsh
/
echo 'x - asmprt.c'
sed 's/^X//' > asmprt.c << '/'
X#include "exp.i"
X#include <stdio.h>
X
X/*
X** amsprt - print out intermixed C and Assembler code.
X*/
X
Xint cline,oldcline;
Xchar cname[100],oldcname[100];
XFILE *sfile,*cfile;
X
Xmain(argc,argv)
Xint argc;
Xchar *argv[];
X{
Xcfile=NULL; cname[0]=0; oldcname[0]=0;
X
X/* Parse args */
X
Xif(argc != 2)
X {
X fputs("Usage asmprt filename\n",stderr);
X exit(1);
X }
X
X/* Open the .s file. */
X
Xsfile = fopen(argv[1],"r");
Xif(sfile == NULL)
X {
X fputs("Can't open file ",stderr); fputs(argv[1],stderr); fputs("\n",stderr);
X exit(2);
X }
X
Xfor(;;)
X {
X
X /* Copy the .s file to standard output until a position comment
X appears in the .s file. */
X
X if(0==copytillposition())exit(0);
X
X /* If the position comment changes the name of the .c file,
X open the new file, and close the old file. */
X
X if(strcmp(oldcname,cname)!=0)
X {
X strcpy(oldcname,cname);
X if(cfile != NULL)
X fclose(cfile);
X cfile=fopen(cname,"r");
X if(sfile == NULL)
X {
X fputs("Can't open file ",stderr); fputs(cname,stderr); fputs("\n",stderr);
X exit(3);
X }
X oldcline=1;
X }
X copyfile(oldcline,cline);
X oldcline=cline+1;
X }
X}
X/*------------------------------------------*/
Xcopytillposition()
X{
Xchar line[100];
Xfor(;;)
X {
X if(fgets(line,80,sfile)==NULL)return(0);
X fputs(line,stdout);
X if(testpos(line))break;
X }
Xreturn(1);
X}
Xcopyfile(start,end)
Xint start,end;
X{
Xint i;
Xchar line[100];
Xfor(i=start;i<=end;i++)
X {
X if(fgets(line,80,cfile)==NULL)return(0);
X fputs(line,stdout);
X }
Xreturn(1);
X}
Xtestpos(line)
Xchar line[];
X{
Xchar linenum[80],file[80];
Xif(regex(Rlineandfile,line,linenum,file,0))
X {
X strcpy(cname,file);
X cline=atoi(linenum);
X return(1);
X }
Xelse if(regex(Rline,line,linenum,0))
X {
X cline=atoi(linenum);
X return(1);
X }
Xelse if(regex(xRlineandfile,line,linenum,file,0))
X {
X strcpy(cname,file);
X cline=atoi(linenum);
X return(1);
X }
Xelse if(regex(xRline,line,linenum,0))
X {
X cline=atoi(linenum);
X return(1);
X }
Xelse
X {
X return(0);
X }
X}
/
echo 'x - exp'
sed 's/^X//' > exp << '/'
XRlineandfile " | *([^ ]*)$0 *\"([^ ]*)$1\""
XRline " | *([^ ]*)$0"
XxRlineandfile " | *([^ ]*)$0 *\"([^ ]*)$1\""
XxRline " | *([^ ]*)$0"
/
echo 'Part 01 of pack.out complete.'
exit