Annotation of cci/d/event/absaddr.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Take ast - generated list files, take a.sym, produce a
                      3:  *  list file with updated PC's.
                      4:  */
                      5: #include       <stdio.h>
                      6: #define        TRUE 1
                      7: #define        FALSE 0
                      8: #define        NSYM 4000
                      9: 
                     10: struct symbol {
                     11:        char    name[20];
                     12:        long    value;
                     13: }      symbol[NSYM];
                     14: 
                     15:        long    basevalue, knownstart;
                     16:        char    lastsymbol[20];
                     17:        char    line[200];
                     18:        FILE    *asym, *source = stdin;
                     19:        char *symfil = "a.sym";
                     20: 
                     21: main(argc, argv)
                     22: int argc;
                     23: char *argv[];
                     24: {
                     25:        long    eof, i;
                     26: 
                     27:        if (argc > 3) {
                     28:                printf("Usage : %s [listfile] [symbolsfile]\n", argv[0]);
                     29:                exit(1);
                     30:        }
                     31:        if (argc >= 2) {
                     32:                source = fopen(argv[1], "r");
                     33:                if (source == NULL) {
                     34:                        printf("Cannot open %s\n", argv[1]);
                     35:                        exit(1);
                     36:                }
                     37:        }
                     38:        if (argc == 3)
                     39:                symfil = argv[2];
                     40:        asym = fopen (symfil, "r");
                     41:        if (asym == NULL) {
                     42:                printf("Cannot open %s\n", symfil);
                     43:                exit(1);
                     44:        }
                     45:        eof =  FALSE;
                     46:        for (i=0; i < NSYM && !eof; i++) {
                     47:                if (fgets(line, 80, asym)==NULL) eof = TRUE;
                     48:                sscanf(line, "%s %x", symbol[i].name, &symbol[i].value);
                     49:        }
                     50: 
                     51:        eof = FALSE;    /* source file now */
                     52:        while (!eof) {
                     53:                if (fgets(line,200, source)==NULL) eof =TRUE;
                     54:                if (!knownstart) checkline();
                     55:                if (knownstart) transform();
                     56:                printf("%s", line);
                     57:        }
                     58: }
                     59: 
                     60: /*
                     61:  * Check line for symbols and for start of text.
                     62:  */
                     63: checkline()
                     64: {
                     65:        int     i, j, place;
                     66: 
                     67:        i = 0;
                     68:        while (line[i] != '_' && line[i] != '\0' && line[i] != '\n') i++;
                     69:        if (line[i] == '_' && (i==0 || 
                     70:                        line[i-1] == ' ' || line[i-1] == '\t')) {
                     71:                place = 0;
                     72:                for (j=0; j<20; j++) lastsymbol[j] = '\0';
                     73:                while (line[i] != ':' && line[i] != '\0' 
                     74:                        && line[i] != '\n' && place<20 ) 
                     75:                        lastsymbol[place++] = line[i++];
                     76:        }
                     77:        if (line[3] == ' ' || line[15] == '*' || line[18] == ' ') return;
                     78: /* 
                     79:  * Found start of text
                     80:  */
                     81:        for (i=0; i< NSYM && !knownstart; i++) {
                     82:                if (strncmp(symbol[i].name, lastsymbol, place)==0) {
                     83:                        knownstart = TRUE;
                     84:                        sscanf(&line[6] , "%x", &j);
                     85:                        basevalue = symbol[i].value - j;
                     86:                }
                     87:        }
                     88:        if (!knownstart) printf("Symbol %s not found ---\n", lastsymbol);
                     89: }
                     90: 
                     91: /*
                     92:  * Transform text lines
                     93:  */
                     94: transform()
                     95: {
                     96: 
                     97:        long    i;
                     98: 
                     99:        if (line[3] == ' ' || line[15] == '*') return;
                    100:        sscanf(&line[6] , "%x", &i);
                    101:        i += basevalue;
                    102:        sprintf(&line[6], "%08x", i); line[14] = ' ';
                    103: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.