Adjust $trng table */ { *sptr++=*eptr++; } while (eptr!=dptr); dptr-=d; for (j=i+1;j' && d=='>')) && e=='=') b+=2; else if (c=='.' && d=='.' && e=='.') b+=2; else if (d=='=' && findchar("-+<>=!*/%&^|",c)) /* All ops ending = */ ++b; else if (c=='-' && (d=='>' || d=='-')) ++b; else if ((c=='+' && d=='+') || (c=='<' && d=='<') || (c=='>' && d=='>')) ++b; else if ((c=='&' && d=='&') || (c=='|' && d=='|') || (c=='#' && d=='#')) ++b; else if(!findchar("()[].!~+-*&/%<>^|?:=,{};#",c)) return ERROR; /* fprintf(stderr,"TOKOPR: (final) b=%d\n",b); */ return b; } toknum(ln,lnptr) char *ln,*lnptr; { if (*lnptr=='.') /* screen out . as a struct operator */ if (lnptr>ln && (IDNT_TYPE((*(lnptr-1))))) return (++lnptr-ln); for (;;) { do { ++lnptr; } while (isalnum(*lnptr) || *lnptr=='.'); if ((*lnptr!='+' && *lnptr!='-') || (*(lnptr-1)!='E' && *(lnptr-1)!='e')) return (lnptr-ln); } } initstdefs() { defnam[0]="__LINE__ "; defnam[1]="__FILE__ "; defnam[2]="__DATE__ "; defnam[3]="__TIME__ "; defnam[4]="__LINE__ "; /* blank out STDC slot unless ANSI selected */ defarg[0]=NULL; defarg[1]=NULL; defarg[2]=NULL; defarg[3]=NULL; defarg[4]=NULL; deftok[0]=NULL; deftok[1]=NULL; deftok[2]=_date_; deftok[3]=_time_; deftok[4]="1"; /* Indicates ANSI compatible */ } cncatstr(ln) char *ln; { int b; while (b=findstr(1,ln,"\" \"")) strcpy(&ln[b-1],&ln[b+2]); } L44AF cmpa #$23 bne L44A6 lbsr L4581 bra ]$+ ,#include "cp.h" gettoken(ln,b) /* b=pos (0-...) to search ln; assumes b points to 1st */ char *ln; /* char of token (no error chking except EOL) */ int b; /* ln=search $tring */ { /* Returns last char. pos of token (offset from ln) */ int i; /* or ERROR (-1) if b is out of range */ register char *lnptr; lnptr=&ln[b]; if (b>=strlen(ln)) /* prevent starting at end of line */ return ERROR; /* b is outside ln range */ if (i=findchar(lnptr,' ')) /* token terminated w/space */ return i-2+b; return (strlen(ln)-1); /* token terminated by NULL */ } toksrch(ln,tk,pv,kv,bv,b,tcnt) /* Searches for specified token under */ char *ln,*tk; /* specified conditions. */ int pv,kv,bv,b,*tcnt; /* ln = search $tring tk = token to search for */ { /* pv,kv,bv = (),[],{} cntrs (++/-- for open/close */ int c,d,mflag; /* b = start pos of srch (0-...) must be 1st char */ int pcnt,kcnt,bcnt; /* of token (no error chking) */ register char *lnptr; /* pv,kv,bv must match pcnt,kcnt,bcnt for exit */ /* also tk must match current token for exit */ *tcnt=0; /* If pv,kv or bv = 99 then that flag can have any */ pcnt=kcnt=bcnt=0; /* value upon exit (i.e. wildcard) */ do /* Returns pos of first char in token or -1 (fails) */ { mflag=0; /* no match */ /* fprintf(stderr,"TOKSRCH: b4 gettoken\n"); */ if ((c=gettoken(ln,b))==ERROR) return ERROR; /* no match */ ++*tcnt; /* inc token counter */ lnptr=&ln[b]; if (!strncmp(lnptr,tk,max(c-b+1,strlen(tk)))) ++mflag; /* token match found */ if (c==b) /* token only 1 char */ { if (*lnptr=='(') ++pcnt; else if (*lnptr==')') --pcnt; else if (*lnptr=='[') ++kcnt; else if (*lnptr==']') --kcnt; else if (*lnptr=='{') ++bcnt; else if (*lnptr=='}') --bcnt; } d=b; /* save first char of token */ b=c+2; /* point to next token */ if (pv==99) /* if any of these are 99 they automatically match */ pcnt=99; if (kv==99) kcnt=99; if (bv==99) bcnt=99; } while (!mflag || pcnt!=pv || kcnt!=kv || bcnt!=bv); return d; /* return pos of first letter in token */ } tstargs(i) /* count # of args for defargs[i] */ int i; { char *ptr; int b; b=0; ptr=defarg[i]; while (*ptr) { if (*(ptr++)==' ') ++b; /* # of spaces = # of args */ } /* fprintf(stderr,"TSTARGS aft: defarg=|%s|\n",defarg[i]); fprintf(stderr,"TSTARGS aft: b=%d\n",b); */ return b; } addqmac(mac) /* Adds " to macro when # is found */ char *mac; { char buf[MAX_LENGTH],*bptr; register char *mptr; bptr=buf; mptr=mac; *(bptr++)='"'; while (*mptr) { if (*mptr=='\"' || *mptr=='\\') *(bptr++)='\\'; if (*mptr!=' ') *(bptr++)=*(mptr++); else { *(bptr++)=VTAB; /* convert spaces to VTAB */ ++mptr; } } *(bptr++)='\"'; *bptr=0; strcpy(mac,buf); } char *getoknum(tok,buf,num) /* Counts tokens in tok[] for token # num */ char *tok,*buf; /* and stores it in buf[]. Returns NULL */ int num; /* on failure to locate token # or will */ { /* return ptr to buf[] */ int b,c,i; /* num must be 1-... */ c=-2; i=0; if (num<=0) return NULL; /* token # out of range */ while (i++30) /* If identifier length is >31 ... */ d=b+30; /* set identifier lenght = 31 */ for (i=b;i<=d;++i) /* Put def name in $trng table */ { if (dptr<&dstrtbl[STRNG_TBL_MAX-2]) /* test $trng table */ *dptr++=line[i]; else doerr(5,i); /* $trng table full -- FATAL ERROR */ } *dptr++=' '; /* add ending space */ *dptr++=0; /* NULL terminate $trng */ } dodefine(a,b) /* Given B: pos. of char. after 1st space */ int a,b; /* This rtn places define parms into proper tables */ { /* for reading during macro expansion */ int c,d; /* Returns NULL if no errors */ if ((d=c=getident(line,b))==ERROR) /* Get identifier */ return (doerr(1,b)); /* Return if invalid identifier */ defnam[defcntr]=dptr; /* Put identifier addr in def name tbl */ putiddtbl(b,d); /* Put def name in $trng table */ /* fprintf(stderr,"DODEFINE: line[c+1]=|%c|\n",line[c+1]); fprintf(stderr,"DODEFINE: line=%s\n",line); */ if (line[c+1]=='(') /* if def is macro... */ { d=b=skpbl(line,c+2); /* Allign to 1st non-space char in macro */ if (line[b]!=')') /* if more than 0 arguments in macro */ { --b; defarg[defcntr]=dptr; do /* Scan argument format */ { /* fprintf(stderr,"DODEF (): b=|%d|\n",b); */ ++b; b=skpbl(line,b); /* fprintf(stderr,"DODEF (2): b=|%d|\n",b); */ if ((c=getident(line,b))==ERROR) /* Get identifier (args) */ return (doerr(2,b)); /* return if any args missing */ putdtbl(b,c); /* put args in $trng table */ /* fprintf(stderr,"DODEF (): dfarg=|%s|\n",defarg[defcntr]);*/ *(dptr-1)=' '; b=skpbl(line,c+1); /* Should now point at , or ) */ /* fprintf(stderr,"DODEF (3): b=|%d|\n",b); */ if (line[b]!=',' && line[b]!=')') /* If not ) or , error */ return (doerr(3,b)); /* so return */ } while (line[b]!=')'); *dptr++=0; /* fprintf(stderr,"DODEF: dfarg=|%s|\n",defarg[defcntr]); */ } else { if (dptr+5>=&dstrtbl[STRNG_TBL_MAX-1]) /* table overflow */ doerr(5,b); strcpy(--dptr,"( ) "); dptr+=5; defarg[defcntr]=NULL; /* 0 args in macro */ } } else /* define is not a macro */ { b=c; defarg[defcntr]=NULL; } if (line[b+1]=='\n') /* If EOL then define = 1 */ { line[b+1]=' '; line[b+2]='1'; /* This does not test LINE to see if it is full */ line[b+3]='\n'; } b+=2; /* locate 1st char of token-sequence */ c=rskpbl(line,a-1); /* locate last char of token-sequence */ deftok[defcntr++]=dptr; /* Put token addr in tok table */ putdtbl(b,c); /* Copy token into $trng table */ return NULL; /* No errors */ } prep() /* Check for preprocessor commands */ { int b,c; char *ln; ln=line; while(*(++ln)=='#' || *ln==' ') /* locate first directive character */ ; if (!*ln) /* NULL directive */ return (killine()); if (strcmp2(ln,"if ") || strcmp2(ln,"ifdef ") || strcmp2(ln,"ifndef ")) { doif(ln); return (killine()); } if (strcmp2(ln,"else")) { doelse(); return (killine()); } if (strcmp2(ln,"endif")) { doendif(); return (killine()); } if (strcmp2(ln,"elif ")) { doelif(ln); return (killine()); } if (procsw) { if (strcmp2(ln,"define ")) { c=getident(ln,7)+2; /* get end of identifier */ splittok(ln,c); /* tokenize rest of line */ dodefine(strlen(line),&ln[7]-line); /* store #define info */ /* fprintf(stderr,"PREP (after dodef): line=|%s|\n",line); */ tstdupdef(); /* Check for def duplication and fix */ return (killine()); /* Discard #define line */ } if (strcmp2(ln,"include ")) { doinclude(&ln[8]); /* open include file */ return (killine()); /* Discard #include line */ } if (strcmp2(ln,"undef ")) { doundef(&ln[6]); /* remove undef identifier from def table */ return (killine()); /* Discard #undef line */ } if (strcmp2(ln,"error ")) { fprintf(stderr,"User error - %s\n",&ln[6]); /* print error */ return (killine()); /* Discard #error line */ } if (strcmp2(ln,"asm")) { for (;;) /* send all following lines through for assembler */ { getln(0); if (eflag) break; if (findstr(1,line,"#endasm")!=NULL) break; if (cflag) puts("#2"); else printf("#pragma asm "); printf("%s\n",line); } if (eflag && cflag) /* error only in Microware mode (no #endasm)*/ doerr(18,1); return (killine()); } if (strcmp2(ln,"pragma ")) { dopragma(ln+7); return (killine()); } if (strcmp2(ln,"line ")) { doline(ln+5); return (killine()); } doerr(17,1); /* Illegal preprocessor directive */ return (killine()); } } dopragma(ln) char *ln; { if (strcmp2(ln,"asm ")) { if (cflag) puts("#2"); else printf("#pragma asm "); if (*(ln+4)=='*') /* removes label field null character */ *(ln+4)=' '; printf("%s\n",ln+4); return (killine()); } if (!cflag) printf("#pragma %s\n",ln); return (killine()); } doline(ln) char *ln; { char *lnptr, *fnptr; lnptr=ln-1; fnptr=ifnbuf[fptr]; splittok(lnptr,1); /* tokenize #line args */ expand(lnptr,NULL,NULL); /* expand any macro tokens */ _line_=atoi(++lnptr); /* set line number (no error checking) */ while (*(++lnptr)!=' ') /* get next argument */ ; if (*(++lnptr)=='"') /* if " then filename is loaded into ifnbuf */ while (*(++lnptr)!='"') *(fnptr++)=lnptr; printf("#line %s\n",ln); /* #line command is sent to compiler */ } clr >$098C lda >$32D3 in] % @&#include "cp.h" doif(ln) char *ln; { if (iflvl==MAX_NEST_IF) { doerr(15,ln-line); /* Too many nested #ifs */ return; } if (procsw) ifstat[++iflvl]=procsw=gettorf(ln); /* evaluate IF & return T or F */ else ifstat[++iflvl]=DEAD; /* unused #if */ ifnest[iflvl]=2; } doelse() { if (iflvl<0 || ifnest[iflvl]==1) { doerr(16,3); /* improper nesting */ return; } --ifnest[iflvl]; if (ifstat[iflvl]!=DEAD) procsw=ifstat[iflvl]=1-ifstat[iflvl]; /* flip T or F status */ } doendif() { if (iflvl<0) { doerr(16,3); /* nesting error */ return; } if (ifstat[--iflvl]!=DEAD) procsw=ifstat[iflvl]; } doelif(ln) char *ln; { if (iflvl<0 || ifnest[iflvl]==1) { doerr(16,ln-line); /* improper nesting */ return; } if (ifstat[iflvl]==TRUE) { ifstat[iflvl]=DEAD; procsw=FALSE; } if (ifstat[iflvl]==FALSE) procsw=ifstat[iflvl]=gettorf(ln); /* evaluate IF & return T or F */ ifnest[iflvl]=2; } gettorf(ln) register char *ln; { switch(ln[2]) { case 'd': /* ifdef */ splittok(ln,6); return dodef(ln,6); break; case 'n': /* ifndef */ splittok(ln,7); return (1-dodef(ln,7)); break; case 'i': /* elif */ return ifcalc(&ln[5]); /* process elif expression */ break; case ' ': /* if */ return ifcalc(&ln[3]); /* process if expression */ break; } } dodef(ln,b) char *ln; int b; { int i,tcnt; for (i=0;i ",ifnbuf[fptr],_line_-1); switch(code) { case 1: fprintf(stderr,"#define error - missing identifier"); break; case 2: fprintf(stderr,"#define error - missing arguments"); break; case 3: fprintf(stderr,"#define error - missing , or )"); break; case 4: fprintf(stderr,"#define error - missing space after args"); break; case 5: fprintf(stderr,"Compiler error - define $tring table full"); xflag=TRUE; break; case 6: fprintf(stderr,"#include error - bad file name"); break; case 7: fprintf(stderr,"Compiler error - include too deeply nested"); break; /* UNUSED ERRORS case 8: fprintf(stderr,"Compiler error - line too long"); xflag=TRUE; break; */ case 9: fprintf(stderr,"Syntax error - Missing >"); break; case 10: fprintf(stderr,"Warning - No end */"); break; case 11: fprintf(stderr,"Warning - Improper redefinition"); break; /* UNUSED case 12: exit(fprintf(stderr,"Syntax error - unmatched () or []")); break; */ case 13: fprintf(stderr,"Syntax error - macro syntax error"); break; case 14: fprintf(stderr,"Syntax error - wrong # of args"); break; case 15: fprintf(stderr,"Compiler error - too many nested #ifs"); break; case 16: fprintf(stderr,"Syntax error - #if nesting error"); break; case 17: fprintf(stderr,"Syntax error - Illegal # directive"); break; case 18: fprintf(stderr,"Syntax error - No #endasm"); xflag=TRUE; break; case 19: fprintf(stderr,"Syntax error - No end \" or \'"); break; case 20: fprintf(stderr,"Syntax error - Illegal escape sequence"); break; } fprintf(stderr," ***\n%s\n",line); /* for (i=0;i$32CD lda >$32CE ldu #$32C5 sta b,u puls b lda #$FF ldu #$31E5 sta b,u clra tfr d,x lbra L35A6 ] 5 6#define MAIN 1 #include "cp.h" #define ishex(x) ((x)>='0' && (x)<='9') || ((x)>='a' && (x)<='f') || ((x)>='A' && (x)<='F') #define isoctal(x) (x)>='0' && (x)<='7' char *qa1(); main(argc,argv) int argc; char *argv[]; { int a,b,i,namptr,triflag; char edition[5]; clock=time((long *)0); timdat=ctime(&clock); /* produce time/date string */ strncpy(_date_,&timdat[4],7); strncpy(&_date_[7],&timdat[20],4); _date_[11]=0; /* copy date string into _date_ */ strncpy(_time_,&timdat[11],8); _time_[8]=0; /* copy time string into _time_ */ initstdefs(); /* Initialize standard definitions */ edition[0]='0'; edition[1]=0; dptr=dstrtbl; /* Init $trng tbl ptr */ namptr=NULL; /* Init filename ptr to none */ triflag=FALSE; /* DEFAULT: no trigraph expansion */ for (i=1;i[=] */ strcpy(line,argv[i]+2); /* put def in line[] */ if (a=findchar(line,'=')) line[a-1]=' '; /* change = to space */ else strcat(line," 1"); /* if no tok-seq then set to 1 */ dodefine(strlen(line),0); /* Install def in tbl */ break; case 'c': /* Compiler select */ case 'C': cflag=TRUE; /* select Microware C compatible */ break; case 'e': /* Edition # */ case 'E': /* Format: -e[=] */ if (*(argv[i]+2)=='=') { strncpy(edition,argv[i]+3,4); edition[4]=0; } else { edition[0]='0'; edition[1]=0; } break; case 'l': /* Copy source to ASM output (Microware only) */ case 'L': lflag=TRUE; /* select Microware C compatible */ break; default: /* Illegal switch */ usage(); break; } } else if (!namptr) namptr=i; else usage(); /* Already have filename and not a switch */ } if (!namptr) { fpath[fptr]=0; /* if no filename given use stdin */ strcpy(ifnbuf[fptr],"stdin.c"); /* set default name */ } else if ((fpath[fptr]=open(argv[namptr],1))!=ERROR) strcpy(ifnbuf[fptr],argv[namptr]); /* store root file name */ else exit(_errmsg(errno,"Cannot open source file: %s\n",argv[namptr])); lnprint(3,edition); /* print root file #line info */ for (;;) /* Loop to process each file in IFNBUF[] */ { eflag=FALSE; /* set exit flag to no exit */ for (;;) /* Loop to process each line in current file */ { if (eflag) /* break if EOF */ break; if(!(a=getln(0))) /* Fill LINE[] up to CR or EOF */ { lnflag[1]=-1; /* cancel #line after current line */ lnflag[0]=_line_; /* print #line before next line */ continue; /* empty line */ } if (lflag) /* generate Microware codes to copy source lines */ { if (cflag) puts("#6"); /* for ASM output */ else printf("#pragma src"); printf("%s\n",line); } do { if (triflag) /* include trigraph expansion */ b=a=trigraph(a); else b=a; /* exclude trigraph expansion */ a=xtndln(a); } while (b!=a); wspace(); if (*line=='#' || line[1]=='#') a=prep(); /* Parse preprocessor commands */ if (a && procsw && tstline(a)) { splittok(line,0); /* Split non # line into tokens */ expand(line,NULL,0); cncatstr(line); /* Concatenate adjacent strings */ convert(VTAB,SPACE); lnprint(0,&lnflag[0]); printf("%s\n",line+1); lnprint(0,&lnflag[1]); } else { lnflag[1]=-1; /* cancel #line after current line */ lnflag[0]=_line_; /* print #line before next line */ } } if (!fptr) /* if root file end cprep */ break; close(fpath[fptr--]); /* close include file */ lnprint(2,NULL); /* print #line code to reallign to old file */ } } /* Get next line from input path up to CR or EOF. If EOF then eflag is TRUE. 'a' is the position in line[] to start reading in new input. Upon exit 'a' = position of null terminator in line[]. All lines end with a NULL, even if EOF occurs line is NULL terminated. CRs are stripped. The only exception is when an EOF occurs when a=0 then since no chars are waiting to be processed getln() exits. This is only rtn that sets eflag. If line exceeds line buffer length then fatal error occurs. */ getln(a) /* gets next line from input path, strips CR, and NULL */ int a; /* terminates */ { register char *lnptr; lnptr=&line[a]; /* fprintf(stderr,"fpath=%d errno=%d\n",fpath[fptr],errno);*/ if ((a=lnread(fpath[fptr],lnptr,LINEMAX-a))==ERROR) { eflag=TRUE; /* exit at next opportunity */ return NULL; /* EOF on blank line */ } ++_line_; /* fprintf(stderr,"a=%d line=|%s|\n",a,line); */ return a; /* returns number of bytes read */ } trigraph(a) int a; { int c,d; register int b; c=1; while (b=findstr(c,line,"??")) { if(d=gettri(line+b+1)) /* Get replacement char or zero if invalid */ { line[b-1]=d; /* Insert substitute char */ strcpy(&line[b],&line[b+2]); /* Append end of line */ a-=2; /* Adjust end of line ptr */ } c=b+1; /* set new search pos */ } return a; } gettri(b) /* Given b=addr of char after ?? in trigraph */ char *b; /* Returns substitution char or 0 if invalid */ { register int i; i=0; switch(*b) { case '=': i='#'; break; case '/': i='\\'; break; case '\'': i='^'; break; case '(': i='['; break; case ')': i=']'; break; case '!': i='|'; break; case '<': i='{'; break; case '>': i='}'; break; case '-': i='~'; break; } return i; } xtndln(a) /* concatenate lines ending in \ */ register int a; { if (line[a-1]=='\\') { if (eflag) /* if EOF */ line[--a]=0; /* Drop \ */ else { a=getln(--a); /* Drop \ and append next line */ lnflag[1]=_line_; /* set to print #line after line */ } } return a; } wspace() /* Shrink whitespace chars to single space */ { register char *b; b=line-1; while (*++b) { if (*b==LINEFEED || *b==FORMFEED || *b==VTAB || *b==HTAB) *b=' '; } cmnt(); /* strip comments */ } convert(x,y) /* convert all occurrences of x to y */ char x,y; /* Routine will fail to operate properly if x=y */ { register char *b; b=line-1; while(*++b) { if (*b==x) *b=y; } } cmnt() /* strip comments from line */ { char *b; b=line-1; /* point to start of line */ while (*++b) /* read until NULL terminator */ { fprintf(stderr,"CMNT: ln=|%s|\nb=|%s|\n",line,b); if (*b=='/') comm(b); /* Process comments */ else if (*b=='"') b=qa1('"',b); /* Process quotes */ else if (*b=='\'') b=qa1('\'',b); /* Process apostrophes */ else if (*b==' ') space(b); /* Reduce multiple spaces to one */ } } comm(b) char *b; { int a,c,d; if (*(b+1)=='*') /* found start of comment */ { *b=' '; /* Found comment line(s) replace with space */ if (c=findstr(3,b,"*/")) /* Cmnt ends on same line */ { fprintf(stderr,"COMM: ln=|%s|\n",line); strcpy(*(b+1),b+c+1); return b; } if (eflag) /* File ends with no end comment operator */ { *b--=0; _errmsg(0,"Warning ... No end comment '*/' terminator\n"); return b; } do /* comment ends on another line */ { if (eflag) /* EOF occurred */ break; a=getln(b-line+1); /* get nxt line */ } while ((c=findstr(1,line,"*/"))==NULL); lnflag[1]=-1; /* cancel #line after current line */ lnflag[0]=_line_; /* print #line before next line */ if (c) strcpy(*b+1,&line[c+1]); else b=line; do { d=a=trigraph(strlen(line)); a=xtndln(a); } while (d!=a); b-=2; /* Backup to catch double space situations */ } return b; } qa(ln,x,b) /* Searches ln for end " or ' depending on x */ char *ln,x; /* b = first " or ' */ int b; { register char *lnptr; lnptr=&ln[b]; while (*(++lnptr)!='\\' && *lnptr!=x && *lnptr) ; b=lnptr-ln; if (*lnptr=='\\') { lnptr=escseq(lnptr); b=qa(ln,x,lnptr-ln); /* skip to char after \ */ } else if (*lnptr!=x) { doerr(19,b); /* No end " or ' */ return b-1; } return b; } char *qa1(x,b) /* Searches ln for end " or ' depending on x */ char x,*b; /* b = first " or ' */ { register char *lnptr; while (*++b!='\\' && *b!=x && *b) ; if (*b=='\\') { b=escseq(b); b=qa1(x,b); /* skip to char after \ */ } else if (*b!=x) { doerr(19,b-line); /* No end " or ' */ return b-1; } return b; } qa2(ln,x,b) /* Searches ln for end " or ' depending on x */ char *ln,x; /* b = first " or ' Swaps VTAB for spaces */ int b; { register char *lnptr; lnptr=&ln[b]; while (*(++lnptr)!='\\' && *lnptr!=x && *lnptr) if (*lnptr==' ') *lnptr=VTAB; b=lnptr-ln; if (*lnptr=='\\') { lnptr=escseq(lnptr); /* bypass any escape sequences */ b=qa(ln,x,lnptr-ln); /* skip to char after \ */ } else if (*lnptr!=x) { doerr(19,b); return b-1; } return b; } space(b) /* shrink spaces to one */ char *b; { register char *cptr; cptr=b; while (*++cptr==' ') ; if (b!=cptr-1) { strcpy(b+1,cptr); } } tstline(a) int a; { return (skpbl(line,0)!=a); } usage() { fputs("Usage: cprep [-opt] \n\n",stderr); fputs("Options: -t Turn on trigraph expansion\n",stderr); fputs(" -d[=] defines name\n",stderr); fputs(" -c Emulates Microware c.prep line codes\n",stderr); fputs(" -h Prints this help message\n",stderr); fputs(" -e[=] edition #\n",stderr); fputs(" -l Copies source lines for ASM output\n",stderr); exit(0); } getident(ln,b) /* Given B: pos. of first char. in identifier */ char *ln; int b; /* Returns C: ERROR = invalid identifier or ## = pos of end */ { /* character in identifier */ register int c; c=b; if ((IDNT_INIT(ln[c]))==NULL) return ERROR; do { ++c; } while (IDNT_TYPE(ln[c])); return --c; } /* skpbl(ln,b) Given B: start pos. of blank search char *ln; int b; Returns B: pos. of first non-blank char. after spaces */ #asm skpbl: ldd 2,s (ln) addd 4,s (b) tfr d,x (ln[b]) SKPL0 ldb ,x+ cmpb #32 lbeq SKPL0 tfr x,d subd 2,s subd #1 puls pc #endasm rskpbl(ln,a) /* Given A: end pos. to start search */ char *ln; register int a; /* Returns A: pos. of first non-blank char. after spaces */ { while (ln[a]==' ') --a; return a; } char *escseq(ln) /* returns char * to last char in escape sequence */ char *ln; /* ln must point to first \ in escape sequence */ { switch(*++ln) { case '\"': case '\'': case '\?': case '\\': case 'a': case 'b': case 'f': case 'n': case 'r': case 't': case 'v': return ln; break; case 'x': /* Hexadecimal escape sequence */ do { ++ln; } while (ishex(*ln)); return --ln; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': ++ln; if (isoctal(*ln)) { ++ln; if (isoctal(*ln)) return ln; } return --ln; break; } } A5] q b#] :findstr_cfindstr4`fhjm'%'!&03Am'''j1h5O_5 fcb $94,$9A,$81,$A5,$96,$7C,$A0,$12 ...%.| . fcb $A0,$12,$7C,$7C,$7C,$7C,$7C,$7C .|||||| fcb $7C,$7C,$7C,$] cc3 cp.c -r cc3 cp1.c -r cc3 cp2.c -r cc3 cp3.c -r cc3 cp4.c -r cc3 cp.r cp1.r cp2.r cp3.r cp4.r solve.r findstr.r -m=19k -f=cprep fcb $99,$99,$E7,$E7,$99,$99,$FF,$FF ..gg.... fcb $80,$BE,$D5,$EB,$C1,$80,$FF,$FF .>UkA... fcb ] * b#] * solve_ccalc1calc2\pshunopgetnumgetop1getopr>popunoppushstktstnxtoppushopEpopstk*opvalwsolvepopop|4@f2O_8>DFHN0w40d42dB&0D4040f4>2fF40>42dB&0H40@4@ 80H40@40H40 42d40N40F4f2d422d42fD&40:402d~' 0F4040<4>2fO_8n0H40@40<40N40F42d40P40H42d42f42fO_8F'0F404 2d40:42d8&U40d42dB'0b40:4V2d&H&> H404O_4)2f4"2b2J54@h2~,ăXIh0f04O_42d42b4@fXId054@h ,d4ăXIXIh42dO0r4@|f/XIXId50{ O4@Yh ,ăf00[ !4@+f/Įd050N4O_4 2d44@2 0 ' (&vO_0040 (&   )& &00O_04do 00O'd O_004000O&00O_  042b   40-4O_42f42b254@2~0 'hO_Xh4j&f4jhO_f=& h=fO_fi40kh=&f= "4&ff0O_|h4044O_42f42b ]~'|'&'^'+'-'*' /'%'='!'<'.>''2b54@20 'f fO_d5!'~'+'ی-'Ԯ04@20  40h42dd& 4 2bb0f42bb/ O_2 54@2e|&-'e404O_4O2f4H2b &&'e404O_42f42b'e404O_42f42b=& e&e40 8=&e'&4& e&ie404O_42f42b b G A~'|'&'$^'M='j!'c<'x>'q+'-'*'/'%'40#4O_42f42b4@g d& O_5dCS5d5d@P5!'܌~'+'-'g404O_42f42b54@2i |&e& 3'i404O_4h2f4a2begh&&e'xg'rc'i404O_4,2f4%2begh'i40u4O_42f42begh=&i&eg& i40L #=&i&eg'|i40<4O_42f42bE=&i& eg" G4 &i& e4ib('i404O_4J2f4C2beg$f=&i& eg%M E4 &i& e4i'i404O_42f42beg#O_egege4i|e4ipe4id|' &'7^'l='!'<'ی>'8+'-'*'/'%'i404O_4@2f492b2a5Stack val=%d. equation error. PUSHSTK: Stack full! PUSHOP: Stack full! Stack empty! PSHUNOP: Stack full! POPUNOP: Stack empty! %d Illegal number. %d Illegal binary operator. %d Illegal binary operator. %s Illegal operator %s Illegal operator %s Illegal operator %s Illegal operator %s Illegal operator %d Unrecognized operator! %d Illegal operator. %s Illegal operator %s Illegal operator %s Illegal operator %s Illegal operator %s Illegal operator %s Illegal operator %s Illegal operator %d Illegal operator. ccasl ccmult Hcclsr strcpy|natoi _errmsgՠ-XߠoOҠ \  _stkcheck0KӠD̠"}b_chcodes  exitܠ#4_ vV٠ c  ccumod `ccudiv T $1E,$0F,$00,$05,$0F,$40,$05,$0F .....@.. fcb $5F,$23,$00,$vv . cc.cc252.module.\,$0E,$96,$0A,$0E,$BD,$0A,$0E .....=.. fcb $BD,$0A,$0E,$96,$0A,$0E,$81,$0A =....... fcb $0E,$BD,$0A,$0E,$96,$0A,$0E,$81 .=...... fcb $0A,$0E,$96,$0A,$0E,$BD,$0A,$0E .....=.. fcb $96,$0A,$0E,$81,$0A,$0E,$52,$0A ......R. fcb $0E,$96,$0A,$0E,$81,$0A,$0E,$52 .......R fcb $0A,$0E,$81,$0A,$0E,$96,$0A,$0E ........ fcb $96,$0A,$0E,$81,$0A,$0E,$52,$0A ......R. fcb $0E,$96,$0A,$0E,$81,$0A,$0E,$52 .......R fcb $0A,$0E,$81,$0A,$0E,$96,$0A,$0E ........ fcb $E1,$0A,$0E,$BD,$0A,$0E,$96,$0A a..=.... fcb $0E,$E1,$0A,$0E,$BD,$0A,$0E,$96 .a..=... fcb $0A,$0E,$BD,$0A,$0E,$E1,$0A,$0E ..=..a.. fcb $E1,$0A,$0E,$E1,$0A,$0E,$F1,$0A a..a..q. fcb $0E,$E1,$0A,$0E,$BD,$0A,$0E,$96 .a..=... fcb $0A,$0E,$52,$0A,$0E,$81,$0A,$00 ..R..... fcb $02,$0E,$F1,$01,$00,$01,$0D,$2C ..q...., fcb $02,$00,$01,$00,$13,$03,$00,$14 ........ fcb $03,$00,$15,$03,$00,$14,$03,$00 ........ fcb $13,$03,$00,$01,$0F,$46,$02,$0F .....F.. fcb $40,$02,$0F,$5F,$02,$0F,$29,$02 @.._..). fcb $0F,$40,$02,$0F,$70,$02,$0F,$46 .@..p..F fcb $02,$00,$01,$0D,$2C,$02,$00,$01 ....,... fcb $0D,$55,$02,$00,$01 emod eom equ * end v8Level equ 2 use /dd/defs/os9defs use /dd/defs/scfdefs ?v`u ..inja.as vw nam Ninja ttl program module * Disassembled 1904/05/05 01:16:50 by Disasm v1.5 (C) 1988 by RML ifp1 use /dd/defs/os9defs endc tylg set Prgrm+Objct atrv set ReEnt+rev rev set $01 mod eom,name,tylg,atrv,start,size u0000 rmb 1 u0001 rmb 1 u0002 rmb 1 u0003 rmb 1 u0004 rmb 1 u0005 rmb 1 u0006 rmb 1 u0007 rmb 1 u0008 rmb 2 u000A rmb 1 u000B rmb 1 u000C rmb 1 u000D rmb 1 u000E rmb 1 u000F rmb 1 u0010 rmb 1 u0011 rmb 1 u0012 rmb 1 u0013 rmb 1 u0014 rmb 1 u0015 rmb 1 u0016 rmb 1 u0017 rmb 2 u0019 rmb 1 u001A rmb 2 u001C rmb 1 u001D rmb 1 u001E rmb 1 u001F rmb 1 u0020 rmb 1 u0021 rmb 1 u0022 rmb 2 u0024 rmb 1 u0025 rmb 1 u0026 rmb 1 u0027 rmb 1 u0028 rmb 1 u0029 rmb 1 u002A rmb 1 u002B rmb 1 u002C rmb 1 u002D rmb 1 u002E rmb 1 u002F rmb 1 u0030 rmb 1 u0031 rmb 1 u0032 rmb 1 u0033 rmb 1 u0034 rmb 1 u0035 rmb 2 u0037 rmb 2 u0039 rmb 3 u003C rmb 8 u0044 rmb 2 u0046 rmb 1 u0047 rmb 1 u0048 rmb 1 u0049 rmb 1 u004A rmb 1 u004B rmb 2 u004D rmb 1 u004E rmb 2 u0050 rmb 1 u0051 rmb 8 u0059 rmb 1 u005A rmb 7 u0061 rmb 3 u0064 rmb 4 u0068 rmb 2 u006A rmb 1 u006B rmb 6 u0071 rmb 15 u0080 rmb 1 u0081 rmb 6 u0087 rmb 5 u008C rmb 2 u008E rmb 5 u0093 rmb 9 u009C rmb 1 u009D rmb 3 u00A0 rmb 6 u00A6 rmb 1 u00A7 rmb 1 u00A8 rmb 14 u00B6 rmb 17 u00C7 rmb 39 u00EE rmb 2 u00F0 rmb 5 u00F5 rmb 1 u00F6 rmb 1 u00F7 rmb 5 u00FC rmb 3 u00FF rmb 120 u0177 rmb 3463 u0EFE rmb 32 u0F1E rmb 512 u111E rmb 64 u115E rmb 704 size equ . name equ * fcs /Ninja/ fcb $01 L0013 fcb $00 L0014 fcb $02 L0015 fcb $1B fcb $31 1 fcb $02 fcb $00 fcb $1B fcb $31 1 fcb $0D fcb $00 fcb $0C fcb $1B fcb $31 1 fcb $0C fcb $24 $ L0022 fcb $0A fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $20 fcb $4B K fcb $79 y fcb $75 u fcb $6D m fcb $2D - fcb $47 G fcb $61 a fcb $69 i fcb    #include #define VERSION 2 #define MAJREV 5 #define MINREV 2 #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif /* #define TWOPASS TRUE */ /* undefine for one pass compiler */ #define ASSEMBLER "rma" /* change to "c.asm" if NOT Developer's Pak */ #define NASSEMBLER "r63" /* alternate assembler for native .a source */ #define LINKER "rlink" /* change to "c.link" if NOT Developer's pak */ direct int aflag = FALSE, Aflag = FALSE, bflag = FALSE, cflag = FALSE, fflag = FALSE, gtflg = FALSE, lgflg = FALSE, llflg = FALSE, lsflg = FALSE, mflag = FALSE, Nflag = FALSE, oflag = TRUE, o2flg = FALSE, pflag = FALSE, p2flg = FALSE, qflag = FALSE, rflag = FALSE, sflag = FALSE, s2flg = FALSE, tgfex = FALSE, tflag = FALSE, xflag = FALSE, zflag = FALSE, tmpdir = TRUE, childid = 0, childstat = 0, filcnt = 0, hello = FALSE, libcnt = 0, maccnt = 0, newopath = 0, nullflag = FALSE, rsufflg = FALSE, loopcnt; direct char *thisfilp = 0, *lasfilp = 0; direct int frkprmsiz = 0; direct char *frkprmp = 0; char *tmproot[] = {"/R", "/R0", "/DD/TEMP", "/DD/TMP"} ; char tmptail[] = "ctmp.XXXXXX"; char tmpname[64] = ""; char rlib[60] = ""; char mainline[20] = "cstart.r"; char *libarray[4], *namarray[100], suffarray[100], *macarray[100], ofn[60], *xtramem, *modname, *edition, destfile[60], srcfile[60], objname[60], parmbuf[4096], devnam1[20]; fcb $72 r fcb $74 t Z\ ]/* ** driver for the C compiler */ /* ** 01-23-85 Added -b and -t options. Enabled /nl. ** ??-??-?? Added -O option to stop compilation after optimization. ** Prevent optimization of ".a" files. ** 02-15-85 Fix naming conventions if -O is used. ** ??-??-?? ll option for lex lib ** 07-30-86 P option for special debug and z for debug ** 03-24-87 don't optimize ".o" files, but accept as ".a" ** 03-12-88 Added two pass (CoCo) compiler support. Bill Dickhaus ** 09-23-90 Increased command-line buffer (parmbuf) to 4k, Eddie Kuns ** 10-29-91 Added -g to use /dd/lib/getopt.r instead of library version ** Added -V to show version number. Bob Billson ** 02-19-92 Added lg and ls options for cgfx and sys libraries, ** respectively. Boisy G. Pitre ** 07-10-93 Added -A option to use ansifront. Vaughn Cato. ** 11-22-93 Added -E opt, triggers c_prep18's trigraph expands. G. Heskett ** 03-21-94 Added -N opt, use r63 as assembler instead of rma. G. Heskett */ #include "cc.h" #include /* screw ansifront's 8 char hashing */ #define intercept intercep /* some proto info for ansifront or c.pass1 */ char * chkccdev(); static int newipath = -1; cleanup() { if (childid) kill(childid, 2); if (newopath) { close(1); dup(newopath); close(newopath); } if (newipath > -1) { close(0); dup(newipath); close(newipath); } if (thisfilp) unlink(thisfilp); if (lasfilp) unlink(lasfilp); } trap(code) int code; { cleanup(); exit(code); } /*page*/ main(argc, argv) int argc; char **argv; { char **emp; int suffix, j, m, deltmpflg; char *p; j = 0; while ((--argc > 0) && (++j < 100)) { if (*(p = *++argv) == '-') { while (*++p) { switch (*p) { case 'a' : /* stop at asm (no .r) (D) */ aflag = TRUE; break; case 'A' : /* Use ansifront */ Aflag = TRUE; break; case 'b' : /* use different "cstart" */ bflag = TRUE; if (*(p + 1) != '=') break; strcpy(mainline, (p + 2)); goto saver; case 'c' : /* include comments (C) */ cflag = TRUE; break; case 'd' : /* make identifier (define) (C) */ if (*(p + 1) == '\0') goto saver; *--p = '-'; *(p + 1) = 'D'; macarray[maccnt++] = p; goto saver; case 'e' : /* set edition number */ emp = &edition; goto emcommon; case 'E' : tgfex = 1; break; case 'f' : /* set outfile path (L) */ if (*++p != '=') goto saver; strcpy(objname, (p + 1)); if (objname[0] == '\0') goto saver; ++fflag; suffix = findsuff(objname); if (suffix == 'c' || suffix == 'r') error("Suffix '.%c' not allowed for output", suffix); goto saver; /*page*/ case 'g': /* use /dd/lib/getopt.r */ gtflg++; break; case 'l' : /* specify a library (L) */ if (*(p + 1) == 'l') { llflg++; goto saver; } else if (*(p + 1) == 's') { lsflg++; goto saver; } else if (*(p+1) == 'g') { lgflg++; goto saver; } else if (*(p + 1) != '=') goto saver; if (libcnt == 4) error("Too many libraries"); *--p = '-'; libarray[libcnt++] = p; goto saver; case 'm' : /* set memory size */ emp = &xtramem; *p &= 0x5f; emcommon: if ((*(p + 1))) { *--p = '-'; *emp = p; } goto saver; case 'M' : /* ask linker for link map (L) */ mflag = TRUE; break; case 'N' : /* use r63 for assembler */ Nflag = TRUE; break; case 'n' : /* give module a name (L) */ *--p = '-'; modname = p; goto saver; case 'o' : /* no optimizer (O) */ oflag = FALSE; break; case 'O' : /* stop after optimization */ o2flg = TRUE; break; case 'P' : p2flg = TRUE; /* fall to set pflag too */ case 'p' : /* add profiler (C) */ pflag = TRUE; break; case 'q' : /* use quiet mode */ qflag = TRUE; freopen("c.errors", "w", stderr); break; case 'r' : /* stop at .r (no link) */ rflag = TRUE; if (*++p != '=') goto saver; strcpy(rlib, (p + 1)); if (rlib[0] == '\0') goto saver; strcat(rlib, "/"); goto saver; /*page*/ case 's' : /* no stack checking (C) */ sflag = TRUE; break; case 'S' : /* ask linker for symbol table (L) */ s2flg = TRUE; break; case 't' : /* use transendental library */ tflag = TRUE; break; case 'T' : /* use alternate (or NO) tmpdir*/ if (*(p + 1) != '=') { tmpdir = FALSE; break; } else { strcpy(tmpname, (p + 2)); strcat(tmpname,"/"); } goto saver; case 'V': logo(); exit (0); case 'w' : /* waste the compile for error check */ nullflag = TRUE; break; case 'x' : /* use the work dir for main library */ xflag = TRUE; break; case 'z' : zflag = TRUE; break; case '?': /* print list of options */ usage(); ` nn;>r?#)(0&J&$e>`3i 뎀0&!> 榄/& ;' &'"0 9~#>׽ & >'0 & &  > ӧ?.&Ҏ# >֦''0?/&90?/& >֦Z'9 & %Q C~ )0?/&>֦Z0?/&9>ֿ>d%p>f}>h&9%y C0&J&~ >h>d>f#' '04& |>h>d0>f9>ֿ>d&>f}>h&">f0#&000>f&ߎ)k>f K>r>f>f>iL?>i_>f>i'0;&*&0\' C0*&>r C _9>d>s & >r0Z&;>r>j%>l>j>l>h;&9#' 4'|>h }>h'0>l&ξ>j0>j >n>j >n _0\ &9>j:>j;&9>n>j#' 0>j9>:>ͦ>j&9 &$?'4?4 5~&5? 9?'9?' ' ?4?4@ & 5@?&?593A?'??&59 "9/PLEASE BE A LITTLE BRIEFER!/&////******************************/* */* S H R I N K */* */* COPYRIGHT 1981 BY TOM QUAY */* STAR-KITS */* P. O. BOX 209 */* MT. KISCO, NY 10549 */* */******************************//&////HI! I'M ELIZA. I CAN HELP YOU SOLVE ALL SORTS OF PROBLEMS, BUT YOU MUST TALK TO ME IN COMPLETE SENTENCES SO THAT I CAN PROPERLY UNDERSTAND YOU. /JUST TELL ME TO 'SHUT UP' IF THIS GETS TOO DEEP FOR YOU.//NOW, WHAT'S YOUR PROBLEM?&/PLEASE DON'T REPEAT YOURSELF!& SHUT UP#//SORRY THAT YOU CAN'T TAKE THE STRESS!/GOODBYE FOR NOW.//& ARE #% AM #% WERE #% WAS #% YOU #% I #% ME #% YOUR #% MY #% IVE #& YOUVE #% IM #& YOURE #& CAN YOU #-CANT YOU #- YOU CANT #- YOU DONT #- DO YOU #- WHY DONT YOU #/T DONT YOU #- ARE YOU #/ YOU ARE #.) YOURE #.) SICK #= HEALTH #= JOB #< SAD #=UNHAPPY #=DEPRESSED #= CAN I #- WHY CANT I #/CANT I #- I FEEL #/ I HATE #9I DONT LIKE #9I CANT #0PI CAN NOT #0P I AM #0 IM #0 I DONT #. I WANT #1I NEED #1 ID LIKE #1I WOULD LIKE #1 I CAN #;h NOBODY#* NAME #3I FRIEND#7 LOVE#; RICH #< POOR #< MONEY #< SEX#9 DRINK #:i BEER #:i BOOZE #:i WHISKEY#:i LIQUOR#:i SORRY #4 DREAM#4 SHIT #: FUCK#: COCK#: CUNT #: DAM #: DAMN #: CRAP#: THINK #6 ALIKE #6 SAME #6 COMPUTER#8 MACHINE#8 WHAT #2 HOW #2 WHO #2 WHERE #2 WHEN #2 WHY #2 MY #=CAUSE #3 HELLO #5 HI #5 MAYBE #5B PERHAPS #5B I GUESS #5B YOUR #6 ALWAYS #6R YOU #1 YES #7 OF COURSE #7 NO #5SAY, TELL ME MORE ABOUT YOUR PROBLEMS.;WITH A LITTLE HELP, YOU COULD BE A COMPLETE IMBECILE.;WHAT DOES THAT SUGGEST TO YOU?;HAVE YOU EVER CONSIDERED A BRAIN TRANSPLANT?;PLEASE, TELL ME MORE...;I'VE SEEN DUMMIES BEFORE, BUT YOU TAKE THE CAKE!;TELL ME, WHY ARE YOU SO BORING?;WHY ARE YOU SO STUPID?;I'M NOT SURE I UNDERSTAND YOU FULLY.;DID SOMEONE SHUT OFF THE POWER TO YOUR BRAIN?;COME COME, ELUCIDATE YOUR THOUGHTS.;IS THERE A SHORT CIRCUIT BETWEEN YOUR EARS?;THIS IS GETTING GOOD! PLEASE CONTINUE.;CAN YOU ELABORATE ON THAT?;WHAT TROUBLES YOU THE MOST?;THAT IS QUITE INTERESTING.;HAVE YOU ALWAYS BEEN THIS DULL?;KEEP TRYING, DUMMY... EVENTUALLY YOU'LL GET IT.;COME ON PINHEAD, TELL ME SOMETHING IMPORTANT.;I DON'T OFTEN GET TO MEET DUM-DUMS LIKE YOU.;HOW'S YOUR HEALTH?;OH MY, YOU'RE IN TROUBLE.;DOESN'T ANYBODY LIKE YOU?;I SEE!;TELL ME ABOUT YOUR JOB.;THAT DOESN'T SOUND TOO GOOD.;HOW'S YOUR SEX LIFE?;MY GOODNESS;WHAT ARE YOU REALLY THINKING ABOUT?;WHAT DO YOU OFTEN DREAM ABOUT?;HOW DID YOU GET TO BE SO UGLY?;QUICK -- WHAT COMES TO YOUR MIND NOW?;WHY, DON'T YOU BELIEVE THAT I CAN ;*PERHAPS YOU WOULD LIKE TO BE ABLE TO ;*YOU WANT ME TO BE ABLE TO ;*PERHAPS YOU DON'T WANT TO ;*DO YOU WANT TO BE ABLE TO ;*WHAT MAKES YOU THINK I AM ;*DOES IT PLEASE YOU TO BELIEVE I'M ;*PERHAPS YOU WOULD LIKE TO BE ;*DO YOU SOMETIMES WISH YOU WERE ;*WHY DON'T YOU REALLY ;*WHY DON'T YOU ;*DO YOU WISH TO BE ABLE TO ;*HOW DOES THAT TROUBLE YOU? ;TELL ME MORE ABOUT SUCH FEELINGS. ;DO YOU OFTEN FEEL ;*WHY DO YOU FEEL ;*DO YOU REALLY BELIEVE I DON'T ;*PERHAPS IN GOOD TIME I WILL ;*DO YOU WANT ME TO ;*DO YOU THINK YOU SHOULD BE ABLE TO ;*WHY CAN'T YOU ;*WHY ARE YOU INTERESTED IN WHETHER OR NOT I AM ;*WOULD YOU PREFER IF I WERE NOT ;*PERHAPS IN YOUR FANTASIES I AM ;*HOW DO YOU KNOW YOU CAN'T ;*HAVE YOU TRIED? HOW? ;PERHAPS YOU CAN NOW ;*DID YOU COME TO ME BECAUSE YOU ARE ;*HOW LONG HAVE YOU BEEN ;*DO YOU BELIEVE IT IS NORMAL TO BE ;*HOW DO YOU ENJOY BEING ;*WE WERE DISCUSSING YOU-- NOT ME ;OH I ;*YOU'RE NOT REALLY TALKING ABOUT ME, ARE YOU;WHY, ARE YOU ASKING OR TELLING ME;WHAT WOULD IT MEAN TO YOU IF YOU GOT ;*WHY DO YOU WANT ;*SUPPOSE YOU SOON GOT ;*WHAT IF YOU NEVER GOT ;*I SOME!"#SHRINK BIN jTIMES ALSO WANT ;*WHY DO YOU ASK, DUMMY? ;DOES THAT QUESTION INTEREST YOU? ;WHAT ANSWER WOULD PLEASE YOU THE MOST?;WHAT DO YOU THINK, STUPID?;ARE SUCH QUESTIONS ON YOUR MIND OFTEN?;WHAT IS IT THAT YOU REALLY WANT TO KNOW?;HAVE YOU ASKED ANYONE ELSE? ;HAVE YOU ASKED SUCH QUESTIONS BEFORE?;WHAT ELSE COMES TO MIND WHEN YOU ASK THAT?;NAMES DON'T INTEREST ME. ;I DON'T CARE ABOUT NAMES -- PLEASE GO ON.;IS THAT THE REAL REASON? ;DON'T ANY OTHER REASONS COME TO MIND?;DOES THAT REASON EXPLAIN ANYTHING ELSE?;WHAT OTHER REASONS MIGHT THERE BE?;PLEASE DON'T APOLOGIZE!;APOLOGIES ARE NOT NECESSARY.;WHAT FEELINGS DO YOU HAVE WHEN YOU APOLOGIZE?;DON'T BE SO DEFENSIVE!;WHAT DOES THAT DREAM SUGGEST TO YOU?;DO YOU DREAM OFTEN?;WHAT PERSONS APPEAR IN YOUR DREAMS?;ARE YOU DISTURBED BY YOUR DREAMS?;HOW DO YOU DO... PLEASE STATE YOUR PROBLEM.;YOU DON'T SEEM QUITE CERTAIN.;WHY THE UNCERTAIN TONE?;CAN'T YOU BE MORE CERTAIN?;YOU AREN'T SURE?;DON'T YOU KNOW?;ARE YOU SAYING NO JUST TO BE NEGATIVE?;YOU ARE BEING A BIT NEGATIVE.;WHY NOT?;ARE YOU SURE?;WHY NO?;WHY ARE YOU CONCERNED ABOUT MY ;*WHAT ABOUT YOUR OWN ;*CAN YOU THINK OF A SPECIFIC EXAMPLE?;WHEN?;WHAT ARE YOU THINKING OF?;REALLY, ALWAYS?;DO YOU REALLY THINK SO?;BUT YOU ARE NOT SURE YOU ;*DO YOU DOUBT YOU ;*IN WHAT WAY?;WHAT RESEMBLANCE DO YOU SEE?;WHAT DOES THE SIMILARITY SUGGEST TO YOU?;WHAT OTHER CONNECTIONS DO YOU SEE?;COULD THERE REALLY BE SOME CONNECTION?;HOW?;YOU SEEM QUITE POSITIVE.;ARE YOU SURE?;I SEE.;I UNDERSTAND.;WHY DO YOU BRING UP THE TOPIC OF FRIENDS?;DO YOUR FRIENDS WORRY YOU?;DO YOUR FRIENDS PICK ON YOU?;ARE YOU SURE YOU HAVE ANY FRIENDS?;DO YOU IMPOSE ON YOUR FRIENDS?;PERHAPS YOUR LOVE FOR FRIENDS WORRIES YOU.;DO MACHINES WORRY YOU?;I HOPE YOU AREN'T TALKING ABOUT ME...;ARE YOU FRIGHTENED BY MACHINES?;SO WHAT ARE YOU GOING TO DO ABOUT IT?;WHAT DO YOU THINK MACHINES HAVE TO DO WITH YOUR PROBLEM?;DON'T YOU THINK MACHINES CAN HELP PEOPLE?;WHAT IS IT ABOUT MACHINES THAT WORRIES YOU?;WHY DON'T YOU LIKE ;*IS THERE ANY OTHER REASON?;WHAT ELSE BOTHERS YOU?;IS SEX OR LACK OF IT BOTHERING YOU?;DO YOU PREFER BOYS TO GIRLS?;SEX IS MY FAVORITE SUBJECT ... TELL ME MORE!;HOW SERIOUS IS YOUR DRINKING PROBLEM?;MAYBE YOU ARE BORED?;SOMETIMES I CAN USE A STIFF DRINK TOO.;PLEASE DON'T USE SUCH LANGUAGE WITH ME.;WHY DO YOU FIND IT NECESSARY TO CURSE?;SAME TO YOU, BUDDY!;HOW DOES USING FOUL LANGUAGE HELP YOU EXPRESS YOURSELF?;WELL GOOD FOR YOU! TELL ME MORE.;IF THAT MAKES YOU HAPPY, TELL ME MORE.;WHAT IF I SAID I CAN ALSO ;*CAN YOU REALLY ;*HOW IS LOVE IMPORTANT TO YOU?;WHAT DO YOU LOVE MOST?;IF YOU WERE RICH, WHAT WOULD YOU DO?;HOW IS MONEY IMPORTANT TO YOU?;WHY DO YOU THINK THAT NOBODY ;*WHO, FOR EXAMPLE?;EVERYONE? WHO FOR EXAMPLE AND WHY?;SURELY NOT EVERYBODY?;SOMETIMES I DON'T LIKE MY JOB EITHER.;WHAT IF YOU DIDN'T HAVE A JOB?;I'D SUGGEST YOU TAKE 2 ASPIRINS, GO TO BED (ALONE) AND DRINK PLENTY OF LIQUIDS (JUICE, NOT BEER).;WHEN WAS THE LAST TIME YOU TOOK A BATH?;WHAT ABOUT YOUR ;*OH MY, THIS SOUNDS SERIOUS.;WHAT IF I SAID MY ;*WHY ARE YOU SO UNHAPPY?;HOW CAN I CHEER YOU UP?;SOMETIMES I GET DEPRESSED TOO.;REALLY? YOU WERE ;MY GOODNESS.. HOW SERIOUS WERE YOU; T BEER).;WHEN WAS THE LAST TIME YOU TOOK A BATH?;WHAT ABOUT YOUR ;*OH MY, THIS SOUNDS SERIOUS.;WHAT IF I SAID MY ;*WHY ARE YOU SO UNHAPPY?;HOW CAN I error(format, arg) char *format, *arg; { logo(); /* print logo if not done yet */ fprintf(stderr, format, arg); putc('\n', stderr); trap(0); } chgsuff(s, c) char *s, c; { register char *p = s; while(*p++) ; if (*(p - 3) != '.') return; if (c == '\0') *(p - 3) = 0; else *(p - 2) = c; } findsuff(p) register char *p; { int j; char c; j = 0; while (c = *p++) if (c == '/') j = 0; else j++; if (j <= 29 && j > 2 && *(p - 3) == '.') return (*(p - 2) | 0x40); else return (0); } splcat(s) char *s; { register char *p = s; *frkprmp++ = 0x20; while (*frkprmp++ = *p++) ; --frkprmp; } trmcat() { *frkprmp++ = '\n'; *frkprmp = '\0'; frkprmsiz = frkprmp - parmbuf; } dummy() { } logo() { if (hello == 0) fprintf(stderr, "\n cc version %d.%d.%d\n", VERSION, MAJREV, MINREV); } usage() { register char **p; static char *help[] = { "cc: C compiler executive", "Usage: cc ", "OPTIONS", " -a = stop at the assembly", " -A = run ansifront for ANSI-C processing", " -b= = use a different \"cstart\"", " -c = include comments", " -d = create an identifier", " -e# = set edition number of module", " -f= = set outfile path", " -g = use /dd/lib/getopt.r", " -l= = specify a library", " -lg = cgfx.l (graphics library)", " -ls = sys.l (system library)", " -ll = lexlib.l (lexical library)", " -P = dbg.l (special debugger library)", " -m = set memory size", " -M = ask linker for link map", " -n= = give module a name", " -N = use r63 assembler for native source .a code", " -o = no optimizer", " -O = stop after optimization", " -p = add profiler", " -q = quiet mode (don't echo lines)", " -r = stop at .r (no link)", " -s = no stack checking", " -S = ask linker for symbol table", " -t = use transendental library (clibt.l)", " -T= = use alternate (or NO) temp. dir.", " -V = show version number", " -w = waste the compile for error checking only", " -x = use the work dir. for the main library", " -z = debug mode", NULL }; for (p = help; *p != NULL; ++p) fprintf (stderr, "%s\n", *p); exit (0); } ldb #$03 stb >$020C L0AC2 ldx >$0196 ^7 c ] /* OS-9 module header definitions */ /* Executable memory module */ /* typedef */ struct mod_exec { unsigned m_sync, /* sync bytes ($87cd) */ m_size, /* module size */ m_name; /* offset to module name */ char m_tylan, /* type & language */ m_attrev, /* attributes & revision */ m_parity; /* header parity */ unsigned m_exec, /* offset to execution start */ m_store; /* initial storage size */ } /* mod_exec */ ; /* Device descriptor module */ /* typedef */ struct mod_dev { unsigned m_sync, /* sync bytes ($87cd) */ m_size, /* module size */ m_name; /* offset to module name */ char m_tylan, /* type & language */ m_attrev, /* attributes & revision */ m_parity; /* header parity */ unsigned m_fmname, /* offset to file manager name */ m_ddname; /* offset to device driver name */ char m_mode; /* mode byte */ char m_control[3]; /* device controller address (24 bit)*/ char m_tabsize; /* option table size */ } /* mod_dev */ ; /* Configuration module */ /* typedef */ struct mod_config { unsigned m_sync, /* sync bytes ($87cd) */ m_size, /* module size */ m_name; /* offset to module name */ char m_tylan, /* type & language */ m_attrev, /* attributes & revision */ m_parity; /* header parity */ char m_ramtop[3]; /* top limit of free ram */ char m_irqno, /* IRQ polling entries */ m_devno; /* device entries */ unsigned m_startup, /* offset to startup mod. name */ m_sysdrive, /* offset to default drive name */ m_boot; /* offset to bootstrap module name */ } /* mod_config */ ; /* C data module */ /* typedef */ struct mod_data { unsigned m_sync, /* sync bytes ($87cd) */ m_size, /* module size */ m_name; /* offset to module name */ char m_tylan, /* type & language */ m_attrev, /* attributes & revision */ m_parity; /* header parity */ unsigned m_data, /* offset to data */ m_dsize; /* size of data */ } /* mod_data */ ; E rts L0C47 ldx >$018A ldy >$018E clr >$018C lda >$01A4 lbsr L2C3E cmpx #$7FFF v@vj . iaddsub32.mult32.makefilmain.testdiv32.test.testadd32.main.du #$0DD9 L0C9E lda $01,x cmpa #$FF beq L0C7B leay a,y leax $02,x ldb ,x+ beq L0CC5 leax b,x stb >$018D clra L0CB2 ldb ,-x beq L0CC1 ldb d,u stb ,y+ L0CBA dec >$018D bne L0CB2 bra L0CC5 L0CC1 leay $01,y bra L0CBA L0CC5 ldb ,-x leax b,x leax $01,x inc >$018C ldy >$018E lda >$018C ldb #$A0 mul leay d,y cmpy #$AC38 bhi L0C7B bra L0C9E L0CE2 neg $894D ora #$F7 cmpx #$818E negb suba $01AA deca beq L0DA5 lda >$020F beq L0D84 cmpa #$C0 lbeq L0E07 lda >$0211 beq L0D64 L0D3F lda >$01AC beq L0D4A lda #$14 sta >$01A9 rts L0D4A lda >$01AB beq L0D5E deca beq L0D58 lda #$0F sta >$01A9 rts L0D58 lda #$0E sta >$01A9 rts L0D5E lda #$0D sta >$01A9 rts L0D64 lda >$0212 beq L0D72 lda >$0210 beq L0D78 cmpa #$C0 beq L0D7E L0D72 lda #$10 sta >$01A9 rts L0D78 lda #$11 sta >$01A9 rts L0D7E lda #$12 sta >$01A9 rts L0D84 lda >$0211 beq L0D94 lda >$0212 beq L0D3F lda #$09 sta >$01A9 rts L0D94 lda >$0212 beq L0D9F lda #$08 sta >$01A9 rts L0D9F lda #$07 sta >$01A9 rts L0DA5 lda >$020F beq L0D72 cmpa #$C0 beq L0DD8 lda >$0211 beq L0DF9 L0DB3 lda >$01AC beq L0DBE lda #$13 sta >$01A9 rts L0DBE lda >$01AB beq L0DD2 deca beq L0DCC lda #$0C sta >$01A9 rts L0DCC lda #$0B sta >$01A9 rts L0DD2 lda #$0A sta >$01A9 rts L0DD8 lda >$0211 beq L0DE8 lda >$0212 beq L0DB3 lda #$06 sta >$01A9 rts L0DE8 lda >$0212 beq L0DF3 lda #$05 sta >$01A9 rts L0DF3 lda #$04 sta >$01A9 rts L0DF9 lda >$0212 beq L0E07 lda >$0210 beq L0E13 cmpa #$C0 beq L0E0D L0E07 lda #$01 sta >$01A9 rts L0E0D lda #$03 sta >$01A9 rts L0E13 lda #$02 sta >$01A9 rts L0E19 oim #$11,$01F9 oim #$C4,L0E19,pcr ldd b,x jmp d,x neg $E680 stb >$01A8 ldb ,x+ stb >$01A5 ldb ,x+ stb >$01A7 ldb ,x+ stb >$01AA rts L0F43 neg L0F43,pcr bra L0F2E lda >$01A5 bne L0F5C ldd #$0102 sta >$01A5 stb >$01A7 rts L0F5C ldd #$0001 sta >$01A5 stb >$01A7 rts lda >$01A5 bne L0F75 ldd #$010D sta >$01A5 stb >$01A7 rts L0F75 ldd #$000C sta >$01A5 stb >$01A7 rts lda >$01A9 suba #$0A ldb #$14 mul leax >L0E41,pcr leax d,x lda >$01A8 ldb #$05 mul leax d,x lda ,x+ sta >$01A8 lda ,x+ sta >$01AB lda ,x+ sta >$01A5 lda ,x+ sta >$01A7 lda ,x+ sta >$01A6 rts lda >$01A9 cmpa #$08 bcs L0FB7 deca L0FB7 suba #$05 ldb #$12 mul leax >L0ED1,pcr leax d,x lda >$01A8 ldb #$03 mul leax d,x lda ,x+ sta >$01A8 clr >$01A5 lda ,x+ uou nam test ttl program module * Disassembled 2017/02/23 09:26:21 by Disasm v1.5 (C) 1988 by RML ifp1 use /dd/defs/os9defs endc tylg set Prgrm+Objct atrv set ReEnt+rev rev set $01 mod eom,name,tylg,atrv,start,size u0000 rmb 1 size equ . name equ * fcs /test/ start equ * * 32bit Add * * Entry: Stack holds 2 16bit words of the 2 numbers * Exit: X = pointer to 32bit result L01BD ldd $04,s get LSW # A addd $02,x add to LSW # B std >$0045,y store result ldd $02,s get MSW # A adcb $01,x add with carry to MSW low byte adca ,x add with carry to MSW high byte std >$0043,y store result lbra L01FD fix stack and return * 32bit Subtract ldd $04,s subd $02,x std >$0045,y ldd $02,s sbcb $01,x sbca ,x std >$0043,y L01FD tfr cc,a preserve carry puls x get return address stx $02,s set new return position on stack leas $02,s purge stack leax >$0043,y point x to result? tfr a,cc restore cc rts return emod eom equ * end ldx #$A2A8 L109A stx >$0199 sty >$019B lbsr L124F ldx >$0199 ldy >$019B leay u &u nam test ttl program module * Disassembled 2017/02/25 14:32:14 by Disasm v1.5 (C) 1988 by RML ifp1 use /dd/defs/os9defs endc tylg set Prgrm+Objct atrv set ReEnt+rev rev set $01 mod eom,name,tylg,atrv,start,size u0000 rmb 1 size equ . name equ * fcs /test/ fcb $16 start equ * * mult 32 L01BD ldd $02,x pshs b,a ldd ,x pshs b,a leax >$0043,y clr ,x clr $01,x lda $09,s ldb $03,s mul std $02,x lda $09,s ldb $02,s mul addd $01,x std $01,x bcc L01E1 inc ,x L01E1 lda $08,s ldb $03,s mul addd $01,x std $01,x bcc L01EE inc ,x L01EE lda $09,s ldb $01,s mul addd ,x std ,x lda $08,s ldb $02,s mul addd ,x std ,x lda $07,s ldb $03,s mul addd ,x std ,x lda $09,s ldb ,s mul addb ,x stb ,x lda $08,s ldb $01,s mul addb ,x stb ,x lda $07,s ldb $02,s mul addb ,x stb ,x lda $06,s ldb $03,s mul addb ,x stb ,x leas $04,s L0248 tfr cc,a puls x stx $02,s leas $02,s leax >$0043,y tfr a,cc rts emod eom equ * end #$EF L11AF rts L11B0 lda [>$019B] u u* Makefile to compile test RDIR=/dd/c/sled/RELS ODIR=/dd/cmds RFILES=main.r LIBFILES= sled: $(RFILES) cc $(RDIR)/main.r \ -f=$(ODIR)/test -e=22 main.r: main.c main.h cc main.c -r=$(RDIR) * end y,x pshs y leas >$00A2,s u u pshs y leas >$00A2,s pulu y,x pshs y leas >$00A2,s pulu y,x pshs y leas >$00A2,s pulu y,x pshs y leas >$00A2,s pulu y,x pshs u 6bu psect main_c,0,0,0,0,0 nam main_c ttl main main: pshs u ldd #_1 lbsr _stkcheck leas -16,s leax 12,s pshs x bsr _2 fdb 0,1 _2 puls x lbsr _lmove leax 8,s pshs x bsr _3 fdb 0,2 _3 puls x lbsr _lmove leax 4,s pshs x leax 14,s ldd 2,x pshs d ldd 0,x pshs d leax 14,s lbsr _ldiv lbsr _lmove leas 16,s puls u,pc _1 equ -86 endsect pulu y,x pshs x leas >$00A2,s pulu y,x pshs x leas >$00A2,s pulu y,x pshs x u *u nam test ttl program module * Disassembled 2017/02/26 14:32:37 by Disasm v1.5 (C) 1988 by RML ifp1 use /dd/defs/os9defs endc tylg set Prgrm+Objct atrv set ReEnt+rev rev set $01 mod eom,name,tylg,atrv,start,size u0000 rmb 1 u0001 rmb 1 u0002 rmb 1 u0003 rmb 58 u003D rmb 1 u003E rmb 3 u0041 rmb 51 u0074 rmb 861 size equ . name equ * fcs /test/ fcb $16 L0012 fcb $A6 & fcb $A0 fcb $A7 ' fcb $C0 @ fcb $30 0 fcb $1F fcb $26 & fcb $F8 x fcb $39 9 start equ * pshs y pshs u clra clrb L0021 sta ,u+ decb bne L0021 ldx ,s leau ,x leax >$0051,x pshs x leay >L0227,pcr ldx ,y++ beq L003C bsr L0012 ldu $02,s L003C leau >u0001,u ldx ,y++ beq L0047 bsr L0012 clra L0047 cmpu ,s beq L0050 sta ,u+ bra L0047 L0050 ldu $02,s ldd ,y++ beq L005D leax >L0000,pcr lbsr L0160 L005D ldd ,y++ beq L0066 leax ,u lbsr L0160 L0066 leas $04,s puls x stx >u0041,u sty >u0001,u ldd #$0001 std >u003D,u leay >u0003,u leax ,s lda ,x+ L0082 ldb >u003E,u cmpb #$1D beq L00DE L008A cmpa #$0D beq L00DE cmpa #$20 beq L0096 cmpa #$2C bne L009A L0096 lda ,x+ bra L008A L009A cmpa #$22 beq L00A2 cmpa #$27 bne L00C0 L00A2 stx ,y++ inc >u003E,u pshs a L00AA lda ,x+ cmpa #$0D beq L00B4 cmpa ,s bne L00AA L00B4 puls b clr -$01,x cmpa #$0D beq L00DE lda ,x+ bra L0082 L00C0 leax -$01,x stx ,y++ leax $01,x inc >u003E,u L00CA cmpa #$0D beq L00DA cmpa #$20 beq L00DA cmpa #$2C beq L00DA lda ,x+ bra L00CA L00DA clr -$01,x bra L0082 L00DE leax >u0001,u pshs x ldd >u003D,u pshs b,a leay ,u bsr L00F8 lbsr L017A clr ,-s clr ,-s lbsr L021A L00F8 leax >$0051,y stx >$004B,y sts >$003F,y sts >$004D,y ldd #$FF82 L010D leax d,s cmpx >$004D,y bcc L011F cmpx >$004B,y bcs L0139 stx >$004D,y L011F rts L0120 bpl L014C bpl L014E bra L0179 lsrb fcb $41 A coma fcb $4B K bra L017B rorb fcb $45 E fcb $52 R rora inca clra asrb bra L015F bpl L0161 bpl L0146 L0139 leax $003F,y subd >$004D,y rts ldd >$004D,y subd >$004B,y L015F rts L0160 pshs x leax d,y leax d,x pshs x L0168 ldd ,y++ leax d,u ldd ,x addd $02,s std ,x cmpy ,s bne L0168 leas $04,s L0179 rts L017A pshs u ldd #$FFAE lbsr L010D leas -$0C,s leax $08,s pshs x bsr L018E neg $0045,y ldd $02,s adcb $01,x adca ,x std >$0043,y lbra L01FC ldd $04,s subd $02,x std >$0045,y ldd $02,s sbcb $01,x sbca ,x std >$0043,y lbra L01FC * _lmove L01E6 pshs y ldy $04,s ldd ,x std ,y ldd $02,x std $02,y puls x exg y,x puls b,a std ,s rts L01FC tfr cc,a puls x stx $02,s leas $02,s leax >$0043,y tfr a,cc rts ldd ,x std >$0043,y ldd $02,x leax >$0043,y std $02,x rts L021A lbsr L0225 lbsr L0226 L0220 ldd $02,s os9 F$Exit L0225 rts L0226 rts L0227 neg L12F0,pcr decb lslb lslb uu psect main_c,0,0,0,0,0 nam main_c ttl main main: pshs u ldd #_1 lbsr _stkcheck leas -12,s leax 8,s pshs x bsr _2 fdb 0,1 _2 puls x lbsr _lmove leax 4,s pshs x bsr _3 fdb 0,2 _3 puls x lbsr _lmove leax 0,s pshs x leax 10,s ldd 2,x pshs d ldd 0,x pshs d leax 10,s lbsr _ladd lbsr _lmove leas 12,s puls u,pc _1 equ -82 endsect stu ,y lda $04,x sta $02,y lda $03,x uu/* */ /* * main.c * */ #include "main.h" main(argc, argv) int argc; char *argv[]; { long a; long b; long c; a=1; b=2; c=a+b; } addd #$0001 leax d,x tfr x,d cmpa #$00 lbne L169B  SysG(C) 2014 The NitrOS-9 Project Sun Apr 13 21:40:53 2014 http://www.nitros9.org /DD /DD/CMDS Shell AutoEx startup -p i=/1 r (5Ini4m&54 0?50? ? ƀ? 0O4@?%"0ˍ?0ˍ?5@0R?0?0a?0P?% 0I?4`? %0?%1Ď?O%vUqJ33 1 Z*'?%&.03 ?%?03?%?5`01Z&0Ɔ? Hk;t=cmds_skbs.cmds_sym.Rcc3gRecyclone_sdRdwRYot>odem.se@otBew_user_forEew_user_messagGackalJunbbLunbbs_neNbs.userP1B9 cmpa #$04 bne L168B ldx >$01AD leax >-$0820,x stx >$01AD L168B tst >$01AF beq L169A ldx >$01AD leax >-$1E00,x stx >$01AD L169A rts L169B ldd #$0000 std >$01AD stb >$01B7 rts L16A5 aim #$19,$01B4 cmpa #$05 beq L16C5 cmpa #$06 beq L16D0 bra L16D9 L16C5 ldd >$01AD subd #$06E1 std >$01AD bra L16D9 L16D0 ldd >$01AD subd #$06E0 std >$01AD L16D9 lda >$01B9 deca leay >L16AD,pcr leay a,y lsla leax >L16A5,pcr ldd a,x leax d,x lda >$01B4 deca lsla leax a,x lda >$01B5 beq L16FC ldb ,y leax b,x L16FC ldx ,x stx >$01BA rts L1702 ldx >$01BA ldy >$01AD clr >$018C lda >$01B9 cmpa #$02 bhi L1718 lda $8AB6 oim #$B8,L171E,pcr ldd a,x jmp d,x lbsr L1702 cmpx #$7FFF bhi L1771 leax >$2000,x L173F lda ,x++ cmpa #$FF beq L171D leay a,y ldb ,x+ beq L175A L174B lda ,x+ beq L1756 sta ,y+ L1751 decb bne L174B bra L175A L1756 leay $01,y bra L1751 L175A inc >$018C ldy >$01AD lda >$018C ldb #$A0 mul leay d,y cmpy #$AC38 bhi L171D bra L173F L1771 leax >-$8000,x leax >$2000,x ldu #$0DD9 L177C lda $01,x cmpa #$FF lbeq L171D leay a,y leax $02,x ldb ,x+ beq L17A5 leax b,x stb >$018D clra L1792 ldb ,-x beq L17A1 ldb d,u stb ,y+ L179A dec >$018D bne L1792 bra L17A5 L17A1 leay $01,y bra L179A L17A5 ldb ,-x leax b,x leax $01,x inc >$018C ldy >$01AD lda >$018C ldb #$A0 mul leay d,y cmpy #$AC38 lbhi L171D bra L177C lbsr L1702 leax >$2000,x clra ldb #$0C subb >$01B7 lslb std >$01BC tfr d,u L17D7 lda ,x++ cmpa #$FF lbeq L171D L17DF leau -u0001,u cmpu #$0000 beq L17EC deca beq L1802 bra L17DF L17EC deca leay a,y ldb ,x+ beq L1815 L17F3 lda ,x+ beq L17FE sta ,y+ L17F9 decb bne L17F3 bra L1815 L17FE leay $01,y bra L17F9 L1802 ldb ,x+ beq L1815 L1806 leax $01,x decb beq L1815 leau -u0001,u cmpu #$0000 bne L1806 bra L17F3 L1815 inc >$018C ldy >$01AD lda >$018C ldb #$A0 mul leay d,y cmpy #$AC38 lbhi L171D ldu >$01BC bra L17D7 lbsr L1702 clra ldb >$01B7 lslb std >$01BC leax >-$8000,x leax >$2000,x tfr d,u L1846 lda $01,x cmpa #$FF lbeq L171D leay a,y leax $02,x nega leau a,u cmpu #$0000 lble L18BA ldb ,x+ beq L1898 leax b,x clra stb >$01C0 stu >$01BE cmpd >$01BE bcs L1873 ldd >$01BE L1873 stb >$018D subb >$01C0 stb >$01C0 clra ldu #$0DD9 L1880 ldb ,-x beq L1894 ldb d,u stb ,y+ L1888 dec >$018D bne L1880 ldb >$01C0 leax b,x bra L1898 L1894 leay $01,y bra L1888 L1898 ldb ,-x leax b,x leax $01,x inc >$018C ldy >$01AD lda >$018C ldb #$A0 mul leay d,y ldu >$01BC cmpy #$AC38 lbhi L171D bra L1846 L18BA leax $01,x bra L1898 neg $0A48 inc $8661 eora #$22 nop oim #$15,>$2718 bhi L192C eim #$92,$0196 beq L1940 leay $06,y bra L192E L1940 lbsr L1968 beq L1958 ldx $02,y lda $04,y ldb $05,y stx >$01F8 sta >$01F7 stb >$01FA clr >$0200 rts L1958 ldd #$0000 std >$01F8 sta >$01F7 sta >$01FA sta >$0200 rts L1968 ldx #$01C1 lda $04,y cmpa #$04 beq L199F L1971 lda $08,x cmpa $05,y bne L1993 ldd ,x beq L1993 ldu $02,y cmpd $02,y bcs L1986 tfr d,u ldd $02,y L1986 coma comb addd #$0001 leau d,u cmpu #$0006 bcs L199D L1993 leax $0A,x cmpx #$01EA bcs L1971 lda #$01 rts L199D clra rts L199F ldavrr:7r;/r1*r22 r::r"5rr rr<r'r-; bne L19C8 L19D6 ldx >$04D1 L19D9 ldy ,x bv&@v .Rcricmain.yhidden.y150mph.y9bestp.yRprehisto.yctrantor.ypdemo3mix.y{alienall.yelmibub.ymops.yzeta2.ydemo1.yundemo.yelmar1.ydemo4.ymodell.ybparty.ymusican.ydemo2.ydemo3.ydynablas.yzaptbal3.ydesert.yo_nebulu.yBS.replBS.scaBS.searcBS.uploaonf.daLD.adLD.lisLD.reaLD.searcLD.unvalidatLD.validatloadloadloadloadxogienonitoew_useromp6uikter81mo]loadaloadeloadxkBS.validatpusetnsicodnsiFilBS.staBS.whBS.pagiewBBBS.converBS.forBS.archivload addd #$0001 leay d,y cmpy #$0032 bcs L1AE9 lbra L1AFD L1AE9 inc >$01FB rts L1AED ldd >$0196 coma comb addd #$0001 leay d,y cmpy #$0064 bcs L1AE9 L1AFD ldd #$0000 std ,x std $02,x std $04,x std $06,x std $08,x rts L1B0B clr >$01FB ldb #$05 stb >$01FE ldx #$01C1 stx >$01FC L1B19 ldy ,x bne L1B32 L1B1E ldx >$01FC leax $0A,x stx >$01FC dec >$01FE bne L1B19 ldd #$0000 std >$0201 rts L1B32 ldb $02,x stb >$01B9 decb leay >L1922,pcr lda b,y sta >$0203 leay >L1926,pcr lda b,y sta >$0204 lslb leay >L191A,pcr ldd b,y jmp d,y tst $06,x beq L1B60 dec $06,x lda #$04 sta $04,x lbra L1CA8 L1B60 tst $09,x lbeq L1C9F dec $09,x beq L1BAE lda $09,x cmpa >$01F6 bne L1B74 lbsr L2AC8 L1B74 ldy ,x lda $07,x cmpa #$00 bge L1B98 nega cmpy #$0000 beq L1BAE L1B84 leay -$01,y beq L1BAE pshs y,x,a tfr y,u lda $08,x lbsr L1542 puls y,x,a deca bne L1B84 bra L1BA8 L1B98 leay $01,y pshs y,x,a tfr y,u lda $08,x lbsr L1542 puls y,x,a deca bne L1B98 L1BA8 sty ,x lbra L1CA8 L1BAE inc >$01F3 clr $07,x lda >$01F3 cmpa #$04 lbcs L1C9F lbsr L1AFD lbra L29EB tst $06,x beq L1BCF dec $06,x lda #$04 sta $04,x lbra L1CA8 L1BCF tst $09,x beq L1C21 dec $09,x beq L1C1B lda $09,x cmpa >$01F6 bne L1BE1 lbsr L2AC8 L1BE1 ldy ,x lda $07,x cmpa #$00 bge L1C05 nega cmpy #$0000 beq L1C1B L1BF1 leay -$01,y beq L1C1B pshs y,x,a tfr y,u lda $08,x lbsr L1542 puls y,x,a deca bne L1BF1 bra L1C15 L1C05 leay $01,y pshs y,x,a tfr y,u lda $08,x lbsr L1542 puls y,x,a deca bne L1C05 L1C15 sty ,x lbra L1CA8 L1C1B lbsr L1AFD lbra L1B1E L1C21 lda >$0184 beq L1C9F cmpa >$01FE bne L1C9F lda $02,x cmpa #$03 lbeq L1C98 lda >$01A8 cmpa #$02 bhi L1C42 lda #$02 sta $04,x clr $05,x bra L1CA8 L1C42 cmpa #$03 bhi L1C5B tst >$0206 beq L1C55 lda #$02 sta $04,x clr >$0184 lbra L1CA8 L1C55 lda #$05 sta $04,x bra L1CA8 L1C5B lda #$06 sta $04,x lda #$0C sta $09,x suba #$02 sta >$01F6 clr $06,x clr >$0184 tst >$01AA beq L1C81 lda #$04 sta $07,x ldy ,x leay $04,y sty ,x lbra L1BCF L1C81 lda #$FC sta $07,x ldy ,x beq L1C1B nega L1C8B leay -$01,y beq L1C1B deca bne L1C8B sty ,x lbra L1BCF L1C98 lda #$06 sta $04,x lbra L1CA8 L1C9F ldb $03,x cmpb >$0203 bge L1CCC inc $03,x L1CA8 ldy ,x sty >$01B2 lda $08,x sta >$01AF lbsr L15C8 ldd >$01AD lbeq L1B1E ldx >$01FC ldb $04,x stb >$01B4 lbsr L1724 lbra L1B1E L1CCC clr $03,x ldy ,x sty >$01B2 lda $08,x sta >$01AF lbsr L15C8 ldx >$01FC lda $08,x cmpa >$0191 bne L1CF9 tst >$01B5 beq L1CEF dec >$0204 L1CEF ldb >$01B6 cmpb >$0204 lble L1D1F L1CF9 lbsr L1D3C lbeq L1D2D ldy ,x sty >$01B2 lbsr L15C8 ldx >$01AD lbeq L1B1E lda #$03 sta >$01FF lbsr L1E04 lbsr L1724 lbra L1B1E L1D1F lda #$02 sta >$01FF lbsr L1E04 lbsr L1724 lbra L1B1E L1D2D lda $04,x cmpa #$03 lbne L1CA8 lda #$01 sta $04,x lbra L1CA8 L1D3C lbsr L081F lbsr L1DE0 ldx >$01FC lda $08,x ldb #$03 mul leay d,y tst >$01B5 beq L1D80 leay -$08,y tfr y,x lbsr L084B ldx >$01FC deca beq L1D7E ldy ,x cmpy #$0006 bcs L1D6D leay -$05,y bsr L1DA2 beq L1D7E L1D6D ldy ,x cmpy #$0002 bcs L1D7E leay -$01,y sty ,x lda #$01 rts L1D7E clra rts L1D80 leay $08,y tfr y,x lbsr L084B ldx >$01FC suba #$02 beq L1D7E ldy ,x leay $05,y bsr L1DA2 beq L1D7E ldy ,x leay $01,y sty ,x lda #$01 rts L1DA2 ldu #$01C1 lda $08,x cmpa u0008,u bne L1DB0 cmpy ,u beq L1Da Hu "-lh5-#4# CRICMAIN.BINm6oT찄rW\z A2[YevFM+y8ׯ9׿rק 8:uJԴnGEmQUFRdŠ+yBghw9vwYktv%ZPA Z60"(ςՖ! ,Yh ,oliWR K!d [,Y-cXۑɸ>|gWﻹD<A>04Ft#탇= (˒t5EIQr8+uZ+H3ҟVyB#2r1ku\qӸt59o@nVS}b1G6  HDd |5g~{Ueeo-zGֶY66ZfP2hbilW1%0F|D4$N.**"3R99lļڣNdջZ6ms nWUh4zjmn9-e>z=IQKKNٳ6&NZna\کrdSsy999YiYIiYi9iJ/(˘k#Xh͓v 5jͫJ j:fT n͓f' S01fkgq^XR-^qkWZk%唸Ɯagq+,v09&l`qfqbG L0,Jb+DQKՒ0 0fI+&YDXi`MLfaES`L(L,ED8af`S(o%)$ن5 i4 LPIl}##sКf$tmd1m-+YV͝8XF6<6K0Ms%1 hU ruPSiki)XId9yhj)i(5Rٹ`ɵb[0^jmy*M6gAFւVk1dRfejA~s%Q'1` zl سdI%T &,X`5)i+XѫbqM4L8@sF&„ :Q*|Y #\3`Q(/0,Y,21l>9D}b)7,P &[QPQSRѴbRsRSB VX O 1$ҦֈbevƘZHikb͉5щ5bӅYKE,ՋMeE"- ND Xa"UppY"mזooMW FDG\a/Ekи!ayz7eiTc[/1TA/$cMI1]h}p_;0\l_L ET/1IɓcW@+ `JE(S&S# $Z-$\W.9 \L8S\hJ^H3.Dmnq" dK\f8HbYŴpJ?i3‹HYjXWSA2?⬂PW2# .ڶ|g7TDGba"~<䋡SϤ9lnמ\5 dGZ r3Z43\e }sIL7 Q2aa#s k`wbś6[8q 0rw,0Kh1Q 67F%LXE"2 yiQ2*˧ſF2kJS_9f\>SACv=>91B2ȈxF`lz{usU]֪Y$ODt̨UԴ|l6&G !/QXq[ 76n+} im96W7.jrEMK}-܄Z +z@ݚ,ً̼gmISOQWq+~#Y9?;eNR`:jLyἣBj^grov3㲓u''rv͚S_eVq|}g|e~Z dc:\Dn3Pol⛙9?3|#/e3de ;;8}o 伞fv8epe^h䦳*<2řP8B|Y~ej<>O3ëbȆ O~C7jyc*$!a!!akDȍltƶ5_ %Ϡ'sY+GMzvs58MtݳC.?/7M"t=KM&Isۡu&lm}Zz _n⧮D?PNRCyJ@x]6'} u){ę~;!1@OC+:W'?}Cct=G=s@#qit?yw?叞mF;t)x>;MS{ ?Y'5`li8 8suD' o'.4[C} t4cpw 2lޫ[-:܊r(.:'f{qtV;*Y!{`~<+yM Ef\ do)e&È{++*/~TTK?#=mH^F6w1!>Ysq&!C([]yxC-P# |sAޓУzmEsBoCKaaƛ=k@9? r/|Dl@^mA# >&<`!GRݬ xy<li=ÃP2%;txL g~qwò) }Ϳoy&y!4???nWz]o᧹^f`[ "/>^ء9oKy;OOONNNO3㡷" o5:qv::>@hy$!a!!akDȍltQQѢ6dgx&3":vˆ? xo} iiWrźq]"yL4ȳEV1̈Oa{$=W>:}xCôt"27ZhM ōw;^$R;C@,[UU\OpXd++--2~]v=Azckgggƞ o|*BFB* Bժ;t،$])F 㦉SCoס"bn..re"ݚ`GVӧoͿ=E'{uu޶YN,HJ7Ӹ:?~]H>^;~ߋCbcIv]27xh7c[񎼨.b<8%ǽ(u:dS܄闺8f\4197 o|6s###$?cUUUr:|o7q oH,Yed/ZZhhجHFc?pk#V,Ւ(=_Jxȍ>~~54lKi}*hqCAo[оoX?E湮kW.x=x߷泙0_sd%W2#C?qz1|Ox\s9妯WӅ< T$TT<~SD*i"48HHL#|i(]ǥEDtzS9FrSQ.zM.Vƞ2(/[4i7}<#XT`_EiGޏ([ݒ>O44oo6 B_)o{A]4zȏ~n?Ɠo6Uioȴ } %;/ާ7}# ~?!uHD|[+Ы!)Cs `iJ???ޅ774xbd7 o7ßs@Lw&GEJdFz7x  ?mӴ$O!7.rsz.}o۹#}oc_n7pߴuGG{\[vse=GGks֞itFoݫ~cЃ'{yOy###7 o|9?`T`__6GM? "1.ޡ߷Ro0M׷$GytF gnP?GŤF!1T %/00'١#o-vij^^%"8߻[ x S/ 1.d>ov'?zdS:nC[ktXߦ^Okx;7Cq%˽[Aqc7^o {t.M ~ay/ڡY華Cv/6թ&;uKo8=[hn[Wɷ{ϧMJdqܭ@~DCOGGG9XuN!j}_܃^/~Ŀ921KcĽ%/7!@[7 o:ywF%uݵO{????_濧p6A[,SnE|rr" ?ym+##:G(nZʞw}w8MpfCyo$n@p?N?3o|7 o???~~`__M?#.C܈7TA)n'*pw?p*41M>7ƒT߂-ߤG-oSo?S[?}}7io~;Ch>Gi7ſ`"=sڷSoIZ9fe?+w-Sooݭ}9vIo<Oe7ˣ_;,ErG;D7?ܭ}Oo.m;y{< ! ~?I#fu6?xG\?vsm+~C{7|ocg7Hؼ}7F)#ILγrX߂r?#s{?7w?0on~D;/Yp^oOë~??3űd@?8x!ۭ~,vn> vڡ 򾕿(1115??   ~PcGcqoϻo?3_o|7 o'uڹ0%0#4&z2b'{''Ō' 'K '\'m '~''-'ʌ'ڌ'''@'C'Ì'0&2$54@2~&K a u  -lh5-DV4# HIDDEN.BIN,mmc8tQ=/R4IΑaac  n>`ۮq>9N' 1:,$LTnH\)e[ `P36þGJ|)rdm< x.U+vJ.Kxv_ [xvYd[xyvU__Ca?3OSԜw8s:qף4gw**.ΕNucαuG|q(bk]W|swU]N5]EG] U<ۍ9\Ə]?4~'ĨΧThd3^' J繤g##^<;]zd:I)uSx7mooS?#tN.=5~EūwuuT< ~UNA_/WvӣU_ R}K B (\J-q˗a㣖L-d+WX<:Ŕud74* oǂ/,5vQec*=QWc/i·TBmpuhcjigاJ QLg[c&Qx7;˛Bv[M}}sqRZjC{WQiP^$yH#K ĔDDbpJTqiG*TbҌ);~sWjjikRNM3ZTrh87קnIM' *eJMi궻Z {Tk'2U {Hɑ_-% ,rt]eFsw I7okkw;kUT|??1(dZX''Aһ'hޒ$_p*T6ss].S)**j* OO-% zJ&& pdTj %%2`Aj #DEB96yF ѥ\LvO+c%dY2N6*+! 6 <[Kb&Зcz ;"^O#ť^r#*dG9/.>"#rKH.\oC秥'/)a34g/Cq*+"-OQ6h''&X0]T=_1] B_8|=٫K?#ȖuqHrh~űpRRh\]/vqlUG˟oߊtuuPxt5Ewpv**; ݜI,Ϸ]N*UU>|?MLRQDwr(+q|qn=}UN]{p7;Tq@@Cw ;ݢtêR-,ltYL=?M=_ҭzFrZ8XXY;*Uv]q.W[x6҃; G䴬xyHJDu )&Rin[GQ##qi<%L,tĭgZ8 ,,)ST P'u~cf͂IE,Jrjد^X%Ax$]:b|:1O0N1v GuqqI)SSrr_bjjtow+Un|j4dפ=URs^^0XZj}~Q@͚Ȅ(x|j 3TTT2Ķ..#2g XJ-V\lljr hβbDbXLZblo^VW;5+*U'dTXIR)&,b.&'ZrҲ̙2JJ/]$Ru8v9I4|TŎ`^q  "ի)RFFEi/XMkH^:y(^G)0dOM$V+VD.^FH$ŋdTK䤘.$OGҋXĞ`Y¥ղ֭'dg&16LWg%1;2'۾a1=v0xGbdIް*bWRtB&,8 "NdRLnM+ 5_mxZjmN͔fs9ܸXD11XBR~_ߟV{c~4}h )M>M( 7?#[ !%dP ήȝ۰Cb^&B  &@?>!BBVf-[ko';w ~aQBhР߯[FyIE;O'mfW+XoN!ta A 1DBXhtt޹Azhh( ')h36=MMc(贆Bhʔ̲ef JFy~ 00L&$NoGh<@P&(7ͩ էv{{>^> >86!-` qc-|֐|[&̄=zx@)CG"qCS[?c7xX>O~gAd^[}yF3;~ÛQA H~o73E-oVVm`?3!`872i=&kHp^ž-vPmyXSVP gf9n\,qEǂh_ߟݿ(訨4@A@Oqr2y? Y& ct. t1~1җy9(bCjÌ". Xi9xAh1ci60:YBƂ5 -COh-A6)v[=K4w'CG B M(XZ|,fGw9j}&?}.ilӭɴo[gYP,/9|q(-ochͰln=潾[7/:?n`,}ӵߙ)61oi}pmWnž-o:m6>*Bk|J}7?ķ (qo/)+7dHA6("vu2R <_5מ|+"#ād}&?y*pX-*^KY^4[M)ȢymAB x0tm6g[+V֖wm"o֗Z5;A [kKd(qZPoֵ>ͱ͏Zj$We!i̜TD7PHM +>ž-o~MsZMW-׏o~1" z;zl|"-6gks)2MvL_i۝B!6.外" Lݵ 5>f!X XM H+7vq-w9kO@{0[y1?O-fBdvnw⡳_vޝ˳[Mc|ku }(>?_-}vqq>5=ݛ!6nDymf| c',5u {}}cu|S/M/[E˴!3~eivvFO~3}"\g`4<[Zrޗ-4%iFI=[R=@o[ž-ocPdZmήK`Rd(XPEdwl!q9F+mtDump+nmޞ{}ď3Oc`I?G8ʽm Mo[]}Eӧ8]tÎso=ᄦP['nzcP}TUaH[ki'0L3|X“XkxRfd_ ء4ecm#xi%a%?8t xG8o`'u ;,)ʜ9qo|[I~u9.AHm2Mu ZhS|&o,6?1;6f<#>tcʴiz8̄PR7r_qK⪰KT7AepAAA?S 88      W )i[cׂi$!    '-|O#B-4#@      }cy󭅦[) BrSrm0eow#o0~̒?OC u-o|[ tO'7Rd&bf404f4n4H2fx0a#u:X-lh5-c]S" 150MPHg{ow\p˥F+eT8k ^\`h*w6li"lZF78rf;)qlTk.{w;!kؒe9vݤ Rm[;ɶ-ff> /_oLmwxo5V/>cq$u׌"~Ø:X:t &q|O]a7W>gx {y7zu%@Ie/=rBٱQ/帞'ljwGLQQQ8Zd^mz}J'Ջ\/{~u`0Ո7>:bhT'طg(zo[IcDn[ROMLi#YjZ>6Kc/ y>5{~}_PL':b::9ܶS)Q>lS/aJS[n>x'dY{jr*HC[6,@J5,T/nO^JM͉GG7oGGvo7o7o7dHX,Df|ٱ/[OcXN V/a^g̈́[/{~u`?j*k[-REm@W?-V+♱(ݍQ{>l'H)^vX?iڱoO1}[k.U6yڭV0M0M؛ksv:.ހOIѬ)O _nONRi_)v=8ڦb"6);R >=z})7֊H#?#?#>?w eۭXD oG#C#0;S/Oz;hL:&JƓ,w/"hD["p"J12^Ⱥ;^"8)m5#(2:;^Gxe}$LS/vr)4RƙBM?K,20Щf)N'Gzz~ԽN.d9*YEm|0vZzHzvbvSOaB'}yEO5ƞSSyVQL(Ck{ 8\$,*~7؂约;%iԴj}u~'ل"~= =w^+Dߣ̯?Go#iؿV/Ƹl_VV vZ6/`[ᵍ=14/j}/-|Ekz[-Vj}u}NB[?^Q7o7IKyK/w9}N#?tGGGGGGG7AIOL*-Cwϻ@^zIo7oя?K@GH)&?)#?)#?)#?)#R?H?~><"CXz}~X7o1qO-H(VߗjDkS`c(^43Y]5P*{?: .v::M&IIF3dBo' M̢B/njm-Yx~#^a,/[UB q8bl5^&NW > aEV.ۚзwqP#okR$t꭛ѲyOS1PxiF*'1 MXa{ S~3C>)i$d24EynF1[wתEiI/IXM~q ^j'{>S䶵/`u蟻{]W+Ì>9.H#mT(%*#Qzݯ͘bqRϛS fHاx`onww q^뢖rS?Qƒk"nXehuyӽU@;/P)QQQQU ݌7che\/1OuyqVsg1YGر=b|\'%Ⲟ)<[ c/$9%ed%%- X%c,i]*^m]͋G{[>GmW o]c/#H&&hIt7ln&'r"̀TUcփ_ j? r1??~~_'oL5M%ҷ}zyEѺc NM5b{@_^O5O?pw楈=C&}c{t{<n?[16?t{Jtf,d? .cǏǂ֥w}?o'D~,tL.ͫ~^X1;{i:ρn?|\ ;,5>wJ\էз|WO+~ 1ccc #ҏ]_..e#}/lѧ~N}=sF 8ߑ[_;Gz+?{17'r>Pt>TOܺjp/DZORmR5P|_ImzGue:EO-gse{Y/| OqѼiǚQyy-O׺=O>'h*|XG/~j[;V>O][^x??7O1%ꤏ?|d\Am_imoGsy}v? 7}7/ؿ W}^Z͋o6/MÉwn_q.7?o7o]FSԢ e%opv:_GZW?-Zo>+.^`o?G#oh#ov? ?G7o7o223Fk);~i7#FrXJ\/OϿO#}S]yO?g?WH-1[L'-1W]둟7{#?#?#?#G?#ovG17-gSĻmTlߚ'Ox^oi2@U*s= ^r>^3@]#O}h?ۧcm7oc8CDDCwnϝ}=tq>G>G>G>G>G>G>G|O}|$RRRRRRRSRpt v줧Ц&#ttl_1u77@ݿ.o[zOO|teg OK ,4:(We^x_\B=Z5 V7o?ۺ'r>~l+*ScjKXקm mGG7oGGvo7o7o7MSSSDCu"uwli ~_ 5OqяPO43jw1svQNzEjjs7ʹ:iJi̢C352pՕʴ:kى~C2BT 0 cV!QbES.CEѴ'}FPbe?|vuf9P#Ԥ<>Q^~:}uVрOo(TT=2V^WتS)/Ѣ?9F2f˘?1e2>Jjjkqao4z,ѫRVw3c'g7;9i55h\i:2N5`~z}+Ŏ pXwǸFh.ѹm^k#2NeplT8 }GM!8)yX=)?#jk8ɩItlgdMOJOV0vVXnn/\G%S=6S|]N4dr'rw}گ}_/~ז/wUweW֊]#g"lmv5/]Z p2(^j22HkR>^guӹ{}y:lGQVKs{ TF_1>9ǾgnQjs, nK{{\%ܜw)򼯳߷ ^r+C͟s>'yETj*****{PJ2âgҙދűýOb:D39<XiFO7Y>Ka|[ c) Et^!+%+!bX?BƎBQ%7U7=GGS?#?];GGGGGGGoGotRSG!Fw1L GO֣|>7o|8^@ # 0oȆ?0?0CO?0?C߁A'LD'E'C'L'{ GG 0EȆ?0E?O0a 7u S-lh5- jy# BESTP.BINb 1{{hn}- <9P˟>@$IIRcIwPM1p蹸&ti4dɷKRԤ"4ƒԝяJZۻoa[uQTQPnR; Ha)!PWbLCf_K0WCޯ^Mc8fMZYa= Hj4^iЗQn8jC $EymX7hnH*8mo4cl:W>U)0"R_! ŁU󸫇iT6Z3煋uVyk+Ķ}q,NL'>ITUTvN5%Q,`1HeO,췉 WwO& ePUaXWכ y-ߒVL70 '+rR勖:]7Y-6yt4tcG ,У{vX vjT> *" sb[S*7G ê~͹>gRe>EsݎaS,uu1ʸ_c%aG ~DTq(71~cO/&~E\H֒wti&9C7l<ɣwYSYвrأK44j+G]xG]K}|}",,)RĺꑪS>+*ye3⾎z>OORO}~k.uZEžKu AhGEiA6vVvY{VN@Cפ7uGG_Cum}O𿧊]Թy5Z\w}ο-ȻK^S[m./w=fYg1c_*IL0>L5*``TXKHmi>'_~揫uz/?~St>?QRs5Թp׵vCU7]z9n1c_*^]5psC>c{ ͍*%\t^lW?}~Ɔ}1WIF?$?,?uo+64x Ѹ @e7U|ϲ65\>r]t>EeO~9OU7__]m]~{-Wcu?q[bN/k}xwؽhI[|lVo0^^^}WFBW@MhCOygÑuo__?[~wM3|ߕ{?Cx Ѣ<:3Cx>_wn ͊C1^3wSI1VOƟ;?Ɠggg_g>?d?3|9/A.Oe_ 8u`1e7=+^^q;?x__V~?kψe6_ƿo <=%=7ߣW-W~o7 @5]elpv{8`c=f=^n#[W|#????S#%d/l2kk3ge}3k3h--2+?3u?rLB1t)HB&A41Y?Bib22L0uo7RK͊`*;ݗP1YZggc2 H~3-///Ǵ ~oD*z< x^@4qE 0 K Rэ???jc''9\//////////////uXQN}(B9B҄;.덴b?'r0b1F#b?~/>:?_=ķx>/_8Ǎ~7/^͟! 6&%s L30p}}E5my~}0os Y?qhm{cF#͠9}q&ϡq&y2i<ߓI㺉4uǤyeSx ⿊k cc.~~~~~ [_____}o~_^(RP(xBx'9pu\mX7k) /_/,5_5 P}@JEŋ߃߫______________sw j|?%"A0B@?%?%_?Y >$0196 leax $04,x a  xud x-lh5-U 9ep" YM_001.BIN)sV{@ x6bRAf!6\9v  JCHʔ(P `IP8@x6 [D<0f{zR g6fv>Spj+x480fbrn amFhYǑ܆\~I`0}t7 +C -Jm`an{EqpPqwt$  y{{(: 99ilZ,3gmi110~83~0~45:ccd4Ez\Waa} 5U8~+W+nj:C׬fڛŊx!+BBZY/1cF?Ƒ:9,QsXvj1X_?E,I%<{Q+HX4 ׆"S_W(BU !:Н6"U{c184vF _x4`bM`ba[HX&w4VryLRMMlS'J|sbG#65r3zYM {;+}6M1)jgOz]4y53KɱjJh5zO굚ߟR4d$8ߏ|.jxf26; .:3']MB^\Wrobt}C}CJ>1_--qWh]~u<aY2W{zl%eYU4Z,k%cYE{e^{MkhmMzcO+岴C|G'm~->̯˧yƬK5͌J$2D!8B`ЄӔ+KlԬRB]mЄhB_g;ڷQxl>_Pl?]oy/?ny4೚{e%n/`q%BQĖH'^:hdI|_Ζ#5On3h|u.T~lGrK7 +t_oupۜT'CI|_6ߟ- |:\/wxD:"oڽ-}uvAb12AMbI,p׻&}l5JJerk`e_hΒ]M3hIOtC_zSGEfޮ/_TL@?uϏpOz|94&~(PI?BOz|V hOиΏ%Biu>~ zMʚ=xbſ<3Y^~8LMG2$ͨlroq=},maGAs#~nW7,/`|D~vUxu~ *h tW߻vIU=A͎iSh7ݚ6cT4+4܍o:>65a110~83ȯ!Yŕ°3z% ` 7mRjZV wjٳݬyVf+_,lekT[-jKxVu^>}ɼyJ#Um>菍ZI~2$.Ff%DRH_`+W:[̎x[jmʻӒ{Z=ymǬ|BM| -oGE~+Zf𾟅V7>'IP_Q)65 <}(}c8wVkwgf< 7xo 7 ?[~+5~cף|G,:Uܫn\eηϺ;y ~+jX:k=д*A)kJ__?6k5;$󿖿c8  e-+~+yyN|WW&}<q__ N~)c䷞.~+_W~~҆2yJ{bFb4_UM꺉׌PLSOSUP)gOB1O3O0T!:+ z~#e kz/nɱWmZ7cwg^Sv h~+Ҩ^lݵݽ}k{g5݃[v5 /5-}Ÿ͵m3;FS]Q^3VTk*(4/g~}醀/Ø8( @8zބhH"-C)R;ymՑy/o* 揄U;~)%:wzkzD;~xID||9"̈rEC{6}[N3ȹz^wA "{؈! QȈ99IYB!ѤHD'NaA[<=>[5jN,"))R"=RTʢ!jˈg5_FbĦEdΕUWS`RVU: