home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / utils / asmutl / smmaclnk.ark / SEEREL.C < prev    next >
Text File  |  1987-09-10  |  3KB  |  107 lines

  1. /*
  2. ** seerel -- show REL items
  3. */
  4. #include <stdio.h>
  5. #include "rel.h"
  6. int lc, width;
  7. /*
  8. ** display REL item
  9. ** on call:
  10. **    item = item code
  11. **    type = type of field
  12. **   field = value of field
  13. **  symbol = symbol name
  14. */
  15. seerel() {
  16.   char str[6]; int tmp;
  17.   switch(item) {
  18.     case    ABS: see8(field, ' '); lc += 1; newlin(NO); return;
  19.     case   PREL:
  20.     case   DREL:
  21.     case   CREL: see16(); lc += 2; newlin(NO); return;
  22.     case  XMOFF:
  23.     case  XPOFF: tmp = type; type = item; see16();
  24.          type = tmp; newlin(NO); return;
  25.     case  ENAME: seenam("     entry: ", NO); goto eol;
  26.     case  CNAME: seenam("    common: ", NO); goto eol;
  27.     case  PNAME: fputc('\n', stdout);
  28.          seenam("-  program: ", NO);
  29.          lc = 0;
  30.          goto eol;
  31.     case  LNAME: seenam("   library: ", NO); goto eol;
  32.     case    EXT: fputs("extension link item\n", stdout); return;
  33.  
  34.     case  CSIZE: seenam(" common sz: ", YES); goto eol;
  35.     case XCHAIN: seenam(" ext chain: ", YES); goto eol;
  36.     case EPOINT: seenam("  entry pt: ", YES); goto eol;
  37.  
  38.     case  DSIZE:  fputs(" data size: ", stdout); goto fld;
  39.     case  SETLC:  fputs("   load at: ", stdout); lc = field; goto fld;
  40.     case  CHAIN:  fputs(" ld chn at: ", stdout); goto fld;
  41.     case  PSIZE:  fputs(" prog size: ", stdout); goto fld;
  42.     case  EPROG:  fputs("- end prog: ", stdout); goto fld;
  43.     case  EFILE:  fputs("- end file", stdout); goto eol;
  44.         fld: see16();
  45.         eol: newlin(YES);
  46.              return;
  47.     }
  48.   itou(item, str, 6); fputs(str, stdout);
  49.   fputs(" is an Unknown Item Code\n", stdout);
  50.   }
  51.  
  52. see8(value, suff) int value, suff; {    /* display 8-bits */
  53.   char str[5];
  54.   if(width == 0 && item < CREL) {    /* need loc ctr pref */
  55.     itox(lc, str, 5);
  56.     outz(str);                /* output loc ctr */
  57.     fputc(' ', stdout);            /* output spacer */
  58.     }
  59.   itox(value & 255, str, 3);        /* convert to hex string */
  60.   outz(str);                /* output hex byte */
  61.   if(suff) fputc(suff, stdout);        /* output suffix? */
  62.   ++width;                /* bump line width */
  63.   }
  64.  
  65. see16() {                /* display field */
  66.   see8(field >> 8, 0);            /* display high byte */
  67.   see8(field, xtype());            /* display low byte & type */
  68.   fputc(' ', stdout);            /* output spacer */
  69.   }
  70.  
  71. seenam(pref, val) char *pref; int val; {    /* display symbol */
  72.   newlin(YES);
  73.   width = 1;                /* avoid address prefix */
  74.   fputs(pref,    stdout);
  75.   if(val) see16();            /* output a value */
  76.   fputs(symbol,  stdout);
  77.   }
  78.  
  79. xtype() {
  80.   switch(type) {
  81.     case   ABS: return(' ');
  82.     case  PREL: return('\'');
  83.     case  DREL: return('\"');
  84.     case  CREL: return('~');
  85.     case XPOFF: return('+');
  86.     case XMOFF: return('-');
  87.     }
  88.   return('?');
  89.   }
  90.  
  91. newlin(nl) int nl; {        /* decide about new line */
  92.   if(width > 15 || (nl && width)) {
  93.     fputc('\n', stdout);
  94.     width = 0;
  95.     }
  96.   }  
  97.  
  98. outz(str) char *str; {        /* zero fill and output str */
  99.   char *cp;
  100.   cp = str;
  101.   while(*cp == ' ') *cp++ = '0';    /* supply leading zeros */
  102.   fputs(str,  stdout);
  103.   }
  104. ut str */
  105.   char *cp;
  106.   cp = str;
  107.   while(*cp ==