Annotation of cci/d/macro4/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[13];
                     12:         long    value;
                     13: }       symbol[NSYM];
                     14: 
                     15:         long    basevalue, knownstart;
                     16:         char    lastsymbol[13];
                     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<13; j++) lastsymbol[j] = '\0';
                     73:                 while (line[i] != ':' && line[i] != '\0' 
                     74:                         && line[i] != '\n' && place<13 ) 
                     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.