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