|
|
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.