,L6CD l0C)HCC WhL/h `CmCDiD`  R@P1  Y0@R !L` D  C D     )16CS S)  C)D1 p p 0 C9DI pCDL~CiCDiD`gAMEMORY MANAGER - LOADERA  == =< BOOT DOSVEC  DOSINI  ROMADR( BR02 BR1< BR2ACOLDSTDF MEMLOP ICCOMBZ ICBADd ICPTFn ICBLHx ICAX1J PAGE NMIENԖ PORTBӠ CIOVV OPEN GETREC GETBLK CLOSE START SETUP !LOADER SETUP Q> PDOSVECQ>PDOSVEC Q>  PBOOT  QCOLDST  HSETUP1 !SETUP2SETUP1Q>4INIT PDOSINI" Q>5INIT,PDOSINI6=@Q>J PNMIENT PROMADRhQ>rPROMADR|%>PLOOP1Q@ROMADR7 PPAGE81 ILOOP1 ROMOFF%>PLOOP2QPAGE8 P@ROMADR71 ILOOP2 ROMON3$> Q>PROMADR&LOOP3Q@ROMADR70 PPAGE8:1D HLOOP3N ROMOFFXLOOP4QPAGE8b P@ROMADR7l1v HLOOP4 ROMON#ROMADR0 HLOOP3 ROMOFF Q>4INT1P Q>5INT1P Q>4INT2P Q>5INT2P Q>4INT3 P Q>5INT3 P*$>A4LOOP5QVECTORS9>PP9H0R ILOOP5\$>OfLOOP6Q9p PDRIVERS9z0 ILOOP6Q>4EPUTPDRIVERSQ>5EPUTPDRIVERSQ>4SPUTPDRIVERSQ>5SPUTPDRIVERSQ>4KPUTP&DRIVERSQ>5KPUTP'DRIVERSQ>4PPUTP6D RIVERSQ>5PPUT$P7DRIVERS.Q>4CPUT8PFDRIVERSBQ>5CPUTLPGDRIVERSVSETUP2$>`LOOP7QDEVTAB9jP9t0~ ILOOP7Q>@ PNMIEN.Q>4EPUT PICPTQ>5EPUT PICPT ROMOFF: INIT SETUP! nDEVTAB APAx DRIVERS0 ACA DRIVERS@ AEA DRIVERS ASA DRIVERS AKA DRIVERS  VECTORS VECTOR VECTOR VECTOR VECTOR VECTOR VECTOR VECTOR" VECTOR, VECTOR6 VECTOR@ VECTORJ  VECTORT VECTOR^ VECTORh VECTORr VECTOR| VECTOR VECTOR VECTOR VECTOR VECTOR VECTORVECTORPTEMPA7;S> PJUMPV7 QPORTB5 ROMON QTEMPA &JUMPV 0 PTEMPA:6D7N PTEMPPX7 b PPORTBl QTEMPPv5 QTEMPA8: ROMON65 QPORTBL> PPORTB78: ROMOFF65 QPORTB M> PPORTB 7*84:> INT15H QINTVR5\Q>f!INTp INT25z QINTV5Q>!INT INT35 QINTV5Q>  INTPINTV QPORTB5A5 ROMON Q>5INTR 5 Q>4INTR$ 5. @8 Q9B 5L !@:V INTV ` INTR7j >t 7~ PPORTB 7 PINTV 7 9 EPUT%> !PUT SPUT%> !PUT KPUT%>' !PUT PPUT%>7 !PUT CPUT%>G  PUTPTEMPA QPORTB 5( Q>5PUTX2 5< Q>4PUTXF 5P ROMONZ Q8d 5n 1x Q8 5 %> QTEMPA : PUTX6 7 PTEMPP 7 PPORTB QTEMPP 5 8 : DRIVERS P TEMPA  TEMPP " LOADER$>P, Q>OPEN6 PICCOM9@ Q>4CONFIGJ PICBA9T Q>5CONFIG^ PICBA9h Q>r PICAX19| CIOV LOADER1$>P Q>GETREC PICCOM9 Q>4FILE PICBA9 Q>5FILE PICBA9 Q> PICBL9 Q> PICBL9 CIOV GEXIT $>p Q>OPEN PICCOM9& Q>4FILE0 PICBA9: Q>5FILED PICBA9N Q>X PICAX19b CIOVl LOADv !LOADER1 EXIT! CONFIG AD1:CONFIG.SYSA FILE* GETBYT$>p4 Q>GETBLK> PICCOM9H Q>R PICBL9\ PICBL9f CIOVp : GETBR0 GETBYT PBR0 GETBYT PBR0 : GETBR1 GETBYT PBR1 GETBYT PBR1 : DONE$>p Q>CLOSE PICCOM9 CIOV:LOAD GETBR0$ GDONE.MBR08R>B FLOADL GETBR1V;`QBR1jSBR0tPBR1~ QBR1 SBR0 PBR1#BR1 HLOAD1 #BR1 LOAD1$>p Q>GETBLK PICCOM9Q>PBR2 PICBA9Q>0 PBR2  PICBA9QBR1 PICBL9( QBR12 PICBL9< CIOVF $BR1PLOAD2FLOAD4Z%>dLOAD3Q@BR27n P@BR07x3 HLOAD3 #BR0 #BR20 !LOAD2LOAD4%BR1LOAD5Q@BR27 P@BR07)> FLOAD61 !LOAD5LOAD6!LOAD FINISH   FINISH START"MEMLOP ICCOMBZ ICBADd ICPTFn ICBLHx ICAX1J PAGE NMIENԖ CURRENT STARTREL REL1%>Q@CURRENT7$ HREL2.38;B QCURRENTLO@CURRENT7V PCURRENT` DREL1.1j#CURRENTtREL1.1!RELNEXT~ REL2R> HREL3Q> ADDCURRENT !RELNEXT REL3R> HREL4Q> ADDCURRENT !RELNEXTREL4$>SIZONEREL4.1RTABONE9 FREL4.20  IREL4.1 GREL5REL4.2#CURRENT( HREL4.32#CURRENT<REL4.3!RELNEXTFREL5$>SIZADRPREL5.1RTABADR9Z FREL5.2d0n IREL5.1x HREL6REL5.2 ADDSTART !RELNEXT REL6R>^ HREL7 ADDSTART ADDSTART ADDSTARTQ> ADDCURRENT !RELNEXT REL7R>H FEXITRELNEXTQ> ADDCURRENTRELNEXT.1!REL1 EXITQ>" ADDCURRENT,%>6Q@CURRENT7@R>J FEXIT2TQ>^ ADDCURRENTh ADDSTARTr !EXIT| EXIT2: ADDSTART,%>Q@CURRENT73L@CURRENT7FADDSTART11Q@CURRENT7 OSTARTP@CURRENT73Q@CURRENT7 OSTARTP@CURRENT7ADDSTART1Q> ADDCURRENT&:0ADDCURRENT,: OCURRENTD PCURRENTNDADDCURRENT1X#CURRENTbADDCURRENT1:lFTABADR ====S=-=.=0=M=W=x=y========vSIZADR TABADR(TABONE V=\=]==)=*=+=,==SIZONE TABONELNEXT REL3R> HREL4Q>05 DEF MAIN10 DECLARE:BINARY SCREEN:BYTE I,J:ENDDECLARE20 POKE 19,&0:POKE 20,&030 GRAPHICS &840 SETCOLOR &5,&0,&14:SETCOLOR &6,&0,&050 SCREEN=DPEEK(88)60 FOR I=&0 TO &19170 FOR J=&0 TO &3980 POKE SCREEN+J,&25590 NEXT J0100 LET SCREEN=SCREEN+400110 NEXT I0120 PRINT PEEK(20);" jiffies"0130 PRINT PEEK(19);" jiffies*256"0135 FOR SCREEN=1 TO 32767:NEXT SCREEN0140 END &6,&0,&050 SCREEN=DPEEK(88)60 FOR I=&0 TO &19170 FOR J=&0 TO &3980 POKE SCREEN+J,&25590 NEXT J0100 LET SCREEN=SCREEN+4010 DEF MAIN20 POKE 580,&25530 EXEC 5848750 ENDRINT PEEK(19);" jiffies*256"0135 FOR SCREEN=1 TO 32767:NEXT SCREEN0140 END &6,&0,&050 SCREEN=DPEEK(88)60 FOR I=&0 TO &19170 FOR J=&0 TO &3980 POKE SCREEN+J,&25590 NEXT J0100 LET SCREEN=SCREEN+40 210 DEF MAIN20 POKE 82,&030 PRINT40 END50 ENDRINT PEEK(19);" jiffies*256"0135 FOR SCREEN=1 TO 32767:NEXT SCREEN0140 END &6,&0,&050 SCREEN=DPEEK(88)60 FOR I=&0 TO &19170 FOR J=&0 TO &3980 POKE SCREEN+J,&25590 NEXT J0100 LET SCREEN=SCREEN+40*10 DEF MAIN20 POKE 82,&230 PRINT40 END50 ENDRINT PEEK(19);" jiffies*256"0135 FOR SCREEN=1 TO 32767:NEXT SCREEN0140 END &6,&0,&050 SCREEN=DPEEK(88)60 FOR I=&0 TO &19170 FOR J=&0 TO &3980 POKE SCREEN+J,&25590 NEXT J0100 LET SCREEN=SCREEN+40*100 DEF MAIN110 DECLARE:BINARY L:ENDDECLARE120 L=DPEEK(49146):DPOKE 49146,28215130 IF DPEEK(49146)=L:EXEC L140 ELSE:DPOKE 49146,L:PRINT "no cartridge":ERROR &63:ENDIF150 END0 TO &3980 POKE SCREEN+J,&25590 NEXT J0100 LET SCREEN=SCREEN+4010 DEF MAIN20 DECLARE30 RECFNC(STRING) F$WORD,F$DEF(STRING(*))40 STRING(32) FILEIN,FILEOUT,LINE50 ENDDECLARE60 FILEIN=F$WORD:FILEOUT=F$WORD:IF FILEIN="" OR FILEOUT="" OR F$WORD<>"":ERROR 63:ENDIF70 FILEIN=F$DEF(FILEIN):FILEOUT=F$DEF(FILEOUT)8 0 OPEN# &2,&8,&0,FILEOUT:OPEN# &1,&6,&0,FILEIN90 TRAP 200100 INPUT# &1,LINE:PRINT# &2,LINE:GOTO 100200 CLOSE# &2:CLOSE# &3:ERROR &1210 END$WORD:IF FILEIN="" OR FILEOUT="" OR F$WORD<>"":ERROR 63:ENDIF70 FILEIN=F$DEF(FILEIN):FILEOUT=F$DEF(FILEOUT)810 DEF PACKAGE20 DECLARE:RECPROC P$DIR0(STRING(24))30 RECFNC(STRING) F$DIR1,F$MATCH(STRING(*),STRING(24)),F$WORD,F$DEF(STRING(32))35 RECFNC(STRING) F$SCAN1(STRING(*),STRING(*)),F$POS(BYTE,STRING(*),STRING(*))37 RECPROC P$SCAN0,P$SCAN240 PRIVATE:STR "ING(3) DEVTMP50 RECFNC(STRING) X$PAD(STRING(*)),X$UNPAD(STRING(*))60 STRING(24) DIRFILE,VALUE(11),POSIT(3)65 STRING(8) KEYWORD(11)70 BYTE N,KEYPTR,POSPTR,KEYFLG(11),POSFLG(3)90 ENDDECLARE1000 DEF P$DIR0(FILNM)1003 DECLARE:STRING(24) FILE:ENDDECLA #RE1004 FILE=F$DEF(FILNM)1005 IF MID(FILE,&2,&1)=":":DEVTMP=MID(FILE,&1,&1);"1:"1010 ELSE:DEVTMP=MID(FILE,&1,&3):ENDIF1015 DIRFILE=FILE:N=&1:RET:ENDDEF2000 DEF F$DIR12005 DECLARE:STRING(24) FILE:BYTE L:ENDDECLARE2007 IF DEVTMP="":RET "":ELSEIF MID $(DEVTMP,&1,&1)<>"D":FILE=DEVTMP;" ":DEVTMP="":RET FILE:ENDIF2010 OPEN# 5,6,0,DIRFILE:FOR L=&1 TO N:LINPUT# 5,FILE:NEXT L:CLOSE# 5:N=N+&12015 IF LEN(FILE)=&16:RET "":ENDIF2020 RET X$UNPAD(DEVTMP;MID(FILE,&3,&11))2025 ENDDEF3000 DEF F$MATCH %(PATTERN,IN)3005 DECLARE:STRING(24) OUT,PAT:BYTE L:ENDDECLARE3010 OUT=X$PAD(F$DEF(IN)):PAT=X$PAD(F$DEF(PATTERN))3015 FOR L=&4 TO &14:IF MID(OUT,L,&1)="?"3020 POKE ADR(OUT)+L,PEEK(ADR(PAT)+L):ENDIF:NEXT L3025 RET X$UNPAD(OUT):ENDDEF4000 DEF X$PAD &(FILE)4005 DECLARE:STRING(14) OUT:BYTE PF,PO,S,L:ENDDECLARE4015 IF MID(FILE,&2,&1)=":":OUT=MID(FILE,&1,&1);"1:":PF=&34020 ELSE:OUT=MID(FILE,&1,&3):PF=&4:ENDIF4024 OUT=OUT;" ":PO=&44030 L=LEN(FILE)4035 IF PF<=L:IF MID(FILE,PF,&1)<>"."404 '0 IF MID(FILE,PF,&1)<>"*":POKE ADR(OUT)+PO,PEEK(ADR(FILE)+PF)4045 PO=PO+&1:PF=PF+&1:GOTO 40354050 ELSE:FOR S=PO TO &11:POKE ADR(OUT)+S,ASC("?")4055 NEXT S:PF=PF+&2:ENDIF4060 ELSE:PF=PF+&1:ENDIF:ENDIF4063 PO=&124065 IF PF<=L:IF MID(FILE (,PF,&1)<>"*"4070 POKE ADR(OUT)+PO,PEEK(ADR(FILE)+PF):PO=PO+&1:PF=PF+&1:GOTO 40654075 ELSE:FOR S=PO TO &14:POKE ADR(OUT)+S,ASC("?"):NEXT S:ENDIF:ENDIF4080 RET OUT:ENDDEF5000 DEF X$UNPAD(FILE)5005 DECLARE:STRING(16) OUT:BYTE L:ENDDECLARE5010 OUT=M )ID(FILE,&1,&3)5015 FOR L=&4 TO &11:IF MID(FILE,L,&1)<>" ":OUT=OUT;MID(FILE,L,&1):ENDIF:NEXT L5020 OUT=OUT;"."5025 FOR L=&12 TO &14:IF MID(FILE,L,&1)<>" ":OUT=OUT;MID(FILE,L,&1):ENDIF:NEXT L5030 RET OUT:ENDDEF6000 DEF P$SCAN06010 DECLARE:STRING(32) * THIS:BYTE P:ENDDECLARE6090 KEYPTR=&0:POSPTR=&06100 THIS=F$WORD:WHILE THIS<>""6105 IF MID(THIS,&1,&1)<>"/"6110 POSIT(POSPTR)=THIS:POSFLG(POSPTR)=&0:POSPTR=POSPTR+&16115 ELSE:P=INSTR(THIS,"=",&1)6120 IF P<>&06125 KEYWORD(KEYPTR)= +MID(THIS,&2,P-&2)6130 IF P=LEN(THIS):VALUE(KEYPTR)=""6135 ELSE:VALUE(KEYPTR)=MID(THIS,P+&1,LEN(THIS)-P):ENDIF6140 KEYFLG(KEYPTR)=&0:KEYPTR=KEYPTR+&16145 ELSE:IF LEN(THIS)>=&5:IF MID(THIS,&2,&3)="NO_"6150 KEYWORD(KEYPTR ,)=MID(THIS,&5,LEN(THIS)-&4):VALUE(KEYPTR)="0"6155 ELSE:GOTO 6160:ENDIF:ELSE6160 KEYWORD(KEYPTR)=MID(THIS,&2,LEN(THIS)-&1):VALUE(KEYPTR)="1"6165 ENDIF6170 KEYFLG(KEYPTR)=&0:KEYPTR=KEYPTR+&16175 ENDIF6180 ENDIF6185 - THIS=F$WORD:ENDWHILE:RET:ENDDEF8000 DEF F$SCAN1(KEY,DEFAULT)8010 DECLARE:BYTE I:ENDDECLARE8020 IF KEYPTR<>&0:FOR I=&0 TO KEYPTR-&18025 IF KEY=KEYWORD(I):KEYFLG(I)=&1:RET VALUE(I):ENDIF8030 NEXT I:ENDIF:RET DEFAULT:ENDDEF9000 DEF F$POS(P,PROMPT, .DEFAULT)9010 DECLARE:STRING(24) W:ENDDECLARE9050 POSFLG(P)=&1:IF P&0:FOR I=&0 TO POSPTR-&110025 IF POSFLG(I)=&0:F=&1:PRINT POSIT(I);" extra":ENDIF10030 NEXT I:ENDIF10035 IF KEYPTR<>&0:FOR I=&0 TO KEYPTR-&110040 IF KEYFLG(I)=&0:F=&1:PRINT KEYWORD(I);" unrecognized":ENDIF1 00050 NEXT I:ENDIF10055 IF F=&1:ERROR 63:ENDIF:RET:ENDDEF19999 ENDG) F$DIR1,F$MATCH(STRING(*),STRING(24)),F$WORD,F$DEF(STRING(32))35 RECFNC(STRING) F$SCAN1(STRING(*),STRING(*)),F$POS(BYTE,STRING(*),STRING(*))37 RECPROC P$SCAN0,P$SCAN240 PRIVATE:STR D1000 DEF MAIN1010 DECLARE1020 STRING(8) S1030 BYTE UNIT,TABLE(11),MASK,E1040 FNC(BYTE) DOS$CONFIGIN(BYTE,BYTE(11)),DOS$CONFIGD(BYTE),DOS$CONFIGS(BYTE)1050 RECFNC(STRING) F$WORD1055 RECPROC DISPLAY1060 ENDDECLARE1100 S=F$2$WORD1110 IF S=""1120 CALL DISPLAY1230 STOP1240 ELSE1250 UNIT=BYT(S):S=F$WORD1260 IF S="S":ERROR DOS$CONFIGS(UNIT)1270 ELSEIF S="D":ERROR DOS$CONFIGD(UNIT)1280 ELSE:ERROR &63:ENDIF1285 EXEC 20161290 ENDIF2000$3 DEF DISPLAY2100 MASK=&1:TRAP 23002120 FOR UNIT=&1 TO &82140 IF (PEEK(1802) AND MASK)<>&02150 E=DOS$CONFIGIN(UNIT,TABLE)2160 PRINT "Drive #";UNIT;" is ";2170 IF E=&12175 IF TABLE(5)=&0:PRINT "sing$4le density":EXEC 20162180 ELSE:PRINT "double density":EXEC 2016:ENDIF2190 ELSE:PRINT "returns error ";E:ENDIF2200 ENDIF2210 MASK=MASK*22220 NEXT UNIT2300 RET2305 ENDDEF9999 END ENDDECLARE1100 S=F$10 DEF MAIN:DECLARE20 RECFNC(STRING) F$DIR1,F$MATCH(STRING(*),STRING(24)),F$WORD,F$DEF(STRING(*))30 RECPROC P$DIR0(STRING(24)),P$SCAN0,P$SCAN235 RECFNC(STRING) F$SCAN1(STRING(*),STRING(*)),F$POS(BYTE,STRING(*),STRING(*))40 STRING(24) INFILE,OUTFILE,(6FILEOUT,WORD:STRING(2) DUMMY50 BINARY BUFLO,BUFHI,SIZE60 BYTE W,S,Q,A,F,T90 ENDDECLARE100 CALL P$SCAN0:INFILE=F$DEF(F$POS(&0,"$_from: ","*.*")):F=INSTR(INFILE,"?",&1) OR INSTR(INFILE,"*",&1)110 OUTFILE=F$DEF(F$POS(&1,"$_to: ","*.*"))115 W=F$SCAN(71("W","0") OR F$SCAN1("WAIT","0")120 S=F$SCAN1("S","0") OR F$SCAN1("SINGLE","0")125 Q=F$SCAN1("Q","0") OR F$SCAN1("QUERY","0")130 A=F$SCAN1("A","0") OR F$SCAN1("APPEND","0")140 CALL P$SCAN21000 BUFLO=DPEEK(743)+1024:BUFHI=DPEEK(88)-5121005 IF W=&1(8:GOSUB 4100:ENDIF1010 CALL P$DIR0(INFILE):INFILE=F$DIR11015 IF INFILE="":ERROR &170:ENDIF1020 WHILE INFILE<>""1025 IF Q=&1:PRINT "COPY ";INFILE;" (Y/N)? ";:INPUT WORD:IF WORD="N":GOTO 1117:ELSEIF WORD<>"Y":GOTO 1025:ENDIF:ENDIF1030 POKE 185,&1:(9OPEN# &1,&4,&0,INFILE:GOSUB 2000:T=ERR1040 GOSUB 40001050 FILEOUT=F$MATCH(INFILE,OUTFILE):IF A=&1:OPEN# &2,&9,&0,FILEOUT1052 ELSE:IF MID(FILEOUT,&1,&1)="D":TRAP 1056:OPEN# &2,&4,&0,FILEOUT:CLOSE# &21054 CLOSE# &2:TRAP 0:PRINT "REPLACE ";FIL(:EOUT;" (Y/N)? ";:INPUT WORD1055 IF WORD="N":GOTO 1110:ELSEIF WORD<>"Y":GOTO 1054:ENDIF:ENDIF1056 CLOSE# &2:OPEN# &2,&8,&0,FILEOUT:ENDIF1057 GOSUB 3000:POKE 185,T1060 WHILE ERR<>&1361070 IF S=&1:GOSUB 4100:ENDIF1080 GOSUB 2000109(;0 GOSUB 40001095 GOSUB 30001100 ENDWHILE:CLOSE# &21110 IF S=&1:GOSUB 4100:ENDIF1115 CLOSE# &11117 IF F<>&0:INFILE=F$DIR1:ELSE:INFILE="":ENDIF1120 ENDWHILE1130 STOP2000 TRAP 2020:BGET# &1,BUFLO,BUFHI-BUFLO2010 SIZE=BUFHI-BUFLO:RE(&136:PRINT "ERROR ";ERR:STOP:ELSE:RETURN:ENDIF3000 TRAP 0:BPUT# &2,BUFLO,SIZE:RETURN4000 IF S=&1:PRINT "MOUNT DEST. DISK, PRESS ";:INPUT DUMMY:ENDIF:RETURN4100 PRINT "MOUNT SOURCE DISK, PRESS ";:IN(=PUT DUMMY:RETURN9999 ENDFNC(STRING) F$DIR1,F$MATCH(STRING(*),STRING(24)),F$WORD,F$DEF(STRING(*))30 RECPROC P$DIR0(STRING(24)),P$SCAN0,P$SCAN235 RECFNC(STRING) F$SCAN1(STRING(*),STRING(*)),F$POS(BYTE,STRING(*),STRING(*))40 STRING(24) INFILE,OUTFILE,(10 DEF MAIN20 DECLARE30 STRING(18) DIR(65),INFILE,OUTFILE35 STRING(20) LABEL,INIT:STRING(10) DATE40 BYTE L1,L2,NUMBER45 BYTE PAUSEFLG,K50 RECPROC QUICK(BYTE,BYTE)80 RECPROC P$SCAN0,P$SCAN285 RECFNC(STRING) F$SCAN1(S4?TRING(*),STRING(*)),F$POS(BYTE,STRING(*),STRING(*))90 RECFNC(STRING) F$DEF(STRING(*))99 ENDDECLARE100 CALL P$SCAN0105 INFILE=F$POS(&0,"",F$DEF("*.*"))110 OUTFILE=F$SCAN1("OUTPUT","E:")115 LABEL=F$SCAN1("LABEL","")120 DATE=F$SCAN1("DATE4@","")125 INIT=F$SCAN1("INIT","")127 NUMBER=BYT(F$SCAN1("NUMBER","1"))130 CALL P$SCAN2135 OPEN# &7,&6,&0,F$DEF(INFILE);"*.*":TRAP 200140 FOR L1=&0 TO &65145 INPUT# &7,DIR(L1)150 NEXT L1200 TRAP 0:CLOSE# &7:L1=L1-&1210 CALL QUICK(&0,L14A-&1)215 IF OUTFILE="E:":OPEN# &2,&4,&0,"K:":PAUSEFLG=&255:ELSE:PAUSEFLG=&0:ENDIF220 OPEN# &7,&8,&0,F$DEF(OUTFILE):PRINT# &7,INIT225 IF LABEL<>"":PRINT# &7,LABEL:ENDIF227 IF DATE<>"":PRINT# &7,DATE:ENDIF229 PRINT# &7230 FOR L2=&0 TO L1240 4B PRINT# &7,DIR(L2)245 IF PAUSEFLG AND L2>&0:IF (L2/&20*&20=L2):GET# &2,K:ENDIF:ENDIF250 NEXT L2252 IF NUMBER=&1:PRINT# &7,707-BIN(MID(DIR(L1),&1,&3));" USED SECTORS"253 PRINT# &7,L1;" FILES":ENDIF260 CLOSE# &7265 IF PAUSEFLG:CLOSE# &2:EN4CDIF270 STOP1000 DEF QUICK(LB,UB)1010 DECLARE1020 BYTE J1030 RECPROC REARRANGE(BYTE,BYTE,BYTE)1040 ENDDECLARE1050 IF LB+128>=UB+1281060 RET1070 ELSE1080 CALL REARRANGE(LB,UB,J)1090 CALL QUICK(LB,J-&1)1100 CALL4D QUICK(J+&1,UB)1110 ENDIF1120 RET1130 DEF REARRANGE(LB,UB,J)1140 DECLARE1150 BYTE UP,DOWN:STRING(20) A1160 ENDDECLARE1170 A=DIR(LB)1180 J=LB1190 UP=UB1200 DOWN=LB1210 WHILE &2551220 WHILE UP>DOWN4E AND MID$(DIR(UP),&3,&11)>=MID$(A,&3,&11)1230 UP=UP-11240 ENDWHILE1250 J=UP1260 IF UP=DOWN THEN 20001270 DIR(DOWN)=DIR(UP)1280 WHILE DOWN0 AND ERRNUM<17 OR ERRNUM=63 OR ERRNUM>127 AND ERRNUM<148:PRINT ERRNUM;" ,I";2003 ELSEIF ERRNUM>149 AND ERRNUM<155 OR ERRNUM>159 AND ERRNUM<174 OR ERRNUM=176:PRINT ERRNUM;" ";2008 ENDIF2009 ENDIF2010 IF ERRNUM=1:PRINT "NO ERROR"2020 ELSEIF ERRNUM=2:PRINT "FLOATING POINT ADD OVERFLOW"2030 ELS,JEIF ERRNUM=3:PRINT "FLOATING POINT SUBTRACT OVERFLOW"2040 ELSEIF ERRNUM=4:PRINT "FLOATING POINT MULTIPLY OVERFLOW"2050 ELSEIF ERRNUM=5:PRINT "FLOATING POINT DIVISION OVERFLOW"2060 ELSEIF ERRNUM=6:PRINT "TOO HIGH DIM NUMBER IN BOUND FUNCTI,KON"2070 ELSEIF ERRNUM=7:PRINT "CONVERSION ERROR: FLOAT TO BINARY"2080 ELSEIF ERRNUM=8:PRINT "CONVERSION ERROR: STRING TO FLOAT"2090 ELSEIF ERRNUM=9:PRINT "CONVERSION ERROR: BINARY TO BYTE"2100 ELSEIF ERRNUM=10:PRINT "E TO A POWER OVE,LRFLOW"2110 ELSEIF ERRNUM=11:PRINT "10 TO A POWER OVERFLOW"2120 ELSEIF ERRNUM=12:PRINT "BASE E LOG OF NEGATIVE NUMBER"2130 ELSEIF ERRNUM=13:PRINT "BASE 10 LOG OF NEGATIVE NUMBER"2140 ELSEIF ERRNUM=14:PRINT "NEGATIVE EXPONENT TO RAISE ,MTO A POWER"2150 ELSEIF ERRNUM=15:PRINT "MULTIPLY OVERFLOW IN RAISE TO A POWER"2160 ELSEIF ERRNUM=16:PRINT "E TO A POWER OVERFLOW IN RAISE TO A POWER"2170 ELSEIF ERRNUM=63:PRINT "GENERIC MODULE ERROR"2180 ELSEIF ERRNUM=128:PRINT "BREA,NK ABORT"2190 ELSEIF ERRNUM=129:PRINT "CHANNEL ALREADY OPEN"2200 ELSEIF ERRNUM=130:PRINT "NONEXISTANT DEVICE"2210 ELSEIF ERRNUM=131:PRINT "CHANNEL WRITE ONLY"2220 ELSEIF ERRNUM=132:PRINT "ILLEGAL HANDLER COMMAND"2230 ELSEIF ERRNU,OM=133:PRINT "DEVICE/FILE NOT OPEN"2240 ELSEIF ERRNUM=134:PRINT "BAD CHANNEL NUMBER"2250 ELSEIF ERRNUM=135:PRINT "CHANNEL READ ONLY"2260 ELSEIF ERRNUM=136:PRINT "END OF FILE"2270 ELSEIF ERRNUM=137:PRINT "TRUNCATED RECORD"2280 ELS,PEIF ERRNUM=138:PRINT "DEVICE TIMEOUT"2290 ELSEIF ERRNUM=139:PRINT "DEVICE NAK"2300 ELSEIF ERRNUM=140:PRINT "SERIAL FRAME ERROR"2310 ELSEIF ERRNUM=141:PRINT "CURSOR OUT OF RANGE"2320 ELSEIF ERRNUM=142:PRINT "SERIAL BUS OVERRUN"2330 ,Q ELSEIF ERRNUM=143:PRINT "CHECKSUM ERROR"2340 ELSEIF ERRNUM=144:PRINT "DEVICE DONE ERROR"2350 ELSEIF ERRNUM=145:PRINT "ILLEGAL SCREEN MODE"2360 ELSEIF ERRNUM=146:PRINT "FUNCTION NOT IMPLEMENTED"2370 ELSEIF ERRNUM=147:PRINT "INSUFFI,RCIENT RAM"2380 ELSEIF ERRNUM=150:PRINT "PORT ALREADY OPEN (RS-232)"2390 ELSEIF ERRNUM=151:PRINT "CONCURRENT MODE NOT ENABLED"2400 ELSEIF ERRNUM=152:PRINT "ILLEGAL USER SUPPLIED BUFFER"2410 ELSEIF ERRNUM=153:PRINT "ACTIVE CONVURRENT M,SODE I/O ERROR"2420 ELSEIF ERRNUM=154:PRINT "CONCURRENT MODE I/O NOT ACTIVE"2430 ELSEIF ERRNUM=160:PRINT "DRIVE NUMBER ERROR"2440 ELSEIF ERRNUM=161:PRINT "TOO MANY FILES OPEN"2450 ELSEIF ERRNUM=162:PRINT "DISK FULL"2460 ELSEIF ER,TRNUM=163:PRINT "UNRECOVERABLE SYSTEM I/O ERROR"2470 ELSEIF ERRNUM=164:PRINT "FILE NUMBER MISMATCH"2480 ELSEIF ERRNUM=165:PRINT "FILE NAME ERROR"2490 ELSEIF ERRNUM=166:PRINT "POINT DATA LENGTH ERROR"2500 ELSEIF ERRNUM=167:PRINT "FILE ,ULOCKED"2510 ELSEIF ERRNUM=168:PRINT "DEVICE COMMAND INVALID"2520 ELSEIF ERRNUM=169:PRINT "DIRECTORY FULL"2530 ELSEIF ERRNUM=170:PRINT "FILE NOT FOUND"2540 ELSEIF ERRNUM=171:PRINT "POINT INVALID"2550 ELSEIF ERRNUM=172:PRINT "ILLE,VGAL APPEND"2560 ELSEIF ERRNUM=173:PRINT "BAD SECTORS AT FORMAT TIME"2570 ELSEIF ERRNUM=176:PRINT "INCOMPATIBLE FORMAT"2800 ELSE2810 IF FLAG:PRINT "UNKNOWN ERROR"2830 ENDIF2900 ENDIF2980 RET2990 ENDDEF9999 ENDY,1000 DEF MAIN1010 DECLARE1020 BINARY SIZE1030 BINARY SIZESEC:BYTE SIZEBYT1040 STRING(120) LINE1050 BINARY HELPSEC:BYTE HELPBYT1060 STRING(32) HELPFILE,INDEXFILE1070 RECFNC(STRING) F$WORD,F$DEF(STRING(*))1080 BYTE I="0" AND MID(WORD,&1,&1)<="9"530`0 IF P>LEN(LINE):L=SEARCH(VAL(WORD)):IF LINETAB(L,0)<>VAL(WORD):ERROR 64:ENDIF535 CALL DEL(L)540 ELSE:CALL INS(VAL(WORD),MID(LINE,P+&1,LEN(LINE)-P))550 ENDIF:GOTO 505560 ELSEIF WORD="LIST" AND LINEPTR>1570 CALL RANGE(START,FINISH,&0)580a0 FOR L=START TO FINISH:CALL LIST(&0,L):NEXT L581 ELSEIF WORD="$":P=&1582 REPEAT583 CALL P$CMD(LINE,P)584 P=INSTR(LINE,";",P-&1)+&1585 UNTIL P=&1:TRAP 400590 ELSEIF WORD="SAVE" AND LINEPTR>1600 WORD=GETWORD:IF WORD<>"":FILE=F$DEF(0bWORD):ENDIF:CALL RANGE(START,FINISH,&0)610 OPEN# &7,&8,&0,FILE620 FOR L=START TO FINISH:CALL LIST(&7,L):NEXT L630 CLOSE# &7635 DIRTYFLG=&0640 ELSEIF WORD="LOAD"650 FILE=F$DEF(GETWORD)651 PRELOAD=&0:PRINT "LOADING ";FILE;:OPEN# &7,&4,&0c0,FILE655 GETFLG=&0660 TRAP 700:LINEPTR=1:ADDR=BUFLO:DIRTYFLG=&0661 LINPUT# &7,LINE:P=&1662 IF ASC(LINE)<&48 OR ASC(LINE)>&57:L=1000:TRAP 925:GOTO 910:ELSE:GOTO 670:ENDIF665 LINPUT# &7,LINE:P=&1670 IF LINEPTR>=MAXL:ERROR &66:ENDIF:WORD0d=GETWORD:LINETAB(LINEPTR,0)=VAL(WORD):LINETAB(LINEPTR,1)=ADDR680 LINE=MID(LINE,P+&1,LEN(LINE)-P):SPOKE ADDR,LINE:LINEPTR=LINEPTR+1690 ADDR=ADDR+LEN(LINE)+1:IF ADDR1790 0fCALL RANGE(START,FINISH,&1):FOR L=START TO FINISH800 CALL DEL(START):NEXT L810 ELSEIF WORD="DOS"812 IF DIRTYFLG:PRINT "FILE CHANGED.":IF FILE="" THEN 500813 DOSFLG=&255814 IF GETFLG:PRINT "PUT? Y";:INPUT WORD:IF WORD="Y" THEN 8708150g ELSE:PRINT "SAVE? Y";:INPUT WORD:IF WORD="Y" THEN 600816 ENDIF:ENDIF:STOP820 ELSEIF WORD="FREE":PRINT BUFHI-ADDR;" free bytes":PRINT LINEPTR-1;" lines"821 PRINT "Maximum of ";MAXL-1;" lines"830 ELSEIF WORD="NEW":ADDR=BUFLO:LINEPTR=1:IF N0hOT(PRELOAD):FILE="":ENDIF831 WORD=GETWORD:IF WORD<>"":MAXL=WORD+1:NEWV=MAXL-1:DPOKE DESC(LINETAB)+8,DPEEK(741)-MAXL*4-5832 DPOKE DESC(LINETAB)+2,MAXL:BUFHI=DPEEK(88)-MAXL*4-128:ENDIF840 DIRTYFLG=&0850 ELSEIF WORD="FIND" AND LINEPTR>1:P=P+&1:IF0i P>LEN(LINE):ERROR 67:ENDIF855 LINE=MID(LINE,P,LEN(LINE)-P+&1)860 FOR L=1 TO LINEPTR-1:IF INSTR(SPEEK(LINETAB(L,1)),LINE,&1)<>&0:CALL LIST(&0,L):ENDIF:NEXT L865 ELSEIF WORD="PUT" AND LINEPTR>1870 WORD=GETWORD:IF WORD<>"":FILE=F$DEF(WORD):ENDIF0j:CALL RANGE(START,FINISH,&0)875 OPEN# &7,&8,&0,FILE:POKE 766,&255880 FOR L=START TO FINISH:PRINT# &7,SPEEK(LINETAB(L,1)):NEXT L:POKE 766,&0885 CLOSE# &7887 DIRTYFLG=&0890 ELSEIF WORD="GET"895 FILE=F$DEF(GETWORD):OPEN# &7,&4,&0,FILE900 0k TRAP 925:LINEPTR=1:ADDR=BUFLO:L=1000:DIRTYFLG=&0905 LINPUT# &7,LINE910 IF LINEPTR>=MAXL:ERROR &66:ENDIF:LINETAB(LINEPTR,0)=L:LINETAB(LINEPTR,1)=ADDR915 SPOKE ADDR,LINE:LINEPTR=LINEPTR+1:L=L+10920 ADDR=ADDR+LEN(LINE)+1:IF ADDR1935 WORD=GETWORD:IF WORD="":S=10:D=10:ELSE:S=WORD:D=S:WORD=GETWORD:IF WORD<>"":D=WORD:ENDIF:ENDIF937 DIRTYFLG=&255940 0m FOR L=1 TO LINEPTR-1:LINETAB(L,0)=S:S=S+D:NEXT L980 ELSE:PRINT "WHAT?"990 ENDIF:GOTO 50010000 DEF GETWORD10010 DECLARE:STRING(16) WORD:STRING(1) C:BYTE L:ENDDECLARE10020 WORD="":L=LEN(LINE):IF P>L THEN 1090010030 C=MID(LINE,P,&1):IF C=" " OR C=0n",":P=P+&1:GOTO 10030:ENDIF10050 WORD=WORD;C:P=P+&1:IF P>L THEN 1090010060 C=MID(LINE,P,&1):IF C<>" " AND C<>"," THEN 1005010900 RET WORD:ENDDEF12000 DEF LIST(CHAN,L)12010 IF LLINETAB(M,0):LO=M+1:GOTO 0p13040:ENDIF13070 RET M13080 RET LO13090 ENDDEF14000 DEF RANGE(B,F,E)14010 DECLARE:BINARY B1,F1:STRING(16) WORD:ENDDECLARE14020 WORD=GETWORD14030 IF WORD="":B1=LINETAB(1,0):F1=LINETAB(LINEPTR-1,0)14040 ELSE:B1=VAL(WORD):WORD=GETWORD14050 IF WO0qRD="":F1=B114060 ELSE:F1=VAL(WORD):ENDIF14070 ENDIF14080 B=SEARCH(B1):F=SEARCH(F1)14090 IF E=&1 AND (B1<>LINETAB(B,0) OR F1<>LINETAB(F,0)):ERROR 64:ENDIF14100 IF F1<>LINETAB(F,0):F=F-1:ENDIF:RET:ENDDEF15000 DEF DEL(L)15010 DECLARE:BINARY S,AF,A12330 UNTIL LEN(LINE)>0 AND MID$(LINE,&1,&1)<>" "2335 DPUT# &2,HELPSEC:PUT# &2,HELPBYT2340 PUT# &2,LEN(LINE):PRINT# &2,LINE;2350 SIZE=SIZE+4+LEN(LINE)2360 GOTO 23009000 TRAP 0:IF ERR<>&136:PRINT "ERROR - ";ERR:ENDIF9005 CLOSE# &2:OPE"Y":GOTO 152:ENDIF:ENDIF154 TRAP 900:OPEN# &1,&4,&0,FILEIN160 LINPUT# &1,LINE180 PRINT LINE210 GOTO 160900 CLOSE# &1:GOTO 151910 CLOSE# &1950 CLOSE# &2955 STOP960 REM99hw9 END MAIN20 DECLARE30 STRING(127) LINE35 STRING(24) FILEIN37 STRING(32) WORD40 BYTE QUERY60 RECFNC(STRING) F$DEF(STRING(32))63 RECFNC(STRING) F$SCAN1(STRING(*),STRING(*)),F$POS(BYTE,STRING(*),STRING(*))67 RECPROC P$SCAN0,P$SCAN2,h1000 DEF PACKAGE1010 DECLARE1020 BINARY SIZE,TABLE1030 STRING(32) TOPIC1040 STRING(120) LINE1050 BINARY SEC:BYTE OFF1060 BINARY P1070 STRING(32) HELP1080 BYTE TOPICFOUND1900 RECPROC ATTACH1910 RECFNC(BINAR|yY) F$ALLOC(BINARY)1920 RECFNC(STRING) F$WORD,F$DEF(STRING(*)),F$OBJ(STRING(*))1990 ENDDECLARE2000 TOPIC=F$WORD2010 TOPICFOUND=&02100 OPEN# &1,&4,&0,HELP;".HLP"2200 P=TABLE2210 WHILE P=1 AND SECTOR<=3:DPOKE 776,128:ENDIF225 8} EXEC 58457:RET PEEK(771):ENDDEF300 DEF DOS$WRITE(UNIT,ADDR,SECTOR,DEN)310 POKE 768,&49:POKE 769,UNIT:POKE 770,PEEK(1913)315 POKE 771,&128:DPOKE 772,ADDR:DPOKE 774,15320 DPOKE 776,128*DEN:DPOKE 778,SECTOR:IF SECTOR>=1 AND SECTOR<=8~3:DPOKE 776,128:ENDIF325 EXEC 58457:RET PEEK(771):ENDDEF400 DEF DOS$CONFIGIN(UNIT,TBL)405 POKE 768,&49:POKE 769,UNIT:POKE 770,ASC("N")410 POKE 771,&64:DPOKE 772,ADR(TBL(0)):DPOKE 774,15415 DPOKE 776,12:EXEC 58457:RET PEEK(7718):ENDDEF500 DEF DOS$CONFIGD(UNIT)505 E=DOS$CONFIGIN(UNIT,TABLE):IF E=&1510 TABLE(0)=&40:TABLE(2)=&0:TABLE(3)=&18:TABLE(4)=&0515 TABLE(5)=&4:TABLE(6)=&1:TABLE(7)=&0:TABLE(8)=&255550 POKE 768,&49:POKE 769,UNIT:POKE 770,AS8C("O")555 POKE 771,&128:DPOKE 772,ADR(TABLE(0)):DPOKE 774,15560 DPOKE 776,12:EXEC 58457:E=PEEK(771):ENDIF575 RET E:ENDDEF600 DEF DOS$CONFIGS(UNIT)605 E=DOS$CONFIGIN(UNIT,TABLE):IF E<>&1 THEN 575610 TABLE(0)=&40:TA8BLE(2)=&0:TABLE(3)=&18:TABLE(4)=&0615 TABLE(5)=&0:TABLE(6)=&0:TABLE(7)=&128:TABLE(8)=&255620 GOTO 550:ENDDEF9999 END,BINARY,BINARY,BYTE)55 FNC(BYTE) DOS$WRITE(BYTE,BINARY,BINARY,BYTE)60 FNC(BYTE) DOS$CONFIGIN(BYTE,BYTE(118 SEC=DPEEK(P)2240 OFF=PEEK(P+2)2250 POINT# &1,SEC,OFF2300 LINPUT# &1,LINE:REM TOPIC2305 IF TOPICFOUND:PRINT "";:INPUT LINE:ENDIF2310 LINPUT# &1,LINE:REM CLASS2315 TOPICFOUND=&2552320 PRINT "}";TOP}10 DEF MAIN20 DECLARE:STRING(2) N$30 BYTE DOLD,DNEW,BOLD,BNEW,UNIT:BINARY L40 ENDDECLARE50 DOLD=PEEK(1802):BOLD=PEEK(1801)60 PRINT "Drive Allocation Bits: ";DOLD:PRINT "Drive Allocation Bits: ";:INPUT DNEW70 PRINT "Number of Buffers: ";BOLD:PRI@NT "Number of Buffers: ";:INPUT BNEW75 PRINT "Disk Unit Number: 1";:INPUT UNIT:IF UNIT=&0 OR UNIT>&8:ERROR &63:ENDIF80 TRAP 120:POKE 1801,BNEW:POKE 1802,DNEW90 PRINT "MOUNT DISK TO RECEIVE DOS.SYS"100 PRINT "IN D";UNIT;": AND PRESS ";:INPUT @N$110 TRAP 112:ERASE "D";UNIT;":DOS.SYS":ERROR &0112 TRAP 120:OPEN# &7,&8,&0,"D";UNIT;":DOSTEMP.SYS"113 FOR L=DPEEK(1810) TO DPEEK(1804)-1:PUT# &7,PEEK(L):NEXT L115 CLOSE# &7:RENAME "D";UNIT;":DOSTEMP.SYS,DOS.SYS"120 POKE 1801,BOLD:POKE 1802,DOLD1@25 TRAP 0:ERROR ERR130 ENDG(2) N$30 BYTE DOLD,DNEW,BOLD,BNEW,UNIT:BINARY L40 ENDDECLARE50 DOLD=PEEK(1802):BOLD=PEEK(1801)60 PRINT "Drive Allocation Bits: ";DOLD:PRINT "Drive Allocation Bits: ";:INPUT DNEW70 PRINT "Number of Buffers: ";BOLD:PRI@10 DEF PACKAGE15 DECLARE17 STRING(5) CIOV20 BINARY DRIVER,OLDINIT50 RECPROC ATTACH,DETACH55 RECFNC(BINARY) F$ALLOC(BINARY)60 PROC OS$CIOV(BYTE,BYTE,BYTE,BYTE,STRING(*)),R$STARTCON(BYTE,BINARY,BINARY)65 FNC(BINARY) R$BUFFDIN(BYTE)70 PROC R$CONTROL(BYTE,BYTE,STRING(*)),R$BAUD(BYTE,BYTE,BYTE,STRING(*))75 PROC R$TRANSLATE(BYTE,BYTE,BYTE,STRING(*)),R$FORCE(BYTE)99 ENDDECLARE100 DEF OS$CIOV(CHAN,CMD,AUX1,AUX2,DEV)103 DECLARE:BYTE C:ENDDECLARE:C=CHAN*16105 DPOKE ADR(CIOV)+2,C110 POKE 834+C,CMD:DPOKE 836+C,ADR(DEV)+1:DPOKE 840+C,LEN(DEV)115 IF AUX1<>&0:POKE 842+C,AUX1:ENDIF:IF AUX2<>&0:POKE 843+C,AUX2:ENDIF:EXEC ADR(CIOV)+1120 ERROR PEEK(835+C):RET:ENDDEF200 DEF R$BUFFIN(CHAN)210 CALL OS$CIOV(CDHAN,&13,0,0," ")215 RET DPEEK(747)220 ENDDEF300 DEF R$STARTCON(CHAN,BUFADR,BUFSIZ)301 DECLARE:BYTE C:ENDDECLARE:C=CHAN*16302 IF BUFADR=0:CALL OS$CIOV(CHAN,&40,&13,&0," "):ELSE305 POKE ADR(CIOV)+2,C310 POKE 834+C,&40:DPOKE 836+C,BUFADDR:DPOKE 840+C,BUFSIZ315 POKE 842+C,&13:POKE 843+C,&0:EXEC ADR(CIOV)+1:ENDIF320 ERROR PEEK(835+C):RET:ENDDEF400 DEF R$CONTROL(CHAN,A1,DEV)405 CALL OS$CIOV(CHAN,&34,A1,&0,DEV)410 RET:ENDDEF500 DEF R$BAUD(CHAN,A1,A2,DEV)505 CALL OS$CIOVD(CHAN,&36,A1,A2,DEV)510 RET:ENDDEF600 DEF R$TRANSLATE(CHAN,A1,A2,DEV)605 CALL OS$CIOV(CHAN,&38,A1,A2,DEV)610 RET:ENDDEF700 DEF R$FORCE(CHAN)705 CALL OS$CIOV(CHAN,&32,&0,&0," ")710 RET:ENDDEF1000 DEF ATTACH:DRIVER=DPEEK(743)1005 POKED 768,80:POKE 769,1:POKE 770,63:POKE 771,641010 DPOKE 772,1280:DPOKE 774,5:DPOKE 776,12:DPOKE 778,01015 EXEC 58457:ERROR PEEK(771)1020 MOVE 1280,768,12:EXEC 58457:ERROR PEEK(771)1023 OLDINIT=DPEEK(12)1025 EXEC 1286:EXEC DPEEK(12):DRIVER=F$DALLOC(DPEEK(743)-DRIVER)1027 CIOV="LV"1030 RET:ENDDEF1500 DEF DETACH1505 DPOKE 12,OLDINIT1510 DRIVER=7941515 IF PEEK(DRIVER)=ASC("R")1520 POKE DRIVER,&0:DPOKE DRIVER+1,01525 ELSE1530 DRIVER=DRIVER+3:IF PEEK(DRIVER)<>&0 THDEN 1515:ENDIF1545 RET:ENDDEF9999 END(5) CIOV20 BINARY DRIVER,OLDINIT50 RECPROC ATTACH,DETACH55 RECFNC(BINARY) F$ALLOC(BINARY)60 PROC OS$CIOV(BYTE,BYTE,BYTE,BYTE,STRING(*)),R$STARTCON(BYTE,BINARY,BINARY)65 FNC(BINARY) R$BUFFD)d ADDY n  x,CO P  D@SKIP #  @SKIP AADDY - WRONG # OPERANDSA ADDN  #  H@SKIP #   @SKIP  " AADDN - WRONG # OPERANDSA,6,@Q JO> TP ^ D@HSKIPh # r @SKIP| ADD2    AADD2 - WRONG # OPERANDSAQ O P  D@SKIP #  @SKIP SUBN   ;Q S> P $ E@SKIP. " 8 @SKIPBL  V;`Q jS> HtP ~ Q S> P  ASUBN - WRONG # OPERANDSA SUB2    ASUB2 - WRONG # OPERANDSAQ S  P  E@SKIP " ( @SKIP2<DDN - WRONG # OPERANDSA,6,@Q JO> TP ^ D@HQa 3ARUN-TIME LIBRARY FOR JACKSON COMPILER SYSTEMAELdn ROWCRSTx COLCRSU INBUFF CIXFILDAT ICCOMB ICBAD ICBLH ICAX1J ICAX2K ICAX3L ICAX4M ICAX5N F0 F1L B0 BRS BRM" B1, TMP26 TMP3@ SPJ PCT TMP^ HEADh LOOPr COLORNw ERRCD| ADR ADR2 TRAPL ENTRYPARMPTR“ BASEĔ TESTƕ TRAPAȚ COPENCGETRECLCGETBLKCPUTBLK  CCLOSE CDRAWTO CFILL CPOINT% CNOTE& AFP FASC IFP FPI FADDf& FSUB`0 FMUL: FDIV(D FLD0RN FST0RX FMOVb CIOVVc FLOGd FCLLOGe FEXPf FCEXPk>D:RTL.LIBlRTLQ>4PSTARTvPPC Q>5PSTART PPCQ>PSPQ> PSP$>BRTL1%> Q@PC7T? DRTL2 PJUMP0 ADDN PC !@:JUMP0 RTL2PJUMP1  ADDN PC* !@L:4JUMP1 fPSHSTRB%>p Q@ADR7zPTMP?3 P@SP7R> FPSHSTR21PSHSTR1Q@ADR7 P@SP71 HPSHSTR1 PSHSTR2;ADD2 SP=TMP$:. PSHF0%>8PSHF01QF08B P@SP7L1V HPSHF01`ADDN SP=:PSHBRS%L>QBRS P@SP7 QBRS3 P@SP7 ADDY SP:(PSHBRM%>2QBRS< P@SP7F3P QBRSZ P@SP7d !ADD1J PPF0%>TSUBN SP=PPF01Q@SP7 PF081 HPPF01: PPF1%>SUBN SP=PPF11Q@SP7 PF18L1& HPPF110::PPB0SUBN SP=v%> Q@SP7PB03 Q@SP7 PB0:PPB1SUBN SP=%> Q@SP7 PB13  Q@SP7* PB14:>PPBRSUBN SP=z%> Q@SP7 PB11 Q@SP7PB11 Q@SP7 PB01L Q@SP7PB0:PPFRSUBN SP= 8 PPF1B%> B PPFR2BQ@SP7L PF18V 1` )>j HPPFR2Bt PPFR3BQ@SP7~ PF08 1 HPPFR3B : PSHSTRQPC PADR QPC PADR PSHSTRB ; ADD2 PC=TMP !RTL1 STATADR HEADLR SUBR PSHBN%>( Q@PC72 3< P@SP7F Q@PC7P 3Z P@SP7d ADDN PC= PSHBN1ADDY SP !RTL1 PSHFP%> PSHFP1Q@PC7 3 P@SP7 1 1" IPSHFP1, ADDN PC=h ADDN SP= !RTL1 PSHADRSUB Q@HEAD7 PB1 3 Q@LHEAD7 PB1  MUL SUBN SP= %> , QBRS O@SP7 PB0 3 QBRS O@SP7 PB0 : SPSHADR%> Q@PC7 PHEAD 3 Q@PC7! PHEAD& ADDN PC=+ 10 Q@HEAD75 FPSHADR07 >: 3= SUBN SP=? Q@SP7D PBL0I 3N Q@SP7S PB0X (>] FPSHADR3b (>g FPSHADR2l %>q  PSHADRSUBv PSHADR2%>{  PSHADRSUB PSHADR3%> Q@HEAD7 R> FPSHADR4 R> FPSHADR5 PB1 1 'B1  MUL , QBRS %> O@HEAD7 PB0 3 QBRLS O@HEAD7 PB0 : PSHADR0%> Q@HEAD7 PB0 3 Q@HEAD7 PB0 : PSHADR5TB0 UB0 PSHADR4, %> QB0 O@HEAD7% PB0* 3/ QB04 O@HEAD79 PB0> :PSHADR SPSHADR%>QB0 P@SP73  QB0L P@SP7C(,2OSP<PSPF DPSHADRRP #SPZPSHADRR!RTL1dVARBN SPSHADRnVARBN0%>x Q@B073 P@SP7 Q@B073 P@SP7C,OSPPSP DVARBNR #SPVARBNR!RTL1VARFP SPSHADRVARFP0%>VARFP1Q@BL073" P@SP7,161@ IVARFP1JADDN SP= !RTL1VARSTR SPSHADRVARSTR0QB0PADR QB0 PADR PSHSTRB !RTL1ADD1ADDY SP:ADDBNSUBN SP=XADDBN1SUBN ADR=SP=%> Q@ADR7, O@SP7 P@ADLR73 Q@ADR7 O@SP7 P@ADR7 !RTL1SUBBN PPBR ;QB0 SB1*%>4 P@SP7> QB0H SB1R3\ P@SP7f ADD1p !RTL1zMULBN PPBR MUL PSHBRS !RTL1DIVBN PPBR DIVMOD PSHBRS !RTL1ADDFP PPFR LFADD EADDE PSHF0 !RTL1 ADDE%> !ERRORSSUBFP PPFR FSUB$ ESUBE. PSHF08 !RTL1B SUBE%>L !ERRORSVMULFP PPFR` FMULj EMULEt PSHF0~ !RTL1 MULE%> !ERRORSDIVFP PPFR FDIV EDIVE PSHF0 !LRTL1 DIVE%> !ERRORS MULQ>PBRS PBRSMUL1VB0 WB0 DMUL2,(QBRS2OB1<PBRSF QBRSP OB1Z PBRSd MUL2TB1n UB1xQB0 LB0 HMUL1:DIVMODQ>PBRS PBRSPBRM PBRML$> DIV1TB0 UB0UBRM UBRM;QBRMSB1"PBRM, QBRM6 SB1@ PBRMJ6TUBRS^ UBRSh8r EDIV2|QBRMOB1PBRM QBRM OB1 PBRM DIV20 IDIV1: AND PPBR%>QB0MB1L P@SP73 QB0 MB1& P@SP70 ADD1: !RTL1D OR PPBRN%>XQB0bLB1l P@SP7v3 QB0 LB1 P@SP7 ADD1 !RTL1 EOR PPBR%>QB0NB1 P@SP73 QB0 NB1 P@SP7  ADD1 !RTL1  NOTL PPB0*%>4QB0>N>H P@SP7R3\ QB0fN>p P@SP7z ADD1 !RTL1 CMPS%> Q@SP7 PTMPQSP, STMPPB1PSP QSPS> PB1 PSP Q@SP7PTMPQSP$,.STMP8PB0BPSPL QSPVSL>` PB0j PSPt$TMP~ (TMP DCMPS1 $TMP CMPS12&BRS%>CMPS2)BRS FCMPS3 Q@B07 R@B17 DCMPL HCMPG3 HCMPS2 CMPS3$TMP(TMP DCMPG( HCMPL2 FCMPE<CMPB PPBRF QB0P RB1Z DLCMPLd HCMPGnQB0xRB1 DCMPL HCMPG CMPEQ>: CMPLQ>: CMPGQ>:CMPFPSUBN ADR=SP=SUBN SP= T CMPF1%>^'B0h3r Q@SP7|T?UB0 P@SP7 Q@ADR7T?UB0 P@ADR7$B0CMPF2Q@SP7 R@ADRL7 DCMPFL HCMPFG3)> HCMPF2Q>:&CMPFLQTABCL90::CMPFGQTABCG9D:NTABCL ===XTABCG ===b CMPT%>lQ>v P@SP7 ADDN SP !RTL1 CMPF%>Q> P@SP7 ADDN SP !RTL1 BNE CMPB LBNE1M> FCMPF  HCMPTBNNE CMPB  BNNE1M>* FCMPF4 HCMPT> BNG CMPBH BNG1M>R FCMPF\ HCMPTfBNGE CMPBp BNGE1M>z FCMPF HCMPT BNL CMPB BNL1M> FCMPF HCMPTBNLE CMPB BNLE1M> FCMPF HCMPTSLTRE CMPS !BNE1STRNE CMPS !BNNE1STRG CMPS !BNG1STRGE CMPS$ !BNGE1.STRL CMPS8 !BNL1BSTRLE CMPSL !BNLE1VFPE CMPFP` !BNE1jFPNE CMPFPt !BNNE1~FPG CMPFP !BNG1FPGE CMPFP !BNGE1FPL CMPFP !LBNL1FPLE CMPFP !BNLE1BNLETSUBN SP= BNLET1%> Q@SP7PADR(32 Q@SP7< PADRF3P Q@SP7Z>d3n Q@SP7x%> P@ADR71A P@ADR7:FPLETSUBN B0=SP=SUBN SP=,FPLET1%>6 Q@SP7@PADRJ3LT Q@SP7^ PADRh%>rFPLET2Q@B07|1 P@ADR7 HFPLET2:FORBN BNLETSUBN SP= FORADR %>;QSP S@PC7PADR QSPS> PADR ADDN PC FORADR %>FORBN0QPC P@ADR71QPCL P@ADR71FORBN1Q@SP7 P@ADR71 HFORBN1 !RTL10 NEXTBNFORADR v %> Q@ADR7 PADR2 1 Q@ADR7 PADR2 1 Q@ADR7 PB0 PTMP 1 Q@ADR7 %> ,! O@ADR27 ! P@ADR27!PB0 ! QB0*!34! O@ADR27>! P@ALDR27H! PB0R!3\!QTMPf! GNEXTBMp! QB0z! R@ADR7! DNEXTBL! HNEXTBNN!QB0!1! R@ADR7! DNEXTBL! HNEXTBNN!NEXTBL%>! Q@ADR7! PPC!1! Q@ADR7!PPC" !RTL1"NEXTBNN!RTL1B"NEXTBMQ@ADR7L" RB0V" DNEXTBL`" HNEXTBLNNj"1t" Q@ADR7~"RB0" DNEXTBL" HNEXTBNN" FNEXTBL"FORFP FPLET"SUBN SP= " FORADR "%>" !FORBN0"NEXTFPFORADR #%> # Q@ADR7# PADR2#1(# Q@ADR72# PADR2<#1F#NEXTF1Q@ADR7P# PF18Z#1d#)>n# HNEXTF1x#PTMPL#1#NEXTF2Q@ADR27#PF08#1# INEXTF2# FADD#%>#NEXTF3Q@ADR7# PF18#1#QF08# P@ADR27#C$ HNEXTF3$>$TF0"$U?,$TF16$U?@$?J$NEXTF4QF09T$RF19^$ DNEXTF4Lh$ HNEXTF4Gr$2|$(>$ HNEXTF4$Q>$ !NEXTFN$NEXTLF4LQTABCL8$ !NEXTF5$NEXTF4GQTABCG8$NEXTF5$TMP$ GNEXTF6$M>$ HNEXTFL$ FNEXTFN$NEXTF6M>$ HNEXTFL%NEXTFN!RTL1:%NEXTFL%>D% Q@ADR7N% PPCX%1b% Q@ADR7l%PPCv% !RTL1% GOSUB,%QPC%O>%5% QPC%O>%5& LGOTO%> & Q@PC7*&54&3>& Q@PC7H& PPCR&7\&PPCf& !RTL1p& RETURN7& PPC&7&PPC& !RTL1&IFSUBN SP=&%>& Q@SP7' HGOTO'ADDN PC=V' !RTL1`' STRPP,j'QSPt'%>~' S@SP7'PSP' EPPSTR1B' "SP' PPSTR1B:P(LGETCHAN%>Z( Q@SP7n(T?x(T?(T?(T?(>(SUBN SP=(:(GETTEXT%>( Q@SP7( PICBL9(Q>( PICBL9( STRPP(,(QSP(O>) PICBA9) QSP)O>") PICBA9,):6)PRINT0$>@) !PRINT1J)PRINT GETCHANT)PRINT1Q>CPUTBLKL^) PICCOM9h) GETTEXTk) QICBL9o) FPRINT2r) CIOV|) GPRINTE)PRINT2!RTL1)PRINTE!ERRORS)LINPUTQSP)PTMP);)S>)PSP) QSP) PTMP)S>) PSP) GETCHAN)QTMP*PSP*,*O>&* PICBA90* QTMP:* PSPD*O>NL* PICBA9X*Q>b* PICBL9l*Q>v* PICBL9* Q>CGETREC* PICCOM9* CIOV* GLINPUTE* %ICBL9* "ICBL9* QICBL9* P@SP7*;*QSP* OICBL9*PSP* DLINPUT1+ #SP + LINPUT1+ !RTL1+ LINPUTE+ !ERRORS +LETSTR%>"+ Q@SP7$+PLTMP&+ STRPP(+QSP*+PB1,+ QSP.+ PB10+ PPB02+%>4+QTMP6+ P@B078+?:+ FLETSTR2>+LETSTR1Q@B17H+ P@B07R+1f+ HLETSTR1p+LETSTR2!RTL1z+LETBN BNLET+ !RTL1+LETFP FPLET+ !RTL1+OPEN GETCHAN+SUBN SP=+%>+ Q@SPL7+ PICAX29+3+ Q@SP7+ PICAX19+ Q>COPEN+ PICCOM9, GETTEXT, CIOV, GCLOSEE$, !RTL1.,CLOSE GETCHAN8, Q>CCLOSEB, PICCOM9L, CIOVV, GCLOSEE`, !RTL1j,CLOSEE!ERRORS,GRAPHICS$>`, Q>CCLOSE, PICCOM9, CIOV,SUBN SP=,L%>, Q@SP7,PB0,$>`,M>, PICAX29,QB0-M> -N>-L> - PICAX19(- Q>COPEN2- PICCOM9<- Q>SDEVF- PICBA9P-Q>SDEVZ- PICBA9d- CIOVn- GGRAPHEx- !RTL1- SDEV#-COLORSUBN SP=-%>- Q@SP7- PCOLORN- !RLTL1-SETCOLORSUBN SP=-%>- Q@SP7->-1- Q@SP7-T?-T?.T?.T?.1. L@SP7".P9,. !RTL16.GRAPHE!ERRORS@.POSSUBN SP=E.%>J. Q@SP7O. PCOLCRST.3Y. Q@SP7^.PCOLCRSc.3h. Q@SP7|. PROWCRS.:.POSITION POS. !LRTL1. PLOT POS.$>`. Q>CPUTBLK. PICCOM9.Q>. PICBL9. PICBL9. QCOLORN. CIOV. GGRAPHE/ !RTL1/DRAWTO POS/$>`&/ Q>CDRAWTO0/ PICCOM9:/ CIOVD/ GGRAPHEN/ !RTL1X/ FILL POSb/$>`l/ Q>CFILLv/ PICCOM9/ QCOLORN/ PFILLDAT/ CIOV/ GGRAPHE/ !RTL1/PEEKSUBN SP=/%>/ Q@SP7/ PB0/1/ Q@SP7/PB0/ Q@B070 P@SP7 0 !RTL10ASC STRPP 0 ADDN SP*0 !RTL140 CHR%>>0CH0 P@SP7R0 ADDN SP\0 !RTL1f0 LEN%>p0 Q@SP7z0PBRS0 STRPP0%>L0QBRS0 P@SP70 ADDN SP0 !RTL10 BN PPF00 FPI0 EBNER0QB00PBRS0 QB01 PBRS1 PSHBRS1 !RTL1$1 FP PPB0.1 IFP81 PSHF0B1 !RTL1C1 BNER%>D1 !ERRORSE1 VALE%>F1 !ERRORSL1VAL STRPPN1,P1QSPR1O>T1 PINBUFFLV1 QSPX1O>Z1PINBUFF`1Q>j1PCIXt1 AFP~1 EVALE1 PSHF01 !RTL11 STR PPF01 FASC1%>1STR1Q@INBUFF71 GSTR2132 P@SP72 ISTR1 2 STR2M>232 P@SP72C23(2 P@SP722 ADDY SPP2 !RTL1S2MIDSUBN SP=T2%>U2L Q@SP7V2PB1W21X2 Q@SP7Y2PB0Z2 STRPP[2,\2QSP_2OB0b2PADRe2 QSPh2O>k2 PADRn2%>q2$B1t2 FMID2w2MID1Q@ADR7z23}2 P@SP7202 HMID12 MID2QB1232 P@SP72;2OSP2PSP2 DMID32 #SP2MID3!RTL12CONCAT%>L2 Q@SP72PTMP3 STRPP3QTMP3 FCONCAT2"3,,3 O@SP763 PTMP@3 CONCAT13J3 Q@SP7T31^3 P@SP7h33r3)TMP|3 HCONCAT13 QTMP3 P@SP73,3ADD2 SP=TMP3CONCAT2!RTL13 EOL%>3 Q@SP73>3Q>3 P@SP7323A434 P@SP74 LADDN SP4 !RTL1!4DEF#4STOP&4 ENDQ>)4 PERRCD.4!@ :04ERRORS'ERRCD54 QTRAPL:4 LTRAPLD4 FERRORS1N4 QTRAPLX4PPCb4 QTRAPLl4 PPCv4 !RTL14 ERRORS14 QTRAPA4PSP4 QTRAPA4 PSP4!@ :4 TRAP%>4 Q@PC74 PTRAPLL434 Q@PC74 PTRAPL4ADDN PC=4QSP4 PTRAPA4 QSP4 PTRAPA 5 !RTL1 5PUT GETCHAN"5%>$5 Q@SP7&5PB0*5SUBN SP=45 Q>CPUTBLK>5 PICCOM9H5Q>R5 PICBL9\5 PICBL9f5QB0p5 CIOVz5 GERRORS5 !RTL15GET GETCHAN5L PPB05 Q>CGETBLK5 PICCOM95Q>5 PICBL95 PICBL95 CIOV5 GGETE6$>6 P@B066 !RTL16GETE!ERRORS$6POINT GETCHAN.6SUBN SP=36%>86 Q@SP7B6 PICAX49G61L6 Q@SP7V6 PICAX39[61`6 Q@SP7j6 PICAX59t6 Q>CPOINT~6 PICCOM9L6 CIOV6 GGETE6 !RTL16NOTE GETCHAN6 PPBR6 Q>CNOTE6 PICCOM96 CIOV6 GGETE6%>6 QICAX396 P@B177 QICAX59 7 P@B07737 QICAX49(7 P@B17F7 !RTL1P7 SETUP%>Z7 QENTRYd7 P@SP7n73x7 QENTRY7 P@SP7737 QPARMPTR7 P@SLP7737QPARMPTR7 P@SP7737 QBASE7 P@SP7737 QBASE7 P@SP78QSP8 PBASE8 QSP"8 PBASE,8%>68 Q@PC7@8 PENTRYJ83T8 Q@PC7^8 PENTRYh8ADDN PC=8,8QSP8O> 8 PPARMPTR8 QSP8O>8PPARMPTR8,8%L>8 Q@ENTRY79 OPARMPTR9PSP9Q>&9OPARMPTR09 PSP:9 !RTL1D9PARMBN%> N9Q>X9PARMBN1P@PARMPTR7b91l9 HPARMBN1v9%>9C9P@PARMPTR79%> 9;9QSP9S>9PARMBN2P@PARMPTR7939 QSP9S>9P@PARMPTR79PARMBN3LADDN PARMPTR= *: !RTL14:PARMFP%> >:Q>H:PARMFP1P@PARMPTR7R:1\: HPARMFP1f:%>p:Q>z:P@PARMPTR7:%> :;:QSP:S>: !PARMBN2:PARMREF%>: Q@PC7: PHEAD:3: Q@PC7: PHEAD:ADDN PC=.;%> 8;PARMREF2Q@HEAD7B;L3L;P@PARMPTR7V;1`;1j; IPARMREF2t;ADDN PARMPTR= ; !RTL1;PARMSTR%> ;Q>;PARMSTR1P@PARMPTR7;1; HPARMSTR1; Q@SP7;PTMP;;;QSP< S@SP7<PADR <%> <P@PARMPTR7<3< QSP<S>#< PADR(<P@PARMPTR7x<%TMP< LPARMSTR21< Q@ADR7<3< P@ADR7<1< HPARMSTR2<QTMP< P@ADR7< Q@PC7< ADDN PC<R>< FPARMSTR5=RTMP = EPARMSTR4= P@ADR7=PARMSTR4PTMP=PARMSTR5%>=QTMP"=P@PARMPTR76=,@=OADRJ=PSPT= QADR^=O>h= PSPi= !PARMBLN3j=PARMADR PPB0l=%> n= QB0p=P@PARMPTR7q=1r=QB0s=P@PARMPTR7t=1v=Q>w=PARMADR1P@PARMPTR7x=1y= HPARMADR1z= !PARMBN3|= CALL,= QBASE=O> = PPARMPTR= QBASE=O>=PPARMPTR=%>= Q@ENTRY7= PHEAD=3> Q@ENTRY7L> PHEAD>%>&> Q@ENTRY70> FCALL2:>?D>CALL1Q@PARMPTR7N> P@HEAD7X>1b> HCALL1c> CALL2%>d>,e>QSPf> O@ENTRY7g>PSPh>3i> QSPj> O@ENTRY7k> PSPv>QPC> P@BASE7> QPC>3> P@BASE7>%>> Q@ENTRY7>PPC>3> Q@ENTRYL7> PPC> !RTL1>CALLREC%>> Q@ENTRY7? PHEAD ?3? Q@ENTRY7 ? PHEAD*?34? Q@ENTRY7>?FCALLREC25H?>R?;\?QSPf?%>p? S@HEAD7z?PTMP?3? QSP? S@HEAD7? PTMP?ADDN TMP? CALLREC11?,? Q@HEAD7?OTMP? P@HEAD7L?3@ Q@HEAD7@ OTMP@ P@HEAD7$@ADDN HEAD= V@0`@ HCALLREC1j@%>t@QTMP~@ P@BASE7@3@ QTMP@ P@BASE7@,@QSP@ O@ENTRY7@PSP@ QSP@3@ O@ENTRY7@ PSP@CALLREC25,@ QBASE@O> @ PPARMPTR@ QBASE@O>@LPPARMPTR@%>@ Q@ENTRY7A PHEAD A3A Q@ENTRY7A PHEAD(A%>2A Q@ENTRY7dA Q@HEAD7nAP@PARMPTR7xAAA P@HEAD7A1A HCALLREC3ACALLREC4!CALL2ARETRECS%>A Q@BASE7APTMPA3A Q@BALSE7A PTMPA%>A Q@ENTRY7A PHEADB3B Q@ENTRY7B PHEAD"B3,B Q@ENTRY76B FRETREC4@B>JB%>TB RETREC1;^B Q@HEAD7hBSTMPrB P@HEAD7|B3B Q@HEAD7B STMPB P@HEAD7BADDN HEAD= B1B0B HRETREC1B RETREC4,C QBASECO>L C PPARMPTR&C QBASE0CO>:CPPARMPTRDC%>NC Q@ENTRY7XC PHEADbC3lC Q@ENTRY7vC PHEADC%>C Q@ENTRY7C FRETSC?CRETREC5Q@PARMPTR7C P@HEAD7C1C HRETREC5CRETSQBASECPSPC QBASEC PSPC%>D Q@SP7 D PENTRYLD3 D Q@SP7*D PENTRY4D3>D Q@SP7HD PPARMPTRRD3\D Q@SP7fDPPARMPTRpD3zD Q@SP7D PBASED3D Q@SP7D PBASED%> D Q@SP7DPPCD3D Q@SP7D PPCD:D RET RETSD !RTL1ERETREC RETRECSE !RTL1E FRETS%>$E Q@PC7.E LADDN PCLE PTMP2VER>`E HFRETS2jE Q@SP7tE PTMP2~E #TMP2E FRETS2;EQSPE STMP2E PADR2E QSPES>E PADR2E:EFRET FRETSE RETSE FRET1%>E FRET23E Q@ADR27F P@SP7 F )TMP2F HFRET2F,(FADD2 SP=TMP2ZF !RTL1dFLFRETREC FRETSnF RETRECSxF !FRET1FPUTGETPPGBYTFSUBN SP=F%>F Q@SP7FT?FT?FT?FT?F>F1F Q@SP7F PICBA9G1G Q@SP7G PICBA9"G1,G Q@SP76G PICBL9@G1JG Q@SP7TG PICBL9^GQ>hGPGBYT rG PICCOM9|G CIOVG GLPROTEG !RTL1GBPUTQ>CPUTBLKG !PUTGETGBGETQ>CGETBLKG !PUTGETGPROTECTQ>#G PROT1$>pG PICCOM9G GETTEXTG CIOVG GPROTEG !RTL1HPROTE!ERRORSHUNPROTQ>$H !PROT1&H ERASEQ>!0H !PROT1:HRENAMEQ> DH !PROT1NHDPEEKSUBLN TMP=SP=H%>H Q@TMP7H PTMP2H1H Q@TMP7H PTMP2H Q@TMP27H3H P@TMP7H%>H Q@TMP27I3 I P@TMP7I !RTL1pIEXEC PPB0rIQB0tI PEXADRvI QB0xI PEXADRzI IEXADR I !RTL1IMOVS PPBRISUBN SP=I%>LI Q@SP7I>I1I Q@SP7IPTMPJ:J MOV MOVSJ%>$J(>.J FMOV28JMOV1Q@B17BJ P@B07LJ3VJ HMOV1`J #B1jJ #B0tJ0~J HMOV1J MOV2QTMPJ FMOV4JMOV3Q@B17J P@B07J3J)TMPJ HMOV3JMOV4!RTL1JRMOV MOVSJ,JAJ OB0LK PB0K,KA(K OB12K PB1ZK FRMOV2dK Q@B17nK P@B07xK !RMOV1KRMOV2"B0K "B1K0K(>K FRMOV4KRMOV3Q@B17K P@B07K1K)>K HRMOV3K !RMOV2KRMOV4!RTL1K EXP PPF0K FEXPK EEXPEK L PSHF0L !RTL1L EXPE%> L !ERRORS"LCEXP PPF0,L FCEXP6L ECEXPE@L PSHF0JL !RTL1TL CEXPE%> ^L !ERRORShL LOG PPF0rL FLOG|L ELOGEL PSHF0L !RTL1L LOGE%> L !ERRORSLCLOG PPF0L FCLOGL ECLOGEL PSHF0L !RTL1L CLOGE%>L L !ERRORSLPOWERSUBN SP=0MSUBN ADR=SP=vM%>MPOWER2Q@ADR7M1MPF08M HPOWER2M FCLOGM EPOWERE1M%>MPOWER3Q@SP7M1MPF18M HPOWER3M FMULM EPOWERE2N FCEXP N EPOWERE3N PSHF0 N !RTL1*NPOWERE1%>4N PLOWERE23>N POWERE33HN !ERRORSRNABSFPSUBN ADR=SP=N%>N Q@ADR7N IABS1NN>N P@ADR7NABS1!RTL1NABSBN PPB0N QB0N IABSBN2NN>N PBRSOQB0ON>OPBRS$OADDN BRSBOABSBN1 PSHBRSLO !RTL1VOABSBN2PBRS`OQLB0jOPBRStO !ABSBN1~OINTSUBN ADR=SP=O%>O Q@ADR7O FINT2OM>OR>DO EINT2PPTMP PM>@P FINT3PQ>D(P;2PSTMPFP INT0%>PPQ>ZPINT1P@ADR7dP1nP0xP HINT1PINT2!RTL1P INT3$>P !INT0PSGNFPSUBN ADR=SPL=P%>P Q@ADR7P FSGNFP3Q GSGNFP2QQ>@QSGNFP0P@ADR7"QQ>,Q36Q P@ADR7@QQ>JQ SGNFP13TQ P@ADR7^Q3hQ P@ADR7rQ3|Q P@ADR7Q3Q P@ADR7Q !RTL1QSGNFP2Q>Q !SGNFP0QSGNFP3!RTL1QSGNBNSUBN ADR=SP=R%>R Q@ADR7RL3&R L@ADR70R FSGNBN0:R Q@ADR7DR ISGNBN1NRQ>XR P@ADR7bR1lR P@ADR7vRSGNBN0!RTL1RSGNBN1Q>R P@ADR7R1RQ>R P@ADR7R !RTL1RMIDFSTSUBN SP=R%>R Q@SP7RPB1R1R Q@SP7RPB0S%> S,S Q@SP7 SOB0*SPADR4S3>S LQ@SP7HSO>RS PADR\S%B1fSCpS3zS P@SP7S1S MIDF21S Q@ADR7S3S P@SP7S1S HMIDF2S;SQSPSOB1SPSPS DMIDF3S #SPTMIDF3!RTL1TERRADDN SPT%>$T QERRCD.T P@SP78T !RTL1TNEGFPSUBN ADR=SP=T%>T Q@ADLR7T FNEGFP1TN>U P@ADR7 UNEGFP1!RTL1UNEGBNSUBN ADR=SP=PU%>ZU Q@ADR7dUN>nU P@ADR7xU1U Q@ADR7UN>U,UO>U P@ADR7U3UQ>U O@ADR7U P@ADR7U !RTL1UERRORSUBN SP=U%>U Q@SP7V FERROR1VR>V FERRLOR1"V?,V !ERRORS6VERROR1PERRCD;V !RTL1@VFPEEKSUBN SP=JV%>TV Q@SP7^VPADRhV3rV Q@SP7|V PADRV%>VFPEEK1Q@ADR7V3V P@SP7V)>V HFPEEK1VADDN SP=V !RTL1\XSPEEKSUBN SP=fX%>pX Q@SP7zXPADRX3X Q@SP7LX PADRX PSHSTRBX !RTL1XSSTATADR X%>X Q@PC7XPB0X3X Q@PC7X PB0XADDN PC=XYSTATFPSSTATADR Y !VARFP0YSTATBNSSTATADR Y1Y Q@B07Y3Y P@SP7Y Q@B07 Y3!Y P@SP7"YC#Y,$YOSP%YPSP&Y DSTATBNR'Y #SLP(YSTATBNR!RTL1.YSTATSTRSSTATADR 8Y !VARSTR0BYSTATBYTSSTATADR LY ADDN SPVY1`Y Q@B07jY P@SP7tY !RTL1~YPARMBYT%> YQ>YPARMBYT1P@PARMPTR7Y1Y HPARMBYT1Y%>YQ>YP@PARMPTR7Y%> YQSPYP@PARMPTR7Y3Y QSPLZP@PARMPTR7 ZADDN PARMPTR= Z !RTL1ZPOPBYTSUBN SP=(Z !RTL12Z TOBYT%> nZ !ERRORSxZFMBYTADDN SPZ%>ZCZ P@SP7Z !RTL1ZPUSHBYTADDN SPZ%>Z Q@PC7Z P@SP7LZ ADDN PCZ !RTL1ZVARBYT SPSHADRZ ADDN SPZ%>[ Q@B07[ P@SP7[ !RTL1"[ADDBYTSUBN SP=,[%>6[,@[ Q@SP7J[1T[ O@SP7^[ P@SP7h[ !RTL1r[SUBBYTSUBN SP=|[%>[;[ Q@SP7[3[ S@SP7[1[ P@SP7[ !RTL1[ANDBYTSLUBN SP=[%>[ Q@SP7[1[ M@SP7[ P@SP7\ !RTL1\ORBYTSUBN SP=\%>&\ Q@SP70\1:\ L@SP7D\ P@SP7N\ !RTL1X\EORBYTSUBN SP=b\%>l\ Q@SP7v\1\ N@SP7\ P@SP7\ !RTL1\NOTBYT%>\ Q@SP7\N>\ P@SP7\ !RTL1\BYTLELTSUBN SP=\%>\ Q@SP7\PADR\3] Q@SP7 ] PADR]3 ] Q@SP7*]%>4] P@ADR7>]:H]LETBYT BYTLETR] !RTL1\]FORBYT BYTLETf]SUBN SP=p] FORADR z]%>] !FORBN0]NEXTBYTFORADR ]%>] Q@ADR7] PADR2]1] Q@ADR7] LPADR2]1] Q@ADR7]PTMP]%>],] O@ADR27^ P@ADR27 ^3^$TMP^ GNEXTBTM$^ R@ADR7.^ DNEXTBTL8^ HNEXTBTNNB^NEXTBTL%>L^ Q@ADR7V^PPC`^3j^ Q@ADR7t^ PPC~^NEXTBTNN!RTL1^NEXTBTMR@ADR7^ ENEXTBTL^ HNEXTBTNN^ FNEXTBTL^ LBYTCMP ^SUBN SP=^%>^ Q@SP7^3^ R@SP7^^BYTEBYTCMP _ FCMPTB _ HCMPFB_BYTNEBYTCMP _ HCMPTB(_ FCMPFB2_BYTGBYTCMP <_ DCMPFBF_ FCMPFBP_ ECMPTBZ_BYTGEBYTCMP d_ ECMPTBn_ DCMPFBx_BYTLBYTCMP _ DCMPTB_ ECMPFLB_BYTLEBYTCMP _ DCMPTB_ FCMPTB_ ECMPFB_ CMPTBQ>_1_ P@SP7_ !RTL1_ CMPFBQ>_1_ P@SP7_ !RTL1_NEGBYT%>_ Q@SP7_N>_>_2_A_ P@SP7` !RTL1`ABSBYT%>` Q@SP7"` IABSBYT1,`N>6`>@`2J`AT` P@SP7^`ABSBYT1L!RTL1h`SGNBYT%>r` Q@SP7|` GSGNBYT1` FSGNBYT2`Q>` P@SP7` !RTL1`SGNBYT1Q>` P@SP7`SGNBYT2!RTL1aBOUNDSSTATADR a%>&a Q@SP70a FBOUNDE:a R@B07Da FBOUND1Na EBOUNDEXa BOUND1>ba BOUND23la3va0a HBOUND2a;a Q@B07aLS>aPB1a3a Q@B07aS>a PB1a%>aQB1a P@SP7a3a QB1a P@SP7a ADDN SPb !RTL1 bBOUNDE%>b !ERRORS b DFPUT %b GETCHAN*bSUBN SP= 4b,>bQSPHbO>Rb PICBA9\b QSPfbO>pb PICBA9zbQ> b PICBL9bLQ>b PICBL9b Q>CPUTBLKb PICCOM9b CIOVb GDPUTEb !RTL1bDPUTE!ERRORSbbFPUTDFPUT bDPUTDFPUT c DFGET c GETCHANc PPB0cQB0c PICBA9c QB0c PICBA9cQ> c PICBL9cQ>c PICBL9c Q>CGETBLKd LPICCOM9 d CIOVd GDGETEd !RTL1(dDGETE!ERRORS-d2dFGETDFGET f Q@SP7fPTMPfSUBN SP=g Q@SP7 g PTMP2g STRPP gQSP*gPB14g QSP>g PB1Hg Q@SP7Rg PTMP2\g STRPPfgQSPpgPB0zg QSPLg PB0g;g QTMP2g STMP2g EINSTR1gINSTR0ADDN SPg%>gCg P@SP7g !RTL1gINSTR1PTMP2g #TMP2g;h QTMP2hSTMPh DINSTR0$h PTMP2.h #TMP28h"TMPBh,LhADD2 B0=TMPVhINSTR2%TMP2`hINSTR3Q@B07jh R@B17th HILNSTR4~h1h HINSTR3h#TMPh ADDN SPhQTMPh P@SP7h !RTL1hINSTR4#TMPh ADDN B0h "TMP2h HINSTR2h FINSTR0hINPUTSUBN ADR=SP=h%>i Q@ADR7 iT?iT?iT?(iT?2i> ,di FINPUT4niR>xi FINPUT4i P@LSP7i3i INPUTCi !INPUT2i INPUT41iCi3i P@SP7j,j ADDY SPj !RTL1"jINPUTC'TMP,jQ>6j PICBL9@j PICBL9Jj Q>CGETBLKTj PICCOM9^j CIOVhj GINPUTCErj%TMP|j:jINPUTCE!ERRORS`j>PTOKEN PSHSTR=PSHBN=PSHFP=PSHADR=LVARSTR=VARBN=VARFPt2 ADDBN=SUBBN=MULBN=DIVBN=AND=OR=EOR=NOT~$ BNE=BNNE=BNG=BNGE=BNL=BNLE@ ADDFP=SUBFP=MULFP=DIVFP=FPE=FPNE=FPG=FPGE=FPL=FPLE2 CONCAT=STRE=STRNE=STRG=STRGE=STRL=STRLEP LETSTR=LETBN=LETFP=FORBNL=NEXTBN=FORFP=NEXTFP=GOSUB=GOTO=RETURN=IF* PRINT0=PRINT=LINPUT=OPEN=CLOSE=< GRAPHICS=COLOR=SETCOLOR=POSITION=PLOT=DRAWTO=FILLB PEEK=ASC=CHR=LEN=FP=BN=VAL=STR=MID=EOL=END===- STOP=TRAP=POWER=PUT=GET=POILNT=NOTE; SETUP=PARMBN=PARMFP=PARMSTR=PARMREF=CALL=CALLREC$ RET=RETREC=FRET=FRETREC=DEFB PARMADR=BPUT=BGET=DPEEK==PROTECT=UNPROT=ERASE=RENAME EXEC=MOV=RMOV, EXP=CEXP=LOG=CLOG=ABSFP=ABSBN=INT9 SGNFP=SGNBN=MLIDFST=ERR=NEGBN=NEGFP=HEADR=SUBR @ ERROR=FPEEK==SPEEK==STATSTR=STATBN=STATFP=STATADR< STATBYT=PARMBYT=POPBYT=TOBYT=FMBYT=FORBYT=NEXTBYT* BYTE=BYTNE=BYTG=BYTGE=BYTL=BYTLE(S LETBYT=ADDBYT=SUBBYT=ANDBYT=ORBYT=EORBYTL=NOTBYT=VARBYT=PUSHBYT=NEGBYT2; ABSBYT=SGNBYT==BOUND=DGET=DPUT=FGET=FPUT==< INSTR=INPUTPSTARTLDAT ICCOMB ICBAD ICBLH ICAX1J ICAX2K ICAX3L ICAX4M ICAX5N F0 F1L{10 DEF MAIN:DECLARE20 RECFNC(STRING) F$DIR1,F$MATCH(STRING(*),STRING(24)),F$WORD,F$DEF(STRING(*))30 RECPROC P$DIR0(STRING(24)),P$SCAN0,P$SCAN235 RECFNC(STRING) F$SCAN1(STRING(*),STRING(*)),F$POS(BYTE,STRING(*),STRING(*))37 FNC(BYTE) DOS$CONFIGD(BYTEP),DOS$CONFIGS(BYTE)40 STRING(24) INFILE,OUTFILE,FILEOUT,WORD:STRING(2) DUMMY50 BINARY BUFLO,BUFHI,SIZE60 BYTE W,DS,Q,A,F,T,D90 ENDDECLARE100 CALL P$SCAN0:INFILE=F$DEF(F$POS(&0,"$_from: ","*.*")):F=INSTR(INFILE,"?",&1) OR INSTR(INFILE,"*",&1)110 OUPTFILE=F$DEF(F$POS(&1,"$_to: ","*.*"))115 W=F$SCAN1("W","0") OR F$SCAN1("WAIT","0")120 DS=F$SCAN1("DS","0")125 Q=F$SCAN1("Q","0") OR F$SCAN1("QUERY","0")130 A=F$SCAN1("A","0") OR F$SCAN1("APPEND","0")140 CALL P$SCAN2500 D=PEEK(4881):ERROR DOS$CONPFIGD(&1):EXEC 2016:GOSUB 50001000 BUFLO=DPEEK(14)+1024:BUFHI=DPEEK(88)-5121005 IF W=&1:GOSUB 4100:ENDIF1010 CALL P$DIR0(INFILE):INFILE=F$DIR11015 IF MID(INFILE,&2,&1)<>"1" AND MID(INFILE,&2,&1)<>":":ERROR &62:ENDIF1020 WHILE INFILE<>""1025 IF Q=P&1:PRINT "COPY ";INFILE;" (Y/N)? ";:INPUT WORD:IF WORD="N":GOTO 1117:ELSEIF WORD<>"Y":GOTO 1025:ENDIF:ENDIF1030 POKE 185,&1:GOSUB 5000:OPEN# &1,&4,&0,INFILE:GOSUB 2000:T=ERR1040 GOSUB 6000:GOSUB 40001050 FILEOUT=F$MATCH(INFILE,OUTFILE):IF A=&1:POPEN# &2,&9,&0,FILEOUT1052 ELSE:IF MID(FILEOUT,&1,&1)="D":TRAP 1056:OPEN# &2,&4,&0,FILEOUT:CLOSE# &21054 CLOSE# &2:TRAP 0:PRINT "REPLACE ";FILEOUT;" (Y/N)? ";:INPUT WORD1055 IF WORD="N":GOTO 1110:ELSEIF WORD<>"Y":GOTO 1054:ENDIF:ENDIF1056 P CLOSE# &2:OPEN# &2,&8,&0,FILEOUT:ENDIF1057 GOSUB 3000:POKE 185,T1060 WHILE ERR<>&1361070 GOSUB 41001080 GOSUB 20001090 GOSUB 40001095 GOSUB 30001100 ENDWHILE:CLOSE# &21110 GOSUB 4100:GOSUB 50001115 CLOSE# &11117 IFP F<>&0:INFILE=F$DIR1:ELSE:INFILE="":ENDIF1120 ENDWHILE1130 STOP2000 GOSUB 5000:TRAP 2020:BGET# &1,BUFLO,BUFHI-BUFLO2010 SIZE=BUFHI-BUFLO:RETURN2020 SIZE=DPEEK(856):TRAP 9000:IF ERR<>&136:PRINT "ERROR ";ERR:STOP:ELSE:RETURN:ENDIF3000 GOSUB 6000:BPUPT# &2,BUFLO,SIZE:RETURN4000 PRINT "MOUNT DEST. DISK, PRESS ";:INPUT DUMMY:RETURN4100 PRINT "MOUNT SOURCE DISK, PRESS ";:INPUT DUMMY:RETURN5000 TRAP 9000:IF DS=&0:ERROR DOS$CONFIGS(&1):POKE 4881,&15005 ELSE:ERROR DOS$CONFIGD(&1):POKE 48P81,&2:ENDIF:RETURN6000 TRAP 9000:IF DS=&0:ERROR DOS$CONFIGD(&1):POKE 4881,&26005 ELSE:ERROR DOS$CONFIGS(&1):POKE 4881,&1:ENDIF:RETURN9000 IF D=&1:ERROR DOS$CONFIGS(&1):ELSE:ERROR DOS$CONFIGD(&1):ENDIF:EXEC 20169999 END7 FNC(BYTE) DOS$CONFIGD(BYTEP10 DEF MAIN20 DECLARE30 RECPROC P$SCAN0,P$SCAN240 RECFNC(STRING) F$SCAN1(STRING(*),STRING(*))50 ENDDECLARE60 CALL P$SCAN070 POKE 82,BYT(F$SCAN1("LEFT",STR(PEEK(82))))80 POKE 83,BYT(F$SCAN1("RIGHT",STR(PEEK(83))))90 POKE 709,BUYT(F$SCAN1("CHAR",STR(PEEK(709))))100 POKE 710,BYT(F$SCAN1("BACKGND",STR(PEEK(710))))110 POKE 712,BYT(F$SCAN1("BORDER",STR(PEEK(712))))120 POKE 622,BYT(F$SCAN1("FINE",STR(PEEK(622))))125 POKE 729,BYT(F$SCAN1("DELAY",STR(PEEK(729))))130 POKE 73U0,BYT(F$SCAN1("REPEAT",STR(PEEK(730))))140 POKE 731,BYT(F$SCAN1("CLICK",STR(PEEK(731))))150 CALL P$SCAN2160 ENDCLARE60 CALL P$SCAN070 POKE 82,BYT(F$SCAN1("LEFT",STR(PEEK(82))))80 POKE 83,BYT(F$SCAN1("RIGHT",STR(PEEK(83))))90 POKE 709,BTu1000 DEF MAIN1010 DECLARE1020 BYTE LB,MB,HB1030 STRING(16) T1040 BYTE H,M,S1050 FLOAT SECONDS1060 RECFNC(STRING) F$WORD1090 ENDDECLARE1100 REM GET TIME1110 T=F$WORD1120 IF T=""1150 PRINT "ENTYER TIME:"1160 PRINT " HH:MM:SS> ";1170 INPUT T1180 ENDIF1200 REM PARSE TIME1210 IF (LEN(T)<>8) THEN 11501220 IF MID$(T,3,1)<>":" THEN 11501230 IF MID$(T,6,1)<>":" THEN 11501240 H=MID$(T,1,2)1250 M=MID$(T,4,2)1Y10 DEF MAIN20 DECLARE25 BYTE E:BINARY L30 STRING(8) OPT40 RECFNC(STRING) F$WORD50 ENDDECLARE55 E=&060 OPT=F$WORD70 WHILE OPT<>""80 IF OPT="LEFT":PRINT "LEFT=";PEEK(82)90 ELSEIF OPT="RIGHT":PRINT "RIGHT=";PEEK(83)]100 ELSEIF OPT="BACKGND":PRINT "BACKGND=";PEEK(710)110 ELSEIF OPT="CHAR":PRINT "CHAR=";PEEK(709)129 ELSEIF OPT="BORDER":PRINT "BORDER=";PEEK(712)130 ELSEIF OPT="FINE":PRINT "FINE=";PEEK(622)140 ELSEIF OPT="REPEAT":PRINT "REPEAT=";PEEK](730)150 ELSEIF OPT="DELAY":PRINT "DELAY=";PEEK(729)160 ELSEIF OPT="CLICK":PRINT "CLICK=";PEEK(731)170 ELSEIF OPT="DEV":PRINT "DEV=";180 FOR L=794 TO 828 STEP 3190 IF PEEK(L)<>&0:PRINT CHR(PEEK(L));:ENDIF200 NEXT L:PRINT]210 ELSEIF OPT="VERSION":PRINT "VERSION=2.0"220 ELSEIF OPT="DOS":PRINT "DRIVES=";PEEK(1802):PRINT "BUFFERS=";PEEK(1801)890 ELSE:PRINT "What is ";OPT;"?":E=&63900 ENDIF910 OPT=F$WORD920 ENDWHILE925 ERROR E930 STOP9999 ENDPRINT\10 DEF MAIN20 DECLARE:FLOAT TIME30 BYTE H,M,S,LB,MB,HB50 ENDDECLARE60 LB=PEEK(20):MB=PEEK(19):HB=PEEK(18)70 TIME=INT((FLT(LB)+256.*MB+65536.*HB)/60)80 H=INT(TIME/3600.):TIME=TIME-3600.*H90 M=INT(TIME/60.):S=TIME-60.*M100 IF H<&10:PRINT "0";:ENDIa F:PRINT H;":";110 IF M<&10:PRINT "0";:ENDIF:PRINT M;":";120 IF S<&10:PRINT "0";:ENDIF:PRINT S:PRINT130 END70 TIME=INT((FLT(LB)+256.*MB+65536.*HB)/60)80 H=INT(TIME/3600.):TIME=TIME-3600.*H90 M=INT(TIME/60.):S=TIME-60.*M100 IF H<&10:PRINT "0";:ENDI`n10 DEF MAIN20 DECLARE30 STRING(140) LINE35 STRING(24) FILEIN,FILEOUT,INIT37 STRING(32) WORD40 BYTE LINESIZE,FORMSIZE,TLINE,TOP,LEFT50 BYTE L,P,L1,QUERY,HEADING,INDENT,PAGE,INDENT260 RECFNC(STRING) F$DEF(STRING(32))63 RECFNC(STRING)e F$SCAN1(STRING(*),STRING(*)),F$POS(BYTE,STRING(*),STRING(*))67 RECPROC P$SCAN0,P$SCAN2,P$DIR0(STRING(*))68 RECFNC(STRING) F$DIR170 ENDDECLARE90 CALL P$SCAN0:FILEIN=F$DEF(F$POS(&0,"$_file: ",""))100 FILEOUT=F$DEF(F$SCAN1("OUTPUT","E:")):LINESIZe E=F$SCAN1("LINESIZE","80"):FORMSIZE=F$SCAN1("FORMSIZE","66")110 TOP=F$SCAN1("TOP","6"):LEFT=F$SCAN1("LEFT","5"):INIT=F$SCAN1("INIT","")115 QUERY=F$SCAN1("QUERY","0")117 HEADING=F$SCAN1("HEADING","1"):INDENT=F$SCAN1("INDENT","2")120 CALL P$SCAN2:CALLe P$DIR0(FILEIN)125 IF INSTR(FILEOUT,"?",&1)<>&0 OR INSTR(FILEOUT,"*",&1)<>&0:ERROR &64:ENDIF:OPEN# &2,&8,&0,FILEOUT150 LINESIZE=LINESIZE-2*LEFT:FORMSIZE=FORMSIZE-2*TOP151 FILEIN=F$DIR1:IF FILEIN="" THEN 950152 TRAP 910:IF QUERY=1:PRINT "TYPE ";FILEIeN;" (Y/N)? ";:INPUT WORD153 IF WORD="N":GOTO 151:ELSEIF WORD<>"Y":GOTO 152:ENDIF:ENDIF154 TRAP 900:OPEN# &1,&4,&0,FILEIN:PRINT# &2,INIT;:PAGE=&0155 P=&1:PAGE=PAGE+&1:IF HEADING=&1:GOSUB 960:PRINT# &2,FILEIN;" PAGE #";PAGE:PRINT# &2:TLINE=&2:ELSE:eTLINE=&0:ENDIF160 LINPUT# &1,LINE:L=LEN(LINE):P=&1165 IF L=&0:PRINT# &2:TLINE=TLINE+&1:GOTO 200:ENDIF170 INDENT2=&0:WHILE P+LINESIZE-INDENT2-&1&0:FOR L1=&1 TO LEFT:PRINT# &2," ";:NEXT L1:ENDIF970 IF INDENT<>&0 AND P<>&1:FOR L1=&1 TO INDENT:PRINT# &2," ";:NEXT L1:ENDIF:ReETURN999 END DECLARE30 STRING(140) LINE35 STRING(24) FILEIN,FILEOUT,INIT37 STRING(32) WORD40 BYTE LINESIZE,FORMSIZE,TLINE,TOP,LEFT50 BYTE L,P,L1,QUERY,HEADING,INDENT,PAGE,INDENT260 RECFNC(STRING) F$DEF(STRING(32))63 RECFNC(STRING)dIC;" -";LINE2330 PRINT2340 LINPUT# &1,LINE:REM USAGE2350 PRINT "Usage:";LINE2360 PRINT2400 LINPUT# &1,LINE2405 TRAP 24502410 REPEAT2420 PRINT LINE2430 LINPUT# &1,LINE2440 UNTIL LI}NE<>"" AND MID$(LINE,&1,&1)<>" "2445 TRAP 02450 PRINT2900 ENDIF2910 P=P+4+PEEK(P+3)2920 ENDWHILE2930 IF NOT(TOPICFOUND)2940 PRINT "TOPIC NOT FOUND"2945 ENDIF2950 STOP9000 DEF ATTACH9010 DECLARE9090 E}NDDECLARE9100 HELP=F$DEF("HELP")9105 TRAP 92509110 OPEN# &1,&4,&0,HELP;".IDX"9115 TRAP 09200 DGET# &1,SIZE9210 TABLE=F$ALLOC(SIZE)9220 BGET# &1,TABLE,SIZE9230 CLOSE# &19240 RET9250 TRAP 0:CLOSE# &1:HELP=F}$OBJ("HELP"):GOTO 91109900 ENDDEF9999 ENDY SIZE,TABLE1030 STRING(32) TOPIC1040 STRING(120) LINE1050 BINARY SEC:BYTE OFF1060 BINARY P1070 STRING(32) HELP1080 BYTE TOPICFOUND1900 RECPROC ATTACH1910 RECFNC(BINAR|.260 S=MID$(T,7,2)1300 REM DOIT1310 SECONDS=FLT(H)*216000.+FLT(M)*3600.+FLT(S)*60.+10.1320 HB=INT(SECONDS/65536.)1330 SECONDS=SECONDS-65536.*FLT(HB)1340 MB=INT(SECONDS/256.)1350 LB=SECONDS-256.*FLT(MB)1400 REM POKE IT1405 Y POKE 19,0:REM MAKE SURE WRAP AROUND DOESN'T MESS UP1410 POKE 18,HB1415 POKE 20,01420 POKE 19,MB1421 POKE 20,LB9999 ENDCFNC(STRING) F$WORD1090 ENDDECLARE1100 REM GET TIME1110 T=F$WORD1120 IF T=""1150 PRINT "ENTX5 DEF MAIN10 DECLARE12 BYTE TRANSIENT15 STRING(3) DEFAULT,SEARCH20 STRING(20) X,M,BATFILE25 STRING(120) LINE30 BINARY LOMEMV,TOP,AX,AM,BATSECTOR,L32 BYTE P,BATBYTE,BATFLAG,BATSCR,BATTRAP,CONT,L135 RECPROC LOAD(STRING(*)),KILL(STRING(*)),NOP37 PROC P$CMD(STRING(*),BYTE):RECPROC FIND(STRING(*),BYTE)40 RECFNC(STRING) F$DEF(STRING(*)),F$NAME(STRING(*)),F$WORD,F$OBJ(STRING(*))45 RECFNC(BINARY) F$ALLOC(BINARY)95 ENDDECLARE100 IF PEEK(703)<>&24:GRAPHICS &0:ENDIF:POKE 8,&0105 DPOKE 14,DPEEK(88)-512:FOR L1=&1 TO &7:CLOSE# L1:NEXT L1:TRAP 100115 IF PEEK(580)<>&0:POKE 580,&0120 TRANSIENT=&0123 DEFAULT="D:":SEARCH="D:":CONT=&0:P=&0:DPOKE 206,ADR(LOMEMV)124 LOMEMV=DPEEK(743):TOP=LOMEMV+1:FPOKE LOMEMV+1,0.0:DPOKE LOMEMV+7,0:POKE LOMEMV+9,&0125 DPOKE LOMEMV+10,DESC(F$DEF):SPOKE LOMEMV+12,"F$DEF"130 DPOKE LOMEMV+18,DESC(F$ALLOC):SPOKE LOMEMV+20,"F$ALLOC"135 DPOKE LOMEMV+28,DESC(F$WORD):SPOKE LOMEMV+30,"F$WORD"140 DPOKE LOMEMV+37,DESC(P$CMD):SPOKE LOMEMV+39,"P$CMD"150 DPOKE LOMEMV+45,DESC(F$OBJ):SPOKE LOMEMV+47,"F$OBJ"190 DPOKE LOMEMV+53,0:POKE LOMEMV+55,0:LOMEMV=LOMEMV+56195 BATTRAP=&0200 TRAP 205:BATFILE="D:STARTUP.BAT":GOSUB 997:GOTO 210205 BATFLAG=&0:ERROR &1:CLOSE# &7210 TRAP 100:BATSCR=&0295 ENDIF300 DPOKE 743,LOMEMV305 DPOKE 675,8192:POKE 677,&33307 IF TRANSIENT:CALL KILL(SPEEK(TOP+8)):TRANSIENT=&0:ENDIF310 IF ERR>&1:PRINT "SYSTEM ERROR - ";ERR:ERROR &1:GOSUB 470:ENDIF400 ERROR &1:TRAP 100401 IF CONT THEN 415402 IF P&1 THEN 415:ENDIF404 IF BATFLAG:TRAP 412405 OPEN# &7,&4,&0,BATFILE:POINT# &7,BATSECTOR,BATBYTE:LINPUT# &7,LINE:NOTE# &7,BATSECTOR,BATBYTE:CLOSE# &7407 IF BATSCR:PRINT LINE:ENDIF410 ELSE412 CLOSE# &7:TRAP 100:BATFLAG=&0:PRINT "$ {10 DEF PACKAGE15 DECLARE20 BYTE C,CONTROL1,BAUD1,BAUD2,TRANS1,TRANS2,V,ECHOBACK25 BYTE TRANSIN(255),TRANSOUT(255),TRANSFLG,ECHOFLAG,BUFFIN(1279),WAITQ,PAUSECR27 BYTE XFLG,CH,B1,B2,CH030 STRING(32) CMD,ECHOFILE,FILE35 BINARY Lm",ECHOADDR,BUFFLO,BUFFHI45 RECPROC ATTACH:PRIVATE50 PROC OPENR,SETUP,RECONFIG,LOCAL,DOWNLOAD(STRING(*)),UPLOAD(STRING(*)),WAIT(BYTE)55 PROC PUTR(BYTE):FNC(BYTE) GETR(BYTE)65 FNC(BINARY) R$BUFFIN(BYTE)70 PROC R$STARTCON(BYTE,BINARm#Y,BINARY)75 PROC R$CONTROL(BYTE,BYTE,STRING(*))80 PROC R$BAUD(BYTE,BYTE,BYTE,STRING(*))85 PROC R$TRANSLATE(BYTE,BYTE,BYTE,STRING(*))90 FNC(STRING) F$DEF(STRING(*))99 ENDDECLARE100 OPEN# &1,&4,&0,"K:"105 BUFFLO=DPEEK(743)+256:BUFm$FHI=DPEEK(741)-128110 IF ECHOFLAG:OPEN# &3,&9,&0,ECHOFILE:ECHOADDR=BUFFLO:ENDIF120 POKE 82,&0:PRINT "}"122 PRINT " ̠̠"124 PRINT " Copyright (C) 1985"126 PRINT " by"128 PRINT " m% Jeffrey Glen Jackson"130 FOR L=0 TO 255:TRANSIN(L)=L:NEXT L140 MOVE ADR(TRANSIN(0)),ADR(TRANSOUT(0)),256150 TRANSIN(8)=&30:TRANSOUT(30)=&8155 TRANSIN(7)=&253:TRANSOUT(253)=&7160 TRANSIN(10)=&0:TRANSIN(9)=&127:TRANSOUT(127)=&9165 TRANSIN(12)=m&&125:TRANSOUT(125)=&12170 TRANSIN(127)=&126:TRANSOUT(126)=&127175 TRANSIN(123)=&188:TRANSOUT(188)=&123176 TRANSIN(125)=&190:TRANSOUT(190)=&125900 PRINT ">";:INPUT CMD:IF CMD="" THEN 990910 IF CMD="L" THEN 1500920 GOTO 900990 CALL SETUP:CALL OPENRm':TRAP 15001000 IF PEEK(764)<>&2551002 GET# &1,C1010 CALL PUTR(C)1020 ENDIF1030 IF R$BUFFIN(&2)<>01040 C=GETR(&0)1045 IF ECHOFLAG AND (C<>&0 OR NOT(TRANSFLG)):POKE ECHOADDR,C:ECHOADDR=ECHOADDR+11050 IF ECHOADDR=BUFFHI-1024:PUT# &2,ASCm(("")1055 PRINT "";:ENDIF:ENDIF1075 ENDIF1400 GOTO 10001500 CLOSE# &2:TRAP 01505 IF ECHOFLAG:BPUT# &3,BUFFLO,ECHOADDR-BUFFLO:ENDIF:ECHOADDR=BUFFLO1600 CALL LOCAL:GOTO 9902000 DEF OPENR2010 OPEN# &2,&13,&0,"R:"2020 CALL R$STARTCON(&2,m)ADR(BUFFIN(0)),1280)2030 RET:ENDDEF2500 DEF WAIT(TENTH)2505 DECLARE:BINARY LOOP:ENDDECLARE2507 IF TENTH=&0 THEN 25202510 FOR LOOP=50 TO 614*TENTH:NEXT LOOP2520 RET:ENDDEF3000 DEF SETUP3010 CALL R$CONTROL(&7,CONTROL1,"R1:")3020 CALm*L R$BAUD(&7,BAUD1,BAUD2,"R1:")3030 CALL R$TRANSLATE(&7,TRANS1,TRANS2,"R1:")3040 RET:ENDDEF4000 DEF LOCAL4100 CLOSE# &24200 TRAP 4200:PRINT "}LOCAL MODE COMMANDS":PRINT:CALL SETUP4205 PRINT " 1-8 Directory of disk n"4210 PRINT " E m+start Echo mode"4215 PRINT " C Close echo mode"4220 PRINT " D Download"4225 PRINT " U Upload"4230 PRINT " R Reconfigure"4235 PRINT " X eXit to remote mode"4240 PRINT " Q Quit to DOS"4300 PRINT:PRINT:PRINT "> ";:INPm,UT CMD4305 IF CMD>="1" AND CMD<="8" AND LEN(CMD)=&14310 OPEN# &5,&6,&0,"D";CMD;":*.*":TRAP 43204315 INPUT# &5,CMD:PRINT CMD:GOTO 43154320 TRAP 4200:CLOSE# &54325 ELSEIF CMD="E"4330 IF ECHOFLAG:PRINT "Echo mode alread active"4m-335 ELSE:PRINT "To file: ";:INPUT ECHOFILE:ECHOFILE=F$DEF(ECHOFILE;".TXT")4340 TRAP 4345:OPEN# &3,&9,&0,ECHOFILE:GOTO 43504345 TRAP 4200:CLOSE# &3:OPEN# &3,&8,&0,ECHOFILE4350 ECHOFLAG=&255:ECHOADDR=BUFFLO:ENDIF4355 ELSEIF CMD="C"4m.360 CLOSE# &3:ECHOFLAG=&04365 ELSEIF CMD="D"4370 PRINT "To file: ";:INPUT FILE:CALL DOWNLOAD(F$DEF(FILE;".TXT"))4375 ELSEIF CMD="U"4380 PRINT "From file: ";:INPUT FILE:CALL UPLOAD(F$DEF(FILE;".TXT"))4385 ELSEIF CMD="R":CALL RECONFm/IG4390 ELSEIF CMD="X":RET4395 ELSEIF CMD="Q":STOP4500 ELSE:PRINT "What?"4510 ENDIF4520 GET# &1,C:GOTO 42004900 ENDDEF5000 DEF RECONFIG5010 DECLARE:STRING(16) OPT,VALUE:ENDDECLARE5100 PRINT "}Reconfigurable Parameters:":PRINT5105 m0 PRINT " B. Baud":PRINT " S. Stop bits"5110 PRINT " O. Output Parity":PRINT " I. Input Parity"5115 PRINT " T. Translation":PRINT " U. Upload/Download Mode":PRINT " X. Exit this menu"5120 TRAP 5100:PRINT:PRINT:PRINT "> ";:INPUT CMD5125 IF m1CMD="B":GOTO 5400:ELSEIF CMD="S":GOTO 5500:ELSEIF CMD="O":GOTO 56005130 ELSEIF CMD="I":GOTO 5700:ELSEIF CMD="T":GOTO 5800:ELSEIF CMD="X":RET5132 ELSEIF CMD="U":GOTO 59005135 ELSE:PRINT "":GOTO 51005145 ENDIF5400 PRINT "}Baud:":PRINT:PRINT m2" A. 300":PRINT " B. 45.5":PRINT " C. 50":PRINT " D. 56.875"5405 PRINT " E. 75":PRINT " F. 110":PRINT " G. 134.5":PRINT " H. 150":PRINT " I. 300"5410 PRINT " J. 600":PRINT " K. 1200":PRINT " L. 1800":PRINT " M. 2400":PRINT " N. 2400"541m35 PRINT " O. 9600":PRINT " P. 9600"5420 V=BAUD1 AND &15:POSITION PEEK(82),V+&2:PRINT "*":POSITION PEEK(82),&205425 PRINT "> ";:INPUT CMD5430 IF CMD=""5435 ELSEIF CMD<"A" OR CMD>"P" OR LEN(CMD)<>&15440 ELSE:V=ASC(CMD)-&65:BAUD1=BAUD1 AND &240 OR Vm4:CALL SETUP5450 ENDIF:GOTO 51005500 PRINT "}Stop bits:":PRINT:PRINT " A. 1":PRINT " B. 2"5520 V=(BAUD1 AND &128)/128:POSITION PEEK(82),V+&2:PRINT "*":POSITION PEEK(82),&65525 PRINT "> ";:INPUT CMD5530 IF CMD=""5535 ELSEIF CMD<"A" OR CMD>"B" OR Lm5EN(CMD)<>&15540 ELSE:V=(ASC(CMD)-&65)*128:BAUD1=BAUD1 AND &127 OR V:CALL SETUP5550 ENDIF:GOTO 51005600 PRINT "}Output parity:":PRINT:PRINT " A. Ignore":PRINT " B. ODD"5605 PRINT " C. EVEN":PRINT " D. 1"5620 V=(TRANS1 AND &3):POSITION PEEK(82),Vm6+&2:PRINT "*":POSITION PEEK(82),&85625 PRINT "> ";:INPUT CMD5630 IF CMD=""5635 ELSEIF CMD<"A" OR CMD>"D" OR LEN(CMD)<>&15640 ELSE:V=ASC(CMD)-&65:TRANS1=TRANS1 AND &252 OR V:CALL SETUP5650 ENDIF:GOTO 51005700 PRINT "}Input parity:":PRINT:PRINT " Am7. Ignore":PRINT " B. ODD"5705 PRINT " C. EVEN":PRINT " D. 0"5720 V=(TRANS1 AND &12)/&4:POSITION PEEK(82),V+&2:PRINT "*":POSITION PEEK(82),&85725 PRINT "> ";:INPUT CMD5730 IF CMD=""5735 ELSEIF CMD<"A" OR CMD>"D" OR LEN(CMD)<>&15740 ELSE:V=ASC(CMm8D)-&65:TRANS1=TRANS1 AND &243 OR V*4:CALL SETUP5750 ENDIF:GOTO 51005800 PRINT "}Translation:":PRINT:PRINT " A. Pass all":PRINT " B. Translate to ASCII"5820 V=TRANSFLG/255:POSITION PEEK(82),V+&2:PRINT "*":POSITION PEEK(82),&65825 PRINT "> ";:INPUT m9CMD5835 IF CMD="A":TRANSFLG=&0:TRANS1=TRANS1 OR &32:ELSEIF CMD="B":TRANSFLG=&2555840 TRANS1=TRANS1 AND &2235850 ENDIF:GOTO 51005900 PRINT "}Upload Mode":PRINT:PRINT "WAIT^Q,";:IF WAITQ:PRINT "ON":ELSE:PRINT "OFF":ENDIF5905 PRINT "PAUSECR,";PAUSEm:CR:PRINT "ECHOBACK,";:IF ECHOBACK:PRINT "ON":ELSE:PRINT "OFF":ENDIF5907 PRINT "XMODEM,";:IF XFLG:PRINT "ON":ELSE:PRINT "OFF":ENDIF5910 PRINT:PRINT "Enter option,value> ";:INPUT OPT:IF OPT<>"":INPUT VALUE:ENDIF5920 IF OPT="WAIT^Q"5925 IF VALUE=m;"ON":WAITQ=&255:ELSEIF VALUE="OFF":WAITQ=&0:ELSE:GOTO 5980:ENDIF5930 ELSEIF OPT="PAUSECR"5935 IF INSTR("0123456789",MID(VALUE,&1,&1),&1)=&0:GOTO 5980:ELSE:PAUSECR=VALUE:ENDIF5940 ELSEIF OPT="ECHOBACK"5945 IF VALUE="ON":ECHOBACK=&255:ELSEIF VmAP 7155:CLOSE# &2:OPEN# &4,&4,&0,F7103 IF XFLG THEN 73007105 SIZE=BUFFHI-BUFFLO:TRAP 7110:BGET# &4,BUFFLO,SIZE:GOTO 71157110 SIZE=DPEEK(904):IF SIZE=0 THEN 71557115 ERRCODE=ERR:TRAP 0:CALL OPENR7116 IF WAITQ OR PAUSECR>&0 THEN 72007117 m? IF SIZE>15:TEMP=15:ELSE:TEMP=SIZE:ENDIF7118 FOR A=BUFFLO TO BUFFLO+TEMP-1:CALL PUTR(PEEK(A)):NEXT A7119 IF TEMP=SIZE THEN 71377120 FOR A=BUFFLO+TEMP TO BUFFLO+SIZE-17125 CALL PUTR(PEEK(A)):C=GETR(&1)7135 NEXT A7137 CALL WAIT(&50):SIm@ZE=R$BUFFIN(&2)7140 FOR A=1 TO SIZE:C=GETR(&0):NEXT A7145 CLOSE# &2:IF ERRCODE=&1 THEN 71057150 IF ERRCODE<>&136:CLOSE# &4:PRINT "ERROR - ";ERR:RET:ENDIF7155 CLOSE# &2:CLOSE# &4:RET7200 FOR A=BUFFLO TO BUFFLO+SIZE-17205 C=PEEK(A):CAmALL PUTR(C):IF C=&1557210 CALL WAIT(PAUSECR)7215 IF WAITQ:WHILE C<>ASC(""):C=GETR(&1):ENDWHILE:ENDIF:ENDIF7220 C=GETR(&1):NEXT A:GOTO 71457300 TRAP 7345:PACK=&0:CALL R$TRANSLATE(&7,&32,&0,"R1:")7302 REM CALL OPENR7303 REM GETmB# &2,CH:PUT# &0,CH:IF CH<>&21 THEN 73037304 REM CLOSE# &27305 SIZE=BUFFHI-BUFFLO:A=07310 BGET# &4,BUFFLO+A,128:A=A+1287315 IF A+12807360 FORmC L1=&1 TO A/128:PACK=PACK+&17363 CALL WAIT(&2)7365 PUT# &2,&1:PUT# &2,PACK:PUT# &2,&255-PACK7370 CH=&1+PACK+(&255-PACK)7375 FOR L2=&0 TO &1277380 C=PEEK(BUFFLO+SIZE+L2):CH=CH+C:PUT# &2,C:PUT# &0,C7385 NEXT L27390mD PUT# &2,CH:GET# &2,CH07395 IF CH0<>&6 THEN 73637400 SIZE=SIZE+128:NEXT L17405 ENDIF7410 IF FLAG THEN 73057415 A=DPEEK(904)7417 CALL WAIT(&2)7420 PUT# &2,&1:PUT# &2,PACK:PUT# &2,&255-PACK7425 CH=&1+PACK+(&255-PACKmE)7430 IF A<>0:FOR L2=&0 TO A-17435 C=PEEK(BUFFLO+SIZE+L2):CH=CH+C:PUT# &2,C:PUT# &0,C7440 NEXT L2:ENDIF7445 FOR L2=&1 TO &128-A7450 CH=CH+A:PUT# &2,A7455 NEXT L27465 PUT# &2,CH:GET# &2,CH07470 IF CH0<>&6 THEN 7417747mF3 CALL WAIT(&2)7475 PUT# &2,&47480 CALL WAIT(&50):GOTO 71557800 ENDDEF8000 DEF DOWNLOAD(F)8010 DECLARE8015 BINARY A,L,SIZE8020 BYTE FLAG,C8099 ENDDECLARE8100 OPEN# &4,&8,&0,F:FLAG=&08103 IF XFLG THEN 83008105 CALL OPmGENR:A=BUFFLO:PUT# &2,&1558110 FOR L=1 TO 10008115 SIZE=R$BUFFIN(&2):IF SIZE<>0 THEN 82008120 NEXT L8130 CLOSE# &2:IF A<>BUFFLO:BPUT# &4,BUFFLO,A-BUFFLO:ENDIF8140 IF FLAG:FLAG=&0:CALL OPENR:A=BUFFLO:PUT# &2,ASC(""):GOTO 81108150 ELSEmH:CLOSE# &4:RET:ENDIF8200 C=GETR(&1):IF ECHOBACK:CALL PUTR(C):ENDIF:POKE A,C:A=A+1:IF A=BUFFHI-10248205 FLAG=&255:PUT# &2,ASC(""):ENDIF8210 GOTO 81108300 A=08305 CALL R$TRANSLATE(&7,&32,&0,"R1:")8310 CALL OPENR:PUT# &2,&218315 GETmI# &2,CH:IF CH=&4 THEN 8400:GET# &2,B1:GET# &2,B2:CH=CH+B1+B28320 FOR A=A TO A+127:GET# &2,C:CH=CH+C:POKE BUFFLO+A,C:PUT# &0,C:NEXT A8325 GET# &2,CH0:IF CH<>CH0:PUT# &2,&21:A=A-128:GOTO 8315:ENDIF8330 IF BUFFLO+A+128>=BUFFHI:CLOSE# 28335 BPmJUT# &4,BUFFLO,A-128:MOVE BUFFLO+A-128,BUFFLO,1288340 CALL OPENR:ENDIF8345 PUT# &2,&6:GOTO 83158400 A=A-128+PEEK(BUFFLO+A-1):CLOSE# &28405 IF A<>0:BPUT# &4,BUFFLO,A:ENDIF8410 CLOSE# &4:RET8999 ENDDEF9000 DEF GETR(MODE)9010 DECLARE:mKBYTE C:ENDDECLARE9015 GET# &2,C9020 IF TRANSFLG:C=TRANSIN(C)9025 IF C<>&0:PUT# &0,C:ENDIF9030 IF MODE=&1 AND C=&0 THEN 90159035 ELSE9040 PUT# &0,C9045 ENDIF9050 RET C9055 ENDDEF9500 DEF PUTR(C)9505 IF TRANSFLG:C=TRANSOmLUT(C):ENDIF:PUT# &2,C9510 RET:ENDDEF32000 END,BAUD1,BAUD2,TRANS1,TRANS2,V,ECHOBACK25 BYTE TRANSIN(255),TRANSOUT(255),TRANSFLG,ECHOFLAG,BUFFIN(1279),WAITQ,PAUSECR27 BYTE XFLG,CH,B1,B2,CH030 STRING(32) CMD,ECHOFILE,FILE35 BINARY Ll210 DEF MAIN20 DECLARE30 RECFNC(STRING) F$WORD40 FNC(BYTE) DOS$STATUS(BYTE,BYTE(3))50 FNC(BYTE) DOS$READ(BYTE,BINARY,BINARY,BYTE)55 FNC(BYTE) DOS$WRITE(BYTE,BINARY,BINARY,BYTE)60 BINARY SECTOR,BUFFLO,BUFFHI,NUM,MqNIN,MAX,ADDR,SIZE65 BYTE ST,BUFFER(255),FROM,TO,DENF,DENT,STAT(3)70 STRING(8) WORD95 ENDDECLARE100 WORD=F$WORD:IF WORD="":PRINT "SOURCE> ";:INPUT WORD:ENDIF105 FROM=WORD:IF FROM<&1 OR FROM>&8:ERROR &64:ENDIF110 WORD=F$WORqOD:IF WORD="":PRINT "DEST> ";:INPUT WORD:ENDIF115 TO=WORD:IF TO<&1 OR TO>&8:ERROR &65:ENDIF120 IF F$WORD<>"":ERROR &65:ENDIF125 ERROR DOS$STATUS(FROM,STAT):IF (STAT(0) AND 32)<>&0:DENF=&2:ELSE:DENF=&1:ENDIF130 ERROR DOS$STATUS(TO,STAT):qPIF (STAT(0) AND 32)<>&0:DENT=&2:ELSE:DENT=&1:ENDIF135 IF DENF<>DENT:ERROR &67:ENDIF:SIZE=DENF*128140 BUFFLO=DPEEK(14)+256:BUFFHI=DPEEK(88)-128:NUM=(BUFFHI-BUFFLO)/128/DENF145 SECTOR=1:GOSUB 1000:GOTO 153150 IF FROM=TO:GOSUB 1000:ENDIF15qQ3 MIN=SECTOR:MAX=SECTOR+NUM-1155 IF MAX>720:MAX=720:ENDIF157 ADDR=BUFFLO160 FOR SECTOR=MIN TO MAX165 IF DOS$READ(FROM,ADDR,SECTOR,DENF)<>&1:PRINT "BAD SECTOR: ";SECTOR:ENDIF:ADDR=ADDR+SIZE170 NEXT SECTOR173 IF FROM=TO:GOSUqRB 2000:ENDIF174 ADDR=BUFFLO175 FOR SECTOR=MIN TO MAX180 ERROR DOS$WRITE(TO,ADDR,SECTOR,DENT):ADDR=ADDR+SIZE185 NEXT SECTOR190 IF MAX<>720 THEN 150195 STOP1000 PRINT:PRINT "MOUNT SOURCE DISK AND PRESS ";:INPUT WORD:RETUqSRN2000 PRINT "MOUNT DEST. DISK AND PRESS ";:INPUT WORD:RETURN9999 END DOS$STATUS(BYTE,BYTE(3))50 FNC(BYTE) DOS$READ(BYTE,BINARY,BINARY,BYTE)55 FNC(BYTE) DOS$WRITE(BYTE,BINARY,BINARY,BYTE)60 BINARY SECTOR,BUFFLO,BUFFHI,NUM,MpN1000 DEF MAIN1010 DECLARE1020 FLOAT FREQ1030 BINARY PITCH1040 BYTE FIN1050 PROC SOUND16(BYTE,BINARY,BYTE,BYTE),SETFIN(BYTE,BYTE),SETFIN15(BYTE)1090 ENDDECLARE1100 PRINT "FIN> ";1110 TRAP 12001120 INPUT FIN1130 IF FuUIN=&01140 CALL SETFIN15(&1):CALL SETFIN(&1,&0)1150 ELSEIF FIN=&11160 CALL SETFIN15(&0):CALL SETFIN(&1,&0)1170 ELSE1180 CALL SETFIN(&1,&1)1190 ENDIF1200 PRINT "PITCH> ";1205 TRAP 13001210 INPUT PITCH1220 CALL SOUND16(&uV1,PITCH,&10,&10)1300 IF FIN=&01310 PRINT "FREQ=";15699.9/(2.0*(PITCH+1.0))1320 ELSEIF FIN=&11330 PRINT "FREQ=";63921.0/(2.0*(PITCH+1.0))1340 ELSE1350 PRINT "FREQ=";1789790.0/(2.0*(PITCH+7.0))1360 ENDIF1400 GOTO 11001500 ENuWDPITCH,&10,&10)1300 IF FIN=&01310 PRINT "FREQ=";15699.9/(2.0*(PITCH+1.0))1320 ELSEIF FIN=&11330 PRINT "FREQ=";63921.0/(2.0*(PITCH+1.0))1340 ELSE1350 PRINT "FREQ=";1789790.0/(2.0*(PITCH+7.0))1360 ENDIF1400 GOTO 11001500 ENt1000 DEF PACKAGE1010 DECLARE1020 STRING(24) HEBREW$(299)1030 STRING(16) ENGLISH$(299)1040 BYTE VOCAB(15),VOCAB_SIZE(15),NEXT_VOCAB,NEXT_WORD1050 STRING(32) VOCAB$(15)1060 BINARY VOCAB_START(15)1070 BYTE C(27,9),V(15,2)1yY080 RECPROC ATTACH1090 PRIVATE1100 PROC DISPLAY(STRING(*))1110 BINARY I,J,K1120 FNC(BYTE) RND(BYTE)1130 BYTE O,S,CORRECT,L1,RECORD(99),WORD1140 RECFNC(STRING) F$DEF(STRING(*))1150 STRING(120) REPLY$1160 ENDDECLAREyZ1170 I=01180 O=&21190 TRAP 11901200 REPEAT:REM Until forever1210 REPEAT:REM until valid vocabular is entered1220 REM Select Text Graphics and Color Green1230 GRAPHICS &01240 SETCOLOR &4,&12,&101250 SETCOLOR &y[6,&12,&01260 REM1270 REM Output Menu of Vocabularies1280 PRINT "BIBHEB"1290 PRINT " 0 Exit to DOS"1300 FOR L1=0 TO NEXT_VOCAB-11310 PRINT " ";VOCAB(L1);" ";VOCAB$(L1);" (";VOCAB_SIZE(L1);")"1320 NEXT Ly\11330 PRINT "Which vocabulary> ";I1340 PRINT "Which vocabulary> ";1350 INPUT I1360 IF I=01370 GRAPHICS &01380 STOP1390 ENDIF1400 K=-11410 FOR L1=0 TO NEXT_VOCAB-11420 IF I=VOCy]AB(L1)1430 K=L11440 ENDIF1450 NEXT L11460 UNTIL K<>-11470 REPEAT1480 PRINT1490 PRINT1500 PRINT "Do you with to:"1510 PRINT " 1) Review ";VOCAB$(K);", or"1520 PRINT " 2) Be tested y^on ";VOCAB$(K);"?"1530 PRINT "> ";O1540 PRINT "> ";1550 INPUT O1560 UNTIL O=&1 OR O=&21570 REM1580 REM Select 180 by 80 pixels plus 40 by 4 text and Color Green1590 GRAPHICS &61600 SETCOLOR &4,&12,&101610 y_ SETCOLOR &6,&12,&01620 S=VOCAB_SIZE(K)1630 CORRECT=&01640 FOR L1=0 TO S-11650 RECORD(L1)=&01660 NEXT L11670 FOR L1=&1 TO S1680 REM select a word not asked yet1690 REPEAT1700 WORD=RND(S)1710 y` UNTIL RECORD(WORD)=&01720 RECORD(WORD)=&11730 WORD=WORD+VOCAB_START(K)1740 CALL DISPLAY(HEBREW$(WORD))1750 IF O=&11760 PRINT "} ";ENGLISH$(WORD);1770 REM wait for user to hit return1780 ya INPUT REPLY$1790 ELSE1800 PRINT "} > ";1810 INPUT REPLY$1820 IF REPLY$=ENGLISH$(WORD)1830 CORRECT=CORRECT+11840 ELSE1850 PRINT " ";ENGLISH$(WORD);18yb60 REM User was wrong. Wait for him to look at correct answer1870 REM and hit RETURN1880 INPUT REPLY$1890 ENDIF1900 ENDIF1910 NEXT L11920 GRAPHICS &01930 SETCOLOR &4,&12,&101940 SETCOLycOR &6,&12,&01950 PRINT "BIBHEB"1960 PRINT1970 IF O=&21980 PRINT " SCORE=";100*CORRECT/S;"% (";CORRECT;"/";S;")"1990 ENDIF2000 PRINT "Hit to continue";2010 INPUT REPLY$2020 UNTIL &12030 DEF ydRND(R)2040 DECLARE2050 BYTE C2060 ENDDECLARE2070 C=PEEK(53770)2080 RET C-C/R*R2090 ENDDEF2100 DEF ATTACH2110 DECLARE2120 BINARY I,J2130 ENDDECLARE2140 REM this routine is automatically run when BIBHEB is loaded2150 REyeM2160 REM BIBHEB.CHR contains the bit patterns for the character set.2170 REM someday, turn this into binary and BGET it.2180 OPEN# &1,&4,&0,F$DEF("BIBHEB.CHR")2190 FOR I=0 TO 272200 INPUT# &1,C(I,0),C(I,1),C(I,2),C(I,3),C(I,4),C(I,5),Cyf(I,6),C(I,7),C(I,8),C(I,9)2210 NEXT I2220 FOR I=1 TO 152230 INPUT# &1,V(I,0),V(I,1),V(I,2)2240 NEXT I2250 CLOSE# &12260 OPEN# &1,&4,&0,F$DEF("BIBHEB.DAT")2270 REM Its format is:2280 REM vocab#,vocab_size,vocab_name2290 REMyg hebrew_word,english_word2300 REM ..., ...2310 REM repeated for each vocabulary2320 REM The transliteration scheme is documented at the end of this listing2330 TRAP 24502340 NEXT_VOCAB=&02350 NEXT_WORD=&02360 REPEATyq bLOADER M65bRELOCATEM65bBENCHB BASbBOOT BASbC0 BASbC2 BASbCAR BASbCATLG BASB )MENU OBJBINOVERIFYBASBXNOVERIFYOBJBYPUTDOS OBJB?RELOCATESYSB NRS232 BASB^RS232 OBJB\RTL LIBb!COMMAND BASb1CONFIG BASb 5COPY BASbGPERROR BASbZEDIT BASb >FILES BASbzIO BASbWHELPIDX BASB )MENU OBJBINOVERIFYBASBXNOVERIFYOBJBYPUTDOS OBJB?RELOCATESYSB NRS232 BASB^RS232 OBJB\RTL LIBbPUTDOS BASb RS232 BASbRTL LIBbcRTL M65b SDCOPY BASbSET BASbSETTIME BASbSHOW BASB )MENU OBJBINOVERIFYBASBXNOVERIFYOBJBYPUTDOS OBJB?RELOCATESYSB NRS232 BASB^RS232 OBJB\RTL LIBb TIME BASb TYPE BASbtCAT BASb,!VT BASbMDISKCOPYBASbTSOUND BASbXBIBHEB BASbxHELP BASB )MENU OBJBINOVERIFYBASBXNOVERIFYOBJBYPUTDOS OBJB?RELOCATESYSB NRS232 BASB^RS232 OBJB\RTL LIBbCP BASb%APROPOS BASCCP BASbCR2EOL BASbEOL2CR BASbFORMAT BASbGAME BASb HEAP BASB )MENU OBJBINOVERIFYBASBXNOVERIFYOBJBYPUTDOS OBJB?RELOCATESYSB NRS232 BASB^RS232 OBJB\RTL LIBbSETUP BASb MATH BASbMATH2 BASbMENU BASPM BASbSIEVEB BASb"SURROUNDBAS$TEST BASB )MENU OBJBINOVERIFYBASBXNOVERIFYOBJBYPUTDOS OBJB?RELOCATESYSB NRS232 BASB^RS232 OBJB\RTL LIBb&VERIFY BAS 'CLOCK2 M65bP1BASIC BASbHBASIC2 BASCCP OBJSETTIME2BASB )MENU OBJBINOVERIFYBASBXNOVERIFYOBJBYPUTDOS OBJB?RELOCATESYSB NRS232 BASB^RS232 OBJB\RTL LIBB )MENU OBJBINOVERIFYBASBXNOVERIFYOBJBYPUTDOS OBJB?RELOCATESYSB NRS232 BASB^RS232 OBJB\RTL LIB2370 INPUT# &1,VOCAB(NEXT_VOCAB),VOCAB_SIZE(NEXT_VOCAB),VOCAB$(NEXT_VOCAB)2380 VOCAB_START(NEXT_VOCAB)=NEXT_WORD2390 FOR I=NEXT_WORD TO NEXT_WORD+VOCAB_SIZE(NEXT_VOCAB)-12400 INPUT# &1,HEBREW$(I),ENGLISH$(I)2410 NEXT I2420 yr NEXT_WORD=I2430 NEXT_VOCAB=NEXT_VOCAB+12440 UNTIL NEXT_VOCAB=152450 REM This is the destination of the above TRAP2460 CLOSE# &12470 RET2480 ENDDEF2490 DEF DISPLAY(WORD$)2500 DECLARE2510 BYTE CHAR,I2520 BINARY BASE,X,J2ys530 ENDDECLARE2540 PRINT# &6,"}"2550 BASE=DPEEK(88)+12+20*302560 FOR I=&1 TO LEN(WORD$)2570 CHAR=INSTR("+-.EoUuieAaO'BGDHWZhTYKkLMmNnS!PpXxQRCct",MID$(WORD$,I,&1),&1)-&162580 IF CHAR<=&1272590 REM this is a consonant, so aytdvance (really back up) one position.2600 BASE=BASE-12610 FOR J=0 TO 92620 POKE BASE+J*20,C(CHAR,J)2630 NEXT J2640 ELSEIF CHAR=-&12650 POKE BASE,PEEK(BASE) OR &1282660 ELSEIF CHAR=-&112670 POKE BASE,yuPEEK(BASE) OR &82680 ELSEIF CHAR=-&132690 POKE BASE+4*20,PEEK(BASE+4*20) OR &162700 ELSEIF CHAR=-&162710 GRAPHICS &02720 PRINT WORD$2730 STOP2740 ELSE2750 FOR J=9 TO 112760 POKE BASE+J*20,PEEK(ByvASE+J*20) OR V(-CHAR,J-9)2770 NEXT J2780 ENDIF2790 NEXT I2800 REM Points overstrike the most recently written consonant.2810 RET2820 ENDDEF2830 REM + primary accent2840 REM - secondary accent2850 REM . dagesh2860 RywEM E Sereh2870 REM o Holam (over waw)2880 REM ^e Seghol Shwa2890 REM ^o Qamats Shwa2900 REM ^a Patah Shwa2910 REM U Shwa2920 REM u Qubbus2930 REM i Hiriq2940 REM e Seghol2950 REM A Qamats2960 REM a Patah2970 REM yx O Holam (except waw)2980 REM ' Aleph2990 REM B Beth3000 REM G Gimel3010 REM D Dahleth3020 REM H He3030 REM W Waw3040 REM Z Zahyin3050 REM h Heth3060 REM T Teht3070 REM Y yodh3080 REM K Khahf3090 REM L Lyyahmed3100 REM M Mem3110 REM m Mem (final)3120 REM N Nun3130 REM n Nun (final)3140 REM S Sahmekh3150 REM ! Ahyin3160 REM P Peh3170 REM p Peh (final)3180 REM X Tsahdee3190 REM x Tsahdee (final)3200 REM Q kofh32yz10 REM R Rosh3220 REM C seen3230 REM c Sheen3240 REM t Taw3250 END) ENGLISH$(299)1040 BYTE VOCAB(15),VOCAB_SIZE(15),NEXT_VOCAB,NEXT_WORD1050 STRING(32) VOCAB$(15)1060 BINARY VOCAB_START(15)1070 BYTE C(27,9),V(15,2)1xS";:LINPUT LINE:ENDIF:P=&1415 CALL P$CMD(LINE,P):GOTO 400450 M=SPEEK(AM+8):IF AX=0:AX=AM+9+LEN(M):X=SPEEK(AX+2):RETURN:ENDIF455 IF X="":AM=DPEEK(AM):M=SPEEK(AM+8):AX=AM+9+LEN(M):X=SPEEK(AX+2):RETURN:ENDIF460 AX=AX+3+LEN(X):X=SPEEK(AX+2):RETURN470 IF| BATTRAP:BATFLAG=&0:P=&255:ENDIF:RETURN500 DEF P$CMD(LINE,P):DECLARE:STRING(12) COMMAND:STRING(16) ARG1:ENDDECLARE507 COMMAND=F$WORD:IF COMMAND="$" THEN 507510 IF COMMAND="":RET:ENDIF515 IF COMMAND="LOAD" OR COMMAND="FLOAD":CALL LOAD(F$WORD)520 ELS}EIF COMMAND="KILL":CALL KILL(F$WORD)525 ELSEIF COMMAND="PROTECT":PROTECT F$DEF(F$WORD)530 ELSEIF COMMAND="UNPROTECT":UNPROTECT F$DEF(F$WORD)535 ELSEIF COMMAND="ERASE":ERASE F$DEF(F$WORD)540 ELSEIF COMMAND="RENAME":RENAME F$DEF(F$WORD)545 ELSEIF COM~MAND="DEF":ARG1=F$WORD550 IF ARG1="":PRINT DEFAULT:ELSE:DEFAULT=ARG1:ENDIF551 ELSEIF COMMAND="OBJ":ARG1=F$WORD552 IF ARG1="":PRINT SEARCH:ELSE:SEARCH=ARG1:ENDIF555 ELSEIF COMMAND="END"556 BATFLAG=&0560 ELSEIF COMMAND="SCREEN":BATSCR=&255565 ELSEIF COMMAND="NOSCREEN":BATSCR=&0570 ELSEIF COMMAND="DIR":ARG1=F$WORD585 OPEN# &7,&6,&0,F$DEF(ARG1;"*.*"):TRAP 595590 LINPUT# &7,X:PRINT X:GOTO 590595 CLOSE# &7:TRAP 100600 ELSEIF COMMAND="REPEAT":P=&1:BATTRAP=&255:GOTO 507620 ELSEIF COMMAND="MDIR" OR COMMAND="XDIR":AM=TOP:AX=0625 REPEAT:GOSUB 450630 IF M<>"":PRINT M;"";DPEEK(AM+2);"";DPEEK(AM+4):ELSE:PRINT:ENDIF635 WHILE X<>"":IF COMMAND="XDIR":PRINT " ";X;"";DPEEK(AX):ENDIF:GOSUB 450:ENDWHILE640 UNTIL M="" AND X=""5 DEF MAIN10 DECLARE12 BYTE TRANSIENT15 STRING(3) DEFAULT20 STRING(20) X,M,BATFILE25 STRING(120) LINE30 BINARY LOMEMV,TOP,AX,AM,BATSECTOR,L32 BYTE P,BATBYTE,BATFLAG,BATSCR,BATTRAP,CONT,L135 RECPROC LOAD(STRING(*)),KILL(STRING(*)),NOP37 PROC P$CMD(STRING(*),BYTE):RECPROC FIND(STRING(*),BYTE)40 RECFNC(STRING) F$DEF(STRING(*)),F$NAME(STRING(*)),F$WORD45 RECFNC(BINARY) F$ALLOC(BINARY)95 ENDDECLARE100 IF PEEK(703)<>&24:GRAPHICS &0:ENDIF:POKE 8,&0105 DPOKE 14,DPEEK(88)-512:FOR L1=&1 TO &7:CLOSE# L1:NEXT L1:TRAP 100115 IF PEEK(580)<>&0:POKE 580,&0120 TRANSIENT=&0123 DEFAULT="D1:":CONT=&0:P=&0:DPOKE 206,ADR(LOMEMV)124 LOMEMV=DPEEK(743):TOP=LOMEMV+1:FPOKE LOMEMV+1,0.0:DPOKE LOMEMV+7,0:POKE LOMEMV+9,&0:LOMEMV=LOMEMV+9125 DPOKE LOMEMV+1,DESC(F$DEF):SPOKE LOMEMV+3,"F$DEF":LOMEMV=LOMEMV+8130 DPOKE LOMEMV+1,DESC(F$ALLOC):SPOKE LOMEMV+3,"F$ALLOC":LOMEMV=LOMEMV+10135 DPOKE LOMEMV+1,DESC(F$WORD):SPOKE LOMEMV+3,"F$WORD":LOMEMV=LOMEMV+9140 DPOKE LOMEMV+1,DESC(P$CMD):SPOKE LOMEMV+3,"P$CMD":LOMEMV=LOMEMV+8190 DPOKE LOMEMV+1,0:POKE LOMEMV+3,0:LOMEMV=LOMEMV+4195 BATTRAP=&0200 BATFLAG=&255:TRAP 205:OPEN# &7,&4,&0,"D:STARTUP.BAT":NOTE# &7,BATSECTOR,BATBYTE:CLOSE# &7203 BATFILE="D:STARTUP.BAT":GOTO 210205 BATFLAG=&0:ERROR &1:CLOSE# &7210 TRAP 100:BATSCR=&0295 ENDIF300 DPOKE 743,LOMEMV305 PRINT " "307 IF TRANSIENT:CALL KILL(SPEEK(TOP+8)):TRANSIENT=&0:ENDIF310 IF ERR>&1:PRINT "SYSTEM ERROR - ";ERR:ERROR &1:GOSUB 470:ENDIF400 ERROR &1:TRAP 100401 IF CONT THEN 415402 IF P&1 THEN 415:ENDIF404 IF BATFLAG:TRAP 412405 OPEN# &7,&4,&0,BATFILE:POINT# &7,BATSECTOR,BATBYTE:LINPUT# &7,LINE:NOTE# &7,BATSECTOR,BATBYTE:CLOSE# &7407 IF BATSCR:PRINT LINE:ENDIF410 ELSE412 CLOSE# &7:TRAP 100:BATFLAG=&0:PRINT "$ ";:LINPUT LINE:ENDIF:P=&1415 CALL P$CMD(LINE,P):GOTO 400450 M=SPEEK(AM+8):IF AX=0:AX=AM+9+LEN(M):X=SPEEK(AX+2):RETURN:ENDIF455 IF X="":AM=DPEEK(AM):M=SPEEK(AM+8):AX=AM+9+LEN(M):X=SPEEK(AX+2):RETURN:ENDIF460 AX=AX+3+LEN(X):X=SPEEK(AX+2):RETURN470 IF BATTRAP:BATFLAG=&0:P=&255:ENDIF:RETURN500 DEF P$CMD(LINE,P):DECLARE:STRING(12) COMMAND:STRING(16) ARG1:ENDDECLARE507 COMMAND=F$WORD:IF COMMAND="$" THEN 507510 IF COMMAND="":RET:ENDIF515 IF COMMAND="LOAD" OR COMMAND="FLOAD":CALL LOAD(F$WORD)520 ELSEIF COMMAND="KILL":CALL KILL(F$WORD)525 ELSEIF COMMAND="PROTECT":PROTECT F$DEF(F$WORD)530 ELSEIF COMMAND="UNPROTECT":UNPROTECT F$DEF(F$WORD)535 ELSEIF COMMAND="ERASE":ERASE F$DEF(F$WORD)540 ELSEIF COMMAND="RENAME":RENAME F$DEF(F$WORD)545 ELSEIF COMMAND="DEF":ARG1=F$WORD550 IF ARG1="":PRINT DEFAULT:ELSE:DEFAULT=ARG1:ENDIF555 ELSEIF COMMAND="END"556 BATFLAG=&0560 ELSEIF COMMAND="SCREEN":BATSCR=&255565 ELSEIF COMMAND="NOSCREEN":BATSCR=&0570 ELSEIF COMMAND="DIR":ARG1=F$WORD585 OPEN# &7,&6,&0,F$DEF(ARG1;"*.*"):TRAP 595590 LINPUT# &7,X:PRINT X:GOTO 590595 CLOSE# &7:TRAP 100600 ELSEIF COMMAND="REPEAT":P=&1:BATTRAP=&255:GOTO 507620 ELSEIF COMMAND="MDIR" OR COMMAND="XDIR":AM=TOP:AX=0625 REPEAT:GOSUB 450630 IF M<>"":PRINT M;"";DPEEK(AM+2);"";DPEEK(AM+4):ELSE:PRINT:ENDIF635 WHILE X<>"":IF COMMAND="XDIR":PRINT " ";X;"";DPEEK(AX):ENDIF:GOSUB 450:ENDWHILE640 UNTIL M="" AND X="":PRINT:PRINT DPEEK(88)-512-LOMEMV;" free"645 ELSEIF COMMAND="BATCH":BATFILE=F$DEF(F$WORD);".BAT"650 OPEN# &7,&4,&0,BATFILE:NOTE# &7,BATSECTOR,BATBYTE:CLOSE# &7:BATFLAG=&255655 ELSEIF COMMAND="TRAP":BATTRAP=&255660 ELSEIF COMMAND="NOTRAP":BATTRAP=&0665 ELSEIF COMMAND="PAUSE":PRINT "";:GOSUB 995:INPUT ARG1670 ELSEIF COMMAND="PRINT":GOSUB 995675 ELSEIF COMMAND="CLS":GRAPHICS &0680 ELSEIF COMMAND="REM":P=&200900 ELSE:CALL FIND(COMMAND,&0):DPOKE 743,LOMEMV+PEEK(DPEEK(AM+2)+2)905 DPOKE 14,DPEEK(743)+1:DPOKE 176,DPEEK(AM+2)+3935 ENDIF990 RET995 L1=INSTR(LINE,";",P+&1):IF L1=&0:L1=LEN(LINE)+&1:ENDIF996 IF P+&10:RET:ENDIF:ENDIF1055 FILE=F$DEF(F);".OBJ":OPEN# &7,&4,&0,FILE1060 GET# &7,L1:GET# &7,H:IF (L1 AND H)<>&255 THEN 19051065 GET# &7,L1:GET# &7,H:IF BIN(L1)+H<>0 THEN 19051070 GET# &7,L1:GET# &7,H:SIZE=BIN(L1)+256*H+1:FINISH=START+SIZE-11073 BGET# &7,START,2:IF START+DPEEK(START)>DPEEK(14)-512:ERROR &147:ENDIF1075 BGET# &7,START+2,SIZE-2:SIZE=DPEEK(START)+1:LOMEMV=START+SIZE1080 DPOKE LOMEMV,TOP:DPOKE LOMEMV+2,START:TOP=LOMEMV1085 SPOKE LOMEMV+8,MODULE:SIZE=SIZE+9+LEN(MODULE):LOMEMV=START+SIZE1100 DPOKE 214,START+3:DPOKE 216,START:EXEC 647681190 ATTACH=0:DETACH=01200 TRAP 14001201 UNRESOLVED=&01205 LINPUT# &7,WORD:WHILE WORD<>""1210 GET# &7,L1:GET# &7,H:ADDR=256*H+L1+START1215 AM=DPEEK(TOP):AX=0:REPEAT:GOSUB 450:IF X=WORD THEN 1220:UNTIL X="" AND M=""1216 UNRESOLVED=&2551217 PRINT "Unresolved: ";WORD:GOSUB 470:GOTO 12251220 MOVE DPEEK(AX),ADDR,101225 LINPUT# &7,WORD:ENDWHILE1230 LINPUT# &7,WORD:GET# &7,L1:GET# &7,H1233 IF WORD="ATTACH":ATTACH=256*H+L1+START:GOTO 1230:ELSEIF WORD="DETACH":DETACH=256*H+L1+START:GOTO 1230:ENDIF1235 DPOKE LOMEMV,256*H+L1+START:SPOKE LOMEMV+2,WORD:SIZE=SIZE+3+LEN(WORD):LOMEMV=START+SIZE:GOTO 12301400 IF UNRESOLVED:DETACH=0:ATTACH=0:ENDIF1401 DPOKE TOP+4,SIZE+4:DPOKE TOP+6,DETACH:DPOKE LOMEMV,0:LOMEMV=LOMEMV+3:POKE LOMEMV-1,&01405 DPOKE 743,LOMEMV:TRAP 100:CLOSE# &7:IF ATTACH<>0:MOVE ATTACH,DESC(NOP),10:CALL NOP:ENDIF1410 IF UNRESOLVED:CALL KILL(MODULE):AM=0:ELSE:AM=TOP:ENDIF1420 RET1905 PRINT "What?":GOSUB 470:GOTO 1001990 ENDDEF2000 DEF KILL(MDL)2005 CALL FIND(MDL,&0)2010 REPEAT2015 IF DPEEK(TOP+6)<>0:MOVE DPEEK(TOP+6),DESC(NOP),10:CALL NOP:ENDIF2020 TOP=DPEEK(TOP)2025 UNTIL TOPL1):RET "":ENDIF3015 RET MID(FILE,P,L1-P+&1):ENDDEF4000 DEF F$DEF(FILE)4010 IF INSTR(FILE,":",&1)=&0:RET DEFAULT;FILE:ELSE:RET FILE:ENDIF:ENDDEF5000 DEF F$WORD5005 DECLARE:STRING(32) WORD:STRING(1) SYM:ENDDECLARE5015 WORD="":L1=LEN(LINE):IF P>L1 THEN 59005020 SYM=MID(LINE,P,&1):IF SYM=" ":P=P+&1:GOTO 5020:ENDIF5025 WORD=WORD;SYM:P=P+&1:IF P>L1 THEN 59005030 SYM=MID(LINE,P,&1):IF SYM<>" " THEN 50255900 IF WORD=";":CONT=&255:RET "":ELSE:CONT=&0:RET WORD:ENDIF:ENDDEF6000 DEF NOP:RET:ENDDEF7000 DEF FIND(FILE,FLG)7005 X=F$NAME(FILE):AM=TOP:M=SPEEK(AM+8)7010 WHILE M<>"":IF M=X:RET:ENDIF:AM=DPEEK(AM):M=SPEEK(AM+8):ENDWHILE7015 IF FLG=&0:CALL LOAD(FILE):IF AM<>0:TRANSIENT=&255:RET:ENDIF:ENDIF7020 IF FLG=&0:PRINT "What?":GOSUB 470:GOTO 100:ELSE:AM=0:RET:ENDIF:ENDDEF8000 DEF F$ALLOC(SIZE)8010 DECLARE:BINARY ADDR:ENDDECLARE8020 DPOKE TOP+4,DPEEK(TOP+4)+SIZE:ADDR=LOMEMV:LOMEMV=LOMEMV+SIZE:DPOKE 743,LOMEMV8030 RET100 DEF MAIN110 DECLARE120 BYTE OFFSET,C130 BINARY SECTOR140 STRING(20) FILE150 RECPROC P$SCAN0,P$SCAN2160 RECFNC(STRING) F$POS(BYTE,STRING(*),STRING(*)),F$DEF(STRING(*))170 ENDDECLARE180 CALL P$SCAN0190 FILE=F$DEF(F$POS(&0,"$_File: ",""))200 CALL P$SCAN2210 OPEN# &1,&12,&0,FILE220 TRAP 900225 REPEAT230 NOTE# &1,SECTOR,OFFSET240 GET# &1,C250 IF C=&13260 POINT# &1,SECTOR,OFFSET270 PUT# &1,&155280 ENDIF290 UNTIL &0900 CLOSE# &1999 ENDCLARE120 BYTE OFFSET,C130 BINARY SECTOR140 STRING(20) FILE150 RECPROC P$SCAN0,P$SCAN2160 RECFNC(STRING) F$POS(BYTE,STRING(*),STRING(*)),F$DEF(STRING(*))170 ENDDECLARE180 CALL P$SCAN0190 FILE=F$DEF(F100 DEF MAIN110 DECLARE120 BYTE OFFSET,C130 BINARY SECTOR140 STRING(20) FILE150 RECPROC P$SCAN0,P$SCAN2160 RECFNC(STRING) F$POS(BYTE,STRING(*),STRING(*)),F$DEF(STRING(*))170 ENDDECLARE180 CALL P$SCAN0190 FILE=F$DEF(F$POS(&0,"$_File: ",""))200 CALL P$SCAN2210 OPEN# &1,&12,&0,FILE220 TRAP 900225 REPEAT230 NOTE# &1,SECTOR,OFFSET240 GET# &1,C250 IF C=&155260 POINT# &1,SECTOR,OFFSET270 PUT# &1,&13280 ENDIF290 UNTIL &0900 CLOSE# &1999 ENDCLARE120 BYTE OFFSET,C130 BINARY SECTOR140 STRING(20) FILE150 RECPROC P$SCAN0,P$SCAN2160 RECFNC(STRING) F$POS(BYTE,STRING(*),STRING(*)),F$DEF(STRING(*))170 ENDDECLARE180 CALL P$SCAN0190 FILE=F$DEF(F10 DEF PACKAGE20 DECLARE25 STRING(5) CIOV,WORD30 BYTE UNIT50 RECFNC(STRING) F$WORD80 PROC ATTACH85 PRIVATE:RECFNC(BYTE) OS$FORMAT(BYTE)95 ENDDECLARE100 WORD=F$WORD:IF WORD="":PRINT "DISK> 1";:INPUT WORD:ENDIF105 UNIT=WORD:IF UNIT<1 OR UNIT>8:ERROR &64:ENDIF110 PRINT:PRINT "MOUNT DISK AND PRESS ";:INPUT WORD120 ERROR OS$FORMAT(UNIT)400 DEF OS$FORMAT(UNIT)405 DECLARE:STRING(3) DEV:ENDDECLARE410 DEV="D";STR$(UNIT);":"415 POKE 834+7*16,254:DPOKE 836+7*16,ADR(DEV)+1417 POKE ADR(CIOV)+2,7*16:EXEC ADR(CIOV)+1420 RET PEEK(835):ENDDEF9000 DEF ATTACH:CIOV="LV":RET:ENDDEF9999 END ENDDECLARE100 WORD=F$WORD:IF WORD="":PRINT "DISK> 1";:INPUT W10 DEF PACKAGE20 DECLARE25 BYTE AUDCTL30 FNC(BYTE) PADDLE(BYTE),STICK(BYTE),PTRIG(BYTE),STRIG(BYTE),VPEN,HPEN35 FNC(BINARY) VSTICK(BYTE),HSTICK(BYTE)40 FNC(BYTE) OPTION,SELECT,START,HELP45 FNC(FLOAT) RND,RAND(FLOAT,FLOAT)46 FNC(BINARY) RND2,RAND2(BINARY,BINARY)47 FNC(BYTE) RND1,RAND1(BYTE,BYTE)50 PROC SETPOLY17(BYTE),SETFIN15(BYTE),SETFIN(BYTE,BYTE),SETFILTER(BYTE,BYTE)55 PROC SOUND(BYTE,BYTE,BYTE,BYTE),SOUND8(BYTE,BYTE,BYTE,BYTE),SOUND16(BYTE,BINARY,BYTE,BYTE),SOUNDOFF75 RECPROC ATTACH80 PRIVATE:FNC(FLOAT) MODFLT(FLOAT,FLOAT)90 ENDDECLARE1000 DEF PADDLE(P):IF P>&7:ERROR &63:ELSE:RET PEEK(624+P):ENDIF:ENDDEF1010 DEF STICK(P):IF P>&7:ERROR &63:ELSE:RET PEEK(632+P):ENDIF:ENDDEF1020 DEF VSTICK(P):DECLARE:BYTE F:ENDDECLARE1025 F=NOT(STICK(P)):IF (F AND &1)=&1:RET 1:ELSEIF (F AND &2)=&2:RET -1:ELSE:RET 0:ENDIF:ENDDEF1030 DEF HSTICK(P):DECLARE:BYTE F:ENDDECLARE1035 F=NOT(STICK(P)):IF (F AND &4)=&4:RET -1:ELSEIF (F AND &8)=&8:RET 1:ELSE:RET 0:ENDIF:ENDDEF1040 DEF PTRIG(P):IF P>&7:ERROR &63:ELSE:RET PEEK(636+P)=&0:ENDIF:ENDDEF1045 DEF STRIG(P):IF P>&3:ERROR &63:ELSE:RET PEEK(644+P)=&0:ENDIF:ENDDEF1050 DEF HPEN:RET PEEK(564):ENDDEF1055 DEF VPEN:RET PEEK(565):ENDDEF2000 DEF OPTION:RET (PEEK(53279) AND &4)=&0:ENDDEF2010 DEF SELECT:RET (PEEK(53279) AND &2)=&0:ENDDEF2020 DEF START:RET (PEEK(53279) AND &1)=&0:ENDDEF2030 DEF HELP:DECLARE:BYTE V:ENDDECLARE:V=PEEK(732):POKE 732,&0:RET V:ENDDEF3000 DEF SETPOLY17(V)3005 IF V=&0:AUDCTL=AUDCTL AND &1273010 ELSEIF V=&1:AUDCTL=AUDCTL OR &1283015 ELSE:ERROR &63:ENDIF3020 POKE 53768,AUDCTL:RET:ENDDEF3025 DEF SETFIN15(V)3030 IF V=&0:AUDCTL=AUDCTL AND &2543035 ELSEIF V=&1:AUDCTL=AUDCTL OR &13040 ELSE:ERROR &63:ENDIF3045 POKE 53768,AUDCTL:RET:ENDDEF3050 DEF SETFIN(C,V)3055 IF C=&13060 IF V=&0:AUDCTL=AUDCTL AND &1913065 ELSEIF V=&1:AUDCTL=AUDCTL OR &643070 ELSE:ERROR &63:ENDIF3075 ELSEIF C=&33080 IF V=&0:AUDCTL=AUDCTL AND &2233085 ELSEIF V=&1:AUDCTL=AUDCTL OR &323090 ELSE:ERROR &63:ENDIF3095 ELSE:ERROR &63:ENDIF:POKE 53768,AUDCTL:RET:ENDDEF3100 DEF SETFILTER(C,V)3105 IF C=&13110 IF V=&0:AUDCTL=AUDCTL AND &2513115 ELSEIF V=&1:AUDCTL=AUDCTL OR &43120 ELSE:ERROR &63:ENDIF3125 ELSEIF C=&23130 IF V=&0:AUDCTL=AUDCTL AND &2533135 ELSEIF V=&1:AUDCTL=AUDCTL OR &23140 ELSE:ERROR &63:ENDIF3145 ELSE:ERROR &63:ENDIF:POKE 53768,AUDCTL:RET:ENDDEF3150 DEF SOUND(VOICE,PITCH,DIST,VOL)3155 AUDCTL=&0:POKE 53768,&03160 CALL SOUND8(VOICE,PITCH,DIST,VOL)3165 RET:ENDDEF3200 DEF SOUND8(VOICE,PITCH,DIST,VOL)3205 IF (VOICE=&1 OR VOICE=&2) AND (AUDCTL AND &16):AUDCTL=AUDCTL AND &239:POKE 53761,&0:POKE 53763,&03210 ELSEIF (VOICE=&3 OR VOICE=&4) AND (AUDCTL AND &8):AUDCTL=AUDCTL AND &247:POKE 53765,&0:POKE 53767,&03215 ENDIF:POKE 53768,AUDCTL3220 IF DIST>&15 OR VOL>&15:ERROR &63:ENDIF3225 POKE 53760+2*(VOICE-&1),PITCH:POKE 53761+2*(VOICE-&1),DIST*16+VOL:RET:ENDDEF3250 DEF SOUND16(VOICE,PITCH,DIST,VOL)3255 IF VOICE=&1:AUDCTL=AUDCTL OR &163260 ELSEIF VOICE=&3:AUDCTL=AUDCTL OR &83265 ELSE:ERROR &63:ENDIF3270 IF DIST>&15 OR VOL>&15:ERROR &63:ENDIF3275 POKE 53768,AUDCTL:POKE 53760+2*(VOICE-&1),PITCH AND 255:POKE 53760+2*VOICE,PITCH/2563280 POKE 53763+2*(VOICE-&1),DIST*16+VOL:POKE 53761+2*(VOICE-&1),&03285 RET:ENDDEF3300 DEF SOUNDOFF:AUDCTL=&0:POKE 53768,&0:SPOKE 53760,0.0:DPOKE 53766,0:RET:ENDDEF8000 DEF RND1:RET PEEK(53770):ENDDEF8010 DEF RND2:RET 256*PEEK(53770)+PEEK(53770):ENDDEF8020 DEF RND:RET FLT(RND2)/65536.0:ENDDEF8030 DEF RAND1(L,H):RET RAND2(L,H):ENDDEF8040 DEF RAND2(L,H):RET L+MODFLT(RND2,1+(H-L)):ENDDEF8050 DEF RAND(L,H):RET L+(H-L)*RND:ENDDEF9000 DEF MODFLT(A,B)9010 RET A-B*INT(A/B):ENDDEF9500 DEF ATTACH:AUDCTL=&0:RET:ENDDEF9999 END25 BYTE AUDCTL30 FNC(BYTE) PADDLE(BYTE),STICK(BYTE),PTRIG(BYTE),STRIG(BYTE),VPEN,HPEN35 FNC(BINARY) VSTICK(BYTE),HSTICK(BYTE)40 FNC(BYTE) OPTION,SELECT,START,HELP45 FNC(FLOAT) RND,RAND(FLOAT,FLOAT)46 FNC(BINAR1000 DEF PACKAGE1010 DECLARE1015 STRING(3) S1020 BYTE BLOCKS,TOPHOLD1030 BINARY DUMMY,FREELIST1040 RECPROC CLRHEAP,ALLC(BINARY,BINARY),FREE(BINARY)1050 RECPROC ATTACH,DETACH1060 RECFNC(STRING) F$WORD1070 ENDDECLARE1090 REM S=general string variable1100 REM BLOCKS=# of 4K blocks allocated for the heap1110 REM TOPHOLD=original top of memory1120 REM DUMMY,FREELIST=dummy free block for hea of freelist1150 REM command format: $ HEAP [n] 1160 REM where n is the number of 4K blocks to allocate1200 REM get command line argument1210 S=F$WORD:IF S="":PRINT "$_blocks: ";:INPUT S:ENDIF1220 REM perform bounds checks on it1230 IF BYT(S)>&8 OR DPEEK(14)+100>256*(TOPHOLD-BYT(S)):ERROR &63:ENDIF1240 REM store1250 BLOCKS=BYT(S)1260 IF BLOCKS=&0:REM no blocks allocated1270 POKE 106,TOPHOLD:GRAPHICS &0:FREELIST=01280 ELSE1290 POKE 106,TOPHOLD-16*BLOCKS:GRAPHICS 0:CALL CLRHEAP1300 ENDIF1310 STOP2000 DEF ATTACH2010 TOPHOLD=PEEK(106):BLOCKS=&0:DUMMY=0:FREELIST=0:RET2020 ENDDEF2500 DEF DETACH2510 POKE 106,TOPHOLD:GRAPHICS &0:RET2520 ENDDEF3000 DEF CLRHEAP3010 FREELIST=256*PEEK(106):DPOKE FREELIST+2,03020 DPOKE FREELIST,BLOCKS*4096:RET3030 ENDDEF4000 DEF ALLC(PTR,SZ)4010 DECLARE4020 BINARY SIZE,POLD,P4030 ENDDECLARE4100 IF SZ<2:SIZE=4:ELSE:SIZE=SZ+2:ENDIF4110 P=FREELIST:POLD=ADR(DUMMY)4120 WHILE SIZE>DPEEK(P) AND P<>04130 POLD=P:P=DPEEK(P+2)4140 ENDWHILE4150 IF P=0:ERROR &62:ENDIF4160 IF DPEEK(P)-4>=SIZE4170 DPOKE P,DPEEK(P)-SIZE:PTR=P+DPEEK(P):DPOKE PTR,SIZE4180 ELSE4190 SIZE=DPEEK(P):DPOKE POLD+2,DPEEK(P+2):PTR=P4200 ENDIF4210 PTR=PTR+24220 RET4230 ENDDEF4500 DEF FREE(PTR)4510 DECLARE4520 BINARY POLD,P4530 ENDDECLARE4540 PTR=PTR-2:POLD=ADR(DUMMY):P=FREELIST4550 WHILE P+DPEEK(P)04560 POLD=P:P=DPEEK(P+2)4570 ENDWHILE4580 IF P+DPEEK(P)=PTR AND P<>04585 DPOKE P,DPEEK(P)+DPEEK(PTR):PTR=P:P=DPEEK(P+2)4590 ELSE4600 DPOKE POLD+2,PTR:DPOKE PTR+2,P4610 ENDIF4620 IF PTR+DPEEK(PTR)=P4630 DPOKE PTR,DPEEK(PTR)+DPEEK(P):DPOKE PTR+2,DPEEK(P+2)4640 ENDIF4650 PTR=04660 RET4670 ENDDEF9999 ENDRECFNC(STRING) F$WORD1070 ENDDECLARE10:PRINT:PRINT DPEEK(88)-512-LOMEMV;" free"645 ELSEIF COMMAND="BATCH":BATFILE=F$DEF(F$WORD);".BAT"650 GOSUB 997655 ELSEIF COMMAND="TRAP":BATTRAP=&255660 ELSEIF COMMAND="NOTRAP":BATTRAP=&0665 ELSEIF COMMAND="PAUSE":PRINT "";:GOSUB 995:INPUT ARG1670 ELSEIF COMMAND="PRINT":GOSUB 995675 ELSEIF COMMAND="CLS":GRAPHICS &0:DPOKE 675,8192:POKE 677,&33680 ELSEIF COMMAND="REM":P=&200900 ELSE:CALL FIND(COMMAND,&0):DPOKE 743,LOMEMV+PEEK(DPEEK(AM+2)+2)905 DPOKE 14,DPEEK(743)+1:DPOKE 176,DPEEK(AM+2)+3935 ENDIF990 RET995 L1=INSTR(LINE,";",P+&1):IF L1=&0:L1=LEN(LINE)+&1:ENDIF996 IF P+&13.14159265:X=X-6.28318521:ELSEIF X<-3.14159265:X=X+6.28318521:ENDIF2018 IF X>1.57079633:X=3.14159265-X:ELSEIF X<-1.57079633:X=-3.14159265-X:ENDIF2020 FN=((((1.60590438E-10*X*X-2.50521084E-8)*X*X+2.75573192E-6)*X*X-1.98412698E-4)*X*X+8.33333333E-3)*X*X2100 RET ((FN-0.166666667)*X*X+1.)*X2140 ENDDEF2500 DEF COS(NUM)2510 RET SIN(FROMRAD(1.57079633)-NUM)2520 ENDDEF3000 DEF TAN(NUM)3010 RET SIN(NUM)/COS(NUM)3020 ENDDEF4000 DEF RAD:DEGRAD=&1:RET:ENDDEF4500 DEF DEG:DEGRAD=&0:RET:ENDDEF5000 DEF SQR(NUM)5005 IF NUM=0.0:RET 0.0:ENDIF5010 RET NUM^.5:ENDDEF6000 DEF TORAD(NUM)6010 IF DEGRAD=&0:RET NUM*.0174532925:ELSE:RET NUM:ENDIF:ENDDEF6100 DEF FROMRAD(NUM)6105 IF DEGRAD=&0:RET NUM*57.2957795:ELSE:RET NUM:ENDIF:ENDDEF7000 DEF ATN(NUM)7005 DECLARE:FLOAT X1,X2,C,N:BYTE TEMP,S:ENDDECLARE7007 S=NUM<0.0:N=ABS(NUM)7010 X1=-1.0/(N+.636619772)+1.57079633:TEMP=DEGRAD:CALL RAD7015 REPEAT:X2=X17020 C=COS(X2)7025 X1=X2-(SIN(X2)-N*C)*C7030 UNTIL ABS(X1-X2)<.000000017035 IF S:X1=-X1:ENDIF7037 DEGRAD=TEMP7040 RET FROMRAD(X1):ENDDEF7050 DEF ATN2(NUM1,NUM2)7055 IF NUM1=0.0 AND NUM2=0.0:ERROR 57060 ELSEIF NUM2=0.0:RET FROMRAD(SGN(NUM1)*1.57079633)7065 ELSEIF NUM2>0:RET ATN(NUM1/NUM2)7070 ELSEIF NUM1>=0.0:RET FROMRAD(3.14159265)+ATN(NUM1/NUM2)7075 ELSE:RET FROMRAD(-3.14159265)+ATN(NUM1/NUM2)7080 ENDIF:ENDDEF7100 DEF ASN(X):RET ATN2(X,SQR(-X*X+1)):ENDDEF7110 DEF ACS(X):RET -ASN(X)+FROMRAD(1.57079633):ENDDEF7200 DEF SINH(X):RET (EXP(X)-EXP(-X))*0.5:ENDDEF7210 DEF COSH(X):RET (EXP(X)+EXP(-X))*0.5:ENDDEF7220 DEF TANH(X):RET -EXP(-X)/(EXP(X)+EXP(-X))*2+1:ENDDEF7230 DEF ASNH(X):RET LOG(X+SQR(X*X+1)):ENDDEF7240 DEF ACSH(X):RET LOG(X+SQR(X*X-1)):ENDDEF7250 DEF ATNH(X):RET LOG((X+1)/(X-1))*.5:ENDDEF8000 DEF RND1:RET PEEK(53770):ENDDEF8010 DEF RND2:RET 256*PEEK(53770)+PEEK(53770):ENDDEF8020 DEF RND:RET FLT(RND2)/65536.0:ENDDEF8030 DEF RAND1(L,H):RET RAND2(L,H):ENDDEF8040 DEF RAND2(L,H):RET L+MODFLT(RND2,1+(H-L)):ENDDEF8050 DEF RAND(L,H):RET L+(H-L)*RND:ENDDEF8100 DEF ROUND(NUM,W)8105 DECLARE:FLOAT D:ENDDECLARE8110 IF SGN(W)=&255:D=-W:ELSE:D=W:ENDIF8112 D=INT(CEXP(D)+.5):IF SGN(W)=-&1:D=1.0/D:ENDIF8115 RET INT(NUM*D+0.5)/D:ENDDEF9999 ENDACS(FLOAT),SINH(FLOAT),COSH(FLOAT),TANH(FLOAT),ASNH(FLOAT),ACSH(FLOAT),ATNH(FLOAT)40 PRO10 DEF PACKAGE20 DECLARE30 FNC(FLOAT) MODFLT(FLOAT,FLOAT),SIN(FLOAT),COS(FLOAT),TAN(FLOAT),SQR(FLOAT),ATN(FLOAT),ATN2(FLOAT,FLOAT)35 FNC(FLOAT) ASN(FLOAT),ACS(FLOAT),SINH(FLOAT),COSH(FLOAT),TANH(FLOAT),ASNH(FLOAT),ACSH(FLOAT),ATNH(FLOAT)40 PROC RAD,DEG45 FNC(FLOAT) RND,RAND(FLOAT,FLOAT)46 FNC(BINARY) RND2,RAND2(BINARY,BINARY)47 FNC(BYTE) RND1,RAND1(BYTE,BYTE)48 FNC(FLOAT) ROUND(FLOAT,BYTE)50 PRIVATE:FNC(FLOAT) TORAD(FLOAT),FROMRAD(FLOAT)60 BYTE DEGRAD90 ENDDECLARE100 DEGRAD=&11000 DEF MODFLT(NUM1,NUM2)1010 RET NUM1-NUM2*INT(NUM1/NUM2)1020 ENDDEF2000 DEF SIN(NUM)2010 DECLARE:FLOAT FN,X,Q,X2:ENDDECLARE2015 X=MODFLT(TORAD(NUM),6.28318521)*.636619772:Q=INT(X)2016 IF ABS(Q)=1.0:X=Q-X+SGN(X)2017 ELSEIF (Q)=2.0:X=Q-X:ELSEIF ABS(Q)=0.0:X=X-Q2018 ELSE:X=X-Q-SGN(X):ENDIF2019 X2=X*X2020 FN=(((((5.45898783E-08*X2-3.59559815E-06)*X2+1.6043893E-04)*X2-4.68175333E-03)*X2+0.0796926261)*X2-0.645964097)2030 RET (FN*X2+1.57079633)*X2140 ENDDEF2500 DEF COS(NUM)2510 RET SIN(FROMRAD(1.57079633)-NUM)2520 ENDDEF3000 DEF TAN(NUM)3005 DECLARE:FLOAT X,Z,P,Q,FN:ENDDECLARE3010 X=MODFLT(TORAD(NUM),3.14159365)*1.273235443020 IF X>2.0:X=X-4.0:ELSEIF X<-2.0:X=X+4.0:ENDIF3100 Z=X*X3110 P=(2566.71755-Z*26.5366372)*Z-34287.46633120 Q=((Z-336.611376)*Z+12244.4839)*Z-43656.15793130 RET X*P/Q3140 ENDDEF4000 DEF RAD:DEGRAD=&1:RET:ENDDEF4500 DEF DEG:DEGRAD=&0:RET:ENDDEF5000 DEF SQR(NUM)5005 IF NUM=0.0:RET 0.0:ENDIF5010 RET NUM^.5:ENDDEF6000 DEF TORAD(NUM)6010 IF DEGRAD=&0:RET NUM*.0174532925:ELSE:RET NUM:ENDIF:ENDDEF6100 DEF FROMRAD(NUM)6105 IF DEGRAD=&0:RET NUM*57.2957795:ELSE:RET NUM:ENDIF:ENDDEF7000 DEF ATN(NUM)7005 DECLARE:FLOAT X,Z,FN:BYTE F:ENDDECLARE7010 F=&0:X=NUM7015 IF X<0.0:X=ABS(X):F=F OR &1:ENDIF7020 IF X>1.0:X=1.0/X:F=F OR &2:ENDIF7030 Z=X*X7040 FN=(X*(74.8044861+Z*(118.848524+Z*(55.4919673+Z*(7.55545064+Z*0.138986583)))))7050 FN=FN/(74.8044861+Z*(143.783353+Z*(88.4585536+Z*(18.9714052+Z))))7060 IF F=&1:RET FROMRAD(-FN)7070 ELSEIF F=&2:RET FROMRAD(1.57079633-FN)7080 ELSEIF F=&3:RET FROMRAD(FN-1.57079633)7085 ELSE:RET FROMRAD(FN)7090 ENDIF7095 ENDDEF7100 DEF ASN(X):RET ATN2(X,SQR(-X*X+1)):ENDDEF7110 DEF ACS(X):RET -ASN(X)+FROMRAD(1.57079633):ENDDEF7200 DEF SINH(X):RET (EXP(X)-EXP(-X))*0.5:ENDDEF7210 DEF COSH(X):RET (EXP(X)+EXP(-X))*0.5:ENDDEF7220 DEF TANH(X):RET -EXP(-X)/(EXP(X)+EXP(-X))*2+1:ENDDEF7230 DEF ASNH(X):RET LOG(X+SQR(X*X+1)):ENDDEF7240 DEF ACSH(X):RET LOG(X+SQR(X*X-1)):ENDDEF7250 DEF ATNH(X):RET LOG((X+1)/(X-1))*.5:ENDDEF7500 DEF ATN2(NUM1,NUM2)7510 IF NUM1=0.0 AND NUM2=0.0:ERROR 57520 ELSEIF NUM2=0.0:RET FROMRAD(SGN(NUM1)*1.57059633)7530 ELSEIF NUM2>0.0:RET ATN(NUM1/NUM2)7540 ELSEIF NUM1>=0.0:RET FROMRAD(3.14159265)+ATN(NUM1/NUM2)7550 ELSE:RET FROMRAD(-3.14159265)+ATN(NUM1/NUM2)7560 ENDIF:ENDDEF8000 DEF RND1:RET PEEK(53770):ENDDEF8010 DEF RND2:RET 256*PEEK(53770)+PEEK(53770):ENDDEF8020 DEF RND:RET FLT(RND2)/65536.0:ENDDEF8030 DEF RAND1(L,H):RET RAND2(L,H):ENDDEF8040 DEF RAND2(L,H):RET L+MODFLT(RND2,1+(H-L)):ENDDEF8050 DEF RAND(L,H):RET L+(H-L)*RND:ENDDEF8100 DEF ROUND(NUM,W)8105 DECLARE:FLOAT D:ENDDECLARE8110 IF SGN(W)=&255:D=-W:ELSE:D=W:ENDIF8112 D=INT(CEXP(D)+.5):IF SGN(W)=-&1:D=1.0/D:ENDIF8115 RET INT(NUM*D+0.5)/D:ENDDEF9999 ENDOS(FLOAT),TAN(FLOAT),SQR(FLOAT),ATN(FLOAT),ATN2(FLOAT,FLOAT)35 FNC(FLOAT) ASN(FLOAT),ACS(FLOAT),SINH(FLOAT),COSH(FLOAT),TANH(FLOAT),ASNH(FLOAT),ACSH(FLOAT),ATNH(FLOAT)40 PROJ10 DEF PACKAGE15 DECLARE20 STRING(24) DIRFILE:STRING(20) CHOICE,FILE25 BYTE N,KEEP(2),X,Y,L,PROMPT30 BINARY TOP,PTR35 RECFNC(STRING) F$SCAN1(STRING(*),STRING(*)),F$POS(BYTE,STRING(*),STRING(*))37 RECPROC P$SCAN0,P$SCAN2,ATTACH,DETACH38 PROC P$CMD(STRING(*),BYTE)40 STRING(3) DEVTMP50 RECPROC P$DIR0(STRING(24))55 RECFNC(STRING) F$DIR1,F$MATCH(STRING(*),STRING(24)),F$WORD,F$DEF(STRING(32))70 PRIVATE:RECFNC(STRING) X$PAD(STRING(*)),X$UNPAD(STRING(*))90 ENDDECLARE95 IF ERR<>&1:PRINT "ERROR ";ERR:ERROR &1:ENDIF:DPOKE 14,DPEEK(88)-51296 TRAP 0:INPUT CHOICE:GRAPHICS &0:FOR L=&1 TO &7:CLOSE# L:NEXT L:DPOKE 743,DPEEK(DPEEK(206)):POKE 8,&097 PRINT ""100 PRINT "JLS MENU V2.0 (c) 1985 Jeff Jackson":PRINT105 PRINT "D. Default Disk M. Module Directory"106 PRINT "E. Erase Files P. Protect Files"107 PRINT "F. File Directory R. Rename Files"108 PRINT "K. Kill Modules U. Unprotect Files"109 PRINT "L. Load Module X. eXternal Dir."110 PRINT:X=PEEK(82):Y=&8:PTR=DPEEK(TOP):N=&1115 REPEAT120 POSITION X,Y:PRINT N;". ";SPEEK(PTR+8)125 Y=Y+&1:IF Y>&18:Y=&8:X=&18+PEEK(82):ENDIF130 N=N+&1:PTR=DPEEK(PTR)140 UNTIL DPEEK(PTR)=0150 POSITION PEEK(82),&20:PRINT "CHOICE> ";:INPUT CHOICE170 IF CHOICE="D":CHOICE="DEF":PROMPT=&0171 PRINT "CHOICE> DEF":PRINT "DEF> ";:INPUT FILE175 ELSEIF CHOICE="F":CHOICE="DIR":PROMPT=&0176 PRINT "CHOICE> FILES":PRINT "PATTERN> ";:INPUT FILE180 ELSEIF CHOICE="E":CHOICE="ERASE":PROMPT=&2185 ELSEIF CHOICE="K":CHOICE="KILL":PROMPT=&3190 ELSEIF CHOICE="L":CHOICE="LOAD":PROMPT=2195 ELSEIF CHOICE="M":CHOICE="MDIR":PROMPT=&0196 PRINT "CHOICE> Module Directory":FILE=""200 ELSEIF CHOICE="P":CHOICE="PROTECT":PROMPT=&2205 ELSEIF CHOICE="R":CHOICE="RENAME":PROMPT=&4210 ELSEIF CHOICE="U":CHOICE="UNPROTECT":PROMPT=&2220 ELSEIF CHOICE="X":CHOICE="XDIR":PROMPT=&0221 PRINT "CHOICE> eXternal Subroutine Directory":FILE=""300 ELSE:PTR=DPEEK(TOP)305 IF N<=CHOICE:PRINT "INVALID":STOP310 ELSEIF CHOICE<>"1"315 FOR L=&2 TO CHOICE320 PTR=DPEEK(PTR)325 NEXT L330 ENDIF335 CALL P$CMD(SPEEK(PTR+8),&1)340 ENDIF345 IF PROMPT<>&0:PRINT "CHOICE> ";CHOICE:ENDIF350 IF PROMPT=&2355 PRINT "FILE(S)> ";360 ELSEIF PROMPT=&3370 PRINT "MODULE> ";372 ELSEIF PROMPT=&4374 PRINT "OLDNAME,NEWNAME> ";380 ENDIF385 IF PROMPT<>&0:LINPUT FILE:IF FILE="" THEN 350:ENDIF390 IF FILE<>"":FILE=" ";FILE:ENDIF395 CALL P$CMD(CHOICE;FILE,&1)400 GOTO 961000 DEF P$DIR0(FILNM)1003 DECLARE:STRING(24) FILE:ENDDECLARE1004 FILE=F$DEF(FILNM)1005 IF MID(FILE,&2,&1)=":":DEVTMP=MID(FILE,&1,&1);"1:"1010 ELSE:DEVTMP=MID(FILE,&1,&3):ENDIF1015 DIRFILE=FILE:N=&1:RET:ENDDEF2000 DEF F$DIR12005 DECLARE:STRING(24) FILE:BYTE L:ENDDECLARE2007 IF DEVTMP="":RET "":ELSEIF MID(DEVTMP,&1,&1)<>"D":FILE=DEVTMP;" ":DEVTMP="":RET FILE:ENDIF2010 OPEN# 5,6,0,DIRFILE:FOR L=&1 TO N:LINPUT# 5,FILE:NEXT L:CLOSE# 5:N=N+&12015 IF LEN(FILE)=&16:RET "":ENDIF2020 RET X$UNPAD(DEVTMP;MID(FILE,&3,&11))2025 ENDDEF3000 DEF F$MATCH(PATTERN,IN)3005 DECLARE:STRING(24) OUT,PAT:BYTE L:ENDDECLARE3010 OUT=X$PAD(F$DEF(IN)):PAT=X$PAD(F$DEF(PATTERN))3015 FOR L=&4 TO &14:IF MID(OUT,L,&1)="?"3020 POKE ADR(OUT)+L,PEEK(ADR(PAT)+L):ENDIF:NEXT L3025 RET X$UNPAD(OUT):ENDDEF4000 DEF X$PAD(FILE)4005 DECLARE:STRING(14) OUT:BYTE PF,PO,S,L:ENDDECLARE4015 IF MID(FILE,&2,&1)=":":OUT=MID(FILE,&1,&1);"1:":PF=&34020 ELSE:OUT=MID(FILE,&1,&3):PF=&4:ENDIF4024 OUT=OUT;" ":PO=&44030 L=LEN(FILE)4035 IF PF<=L:IF MID(FILE,PF,&1)<>"."4040 IF MID(FILE,PF,&1)<>"*":POKE ADR(OUT)+PO,PEEK(ADR(FILE)+PF)4045 PO=PO+&1:PF=PF+&1:GOTO 40354050 ELSE:FOR S=PO TO &11:POKE ADR(OUT)+S,ASC("?")4055 NEXT S:PF=PF+&2:ENDIF4060 ELSE:PF=PF+&1:ENDIF:ENDIF4063 PO=&124065 IF PF<=L:IF MID(FILE,PF,&1)<>"*"4070 POKE ADR(OUT)+PO,PEEK(ADR(FILE)+PF):PO=PO+&1:PF=PF+&1:GOTO 40654075 ELSE:FOR S=PO TO &14:POKE ADR(OUT)+S,ASC("?"):NEXT S:ENDIF:ENDIF4080 RET OUT:ENDDEF5000 DEF X$UNPAD(FILE)5005 DECLARE:STRING(16) OUT:BYTE L:ENDDECLARE5010 OUT=MID(FILE,&1,&3)5015 FOR L=&4 TO &11:IF MID(FILE,L,&1)<>" ":OUT=OUT;MID(FILE,L,&1):ENDIF:NEXT L5020 OUT=OUT;"."5025 FOR L=&12 TO &14:IF MID(FILE,L,&1)<>" ":OUT=OUT;MID(FILE,L,&1):ENDIF:NEXT L5030 RET OUT:ENDDEF6000 DEF P$SCAN06010 RET6020 ENDDEF7000 DEF ATTACH7005 MOVE 49152+3,ADR(KEEP(0)),37010 POKE 49152+3,467015 TOP=DPEEK(206)+27020 DPOKE 49152+4,DPEEK(DPEEK(TOP)+2)+37030 RET7040 ENDDEF7100 DEF DETACH7110 MOVE ADR(KEEP(0)),49152+3,37120 RET7130 ENDDEF8000 DEF F$SCAN1(KEY,DEFAULT)8010 DECLARE:STRING(24) WORD:ENDDECLARE8015 IF LEN(KEY)>&18020 PRINT "/";KEY;"=";DEFAULT8025 PRINT "/";KEY;"=";8030 LINPUT WORD8032 ELSE:RET DEFAULT:ENDIF8035 RET WORD8040 ENDDEF9000 DEF F$POS(P,PROMPT,DEFAULT)9010 DECLARE:STRING(24) W:ENDDECLARE9060 PRINT PROMPT;DEFAULT;CHR$(&155);"";PROMPT;:LINPUT W9065 RET W9070 ENDDEF10000 DEF P$SCAN210010 RET10020 ENDDEF19999 END(BYTE,STRING(*),STRING(*))37 RECPROC P$SCAN0,P$SCAN2,ATTACH,DETACH38 ,&255):IF AM<>0:RET:ENDIF:ENDIF1053 FILE=F$DEF(F);".OBJ":TRAP 1054:GOTO 10551054 TRAP 100:CLOSE# &7:FILE=F$OBJ(F);".OBJ"1055 OPEN# &7,&4,&0,FILE:TRAP 1001060 DGET# &7,ADDR:IF ADDR<>65535 THEN 19051065 DGET# &7,ADDR:IF ADDR<>0 THEN 19051070 DGET# &7,SIZE:SIZE=SIZE+1:FINISH=START+SIZE-11073 BGET# &7,START,2:IF START+DPEEK(START)>DPEEK(14)-512:ERROR &147:ENDIF1075 BGET# &7,START+2,SIZE-2:SIZE=DPEEK(START)+1:LOMEMV=START+SIZE1080 DPOKE LOMEMV,TOP:DPOKE LOMEMV+2,START:TOP=LOMEMV1085 SPOKE LOMEMV+8,MODULE:SIZE=SIZE+9+LEN(MODULE):LOMEMV=START+SIZE1100 DPOKE 214,START+3:DPOKE 216,START:EXEC 647681190 ATTACH=0:DETACH=01200 TRAP 14001201 UNRESOLVED=&01205 LINPUT# &7,WORD:WHILE WORD<>""1210 DGET# &7,ADDR:ADDR=ADDR+START1215 AM=DPEEK(TOP):AX=0:REPEAT:GOSUB 450:IF X=WORD THEN 1220:UNTIL X="" AND M=""1216 UNRESOLVED=&2551217 PRINT "Unresolved: ";WORD:GOSUB 470:GOTO 12251220 MOVE DPEEK(AX),ADDR,101225 LINPUT# &7,WORD:ENDWHILE1230 LINPUT# &7,WORD:DGET# &7,OFFSET1233 IF WORD="ATTACH":ATTACH=OFFSET+START:GOTO 1230:ELSEIF WORD="DETACH":DETACH=OFFSET+START:GOTO 1230:ENDIF1235 DPOKE LOMEMV,OFFSET+START:SPOKE LOMEMV+2,WORD:SIZE=SIZE+3+LEN(WORD):LOMEMV=START+SIZE:GOTO 12301400 IF UNRESOLVED:DETACH=0:ATTACH=0:ENDIF1401 DPOKE TOP+4,SIZE+4:DPOKE TOP+6,DETACH:DPOKE LOMEMV,0:LOMEMV=LOMEMV+3:POKE LOMEMV-1,&01405 DPOKE 743,LOMEMV:TRAP 100:CLOSE# &7:IF ATTACH<>0:MOVE ATTACH,DESC(NOP),10:CALL NOP:ENDIF1410 IF UNRESOLVED:CALL KILL(MODULE):AM=0:ELSE:AM=TOP:ENDIF1420 RET1905 PRINT "What?":GOSUB 470:GOTO 1001990 ENDDEF2000 DEF KILL(MDL)2005 CALL FIND(MDL,&0)2010 REPEAT2015 IF DPEEK(TOP+6)<>0:MOVE DPEEK(TOP+6),DESC(NOP),10:CALL NOP:ENDIF2020 TOP=DPEEK(TOP)2025 UNTIL TOPL1):RET "":ENDIF3015 RET MID(FILE,P,L1-P+&1):ENDDEF4000 DEF F$DEF(FILE)4010 IF INSTR(FILE,":",&1)=&0:RET DEFAULT;FILE:ELSE:RET FILE:ENDIF:ENDDEF4500 DEF F$OBJ(FILE)4510 IF INSTR(FILE,":",&1)=&0:RET SEARCH;FILE:ELSE:RET FILE:ENDIF:ENDDEF5000 DEF F$WORD5005 DECLARE:STRING(32) WORD:STRING(1) SYM:ENDDECLARE5015 WORD="":L1=LEN(LINE):IF P>L1 THEN 59005020 SYM=MID(LINE,P,&1):IF SYM=" ":P=P+&1:GOTO 5020:ENDIF5025 WORD=WORD;SYM:P=P+&1:IF P>L1 THEN 59005030 SYM=MID(LINE,P,&1):IF SYM<>" " THEN 50255900 IF WORD=";":CONT=&255:RET "":ELSE:CONT=&0:RET WORD:ENDIF:ENDDEF6000 DEF NOP:RET:ENDDEF7000 DEF FIND(FILE,FLG)7005 X=F$NAME(FILE):AM=TOP:M=SPEEK(AM+8)7010 WHILE M<>"":IF M=X:RET:ENDIF:AM=DPEEK(AM):M=SPEEK(AM+8):ENDWHILE7015 IF FLG=&0:CALL LOAD(FILE):IF AM<>0:TRANSIENT=&255:RET:ENDIF:ENDIF7020 IF FLG=&0:PRINT "What?":GOSUB 470:GOTO 100:ELSE:AM=0:RET:ENDIF:ENDDEF8000 DEF F$ALLOC(SIZE)8010 DECLARE:BINARY ADDR:ENDDECLARE8020 DPOKE TOP+4,DPEEK(TOP+4)+SIZE:ADDR=LOMEMV:LOMEMV=LOMEMV+SIZE:DPOKE 743,LOMEMV8030 RET ADDR:ENDDEF9998 ENDDEF9999 ENDOAD(STRING(*)),KILL(STRING(*)),NOP37 PT,L1:ENDDECLARE15015 IF LINEPTR=1:RET:ENDIF15020 AT=LINETAB(L,1)15025 DIRTYFLG=&25515030 IF L=LINEPTR-1:LINEPTR=LINEPTR-1:ADDR=AT15040 ELSE:AF=LINETAB(L+1,1):S=PEEK(AT)+115050 MOVE AF,AT,ADDR-AF:ADDR=ADDR-S:LINEPTR=LINEPTR-115060 FOR L1=L TO 1LINEPTR:LINETAB(L1,1)=LINETAB(L1+1,1)-S:LINETAB(L1,0)=LINETAB(L1+1,0):NEXT L115070 ENDIF:RET:ENDDEF16000 DEF INS(LN,LINE)16010 DECLARE:BINARY L,L1,S:ENDDECLARE16020 L=SEARCH(LN)16030 IF L8190 THEN 160130 FLAGS(K)=&255140 K=K+PRIME150 GOTO 120160 LET COUNT=COUNT+1170 NEXT I180 LET TIME=256*PEEK(19)+PEEK(20)190 POKE 559,&34200 PRINT COUNT210 PRINT TIME230 END IF FLAGS(I) THEN 170100 PRIME=I+I+3110 K=I+PRIME11000 DEF MAIN1010 DECLARE1020 BYTE NUM_PLAYERS,SCORING,DOT_SIZE,DOT_MODE(3),DOT_DOWN(3),WIN_SCORE1030 BYTE SCORE(2),SCORE_FLG,DELTA_Y(2),STICK_Y,Y(2),C,PLAYER1040 BINARY DOT_ACROSS(3),SPEED,TIMER_LOOP,TIME_LIMIT,LIMIT_TIME1050 BINARY DELTA_X(2),STICK_X,X(2)1060 STRING(1) SCORING$,AGAIN$1070 FNC(STRING) FETCH_STR$(STRING(*),STRING(*),BYTE)1080 FNC(STRING) FETCH_YN$(STRING(*),STRING(1))1090 FNC(BINARY) FETCH_NUM(STRING(*),BINARY,BINARY,BINARY)1100 PROC DISPLAY_SCORE1110 FNC(BYTE) START1120 FNC(BINARY) VSTICK(BYTE),HSTICK(BYTE)1130 PROC SOUND(BYTE,BYTE,BYTE,BYTE)1140 ENDDECLARE1150 REM1160 REM NUM_PLAYERS=number of players1170 REM SCORING$="Y" or "N" response for scoring or not1180 REM SCORING=&255 or &0 repectively for status of SCORING$1190 REM DOT_SIZE=size of dots1200 REM DOT_MODE(3)=translates DOT_SIZE to graphics mode1210 REM DOT_ACROSS(3)=translates DOT_SIZE to number across1220 REM DOT_DOWN(3)=translates DOT_SIZE to number down1230 REM SPEED=speed setting1240 REM TIMER_LOOP=loop control variable for delay controlled by SPEED1250 REM WIN_SCORE=the winning score1260 REM TIME_LIMIT=game time limit in seconds1270 REM LIMIT_TIME=game time limit in jiffies1280 REM SCORE(2)=score of the players1290 REM note: subscript 0 not used in SCORE,DELTA_X,DELTA_Y,X, or Y1300 REM SCORE_FLG=flag that is set when a player scores to control a loop1310 REM DELTA_X(2)=current X vector of players1320 REM DELTA_Y(2)=current Y vector of players1330 REM STICK_X,STICK_Y=current vectors of joystick1340 REM X(2),Y(2)=current position of players1350 REM C=variable used to test color of next location1360 REM PLAYER=current player number : used to control a loop1370 REM1380 REM1390 REM1400 REM initialize variables for first run1410 NUM_PLAYERS=&21420 SCORING$="Y"1430 DOT_SIZE=&11440 DOT_MODE(0)=&15:DOT_ACROSS(0)=159:DOT_DOWN(0)=1601450 DOT_MODE(1)= &7:DOT_ACRO SS(1)=159:DOT_DOWN(1)= 801460 DOT_MODE(2)= &5:DOT_ACROSS(2)= 79:DOT_DOWN(2)= 401470 DOT_MODE(3)= &3:DOT_ACROSS(3)= 39:DOT_DOWN(3)= 201480 SPEED=101490 WIN_SCORE=&151500 TIME_LIMIT=1201510 REM1520 REM1530 REM1540 REM main playi ng loop: loop for each game1550 REPEAT1560 GRAPHICS &0:REM clear screen and set up for all text1565 PRINT " SURROUND":PRINT1570 NUM_PLAYERS=FETCH_NUM("How many players (1/2)? ",NUM_PLAYERS,1,2)1580 SCORING$=FETCH_Y N$("Scoring (Y/N)? ",SCORING$)1590 SCORING=(SCORING$="Y")1600 DOT_SIZE=FETCH_NUM("Dot size (0/1/2/3)? ",DOT_SIZE,0,3)1610 SPEED=FETCH_NUM("Speed (0-100)? ",SPEED,0,1000)1620 WIN_SCORE=FETCH_NUM("Winning Score (5-255)?",WIN_SCORE,5,25 5)1630 TIME_LIMIT=FETCH_NUM("Time limit (30-1000 sec)?",TIME_LIMIT,30,1000)1640 LIMIT_TIME=TIME_LIMIT*60:REM convert time limit to jiffies1650 SCORE(1)=&0:SCORE(2)=&01660 REM start game when return pressed (use AGAIN$ as dummy)1670  AGAIN$=FETCH_STR$("Press RETURN to begin *","",&0)1680 DPOKE 19,0:REM zero built-in clock1690 REM1700 REPEAT:REM for each screen of the game1710 DELTA_X(1)=1:DELTA_X(2)=-11720 DELTA_Y(1)=&0:DELTA_Y(2)=&01730 X(1)=DOT_ACROSS(DOT_SIZE)/3:X(2)=2*X(1)1740 Y(1)=DOT_DOWN(DOT_SIZE)/2:Y(2)=Y(1)1750 SCORE_FLG=&0:REM this gets executed at the beginning of each1760 REM screen after each score.1770 GRAPHICS DOT_MODE(DOT_SIZE):REM proper resolution with text window1771 REM set proper colors1772 SETCOLOR &4,&9,&6:SETCOLOR &5,&3,&6:SETCOLOR &6,&12,&81780 REM draw border around screen1790 COLOR &3:PLOT 0,&0:DRAWTO DOT_ACROSS(DOT_SIZE),&01800 DRAWTO DOT_ACROSS(DOT_SIZE),DOT_DOWN(DOT_SIZE)1810 DRAWTO 0,DOT_DOWN(DOT_SIZE):DRAWTO 0,&01820 CALL DISPLAY_SCORE1830 REM1840 REM while start is not pressed and time has not run out and1850 REM and no one has scored, keep moving them1860 WHILE NOT(START) AND (256*PEEK(19)+PEEK(20)0:IF STICK_Y=&0:DELTA_X(PLAYER)=STICK_X:DELTA_Y(PLAYER)=&0:ENDIF1940 ELSE:IF STICK_Y<>&0:DELTA_Y(PLAYER)=STICK_Y:DELTA_X(PLAYER)=0:ENDIF1950 ENDIF1960 REM compute new position of player1970 X(PLAYER)=X(PLAYER)+DELTA_X(PLAYER)1980 Y(PLAYER)=Y(PLAYER)-DELTA_Y(PLAYER)1990 REM2000 REM handle scoring and plotting of new position2010 IF SCORING2020 REM check current color of new position2030 POSITION X(PLAYER),Y(PLAYER):GET# &6,C2040 IF C<>&02050 REM the player has bumpt into something2060 SCORE(PLAYER)=SCORE(PLAYER)+&1:SCORE_FLG=&2552070 CALL DISPLAY_SCORE2080 ELSE2090 REM the player has bumpt into nothing2100  COLOR PLAYER:PLOT X(PLAYER),Y(PLAYER)2110 ENDIF2120 ELSE:REM no scoring is in effect2130 REM test for within bounds, plot if so2140 IF X(PLAYER)>0 AND X(PLAYER)&0 AND Y(PLAYER)SCORE(2):PRINT " PLAYER 2 WINS"2340 ELSEIF SCORE(2)>SCORE(1):PRINT " PLAYER 1 WINS"2350 ELSE:PRINT " TIE!"2360 ENDIF2370 REM2380 REM prompt to play again2390 AGAIN$=FETCH_YN$("Play again (Y/N)? ","Y")2400 UNTIL AGAIN$="N"2410 STOP:REM exit to CP2420 DEF FETCH_STR$(PROMPT$,DEFAULT$,LENGTH)2430 DECLARE2440 STRING(120) RESPONSE$2450 ENDDECLARE2460 REM2470 REM PROMPT$=the prompt for a response2480 REM DEFAULT$=the default response2490 REM LENGTH=the maximum length of the response2500 REM RESPONSE$=the user's actual response2510 REM2520 REPEAT:REM until the length is right2530 PRINT PROMPT$;DEFAULT$2540 PRINT "";PROMPT$;2550 INPUT RESPONSE$2560 UNTIL LEN(RESPONSE$)<=LENGTH2570 RET RESPONSE$2580 ENDDEF2590 DEF FETCH_YN$(PROMPT$,DEFAULT$)2600 DECLARE2610 STRING(1) RESPONSE$2620 ENDDECLARE2630 REM variables as in FETCH_STR$2640 REPEAT2650 RESPONSE$=FETCH_STR$(PROMPT$,DEFAULT$,&1)2660 UNTIL RESPONSE$="Y" OR RESPONSE$="N" OR RESPONSE$="y" OR RESPONSE$="n"2670 REM translate lower case to uppe r case2680 IF RESPONSE$="y":RET "Y"2690 ELSEIF RESPONSE$="n":RET "N"2700 ELSE:RET RESPONSE$2710 ENDIF2720 ENDDEF2730 DEF FETCH_NUM(PROMPT$,DEFAULT,LOW,HIGH)2740 DECLARE2750 BINARY VALUE2760 STRING(5) RESPONSE!$2770 ENDDECLARE2780 REM2790 REM PROMPT$=prompt for response2800 REM DEFAULT=default value2810 REM VALUE=contains binary form of response2820 REM RESPONSE$=contains string form of response2830 REM2840 REPEAT:REM u"ntil in the valid range2850 REPEAT:REM until numeric response2860 RESPONSE$=FETCH_STR$(PROMPT$,STR$(DEFAULT),&5)2870 UNTIL (ASC(RESPONSE$) AND &240)=&482880 VALUE=BIN(RESPONSE$)2890 UNTIL VALUE>=LOW AND VALUE<=HIGH290#0 RET VALUE2910 ENDDEF2920 DEF DISPLAY_SCORE2930 PRINT "} SURROUND"2940 PRINT " PLAYER ONE=";SCORE(2);" PLAYER TWO=";SCORE(1)2950 RET2960 ENDDEF2970 ENDEED,TIMER_LOOP,TIME_LIMIT,LIMIT_TIME1050 BIN FOR L1=LINEPTR TO L+1 STEP 0-1:LINETAB(L1,0)=LINETAB(L1-1,0)16090 LINETAB(L1,1)=LINETAB(L1-1,1)+S:NEXT L116100 SPOKE LINETAB(L,1),LINE:LINETAB(L,0)=LN:ADDR=ADDR+S16110 ENDIF:RET:ENDDEF18000 DEF ATTACH:NEWV=512:RET:ENDDEF19999 ENDING) F$DE01000 DEF PACKAGE1010 DECLARE1030 STRING(32) TOPIC1040 STRING(120) LINE1070 STRING(32) HELP1920 RECFNC(STRING) F$WORD,F$DEF(STRING(*)),F$OBJ(STRING(*))1990 ENDDECLARE2000 HELP=F$WORD2110 TRAP 21502120 OPEN# &1,&4,&0,F$D1000 DEF MAIN1010 DECLARE1020 STRING(32) WORD$1030 RECFNC(STRING) F$WORD1040 ENDDECLARE1050 WORD$=F$WORD1060 IF WORD$="ON":POKE 1913,&871070 ELSEIF WORD$="OFF":POKE 1913,&801080 ELSEIF WORD$=""1090 IF PEEK(1913)=&87110g FSETVBV\SYSVBV_(DLISTL02DLISTH1< DOSINI F MEMLOPINITADZ CRITICBd DOSVEC nORIGIN x ORIGIN !POWERX; LATCH  HOUR  MINUTE  SECOND  DOSII? DOSHOLD X;(RESET%>4VBI $>5VBIQ> SETVBVBOOT BOOTFIXMEMLOQ>4NEWMEMLO PMEMLO"Q>5NEWMEMLO, PMEMLO6:@X;JX;TX;^X;hX;rNEWDL p=p=B| TEXT  BACK X; TEXT A TIME: ASHOUR A :ASMIN)UTE A :ASSECOND A AX;MSECOND <HSECOND CSECOND  X;X;X;X;X;&VBIQLATCH0 GEXITVBI: QDLISTLD R>4NEWDLN HPUTDLX QDLISTHb R>5NEWDLl FCLOCKvPUTDLQDLISTL,O> PBACK QDLISTH*O> PBACK Q>4NEWDL PDLISTL Q>5NEWDL PDLISTHCLOCK"MSECOND HEXITVBI #HSECONDQ><  PMSECOND QCRITIC  LLATCH* FUPDATE4EXITVBI!SYSVBV>X;HUPDATE"CSECONDR HNEXT\Q> f PCSECONDp "MSECONDz NEXT< Q+SECOND,O> PSECONDR>` HPRINT$> &SECOND QMINUTE,O> PMINUTER>` HPRINT &MINUTE QHOUR$,.O>8 PHOURBR>$L HPRINTV &HOUR`PRINT"HSECONDj HUPDATEt QHOUR~ CONVERT 'SHOUR PSHOUR, QMINUTE CONVERT 'SMINUTEPSMINUTE QSECOND CONVERT 'SSECONDPSSECOND !SYSVBVX;X; X;X;X;( CONVERT52V?<V?FV?PV?Z HEXd?n7xM>HEX,O> :X;X;X;X;X;NEWDOSQDOSHOLD- PDOSVECQDOSHOLDPDOSVEC QBOOT PDOSINI QBOOTPDOSINI"%SYSVBV,$SYSVBV6Q>@ SETVBVJ Q>4ORIGINT PMEMLO^ Q>5ORIGINh PMEMLOr !@DOSVEC:| NEWMEMLOPOWER0QDOSINI PBOOTQDOSINI. PBOOT Q>4RESET PDOSINI Q>5RESETPDOSINI %>4VBI $>5VBIQ> SETVBV QDOSII? HDOSII !FIXMEMLODOSIIQDOSVEC& PDOSHOLD0QDOSVEC:PDOSHOLDD Q>4NEWDOSN PDOSVECX Q>5NEWDOSbPDOSVECl !FIXMEM/LOvX;X;X;X; POWER,Q O>?PQ O>PQ O> PQ O>P %>*Q@74?93>Q@7HT?RT?\T?fT?pPz3Q@7M>L PHOUR33Q@7T?T?T?T?P3 Q@70 M> L$ PMINUTE& 3( 3. Q@78 T?B T?L T?V T?` Pj 3t Q@7~ M> L PSECOND Q> PLATCH !POWER0 ORIGIN x ORIGIN !POWERX; LATCH  HOUR  MINUTE  SECOND  DOSII? DOSHOLD X;5 DEF MAIN10 DECLARE15 BINARY VAR2(128,3),VARPTR,SUBPR2(47),SUBPTR,SIZE2,PTREXT17 BYTE P,W,L2,BYTE,CLASS,DSC(120),SIZES(120),CLASSES(120),VAR1(128,4),SUBPR1(47,9),EOLFLG,P120 BINARY LINEADR(1000,1),LINEPTR,SYSLINE(1000),SYSLINEPTR,H,M25 BINARY NEST2(63),NESTPTR,L,PTRHEAD,PTRVAR,PTRSTACK,OFFSET,SBR,L1,V,BASE27 STRING(16) VARNAM(128),SUBNAM(47),KEYWORD:BINARY NUEXPR,EXPR(7)30 STRING(24) SOURCE,OBJECT,LISTING,ERROR:BINARY SECTOR,ADDR35 STRING(120) WORD,LINE:BINARY PACKFLG40 RECPROC COMPILEDEF,COM3PILEBIN(BYTE),COMPILEFLT(BYTE),COMPILESTR(BYTE),COMPILEBYT(BYTE)45 RECPROC MAKEBIN(BYTE),MAKEFLT(BYTE),MAKEBYT(BYTE),MAKESTR(BYTE),PARM(BYTE),COMPILEADR50 PROC GETWORD,REGETWORD,GETLINE,GETCOLON,GETLEFT,GETRIGHT,GETCOMMA53 PROC REGETLEFT,REGETRIGHT,R4EGETCOMMA55 PROC EXPRBIN(BINARY),EXPRFLT(BINARY),EXPRSTR(BINARY),EXPRADR(BINARY),EXPRLINE(BINARY),EXPRBYT(BINARY)60 RECFNC(BYTE) SCAN(BYTE),COMPILEEXPR(BYTE)65 FNC(BINARY) TOSBR,TOVAR70 RECPROC P$SCAN0,P$SCAN275 RECFNC(STRING) F$SCAN1(STRING(*),STR5ING(*)),F$POS(BYTE,STRING(*),STRING(*))80 RECFNC(STRING) F$DEF(STRING(*)),F$MATCH(STRING(*),STRING(*))90 ENDDECLARE100 CALL P$SCAN0:SOURCE=F$DEF(F$POS(&0,"SOURCE> ","");".BAS")103 OBJECT=F$MATCH(SOURCE,F$SCAN1("OBJECT",F$DEF("*.OBJ"));".OBJ")105 LI6STING=F$DEF(F$SCAN1("LIST","E:")):ERROR=F$DEF(F$SCAN1("ERROR","E:"))107 BASE=F$SCAN1("BASE","0"):BASE=BASE+3110 OPEN# &1,&4,&0,SOURCE:OPEN# &2,&8,&0,OBJECT:OPEN# &3,&8,&0,LISTING:OPEN# &4,&8,&0,ERROR111 TRAP 30032:POKE 766,&255:PRINT# &3,"JLS BASIC V71.0":PRINT# &3,"(C) 1985 by Jeffrey Glen Jackson":PRINT# &3115 ADDR=0:LINE="":P=&1:CALL GETLINE:LINEPTR=0:SYSLINEPTR=0120 NESTPTR=0:VARPTR=0:SUBPTR=0125 CALL GETWORD:IF WORD<>"DEF" AND WORD<>"REM" THEN 30004130 IF WORD="REM" THEN 115132 CALL COMPIL8EDEF:IF NESTPTR<>0 THEN 30037134 IF SUBPTR>1:FOR L1=1 TO SUBPTR-1136 IF SUBPR1(L1,7)=&0 OR SUBPR1(L1,7)=&2:PRINT# &2,"^";:SUBPR2(L1)=ADDR+1:ADDR=ADDR+11:ENDIF138 NEXT L1:ENDIF:PUT# &2,&72:ADDR=ADDR+1:PTRHEAD=ADDR:OFFSET=0140 IF VARPTR<9>0:FOR L1=0 TO VARPTR-1 :PUT# &2,VAR1(L1,1):PUT# &2,VAR1(L1,2)145 V=VAR2(L1,1):GOSUB 990:V=VAR2(L1,2):GOSUB 990150 V=VAR2(L1,3):GOSUB 990:IF VAR1(L1,4)<>&2:V=VAR2(L1,0)-OFFSET:GOSUB 990153 ELSE:V=VAR2(L1,0):GOSUB 990155 OFFSET=OFFSET+(VAR2(L1+1,0):-VAR2(L1,0)):ENDIF:VAR2(L1,1)=V160 ADDR=ADDR+10:NEXT L1:PTRSTACK=ADDR+VAR2(VARPTR,0)-OFFSET:ELSE:PTRSTACK=ADDR:ENDIF:PTRVAR=ADDR162 PUT# &2,&255:ADDR=ADDR+1:IF SUBPTR>1163 FOR L1=1 TO SUBPTR-1:IF SUBPR1(L1,7)=&0 OR SUBPR1(L1,7)=&2:PRINT# &2,SUBNAM(L;1)164 DPUT# &2,SUBPR2(L1)+BASE:ENDIF:NEXT L1166 PRINT# &2:FOR L1=1 TO SUBPTR-1:IF SUBPR1(L1,7)=&1:PRINT# &2,SUBNAM(L1)167 DPUT# &2,SUBPR2(L1)+BASE:ENDIF:NEXT L1:ENDIF169 PTRVAR=ADDR:CLOSE# &1:CLOSE# &2170 OPEN# &2,&12,&0,OBJECT:GET# &2,W:GET# &2<,W175 V=BASE-3:GOSUB 990:PTRVAR=PTRVAR+BASE:PTRSTACK=PTRSTACK+BASE:PTRHEAD=PTRHEAD+BASE180 V=PTRVAR-1:GOSUB 990:V=PTRSTACK:GOSUB 990:PUT# &2,SUBPR1(0,9)185 SBR=0190 GET# &2,W:IF W=&0195 GET# &2,L2:IF L2<>&0:FOR L2=&1 TO L2:GET# &2,W:NEXT L2:ENDIF=205 ELSEIF W=&1:GET# &2,W:GET# &2,W210 ELSEIF W=&2:FOR L2=&1 TO &6:GET# &2,W:NEXT L2220 ELSEIF (W>=&3 AND W<=&6) OR W=&87 OR W=&120 OR W=&151 OR W=&156 OR W=&157:GOSUB 970225 V=V+PTRHEAD:GOSUB 980226 ELSEIF (W>=&41 AND W<=&44) OR W=&136 OR W=&137:G>ET# &2,W230 ELSEIF W=&45 OR W=&46 OR W=&48 OR W=&77235 GOSUB 970:L1=V:IF V>=32768:V=SYSLINE(V-32768)+BASE:GOSUB 980240 IF L1>=SYSLINEPTR+32768 THEN 30028242 ELSEIF V=0245 ELSE:L=0:H=LINEPTR-1250 IF L>H THEN 30029255 M=(L+H)/2:IF VLINEADR(M,0):L=M+1:GOTO 250:ENDIF265 V=LINEADR(M,1)+BASE:GOSUB 980:ENDIF270 ELSEIF W=&72275 IF VARPTR<>0:FOR L1=0 TO VARPTR-1:FOR L2=&1 TO &8280 GET# &2,W:NEXT L2285 GOSUB 970:V=V+PTRVAR:GOSUB 980:NEXT@ L1:ENDIF290 CLOSE# &2:POKE 766,&0:PRINT# &4,"SUCCESSFUL COMPILATION":GOTO 32000395 ELSEIF W=&86 OR W=&92 OR W=&93 OR W=&152:GET# &2,W400 ELSEIF W=&83 OR W=&121405 NOTE# &2,SECTOR,BYTE:GET# &2,W:V=SUBPR2(W)+BASE410 GET# &2,W:GOSUB 980415 ELSEIAF W=&94420 GOSUB 970:V=V+BASE:GOSUB 980425 GOSUB 970:V=V+PTRHEAD:GOSUB 980430 GOSUB 970:V=V+PTRHEAD:GOSUB 980435 NOTE# &2,SECTOR,BYTE:GET# &2,SBR:POINT# &2,SECTOR,BYTE:PUT# &2,SUBPR1(SBR,8)440 GET# &2,W:IF SUBPR1(SBR,2)=&2 OR SUBPR1(SBR,2)=&4B443 V=VAR2(SUBPR1(SBR,4)+SUBPR1(SBR,8),0)-VAR2(SUBPR1(SBR,4),0)+SUBPR1(SBR,9):ELSE:V=SUBPR1(SBR,9):ENDIF445 GOSUB 990450 ELSEIF W>=&127 AND W<=&131455 NOTE# &2,SECTOR,BYTE:GET# &2,W:V=VAR2(W,1)+PTRVAR:GOSUB 980900 ENDIF:GOTO 190970 NOTE# &2,SECCTOR,BYTE:GET# &2,W:GET# &2,L2:V=256*L2+W:RETURN980 POINT# &2,SECTOR,BYTE990 DPUT# &2,V:RETURN1000 DEF COMPILEDEF1005 DECLARE:BINARY SBR,VR,L1,N,PR,T1010 BYTE TYPE,SIZE,ALLOC,N,TYPER,TYPEP,FLAG,FORSIZE,FORMAX1045 ENDDECLARE1047 FORSIZE=0:FORMAX=0D1050 CALL GETWORD:IF WORD="PACKAGE":PACKFLG=&0:ELSE:PACKFLG=&2:ENDIF1055 IF WORD="PACKAGE" OR WORD="MAIN" THEN 12001060 SBR=TOSBR:IF SBR=32767 THEN 300181062 SUBPR1(SBR,8)=&0:SUBPR1(SBR,7)=SUBPR1(SBR,7)+&11063 IF SUBPR1(SBR,1)=&0 THEN 11001065 CALEL GETLEFT1070 FOR L1=1 TO SUBPR1(SBR,1)1075 CALL GETWORD:VARNAM(SUBPR1(SBR,3)-&1+L1)=WORD:VAR1(SUBPR1(SBR,3)-&1+L1,3)=&11080 IF CLASS<>&1 THEN 300061085 CALL GETWORD:IF L1=SUBPR1(SBR,1):IF WORD<>")" THEN 300081090 ELSE:IF WORD<>"," THEN 30007:FENDIF1095 NEXT L11100 SUBPR2(SBR)=ADDR+1:PUT# &2,&94:ADDR=ADDR+111105 DPUT# &2,ADDR1110 DPUT# &2,SUBPR1(SBR,3)*10-11115 DPUT# &2,VARPTR*101120 PUT# &2,SBR:PUT# &2,SUBPR1(SBR,1)*10:PUT# &2,&0:PUT# &2,&01125 GOTO 20001200 SUBNAM(0)=WORD:SUBPTR=1:SGUBPR1(0,2)=&11205 PUT# &2,&255:PUT# &2,&255:PUT# &2,&0:PUT# &2,&01210 PUT# &2,&0:PUT# &2,&0:PUT# &2,&0:PUT# &2,&0:SBR=0:PUT# &2,&01215 GOTO 20002000 SUBPR1(SBR,4)=VARPTR:SUBPR1(SBR,5)=SUBPTR2005 ALLOC=&1:IF SUBPR1(SBR,2)=&2 OR SUBPR1(SBR,2)=&4:ALLOHC=&2:ENDIF2015 CALL GETCOLON:IF WORD<>"DECLARE" THEN 29002020 CALL GETCOLON2025 IF WORD="BINARY":TYPE=&1:SIZE=&22030 ELSEIF WORD="FLOAT":TYPE=&2:SIZE=&62035 ELSEIF WORD="STRING":TYPE=&32040 CALL GETLEFT:CALL GETWORD:IF CLASS<>&2 THEN 300102045 ISIZE=BIN(WORD)+1:IF SIZE>&255 THEN 300102050 CALL GETRIGHT2055 ELSEIF WORD="BYTE":TYPE=&4:SIZE=&12100 ELSEIF WORD="PROC":TYPE=&1:GOTO 25002105 ELSEIF WORD="RECPROC":TYPE=&2:GOTO 25002110 ELSEIF WORD="FNC":TYPE=&3:GOTO 24002115 ELSEIF WORD="RECFNCJ":TYPE=&4:GOTO 24002120 ELSEIF WORD="ENDDECLARE":GOTO 29502125 ELSEIF WORD="PRIVATE":PACKFLG=2:CALL GETWORD:GOTO 22852130 ELSE:GOTO 30011:ENDIF2200 CALL GETWORD:IF CLASS<>&1 THEN 300122205 VARNAM(VARPTR)=WORD:VAR1(VARPTR,0)=TYPE2210 N=&0:VAR1(VARPKTR,2)=SIZE2215 VAR1(VARPTR,3)=&1:VAR1(VARPTR,4)=ALLOC2220 CALL GETWORD:IF WORD<>"(" THEN 22502225 CALL GETWORD:IF CLASS<>&2 THEN 300132230 VAR2(VARPTR,1+N)=BIN(WORD)+1:N=N+&12235 CALL GETWORD:IF WORD="," AND N<>3 THEN 22252240 IF WORD="," THEN 300L142245 IF WORD<>")" THEN 300082247 CALL GETWORD2250 VAR1(VARPTR,1)=N:LET SIZE2=SIZE:IF N=&0 THEN 22602255 FOR L1=1 TO N:SIZE2=SIZE2*VAR2(VARPTR,L1):NEXT L12260 IF VARPTR<>0 THEN 22702265 VAR2(0,0)=02270 VAR2(VARPTR+1,0)=VAR2(VARPTR,0)+SIZE22280 MVARPTR=VARPTR+12283 IF WORD="," THEN 22002285 IF WORD=":":CALL GETWORD:GOTO 2025:ENDIF2290 IF WORD="":CALL GETLINE:CALL GETWORD:GOTO 2025:ENDIF2295 GOTO 300092400 CALL GETLEFT:CALL GETWORD2405 IF WORD="BINARY":TYPER=&12410 ELSEIF WORD="FLOAT":TYPNER=&22415 ELSEIF WORD="STRING":TYPER=&32417 ELSEIF WORD="BYTE":TYPER=&42420 ELSE:GOTO 30011:ENDIF2450 CALL GETRIGHT2500 CALL GETWORD:IF CLASS<>&1 THEN 300122505 SUBNAM(SUBPTR)=WORD:SUBPR1(SUBPTR,0)=TYPER2510 SUBPR1(SUBPTR,2)=TYPE:SUBPR1(SUBPTR,3)O=VARPTR2515 SUBPR1(SUBPTR,6)=&1:SUBPR1(SUBPTR,7)=PACKFLG:PR=02520 CALL GETWORD:IF WORD<>"(" THEN 26702525 CALL GETWORD:IF WORD="BINARY":TYPEP=&1:SIZE=&22530 ELSEIF WORD="FLOAT":TYPEP=&2:SIZE=&62532 ELSEIF WORD="BYTE":TYPEP=&4:SIZE=&12535 ELSEIF WOPRD="STRING":TYPEP=&32540 CALL GETLEFT:CALL GETWORD:IF CLASS<>&2 AND WORD<>"*" THEN 300102545 IF WORD="*":SIZE=&02550 ELSE:SIZE=BIN(WORD)+1:ENDIF2555 IF SIZE>&255 THEN 300102560 CALL GETRIGHT2565 ELSE:GOTO 30011:ENDIF2600 N=&0:CALL GETWORD:IQF WORD<>"(" THEN 26352605 IF N=&3 THEN 300142607 CALL GETWORD:IF CLASS<>&2 AND WORD<>"*" THEN 300132610 IF WORD="*":VAR2(VARPTR,1+N)=02615 ELSE:VAR2(VARPTR,1+N)=BIN(WORD)+1:ENDIF2620 N=N+&1:CALL GETWORD:IF WORD="," THEN 26052625 IF WORD<>")" THENR 300082630 CALL GETWORD2635 VAR1(VARPTR,0)=TYPEP:VAR1(VARPTR,1)=N2637 IF VARPTR<>0 THEN 26402638 VAR2(0,0)=02640 VAR1(VARPTR,2)=SIZE:VAR2(VARPTR+1,0)=VAR2(VARPTR,0)2645 VAR1(VARPTR,3)=&0:VAR1(VARPTR,4)=&32655 PR=PR+1:VARPTR=VARPTR+1:IF WORD="," TSHEN 25252660 IF WORD<>")" THEN 300082665 CALL GETWORD2670 SUBPR1(SUBPTR,1)=PR:SUBPTR=SUBPTR+12675 IF WORD="," THEN 25002680 GOTO 22852900 KEYWORD=WORD:IF KEYWORD="REM":CALL GETLINE:CALL GETWORD:GOTO 2900:ENDIF:IF TOVAR<>327672905 KEYWORD="LET":PT=P-LEN(WORD):ENDIF2910 NUEXPR=0:FLAG=&02915 IF KEYWORD="FOR" OR KEYWORD="LET":FLAG=&1:ENDIF2920 EXPR(NUEXPR)=P:T=SCAN(FLAG):FLAG=&02925 IF T=&0 AND NUEXPR<>0 THEN 300152930 IF T=&0 THEN 29902935 NUEXPR=NUEXPR+1:CALL GETWORD:IF WORD=":" OR WORD="" UTHEN 29902940 IF WORD="," OR WORD="=" OR WORD="TO" OR WORD="STEP" OR WORD="THEN" THEN 29202945 GOTO 300172950 SUBPR1(SBR,8)=VARPTR-SUBPR1(SBR,4):CALL GETCOLON:GOTO 29002990 EXPR(NUEXPR)=P3000 IF KEYWORD="IF"3005 IF NUEXPR=13010 NEST(NESTPTR)=SVYSLINEPTR+327683015 NEST(NESTPTR+1)=SYSLINEPTR+327693020 NESTPTR=NESTPTR+2:SYSLINEPTR=SYSLINEPTR+23025 CALL EXPRBYT(0):PUT# &2,&150:PUT# &2,&483030 DPUT# &2,NEST(NESTPTR-1)3035 ADDR=ADDR+4:GOTO 99003050 ELSEIF NUEXPR<>2:GOTO 300223055 W ELSE:CALL EXPRBYT(0):PUT# &2,&48:ADDR=ADDR+3:CALL EXPRLINE(1):ENDIF3100 ELSEIF KEYWORD="ELSEIF"3105 IF NUEXPR<>1 THEN 300223110 PUT# &2,&46:DPUT# &2,NEST(NESTPTR-2)3115 ADDR=ADDR+3:SYSLINE(NEST(NESTPTR-1)-32768)=ADDR3120 NEST(NESTPTR-1)=SYSLINXEPTR+327683125 SYSLINEPTR=SYSLINEPTR+1:GOTO 30253200 ELSEIF KEYWORD="ELSE"3205 IF NUEXPR<>0 THEN 300223210 PUT# &2,&46:DPUT# &2,NEST(NESTPTR-2)3215 ADDR=ADDR+33220 SYSLINE(NEST(NESTPTR-1)-32768)=ADDR:NEST(NESTPTR-1)=03300 ELSEIF KEYWORD="ENDYIF"3305 IF NUEXPR<>0 THEN 300223310 SYSLINE(NEST(NESTPTR-2)-32768)=ADDR3315 IF NEST(NESTPTR-1)=0 THEN 33253320 SYSLINE(NEST(NESTPTR-1)-32768)=ADDR3325 NESTPTR=NESTPTR-23400 ELSEIF KEYWORD="WHILE"3405 IF NUEXPR<>1 THEN 300223410 NEST(NESTPZTR)=SYSLINEPTR+32768:NESTPTR=NESTPTR+13415 SYSLINE(SYSLINEPTR)=ADDR:SYSLINEPTR=SYSLINEPTR+23420 CALL EXPRBYT(0):PUT# &2,&150:PUT# &2,&483425 DPUT# &2,NEST(NESTPTR-1)+13430 ADDR=ADDR+43500 ELSEIF KEYWORD="ENDWHILE"3505 IF NUEXPR<>0 THEN 30022[3510 NESTPTR=NESTPTR-1:PUT# &2,&46:DPUT# &2,NEST(NESTPTR)3515 ADDR=ADDR+33520 SYSLINE(NEST(NESTPTR)+1-32768)=ADDR3600 ELSEIF KEYWORD="REPEAT"3605 IF NUEXPR<>0 THEN 300223610 NEST(NESTPTR)=SYSLINEPTR+327683615 SYSLINE(SYSLINEPTR)=ADDR:NESTPTR\=NESTPTR+13620 SYSLINEPTR=SYSLINEPTR+13700 ELSEIF KEYWORD="UNTIL"3705 IF NUEXPR<>1 THEN 300223710 CALL EXPRBYT(0):PUT# &2,&150:PUT# &2,&483715 NESTPTR=NESTPTR-1:DPUT# &2,NEST(NESTPTR)3720 ADDR=ADDR+43800 ELSEIF KEYWORD="GOSUB"3805 PUT# &2,]&453810 IF NUEXPR<>1 THEN 300223815 CALL EXPRLINE(0):ADDR=ADDR+33850 ELSEIF KEYWORD="GOTO":PUT# &2,&46:GOTO 38103875 ELSEIF KEYWORD="TRAP":PUT# &2,&77:GOTO 38103900 ELSEIF KEYWORD="PROTECT":N=&1003905 IF NUEXPR<>1 THEN 300223910 CALL EXPRSTR(^0):PUT# &2,N:ADDR=ADDR+13950 ELSEIF KEYWORD="UNPROTECT"3955 N=&101:GOTO 39053960 ELSEIF KEYWORD="ERASE"3965 N=&102:GOTO 39053970 ELSEIF KEYWORD="RENAME"3975 N=&103:GOTO 39054100 ELSEIF KEYWORD="RETURN"4105 IF NUEXPR<>0 THEN 300224110 PUT# _&2,&47:ADDR=ADDR+14200 ELSEIF KEYWORD="LET"4205 IF NUEXPR<>2 THEN 300224210 CALL EXPRADR(0):CALL GETWORD:IF WORD<>"=" THEN 300244215 P=EXPR(0):CALL GETWORD:VR=TOVAR:IF VR=32767 THEN 300124220 T=VAR1(VR,0):IF T=&1:CALL EXPRBIN(1):PUT# &2,&39422`5 ELSEIF T=&2:CALL EXPRFLT(1):PUT# &2,&404227 ELSEIF T=&4:CALL EXPRBYT(1):PUT# &2,&1444230 ELSE:CALL EXPRSTR(1):PUT# &2,&38:ENDIF4235 ADDR=ADDR+14300 ELSEIF KEYWORD="FOR"4305 IF NUEXPR<>3 AND NUEXPR<>4 THEN 300224310 P=EXPR(0):CALL GETWORaD:VR=TOVAR:IF VR=32767 THEN 300124315 T=VAR1(VR,0):IF T=&3 THEN 300124320 IF T=&14322 FORSIZE=FORSIZE+&8:IF FORSIZE>FORMAX:FORMAX=FORSIZE:ENDIF4325 CALL EXPRBIN(2):CALL GETWORD4330 IF NUEXPR=4:IF WORD<>"STEP" THEN 300254335 CALL EXPRBINb(3)4340 ELSE:PUT# &2,&1:PUT# &2,&1:PUT# &2,&0:ADDR=ADDR+3:ENDIF4345 CALL EXPRADR(0):CALL GETWORD:IF WORD<>"=" THEN 300244347 CALL EXPRBIN(1):CALL GETWORD:IF WORD<>"TO" THEN 300264348 PUT# &2,&41:PUT# &2,FORSIZE:ADDR=ADDR+24350 ELSEIF T=&2:cCALL EXPRFLT(2):CALL GETWORD:FORSIZE=FORSIZE+&16:IF FORSIZE>FORMAX:FORMAX=FORSIZE:ENDIF4355 IF NUEXPR=4:IF WORD<>"STEP" THEN 300254360 CALL EXPRFLT(3)4365 ELSE:PUT# &2,&2:PUT# &2,&64:PUT# &2,&1:PUT# &2,&0:PUT# &2,&04370 PUT# &2,&0:PUT# &2d,&0:ADDR=ADDR+7:ENDIF4375 CALL EXPRADR(0):CALL GETWORD:IF WORD<>"=" THEN 300244377 CALL EXPRFLT(1):CALL GETWORD:IF WORD<>"TO" THEN 300264378 PUT# &2,&43:PUT# &2,FORSIZE:ADDR=ADDR+24380 ELSE:CALL EXPRBYT(2):CALL GETWORD:FORSIZE=FORSIZE+&6:IF FeORSIZE>FORMAX:FORMAX=FORSIZE:ENDIF4382 IF NUEXPR=4:IF WORD<>"STEP" THEN 300254384 CALL EXPRBYT(3)4386 ELSE:PUT# &2,&152:PUT# &2,&1:ADDR=ADDR+2:ENDIF4388 CALL EXPRADR(0):CALL GETWORD:IF WORD<>"=" THEN 300244390 CALL EXPRBYT(1):CALL GETWORfD:IF WORD<>"TO" THEN 300264392 PUT# &2,&136:PUT# &2,FORSIZE:ADDR=ADDR+2:ENDIF4398 NEST(NESTPTR)=FORSIZE:NESTPTR=NESTPTR+14400 ELSEIF KEYWORD="NEXT"4405 IF NUEXPR<>1 THEN 300224407 NESTPTR=NESTPTR-1:N=NEST(NESTPTR)4410 P=EXPR(0):CALL GETWORD:gVR=TOVAR:IF VR=32767 THEN 300124415 T=VAR1(VR,0):IF T=&1:PUT# &2,&42:PUT# &2,N:FORSIZE=FORSIZE-&84417 ELSEIF T=&4:PUT# &2,&137:PUT# &2,N:FORSIZE=FORSIZE-&64420 ELSE:PUT# &2,&44:PUT# &2,N:FORSIZE=FORSIZE-&16:ENDIF4425 ADDR=ADDR+24500 ELSEIF KEhYWORD="PRINT"4505 IF NUEXPR=04510 PUT# &2,&0:PUT# &2,&1:PUT# &2,&155:PUT# &2,&49:ADDR=ADDR+44515 ELSEIF NUEXPR=14520 CALL EXPRSTR(0):IF EOLFLG=&0:PUT# &2,&71:ADDR=ADDR+1:ENDIF4525 PUT# &2,&49:ADDR=ADDR+14530 ELSE:GOTO 30022:ENDIF4600 ELSiEIF KEYWORD="PRINT#"4605 IF NUEXPR=14610 PUT# &2,&0:PUT# &2,&1:PUT# &2,&155:ADDR=ADDR+34615 ELSEIF NUEXPR=24620 CALL EXPRSTR(1):IF EOLFLG=&0:PUT# &2,&71:ADDR=ADDR+1:ENDIF4625 ELSE:GOTO 30022:ENDIF4630 CALL EXPRBYT(0):IF NUEXPR=2:CALL REGETjCOMMA:ENDIF4635 PUT# &2,&50:ADDR=ADDR+14700 ELSEIF KEYWORD="LINPUT":N=&514705 IF NUEXPR=0 THEN 300224710 PUT# &2,&152:PUT# &2,&0:ADDR=ADDR+2:L1=04715 FOR L1=L1 TO NUEXPR-14720 P=EXPR(L1):CALL GETWORD:VR=TOVAR4725 CALL EXPRADR(L1):IF L14 THEN 300224910 CALL EXPRSTR(3):CALL EXPRBYT(2):CALL REGETCOMMA4915 CALL EXPRBYT(1):CALL REGETCOMMA:CALL EXPRBYT(0)4920 CALL REGETCOMMA:PUT# &2,&52:ADDR=ADDR+15000 ELSEIF KEYWORD="CLOSE#"5003 N=&535005 IF nNUEXPR<>1 THEN 300225010 CALL EXPRBYT(0):PUT# &2,N:ADDR=ADDR+15100 ELSEIF KEYWORD="BPUT#":N=&965105 IF NUEXPR<>3 THEN 300225110 CALL EXPRBIN(2):CALL EXPRBIN(1):CALL REGETCOMMA:CALL EXPRBYT(0)5115 CALL REGETCOMMA:PUT# &2,N:ADDR=ADDR+15150 ELSEIoF KEYWORD="BGET#"5155 N=&97:GOTO 51055200 ELSEIF KEYWORD="POKE"5205 N=&1445210 IF NUEXPR<>2 THEN 300225215 CALL EXPRBIN(0):CALL REGETCOMMA:CALL EXPRBYT(1)5220 PUT# &2,N:ADDR=ADDR+15250 ELSEIF KEYWORD="DPOKE"5255 IF NUEXPR<>2 THEN 30022526p0 CALL EXPRBIN(0):CALL REGETCOMMA:CALL EXPRBIN(1)5265 PUT# &2,&39:ADDR=ADDR+15300 ELSEIF KEYWORD="GRAPHICS"5305 N=&55:GOTO 50055400 ELSEIF KEYWORD="COLOR"5405 N=&56:GOTO 50055500 ELSEIF KEYWORD="SETCOLOR"5505 IF NUEXPR<>3 THEN 300225510 CAqLL EXPRBYT(2):CALL EXPRBYT(1):CALL REGETCOMMA:CALL EXPRBYT(0)5515 CALL REGETCOMMA:PUT# &2,&57:ADDR=ADDR+15600 ELSEIF KEYWORD="POSITION":N=&58:GOTO 52105620 ELSEIF KEYWORD="PLOT":N=&59:GOTO 52105640 ELSEIF KEYWORD="DRAWTO":N=&60:GOTO 52105660 ELSEIrF KEYWORD="FILL":N=&61:GOTO 52105700 ELSEIF KEYWORD="STOP"5705 IF NUEXPR<>0 THEN 300225710 PUT# &2,&76:ADDR=ADDR+15800 ELSEIF KEYWORD="PUT#"5805 IF NUEXPR<>2 THEN 300225810 CALL EXPRBYT(1):CALL EXPRBYT(0):CALL REGETCOMMA5815 PUT# &2,&79:ADDRs=ADDR+15850 ELSEIF KEYWORD="GET#":N=&805855 IF NUEXPR<>2 THEN 300225860 CALL EXPRADR(1):CALL EXPRBYT(0):CALL REGETCOMMA5865 PUT# &2,N:ADDR=ADDR+15900 ELSEIF KEYWORD="POINT#"5905 IF NUEXPR<>3 THEN 300225910 CALL EXPRBYT(2):CALL EXPRBIN(1):CALtL REGETCOMMA5915 CALL EXPRBYT(0):CALL REGETCOMMA:PUT# &2,&81:ADDR=ADDR+15950 ELSEIF KEYWORD="NOTE#"5955 IF NUEXPR<>3 THEN 300225960 CALL EXPRADR(2):CALL EXPRADR(1):CALL REGETCOMMA:CALL EXPRBYT(0)5965 CALL REGETCOMMA:PUT# &2,&82:ADDR=ADDR+16000u ELSEIF KEYWORD="CALL"6005 IF NUEXPR<>1 THEN 300226010 P=EXPR(0):CALL REGETWORD:VR=TOSBR:IF VR=32767 THEN 300276015 PUT# &2,&83:PUT# &2,VR:PUT# &2,&0:ADDR=ADDR+36020 IF SUBPR1(VR,1)<>&0:CALL GETLEFT:N=SUBPR1(VR,3)6025 FOR L1=0 TO SUBPR1(VR,1)v-1:CALL PARM(N+L1):CALL REGETWORD6030 IF WORD<>")" AND L1=SUBPR1(VR,1)-&1 THEN 300086035 IF WORD<>"," AND L1<>SUBPR1(VR,1)-&1 THEN 300076040 NEXT L1:ENDIF6045 IF SUBPR1(VR,2)=&1:PUT# &2,&88:ADDR=ADDR+16050 ELSEIF SUBPR1(VR,2)=&2:PUT# &2,&w89:ADDR=ADDR+16055 ELSE:GOTO 30019:ENDIF6100 ELSEIF KEYWORD="DEF":P=EXPR(0):CALL COMPILEDEF:NUEXPR=0:EXPR(0)=P6200 ELSEIF KEYWORD="ENDDEF"6205 IF NUEXPR<>0 THEN 300226206 SUBPR1(SBR,9)=FORMAX6207 IF SUBPR1(SBR,4)=VARPTR THEN 62136210 FOR L1=xSUBPR1(SBR,4) TO VARPTR-1:VAR1(L1,3)=&0:NEXT L16213 IF SUBPR1(SBR,5)=SUBPTR THEN 62176215 FOR L1=SUBPR1(SBR,5) TO SUBPTR-1:SUBPR1(L1,6)=&0:NEXT L16217 IF SUBPR1(SBR,1)=&0 THEN 62206218 FOR L1=SUBPR1(SBR,3) TO SUBPR1(SBR,3)-&1+SUBPR1(SBR,1):VAR1(yL1,3)=&0:NEXT L16220 RET6300 ELSEIF KEYWORD="RET"6305 IF SUBPR1(SBR,2)=&1 OR SUBPR1(SBR,2)=&26310 IF NUEXPR<>0 THEN 300226315 IF SUBPR1(SBR,2)=&1:PUT# &2,&906320 ELSE:PUT# &2,&91:ENDIF6325 ADDR=ADDR+16330 ELSE:IF NUEXPR<>1 THEN 30022z6335 IF SUBPR1(SBR,0)=&1:CALL EXPRBIN(0):SIZE=&26340 ELSEIF SUBPR1(SBR,0)=&2:CALL EXPRFLT(0):SIZE=&66343 ELSEIF SUBPR1(SBR,0)=&4:CALL EXPRBYT(0):SIZE=&16345 ELSE:CALL EXPRSTR(0):SIZE=&0:ENDIF6350 IF SUBPR1(SBR,2)=&3:PUT# &2,&92:PUT# &2,SI{ZE6355 ELSE:PUT# &2,&93:PUT# &2,SIZE:ENDIF6360 ADDR=ADDR+2:ENDIF6400 ELSEIF KEYWORD="EXEC"6405 IF NUEXPR<>1 THEN 300226410 CALL EXPRBIN(0):PUT# &2,&104:ADDR=ADDR+16450 ELSEIF KEYWORD="MOVE":N=&1056455 IF NUEXPR<>3 THEN 300226460 CALL EXPR|BIN(2):CALL EXPRBIN(1):CALL REGETCOMMA:CALL EXPRBIN(0)6465 CALL REGETCOMMA:PUT# &2,N:ADDR=ADDR+16470 ELSEIF KEYWORD="RMOVE":N=&106:GOTO 64556500 ELSEIF KEYWORD="ERROR":N=&122:GOTO 50056600 ELSEIF KEYWORD="FPOKE"6605 IF NUEXPR<>2 THEN 300226610 }CALL EXPRBIN(0):CALL REGETCOMMA:CALL EXPRFLT(1):PUT# &2,&40:ADDR=ADDR+16650 ELSEIF KEYWORD="SPOKE"6655 IF NUEXPR<>2 THEN 300226660 CALL EXPRBIN(0):CALL REGETCOMMA:CALL EXPRSTR(1):PUT# &2,&38:ADDR=ADDR+16700 ELSEIF KEYWORD="CHAIN"6710 CALL REGETW~ORD:CLOSE# &1:OPEN# &1,4,0,MID(WORD,2,LEN(WORD)-2)6720 GOTO 99056800 ELSEIF KEYWORD="DGET#":N=&158:GOTO 58556850 ELSEIF KEYWORD="DPUT#"6855 IF NUEXPR<>2 THEN 300226860 CALL EXPRBIN(1):CALL EXPRBYT(0):CALL REGETCOMMA:PUT# &2,&159:ADDR=ADDR+16900 ELSEIF KEYWORD="FGET#":N=&160:GOTO 58556950 ELSEIF KEYWORD="FPUT#"6955 IF NUEXPR<>2 THEN 300226960 CALL EXPRFLT(1):CALL EXPRBYT(0):CALL REGETCOMMA:PUT# &2,&161:ADDR=ADDR+19800 ELSEIF KEYWORD="END":IF NUEXPR<>0 THEN 300229805 SUBPR1(0,9)=FORMAX:ʀRET9850 ELSE:GOTO 30030:ENDIF9900 P=EXPR(NUEXPR):CALL GETWORD:IF WORD<>"" THEN 29009905 CALL GETCOLON:GOTO 29009990 ENDDEF9999 CHAIN "D:BASIC2.BAS"SUBPR1(47,9),EOLFLG,P120 BINARY LINEADR(1000,1),LINEPTR,SYSLINE(1000),SYSLINEPTR,H,M25 BINARY NEST10000 DEF COMPILEEXPR(PRI)10005 DECLARE:BINARY V,V1,L110010 BYTE TYPE,PHOLD,C,N10020 FLOAT VF10045 ENDDECLARE10050 EOLFLG=&010055 CALL REGETWORD10060 IF WORD="(":TYPE=COMPILEEXPR(&0):CALL REGETWORD10065 ELSEIF CLASS=&2:PUT# &2,&1:V=VAL(WORD)100΂70 DPUT# &2,V:ADDR=ADDR+3:TYPE=&110072 ELSEIF CLASS=&9:IF LEN(WORD)=1 THEN 3003610073 V=VAL(MID(WORD,&2,LEN(WORD)-&1)):PUT# &2,&152:PUT# &2,V AND 255:ADDR=ADDR+2:TYPE=&410075 ELSEIF CLASS=&3:PUT# &2,&2:VF=VAL(WORD)10080 FOR L1=0 TO 5:PUT# &2,PEEK΃(ADR(VF)+L1):NEXT L1:ADDR=ADDR+7:TYPE=&210085 ELSEIF CLASS=&7:PUT# &2,&0:PUT# &2,LEN(WORD)-&2:ADDR=ADDR+LEN(WORD):TYPE=&310090 IF LEN(WORD)>2:PRINT# &2,MID(WORD,&2,LEN(WORD)-&2);:ENDIF10091 ELSEIF WORD="+":ELSEIF WORD="-":TYPE=COMPILEEXPR(9):IF TYPE΄=&1:PUT# &2,&11810092 ELSEIF TYPE=&4:PUT# &2,&15310093 ELSE:CALL MAKEFLT(TYPE):TYPE=&2:PUT# &2,&119:ENDIF:ADDR=ADDR+110095 ELSEIF CLASS<>&1:GOTO 3001510100 ELSEIF WORD="PEEK"10105 CALL REGETLEFT:CALL COMPILEBIN(&0):CALL REGETRIGHT:TYPE=&4:PUT# &΅2,&62:ADDR=ADDR+110125 ELSEIF WORD="ASC":CALL REGETLEFT:CALL COMPILESTR(&0):CALL REGETRIGHT:TYPE=&410130 PUT# &2,&63:ADDR=ADDR+110150 ELSEIF WORD="CHR" OR WORD="CHR$":CALL REGETLEFT:CALL COMPILEBYT(&0):CALL REGETRIGHT:TYPE=&310155 PUT# &2,&64:ADDRΆ=ADDR+110175 ELSEIF WORD="LEN":CALL REGETLEFT:CALL COMPILESTR(&0):CALL REGETRIGHT:TYPE=&4:PUT# &2,&65:ADDR=ADDR+110200 ELSEIF WORD="BIN":CALL REGETLEFT:CALL COMPILEBIN(&0):CALL REGETRIGHT:TYPE=&110225 ELSEIF WORD="FLT" OR WORD="VAL":CALL REGETLEFT:CA·LL COMPILEFLT(&0):CALL REGETRIGHT:TYPE=&210250 ELSEIF WORD="STR" OR WORD="STR$":CALL REGETLEFT:CALL COMPILESTR(&0):CALL REGETRIGHT:TYPE=&310275 ELSEIF WORD="MID" OR WORD="MID$":CALL REGETLEFT:PHOLD=P:CALL REGETWORD:P=PHOLD10280 V=TOVAR:IF V=32767 ORΈ DSC(P)=&0:CALL COMPILESTR(&0):CALL REGETCOMMA:CALL COMPILEBYT(&0):CALL REGETCOMMA10285 CALL COMPILEBYT(&0):CALL REGETRIGHT:TYPE=&3:PUT# &2,&70:ADDR=ADDR+110290 ELSE:CALL COMPILEADR:CALL REGETCOMMA:CALL COMPILEBYT(&0):CALL REGETCOMMA10295 CALL CΉOMPILEBYT(&0):CALL REGETRIGHT:TYPE=&3:PUT# &2,&116:ADDR=ADDR+1:ENDIF10300 ELSEIF WORD="NOT":CALL REGETLEFT:TYPE=COMPILEEXPR(&0):CALL REGETRIGHT10305 IF TYPE=&4:PUT# &2,&150:ELSE:CALL MAKEBIN(TYPE):TYPE=&1:PUT# &2,&14:ENDIF10310 ADDR=ADDR+110325 ELΊSEIF WORD="ADR":CALL REGETLEFT:CALL COMPILEADR:CALL REGETRIGHT:TYPE=&110350 ELSEIF WORD="DPEEK"10355 CALL REGETLEFT:CALL COMPILEBIN(&0):CALL REGETRIGHT:TYPE=&1:PUT# &2,&98:ADDR=ADDR+110375 ELSEIF WORD="EXP":N=&10710380 CALL REGETLEFT:CALL COMPILEF΋LT(&0):CALL REGETRIGHT:TYPE=&2:PUT# &2,N:ADDR=ADDR+110400 ELSEIF WORD="CEXP":N=&108:GOTO 1038010425 ELSEIF WORD="LOG":N=&109:GOTO 1038010450 ELSEIF WORD="CLOG":N=&110:GOTO 1038010475 ELSEIF WORD="ABS"10480 CALL REGETLEFT:TYPE=COMPILEEXPR(&0):CALL ΌREGETRIGHT:IF TYPE=&1:PUT# &2,&11210483 ELSEIF TYPE=&4:PUT# &2,&15410485 ELSE:CALL MAKEFLT(TYPE):TYPE=&2:PUT# &2,&111:ENDIF:ADDR=ADDR+110500 ELSEIF WORD="INT":N=&113:GOTO 1038010525 ELSEIF WORD="SGN"10530 CALL REGETLEFT:TYPE=COMPILEEXPR(&0):CA΍LL REGETRIGHT:IF TYPE=&1:PUT# &2,&11510535 ELSEIF TYPE=&4:PUT# &2,&15510540 ELSE:CALL MAKEFLT(TYPE):TYPE=&2:PUT# &2,&114:ENDIF:ADDR=ADDR+110550 ELSEIF WORD="ERR":TYPE=&4:PUT# &2,&117:ADDR=ADDR+110575 ELSEIF WORD="DESC":CALL REGETLEFT:CALL GETWORΎD:V=TOVAR:IF V<>32767:PUT# &2,&120:DPUT# &2,V*1010580 ELSE:V=TOSBR:IF V<>32767:PUT# &2,&121:PUT# &2,V:PUT# &2,&0:ELSE:GOTO 3003110585 ENDIF:ENDIF:ADDR=ADDR+3:CALL REGETRIGHT:TYPE=&110600 ELSEIF WORD="FPEEK":CALL REGETLEFT:CALL COMPILEBIN(&0):CALLΏ REGETRIGHT:TYPE=&2:PUT# &2,&123:ADDR=ADDR+110625 ELSEIF WORD="SPEEK":CALL REGETLEFT:CALL COMPILEBIN(&0):CALL REGETRIGHT:TYPE=&3:PUT# &2,&125:ADDR=ADDR+110650 ELSEIF WORD="BYT":CALL REGETLEFT:CALL COMPILEBYT(&0):CALL REGETRIGHT:TYPE=&410700 ELSEIF WOΐRD="BOUND":CALL REGETLEFT:CALL GETWORD:V=TOVAR:CALL REGETCOMMA:CALL COMPILEBYT(0):CALL REGETRIGHT10705 IF V<>32767:PUT# &2,&157:DPUT# &2,V*10:ELSE:GOTO 30031:ENDIF:TYPE=&110710 ADDR=ADDR+310725 ELSEIF WORD="INSTR":CALL REGETLEFT:CALL COMPILESΑTR(0):CALL REGETCOMMA10730 CALL COMPILESTR(0):CALL REGETCOMMA:CALL COMPILEBYT(0):CALL REGETRIGHT10735 PUT# &2,164:ADDR=ADDR+1:TYPE=&411000 ELSE:V=TOSBR11005 IF V<>32767:PUT# &2,&83:PUT# &2,V:PUT# &2,&0:ADDR=ADDR+311010 IF SUBPR1(V,1)<>&0:CALL ΒREGETLEFT:V1=SUBPR1(V,3)11015 FOR L1=0 TO SUBPR1(V,1)-&111020 CALL PARM(V1+L1)11050 CALL REGETWORD11055 IF WORD<>")" AND L1=SUBPR1(V,1)-&1 THEN 3000811060 IF WORD<>"," AND L1<>SUBPR1(V,1)-&1 THEN 3000711070 NEXT L1:ENDIF11080 IF ΓSUBPR1(V,2)=&3:PUT# &2,&8811085 ELSEIF SUBPR1(V,2)=&4:PUT# &2,&8911090 ELSE:GOTO 30019:ENDIF11095 ADDR=ADDR+1:TYPE=SUBPR1(V,0)11100 ELSE:V=TOVAR11105 IF V<>32767:IF VAR1(V,1)<>&0:CALL REGETLEFT11110 FOR L1=1 TO VAR1(V,1)11115 CALL COMPILEΔBIN(&0):CALL REGETWORD11120 IF WORD<>")" AND L1=VAR1(V,1) THEN 3000811125 IF WORD<>"," AND L1<>VAR1(V,1) THEN 3000711130 NEXT L1:ENDIF11140 TYPE=VAR1(V,0)11145 IF VAR1(V,1)=&0 AND VAR1(V,4)=&111147 IF TYPE=&1:PUT# &2,&128:ELSEIF TYPΕE=&2:PUT# &2,&12911148 ELSEIF TYPE=&4:PUT# &2,&13111149 ELSE:PUT# &2,&127:ENDIF:PUT# &2,V:PUT# &2,&011151 ELSE:IF TYPE=&1:PUT# &2,&5:ELSEIF TYPE=&2:PUT# &2,&611152 ELSEIF TYPE=&4:PUT# &2,&15111153 ELSE:PUT# &2,&4:ENDIF11155 DΖPUT# &2,V*1011157 ENDIF:ADDR=ADDR+311165 ELSE:GOTO 30015:ENDIF:ENDIF:ENDIF11200 PHOLD=P:CALL REGETWORD11205 IF WORD<>"THEN" AND WORD<>"TO" AND WORD<>"STEP" AND WORD<>"," AND WORD<>")" AND WORD<>"" THEN 1125011210 P=PHOLD:RET TYPE11250 IF PRI=1 TΗHEN 1135011255 IF PRI=2 THEN 1140011260 IF PRI=3 THEN 1145011265 IF PRI=4 THEN 1150011270 IF PRI=5 THEN 1155011275 IF PRI=6 THEN 1160011280 IF PRI>6 THEN 1165011300 IF WORD<>";" THEN 11350:CALL MAKESTR(TYPE):PHOLD=P:CALL REGETWORD:TYPE=&311305 ΘIF WORD=":" OR WORD="":EOLFLG=&1:GOTO 11210:ENDIF11310 P=PHOLD:CALL COMPILESTR(&1):PUT# &2,&31:ADDR=ADDR+1:GOTO 1195011350 IF WORD<>"EOR" THEN 1137511355 IF TYPE=&4:CALL COMPILEBYT(&2):PUT# &2,&14911360 ELSE:CALL MAKEBIN(TYPE):CALL COMPILEBIN(&2)Ι:TYPE=&1:PUT# &2,&13:ENDIF11365 ADDR=ADDR+1:GOTO 1195011375 IF WORD<>"OR" THEN 1140011380 IF TYPE=&4:CALL COMPILEBYT(&2):PUT# &2,&14811385 ELSE:CALL MAKEBIN(TYPE):CALL COMPILEBIN(&2):TYPE=&1:PUT# &2,&12:ENDIF11390 ADDR=ADDR+1:GOTO 1195011400 IΚF WORD<>"AND" THEN 1145011405 IF TYPE=&4:CALL COMPILEBYT(&3):PUT# &2,&14711410 ELSE:CALL MAKEBIN(TYPE):CALL COMPILEBIN(&3):TYPE=&1:PUT# &2,&11:ENDIF11415 ADDR=ADDR+1:GOTO 1195011450 IF CLASS<>&4 THEN 1150011455 IF WORD="=":C=&011460 ELSEIF WOΛRD="<>":C=&111465 ELSEIF WORD=">":C=&211470 ELSEIF WORD=">=":C=&311475 ELSEIF WORD="<":C=&411480 ELSE:C=&5:ENDIF11485 IF TYPE=&1:CALL COMPILEBIN(&4):PUT# &2,C+&15:ADDR=ADDR+1:TYPE=&411490 ELSEIF TYPE=&2:CALL COMPILEFLT(&4):PUT# &2,C+&25:ADDRΜ=ADDR+1:TYPE=&411492 ELSEIF TYPE=&4:CALL COMPILEBYT(&4):PUT# &2,&138+C:ADDR=ADDR+1:TYPE=&411495 ELSE:CALL COMPILESTR(&4):PUT# &2,C+&32:ADDR=ADDR+1:TYPE=&4:ENDIF:GOTO 1195011500 IF CLASS<>&5 THEN 1155011505 IF WORD="+":C=&7:ELSE:C=&8:ENDIF11510 ΝIF TYPE=&1:CALL COMPILEBIN(&5):PUT# &2,C:ADDR=ADDR+111512 ELSEIF TYPE=&4:CALL COMPILEBYT(&5):PUT# &2,&138+C:ADDR=ADDR+111515 ELSE:CALL MAKEFLT(TYPE):CALL COMPILEFLT(&5):PUT# &2,C+&14:ADDR=ADDR+1:TYPE=&2:ENDIF:GOTO 1195011550 IF WORD<>"*" THEN 11565Ξ:IF TYPE=&1 OR TYPE=&4:CALL MAKEBIN(TYPE):CALL COMPILEBIN(&6)11552 PUT# &2,&9:ADDR=ADDR+1:TYPE=&111555 ELSE:CALL MAKEFLT(TYPE):CALL COMPILEFLT(&6):PUT# &2,&23:ADDR=ADDR+1:TYPE=&2:ENDIF:GOTO 1195011565 IF WORD<>"/" THEN 11600:IF TYPE=&1 OR TYPE=&Ο4:CALL MAKEBIN(TYPE):CALL COMPILEBIN(&6)11567 PUT# &2,&10:TYPE=&1:ADDR=ADDR+111570 ELSE:CALL MAKEFLT(TYPE):CALL COMPILEFLT(&6):PUT# &2,&24:ADDR=ADDR+1:TYPE=&2:ENDIF:GOTO 1195011600 IF WORD<>"^" THEN 11900:CALL MAKEFLT(TYPE):CALL COMPILEFLT(&7):PUΠT# &2,&78:ADDR=ADDR+1:TYPE=&2:GOTO 1195011650 GOTO 1190011900 GOTO 1121011950 GOTO 1120011990 ENDDEF12000 DEF COMPILEBIN(PRI):CALL MAKEBIN(COMPILEEXPR(PRI)):RET:ENDDEF12010 DEF COMPILEFLT(PRI):CALL MAKEFLT(COMPILEEXPR(PRI)):RET:ENDDEF12020 DEF COΡMPILESTR(PRI)12023 CALL MAKESTR(COMPILEEXPR(PRI)):RET:ENDDEF12030 DEF COMPILEBYT(PRI):CALL MAKEBYT(COMPILEEXPR(PRI)):RET:ENDDEF12100 DEF MAKEBIN(TYPE):IF TYPE=&2:PUT# &2,&67:ADDR=ADDR+112110 ELSEIF TYPE=&3:PUT# &2,&68:PUT# &2,&67:ADDR=ADDR+212112 E΢LSEIF TYPE=&4:PUT# &2,&135:ADDR=ADDR+1:ENDIF12115 RET:ENDDEF12200 DEF MAKEFLT(TYPE):IF TYPE=&1:PUT# &2,&66:ADDR=ADDR+112210 ELSEIF TYPE=&3:PUT# &2,&68:ADDR=ADDR+112212 ELSEIF TYPE=&4:PUT# &2,&135:PUT# &2,&66:ADDR=ADDR+2:ENDIF12215 RET:ENDDEF12300 ΣDEF MAKESTR(TYPE):IF TYPE=&1:PUT# &2,&66:PUT# &2,&69:ADDR=ADDR+212310 ELSEIF TYPE=&2:PUT# &2,&69:ADDR=ADDR+112312 ELSEIF TYPE=&4:PUT# &2,&135:PUT# &2,&66:PUT# &2,&69:ADDR=ADDR+3:ENDIF12315 RET:ENDDEF12400 DEF MAKEBYT(TYPE):IF TYPE=&1:PUT# &2,&134:ADΤDR=ADDR+112405 ELSEIF TYPE=&2:PUT# &2,&67:PUT# &2,&134:ADDR=ADDR+212410 ELSEIF TYPE=&3:PUT# &2,&68:PUT# &2,&67:PUT# &2,&134:ADDR=ADDR+3:ENDIF12415 RET:ENDDEF13000 DEF PARM(PM)13005 DECLARE:BINARY VR,L:BYTE TYPE,PHOLD,DIMN:ENDDECLARE13007 TYPE=VAR1Υ(PM,0):DIMN=VAR1(PM,1)13010 IF DSC(P)=&2:PHOLD=P:CALL REGETWORD:VR=TOVAR:IF VR=32767 THEN 1306013015 IF VAR1(VR,0)<>TYPE THEN 1306013020 IF DIMN=&0 AND VAR1(PM,2)<>&0 AND VAR1(PM,2)<>VAR1(VR,2) THEN 1306013025 IF DIMN<>VAR1(VR,1) THEN 3003313030Φ IF DIMN<>&0:FOR L=1 TO DIMN13035 IF (VAR2(PM,L)<>VAR2(VR,L)) AND VAR2(PM,L)<>0 THEN 3003413040 NEXT L:IF VAR1(PM,2)<>VAR1(VR,2) THEN 30035:ENDIF13045 PUT# &2,&87:DPUT# &2,VR*10:ADDR=ADDR+3:GOTO 1309913060 P=PHOLD:GOTO 1307013065 ELSEIF DSC(PΧ)=&013070 IF TYPE=&1:CALL COMPILEBIN(&0):PUT# &2,&8413075 ELSEIF TYPE=&2:CALL COMPILEFLT(&0):PUT# &2,&8513077 ELSEIF TYPE=&4:CALL COMPILEBYT(&0):PUT# &2,&13213080 ELSE:CALL COMPILESTR(&0):PUT# &2,&86:PUT# &2,VAR1(PM,2)13085 ADDR=ADDR+1:ENDIFΨ:ADDR=ADDR+113088 ELSE13090 PHOLD=P:CALL REGETWORD:VR=TOVAR:IF VR=32767 THEN 1306013092 P=PHOLD:IF VAR1(VR,0)<>TYPE THEN 1307013094 CALL COMPILEADR:PUT# &2,&95:ADDR=ADDR+113099 ENDIF:RET:ENDDEF13100 DEF TOSBR13105 DECLARE:BINARY SBR,L1:ENDDECLΩARE13110 SBR=3276713115 IF SUBPTR<>013120 FOR L1=0 TO SUBPTR-113125 IF WORD=SUBNAM(L1) AND SUBPR1(L1,6)=&1:SBR=L1:ENDIF13130 NEXT L1:ENDIF13135 RET SBR:ENDDEF13200 DEF TOVAR13205 DECLARE:BINARY VR,L1:ENDDECLARE13210 VR=3276713215 IF VARPTRΪ<>013220 FOR L1=0 TO VARPTR-113225 IF WORD=VARNAM(L1) AND VAR1(L1,3)=&1:VR=L1:ENDIF13230 NEXT L1:ENDIF13235 RET VR:ENDDEF13300 DEF GETLINE13305 DECLARE:BINARY L:ENDDECLARE13310 LINPUT# &1,LINE:PRINT# &3,LINE:P=113315 CALL GETWORD:L=VAL(WORD)Ϋ13320 LINEADR(LINEPTR,0)=L:LINEADR(LINEPTR,1)=ADDR:LINEPTR=LINEPTR+113325 RET:ENDDEF13400 DEF GETCOLON13405 CALL GETWORD:IF WORD=""13410 CALL GETLINE:CALL GETWORD:RET13415 ELSEIF WORD<>":":GOTO 3000913425 ELSE:CALL GETWORD:RET:ENDIF:ENDDEF13500ά DEF GETLEFT:CALL GETWORD13505 IF WORD<>"(" THEN 3000513510 RET:ENDDEF13550 DEF REGETLEFT:CALL REGETWORD:GOTO 13505:ENDDEF13600 DEF GETRIGHT:CALL GETWORD13605 IF WORD<>")" THEN 3000813610 RET:ENDDEF13650 DEF REGETRIGHT:CALL REGETWORD:GOTO 13605:EέNDDEF13700 DEF GETCOMMA:CALL GETWORD13705 IF WORD<>"," THEN 3000713710 RET:ENDDEF13750 DEF REGETCOMMA:CALL REGETWORD:GOTO 13705:ENDDEF14000 DEF COMPILEADR14005 DECLARE:BYTE D:BINARY L1,VR:ENDDECLARE14010 D=DSC(P):IF D=&0 THEN 3002014015 CALL GETήWORD:VR=TOVAR:IF VR=32767 THEN 3002114020 D=VAR1(VR,1):IF D<>&014025 CALL REGETLEFT:FOR L1=1 TO D:CALL COMPILEBIN(&0)14030 IF L1<>D:CALL REGETCOMMA:ELSE:CALL REGETWORD:ENDIF14040 NEXT L1:ENDIF14043 IF VAR1(VR,1)=&0 AND VAR1(VR,4)=&1:PUT# &2,&130:PίUT# &2,VR:PUT# &2,&014045 ELSE:PUT# &2,&3:DPUT# &2,VR*10:ENDIF:ADDR=ADDR+314050 RET:ENDDEF14100 DEF EXPRBIN(EXPRN):P=EXPR(EXPRN):CALL COMPILEBIN(&0):RET:ENDDEF14200 DEF EXPRFLT(EXPRN):P=EXPR(EXPRN):CALL COMPILEFLT(&0):RET:ENDDEF14300 DEF EXPRSTR(EXΰPRN):P=EXPR(EXPRN):CALL COMPILESTR(&0):RET:ENDDEF14400 DEF EXPRADR(EXPRN):P=EXPR(EXPRN):CALL COMPILEADR:RET:ENDDEF14450 DEF EXPRBYT(EXPRN):P=EXPR(EXPRN):CALL COMPILEBYT(&0):RET:ENDDEF14500 DEF EXPRLINE(EXPRN):DECLARE:BINARY V:ENDDECLARE14510 P=EXPR(αEXPRN):CALL GETWORD:IF CLASS<>&2 THEN 3000314515 V=VAL(WORD):DPUT# &2,V14520 CALL GETWORD:IF WORD<>":" AND WORD<>"" THEN 3000314525 RET:ENDDEF19000 DEF SCAN(EQFLAG)19005 DECLARE19010 BYTE PTEMP,D,D0,D1,T,PHOLD19015 ENDDECLARE19020 PHOLD=P:D=&2:Dβ0=&0:D1=&019025 CALL GETWORD:IF WORD=":" OR WORD="":RET 0:ENDIF19030 IF WORD="(":D0=&1:T=SCAN(&0):CALL GETRIGHT19035 ELSEIF CLASS=&1:PTEMP=P:CALL GETWORD19040 IF WORD="(":D1=&119045 T=SCAN(&0):CALL GETWORD:IF WORD="," THEN 1904519050 IF WORD<γ>")" THEN 3000819055 ELSE:GOTO 19075:ENDIF19060 ELSEIF CLASS=&7 OR CLASS=&2 OR CLASS=&3 OR CLASS=&9:D0=&119063 ELSEIF CLASS=&5:D0=&1:CALL GETWORD:GOTO 1903019065 ELSE:GOTO 30015:ENDIF19070 PTEMP=P:CALL GETWORD19075 IF WORD="=" AND EQFLAG=&1:GOTO δ1920019077 ELSEIF WORD=";":D0=&1:PTEMP=P:CALL GETWORD19078 IF WORD=":" OR WORD="" THEN 19200:D0=&1:GOTO 1903019080 ELSEIF CLASS=&4 OR CLASS=&5 OR CLASS=&6 OR WORD="AND" OR WORD="OR" OR WORD="EOR"19083 D0=&1:CALL GETWORD:GOTO 1903019085 ELSEIF WORεD="TO" OR WORD="STEP" OR WORD="THEN":GOTO 1920019090 ELSEIF WORD="," OR WORD=":" OR WORD="" OR WORD=")":GOTO 1920019095 ELSE:GOTO 30016:ENDIF19200 P=PTEMP:IF D0=&1:D=&0:ELSEIF D1=&1:D=&1:ENDIF19205 DSC(PHOLD)=D:RET &1:ENDDEF20000 DEF GETWORD20005 ζDECLARE:STRING(1) SYM20010 BYTE FLAG,L20015 ENDDECLARE20050 WORD="":P1=P:L=LEN(LINE)20054 IF P1>L THEN 2090020056 GOSUB 20950:IF SYM<>" " THEN 2006520058 P1=P1+&1:GOSUB 20950:IF SYM=" " THEN 2005820060 SIZES(P)=P1-P:P=P120065 IF SYM>="A" AND SYηM<="Z"20067 CLASS=&120070 WORD=WORD;SYM:P1=P1+&1:IF P1>L THEN 2090020075 GOSUB 2095020080 FLAG=(SYM>="A" AND SYM<="Z") OR (SYM>="0" AND SYM<="9")20085 FLAG=FLAG OR SYM="$" OR SYM="%" OR SYM="#" OR SYM="_"20090 IF FLAG THEN 2007020100 ELSEIFθ SYM>="0" AND SYM<="9"20105 CLASS=&220110 WORD=WORD;SYM:P1=P1+&1:IF P1>L THEN 2090020115 GOSUB 20950:IF SYM>="0" AND SYM<="9" THEN 2011020120 IF SYM="." OR SYM="E" THEN 2015520150 ELSEIF SYM="."20155 CLASS=&320160 WORD=WORD;SYM:P1=P1+&1:IF ιP1>L THEN 2090020165 GOSUB 20950:IF SYM>="0" AND SYM<="9" THEN 2016020170 IF SYM<>"E" THEN 2090020175 WORD=WORD;SYM:P1=P1+&1:IF P1>L THEN 3000020180 GOSUB 20950:IF SYM<>"+" AND SYM<>"-" THEN 2019520185 WORD=WORD;SYM:P1=P1+&1:IF P1>L THEN 30000κ20190 GOSUB 2095020195 IF SYM<"0" OR SYM>"9" THEN 3000020200 WORD=WORD;SYM:P1=P1+&1:IF P1>L THEN 2090020205 GOSUB 20950:IF SYM<"0" OR SYM>"9" THEN 2090020210 WORD=WORD;SYM:P1=P1+&120220 ELSEIF SYM="&":CLASS=&920225 WORD=WORD;SYM:P1=P1+&1:IFλ P1>L THEN 2090020230 GOSUB 20950:IF SYM>="0" AND SYM<="9" THEN 2022520250 ELSEIF SYM="<"20255 CLASS=&4:WORD=SYM:P1=P1+&1:IF P1>L THEN 2090020260 GOSUB 20950:IF SYM<>"=" AND SYM<>">" THEN 2090020265 WORD=WORD;SYM:P1=P1+&120270 ELSEIF SYM="="2μ0280 CLASS=&4:WORD=SYM:P1=P1+&120285 ELSEIF SYM=">"20290 CLASS=&4:WORD=SYM:P1=P1+&1:IF P1>L THEN 2090020295 GOSUB 20950:IF SYM<>"=" THEN 2090020300 WORD=WORD;SYM:P1=P1+&120305 ELSEIF SYM="+" OR SYM="-"20310 CLASS=&5:WORD=SYM:P1=P1+&120315 ELνSEIF SYM="*" OR SYM="/" OR SYM="^" OR SYM=";"20320 CLASS=&6:WORD=SYM:P1=P1+&120330 ELSEIF SYM=CHR(34)20335 CLASS=&7:WORD=SYM20340 P1=P1+&1:IF P1>L THEN 3000120345 GOSUB 20950:WORD=WORD;SYM:IF SYM<>CHR(34) THEN 2034020350 P1=P1+&120355 ELSEIFξ SYM="," OR SYM=":" OR SYM="(" OR SYM=")"20365 CLASS=&8:WORD=SYM:P1=P1+&120368 ELSE:GOTO 30002:ENDIF20900 SIZES(P)=P1-P:CLASSES(P)=CLASS:P=P1:P1=P1-&1:RET20950 SYM=MID(LINE,P1,&1):RETURN:ENDDEF21000 DEF REGETWORD21007 IF P<=LEN(LINE)21010 IF MIοD(LINE,P,&1)=" "21015 P=P+SIZES(P)21017 IF P>LEN(LINE) THEN 21030:ENDIF21020 WORD=MID(LINE,P,SIZES(P)):CLASS=CLASSES(P):P=P+SIZES(P)21025 P1=P-&1:RET21030 ELSE:WORD="":RET:ENDIF:ENDDEF30000 PRINT# &4,"000 Bad floating point number":GOTO 3010030001 PRINT# &4,"001 Bad string literal":GOTO 3010030002 PRINT# &4,"002 Bad character in line":GOTO 3010030003 PRINT# &4,"003 Bad line #":GOTO 3010030004 PRINT# &4,"004 'DEF' expected":GOTO 3010030005 PRINT# &4,"005 '(' expected":GOTO 3010030006 PRINT# &4,"006 Bad variable name":GOTO 3010030007 PRINT# &4,"007 ',' expected":GOTO 3010030008 PRINT# &4,"008 ')' expected":GOTO 3010030009 PRINT# &4,"009 ':' expected":GOTO 3010030010 PRINT# &4,"010 Bad string length":GOTO 3010030011 PRINT# &4,"011 Bad type":GOTO 3010030012 PRINT# &4,"012 Illegal or undeclared indentifier":GOTO 3010030013 PRINT# &4,"013 Bad dimension size":GOTO 3010030014 PRINT# &4,"014 Too many dimensions":GOTO 3010530015 PRINT# &4,"015 Constant/variable/function/unary op expected":GOTO 3010030016 PRINT# &4,"016 Binary op or end of expression expected":GOTO 3010030017 PRINT# &4,"017 Expression divider expected":GOTO 3010030018 PRINT# &4,"018 Undeclare procedure":GOTO 3010030019 PRINT# &4,"019 Procedure used as function":GOTO 3010030020 PRINT# &4,"020 Variable expected":GOTO 3010030021 PRINT# &4,"021 Identifier expected":GOTO 3010030022 PRINT# &4,"022 Incorrect # of expressions":GOTO 3010530023 PRINT# &4,"023 'THEN' expected":GOTO 3010030024 PRINT# &4,"024 '=' expected":GOTO 3010030025 PRINT# &4,"025 'STEP' expected":GOTO 3010030026 PRINT# &4,"026 'TO' expected":GOTO 3010030027 PRINT# &4,"027 Procedure name expected":GOTO 3010030028 PRINT# &4,"028 Phase error - invalid sysline":GOTO 3010030029 PRINT# &4,"029 Phase error - invalid line ";V:GOTO 3010030030 PRINT# &4,"030 Unrecognized command":GOTO 3010030031 PRINT# &4,"031 Nondescriptor":GOTO 3010530032 PRINT# &4,"032 TRAP ";ERR:GOTO 3200030033 PRINT# &4,"033 Mismatched # of dimensions":GOTO 3010030034 PRINT# &4,"034 Mismatched size of dimension":GOTO 3010030035 PRINT# &4,"035 Mismatched string size":GOTO 3010030036 PRINT# &4,"036 Invalid syntax of byte":GOTO 3010030037 PRINT# &4,"037 Nesting Error":GOTO 3200030100 PRINT# &4,"'";WORD;"' encountered"30105 PRINT# &4,LINE:IF P1<>0:FOR P=&1 TO P1:PRINT# &4,"-";:NEXT P:ENDIF30110 PRINT# &4,"$"32000 POKE 766,&032002 PRINT# &3,VARPTR;" variables":PRINT# &3,SUBPTR;" subprograms":CLOSE# &3:CLOSE# &432767 ENDIF CLASS=&2:PUT# &2,&1:V=VAL(WORD)100EF("HELP.HLP")2130 TRAP 02140 GOTO 22002150 TRAP 02160 CLOSE# &12180 OPEN# &1,&4,&0,F$OBJ("HELP.HLP")2200 TRAP 40003000 LINPUT# &1,LINE3010 IF LINE<>"" AND MID$(LINE,&1,&1)<>" "3020 TOPIC=LINE3030 ELSEIF LINE<>""3040 IF INSTR(LINE,HELP,&1)<>&03050 PRINT TOPIC;": ";LINE3060 ENDIF3070 ENDIF3080 GOTO 30004000 TRAP 04010 CLOSE# &19999 ENDSTRING(*)),F$OBJ(STRING(*))1990 ENDDECLARE2000 HELP=F$WORD2110 TRAP 21502120 OPEN# &1,&4,&0,F$D0 PRINT "VERIFY IS ON"1110 ELSEIF PEEK(1913)=&801120 PRINT "VERIFY IS OFF"1130 ELSE1140 PRINT "VERIFY IS INVALID"1150 ENDIF1160 ELSE1170 ERROR &641180 ENDIF1190 END=""1090 IF PEEK(1913)=&871101000 DEF MAIN1010 DECLARE1020 STRING(20) FILE1030 BYTE C1500 PROC P$CMD(STRING(*),BYTE)1900 ENDDECLARE1950 PRINT "Choose a configuration:"1960 PRINT2000 REM read the directory, picking those with one letter extensions2010 OPEN# &1,&6,&0,"D1:*.?"2020 INPUT# &1,FILE2030 WHILE LEN(FILE)<>162040 PRINT " ";MID$(FILE,&11,&3);MID$(FILE,&3,&8)2050 INPUT# &1,FILE2060 ENDWHILE2070 CLOSE# &13000 REM get a key3010 OPEN# &1,&4,&0,"K:"3020 PRINT3030 PRINT "Press a key> ";3040 GET# &1,C3050 PRINT CHR$(C)3060 CLOSE# &14000 REM BATCH the selected file4010 CALL P$CMD("$ BATCH *.";CHR$(C),&1)9000 END PRINT2000 REM read the directory, picking those with one letter extensions2010