home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / mbug / mbug103.arc / SEEREL.C < prev    next >
Text File  |  1979-12-31  |  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.  
  26.     case  ENAME: seenam("     entry: ", NO); goto eol;
  27.     case  CNAME: seenam("    common: ", NO); goto eol;
  28.     case  PNAME: fputc('\n', stdout); 
  29.                  seenam("-  program: ", NO);
  30.                  lc = 0;
  31.                  goto eol;
  32.     case  LNAME: seenam("   library: ", NO); goto eol;
  33.     case    EXT: fputs("extension link item\n", stdout); return;
  34.  
  35.     case  CSIZE: seenam(" common sz: ", YES); goto eol;
  36.     case XCHAIN: seenam(" ext chain: ", YES); goto eol;
  37.     case EPOINT: seenam("  entry pt: ", YES); goto eol;
  38.  
  39.     case  DSIZE:  fputs(" data size: ", stdout); goto fld;
  40.     case  SETLC:  fputs("   load at: ", stdout); lc = field; goto fld;
  41.     case  CHAIN:  fputs(" ld chn at: ", stdout); goto fld;
  42.     case  PSIZE:  fputs(" prog size: ", stdout); goto fld;
  43.  
  44.     case  EPROG:  fputs("- end prog: ", stdout); goto fld;
  45.     case  EFILE:  fputs("- end file", stdout);   goto eol;
  46.  
  47.             fld: see16();
  48.             eol: newlin(YES);
  49.                  return;
  50.     }
  51.   itou(item, str, 6); fputs(str,  stdout);
  52.   fputs(" is an Unknown Item Code\n", stdout);
  53.   }
  54.  
  55. see8(value, suff) int value, suff; {    /* display 8-bits */
  56.   char str[5];
  57.   if(width == 0 && item < CREL) {    /* need loc ctr pref */
  58.     itox(lc, str, 5);
  59.     outz(str);                /* output loc ctr */
  60.     fputc(' ', stdout);            /* output spacer */
  61.     }
  62.   itox(value & 255, str, 3);        /* convert to hex string */
  63.   outz(str);                /* output hex byte */
  64.   if(suff) fputc(suff, stdout);        /* output suffix? */
  65.   ++width;                /* bump line width */
  66.   }
  67.  
  68. see16() {                /* display field */
  69.   see8(field >> 8, 0);            /* display high byte  */
  70.   see8(field, xtype());            /* display low byte & type */
  71.   fputc(' ', stdout);            /* output spacer */
  72.   }
  73.  
  74. seenam(pref, val) char *pref; int val; {/* display symbol */
  75.   newlin(YES);
  76.   width = 1;                /* avoid address prefix */
  77.   fputs(pref,    stdout);
  78.   if(val) see16();            /* output a value */
  79.   fputs(symbol,  stdout);
  80.   }
  81.  
  82. xtype() {
  83.   switch(type) {
  84.     case   ABS: return(' ');
  85.     case  PREL: return('\'');
  86.     case  DREL: return('\"');
  87.     case  CREL: return('~');
  88.     case XPOFF: return('+');
  89.     case XMOFF: return('-');
  90.     }
  91.   return('?');
  92.   }
  93.  
  94. newlin(nl) int nl; {            /* decide about new line */
  95.   if(width > 15 || (nl && width)) {
  96.     fputc('\n', stdout);
  97.     width = 0;
  98.     }
  99.   }
  100.  
  101. outz(str) char *str; {            /* zero fill and output str */
  102.   char *cp;
  103.   cp = str;
  104.   while(*cp == ' ') *cp++ = '0';    /* supply leading zeroes */
  105.   fputs(str,  stdout);
  106.   }
  107.