home *** CD-ROM | disk | FTP | other *** search
-
- /* error messages from EP */
-
- #include <bdscio.h>
- /*#include <hardware.h>*/
-
- #include <ep.def>
- /*#include <fget.c>*/
-
- #define er val['E'-'@']['R'-'@']
-
- /*#define BSTKSIZE 60*/
-
- #define PTCH(C) bios(5,C)
- #define PTESCCH(C) bios(5,ESC); bios(5,C)
-
- #include <ep.dcl>
-
- union ptr
- { unsigned u;
- unsigned *w;
- char *b;
- };
-
-
- main(argc,argv)
- char **argv;
- { int i;
-
- printf("\n\n** Error #%d **\n", errcode);
-
- /* printf("[%s] [%s]", argv[1], argv[2]);*/
-
- switch (errcode)
-
- {
- case 0: printf("There was no error"); break;
- case 8: printf("File nesting exceeded 7 levels with %s",fnbuf);break;
- case 110: printf("Imbed file %s not found", fnbuf); break;
- case 111: printf("Insufficent memory for font"); break;
- case 112: printf("Can't read some font"); break;
- case 113: printf("Couldn't find file EP.INI on default drive");
- break;
- case 114: printf("Defective file EP.INI"); break;
- case 115:
- case 116:
- case 117: printf("Couldn't save EP.INn"); break;
- case 120:
- case 121:
- case 122:
- case 123:
- case 124:
- case 125:
- case 126: if (ftname[errcode-120][0] & 0x80)
- printf("Picture %s.BTP not found", ftname[errcode-120]);
- else
- printf("Font %s.FN2 not found", ftname[errcode-120]);
- break;
- case 130:
- case 131:
- case 132:
- case 133:
- case 134:
- case 135:
- case 136: if (ftname[errcode-130][0] & 0x80)
- printf("Picture %s.BTP not found", ftname[errcode-120]);
- else
- printf("Defective font %s.FN2",ftname[errcode-130]);
- break;
- case 146: printf("Can't understand expression");
- break;
- case 148: printf("Unattached font number");
- break;
- case 149: printf("Font number too large");
- break;
- case 150: printf("String nesting exceeded %d", MAXSNEST);
- break;
- case 151: printf("String reference occurred in macro argument");
- break;
- case 300: printf("Exit due to \\error command with n = %d\n%s",
- er, inbuf+inpoint);
- break;
-
-
- default: printf("The error is of an unknown type");
- break;
- }
-
-
- if (errcode != 300)
- { printf(".\n\n");
- printf("Current input line was\n%s", inbuf);
- for (i=0; i<inpoint; i++) putchar(' ');
- printf("^\n\n");
- }
-
- /* showmem(); */
-
- dispm(argv[1]);
- }
-
- /*
- showmem()
- { printf("codend %5x, externs %5x\n",codend(),externs());
- printf("font 1 %5x, font 2 %5x\n",ftp[0] ,ftp[1]);
- printf("font 3 %5x\n",ftp[2]);
- printf("val %5x, modelen %5x\n",val ,modelen);
- printf("endext %5x, topofmem%5x\n",endext(),topofmem());
- }
- */
-
- dispm(mtext)
- char *mtext;
- { char wdrf, s[30], cmmnd, lcmmnd;
- union ptr loc;
-
- printf("\n\n Ready to examine variable values:\n");
- printf(" ^C to exit e to edit ? for info\n\n");
-
- loc.u = externs();
- wdrf = FALSE;
- lcmmnd = 0;
-
- while(1)
- {
- if (wdrf) printf("%04x(%04xH=%5d)*", loc.u, *loc.w, *loc.w);
- else printf("%04x(%02xH=%c)*", loc.u, *loc.b,
- (*loc.b>=' ' && *loc.b<0x80)? *loc.b: '.');
-
- gets(s); cmmnd = toupper(s[0]);
-
- if (!cmmnd && lcmmnd == 'D') cmmnd = 'D';
-
- if (!cmmnd) { loc.u++; if (wdrf) loc.u++; }
-
- else switch(cmmnd)
- {
- case '@': sscanf(s+1, "%x", &loc.u);
- break;
- case 'W': wdrf = TRUE;
- break;
- case 'B': wdrf = FALSE;
- break;
- case 0x27:
- case '/': loc.u = lookup(s+1, &wdrf);
- break;
- case '\\':
- case 'C': loc.u = &val[cctr(s[1])-'@'][cctr(s[2])-'@'];
- wdrf = TRUE;
- break;
- case 'T': loc.u = &valtp[cctr(s[1])-'@'][cctr(s[2])-'@'];
- wdrf = FALSE;
- break;
- case 'D': dump(loc.u, wdrf);
- loc.u += wdrf? 32 : 26;
- break;
- case '?': info();
- break;
- case 'Y': sinfo();
- break;
- case 'E': if (s[1]) execl(editname,s+1,0);
- else execl(editname,mtext,0);
- printf("\nCan't find %s.com\n",editname);
- break;
- case 'L': loadi(); printf("Loaded.\n");
- break;
- case 'S': savei(); printf("Saved.\n");
- break;
- case '=': if (wdrf) *loc.w = patval(s+1);
- else *loc.b = patval(s+1);
- break;
- case '$': strcpy(editname, s+1);
- break;
-
- default: printf(" ??\n"); info();
- break;
- }
- lcmmnd = cmmnd;
- }
- }
-
- patval(ns)
- char *ns;
- { unsigned pnum;
- char ntype;
-
- ntype = toupper(ns[strlen(ns)]);
-
- if (!isdigit(ns[0])) return(ns[0]);
-
- switch (ntype)
- {
- case 'H': sscanf(ns,"%x", &pnum);
- break;
-
- case 'O': sscanf(ns,"%o", &pnum);
- break;
-
- default: sscanf(ns,"%d", &pnum);
- break;
- }
-
- return (pnum);
- }
-
- cctr(c)
- char c;
- { return ( (c == '$')? '@' : toupper(c));
- }
-
-
- lookup(sym, wd)
- char *sym, *wd;
- { char *adr;
-
- adr = 0;
-
- if (!strcmp(sym, "outbuf")) {adr = outbuf; *wd = FALSE;}
- else if (!strcmp(sym, "inbuf")) {adr = inbuf; *wd = FALSE;}
- else if (!strcmp(sym, "attrbuf")) {adr = attrbuf; *wd = TRUE;}
- else if (!strcmp(sym, "widbuf")) {adr = widbuf; *wd = TRUE;}
- else if (!strcmp(sym, "ftp")) {adr = ftp; *wd = TRUE;}
- else if (!strcmp(sym, "fix")) {adr = fix; *wd = TRUE;}
- else if (!strcmp(sym, "ftlen")) {adr = ftlen; *wd = FALSE;}
- else if (!strcmp(sym, "ftname")) {adr = ftname; *wd = FALSE;}
- else if (!strcmp(sym, "brcstk")) {adr = brcstk; *wd = TRUE;}
- else if (!strcmp(sym, "brcpt")) {adr = brcpt; *wd = TRUE;}
- else if (!strcmp(sym, "lindent")) {adr = lindent; *wd = TRUE;}
- else if (!strcmp(sym,"vposition")) {adr =&vposition;*wd = TRUE;}
- else if (!strcmp(sym, "skdots")) {adr = &skdots; *wd = TRUE;}
-
- return(adr);
- }
-
- dump(loc, wdrf)
- union ptr loc;
- char wdrf;
- { int i;
-
- if (wdrf)
- { for (i = 0; i < 16; i++,loc.w++) printf(" %04x", *loc.w);
- }
- else
- { for (i = 0; i < 26; i++) printf(" %02x", *(loc.b+i));
- printf("\n");
- for (i = 0; i < 26; i++, loc.b++) printf(" %c",
- (*loc.b>=' ' && *loc.b<0x80)? *loc.b: '.');
- }
-
- printf("\n");
- }
-
- sinfo()
- { printf("\n List of symbols I know:\n\n");
- printf( " outbuf: output line\n");
- printf( " inbuf: input line\n");
- printf( "attrbuf: print modes for output line characters\n");
- printf( " widbuf: widths for output line characters\n");
- printf( " ftp: addresses of fonts' character data\n");
- printf( " fix: font character directories\n");
- printf( " ftlen: font character widths\n");
- printf( " ftname: names of fonts\n");
- printf( " brcstk: stack for print modes\n");
- printf( " brcpt: stack pointers for above\n");
- printf( "lindent: left indents for each column\n");
- printf( "vposition: vertical position on page\n");
- printf( " skdots: accumulated vertical change\n\n");
- }
-
- info()
- { printf("\n Examining external values:\n\n");
- printf(" ^C to exit\n");
- printf(" CR - memory at next address, or dump more\n");
- printf(" @<hex number> - memory at this address\n");
- printf(" b - bytes\n");
- printf(" w - words\n");
- printf(" d - dump\n");
- printf(" '<symbol> - memory for this variable ( or /)\n");
- printf(" y - sYmbol list\n");
- printf(" \\<let><let> - value of command variable (or c)\n");
- printf(" t<let><let> - type of command variable\n");
- printf(" e<file> - call %s.com to edit it (opt. file)\n",
- editname);
- printf(" =<number> - patch in new value\n");
- printf(" $<file> - patch in new name for editor; no ext\n");
- printf(" l - load EP.INI\n");
- printf(" s - save EP.INI\n");
- printf("\n");
-
- }
-
- /************************************************/
- /* Load initialization data */
- /************************************************/
- loadi()
- { int fd;
-
-
- if ((fd = open("ep.ini",0)) == ERROR)
- {printf("Can't find EP.INI\n"); return;}
- if (read(fd, val, 21) != 21)
- {printf("Something wrong with file EP.INI\n"); return;}
- fabort(fd);
-
- }
-
-
- /************************************************/
- /* Save current values as new initialization data*/
- /* (not used now) */
- /************************************************/
- savei()
- { int fd;
-
- if ((fd = creat("ep.ini",1)) == ERROR)
- {printf("Couldn't create a new EP.INI\n"); return; }
- if (write(fd, val, 21) != 21)
- {printf("Couldn't finish making the new EP.INI\n");
- return; }
- if (close(fd) == ERROR)
- {printf("Couldn't put EP.INI in disk directory\n");
- return; }
- }
-