`8TLC\p NuIMMUNIZED WITH UVK 5.5; NO VIRUS!!puke'(*** O`  @`! #@%`')+-/1 3@5`9;=?A OE`GIKMOQ S@U`WY[]_a c@e`gikmo/s@u`wy{} @` O ` @ o  @ o @ ` ǀ ɠ @ ` ׀ ٠  Oo O`!Ao !Aa!!#A%a')+-/1!3A5a79;=?A!CAEaGIKMOQ!SAUaWY[]_a!cAeagikmoq!sAuawy{}!Aa!Aa!A!Ao!Aaǁɡ!Aaׁ١!Aa!Aa " B b  !"!B!b!!!!!"!""#B"%")"+"-"/#1"#3B#5b#7#9#;#=#?$/$O`  @`! #@%`')+-/1 3@5`9;=?A OE`GIKMOQ S@U`WY[]_a c@e`gikmo/s@u`wy{} @` O ` @ o  @ o @ ` ǀ ɠ @ ` ׀ ٠  Oo O`!Ao !Aa!!#A%a')+-/1!3A5a79;=?A!CAEaGIKMOQ!SAUaWY[]_a!cAeagikmoq!sAuawy{}!Aa!Aa!A!Ao!Aaǁɡ!Aaׁ١!Aa!Aa " B b  !"!B!b!!!!!"!""#B"%")"+"-"/#1"#3B#5b#7#9#;#=#?$/$OK_CREW_93 %!CPXBASIC 5!DELMPAIN a!EDHAK301 q!RISKPLAY !&EAD_ME TXT sC. 6!.. BASIC C BASIC DOC i7).BASIC000CPX )CBASIC030CPX Cq(COPYING 7GCPXBASICTXT  CPXMAINSS X]CPXSTARTS cCPX_BIOSS }CPX_IO C x}CPX_MAINC nqFONT8X8 S ƩGLO H |P2C H 7P2CLIB C GPROTO H ,ST_BASICPRJ  }TT_BASICPRJ  XCONTROLH  !/* Output from p2c, the Pascal-to-C translator */ /* From input file "dist/examples/basic.p" */ #include #include #include "glo.h" int FPRINTF( FILE *f, char *string, ...) { int r; va_list arg; va_start(arg, string); if(f==stdout) VPrintf(string,arg); else r=vfprintf(f,string,arg); va_end(arg); return r; } int PUTC(int ch, FILE *f) { if(f==stdout) Printf("%c",(BYTE)ch); else return putc(ch,f); } int FPUTS(char *string, FILE *f) { if(f==stdout) Printf(string); else return fputs(string,f); } #define checking true #define varnamelen 20 #define maxdims 4 typedef Char varnamestring[varnamelen + 1]; typedef Char string255[256]; #define tokvar 0 #define toknum 1 #define tokstr 2 #define toksnerr 3 #define tokplus 4 #define tokminus 5 #define toktimes 6 #define tokdiv 7 #define tokup 8 #define toklp 9 #define tokrp 10 #define tokcomma 11 #define toksemi 12 #define tokcolon 13 #define tokeq 14 #define toklt 15 #define tokgt 16 #define tokle 17 #define tokge 18 #define tokne 19 #define tokand 20 #define tokor 21 #define tokxor 22 #define tokmod 23 #define toknot 24 #define toksqr 25 #define toksqrt 26 #define toksin 27 #define tokcos 28 #define toktan 29 #define tokarctan 30 #define toklog 31 #define tokexp 32 #define tokabs 33 #define toksgn 34 #define tokstr_ 35 #define tokval 36 #define tokchr_ 37 #define tokasc 38 #define toklen 39 #define tokmid_ 40 #define tokpeek 41 #define tokrem 42 #define toklet 43 #define tokprint 44 #define tokinput 45 #define tokgoto 46 #define tokif 47 #define tokend 48 #define tokstop 49 #define tokfor 50 #define toknext 51 #define tokwhile 52 #define tokwend 53 #define tokgosub 54 #define tokreturn 55 #define tokread 56 #define tokdata 57 #define tokrestore 58 #define tokgotoxy 59 #define tokon 60 #define tokdim 61 #define tokpoke 62 #define toklist 63 #define tokrun 64 #define toknew 65 #define tokload 66 #define tokmerge 67 #define toksave 68 #define tokbye 69 #define tokdel 70 #define tokrenum 71 #define tokthen 72 #define tokelse 73 #define tokto 74 #define tokstep 75 typedef double numarray[]; typedef Char *strarray[]; #define forloop 0 #define whileloop 1 #define gosubloop 2 typedef struct tokenrec { struct tokenrec *next; short kind; union { struct varrec *vp; double num; Char *sp; Char snch; } UU; } tokenrec; typedef struct linerec { long num, num2; tokenrec *txt; struct linerec *next; } linerec; typedef struct varrec { varnamestring name; struct varrec *next; long dims[maxdims]; char numdims; boolean stringvar; union { struct { double *arr; double *val, rv; } U0; struct { Char **sarr; Char **sval, *sv; } U1; } UU; } varrec; typedef struct valrec { boolean stringval; union { double val; Char *sval; } UU; } valrec; typedef struct looprec { struct looprec *next; linerec *homeline; tokenrec *hometok; short kind; union { struct { varrec *vp; double max, step; } U0; } UU; } looprec; Static Char *inbuf; Static linerec *linebase; Static varrec *varbase; Static looprec *loopbase; Static long curline; Static linerec *stmtline, *dataline; Static tokenrec *stmttok, *datatok, *buf; Static boolean exitflag; extern long EXCP_LINE; #include "proto.h" Static Void restoredata( Void ) { dataline = NULL; datatok = NULL; } Static Void clearloops( Void ) { looprec *l; while (loopbase != NULL) { l = loopbase->next; Free(loopbase); loopbase = l; } } Static long arraysize( varrec *v ) { long i, j, FORLIM; if (v->stringvar) j = 4; else j = 8; FORLIM = v->numdims; for (i = 0; i < FORLIM; i++) j *= v->dims[i]; return j; } Static Void clearvar( varrec *v ) { if (v->numdims != 0) Free(v->UU.U0.arr); else if (v->stringvar && v->UU.U1.sv != NULL) Free(v->UU.U1.sv); v->numdims = 0; if (v->stringvar) { v->UU.U1.sv = NULL; v->UU.U1.sval = &v->UU.U1.sv; } else { v->UU.U0.rv = 0.0; v->UU.U0.val = &v->UU.U0.rv; } } Static Void clearvars( Void ) { varrec *v; v = varbase; while (v != NULL) { clearvar(v); v = v->next; } } Static Char *numtostr( Char *Result, double n ) { string255 s; long i; s[255] = '\0'; if (n != 0 && fabs(n) < 1e-2 || fabs(n) >= 1e12) { sprintf(s, "% .5E", n); i = strlen(s) + 1; s[i - 1] = '\0'; /* p2c: dist/examples/basic.p, line 237: * Note: Modification of string length may translate incorrectly [146] */ return strcpy(Result, s); } else { sprintf(s, "%30.10f", n); i = strlen(s) + 1; do { i--; } while (s[i - 1] == '0'); if (s[i - 1] == '.') i--; s[i] = '\0'; /* p2c: dist/examples/basic.p, line 248: * Note: Modification of string length may translate incorrectly [146] */ return strcpy(Result, strltrim(s)); } } #define toklength 20 typedef long chset[9]; Static Void parse( Char *inbuf, tokenrec **buf ) { long i, j, k; Char token[toklength + 1]; tokenrec *t, *tptr; varrec *v; Char ch; double n, d, d1; BreakBASIC(); /* Zurck ins CPX */ tptr = NULL; *buf = NULL; i = 1; do { ch = ' '; while (i <= strlen(inbuf) && ch == ' ') { ch = inbuf[i - 1]; i++; } if (ch != ' ') { t = (tokenrec *)Malloc(sizeof(tokenrec)); if (tptr == NULL) *buf = t; else tptr->next = t; tptr = t; t->next = NULL; switch (ch) { case '"': case '\'': t->kind = tokstr; t->UU.sp = (Char *)Malloc(256); t->UU.sp[255] = '\0'; j = 0; while (i <= strlen(inbuf) && inbuf[i - 1] != ch) { j++; t->UU.sp[j - 1] = inbuf[i - 1]; i++; } t->UU.sp[j] = '\0'; /* p2c: dist/examples/basic.p, line 415: * Note: Modification of string length may translate incorrectly [146] */ i++; break; case '+': t->kind = tokplus; break; case '-': t->kind = tokminus; break; case '*': t->kind = toktimes; break; case '/': t->kind = tokdiv; break; case '^': t->kind = tokup; break; case '(': case '[': t->kind = toklp; break; case ')': case ']': t->kind = tokrp; break; case ',': t->kind = tokcomma; break; case ';': t->kind = toksemi; break; case ':': t->kind = tokcolon; break; case '?': t->kind = tokprint; break; case '=': t->kind = tokeq; break; case '<': if (i <= strlen(inbuf) && inbuf[i - 1] == '=') { t->kind = tokle; i++; } else if (i <= strlen(inbuf) && inbuf[i - 1] == '>') { t->kind = tokne; i++; } else t->kind = toklt; break; case '>': if (i <= strlen(inbuf) && inbuf[i - 1] == '=') { t->kind = tokge; i++; } else t->kind = tokgt; break; default: if (isalpha(ch)) { i--; j = 0; token[toklength] = '\0'; while (i <= strlen(inbuf) && (inbuf[i - 1] == '$' || inbuf[i - 1] == '_' || isalnum(inbuf[i - 1]))) { if (j < toklength) { j++; token[j - 1] = inbuf[i - 1]; } i++; } token[j] = '\0'; /* p2c: dist/examples/basic.p, line 309: * Note: Modification of string length may translate incorrectly [146] */ if (!strcmp(token, "and") || !strcmp(token, "AND")) t->kind = tokand; else if (!strcmp(token, "or") || !strcmp(token, "OR")) t->kind = tokor; else if (!strcmp(token, "xor") || !strcmp(token, "XOR")) t->kind = tokxor; else if (!strcmp(token, "not") || !strcmp(token, "NOT")) t->kind = toknot; else if (!strcmp(token, "mod") || !strcmp(token, "MOD")) t->kind = tokmod; else if (!strcmp(token, "sqr") || !strcmp(token, "SQR")) t->kind = toksqr; else if (!strcmp(token, "sqrt") || !strcmp(token, "SQRT")) t->kind = toksqrt; else if (!strcmp(token, "sin") || !strcmp(token, "SIN")) t->kind = toksin; else if (!strcmp(token, "cos") || !strcmp(token, "COS")) t->kind = tokcos; else if (!strcmp(token, "tan") || !strcmp(token, "TAN")) t->kind = toktan; else if (!strcmp(token, "arctan") || !strcmp(token, "ARCTAN")) t->kind = tokarctan; else if (!strcmp(token, "log") || !strcmp(token, "LOG")) t->kind = toklog; else if (!strcmp(token, "exp") || !strcmp(token, "EXP")) t->kind = tokexp; else if (!strcmp(token, "abs") || !strcmp(token, "ABS")) t->kind = tokabs; else if (!strcmp(token, "sgn") || !strcmp(token, "SGN")) t->kind = toksgn; else if (!strcmp(token, "str$") || !strcmp(token, "STR$")) t->kind = tokstr_; else if (!strcmp(token, "val") || !strcmp(token, "VAL")) t->kind = tokval; else if (!strcmp(token, "chr$") || !strcmp(token, "CHR$")) t->kind = tokchr_; else if (!strcmp(token, "asc") || !strcmp(token, "ASC")) t->kind = tokasc; else if (!strcmp(token, "len") || !strcmp(token, "LEN")) t->kind = toklen; else if (!strcmp(token, "mid$") || !strcmp(token, "MID$")) t->kind = tokmid_; else if (!strcmp(token, "peek") || !strcmp(token, "PEEK")) t->kind = tokpeek; else if (!strcmp(token, "let") || !strcmp(token, "LET")) t->kind = toklet; else if (!strcmp(token, "print") || !strcmp(token, "PRINT")) t->kind = tokprint; else if (!strcmp(token, "input") || !strcmp(token, "INPUT")) t->kind = tokinput; else if (!strcmp(token, "goto") || !strcmp(token, "GOTO")) t->kind = tokgoto; else if (!strcmp(token, "go to") || !strcmp(token, "GO TO")) t->kind = tokgoto; else if (!strcmp(token, "if") || !strcmp(token, "IF")) t->kind = tokif; else if (!strcmp(token, "end") || !strcmp(token, "END")) t->kind = tokend; else if (!strcmp(token, "stop") || !strcmp(token, "STOP")) t->kind = tokstop; else if (!strcmp(token, "for") || !strcmp(token, "FOR")) t->kind = tokfor; else if (!strcmp(token, "next") || !strcmp(token, "NEXT")) t->kind = toknext; else if (!strcmp(token, "while") || !strcmp(token, "WHILE")) t->kind = tokwhile; else if (!strcmp(token, "wend") || !strcmp(token, "WEND")) t->kind = tokwend; else if (!strcmp(token, "gosub") || !strcmp(token, "GOSUB")) t->kind = tokgosub; else if (!strcmp(token, "return") || !strcmp(token, "RETURN")) t->kind = tokreturn; else if (!strcmp(token, "read") || !strcmp(token, "READ")) t->kind = tokread; else if (!strcmp(token, "data") || !strcmp(token, "DATA")) t->kind = tokdata; else if (!strcmp(token, "restore") || !strcmp(token, "RESTORE")) t->kind = tokrestore; else if (!strcmp(token, "gotoxy") || !strcmp(token, "GOTOXY")) t->kind = tokgotoxy; else if (!strcmp(token, "on") || !strcmp(token, "ON")) t->kind = tokon; else if (!strcmp(token, "dim") || !strcmp(token, "DIM")) t->kind = tokdim; else if (!strcmp(token, "poke") || !strcmp(token, "POKE")) t->kind = tokpoke; else if (!strcmp(token, "list") || !strcmp(token, "LIST")) t->kind = toklist; else if (!strcmp(token, "run") || !strcmp(token, "RUN")) t->kind = tokrun; else if (!strcmp(token, "new") || !strcmp(token, "NEW")) t->kind = toknew; else if (!strcmp(token, "load") || !strcmp(token, "LOAD")) t->kind = tokload; else if (!strcmp(token, "merge") || !strcmp(token, "MERGE")) t->kind = tokmerge; else if (!strcmp(token, "save") || !strcmp(token, "SAVE")) t->kind = toksave; else if (!strcmp(token, "bye") || !strcmp(token, "BYE")) t->kind = tokbye; else if (!strcmp(token, "quit") || !strcmp(token, "QUIT")) t->kind = tokbye; else if (!strcmp(token, "del") || !strcmp(token, "DEL")) t->kind = tokdel; else if (!strcmp(token, "renum") || !strcmp(token, "RENUM")) t->kind = tokrenum; else if (!strcmp(token, "then") || !strcmp(token, "THEN")) t->kind = tokthen; else if (!strcmp(token, "else") || !strcmp(token, "ELSE")) t->kind = tokelse; else if (!strcmp(token, "to") || !strcmp(token, "TO")) t->kind = tokto; else if (!strcmp(token, "step") || !strcmp(token, "STEP")) t->kind = tokstep; else if (!strcmp(token, "rem") || !strcmp(token, "REM")) { t->kind = tokrem; t->UU.sp = (Char *)Malloc(256); sprintf(t->UU.sp, "%.*s", (int)(strlen(inbuf) - i + 1), inbuf + i - 1); i = strlen(inbuf) + 1; } else { t->kind = tokvar; v = varbase; while (v != NULL && strcmp(v->name, token)) v = v->next; if (v == NULL) { v = (varrec *)Malloc(sizeof(varrec)); v->next = varbase; varbase = v; strcpy(v->name, token); v->numdims = 0; if (token[strlen(token) - 1] == '$') { v->stringvar = true; v->UU.U1.sv = NULL; v->UU.U1.sval = &v->UU.U1.sv; } else { v->stringvar = false; v->UU.U0.rv = 0.0; v->UU.U0.val = &v->UU.U0.rv; } } t->UU.vp = v; } } else if (isdigit(ch) || ch == '.') { t->kind = toknum; n = 0.0; d = 1.0; d1 = 1.0; i--; while (i <= strlen(inbuf) && (isdigit(inbuf[i - 1]) || inbuf[i - 1] == '.' && d1 == 1)) { if (inbuf[i - 1] == '.') d1 = 10.0; else { n = n * 10 + inbuf[i - 1] - 48; d *= d1; } i++; } n /= d; if (i <= strlen(inbuf) && (inbuf[i - 1] == 'E' || inbuf[i - 1] == 'e')) { i++; d1 = 10.0; if (i <= strlen(inbuf) && (inbuf[i - 1] == '-' || inbuf[i - 1] == '+')) { if (inbuf[i - 1] == '-') d1 = 0.1; i++; } j = 0; while (i <= strlen(inbuf) && isdigit(inbuf[i - 1])) { j = j * 10 + inbuf[i - 1] - 48; i++; } for (k = 1; k <= j; k++) n *= d1; } t->UU.num = n; } else { t->kind = toksnerr; t->UU.snch = ch; } break; } } } while (i <= strlen(inbuf)); BreakBASIC(); } #undef toklength Static Void listtokens( FILE *f, tokenrec *buf ) { boolean ltr; Char STR1[256]; ltr = false; while (buf != NULL) { if ((long)buf->kind >= toknot && (long)buf->kind <= tokrenum || buf->kind == toknum || buf->kind == tokvar) { if (ltr) PUTC(' ', f); ltr = (buf->kind != toknot); } else ltr = false; switch (buf->kind) { case tokvar: FPUTS(buf->UU.vp->name, f); break; case toknum: FPUTS(numtostr(STR1, buf->UU.num), f); break; case tokstr: FPRINTF(f, "\"%s\"", buf->UU.sp); break; case toksnerr: FPRINTF(f, "{%c}", buf->UU.snch); break; case tokplus: PUTC('+', f); break; case tokminus: PUTC('-', f); break; case toktimes: PUTC('*', f); break; case tokdiv: PUTC('/', f); break; case tokup: PUTC('^', f); break; case toklp: PUTC('(', f); break; case tokrp: PUTC(')', f); break; case tokcomma: PUTC(',', f); break; case toksemi: PUTC(';', f); break; case tokcolon: FPRINTF(f, " : "); break; case tokeq: FPRINTF(f, " = "); break; case toklt: FPRINTF(f, " < "); break; case tokgt: FPRINTF(f, " > "); break; case tokle: FPRINTF(f, " <= "); break; case tokge: FPRINTF(f, " >= "); break; case tokne: FPRINTF(f, " <> "); break; case tokand: FPRINTF(f, " AND "); break; case tokor: FPRINTF(f, " OR "); break; case tokxor: FPRINTF(f, " XOR "); break; case tokmod: FPRINTF(f, " MOD "); break; case toknot: FPRINTF(f, "NOT "); break; case toksqr: FPRINTF(f, "SQR"); break; case toksqrt: FPRINTF(f, "SQRT"); break; case toksin: FPRINTF(f, "SIN"); break; case tokcos: FPRINTF(f, "COS"); break; case toktan: FPRINTF(f, "TAN"); break; case tokarctan: FPRINTF(f, "ARCTAN"); break; case toklog: FPRINTF(f, "LOG"); break; case tokexp: FPRINTF(f, "EXP"); break; case tokabs: FPRINTF(f, "ABS"); break; case toksgn: FPRINTF(f, "SGN"); break; case tokstr_: FPRINTF(f, "STR$"); break; case tokval: FPRINTF(f, "VAL"); break; case tokchr_: FPRINTF(f, "CHR$"); break; case tokasc: FPRINTF(f, "ASC"); break; case toklen: FPRINTF(f, "LEN"); break; case tokmid_: FPRINTF(f, "MID$"); break; case tokpeek: FPRINTF(f, "PEEK"); break; case toklet: FPRINTF(f, "LET"); break; case tokprint: FPRINTF(f, "PRINT"); break; case tokinput: FPRINTF(f, "INPUT"); break; case tokgoto: FPRINTF(f, "GOTO"); break; case tokif: FPRINTF(f, "IF"); break; case tokend: FPRINTF(f, "END"); break; case tokstop: FPRINTF(f, "STOP"); break; case tokfor: FPRINTF(f, "FOR"); break; case toknext: FPRINTF(f, "NEXT"); break; case tokwhile: FPRINTF(f, "WHILE"); break; case tokwend: FPRINTF(f, "WEND"); break; case tokgosub: FPRINTF(f, "GOSUB"); break; case tokreturn: FPRINTF(f, "RETURN"); break; case tokread: FPRINTF(f, "READ"); break; case tokdata: FPRINTF(f, "DATA"); break; case tokrestore: FPRINTF(f, "RESTORE"); break; case tokgotoxy: FPRINTF(f, "GOTOXY"); break; case tokon: FPRINTF(f, "ON"); break; case tokdim: FPRINTF(f, "DIM"); break; case tokpoke: FPRINTF(f, "POKE"); break; case toklist: FPRINTF(f, "LIST"); break; case tokrun: FPRINTF(f, "RUN"); break; case toknew: FPRINTF(f, "NEW"); break; case tokload: FPRINTF(f, "LOAD"); break; case tokmerge: FPRINTF(f, "MERGE"); break; case toksave: FPRINTF(f, "SAVE"); break; case tokdel: FPRINTF(f, "DEL"); break; case tokbye: FPRINTF(f, "BYE"); break; case tokrenum: FPRINTF(f, "RENUM"); break; case tokthen: FPRINTF(f, " THEN "); break; case tokelse: FPRINTF(f, " ELSE "); break; case tokto: FPRINTF(f, " TO "); break; case tokstep: FPRINTF(f, " STEP "); break; case tokrem: FPRINTF(f, "REM%s", buf->UU.sp); break; } buf = buf->next; } } Static Void disposetokens( tokenrec **tok ) { tokenrec *tok1; while (*tok != NULL) { tok1 = (*tok)->next; if ((*tok)->kind == tokrem || (*tok)->kind == tokstr) Free((*tok)->UU.sp); Free(*tok); *tok = tok1; } } Static Void parseinput( tokenrec **buf ) { linerec *l, *l0, *l1; Char STR1[256]; strcpy(STR1, strltrim(inbuf)); strcpy(inbuf, STR1); curline = 0; while (*inbuf != '\0' && isdigit(inbuf[0])) { curline = curline * 10 + inbuf[0] - 48; strcpy(inbuf, inbuf + 1); } parse(inbuf, buf); if (curline == 0) return; l = linebase; l0 = NULL; while (l != NULL && l->num < curline) { l0 = l; l = l->next; } if (l != NULL && l->num == curline) { l1 = l; l = l->next; if (l0 == NULL) linebase = l; else l0->next = l; disposetokens(&l1->txt); Free(l1); } if (*buf != NULL) { l1 = (linerec *)Malloc(sizeof(linerec)); l1->next = l; if (l0 == NULL) linebase = l1; else l0->next = l1; l1->num = curline; l1->txt = *buf; } clearloops(); restoredata(); } Static Void errormsg( Char *s ) { Printf("\007%s", s); _Escape(42); } Static Void snerr( Void ) { errormsg("Syntax error"); } Static Void tmerr( Void ) { errormsg("Type mismatch error"); } Static Void badsubscr( Void ) { errormsg("Bad subscript"); } /* Local variables for exec: */ struct LOC_exec { boolean gotoflag, elseflag; tokenrec *t; } ; Local valrec factor PP((struct LOC_exec *LINK)); Local valrec expr PP((struct LOC_exec *LINK)); Local double realfactor( struct LOC_exec *LINK ) { valrec n; n = factor(LINK); if (n.stringval) tmerr(); return (n.UU.val); } Local Char *strfactor( struct LOC_exec *LINK ) { valrec n; n = factor(LINK); if (!n.stringval) tmerr(); return (n.UU.sval); } Local Char *stringfactor( Char *Result, struct LOC_exec *LINK ) { valrec n; n = factor(LINK); if (!n.stringval) tmerr(); strcpy(Result, n.UU.sval); Free(n.UU.sval); return Result; } Local long intfactor( struct LOC_exec *LINK ) { return ((long)floor(realfactor(LINK) + 0.5)); } Local double realexpr( struct LOC_exec *LINK ) { valrec n; n = expr(LINK); if (n.stringval) tmerr(); return (n.UU.val); } Local Char *strexpr( struct LOC_exec *LINK ) { valrec n; n = expr(LINK); if (!n.stringval) tmerr(); return (n.UU.sval); } Local Char *stringexpr( Char *Result, struct LOC_exec *LINK ) { valrec n; n = expr(LINK); if (!n.stringval) tmerr(); strcpy(Result, n.UU.sval); Free(n.UU.sval); return Result; } Local long intexpr( struct LOC_exec *LINK ) { return ((long)floor(realexpr(LINK) + 0.5)); } Local Void require( short k, struct LOC_exec *LINK ) { if (LINK->t == NULL || LINK->t->kind != k) snerr(); LINK->t = LINK->t->next; } Local Void skipparen( struct LOC_exec *LINK ) { do { if (LINK->t == NULL) snerr(); if (LINK->t->kind == tokrp || LINK->t->kind == tokcomma) goto _L1; if (LINK->t->kind == toklp) { LINK->t = LINK->t->next; skipparen(LINK); } LINK->t = LINK->t->next; } while (true); _L1: ; } Local varrec *findvar( struct LOC_exec *LINK ) { varrec *v; long i, j, k; tokenrec *tok; long FORLIM; if (LINK->t == NULL || LINK->t->kind != tokvar) snerr(); v = LINK->t->UU.vp; LINK->t = LINK->t->next; if (LINK->t == NULL || LINK->t->kind != toklp) { if (v->numdims != 0) badsubscr(); return v; } if (v->numdims == 0) { tok = LINK->t; i = 0; j = 1; do { if (i >= maxdims) badsubscr(); LINK->t = LINK->t->next; skipparen(LINK); j *= 11; i++; v->dims[i - 1] = 11; } while (LINK->t->kind != tokrp); v->numdims = i; if (v->stringvar) { v->UU.U1.sarr = (Char **)Malloc(j * 4); for (k = 0; k < j; k++) v->UU.U1.sarr[k] = NULL; } else { v->UU.U0.arr = (double *)Malloc(j * 8); for (k = 0; k < j; k++) v->UU.U0.arr[k] = 0.0; } LINK->t = tok; } k = 0; LINK->t = LINK->t->next; FORLIM = v->numdims; for (i = 1; i <= FORLIM; i++) { j = intexpr(LINK); if ((unsigned long)j >= v->dims[i - 1]) badsubscr(); k = k * v->dims[i - 1] + j; if (i < v->numdims) require(tokcomma, LINK); } require(tokrp, LINK); if (v->stringvar) v->UU.U1.sval = &v->UU.U1.sarr[k]; else v->UU.U0.val = &v->UU.U0.arr[k]; return v; } Local long inot( long i, struct LOC_exec *LINK ) { return (-i - 1); } Local long ixor( long a, long b, struct LOC_exec *LINK ) { return ((a & (~b)) | ((~a) & b)); } Local valrec factor( struct LOC_exec *LINK ) { varrec *v; tokenrec *facttok; valrec n; long i, j; tokenrec *tok, *tok1; Char *s; union { long i; Char *c; } trick; double TEMP; Char STR1[256]; if (LINK->t == NULL) snerr(); facttok = LINK->t; LINK->t = LINK->t->next; n.stringval = false; switch (facttok->kind) { case toknum: n.UU.val = facttok->UU.num; break; case tokstr: n.stringval = true; n.UU.sval = (Char *)Malloc(256); strcpy(n.UU.sval, facttok->UU.sp); break; case tokvar: LINK->t = facttok; v = findvar(LINK); n.stringval = v->stringvar; if (n.stringval) { n.UU.sval = (Char *)Malloc(256); strcpy(n.UU.sval, *v->UU.U1.sval); } else n.UU.val = *v->UU.U0.val; break; case toklp: n = expr(LINK); require(tokrp, LINK); break; case tokminus: n.UU.val = -realfactor(LINK); break; case tokplus: n.UU.val = realfactor(LINK); break; case toknot: n.UU.val = ~intfactor(LINK); break; case toksqr: TEMP = realfactor(LINK); n.UU.val = TEMP * TEMP; break; case toksqrt: n.UU.val = sqrt(realfactor(LINK)); break; case toksin: n.UU.val = sin(realfactor(LINK)); break; case tokcos: n.UU.val = cos(realfactor(LINK)); break; case toktan: n.UU.val = realfactor(LINK); n.UU.val = sin(n.UU.val) / cos(n.UU.val); break; case tokarctan: n.UU.val = atan(realfactor(LINK)); break; case toklog: n.UU.val = log(realfactor(LINK)); break; case tokexp: n.UU.val = exp(realfactor(LINK)); break; case tokabs: n.UU.val = fabs(realfactor(LINK)); break; case toksgn: n.UU.val = realfactor(LINK); n.UU.val = (n.UU.val > 0) - (n.UU.val < 0); break; case tokstr_: n.stringval = true; n.UU.sval = (Char *)Malloc(256); numtostr(n.UU.sval, realfactor(LINK)); break; case tokval: s = strfactor(LINK); tok1 = LINK->t; parse(s, &LINK->t); tok = LINK->t; if (tok == NULL) n.UU.val = 0.0; else n = expr(LINK); disposetokens(&tok); LINK->t = tok1; Free(s); break; case tokchr_: n.stringval = true; n.UU.sval = (Char *)Malloc(256); strcpy(n.UU.sval, " "); n.UU.sval[0] = (Char)intfactor(LINK); break; case tokasc: s = strfactor(LINK); if (*s == '\0') n.UU.val = 0.0; else n.UU.val = s[0]; Free(s); break; case tokmid_: n.stringval = true; require(toklp, LINK); n.UU.sval = strexpr(LINK); require(tokcomma, LINK); i = intexpr(LINK); if (i < 1) i = 1; j = 255; if (LINK->t != NULL && LINK->t->kind == tokcomma) { LINK->t = LINK->t->next; j = intexpr(LINK); } if (j > strlen(n.UU.sval) - i + 1) j = strlen(n.UU.sval) - i + 1; if (i > strlen(n.UU.sval)) *n.UU.sval = '\0'; else { sprintf(STR1, "%.*s", (int)j, n.UU.sval + i - 1); strcpy(n.UU.sval, STR1); } require(tokrp, LINK); break; case toklen: s = strfactor(LINK); n.UU.val = strlen(s); Free(s); break; case tokpeek: /* p2c: dist/examples/basic.p, line 1029: * Note: Range checking is OFF [216] */ trick.i = intfactor(LINK); n.UU.val = *trick.c; /* p2c: dist/examples/basic.p, line 1032: * Note: Range checking is ON [216] */ break; default: snerr(); break; } return n; } Local valrec upexpr( struct LOC_exec *LINK ) { valrec n, n2; n = factor(LINK); while (LINK->t != NULL && LINK->t->kind == tokup) { if (n.stringval) tmerr(); LINK->t = LINK->t->next; n2 = upexpr(LINK); if (n2.stringval) tmerr(); if (n.UU.val >= 0) { n.UU.val = exp(n2.UU.val * log(n.UU.val)); continue; } if (n2.UU.val != (long)n2.UU.val) n.UU.val = log(n.UU.val); n.UU.val = exp(n2.UU.val * log(-n.UU.val)); if (((long)n2.UU.val) & 1) n.UU.val = -n.UU.val; } return n; } Local valrec term( struct LOC_exec *LINK ) { valrec n, n2; short k; n = upexpr(LINK); while (LINK->t != NULL && (unsigned long)LINK->t->kind < 32 && ((1L << ((long)LINK->t->kind)) & ((1L << ((long)toktimes)) | (1L << ((long)tokdiv)) | (1L << ((long)tokmod)))) != 0) { k = LINK->t->kind; LINK->t = LINK->t->next; n2 = upexpr(LINK); if (n.stringval || n2.stringval) tmerr(); if (k == tokmod) { n.UU.val = (long)floor(n.UU.val + 0.5) % (long)floor(n2.UU.val + 0.5); /* p2c: dist/examples/basic.p, line 1078: * Note: Using % for possibly-negative arguments [317] */ } else if (k == toktimes) n.UU.val *= n2.UU.val; else n.UU.val /= n2.UU.val; } return n; } Local valrec sexpr( struct LOC_exec *LINK ) { valrec n, n2; short k; n = term(LINK); while (LINK->t != NULL && (unsigned long)LINK->t->kind < 32 && ((1L << ((long)LINK->t->kind)) & ((1L << ((long)tokplus)) | (1L << ((long)tokminus)))) != 0) { k = LINK->t->kind; LINK->t = LINK->t->next; n2 = term(LINK); if (n.stringval != n2.stringval) tmerr(); if (k == tokplus) { if (n.stringval) { strcat(n.UU.sval, n2.UU.sval); Free(n2.UU.sval); } else n.UU.val += n2.UU.val; } else { if (n.stringval) tmerr(); else n.UU.val -= n2.UU.val; } } return n; } Local valrec relexpr( struct LOC_exec *LINK ) { valrec n, n2; boolean f; short k; n = sexpr(LINK); while (LINK->t != NULL && (unsigned long)LINK->t->kind < 32 && ((1L << ((long)LINK->t->kind)) & ((1L << ((long)tokne + 1)) - (1L << ((long)tokeq)))) != 0) { k = LINK->t->kind; LINK->t = LINK->t->next; n2 = sexpr(LINK); if (n.stringval != n2.stringval) tmerr(); if (n.stringval) { f = ((!strcmp(n.UU.sval, n2.UU.sval) && (unsigned long)k < 32 && ((1L << ((long)k)) & ((1L << ((long)tokeq)) | (1L << ((long)tokge)) | (1L << ((long)tokle)))) != 0) || (strcmp(n.UU.sval, n2.UU.sval) < 0 && (unsigned long)k < 32 && ((1L << ((long)k)) & ((1L << ((long)toklt)) | (1L << ((long)tokle)) | (1L << ((long)tokne)))) != 0) || (strcmp(n.UU.sval, n2.UU.sval) > 0 && (unsigned long)k < 32 && ((1L << ((long)k)) & ((1L << ((long)tokgt)) | (1L << ((long)tokge)) | (1L << ((long)tokne)))) != 0)); /* p2c: dist/examples/basic.p, line 2175: Note: * Line breaker spent 0.0+8.00 seconds, 5000 tries on line 1554 [251] */ Free(n.UU.sval); Free(n2.UU.sval); } else f = ((n.UU.val == n2.UU.val && (unsigned long)k < 32 && ((1L << ((long)k)) & ((1L << ((long)tokeq)) | (1L << ((long)tokge)) | (1L << ((long)tokle)))) != 0) || (n.UU.val < n2.UU.val && (unsigned long)k < 32 && ((1L << ((long)k)) & ((1L << ((long)toklt)) | (1L << ((long)tokle)) | (1L << ((long)tokne)))) != 0) || (n.UU.val > n2.UU.val && (unsigned long)k < 32 && ((1L << ((long)k)) & ((1L << ((long)tokgt)) | (1L << ((long)tokge)) | (1L << ((long)tokne)))) != 0)); /* p2c: dist/examples/basic.p, line 2175: Note: * Line breaker spent 0.0+9.00 seconds, 5000 tries on line 1568 [251] */ n.stringval = false; n.UU.val = f; } return n; } Local valrec andexpr( struct LOC_exec *LINK ) { valrec n, n2; n = relexpr(LINK); while (LINK->t != NULL && LINK->t->kind == tokand) { LINK->t = LINK->t->next; n2 = relexpr(LINK); if (n.stringval || n2.stringval) tmerr(); n.UU.val = ((long)n.UU.val) & ((long)n2.UU.val); } return n; } Local valrec expr( struct LOC_exec *LINK ) { valrec n, n2; short k; n = andexpr(LINK); while (LINK->t != NULL && (unsigned long)LINK->t->kind < 32 && ((1L << ((long)LINK->t->kind)) & ((1L << ((long)tokor)) | (1L << ((long)tokxor)))) != 0) { k = LINK->t->kind; LINK->t = LINK->t->next; n2 = andexpr(LINK); if (n.stringval || n2.stringval) tmerr(); if (k == tokor) n.UU.val = ((long)n.UU.val) | ((long)n2.UU.val); else n.UU.val = ((long)n.UU.val) ^ ((long)n2.UU.val); } return n; } Local Void checkextra( struct LOC_exec *LINK ) { if (LINK->t != NULL) errormsg("Extra information on line"); } Local boolean iseos( struct LOC_exec *LINK ) { return (LINK->t == NULL || LINK->t->kind == tokelse || LINK->t->kind == tokcolon); } Local Void skiptoeos( struct LOC_exec *LINK ) { while (!iseos(LINK)) LINK->t = LINK->t->next; } Local linerec *findline( long n, struct LOC_exec *LINK ) { linerec *l; l = linebase; while (l != NULL && l->num != n) l = l->next; return l; } Local linerec *mustfindline( long n, struct LOC_exec *LINK ) { linerec *l; l = findline(n, LINK); if (l == NULL) errormsg("Undefined line"); return l; } Local Void cmdend( struct LOC_exec *LINK ) { stmtline = NULL; LINK->t = NULL; } Local Void cmdnew( struct LOC_exec *LINK ) { Anyptr p; cmdend(LINK); clearloops(); restoredata(); while (linebase != NULL) { p = (Anyptr)linebase->next; disposetokens(&linebase->txt); Free(linebase); linebase = (linerec *)p; } while (varbase != NULL) { p = (Anyptr)varbase->next; if (varbase->stringvar) { if (*varbase->UU.U1.sval != NULL) Free(*varbase->UU.U1.sval); } Free(varbase); varbase = (varrec *)p; } } Local Void cmdlist( struct LOC_exec *LINK ) { linerec *l; long n1, n2; do { n1 = 0; n2 = LONG_MAX; if (LINK->t != NULL && LINK->t->kind == toknum) { n1 = (long)LINK->t->UU.num; LINK->t = LINK->t->next; if (LINK->t == NULL || LINK->t->kind != tokminus) n2 = n1; } if (LINK->t != NULL && LINK->t->kind == tokminus) { LINK->t = LINK->t->next; if (LINK->t != NULL && LINK->t->kind == toknum) { n2 = (long)LINK->t->UU.num; LINK->t = LINK->t->next; } else n2 = LONG_MAX; } l = linebase; while (l != NULL && l->num <= n2) { if (l->num >= n1) { Printf("%ld ", l->num); listtokens(stdout, l->txt); Putchar('\n'); } l = l->next; } if (!iseos(LINK)) require(tokcomma, LINK); } while (!iseos(LINK)); } Local Void cmdload( boolean merging, Char *name, struct LOC_exec *LINK ) { FILE *f; tokenrec *buf; Char STR1[256]; Char *TEMP; f = NULL; if (!merging) cmdnew(LINK); if (f != NULL) { sprintf(STR1, "%s.TEXT", name); f = freopen(STR1, "r", f); } else { sprintf(STR1, "%s.TEXT", name); f = fopen(STR1, "r"); } if (f == NULL) _EscIO(FileNotFound); while (fgets(inbuf, 256, f) != NULL) { TEMP = strchr(inbuf, '\n'); if (TEMP != NULL) *TEMP = 0; parseinput(&buf); if (curline == 0) { Printf("Bad line in file\n"); disposetokens(&buf); } } if (f != NULL) fclose(f); f = NULL; if (f != NULL) fclose(f); } Local Void cmdrun( struct LOC_exec *LINK ) { linerec *l; long i; string255 s; l = linebase; if (!iseos(LINK)) { if (LINK->t->kind == toknum) l = mustfindline(intexpr(LINK), LINK); else { stringexpr(s, LINK); i = 0; if (!iseos(LINK)) { require(tokcomma, LINK); i = intexpr(LINK); } checkextra(LINK); cmdload(false, s, LINK); if (i == 0) l = linebase; else l = mustfindline(i, LINK); } } stmtline = l; LINK->gotoflag = true; clearvars(); clearloops(); restoredata(); } Local Void cmdsave( struct LOC_exec *LINK ) { FILE *f; linerec *l; Char STR1[256], STR2[256]; f = NULL; if (f != NULL) { sprintf(STR2, "%s.TEXT", stringexpr(STR1, LINK)); f = freopen(STR2, "w", f); } else { sprintf(STR2, "%s.TEXT", stringexpr(STR1, LINK)); f = fopen(STR2, "w"); } if (f == NULL) _EscIO(FileNotFound); l = linebase; while (l != NULL) { FPRINTF(f, "%ld ", l->num); listtokens(f, l->txt); PUTC('\n', f); l = l->next; } if (f != NULL) fclose(f); f = NULL; if (f != NULL) fclose(f); } Local Void cmdbye( struct LOC_exec *LINK ) { exitflag = true; } Local Void cmddel( struct LOC_exec *LINK ) { linerec *l, *l0, *l1; long n1, n2; do { if (iseos(LINK)) snerr(); n1 = 0; n2 = LONG_MAX; if (LINK->t != NULL && LINK->t->kind == toknum) { n1 = (long)LINK->t->UU.num; LINK->t = LINK->t->next; if (LINK->t == NULL || LINK->t->kind != tokminus) n2 = n1; } if (LINK->t != NULL && LINK->t->kind == tokminus) { LINK->t = LINK->t->next; if (LINK->t != NULL && LINK->t->kind == toknum) { n2 = (long)LINK->t->UU.num; LINK->t = LINK->t->next; } else n2 = LONG_MAX; } l = linebase; l0 = NULL; while (l != NULL && l->num <= n2) { l1 = l->next; if (l->num >= n1) { if (l == stmtline) { cmdend(LINK); clearloops(); restoredata(); } if (l0 == NULL) linebase = l->next; else l0->next = l->next; disposetokens(&l->txt); Free(l); } else l0 = l; l = l1; } if (!iseos(LINK)) require(tokcomma, LINK); } while (!iseos(LINK)); } Local Void cmdrenum( struct LOC_exec *LINK ) { linerec *l, *l1; tokenrec *tok; long lnum, step; lnum = 10; step = 10; if (!iseos(LINK)) { lnum = intexpr(LINK); if (!iseos(LINK)) { require(tokcomma, LINK); step = intexpr(LINK); } } l = linebase; if (l == NULL) return; while (l != NULL) { l->num2 = lnum; lnum += step; l = l->next; } l = linebase; do { tok = l->txt; do { if (tok->kind == tokdel || tok->kind == tokrestore || tok->kind == toklist || tok->kind == tokrun || tok->kind == tokelse || tok->kind == tokthen || tok->kind == tokgosub || tok->kind == tokgoto) { while (tok->next != NULL && tok->next->kind == toknum) { tok = tok->next; lnum = (long)floor(tok->UU.num + 0.5); l1 = linebase; while (l1 != NULL && l1->num != lnum) l1 = l1->next; if (l1 == NULL) Printf("Undefined line %ld in line %ld\n", lnum, l->num2); else tok->UU.num = l1->num2; if (tok->next != NULL && tok->next->kind == tokcomma) tok = tok->next; } } tok = tok->next; } while (tok != NULL); l = l->next; } while (l != NULL); l = linebase; while (l != NULL) { l->num = l->num2; l = l->next; } } Local Void cmdprint( struct LOC_exec *LINK ) { boolean semiflag; valrec n; Char STR1[256]; semiflag = false; while (!iseos(LINK)) { semiflag = false; if ((unsigned long)LINK->t->kind < 32 && ((1L << ((long)LINK->t->kind)) & ((1L << ((long)toksemi)) | (1L << ((long)tokcomma)))) != 0) { semiflag = true; LINK->t = LINK->t->next; continue; } n = expr(LINK); if (n.stringval) { FPUTS(n.UU.sval, stdout); Free(n.UU.sval); } else Printf("%s ", numtostr(STR1, n.UU.val)); } if (!semiflag) Putchar('\n'); } Local Void cmdinput( struct LOC_exec *LINK ) { varrec *v; string255 s; tokenrec *tok, *tok0, *tok1; boolean strflag; if (LINK->t != NULL && LINK->t->kind == tokstr) { FPUTS(LINK->t->UU.sp, stdout); LINK->t = LINK->t->next; require(toksemi, LINK); } else Printf("? "); tok = LINK->t; if (LINK->t == NULL || LINK->t->kind != tokvar) snerr(); strflag = LINK->t->UU.vp->stringvar; do { if (LINK->t != NULL && LINK->t->kind == tokvar) { if (LINK->t->UU.vp->stringvar != strflag) snerr(); } LINK->t = LINK->t->next; } while (!iseos(LINK)); LINK->t = tok; if (strflag) { do { Gets(s); v = findvar(LINK); if (*v->UU.U1.sval != NULL) Free(*v->UU.U1.sval); *v->UU.U1.sval = (Char *)Malloc(256); strcpy(*v->UU.U1.sval, s); if (!iseos(LINK)) { require(tokcomma, LINK); Printf("?? "); } } while (!iseos(LINK)); return; } Gets(s); parse(s, &tok); tok0 = tok; do { v = findvar(LINK); while (tok == NULL) { Printf("?? "); Gets(s); disposetokens(&tok0); parse(s, &tok); tok0 = tok; } tok1 = LINK->t; LINK->t = tok; *v->UU.U0.val = realexpr(LINK); if (LINK->t != NULL) { if (LINK->t->kind == tokcomma) LINK->t = LINK->t->next; else snerr(); } tok = LINK->t; LINK->t = tok1; if (!iseos(LINK)) require(tokcomma, LINK); } while (!iseos(LINK)); disposetokens(&tok0); } Local Void cmdlet( boolean implied, struct LOC_exec *LINK ) { varrec *v; Char *old; if (implied) LINK->t = stmttok; v = findvar(LINK); require(tokeq, LINK); if (!v->stringvar) { *v->UU.U0.val = realexpr(LINK); return; } old = *v->UU.U1.sval; *v->UU.U1.sval = strexpr(LINK); if (old != NULL) Free(old); } Local Void cmdgoto( struct LOC_exec *LINK ) { stmtline = mustfindline(intexpr(LINK), LINK); LINK->t = NULL; LINK->gotoflag = true; } Local Void cmdif( struct LOC_exec *LINK ) { double n; long i; n = realexpr(LINK); require(tokthen, LINK); if (n == 0) { i = 0; do { if (LINK->t != NULL) { if (LINK->t->kind == tokif) i++; if (LINK->t->kind == tokelse) i--; LINK->t = LINK->t->next; } } while (LINK->t != NULL && i >= 0); } if (LINK->t != NULL && LINK->t->kind == toknum) cmdgoto(LINK); else LINK->elseflag = true; } Local Void cmdelse( struct LOC_exec *LINK ) { LINK->t = NULL; } Local boolean skiploop( short up, short dn, struct LOC_exec *LINK ) { boolean Result; long i; linerec *saveline; saveline = stmtline; i = 0; do { while (LINK->t == NULL) { if (stmtline == NULL || stmtline->next == NULL) { Result = false; stmtline = saveline; goto _L1; } stmtline = stmtline->next; LINK->t = stmtline->txt; } if (LINK->t->kind == up) i++; if (LINK->t->kind == dn) i--; LINK->t = LINK->t->next; } while (i >= 0); Result = true; _L1: return Result; } Local Void cmdfor( struct LOC_exec *LINK ) { looprec *l, lr; linerec *saveline; long i, j; lr.UU.U0.vp = findvar(LINK); if (lr.UU.U0.vp->stringvar) snerr(); require(tokeq, LINK); *lr.UU.U0.vp->UU.U0.val = realexpr(LINK); require(tokto, LINK); lr.UU.U0.max = realexpr(LINK); if (LINK->t != NULL && LINK->t->kind == tokstep) { LINK->t = LINK->t->next; lr.UU.U0.step = realexpr(LINK); } else lr.UU.U0.step = 1.0; lr.homeline = stmtline; lr.hometok = LINK->t; lr.kind = forloop; lr.next = loopbase; if (lr.UU.U0.step >= 0 && *lr.UU.U0.vp->UU.U0.val > lr.UU.U0.max || lr.UU.U0.step <= 0 && *lr.UU.U0.vp->UU.U0.val < lr.UU.U0.max) { saveline = stmtline; i = 0; j = 0; do { while (LINK->t == NULL) { if (stmtline == NULL || stmtline->next == NULL) { stmtline = saveline; errormsg("FOR without NEXT"); } stmtline = stmtline->next; LINK->t = stmtline->txt; } if (LINK->t->kind == tokfor) { if (LINK->t->next != NULL && LINK->t->next->kind == tokvar && LINK->t->next->UU.vp == lr.UU.U0.vp) j++; else i++; } if (LINK->t->kind == toknext) { if (LINK->t->next != NULL && LINK->t->next->kind == tokvar && LINK->t->next->UU.vp == lr.UU.U0.vp) j--; else i--; } LINK->t = LINK->t->next; } while (i >= 0 && j >= 0); skiptoeos(LINK); return; } l = (looprec *)Malloc(sizeof(looprec)); *l = lr; loopbase = l; } Local Void cmdnext( struct LOC_exec *LINK ) { varrec *v; boolean found; looprec *l, *WITH; if (!iseos(LINK)) v = findvar(LINK); else v = NULL; do { if (loopbase == NULL || loopbase->kind == gosubloop) errormsg("NEXT without FOR"); found = (loopbase->kind == forloop && (v == NULL || loopbase->UU.U0.vp == v)); if (!found) { l = loopbase->next; Free(loopbase); loopbase = l; } } while (!found); WITH = loopbase; *WITH->UU.U0.vp->UU.U0.val += WITH->UU.U0.step; if ((WITH->UU.U0.step < 0 || *WITH->UU.U0.vp->UU.U0.val <= WITH->UU.U0.max) && (WITH->UU.U0.step > 0 || *WITH->UU.U0.vp->UU.U0.val >= WITH->UU.U0.max)) { stmtline = WITH->homeline; LINK->t = WITH->hometok; return; } l = loopbase->next; Free(loopbase); loopbase = l; } Local Void cmdwhile( struct LOC_exec *LINK ) { looprec *l; l = (looprec *)Malloc(sizeof(looprec)); l->next = loopbase; loopbase = l; l->kind = whileloop; l->homeline = stmtline; l->hometok = LINK->t; if (iseos(LINK)) return; if (realexpr(LINK) != 0) return; if (!skiploop(tokwhile, tokwend, LINK)) errormsg("WHILE without WEND"); l = loopbase->next; Free(loopbase); loopbase = l; skiptoeos(LINK); } Local Void cmdwend( struct LOC_exec *LINK ) { tokenrec *tok; linerec *tokline; looprec *l; boolean found; do { if (loopbase == NULL || loopbase->kind == gosubloop) errormsg("WEND without WHILE"); found = (loopbase->kind == whileloop); if (!found) { l = loopbase->next; Free(loopbase); loopbase = l; } } while (!found); if (!iseos(LINK)) { if (realexpr(LINK) != 0) found = false; } tok = LINK->t; tokline = stmtline; if (found) { stmtline = loopbase->homeline; LINK->t = loopbase->hometok; if (!iseos(LINK)) { if (realexpr(LINK) == 0) found = false; } } if (found) return; LINK->t = tok; stmtline = tokline; l = loopbase->next; Free(loopbase); loopbase = l; } Local Void cmdgosub( struct LOC_exec *LINK ) { looprec *l; l = (looprec *)Malloc(sizeof(looprec)); l->next = loopbase; loopbase = l; l->kind = gosubloop; l->homeline = stmtline; l->hometok = LINK->t; cmdgoto(LINK); } Local Void cmdreturn( struct LOC_exec *LINK ) { looprec *l; boolean found; do { if (loopbase == NULL) errormsg("RETURN without GOSUB"); found = (loopbase->kind == gosubloop); if (!found) { l = loopbase->next; Free(loopbase); loopbase = l; } } while (!found); stmtline = loopbase->homeline; LINK->t = loopbase->hometok; l = loopbase->next; Free(loopbase); loopbase = l; skiptoeos(LINK); } Local Void cmdread( struct LOC_exec *LINK ) { varrec *v; tokenrec *tok; boolean found; do { v = findvar(LINK); tok = LINK->t; LINK->t = datatok; if (dataline == NULL) { dataline = linebase; LINK->t = dataline->txt; } if (LINK->t == NULL || LINK->t->kind != tokcomma) { do { while (LINK->t == NULL) { if (dataline == NULL || dataline->next == NULL) errormsg("Out of Data"); dataline = dataline->next; LINK->t = dataline->txt; } found = (LINK->t->kind == tokdata); LINK->t = LINK->t->next; } while (!found || iseos(LINK)); } else LINK->t = LINK->t->next; if (v->stringvar) { if (*v->UU.U1.sval != NULL) Free(*v->UU.U1.sval); *v->UU.U1.sval = strexpr(LINK); } else *v->UU.U0.val = realexpr(LINK); datatok = LINK->t; LINK->t = tok; if (!iseos(LINK)) require(tokcomma, LINK); } while (!iseos(LINK)); } Local Void cmddata( struct LOC_exec *LINK ) { skiptoeos(LINK); } Local Void cmdrestore( struct LOC_exec *LINK ) { if (iseos(LINK)) restoredata(); else { dataline = mustfindline(intexpr(LINK), LINK); datatok = dataline->txt; } } Local Void cmdgotoxy( struct LOC_exec *LINK ) { long x,y; x = intexpr(LINK); require(tokcomma, LINK); y = intexpr(LINK); Putchar(27); Putchar('Y'); Putchar(32+x); Putchar(32+y); /* require(tokcomma, LINK); */ } Local Void cmdon( struct LOC_exec *LINK ) { long i; looprec *l; i = intexpr(LINK); if (LINK->t != NULL && LINK->t->kind == tokgosub) { l = (looprec *)Malloc(sizeof(looprec)); l->next = loopbase; loopbase = l; l->kind = gosubloop; l->homeline = stmtline; l->hometok = LINK->t; LINK->t = LINK->t->next; } else require(tokgoto, LINK); if (i < 1) { skiptoeos(LINK); return; } while (i > 1 && !iseos(LINK)) { require(toknum, LINK); if (!iseos(LINK)) require(tokcomma, LINK); i--; } if (!iseos(LINK)) cmdgoto(LINK); } Local Void cmddim( struct LOC_exec *LINK ) { long i, j, k; varrec *v; boolean done; do { if (LINK->t == NULL || LINK->t->kind != tokvar) snerr(); v = LINK->t->UU.vp; LINK->t = LINK->t->next; if (v->numdims != 0) errormsg("Array already dimensioned"); j = 1; i = 0; require(toklp, LINK); do { k = intexpr(LINK) + 1; if (k < 1) badsubscr(); if (i >= maxdims) badsubscr(); i++; v->dims[i - 1] = k; j *= k; done = (LINK->t != NULL && LINK->t->kind == tokrp); if (!done) require(tokcomma, LINK); } while (!done); LINK->t = LINK->t->next; v->numdims = i; if (v->stringvar) { v->UU.U1.sarr = (Char **)Malloc(j * 4); for (i = 0; i < j; i++) v->UU.U1.sarr[i] = NULL; } else { v->UU.U0.arr = (double *)Malloc(j * 8); for (i = 0; i < j; i++) v->UU.U0.arr[i] = 0.0; } if (!iseos(LINK)) require(tokcomma, LINK); } while (!iseos(LINK)); } Local Void cmdpoke( struct LOC_exec *LINK ) { union { long i; Char *c; } trick; /* p2c: dist/examples/basic.p, line 2073: * Note: Range checking is OFF [216] */ trick.i = intexpr(LINK); require(tokcomma, LINK); *trick.c = (Char)intexpr(LINK); /* p2c: dist/examples/basic.p, line 2077: * Note: Range checking is ON [216] */ } Static Void exec( Void ) { clock_t TimeoutBASIC; struct LOC_exec V; Char *ioerrmsg; Char STR1[256]; TimeoutBASIC=clock(); TRY(try1); do { do { V.gotoflag = false; V.elseflag = false; while (stmttok != NULL && stmttok->kind == tokcolon) stmttok = stmttok->next; V.t = stmttok; if (V.t != NULL) { V.t = V.t->next; switch (stmttok->kind) { case tokrem: /* blank case */ break; case toklist: cmdlist(&V); break; case tokrun: cmdrun(&V); break; case toknew: cmdnew(&V); break; case tokload: cmdload(false, stringexpr(STR1, &V), &V); break; case tokmerge: cmdload(true, stringexpr(STR1, &V), &V); break; case toksave: cmdsave(&V); break; case tokbye: cmdbye(&V); break; case tokdel: cmddel(&V); break; case tokrenum: cmdrenum(&V); break; case toklet: cmdlet(false, &V); break; case tokvar: cmdlet(true, &V); break; case tokprint: cmdprint(&V); break; case tokinput: cmdinput(&V); break; case tokgoto: cmdgoto(&V); break; case tokif: cmdif(&V); break; case tokelse: cmdelse(&V); break; case tokend: cmdend(&V); break; case tokstop: P_escapecode = -20; goto _Ltry1; break; case tokfor: cmdfor(&V); break; case toknext: cmdnext(&V); break; case tokwhile: cmdwhile(&V); break; case tokwend: cmdwend(&V); break; case tokgosub: cmdgosub(&V); break; case tokreturn: cmdreturn(&V); break; case tokread: cmdread(&V); break; case tokdata: cmddata(&V); break; case tokrestore: cmdrestore(&V); break; case tokgotoxy: cmdgotoxy(&V); break; case tokon: cmdon(&V); break; case tokdim: cmddim(&V); break; case tokpoke: cmdpoke(&V); break; default: errormsg("Illegal command"); break; } } if (!V.elseflag && !iseos(&V)) checkextra(&V); stmttok = V.t; } while (V.t != NULL); if(stmtline != NULL) { if(!V.gotoflag) stmtline = stmtline->next; if(stmtline != NULL) stmttok = stmtline->txt; } if((clock()-TimeoutBASIC)>TIMEOUT_BASIC) { BreakBASIC(); /* Und mal abbrechen ... @@@ */ TimeoutBASIC=clock(); } } while(stmtline != NULL); RECOVER2(try1,_Ltry1); if(P_escapecode == -20) Printf("Break"); else if(P_escapecode != 42) { switch(P_escapecode) { case -4: Printf("\007Integer overflow"); break; case -5: Printf("\007Divide by zero"); break; case -6: Printf("\007Real math overflow"); break; case -7: Printf("\007Real math underflow"); break; case -8: case -19: case -18: case -17: case -16: case -15: Printf("\007Value range error"); break; case -10: ioerrmsg = (Char *)Malloc(256); sprintf(ioerrmsg, "I/O Error %d", (int)P_ioresult); Printf("\007%s", ioerrmsg); Free(ioerrmsg); break; default: if(EXCP_LINE != -1) Printf("%12ld\n", EXCP_LINE); _Escape(P_escapecode); break; } } if(stmtline != NULL) Printf(" in %ld", stmtline->num); Putchar('\n'); ENDTRY(try1); } /*exec*/ int basic(int argc, Char *argv[]) { PASCAL_MAIN(argc, argv); inbuf = (Char*)Malloc(256); linebase = NULL; varbase = NULL; loopbase = NULL; /* printf("Hallo"); */ Printf("Chipmunk-BASIC v1.00\n"); Printf("by David Gillespie\n"); Printf("CPX-BASIC v0.01\n"); Printf("by Oliver Teuber\n\n"); exitflag = false; do { TRY(try2); do { Putchar('>'); Gets(inbuf); parseinput(&buf); if(curline == 0) { stmtline = NULL; stmttok = buf; if(stmttok != NULL) exec(); disposetokens(&buf); } } while( !(exitflag||P_eof(stdin))); RECOVER(try2); if(P_escapecode!=-20) Printf("Error %d/%d!\n", (int)P_escapecode, (int)P_ioresult); else Putchar('\n'); ENDTRY(try2); } while( !(exitflag||P_eof(stdin)) ); Free(inbuf); return EXIT_SUCCESS; } Chipmunk BASIC 1.0 David Gillespie XControl-Version by Oliver Teuber -------------------------------------------------------------- COMMANDS LIST line(s) List the specified program lines. For example, LIST 10, 100-200 lists line 10, and lines 100 through 200, inclusive. RUN [line] Begin execution of the program at the first line, or at the specified line. All variables are cleared. RUN file[,line] Load and run a program. For example, RUN "FOO", 30 loads a program from the file FOO.TEXT and begins execution at line 30. NEW Erase the program in memory. LOAD file Load a program into memory. The program previously in memory is erased. The file name should be in quotes; a .TEXT extension is automatically added. Files contain ASCII listings of the programs. All lines in the file must begin with a line number, but line numbers do not need to be in increasing order. MERGE file Load a program into memory. The previous program remains in memory; if a line exists in both programs, the newly loaded line is kept. SAVE file Save the program in memory to a file. BYE Return to the operating system. DEL line(s) Delete the specified program lines. Line numbers may be separated by commas and dashes as in LIST. If used inside a program, DEL will terminate execution only if it deletes the line on which it appears. RENUM [start[,inc]] Renumber program lines. By default, the new sequence is 10,20,30,... The first argument is a new initial line number; the second argument is the increment between line numbers. STATEMENTS REM comment A remark; ignored. Comments may contain any characters except that REM can not be immediately followed by an alphanumeric character. [LET] var = expr Assign a value to a variable. Variable names contain up to 20 significant characters, consisting of upper- and lower-case letters, digits, underscores, and dollar signs. Variable names are case-sensitive. Variables hold real numbers normally, or strings of up to 255 characters if their names end with $. Examples: LET X=20 X$="FOO" X$=X$+"BAR" DIM var(dimensions), ... Allocate memory for arrays. Arrays may have up to 4 dimensions, ranging from 0 to the value specified in the DIM statement. The same name must not be used for both a simple variable and an array. If an array is used before it is dimensioned, each dimension is set to 10. Example: INPUT "How many elements? "; x DIM array(x,1) FOR i=1 TO x : INPUT array(i,0), array(i,1) : NEXT PRINT items Print the items on the screen. Items may be either numeric or string expressions, and may be separated by commas, semicolons, or nothing. Numbers are normally terminated by spaces. To avoid this space, convert the number to a string with STR$. The line is terminated by a CR/LF, unless the item list ends with a comma or semicolon. The word PRINT may be abbreviated as a question mark. Examples: PRINT "1+2=", 1+2 PRINT X$ "=" Z$; ? x; y+z INPUT [prompt;] vars If a prompt string is given, it is printed. Otherwise, a question mark is printed. The computer then waits for values for each variable to be entered. If several variables are listed, their names must be separated by commas. If the variables are numeric, their values may be entered on separate lines, or combined with commas. Any numeric expression is a valid response. If the variables are strings, each string is typed on a separate line. The characters typed are copied verbatim into the string. String and numeric variables may be not mixed in a single INPUT statement. Examples: INPUT X$ INPUT "Type 3 numbers: "; X, Y, Z GOTO line Begin executing statements at the specified line. The line number may be any numeric expression. The word GO TO may be used instead of GOTO if preferable. IF condition THEN line/statements ELSE line/statements If the condition is true (i.e., the numeric expression has a non-zero value), the statements following the word THEN are executed. Otherwise, the statements following ELSE are executed. If there is no ELSE clause, execution proceeds to the next line in the program. A line number may be used after either THEN or ELSE, for an implied GOTO statement. END Terminate the program. An END statement is not required. STOP Terminate the program with an identifying "Break" message. FOR var = first TO last [STEP inc] {statements} NEXT [var] Execute {statements} repeatedly while the variable counts from "first" to "last," incrementing by 1, or by the STEP value if given. If the STEP value is negative, the variable counts downward. If "first" is greater than "last" (or less than if STEP is negative), execution proceeds directly to the NEXT statement, without executing the body of the loop at all. The variable name is optional on the NEXT statement. WHILE [condition] {statements} WEND [condition] Execute {statements} repeatedly until the WHILE condition (if given) becomes false, or until the WEND condition becomes true. This structure can emulate Pascal's WHILE-DO and REPEAT-UNTIL, or even both at once. If no conditions are given, the loop will never terminate unless the Evil GOTO is used. GOSUB line RETURN Execute the statements beginning at the specified line, then when RETURN is reached, return to the statement following the GOSUB. READ vars DATA values RESTORE line Read numeric or string values from the DATA statements. Reading begins at the first DATA statement in the program and proceeds to the last. Reading past the end the last DATA statement generates an error. The DATA values must be either numeric or string expressions, according to the type of variable being read. Reading the wrong kind of expression produces a Syntax Error. The RESTORE statement causes the next READ to re-use the first DATA statement in the program, or the first DATA statement on or after a particular line. GOTOXY across, down Move the cursor to the specified screen position, between 0,0 and 79,23. ON expr GOTO line, line, ... ON expr GOSUB line, line, ... If the expression's value, rounded to an integer, is N, go to the Nth line number in the list. If N is less than one or is too large, execution continues at the next statement after the ON-GOTO or ON-GOSUB. POKE addr, data Store a byte at the specified address. NUMERIC EXPRESSIONS x AND y Logical AND of two integers. x OR y Logical OR of two integers. x XOR y Logical XOR of two integers. NOT x Logical complement of an integer. x+y, x-y, x*y, x/y, x^y, -x Typical floating-point arithmetic operations. x=y, xy, x<=y, x>=y, x<>y Comparisons; result is 1 if true, 0 if false. x MOD y Modulo of two integers. SQR x Square of X. Note that parentheses are not required if a function's argument is a single entitity; for example, SQR SIN X needs no parentheses, but SQR(1+X) does. SQRT x Square root of X. SIN x, COS x, TAN x, ARCTAN x Typical trig functions, in radians. LOG x, EXP x Natural logarithm, and e the power X. ABS x Absolute value of X. SGN x Sign of X: 1 if X is positive, 0 if zero, -1 if negative. VAL x$ Value of the expression contained in the string X$. For example, VAL "1+2" yields 3. X$ may be a single string literal, variable, or function, or a string expression in parentheses. ASC x$ ASCII code of the first character in X$, or 0 if X$ is null. LEN x$ Number of characters in X$. Precedence: Parentheses Functions (incl. NOT and unary minus) ^ *, /, MOD +, - =, <, >, <=, >=, <> AND OR, XOR STRING EXPRESSIONS "string" or 'string' String literal. Single quotes are converted to double quotes internally. x$+y$ Concatenation. Result must be 255 characters or less. x$=y$, x$y$, x$<=y$, x$>=y$, x$<>y$ String comparisons; result is 1 if true, 0 if false. STR$(x) The number X expressed as a string of digits. No leading or trailing spaces are included; scientific notation is used if the absolute values is greater than 1E12 or less than 1E-2. CHR$(x) The character whose ASCII code is X. MID$(x$, y) MID$(x$, y, z) (Parentheses required.) The substring consisting of the first Z characters starting at position Y of string X$. Position 1 is the first character of the string. If Z is omitted, 255 is used, i.e., the entire right part of the string. CONVENTIONS Multiple statements may be written on a line, separated by colons: 10 INPUT X : PRINT X : STOP There is actually no difference between commands and statements; both can be used in or out of programs at will. Certain commands, such as NEW, will, of course, halt program execution. Line numbers may be any integer from 1 to MAXINT. To delete a line use DEL, or type its line number alone: 10 Press CLR I/O to halt program execution. [This is not supported by p2c's translation!] To leave BASIC, use the BYE command. Keywords must be written in all upper- or all lower-case; they are always converted to upper-case internally. Spaces are ignored in the input except between quotes. Square brackets are converted to parentheses. Missing closing quotes at the end of the line are added, as in the command: SAVE "PROGRAM dBASICPX-BASICnpT#*\ *X#.p.*Id$]$*BB*BGCPX-BASIC#)v6-"zBB3)~)|)z&`HzN o g#H yH0(gpNuAP NuH 8&oEvBB@5@5@5@5@ 5@ 5@5@5@5@5| j05@5@4HjC JN&XO0*fA|pNB@`:IH89kNLlHTNXOp2/BBr!? j h@NOpLNuH O(H/INLB oBvEGx `48R LN b< g< gpN#qg,H`Nv<@ f o ` W .BH|"|8f =|R` =|` LN b 4=8f=|`=|` HNJ@g SzB+`poR8PR LN b 4$8g 4_8g48HNJ@fB3PC: KNrJ@gC> KNrJ@f =|` CB KNrJ@gCE KNrJ@f =|` CH KNrJ@gCL KNrJ@f =|` CP KNrJ@gCT KNrJ@f =|` CX KNrJ@gC\ KNrJ@f =|` ^C` KNrJ@gCd KNrJ@f =|` 4Ch KNrJ@gCm KNrJ@f =|` Cr KNrJ@gCv KNrJ@f =|` Cz KNrJ@gC~ KNrJ@f =|` C KNrJ@gC KNrJ@f =|` C KNrJ@gC KNrJ@f =|` bC KNrJ@gC KNrJ@f =|` 8C KNrJ@gC KNrJ@f =| ` C KNrJ@gC KNrJ@f =|!` C KNrJ@gC KNrJ@f =|"` C KNrJ@gC KNrJ@f =|#` C KNrJ@gC KNrJ@f =|$` fC KNrJ@gC KNrJ@f =|%` `,C KNrJ@gC KNrJ@f =|?`C KNrJ@gC KNrJ@f =|@`C KNrJ@gC KNrJ@f =|A`C KNrJ@gC KNrJ@f =|B`C KNrJ@gC KNrJ@f =|C`ZC KNrJ@gC KNrJ@f =|D`0C KNrJ@g0C KNrJ@g C KNrJ@gC KNrJ@f =|E`C KNrJ@gC" KNrJ@f =|F`C& KNrJ@gC, KNrJ@f =|G`C2 KNrJ@gC7 KNrJ@f =|H`hC< KNrJ@gCA KNrJ@f =|I`>CF KNrJ@gCI KNrJ@f =|J`CL KNrJ@gCQ KNrJ@f =|K`CV KNrJ@gCZ KNrJ@fZ=|* <N#qg`Nv0@-HHt8 LN CR@?C^ nN}H\O LN &R`pBn*y`*m g"K MNrJ@f fnp>N#qg*H`Nv:@+y#"K MNB-* KN 3$f |+B4`B-+AdC4""2A4+H0-M`HNJ@f<.f=|AnC""2AxC(""2A(C2""2S`p 4.8fAC2""2`VAC<""2ALZhv,:HVdr (6DRj^v"K ja`A/ / ? A aO "Ka`/*C KazXO`*H?C KabTO` Kp+a` Kp-a` Kp*at` Kp/ah` Kp^a\` Kp(aP` Kp)aD`~ Kp,a8`r Kp;a,`fC Ka`XC Ka`JC Ka``C Ka0`C Ka"`C Ka`C Ka`xC Ka`jC Ka`\C# Ka`NC' Ka`@C+ Ka`2C/ Ka`$C4 Ka`C8 Ka`C= Ka`CA Kaz`CE Kal`CJ Ka^`CO KaP`CS KaB`CY Ka4`C_ Ka&`Cd Ka`Cg Ka `|Ck Ka`nCp Ka``Ct Ka`RCy Ka`DC Ka`6C Ka`(C Ka`C Ka` C Ka`C Ka~`C Kap`C Kab`C KaT`C KaF`C Ka8`C Ka*`C Ka`C Ka`C Ka`rC Ka`dC Ka`XC Ka`LC Ka`@C Ka`4C Ka`(C Ka`C Ka`/*C KaXO$R fOLNu/ / $H`2 R&P h*g hf R hN RB RNB$ f&_$_NuH>O(HE RN "HANC RNB`,"* ЁЀ RHHЂм%@"RRI RN Rg HNJ@f"L Ra *g*j`,M*m g"m g."f&&M*m f%M`-M Aa KN g6pN#qg&H`Nv6@'M f%K`-K &'TaaOL|Nu/ANHrXOp*NNuAaNuAaNuAaNuOHo NO$H *fa,j j%PGBIq0.|)b\@0;NTfP,PPPPPPPPPPPPPPPPPJnJ V^8$AC""2` <N(g`Nv0@'H"nN`%N Jat,H+g. <N(g`Nv0@'H"n0"QN`~ n0C""2`l JHoN,^XOA"K"""` JHo aXO / A C""2`* JHo aXOA C""2` Ja(FA N|A C""2` JHo aXOA C*""2A*C NqA*C""2` JHo a`XOA*/ / ? Ho*NivOA C""2`x JHo a*XOA*/ / ? Ho*NX>OA C""2`B JHo aXOA*/ / ? Ho*NXOA C""2` JHo aXOA C""2A / / ? HoHNX>OA / / ? Ho*NXOA>C Ns6A>C""2` JHo aTXOA*/ / ? Ho*N\rOA C""2`l JHo aXOA*/ / ? Ho*NfOA C""2`6 JHo aXOA*/ / ? Ho*NbLOA C""2` JHo aXOA*/ / ? Ho*NhOA C""2` JHo a|XOA C""2AC ""2A CNnRop`B@?AC"""2A"CNnRlp`B@2@A 0N{A C""2`@ <N(g`Nv0@'H JHo aXOA*/ / ? kaO ` Ja*H,jCa/j /fAC""2` JHoN,^XOA"K"""Aa%N`` <N(g`Nv0@'HCN Ja k`^ JaL*HfCI((8`HA N{A C""2` Jp al Ja'Hp JaZ Ja&ro&(< *g @ h f %P Ja( kN Rc kN (R kN c kB`( kHp8?CAN}H\OC kN Jp a`b JaR*HN A N{A C""2 MN`0 JaN/@ @HA 0N{A C""2`a K"oh"""OHL|Nu/ / O$HG JHoa>XOA"K"""`ga^ j%P JHoaXOAC"""ga6AC$""2A$C&NnRmPA / / ? Ho.NfOA$CNqA./ / ? Ho.NbLOA$C""2`AC$""2AC.""2A.N{ A$Nn*g&A / / ? Ho.NfOA$C""2AC$""2 /$A./ / ? Ho8NfOA.CNqA8/ / ? Ho.NbLOA$C""2AC$""2A$N{ g"AC$""2 /$A$C""2 *g @ hgR K"oD"""O8&_$_NuH0O$HG JHoaXOA"K"""`> j6(%P JHoaXOAC"""fgaF|fAC$""2A$C0NnA./ / ? Ho.Nh$OA$N{ /AC(""2A(C:NnA2/ / ? Ho2Nh$OA(N{" N@A$N|A$C""2`\|f,AC$""2A$CNqA$C""2`*AC$""2A$CNs6A$C""2 *g @2(Ht cv(Ƽf K"o>"""O.L NuH0O$HG JHoaHXOA"K"""` j6(%P JHoa XOAC"""ga|fNg"o kN oNB``AC$""2A$CNnA$C""2`4gaJ`*AC$""2A$CNnA$C""2 *g @2(Ht cv(Ƽ0f& K"o>"""O.L NuH0O$HG JHoaXOA"K"""` j6(%P JHoaXOAC"""gag"o kNrJ@f0Hr c tļ@fP"o kNrJ@j0Hr c tļ f("o kNrJ@o0Hr ctļ gx`BD kNB oNB`AC$""2A$CNnRf0Hr c tļ@fhAC$""2A$CNnRl0Hr c tļ f4AC$""2A$CNnRo0Hr ctļ gx`BDBB@A$N{A$C""2 *g @2(Ht cv(ƼfJ K"oB"""O.L Nu/ / O$HG JHoaXOA"K"""` j%P JHoaXOAC"""fgaAC$""2A$N{ AC$""2A$/N{"ŸA$ N|A$C""2 *g @ hgr K"o:"""O.&_$_NuH0O$HG JHoaXOA"K"""` j6(%P JHoaXOAC"""fga|fTAC$""2A$N{ AC$""2A$/N{"A$ N|A$C""2`RAC$""2A$N{ AC$""2A$/N{" A$N|A$C""2 *g @2(Ht cv(Ƽ`f K"o>"""O.L Nu (g ADaNu (g"@ iIg i fpNuB@Nu/ $H` j%P JaJg$_Nu y` h "gfNu/ $Ha$H f A^a6 J$_NuB$BNuH8$HaaaEI` R&h PHa RNB$ f`0 T&h(+g"h0"g AN T"h0B TNB( fLNuHO$HG JaJgaFv(< *g8 @ hf.\HC""2AN{& j%P *g @ hg( *gB @ hf8%P *g( @ hf\HC""2AN{( j%P`(<(S`D,l n8f JaVa@a. f& `+l Aa LN`*L(N gl JaJf Jp a JaJgO L|NuH>O$Hv (atJf" Ja& JabJf Jp a Ja(E&R g0` 'Cք&k f&RM(k lFg l:g l?g l@g lIg lHg l6g l.f`(TAC""2AC.NnA / / ? Ho Nh$OAN{&*R`*m gf f/+/A NHrPO`A -N|AC""2 g @ h f(@ g @ hgf(T f &k " f&R`&&k fO L|NuH8O$HBGId`B j0(Hr ct(ļgv%P`\ JHo afXOA "K"""g"L ka kNB`&A / / ? A axO /ANHrXO JabJgpJfp NHJOLNuH>O$H *g,"@ if"Cd @ haD j%P Jp a` ANHrI( *g @2(ga j"h)+ *g @2(f"h)+gat j%P JaJg%TK JgGq MNG Jaf,H"n0 g @N n0B <N&g`Nv0@"n0""MN JaBJf Jp aANHr Ja$Jg` MNG"L Ma G& Ja,H`$ANHr MNG Ka""L Ma& g.%@ JHo aDXO n0C 0 *g @ h f%P`aN(%W JaJf Jp a JavJgn KaOL|NuH8O$HJg%y, Ja"&Hp Ja++f JHWaXO k0C 0` k0(P Ja"k0" g LNO LNu/ $Ha" Ja6#$B$_Nu/ O$HHWaHXO JpHa4ACNnRf4p"*g" A h/fR j hIfS j%P"*gJj *g @ hf Jap`|O $_NuBNuH0C$$Qt` Jg&QJ fB"`:&Q" &Q!kJg&hkfR&hkfS&h!SJjvL NuH.O$Ha/H(+ga Jpa< JHo*aO(HE g @ h f Ajah R h fv`BCJf R&PNB$Jg LaJf LHWaXOAC~NnRgB*l,jJg6 R%h R)h La\Jf LHWaXOACNnRfBJf)M%N R&PNB$O L|Nu/ $Hp&N#qg`Nv0@ #1| !y$!j Ja$_NuH8(HE f AaT R h fv`BCJf R&PNB$Jg R%h R)h R&PNB$ LaLNuH>O$HMK( Ja(&H(j%m f *"U%i *g. @ h gR`" g @"( fAaۦ U* U%h *g @ h9fp`B@ j%PJg JaJf` j%P++g$ k0"g AN k0B Ja^"k0"` JHWaXO k0C 0+j%L JatJf Jp a JabJgO L|NuanNu/ $HaDJgaÌ` Jal Ja#(#0$_NuH $HaJ& Jp a܂ Ja:(pNHJpYNHJp CNHJp DNHJLNu// $Ha&"*gN A h6fDp&N#qg`Nv0@ #1| !y$!j j%P` Jp.apo$ Ja`< Jpa JaRJf Jp aSpl Ja8Jg Ja.Jf Ja4$_&NuH8$HIq *g @2(gaٸ j&h%P+*g Aaقvx Jp aR Ja *RpoaٔpnaيR ' "N&"*g A h fz`BEJf Jp aJg j%PD*++g4 N(g`Nv0@'H,x`  k,BRn`@ N(g`Nv0@'H,x` ЄЀ k,C 0Rn JaJf Jp a` JaJgL8Nu/ YO$Ha. Jp a: Ja WXO$_NuH>ON|&/yqK,MqxEA#qXHN|J@fIBB,` U* g @ h g)U ,g @)P U0(|Ib@0;N ",6@T^fpzJ La`T La^`J La`@"L/ AaRB"_aX`("L/ Aa:p"_a@` La` La` La` La` LBa` Lpa` La` La` La` La` La` La<`<` La` La`x La`n La`d La|`Z La`P La`F La$`< La `2 LaF`( La` La0` Lap` A4a,f La*Jf La* ,f"-gf A+h -g @*N|rdlNLN|& -ff#q`0#q VfADNHr` V*g0||b@0;NXXXXXdXJ<. AJNHr`A\NHr`AlNHr`ANHr`~ANHr`pGq <N&g`Nv0@&H?9qzCN}HTO/ ANHrXO KN`"Gq|pg/ANHrXO0N -g @/ANHrXOp NHJO:L|NuH>O.N G4 <N#qg`Nv0@'HBBBAlNHrANHrANHrANHrB+EIMKq, N*XHN|J@fHp>NHJ kNG Ka^ +fB( ga Ka+f JN:J@g*`. yqxg?9qz?9qxANHrXO`p NHJ+f JN:J@gR kNBB@O8L|Nu09f2909NM\3RyNu/ E0oSR0f2*0*NM\3$_NuH8$HBCBGI`NL0yg4HRS SmBS0Q@g [@g|rg`(JCopNIHL,LK/<KNF&HKLL,BNuHL,LKNu.yRNpNu#RNN2#RNN#RNN#RNN#RNN:#RNNTARRC <NARRAp"<NNuCRRA <NARRp"<NNuARRIAAFF( F(@F(`F(F(F(F(NuARRIAACJC Y Y@Y`YYYYNuH8]O$H&I(o&BCx%p JR@g|fJ@g@HNBEgvBA< <b;k`|<*f<`&<0< b ACp a=$Wb<gt<.f6<*f4`$<0< b ACp a=$Wb4g<߲<Lf g`<hggr@d|?@0;N>nBXr [0`|A`0A2"La/@`\ [2"La/@`JJEj `p0?4 La.TO@`*JEj `0H?4 La.&TO@` JEj `p0?4 La.fTO@`JEj `p0?4 La.TO@`A 2"La@`A 2"La@`A 2"La&@`|@HN0\OLxNup` Warning: use TCFLTLIB to get float support for printf. H0O$H&I>68jx`p@c8?|0|g* J0R@CDHoBaXO0?| JoBg|-?| `&g|+?| `g | ?| ?| ?D62XAXAt0gJf$B RoDJDf f2SA`.C"SDQ` X JDf fSA`C"SDmQto An ?B?B`ff ?C?B`?C?BC8?|@gE`e0/DS@jD@-`+/ r AJa8"_AFpJWF@rg SAkt0QS@k AFQ`*H0O$H&I?|@>>68jx0|g JpCDHoBa(XO?| JoBg|-?| `&g|+?| `g | ?| :/DlDE|0 ?| |JDffSFDged?DD?|6`8JEfp?@?@6`& JpCDHoBaXO 5d?EE?|6`SE?EE|1"p?@6@`E|b J0CDHoBa>XO0@E:/DDEE?D6DC"SDmQ?EE`?|0D|b JCDHoBaXO0D0:/D<RFDJDffSF?D6t0JfB ?| RoDC"SDk6Q`.C ?E SEj0?| RF`QC"SDkQto Fn ?B?B`&ff ?C?B`?B?C`|? ?| x?D ?D?D6|`H0O$H&I?|@>>68k |kx`x0|gZ JCNaRANJf JfJPgANCXa0a\XO 0VSD`BDBoBBoD`6x0/gf@ Ka*0/ g@AN0/g@ Ka*n0/ g@A NJof Jo6fgp@A .N0/g@ Ka*20/6g@A"N0/@g@A8N0/gg@ Ka* 0ObL Nu0<HS@rJrfMHGGCA 0jD@aAC a`aAC a P?b C%HaSG`A6"$RGJDoGn| Fo| o00CC?SFpԂӁ@Q` pԂӁ@*(6ԂӁ@ԂӁ@ԅӄC<0QBJjR! :fg0`1RPOpAL@NuA"o4GGG//?AOCaK/%/%?%A~a4KMa MQCaC 2""AC`DaA aAaC fIa<,,OFEEn3L`Nu?*Eq? `B?$r">?*¦?SK? ?%s7?x'? ߜ?Pm?H7+@H?;q?㤅 i?~HT?-!b2?JTB?Š[#?lF?kjqĎ?M Vv?F$?Z^ŝW?ɉl,~!?Փg?@&Nh?,n?zOUY =?Lu7?SB?l?zߚ:R?{Vi`?l\@?7 tn?d]J? Z0?zF?gw?4N|?[R?&)e:Ӻ?˙y0?6Y_5?;Oq3?e3ZK? ׬?}w_?8=4;?﬋??]?Ƞu?A"o4>GGGF//?BB?+1t?{]?΅RfA?U?ڢ!h5? ?A%I#ƽ?q$'d#Ϲ o?jD@ @c0<?>@2AA@AC,0 ]HOgCbC OdaJGf>J_kNu?@@@@ @@P@$@@ @4ɿ@iŭ+p@xIϦAGɀCQ~ގFMHvuu Z;]=]u%`R exp C6O璃cW䔋mϫp ԥT/Xx6.=8?Xlb?\>np?X?mKz?m?ZD?` +?y?ryXF$^?4 xدalJk fJgta,A?BPHM:@v@ @?bg0 `:xEE?kFg( Em bJGj SD&,FFAFBCF0@DLd>@8<HDBD/DBAa Ia VaKxA !%!%1%xa KMaMQC a CaOL`NuA"o4JWgjJQj4`JQj$`, @?c& fJf`JQj "`"?`QBi`v|~@@D@k`| k` &`P& D@Ƃ Wg>*(g4JWgjJQk`(JQj`"څلgj `†fćg ևцdRQH TOLNusqrtg(nJ@j HzaHNuA"o4HEBEڇ>,HFƔ.HG,HGBGBFHFj ԅӄSԅӄkf Jf|`&I"HA,h,BFHFԆ|`$BBHB6HCBBHB>ƖDjSFօDk.h.BGHGև~HC4BC`&BC2ǖDjSGօDkփB2DjJGfr2ҁSցDSFSGօDօDkHF<9g( c29gj9g``RJBjS`DkN b:օD"HA.HABABGHGҁ߇DD.ǒD9fDo RۄfR@@2""]ILNusquareA"o9g4CG?/p<6>܇׀HAHBHDHE>܇׀?<BCHCHF.HG܇׀.HG܇׀.HG܇׀.HG܇׀.HGև.HGևр?<6HCHFp>܇׀>܇׀>և(".Jkއ9gJg j c a0JfJg9g9fJkt`Jk`h/"HA.HGpށ@H@HG0BGHBHE2tށـׂ݂p"Jk އل݆׃SANu b c0a b f$JfgJk؄݆׃SAR׀fRA` Jk؄݆׃SA Ae "$Hzap` ҁQ !1LNudivCA / / ? AaA0 ]HNu4CG?bfb RGd6|/|$F,HF.h.BGHG҇~`"BAHA,HFpHAHB024 6<?~Gj SWԅӄGd, Q,HF.h.BGHG҇~HA`"BAHB02BB6|FjSG҄FdHG>HG9f,⎜bHFRFkHz``, c9g~9fJkb`lJkf`X//&HC0BCHCH@B@4rЂׁ"$dSGԅӄNu9f╚kfg` JfJg`,HFRdR`,HF  @c"$HzaD` ЀP !1L Numod42<@H@J@fAH@ @bQA @bYA @?bUAJ@kSAH@AԂQ0 B]HNu@TXJ? ?ry@ڢ!h5?ڢ!h5?ڢ!h5?@@NaN-INF+INF(C)Xmath by d'ART"_HpNLJ@fpN/ Hz?<&NN\O$_Nu 8Nu/QOM-O, ICHzaТXOPO,_NuH@B@H@"VraJJ@kNu.np`/YOM, IC HzahXO VBXO,_Nu"VS@eQ,Nu/QOM-O, I"oHza2XOPO,_NuH@B@H@"VraJ@kNu.np`/YOM, I"o HzaXO VBXO,_Nu"VS@eQ,NuH Ov Jj|-?|D`g|+?|`g| ?|`~?|`vH Ov ?|`dH Ovf?|`L|0f|x?|`2|X?|`$H Ovf?|` |0?|$H>C8jxA aBA pJWF@?@gA 2SAktaSb (Q2/@4/(jt@jtBgf 0Ao@@Alx?B?D`hH0$H&IB(v`H0$H&IvJWFCJBj4Cb6xJAkCc8Cf K0a0 JN` 0 JN0 Kap0DL Nu6x0/g f@ JaP0/g@AN0/g@ Ja,0/g@A N0/g g@ Ja0OLNuH0E6`H0E4&H6g8Kg SC JpNQ J0|gNL Nu00000000 (VHNuH8$H&I+g|2g+gC'I&'IR'I UAe"S(kt d W`2+gH@ KaJLJ@f,H@ KaLJ@gkg&B JLNu3 ``/ / B@JgB)g@)fJ&Q(i ge"// Ia"_ _J@f&Q`B@"(_&_Nu3 `p`#H#H&HJfS#K " I(Ia"LJ@f`H:$H&I(S&gfJg^+g`)ft,k x$ڹd SfRe`.&// Ka.$"J@k,f4(SSfRf& L\Nu3 `p`"`&x,A'J'JE8'J & KaJ@kfRf"`"PdB@ Nu(g*gg/a _J@f/a _J@kf"P`3 `pNup/alXONu(g4(f>"P | dNu?/a _2J@f 0Nu3 `pNuC!I!IR!I `H&H(o Ia6k g La` a|Jf(H <a )Hg0@0;6 K (:gNaJ|g9@{00 l)H()H `da)b*a)b* / ?/?<=NAP$_JkR9@{0 la A()H)HRH)H QC# LLNup`p`p 3` g la r`YOCBgg Ar`THWf0XONup`rwar+w+a+rbwbabr+b rb+ w+b wb+ a+b ab+ Ah~p`Ar(WVNu?/ Ada4Aza*Gh~6<`Gp+g Ka Q&_6Nu/ &H+g+g8aJ@f80+a"J@k,+g ka PB@7@? Ka0&_Nu3 `p`J@k"Pc  PNupNuH&H(k L0+"+ aJkRgF+f, L"St gSj`"HSISSk ögSjJg&"'LBLNup`p`H&H(k6+"+g0Dta$Jk+fZ"S"L Ip gSj`*| // " 0a"_"JkNgPAp SjH@" 0aLJk*g,`0" La|Jkg&'LB@LNup`p`H06&Hp Cgp@CfFpC?/ ?<=NAPOJk&8jaTpCgF?<?p/?<BNAO Jj.`Br߲fNAXONua3`p`ް|c/ ??<>NAXO$_JkpNua3`pNu/ /?<ANA\OJkp$_Nua3`p$_NuHR@W@e >?NAO $_JkNua3`pNuT@a J@gX  _H&Hx&SgkJ9kvf~a<g&< g<<gP< g< e޸dRa`JgSSKpap apa`Rp ap a`bJg^`TxB9`Jx B9`f0g6f(g.f g&fgfgfggepNupNuJfpNu g<g8g4g0g,g(g$g ggggg ggf @Nu"HJgJgJgJgJg JgJgJf SNuH0$H|g|$bGrtgJ3kSJgtJ@f"p <0f:pgb<߶<Xf(pf"`N|f<0fg><߶<Xfg.GJ3d"3d&HCHCJCfԃԁd` & gSJ"L Nu3"`p` 3!`p& g"`//"4UB|"bZC"t&HCJCf&HC;0NRBH@B@H@f`$?&8BCHC06H@0HC;0&RBJf8QB" _&Nu3!``0123456789abcdefghijklmnopqrstuvwxyzH &/?<HNA\OJf 9k>g @ NJ@fp @LNuH0&gPR<e a g!CC "A`rG&S f. < a gj&@Ap !|'H&#A"P` )d I"Q f`rd ` #@#C"nAL Nuk |`3 ``/ oLQ d nf@axJg*`6C g,g"@ f` "/?<INA\OJj`p$_Nugp`/ &y g/ &S?<INA\O`&y g/ &S?<INA\O`&_NuH8$<CG g" c &@ f`(@ ,gb*"Ҩeg ` )H`p"@")Ө )H`>"@ gb" ҩeg`N"(ө`" "H" ҩf @"(ө" l eb&/ ?<INA\OJfQLNuP`Jg/bg2 4gf!Sf`f`!Sg"gH?LxH?LxH?LxH?Lx`H?Lx8H?LxH?LxH?LxH?LxH?LxpH?LxHH?Lx H?LH?SfvLx2|HgS@!!Q|gSA!Q`2 4gfSf`f`S"gH?LxHxLxHx(LxHxPLxHxxLxHxLxHxLxHxLxHxLxHx@LxHxhLxHxLxHxLHSfxLx2|HgS@ Q|gSAQ _Nu/$gSe40HB4 gxH_>"&(*,."B$B&B(B*B,BH~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H`SfL||0HgS@!Q|gSAQ _Nu|AP0|Nu|A>0| Nu|A,0|@Nu<0< SHNu|A 0|Nu@@@@@@@@@@@@@@@@@@@@@@@@@@@::::::8888888888888888888866666644444444444444444444@  !"#  !"#$jD BJjD$HBJBf"$HBJBf $jDNuHBЂ$jDNuHBЂ$jDNu"@$jDJjD$HBJBf.$HBJBfB@H@$ jDNuB@H@HB0B@H@$ jDNu A"B@H@HABAtҁрdЈӁрQ$ jDNu/AkB1|1|!I!o1A"o 1Y1Q"_A000000000AkBry`AkBBhBhre`AkBBhBhr{`3kN/ CkB2dBi3| Cp 2Q"<ps/ NB$_ _0kNAm"op,2QAmZp 2QNukBlprmmZAkBBh1|1Arz`/ 1@ 0"<psNBAm0$_Nu#nZ3lp4`/ 3kB@@A"CkDB@22220<"<$NBAm0$_NukBk`lmnZpZ 3qr#qtBqNu/ $HHNJ@fA$_Nu?/ $HNHJ@fg JNL6R@fp` J0NnB@$_6NupNNuH<&H68$II g(g$"J KNC KN KN K`*K|f$?C MN}HTO0|&b@0;NN^n~C KN`lC6 KN`\CG KN`LCY KN` <= >= <> AND OR XOR MOD NOT SQRSQRTSINCOSTANARCTANLOGEXPABSSGNSTR$VALCHR$ASCLENMID$PEEKLETPRINTINPUTGOTOIFENDSTOPFORNEXTWHILEWENDGOSUBRETURNREADDATARESTOREGOTOXYONDIMPOKELISTRUNNEWLOADMERGESAVEDELBYERENUM THEN ELSE TO STEP REM%s%sSyntax errorType mismatch errorBad subscript?? %.*s??Extra information on lineUndefined line%ld %s.TEXTr%s.TEXTrBad line in file %s.TEXTw%s.TEXTw%ld Undefined line %ld in line %ld ?%s ? ?? ?? FOR without NEXT?NEXT without FORWHILE without WENDWEND without WHILERETURN without GOSUBOut of DataArray already dimensionedIllegal commandBreakInteger overflowDivide by zeroReal math overflowReal math underflowValue range errorI/O Error %d%s%12ld in %ldChipmunk-BASIC v1.00 by David Gillespie CPX-BASIC v0.01 by Oliver Teuber Error %d/%d! RR$B$$<<$$B$(OO(AAp ~~<,,~p`p~ РШ||||||||||||||||||||||U<U>bf 0fFxax  T88T~00 < 0` 8 0 <<`0 0`fff~fffF<flxpxlf``````|brz^NFBff>`|ffff|ffff>fff>F<`|fffffX0`dhpxlf |fffffffff>lp````ffffdxff <~`<f<~>$F>0<~><~>$0<~`<$$$F  4X|fff,brZNFf>~000| bhv+Cbhv.V6ll6l66l4X<~>4X>`~l>ffn <>6666666~~fv~ff<~>6640x |lll >fff~~fv66 2p`~`p>O(H/INEB oBvEoGx `48R LN_趀b< g< g pNa#Dg,H`Nl<@ f o ` W .BH|"|8f =|R` 6=|` , LN_趀b 4=8f=|`=|` HNfJ@g SzB+`poR8PR LN_趀b 4$8g 4_8g48HNf~J@fB3PCB KN_PJ@gCF KN_PJ@f =|` CJ KN_PJ@gCM KN_PJ@f =|` XCP KN_PJ@gCT KN_PJ@f =|` .CX KN_PJ@gC\ KN_PJ@f =|` C` KN_PJ@gCd KN_PJ@f =|` Ch KN_PJ@gCl KN_PJ@f =|` Cp KN_PJ@gCu KN_PJ@f =|` Cz KN_PJ@gC~ KN_PJ@f =|` \C KN_PJ@gC KN_PJ@f =|` 2C KN_PJ@gC KN_PJ@f =|` C KN_PJ@gC KN_PJ@f =|` C KN_PJ@gC KN_PJ@f =|` C KN_PJ@gC KN_PJ@f =| ` C KN_PJ@gC KN_PJ@f =|!` `C KN_PJ@gC KN_PJ@f =|"` 6C KN_PJ@gC KN_PJ@f =|#` C KN_PJ@gC KN_PJ@f =|$`C KN_PJ@gC KN_PJ@f =|%`C KN_PJ@gC KN_PJ@f =|&`C KN_PJ@gC KN_PJ@f =|'`dC KN_PJ@gC KN_PJ@f =|(`:C KN_PJ@gC KN_PJ@f =|)`C KN_PJ@gC KN_PJ@f =|+`C KN_PJ@gC KN_PJ@f =|,`C KN_PJ@gC KN_PJ@f =|-`C KN_PJ@g0C% KN_PJ@g C* KN_PJ@gC0 KN_PJ@f =|.`HC6 KN_PJ@gC9 KN_PJ@f =|/`C< KN_PJ@gC@ KN_PJ@f =|0`CD KN_PJ@gCI KN_PJ@f =|1`CN KN_PJ@gCR KN_PJ@f =|2`CV KN_PJ@gC[ KN_PJ@f =|3`vC` KN_PJ@gCf KN_PJ@f =|4`LCl KN_PJ@gCq KN_PJ@f =|5`"Cv KN_PJ@gC| KN_PJ@f =|6`C KN_PJ@gC KN_PJ@f =|7`C KN_PJ@gC KN_PJ@f =|8`C KN_PJ@gC KN_PJ@f =|9`zC KN_PJ@gC KN_PJ@f =|:`PC KN_PJ@gC KN_PJ@f =|;`&C KN_PJ@gC KN_PJ@f =|<`C KN_PJ@gC KN_PJ@f =|=`C KN_PJ@gC KN_PJ@f =|>`C KN_PJ@gC KN_PJ@f =|?`~C KN_PJ@gC KN_PJ@f =|@`TC KN_PJ@gC KN_PJ@f =|A`*C KN_PJ@gC KN_PJ@f =|B`C KN_PJ@gC KN_PJ@f =|C`C KN_PJ@gC KN_PJ@f =|D`C KN_PJ@g0C KN_PJ@g C KN_PJ@gC! KN_PJ@f =|E`bC& KN_PJ@gC* KN_PJ@f =|F`8C. KN_PJ@gC4 KN_PJ@f =|G`C: KN_PJ@gC? KN_PJ@f =|H`CD KN_PJ@gCI KN_PJ@f =|I`CN KN_PJ@gCQ KN_PJ@f =|J`CT KN_PJ@gCY KN_PJ@f =|K`fC^ KN_PJ@gCb KN_PJ@f`=|* <Na#Dg`Nl0@-HUOHt8UO LN_TOCR@?Cf nNQ&PO LN_&R`Bn*yj`*m g"K MN_PJ@f fnp@Na#Dg*H`Nl:@+yj#j"K MN_B-* KN_ 3$f |+B4`B-+AlC4"""A4+H0-M`JHNfJ@f<.f*=|*Ix*JS`4 4.8f*J`" 9H#rf4X"89H(rr#R LN_趀b$48HNfJ@f 4.8f 9Jr~ LN_趀b 4E8g 4e8fR*J LN_趀b 4-8g 4+8f 4-8f*JRz` ЅЀ48HHЁм*R LN_趀b48HNfJ@fp`Rl.i` =|D LN_趀cNEO L|8NuH8O&H$IBIo`0*HrntGl jg0*fJg Kp ar jgv`BC`B0*|Kb0;N&2>JVdr (6DR`n|$2@N\jx .<JbVnz"K ja`*HAa"Ka`/*C KaJXO`UO*H?C Ka0XO` Kp+aZ` Kp-aN` Kp*aB` Kp/a6` Kp^a*` Kp(a` Kp)a`~ Kp,a`r Kp;a`fC Ka`XC Ka`JC Ka``C Ka0`C Ka"`C Ka`C Ka`C Ka`C Ka`C Ka`C Ka`rC Ka`dC Ka`XC Ka`LC Ka`@C Ka`4C Ka`(C Kax`C Kal`/*C Ka\XO$R fOLNu/ / $H`2 R&P h*g hf R hNbt RB RNbtB$ f&_$_NuH>O(HEb RNlF"HAN_C RN_B`,"* ЁЀ RHHЂм%@"RRI RN_ Rg HNfJ@f"L Ra *g*j`,M*m g"m g."f&&M*m f%M`-M Aa KNbt g6pNa#Dg&H`Nl6@'M f%K`-K &'TaaOL|Nu/AsNAXOp*NnNuAsaNuAsaNuAt aNuOHoNXOAC"""2ga/HONuOHoNXOAC"""2fa oONua9H"tNP`NuOHoN'\XOAC"""2gaF/HONuOHoN'\XOAC"""2fa oONu/ O&H IHoN'\XOAC"""2fa"o KN_ oNbtB KO&_NuaL9H"t$NP`Nu/ $H"*g"Aiga| j%P$_Nu/ $H *fab j h g$ h g h f %P Ja j%P`$_NuH<$H *g"@2)ga j&h%P *g @ h g+*gTa`L+*f(jvxpna j%P JaT ЄЀЄ(R' < j h fC*KD++g0 Na*g`Nl0@'H,z` k,B\Rn`@ Na*g`Nl0@'H,z` ЀЅ k,Ct0 Rn%Lz j%P+*HHv`4 JaT(<ea L3<Є*+*HHl Jp aDRl Jp a6++g k,C\'I0` ЀЅ k,'H0 KLO$H *fa,j j%PGBID0.|)bj0;NTf` `````````````````.D\p T$VDAC"""` <Na(g`Nl0@'H"nN_`%N Ja,H+g. <Na(g`Nl0@'H"n0"QN_` n0C"""`| JHoN'\XOA"K"""2` Jah+h`H JaT+h`8 JaF@+h`" Ja.+h` Ja+h` Ja+h` Ja+h` Ja+h+i` Ja +h` Ja+h` Ja+h`p Ja|+h`\ Jah+h9H8tDp`B@?+H9H8tPr`BA0AP+h` <Na(g`Nl0@'H Ja ka` Ja*H,jCa/j /fAt\C"""` JHoN'\XOA"K"""2Aa%N`T <Na(g`Nl0@'HCtANQ&POC kN_ Jp a`R Ja*HN_萼@<@(+h MNbt` Ja/@ @HP+h`a K"oP"""2O$L|Nu/ / O$HG JHoa&XOA"K"""2`ga j%P JHoaXOAC"""2ga+H9H8tt/H+i`f/H/H`@8+H+h+H/H+i/H`g +i *g @ hg0 K"o8"""2O,&_$_NuH0O$HG JHoaXOA"K"""2` j6(%P JHoaXOAC"""2fgal|fL+H9H"tNP`//H9H"tNP`"L@@+h`,|f+H/H#+h`+H/H +h *g @2(Ht cv(Ƽf, K"o<"""2O,L NuH0O$HG JHoaXOA"K"""2` j6(%P JHoaXOAC"""2gaT|f6g"o kN^ oNbtB`0+H/H"+h`ga`+H/H(+h *g @2(Ht cv(Ƽ0fT K"o<"""2O,L NuH0O$HG JHoaXOA"K"""2`^ j6(%P JHoaXOAC"""2gabg"o kN_PJ@f0Hr c tļ@fP"o kN_PJ@j0Hr c tļ f("o kN_PJ@o0Hr ctļ gx`BD kNbtB oNbtB`z+H/H80Hr c tļ@fL+H/H80Hr c tļ f&+H/H80Hr ctļ gx`BDBB@P+h *g @2(Ht cv(Ƽf K"o@"""2O,L Nu/ / O$HG JHoa$XOA"K"""2`V j%P JHoaXOAC"""2fga+H`/H`@+h *g @ hg K"o8"""2O,&_$_NuH0O$HG JHoaBXOA"K"""2` j6(%P JHoaXOAC"""2fga|f*+H`/H`@+h`(+H`/H`@+h *g @2(Ht cv(Ƽ`fR K"o<"""2O,L Nu (g Ata&Nu (g"@ iIg i fpNuB@Nu/ $H` j%P JaJg$_Nu yf` h "gfNu/ $Ha$H f Ata J$_NuBvBNuH8$Haa*aEfIj` R&h PHa RNbtB$ f`0 T&h(+g"h0"g ANbt T"h0B TNbtB( fLNuH<$HKIov(< *g. @ hf$(H`%P *g @ hg( *g8 @ hf.%P *g @ hf(H`%P`(<&yf`(n /ANAXO"k Map NAp&k gl JaDJf Jp a Ja2Jg&L<NuH"J0< TNT2 f g JNX g JNXOL<NuH0O&H$yfa.Jff k hf Ka Kad$H`J"KAaFv KaJf Kp a Ka|& Ka"KABaJf$yf` K a$H#vaadaROL NuH$HGf JaJgav(< *g. @ hf$(H`%P *g @ hg( *g8 @ hf.%P *g @ hf(H`%P`(<(S`D,l n8f Jaaaն f& `+l Aa LNbt`*L(N gl JaJf Jp a| JaJgL|NuH>$Hv (aJf" Ja6& JaJf Jp a> Ja(Ef&R g` 'Cք&k f&RMo(k lFg l:g l?g l@g lIg lHgx l6gn l.ft`b(T,H9H"u&NP`*R`*m gf f/+/A;NAPO` -@,h g @ h f(@ g @ hg(T f:&k " f&&R`&&k fL|NuH8O$HBGI`B j0(Hr ct(ļgv%P`T JHoa$XOA"K"""2g"L kaӈ kNbtB`+HAa@/Au2NAXO JaJgxJfp NApOLNuH>O$H *g,"@ if"C @ ha j%P Jp a0` Au6NAI( *g @2(ga j"h)+ *g @2(f"h)+gap j%P Ja&Jg%TK JgGD MN@ Ja,H"n0 g @Nbt n0B <Na&g`Nl0@"n0""MN_ JaJf Jp aZAu9NA JaJg` MN@"L MaӤG& Ja,H`$Au=NA MN@ Ka"L Mar& g.%@ Ja n0h *g @ h f%P`aV(%W Ja Jf Jp a JaJgz KaO L|NuH8$HJg%y~ Ja&Hp Jan++f Ja k0h` k0(P Ja"k0" g LNbtLNu/ $Ha Ja#vB$_Nu'/ $Ha8 JpHa9IuB6p"*g" A h/fR j hIfS j%P"*gJj *g @ hf Jat`|$_NuBNuH0Cv$Qt` Jg&QJ fB"`:&Q" &Q!kJg&hkfR&hkfS&h!SJjvL NuH.O$Ha/H(+ga Jpa Ja2 o"h0h JpJa Ja/h *g @ hKf%P Ja/h`Au`C"""Iv/T/jBo ./H9H8ul o"h0H/H*/H9H8ux o"h0H/H*Tv(Mo`$ g @"( f (Aa T( T%h *g @ h2f"g"A4)f ifR`R j h3f g"@2)f ifS`S j%PJkJj Ja` Lab9H8u. Lr5p4aJf Aua S$PNbtB& LalLNuH>(HEn g @ h f AuaD R h fv`BCJf R&PNbtB$Jg LaJf La9H8uB*l,jJg. R%h R)h LaJf La9H8uBJf)M%N R&PNbtB$L|Nu/ $Hp*Na#Dg`Nl0@ n#n1| !yv!j Ja$_NuH8(HEn f AuaD R h fv`BCJf R&PNbtB$Jg R%h R)h R&PNbtB$ LaLNuH>$HMoKz Ja&H(j%m f *"U%i *g. @ h gR`" g @"( fAEa U* U%h *g @ h9fp`B@ j%PJg JaBJf` j%P++g$ k0"g ANbt k0B Ja""k0"` Ja k0h+j%L JaJf Jp a JaJg L|NuaNu/ $HaJga\` Ja@ Ja#z#$_NuH $Ha& Jp a0 Ja(pNAppYNApp CNApp DNApLNu// $Ha&"*gN A h6fDp*Na#Dg`Nl0@ n#n1| !yv!j j%P` Jp.apo$ Ja`< Jpa JaJf Jp anSpl JaJg JaJf Ja$_&NuH8$HID *g @2(ga߸ j&h%P+*g Ava߂vx Jp a Ja*RpoaߔpnaߊR'L L&"*g A h fz`BEJf Jp aJg j%PD*++g0 Na(g`Nl0@'H,x` k,BLRn`@ Na(g`Nl0@'H,x` ЀЄ k,Cv6 Rn JazJf Jp a JahJgL8Nu/ YO$Ha. Jp a Ja WXO$_NuH>ONP&/yDK~MDEoA#DXHNPJ@fIBB,` U* g @ h g)U ,g @)P U0(|Ib0;N ",6@T^fpzJ La `T La`J La~`@"L/ Aa2B"_a`("L/ Aap"_a` La&` La` La` La` LBa` Lpa` La` La` La` La` Laz` La`<` La` La`x La``n La`d La`Z La`P La8`F La2`< La.`2 LaT`( La` La>` Lar` Axa,f LaJf La* ,f"-gf A+h -g @*NPАrdlNENP& -fh#D`0#D VfANA` V*g0||b0;NXXXXXdXJ<. ANA`ANA`ANA`ANA`ANA`rGD <Na&g`Nl0@&HUO?9DCNQ&XO/ ANAXO KNbt`"GDpg/ANAXO0Nn -g @/ANAXOp NApOxL|NuH>O.Nl2G <Na#Dg`Nl0@'HBBBAvNAAvNAAwNAAwNAB+EPIMKD, N*XHNPJ@fHp>NAp kN@ Kal +fB( ga Ka+f JNl`J@g*`. yDg?9D?9DAw$NAXO`p NAp+f JNl`J@gR kNbtBB@OtL|Nu09w6f29w409w2NF~3Ryw6Nu/ Ew60oSR0f2*0*NF~3$_NuH8$HBCBGI`NE0yg4HRS SmBS0Q@g [@g|rg`(JCopNBbSCB20`p NBbp NBb J`0RCB200NBb`LNu/6| fp NBbp NBb`0NBb&NuH8&HEI/ "K LNQXO LN_&aBD`( 4 @fp NBbp NBb` 4@HNBbRDDnaLNuH8&H$II/ "K LNQXO LN_&ahBD`( 4 @fp NBbp NBb` 4@HNBbRDDna^LNuH<6Ew4Gw20+f 20NF~3IK%0gS@gV2UAg`HRk kfpC6J@jBS S m6` kfpC4J@jBR Rm4BT`0|A|+b0;NX^jx0o`N RlRR`~ SlvRS`p0ojSS`dB@46"< MB@Ne`JB@46`@0oSR`6NFR`,8` 8`8Bk`Bk` 7|`33`64`BS"<B@4JJA Ne`0NfJ@g~0| gRnQ@g$S@g4S@g|`| gP|gN|dg`t0onSSt 20NF`^PS0H6H6`,"<B@ MNeB@46`2BS`.8`(420NFRS S mBSRR Rf 4NF"0+f 20NF~L<NuHELEN nBXr [0`|A`0A2"La @`\ [2"La ~@`JJEj `p0?4 La TTO@`*JEj `0H?4 LaTO@` JEj `p0?4 La "TO@`JEj `p0?4 La BTO@`A 2"La@`A 2"La@`A 2"La&@`|@HN0\OLxNup` Warning: use TCFLTLIB to get float support for printf. H0O$H&I>68jx`p@c8?|0|g J0R@CDHoBaXO0?| JoBg|-?| `&g|+?| `g | ?| ?| ?D62XAXAt0gJf$B RoDJDf f2SA`.C"SDQ` X JDf fSA`C"SDmQto An ?B?B`ff ?C?B`?C?BC8?|@gE`e0/DS@jD@-`+/ r AJaR"_AFpJWF@rg SAkt0QS@k AFQ`H0O$H&I?|@>>68jx0|g JpCDHoBaXO?| JoBg|-?| `&g|+?| `g | ?| :/DlDE|0 ?| |JDffSFDged?DD?|6`8JEfp?@?@6`& JpCDHoBatXO 5d?EE?|6`SE?EE|1"p?@6@`E|b J0CDHoBa(XO0@E:/DDEE?D6DC"SDmQ?EE`?|0D|b JCDHoBaXO0D0:/D<RFDJDffSF?D6t0JfB ?| RoDC"SDk6Q`.C ?E SEj0?| RF`QC"SDkQto Fn ?B?B`ff ?C?B`?B?C`|? ?| x?D ?D?D6|`H0O$H&I?|@>>68k |kx`x0|gDH~:@H?`_ JCDHoB|k:@k6DR@|kpaXOJfS 0gR;8oDjZBD`T0a\XO 0VSD`BDBoBBoD`.6x0/gf@ Kaf0/ g@AN0/g@ Ka@0/ g@A NJof Jo6fgp@A .N0/g@ Ka0/6g@A"N0/@g@A8N0/gg@ Ka0OfL Nu0< HS@rJrfC8jxA aBA pJWF@?@gA 2SAktaSb (Q2/@4/(jt@jtBgf 0Ao@@Alx?B?D`hH0$H&IB(v`H0$H&IvJWFCJBj4Cb6xJAkCc8Cf K0a0 JN` 0 JN0 Kap0DL Nu6x0/g f@ JaP0/g@AN0/g@ Ja,0/g@A N0/g g@ Ja0OLNuH0E6`H0E4&H6g8Kg SC JpNQ J0|gNL Nu00000000 (VHNuH8$H&I+g|2g+gC'I&'IR'I UAe"S(kt d W`2+gH@ KaJLJ@f,H@ KaLJ@gkg&B JLNu3 `/ / B@JgB)g@)fJ&Q(i ge"// Ia"_ _J@f&Q`B@"(_&_Nu3 p`#H#H&HJfS#K " I(Ia"LJ@f`H:$H&I(S&gfJg^+g`)ft,k x$ڹd SfRe`.&// Ka.$"J@k,f4(SSfRf& L\Nu3 p`"`&x,A'J'JE8'J & KaJ@kfRf"`"PdB@ Nu(g*gg/a _J@f/a _J@kf"P`3 pNup/alXONu(g4(f>"P | dNu?/a _2J@f 0Nu3 pNuC!I!IR!I `H&H(o Ia6k g La` a|Jf(H <a )Hg0@0;6 K (:gNaJ|g9@{00 l)H()H `da)b*a)b* / ?/?<=NAP$_JkR9@{0 la A()H)HRH)H QC# LLNup`p`p 3 g la r`YOCBgg Ar`THWf0XONup`rwar+w+a+rbwbabr+b rb+ w+b wb+ a+b ab+ A;p`Ar(WVNu?/ Aa4Aa*G;6<`Gp+g Ka Q&_6Nu/ &H+g+g8aJ@f80+a"J@k,+g ka PB@7@? Ka0&_Nu3 p`J@k"Pc  PNupNuH&H(k L0+"+ aJkRgF+f, L"St gSj`"HSISSk ögSjJg&"'LBLNup`p`H&H(k6+"+g0Dta$Jk+fZ"S"L Ip gSj`*| // " 0a"_"JkNgPAp SjH@" 0aLJk*g,`0" La|Jkg&'LB@LNup`p`H06&Hp Cgp@CfFpC?/ ?<=NAPOJk&8jaTpCgF?<?p/?<BNAO Jj.`Br߲fNAXONua3p`ް|c/ ??<>NAXO$_JkpNua3pNu/ /?<ANA\OJkp$_Nua3p$_NuHR@W@e >?NAO $_JkNua3pNuT@a J@gX  _H&Hx&SgkJ9kvf~a<g&< g<<gP< g< e޸dRa`JgSSKpap apa`Rp ap a`bJg^`TxB9`Jx B9`f0g6f(g.f g&fgfgfggepNupNuJfpNu g<g8g4g0g,g(g$g ggggg ggf @Nu"HJgJgJgJgJg JgJgJf SNuH0$H|g|$bGrtgJ3kSJgtJ@f"p <0f:pgb<߶<Xf(pf"`N|f<0fg><߶<Xfg.GJ3d"3d&HCHCJCfԃԁd` & gSJ"L Nu3"p` 3!p& g"`//"4UB|"bZC"t&HCJCf&HC;0NRBH@B@H@f`$?&8BCHC06H@0HC;0&RBJf8QB" _&Nu3!`0123456789abcdefghijklmnopqrstuvwxyzH &/?<HNA\OJf 9>g @ NJ@fp @LNuH0&gPR<e a g!CC "A`rG&S f. < a gj&@Ap !|'H&#A"P` )d I"Q f`rd ` #@#C"nAL Nuk |`3 `/ oLQ d nf@axJg*`6C g,g"@ f` "/?<INA\OJj`p$_Nugp`/ &y g/ &S?<INA\O`&y g/ &S?<INA\O`&_NuH8$<CG g" c &@ f`(@ ,gb*"Ҩeg ` )H`p"@")Ө )H`>"@ gb" ҩeg`N"(ө`" "H" ҩf @"(ө" l eb&/ ?<INA\OJfQLNuP`Jg/bg2 4gf!Sf`f`!Sg"gH?LxH?LxH?LxH?Lx`H?Lx8H?LxH?LxH?LxH?LxH?LxpH?LxHH?Lx H?LH?SfvLx2|HgS@!!Q|gSA!Q`2 4gfSf`f`S"gH?LxHxLxHx(LxHxPLxHxxLxHxLxHxLxHxLxHxLxHx@LxHxhLxHxLxHxLHSfxLx2|HgS@ Q|gSAQ _Nu/$gSe40HB4 gxH_>"&(*,."B$B&B(B*B,BH~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H`SfL||0HgS@!Q|gSAQ _Nu|AP0|Nu|A>0| Nu|A,0|@Nu<0< SHNu|A 0|Nu@@@@@@@@@@@@@@@@@@@@@@@@@@@::::::8888888888888888888866666644444444444444444444@  !"#  !"#/A>1|1|!I!o1A"o 1Y1Q"_A000000000A>ry`A>BhBhre`A>BhBhr{`3>/ C>2dBi3| Cp 2Q"<ips/ NB$_ _0>A@^"op,2QA@p 2QNu>?^C@^@A>Bh1|1Arz`/ 1@ 0"<psNBA@^0$_Nu#A3?^p4`/ 3>@@A"C>B@22220<"<jJNBA@^0$_Nu>>?^@^AC 3D#DBDNu/ $HHNfJ@fA$_Nu// $HNT&J@fPg JNV*6R@fp` J0NYLB@$_&NupNnNuH<&H68$II0 g(g$"J KN_C KN^ KN_K`*K|f$UO?C MNQ&XO0|&b0;NN^n~C KN^`lC6 KN^`\CG KN^`LCY KN^` <= >= <> AND OR XOR MOD NOT SQRSQRTSINCOSTANARCTANLOGEXPABSSGNSTR$VALCHR$ASCLENMID$PEEKLETPRINTINPUTGOTOIFENDSTOPFORNEXTWHILEWENDGOSUBRETURNREADDATARESTOREGOTOXYONDIMPOKELISTRUNNEWLOADMERGESAVEDELBYERENUM THEN ELSE TO STEP REM%s%sSyntax errorType mismatch errorBad subscript?? %.*s??Extra information on lineUndefined line%ld %s.TEXTr%s.TEXTrBad line in file %s.TEXTw%s.TEXTw%ld Undefined line %ld in line %ld ?%s ? ?? ?? FOR without NEXT?NEXT without FORWHILE without WENDWEND without WHILERETURN without GOSUBOut of DataArray already dimensionedIllegal commandBreakInteger overflowDivide by zeroReal math overflowReal math underflowValue range errorI/O Error %d%s%12ld in %ldChipmunk-BASIC v1.00 by David Gillespie CPX-BASIC v0.01 by Oliver Teuber Error %d/%d! %$B$$<<$$B$(OO(AAp ~~<,,~p`p~ РШ||||||||||||||||||||||U<U>bf 0fFxax  T88T~00 < 0` 8 0 <<`0 0`fff~fffF<flxpxlf``````|brz^NFBff>`|ffff|ffff>fff>F<`|fffffX0`dhpxlf |fffffffff>lp````ffffdxff <~`<f<~>$F>0<~><~>$0<~`<$$$F  4X|fff,brZNFf>~000| bhv+Cbhv.V6ll6l66l4X<~>4X>`~l>ffn <>6666666~~fv~ff<~>6640x |lll >fff~~fv66 2p`~`p>?^C@^@: Pascal system I/O error %d (illegal I/O request) (bad file name) (file not found) (file not open) (bad input format) (not open for reading) (not open for writing) (not open for direct access) (string subscript out of range) (end-of-file) (file write error)Pascal system error %d (out of memory) (reference to NIL pointer) (integer overflow) (divide by zero) (real math overflow) (value range error) (CASE value range error) (bus error) (stopped by user)%s P 0 " h$     "2  $ &  $*((     @B(L, "T 2^ 6  2.26$  $ Ɗ $ "*, >0 "z   ((*zH$&N b, 6n d,l`*"h F,n (& N*.2 ." :   ""z( *  v*~ $ d  L        .  0    4  J&HH  . NdZ v*$,.b 2F ` ~@D.R,<*B  "     nJ  $ GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. POWERSOFT (Oliver Teuber) presents ... ##### ####### # # ###### ##### ###### ##### ##### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ####### # ##### ###### ####### ##### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ##### # # # ###### # # ###### ##### ##### Erluterungen zu BASIC000.CPX und BASIC030.CPX ================================================ Wie am Programmnamen leicht erkennbar ist, handelt es sich bei diesem Programm um ein BASIC-Modul fr das neue Kontrollfeld der Atari-ST- Rechner. Der Vorteil eines solchen Moduls besteht darin, da es im Gegensatz zu herkmmlichen Accessorys keinen Speicher dauerhaft belegt und da keiner der maximal 6 Accessory-Pltze verbraucht wird. Zunchst einmal ein paar allgemeine Hinweise zum Copyright: ----------------------------------------------------------- BASIC030.CPX und BASIC000.CPX sind Freeware nach der "GNU GENERAL PUBLIC LICENSE" Bitte lesen Sie auch die Datei "COPYING". Geschrieben wurde das Programm von Chipmunk-BASIC v1.0 CPX-BASIC v0.01 David Gillespie Oliver Teuber und Schulweg 8 DW-3363 Badenhausen. hiot@sun.rz.tu-clausthal.de oli@blackdog.zer Es folgt nun eine Beschreibung des Moduls: ------------------------------------------ Um das Programm zu benutzen, mu es zunchst in den Ordner kopiert werden, in dem sich auch die anderen CPX-Module befinden. Nach dem nchsten Systemstart ist es dann automatisch im Kontrollfeldmen anwhlbar. CPX-BASIC basiert auf dem Chipmunk-BASIC v1.0 von David Gillespie, das als Pascal-Quelltext vorlag und mit dem p2c (Pascal nach C) Konverter von David Gillespie in einen C-Quelltext kovertiert wurde. Um dieses BASIC wurde dann das CPX-Modul herumprogrammiert. Der "Bildschirm" auf dem das BASIC ausgibt ist ein Grafikbildschirm mit einer Auflsung von 256*176-Punkten. Daraus folgt, das 32*22 Zeichen auf dem "Bildschirm" dargestellt werden knnen. Dabei wird ein VT52-Terminal emuliert. Bitte beachten Sie, das BASIC030.CPX !nur! auf einem ATARI mit min. MC68020 und MC68881 eingesetzt werden darf. ---> Rckmeldungen, nderungen und Anregungen sind willkommen! Sollten Sie das Programm erweitern, schicken Sie mir bitte die nderungen. Diese werde ich dann "offiziell" bernehmen und zugnglich machen. Version 0.01 vom 24.04.1993: ---------------------------- TODO: - noch keine Grafikbefehle. - VT52-Terminal noch nicht vollstndig. - kein AUTO-Save und kein AUTO-Load beim Start oder Ende. - keine GEM-Anweisungen ... :-) -> Achtung: CONTROL-C funktioniert noch nicht! Also --> vor "RUN" kommt "SAVE"! .text .mc68000 ;------------------------------------------------------------------- .xref exit exit: QuitBASIC: movem.l d0-d7/a0-a7,regBASIC movem.l regCPX,d0-d7/a0-a7 move.l #'STOP',d0 rts ;------------------------------------------------------------------- regBASIC: .dc.l 0,0,0,0,0,0,0,0 ; d0-d7 .dc.l 0,0,0,0,0,0,0,stackend ; a0-a7 regCPX: .dc.l 0,0,0,0,0,0,0,0 ; d0-d7 .dc.l 0,0,0,0,0,0,0,0 ; a0-a7 .bss stackCPX: .ds.b 40960 stackend: .ds.l 4 .text .import basic .xref StartBASIC StartBASIC: movem.l d0-d7/a0-a7,regCPX movem.l regBASIC,d0-d7/a0-a7 move.l #QuitBASIC,-(sp) jmp basic .xref BreakBASIC BreakBASIC: movem.l d0-d7/a0-a7,regBASIC movem.l regCPX,d0-d7/a0-a7 clr.l d0 rts .xref ContBASIC ContBASIC: movem.l d0-d7/a0-a7,regCPX movem.l regBASIC,d0-d7/a0-a7 rts ;******************************************************************* .import cpx_call .import cpx_draw .import cpx_wmove .import cpx_timer .import cpx_key .import cpx_close .bss OldSP: .ds.l 1 .text .xref Return Return: move.l OldSP,sp moveq #0,d0 rts .xref _cpx_call _cpx_call: move.l sp,OldSP jmp cpx_call .xref _cpx_draw _cpx_draw: move.l sp,OldSP jmp cpx_draw .xref _cpx_wmove _cpx_wmove: move.l sp,OldSP jmp cpx_wmove .xref _cpx_timer _cpx_timer: move.l sp,OldSP jmp cpx_timer .xref _cpx_key _cpx_key: move.l sp,OldSP jmp cpx_key .xref _cpx_close _cpx_close: move.l sp,OldSP jmp cpx_close .import cpx_init jmp cpx_init .xref _FilSysVec _FilSysVec: .DC.L 0 ;------------------------------------------------------------------ ; ; Basic-Input/Output (BIOS) ; ;------------------------------------------------------------------ .text .mc68000 .import font8x8 .import memcpy .import memset ;------------------------------------------------------------------ .xref ScrollUp ScrollUp: lea screen,a0 lea 256(a0),a1 move.l #5376,d0 jsr memcpy lea screen,a0 lea 5376(a0),a0 moveq #0,d0 move.l #256,d1 jsr memset rts .xref ScrollDown ScrollDown: lea screen,a1 lea 256(a1),a0 move.l #5376,d0 jsr memcpy lea screen,a0 moveq #0,d0 move.l #256,d1 jsr memset rts ;------------------------------------------------------------------ ; VOID DrawCursor(WORD x, WORD y) ; d0.w -> x ; d1.w -> y ;------------------------------------------------------------------ .xref DrawCursor DrawCursor: lea screen,a0 lsl.w #8,d1 add.w d1,d0 lea (a0,d0.w),a0 ; Adresse des Cursors auf dem Screen not.b (a0) not.b 32(a0) not.b 64(a0) not.b 96(a0) ; Cursor zeichnen/lschen not.b 128(a0) not.b 160(a0) not.b 192(a0) not.b 224(a0) rts ;------------------------------------------------------------------ ; VOID PutChar(WORD x, WORD y, WORD ch); ; d0.w -> x ; d1.w -> y ; d2.w -> Zeichen ;------------------------------------------------------------------ .xref PutChar PutChar: lea screen,a0 lsl.w #8,d1 ; 32-Byte pro Zeile * 8 Zeilen add.w d1,d0 lea (a0,d0.w),a0 ; Adresse des Zeichens im Screen lea font8x8,a1 lsl.w #3,d2 lea.l (a1,d2.w),a1 ; Adresse des Zeichens im Font move.b (a1)+, (a0) move.b (a1)+, 32(a0) move.b (a1)+, 64(a0) move.b (a1)+, 96(a0) ; Fontdaten kopieren move.b (a1)+,128(a0) move.b (a1)+,160(a0) move.b (a1)+,192(a0) move.b (a1)+,224(a0) rts ;------------------------------------------------------------------ .data .xref cpx_mfdb cpx_mfdb: .dc.l screen .dc.w 256 .dc.w 176 .dc.w 16 .dc.w 1 .dc.w 1 .dc.w 0,0,0 ; reserviert .bss .xref screen screen: .ds.b (256/8)*176 ; Bildschirmspeicher .end #include "glo.h" #include #include #include /********************************************************************/ #if TRUE!=1 #undef TRUE #define TRUE 1 #endif #if FALSE!=0 #undef FALSE #define FALSE 0 #endif #define POSITION_CURSOR 2 #define SET_FOREGROUND_COLOR 3 #define SET_BACKGROUND_COLOR 4 /********************************************************************/ LOCAL VOID OutChar( WORD ch ); /********************************************************************/ LOCAL BYTE buf[512]; GLOBAL WORD cx=0, cy=0, cm=0, esc=0, chc=0; GLOBAL WORD ocx, ocy; /********************************************************************/ GLOBAL VOID HideCursor(VOID) { if(cm==0) { DrawCursor(cx,cy); DirtyScreen=TRUE; } cm++; } GLOBAL VOID ShowCursor(VOID) { if(cm>0) { cm--; if(cm==0) { DrawCursor(cx,cy); DirtyScreen=TRUE; } } } GLOBAL BYTE *Gets( BYTE *string ) { WORD off=0, key; *string=0; FOREVER { while(roff==woff) { BreakBASIC(); } key=KeyBuffer[roff++]; if(roff>=KB_SIZE) roff=0; switch(key) { case 8: case 127: if(off>0) { OutChar(8); string[--off]=0; } break; case 13: OutChar(10); OutChar(13); return string; default: string[off++]=key; string[off ]=0; OutChar(key); break; } } } GLOBAL VOID Putchar( WORD ch ) { if( ch==10 ) { OutChar( 10 ); OutChar( 13 ); } else OutChar( ch ); } GLOBAL VOID Printf( BYTE *string, ... ) { WORD n, sz; va_list arg; va_start(arg, string); vsprintf(buf, string, arg); va_end(arg); sz=(WORD)strlen(buf); HideCursor(); for(n=0; n=MAX_CX) cx=MAX_CX-1; } else if(chc==2) { cy=ch-32; if(cy<0) cy=0; if(cy>=MAX_CY) cy=MAX_CX-1; esc=FALSE; } break; case SET_FOREGROUND_COLOR: case SET_BACKGROUND_COLOR: esc=FALSE; break; default: esc=FALSE; break; } } else switch(ch) { case 'A': /* Cursor up */ if(cy>0) cy--; esc=FALSE; break; case 'B': /* Cursor down */ if(cy<(MAX_CY-1)) cy++; esc=FALSE; break; case 'C': /* Cursor forward */ if(cx<(MAX_CX-1)) cx++; esc=FALSE; break; case 'D': /* Cursor backward */ if(cx>0) cx--; esc=FALSE; break; case 'E': /* Clear screen */ cx=cy=0; memset(screen,0,SCREEN_SIZE); esc=FALSE; break; case 'H': /* Home cursor */ cx=cy=0; esc=FALSE; break; case 'I': /* Reverse index */ if(cy>0) cy--; else ScrollDown(); esc=FALSE; break; case 'J': /* Erase to end of page */ case 'K': /* Clear to end of line */ case 'L': /* Insert Line */ case 'M': /* Delete Line */ esc=FALSE; break; case 'Y': /* Position cursor */ esc=POSITION_CURSOR; chc=0; break; case 'b': /* Set foreground color */ esc=SET_FOREGROUND_COLOR; chc=0; break; case 'c': /* Set background color */ esc=SET_BACKGROUND_COLOR; chc=0; break; case 'd': /* Erase beginning of display */ esc=FALSE; break; case 'e': /* Enable cursor */ cm=FALSE; esc=FALSE; break; case 'f': /* Disable cursor */ cm=TRUE; esc=FALSE; break; case 'j': /* Save cursor position */ ocx=cx; ocy=cy; esc=FALSE; break; case 'k': /* Restore cursor position */ cx=ocx; cy=ocy; esc=FALSE; break; case 'l': /* Erase entire line */ cx=0; memset(screen+(cy*32*8),0,8*32); esc=FALSE; break; case 'o': /* Erase beginning of line */ case 'p': /* Enter reverse video mode */ case 'q': /* Exit reverse video mode */ case 'v': /* Wrap at end of line */ case 'w': /* Discard at end of line */ esc=FALSE; break; default: esc=FALSE; break; } } else if(iscntrl(ch)) { switch(ch) { case 8: case 127: if(cx>0) { cx--; PutChar(cx,cy,' '); } break; case 9: cx+=8; cx/=8; cx*=8; if(cx>=MAX_CX) cx=MAX_CX-1; break; case 10: if((++cy)==MAX_CY) { cy=MAX_CY-1; ScrollUp(); } break; case 12: memset(screen,0,SCREEN_SIZE); cx=cy=0; break; case 13: cx=0; break; case 27: esc=TRUE; break; } } else { PutChar(cx,cy,ch); if((++cx)>=MAX_CX) { cx=0; if((++cy)==MAX_CY) { cy=MAX_CY-1; ScrollUp(); } } } if(!cm) /* Cursor neu Zeichnen ... */ DrawCursor(cx, cy); } #define ___MAIN_C___ #include "glo.h" #include /********************************************************************/ #define MESSAGE -1 /********************************************************************/ EXTERN VOID _FreeAll ( VOID ); EXTERN VOID Return ( VOID ); GLOBAL CPX_INFO *CDECL cpx_init( XCPB *Xcpb ); GLOBAL WORD CDECL cpx_call ( GRECT *work ); GLOBAL VOID CDECL cpx_draw ( GRECT *clip ); GLOBAL VOID CDECL cpx_wmove ( GRECT *work ); GLOBAL VOID CDECL cpx_timer ( WORD *evnt ); GLOBAL VOID CDECL cpx_key ( WORD kstate, WORD key, WORD *evnt ); GLOBAL VOID CDECL cpx_close ( WORD flag ); EXTERN WORD CDECL _cpx_call ( GRECT *work ); EXTERN VOID CDECL _cpx_draw ( GRECT *clip ); EXTERN VOID CDECL _cpx_wmove( GRECT *work ); EXTERN VOID CDECL _cpx_timer( WORD *evnt ); EXTERN VOID CDECL _cpx_key ( WORD kstate, WORD key, WORD *evnt ); EXTERN VOID CDECL _cpx_close( WORD flag ); /********************************************************************/ LOCAL XCPB *cpx; GLOBAL MFDB ScreenMFDB; GLOBAL WORD errno; GLOBAL GRECT xywh={0, 0, 256, 176}; GLOBAL WORD pxy[10], work_in[12], work_out[57], vdihandle, phys_vdihandle; LOCAL CPX_INFO cpxinfo = { cpx_call, cpx_draw, cpx_wmove, cpx_timer, cpx_key, NULL, NULL, NULL, NULL, cpx_close }; /********************************************************************/ GLOBAL CPX_INFO *CDECL cpx_init( XCPB *Xcpb ) { if(Xcpb!=NULL) cpx=Xcpb; if(cpx->booting) return (CPX_INFO*)1; return &cpxinfo; } GLOBAL WORD CDECL cpx_call( GRECT *work ) { ScreenMFDB.fd_addr=NULL; work_in[1]=work_in[2]=work_in[3]=work_in[4]=work_in[5]=work_in[6]=work_in[7]=work_in[8]=work_in[9]=0; work_in[10]=2; work_in[0]=vdihandle=phys_vdihandle=cpx->handle; v_opnvwk( work_in, &vdihandle, work_out); /* Bildschirm ffnen! */ if(vdihandle==0) { form_alert(1,"[3][Das VDI will mich nicht ...][ Tja ]"); return FALSE; } xywh.g_x=work->g_x; xywh.g_y=work->g_y; StartBASIC(); cpx_draw(&xywh); (cpx->Set_Evnt_Mask)(MU_KEYBD|MU_TIMER, NULL, NULL, 50); return TRUE; } GLOBAL VOID CDECL cpx_draw( GRECT *clip ) { static GRECT *cp, cl; static WORD color_index[2]={BLACK,WHITE}; v_hide_c(vdihandle); cl=*clip; cp=(cpx->GetFirstRect)(&cl); while( cp!=NULL ) { memcpy(&cl, cp, sizeof(cl)); pxy[0]=cl.g_x - xywh.g_x; pxy[1]=cl.g_y - xywh.g_y; pxy[2]=cl.g_w + pxy[0] - 1; pxy[3]=cl.g_h + pxy[1] - 1; pxy[4]=cl.g_x; pxy[5]=cl.g_y; pxy[6]=cl.g_x + cl.g_w - 1; pxy[7]=cl.g_y + cl.g_h - 1; vrt_cpyfm(vdihandle, MD_REPLACE, pxy, &cpx_mfdb, &ScreenMFDB, color_index); cp=(cpx->GetNextRect)(); } v_show_c(vdihandle,1); DirtyScreen=FALSE; } GLOBAL VOID CDECL cpx_wmove( GRECT *work ) { xywh.g_x=work->g_x; xywh.g_y=work->g_y; } GLOBAL VOID CDECL cpx_timer( WORD *evnt ) { GRECT clip; WORD n; BYTE *sptr, *cptr; if(ContBASIC()=='STOP') /* Das BASIC ausfhren ... */ { _FreeAll(); v_clsvwk( vdihandle ); *evnt=1; } /* sptr=Physbase(); cptr=screen; for(n=0; n<176; n++) { memcpy(sptr,cptr,32); sptr+=80; cptr+=32; }*/ if(DirtyScreen) /* Bild muss neu gezeichnet werden */ { *(&clip)=*(&xywh); cpx_draw(&clip); DirtyScreen=FALSE; } } GLOBAL VOID CDECL cpx_key( WORD kstate, WORD key, WORD *evnt ) { KeyBuffer[woff++]=key; if(woff>=KB_SIZE) woff=0; } GLOBAL VOID CDECL cpx_close( WORD flag ) { _FreeAll(); v_clsvwk( vdihandle ); } .data .xref font8x8 font8x8: ; Zeichen -> $00 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $01 .dc.b %00011000 .dc.b %00100100 .dc.b %01000010 .dc.b %10000001 .dc.b %11100111 .dc.b %00100100 .dc.b %00100100 .dc.b %00111100 ; Zeichen -> $02 .dc.b %00111100 .dc.b %00100100 .dc.b %00100100 .dc.b %11100111 .dc.b %10000001 .dc.b %01000010 .dc.b %00100100 .dc.b %00011000 ; Zeichen -> $03 .dc.b %00011000 .dc.b %00010100 .dc.b %11110010 .dc.b %10000001 .dc.b %10000001 .dc.b %11110010 .dc.b %00010100 .dc.b %00011000 ; Zeichen -> $04 .dc.b %00011000 .dc.b %00101000 .dc.b %01001111 .dc.b %10000001 .dc.b %10000001 .dc.b %01001111 .dc.b %00101000 .dc.b %00011000 ; Zeichen -> $05 .dc.b %11111111 .dc.b %10000001 .dc.b %10000001 .dc.b %10000001 .dc.b %10000001 .dc.b %10000001 .dc.b %10000001 .dc.b %11111111 ; Zeichen -> $06 .dc.b %11111000 .dc.b %10001000 .dc.b %10001111 .dc.b %10001001 .dc.b %11111001 .dc.b %01000001 .dc.b %01000001 .dc.b %01111111 ; Zeichen -> $07 .dc.b %11111111 .dc.b %10001001 .dc.b %10001001 .dc.b %10001001 .dc.b %11111001 .dc.b %10000001 .dc.b %10000001 .dc.b %11111111 ; Zeichen -> $08 .dc.b %00000001 .dc.b %00000011 .dc.b %00000110 .dc.b %10001100 .dc.b %11011000 .dc.b %01110000 .dc.b %00100000 .dc.b %00000000 ; Zeichen -> $09 .dc.b %01111110 .dc.b %11000011 .dc.b %11010011 .dc.b %11010011 .dc.b %11011011 .dc.b %11000011 .dc.b %11000011 .dc.b %01111110 ; Zeichen -> $0A .dc.b %00011000 .dc.b %00111100 .dc.b %00101100 .dc.b %00101100 .dc.b %01111110 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 ; Zeichen -> $0B .dc.b %00010000 .dc.b %00011100 .dc.b %00010010 .dc.b %00010000 .dc.b %00010000 .dc.b %01110000 .dc.b %11110000 .dc.b %01100000 ; Zeichen -> $0C .dc.b %11110000 .dc.b %11000000 .dc.b %11111110 .dc.b %11011000 .dc.b %11011110 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 ; Zeichen -> $0D .dc.b %01110000 .dc.b %11001000 .dc.b %11011110 .dc.b %11011011 .dc.b %11011011 .dc.b %01111110 .dc.b %00011011 .dc.b %00011011 ; Zeichen -> $0E .dc.b %00000011 .dc.b %00000000 .dc.b %00001111 .dc.b %00000011 .dc.b %00000011 .dc.b %00000011 .dc.b %00000011 .dc.b %00001111 ; Zeichen -> $0F .dc.b %10010000 .dc.b %00100000 .dc.b %11010000 .dc.b %10100000 .dc.b %11010000 .dc.b %10101000 .dc.b %11010000 .dc.b %11100000 ; Zeichen -> $10 .dc.b %01111100 .dc.b %11000110 .dc.b %11000110 .dc.b %00000000 .dc.b %11000110 .dc.b %11000110 .dc.b %01111100 .dc.b %00000000 ; Zeichen -> $11 .dc.b %00000110 .dc.b %00000110 .dc.b %00000110 .dc.b %00000000 .dc.b %00000110 .dc.b %00000110 .dc.b %00000110 .dc.b %00000000 ; Zeichen -> $12 .dc.b %01111100 .dc.b %00000110 .dc.b %00000110 .dc.b %01111100 .dc.b %11000000 .dc.b %11000000 .dc.b %01111100 .dc.b %00000000 ; Zeichen -> $13 .dc.b %01111100 .dc.b %00000110 .dc.b %00000110 .dc.b %01111100 .dc.b %00000110 .dc.b %00000110 .dc.b %01111100 .dc.b %00000000 ; Zeichen -> $14 .dc.b %11000110 .dc.b %11000110 .dc.b %11000110 .dc.b %01111100 .dc.b %00000110 .dc.b %00000110 .dc.b %00000110 .dc.b %00000000 ; Zeichen -> $15 .dc.b %01111100 .dc.b %11000000 .dc.b %11000000 .dc.b %01111100 .dc.b %00000110 .dc.b %00000110 .dc.b %01111100 .dc.b %00000000 ; Zeichen -> $16 .dc.b %01111100 .dc.b %11000000 .dc.b %11000000 .dc.b %01111100 .dc.b %11000110 .dc.b %11000110 .dc.b %01111100 .dc.b %00000000 ; Zeichen -> $17 .dc.b %01111100 .dc.b %00000110 .dc.b %00000110 .dc.b %00000000 .dc.b %00000110 .dc.b %00000110 .dc.b %00000110 .dc.b %00000000 ; Zeichen -> $18 .dc.b %01111100 .dc.b %11000110 .dc.b %11000110 .dc.b %01111100 .dc.b %11000110 .dc.b %11000110 .dc.b %01111100 .dc.b %00000000 ; Zeichen -> $19 .dc.b %01111100 .dc.b %11000110 .dc.b %11000110 .dc.b %01111100 .dc.b %00000110 .dc.b %00000110 .dc.b %01111100 .dc.b %00000000 ; Zeichen -> $1A .dc.b %00000000 .dc.b %00111100 .dc.b %01000110 .dc.b %00000110 .dc.b %01111110 .dc.b %01100110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $1B .dc.b %01111000 .dc.b %01100110 .dc.b %01111101 .dc.b %01100100 .dc.b %01111110 .dc.b %00000011 .dc.b %00001011 .dc.b %00000110 ; Zeichen -> $1C .dc.b %00000111 .dc.b %00001111 .dc.b %00011111 .dc.b %00011000 .dc.b %00011000 .dc.b %00010000 .dc.b %00011110 .dc.b %00010111 ; Zeichen -> $1D .dc.b %11110000 .dc.b %11111000 .dc.b %11101100 .dc.b %00000100 .dc.b %00000100 .dc.b %00000100 .dc.b %00111100 .dc.b %01010100 ; Zeichen -> $1E .dc.b %00010001 .dc.b %00001011 .dc.b %00001101 .dc.b %00000110 .dc.b %00000111 .dc.b %00101110 .dc.b %00111001 .dc.b %00111000 ; Zeichen -> $1F .dc.b %11111100 .dc.b %11111100 .dc.b %11111111 .dc.b %11100001 .dc.b %11100001 .dc.b %00100001 .dc.b %00111111 .dc.b %00000000 ; Zeichen -> $20 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $21,'!' .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 .dc.b %00011000 .dc.b %00000000 ; Zeichen -> $22,'"' .dc.b %01100110 .dc.b %01100110 .dc.b %01000100 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $23,'#' .dc.b %00000000 .dc.b %00100100 .dc.b %01111110 .dc.b %00100100 .dc.b %00100100 .dc.b %01111110 .dc.b %00100100 .dc.b %00000000 ; Zeichen -> $24,'$' .dc.b %00010100 .dc.b %00111110 .dc.b %01010101 .dc.b %00111100 .dc.b %00011110 .dc.b %01010101 .dc.b %00111110 .dc.b %00010100 ; Zeichen -> $25,'%' .dc.b %01100010 .dc.b %01100110 .dc.b %00001100 .dc.b %00011000 .dc.b %00110000 .dc.b %01100110 .dc.b %01000110 .dc.b %00000000 ; Zeichen -> $26,'&' .dc.b %01111000 .dc.b %11001100 .dc.b %01100001 .dc.b %11001110 .dc.b %11001100 .dc.b %11001100 .dc.b %01111000 .dc.b %00000000 ; Zeichen -> $27,''' .dc.b %00011000 .dc.b %00011000 .dc.b %00010000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $28,'(' .dc.b %00000100 .dc.b %00001000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00001000 .dc.b %00000100 ; Zeichen -> $29,')' .dc.b %00100000 .dc.b %00010000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00010000 .dc.b %00100000 ; Zeichen -> $2A,'*' .dc.b %00000000 .dc.b %01010100 .dc.b %00111000 .dc.b %11111110 .dc.b %00111000 .dc.b %01010100 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $2B,'+' .dc.b %00000000 .dc.b %00011000 .dc.b %00011000 .dc.b %01111110 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $2C,',' .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00110000 .dc.b %00110000 .dc.b %00100000 ; Zeichen -> $2D,'-' .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00111100 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $2E,'.' .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 ; Zeichen -> $2F,'/' .dc.b %00000011 .dc.b %00000110 .dc.b %00001100 .dc.b %00011000 .dc.b %00110000 .dc.b %01100000 .dc.b %11000000 .dc.b %00000000 ; Zeichen -> $30,'0' .dc.b %00111100 .dc.b %01100110 .dc.b %01101110 .dc.b %01110110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $31,'1' .dc.b %00011000 .dc.b %00111000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 ; Zeichen -> $32,'2' .dc.b %00111100 .dc.b %01100110 .dc.b %00001110 .dc.b %00011100 .dc.b %00111000 .dc.b %01110000 .dc.b %01111110 .dc.b %00000000 ; Zeichen -> $33,'3' .dc.b %01111110 .dc.b %00001100 .dc.b %00011000 .dc.b %00111100 .dc.b %00000110 .dc.b %01000110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $34,'4' .dc.b %00001100 .dc.b %00011100 .dc.b %00101100 .dc.b %01001100 .dc.b %01111110 .dc.b %00001100 .dc.b %00001100 .dc.b %00000000 ; Zeichen -> $35,'5' .dc.b %01111110 .dc.b %01100000 .dc.b %01111100 .dc.b %00000110 .dc.b %00000110 .dc.b %01000110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $36,'6' .dc.b %00011100 .dc.b %00100000 .dc.b %01100000 .dc.b %01111100 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $37,'7' .dc.b %01111110 .dc.b %00000110 .dc.b %00001110 .dc.b %00011100 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 ; Zeichen -> $38,'8' .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $39,'9' .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %00111110 .dc.b %00000110 .dc.b %00001100 .dc.b %00111000 .dc.b %00000000 ; Zeichen -> $3A,':' .dc.b %00000000 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 .dc.b %00000000 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 ; Zeichen -> $3B,';' .dc.b %00000000 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 .dc.b %00011000 .dc.b %00011000 .dc.b %00010000 .dc.b %00000000 ; Zeichen -> $3C,'<' .dc.b %00000110 .dc.b %00001100 .dc.b %00011000 .dc.b %00110000 .dc.b %00011000 .dc.b %00001100 .dc.b %00000110 .dc.b %00000000 ; Zeichen -> $3D,'=' .dc.b %00000000 .dc.b %00000000 .dc.b %00111100 .dc.b %00000000 .dc.b %00000000 .dc.b %00111100 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $3E,'>' .dc.b %01100000 .dc.b %00110000 .dc.b %00011000 .dc.b %00001100 .dc.b %00011000 .dc.b %00110000 .dc.b %01100000 .dc.b %00000000 ; Zeichen -> $3F,'?' .dc.b %00111100 .dc.b %01000110 .dc.b %00000110 .dc.b %00001100 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 .dc.b %00011000 ; Zeichen -> $40,'@' .dc.b %00111100 .dc.b %01100110 .dc.b %01101110 .dc.b %01101010 .dc.b %01101110 .dc.b %01100000 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $41,'A' .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01111110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00000000 ; Zeichen -> $42,'B' .dc.b %01111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01111100 .dc.b %00000000 ; Zeichen -> $43,'C' .dc.b %00111100 .dc.b %01100010 .dc.b %01100000 .dc.b %01100000 .dc.b %01100000 .dc.b %01100010 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $44,'D' .dc.b %01111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01111100 .dc.b %00000000 ; Zeichen -> $45,'E' .dc.b %01111110 .dc.b %01100000 .dc.b %01100000 .dc.b %01111100 .dc.b %01100000 .dc.b %01100000 .dc.b %01111110 .dc.b %00000000 ; Zeichen -> $46,'F' .dc.b %01111110 .dc.b %01100000 .dc.b %01100000 .dc.b %01111100 .dc.b %01100000 .dc.b %01100000 .dc.b %01100000 .dc.b %00000000 ; Zeichen -> $47,'G' .dc.b %00111100 .dc.b %01100010 .dc.b %01100000 .dc.b %01101110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111110 .dc.b %00000000 ; Zeichen -> $48,'H' .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01111110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00000000 ; Zeichen -> $49,'I' .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 ; Zeichen -> $4A,'J' .dc.b %00000110 .dc.b %00000110 .dc.b %00000110 .dc.b %00000110 .dc.b %00000110 .dc.b %01000110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $4B,'K' .dc.b %01100110 .dc.b %01101100 .dc.b %01111000 .dc.b %01110000 .dc.b %01111000 .dc.b %01101100 .dc.b %01100110 .dc.b %00000000 ; Zeichen -> $4C,'L' .dc.b %01100000 .dc.b %01100000 .dc.b %01100000 .dc.b %01100000 .dc.b %01100000 .dc.b %01100000 .dc.b %01111100 .dc.b %00000000 ; Zeichen -> $4D,'M' .dc.b %11111100 .dc.b %11010110 .dc.b %11010110 .dc.b %11010110 .dc.b %11010110 .dc.b %11000110 .dc.b %11000110 .dc.b %00000000 ; Zeichen -> $4E,'N' .dc.b %01100010 .dc.b %01110010 .dc.b %01111010 .dc.b %01011110 .dc.b %01001110 .dc.b %01000110 .dc.b %01000010 .dc.b %00000000 ; Zeichen -> $4F,'O' .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $50,'P' .dc.b %01111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01111100 .dc.b %01100000 .dc.b %01100000 .dc.b %01100000 .dc.b %00000000 ; Zeichen -> $51,'Q' .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00000110 ; Zeichen -> $52,'R' .dc.b %01111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00000000 ; Zeichen -> $53,'S' .dc.b %00111100 .dc.b %01100010 .dc.b %01110000 .dc.b %00111100 .dc.b %00001110 .dc.b %01000110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $54,'T' .dc.b %01111110 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 ; Zeichen -> $55,'U' .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $56,'V' .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100100 .dc.b %01111000 .dc.b %00000000 ; Zeichen -> $57,'W' .dc.b %11000110 .dc.b %11000110 .dc.b %11000110 .dc.b %11010110 .dc.b %11010110 .dc.b %11010110 .dc.b %11111100 .dc.b %00000000 ; Zeichen -> $58,'X' .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00000000 ; Zeichen -> $59,'Y' .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 ; Zeichen -> $5A,'Z' .dc.b %01111110 .dc.b %00001110 .dc.b %00011100 .dc.b %00111000 .dc.b %01110000 .dc.b %01100000 .dc.b %01111110 .dc.b %00000000 ; Zeichen -> $5B,'[' .dc.b %00011110 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011110 .dc.b %00000000 ; Zeichen -> $5C,'\' .dc.b %01000000 .dc.b %01100000 .dc.b %00110000 .dc.b %00011000 .dc.b %00001100 .dc.b %00000110 .dc.b %00000010 .dc.b %00000000 ; Zeichen -> $5D,']' .dc.b %01111000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %01111000 .dc.b %00000000 ; Zeichen -> $5E,'^' .dc.b %00010000 .dc.b %00111000 .dc.b %01101100 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $5F,'_' .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %01111110 .dc.b %00000000 ; Zeichen -> $60,'`' .dc.b %00000000 .dc.b %11000000 .dc.b %11000000 .dc.b %01100000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $61,'a' .dc.b %00000000 .dc.b %00111100 .dc.b %01000110 .dc.b %00111110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111110 .dc.b %00000000 ; Zeichen -> $62,'b' .dc.b %01100000 .dc.b %01111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01111100 .dc.b %00000000 ; Zeichen -> $63,'c' .dc.b %00000000 .dc.b %00111100 .dc.b %01100010 .dc.b %01100000 .dc.b %01100000 .dc.b %01100010 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $64,'d' .dc.b %00000110 .dc.b %00111110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111110 .dc.b %00000000 ; Zeichen -> $65,'e' .dc.b %00000000 .dc.b %00111100 .dc.b %01100110 .dc.b %01111110 .dc.b %01100000 .dc.b %01100010 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $66,'f' .dc.b %00011110 .dc.b %00110000 .dc.b %01111100 .dc.b %00110000 .dc.b %00110000 .dc.b %00110000 .dc.b %00110000 .dc.b %00000000 ; Zeichen -> $67,'g' .dc.b %00000000 .dc.b %00111110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111110 .dc.b %01000110 .dc.b %00111100 ; Zeichen -> $68,'h' .dc.b %01100000 .dc.b %01111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00000000 ; Zeichen -> $69,'i' .dc.b %00011000 .dc.b %00000000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 ; Zeichen -> $6A,'j' .dc.b %00000000 .dc.b %00001000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %01011000 .dc.b %00110000 ; Zeichen -> $6B,'k' .dc.b %01100000 .dc.b %01100100 .dc.b %01101000 .dc.b %01110000 .dc.b %01111000 .dc.b %01101100 .dc.b %01100110 .dc.b %00000000 ; Zeichen -> $6C,'l' .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00001100 .dc.b %00000000 ; Zeichen -> $6D,'m' .dc.b %00000000 .dc.b %11111100 .dc.b %11010110 .dc.b %11010110 .dc.b %11010110 .dc.b %11010110 .dc.b %11000110 .dc.b %00000000 ; Zeichen -> $6E,'n' .dc.b %00000000 .dc.b %01111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00000000 ; Zeichen -> $6F,'o' .dc.b %00000000 .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $70,'p' .dc.b %00000000 .dc.b %01111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01111100 .dc.b %01100000 .dc.b %01100000 ; Zeichen -> $71,'q' .dc.b %00000000 .dc.b %00111110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111110 .dc.b %00000110 ; Zeichen -> $72,'r' .dc.b %00000000 .dc.b %01101100 .dc.b %01110000 .dc.b %01100000 .dc.b %01100000 .dc.b %01100000 .dc.b %01100000 .dc.b %00000000 ; Zeichen -> $73,'s' .dc.b %00000000 .dc.b %00111100 .dc.b %01110010 .dc.b %00111000 .dc.b %00011100 .dc.b %01001110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $74,'t' .dc.b %00011000 .dc.b %00111100 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00001100 .dc.b %00000000 ; Zeichen -> $75,'u' .dc.b %00000000 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111110 .dc.b %00000000 ; Zeichen -> $76,'v' .dc.b %00000000 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100100 .dc.b %01111000 .dc.b %00000000 ; Zeichen -> $77,'w' .dc.b %00000000 .dc.b %11000110 .dc.b %11000110 .dc.b %11010110 .dc.b %11010110 .dc.b %11010110 .dc.b %11111100 .dc.b %00000000 ; Zeichen -> $78,'x' .dc.b %00000000 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00000000 ; Zeichen -> $79,'y' .dc.b %00000000 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00100110 .dc.b %00011110 .dc.b %01000110 .dc.b %00111100 ; Zeichen -> $7A,'z' .dc.b %00000000 .dc.b %01111110 .dc.b %00001110 .dc.b %00011100 .dc.b %00111000 .dc.b %01110000 .dc.b %01111110 .dc.b %00000000 ; Zeichen -> $7B,'{' .dc.b %00001110 .dc.b %00011000 .dc.b %00011000 .dc.b %00110000 .dc.b %00011000 .dc.b %00011000 .dc.b %00001110 .dc.b %00000000 ; Zeichen -> $7C,'|' .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 ; Zeichen -> $7D,'}' .dc.b %01110000 .dc.b %00011000 .dc.b %00011000 .dc.b %00001100 .dc.b %00011000 .dc.b %00011000 .dc.b %01110000 .dc.b %00000000 ; Zeichen -> $7E,'~' .dc.b %00000000 .dc.b %01100000 .dc.b %11110010 .dc.b %10011110 .dc.b %00001100 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $7F,'' .dc.b %00010000 .dc.b %00010000 .dc.b %00101000 .dc.b %00101000 .dc.b %01000100 .dc.b %01000100 .dc.b %10000010 .dc.b %11111110 ; Zeichen -> $80,'' .dc.b %00111100 .dc.b %01100010 .dc.b %01100000 .dc.b %01100000 .dc.b %01100000 .dc.b %01100010 .dc.b %00011100 .dc.b %00110000 ; Zeichen -> $81,'' .dc.b %00100100 .dc.b %00000000 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111110 .dc.b %00000000 ; Zeichen -> $82,'' .dc.b %00001100 .dc.b %00011000 .dc.b %00000000 .dc.b %00111100 .dc.b %01111110 .dc.b %01100000 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $83,'' .dc.b %00011000 .dc.b %01100110 .dc.b %00000000 .dc.b %00111100 .dc.b %00000110 .dc.b %01111110 .dc.b %00111110 .dc.b %00000000 ; Zeichen -> $84,'' .dc.b %00100100 .dc.b %00000000 .dc.b %00111100 .dc.b %01000110 .dc.b %00111110 .dc.b %01000110 .dc.b %00111110 .dc.b %00000000 ; Zeichen -> $85,'' .dc.b %00110000 .dc.b %00011000 .dc.b %00000000 .dc.b %00111100 .dc.b %00000110 .dc.b %01111110 .dc.b %00111110 .dc.b %00000000 ; Zeichen -> $86,'' .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 .dc.b %00111100 .dc.b %00000110 .dc.b %01111110 .dc.b %00111110 .dc.b %00000000 ; Zeichen -> $87,'' .dc.b %00000000 .dc.b %00111100 .dc.b %01100010 .dc.b %01100000 .dc.b %01100010 .dc.b %00111100 .dc.b %00001000 .dc.b %00011000 ; Zeichen -> $88,'' .dc.b %00011000 .dc.b %00110100 .dc.b %00000000 .dc.b %00111100 .dc.b %01111110 .dc.b %01100000 .dc.b %00111110 .dc.b %00000000 ; Zeichen -> $89,'' .dc.b %00100100 .dc.b %00000000 .dc.b %00111100 .dc.b %01100110 .dc.b %01111110 .dc.b %01100000 .dc.b %00111110 .dc.b %00000000 ; Zeichen -> $8A,'' .dc.b %00110000 .dc.b %00011000 .dc.b %00000000 .dc.b %00111100 .dc.b %01111110 .dc.b %01100000 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $8B,'' .dc.b %00100100 .dc.b %00000000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 ; Zeichen -> $8C,'' .dc.b %00011000 .dc.b %00100100 .dc.b %00000000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 ; Zeichen -> $8D,'' .dc.b %00010000 .dc.b %00001000 .dc.b %00000000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 ; Zeichen -> $8E,'' .dc.b %00100100 .dc.b %00000000 .dc.b %00111100 .dc.b %01100110 .dc.b %01111110 .dc.b %01100110 .dc.b %01100110 .dc.b %00000000 ; Zeichen -> $8F,'' .dc.b %00011000 .dc.b %00000000 .dc.b %00111100 .dc.b %01100110 .dc.b %01111110 .dc.b %01100110 .dc.b %01100110 .dc.b %00000000 ; Zeichen -> $90,'' .dc.b %00001100 .dc.b %00011000 .dc.b %01111110 .dc.b %01100000 .dc.b %01111100 .dc.b %01100000 .dc.b %01111110 .dc.b %00000000 ; Zeichen -> $91,'' .dc.b %00000000 .dc.b %00000000 .dc.b %01111110 .dc.b %00011011 .dc.b %01111111 .dc.b %11011000 .dc.b %01111110 .dc.b %00000000 ; Zeichen -> $92,'' .dc.b %00111111 .dc.b %01111000 .dc.b %11011000 .dc.b %11011110 .dc.b %11111000 .dc.b %11011000 .dc.b %11011111 .dc.b %00000000 ; Zeichen -> $93,'' .dc.b %00011000 .dc.b %00110100 .dc.b %00000000 .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $94,'' .dc.b %00100100 .dc.b %00000000 .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $95,'' .dc.b %00110000 .dc.b %00011000 .dc.b %00000000 .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $96,'' .dc.b %00011000 .dc.b %00100100 .dc.b %00000000 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $97,'' .dc.b %00110000 .dc.b %00011000 .dc.b %00000000 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $98,'' .dc.b %01100110 .dc.b %00000000 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111110 .dc.b %01000110 .dc.b %00111100 ; Zeichen -> $99,'' .dc.b %01100110 .dc.b %00000000 .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $9A,'' .dc.b %01100110 .dc.b %00000000 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $9B,'' .dc.b %00011000 .dc.b %00111100 .dc.b %01100010 .dc.b %01100000 .dc.b %01100000 .dc.b %01100010 .dc.b %00111100 .dc.b %00011000 ; Zeichen -> $9C,'' .dc.b %00011100 .dc.b %00111010 .dc.b %00110000 .dc.b %01111100 .dc.b %00110000 .dc.b %00110000 .dc.b %01111110 .dc.b %00000000 ; Zeichen -> $9D,'' .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00011000 .dc.b %00111100 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 ; Zeichen -> $9E,'' .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01101100 .dc.b %01100110 .dc.b %01100110 .dc.b %11101100 .dc.b %00000000 ; Zeichen -> $9F,'' .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 ; Zeichen -> $A0,'' .dc.b %00001100 .dc.b %00011000 .dc.b %00000000 .dc.b %00111100 .dc.b %00000110 .dc.b %01111110 .dc.b %00111110 .dc.b %00000000 ; Zeichen -> $A1,'' .dc.b %00001100 .dc.b %00011000 .dc.b %00000000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 ; Zeichen -> $A2,'' .dc.b %00001100 .dc.b %00011000 .dc.b %00000000 .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $A3,'' .dc.b %00001100 .dc.b %00011000 .dc.b %00000000 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111110 .dc.b %00000000 ; Zeichen -> $A4,'' .dc.b %00110100 .dc.b %01011000 .dc.b %00000000 .dc.b %01111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00000000 ; Zeichen -> $A5,'' .dc.b %00011010 .dc.b %00101100 .dc.b %01100010 .dc.b %01110010 .dc.b %01011010 .dc.b %01001110 .dc.b %01000110 .dc.b %00000000 ; Zeichen -> $A6,'' .dc.b %00000000 .dc.b %00111100 .dc.b %01000110 .dc.b %00111110 .dc.b %01100110 .dc.b %00111110 .dc.b %00000000 .dc.b %01111110 ; Zeichen -> $A7,'' .dc.b %00000000 .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00000000 .dc.b %01111110 ; Zeichen -> $A8,'' .dc.b %00000000 .dc.b %00011000 .dc.b %00000000 .dc.b %00011000 .dc.b %00110000 .dc.b %01100000 .dc.b %01100110 .dc.b %00111100 ; Zeichen -> $A9,'' .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00111110 .dc.b %00110000 .dc.b %00110000 .dc.b %00110000 .dc.b %00000000 ; Zeichen -> $AA,'' .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %01111100 .dc.b %00001100 .dc.b %00001100 .dc.b %00001100 .dc.b %00000000 ; Zeichen -> $AB,'' .dc.b %01100010 .dc.b %11100100 .dc.b %01101000 .dc.b %01110110 .dc.b %00101011 .dc.b %01000011 .dc.b %10000110 .dc.b %00001111 ; Zeichen -> $AC,'' .dc.b %01100010 .dc.b %11100100 .dc.b %01101000 .dc.b %01110110 .dc.b %00101110 .dc.b %01010110 .dc.b %10011111 .dc.b %00000110 ; Zeichen -> $AD,'' .dc.b %00000000 .dc.b %00011000 .dc.b %00000000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 ; Zeichen -> $AE,'' .dc.b %00011011 .dc.b %00110110 .dc.b %01101100 .dc.b %11011000 .dc.b %01101100 .dc.b %00110110 .dc.b %00011011 .dc.b %00000000 ; Zeichen -> $AF,'' .dc.b %11011000 .dc.b %01101100 .dc.b %00110110 .dc.b %00011011 .dc.b %00110110 .dc.b %01101100 .dc.b %11011000 .dc.b %00000000 ; Zeichen -> $B0,'' .dc.b %00110100 .dc.b %01011000 .dc.b %00000000 .dc.b %00111100 .dc.b %00000110 .dc.b %01111110 .dc.b %00111110 .dc.b %00000000 ; Zeichen -> $B1,'' .dc.b %00110100 .dc.b %01011000 .dc.b %00000000 .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $B2,'' .dc.b %00000010 .dc.b %00111100 .dc.b %01100110 .dc.b %01101110 .dc.b %01110110 .dc.b %01100110 .dc.b %00111100 .dc.b %01000000 ; Zeichen -> $B3,'' .dc.b %00000000 .dc.b %00000010 .dc.b %00111100 .dc.b %01101110 .dc.b %01110110 .dc.b %01100110 .dc.b %00111100 .dc.b %01000000 ; Zeichen -> $B4,'' .dc.b %00000000 .dc.b %00000000 .dc.b %01111110 .dc.b %11011011 .dc.b %11011110 .dc.b %11011000 .dc.b %01111111 .dc.b %00000000 ; Zeichen -> $B5,'' .dc.b %00000000 .dc.b %01111110 .dc.b %11011000 .dc.b %11011000 .dc.b %11111100 .dc.b %11011000 .dc.b %11011000 .dc.b %11011110 ; Zeichen -> $B6,'' .dc.b %00100000 .dc.b %00010000 .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01111110 .dc.b %01100110 .dc.b %01100110 ; Zeichen -> $B7,'' .dc.b %00110100 .dc.b %01011000 .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01111110 .dc.b %01100110 .dc.b %01100110 ; Zeichen -> $B8,'' .dc.b %00110100 .dc.b %01011000 .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 ; Zeichen -> $B9,'' .dc.b %01100110 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $BA,'' .dc.b %00001100 .dc.b %00011000 .dc.b %00110000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $BB,'' .dc.b %00000000 .dc.b %00010000 .dc.b %00111000 .dc.b %00010000 .dc.b %00010000 .dc.b %00010000 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $BC,'' .dc.b %01111010 .dc.b %11001010 .dc.b %11001010 .dc.b %11001010 .dc.b %01111010 .dc.b %00001010 .dc.b %00001010 .dc.b %00001010 ; Zeichen -> $BD,'' .dc.b %00111100 .dc.b %01000010 .dc.b %10011001 .dc.b %10110101 .dc.b %10110001 .dc.b %10011101 .dc.b %01000010 .dc.b %00111100 ; Zeichen -> $BE,'' .dc.b %00111100 .dc.b %01000010 .dc.b %10111001 .dc.b %10110101 .dc.b %10111001 .dc.b %10110101 .dc.b %01000010 .dc.b %00111100 ; Zeichen -> $BF,'' .dc.b %11110001 .dc.b %01011011 .dc.b %01010101 .dc.b %01010001 .dc.b %01010001 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $C0,'' .dc.b %01100110 .dc.b %00000000 .dc.b %11100110 .dc.b %01100110 .dc.b %01100110 .dc.b %11110110 .dc.b %00000110 .dc.b %00011100 ; Zeichen -> $C1,'' .dc.b %11110110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %11110110 .dc.b %00000110 .dc.b %00011100 ; Zeichen -> $C2,'' .dc.b %00000000 .dc.b %01100110 .dc.b %01110110 .dc.b %00111100 .dc.b %01101110 .dc.b %01100110 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $C3,'' .dc.b %00000000 .dc.b %01111100 .dc.b %00001100 .dc.b %00001100 .dc.b %00001100 .dc.b %01111110 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $C4,'' .dc.b %00000000 .dc.b %00011110 .dc.b %00000110 .dc.b %00001110 .dc.b %00011110 .dc.b %00110110 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $C5,'' .dc.b %00000000 .dc.b %01111110 .dc.b %00001100 .dc.b %00001100 .dc.b %00001100 .dc.b %00001100 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $C6,'' .dc.b %00000000 .dc.b %01111100 .dc.b %00000110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $C7,'' .dc.b %00000000 .dc.b %00011100 .dc.b %00001100 .dc.b %00001100 .dc.b %00001100 .dc.b %00001100 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $C8,'' .dc.b %00000000 .dc.b %00011110 .dc.b %00001100 .dc.b %00000110 .dc.b %00000110 .dc.b %00000110 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $C9,'' .dc.b %00000000 .dc.b %01111110 .dc.b %00110110 .dc.b %00110110 .dc.b %00110110 .dc.b %00110110 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $CA,'' .dc.b %01100000 .dc.b %01101110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01111110 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $CB,'' .dc.b %00000000 .dc.b %00111100 .dc.b %00001100 .dc.b %00001100 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $CC,'' .dc.b %00000000 .dc.b %00111110 .dc.b %00000110 .dc.b %00000110 .dc.b %00000110 .dc.b %00111110 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $CD,'' .dc.b %01100000 .dc.b %01111110 .dc.b %00000110 .dc.b %00000110 .dc.b %00000110 .dc.b %00001110 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $CE,'' .dc.b %00000000 .dc.b %01101100 .dc.b %00111110 .dc.b %01100110 .dc.b %01100110 .dc.b %01101110 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $CF,'' .dc.b %00000000 .dc.b %00011100 .dc.b %00001100 .dc.b %00001100 .dc.b %00001100 .dc.b %00111100 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $D0,'' .dc.b %00000000 .dc.b %00111110 .dc.b %00110110 .dc.b %00110110 .dc.b %00110110 .dc.b %00011100 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $D1,'' .dc.b %00000000 .dc.b %00110110 .dc.b %00110110 .dc.b %00110110 .dc.b %00110110 .dc.b %01111110 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $D2,'' .dc.b %00000000 .dc.b %01111110 .dc.b %01100110 .dc.b %01110110 .dc.b %00000110 .dc.b %01111110 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $D3,'' .dc.b %00000000 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00001110 .dc.b %01111110 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $D4,'' .dc.b %00000000 .dc.b %00111110 .dc.b %00000110 .dc.b %00110110 .dc.b %00110110 .dc.b %00110100 .dc.b %00110000 .dc.b %00000000 ; Zeichen -> $D5,'' .dc.b %00000000 .dc.b %01111000 .dc.b %00001100 .dc.b %00001100 .dc.b %00001100 .dc.b %00001100 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $D6,'' .dc.b %00000000 .dc.b %11010110 .dc.b %11010110 .dc.b %11010110 .dc.b %11010110 .dc.b %11111110 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $D7,'' .dc.b %00000000 .dc.b %01111100 .dc.b %01101100 .dc.b %01101100 .dc.b %01101100 .dc.b %11101100 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $D8,'' .dc.b %00000000 .dc.b %00011100 .dc.b %00001100 .dc.b %00001100 .dc.b %00001100 .dc.b %00001100 .dc.b %00001100 .dc.b %00000000 ; Zeichen -> $D9,'' .dc.b %00000000 .dc.b %00111110 .dc.b %00000110 .dc.b %00000110 .dc.b %00000110 .dc.b %00000110 .dc.b %00000110 .dc.b %00000000 ; Zeichen -> $DA,'' .dc.b %00000000 .dc.b %11111110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01111110 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $DB,'' .dc.b %00000000 .dc.b %01111110 .dc.b %01100110 .dc.b %01110110 .dc.b %00000110 .dc.b %00000110 .dc.b %00000110 .dc.b %00000000 ; Zeichen -> $DC,'' .dc.b %00000000 .dc.b %00110110 .dc.b %00110110 .dc.b %00011100 .dc.b %00001100 .dc.b %00001100 .dc.b %00001100 .dc.b %00000000 ; Zeichen -> $DD,'' .dc.b %00011100 .dc.b %00110010 .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %01001100 .dc.b %00111000 ; Zeichen -> $DE,'' .dc.b %00000000 .dc.b %00010000 .dc.b %00111000 .dc.b %01101100 .dc.b %11000110 .dc.b %10000010 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $DF,'' .dc.b %01100110 .dc.b %11110111 .dc.b %10011001 .dc.b %10011001 .dc.b %11101111 .dc.b %01100110 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $E0,'' .dc.b %00000000 .dc.b %00000000 .dc.b %01110110 .dc.b %11011100 .dc.b %11001000 .dc.b %11011100 .dc.b %01110110 .dc.b %00000000 ; Zeichen -> $E1,'' .dc.b %00011100 .dc.b %00110110 .dc.b %01100110 .dc.b %01111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01111100 .dc.b %01100000 ; Zeichen -> $E2,'' .dc.b %00000000 .dc.b %11111110 .dc.b %01100110 .dc.b %01100010 .dc.b %01100000 .dc.b %01100000 .dc.b %01100000 .dc.b %11111000 ; Zeichen -> $E3,'' .dc.b %00000000 .dc.b %00000000 .dc.b %11111110 .dc.b %01101100 .dc.b %01101100 .dc.b %01101100 .dc.b %01101100 .dc.b %01001000 ; Zeichen -> $E4,'' .dc.b %11111110 .dc.b %01100110 .dc.b %00110000 .dc.b %00011000 .dc.b %00110000 .dc.b %01100110 .dc.b %11111110 .dc.b %00000000 ; Zeichen -> $E5,'' .dc.b %00000000 .dc.b %00011110 .dc.b %00111000 .dc.b %01101100 .dc.b %01101100 .dc.b %01101100 .dc.b %00111000 .dc.b %00000000 ; Zeichen -> $E6,'' .dc.b %00000000 .dc.b %00000000 .dc.b %01101100 .dc.b %01101100 .dc.b %01101100 .dc.b %01101100 .dc.b %01111111 .dc.b %11000000 ; Zeichen -> $E7,'' .dc.b %00000000 .dc.b %00000000 .dc.b %01111110 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00010000 ; Zeichen -> $E8,'' .dc.b %00111100 .dc.b %00011000 .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00011000 .dc.b %00111100 ; Zeichen -> $E9,'' .dc.b %00000000 .dc.b %00111100 .dc.b %01100110 .dc.b %01111110 .dc.b %01100110 .dc.b %01100110 .dc.b %00111100 .dc.b %00000000 ; Zeichen -> $EA,'' .dc.b %00000000 .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00100100 .dc.b %01100110 .dc.b %00000000 ; Zeichen -> $EB,'' .dc.b %00011100 .dc.b %00110110 .dc.b %01111000 .dc.b %11011100 .dc.b %11001100 .dc.b %11101100 .dc.b %01111000 .dc.b %00000000 ; Zeichen -> $EC,'' .dc.b %00001100 .dc.b %00011000 .dc.b %00111000 .dc.b %01010100 .dc.b %01010100 .dc.b %00111000 .dc.b %00110000 .dc.b %01100000 ; Zeichen -> $ED,'' .dc.b %00000000 .dc.b %00010000 .dc.b %01111100 .dc.b %11010110 .dc.b %11010110 .dc.b %11010110 .dc.b %01111100 .dc.b %00010000 ; Zeichen -> $EE,'' .dc.b %00111110 .dc.b %01110000 .dc.b %01100000 .dc.b %01111110 .dc.b %01100000 .dc.b %01110000 .dc.b %00111110 .dc.b %00000000 ; Zeichen -> $EF,'' .dc.b %00111100 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %01100110 .dc.b %00000000 ; Zeichen -> $F0,'' .dc.b %00000000 .dc.b %01111110 .dc.b %00000000 .dc.b %01111110 .dc.b %00000000 .dc.b %01111110 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $F1,'' .dc.b %00011000 .dc.b %00011000 .dc.b %01111110 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 .dc.b %01111110 .dc.b %00000000 ; Zeichen -> $F2,'' .dc.b %00110000 .dc.b %00011000 .dc.b %00001100 .dc.b %00011000 .dc.b %00110000 .dc.b %00000000 .dc.b %01111110 .dc.b %00000000 ; Zeichen -> $F3,'' .dc.b %00001100 .dc.b %00011000 .dc.b %00110000 .dc.b %00011000 .dc.b %00001100 .dc.b %00000000 .dc.b %01111110 .dc.b %00000000 ; Zeichen -> $F4,'' .dc.b %00000000 .dc.b %00001110 .dc.b %00011011 .dc.b %00011011 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 ; Zeichen -> $F5,'' .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %00011000 .dc.b %11011000 .dc.b %11011000 .dc.b %01110000 .dc.b %00000000 ; Zeichen -> $F6,'' .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 .dc.b %01111110 .dc.b %00000000 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 ; Zeichen -> $F7,'' .dc.b %00000000 .dc.b %00110010 .dc.b %01001100 .dc.b %00000000 .dc.b %00110010 .dc.b %01001100 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $F8,'' .dc.b %00111000 .dc.b %01101100 .dc.b %00111000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $F9,'' .dc.b %00111000 .dc.b %01111100 .dc.b %00111000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $FA,'' .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00011000 .dc.b %00011000 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $FB,'' .dc.b %00000000 .dc.b %00000000 .dc.b %00001111 .dc.b %00011000 .dc.b %11011000 .dc.b %01110000 .dc.b %00110000 .dc.b %00000000 ; Zeichen -> $FC,'' .dc.b %00111000 .dc.b %01101100 .dc.b %01101100 .dc.b %01101100 .dc.b %01101100 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $FD,'' .dc.b %00111000 .dc.b %01101100 .dc.b %00011000 .dc.b %00110000 .dc.b %01111100 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $FE,'' .dc.b %01111000 .dc.b %00001100 .dc.b %00111000 .dc.b %00001100 .dc.b %01111000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 ; Zeichen -> $FF,'' .dc.b %00000000 .dc.b %11111110 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 .dc.b %00000000 #ifndef ___GLO_H___ #define ___GLO_H___ #include #include #include #include #include #include #include /********************************************************************/ #define TIMEOUT_BASIC 100 #define SCREEN_SIZE ((256/8)*176) #define MAX_CX 32 #define MAX_CY 22 #define KB_SIZE 128 /********************************************************************/ EXTERN VOID ScrollUp ( VOID ); EXTERN VOID ScrollDown ( VOID ); EXTERN VOID DrawCursor ( WORD x, WORD y ); EXTERN VOID PutChar ( WORD x, WORD y, WORD ch ); GLOBAL VOID StartBASIC ( VOID ); GLOBAL VOID BreakBASIC ( VOID ); GLOBAL LONG ContBASIC ( VOID ); GLOBAL VOID Printf ( BYTE *string, ... ); GLOBAL VOID VPrintf ( BYTE *string, va_list arg ); GLOBAL VOID Putchar ( WORD ch ); GLOBAL BYTE *Gets ( BYTE *string ); /********************************************************************/ EXTERN MFDB cpx_mfdb; EXTERN BYTE screen[]; #ifdef ___MAIN_C___ #undef EXTERN #define EXTERN GLOBAL #endif EXTERN WORD roff,woff,DirtyScreen; EXTERN BYTE KeyBuffer[KB_SIZE]; #ifdef ___MAIN_C___ #undef EXTERN #define EXTERN extern #endif #endif#ifndef P2C_H #define P2C_H /*#ifdef __PUREC__ #define FAKE_TRY #endif */ /* Header file for code generated by "p2c", the Pascal-to-C translator */ /* "p2c" Copyright (C) 1989, 1990, 1991 Free Software Foundation. * By Dave Gillespie, daveg@csvax.cs.caltech.edu. Version 1.20. * This file may be copied, modified, etc. in any way. It is not restricted * by the licence agreement accompanying p2c itself. */ #include /* If the following heuristic fails, compile -DBSD=0 for non-BSD systems, or -DBSD=1 for BSD systems. */ #ifdef M_XENIX # define BSD 0 #endif #ifdef vms # define BSD 0 # ifndef __STDC__ # define __STDC__ 1 # endif #endif #if defined(__TURBOC__) && !defined(__TOS__) # define MSDOS 1 #endif #ifdef MSDOS # define BSD 0 #endif #ifdef FILE /* a #define in BSD, a typedef in SYSV (hp-ux, at least) */ # ifndef BSD /* (a convenient, but horrible kludge!) */ # define BSD 1 # endif #endif #ifdef BSD # if !BSD # undef BSD # endif #endif #if (defined(__STDC__) && !defined(M_XENIX)) || defined(__TURBOC__) # include # include # define HAS_STDLIB # if defined(vms) || defined(__TURBOC__) # define __ID__(a)a # endif #else # ifndef BSD # ifndef __TURBOC__ # include # endif # endif # ifdef hpux # ifdef _INCLUDE__STDC__ # include # include # endif # endif # include # if !defined(MSDOS) || defined(__TURBOC__) # define __ID__(a)a # endif #endif #if defined(__ID__) && !defined(__PUREC__) # define __CAT__(a,b)__ID__(a)b #else # define __CAT__(a,b)a##b #endif #ifdef BSD # include # define memcpy(a,b,n) (bcopy(b,a,n),a) # define memcmp(a,b,n) bcmp(a,b,n) # define strchr(s,c) index(s,c) # define strrchr(s,c) rindex(s,c) #else # include #endif #include #include #include #include #ifndef NO_LACK #ifdef vms #define LACK_LABS #define LACK_MEMMOVE #define LACK_MEMCPY #else #define LACK_LABS /* Undefine these if your library has these */ #define LACK_MEMMOVE #endif #endif typedef struct __p2c_jmp_buf { struct __p2c_jmp_buf *next; jmp_buf jbuf; } __p2c_jmp_buf; /* Warning: The following will not work if setjmp is used simultaneously. This also violates the ANSI restriction about using vars after longjmp, but a typical implementation of longjmp will get it right anyway. */ #ifndef FAKE_TRY # define TRY(x) do { __p2c_jmp_buf __try_jb; \ __try_jb.next = __top_jb; \ if (!setjmp((__top_jb = &__try_jb)->jbuf)) { # define RECOVER(x) __top_jb = __try_jb.next; } else { # define RECOVER2(x,L) __top_jb = __try_jb.next; } else { \ if (0) { L: __top_jb = __try_jb.next; } # define ENDTRY(x) } } while (0) #else # define TRY(x) if (1) { # define RECOVER(x) } else do { # define RECOVER2(x,L) } else do { L: ; # define ENDTRY(x) } while (0) #endif #ifdef M_XENIX /* avoid compiler bug */ # define SHORT_MAX (32767) # define SHORT_MIN (-32768) #endif /* The following definitions work only on twos-complement machines */ #ifndef SHORT_MAX # define SHORT_MAX ((short)(((unsigned short) -1) >> 1)) # define SHORT_MIN (~SHORT_MAX) #endif #ifndef INT_MAX # define INT_MAX ((int)(((unsigned int) -1) >> 1)) # define INT_MIN (~INT_MAX) #endif #ifndef LONG_MAX # define LONG_MAX ((long)(((unsigned long) -1) >> 1)) # define LONG_MIN (~LONG_MAX) #endif #ifndef SEEK_SET # define SEEK_SET 0 # define SEEK_CUR 1 # define SEEK_END 2 #endif #ifndef EXIT_SUCCESS # ifdef vms # define EXIT_SUCCESS 1 # define EXIT_FAILURE (02000000000L) # else # define EXIT_SUCCESS 0 # define EXIT_FAILURE 1 # endif #endif #define SETBITS 32 #if defined(__STDC__) || defined(__TURBOC__) # if !defined(vms) && !defined(M_LINT) # define Signed signed # else # define Signed # endif # define Void void /* Void f() = procedure */ # ifndef Const # define Const const # endif # ifndef Volatile # define Volatile volatile # endif # ifdef M_LINT # define PP(x) () # define PV() () typedef char *Anyptr; # else # define PP(x) x /* function prototype */ # define PV() (void) /* null function prototype */ typedef void *Anyptr; # endif #else # define Signed # define Void void # ifndef Const # define Const # endif # ifndef Volatile # define Volatile # endif # define PP(x) () # define PV() () typedef char *Anyptr; #endif #ifdef __GNUC__ # define Inline inline #else # define Inline #endif #define Register register /* Register variables */ #define Char char /* Characters (not bytes) */ #ifndef Static # define Static static /* Private global funcs and vars */ #endif #ifndef Local # define Local static /* Nested functions */ #endif typedef Signed char schar; typedef unsigned char uchar; typedef unsigned char boolean; #ifndef true # define true 1 # define false 0 #endif #ifndef TRUE # define TRUE 1 # define FALSE 0 #endif typedef struct { Anyptr proc, link; } _PROCEDURE; #ifndef _FNSIZE # define _FNSIZE 120 #endif extern Void PASCAL_MAIN PP( (int, Char **) ); extern Char **P_argv; extern int P_argc; extern short P_escapecode; extern int P_ioresult; extern __p2c_jmp_buf *__top_jb; #ifdef P2C_H_PROTO /* if you have Ansi C but non-prototyped header files */ extern Char *strcat PP( (Char *, Const Char *) ); extern Char *strchr PP( (Const Char *, int) ); extern int strcmp PP( (Const Char *, Const Char *) ); extern Char *strcpy PP( (Char *, Const Char *) ); extern size_t strlen PP( (Const Char *) ); extern Char *strncat PP( (Char *, Const Char *, size_t) ); extern int strncmp PP( (Const Char *, Const Char *, size_t) ); extern Char *strncpy PP( (Char *, Const Char *, size_t) ); extern Char *strrchr PP( (Const Char *, int) ); extern Anyptr memchr PP( (Const Anyptr, int, size_t) ); extern Anyptr memmove PP( (Anyptr, Const Anyptr, size_t) ); extern Anyptr memset PP( (Anyptr, int, size_t) ); #ifndef memcpy extern Anyptr memcpy PP( (Anyptr, Const Anyptr, size_t) ); extern int memcmp PP( (Const Anyptr, Const Anyptr, size_t) ); #endif extern int atoi PP( (Const Char *) ); extern double atof PP( (Const Char *) ); extern long atol PP( (Const Char *) ); extern double strtod PP( (Const Char *, Char **) ); extern long strtol PP( (Const Char *, Char **, int) ); #endif /*P2C_H_PROTO*/ #ifndef HAS_STDLIB extern Anyptr malloc PP( (size_t) ); extern Void free PP( (Anyptr) ); #endif extern int _OutMem PV(); extern int _CaseCheck PV(); extern int _NilCheck PV(); extern int _Escape PP( (int) ); extern int _EscIO PP( (int) ); extern long ipow PP( (long, long) ); extern Char *strsub PP( (Char *, Char *, int, int) ); extern Char *strltrim PP( (Char *) ); extern Char *strrtrim PP( (Char *) ); extern Char *strrpt PP( (Char *, Char *, int) ); extern Char *strpad PP( (Char *, Char *, int, int) ); extern int strpos2 PP( (Char *, Char *, int) ); extern long memavail PV(); extern int P_peek PP( (FILE *) ); extern int P_eof PP( (FILE *) ); extern int P_eoln PP( (FILE *) ); extern Void P_readpaoc PP( (FILE *, Char *, int) ); extern Void P_readlnpaoc PP( (FILE *, Char *, int) ); extern long P_maxpos PP( (FILE *) ); extern Char *P_trimname PP( (Char *, int) ); extern long *P_setunion PP( (long *, long *, long *) ); extern long *P_setint PP( (long *, long *, long *) ); extern long *P_setdiff PP( (long *, long *, long *) ); extern long *P_setxor PP( (long *, long *, long *) ); extern int P_inset PP( (unsigned, long *) ); extern int P_setequal PP( (long *, long *) ); extern int P_subset PP( (long *, long *) ); extern long *P_addset PP( (long *, unsigned) ); extern long *P_addsetr PP( (long *, unsigned, unsigned) ); extern long *P_remset PP( (long *, unsigned) ); extern long *P_setcpy PP( (long *, long *) ); extern long *P_expset PP( (long *, long) ); extern long P_packset PP( (long *) ); extern int P_getcmdline PP( (int, int, Char *) ); extern Void TimeStamp PP( (int *, int *, int *, int *, int *, int *) ); extern Void P_sun_argv PP( (char *, int, int) ); /* I/O error handling */ #define _CHKIO(cond,ior,val,def) ((cond) ? P_ioresult=0,(val) \ : P_ioresult=(ior),(def)) #define _SETIO(cond,ior) (P_ioresult = (cond) ? 0 : (ior)) /* Following defines are suitable for the HP Pascal operating system */ #define FileNotFound 10 #define FileNotOpen 13 #define FileWriteError 38 #define BadInputFormat 14 #define EndOfFile 30 #define FILENOTFOUND 10 #define FILENOTOPEN 13 #define FILEWRITEERROR 38 #define BADINPUTFORMAT 14 #define ENDOFFILE 30 /* Creating temporary files */ #if (defined(BSD) || defined(NO_TMPFILE)) && !defined(HAVE_TMPFILE) # define tmpfile() (fopen(tmpnam(NULL), "w+")) #endif /* File buffers */ #define FILEBUF(f,sc,type) sc int __CAT__(f,_BFLAGS); \ sc type __CAT__(f,_BUFFER) #define FILEBUFNC(f,type) int __CAT__(f,_BFLAGS); \ type __CAT__(f,_BUFFER) #define RESETBUF(f,type) (__CAT__(f,_BFLAGS) = 1) #define SETUPBUF(f,type) (__CAT__(f,_BFLAGS) = 0) #define GETFBUF(f,type) (*((__CAT__(f,_BFLAGS) == 1 && \ ((__CAT__(f,_BFLAGS) = 2), \ fread(&__CAT__(f,_BUFFER), \ sizeof(type),1,(f)))),\ &__CAT__(f,_BUFFER))) #define AGETFBUF(f,type) ((__CAT__(f,_BFLAGS) == 1 && \ ((__CAT__(f,_BFLAGS) = 2), \ fread(__CAT__(f,_BUFFER), \ sizeof(type),1,(f)))),\ __CAT__(f,_BUFFER)) #define PUTFBUF(f,type,v) (GETFBUF(f,type) = (v)) #define CPUTFBUF(f,v) (PUTFBUF(f,char,v)) #define APUTFBUF(f,type,v) (memcpy(AGETFBUF(f,type), (v), \ sizeof(__CAT__(f,_BUFFER)))) #define GET(f,type) (__CAT__(f,_BFLAGS) == 1 ? \ fread(&__CAT__(f,_BUFFER),sizeof(type),1,(f)) : \ (__CAT__(f,_BFLAGS) = 1)) #define PUT(f,type) (fwrite(&__CAT__(f,_BUFFER),sizeof(type),1,(f)), \ (__CAT__(f,_BFLAGS) = 0)) #define CPUT(f) (PUT(f,char)) #define BUFEOF(f) (__CAT__(f,_BFLAGS) != 2 && P_eof(f)) #define BUFFPOS(f) (ftell(f) - (__CAT__(f,_BFLAGS) == 2)) typedef struct { FILE *f; FILEBUFNC(f,Char); Char name[_FNSIZE]; } _TEXT; /* Memory allocation */ #ifdef __GCC__ # define Malloc(n) (malloc(n) ?: (Anyptr)_OutMem()) #else extern Anyptr __MallocTemp__; # define Malloc(n) ((__MallocTemp__ = malloc(n)) ? __MallocTemp__ : (Anyptr)_OutMem()) #endif #define FreeR(p) (free((Anyptr)(p))) /* used if arg is an rvalue */ #define Free(p) (free((Anyptr)(p)), (p)=NULL) /* sign extension */ #define SEXT(x,n) ((x) | -(((x) & (1L<<((n)-1))) << 1)) /* packed arrays */ /* BEWARE: these are untested! */ #define P_getbits_UB(a,i,n,L) ((int)((a)[(i)>>(L)-(n)] >> \ (((~(i))&((1<<(L)-(n))-1)) << (n)) & \ (1<<(1<<(n)))-1)) #define P_getbits_SB(a,i,n,L) ((int)((a)[(i)>>(L)-(n)] << \ (16 - ((((~(i))&((1<<(L)-(n))-1))+1) <<\ (n)) >> (16-(1<<(n)))))) #define P_putbits_UB(a,i,x,n,L) ((a)[(i)>>(L)-(n)] |= \ (x) << (((~(i))&((1<<(L)-(n))-1)) << (n))) #define P_putbits_SB(a,i,x,n,L) ((a)[(i)>>(L)-(n)] |= \ ((x) & (1<<(1<<(n)))-1) << \ (((~(i))&((1<<(L)-(n))-1)) << (n))) #define P_clrbits_B(a,i,n,L) ((a)[(i)>>(L)-(n)] &= \ ~( ((1<<(1<<(n)))-1) << \ (((~(i))&((1<<(L)-(n))-1)) << (n))) ) /* small packed arrays */ #define P_getbits_US(v,i,n) ((int)((v) >> ((i)<<(n)) & (1<<(1<<(n)))-1)) #define P_getbits_SS(v,i,n) ((int)((long)(v) << (SETBITS - (((i)+1) << (n))) >> (SETBITS-(1<<(n))))) #define P_putbits_US(v,i,x,n) ((v) |= (x) << ((i) << (n))) #define P_putbits_SS(v,i,x,n) ((v) |= ((x) & (1<<(1<<(n)))-1) << ((i)<<(n))) #define P_clrbits_S(v,i,n) ((v) &= ~( ((1<<(1<<(n)))-1) << ((i)<<(n)) )) #define P_max(a,b) ((a) > (b) ? (a) : (b)) #define P_min(a,b) ((a) < (b) ? (a) : (b)) /* Fix ANSI-isms */ #ifdef LACK_LABS # ifndef labs # define labs my_labs extern long my_labs PP( (long) ); # endif #endif #ifdef LACK_MEMMOVE # ifndef memmove # define memmove my_memmove extern Anyptr my_memmove PP( (Anyptr, Const Anyptr, size_t) ); # endif #endif #ifdef LACK_MEMCPY # ifndef memcpy # define memcpy my_memcpy extern Anyptr my_memcpy PP( (Anyptr, Const Anyptr, size_t) ); # endif # ifndef memcmp # define memcmp my_memcmp extern int my_memcmp PP( (Const Anyptr, Const Anyptr, size_t) ); # endif # ifndef memset # define memset my_memset extern Anyptr my_memset PP( (Anyptr, int, size_t) ); # endif #endif /* Fix toupper/tolower on Suns and other stupid BSD systems */ #ifdef toupper # undef toupper # undef tolower # define toupper(c) my_toupper(c) # define tolower(c) my_tolower(c) #endif #ifndef _toupper # if 'A' == 65 && 'a' == 97 # define _toupper(c) ((c)-'a'+'A') # define _tolower(c) ((c)-'A'+'a') # else # ifdef toupper # undef toupper /* hope these are shadowing real functions, */ # undef tolower /* because my_toupper calls _toupper! */ # endif # define _toupper(c) toupper(c) # define _tolower(c) tolower(c) # endif #endif #endif /* P2C_H */ /* End. */ /* Run-time library for use with "p2c", the Pascal to C translator */ /* "p2c" Copyright (C) 1989, 1990, 1991 Free Software Foundation. * By Dave Gillespie, daveg@csvax.cs.caltech.edu. Version --VERSION--. * This file may be copied, modified, etc. in any way. It is not restricted * by the licence agreement accompanying p2c itself. */ #define __STDC__ #include #ifndef NO_TIME # include #endif #define Isspace(c) isspace(c) /* or "((c) == ' ')" if preferred */ int P_argc; char **P_argv; short P_escapecode; int P_ioresult; long EXCP_LINE; /* Used by Pascal workstation system */ Anyptr __MallocTemp__; __p2c_jmp_buf *__top_jb; void PASCAL_MAIN(int argc, char **argv) { P_argc = argc; P_argv = argv; __top_jb = NULL; #ifdef LOCAL_INIT LOCAL_INIT(); #endif } /* In case your system lacks these... */ long my_labs(long x) { return((x > 0) ? x : -x); } Anyptr my_memmove(Anyptr d, Const Anyptr s, size_t n) { register char *dd = (char *)d, *ss = (char *)s; if (dd < ss || dd - ss >= n) { memcpy(dd, ss, n); } else if (n > 0) { dd += n; ss += n; while (n-- > 0) *--dd = *--ss; } return d; } Anyptr my_memcpy(Anyptr d, Const Anyptr s, size_t n) { register char *ss = (char *)s, *dd = (char *)d; while (n-- > 0) *dd++ = *ss++; return d; } int my_memcmp(Const Anyptr s1, Const Anyptr s2, size_t n) { register char *a = (char *)s1, *b = (char *)s2; register int i; while (n-- > 0) if ((i = (*a++) - (*b++)) != 0) return i; return 0; } Anyptr my_memset(Anyptr d, int c, size_t n) { register char *dd = (char *)d; while (n-- > 0) *dd++ = c; return d; } int my_toupper(int c) { if (islower(c)) return _toupper(c); else return c; } int my_tolower(int c) { if (isupper(c)) return _tolower(c); else return c; } long ipow(long a, long b) { long v; if (a == 0 || a == 1) return a; if (a == -1) return (b & 1) ? -1 : 1; if (b < 0) return 0; if (a == 2) return 1L << b; v = (b & 1) ? a : 1; while ((b >>= 1) > 0) { a *= a; if (b & 1) v *= a; } return v; } /* Common string functions: */ /* Store in "ret" the substring of length "len" starting from "pos" (1-based). Store a shorter or null string if out-of-range. Return "ret". */ char *strsub(register char *ret, register char *s, register int pos, register int len) { register char *s2; if (--pos < 0 || len <= 0) { *ret = 0; return ret; } while (pos > 0) { if (!*s++) { *ret = 0; return ret; } pos--; } s2 = ret; while (--len >= 0) { if (!(*s2++ = *s++)) return ret; } *s2 = 0; return ret; } /* Return the index of the first occurrence of "pat" as a substring of "s", starting at index "pos" (1-based). Result is 1-based, 0 if not found. */ int strpos2(char *s, register char *pat, register int pos) { register char *cp, ch; register int slen; if (--pos < 0) return 0; slen = strlen(s) - pos; cp = s + pos; if (!(ch = *pat++)) return 0; pos = strlen(pat); slen -= pos; while (--slen >= 0) { if (*cp++ == ch && !strncmp(cp, pat, pos)) return cp - s; } return 0; } /* Case-insensitive version of strcmp. */ int strcicmp(register char *s1, register char *s2) { register unsigned char c1, c2; while (*s1) { if (*s1++ != *s2++) { if (!s2[-1]) return 1; c1 = toupper(s1[-1]); c2 = toupper(s2[-1]); if (c1 != c2) return c1 - c2; } } if (*s2) return -1; return 0; } /* HP and Turbo Pascal string functions: */ /* Trim blanks at left end of string. */ char *strltrim(register char *s) { while (Isspace(*s++)) ; return s - 1; } /* Trim blanks at right end of string. */ char *strrtrim(register char *s) { register char *s2 = s; if (!*s) return s; while (*++s2) ; while (s2 > s && Isspace(*--s2)) *s2 = 0; return s; } /* Store in "ret" "num" copies of string "s". Return "ret". */ char *strrpt(char *ret, register char *s, register int num) { register char *s2 = ret; register char *s1; while (--num >= 0) { s1 = s; while ((*s2++ = *s1++)) ; s2--; } return ret; } /* Store in "ret" string "s" with enough pad chars added to reach "size". */ char *strpad(char *ret, register char *s, register int padchar, register int num) { register char *d = ret; if (s == d) { while (*d++) ; } else { while ((*d++ = *s++)) ; } num -= (--d - ret); while (--num >= 0) *d++ = padchar; *d = 0; return ret; } /* Copy the substring of length "len" from index "spos" of "s" (1-based) */ /* to index "dpos" of "d", lengthening "d" if necessary. Length and */ /* indices must be in-range. */ void strmove(register char *s, register char *d, register int len, register int spos, register int dpos) { s += spos - 1; d += dpos - 1; while (*d && --len >= 0) *d++ = *s++; if (len > 0) { while (--len >= 0) *d++ = *s++; *d = 0; } } /* Delete the substring of length "len" at index "pos" from "s". */ /* Delete less if out-of-range. */ void strdelete(register char *s, register int pos, register int len) { register int slen; if (--pos < 0) return; slen = strlen(s) - pos; if (slen <= 0) return; s += pos; if (slen <= len) { *s = 0; return; } while ((*s = s[len])) s++; } /* Insert string "src" at index "pos" of "dst". */ void strinsert(register char *src, register char *dst, register int pos) { register int slen, dlen; if (--pos < 0) return; dlen = strlen(dst); dst += dlen; dlen -= pos; if (dlen <= 0) { strcpy(dst, src); return; } slen = strlen(src); do { dst[slen] = *dst; --dst; } while (--dlen >= 0); dst++; while (--slen >= 0) *dst++ = *src++; } /* File functions */ /* Peek at next character of input stream; return EOF at end-of-file. */ int P_peek(FILE *f) { int ch; ch = getc(f); if (ch == EOF) return EOF; ungetc(ch, f); return (ch == '\n') ? ' ' : ch; } /* Check if at end of file, using Pascal "eof" semantics. End-of-file for stdin is broken; remove the special case for it to be broken in a different way. */ int P_eof(FILE *f) { register int ch; if (feof(f)) return 1; if (f == stdin) return 0; /* not safe to look-ahead on the keyboard! */ ch = getc(f); if (ch == EOF) return 1; ungetc(ch, f); return 0; } /* Check if at end of line (or end of entire file). */ int P_eoln(FILE *f) { register int ch; ch = getc(f); if (ch == EOF) return 1; ungetc(ch, f); return (ch == '\n'); } /* Read a packed array of characters from a file. */ Void P_readpaoc(FILE *f, char *s, int len) { int ch; for (;;) { if (len <= 0) return; ch = getc(f); if (ch == EOF || ch == '\n') break; *s++ = ch; --len; } while (--len >= 0) *s++ = ' '; if (ch != EOF) ungetc(ch, f); } Void P_readlnpaoc(FILE *f, char *s, int len) { int ch; for (;;) { ch = getc(f); if (ch == EOF || ch == '\n') break; if (len > 0) { *s++ = ch; --len; } } while (--len >= 0) *s++ = ' '; } /* Compute maximum legal "seek" index in file (0-based). */ long P_maxpos(FILE *f) { long savepos = ftell(f); long val; if (fseek(f, 0L, SEEK_END)) return -1; val = ftell(f); if (fseek(f, savepos, SEEK_SET)) return -1; return val; } /* Use packed array of char for a file name. */ Char *P_trimname(register Char *fn, register int len) { static Char fnbuf[256]; register Char *cp = fnbuf; while (--len >= 0 && *fn && !isspace(*fn)) *cp++ = *fn++; *cp = 0; return fnbuf; } /* Pascal's "memavail" doesn't make much sense in Unix with virtual memory. We fix memory size as 10Meg as a reasonable compromise. */ long memavail() { return 10000000; /* worry about this later! */ } long maxavail() { return memavail(); } /* Sets are stored as an array of longs. S[0] is the size of the set; S[N] is the N'th 32-bit chunk of the set. S[0] equals the maximum I such that S[I] is nonzero. S[0] is zero for an empty set. Within each long, bits are packed from lsb to msb. The first bit of the set is the element with ordinal value 0. (Thus, for a "set of 5..99", the lowest five bits of the first long are unused and always zero.) */ /* (Sets with 32 or fewer elements are normally stored as plain longs.) */ /* d := s1 + s2 */ long *P_setunion(long *d, long *s1, long *s2) { long *dbase = d++; register int sz1 = *s1++, sz2 = *s2++; while (sz1 > 0 && sz2 > 0) { *d++ = *s1++ | *s2++; sz1--, sz2--; } while (--sz1 >= 0) *d++ = *s1++; while (--sz2 >= 0) *d++ = *s2++; *dbase = d - dbase - 1; return dbase; } /* d := s1 * s2 */ long *P_setint(long *d, long *s1, long *s2) { long *dbase = d++; register int sz1 = *s1++, sz2 = *s2++; while (--sz1 >= 0 && --sz2 >= 0) *d++ = *s1++ & *s2++; while (--d > dbase && !*d) ; *dbase = d - dbase; return dbase; } /* d := s1 - s2 */ long *P_setdiff(long *d, long *s1, long *s2) { long *dbase = d++; register int sz1 = *s1++, sz2 = *s2++; while (--sz1 >= 0 && --sz2 >= 0) *d++ = *s1++ & ~*s2++; if (sz1 >= 0) { while (sz1-- >= 0) *d++ = *s1++; } while (--d > dbase && !*d) ; *dbase = d - dbase; return dbase; } /* d := s1 / s2 */ long *P_setxor(long *d, long *s1, long *s2) { long *dbase = d++; register int sz1 = *s1++, sz2 = *s2++; while (sz1 > 0 && sz2 > 0) { *d++ = *s1++ ^ *s2++; sz1--, sz2--; } while (--sz1 >= 0) *d++ = *s1++; while (--sz2 >= 0) *d++ = *s2++; while (--d > dbase && !*d) ; *dbase = d - dbase; return dbase; } /* val IN s */ int P_inset(register unsigned val, register long *s) { register int bit; bit = val % SETBITS; val /= SETBITS; if (val < *s++ && ((1L< size) { s += size; while (val > size) *++s = 0, size++; *sbase = size; } else s += val; *s |= 1L< (int)v2) return sbase; b1 = v1 % SETBITS; v1 /= SETBITS; b2 = v2 % SETBITS; v2 /= SETBITS; size = *s; v1++; if (++v2 > size) { while (v2 > size) s[++size] = 0; s[v2] = 0; *s = v2; } s += v1; if (v1 == v2) { *s |= (~((-2L)<<(b2-b1))) << b1; } else { *s++ |= (-1L) << b1; while (++v1 < v2) *s++ = -1; *s |= ~((-2L) << b2); } return sbase; } long *P_remset(register long *s, register unsigned val) { register int bit; bit = val % SETBITS; val /= SETBITS; if (++val <= *s) { if (!(s[val] &= ~(1L<=0 ) { if( *s1++!=*s2++ ) return 0; } return 1; } int P_subset(long *s1, long *s2) { register int sz1 = *s1++, sz2 = *s2++; if (sz1 > sz2) return 0; while (--sz1 >= 0) { if (*s1++ & ~*s2++) return 0; } return 1; } long *P_setcpy(long *d, long *s) { register long *save_d = d; #ifdef SETCPY_MEMCPY memcpy(d, s, (*s + 1) * sizeof(long)); #else register int i = *s + 1; while (--i >= 0) *d++ = *s++; #endif return save_d; } /* s is a "smallset", i.e., a 32-bit or less set stored directly in a long. */ long *P_expset(long *d, long s) { if (s) { d[1] = s; *d = 1; } else *d = 0; return d; } /* convert s to a small-set */ long P_packset(register long *s) { if (*s++) return *s; else return 0; } /* Oregon Software Pascal extensions, courtesy of William Bader */ int P_getcmdline(int l, int h, Char *line) { int i, len; char *s; h = h - l + 1; len = 0; for(i = 1; i < P_argc; i++) { s = P_argv[i]; while (*s) { if (len >= h) return len; line[len++] = *s++; } if (len >= h) return len; line[len++] = ' '; } return len; } Void TimeStamp(int *Day, int *Month, int *Year, int *Hour, int *Min, int *Sec) { #ifndef NO_TIME struct tm *tm; long clock; time(&clock); tm = localtime(&clock); *Day = tm->tm_mday; *Month = tm->tm_mon + 1; /* Jan = 0 */ *Year = tm->tm_year; if (*Year < 1900) *Year += 1900; /* year since 1900 */ *Hour = tm->tm_hour; *Min = tm->tm_min; *Sec = tm->tm_sec; #endif } Void VAXdate(char *s) { long clock; char *c; int i; static int where[] = {8, 9, 0, 4, 5, 6, 0, 20, 21, 22, 23}; time(&clock); c = ctime(&clock); for (i = 0; i < 11; i++) s[i] = my_toupper(c[where[i]]); s[2] = '-'; s[6] = '-'; } Void VAXtime(char *s) { long clock; char *c; int i; time(&clock); c = ctime(&clock); for (i = 0; i < 8; i++) s[i] = c[i+11]; s[8] = '.'; s[9] = '0'; s[10] = '0'; } /* SUN Berkeley Pascal extensions */ Void P_sun_argv(char *s, int len, int n) { register char *cp; if ((unsigned)n < P_argc) cp = P_argv[n]; else cp = ""; while (*cp && --len >= 0) *s++ = *cp++; while (--len >= 0) *s++ = ' '; } int _OutMem( void ) { return _Escape(-2); } int _CaseCheck( void ) { return _Escape(-9); } int _NilCheck( void ) { return _Escape(-3); } /* The following is suitable for the HP Pascal operating system. It might want to be revised when emulating another system. */ char *_ShowEscape(char *buf, int code, int ior, char *prefix) { char *bufp; if (prefix && *prefix) { strcpy(buf, prefix); strcat(buf, ": "); bufp = buf + strlen(buf); } else { bufp = buf; } if (code == -10) { sprintf(bufp, "Pascal system I/O error %d", ior); switch (ior) { case 3: strcat(buf, " (illegal I/O request)"); break; case 7: strcat(buf, " (bad file name)"); break; case FileNotFound: /*10*/ strcat(buf, " (file not found)"); break; case FileNotOpen: /*13*/ strcat(buf, " (file not open)"); break; case BadInputFormat: /*14*/ strcat(buf, " (bad input format)"); break; case 24: strcat(buf, " (not open for reading)"); break; case 25: strcat(buf, " (not open for writing)"); break; case 26: strcat(buf, " (not open for direct access)"); break; case 28: strcat(buf, " (string subscript out of range)"); break; case EndOfFile: /*30*/ strcat(buf, " (end-of-file)"); break; case FileWriteError: /*38*/ strcat(buf, " (file write error)"); break; } } else { sprintf(bufp, "Pascal system error %d", code); switch (code) { case -2: strcat(buf, " (out of memory)"); break; case -3: strcat(buf, " (reference to NIL pointer)"); break; case -4: strcat(buf, " (integer overflow)"); break; case -5: strcat(buf, " (divide by zero)"); break; case -6: strcat(buf, " (real math overflow)"); break; case -8: strcat(buf, " (value range error)"); break; case -9: strcat(buf, " (CASE value range error)"); break; case -12: strcat(buf, " (bus error)"); break; case -20: strcat(buf, " (stopped by user)"); break; } } return buf; } int _Escape(int code) { char buf[100]; P_escapecode = code; if (__top_jb) { __p2c_jmp_buf *jb = __top_jb; __top_jb = jb->next; longjmp(jb->jbuf, 1); } if (code == 0) exit(EXIT_SUCCESS); if (code == -1) exit(EXIT_FAILURE); fprintf(stderr, "%s\n", _ShowEscape(buf, P_escapecode, P_ioresult, "") ); exit(EXIT_FAILURE); } int _EscIO(int code) { P_ioresult = code; return _Escape(-10); } /* End. */ #if defined(__STDC__) || defined(__cplusplus) # define _P(s) s #else # define _P(s) () #endif /* basic.c */ Static Void restoredata _P((void)); Static Void clearloops _P((void)); Static long arraysize _P((varrec *v)); Static Void clearvar _P((varrec *v)); Static Void clearvars _P((void)); Static Char *numtostr _P((Char *Result, double n)); Static Void parse _P((Char *inbuf, tokenrec **buf)); #undef toklengthStatic Void listtokens _P((FILE *f, tokenrec *buf)); Static Void disposetokens _P((tokenrec **tok)); Static Void parseinput _P((tokenrec **buf)); Static Void errormsg _P((Char *s)); Static Void snerr _P((void)); Static Void tmerr _P((void)); Static Void badsubscr _P((void)); Local double realfactor _P((struct LOC_exec *LINK)); Local Char *strfactor _P((struct LOC_exec *LINK)); Local Char *stringfactor _P((Char *Result, struct LOC_exec *LINK)); Local long intfactor _P((struct LOC_exec *LINK)); Local double realexpr _P((struct LOC_exec *LINK)); Local Char *strexpr _P((struct LOC_exec *LINK)); Local Char *stringexpr _P((Char *Result, struct LOC_exec *LINK)); Local long intexpr _P((struct LOC_exec *LINK)); Local Void require _P((int k, struct LOC_exec *LINK)); Local Void skipparen _P((struct LOC_exec *LINK)); Local varrec *findvar _P((struct LOC_exec *LINK)); Local long inot _P((long i, struct LOC_exec *LINK)); Local long ixor _P((long a, long b, struct LOC_exec *LINK)); Local valrec factor _P((struct LOC_exec *LINK)); Local valrec upexpr _P((struct LOC_exec *LINK)); Local valrec term _P((struct LOC_exec *LINK)); Local valrec sexpr _P((struct LOC_exec *LINK)); Local valrec relexpr _P((struct LOC_exec *LINK)); Local valrec andexpr _P((struct LOC_exec *LINK)); Local valrec expr _P((struct LOC_exec *LINK)); Local Void checkextra _P((struct LOC_exec *LINK)); Local boolean iseos _P((struct LOC_exec *LINK)); Local Void skiptoeos _P((struct LOC_exec *LINK)); Local linerec *findline _P((long n, struct LOC_exec *LINK)); Local linerec *mustfindline _P((long n, struct LOC_exec *LINK)); Local Void cmdend _P((struct LOC_exec *LINK)); Local Void cmdnew _P((struct LOC_exec *LINK)); Local Void cmdlist _P((struct LOC_exec *LINK)); Local Void cmdload _P((boolean merging, Char *name, struct LOC_exec *LINK)); Local Void cmdrun _P((struct LOC_exec *LINK)); Local Void cmdsave _P((struct LOC_exec *LINK)); Local Void cmdbye _P((struct LOC_exec *LINK)); Local Void cmddel _P((struct LOC_exec *LINK)); Local Void cmdrenum _P((struct LOC_exec *LINK)); Local Void cmdprint _P((struct LOC_exec *LINK)); Local Void cmdinput _P((struct LOC_exec *LINK)); Local Void cmdlet _P((boolean implied, struct LOC_exec *LINK)); Local Void cmdgoto _P((struct LOC_exec *LINK)); Local Void cmdif _P((struct LOC_exec *LINK)); Local Void cmdelse _P((struct LOC_exec *LINK)); Local boolean skiploop _P((int up, int dn, struct LOC_exec *LINK)); Local Void cmdfor _P((struct LOC_exec *LINK)); Local Void cmdnext _P((struct LOC_exec *LINK)); Local Void cmdwhile _P((struct LOC_exec *LINK)); Local Void cmdwend _P((struct LOC_exec *LINK)); Local Void cmdgosub _P((struct LOC_exec *LINK)); Local Void cmdreturn _P((struct LOC_exec *LINK)); Local Void cmdread _P((struct LOC_exec *LINK)); Local Void cmddata _P((struct LOC_exec *LINK)); Local Void cmdrestore _P((struct LOC_exec *LINK)); Local Void cmdgotoxy _P((struct LOC_exec *LINK)); Local Void cmdon _P((struct LOC_exec *LINK)); Local Void cmddim _P((struct LOC_exec *LINK)); Local Void cmdpoke _P((struct LOC_exec *LINK)); Static Void exec _P((void)); int main _P((int argc, Char *argv[])); #undef _P basic000.prg .C[-P -M] .L[-S=0] = cpxstart.s cpx_main.c ; Die CPX-Funktionen basic.c ; Der BASIC-Interpreter cpx_io.c ; Der C-Frontend fr das BIOS CPX-BIOS cpxmains.s ; Utils u.s.w. ... cpx_bios.s ; Die Grafikfunktionen font8x8.s ; 8x8-Font fr die Zeichenausgabe pcfltlib.lib pcstdlib.lib pcextlib.lib pctoslib.lib pcgemlib.lib p2clib.c basic030.prg .C[-2 -8 -P -M] .L[-S=0] = cpxstart.s cpx_main.c ; Die CPX-Funktionen basic.c ; Der BASIC-Interpreter cpx_io.c ; Der C-Frontend fr das BIOS CPX-BIOS cpxmains.s ; Utils u.s.w. ... cpx_bios.s ; Die Grafikfunktionen font8x8.s ; 8x8-Font fr die Zeichenausgabe pc881lib.lib pcstdlib.lib pcextlib.lib pctoslib.lib pcgemlib.lib p2clib.c #ifndef ___XCONTROL_H___ #define ___XCONTROL_H___ typedef struct { WORD x,y; WORD buttons; WORD kstate; } MRETS; typedef struct { WORD handle; /* Aus graf_handle()-Aufruf */ WORD booting; /* !=0 -> Initialisierung/Bootvorgang */ WORD reserved; WORD SkipRshFix; /* !=0 -> Resourcekoordinaten bereits transformiert */ VOID *reserved1; VOID *reserved2; VOID CDECL (*rsh_fix)( WORD num_objs, WORD num_first, WORD num_frimg, WORD num_tree, OBJECT *rs_object, TEDINFO *rs_tedinfo, BYTE *rs_strings[], ICONBLK *rs_iconblk, BITBLK *rs_bitblk, LONG *rs_frstr, LONG *rs_frimg, LONG *rs_trindex, VOID /*struct foobar*/ *rs_imdope); VOID CDECL (*rsh_obfix)( OBJECT *tree, WORD curob ); WORD CDECL (*Popup)( BYTE *items[], WORD num_items, WORD default_item, WORD font_size, GRECT *button, GRECT *world); VOID CDECL (*Sl_size)( OBJECT *tree, WORD base, WORD slider, WORD num_items, WORD visible, WORD direction, WORD min_size); VOID CDECL (*Sl_x)( OBJECT *tree, WORD base, WORD slider, WORD value, WORD num_min, WORD num_max, VOID (*foo)(VOID)); VOID CDECL (*Sl_y)( OBJECT *tree, WORD base, WORD slider, WORD value, WORD num_min, WORD num_max, VOID (*foo)(VOID)); VOID CDECL (*Sl_arrow)(OBJECT *tree, WORD base, WORD slider, WORD obj, WORD inc, WORD min, WORD max, WORD *numvar, WORD direction, VOID (*foo)(VOID)); VOID CDECL (*Sl_dragx)(OBJECT *tree, WORD base, WORD slider, WORD min, WORD max, WORD *numvar, VOID (*foo)(VOID)); VOID CDECL (*Sl_dragy)(OBJECT *tree, WORD base, WORD slider, WORD min, WORD max, WORD *numvar, VOID (*foo)(VOID)); VOID CDECL (*Xform_do)(OBJECT *tree, WORD start_field, WORD *puntmsg); GRECT *CDECL (*GetFirstRect)( GRECT *prect ); GRECT *CDECL (*GetNextRect)( VOID ); VOID CDECL (*Set_Evnt_Mask)(WORD mask, MOBLK *m1, MOBLK *m2, LONG time); WORD CDECL (*XGen_Alert)(WORD id); WORD CDECL (*CPX_Save)(VOID *ptr, LONG num); VOID *CDECL (*Get_Buffer)(VOID); WORD CDECL (*getcookie)(LONG cookie, LONG *p_value); WORD Country_Code; VOID CDECL (*MFsave)(WORD saveit, MFORM *mf); } XCPB; typedef struct { WORD CDECL (*cpx_call) (GRECT *work); VOID CDECL (*cpx_draw) (GRECT *clip); VOID CDECL (*cpx_wmove) (GRECT *work); VOID CDECL (*cpx_timer) (WORD *event); VOID CDECL (*cpx_key) (WORD kbstate, WORD key, WORD *event); VOID CDECL (*cpx_button)(MRETS *mrets, WORD nclicks, WORD *event); VOID CDECL (*cpx_m1) (MRETS *mrets, WORD *event); VOID CDECL (*cpx_m2) (MRETS *mrets, WORD *event); WORD CDECL (*cpx_hook) (WORD event, WORD *msgbuff, MRETS *mrets, WORD *key, WORD *nclicks); VOID CDECL (*cpx_close) (WORD app_term); } CPX_INFO; #define VERTICAL 0 #define HORIZONTAL 1 #define SAVE_DEFAULTS 0 #define MEM_ERR 1 #define FILE_ERR 2 #define FILE_NOT_FOUND 3 #define MFSAVE 1 #define MFRESTORE 0 #endif. b!.. COKESNESDEL ]v/DELPAINTPRG 2/PI9_VIEWGFA hPLASMA DEL j4READ_ME TXT 7"B@d dD_c0TD_hcDDDhD00D _cDtDda_DTa _DDa00`D0cDD_D aTD_0cdD` btD`c _`0`_D````hT`hbd``cbt`b`````tb`d`cb`Tbt̸`tD``t`dܸ`d0dbT`T `cTbD`DDb0tX0L `0` t` `t``c ata0`Tt@= `p0 ppMTDM???pt`̘pT`t``ed`t`tt`d :`p00d!bD @@#G8xpÆ ?Dt+/_/_/W/W+W+U**     +++( A 0paÃ<88pTaTTt`D~~}y{srfdEش DРРШШԨԪʕubʵtjԨР@ 9;;{wwwcdtG0a0tt` 4hP@@?>|x‚ HJ   8p??Ș00`a w7KE 8 ׯ_/_ 7oߞ><|x|߈t Ç>>|>>>at` (PP@8xp 40iiӳ|~ 8xp#G?7x7e>> '#00aC   @@ 00aaÃ|>?t?`H0cǎ  >*LȈ ?7x7e>>ct`p= qpp x "d̘0`@BCŅ 0x>}}{{\&2|x? t 000 >~}}{{{8<??c00t`?80p??? ?> D?=s̈ `A#fȈ=x>|}}{{x @ @??? ?> Dt `=x =y{{cTTt`? 80``AB   -==Z5z4zzzjjpzNl0d?> -ZzРР@@@@~??ذ`@@ >>S@ ߿ % ߿ tct`d|>?xx<<#3 t??9Cc!0qppp000 p`bbbffٖ p  `p@Aa` 000 Nnn~>?  `TtbtaDd _`ppX(, BAa!!08<||~t@@```0  7   A@`8<||~ Fbbr6?  7 0T0bta DD?||>>11  80012abeJ@UQPǏ_܀t?@ qqxx888<<   GG,Xp@@† @@ 0 LLl.>6>?*?oo܀ 0† 0Tbtb d@@ @@@BB`aŅ`Ǐ܀tapx6;ccggߟ?@@ 0 LLlSSSQQa`` !#ccggߟ?t`tctP`@Рz}z}>=>`px08<s !1qqp d@d: @@PШ?__// 0T?p:Aw:&  008xxpH/Wk7; ,@x~~t`0Tct_W+ @H$x\._/  `pps "119yypD D_/ S @ ~___/W+  ``:~q8 s  `0ܾCa 0#8~t`T00ct @@P{=_WP`@@dD ? >;C_/Eb12 @@ШX<\\lnp^/ x>_owje~|^//  |_/}>`x^/ px\\^.V.  t`tTcD0C?_+ A@~_W/  Ξdx<AD@h4: @@PШzz^-V/``8x>GCa``0 (pF#|>``0;`D`tbD>? ?A_WW+ qrqp8<WOoUUUժUUz=>w;G____WVU#S$S?ժ x\w;x\. @@@@@@ x\. pX< &D`0bD~?CQ(" @PTjuz5:= AC̨UUUU*UUU* |<>G# @@@PPPPPبР *U ` p8AD@C0`ܸDb UUUUUUUUUUUU*  wow7;ݺ}ժUUUUP(PPPPPPP@@@ ߿>}zuujujժժUUTTPP@@@&@ ``00D0`DcUUUUUUUUUUUU**??! **UUUUUWWOYW]_____^~~}}vo/       *U*UUUUWW__cDtD@\nJJJnH\յ\nJJJnH\յnJJJnH\յ\nJJJnH\յvEeFu\w$&$'\vEeFu\w$&$'vEeFu\w$&$'\vEeFu\w$&$'`PPP`^eUeRb^`PPP`^eUeRb`PPP`^eUeRb^`PPP`^eUeRb)ظpp(ذ`4)߿K߿9)߿K߿9+?, ??9ܸp%   /W.ܸp @" +W^|߿$Ш߿ԨP@߿A߿)?2?) ~ހ3 ^x :4jTРР@?) */_|=zԨP@ 7P@  +/_/__?+Р@+W_  A߿?>߿ ???A߿ ?>߿  //\<\\xxxxxxxxpp?U@sp TU~????//^/^^^^=Z=5:}UPР@@@@@@@@@ WWU  W1߾O?=1߾O?=@@@@@@@@@@!0b___?_?______!VbVZV?P S P SP SP?? 7? ࠰XX $@,F ?.?O .O .px px8<??pxxx8<<&Sa1,  000xhhh5:5:5@q<   ??LJs{99Y-D?    ??0?@ xz^_/W/   *U_  `8@_* +W??@@PШ ժP@? ?? @ԨP 'Ͽ% "2'Ͽ% "00qcŊ txxT U_P _ 0xޮVWWWXUW/__ *U s{{;C??  _P χ? TРP@ w ";?w{O ";? (\޼x UU*  ?U_U * @ *U *߿w߿??D߿4pϘ׏c  ?PWU 3O?? WϘ) .U 3?^) ߞ?Ǝ:v޹rʕ*TP@  W~OasPР ْ5"%bEJŊ **UTTP@@  +W^{޽{ٱc? ? 0` @*.~o @@ @@6\ݻww׻;߾O?? :uՊ*U+W_ TP}pߦ…   *UUWW_ ԨP@"Fp@;;߾O?DߦޯժU*UUUUUUUUTPP@@ +W]{ٳw޼|>|UUUUUUUUTTP@@  .V[wظ`Æ,ذ` 1qǏ?D ??~|>8q??ʕ*UUUUUUUUUWW_ԨP@@ 8pUUUUUUUUWW__ШP@?{Ύ8pKUTTP@@ .^[vظpp @ ?  -]:ztа``?~-??߿?? <={xxTT^@xKKXXJJTT\@Z8JJ#""@"" ??""@#xxTT KKXXP_@JJTTJJ#"" "" "" `.4&o$k":,J"N}" k + Sf(JAR*A0<K:Q*ANvdzDTDM*LQ`ٳmSnIP"[ I"&&"&& &rBQ"$I$gtӐg BfA` AEG&'ZENBmNE`@c AONHx?<XNN\r# <B@N@\ HNA\lN6p ~AN^pQ  . zpL: Hy0>+@!jNNT @d,Эx m:!H 0H"+@J@,@DDl}l*U*88FUFTTbUwb. x < <Z Zx x       , ,: :% :%" )",,!FA//!/jN&H!y0 Hx?pPg`.p`i~`ppb `put <x r:bZ <( Zră: <tT@Tj < nnP Nbv \ <jrB (gL.3ds::|qj0.qgZA탰/RJ|5A_  "7sL\?sH?A`L |@|AD,r*Dr(A0-S@fp0N "HA@H L T@ @X@`00<0fF &<&hJPr "n: -"-؂PN0@ m̓Faz@Ra|*-@8<6pvt`&`$qd@hd4ppj8 .,o* -,&0:<ao(&Bxa p:0Yl20$2Z& 2B2fcp`i(-8&-4$L"0< _@:p`q$ranNf@@ZTpd$pLpVQU /??q41/8@"0@L8:&n ,pv"~HfGCPNxpl"ЁPxDڀp~Pj>|*\(P$om0 &&on<d|x 6$v2t„ %J4:%Z-N ubFZPllgQ F0 < gP 44 N`4r aNu!lBdND"!Np0!,Xz,,,,A(Sf] )Po0f!q @mZx0@q0lвT#x kS&D$hr N <*jg@rR"VHp@bTTTUf`<*?zF`tQ,PN*A@B@Vu:0<9gB j\6v4 00@\/ ?? m 4@v8:N&Z2\U 2p2D2\dD[&[&pw`vT`J[Sdt/^cgj[mdq[J[n [I l]%Y [ 2z2vN2t`([([҆[aQ \`b`t,Wӟ`W>${d1@(d1* <<(U(gF"CbW."NXA0脃 <T>  Qf a݇&`O0qHߦmHl[> TJ R̢R(Rˢ&R:nR-S`XVƁPg.R\Ri2*QQQ azPz.QzQjtP&:<xU!vsl $H e$0>QH༘j)NuprҭextR tBpܠv t(,,lxpU:"""`"lV+mjdjeB<(pr.VbTR~  Rv +@ڬ&,R  R &Jr.\ - \" D HP L `P П@|@P@xv$,"L@,pQ&>,^P@ "0 ZBt@j@< r4$ԀЀЂPf St 0Oz$눐rHք$ $"c-:$," t`B!BRXP^u󈐜:E@p~y"/"H`,N<0 NFbКaLdRVҀFgrl$,B NA9\Ma.~"_`t0ʐ-40:60A0VIxVdxL7xBVR[^ NVL$CF(U"0.UHww#UJJ|0vP@U6/U" /'T|B$xK rav ** m K/*"_0|p%^`xyNuNYB)x2FT4 NHyfjT00Y(6Hk(BmsD kD0.JhTv$*l֔B PMnJz*pJjQ .0NJLr %ЁFedr :ȠdL T$Ipp^ni:RlPxjx(g6<0<4< 2<pZJp^&2Ap`r2RjvXL a*If2"kpIvr" xzI* 6n E4&<,b~*e.b? j jfbNu:GЭd(/2 P*P*`8"C킓xipdDoX`pd do+n| F Oh|Rd^rl/tmBI]rDlJjR†^at&p`$^gB$"$*$$$a$b$0)0# a`nAb$'`J$$vI$E$Ex$%Ej$E\$` J]4 f.@P"86%8a~"J>!8$~-8a"8@= @7a._Za aA-86_A#8(8u!8lDP'8D0'8DV)8DH%8ЬPR.q!(\AAPeT,W:un)C)C)Cn>a}\23pX7`\}FTdHqd@`BL~&rF$ EЊB<`"p"v t2r]`Y2lV.I666 6]+m p)_X|c]d AS:A0S&1 (S! ~ AV V  B~B~B_O 0ƀeOg\CA%oAnZ|hdLOt^O$ A@*APhP,7bY`_fw\LBTt&S>Apo QY'b&?a[]_wf2[7 p0YB`Pp?oR q]o@fURfcpSbroP[gPc2@j an2QXw$aNc^@Li^@>i^@g^@"e^̒:pY\\_ \_tZUc?.mb&W`~s.?|y.?ny.?`y.?ZRu.˰9"4_ (K[搨_YUs>IqWVWl_s$>y>y>y>uʰ p-Wd¡H!nS$n;[4 4[:$ndR/nX-n=ЬābVX^Bމ=Љ=–=2>Vy"l"lZfX NZ:$lν6)W-l=j0%U^ I<<敚3JB U"j"jYpjH9Y|'jW-j)<`n(Tw$]Dh6PpN(0ְ*& 0d T0L.\0.R0 $bRzz `pLA.+N@vN`6<t2 dxX1Lf@@DA\\ FeT@/HA\@Ԑ>/؀BP60 +|ELeqFpEXp@\ 8 r`X$ԀЀЂ3l~/r$눐rЁ~|*-@xv9"-:0e5," "p] BA*>@pBX.vpPUrtRjPPNu.i, 7alaAJJN a L``r``~/*  <cra.,4-rg`vaH`f <* *rz<aK4:ܩ"VD#2~a-$h2".-ֱi \):1-D&QAK1r`ars6A+ؓS`Ȱ`aa_ࠅ -J 9-6 !KNu 0,p&pA'! -P"-#Rc4, -T cc /XbX"bX. 0bb /b@1J#tYa ?afЋ ƀP@,0v-Yr(*$rO lDuh9\2d L`,Q2vrҭ"`prO`PP\|OHT La`R`.844H (gd::4**xC2@@3l`:8t\PP<Ҋ. P( PPXPNgl&)~)2S6)6m?BRD?B@?B9B_?BRD@DX5B_?B9B_z?BX^Nup' f`޵p!pH 2p&0Pv>>ȯ>> p"``rp`dpR^Z`Tp[N`Dp  \`4p#0l`$ppB^TNuc̃LӸ'ߤcO~*.߾վaYV\Ұ8c(,2|0|PtXs'B0| QAf``Nu+m p@0SfBsD&u/aIq@aEH]FYLw'x $~aj~F~~lB~^@~TjB&P`Sʇ4&4~Bh!.6`WRq|bv`-P[4` J(P&6%ʏ.vhC`:W`^d&i`rT&TÊ6%|lXr:(%eh z%^VA@4TCQD ,Q"`<``PW__:a9`RHhd>r% <v#&g&|[P`q8["fʜ$d*-$rY䣮A*UDDfD@2C@A$ "t^|Z ""f"L""J"V>l]:#RX, gH"+$n ¶+` !h&h"./hd  /hŤ*h!h4!οhS\vL8\|NT0"\Q.l/h'h!^?8P:?8:%%hW|>@0R/h/ha[#h![#h!46 ?)Q>0 @h3 %h x%h+ nE;0[|$!(+hVįb%h *ɯr%h(n.%h:(E ^pJ/pKJ" ,bT(6NWFd:t٩::(f$rP^$^C(>2 /-, m0NPZ#<о<ЭJ-}b"@Q@ж<,Ё(d(T2N0|, :D@<ЁP^4<$4r,ZHH'HIj/I`FST'RF0VDq@PJHWZptjpL4<888*-q@ -L}<BV<s͒ptzHA&`uNmHN&hr$N$wNߐʯʣN8sNrDJv̐fNwN-%jT$Fj)pNR):*9p.MVV>pVj$fuJ%uJ80%VtRv>pF%Q8u>$F0Hu>$J"Xr>e🦵#$̟$""LU8@:>B.ZSZU.0& v:v"R2P>87gPKKLNvIhRH'>5f`"4H+XO^gYl!8$إΥėØ4~H`2$! ܒNTuvXPXPXNuppTrIЀJ J6*phV^k8^*^I^^ڕI:&FY(vfLZRv^̙^h. ZhD.$6zgM5@4aHff@Z@Ir$C킐68p3a0Pg0T0B0`4U2/8t`698TT0TgB  < h` 00BmH 24&"<7x:,a6fRC`"&pQR 6BӢ&P:&1>.ܔLT|Ď" * .Lɀ`D XH0*JfHG (h(K((ej(\\$F((8nY(d((((ENQPRTZFI(4(tdD((6(l\(&IT(0~aDu00jb0iMa!LXrL\0s|sz>0:-z0"L0HI0\00d$00J0d>KdJ*JCp>K|TKJ~KıԿL*ς$ς$d:VF䳲.xaB<@J1`-%쵾⵾`E+ `"L+pF$ &gxվ_|f3NHUt*TJ~J(~ ^dRf99IC$F $ЀJ|zznzz6:p@+@p" XpHpLBm `B $U@fq9Pf"DprP:=Ds `44˃$>v̜H8A4B2(X<Ԁ:a &/??𘁜/4/za2B*,,0> 6gd@< PtfpBD NA\D C.0|K f|4|&< -f LXbd>fl *їp(`HydHx aԮNua32 np03L2xp! <2(*p",024 $2@pD^2ڨ2Xp\p~BNvNu <*$ < gmI5H"-! #,fF3 "ҭL DB0L@L-P*-(-xv$"дA+f *İ < r J ~x z>3+8f0H1 RxP <@P,-Lxz&@f+"f ` <Щ0!Df@D Yb R :4v4 " jP, 1Jv;Z h@ \@ҀPDzp W|AB$4ښh?V`?a7h᠎?tZ $dQ :pJ,!&a%> fr K%'>bjjr`D` C0""N60|$ ff6 $ tF0#f< f 0@PR2R\>$|Zź nZڑ8 24&8:BfJBg f DfpNuJEgpd (gn<ng0D c(fAc4gm4Zd4d4 Epa JkLAHPB?H@QNNAP _NuDExМ*`bDE0Z"`ZaR11,!< DE"`6 B`&"x` `HHnghDBHXDE~<En g6@ABDFGcGb8(vHDl`G8BCHC` GHD8@쬵k&Dуd QRB BbJjDABDEN֓DjdDA@ CcAр[SBo6rp@tH@g0J`$rGo\0$f&@B oH@|@$kB k j*DB%DB@DNuf gp`st6CCe0 C/jC@ j jr0H@{0>0H@ Nu{0NuF(:<Laf AfBfNu` an $$o,Bb J@k H@R|*8 bg8+k222 246v@fk~J@H@00j@Dj DaV0 b dNu  e@$HBBBЂNu"HAAHABAЁ0DgH2g.|HCH@:҄ۆ<HC>|Ѓdh!d`^*,"$H&uFD@(@$:rR gDBgk0~HDB02g >a8!!4a 501R1LQFDBEA^Q* HE ?<>@rHGG::GGdSWQ6C2fe11 fJCgzdSW07id0 .NuzTP`?P^?`0`o@pEgP`LJg&B.C`a8aD*9*fap-I4=|p4Hzg ENp,`Fr &nO:N@M`Ix!Kl $<0P[1][Error + 11 Return]E* g g>Jf`Ar Hjr-D@H@!0l@ C J"H pfSE a@f NA\Nu@&gTkdHöfi^@mz&lDaSlDxeփ؄ `f0"_ V,@"40HQ -H,,`N,D< MPn$h  Ј-@0HR~gJN@AHH =|.,Hx4HNAI@\re Ш/ \XІ^(&<l/NM\vif A@$I `BYQ"Jr@^"QSfgff$ AfA` @-K -n($A0<rX0N!$-J~ HBpn.Nu!a Jo4" $IdLb&dA  ` pjNu"" "LzN`B$H$& @KC$e a", d a@ $ךf B 0" <NHJ>3#,#  ALH(L   *Q`| >L|>t`~ZV`@A$L22  Pt+ ( L| NuD"BA a.X660W2"J0R L,C08@0 . P>0ZC`:22FPZd T@p(C0>`Np?a XLNA`@.udzހ aa HA"-Hpp alpMah=@NNNTT@0r p0Q`pdr tв 0.N.2 ACp,21Ap  a\Xpea>pCZ2Ad0 @2r22aV@"` 0<NBL $tB=A H=BP(psNB0.Ț0Β"0ؐ@P$(Nu2 @ e$bAjP@@J z(` Ntp& &NNaXq"DgNuWpDAf P  Z,*0 448\DBH,04&0D Ps4(*pB$3,>2::(  HM FV..26m" `8q"PQ1!P1P!0PP`0  q#aBa 6a T n,N!lc00``LdAd6Ag,B(dBH Ao<atoBA ¡ྐT<O>`dDIH`Z H IaLt IUOU Rg,ap`>p`@0fHRR>Er$W0xgr STD:gr COM:g r LPT:f4FA$_0=@Hk"~CA0< BhaB 2"ǁ$_ Ge><Q,Bp@&fgzp=``Zgzp=ܱACdE^GIjK<MFQNPRFISU[WKXZy\S]_^`Rb cyd݉Pf9 :ghdj7kYl mznoqm>r us ttuavw$@RFBd *L?P8d<@S@F2e B g`R e0arRF&0xAdCٱfEv+0JFjDFHƌPPBFHF HF|`HQ2.l`\eg>r Ca5e&!R`(0c `.9c0`<R"_@V.0 Ef"a/ Jr  g 0V@JAgB nN @mHJ@jDH.4DBUBkTQSAg` q`S@kI p`vB zBWAk6Hc0g$``@N u8pxB@H .@f"H@B@"V\:` 2p `(/ ^$I>TG` 04ag`af`ae `ac` acpPLadh$DD4Ae4v` VfANu HPR@kBaNuHh>SA f rlS0fJ?T@+kH^F402X8^\UQN΀Xf  th`tpa ".@tj`t@H`Vt)`t` tr`t2@-A =B 6v8`v(`v-` v!`v `v$F FHAHBHCHDHEHFHG-HfAN H@-@Hp`8z0<ndnf=E Hrt=|L.pz`z `z8.f4,D:0t4rD.BT8NNN"tB=@Bn*xxlЀA000 +p82* 64jWd$V V(( z"F d4p4 2dA` L0GF11"-pnHBQ4&xjDj=Czx 6C1=@f0@dWCk1DrpZBp'^0チq6(SC0(S@ap Bd  va0pPlv`vj`v q `v` p&a=n-nNu0v2.SAA`vh`SCS@AB&V Hd`$p6*#pgl@=@pNDBaDB1 1!v x6o<AC(FCĐdЄeJ/dHDDdRd&:`(g BbU>cj>cHDDdSkg RBPj0fB H@"jLF0[<pH8aߎ `g  0Dg `B`E$ea  p`8&6lq" " ,d&&@6::\:~:: <^Z >" @xf6&`݌ 24` kA&8:Bgmqv<ngfDbqfAbq h h hJ h* hnhehehhph&66@ABxJEjzz Xa.Jkj%| }~ $Ia <$XaH`aBlBXp@\02VA0p1| r BX$HTHz X|(Ja$L  [0a (p>`HP _&X Pf/|~KzagB@ 0D 2t C$R"2 S@ HQR0F"_d BTAA3Ap@:F4$I2ǀL2$B"0@2A\xT@gF2#M 4D3BS@ A ~d@BAP8 RGRC`3RSG5G5C J1D !̱caRF Fe "RG Gd #SF1F41R01h40x1EDg"<#H-A`@r1B"g(t(f0LfpH`ajL1X(Nu~dGdEH<к`n0@F@AJ@g tPp" N Jg(HPBHh/?P6@NAXhf Ѩ6Jkp%\pJBja!| 8>8O&0 < a0CJ2pPp azp "p`=GHg@p`L 6@`PhCJ"E pL$: H*NB؄BDp,B08xDlĔNb XPF >:80JP$,p]X 0 p xg"X I"_(*UGk*<Ā؆QNp`Lp` p`pJPgh*!%1 N҃` sHaNL8aJL/ նL8O <jDFpDEFn fdaڰ`)ֶ <.HAx$I"t Q k"RGef~@`0 * gfSG`BjZ\FkBJnhg 0gd0g^HS&I.Q`H?3(NM"\Dlj&_PZQ0FdˆڊNu?2 /"H($"Hgr k&@ S`^#&@0+"3 # #  `# ALH` &#fLz`t .$@JAf@}"X2ebP6gHRC(D#d@|@@`0n$`4`Hz b&NN\`0j4LLJFj|@c<JGj~Ac>02 h| N0H@Nu80a|D\ \0^0f japa |@((". G؆*.(|؆k̚D `(6,k@.@؞*!@B(4D؅.1BgHxDNA@P`k//. BgJs&pPINA\/H BP$`J(ۮ$$I`&bۛ@NRp Pb&n CXb& `P(qXp=`D%NNT jkENuSBR@Pc \"H`QN0Ha60l _ PSAvjx E(Wf* @Da e @Jzb 01pgpE?q"溰&P:@MAhށ6 p:ct"?"& g4ga JAg@2< R@AdSf0^0p CJe4LL|&bTgPAe *bFRPLLD0Y >V80 RP0I҆66( a0 @~RP  NHBH?<B L"0&8`H D*ڃkd0րBb.?XXR\!@ `*h Hx|?4*o ׀k:fp`^k g ԁJrP| F _D°f$S&H.B9 `$H E@XH`er`4B&@͉& I`2j_/ ` Qlb @?H@0-@T `>@HVqMr@-EP*$HHJCo2JDo.4(=B&6=CC@ $tBfЊ $(,D@v`vp lJ@k@NM"UAf J@fH@ Lj0fu\@`8`]@><# Ib<00D a ?|`f0R@f|0@@¼HJFkD rpo`\HSHP&I>g\2SG4` _t&_0,adJAq2g `af`aaApQr```C` `V JЬJfRRRRRRR @H~8:E#P&@@x ?q\///(/:/L/^.p&# 0?? P@t@k RB я #:@?@rD@??-???Q?c?u???/ ?? 0(A>dH )4$ٔ3~C 0 3#3C`@t( 0_!OMO_OqOOOOOOO $PG8 )qd@&  @<@)10 0e@ %p?(:L^p 3#<&OXPH<||@6 0! & @X @v@J\nȟڟ# %:Mh@$PPL@&$0@V@|6L 5>@/ʯܯ$i@< Ae@ &Yx\4 D0 6H P`#f@$V(O@`h@Ppڿ"4FXj|'@2@@`"@LbPû@ 0``Vp*O? (@@);M_q߃ߕߧչ!8&Aqh) Ȱch@ "@<) m@@Ĥ/Tfx n- @ @(lv @@ Bq@D@?0ijF >V8MaP74@V@<0$ @ @@p@Pπj|" )@$\{ 2 р@<@@5d x@D/6p@fxV !@0)TL¨( f@@* < ŀ 1q' ``Fk}R#h@9,`Rvr g@@D)@$@ _j|#@g@ Q8@P:W*$x'@`@v&0'@(@~*$ 1|#6`7a:0Fk}B&Z@")P"xj@F(>*@ 4Ey@D$`@V_k},(:@@ D:@j@ 0x$)@u,+Hp(dԜ>̄z(p@oJwqk}(@ QC+9$x L[@'G@n9)GdXn  B@ 9P @/i{;@ @RD<HFрW @@@v2*XOxɀt؀@$@*g@T0tt@n4 PMPXgy*@@C<h@<6R:ı@V8L < *j|@1P) @D,@Dx@*r@Bj@x|0{a4Wp0j|t#(("(X`vv00xxPpj|C#(@ @Pb<@l f@dy@@ fx"(ax|@0ƀJP@Hm9 z@@@v&p!@ Ft @Đ: 8*/5gy$0g@+@X@Ef@Z@ yǀU@v, ?? 0:(LxZ $@H@e@szi{^9A2! >?h p@?ZC09 @p|@@|9Ȁp  @n ,1b!>? 0P `@UQFay@X,"ƀ@lh<@i{mU???Dp`@5B0Ra@ 0P`T"A0@$ jU fx&!3<efxD??,?:Q_P,P0* @_@ %y 0 &:OJ `:>_DgyUrfx 2"F9 y 3<0"P/UH &KN f$L @Hէ&`? R$aӀ0 jD"`5c0`8Tt 1ë"dD:1k}hh4|t4 U`fG2P*3C>| Q"M@X!0>"! ϟƀg@cVFdxπ@OpBy3@1`2<<@ !Uљ 7A_ hzϠ p Ph@8h(S`B8$ )0 +@TP gPEf 3N"RPe@23@@@Q(2C| !@@!?@_LP"n@pP` 2` @C0`@ !P@@ P  P;WP?0PQpZ0Ӑ(ei@$24@p CA@`@   @ h8h&/k`*!D{`;``@d0A'3 " X^@?  @ L}8&/t@P@$@$@-&U@sH@3011@! A?1PQ( DP]D?@s#!"  (Sh@H?0*9H@e$H@q@$?tBd#C d@pJ@  agHb@d@L6C);/@D/`D A #QЀ,٬ p H |$H } @о>@/B CùC0@ ` `@( H@ @"CD<@(_d D_D_@"a@",@h@elo4@'6/3EW,!CC1`*@# v  0Qdv"@(; dD/@&@ ɲQ"$?P) P7l/W(p1CUgCçABRb@"    @Сp  0*P@'@*=0(d`"Dєf@ѲQrPT"@3@e7@Y @,>P_@hCAhpi@ @ff agdH@@'Q04 ]d]Q@ Q@DP0`kthg` y"Y{v< ,=o@s!3EWȀArAAG<@@A`1!EHյq?;>*@*D"@"472 1G0BYy@!,<@P2냀<p@1CUgxA@h@"'B  H   ్x?9: @EP@!@`@T(By{ 1FN`|Oy0Lp@tT'>:80 Q @D P@  (  `B p0p{Ȁ0`Ȁ88=0#|V b |Gp&8J\>0? ?D&1$P,: jp* DGTEfj"@ 0k%Ѵ0 `Q?`? ? %7I[m%T30`T*x BUM<0#0fspU3̃`EA9 *` QP`p?Jg0 8@_"4FXj|&8J\nU??%H!zA%*P% q%Ra ?0$ 02%TA@%0@p !0 fx153<_%/1CUgQV??V0WS&VUEU@P0V@ _S: WV0WY`Q_`<_Urfxs"F@9pZy 3<BР#U$ sHNހ fjL`6@է`?sR$aFpPj$"p5cp8Tt 1`E"`ȉqD:Q#5GYh4|t4 U`fG`bp`*3C>|M#BX!>r ϟ@ g@cVFdxπOpBy3@1`2<<`@!Uљ po|a $6HZ p PPh@8h(sS`rp4( )0ڀɊ@tJgEAf 3"Pe@23@QQ(2C| `!@?@_L""4FXjz` 2` @C0 t z!@V(H Uġ<NfPDCQ&3@ª"iT }@*P@@/ASe@@B"@L5Mx@ Z@Y;A/xPhpx,th&0D000P0Ѕ"`@"@@ʮ`@h+l@/V6/3EWiF,bp(A %  <,4p 20C d 0p@&@@'[PpV(p1CU[\`-[@T@ Z @@hx@@@ɔf@ɲɀ%"H/3@e@x @,>PbCKz!@ wasP# 6 9 +5 3P(d@(@8(8@8D888$"0_yYQ{w<,=s!3EWɀAF<@@"~ `@!f@bbcȓe@ Jc@H`p"!*@]B<D@!<D@<`@0BT̀ʀ`T@fp$ЎÀ?0? H(C0_хL@2V[P@u(B@!@ŀ @/AS]x!@@<<0@@@DLHP&"f@Ȑ/3@!@( @,>Pb  `іѐH@pwD4DpLr9fv@(@`D;'5#o F3EW@@ @vqV@!|@@GdWd@2@ǀ(@@_@/ASe!z)`@s@!|+@)_L̆R@Q@Q@Z@-?Qcҍ`3""c q`3cs,$.@130!3 3*::H㺺D"L" Ll*&6sD AH lE@@ ##!3EW` ~!@'0 p'r00@ R80p\̠ް_*0 *P@ƠM3@gwcAd293J;1zPTQs70BS !*@:8 3  V  @ @ @@   ``  p0p{Ȁ0`Ȁ88=00| bEPn'9K]>??43ϡ>$G*ǰ $"@P 0k$P T TV?f?tO` %7I[m%TX30T$6*x`! UБ<00fspUpM`EA9*Ā @ĐQP`p?Jg P8@_"4FXj|&8J\U??%H!zA%*P% q%Ra ?0$ 02%TA@%0@p 0 fx153<_%/QV??V0WS&VUM@P0V@ _S0 V0W?SfQ_Urfxs"F 9pZy 3 <B%#U sHN@ fLH `6@Hէ&`?sR$a0j"`p5cp8Tt 1`~"Ws\E Qh@hВ4|t4 U`fG0bp`*3C>|@vB#@X!`>r! ϟg@dVFdxπ`OpМBy3@1!2<<`@U1 p_ @'9K]€ p PPh@8h(sS`rp(4 À)0@t gf 3"Pe23(ЩQ(2C| !o`?ÀPā"4FXj``2` @C0`@ C !@V D Wቡ<LfDCQ&3@\R<"iT t@.@@.@Rd<@-@0@#0?pL <@`Bp ˤ<@F@3*3Q#@D<@\aeA'@aFL4 Z~/0BT̂z @  "P!.f f ׈@R,dd +2@ l@ }3³2 K#?1CU):@@`@A @0f@`@Pf|@@(0D@qPG@@eie@@6BP@-?Qc@XGp``S p€ H$@@` @3FЀ@q&/V'P L%* ; "$6HZlXF@ F0YB R@!I mA!f Pa@0#@((D(r"?%9)$4J{6p@4FXjBz@D"@Ii@Q@Q@g@Q@&*@С@@ |@$emma:@/PB@ȁ$C" 6-i/Q#f"%@P(&*/Wٰ*lpe& H,:l@lQ2$o@4FX+HD3aVA% 'W#`R$aFV\dWmpZPp& F@t(`F1CUgD"YAaTf@e 9@wP@Q@(6@Pf@y3@e@Hi)@,>P_B@AX$#T@@,,pcz@&Q{yY({w<,=% @RP ?2DVhd@ @J1P H 4"5 71@bJP<p@:8 p~  Q "@ P@  ( `!p p0p{Ȁ0`88=0||VDV`C`{> t??&&4>* DGp4f0"@8PM 0IkAC0c**?`?B t%T30THT *xMUБ<0FQPfspb@UpM`EA9@* QP`p?Jgk8_quU??%H!z%* P%H q%Ra ?0$ 002%TA@%#0@ !0 fxv%3<%/QV? ?V0WS&V U3W @P0V@ _S: V]0WY`Q`<_Urfxaq"F9pZy 3<`BА#U sHI f"`6@'&`!?sR$a?j"` Lp5c p8Tt 1`; "s_DP Qئh 4|t4 UdfCbp`*3C>| N#@X!0>r & ϟg@VFdx0OpВBy3@1`2< <@!Uљpab  pÀPh@8h(Q`rpZ(4 À)0@tJgf 3"Pe23(ПQ(2C| !@?5@_L"} 2DVX|2` @C0`@S !њV L WቡP_B@X$#T@@-@нc@K0!1W{0y"aY`{d@@ Y1FN`|Oy0L*p'>:8 0  W @ @ C ` p0p{Ȁ0`Ȁ88B=(0L0| bEPvt??@tL&4&d0ZDGPf0"@А*0k05cb?`D?` t%T30T@ܪ*x  UM<00f spςU3`EA9@*ł QP`p? Jgg8_qu? 0T`sUDtUtP0 x1UcU}T Pb_@@@@@@Q ?e@@`vp%T`Qe@g@*3@4@~;870 < E&p|u K%uugA'R D3Pf u" 0'3 p0uL/,>P430€@<@>7 0 0@@2&Ã\@ @@7@7ᠮ@_6 p` / @078hkhW64?,>P-v4@<&n|"# >@&n۟?0"pA;@ 8bGp`1PA@NQ@@`@*~@n D)W?@Oix@ @BAB(!y@ @pg@a^w@H<8o@,>Pb:\7>9|@N>o' o ŀ'*#COϙHƀ)$A!8pQ.6@ w\C)x,>P@7?*<*G.O7C O :+'@9A!X Q.V7b!@C1@91CUzo7?@: '/@# s@ZIA9@z|@=C>@p@6HZ'7?0<7[: 9瀾i@hi@@r@ @9|ĐwA>@|X > @H@@7?0$xj@{  @t{@!)5@ ({FxH?R&MP$&_@97@|h  w,:;*09 @8hQL@P &_7(;69-nx @7}ުL8@b@`X1ʈN?Y' 9/ASe: 7z?@|~f* 9wNi@9@h@1Ϝz@g9Pʀ3Pqi@/-?Qc07@.~@  @'@K~w@xM?}Ȁc@оA1  wh2DVO@.@  sO/@ ?,A|cAȀɀ/@XG@@5GY7d; D@@NHgˀJAn 3PHˀҐۀ@$LC@5GY@q@nx@8Q9qzA3!f`D3B"A@?-?Qc7~|  ǀk@>k@A0~gA3_@f@-?Qcp7, > 0Ё$@<@aI0 $_-?Qc:@~ :@lӾx@@`@x</ASe!z!z@ z!z`p$`p/@q~P@?0@ `! 0@<0?1CU@@@@@@2@~?c>г>A߁5GYk}'9K]o+=Oas/ASew3EWi{%7I[m);M_ `<?? (@@?hp||!~O@Ŀ>>x"?Kpy.@Rd&# !0 Q@t@k RB я`@!?@r%B-?Qc/ ?? >dH)4$ٔ~ 0 33`@b p( +0/ASe<??@ @l8Xt``@5~$ 0!0(Ä@.@Rd 8@ C(X4DX$d&d@dRN @ @D<Y?V@-?Qc 1 !>$G8)$& d@& @<@)10 0e@ %p?&8J\n 3#<&OXPH<|@|@6 0 C& @X v@# %: Mh@$P"PL&$0΀V|6L k>@/i@< e@ &Yx\4 0 6H `#f@$!V(O@1`h@P~p`81'-@2@@`"@LP@ 0``Vp*O (@@_ @?<  <6 @ @lv@@ q@D#@0ijFqfPp00 @8aP74@`@<h0$ @ 55A@@p@Pπ m@*@ 4Ey@D$`@V__av#`&pG3hP,(`9@@ :@j@ 0x' ph@@?'ypm ,+Hp(dC>̄z(p@kJwBp0#AG@-jP^@`or߂*(@ C+9x "[@b'"@@P4d0 1A0EEQ>;E?@Wx?@T>Ő^pƿO"9)GdXn  "@ 9P  @ "*40I@WI{=G|@P? ?W?O;@ - @R<HрW @@@'1B`s҄$8EQ Qqjpw@p tot*xv@@2*pbx2Rǀt@$@0*g@T0tt@P doBP R@ "F"xA/Կe>C~ i 2Jyeo[4 -MPX <H0E`t01$ upt@j@QJ3 Q JE|W_& V@}կqIлP/@P$!@pIPl8Ķ@H#p'D@@6 (@T`@*%z:`+0ҙ</("& F@X,@@!Đ|W` )(H||AUT?]-5q `}t?@@@ HG?(@ $pk@9D@Gb8```@ጹ@4 8cP$AT 9D"@@PX T"D@$|}3@ ɀlLx%`@ Z <@`2pMRa@9@qZ4@D$.b 8E@P@<&~ π ]@}l@1 'P |Ex4d@@TP(@tJT:(R<5 l,85@{P1?1 $ʀLl`@D`b@&Đ@_8@@@B2 6s@<1 @aBTX0h@ 6Њ1,@,0*Ǐ@@//_@@C<g@<6Rb:@V8L<o *?//??o@(1) @D, "x@*r@!j@x|?0W__?__\x#(("(X@vv0`xxрЂ߀o@__o@o@pB#@Q @p<@lf@dy@@ \n"(ax|@0Ԡ~ƀJP@H9 z@@@@&<p!@  Ft9 @: 8*5ππππ$0Xg@+@X@f@Z@ yǀ/U@Pxx, ?? 0:(LxZ $@H@e@J-Vdf$$0cG@^9A2! >?h p@?ZC09 6@p|@@Ќ|9Ȁp  @*@z |'/M ,1b!>? 0P `@UQFay@X,"ƀ@lh<@%} | %@e@>C~6   2Jyd/U??!?`HGa`@%BRak@ 0TA4@0@ 1[ U fx&!3<fm@w0pPotxPv:`r00B!0vO A db@U@_ 0Ac !/1o#qBK =G|@P??W?W@UFfxπ@`B)#gg3< !U3ೀDH$%HU$f` lQ$b0@31C|%PI!C>?PIL!$ઌ$0&/@0x?6 T >50@y ` @@4`fB5*3C |@!@@ PtX! >E DPDTVdx(H"@ 2<$?U5 ,>@GF`-j Ep@ 01`5@@@ @P`bt   (1@@@ .  D D@_e0"@1"b(2C|c@0_!$]@e@?a0yP̀U oU`N+/4@ @A5}$P D D@ 4@$P0PEbEB D$*S`pPs@D@"hD/_!P40`@eG3h/eP Wb |@!=@QT< @`G@@@Xp7@ @ `ABC2@eapP@]a`A@`qB/8@0%m  Ͱ??0"pT$d@@q[B#u@@ `@q/@@T0džHD??p)'@ '%r%  `PAc"@du񮕲 %:$q`G`7?A&@|`pы@@@@ ԀsO0p0 P @dd@H([ [ K@MA0>.F098e@@>0@ 7` @4~9>0E 7@P@`0 3 h8hp%/k`*!D{`;`@ Q1A pX^@? ԀW La@0Dgu#k"/ ~p ||)QP$@$@|&4"@p[P@@ 3011@!A?1(  ?@Q!"  (Sh@H?Pad(H@e $@@@2 ?`0 6`d#d@@ ag@b@d@Ȁ6C);B/@/an Aр(Q, p@ H0t$@ u!@@@ͅV @<100@MV@1Y( @0P @@ @"C<@`0;_ __@a@a,̠B@h@ed4@'x2a/qf @p0<SBT !1@@⃁x _u  Q`pu"@(;@ /` @(ɐQ$?pL )Pd/W(p! < BB@   @K  7 *P@'@*=0( @єD@ѐ@QrPфT@"@e@Y@_0?`TBT`hh  )ff ag@'Q04 ] ]QQQ8D`~`kthg@` h"H@jv4$55o@s%q`?0j0߰Pbr<@ @ЌД!!$ЪE<AScյq?;>*@*ِP]А4721䡳0BHh@!$4@ׂp~c@5GYkx>%P@@"&Ҳ & 0>CVJx?9: A @P@!cT*(ABj!45 @Rdv!p0k,@@&  @vIc @!!D@  W "@!@/RdvɰPc=B@ P1;pİp] PP`5SDT (pNP*'s԰> W"Xj|'@ @D@0@=B@l@oP@/qP@Ͱ@a @QcuUX0Ur@ L@NJ p"^)!(!B)Q@`@qJ@j:(@$QpDpU*H񲫳JHn@nH@TDd@6HZPQЀB@JF@H (@-G@p`J<$ c7P5`_*H(Js&@E?'9K]oUF@JAO@AH@-@ @P @`&#|%( @@8s@<rPXJRjt"@t>@4FX+H@@4@AP@Q40"0H2(+0+V1 )J@* $4``p ~ |T2LLLT$o |%a/@ @m"222wp,Ewu.u.'WiUQUDQH H0H4HH@%)!! rO P`ppVK8`K # 'PPe'8@pJ@@8EE[WuGwGXs$hj#'-UQ!>% %uW)@$@B0װЀRflP 6PW㱪 t_/0W WEhEh/Yk@-W/ 0%|,-0H‰DF"X#ҹcb!1Aq[P̈+̠1"uu@__[m%T3?T񼑀*x0 U<0fsPU3̃`EA9`@ԣA0 @QP`p?`g0_80BUgy44@j@pZZvU??E%H!z%* %$ q%RHa ?% 0%%TAK%0@P !%U f`x%3<%b/p@xi`Vp00VqTCVp E _`W@XCE_`!VqqVqceqq_ z`*Q*QF>UFfxππTB)#gg䀉3< U3T0DH@䰢@UHU$f` xl0$b031C|PI!C>@?TIL!Ġ T$0&3$$!P*R*R?Yad@P U`fBe@*3C |@!@@X!>@e dPDԄVdxe(H"d2<$ U e*EgN ՘՘ "@ZPZ@:P(:Z|W> H 01tp@@@@ Pbt   tp(1@@@AM @D D@xe0p @2C|@x!@5GYπǀ4@ @A}] pƀ@ @_îB` hMD@b`p@A1@"h$p/lIlInLn?GỲxxx |@!=<# <у <@@@=<@@Ԥ"@aA@0 BzJ~GYkH0>00fB $f$':@@TɰN@ q3Z@@@d@102:j0j2́22@@@@ !~~\6&Pj@@(^ 3:Q@@ 9e @@>0@LL@LCNFN/KI@@IA"cR+@? QHð  ) /$!LaV G/"/IJPPJ?P1A 5@~@???@p2PG0P`T3@_ _`0(!DD`/a`P@ aa`"̕ح3ʀFHp(w@?5 ?4FXjuAqPN"A@ 1ag@@dPʐq HH\@]]B]\X F@t@):@bX# # # wTw AAA@AKRK@`@B@TL@P@Q@;A/PxP(hpx(Э00q/Ѕ@pW@@ʣ`@h+d4/g>|2a(p_T 8T vRAR@jZj@QWi,B(Z@ %  @S<,4. 4 `7`{@@@'\Ȼ[PpV(p@WiWiZAZ k8Zklln٠Z\@[@T@ Rw @@(t@ɔD@ɐZȐ=/"@e@@(Q pQ  @ZVZVP>~WbK@z @ R ws#6@9@+5 3( (€8(8@8D888_hHQjw4$5ˬ?& V&P&RQP-J8RJP K QZھ<2@ @~ `@!@f@bb@c@e@ Jc@ÀqC`e]ZBД@!p~P@@,>Pb€ʀP @fB$À? ? @@C0_у@ZP@u(AB@ !@#@_:::'ɀhz@@@@&1)w@)a>R@Q@Q@Z@_* %:@v` $C1C,$$.ߢ# 4AAS*::P!"" pD(4!ADAH l&!TDVhz: /"@!@!B `d 14p@@@C*PB uA*@B@13V@@گ@Rdv-@  @1@(@tb@<@'**@е$%Ԁ$d"ْ*@.~/Rdv@@ɒ2#Bc |' "rP ""e@BР0&+*+4pN(( &? * (R7iTfx[B@T*,AV##(D4)*;9+X;T >@0%DA X@F@_EWi{ad`B0wP,@QlP 6PW"Ƌ2_aUgy@-/ 0%-1_QF"#Scp-1JaqMarFXj|%T3?Tx` U0fsPU3`EA9bpA0 @ĐQP`p?Jgİ080BUgyGYk}U??%H!z%* % q%Ra ?% 0%A%TA7%0@ %U fx%3<%0/a)`V@P00V@TCV]Z E _``BW@CE_`!VbSVqceQa_UFfxπTB)#g gԐ3< ĠU3T0DHـUHU$f` lE$b0p31C|PI!C>?TIL!` *T$0&d@ @`q$1`fB e@*3C |@!@@PdPX!>e  dP DҟVdxe(H"d2<$ Ue*2Ugy $ 01tp@@@@Pbt   tp(1@@@@Ј @D D@@e0p2C |@@5!@C@SewB4@ @A}$ p Hp @$CB hMD@b`@A @"_h/Sew΀ |@!;=@=UB@@?@@=<@@פo@aaA@00 BzUgy0]0%۱@f #f@@%ȰqR)ϐD@@d@u2?:Ugy>P@@@@A @ f@`Pf@P#@c(^8Q@ 9e @@>0@X0)@QCdH!@ @`? @4F @ /bV G$ *r^P4!7DԄXY Bp@!Im!f8 E!a@@"hh](`j %prv?$()E@5r΋2@4FXjaر@D@Ii@Q@Q1¡g@Q6*@С@ɀ@ t@$em@@.P$$$C 6-i/Q#f@["%@(ЭX/WȀ*d4'HZ,:l@2`@o@5GY*H@3A@VA% 8 'W#`?RVX4YdWpZPp& @(p"@PAATf@e @wNP@QR@}(Ry@#@x"@fe@ Hi)@0BT_X$T@@,p`Ѕc@@PS{TİEhHjw4$5`% @8R%7I[m$@JPH![44 60@b@@JPÀW@<Pa@ZBp~Д@!p~P@He&b@p~@4FXjB PU HH@ @ࡡ4@@À@@@@Ԑ@P@(AB@ @!@%-B7ol @Rdvπ@@@ X d B"""@m ,D@)"@{!P@.2FXj|@p@@頲@)PTDT"*':bP  @D@D@ @`B@QaBВP@qP@`@ @C@!GURe`! ur! @/@/V@Q@Z@Q@%T6Nb7v1![ @*DEP U& " 6ap?(!!T&!T!1B$P%Hv @@E@%@@`p @p8O@_&@a@DR@@MT@%T4B 5V%/@  AG@u@wu# f"@/ؒ@ђ@Z2@@"$@&r'DP1±8/* EF@TRPG`RpWp$###ԠP8ᤖ"R?tPs(&4F!|'/1v1v@R@|@ VgtҬА@}D@P@?TIL!T$0&dd@  @U`fBe@*3C |@!@@X!>@e dPDԟVdxe(H"d2<$ U e*dٹ> 01tp@@@@Pbt   @tp(1 @@@P @@D Dn@xe0p@2C|@@!@C@πȀ4@ @AE} Įƀ@ @@B hD@ǥb`@A@"hÂ/΀ |@!==վB@@@=<@;@פ@Ba0A@00 BzE@ @@f Hf@@ɰ0)ZtD@@Dd@u>2:>P@@@@ @ f@Pf@P#@(^8Q@ QdPOaC@6482@ X0)@QCdI@@` @ppqr@ pT/@g@ p$6<U/؄XY Bp@ Hm5!f E!a@@0!`c@(`j %prv?$(H``"e$@!@2 ?4FXj ر@D!@Hh@Q@Q1¡g@Q1R@#€@С@ɀ@t@P?@@.P$@$C Ё6, h /Q#f@"".3@(ЭX1/Wh+d4@2`@/2DV-H3AV@$ 'W#`RaB0I'4YdW`)P^d5 _(pꆔ"PAATf@d ;@wNP@QQYC -3%@PD@y"@~~Se@u8_2м@1CU^ X$T@@-ЁЅc@@K0!1W{T0h"aH``jd@M4?$?5@г@6HZl$ #@JPH[#c6 6`` @bD@VIA@À@8Pa@BHh`@!$45#p~@4FXjB PU HH @ @L\4@@À@B`@@+A0.!@@ZP@(AB@!`B5̀ #@Rdvπ@@ @  d @B_"@mP,D@)"@!@/3EWi @p@&@頨@)PTDT"* @!@D@D@ @`B@QaBВP@kqP@`@ @ᦄBH% BURvDp!wr*$!;С;@8 p$T' U@Q@W@ *C R R0% W%!/^@ @Pá@WT7U6 D@4a@ @5DH)!T!0 VD4 R7v@B@U0T@*D@ P@@P@@@{a@CR@_@ W@=0&^W@ ~W\ *+0+F@'Ւ@ђ@( 4@1+@~"`BCC RPt`u`!up%!!P0VX\СvPqQ ?%5WP)x?'U"(P1v@R@|cvTX_ҬqBٰP<)t @ŀ.\/:@7Eŀ.@@)$A!8pQ.6@ 0p~ŀ\C)x@*B4@'@/@%7I[@?f@$j@'j@ f @s@r@ @9|ĐwA>@|X > @H@@+?Bŀ(@ (ŀv@|ƀv~!`'5@({@H0?R&MPB$&@X-@!@ @ iz}0@}>@07 @8QL@P&7(/:+|y@ @>@_߾*8@b@X1.@NL?YQ' 9/ASe.f?g@@yz@D9~:߿&:Pg@9f@h@Ϝz@g"9Pʀ3z/5GYk'@[:@  l$~w@@xM?}Ȁc@оA1 w_h2DVO@ i@(!6vfmaǂ?,A|cAȀɀ0/@XG?@@5GYz@,*@  KPˀgˀJAn@3HˀҐۀ$LC@5GY1@,@@@KA3 Bf`D3B"A@?-?Qc%? 8 | ?f3jA0P"g3_@f@-?Qc@7t @n:h@ 75 f@`@g@J `@l6h@$@<aI0 $?_-?Qc*b74 @?xȀ{ @ <O=Xx@ @@x</ASe700 N P d 0vѼmp/@q~@a ` 0?1CUg0/ @@1@ @5@V???c>г>wA5GYk}'9K]o+=Oas/ASew3EWi{%7I[m`}\L<$IG}BGBF0*@I4HA2$&(*,K0<?H|Q S@kBAgmR$ILNuJfBB &&>Q` f$BBBCKUC****(gKTC RR`jp nlQL 0a "o@$I0<BZ$H0<|ARq $IE2<~(4"Al62g@(VC>$I2<F4 Ao:DCC< o?~|~>>|x<xx<<08D<>xx|<>||<|>|>|>|???~???0Ç||Ã>| ?????  ?x????? ?? ? ?? ? ??-??CJca>11f33ے-kRZ*UUUJU*UUU8<x8<~8pgs326&lIۖIҥJ*ժjTUUUUVUUUUURTUUUUUUJUUUTJUJRkJZҖmd6f3&f3f333RVjJZRVTU*JVUZUUUUJUTUZT*JZRIMl$LfL&ff3f3332f̙3f̙3f̙6d͙3f̙3f̙3f̙93f̌3cf̌93sgΌ991qqqsssqx88x<x<x<<6d͙&Lٓ6lɛ2f͙3fLٓ2f̙6f̙3f̙93ff̘93scgqp8<p<x<x<<pÇ>||| ?Ç<8pLJ~>????? ??? ? ??  ? ??? 0? (?2  ???D)VR[iR[SVKV[RZKTZTjRT*UTJUVURUUUUVUUժUUUU`p<p8pc0g0cggg3L3lٓ&lMIYYYIIm-ZiKRT+TTRUTUUUVUUUUc18c1ǘc0g1ǜ1g8cΜ9c̘93g̜g31g3f3f33f3f3f33f33f~?~>xxÇ8ppcq9c13g1f3f3f3f33f33fT|>~>?|>|Ç><|xx|<<>x<x><x<x<x??x<|<|<x<x????????d??%????? %?tH? Qia|xpǞ8aΜ11l&IiZRRJVVUUUUUUUժ8yǎxÇ<?|>xǏd&I$I-i)VZRUjUժUUUU?~q88s9c1ss3f3ff33f33f?px8c11c9f1f3f33f33f?|>|>x><<x<<???~|<<x<<??? ????  ?.?3?W?YcascΎ81qcǎ8qx~?xxǜ81scf&6ImIR)**URUUUUU|>|?p8<q8s9333f93f33g?~???|qx8c13g1f3f3f333~?|x><x<<??<|x<x<<??????? ?? %?7 <YWc`???>|<qsƌ3ffdLMMmm$ZiJVժUUUUUU|<9qs3ƙr̙3fLɛZK)JU*j*UUUUUU?>|sq9c1f3gf3f333?~|>x<x<x<<??~>>?|x<x<<?????0 ?? ??@*&6???/??P9qqqy9988 s1s1f13fd3̳ldɲmے$mIZҖRZ*VRUUJU*UUUmdd&6622Mmdd62m&e6I$I$mii-ڵiҵ-JRԕUTJUUJRUUUU>~>xx>|x<>xx<<? ???????p!?? ????????! ?*"! |t *.!? |'*?j)RRZZJJJjjjk+)ZJj)Z*ZjTjV*jJjժRRե*ZUZU*UUUUUUUldTUVVTUTUUUUUURUUUUUUUUUUUUUUUUUcs11999ccs19c1c931sƌ3fΌ13cfffc3f3f3f3f333p233dfffff62333dff3̙f3̙f̛f̙6̙3f̙3ff̙33fffdfff33f3f3f3f333̠||>>|<>|<>|xx<xx<<\T<xxx<<x<Ç8Ç>|>?~?~??|??? ????? ? ??? |? ?)?tCd?At?GlLJ<<8xxpppLJ8paǞ8qcΜ1g9g31fnL2lI$[KKKZZVԥJUJUUUUUUU??|xqqcsf3MMmmII[Ҕ+ZVJJTURUU*UURZJj***UTVRZJj+VJ+֥J-Z-JkҴ%iږ%mIے6&&&662d&3f3L3l3f333̤lUUUUUUjժUUUUUZUT*UJժZթJT+Zԥ)JZִ-iIK[IMlf6l&l263f333d̘1cƌ9s33f̘1gΜ9cƌ3Μ9sΜ9sƌ9qcΌ9qsx<xx<<f̙3f̙3f̙3f̙3f̙3f̙3fƌ3f̌3g̙93g̜93cΌ 8<p8x<x<<Ç>|<Ç>|>|>|??~~????dÇ<| ??X?? ?????? ? ? \ ? ?T & ?????M(T?UL>>?>pqf333$mIҴ-ZRZVUUUUUTsq98x<>8cs32&dmɒm[)RZZVUJUTUUUVUjZVTUUU*JRTUUUUUUUTUjUZU*JRԵ-iiiIIIimm$$Md6d2ff3f3330L+JZRVT+jJRTUjRUUUUUUUJUթJVT))im-$Md6l6f3f3f3f332Dٓ6d͙2f̙3f̙&lɛ2f̙3fd̙3ff̙33f̙3cf̌913sccqqx8<x<x<x<<&lɓ6d͛2fLٓ&lɛ2fٓ6f̙3f̙33ff̜933gf̌p88x<x<<Ǐ<||??8D8pÇ<8pLJ<8pÇ<><||~~?????<??????~???? ( @@?4??(? ?9??]H8`,s1cs18p<>???<q9836fLْ$IҥKkkjRUZUUUUx<x>??<8̙3&lɒ$I-ZJZRJURUZUUUUZR)kJZRV+jZT*ZUjUUUUUUjVU+kjJJKKKim-%Il&M&l66L3f3f33fP0jZVU*jRUJURUJUUUUUUjVUjJZKIim%Id6l6ff3f6f33f33f$6lɛ&Lٓ6lɛ2fLٓ6d͙6fٛ3fd̙33ff̘13sccgsqq88p8x<p<x<<Lٓ6d͙3fLٓ6f̙&d̙6fٙ33f̙33cf̌988p8p8p<<x<<8xqǏ8xǏ>????X(<8pÇ<8pÇq3ddlMٛ$mۖ-Zi)VT*JUjURUUUUUUZ̍93rč;r̙;vę3f3d6226ddIm$Җ)Jֵ+Z*VRRTUjU*UUUUJUUUUUT)UUVUURUVVZURUJRԵiKKZZZ[KIim$m$d2L&&6d3ff33f33fpZKi֭RK)RK-RiҤiҴm[i[-I[Җ$$mmIMMlld&Lf2l6f3f3f3f3f33f33fT̙3f̙3gf̙3f̙3g̙1sfΌ93cf̜913sccqqx8x<x<<<x<8Ɯ8sΜ1cǎ1cǎ1sΜ1sǎ8qcΎ8<<x88<8<x<x<|x~?x>|?~>|??>~~~????D?? ??? ? ??  ? #0 # # *kUUն*IUժ*]U*U*Uk*U*UUUU*UUUUUUUUUUUUU]UUUULNf'Ln'Ln'LfYfLY&٦YIImISRJVjT*ZRZUJUUUUUUUnf3̳nf3Lf3f3L3fسf̙fL̙3fnLf33f3f3f33f3f3f33f33f x<p<p<pppÎ8Ǟ8qǏ8paώgs1s9c9f33f3f3f33f33fx>>|>x><x<x<x?????????????????  4?   4 > 4$ >???~>xpp8ǜ1ǜ9cfܙIl[mZ-KZJ*TZUJUZUUJUUUU <|?~>pǎ99LfI$IZ-)VRjUjUVUUUUU???|<x<<x<<??4 ?   ??D  ?? < ? F T J F D JƎ91sǎ 8qÇ<>~xΎLf6M$I%ikjԫV*UUUUUUUd81qΎ88pqǏ8>??~|81scfff&2I$mJRRR*UUUUU>|????>~||<<<q8s3cc3f33f33fL?~?~??q8c1c13f3f3f33s>x>x<<x<<t????|>xx<x<< ??T ?? #  #\ ) N P Nd PÇ><x<x<<???||>x>x<x<< ?t?? ? ???| ???/? |4PtSPQ<<x<q8yss93;f&͛6mْ$-miii)RJZUUUUUVUUUlfbs39ff33f2fd2d666Im۶-KҔ-kjJJj*TjU*TUUUUU????|>xÇ8qqccs19g3f333f333x<x|<<x<<88<8ǎ8qΌ99g3f3f3f3f333??x<x>x<<d??~?~|<xx<<???????? #? \? ?:? ??P(T &???P @UUUjUURUJUJ*VRZZZRR֕)JJimKKmҒ%Iڴm4KIK%i4I%i%KIimm%5UUUUUUUUUUUR ZUժJUURUUJ*UժJժUUUZU*UZ*UUUZjj**3ff3Ιf3ƙg3gs1991s9c91c18Ύ89s 8snj88qq98s3̙ff3fs3f3̙f31fffff3f9f3f3ffsff̙93f̙3f̙sƙsf3fs33ff<x><x>|>>|~|~~>>>~~|?|~?~?|<x|<><<>xx??????????? ?? ?'? ??IBIBUUUUUJUUTUjTUUTZRTUVjVjJJJjTZZVTVJԩJTJVԥJZRVTԵUUUVUUZUZT+JZRVRR[I-K-I[I,YlMIYYIMl&ldll&IdI&lI&llIۓ&&&$dll3̙ff3f&3f2̛f23dffffL2ff2f2Ldf&fdlɛ6d͛2d͛&M&͓f2Md&62Mlldd3̓ff3̙f3Lf2Ld&6ͲM6$mdm6Ie4Kڒ%mKҶ%Iڶmۖ-۶m$Im%۴IImmm-%~>?~~?????  ?? ? - 9 ?-'9%-UJTUJRԵ)iKZZҒIl&L&L333f1g̜g1c118g1ǜ0cΜ8qcΎ811qcccgU*JRVԵ-iiIMld&3g9c88 >|<|>|???|> Ã<|xÃ?? ???? ??   ? ? ? ?  ? UUTUՕ-%%$$&6f3c8qx~?00J*++)--%Md63ss<<~|x8q8<x8<32233LllllmmiKZ-KjJUZ*UUVJj**JUeUTUVUUTUZUUVUUUUURffffffddmmI-iZ)Z)VjTZUUUV*UUTJURUZVRZV*JRVjJZRVT<<xxÇ<xpLJpx>???~<<xx<x|<>x|>?~|>~><x<<||>???????????#?? ??<5cV JUUU*VUJT+Riҥ[II$M&Lg39? |JUUUjZTkZiҴm$633gc8p|>?<8Î8qǎ8yǎxÇf93g1c311s8q8p8<?f33g9s9cs8<>???<xx>|~?~x>|<~?????? ?? ?   ?0 ?-a T JRTUUkJҖmIdɳf3988<||xx8q99cΜ1scΎ81qcǎ**jjJZZҒ$lMٓ6f1g9????p<xÏ8Ǐ8qǎ<8pqLJ<??~>|>|>|ffff91q8????????~?x<|>?xx>~?????  ?? ? ?*?*?QOUTVRRRҒ6&fL͙3f998<?|??????UTZJ*RZ[KIIIٛ2f̌9csq 8<?3ss3331191q>~?|??<<|>?????? | ??  ??) ' ?M?JUUUTjUTZ*RZKim-%%$$dmMɛ&L2̙ff3c19sƌ9 q9qqyq9qqqy9UUTUUJUJRJj)%mKڒ$i$IM$M$6ٛ2d͛6͓ddl2fd2l&2mdd&662233fg39c398qxxx>|>~>33ff39f39fs1csc98q8y888<<88xÇ|<>>>||>|||||>>??>>|>|?~>????????? ? % ? ?  ?%???]?ZUjRTե+JZR֖$$$&6l&f31c1cώp><|Ç>|Ç>|Ç<|>>ZKIm$Lf3f38<?<xp<yq8sq986&&66666ɶ6$-iKkRkVJUZUUURjUUUTUUJUjUZUJURTUjZVTUUU*JfffdllMI6$mI-J-ZRjTJUjUUVJUR*ZV*V+RjZV+JZRVT+jJ8888q88q8s1gs39fl͙33&flٙ36fٛ3flɛ2fٓ6d͙2f̙3f̙&xxpq88s9q9cs39fdlLٙ36fdLə2fl͙6dMٓ6d͙&lɓ6d͛2fLٓ&l??~|>>Ç<8xLJ8xǏLJ<8xpÇ<8pÇ8pÇ<8p?????????~? ?? ?4&?4??&??UUTRJ*ZK-m6l3f8<?~xxp<x<x>ffL32&dl&m[$K%K-RKVZjUTVZjUUUVjUZZVjVjR)JR)jZR)kJZRV+jfL32fl&ld$mI-[iRZJj+VUUUUUU*UjUJU*RjZT*jZVU*jRUx<xq8q8q8cs19fLٙ36flLə2&lٓ6dMٓ6dMٓ6lɛ&Lٓ6lɛ2fLx<8p8q8q8s18gf̙33ffL̙3&fٛ3flə&lɛ2fLٓ6d͙3fLٓ6f̙?|>?LJ<8xpǏ<8pǏ8xqǏ8x?~>?Ç<|>|>|?~???? ???????? ??0 ? ???0?UUUUU]UUUUUUkUIUkUUUUUkU]IUUUU*UkU]UkUU*IUՔ*kUUն*IUժ*]UUUUJUUUUUVRVTjVJVZk)mI[Ҷ,IIl&&lL&L&n'Lf3Lf'LNf'Ln'Ln'f33f33L3f3L3f3f'3ff'33333'ff̙'f̙3f̙3n3f3n3̑f3̳ff3Lnf3̳nf3Lf3f33f93f3f3f3c1g3cs19881qǏ8p8pxp8x<px<p<p<<<xx<x8<<|>>?|?????????? ? ??"? ??""??'`^TUURUjTR+VZKK[-I$Md&1sgΜ08ppp?????TUUjVUJV)Z-[IllL3f1s8?>?<<<|f33f3fcsc9s8q8ppxf3sf3g9sqq8p8|~???????<x><>|?x<x|>~? ?????????  ?' ???>???,]]]ZTUUJZִi[$m6Lf33s8x|8qqqƌ9sƎ91sǎ 8q*jZRRV֔-iIےdM3f3cq|?>xp8q8Μ8qƌ81qΎ88pqff93sg9s8<<<?~~|>|?fff911s8qx|x~???~?~?~?~x<x>|????x>|~??????????% ?$ ?< ?9^\^\%-mmIۓ2fd̙sƜq8<??|?>|Ï>?????3333198x|?`<~x|||??<<>|?????`??# "  ?9 7[X[XUVJURZj)6&dLɛ2399 y888x|||<<<UUUJUVJTZj)ZZKKKڒ$mɒ&͒dfd2d2̍3f̙3ff3ff3r3fbs39331ƙfc39csqqqq8<>???33ƙfs1ƙc3s19889q8x>|~ <x<x>|>?~~???? ???????  3 ?. T O T O@KIim%I-ZiJ-J)kk֭Z+Z4UUUZjUUJU*UJUjUUUUjU*4qqq98sq8qc99cq1cƌ9s7ffs333ff39f3f9fc̙3f̙3f̙4~>?~|~>>|4|<>||<|>|>|??7||Ã>|3|Hd??<T????3411f3330~8pgs33<(T0TUUUUUUJUUUTJUJRkJZҖ7U*JVUZUUUUJUTUZT*JZR3(0͙3f̙3f̙3f̙93f̌3cf̌93sgΌ991qqqs3 3fLٓ2f̙6f̙3f̙93ff̘93scg3@ D >|||7xǏ~3 ??3? 3D8?7?? B3BH(H??3VKV[RZKTZTjRT*UTJUVURm3Lc0g0cggg3L3lٓ&lMIYYYIIm-ZiK-3L$g1ǜ1g8cΜ9c̘93g̜g317?~>xxÇ8ppcq9c3?|>|Ç><|xx|<<>3H?3T 9???34@ 3X  ????? 4*4<*4\,*b3xpǞ8aΜ11l&IR38<?|>xǏd&3`8?~q8817px3?|34???x3dH93????30 3hX#?"3*4(*4ld*b3܌8qx~?xxǜ81scf3pt?38??|l3|3 ?3t?;? 3l 4 3x "@"3\*4*4| *b3L?>|<qsƌ3ffdL3|<9qs3ƙr̙3fLɛ3>|Ò7?~|xx>|3t?8??34 ?3? 3l?J?30 33d N3,jjk+)ZJj)Z*ZjTjV*jJjժRRf3ԸVVTUTUUUUUURUUUUU3\ccs19c1c931sƌ3fΌ1-762333dff3̙f3̙f̛f̙6̙3f̙3ff̙3(|<>|<>|x3ܨ<<x<Ç8Ç|>?~?~3d?3T?4,T??7 ?4T3DWx$D?9?"4DLJ8paǞ8qcΜ1g9g31fnL2lI$U3x0?|xqqcsf3*3p0TVRZJj+VJ+֥J-Z-JkҴ%iږ%mIے7UUUUZUT*UJժZթJT+Zԥ)JZִ-iIK[3x 0̘1gΜ9cƌ3Μ9sΜ9sƌ9qcΌ9qsǎ3p f̙3f̙3fƌ3f̌3g̙93g̜93cΌ8883d Ç>|>|>|??~~7Ç<|3p ???3d???3\ ?<? 9d&4\???4T?(8*4\?>pqf333Z5x<>8cs32I3RTUUUUUUUTUjUZU*JRԵ-iiiI97RTUjRUUUUUUUJUթJVT))i4lɛ2f̙3fd̙3ff̙33f̙3cf̌913scc5ɛ2fٓ6f̙3f̙33ff̜933gf̌?3LJ<||7LJ<8pÇ<><|5??3??4? 74 ??4?4*8*50p<>???<q9836f3 ??<8̙3&l&3ZT*ZUjUUUUUUjVU+kjJJKKKim-7JURUJUUUUUUjVUjJZKIim%4D6d͙6fٛ3fd̙33ff̘13sccg3&d̙6fٙ33f̙33cf̌9883>???7q3ddlMٛ$mۖ-d3ę3f3d6226ddIm$Җ)Jֵ+Z*3RUVVZURUJRԵiKKZZZ[KIim$7RiҤiҴm[i[-I[Җ$$mmIMMlld&Lf84g̙1sfΌ93cf̜913sccqqx31sΜ1sǎ8qcΎ8<<3ļ><|x8>|??>~~~??4? 3 3 74 4$S 8T*U*Uk*U*UUUU*UUUUUU3(LfYfLY&٦YIImISRJVjT*3f3L3fسf̙fL̙3fnLf33q7pppÎ8Ǟ8qǏ8paώgs14>>3?7???4????30?3(O4x]4*?3p?~>xpp8ǜ1ǜ9cfܙIl[mZ4?~>pǎ99LfI*3???|<~xΎLf648>??~|81scfff&J3???>~||<<<7??&3Pp4?3 8 3H 4 3I3D*4t*3<??<xÇ8qq7x|<<x<<88<8ǎ8qΖ3??s4?~?~30,??7?~3 4? 3 D?4 *4$??4*b3 DELMPAINT vMCXXL (THIS IS A TOS-CREW 'INFINITE-5' RELEASE!!!) IDEA BY........................JURI OF NEWLINE CODED BY.......................MR.COKE OF THE INDEPENDENT BUG REPORTS BY.................STALLION OF AURA SWAPPED BY.....................BULL OF THE INDEPENDENT TECHNICAL DATA: - DELMPAINT vMCXXL RUNS ONLY ON THE ATARI FALCON 030. - IT RUNS ON VGA AND ON TV MODES a) ON VGA MODE: 320 * 240 b) ON TV MODE: 320 * 200 - IT IS POSSIBLE TO LOAD PI1 PICTURES (16 TO 256 COLOR CONVERTER INCLUDED) - IT IS POSSIBLE TO LOAD PI9 PICTURES (PICTURES FROM RISKS 'FUCKPAINT') - A NEW PACKED PICTURE FORMAT THE '*.DEL' - LOAD/SAVE PALETTE FUNCTION - BLOCKED AND TRANSPARENT BLOCK FUNCTION - SHADEBOBS AND SHADEDOTS FUNCTION - EASY COLORRANGE FUNCTION IN PALETTE HOW TO USE DELMPAINT: THE MOUSE INSTRUCTIONS: DON'T HOLD THE MOUSE !!! THAT MEANS THAT IF YOU WANT TO MAKE A LINE FOR EXAMPLE THEN CLICK THE BUTTON ONCE! THEN MOVE THE MOUSE AND THE LINE WILL FOLLOW IT, THEN CLICK AGAIN AND THE LINE WILL BE DRAWN. THE MAIN MENU: TO GET INTO THE WORKSCREEN (1-4) PRESS SPACE - TO GET OUT PRESS SPACE AGAIN. IF YOU HOLD ANY WORKSCREEN (1-4) YOU CAN PULL THE SCREEN ONTO ANOTHER ONE. - LEFT BUTTON=COPY GRAPHIC - RIGHT BUTTON=COPY PALETTE THE WORKSCREEN: TO CHANGE THE COLOR PRESS 'S' (LIKE SETCOLOR). NOW YOU ARE IN THE SETCOLOR SCREEN. LEAVE IT BY PRESSING SPACE. TO ENTER THE ZOOM PRESS F1-F6. NOW YOU CAN CHOOSE YOUR ZOOM FIELD. CLICK ONCE AND YOU ARE IN THE ZOOMSCREEN. PRESS ESC TO REACH THE BLOCK FUNCTION. PRESS 'B' TO GET YOUR OLD BLOCK FROM BUFFER. THE BLOCK: SELECT YOUR BLOCK. FIRST CLICK ONCE THE UPPER LEFT START POINT, THEN CLICK THE LOWER RIGHT ENDING POINT. NOW PLACE YOUR BLOCK SOMEWHERE IN THE PICTURE... IF YOU WANT TO HAVE A TRANSPARENT BLOCK, PRESS 'T' - PRESS AGAIN TO CHANGE TO BLOCKED. AFTER SELECTING A BLOCK THE BLOCK IS IN THE BUFFER. THE ZOOMSCREEN: CHOOSE YOUR COLOR AND DRAW YOUR WAY THROUGH THE PICTURE. TO MOVE YOUR ZOOMFIELD USE THE ARROWKEYS. TO INCREASE OR DECREASE THE COLOR PRESS '.' OR ',' TO DRAW WITH THE COLOR SET. PRESS LEFT BUTTON TO PAINT - TO GET THE COLOR PRESS RIGHT BUTTON. TO FILL AN AREA PRESS 'F' THE SETCOLOR SCREEN: CLICK YOUR FAVORITE COLOR. NOW YOU CAN CHANGE THE RGB VALUES. IF YOU CLICK ON A COLOR WITH THE RIGHT BUTTON THEN DELMPAINT WILL CALCULATE A RANGE BETWEEN THE CHOOSEN COLOR AND THE LAST COLOR. HERE ARE THE FOLLOWING KEYPAD KEYS: + TO LIGHT THE COLOR - TO DARK THE COLOR 7 INCREASE RED 8 INCREASE GREEN 9 INCREASE BLUE 4 DECREASE RED 5 DECREASE GREEN 6 DECREASE BLUE TO COPY A COLOR PRESS 'C'. IF YOU ARE USING A VGA MONITOR, YOU CAN MOVE YOUR PAINTING PICTURE IN THE BOTTOM OF THE SCREEN, WHILE PRESSING THE LEFT OR RIGHT MOUSE BUTTON THERE. DRAW: CLICK BUTTON TO DRAW. IF YOU WANNA SET THE SLOW DRAW FUNCTION PRESS '<'. THE CURSOR WILL FLASH(!). PRESS '<' ANOTHER TIME TO CHANGE TO NORMAL. PRESS 'H' AND IT'S POSSIBLE TO USE THE DRAWSHADER. LINE: CLICK ONCE TO SELECT THE STARTPOINT, THEN POSITION THE MOUSE TO THE ENDPOINT AND CLICK TO SET THE ENDPOINT. AIRBRUSH: CLICK ONCE AND SELECT THE HEIGHT OF THE AIR- BRUSHER, THEN CLICK ANOTHER TIME, NOW SPRAY NORMALLY YOUR WAY. TO SELECT THE HEIGHT AGAIN PRESS RIGHT MOUSE BUTTON. TO ENTER THE SHADEBRUSH OPTION PRESS 'H' TO CHANGE TO NORMAL BRUSH PRESS 'H' AGAIN. X-ER: DURING N_CORNER MODE PRESS 3-0 FOR CHANGING N(!). UNDO: YES, AN UNDO FUNCTION IS BUILD IN, BUT NOT IN THE ZOOMSCREEN (SHIT!) - WAIT FOR THE NEXT VERSION AND YOU SHALL SEE... FILE FORMATS: '*.PI1' [DEGAS (ELITE)]: 2 BYTES RESOLUTION ($0000) 32 BYTES PALETTE DATA (COLORS #0 TO 15) 32000 BYTES GRAPHIC DATA ( 32 BYTES ANIMATION DATA (WILL BE IGNORED) ) THIS FORMAT CAN'T BE SAVED! '*.PI9' [FUCKPAINT]: 1024 BYTES PALETTE DATA (COLORS #0 TO 255) 76800 BYTES GRAPHIC DATA THIS FORMAT CAN BE SAVED! '*.DEL' [DELMPAINT]: '*.DEL' IS A PACKED FORMAT (USING THE 'CRACK ART' PACKER). THAT MEANS YOU'LL HAVE 3 BLOCKS (3*32000 BYTES). IF YOU WANT TO USE DEL-PICS IN YOUR OWN PROJECTS: THE FIRST 2 LONGS ARE POINTERS THAT SHOW ON THE 2 OTHER PACKED BLOCKS (STARTPOINTS TO DEPACK). NOW YOU HAVE TO DEPACK ALL 3 BLOCKS (WITH THE CRACK ART DECRUNCHER). AFTER YOU HAVE DECRUNCHED THE BLOCKS THE FIRST 1024 BYTES ARE THE PICTURE PALETTE(!!!). THE NEXT (76800/VGA; 64000/TV) BYTES ARE THE GRAPHIC DATA. ATTENTION !!! THIS FORMAT IS SUBJECT TO CHANGE WITH THE VERY NEXT VERSION OF DELMPAINT! (THE INFORMATION ABOUT '*.DEL' IS INCLUDED ONLY FOR THOSE GUYS WHO JUST CAN'T WAIT FOR THE VERY NEXT VERSION) NOTE FROM COKE: IF YOU HAVE ANY NICE CODE, SOME PICS DONE WITH DELMPAINT OR SOME NEW IDEAS, OR A BUGREPORT, SEND IT TO ME. MY ADDRESS: JRG TOBERGTE ADELBERT-STIFTER-STR.10 27753 DELMENHORST GERMANY DON'T FORGET TO ENCLOSE INTERNATIONAL REPLY COUPONS! HI TO TOM G, JURI, STALLION, BULL, ANZAC, SMART, MR.NI TOMMY, MC FLY, CHAOS, THYROXIN, JET POWER, INSH_ALLAH TRAITOR, INNOVATOR, SAMURAI, QUESTOR, ULF, WINGLEADER BAT, JESTER AND DANNY O. . r!.. DIARY241APP :DIARY241TXT u EDHAK ACC rREADME 301 B1`9`8 Copyright 1992 by Craig Harvey All Rights Reserved *HBf( O h*H ( ШШ//Bg?<JNA,mO -Mf`CzA"A"A"A"A:"Nu=@Az"psNBNuCA"A"B BBBB"A@"A`"An"Av"Nu=@@ AC86Ea.JC8CEa.<=np@A-Hnp#a0.`J@k`=@:?<NAT@AA:\BBgHn?<GNAPCE$a-CJgE$B*a-\BC$Ea- <-@Bn=|=|Bntpa,BBP==| | B.BndB.C8QEa-b=|7A -H ACBE%G&HACE$G%8H$aJ.gB.Ar-HnpaAr0 @(g @XfBnJhg0( @CTf=h=h =np@=|B-Hnp a^Arhg(=nLR=nj@=|Bpha:LbHTAr"h0. @f` @f-I-h J(gt$(e2A3/a(J0.` @f-B=|Pan`$.U-B=B .C na.t&.a%$-Ea%pa|B.IBnta`aDaJ. gr nfhA .=|J.Ig J .NJ-@-Hc$A2I/a(2J0.` @f`-nBn . n"naaBnBn=nn0<eaa(J.g*a-`"B.a:< -|4rn=E@praQ-|4rn=|@paa"BnBn=nn0<ea>-|4rnBn@pazJ.ga-`pajBg?<LNAAr0CT1npBh!n1n  J.g =n@=|B-Hnp aNuBBnlBnpBnxBBBnh=nJjJg aaXaNuH``-H&-I>?<?<NNX-@/B"Q IL-P4 n&-PR-HNBn@=|Bpha:=ndH=nfD0.hnH=@F=|@=|BLbHTLNupMa=n`l=nb:=nd8=nh,=n8`Sn`0.:HH=@^ <-@-@-@-@-@=|Bn=| =nl0<daJ0.=@n?<NNT n2g n2g`S-@"Bn=|Bn=|=nn0<'aBn@BnpNa@LTa#T=|@B@2.H4.D6.FnHYBYCHBpda=@j=@@=|BA--HDpiaB.>=|@pka=nj@LTHBpeaaBn@pkaa#a"=|@BBBFLTSBSCHJp3aa%4a&aaa4anB.B.PNuJ.=fJ.gA-c/a$RJ0.`|f=nj@pfaa=nj@=| Bpiaa=|@BBBFLTSBSCHJp3aa$pa%a Nu=nj@=| Bpha0.bnjNuaf=@@=|BAf-HDpiaNuB. a' a$"A@0000BX0V0Z0^0`BBBX Ar-Hnpa60.`=@| @ g-nb(abf=|@pkaa#a&0.|2AfB|gf|g2Af$a"fa&ha#Bn@pkaJ. gNu`JAr0|f`|fJ.>g`!P>`|fpa~`|fa`|f J.f`"|f`ذ|f`||f J.f`l|f J.f`ܰ| f*A+]/a"&J=|@=|B-|4rnp!a `( @(f2=nj@=| BphaA`2(p4.TftBfPa` @)f Bn@pkaNu`=njnJ.f.<;e<]bh`0.h@a`-|@BnD=|FpafNu=|a$=|@pkaN0.8n,W@=@80.:=@4=nV0=nZ2=n,6Bna"=|Bn=|=|=nn0<haL06.8n,n,S@TBUAZCH@SBASCH=|Bn=|=nn0< aZ=|a"\6.^=nd*Tn*tI*8< =C.a# Bd RBn8`a!Sn20.4n04SB6.Zn8H0Bn.=|a#A@0000000020406BBBX Ar-Hnpa0.`2Ag Jn.g`v2Ag n&02n0eTnZeN46/@eDAe@n2eaa=n86n2Rn.a`VaSn.a=@6n2a`:Bn.J=|@pkad=|a"aLaa!|a0..J@g^|f aa!b`N|fP!|<afa `0`, KfaX` Mfa` Hfa>` Pfa\` Gfa` ;fLJ.Ig>t6.R .Nea`(Jb g(*.J`(.J*-@Jaa$`a` f J.Iga b` ?fa x`-nJ .nl-@ZNuJ.Iga*B.INu&n&8:+aa`NuL0(L\@SBASCDbDeEdEea?.xa0nxgaB@af-n@-nDPHa&n&(Kgt8:+an&n&0.\n`S@Sdaa\a`P0.\Seaaa`:0.^nbS@kdaaa`0.^keJg ajaaBn@pka .DgJ.Hg4 .nl-@ZJ.Ig a.aa*B.IB.H-n@J-n@N .-@R-@V".J$.@d d-AR`&&.Nd d-CV`d-AV`c-CRa(.R*.Vt6.Raa-n@J .-@NJgd -nJN-@JPI`B.I-nD=|@pka`vJ.Hf .nlZd-@ZaTNuJ.Igt6.R(.J*.Na6NuJ.Ig6.R4(.J*.NaNuJ.Ig46(.J*.NaNud(.//.H0H en".$.pa$*.od2/=A^".$.(/pa o e2/ .@c2n^e=A`=|aJ=|a=|b=|d".(n^$.pa e. nbd0.bnxdp`nxnJeRn^p.2.bnxe0:n\>2.^8n^<6.^n`br$a &/b =C`n4.ndc4.dnxc&nxnJc4.``:n\0@6.8aRn^n82>.\.`=|aFO -_"NuL\@e4.:B0nb@e-nP:.R`Adp=@p-nBnl`6.8? .r2b f-n:=ElJfBnp".$.(nlpa (~$.a l0.x8nxDd8nxd=@x~=Dp=DtٮJgaa$aaNu .g|".’t4.Rcjc$?8<L\L0\FFaF2CG $.a*J@f`SAe`B=@B2nlB@SA>BB6.Ja|aNu$.a 0.v=@pR@nxnJNu0.*:=@0..n8=@=|=nnNu=|@pkaL\a0.8 =@80<:=@4=nV0=n^2=n86Bna=|aF=|Bn=|=|=nn0<ha^L06.8S@TBSATCH@SBASCH=|Bn=|=nn0< a=|a6.^=nd*Tn*tI 8<UD2=C.a> B d RBn8`aaA@00000BBBBBX Ar-Hnpa2.`AgadaLaaL\a=|@pkaNu .TdB.=a@dt`tI r.< W .d`Jg`n L"L .JfTRaJf?.=| a =_RRn 2.l$.Bnh=nJjaRnpRn*R=nptNuaA0.S@Qa, .e IxaB0.ѮѮn RaJga JnxgBnxaa`LabJfF .d<8.l8L\DD8:n8n8a 0.lR@2<>t6.JaaRnlBnpBntaa`dtB2.RnlSNuJf Jgz`XB2.Re".?CG $.aJ@fJ_SAg`B0Bnla(-n-na pa`JnxgBnxaPa`aafNu .c^ .r2.Re$ .=@l$.-Ba=npa P`(a`-nBnlB0.RѮa 2a~abaNu0.?=nJn a =_Nu0.?=nJn a \=_Nu$.B2.RnlJAc RACG aJ@gSAc d4`a-nNurpD㑲eRQ Nup"xҁрd҂dRQNu4.RRB&<a$&.Ra @d0<` @c0<=@D=nj@=|BpiaLNuJfp`$.&<a$&.–nRaZ=@D=nj@=| BpiaNuJnxfp`tv4.x6<aD$B6. a=@D=nj@=|BpiaNuJg aa =nptNu c"/A/aJ _2.` Ag <C -@aNu".ga&.$.ܔd"Ak/aTJ0.` @gt .A -CJց-CNPI"HaӮn C JA a$.&.a ".ځ-E0.l@-AZ2.R<>t6.Ja(abNu".J .NA a Nuaa:Nu/. .nl/aNu$.J&.N-Ba B.Ia .J".NC I$ .n a$.J-Ba=nvp=nvt .Zger2.Rb=@l`-nZ-nBnl0.xnpc 0.p=@x`2.p@nJe`a$aaaRaB.=Nu$.a .nleNp0.gBnp-nJnxgBnxaa`BnaN0.\2..4.`6.8a` .".C I$H  IaL .n aB0.ld:S$.al0.npd.=@p=@t-nnxd=@xa4aV`F` Bnp-n8.lnRdRD8L\DD8:n8ab2.R0t6.Jaa(aafaaB.=Nu .$.cJnga$.fC  I .SaB0.䑮n S$.2.lBnh=nJja 8.lnRe`TD8L\DD8:n8a2.R0t6.JaJajaaaX`dC A .SaRSSn $.2.lBnh=nJja bBnah0.*@:4.`n\@c 2..6.8aB.=NuHJg:L\L0\GGanxp2.Rt6a *J.IgL\4aa$LTaaZNu$.a0.nxeb<.@c<>:L\L0\GGanxp2.R4.JF6a J.IgL\B4Ba$aLTaaNuJg`0.lnRfa$.nad-nL\L0\n8n8aSprt6.Ja >Rnlpa|~ajaNu .B2.RcZJnlfa@$.a-@L\L0\n8n8a0R0.R2t6.Ja -nSnlparaa$NuSCSBH @AH?nn=|=|=nnA-H-H=|0<maNu0.png&e=np`ntd=ntp0.ntd=np .np-@0.JnxS@npd0.pnnJ=@x` 0.pnxd =@xaaNuJnlf JgaZ$.a$.aafSnlNu .nld0.lnRfa$.aB4aa.RnlNuCEa Ca CEa vaA-HnA-HrpZa aJnbfNuAa `<\J@g gS@`B(C$na (Ca ,CEa CEa Nu?</NAT-@NuJ.=fA/aJ0.`|fA-HaNAXt&.aH-EPaݤBntB.IBJBNNuA-HaZJnbfNuaP=Nu`,?<Hn?<NNAPJ@fn?</NAT @(gZBNu?<Hn?<=NAPJ@kN=@.< fA/a0J0.` @gR @g?<?.B?<BNAO `?.?<>NAXBgHn?<NAXNu?<?<NMXJ@kA /aJ`&IK *.???<NM\Sbe?< `NuBG ICarJ@g bRRB`Nu0(njg`pL8BnDe8.DB08CnFe 8.FUDC2nHd2.Ha4aapa`$Jf 2.l4.pnx8n^=A.nd=B*Nu0(njfLB.>nXcP>` nZcP>aDaha&J.>g aB.>`P>aaBa`ߢ2.lnRc*$.a$.aSAnRc $.a`=Ala0B0.pR@nJe=nJpSnpNuJnTf(LT4<aa6LTaBn0<aԴNup0.TR@:=@dR@:=@VNuRB=|@=|BHDplaLb8<:Dl4` @xn:fB`:=BJ:` 8:=DJ:<8El6`88Bn@=|BH\J@fR@SBHDplaNLbHT0.b8S@=@RNuLT8n,=DZ=nj@=|BHDpia NuAr0(njfP-X-Pa.fLTUBUCaa`|av=nj@=| BphaӼAbJhgVJhgP0hne40.nPe(0(hne0.nhe La@a=| Bpha``aBn0<aa`dpr4.D6.FaNu@SBASCH=|=|=nnP0<aҸNuHa=|@-onp4aaLNu=nj@=|BphaLbHn:n8nXd&nZd =nj@=|BphaҜLba(a`B.>Laaaa,a`܌aa4aba.Nu Nu Nu/ =AdaP!0.vnxc nhc=@h8.60.x2Aenh@enJc6.Jnhnje6.jB.!8I xh4.hP2.da=Dg a4.n*J.!gPB.!B0.2nxe>nJdP!ЮeI8X`IxP2.d4.*ndaxJ.!gar(_Nu@SBASCH=|Bn=nn0<raNuBn=|=nn0<aNuJ.=fA)/aJ0.`|f(BBn BPaBnt0.JH=@ aP=NuBnaL\ahNup2.Rt6.Jaa-nNu=@d=Af=BhJCg=CjBnaT0.d2.f@RA868n^20.h:n\4.j:a=np=nlzB4.nddaRE4.`BnpBnl4.d2aҺnfd$.gRE`=np=nlNuHxxBn=|Bn=|=nn0<'aόaSn=DASDTQ0<ajLNuJg`BNuJg`SaNupJgR@`SNuBn=|=nn0< a&NuH``paf=|a=|aa =n.0.n:S@=@0..n8S@=@=|=|0<ra=|aLNuB B Bn HPr IaZ2SA=AB.0`RBkdJ0BAE JJ.fP01fRAnRR@hcJg,Jg& hAJhgB@`Jg&kJkgBB`B@L NuHPr Ia2SA=AB.SBeJ0BAE JJ.fP01fRAnRR@hcJgJg hA0(J@g`Jg&k4+JBg`B@L NuM9JngSn`"n$n*nG! n(Jf n8.(JX024& Db 5jBNuXB@etBgz$RB 0@"nrgRA A:e"n2<g RA A:e`5  < 0@f0< 0@f&J.g< 0@f < 0@g%9 RnRn8NuA/aJ0.` @gB. @gPA4/?<&NN\B.aNu |V P"|TpJgQd R@`Jf0E "JJ-JN-IBn=|*HI2-M*NuPP 5P 55 5 6 6 62 6G 6\ Desk About Diary/EdHak-------------------- Desk Accessory 1 Desk Accessory 2 Desk Accessory 3 Desk Accessory 4 Desk Accessory 5 Desk Accessory 6 Copyright 1992 by Craig Harvey All Rights Reserved Diary 2.4 [1][File Too Big|for Buffer][ OK ][1][Printer Not Ready][ OK ][1][Changes Not Saved Yet][OK|Cancel][1][DIARY 2.4 from Clear Thinking|Copyright (c) 1992-93|by Craig A. Harvey|313-971-8671][ OK ][1][Strip CR/LF's|During Kwiksend ?|(Alt Aborts)][No|Yes|Cancel][1][That file name already exists][Overwrite| Append | Cancel ][1][Block Too Large|Will Truncate][OK|Cancel]DIARY241.PRGDIARY241.ACC Diary 2.41 *.* Menu Open... Save... Help! Print New file Quit * Click or Key exits * - - - - - - - - - - - Open - Alt-O or R Save - Alt-S Append - Alt-A Print - Alt-P New file - Alt-N Help - Alt-H Quit - Alt-Q or X top - shft-ClrHomepaging - shft-Arrow  .|d`HDiary v 2.41 20 Jun 1993 Copyright (c) 1992-93 by Craig Harvey Note that this release version of Diary is not PD or shareware, but is distributed as part of the EdHak software package. This is an all new, all assembly language DIARY. How SMALL is it? The program size is under 15K, and when loaded with its 4K edit buffer it takes up about 22K of memory. Renaming changes from ACC to PRG. It SHOULD run fine on any Atari ST, mega ST, STe, mega STe, TT, Stacy, Book, Falcon, etc., but it has definitely not been fully tested yet. *** This version DOES have the ability to interface as EdHak does *** *** with QuickCIS (or any other program that uses that same *** *** interface method, per OFFER.TXT on your EdHak disk). *** *** It ALSO includes EdHak's unique "Kwiksend" (Alt-K) feature. *** The main thing missing from this version of Diary is Word wrap. Diary is part of the EdHak package. Whatever the latest version of Diary is will be on the current EdHak disk, so any EdHak purchase or update order will include the newest Diary. Eventually, the buffer size (and many other things) should be user configurable, but until then, if you want a different buffer size, you can send $5 and a blank disk, and I will send you a customized version with the desired buffer size (up to 32K). Command Summary --------------- Alt-H, = Help screen (keyboard command list) Alt-R, Alt-O = Open file Alt-S = Save file Alt-A = Append to file Alt-P = Print file Alt-X, Alt-Q = Quit (warns if changes have not been saved) Alt-K = "Kwiksend" block from ACC to other open application Delete = Delete character Backspace = Delete previous char Shift-Del = Delete line Arrow keys = move cursor (shift arrow moves it more left/right, up/down) ClrHome = move to top of window Shft-ClrHome = move to top of buffer F1 = Mark Block Top (can also use mouse to select block) F2 = Mark Block Bottom F3 = Deselect Block F4 = Cut Block F5/Undo = Paste Block If it's not listed here, do not expect it to work. More Power? ----------- If you want a an editor ACC/PRG that can edit ANYthing including files larger than RAM, binary files, disk sectors, and RAM, with full block cut/paste/save/append, etc. get EdHak from your dealer or from Clear Thinking for $29.95. VISA/Mastercard welcome. Outside US add $3.00 for shipping. Version 3.0 of EdHak now even includes column block handling. PLEASE feel free to send your comments, suggestions, and even bug reports. Clear Thinking 2753 Plymouth Rd. Suite 137 Ann Arbor, MI 48105 USA GEnie e-mail: c.harvey EdHak/Diary support: CATegory 2, TOPic 40 CompuServe: 73047,600 BBS: 313-971-6035 Voice: 313-971-8671 Thanks, and enjoy! Craig A. Harvey `hONN _b ШNYNNuNuNVH|".$. &(*HDHEHABBمCمHABBBCHBHCԃԄ-A -BL>N^NuNVHx". $.bBCh8BAHA62HC6BAHA`B6HCBAHA8<㑲eRCQ-C -ALN^NuNqNqNq,HBf6 O h,H ( ШШ.@H``//??<JNAPXL*#hIl* .E OBBB!<B*H$ $gC `C! ` <L? <NA.HNqb=yqbN^NuNV3 q3qN^NuNV3q3 q3 q 3q"N^NuNV3q3q3q 3q"3q$3 q&3 q(3q*N^NuNV(n8q@(n8qB(n 8qD(n8qFN^NuN6NVIpB BBBBIpGq* (Gp* )EGq* )EGq>* )E GqN* )EGqZ* )EN^NNV3q# qNU?<r?<?<?<BgN6O 3qbN^NuNV?.?. NA*-E N^NuNV/./. ?.?.NA*-EN^NuNV/.?. NA*-EN^NuNV?./. ?.NA*-EN^NuNV?.?. /. ?.NA*-EN^NuNVY?<<(n* /?. aP*(n8N^NuNVY?<=(n* /?. aP*(n8N^NuNVY?<>?.aXJWDE N^NuNVY?<??.(n //.aO (n (N^NuNVY?<@?.(n //.aO (n (N^NuNVY?<B/.?.z. ?aO (n(N^NuNVY?<N(n* /?. aP*(n8N^NuNVY?< (n/a\(n(N^NuNVB9qpN^NuNVBn:.n b:.(n4P9qpgRn`=nN^NuNVU?.(nHTa\=_U?.(n HTa\=_Jng :.ncN^Nu:.n=E:.ncSn:.ncN^Nu:.nnb :.n(n 8.&n P@Sn`Bn:.SE?0.WcN*:.(n8.n&n P@0.WdRn`TN^NuNVBnU?.(nHTa\=_U?.(nHTa\=_(n* (n( f"?.(nHT?.(nHTBgaON^Nu:.nd&:.n b:.(n8.&nP@Rn`Bn:.n b*:.nd :.(n8.&nP@RnRn`:.n b:.(nqpPN^NuNnN^NupN(NV?<NN*-EN^NuNV?<NN*=EN^NuNV3l?< Bg?<Bg?. NO N=yn N^NuNVBym3m?< ?<BgBg?.NO N(n8o(n8o(n 8o(n8oN^NuNV3l3l?<'Bg?<Bg?.NO N(n 8n(n8nN^NuNV3l?<Bg?<Bg?. NO N=yn N^NuNV3l?<Bg?<Bg?. NO N=yn N^NuNV3l?<hBg?<Bg?. NO N=yn N^NuNV?<dBg?< Bg(n ?NO Byqv:9qv(nE89qvDGl7P@Ryqv y qvfNByqv:9qvEIn89qv&nD7P@Ryqv y-qvf3-qv:9qvE-EIo89qv&nD7P@Ryqv y9qvf(n 8lN^NuNV?<eBgBgBg?.NO NN^NuNV?<?<?<Bg?.NO 3 lByqv:9qv(nE89qvDGm7P@Ryqv yqvfNN^NuNV?<r?<BgBg?. NO (n* #pN#ppN^NuNV?< ?<Bg?<?. NO (n* #pN#ppN^NuNV3q# qNU?<?<?<?<BgN6O 3qbN^NuNV?. ?.NX# qNU?<!?<?<?<BgN6O 3qbN^NuNV3q(n* #qNU?<#?<?<?<BgN6O =_N^NuNVU?< Bg?<BgBgN6O =_N^NuNV?.?. NX#qNU?< ?<?<?<BgN6O 3qbN^NuNV?.?. NX#qNU?< ?<?<?<BgN6O 3qbN^NuNV(n* #qNU?< Bg?<?<BgN6O =_N^NuNVU?<Bg?<BgBgN6O 3qbN^NuNVU?<MBg?<BgBgN6O =_(nHT(nHT(n HT(nHTN O=nN^NuNV3 q#qNU?<N?<?<?<BgN6O 3qbN^NuNV3q# qNU?<2?<?<?<BgN6O =_N^NuNV?.?.?.?.?.?.?. ?. NO3q,U?<3?< ?<BgBgN6O 3qbN^NuNV3q(n* #qNU?<4?<?<?<BgN6O =_N^NuNV#qNU?<6Bg?<?<BgN6O 3qb(nHT(nHT(n HT(nHTN ON^NuNV#qN# qRU?<ZBg?<?<BgN6O 3qb(n8q@N^NuNV?.?.?. ?. NP3q$U?<d?<?<BgBgN6O =_N^NuNV?.?.?. ?. NP3q$U?<e?<?<BgBgN6O 3qbN^NuNV3qU?<f?<?<BgBgN6O 3qbN^NuNV3qU?<g?<?<BgBgN6O 3qbN^NuNV?.?.NXU?<h?<?<BgBgN6O 3qb(nHT(nHT(n HT(nHTN ON^NuNV?.?.?.?. NP3 q$3q&U?<i?<?<BgBgN6O 3qbN^NuNV3qU?<k?<?<BgBgN6O 3qbN^NuNV?."?. ?.?.NP3q$3q&U?<l?<?<BgBgN6O 3qb(nHT(nHT(n HT(nHTN ON^NupN*NVH``z. =E?.?.?<NM\LN^NupN*NVH``?. ?.NMXL*JfB. N^Nu| N^NupN(pN*NVH``?. ?.NMXL*-E N^NupN(pN*NVH``?Y?.NT*S-Ez:9uHx/N,X*Xڹv-E:9qREHEBEHEڮ(n(z:.Hx/N,X*9vڟ-E(n*9vnڔ#vV:.n cL:.yue&(yvV  g(yvV  g(n*.RfSn(n*Sx89q-EBnBn=n :.nd`NRnz:.Hx/N,X*9vڟ-E(nz:9q(z:.عvn#vV(yvV SvV(yvV .gRnN z:9qڹvV#vV(yvV (n*9vnڔ#qRn*.X#vf/9qz:.(9q/(yvf&n*x89q/NO `z:.*.䚮R-E-nBnBnz:9u캮eNN=yuz:.ڮڹvn#vV(yvV  g nc SnSvV`(yvV  f`N(yvV z:.ڮູv.dRv.Rnz:.ۮRvV(yvV  gRnRnz:.Hx/N,X*9vڟ-E(n(z:.Nz:9uۮz:9u웮`Bn:.ng`N:.yud`N*.Rx8.ڄ-E*9vnڮ#q:.nc6/9q:.nHEBEHEڹq/*9v2/NO N6/9q:.nHEBEHE(9q/*9v2/NO :.ncr:.n=Ez:.۹v2z:.-EHx/.N,X*9vڟ-Ez:9uຮc"R*.X-E(nz:.ڔ(n(`Nr:.n=Ez:.v2z:.-EHx/.N,X*9vڟ-Ez:9uຮc$R*.X-E(nz:.((n(`:.ng`N"z:.Hx/N,X*Xڹv-E:.nc`N:.n=E/.z:.Hx/N,X*.ڟ/:9unHEBEHEHx/N,XNO :.n(n Td :.(nT:.yuNr:.n=E/.z:.Hx/N,X*.Ԛ/:9unHEBEHEHx/N,XNO :.n:.(nT:.yuJnc`N^z:.Hx/N,X*Xڹv-E*.R(n(:.nHEBEHE-Ez:.-EpcNHx/.N,X*9vڟ-E(n*9vnڔ#qBn#qvV(yvV  f=|JcS*.X#vf/9q*.욮x8.ڹq/(yvf&n*/NO z:. ڮHx/N,X*9vڟ#vf(n*ڮ욮(yvf((yvf*9vnڔS#vV(yvV Spf:9uyuHEBEHEHx/N,X*9vڟ-EUY:9uyu?NT(n*??9uNX=_z:9u-E=yu=yuU/9v.NX:yu3uBn:9uyqcRyuSyuRn`:9uyuHEBEHEHx/N,X*9vڟ-E(n*9v.3u?9uNHT:9uyuz:9u躮gBg?9uN&XNN:.TEyuv SE3q:9vyq?:.vyv?:9vyq??9vB'N4O ?9u:9unyu?NX9qN6TJncj:9qREncL?9v:9vyv??9v:9qREnv??9v?9vNO NBg?9uN&XNNB'NYpT=nN^NuNVU?. HnN0<\3q?9u?9qN&XN;vN^NuNV:9uyu޺yqd Jyuc`N:9uyu89qƘE=D:9u޺nd=yu:.yu:.yu?9v?9v?9v:9v89vE??9v:9vyv?NO Bg?.N&XNNNNN^NuNV U?<?<AHylNP3q N^NuNVB'NYpTJ9qf*9v.v2f`N*9vFSv2c`N y ug yr ufJyqf`N:9uyu3q*9vnڹv.#vVRv2/9vV*9vVR/*9v2v./NO (yvVuRv.Ryu:9qRE3q:9qyub>z:9qHx/N,X*9vڟ#vf(yvf*R(yvf(Ryq`z:9qHx/N,X*9vڟ#vfY?9qNT(yvf*3uJyqfRyu9uN6T:9uyucJ9qff:9uyuc?< N-TNF*9v.v2d6?9q?9u?9uN#f\?9u:9uyu?NXN3q?9q?9qN; y ug4 yr ug*(yvVu9uN6TRv.RyuN*9v.qg y ug yr uf NALN*9v.qf"(yvV  f y ug yr ug`NV(yvVuRv.RyuRvV*9vVR//9vV*9v2v./NO :9qRE3q:9u?09qWcNJz:9qHx/N,X*9vڟ#vf(yvf*S(yvf(09qWdRyq`Tz:9qHx/N,X*Xڹv#vf*9vfX//9vf:9uyqHEBEHEHx/N,XNO SyuSv2J9qg?9q?9qN;z:.Hx/N,X*9vڟ-E(n#vBJyuc*9vBv:d <NYpT#v2vR:.yud*.X-E(n#vRU/9vRNZ4XJg`N:9uyqdX:9uREv=E?9v:9vn??9v:9vn??9v:9vnyv?NO ?9q?9qN&XN;vN^NuNV*9v.vBgBv>#v.vBJyuc*9vBv:d <NYpTY?.NT#vRU/9vRNZ4XJg^:9vv =E?.:9v,RE?:9vn??9vB'N4O *9v.v2g9qN6TSyvN^NuNVJ9q~g4*9vnڹvB/*9vڹv>//.NO *.۹v>N^NuNVq~*9qڹv>x89uHx/N,Xc:B9q~ U?<?<HHylNP3q yqgB.N^Nu|N^NuNVBv>U/9v6NX3uU/9v:NX=_z:9uHx/N,X*9vڟ#vfJ.g(yvf#v6Bn=|NH(yvf*9v6=Ez:.Hx/N,X*9vڟ#vf(yvf*9v:=E:.nc:.n=EN B. N^Nu:.yuRE=E:.yqHEBEHEx8.//N,X#qUNGRJfB. N^Nu3uqzqHEBEHEڹv#vfY?9qNT(yvf*3uBn:9uncj(yvfz:.ڔ-E=n:.yuc:9un=E*9vnڮ/*9vڹv>/z:./NO z:.۹v>3q*9vڹv>#vV:9qneN(yvV RvVRyq`(yvV RvV(yvV :.nTEHEBEHE۹v>Ryq:9qncN`| N^NuNVU/9v6NX3uU/9v:NX=_z:9uHx/N,X*9vڟ#vfJ.g(yvf#v6Bn=|NH(yvf*9v6=Ez:.Hx/N,X*9vڟ#vf(yvf*9v:=E:.nc`N:.n=E:.yuRE=E:.yqHEBEHEx8.//N,X#q3uqBvRBzqHEBEHEڹv#vfY?9qNT(yvf*3u(yvf/ U?9u?.NX:(_HEBEHEڔ#v.BnB(yvf/ U?9u?.NX:(_HEBEHEڔڹvn-E*.욹vR-E:9uncH:9unc:9unnU?.:9un?NXz:-E*.ڮ-E:9qyud :9qn:9qndZ:9qREEHEBEHEڹv#vfY:9qRE?NT(yvf*3uU?9u?.NX:n/./.z:./NO *.۹vRRyq:9qncN`:9qyubfz:9qHx/N,X*9vڟ#vf(yvf*9vnڔ-E*.욹vR-E/./.(yvf*9v2/NO *9vRv2*9vRv:?9uNWT#v6v.z:9uHx/N,X*9vڟ#vf(yvf*9v.3q:9uyqc*:9qSE3u3uBg?9qN&XN(yvf*9v.yu3u:9uܺyue:9uyqƺyud3uuByuN:9uܚyu3uB9uJ.fByuN^NuNVJv>fN[B.N^Nu*9v2ڹv>vFcN/NxX*=E:9qn=E:9uREnd`Nz:9uHx/N,X*9vڟ#vf*9vnڹv2#vV(yvV RvV(yvV XvfTv2(yvf(v2Ryu:9uREneN RvV`z:.Hx/N,X*9vڟ-Ez:.x8.//N,X#vR(n*9vnڔ-E*.ڹvR-E:.yub$/./.(n*9v2/NO N*(n(v2(n*9vnڔ-E*.ڹvR-E*9vڹv>-E*9vR۹v2Snz:.Hx/N,X*9vڟ#vf(n&yvf*3u:.yud :9qyu:9unel(yvf*9vnڔx8.ڄ-E:9un=E:.yud :9qnz:.(.-D/./.z:./NO N:9und`N:.yuHEBEHEڮ-E*.vn(9v2=D/./.z:./NO *.۹v2-nJyqc@:.yud4z:9q(.-D#vV(yvV RvV(yvV z:.(.-Dz:.(.ꘅU-D/./.z:./NO (yvf*9vnڔ-EU?9u?.NX=_z:.(.-D/./.z:./NO :9uneN&z:9uڮ#vV(yvV Ryu`:.yqbN-yvf`?9qNWT?9u?9qN&X|N^NuNVJv2c*9v.v2d`N:9uyu3qY?9qNT-_*9vnڹv.#vVB'NYpT*9v.eJyqf*9v.f Jyuc`N*9vVR//9vV*9v2v./NO Sv2:9qRE3q:9u?09qWcNJz:9qHx/N,X*9vڟ#vf(yvf*S(yvf(09qWdRyq`T?9q?9u?9uN#f\B:9qyufz-Ez:9qHx/N,X*9vڟ#vf(yvf*ڮ89uyuHDBDHDڄe < N6TJyqfV:9uyu(yvf(.Eb:=|U?9qHnN0<\3q?9u?9qN&XN;v?9u:9uyu?NXNJyufJyuf?9qNETN(yvV z-Ez:9qHx/N,X*Xڹv#vfY:9qRE?NT(yvf*fB*9vVT/*9vVڮ/*9v2v./NO z:9qHx/N,X*Pڹv#q/9q*9qY/:9uyqHEBEHEHx/N,XNO Syuzv2:9qRE3q:9qyubDz:9qHx/N,X*9vڟ#vf(yvfz((yvf(Ryq`J9qg =|U?9qHnN0<\3q?9u?9qN&XN;vB9uN^NuNVJv.cN+Jyqb 9qfNSN^NuNV#vvf(yvfBz:.Hx/N,X*۹vf(yvf-T3uJyqfX3uu:.yud6z:9uڮv2d"Rnz:9uۮXvf(yvf(`3uN*9v2x89qb`N* -E* -E*-E*-E*-E*-E"yvf09u".$9v26.(9vnS$DX  f  f "RCCgSSb*3u"n$n".$.&.(.:9uyue" U?<?<,Hym4NP3q N^NuNVJyuctJ.f$*9v.v:d`J9qf*9v.v6eJ?9u:9uyq?/9v6/9v:NO ByuImbGuzWN N^NuNV*.vB#qUNGRJfB. N^Nu/9qNGX| N^NuNVU/.NYXJfB. N^NuU/9vBNX3u*9vnڮ/*9vnڹvB/*9v2/NO *9qv2?9uNWT#vBv.z:9uHx/N,X*9vڟ#vf(yvf*9v.yud,ByuByu(yvf#v.Bg?9qN&XN(yvf*9v.yu3u:9uܺyue:9uyqƺyud3uuByuN:9uܚyu3uB9u| N^NuNV U?<?<#HymdNP3q N^NuNVJv>c`N*9vFv2v>c`N*9vnڹv.#vV/9vV*9vVڹv>/*9v2v.R/NO *9v>۹v2/9v/9vV/9v>NO :9uyu?NWT?9u?9qN&XNNB9uNNUNGRJfB.N^Nuz:9uHx/N,X*.cz:9uHx/N,X-_#v>-yvNZ*9vnڹv.#vV/9vV*9vVڮ/*9v2v.R/NO *.۹v2*9vnڹv.-EB?9qB'HyqNBO #q?<d(n HTBgHyqNO ?9qHyq/.NO U?9qNTuBgz/N\*9qgN\B.N^Nu|N^NuNVU(nHTHyqHnN\O JfBnN^Nu*.(nd(n((n*(n #q*9vFYqd((n(U?9qNTu=|N^Nu ?<z/N\(n /?9qB'HnNBO -yq?9qHyq/9vnNO U?9qNTuBgz/N\ *9qg =|N^Nu=|N^NuNV:. REgREHş(n-O&OSEQ(nGz26QU?<d(nHTN\=_=nBnJnc( nd SnRn:.(n 4.Pf=|`:.(n 4.Pg=n:.(n.PRnBn:.(n8.n&nP@Rn nf:.VE(nB4P?<d(nHTBgHnNO U?.NTuJnmNH``(n* /?<ANA\L*=EJng* U?<?<)HymNP3q B.N^NuH``(n* /I* /Bg?<VNAPXL*=EJng* U?<?<&HymNP3q B.N^Nu|N^NuNV U?<?<!HynNP3q N^NuNV(m&m*,g (m|N^NuNV(mBl(m&m'l(m&m:,kdH(m?,(mHl/9vNO ?9q(mHl/9vNO (mRl`Nbb(m/./,Nx.(m)_(mJcR(m&m'l(m?,(mHl/9vNO ?9q(mHl/9vNO NbbN^NuNV/-+NJ. gbU?<d(nHT?<dHyvN^O Jg>UHyv?<Hyn:N`jO Jf B.+_N^NuIvGz26Q?<d(nHTBgHyqNO U?9qNTuJyqm`NJnf" U?9q?<>Hyn>NP=_ nfB.+_N^NuNdH``BgBg(n* E/?<CNAO L*=EJnm znJEg, U?<?< Hyn~NP=_ B.+_N^Nu nf`N3qȠ ?<d(nHT?<HyqNO B?9q<HnNBO H``?<,NAT2?<*NATHA2*-E?<?9qI* /?<WNAO LNl3qJ9qg:(nGz26QUHn?<HynN`jO Jf B.+_N^Nu ?<d(nHTBgHyqN|O N" ?<d(nHTBgHyqN|O B. ?<z/N\*. -EJ. g`z:9uHx/N,X-_Bv>?<dHyvBgHnNO /9wh/.NxX*=E/9whNbX-n?9qHn*9vnڮ/NO *.g|J. g`Nz:9uHx/N,X-_B?.<HnNBO /9wl?.B'HnNBO *.wl//.NxX*=E*.wl/NbXU?.NTuU?9qNTJf|Bgz/N\ J.gf(nGz26QUHn?<HynN`jO uH``(n* /I* /Bg?<VNAPXLNb8B.+_N^Nu|+_N^NuNV?<XHyv?<Hyn?<dHnNO?<dHnBgHyqNO JyqlB.N^NuB?9q<HyqNBO -|*9qgB.N^NuB?9qB'HnNBO ?9qHyqIq* /NO U?9qNTu|N^NuNVq 3<q"3:q$38q&36q(34q*32q,30q.3.q03,q23*q43(q63"q83 q:#$qNU?<?<?<?<BgN6O =_(nHT(nHT(nHT(nHTN O(n 8qH(n8qJ=nDN^NuNV#qNU?<PBg?<?<BgN6O 3qbN^NuNV#qNU?<QBg?<?<BgN6O 3qbN^Nu( $  C @SAVE TO FILE/Disk...File is too big for text buffer.Load block of size (K): 8 Starting at which 1K boundary ? <-<<=00000_____X9999=>>->OKCANCELFile & GeneralQuit w/o query Alt-X | CloseOpen/Read File Alt-O | Alt-RSave file (no query) Shift-Alt-SQuit with query Alt-Q | EscapeSave File (or block) as Alt-SSend buffer to EDHAK.ACC Shift-Alt-KAppend file (no query) Shift-Alt-AAppend file (or block) Alt-AMerge File at cursor Alt-MPrint (buffer or block) Alt-PUpload -> modem or midi Alt-U"Kwiksend" block Alt-KClear Buffer Alt-CView/Edit RAM Alt-VLaunch Program Alt-LExitMoreCursorHelp! Alt-H | Goto Line # / Offset # Alt-GGoto start/end of block Alt-1 / Alt-2Start/End line in window Shft-Ctl-ArrowStart/End of line Shift-ArrowTop/Bottom of buffer Shift-ClrHomeTop/Bottom of screen ClrHomePage up/down Shift-arrowGoto Next/Prev word Ctl-ArrowMoreExitEdHak v 3.01 $29.95Copyright (c) 1989-93 by Craig A. HarveyBlocksStart/End block F1/F2ExitMorePaste Col Block (clipbd) Shift-F8End Column Block Shift-F2Clear Block marks F3Cut Block (buffer) F4 | BS | DelCopy Block (buffer) Shift-F4 | ^InsPaste Block (buffer) F5 | Undo | InsPaste Col Block (buffer) Shift-F5Cut Block (clipboard) F7Copy Block (clipboard) Shift-F7Paste Block (clipboard) F8Insert ModeF10=Printer InitShow CRAuto-Load FileMargins...Save with BAKupTabs...Hex Hack StatusMM/DD/YYAuto-IndentAuto-WrapBuffer Size...Set Font...ClipBoard...CancelOKSaveConfigurationSet Font Shift-Alt-FRight Wrap Column Alt- >Left Print Margin Alt- <Set/change Clipboard Shift-Alt-CTab spacing Alt-Tab display toggle Ctl-ReturnAuto-Indent toggle Alt-ReturnText/Hack/Hex toggle Alt-TNew Config? Alt-NInsert/Overwrite toggle Font Bigger | Smaller Alt + | Alt -Encrypt/Decrypt buffer Alt-ESave Block -> Macro Ctl-FuncKeyBeginningExit Desk About EdHak/Diary -------------------- Desk Accessory 1 Desk Accessory 2 Desk Accessory 3 Desk Accessory 4 Desk Accessory 5 Desk Accessory 6 EditingDelete Line Shift-DeleteFind/Replace Alt-FRepeat Find F6Delete to end of line Alt-DeleteInsert/overwrite Bytes Alt-IMoreExitWrap/Reformat Alt-W | F10Insert/overwrite Date Alt-DInsert text Macro F1-F10 Alt-FunckeyInsert Escape char () Alt-Esc | Ctl-[Clear Thinking, 2753 Plymouth Rd, #137Ann Arbor, MI 48105 USA 313-971-8671Enter password: ENCRYPT BUFFER ____________________ =>> ____________________XXXXXXXXXXXXXXXXXXXXOKTXTHEXDECCANCEL(&('M&Nw)x && ( )I Jj k    *)+K Lt(u)&("8&9]$~) #"##@Ag&h&'##:-&.O!Pq!r&"%%( )I Jm#n( &  '    2% 3 S  ^ &   & ) '  D% y  $ % 9 Zsz DD   D D   %% g E   ( D `   |           $  @ \  x   $     < X t     !hG ^ Ec  %G E8T p         % ;  G X  ` o  z              E      G e E  %4 Pl     0L g  E h   PP P      4  I  ^  s  %, Hd     G TE Y      !  _ E G e    pX@(x(@NV?<N>T*<y#wt*<#wt*<#wt*<#wt*<q #wt#wtwxBywp(ywx:9wpE(<qشP(ywx:9wpE)PXwtRywp y wpf*<q #wt#wtw|Bywp(yw|:9wpIP*<qڔ(*<qڬ)E*<qڬ)ERywp yCwpf*<q(#wt#wtwBywp(yw:9wpIP lg& lg lg lg*<qڬ )E / /9w?9wpN\(_Rywp ywpfBgN>TN^NuNVBn:.SE=E=| J. g=|=npncNz:.-EJnf z-ENJ nc@=|:.?0.WcN(z:././N,X-_0.WdRn`T/./.NxX*=E=|0 n c=|7:.n8.(n @/./.Nx.-_RnSnpnf<:.(n B4PN^NuNV:.REgREHş(n -O &OSEQBBBnz -EJ.gz-E:.(n x4P:MI| 4PfRn`:.(n J4PgX=|0:.(n 4APe=|7:.(n x4PnHDBDHD-D/./.N,X*ڮ-ERn`-nN^NuNV:. REgREHş(n-O&OSEQBn:.(nJ4Pg&:.yub:.(n4PN6TRn`N^NuNVH``?<*NATL*=E:.E=E:.EM=E:.MME=Ez:./?<HnB'?<NOz:./?<HnB'?<NOJ9uqg`NITbGz WITnGz#W:.SEIIP( /I* /z/NO z:./?<HnB'?<NOnnz:./?<HnB'?<NOnnnnB.N\ITGzWz:./?<HnB'?<NOnnnnnnB.By{Byu:9{IJ4Pg :9{IPuNHyw?<HyxHywNON*?<>Hyw?<HyxB?<>HywNON^NuNVH``*#vr* #|P/By{By{By{B9xB9xB9xB9x3{2IVGwz6WIW GxT?<N>T09{WdRy{`TN^NuNV:9{.YE3{Vzv 3{T?9vBg?<Hy{4Hy{4N OxU?9v?<N LX3{4U?9vBgN X3{4U?<?9v?9v ?9v ?9vNO 3vJyvl4(y{*8 U?<?<'HyWVNP3{4 B.N^Nu?9v?<Iw* x?Iw* ?BgBgNO N?<N>T?9v?9ux?9uv?9uz?9v*NO N|BgN>TN?<BgBgBgBg?9ux?9uv:9uzSE?:9v*SE?NhO3quJyqf3uu3uqJyqf 3@uz@v yv o3 uB9x|N^NuNVJyvmJno?.N,T?.N^TN^NuNV?.?<HnHnHnHnNO?.?.?.?.B'N4O N^NuNVB9xB9xJ.g0?9v?9ux?9uv?9uz?9v*NO B.N4N|?9v?< ?9{4?9{4?9{4?9{4NO N|?<BgBgBgBg?9ux?9uv?9uz?9v*NhO Bg?9qN&X?9u:9uyu?NXNNN^NuNV:.REgREHş(n -O &OSEQ?<?<?.(n HTNO /9zHnHnHnHnNO=y{.(yz9nJ.g`N(yz-l$(n * //.U?.(n HTN\:REHEBEHE/NO BgBgBgBgBg?.?.?.?.NhO/9zBg?<?.?.?.?.No4ON(?<BgBgBgBg?.?.?.?.NhON^NuNV?<X(nHT?<HyW?<XHyxHNOIq&n &&&6ܠ IxH* /(n * /HnNVO ?<HyWB'N*PU?<XHyxHN\=_:.IxH 4\PgJnc:.IxHB4PSn`Jnf B.N^NuN:(n Jf0J.g* U?<?<HyWNP3{4 B.N^NuJ. g(n Gq&&&6IxH&nz,6Q?<XHyxH?< (n HT?<d(nHTNO|N^NuNV?<?<?<HyWNO z:9{ /?<HywB'?<NO?<?<?<HywNO ?<?<?<HyWNO N^NuNV|z9qEA=EY?.?<NVX#zJzf* U?<?<%HyWNP3{4 B.N^Nu?<?<?<HyXNO ?<?<?<HyX NO Jnf`Nz:9{ p (yzx8//NxX*=E?<?<?<HyX@NO (y{*8 U?9q?<:HyXXNP=_ nfB.N^Nu3q nfX3q|UHnNfX3{Jy{g y{fB.N^Nu?<?<?<HyXNO N(n* -E(yzz:/./NxX*=E (yzz:/./Nx.JgU?<?<;HyXNP3{4:9{ y{ ndU?<?<:HyXNP3{4 ?<?<?<HyY.NO z:./?<HywB'?<NO?<?<?<HywNO (yz&yz:,k(yzl(yzx8,(yzv6,//N,X(yzx8/NxX(DnRE3{ UHyvRHyvRHy{NˆO JfB.N^Nu nf4 U?<?<;HyYDNP3{4 y{4fB.N^Nu3{{ ?.?9{?./9vn?.?<NMO*3{Jy{gU?<?<+HyYNP3{4 ngNB.-yvn?<z/N\Uz:9{ڹ{f/Ix* /?9{9qHnN \OJg6Bgz/N\3{{|*.vn(n(NhN<:9{ ny{b(Bgz/N\ N똠 <NTN*:.UEy{:9{y{ c 3{ {` J.g |N^NuB.N^NuNV U?<?<#HyYNP3{4 N^NuNV&IvG&z26QIvGz26QJ. g`NJyuc`N(y{*8 U?<?<+HyYNP3{6 y{6f6U/9v6/9v:?.N2O Jg | N^NuB. N^NuN y{6fB. N^NuJ9ug`N|(y{*8 U?<?<aHyZNP3{6 y{6f2UB/9v2?.N2O Jg | N^NuB. N^NuN y{6fB. N^Nu nf?<HyZh<N*PN?<HyZz<N*PUHyqHnHn<B'NhOJfN B. N^NuJ9qf: nf NN&U?<BHyv2NHO JfB. N^NuNUHnB/9v29u?.Nc|OJfI&Gvz26QB. N^NuIGvz26QJ9ugR*9whڹv2#wl*9v2{bc*9v2{b۹vNN*9{bv2vN#v2{buIq* /Iw* /U?< HyqN\:REHEBEHE/NO N | N^NuNV| nf?<HyZ<N*PN?< HyZ<N*PIqG&&&6IZGqz W|}UHyxHHnHn~B'B'NhOJg`NhJ.~f6 nf NN"U?</.Hn NHO JfB.}N(UHn/./. B'?.Nc|OJfB.}NB.}IGq&&&6N J.}g |N^NuB.N^NuNVJv2bJ9ug J9uf`Nx3{6J.g,(y{*8 U?<?<'HyZNP3{6 y{6f B. N^NuN( y{6fU. BgNc`N U?<?<EHyZNP3{6 y{6f| N^NuN y{6f`N-yvz-yv>UNJg`NI[*G~z W?<XHyxH?< Hn~?<dHnNO?<dHnBgHnxN|O -n?.xHn/.zNO U?.xNTJg *.gNb8| N^NuI[4Guz WNjUB'.N\XJf"I[@GuzWN B. N^NuN.-|J. gbB*9wlc*9wl-E*.ڹ{f-E*.vNc&-yvNB*.{fc*.{f-ENb*9whڮ-E*.vNc-yvN*.{fc*.{f-EN"B-y{f*.vNc-yvNIvGz26QUHnHnHnN_HO =_ nfN\J. g0*9wl#v.J.fz:9{(9v.#v.N*9wh#v.#wh#wl*9wlwh#v2#v2{bBgNWTBv>Bg?9qN&X<<NDXNNuN | N^NuNV-|B.By{B-yvFB.J9qf`NBUBg/9vRHnNHO JfB.N^Nu|N\#{fv2I[BGwz W(n wz:9{/?<HywB'?<NOIw* /Iw* \/z/NO NU(n HTHnHnN_HO 3{J.f#vNJy{fN\B.N^NuNL y{f`N<#vN*.3{ Jy{ c {fcSy{ U?9q?<RHy[NNP=_ nfB.N^Nu3q nfD3q|UHnNfX3{Jy{g y{fB.N^Nu#wl?<?<?<Hy[NO N nf?<?<?<Hy[NO UHnHnHy{NˆO JfB.N^Nu nf`NU(n HTHnHnN_HO 3{-yvnU/9{fIx* /?9{9qHnN \OJg&*.3{3{{|NjN*.wleNV*.-E*.ڹ{f-E*.wlc-ywl*.{f-EUB'N.TJgN` J.fN*.욹vn-E3{| y{g y{g`X y{fN\*.#v2Iq* /Iw* /U?< HyqN\:REHEBEHE/NO #v2{b#wh#wlu3PuBgNWTN.J.g#v.|N^NuNVz9qEA=EY?.?<NVX#zJzf* U?<?<%Hy[NP3{4 B. N^Nuz:9{ p (yzx8//NxX*=EJ.g.:9{nUE3{:9{y{ c 3{ {N.:.UEy{d:.UE89{E3{NBy{?.?9{?./9vnBg?<NMO*3{Jy{gU?<?<+Hy\NP3{4z:9{/?<HywB'?<NOIw* /Iw* \/z/NO N.J.g6:9{ny{HEBEHE(yzx8//N,X#v.N0:9{y{HEBEHE(yzx8//N,X#v.3{{z:9{/?<HywB'?<NOIw* /Iw* \/z/NO z:.(yzx8//N,X#v2#v2{bBgNWTBg?9qN&X<<NDXNNuN | N^NuNV|?<Hy\2<N*PIqG&&&6I\FGqzWB.}U(nHTHnHn~B'B'NhOJg(n* /NpX|}IGq&&&6N n} N^NuNV@IxH* #vVIxH* /NpXU?<XHyxHN\3{Jy{g`Nt:9{IxH 4\Pg`NPH``?</NAT*#vIu* E/?<NA\L?<XHyxH?<Hy{6NnO H`` yv/?<NA\LJy{6f`NIu* xڄ#vV(yvVzEJEg2:9{IxH\P:9{REIxHB4P|N^NuNB:9{IxH 4\Pg" y{c:9{IxHB4PSy{`|N^NuNB:9{IxH 4\Pg" y{c:9{IxHB4PSy{`|N^NuN |N^Nu U?<?<-Hy\HNP3{6 y{6f@IqG@z,6QUHn@N\XJgI@GxHz,6Q|N^NuIqGxHz,6QB.N^NuNV|IqG&&&6I\xGqz WB.}J.gTU?9v?<N X3{4U?9vBgN LX3{4U?9v?<N X3{4U?9v?<N jX3{4zv 3{\z vRE3{^:9{PSE=E:9vSE=E:.y{\RE=E:.y{^=E?9vHnN \:9{Py{\=E:9vSE=E:.y{\=E:.y{^=E?9vHnN \U?9vBgN X3{4U?9v?<N LX3{4U?9vBgN X3{4:9{\y{\3{\?9v?9{LHy{4Hy{4Hy{4Hy{4N O(nJTfF yv mI\GzW3{NI\GzW3{ND yv mI]GzW3{NI].GzW3{?9v?9{P:9vUE?I* /?9{NO ?9v?9utHy{4Hy{4Hy{4Hy{4N O:9v =E:9uVE3{Bn(nJTg=|Bn3{:.PE?09{WcN:9{n??9{NX?9v:9vv ?:9v,yv?:9{IyIP( /U:9{Iy?< HtPN\NO 09{Wd Ry{`nTy{n Rn nf2 *9vr\#vV=|(n8U?9v?<N jX3{4*9vrZ#v^(yv^3{BTv^(yv^3{D:9{By{Zm::9{Zy{\SEy{Bm$:9{Dy{Rm:9vy{^UEy{Dl (n8N:9{Dyvl (n8N6:9{DyvHŋv(n8:9{Zny{Bl(nT (n:ngNў(n=TNў(yvVzg(nJTmB'N,TN` U?9v?<N jX3{4By{4 yqf3{4?9{Z?9v:9{\XE?:9{^y{4?NP?<N>T+_N^NuNV?<N>T B'N,TU?<?<?<?<BgBgBgBgBgBgBgBgBgBgIw* /BgBg(nHT(n HTHy{4Hy{4(nHTHy{4NoO<(n8 (n TfB'N,T(nBT?<N>TN^NuNVU?<?<?<BgBgBgBgBgBgBgBgBgBgBgIw* /BgBgHy{4Hy{4Hy{4Hy{4Hy{4Hy{4NoO<3{4*9vr\#vV(yvVzfN`N^NuNV=| (ywx:.E#Pz/9zHnHnHnHnNOBgBgBgBgBg?.?.?.?.NhO/9zBg?<?.?.?.?.No4O U/9zBgN.\3{6 x?<BgBgBgBg?.?.?.?.NhO?.?9{6B'Nl\ y{6g( y{6g y {6g y {6g y{6fNT n f =|N> nf =|N, nf =|N nf =|N=| `N^NuNVU<<N\XJg8 U?<?< Hy]FNP3{6 y{6f B9uNK*N^NuNV*9v:v6d#v6vR#v:v6#vRv:I]hGuz WNj#v6u#v:uN^NuNV U?<?<0Hy]tNP3{4 N^NuNVJyuc`N nfB'NfTNf nf\ yufUB'NGTuN2 yuf&#v6vBBv>U/9v:NYXu<NYpTNNN^NuNVJyuc`N nf<NfTN nf`N#v6vB yuf Bv>U/9v:NZ4XuN&UB'NGTuJ9ug B'NJHTJ9ug:ByuI]GuzWN ?9u?9qN&XN;vNNN^NuNVJyuc`NJnf6U<NGTJg <NJHT?9u?9qN&XN| w nf>wU/9v6NX3uz:9uHx/N,X*9vڟ#vf(yvf#v.B'<NDXU/9v:NX:yuRE3{z:9{/HxN,X#v>z:9uHx/N,X*9v>cFz:9uHx/N,XHxNxX*3{z:9{/HxN,X#v>z:9{۹v:#vvVJy{bN<(yvVwRvV(yvV RvV(yvV RvVSy{`UNNuNNN^NuNV~#v6vBB9u yuf,*9vnڹv6-E~*9v:v6-EuN. yuf"UB'NGTu-yv~-yv>J9ugUNJg`NI]Gz W?<XHyxH?< Hn?<dHnNO?<dHnBgHnN|O -n?.Hn/.~NO U?.NTJg *.gNb8J.g. yufU/9v:NZ4XuN B'NJHTJ9ugPJ.g>ByuI]GuzWN ?9u?9qN&XN;vN<NYpTN^NuNVJ.g.U. <N@XJgJ. gUNNuN J. gUNNuNN[N^NuNV(ywx:. E#Pz(yz:. =tP :.E=EJ.g :.E=E(yz:. 9P N^NuNV:. REgREHş(n-O&OSEQ(ywx:.E#Pz(yz:.-tP (yz:.84Pg(n-T(n* //.U?. (nHTN\:REHEBEHE/NO N^NuNV(ywx:.E#Pz(yz:.-tP (n-TBn(n:. 4_Pf JncSn`(n:. 4_Pg&:.nb(n:.8.&nP@Rn`:.(nB4PN^NuNVܠ U?<?<GHy]NP3{4 y{4fB.N^NuB.?<?<?<HnNO ?<?<?<Hy]NO ?<?<?<Hy^NO |UHnHnB'NO =_Jng nfB.N^NuBn:.nd$:.Ix4P D<:.IPRn`BvR-yvnBn:.nd@(nz8.Iv4@E(n*9vRv2eNRvRRnR``BgNWTN.B9uBg?9qN&XNN|N^NuNV(ywx#z=|?<?.B'Nl\Rn n fJ.fH(yz:,E(yz9E(yz:,E(yz9E?<?<<Nl\N?<?9{2<Nl\/9zHnHnHnHnNOBgBgBgBgBg?.?.?.?.NhO/9zBg?<?.?.?.?.No4O(yvbBT(y{*8 U/9z?<N.\=_ x?<BgBgBgBg?.?.?.?.NhO(yz:,E(yz9E(yz:,E(yz9E ng`NL?<?<?<?<(nHTNxO ?<?<B'Nl\(nJfBnN^Nu(n* Ix( fBU?<Hyx?<HyxN^O Jg(n BIxGxz 6QN&(n* Ix( f(nGxz 6QU?<(nHTN\=_3{2(yz:,g`N"zI|G'PPYEj3{2B.By{By{:9{(nx4P:MI 4PfN:9{(nJ4Pf*:9{IB4PI&nz 6Q=y{N:9{E Ef`Nt:9{SE(n4P ae zb_D:9{(n4P ae zb_DY?<Hn<NP*89{I@Ry{Ry{`N8(yz:,g`N"3{2By{By{BnzI^,G'PPYEj:9{(nx4P:MI 4PfRy{`:9{(nJ4Pf*:9{IB4PI&nz 6Q=y{N:9{(n8.GP@Ry{Rn:9{(nx4P:MI 4Pg ne::.IB4PY?<HnB'NP*89{I@Ry{Bn`N?<?<B'Nl\=|N^Nu=nN^NuNV?<?<?<Hy^LNO ?<?<?<Hy^dNO ?<?<BgHy^~NO UHnHyu<NO =_Jng8 ng0BnByu:.nd:.IPuNTNUNJg`N?<N>TN|x?<BgBgBgBgBgBg?9v ?9vNhOJ9uf/9|D?<N \N8/9v/9vzz(n:/NO BgNWTNNN|N^NuNV3{8J9xg3{8(y{*8 U?9{8?<,HyaPNP3{6 y{6fdJyqfR3qwq3qu*9vnڹv.#vV(yvV  f*9v.v2dRv.NN\N U?9{8?<6Hya~NP3{6 y{6f`N#vnvV#vnvZBBB9w*.v2dV(yvZwRvZ(yvZwY?<Hyw<NP*(yvVRvVRvZRT`#v2*9v.#v.B9xN*9v2ڹv2vFd`N*9v2Sڹvn#vV*9v2ڹv2Sڹvn#vZBvR*9vRv2d`(yvVzHEBEHE/?<Hyw<?<NO(yvZwSvZ(yvZwSvVSvZRvR`*9v2ڹv2#v2*9v.ڹv.#v.xN$ U?<?<)HyaNP3{6 N\BgNWTBg?9qN&XB'<NDXNNNN^NuNVJnf:(y{*8 U?<?<CHyaNP=_ nfB. N^NuIb(GzW nf\z:9q/?<HnB'?<NO?<?<?<Hyb*NO ?<?<BgHyb@NO N\z:9q/?<HnB'?<NO?<?<?<HybBNO ?<?<?<HybXNO B.?<?<?<HnNO UHnHnB'NO =_Jng nfB. N^NuY?<HnB'NP*=E nf 3qN$U?<?.NX3q3qu| N^NuNVz:9q/?<HnB'?<NO?<?<?<HyblNO ?<?<?<HybNO B.?<?<?<HnNO UHnHnB'NO =_Jng6 ng.Y?<HnB'NP*3q yqd3qN^NuNV:.RIqx4PQ=DJnf* nQb":.RIq8.IPJ4@gRn`Jnc`Nz:.ڹv2vFc NT Hy{6HnHnHy{@N|O ?<N>TBg?9qN&XIbGuzWN Bn y{6f( y;{@m yD{@n:9{@E:M=ENf y{6fZ:.yvoN:9vyvno<:.yvo0:9vyvnoBy{XU?.B'N"X:RE=E ne n b ?.NTTN^NuNV:?9vNTIbGuz WNjBg?9uNX?<Hyc N\?<XHyqN\?<?9uNX?< HycN\/9vF?<HywB'?<NO?<HywN\?<Hyc N\/9v2?<HywB'?<NO?<HywN\?<?9uNX?<Hyc*N\*9wh/?<HywB'?<NO?<HywN\<KN6T?<Hyc=yutIG:z,6Q=|?<?.B'Nl\Rn nfJ9qg?<?<<Nl\J9qg?<?<<Nl\J9qg?<?<<Nl\J9qg?<?<<Nl\J9qg?<?<<Nl\J9qg?<?< <Nl\J9uqf?<?< <Nl\J9upg?<?< <Nl\J9urg?<?<<Nl\(ywx-l /.HnHnHnHnNOBgBgBgBgBg?.?.?.?.NhO*9{j{rP#vR vRd /9vRHx NxX*څ3{ N*9vR3{ *9vF=E/.Bg?<?.?.?.?.No4O(yvbBT(y{*8 U/.BgN.\=_ n f`N?<?<?<HydNO ?<?<?<Hyd.NO ?<?<BgHydDNO ?<?<?<HydFNO UHyvJHyvRHnNˆO Jg vJd #vJN #vFvJN` nfUBgNTuNB nf N~N0 n f NN nfUHnN\Xu?<?.B'Nl\ ng ng ng`dx?<BgBgBgBg?.?.?.?.NhO ng`N^B9q(n:,jgqB9q(n:,:gqB9q(n:,gqB9q(n:,"gqB9q(n:,Rg quq(n:,gB9uqB9q(n:,gqB9ur(n:,gurB9up(n:,gup:.yutgNL nfBIddGuz WNjUNhuIdpGuz WNjN3utI:* /NpXBg?9qN&XId|GuzWN N^NuNV:9uyu=E nbf NN naf N[N nxe4 nyb,:.ExMEIu#Pv.B'<NDXNz:.Hx/N,X*9vڟ#vf*9vnڹv.#vVHnNX nsf`N:.f :.g4Byu(yvfz:9uڔ#v.?9u?9uNXNSvV(yvV  g (yvV  f0Jv.c(N+*9vnڹv.#vVJv.cSvV`(yvV  g<(yvV  g0Jv.c(N+*9vnڹv.#vVJv.cSvV`NT ntf`N:.f :.g`N~Y?.NT(yvf*yu3u:9uyuc 3uu(yvf:9uyuHEBEHEڔ#v.?9u:9uyu?NXN(yvV  g4(yvV  g(*9v.v2dN*@*9vnڹv.#vV`(yvV  g (yvV  f(*9v.v2dN*@*9vnڹv.#vV`N, nf<N6TN nf B'N6TN^NuNVzJ9ug<(y{*8 U?<?<1Hyd~NP=_ nf |N^Nu?<Hyd<N*PUHyxHHnHnB'<NhOJg`Nz.EA=EH``?.?<NAXIxH* /?<;NA\L<HnN\ HxxB.B.I* /I* /I* /Bg?<K* -E*-E~*-EzNA.nzPP*n,n~L*=E B'HnN\Jnl" U?<?<'HydNP3{4 NN |N^NuNV(y{*8 U?<?<)HydNP3{4 y{4g> y{4f 3{N y{4f3{?<?<N/XBy{N^NuNV?<?<?<HyeNO ?<?<BgHye2NO Jyqc ?<?<?<Hye4NO N?<?<?<HyeLNO B.UHnHnB'NO =_Jng ng`NY?<HnB'NP-_Jyqcr*.=E nd=|Sn:.yuc=yuz:.Hx/N,X*9vڟ#vf(yvf#v.ByuB'B'NDXN#v.B'<NDX?9u:9uyu?NXNNN^NuNVB.Hy{4NX:9{4EJEg|(n Tf8By{4J.g3{4UJ.WD?9{4N<NYpT#v.v6#v.uIeGuz WNjN nUf`NB.Jyuc|#v.u<NYpT*9v.v6gd*9v.v6dJ.g#v.v6N #v.v:Nڊ3u?9u:9uyq?/9v6/9v:NO Nd nWf?<NTNL nXf<B'NXN2 nZf?<NTN n[f<<NXN HnNX:.f :.f`N n;f><NYpT#v.v6#v.uIeGuz WNjN n<f`NB.Jyuc|#v.u<NYpT*9v.v6gl3u*9v.v6dJ.g#v.v6N #v.v:Nڊ3u?9u:9uyq?/9v6/9v:NO N n=f*<NYpTIeGuzWN N n>f?<N۰TN n?fB'B'NXN n@fJy{cUB'NTuN^ nAf?<N۰TNF nBfB'<NXN, nCf NN nDf?<?< N/XN:.g:.E:M=E?.NTTN:.g`N yuf`N*9v:v6=E nQc=|QIeGuz WNIeGuz WNj:.E:M=E*9vnڹv6/:.RIqIP( /z:./NO :.RIq8.IPB4@:.8.RIq@QNNN^NuNV=|(y{*8 |U?<?<,HyeNP3{4 y{4f|N^NuN y{4fB.Bn ?<z/N\Bnz:.Hx/N,X*9vڟ#vf(yvf*9vnڔ#|0Y?.NT(yvf*-EJ.g`N:.yqnd :9qn`:.yq(.Ec`NT:9qn:.SEHEBEHEڹ|0#vV*9vVS#vZ(yvV  f(yvZ  f`N(yvV =|SvZ(yvf*9vZe$(yvZ  f:.yqd RnSvZ`RvZ*9vVvn(9v2#vR/9vV/9vZ/9vRNO Sn:.nz:.v2z:.3{z:.ڹv#vf:9{yud.Ry{*9vfX#vf(yvfz:.((yvf(``Nx#|0vV*.nc`N^(yvV  g*.nc RnRvV`(yvV  f`N&z:.qHE89qESD=D(yvV RvVz:.ڹvV#vZ*9vVvn(9v2#vR/9vV/9vZ/9vRNO By{:9{nd(yvV RvVRy{`#vZvVz:.۹v2z:.ۮ*9vV|0=E3{z:.ڹv#vf:9{yud,Ry{*9vfX#vf(yvfz:.ڔ(yvf(``Rn:.yucN`Bgz/N\ :9uyuHEBEHEڹv#vf(yvf#v.ByuB9uBg?9qN&X|N^NuNV$yu|5jN^NuNVHnNX 9 ue nG7d`N 9.ug 9,ug 9 ug NznJEg?<NܐTN":.g?<NܐTNNT(y{&zfN(n=T (n=T ?. ?. N((X :9vyvSEn n ?< N-T N:9vTEn o ?< N.T Nv:9vyvSEn n2:9uyqƺyud N( ?. ?. N((XN0:. yvl"Jyuc N) ?. ?. N((XBgN>T*9v.g`NJ.gJJyuc. ?9u:9uyq?/9v6/9v:NO B.#v6#v:3uJ.g3u-yv.-yv. yuf`N*9v.v6c*9v6d -yv6NX*9v.v:d*9v:c -yv:N2*9v.v6d -yv6N*9v.v:c-yv:NB ?9u:9uyq?/9v6/9v:NO *9v.c-n yug *9v.c* ?9u:9uyq?/./.NO #v6#v.v:*.v.g yuf:*9v.d.|ByuIeGuzW N NNڊ-yv.?<N>T`?<N>T N^NuNV:9uyqc`NBy{4:.H89uyqHDBDHD//N,XHxNxX*3uByuJyuf&Bv.ByuByuBg?9qN&XNBg?9qN&XN4NNN^NuNVBy{4:.Hx89u//N,XHxNxX*=E:.yug`Nv3u:9uyu=Ez:.Hx/N,X*9vڟ#vfJyufByu(yvf#v.NY?.NT#vR(yvf*9vR3{(yvf*9v.3{:9{yud3{uByu#vRv.N:9uyuy{d.(yvf:9uyuHEBEHEڔ#v.3uuNB:9{yud (yvfz:9uڔ#v.ByuN:9{yu3uBg?9qN&X?9u:9uyu?NXNN^NuNVU?<?<NXJg`NlY?<?<NVX*x=E ng naf>J.gU?<?<&HyeNP3{4J.g y{4f | N^NuB. N^NuNVU?. HnN0<\=_ Rn :. nd`N^NuNVJyuct#v6v.B'<NDXU/9v6NX=_U/9v:NX=_(yvf*9v:c:.yudRn?.?.N/"XNNN^NuNV:. H N :.H N 8U<<N\XJgUNʐuNN N:.H N  U?<?<>HywNP3{6 y{6g`N y{6f`N3{6Jyqc<3{8Jyuc3{8 U?9{8?<2HyfNP3{6 :9uyu=E y{6f N/PND y{6f =|U?.HnN0<\=_N=yu?.?.N/"XB9uBv>?9u?9qN&XN;vNJ9qWDqN4Nh U?<?<)HyfPNP3{6 y{6f"U<<N\XJg <NTNN DN3{8Jyuc3{83{6 nf$ U?9{8?<9Hyf|NP3{6 Bn=|:9{6H N Jyuc`N-yv6-yv: yuf`N~U/.NXz:Hx/N,X*9vڟ#vf(yvf*.=EU/.NXz:Hx/N,X*9vڟ#vf(yvf*.=ENNNB-yv2N N y{6g`NBy{6 y{f( U?<?<!HyfNP3{6 Sy{6 ?<z/N\u y{fB9uU?9{?<NXJg`NJ9qg6Bn:.IuJ4Pg":.Iu4P?9{NXRn`#vR*9vnڹvR#vV*9vRd`NU<N.TJgNJ9uf(yvV  fZ*9vRdNB9u-yvRBnBn:.yqd< ?9{NXRn`z:.۹vR:.nBn:9{6p?0.WcN0.WdRn`T*9vnڹvR#vV(yvVw*9vRne(yvV  g (yvV  f9w?9{NXRvR` y{g$< ?9{NX< ?9{NXNTNLBgz/N\U?<?<&HyfNP3{4?<z/N\ y{4fN`Bgz/N\ NN XN^NuNV:9wH N N NNbNJv.cByuJyucN)NNP 9:wfUB'N¤TuN0 9:wfB'N6TNUB'<NXuNL*9v.v2d$:9uyu޺yqcN(N4NV 9:wfU<N¤TuN4 9:wf<N6TNU<<NXuN?9uN.TN?9uN-TNJyuc`N=| yuf=|:.yuBg?9qN&X:.yu:9uyuc:.yuz:.v.?9u:9uyu?NXNN Y:9uyu?NT#vR:9uyuHEBEHEHx/N,X*9vڟ#vf(yvf*9vR3{:9uy{d`N=|:9{SEyuf=|:.yuBg?9qN&X:9une:.yuNz:.۹v.?9u:9uyu?NXNNN  "4FN^NuNV*9vnڹv2#vZ(m/,/9vZ(m/,NO Ryu(m*,۹vZ(mT(m*,۹v2(yvZ RvZ(yvZ :9uyuyuyuHEBEHEڹv#vf(yvf(v2B9u:9uyuSE(m9E(mJ,g(m:,yqb`N?9v?<(mHl(mHl(mHl(mHlNO(m?,?9uNX(m&m:,kyv,m:9v,yv(mll:9uSE?Bg?9uN#f\?9u:9uyu?NX3wN^NuNV/-+N3w{`YBg?9wNNX-_Y?9w?9wNNX-_*9v2ڮTvFd N8N<?<NXB.U?< Hyq?< HygN^O Jg|3{4=|J.f0(y{*8 U?<?<(HygNP3{4 Bn y{4fUJ.WD?.N?<?<N/XN*N& 8BV`jt  r*L^N^NuNV:.H N NUB'B'N@XuNPU/9v6/9v:BgN2O uN,?<?<N/XNNNB'NfTN?<N۰TNB'<NXN<<NXN?<NܐTNN/PN?<NܐTNBgNܐTN yufxNK*NNNl?<NTN\?<N۰TNLB'B'NXN<<B'NXN*N& $JH\ft(8N^NuNV3{:9vyvfZ(m*9v.f(m*9v2gN37{N(yvbBT(y{*BT(mJ,g (y{*8 (m)yv.(m)yv2BgN>TN^NuNV?<N>T?9v?< HyvHy{4Hy{4Hy{4NO:9vyvf NN^NuNV/-+N?<N>TBgz/N\B9xB.?9v?< HyvHy{4Hy{4Hy{4NON?U?9{?<?<?<Bg?9{P?9{R?9{T?9{VBgBgBgBgBgIw* /?<BgHy{BHy{DHy{FHy{JHy{@Hy{HNoO<3{6 y {6g`NTNN^ yCTwfRY?9w?9wNNX#v2BgNWTN.NNB9uBg?9qN&XNN$:9{6EJEg`NB.3{@u:9uuJ9uc?9uN!TNT:9uE E;dHyuNXN2:9uE E]c?9uN TN?9uNTN:9{6EJEg:9vyvf`N||:9{Jf :9{Jg$?9{B?9{DN((X?<<NTN6B9u:9{Jgu?9{B?9{D9uN(b\N:9{6EJEg:9vyvf`NJ9xg`N|By{8Jyuc3{8=y{8Hy{8N X y{8fNjJnf8 y{8f 3{8N ?9{8NrTN`vN xNJ9xgBgN>TNN?NB9x|`,+_N^NuNVUHy{4HyvHy{4Hy{.NO3v3 {L yvf 3{LN yvf3{LBn:.EI{z9PRn n f3{Hy{zHyvHy{N O :9{RE3v :9{y{.RE3vYN B#vzUN V _fSvz y utg yutg yutg 3{LutNJyqg:9qƺy{c 3{q:9qREvy{.y{.3v*H``?<?<NNX*#u|/3w{?9v?<Iw* /NP:9wHxJ9xg23{q3vux3v uv3v uz3vv*Y?9w?9wNNX#vR#vRvV y{f?<d:9wHNKNXN y{f`N#vV|HY?9w?9wNNX#{v:9wHJgfY?9w?9wNNX#v2*9vFUv2d*9vFU#v2/9|H/9vn/9v2NO BgNWTN.UNI*Jg`NN@ y{f J9xg`N#vn|0#v2vR3{6 yuf$*9vnڹv6#|0*9v:v6#vR*9vR{vc2#{vvRBy{6 U?<?<-HyhNP3{4 /9|0/9|H/9{vNO 3CTw3vwByw*9vRx3w*9vR3w3{6wJ9ugTyw?9{>?<Iw* /NPJ9xg\ yufR U?<?<?HyhJNP3{6 y{6gB9u y{6fuNB9xNB9x?9vN T3v J9xgNLt`XN|B9x*9h#vV(yvVJg((yvVz3{RvV?9{<NKNXUNI*Jg$(ywx#|D/9|D?<N \N@J9xg\ yufR U?<?<?HyhNP3{6 y{6gB9u y{6fuNB9xNB9x?9vN T /9|DBgN \N|J9xgNLtN^Nu00 XXX 0000JanFebMarAprMayJunJulAugSepOctNovDec00/00/00[2][ Choose Font Size][ 8x16 | 8x8 | 6x6 ] Menu Open... Save... Help! Print... Upload... New config? macros F1-10 Launch PRG Quit Find/replace Wrap/reformatInsert bytes Date insert Text/Hack/HexBlock... View/edit RAMEncryption Clear buffer Merge... Save... To Main Menu Print... Upload... Copy -> ClipCut -> ClipPaste <- ClipPasteCol ClipQuote ">" Wrap/reformatShift right Shift left Kwiksend... Copy -> BuffCut -> BuffPaste <- BuffPasteCol Buff:\[2][ Word Wrap Functions ][Wrap!...|Cancel|Turn OFF]ON]EDHAK~~L:00000 C:000#000000 c:$00[3][Too Many Windows|Already Open][ OK ]*.*[1][No Filename selected][ OK ]Copy Block of Size (K): Starting at which 1K boundary?[1][Sorry, Drive not available?][ OK ]Copy this many Sectors: Starting at which disk sector?Read Sectors From Disk[2][Find string on disk|or Pick sector][ Find |Pick|Cancel]Search from which disk sector?[1][Warning: Not Integral|# of Sectors.|Will Truncate][ OK ][1][Warning: Increased|# of Sectors.|May Ruin a File][ OK ]Write Sectors to Disk[2][Caution: Really Want|to Write Disk Sectors?][OK|Cancel][1][Disk Access Error|May Still Be OK][ OK ][1][Can't Append Disk Sectors][ OK ][2][Save Marked Block Only ?][Yes|No|Cancel][2][File larger than buffer; Save:| (1) Entire disk file, w/BAK| (2) Edit buffer only][1|2|Cancel]APPEND To File...SAVE To FILE/Disk...APPEND Block...SAVE BLOCK...SCRAP.TXT[3][Save Changes First ?][Yes|No|Cancel][2][Shifting will Empty|Pastebuffer!|Save to Clipboard?][OK|No|Cancel]SCRAP.TXTShifting..D:sec: [2][File too big for buffer:|Find string in file|or Pick block][ Find |Pick|Cancel]File is too big for text bufferFind Block of Size (K): [1][Sorry, Drive not available?][ OK ][1][Disk Access Error|May Still Be OK][ OK ]Set Clipboard Path[1][Clipboard not found|Set path?][Not now|OK]SCRAP.TXTMERGE File...OPEN FILE/Disk...[2][Open New File or |Merge at cursor ?][New|Merge] File Edit File Edit Block Block Block Block [2][Really want to Quit?][Yes|No]Block Set [1][First mark a block|with F1/F2 or Mouse][ OK ]SCRAP.TXT[3][Do Not Encrypt if|File bigger than buffer|or will Append][OK|Cancel]ENCRYPT/DECRYPT BUFFEREnter your password:Insert String at Cursor(HEX:xxyy DEC:xx,yyy,z)FIND String of Characters(HEX:xxyy DEC:xx,yyy,z)[2][Case Sensitive Search ?][No|Yes][0][No More Found ][ OK ][1][Search/Replace Options: | (1) Find| (2) Find/Replace][1|2|Cancel] Replace with What:[2][ Replace How Many ? ][Query|All|Cancel]Working...[2][ Found it! Now what? ][Replace|Next|Quit][2][ No more found in buffer| (Esc or Undo Aborts)][Continue|Cancel][2][View/Copy Memory |RAM => Buffer|Buffer => RAM][ R->B |B->R|Cancel][2][ Find string in RAM or | Pick block][ Find |Pick|Cancel]View/Copy RAM => Buffer[2][Write Marked Block Only ?][Yes|No|Cancel]Write From Buffer To What RAM Address:RAM: K[2][ Found|Continue searching ?][Continue|Cancel][2][Toggle display mode:][Text/Hack|Hex/Char][2][Convert Buffer|(not just display!)][To Hex|To Char][1][Not enough room|to convert to Hex][OK][2][Set Left Print Margin or|Right Wrap Column ?][Left|Right|Cancel]Set Left Print MarginSet Right Wrap Column ( minimum = 20 )Spaces Between Tabstops( Same for all, min=2 )No Macro [1][Macros Follow.|Click one or hit Function Key.|All else quits][ OK ] Macros: Config: Path: Buffer Size: , Used: Offsets: buffer: cursor:Free RAM: , Mode: TEXT/hacktext/HACKDefault File Save: OVERWRITE/appendoverwrite/APPENDCase Sensitive Search: YesNoClipboard path (set with shft-alt-C): [ Hit Key or L Button; Esc exits ] Set Buffer Size in K ( Min = 4K )Must Save and then run/rebootSaving CFGCFG Saved [1][Some PRG's won't|run from ACC][Try it!|Cancel]Launch Program...[1][Can't Find or|Not Enough RAM?][ OK ][2][ Send Ouput To: ][Serial|Midi|Cancel](counted within buffer) Go To Line # Go To Byte Offset # EDHAK Not Found Insert Overwrite Start Set Start Set Truncated!Macro Set [2][ Convert: ][To Tabs|To Spaces|Cancel][2][ Abort Operation ?][Abort|Continue][2][ Wrap how far ? ][Block|P'graph|ALL][2][Really ERASE EVERYTHING ?][Yes|Cancel][2][ Print/send what?|(Esc/Undo aborts)][All|Block|Cancel][2][ Metered output?][No|Med|Slow][1][Device not Responding][Retry|Abort]CAPTURE.TXT[2][Buffer Full|Save to disk?][OK|Cancel][2][Clear Buffer|& Resume Capture?][OK|Cancel][2]["Kwiksend" block to|other application?][Yes|No][1][EdHak v 3.01|Clear Thinking|2753 Plymouth Rd., #137|Ann Arbor, MI 48105 USA ][ OK ][1][No Room in VBL Queue][ OK ][1][Output Truncated|to fit Application][ OK ][2][Strip CR/LF's|During Kwiksend ?|(Alt aborts)][No|Yes|Cancel][2][Strip CR/LF's|During Kwiksend ?|(Alt aborts)][No|Yes|Cancel]$L    (     ( 4      "              &    & & 6      &     "     28*,                                     n         &          &     &              $&                               6  ,  $ (:   6 $ &   &DL 6*&  F "                                                                           2     $  ,                            *  <  ,                               4 .          "               $ 6   d<L*l 8  ,   h*.""(  (   * *(                           &         .  $>``l 4 ,*(2     $                                    "  "                             (   D  $$ *  <$          *       4  & &  "     "*"  "                   4                   & "     ,   ("  &     $$   " 0     $"          0                          . 4  $$  " p                         2@8 $V4   $   "  .  " $0   > ,   "   * 6    $J         $4                      >                            0(  &,           $              "               ( $   ( (   &"   &  *   :   $ 2j   . &  $ ".              .    (                     .                  .                   2($          &         (    &             &    "*       (         D      >          *                                      $                <\ <                          EdHak 3.01 -- Released June 19, 1993 Clear Thinking 2753 Plymouth Rd, Suite 137 Ann Arbor, MI 48105 USA ======================================================================= Beginning way back with EdHak 2.1 in early 1991, EdHak has been distributed only as a commercial product and NOT as shareware or PD. Beginning with version 2.30 the price of EdHak became $29.95 US. Upgrades from any version 2.30 - 2.37 are $10.00, and upgrades from any version prior to 2.30 are $15.00. Note that any version numbers with a letter on the end, such as 3.0A are beta test versions only (i.e., 3.0B was earlier than the final release version of 3.00). If you wish to share EdHak with friends or upload it to BBS's, you should use the DEMO version, which is named EDHAK3DM.ACC and is in the FREEWARE folder on your disk along with a text file that must go with it. Also note that your disk also has a new version of Diary, the handy note taker, that is written totally in assembly language and takes up VERY little RAM. If your disk has both ACC and PRG versions of EdHak, they are exactly the same except for the name. If your disk has only the ACC version, you can create a PRG version just by copying or renaming it to EDHAK.PRG. On the subject of naming, note that to operate as the editor for QuickCIS (CompuServe navigator), EDHAK must be named simply as EDHAK.ACC at boot time, since that is the name QuickCIS looks for in the part of memory that keeps track of what programs are running. If you are upgrading from a version of EdHak prior to 2.30, please note that you will need to save a new 958 byte config file, rather than the old 910 byte one. If you have macros you want to switch over to the new config file, you can just load your old cfg file into EdHak, mark each macro as a block and save it to a function key with Ctl-Funkey. Then don't forget to save your new config from the config menu. If you run into any compatibility problems, we are very interested in hearing about them (and any solutions), so don't hesitate to write or e-mail. If you are a programmer in need of a text editor for your users from within your software, read OFFER.TXT in the INFO folder on your disk. Something else on your disk are two files that might come in handy for understanding and dealing with non-text or non-ascii files, disk sectors, and RAM. The ASCII256.DAT and 256SYMS.DAT files list all 256 characters including both their decimal and hexadecimal values. These can be used for reference or for copying special characters into a document if you only know what the characters looks like and don't know the character value. ======================================================================= Documentation of EdHak Changes Since EdHak 2.37... *** What version 3.01 fixes in 3.00 *** You can exit the block number dialog (the thing where you get to pick buffer size or part of file to load) by hitting Return, as it should be. In TOS 1.0 (or when running in MultiDesk) if you use the menu to go to the config screen, you now don't instantly skip over the first screen. With a column block marked, the highlighting now never goes beyond the edge of the window. Not exactly a bug fix, but an improved feature: When doing a block shift left (Ctl-Space), the block now remains highlighted for easy multiple shifts. ************************************************* ** ** ** EdHak VERSION 3.0 Released June 13, 1993 ** ** ** ************************************************* Fully MultiTOS/Falcon TOS compatible; Allow "kwiksend" from PRG (only useful for MultiTOS); CAUTION: If no window open to receive keystrokes, they may be taken as key commands if running with NewDesk!!!!! Fully resizable/movable window; Can now move window off bottom and right edges of screen; Horiz Scroll Bar; Horiz scroll while typing only shifts 10 cols, instead of full window; Greatly expanded Block handling options: Added Column (rectangular) block operations; Alt-Click-Drag or Shift-F2 Note that when mousing, you must drag top left to bottom right, and the bottom right corner of the block must have text there, so you may need to add spaces to the last line of the block if it is shorter than the desired block width. Shift block right (insert spaces in first column); Shift-SpaceBar Shift block left (delete first column); Ctl-SpaceBar Quote block (insert '>' in first column); Alt-SpaceBar Added block Copy function; Any block operation can be done to/from pastebuffer or clipboard; F4 Cuts any kind of block to pastebuffer Shift-F4 Copies any kind of block to pastebuffer F5 Pastes normal block from pastebuffer Shift-F5 Pastes column block from pastebuffer F7 Cuts any kind of block to clipboard Shift-F7 Copies any kind of block to clipboard F8 Pastes normal block from clipboard Shift-F8 Pastes column block from clipboard Added full Block handling drop-down menu (default if block selected); Merge & Save block no longer require clipboard dialog; Additional Help screen just for all the block functions; Use any of the 3 system font sizes in most resolutions; Shift-Alt-F lets you pick font size Alt-plus increases font size Alt-minus decreases font size Enhanced Scrolling to data outside edit buffer; No alert box when shifting buffer contents of files bigger than buffer; If pastebuffer in use when shifting, gives option to save to clipboard; Easy scrolling to prior/later sections of Disk Sectors; Easy scrolling to prior/later sections of RAM; Enhanced text Macro operation; Pick macro directly from display with mouse or function key; Allow nulls in macros (last byte of macro stores macro size); Cursor is set to end of macro after insertion; Allow saving buffer=>ram block to any ram address (not just 1K boundaries); Limit how much scrolling will happen after releasing arrow key; Show user any truncation of typed-in value in blocknumber dialog; More informative alert if user fills buffer; Alert for bad save of config; Old bugs fixed: Retain mouse when attempt writing to write-protected disk; Fix typing past right edge of window in overwrite mode; Fix saving buffer => ram (did not work in 2.3x); Fix setting text to bottom of window for extended lines; ======================================================================= Changes in version 2.3 after the manual was printed New for EdHak version 2.37 15 Oct 1992 -------------------------- 1) First version distributed in Europe by Douglas Communications. 2) Fixes the lock-up that would occur if you tried saving a marked block to disk sectors (i.e., no filename). 3) Fixes the commands "Date insert" and "Insert bytes" which if done from the menu immediately after hitting the Return key would just insert a number of carriage returns instead of the desired text. 4) Add a linefeed after the carriage return sent at the end of any output to the printer (parallel) or modem (serial) ports. 5) Omit sending the carriage return that was sent at the end of any output to the midi port. New for EdHak version 2.36 04 Aug 1992 -------------------------- This just fixes a little bug in the "Kwiksend" code (command Alt-K) that could cause a crash when used with certain programs. Many thanks to Keith Gerdes for finding the exact fix that was needed (and Vince Patricelli for getting Keith to do it). New for EdHak version 2.35 28 Jun 1992 -------------------------- This fixes a number of bugs introduced in 2.34 and some other earlier bugs. It also adds a couple little features. This version is now recommended for any version of TOS, from 1.0 through 3.06. 1) The EdHak menu no longer drops down when EdHak is not the top window; A side effect of this fix is that moving the mouse quickly enough over the Menu button now doesn't drop down the menu at all. 2) Fixed cursor residue left after closing acc window; 3) Fixed redraw sometimes not happening after topping EdHak window; 4) Fixed double-scrolling of 2.34 in all TOS's; NOTE: This fix had a nice side effect -- In TOS 1.0 & 1.2 you can now have continuous scrolling by doing a somewhat slow double-click in the scroll bar and holding down the 2nd click. 5) Fixed Help screens for low/med resolution (results in minor spacing weirdnesses in mono, but now everything is legible in all resolutions); 6) Fixed check for write-protected file on save; 7) Got rid of some redundant Read & Write alerts; 8) Fixed setting & displaying buffer sizes larger than 1 megabyte; 9) Allow bypassing the setting of clipboard on block save/merge; 10) Fixed disappearing Menu button after Setclipboard call; 11) Fixed disappearing Menu button when cancel Launch; 12) Fixed crashing when failed to Launch program; NOTE: I discovered that after successfully Launching a prg from EdHak.ACC and returning to EdHak, the desktop menu bar is no longer active. However, your machine is NOT locked up. As soon as you close EdHak and run any program, the menu bar is once again active. This problem does not occur when Launching from EdHak running as a PRG. 12) Changed (hopefully fixed) Kwiksend to not lose mouse and to work with Calamus; 13) Fixed once again the minor window drawing weirdnesses when opening EdHak from Flash. 14) Now allows STalker's 'Invoke STeno' command to invoke EdHak, when you have configured STalker to capture to EdHak. Remaining known bug: When inserting into the last line of a paragraph, and there are multiple spaces at the end of the line, each automatic word wrap results in the insertion of an extra blank line. When inserting into any other line of a paragraph, multiple spaces at the end of a line get condensed into a single space if automatic word wrap occurs. New for EdHak version 2.34 21 May 1992 -------------------------- 1) This version is only meant for those of you using TOS 2.06 or 3.06. Atari went and changed something in these versions of TOS that requires an ACC using scroll bars to include a GEM timer event. The inclusion of this timer event has certain undesirable side-effects for other versions of TOS -- namely having single clicks in the scroll bar interpreted as two clicks about 50% of the time. Therefore, this version is ARC'd to fit on the disk and discourage use of it by anyone without TOS 2.06/3.06 New for EdHak version 2.33 10 April 1992 -------------------------- 1) Fixed a bug introduced in 2.30 that made it so there was no error message when saving a file to a full disk. 2) You can now abort while searching a file larger than the buffer, including searching during the initial opening of the file. This is done with either Escape or Undo. 3) For use with QuickCIS, exiting EdHak by methods other than Alt-X or shift-Alt-X (namely Alt-Q, menu:Quit or clicking on window Closebutton) are now clearly defined to act like a 'normal' exit, whereas before they could sometimes act like an 'alternate' exit produced by shift-Alt-X. Last Words ---------- And now for the disclaimer: This software and documentation have no warranty of anything (unless of course the disk or a file on it is bad, in which case Clear Thinking will gladly provide a replacement). You use it at your own risk. Since it can not possibly be checked out with every hardware and software combination in existence, we can only offer to try to fix any bugs that you find and report. Finally, many many thanks to all the users who have supported the continued development of EdHak and Diary with shareware registrations, retail purchases, bug reports, wish lists, helpful information, and friendly communication. EdHak and Diary copyright (c) 1990-1993 by: Clear Thinking Author: Craig A. Harvey new address as of Jan 1993: Clear Thinking 2753 Plymouth Rd, Suite 137 Ann Arbor, MI 48105 USA GEnie e-mail: c.harvey GEnie EdHak/Diary support area: CATegory 2, TOPic 40 CompuServe e-mail: 73047,600 Modem (Clear Thinking BBS): 313-971-6035 3/12/2400 Fax: 313-761-3299 (NOTE: You must write the following voice number on any fax sent to me so I will be notified of it.) Voice: 313-971-8671 (non-business hours are best) . !&.. RIPLAY APP k'6gRIPLAY RSC 4cA`Pb?AON+|_xa>쐭xaC/-x?<HNA\+@| <PЭ|+@a>aCXp"<aIpa/;@0-f4Ec!pa=J/ Ca/pa>C"a/pa>zC(a/BBp+@Bp+@pa,pa0lr(f -a,+A+B+C+D+@*-(-&-$-pra1l -,-*-(-vt"-a+0- "-a++@0-Hf^Ecmp%a9/Ecpa9r"_ta./ Aa p2-H maK -,-*-(-vt"-a+R0- Hf 0-&H maJ @ a(C.a.zA4a=a+@Ecpa9X/Ecpa9Jr"_ta-~/ Aa  <r4<Aa"gh+m <r4<Aa.g SNV` RNV+mp+@NV0-&H maJ, @/ -aa"a#V -,-*-(-vt"-a&.0-Hf0- H maE @/p0a4"a#0-"H maE @/0<34a4"a"0-$H maE @/p0a4"a"Bp"+@Bp+@0-&H maER @/p1a4"a" -,-*-(-vt"-a%v0-Hf0- H maE @/p0a4>"a"V0-"H maD @/p6a4 "a"80-$H maD @/p2a4"a"Bp+@p+@B0-&H maD @/p0a3"a! -,-*-(-vt"-a$0-Hf0- H maDT @/p0a3"a!0-"H maD6 @/p8a3j"a!0-$H maD @/p4a3L"a!dBp+@p+@B0-&H maC @/p0a3"a!2 -,-*-(-vt"-a$ 0-Hf0- H maC @/p0a2"a 0-"H maC @/p4a2"a 0-$H maCb @/p0a2"a Bp+@Bp+@0-&H maC0 @/p1a2d"a | -,-*-(-vt"-a#T0-Hf0- H maB @/p0a2"a 40-"H maB @/p6a1"a 0-$H maB @/p2a1"aBp+@p+@B0-&H maBz @/p0a1"a -,-*-(-vt"-a"0-Hf0- H maB2 @/0<-1a1n"a|0-"H maB @/0<-1a1N"a\0-$H maA @/0<-1a1."apa8pra2xNpra2jp2-H ma>F -,-*-(-vt"-aa0-HfACa&+A0-HYAa.Np\a"HAaC:a!A:aJVHH/ -VHHg`0-&H ma= @/ -a "a/"a pfBB+m̀NVp+@p+@0- H ma=v @ aC@a! 0-$H ma=X @ aC4a 0-"H ma=: @ arCFa 0-&H ma= @ aTC.a A@a/a +@AFa/a+@A4a/a+@A.a/a+@+m+m+m+mA:rapa'+@x -|A:a=NpaTp+@NpfNVp2-H ma

-x m!H -Э|Aa-f -0|t0p0|t0B -0| t -p mt0 -|0|t pЭt+@ mNpfpЭt0| `lvpt ra6pa2dvpt ra6pa2Rvpt ra6pa2@vptra6,pa2.vptra6pa2vptra6pa2 p"<a1/-?< NA\NuB?< NA\+@pa&Fpeaapp0| <a +@p 0| <a +@p 0| <a+@plp+@plp+@plp+@a+pra1pЭD/p a%"a'a -Ѐ/p-a%"a'xapЭD/p a%"a'^apra12pЭD/p a%`"a'0rHGGdHGGdSWDуdi?<>0rHGGdHGGdSWDуdi2?<>0rHGGdHGGdSWDуd&2 H@kփAр[SBkփejRAd RdQRBJjDBNutNuCEdSW`?<,>CEdGeH@0r`fJCgz?<0rÐdSWЃdi?<0rÐdSWЃdid?<0ÐdSWЃd&2 H@kփAр[SBkփejRAd RdQRBJjDBNutNu?<0riP?0i?`?<`fpapEgggPg`LJg&B.C`a8aD*9gfap-I4=|p4aHz*9gg ENp9g` _a &nO:NMgIKfr$<Nu[1][Error +111][Return]Efp g g>Jf`Ar Hjr-D@Hd0H@H 0H@0CNuAJ"H [1][fSEfNu`HQ?< NA\Nu"_KfrMg V,@IO:HQ <-H,,`N,d d3 d# d# # d# # # # d ALH dAL H LH d AL`H L|0H>L|H>d~# # # # A`@ALH L|H>L|H>L|PH>L| H>L|H>L|H>L|H>L|`H>L|0H>L|H>QL|Nu$H$&"BA -K aXA$f B &n NuH>dd2d"d""d""""d LHC dLHLH C@d LHL|H| L|H|PCd~""""C`:LHL|H| L|H|PL|H|L|H|L|H|L|H|L|H|@L|H|pL|H|L|H|CQL|Nua`Vp?a a?<LNA``NuNu`aza`aaaHA"-Hpp alpMah=@N?<NNTT@A0r p0Q`pdr ta0.N=@=@ ACp,2QAp 2Qa Va`\``pea>pCZ2Ad0A2r22ab"<$0<NBL Nurt=@B=AH=BDa"<$psNB0.Nu=@0=@=B0=@a"<$psNBNuC2 @ e$ @bA0AP2r22a"<$0<NBLJNup"AJӘQNuA> NuHz(` N$Hz ?<&NN\Nu9LgNuWLNuf  Zf 4\B&0D4(*<B$,>2::(   F..26"8@"PQ1!P1P!0PP`0  q#aaa a O: n,N`t`NuNuNupc?a0QNurdAd6Ag,B(dB(dH Ao<aZtoBAp`NuNu?<OA`d?<IA`Z0<H IaLt Ig Og Ug Ag Rg,afNup`ap`D0a`fHRaz>Er$Wgr STD:gr COM:g r LPT:f4FA$_0=@Hk"~CA0< BhaB2"pNu$_AJ Ge><QBAJpNuafgzp=` aZgzpaTaRFBd&8*L?aT<aSF Be BgQRB`RAdR e <rRF&0xaCٱfEv+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`HQ2.l Aeg>r C 5e&!R 0c 9c0`<R"_`VC0 Ef"_Nuaa/ CJr  g 00VJAgB @ nN @mHJ@j0.4DBUBk0QSAg Q.`S@k 0`0BAJ "_Nu.WAkQA 0g`prt|P=Q<  g +g -f .g40  b 0e 9b da6`RF` .f 0e 9b daSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`ZJjDDDS4<.aFJFkSFk4arQa2`&HaFFaZQ&8*L/a,H܆jDBJ. _aG` VNuag`af`ae `ac` acpNuadpNu/ a$I> _az4Ae4v` VfANuHP0(R@kBa` $I _aHIUd4Id4Id$Id `$$$$Q @JfNuNup `a SAfNuag`af`ae `ac` acpNuadpNuaSAkfJANuH HPhkJa $I _aIUd4Id4Id$Id `$$$$Q @JgSL`QNup `ajAf` VNuag`af`ae `ac` acpNuadpNua04@m4v` Vf@Nu|H`|i`|l@H~`ze`z`zd@H>`th`tpa ".Nutj`t@H`rk` rf`rg`r5=@0`~*@-AH`~t)`t` tr`t2`t@-A=B`^HAHBHCHDHEHFHG-HfAN-HH@-@Hp`0rAN-@f-H `r6 @`0.jHNupNuHP"X2AJ-H AerQBp|a`rHpx`6H$X4 Y0CJ @depdQBC B2et2QBpZAJ-HA-HaA"HJfS  _a fAa"QAJ"HJfS  _a FAJ`QLJ@NuBp'rta n4rt6(SC0(S@apaBdpapava0pa _a 4$FAJp_@[000][vx`* [g" ]g |g QSx` xQSrQ][vx`* [g" ]g |g QSx` xQStQ]BAJ0-H4=@p4a2HNua 2`QNuHg"cc/ 0)a  _$PS@kH2QNu2(g$PRAA4DBH%$Y2Pg 1AHRAA%NuBhNupLANavH^BnLL4Hd"aZHd"aRHd"aJHd"aBHdF n Ng"`.2.TWAARA0.V n.g hfRAS@f=AL"aNug//ANu@k AL00HNuX@g .NuAN Nuz`zA@C|IdXC(|2:H<0`$6HpA<`A8p` AH`A4p4. g=BNuaa "p-@$-@0-@<-@H=|TpraHX:DH(hKLCDH`AN0 1PP1P1PA(L?X<@>AFGH 0000X0000X0000HSG$~2gtLx0a* Q&_NuSAkA> A$1@H<`Lp`Ha-_dNuBJAgLXDEFbGb?H`aL0S@k@> A$PN"G0(JgRJ)@g1@2fJ2HPL<X0a W1@A00 pia=|@pia _C""pe`,?4<6HPa. _2tLx0a=n=| piav0.2pa(HhHdPhPHSCSDABH0`S@k@ A$=pfNup?a0QLa`S@k.@ A$0gBP=@apgap aJ@fhpabQhLR@RAHhBdLrt`fNuHS&I. FVi8.:.L4.RBĴ@cBnaL4.RBŴAcJSA=A`@pJ.ifrJk8 Eg,2. pg  qfL=A=Apjrta^`8a>`2 d. Vg" gt gZ gn fPSnjBn`D=@0.nd=@0.R@S@nf=@prtaRn0neBna(Q>j4&_NuBn`?<HyNM\`Rn<SFEneSn`2NuS@kD@ A$C0g.?a$=_p 2.aL6Fgavp `p`p`NuBS@kl@ A$=Pap=| phaL`4p-@"<$&HA-HP-HTBnpmrt`Hz ?<&NN\Nu n4MJFo`JGo\H 8N-@-@ p-@*-@-@ H0H00(L=B=B&=CC=C=C$tBft=B=B(NuaHz ?<&NN\NuL n4M(8N-D-D x-D*-D| J@jpJAjrRBhe4(RChe6(@otAop=@=@NAXOJkpNu0< aH`0< CJ2p`p a2`p CJp`a CJ"p`Hza`Hy;"J`B.D=|HNua.DFpAR@C` @H` @HHy;ajaX"H`vHy;`Hy; 24`@H` @HHy;a2a "Hav`:Hy;`Hy; 24`B.D=|HNuB.Da`=GHgNup`0.D<.HAx$I"t Q k"RGef~`SG * g *fSG`<.HjZ\FkBJnhg Fgd Fg^HS&I.aQ`p???<NM\Qj&_NuHQ/?4(g8HP b6 a$_// Z4HQ`S@Q _Q _a _Nua`*p`8AJtЀvQBNuAJt0 9c^QBNuAJt 0QBNua`a`aCJ 0gS JfS`J@a Acr `@a A cr `@a\ A cr `N*z$H`lHa@LHP?.l=hlN*z=_l2 "@$Y4Ad2`0Q @Nu@`r ??a"P02R@H`2Q Nu?AJBHP?<GNAPAJ `aaJjtNuaHPa pJk NuCg.BJ@g  g &g, $g %gN+NutNuRpt`2Rpt`Rptr ae OgX Xgn HgSRB ae Fb$0k  c_  c b退`tSHkaNuRB0 b b瀀`RB0 fрd`H=H=@p3`$ a Nua`a`a`]A=AHNua`a`la`=AaA09Ry΀H@@-HtBe2QB p#`a |A((@؆*.(|؆k̚D`(a,k..$*B(.(؅k-K BgHx?<DNAPJk//.Bg?<JNAO JgNu/.?<INA\/?<HNA\JgB n$"n(ۮ(ۮ$$I`&bۛp0R@@b&n CXbv`> .(/?<HNA\p=``?<%NNTNuH XXHPa/ oH!_ LxNu/LNuBnz`pBnz`p=| z|=Fx@=@l=nh|a`Ht=Ar~`:a JfBH@ RfF.p Kg" Mg sg tg Pg Hf~`xSGjtRGFcn>`jAJ gp gj g grffnnzenlfJ.pj6pRGFc$SG` J.pjpRGFcRF` Ff`> `?~ap a0p a*0Nu|``CpE`bf`FgRGJGgSGSFFgCpE`Yf`Nua@Jf gH@ fa(@ fza0 b @ Ee0Nua"gNu4.|f?HyaNM\Nu=|H`LtazEfpadppa`AJEg0PaEfaFRE`ܾEfp a@a8?nxnp a2RF`<atnxoS@f nrfSnv=Ar=FxNup` papq4.|f?HyaNM\Nu=|HHaLNu|A0"P2(@e2<EJ`QHP=|HJ@g$abAJ$HpR@ 0 f _a`QNuHPp?ap a _2<|0`C&pHQ/Hy@NA NuC pa:NuHQ/Hy?NA Nu&g4 FgaHgJAga2< R@AdSf0Nu0a6p Ce`&g4 FgaJBjagPAe CbRa R@Sf0Nu FgRag JBjaְAeaJAg RP0 pNu`^ Fg6agJAga @eaRP Nup NHѨB?<?/?<BNAO JkLLNu&8a.JBjaFJAg Df*ڃkd0Nu DfրBH??/?<BNAO LJk!@NuHBHh Hx??<?NAO LJo ѨLNuk:fp`^k: g ѨNuBHPHQ/??<?NAO _JoѨfNuBHPHQS/??<@NAXLfѨNuJkp%`Hz` Hz`Hz&$A?<&NN\NuNu4Nu$Nu(af؀.nfaXjNu?a0` ?a2@@a` a Nu4.hAf n4LR@RANu4.hg S@SAHNutbpbr??pavpYap0aj0`dpt`pt@S@kZ@Hap8L6BPAN E$=Z=A-H: DNexMQBB*gJnfNuC`C``C` C`C-K JhfJfRRRRRRRHP? @CJH~8:E#P&<2 `b$bYEf`"RAf rЁЀ`&Ѐe "ЀeЁdp`@JAkfgRer?DDЁaAaԞ8$HX :CJE` YEjT"_$P"2trDDd0d d d` QjNu`ѬaDa DNu na^ K"ng42 $`gk2&Hg Af deђ$`ebѐXf&n Nu AgebѐA``-K x$ n($n$"HgD" &Akc(bѐ S`g(" k#&Ac(bё2+SAI3 Q&f-I$&n Nu-K x$&ր n($n$"Hg^" k&Ac(b b S` S`g:" k#&Ac(bbrkX`ؑ2+SAI3 Q&f-I$&n Nu   AgSA ANua@`H"a`BaB@(` aBC(@HAC&21i0d R@`aBHP?< NN\Nu0^ M / hawFAN`RAD0C?0FA0A ff fA"H"2"2"2`Ba!@ NuAANua1 Nut`t`t`t`t`t `t`t`t`t`a ( Nua Nu@@Nura00HNur`r`r`r`r `r`r`r`r`zQ`z ` zn`z4=Aa-IHQB0ap _JNuz"-A=Ban-I`#OHrYavpYaLapY` 9O/rYaDpYa Hyp?o?<?NAO JkpY`/a `;(`JHA Pf a`"C0<zRQQfBQ zNLNHAlC2#x fAN2APBPAz Pf4 zraNu|.E j.-j^]j` H|~C NE zS)di$rS1j4BB&q v<fa>`g <``gN<?<2e$<2K(i*&֑$Nq!5T|,`J*,g B*,8C(i 640֑$`B1a>f# E0RA|f^EC~vraE0RA|faL~>NuJ*,gF|.8KJ- 8< ĈK |C0%(R9| 508Nu(RK Xx, u@.KBB|,f(l8VD gg  ,ggl`$<>D ,<jB`<oxDl&B*%l)g:l', <f ,E(`|(J,f|(<fD*( ,gN, D|J, g8l ,<<f, ` zJ,fzEDE<fD*z, 5Eg,l , <<fE`,RE<fDE5EJlf|c$`$l$z,REBj fDE5l 5E" ,fn,gl*`28,j< k` <%e< `Kb5@,fD*Kf< z,g$8<EC0HD5D`Kf< C5u0M f5| `8lxzkEC|o:5P@ TD<f5@ g| ,f, Cg8l ,<<fC`|J,f|<fD*KPl +,|;0lM@|,f,f@ f8FNu8D m B.RDB.SDj RDj CFNu JgJ*,g&R4*| kd8`&R4B +gJ+ g S*bahS*dk*30jhS*kV+ <*B*+fkgVAWAgBj f5k B*%kB*`B*|`@+g,<d`gVAWA` VAWA<CR**J*k**jvJ+ g S*da&S*d8k*5r0J+gJgS*J*gT< r0fvC8*J*$nfj `j j+ Cjx` |o8<3D  Jkg S*$dat+f*J+g$S*d+g`B*VW` *gJ+gPS*'bJk'*)+*(j+ <fvD*(`o+ <fD*(`vC)*g*%`*%*)+jv<o<C+<?g"S*&dB*&+<?*%RoD% 1f0J+ g S*+dB1NuJ+ gS*ba***+ C Nuk**+ o+< fD*`v`Jj<fD*v`CNuB*$8* j"jx` :+Eo85D NuB*+ <<fk:*j+ CCo<fDj:`zJEj<fDjz`:5EvNuk**j+<<fD*D`+ + o<fD***`vCvNuv)S)fRC(i 40fvt0CCCBiB)(Q*ix#L#L#L NuEGI@|B<J,,gR`    FNu N 1 jbw GGp1S$~Z8{fR?- wqjd_YTPKGC?;9520-*(&#!  @@@` `@ `P@0 xpld`XTPLHD@<8620,*(&$" xpld`XTPLHD@<8620,*(&$" =yrlf`[VQLHD@=963     PLAYPLAY THE YM2149 IS ACTIVE... RISK 1992 BUMBUMPLEASE START AS .ACC ! RISKPLAYER V1.2b\RIPLAY.RSCWHERE IS MY RIPLAY.RSC ??YEAH. IT WAS CODED | IN 25 HOURS. ? WANNA HEAR NEXT OR PREVIOUS ? PREVIOS|CANCEL|NEXTSOMETHING TO TELL YA. RISKPLAYER V1.2b(ugfree?) FILE : LENGTH : WORKS ON ST/E, TT (FALCON, C64?) MAIN CODE : TOBIAS BONNKE (DANNY O.) UPDATES, BUGRESEARCH, ADDITIONAL CODE & TIMER ROUT : JEAN - PIERRE PUTZOLU (SEPP JO.)YA KNOW US ? GREETINX TO ALL MEMBERS OF - THE INDEPENDENT - ANIMAL MINE, AURA AVENGERS, CHANNEL 38, LAZER, MUGWUMPS AND NEWLINE A VERY SPECIAL HI TO : SYNERGY, SENTRY, DBA, TOS-CREW MEGA 4, SANITY, N.P.G., LIGHT INTER, THE DIGITAL DEVELOPMENT, ELECTRONIC IMAGES, NEW TREND, HOTLINE AND ALLMOST ALL OTHER COOL CREWS.HAS BRANO BRA INIT : | PLAY : | EXIT : PLAY | QUIT | EXIT  `4Z zzzv   (t  ,&&&& *~ f`((@4tL$0J(DDD$DMAD MAXWHITTAKERCOUNT ZEROGALACTICMEGATIZERSYNERGYTAOLOADTRISOUNDLAP OLDPLAYSTOPSONG NR.INFOLAPOKAY>>FAST>>50 HZ66.6 HZGREETINXRISKPLAYER V1.2bRISKPLAYER V1.2b100 HZ200 HZ____INIT : ____9999____PLAY : ____9999____EXIT : ____9999____SONG : ____XXXX  ( -2>  $Q$Q,Q6QAQJ QT Q\  A`  Qe  Qn Av   A{ A  A  QGA  AAA D`A A |   (