home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / programs / list / ep-misc.ark / EPERROR.C < prev    next >
Text File  |  1988-05-21  |  8KB  |  325 lines

  1.  
  2. /* error messages from EP    */
  3.  
  4. #include <bdscio.h>
  5. /*#include <hardware.h>*/
  6.  
  7. #include <ep.def>
  8. /*#include <fget.c>*/
  9.  
  10. #define er val['E'-'@']['R'-'@']
  11.  
  12. /*#define BSTKSIZE    60*/
  13.  
  14. #define    PTCH(C)        bios(5,C)
  15. #define    PTESCCH(C)    bios(5,ESC); bios(5,C)
  16.  
  17. #include <ep.dcl>
  18.  
  19. union ptr
  20. {    unsigned u;
  21.     unsigned *w;
  22.     char *b;
  23. };
  24.  
  25.  
  26. main(argc,argv)
  27. char **argv;
  28. {    int i;
  29.  
  30.     printf("\n\n** Error #%d **\n", errcode);
  31.  
  32. /*    printf("[%s] [%s]", argv[1], argv[2]);*/
  33.  
  34.     switch (errcode)
  35.  
  36.     {
  37.     case   0: printf("There was no error");        break;
  38.     case   8: printf("File nesting exceeded 7 levels with %s",fnbuf);break;
  39.     case 110: printf("Imbed file %s not found", fnbuf);    break;
  40.     case 111: printf("Insufficent memory for font");    break;
  41.     case 112: printf("Can't read some font");        break;
  42.     case 113: printf("Couldn't find file EP.INI on default drive");
  43.         break;
  44.     case 114: printf("Defective file EP.INI");        break;
  45.     case 115:
  46.     case 116:
  47.     case 117: printf("Couldn't save EP.INn");        break;
  48.     case 120:
  49.     case 121:
  50.     case 122:
  51.     case 123:
  52.     case 124:
  53.     case 125:
  54.     case 126: if (ftname[errcode-120][0] & 0x80)
  55.           printf("Picture %s.BTP not found", ftname[errcode-120]);
  56.           else
  57.           printf("Font %s.FN2 not found", ftname[errcode-120]);
  58.           break;
  59.     case 130:
  60.     case 131:
  61.     case 132:
  62.     case 133:
  63.     case 134:
  64.     case 135:
  65.     case 136: if (ftname[errcode-130][0] & 0x80)
  66.           printf("Picture %s.BTP not found", ftname[errcode-120]);
  67.           else
  68.           printf("Defective font %s.FN2",ftname[errcode-130]);
  69.           break;
  70.     case 146: printf("Can't understand expression");
  71.           break;
  72.     case 148: printf("Unattached font number");
  73.           break;
  74.     case 149: printf("Font number too large");
  75.           break;
  76.     case 150: printf("String nesting exceeded %d", MAXSNEST);
  77.           break;
  78.     case 151: printf("String reference occurred in macro argument");
  79.           break;
  80.     case 300: printf("Exit due to \\error command with n = %d\n%s",
  81.                 er, inbuf+inpoint);
  82.           break;
  83.  
  84.  
  85.     default: printf("The error is of an unknown type");
  86.           break;
  87.     }
  88.  
  89.  
  90.     if (errcode != 300)
  91.     {    printf(".\n\n");
  92.         printf("Current input line was\n%s", inbuf);
  93.         for (i=0; i<inpoint; i++) putchar(' ');
  94.         printf("^\n\n");
  95.     }
  96.  
  97. /*    showmem(); */
  98.  
  99.     dispm(argv[1]);
  100. }
  101.  
  102. /*
  103. showmem()
  104. {    printf("codend %5x, externs %5x\n",codend(),externs());
  105.     printf("font 1 %5x, font 2  %5x\n",ftp[0]  ,ftp[1]);
  106.     printf("font 3 %5x\n",ftp[2]);
  107.     printf("val    %5x, modelen %5x\n",val     ,modelen);
  108.     printf("endext %5x, topofmem%5x\n",endext(),topofmem());
  109. }
  110. */
  111.  
  112. dispm(mtext)
  113. char *mtext;
  114. {    char wdrf, s[30], cmmnd, lcmmnd;
  115.     union ptr loc;
  116.  
  117.     printf("\n\n    Ready to examine variable values:\n");
  118.     printf("  ^C to exit     e to edit    ? for info\n\n");
  119.  
  120.   loc.u = externs();
  121.   wdrf = FALSE;
  122.   lcmmnd = 0;
  123.  
  124.   while(1)
  125.   {    
  126.     if (wdrf) printf("%04x(%04xH=%5d)*",    loc.u, *loc.w, *loc.w);
  127.     else      printf("%04x(%02xH=%c)*", loc.u, *loc.b,
  128.              (*loc.b>=' ' && *loc.b<0x80)? *loc.b: '.');
  129.  
  130.     gets(s); cmmnd = toupper(s[0]);
  131.  
  132.     if (!cmmnd && lcmmnd == 'D') cmmnd = 'D';
  133.  
  134.     if (!cmmnd) { loc.u++; if (wdrf) loc.u++; }
  135.  
  136.     else switch(cmmnd)
  137.     {
  138.     case '@': sscanf(s+1, "%x", &loc.u);
  139.         break;
  140.     case 'W': wdrf = TRUE;
  141.         break;
  142.     case 'B': wdrf = FALSE;
  143.         break;
  144.     case 0x27:
  145.     case '/': loc.u = lookup(s+1, &wdrf);
  146.         break;
  147.     case '\\':
  148.     case 'C': loc.u = &val[cctr(s[1])-'@'][cctr(s[2])-'@'];
  149.           wdrf = TRUE;
  150.         break;
  151.     case 'T': loc.u = &valtp[cctr(s[1])-'@'][cctr(s[2])-'@'];
  152.           wdrf = FALSE;
  153.         break;
  154.     case 'D': dump(loc.u, wdrf);
  155.           loc.u += wdrf? 32 : 26;
  156.         break;
  157.     case '?': info();
  158.         break;
  159.     case 'Y': sinfo();
  160.         break;
  161.     case 'E': if (s[1]) execl(editname,s+1,0);
  162.           else execl(editname,mtext,0);
  163.           printf("\nCan't find %s.com\n",editname);
  164.         break;
  165.     case 'L': loadi(); printf("Loaded.\n");
  166.         break;
  167.     case 'S': savei(); printf("Saved.\n");
  168.         break;
  169.     case '=': if (wdrf) *loc.w = patval(s+1);
  170.           else *loc.b = patval(s+1);
  171.         break;
  172.     case '$': strcpy(editname, s+1);
  173.         break;
  174.  
  175.     default:  printf(" ??\n"); info();
  176.         break;
  177.     }
  178.   lcmmnd = cmmnd;
  179.   }
  180. }
  181.  
  182. patval(ns)
  183. char *ns;
  184. {    unsigned pnum;
  185.     char ntype;
  186.  
  187.     ntype = toupper(ns[strlen(ns)]);
  188.  
  189.     if (!isdigit(ns[0])) return(ns[0]);
  190.  
  191.     switch (ntype)
  192.     {
  193.     case 'H': sscanf(ns,"%x", &pnum);
  194.         break;
  195.  
  196.     case 'O': sscanf(ns,"%o", &pnum);
  197.         break;
  198.  
  199.     default: sscanf(ns,"%d", &pnum);
  200.         break;
  201.     }
  202.  
  203.     return (pnum);
  204. }
  205.  
  206. cctr(c)
  207. char c;
  208. {    return ( (c == '$')? '@' : toupper(c));
  209. }
  210.  
  211.  
  212. lookup(sym, wd)
  213. char *sym, *wd;
  214. {    char *adr;
  215.  
  216.     adr = 0;
  217.  
  218.          if (!strcmp(sym,  "outbuf")) {adr = outbuf;  *wd = FALSE;}
  219.     else if (!strcmp(sym,   "inbuf")) {adr = inbuf;   *wd = FALSE;}
  220.     else if (!strcmp(sym, "attrbuf")) {adr = attrbuf; *wd = TRUE;}
  221.     else if (!strcmp(sym,  "widbuf")) {adr = widbuf;  *wd = TRUE;}
  222.     else if (!strcmp(sym,     "ftp")) {adr = ftp;     *wd = TRUE;}
  223.     else if (!strcmp(sym,     "fix")) {adr = fix;     *wd = TRUE;}
  224.     else if (!strcmp(sym,   "ftlen")) {adr = ftlen;   *wd = FALSE;}
  225.     else if (!strcmp(sym,  "ftname")) {adr = ftname;  *wd = FALSE;}
  226.     else if (!strcmp(sym,  "brcstk")) {adr = brcstk;  *wd = TRUE;}
  227.     else if (!strcmp(sym,   "brcpt")) {adr = brcpt;   *wd = TRUE;}
  228.     else if (!strcmp(sym, "lindent")) {adr = lindent; *wd = TRUE;}
  229.     else if (!strcmp(sym,"vposition")) {adr =&vposition;*wd = TRUE;}
  230.     else if (!strcmp(sym,  "skdots")) {adr = &skdots;  *wd = TRUE;}
  231.  
  232.     return(adr);
  233. }
  234.  
  235. dump(loc, wdrf)
  236. union ptr loc;
  237. char wdrf;
  238. {    int i;
  239.  
  240.     if (wdrf)
  241.     {    for (i = 0; i < 16; i++,loc.w++) printf(" %04x", *loc.w);
  242.     }
  243.     else
  244.     {    for (i = 0; i < 26; i++) printf(" %02x", *(loc.b+i));
  245.         printf("\n");
  246.         for (i = 0; i < 26; i++, loc.b++) printf("  %c",
  247.              (*loc.b>=' ' && *loc.b<0x80)? *loc.b: '.');
  248.     }
  249.  
  250.     printf("\n");
  251. }
  252.  
  253. sinfo()
  254. {    printf("\n    List of symbols I know:\n\n");
  255.     printf( " outbuf: output line\n");
  256.     printf( "  inbuf: input line\n");
  257.     printf( "attrbuf: print modes for output line characters\n");
  258.     printf( " widbuf: widths for output line characters\n");
  259.     printf( "    ftp: addresses of fonts' character data\n");
  260.     printf( "    fix: font character directories\n");
  261.     printf( "  ftlen: font character widths\n");
  262.     printf( " ftname: names of fonts\n");
  263.     printf( " brcstk: stack for print modes\n");
  264.     printf( "  brcpt: stack pointers for above\n");
  265.     printf( "lindent: left indents for each column\n");
  266.     printf( "vposition: vertical position on page\n");
  267.     printf( " skdots: accumulated vertical change\n\n");
  268. }
  269.  
  270. info()
  271. {    printf("\n    Examining external values:\n\n");
  272.     printf(" ^C to exit\n");
  273.     printf(" CR            - memory at next address, or dump more\n");
  274.     printf(" @<hex number> - memory at this address\n");
  275.     printf(" b             - bytes\n");
  276.     printf(" w             - words\n");
  277.     printf(" d             - dump\n");
  278.     printf(" '<symbol>     - memory for this variable ( or /)\n");
  279.     printf(" y             - sYmbol list\n");
  280.     printf(" \\<let><let>   - value of command variable (or c)\n");
  281.     printf(" t<let><let>   - type of command variable\n");
  282.     printf(" e<file>       - call %s.com to edit it (opt. file)\n",
  283.                     editname);
  284.     printf(" =<number>     - patch in new value\n");
  285.     printf(" $<file>       - patch in new name for editor; no ext\n");
  286.     printf(" l             - load EP.INI\n");
  287.     printf(" s             - save EP.INI\n");
  288.     printf("\n");
  289.  
  290. }
  291.  
  292. /************************************************/
  293. /* Load initialization data            */
  294. /************************************************/
  295. loadi()
  296. {    int fd;
  297.  
  298.  
  299.     if ((fd = open("ep.ini",0)) == ERROR)
  300.         {printf("Can't find EP.INI\n"); return;}
  301.     if (read(fd, val, 21) != 21)
  302.         {printf("Something wrong with file EP.INI\n"); return;}
  303.     fabort(fd);
  304.  
  305. }
  306.  
  307.  
  308. /************************************************/
  309. /* Save current values as new initialization data*/
  310. /*    (not used now)                */
  311. /************************************************/
  312. savei()
  313. {    int fd;
  314.  
  315.     if ((fd = creat("ep.ini",1)) == ERROR)
  316.         {printf("Couldn't create a new EP.INI\n"); return; }
  317.     if (write(fd, val, 21) != 21)
  318.         {printf("Couldn't finish making the new EP.INI\n");
  319.          return; }
  320.     if (close(fd) == ERROR)
  321.         {printf("Couldn't put EP.INI in disk directory\n");
  322.          return; }
  323. }
  324.  
  325.