|
|
1.1 ! root 1: #include <stdio.h> ! 2: #define getline(p) fgets(line, sizeof(line), p) ! 3: FILE *cfile, *afile; ! 4: char line[200]; ! 5: char name[40]; ! 6: char *setsuf(); ! 7: ! 8: main(argc, argv) ! 9: char **argv; ! 10: { ! 11: register char *s; ! 12: ! 13: if(argc == 2) { ! 14: if((s = rindex(*++argv, '.')) != NULL) ! 15: *s = '\0'; ! 16: if((cfile = fopen(setsuf(*argv, "c"), "r"))==NULL ! 17: && (cfile = fopen(setsuf(*argv, "f"), "r"))==NULL) ! 18: operr(*argv, "source"); ! 19: if((afile = fopen(setsuf(*argv, "s"), "r"))==NULL) ! 20: operr(*argv, "assembler"); ! 21: freopen(setsuf(*argv, "lst"), "w", stdout); ! 22: } ! 23: else if(argc >= 3) { ! 24: if((cfile = fopen(*++argv, "r"))==NULL) ! 25: operr(*argv, "source"); ! 26: if((afile = fopen(*++argv, "r"))==NULL) ! 27: operr(*argv, "assembler"); ! 28: if(argc >= 4) ! 29: freopen(*++argv, "w", stdout); ! 30: } ! 31: else ! 32: return(1); ! 33: xprint(); ! 34: return(0); ! 35: } ! 36: ! 37: xprint() { ! 38: register i, alino, clino; ! 39: ! 40: clino = 0; ! 41: while(getline(afile)!=NULL) { ! 42: if(strncmp(line, "\t.stab", 6)!=0) ! 43: printf("%s", line); ! 44: else if(strncmp(line, "\t.stabd\t0104,0,", 15)==0) { ! 45: alino = 0; ! 46: for(i=15; line[i]>='0' && line[i]<='7'; i++) ! 47: alino = (alino<<3)+line[i]-'0'; ! 48: while(alino > clino && getline(cfile)!=NULL) { ! 49: printf(" # %s", line); ! 50: clino++; ! 51: } ! 52: } ! 53: } ! 54: while(getline(cfile)!=NULL) ! 55: printf(" # %s", line); ! 56: } ! 57: ! 58: char * ! 59: setsuf(st, suf) ! 60: char *st, *suf; ! 61: { ! 62: ! 63: sprintf(name, "%s.%s", st, suf); ! 64: return(name); ! 65: } ! 66: ! 67: operr(s, t) ! 68: char *s, *t; ! 69: { ! 70: fprintf(stderr, "cant open %s file %s\n", t, s); ! 71: exit(1); ! 72: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.