|
|
1.1 root 1: /* @(#)nmf.c 1.5 83/08/05 */
2: #if defined(UNIX5) && !defined(pdp11)
3: #include "stdio.h"
4:
5: main(argc, argv)
6: char *argv[];
7: {
8: char name[BUFSIZ], buf[BUFSIZ], *fname = NULL, *pty, *strncpy();
9: register char *p;
10: int nsize, tysize, lineno;
11:
12: strcpy(name, argc > 1? argv[1] : "???");
13: if (argc > 2)
14: fname = argv[2];
15: else
16: fname = "???";
17: while (gets(buf))
18: {
19: p = buf;
20: while (*p != ' ' && *p != '|')
21: ++p;
22: nsize = p - buf;
23: do ; while (*p++ != '|'); /* skip rem of name */
24: do ; while (*p++ != '|'); /* skip value */
25: do ; while (*p++ != '|'); /* skip class */
26: while (*p == ' ')
27: ++p;
28: if (*p != '|')
29: {
30: pty = p++;
31: while (*p != '|')
32: ++p;
33: tysize = p - pty;
34: }
35: else
36: pty = (char *) NULL;
37: ++p;
38: do ; while (*p++ != '|'); /* skip size */
39: while (*p == ' ')
40: ++p;
41: lineno = atoi(p);
42: do ; while (*p++ != '|'); /* and xlated line */
43: while (*p == ' ')
44: ++p;
45: if (!strncmp(p, ".text", 5) || !strncmp(p, ".data", 5))
46: { /* it's defined */
47: strncpy(name, buf, nsize);
48: name[nsize] = '\0';
49: printf("%s = ", name);
50: if (pty)
51: printf("%.*s", tysize, pty);
52: else
53: {
54: fputs("???", stdout);
55: if (!strncmp(p, ".text", 5))
56: fputs("()", stdout);
57: }
58: printf(", <%s %d>\n", fname, lineno);
59: }
60: else
61: printf("%s : %.*s\n", name, nsize, buf);
62: }
63: exit(0);
64: }
65: #else
66: #include "stdio.h"
67:
68: #if u3b || u3b5 || vax
69: #define SYMSTART 11
70: #define SYMCLASS 9
71: #endif
72:
73: #if pdp11
74: #define SYMSTART 9
75: #define SYMCLASS 7
76: #endif
77:
78: main(argc, argv)
79: char *argv[];
80: {
81: char name[15], buf[64];
82: char *fname = NULL;
83: char *p;
84:
85: strcpy(name, argc > 1? argv[1] : "");
86: if (argc > 2)
87: fname = argv[2];
88: while (gets(buf)) {
89: p = &buf[SYMSTART];
90: if (*p == '_')
91: ++p;
92: switch (buf[SYMCLASS]) {
93: case 'U':
94: printf("%s : %s\n", name, p);
95: continue;
96: case 'T':
97: printf("%s = text", p);
98: strcpy(name, p);
99: break;
100: case 'D':
101: printf("%s = data", p);
102: if (strcmp(name, "") == 0)
103: strcpy(name, p);
104: break;
105: case 'B':
106: printf("%s = bss", p);
107: break;
108: case 'A':
109: printf("%s = abs", p);
110: break;
111: default:
112: continue;
113: }
114: if (fname != NULL)
115: printf(", %s", fname);
116: printf("\n");
117: }
118: exit(0);
119: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.