REM Acorn Invaders
REM Packed by Make v1.41 15/5/08 On 21 Jul 2008
ONERRORPROCy:END
MODE28:OFF:a$="Acorn Invaders. (c)2008 DynaByte Software":PRINTa$:PRINTSTRING$(LEN(a$),"-"):PRINT:k$="<Invaders$Dir>.Resources.":l$=k$+"Graphics.":b$=k$+"Data.":r$=k$+"Sound.":aa%=FALSE:PRINT"Checking files...":IFNOTFNj(l$+"Gfx0","Sprites")THENaa%=TRUE
IFNOTFNj(l$+"Gfx1","Charset")THENaa%=TRUE
IFNOTFNj(r$+"Intro","Music")THENaa%=TRUE
IFNOTFNj(b$+"Creds","Credits")THENaa%=TRUE
IFNOTFNj(b$+"Msg","Messages")THENaa%=TRUE
IFNOTFNj(b$+"ImgLUT","Lookups")THENaa%=TRUE
IFNOTFNj(b$+"SWIs","Lookups")THENaa%=TRUE
IFaa%THENERROR255,"File Missing!!"
PRINT:PRINT"Loading Messages...";:ba%=FNs(b$+"Msg","SGSM"):DIMf%(ba%),b$(ba%):PROCk(b$+"Msg","SGSM",f%(),b$()):PRINTFNa(14):PRINTFNa(9)+" "+FNa(3);:ca%=FNs(b$+"ImgLUT","TULI"):DIMg%(ca%),c$(ca%):PROCk(b$+"ImgLUT","TULI",g%(),c$()):PRINTFNa(14)
PRINTFNa(9)+" "+FNa(13);:da%=FNs(b$+"SWIs","TULS"):DIMh%(da%),d$(da%):PROCk(b$+"SWIs","TULS",h%(),d$()):PRINTFNa(14):PRINT:PRINTFNa(12):PRINTFNa(8)+" "+FNa(2):PROCz:k%=FNg(FNe(48),0):k%!0=1:k%!4=-1:k%!40=FNv(0):IFk%!40=-1THENERROR255,FNa(109)
PRINTFNa(15)+STR$(k%!40):aa%=FALSE:k%!44=TRUE:ea%=0:DIMa$(10),c%(10):DIMd%(10):PRINTFNa(8)+" "+FNa(22):b%=0:a%=4:e%=8:m%=12:M%=16:N%=20:B%=24:`%=28:fa%=32:ga%=36:ha%=40:ia%=44:ja%=48:ka%=52:la%=56:ma%=60:na%=64
oa%=16:pa%=20:qa%=24:W%=28:U%=32:ra%=16:sa%=20:PRINT:PRINTFNa(8)+" "+FNa(1)+" ";:ta%=0:SYSFNc(30)TOta%:PRINTFNa(21)+" "+STR$(ta%/100):k%!4=FNA(r$+"Intro"):PRINT:PRINTFNa(17)+" "+FNa(16):SYSFNc(1),,FNc(2)TOua%:PRINTFNa(9)+" "+FNa(4);:va%=FNw(l$+"Gfx0"):PRINTFNa(14)
PRINTFNa(9)+" "+FNa(5);:wa%=FNw(l$+"Gfx1"):PRINTFNa(14):xa%=va%:PRINT:PRINTFNa(9)+" "+FNa(6);:R%=OPENIN(b$+"Creds"):INPUT#R%,i$:IFi$<>"DERC"THEN
CLOSE#R%:ERROR255,FNa(101):END
ENDIF
INPUT#R%,ea%:DIMe$(ea%),e%(ea%):FORi%=1TOea%:INPUT#R%,e%(i%),e$(i%):NEXTi%:CLOSE#R%:PRINTFNa(14):PRINT:PRINTFNa(7):t$=b$+"HiTable":IFFNq(t$)<>1THEN
IFNOTFNx(0,k$)THEN
k%!44=FALSE:PRINTFNa(19)+" "+FNa(10)+" "+FNa(20)
ELSE:PRINTFNa(19)+" "+FNa(11)+" "+FNa(20)
ENDIF
PROCA(k%!44)
ELSE:IFNOTFNx(1,t$)THEN
k%!44=FALSE:PRINTFNa(18)+" "+FNa(10)+" "+FNa(20)
ELSE:PRINTFNa(18)+" "+FNa(11)+" "+FNa(20)
ENDIF
PROCB
ENDIF
PRINT:PRINTFNa(12):PROCe(150):f%=FNe(36):Q%=FNe(24):K%=FNe(16):CLS:PROCp:f%!W%=FNd(8,1):f%!U%=FNd(8,2)+7:Q%!e%=FNd(6,1):Q%!m%=FNd(6,2):Q%!ra%=f%!m%-50:Q%!sa%=30:SYSFNc(33),k%!4:SYSFNc(36),k%!4,128:WHILENOTFNB:CLS:PROCC:ENDWHILE
CLS:K%!e%=220:K%!m%=40:K%=FNt(K%,f%):K%!a%-=3:PROCl(K%):PROCq(FNa(31),10):IFk%!0=1THEN
SYSFNc(36),k%!4,-1TO,ya%:FORi%=ya%TO0STEP-2:SYSFNc(36),k%!4,i%:PROCe(4):NEXTi%:SYSFNc(35),k%!4:SYSFNc(32),k%!4:k%!4=-1
ENDIF
PROCr:END
DEFFNB:LOCALi%,H%,I%,v%,O%,h%,V%,za%,Aa%:LOCALo%,S%,Ba%,Ca%,Da%,X%,Ea%,Fa%,Ga%:LOCALx%,y%,J%,Ha%,s$,a$:Ha%=44:H%=FNg(FNe(16),0):I%=FNg(FNe(16),0):v%=FNg(FNe(16),0):h%=FNg(FNe(16),0):V%=FNg(FNe(16),0):S%=FNg(FNe(16),0):o%=FNg(FNe(16),0)
H%!e%=FNd(100,1):H%!m%=FNd(40,2):H%!b%=FNh(H%,f%):H%!a%=800:I%!e%=FNd(150,1):I%!m%=FNd(40,2):I%!b%=FNh(I%,f%):I%!a%=H%!a%-I%!m%:v%!e%=720:v%!m%=500:v%!b%=FNh(v%,f%):v%!a%=200:h%!e%=FNd(40,1):h%!m%=FNd(20,2)
h%!b%=(v%!b%+v%!e%/2)-150:h%!a%=(v%!a%+v%!m%)-125:o%!e%=FNd(30,1):o%!m%=FNd(15,2):V%!e%=FNd(20,1):V%!m%=FNd(20,2):V%!b%=(v%!b%+v%!e%/2)-150:V%!b%+=FNh(V%,h%):za%=FNf(V%):Aa%=FNf(V%)::Aa%!a%=h%!a%-40-Aa%!m%:za%!a%=Aa%!a%-40-za%!m%
V%!a%=za%!a%-40-V%!m%:S%!e%=FNd(20,1):S%!m%=FNd(20,2):S%!b%=(v%!b%+v%!e%/2)-120:Ba%=FNf(S%):Ca%=FNf(S%):Da%=FNf(S%):Da%!b%=v%!b%:Ia%=FNf(Da%):Ea%=FNf(Da%):X%=FNf(S%):X%!b%=v%!b%:X%!b%+=(v%!e%/2)+10
Fa%=FNf(X%):Ga%=FNf(X%)::S%!a%=(v%!a%+v%!m%)-120:Ba%!a%=S%!a%-60:Ca%!a%=Ba%!a%-60:Ea%!a%=Ca%!a%-90:Ia%!a%=Ea%!a%-60:Da%!a%=Ia%!a%-60:X%!a%=Ca%!a%-90:Fa%!a%=X%!a%-60:Ga%!a%=Fa%!a%-60:CLS:PROCf(Q%!ra%):PROCf(Q%!sa%)
FORi%=0-H%!e%TOH%!b%STEP5:WAIT:PROCa(FNb(100),i%,H%!a%):PROCe(1):NEXTi%:FORi%=f%!e%TOI%!b%STEP-5:WAIT:PROCa(FNb(101),i%,I%!a%):PROCe(1):NEXTi%:a$=FNa(32):O%=LEN(a$)*f%!W%:y%=170:PROCb(FNk(O%,f%!e%),y%,a$,11):a$=FNa(33):O%=LEN(a$)*f%!W%:y%-=f%!U%
PROCb(FNk(O%,f%!e%),y%,a$,11):WHILENOTINKEY(-99)ANDNOTINKEY(-17)ANDNOTINKEY(-82):y%=v%!a%+v%!m%:FORi%=1TOea%:a$=FNo(e$(i%)):x%=FNi(a$):CASEe%(i%)OF
WHEN-1:y%-=f%!U%
WHEN-2:y%-=(2*f%!U%)
OTHERWISE:y%-=e%(i%)
ENDCASE
PROCb(x%,y%,a$,0):NEXTi%:J%=FNr:IFJ%=1THEN=TRUE
IFJ%=2THEN=FALSE
PROCd(v%):a$=FNa(57)+" "+FNa(34):x%=FNi(a$):y%=v%!a%+v%!m%-20:PROCb(x%,y%,a$,0):a$=FNa(35):y%-=f%!U%:x%=FNi(a$):PROCb(x%,y%,a$,0):x%=h%!b%+h%!e%+10:PROCa(FNb(11),h%!b%,h%!a%):a$=FNa(36)+" "+FNa(40):PROCb(x%,h%!a%+10,a$,0)
PROCa(FNb(24),Aa%!b%,Aa%!a%):a$=FNa(37)+" "+FNa(40):PROCb(x%,Aa%!a%+12,a$,0):PROCa(FNb(22),za%!b%,za%!a%):a$=FNa(38)+" "+FNa(40):PROCb(x%,za%!a%+12,a$,0):PROCa(FNb(20),V%!b%,V%!a%):a$=FNa(39)+" "+FNa(40):PROCb(x%,V%!a%+12,a$,0)
O%=o%!e%/f%!W%+2:s$=FNa(66):a$=s$+STRING$(O%," ")+FNa(67):x%=FNi(a$):y%=V%!a%-(3*f%!U%):PROCb(x%,y%,a$,0):o%!b%=x%+7+(LEN(s$)*f%!W%):o%!a%=y%:PROCa(FNb(1),o%!b%,o%!a%):J%=FNr:IFJ%=1THEN=TRUE
IFJ%=2THEN=FALSE
PROCd(v%):a$=FNa(41):x%=FNi(a$):y%=v%!a%+v%!m%-20:PROCb(x%,y%,a$,0):x%=S%!b%+S%!e%+10:PROCa(FNb(102),S%!b%,S%!a%):a$=FNa(42)+" "+FNa(43):PROCb(x%,S%!a%+12,a$,0):PROCa(FNb(103),Ba%!b%,Ba%!a%):a$=FNa(42)+" "+FNa(44):PROCb(x%,Ba%!a%+12,a$,0)
PROCa(FNb(104),Ca%!b%,Ca%!a%):PROCb(x%,Ca%!a%+12,FNa(45),0):x%=Da%!b%+Da%!e%+10:PROCa(FNb(105),Ia%!b%,Ia%!a%):a$=FNa(46)+" "+FNa(49):PROCb(x%,Ia%!a%+12,a$,0):PROCa(FNb(117),Ea%!b%,Ea%!a%):PROCb(x%,Ea%!a%+12,FNa(76),0)
PROCa(FNb(107),Da%!b%,Da%!a%):a$=FNa(48)+" "+FNa(49):PROCb(x%,Da%!a%+12,a$,0):x%=X%!b%+X%!e%+10:PROCa(FNb(106),X%!b%,X%!a%):a$=FNa(47)+" "+FNa(73):PROCb(x%,X%!a%+12,a$,0):PROCa(FNb(115),Fa%!b%,Fa%!a%):a$=FNa(47)+" "+FNa(77)+" ":a$+=FNa(74)
PROCb(x%,Fa%!a%+12,a$,0):PROCa(FNb(116),Ga%!b%,Ga%!a%):a$=FNa(47)+" "+FNa(77)+" ":a$+=FNa(75):PROCb(x%,Ga%!a%+12,a$,0):J%=FNr:IFJ%=1THEN=TRUE
IFJ%=2THEN=FALSE
PROCd(v%):a$=FNa(50):IFk%!Ha%THENa$=FNa(51)
x%=FNi(a$):y%=v%!a%+v%!m%-20:PROCb(x%,y%,a$,0):a$=FNa(58)+" "+FNa(52):x%=FNi(a$):y%-=f%!U%:PROCb(x%,y%,a$,0):y%=(v%!a%+v%!m%)-100:a$=" "+FNa(68)+"  "+FNa(69):a$+=STRING$(12," ")+FNa(57)+".":a$+=STRING$(3," ")+FNa(60)+".":x%=FNi(a$):PROCb(x%,y%,a$,0):y%-=2*f%!U%
FORi%=1TO10:IFi%<10THEN
a$="  "+STR$(i%)+".  "
ELSE:a$=" "+STR$(i%)+".  "
ENDIF
s$=FNo(a$(i%)):a$+=FNl(s$,8," ",FALSE):a$+=" .... ":a$+=FNy(STR$(c%(i%)),10):a$+=" ... "+FNy(STR$(d%(i%)),3):x%=FNi(a$):PROCb(x%,y%-(i%*(f%!U%+5)),a$,0):NEXTi%:J%=FNr:IFJ%=1THEN=TRUE
IFJ%=2THEN=FALSE
PROCd(v%):ENDWHILE:ERROR255,FNa(102):=FALSE
DEFFNr:LOCALt%,J%:t%=TIME+750:J%=FALSE:REPEAT:IFINKEY(-82)THENPROCs
IFINKEY(-102)THENPROCt
IFINKEY(-59)THENPROCj(4)
IFINKEY(-60)THENPROCj(-4)
UNTILTIME>=t%ORINKEY(-17)ORINKEY(-99):IFINKEY(-17)THENJ%=1
IFINKEY(-99)THENJ%=2
IFJ%THEN
PROCc(H%):PROCc(I%):PROCc(v%):PROCc(h%):PROCc(V%):PROCc(za%):PROCc(Aa%):PROCc(S%):PROCc(Ba%):PROCc(Ca%):PROCc(Da%):PROCc(X%):PROCc(Ia%):PROCc(Ea%):PROCc(Fa%):PROCc(Ga%):PROCc(o%)
ENDIF
=J%
DEFFNi(a$):LOCALO%:O%=LEN(a$)*f%!W%:=v%!b%+FNk(O%,v%!e%)
DEFPROCC:LOCALo%,q%,h%,d%,w%:LOCALF%:LOCALb%(),a%():LOCALJa%,Ka%,La%,Ma%:LOCALY%,Na%,Oa%:LOCALPa%:LOCALQa%,Ra%,Sa%,Ta%,Ua%:LOCALVa%,O%,a$,x%,y%,i%,j%:o%=FNe(32):q%=FNe(28):h%=FNe(48):d%=FNe(68):F%=FNe(16):w%=FNg(FNe(16),0):DIMb%(10,6),a%(7)
Ja%=0:Ka%=4:La%=8:Ma%=12:Pa%=16:Y%=28:Qa%=ga%:Ra%=ha%:Sa%=ia%:Ta%=la%:Ua%=ma%:o%!e%=FNd(30,1):o%!m%=FNd(15,2):o%!b%=FNh(o%,f%):o%!a%=50:o%!N%=6:o%!M%=o%!N%:F%!e%=FNd(20,1):F%!m%=FNd(20,2)
h%!e%=FNd(40,1):h%!m%=FNd(20,2):h%!a%=Q%!ra%-(10+h%!m%):h%!N%=5:h%!B%=FALSE:h%!ha%=1:q%!e%=FNd(5,1):q%!m%=FNd(20,2):q%!B%=FALSE:q%!N%=10:w%!La%=1:w%!Ja%=3:w%!Ma%=FALSE:k%!Pa%=-1:d%!Qa%=FNd(20,1):d%!Ra%=10:d%!Sa%=6:d%!B%=TRUE:d%!Ua%=4
SYSFNc(6)TOd%!na%:FORi%=1TO7:a%(i%)=FNe(48):PROCu(a%(i%),0):a%(i%)!e%=FNd(5,1):a%(i%)!m%=FNd(20,2):SYSFNc(6)TOa%(i%)!ha%:SYSFNc(6)TOa%(i%)!ia%:NEXTi%:PROCf(Q%!ra%):PROCf(Q%!sa%):PROCD(0,c%(1),w%!Ja%,w%!La%):PROCE:PROCa(FNb(1),o%!b%,o%!a%)
WHILEw%!Ja%>0:Va%=FALSE:IFk%!Y%=0THEN
IFINKEY(-74)THENPROCF(o%!b%,o%!a%)
IFINKEY(-98)THENPROCG:Va%=TRUE
IFINKEY(-67)THENPROCH:Va%=TRUE
IFINKEY(-17)THENPROCI
ENDIF
IFINKEY(-102)THENPROCt
IFINKEY(-82)THENPROCs
IFINKEY(-56)THENPROCJ
IFINKEY(-59)THENPROCj(4)
IFINKEY(-60)THENPROCj(-4)
IFk%!Y%=0THEN
IFVa%THEN
o%!b%+=o%!M%:PROCa(FNb(1),o%!b%,o%!a%)
ENDIF
ENDIF
IFk%!Y%=0THEN
PROCK:PROCL:PROCM:PROCN:PROCO
ELSE:PROCP
ENDIF
WAIT:ENDWHILE:K%!e%=240:K%!m%=40:K%=FNt(K%,f%):K%!a%-=3:PROCd(K%):PROCl(K%):a$=FNa(49)+" "+FNa(53):PROCq(a$,11):PROCe(750):IFNOTw%!Ma%THEN
IFw%!Ka%>=c%(10)THEN
PROCQ(w%)
ENDIF
ENDIF
PROCc(o%):PROCc(d%):PROCc(h%):PROCc(q%):PROCc(w%):PROCc(F%):FORi%=1TO7:PROCc(a%(i%)):NEXTi%:ENDPROC
DEFPROCG:IFo%!b%<=0THEN
o%!b%=0
ELSE:o%!M%=0-o%!N%
ENDIF
ENDPROC
DEFPROCH:IFo%!b%>=f%!e%-o%!e%THEN
o%!b%=f%!e%-o%!e%
ELSE:o%!M%=0+o%!N%
ENDIF
ENDPROC
DEFPROCF(x%,y%):IFNOTq%!B%THEN
q%!B%=TRUE:q%!b%=x%+(o%!e%/2):q%!a%=y%+o%!m%:PROCg(4)
ENDIF
ENDPROC
DEFPROCs:LOCALWa%,u$:Wa%=40:REPEAT:UNTILNOTINKEY(-82):k%!Wa%=FNv(k%!Wa%):IFk%!Wa%=-1THENERROR255,FNa(109)
u$="<Invaders$Dir>.Screens.Dump"+STR$(k%!Wa%):OSCLI"ScreenSave "+u$:ENDPROC
DEFPROCI:LOCALi%:FORi%=1TO7:a%(i%)!B%=FALSE:NEXTi%:w%!Ja%=0:w%!Ma%=TRUE:ENDPROC
DEFPROCt:LOCALXa%,Ya%:Xa%=0:Ya%=4:REPEAT:UNTILNOTINKEY(-102):k%!Xa%+=1:IFk%!Xa%>2THENk%!Xa%=0
IFk%!Xa%=1THEN
SYSFNc(33),k%!Ya%
ELSE:SYSFNc(34),k%!Ya%
ENDIF
ENDPROC
DEFPROCj(Za%):LOCALXa%,Ya%,_a%,C%,ya%,`a%:Xa%=0:Ya%=4:_a%=8:IFk%!Xa%=1THEN
SYSFNc(6)TOC%:IFC%-k%!_a%>=10THEN
SYSFNc(36),k%!Ya%,-1TO,ya%:`a%=ya%+Za%:IF`a%>=0AND`a%<=128THEN
SYSFNc(36),k%!Ya%,`a%:k%!_a%=C%
ENDIF
ENDIF
ENDIF
ENDPROC
DEFPROCJ:LOCALY%,Na%,a$:Y%=28:Na%=32:REPEATUNTILNOTINKEY(-56):a$=FNa(49)+" "+FNa(61):k%!Y%=FNm(k%!Y%):k%!Na%=k%!Y%:IFk%!Y%=0THEN
a$=STRING$(LEN(a$)," "):PROCm(a$)
ENDIF
ENDPROC
DEFPROCK:IFq%!B%THEN
IFq%!a%>=Q%!ra%-q%!m%THEN
q%!B%=FALSE:q%!a%-=2:PROCd(q%)
ELSE:PROCa(FNb(5),q%!b%,q%!a%)
ENDIF
q%!a%+=q%!N%
ENDIF
ENDPROC
DEFPROCL:LOCALab%,bb%,cb%,C%,db%,d$:ab%=fa%:bb%=ga%:cb%=ha%:IFNOTh%!B%THEN
IFFNn(4)ANDFNn(5)THEN
h%!B%=TRUE:h%!`%=FALSE:h%!bb%=0:IFFNn(50)THEN
h%!M%=0-h%!N%:h%!b%=f%!e%
ELSE:h%!M%=0+h%!N%:h%!b%=0-h%!e%
ENDIF
ENDIF
ELSE:IFh%!b%<=0-h%!e%ANDSGN(h%!M%)=-1THEN
h%!ab%=FALSE:h%!B%=FALSE:ENDPROC
ENDIF
IFh%!b%>f%!e%ANDSGN(h%!M%)=1THEN
h%!ab%=FALSE:h%!B%=FALSE:ENDPROC
ENDIF
IFNOTh%!`%THEN
IFFNp(q%,h%)THEN
PROCd(q%):PROCa(FNb(12),h%!b%,h%!a%):SYSFNc(6)TOh%!ab%:h%!`%=TRUE:q%!B%=FALSE:PROCh(500)
ENDIF
ELSE:IFFNp(q%,h%)THEN
PROCd(q%):q%!B%=FALSE
ENDIF
ENDIF
IFNOTh%!`%THEN
SYSFNc(6)TOC%:IFC%-h%!cb%>=40THEN
h%!cb%=C%:h%!bb%=FNm(h%!bb%)
ENDIF
d$=FNb(10)+STR$(h%!bb%):PROCa(d$,h%!b%,h%!a%):h%!b%+=h%!M%
ELSE:SYSFNc(6)TOC%:db%=C%-h%!ab%:IFdb%>=300THEN
h%!B%=FALSE:h%!bb%=1:PROCd(h%)
ELSE:IFdb%>=250THEN
PROCa(FNb(15),h%!b%,h%!a%)
ELSE:IFdb%>=200THEN
PROCa(FNb(14),h%!b%,h%!a%)
ELSE:IFdb%>=100THEN
PROCa(FNb(13),h%!b%,h%!a%)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
DEFPROCM:LOCALeb%,z%,G%,L%,fb%,gb%,hb%,Z%:LOCALP%,ib%,jb%,C%,kb%:P%=fa%:ib%=ja%:jb%=ka%:kb%=na%:SYSFNc(6)TOC%:IFC%-d%!kb%>=50THEN
d%!kb%=C%:d%!P%=FNm(d%!P%)
ENDIF
eb%=d%!b%+d%!e%:Z%=0-((d%!ib%-1)*(F%!e%+d%!Qa%)):IFeb%>=f%!e%THEN
d%!M%=0-d%!N%:PROCv
ENDIF
IFd%!b%<=Z%THEN
d%!M%=0+d%!N%:PROCv
ENDIF
Z%=d%!a%+((d%!Ta%-1)*F%!m%):IFZ%<=o%!a%+o%!m%THEN
PROCR:ENDPROC
ENDIF
IFFNp(q%,d%)THEN
z%=F%!e%+d%!Qa%:IF(q%!b%-d%!b%)MODz%<=F%!e%THEN
G%=((q%!a%-d%!a%)DIVF%!m%)+1:L%=((q%!b%-d%!b%)DIVz%)+1:IFSGN(b%(L%,G%))=1THEN
b%(L%,G%)=-5:PROCd(q%):q%!B%=FALSE:d%!`%+=1:PROCg(1):CASEG%OF
WHEN1,2:PROCh(50)
WHEN3,4:PROCh(75)
WHEN5,6:PROCh(100)
ENDCASE
ENDIF
ENDIF
ENDIF
IFd%!`%>=d%!Ra%*d%!Sa%THEN
w%!La%+=1:PROCd(d%):PROCf(Q%!sa%):PROCi(w%!Ja%):PROCn(w%!La%):PROCa(FNb(1),o%!b%,o%!a%):PROCw
ENDIF
fb%=TRUE:gb%=TRUE:FORG%=1TOd%!Sa%:IFb%(d%!jb%,G%)<>0THENfb%=FALSE
IFb%(d%!ib%,G%)<>0THENgb%=FALSE
NEXTG%:hb%=TRUE:FORL%=1TOd%!Ra%:IFb%(L%,d%!Ta%)<>0THENhb%=FALSE
NEXTL%:IFgb%THENd%!ib%+=1
IFfb%THEN
d%!e%-=(F%!e%+d%!Qa%):d%!jb%-=1
ENDIF
IFhb%THENd%!Ta%+=1
d%!b%+=d%!M%:PROCo:ENDPROC
DEFPROCN:LOCALP%,lb%,db%,mb%,i%,j%,x%,y%:LOCALnb%,ob%,d$,p$,pb%,C%:P%=fa%:lb%=ga%:db%=ha%:qb%=ia%:FORi%=1TO7:IFNOTa%(i%)!B%THEN
nb%=RND(10):ob%=w%!La%+5:IFob%>100THEN
ob%=100:IFw%!La%MOD10=0THENd%!Ua%+=1
ENDIF
IFFNn(ob%)ANDFNn(d%!Ua%)THEN
IFb%(nb%,d%!Ta%)>0THEN
x%=d%!b%+(nb%-1)*(F%!e%+d%!Qa%):y%=d%!a%+((d%!Ta%-1)*F%!m%)-F%!m%:pb%=(F%!e%/2)-(a%(i%)!e%/2):a%(i%)!b%=x%+pb%:a%(i%)!a%=y%:a%(i%)!B%=TRUE:a%(i%)!`%=FALSE:a%(i%)!lb%=1:a%(i%)!P%=0:mb%=4:IFFNn(25)THENa%(i%)!lb%=2:mb%=mb%/2
a%(i%)!N%=mb%:a%(i%)!M%=a%(i%)!N%:PROCg(3)
ENDIF
ENDIF
ELSE:SYSFNc(6)TOC%:IFC%-a%(i%)!qb%>=40THEN
a%(i%)!qb%=C%:a%(i%)!P%+=1
ENDIF
IFa%(i%)!lb%=1ANDa%(i%)!P%>1THEN
a%(i%)!P%=0
ENDIF
IFa%(i%)!lb%=2ANDa%(i%)!P%>3THEN
a%(i%)!P%=0
ENDIF
p$=STR$(a%(i%)!P%):IFa%(i%)!lb%=2ANDa%(i%)!P%=3THENp$="1"
d$=FNb(30)+STR$(a%(i%)!lb%)+p$:IFNOTa%(i%)!`%THEN
a%(i%)!a%-=a%(i%)!M%:PROCa(d$,a%(i%)!b%,a%(i%)!a%)
ELSE:d$=FNb(30)+"3":PROCa(d$,a%(i%)!b%,a%(i%)!a%)
ENDIF
IFa%(i%)!a%<=Q%!sa%+(Q%!m%+5)THEN
a%(i%)!B%=FALSE:PROCd(a%(i%))
ENDIF
IFFNp(a%(i%),o%)ANDa%(i%)!B%THEN
PROCg(2):FORj%=1TO3:PROCa(FNb(2)+STR$(j%),o%!b%,o%!a%):PROCe(20):WAIT:NEXTj%:PROCd(o%):IFq%!B%THEN
PROCd(q%):q%!B%=FALSE
ENDIF
o%!b%=FNh(o%,f%):w%!Ja%-=1:PROCi(w%!Ja%):PROCd(a%(i%)):a%(i%)!B%=FALSE:PROCa(FNb(1),o%!b%,o%!a%)
ENDIF
IFFNp(q%,a%(i%))THEN
IFa%(i%)!lb%=1THEN
IFNOTa%(i%)!`%THEN
a%(i%)!`%=TRUE:PROCh(5):d$=FNb(30)+"3":PROCa(d$,a%(i%)!b%,a%(i%)!a%):SYSFNc(6)TOa%(i%)!db%
ENDIF
ENDIF
PROCd(q%):q%!B%=FALSE
ENDIF
IFa%(i%)!`%THEN
SYSFNc(6)TOC%:IFC%-a%(i%)!db%>=40THEN
PROCd(a%(i%)):a%(i%)!B%=FALSE
ENDIF
ENDIF
ENDIF
NEXTi%:ENDPROC
DEFPROCP:LOCALY%,Na%,Oa%,C%,a$:Y%=28:Na%=32:Oa%=36:SYSFNc(6)TOC%:IFC%-k%!Oa%>=50THEN
k%!Na%=FNm(k%!Na%):k%!Oa%=C%
ENDIF
a$=FNa(49)+" "+FNa(61):IFk%!Na%=0ORk%!Y%=0THEN
a$=STRING$(LEN(a$)," ")
ENDIF
PROCm(a$):ENDPROC
DEFPROCO:LOCALPa%,rb%,sb%,C%,a$:Pa%=16:rb%=20:sb%=24:IFk%!Pa%>=0THEN
SYSFNc(6)TOC%:a$=FNa(66)+" "+FNa(72):IFC%-k%!sb%>=50THEN
k%!sb%=C%:k%!rb%=FNm(k%!rb%):IFk%!rb%=1THENk%!Pa%+=1
ENDIF
IFk%!rb%=0THEN
a$=STRING$(LEN(a$)," ")
ENDIF
IFk%!Pa%>5THEN
a$=STRING$(LEN(a$)," "):k%!Pa%=-1
ENDIF
PROCm(a$)
ENDIF
ENDPROC
DEFPROCA(tb%):LOCALi%,n$:FORi%=1TO10:IFi%MOD2=0THENn$=FNa(71)ELSEn$=FNa(70)
a$(i%)=FNo(n$):c%(i%)=(11-i%)*1000:d%(i%)=0:NEXTi%:IFtb%THENPROCx
ENDPROC
DEFPROCB:LOCALi%,ub%:ub%=OPENIN(b$+"HiTable"):FORi%=1TO10:INPUT#ub%,a$(i%),c%(i%):INPUT#ub%,d%(i%):NEXTi%:CLOSE#ub%:ENDPROC
DEFPROCx:LOCALi%,ub%:ub%=OPENOUT(b$+"HiTable"):FORi%=1TO10:PRINT#ub%,a$(i%),c%(i%):PRINT#ub%,d%(i%):NEXTi%:CLOSE#ub%:ENDPROC
DEFPROCQ(w%):LOCALI%,H%,vb%,g%,i%,wb%,O%,x%,y%,a$:LOCALHa%:H%=FNe(16):I%=FNe(16):Ha%=44:H%!e%=FNd(100,1):H%!m%=FNd(40,2):H%!b%=FNh(H%,f%):H%!a%=800:I%!e%=FNd(150,1):I%!m%=FNd(40,2):I%!b%=FNh(I%,f%):I%!a%=H%!a%-I%!m%:wb%=0:FORi%=10TO1STEP-1
IFw%!Ka%>=c%(i%)THENwb%=i%
NEXTi%:FORi%=9TOwb%STEP-1:a$(i%+1)=a$(i%):c%(i%+1)=c%(i%):d%(i%+1)=d%(i%):NEXTi%:c%(wb%)=w%!Ka%:d%(wb%)=w%!La%:CLS:PROCf(Q%!ra%):PROCf(Q%!sa%):PROCa(FNb(100),H%!b%,H%!a%):PROCa(FNb(101),I%!b%,I%!a%):a$=FNa(54)+" "+STR$(w%!Ka%)
a$+=" "+FNa(55)+" "+STR$(wb%)+FNC(wb%):O%=LEN(a$)*f%!W%:x%=FNk(O%,f%!e%):y%=I%!a%-170:PROCb(x%,y%,a$,0):PROCc(H%):PROCc(I%):K%!e%=165:K%!m%=40:K%=FNt(K%,f%):PROCl(K%):x%=K%!b%+20:y%=K%!a%+12:a$="":i%=1:vb%=FALSE
OSCLI"FX 21,0":REPEAT:g%=GET:CASEg%OF
WHEN13:vb%=TRUE
WHEN8:i%-=1:a$=LEFT$(a$,i%-1)
OTHERWISE:IFi%<9ANDFND(g%)THENi%+=1:a$+=CHR$(g%)
ENDCASE
IFi%<1THENi%=1
PROCb(x%,y%,STRING$(8," "),0):IFa$=""THEN
PROCb(x%,y%," ",0)
ELSE:PROCb(x%,y%,a$,0)
ENDIF
UNTILvb%:IFa$=""ORa$=" "THENa$=FNa(56)
a$(wb%)=FNo(a$):IFk%!Ha%THENPROCx
ENDPROC
DEFFND(xb%):LOCALyb%:yb%=FALSE:IFxb%>=32ANDxb%<=126THENyb%=TRUE
=yb%
DEFPROCD(zb%,Ab%,l%,r%):LOCALx%,a$:a$=FNa(57)+" "+FNa(59):a$+=FNl(STR$(zb%),10," ",TRUE):PROCb(0,f%!m%-f%!U%,a$,0):a$=FNa(58)+" "+FNa(57):a$+=" "+FNa(59)+FNl(STR$(Ab%),10," ",TRUE):x%=f%!e%-LEN(a$)*f%!W%:PROCb(x%,f%!m%-f%!U%,a$,0):PROCi(l%):PROCn(r%):ENDPROC
DEFPROCi(Wa%):LOCALa$:PROCa(FNb(1),0,0):a$=" = "+STR$(Wa%):PROCb(o%!e%,0,a$,0):ENDPROC
DEFPROCn(Wa%):LOCALx%,a$:a$=FNa(60)+" "+FNa(59):a$+=FNl(STR$(Wa%),3,"0",TRUE):x%=f%!e%-LEN(a$)*f%!W%:PROCb(x%,0,a$,0):ENDPROC
DEFPROCm(a$):LOCALx%,y%,O%:O%=LEN(a$)*f%!W%:x%=FNk(O%,f%!e%):y%=f%!m%-f%!U%:PROCb(x%,y%,a$,0):ENDPROC
DEFPROCh(Bb%):LOCALCb%,Pa%,x%,a$:Cb%=12:Pa%=16:w%!Ka%+=Bb%:a$=FNa(57)+" "+FNa(59):a$+=FNl(STR$(w%!Ka%),10," ",TRUE):PROCb(0,f%!m%-f%!U%,a$,0):IFw%!Ka%-k%!Cb%>=5000THEN
w%!Ja%+=1:PROCi(w%!Ja%):k%!Cb%=w%!Ka%:k%!Pa%=0
ENDIF
IFw%!Ka%>c%(1)THEN
a$=FNa(58)+" "+FNa(57)+" ":a$+=FNa(59):a$+=FNl(STR$(w%!Ka%),10," ",TRUE):x%=f%!e%-LEN(a$)*f%!W%:PROCb(x%,f%!m%-f%!U%,a$,0)
ENDIF
ENDPROC
DEFPROCE:LOCALP%,ib%,jb%,Ta%:P%=fa%:ib%=ja%:jb%=ka%:Ta%=la%:PROCw:PROCo:ENDPROC
DEFPROCw:LOCALG%,L%,s%:d%!b%=50:d%!a%=550:d%!P%=0:d%!`%=0:d%!N%=3:d%!M%=d%!N%:d%!ib%=1:d%!jb%=d%!Ra%:d%!Ta%=1:s%=(d%!Ra%*F%!e%)+((d%!Ra%-1)*d%!Qa%):d%!e%=s%:d%!m%=d%!Sa%*F%!m%:FORL%=1TOd%!Ra%:FORG%=1TOd%!Sa%
b%(L%,G%)=((G%+1)/2)+(d%!P%*10):NEXTG%:NEXTL%:ENDPROC
DEFPROCo:LOCALG%,L%,x%,y%,p%:p%=FNe(16):FORL%=d%!ib%TOd%!jb%:x%=d%!b%+((L%-1)*(F%!e%+d%!Qa%)):FORG%=d%!Ta%TOd%!Sa%:y%=d%!a%+((G%-1)*F%!m%):IFb%(L%,G%)>0THEN
b%(L%,G%)=((G%+1)/2)+(d%!P%*10)
ENDIF
IFb%(L%,G%)<>0THEN
CASESGN(b%(L%,G%))OF
WHEN-1:PROCS(x%,y%,L%,G%)
WHEN1:PROCa(FNb(27)+STR$(b%(L%,G%)),x%,y%)
ENDCASE
ELSE:p%!b%=x%:p%!a%=y%:p%!e%=F%!e%:p%!m%=F%!m%:PROCd(p%)
ENDIF
NEXTG%:NEXTL%:PROCc(p%):ENDPROC
DEFPROCS(x%,y%,r%,c%):LOCALp%:b%(r%,c%)+=1:PROCa(FNb(26),x%,y%):IFb%(r%,c%)=0THEN
p%=FNe(16):p%!b%=x%:p%!a%=y%:p%!e%=F%!e%:p%!m%=F%!m%:PROCd(p%):PROCc(p%)
ENDIF
ENDPROC
DEFPROCv:LOCALp%,i%:p%=FNe(16):FORi%=1TO3:d%!a%-=F%!m%/3:PROCo:NEXTi%:p%!b%=d%!b%:p%!a%=d%!a%+d%!m%:p%!e%=d%!e%:p%!m%=F%!m%:PROCd(p%):PROCc(p%):ENDPROC
DEFPROCR:LOCALT%,_%,C%,qb%,Db%,N%,i%,o$:N%=1:Eb%=24:T%=FNe(28):_%=FNe(28):PROCd(d%):PROCd(o%):IFq%!B%THEN
PROCd(q%):q%!B%=FALSE
ENDIF
IFh%!B%THEN
PROCd(h%):h%!B%=FALSE
ENDIF
FORi%=1TO7:IFa%(i%)!B%THEN
PROCd(a%(i%)):a%(i%)!B%=FALSE
ENDIF
NEXTi%:o%!b%=FNh(o%,f%):T%!b%=0-F%!e%:T%!a%=o%!a%:T%!M%=N%:_%!b%=f%!e%:_%!a%=o%!a%:_%!M%=0-N%:w%!Ja%=0:PROCf(Q%!sa%):PROCi(w%!Ja%):PROCn(w%!La%):PROCa(FNb(1),o%!b%,o%!a%):P%=0:Db%=FALSE:REPEAT:T%!b%+=T%!M%:T%!Eb%=T%!b%+F%!e%:_%!b%+=_%!M%
SYSFNc(6)TOC%:IFC%-qb%>=50THENDb%=FNm(Db%):qb%=C%
IFDb%THENo$=FNb(21)ELSEo$=FNb(20)
PROCa(o$,T%!b%,T%!a%):PROCa(o$,_%!b%,_%!a%):PROCe(2):WAIT:UNTILT%!Eb%>=o%!b%:FORi%=1TO10:PROCa(FNb(20),T%!b%,T%!a%):PROCa(FNb(20),_%!b%,_%!a%):PROCe(20):PROCa(FNb(21),T%!b%,T%!a%):PROCa(FNb(21),_%!b%,_%!a%):PROCe(20):WAIT:NEXTi%:PROCg(2):FORi%=1TO3
PROCa(FNb(2)+STR$(i%),o%!b%,o%!a%):PROCe(20):WAIT:NEXTi%:PROCe(20):PROCd(o%):PROCc(T%):PROCc(_%):ENDPROC
DEFFNw(e$):LOCALFb%,E%:E%=FNE(e$)+256:Fb%=FNe(E%):!Fb%=E%:Fb%!4=0:Fb%!8=16:Fb%!12=16:SYSua%,256+10,Fb%,e$:SYSua%,256+17,Fb%:=Fb%
DEFPROCb(x%,y%,a$,Gb%):LOCALi%,Hb%:xa%=wa%:Hb%=f%!W%:FORi%=1TOLEN(a$):PROCa(STR$(ASC(MID$(a$,i%,1))),x%+((i%-1)*Hb%),y%):IFGb%>0THENPROCe(Gb%)
NEXTi%:xa%=va%:ENDPROC
DEFPROCa(z$,x%,y%):LOCALIb%:SYSua%,256+24,xa%,z$TO,,Ib%:SYSua%,512+34,xa%,Ib%,x%,y%,0:ENDPROC
DEFPROCd(A%):GCOL0,0TINT0:RECTANGLEFILLA%!b%,A%!a%,A%!e%,A%!m%:ENDPROC
DEFFNk(Jb%,f%):=(f%/2)-(Jb%/2)
DEFPROCq(a$,Kb%):LOCALO%,y%:O%=LEN(a$)*f%!W%:y%=(f%!m%/2)-(f%!U%/2):PROCb(FNk(O%,f%!e%),y%,a$,Kb%):ENDPROC
DEFFNh(Lb%,Mb%):=(Mb%!e%/2)-(Lb%!e%/2)
DEFFNt(Lb%,Mb%):LOCALx%,y%:Lb%!b%=(Mb%!e%/2)-(Lb%!e%/2):Lb%!a%=(Mb%!m%/2)-(Lb%!m%/2):=Lb%
DEFPROCf(a%):LOCALi%,Nb%:Nb%=f%!e%/Q%!e%:FORi%=1TONb%+1:PROCa(FNb(108),(i%-1)*Q%!e%,a%):NEXTi%:ENDPROC
DEFPROCl(A%):LOCALx%,y%,Ob%,Pb%,Qb%,Rb%,i%:Ob%=FNd(3,1):Pb%=FNd(3,2):Qb%=1:Rb%=3:FORi%=1TOA%!e%:x%=A%!b%+((i%-1)*Qb%):PROCa(FNb(113),x%,A%!a%):PROCa(FNb(113),x%,A%!a%+(A%!m%-(2*Rb%))):NEXTi%:x%=A%!b%+(A%!e%-Ob%):FORi%=1TOA%!m%-1
PROCa(FNb(114),A%!b%,A%!a%+((i%-1)*Qb%)):PROCa(FNb(114),x%,A%!a%+((i%-1)*Qb%)):NEXTi%:PROCa(FNb(111),A%!b%,A%!a%):PROCa(FNb(109),A%!b%,(A%!a%+A%!m%)-Pb%):PROCa(FNb(112),A%!b%+(A%!e%-Ob%),A%!a%):x%=(A%!b%+A%!e%)-Ob%:y%=(A%!a%+A%!m%)-Pb%
PROCa(FNb(110),x%,y%):ENDPROC
DEFFNs(e$,i$):LOCALSb%,Tb%,j$:Sb%=OPENIN(e$):INPUT#Sb%,j$:IFj$<>i$THENCLOSE#Sb%:ERROR255,"Bad Magic!"
INPUT#Sb%,Tb%:CLOSE#Sb%:=Tb%
DEFPROCk(e$,i$,RETURNi%(),RETURNf$()):LOCALSb%,i%,Tb%,j$:Sb%=OPENIN(e$):INPUT#Sb%,j$:IFj$<>i$THENCLOSE#Sb%:ERROR255,"Bad Magic!"
INPUT#Sb%,Tb%:FORi%=1TOTb%:INPUT#Sb%,i%(i%),f$(i%):NEXTi%:CLOSE#Sb%:ENDPROC
DEFFNa(Ub%):=FNu(Ub%,ba%,f%(),b$(),106)
DEFFNb(Ub%):=FNu(Ub%,ca%,g%(),c$(),107)
DEFFNc(Ub%):=FNu(Ub%,da%,h%(),d$(),108)
DEFFNu(Ub%,Vb%,j%(),g$(),Wb%):LOCALi%,Xb%:Xb%=0:FORi%=1TOVb%:IFj%(i%)=Ub%THENXb%=i%:i%=Vb%
NEXTi%:IFXb%=0THENERROR255,FNa(Wb%)+" "+STR$(Ub%)
=FNo(g$(Xb%))
DEFFNA(e$):LOCALR%:R%=0:SYSFNc(31),,e$TOR%:=R%
DEFPROCg(Yb%):LOCALZb%,v$:Zb%=0:v$=FNa(110)+" "+STR$(Yb%):IFk%!Zb%>0THEN
IFYb%<1ANDYb%>4THENERROR255,v$
OSCLI"SPlay_fire0"+STR$(Yb%)+"mhh"
ENDIF
ENDPROC
DEFPROCp:LOCALp%:p%=FNe(20):p%!0=4:p%!4=5:p%!8=11:p%!12=12:p%!16=-1:SYSFNc(5),p%,p%:f%!oa%=p%!0:f%!pa%=p%!4:f%!e%=(p%!8)+1<<p%!0:f%!m%=(p%!12)+1<<p%!4:f%!qa%=MODE:PROCc(p%):ENDPROC
DEFFNd(E%,_b%):LOCAL`b%,ac%:ac%=MODE:IFac%<>f%!qa%THENPROCp
CASE_b%OF
WHEN1:`b%=E%<<f%!oa%
WHEN2:`b%=E%<<f%!pa%
WHEN3:`b%=E%>>f%!oa%
WHEN4:`b%=E%>>f%!pa%
OTHERWISE:ERROR255,FNa(103)+" "+STR$(_b%)
ENDCASE
=`b%
DEFFNp(A%,bc%):LOCALcc%,dc%,ec%,fc%:ec%=FALSE:fc%=FALSE:IFA%!B%ANDbc%!B%THEN
cc%=bc%!b%+bc%!e%:dc%=bc%!a%+bc%!m%:IFA%!b%>=bc%!b%ANDA%!b%<cc%THENec%=TRUE
IFA%!a%>=bc%!a%ANDA%!a%<dc%THENfc%=TRUE
ENDIF
=ec%ANDfc%
DEFPROCy:LOCALm$:ONERROROFF
m$=" Panic!!!":CASEERROF
WHEN17:m$="Program Terminated."
WHEN254:m$="ASH"+m$
WHEN255:m$="Game"+m$
OTHERWISE:m$="System"+m$
ENDCASE
PRINT:PRINT:PRINTm$:PRINTSTRING$(LEN(m$),"="):PRINT:REPORT:PRINT" at line : ";ERL:IFk%!4<>-1THEN
SYS"TimPlayer_SongStop",k%!4:SYS"TimPlayer_SongUnload",k%!4
ENDIF
PROCr:ENDPROC
DEFFNj(A$,w$):LOCALf$,J%,Xb%:Xb%=FALSE:f$=STRING$(10," "):RIGHT$(f$,3)=" : ":LEFT$(f$,LEN(w$))=w$:J%=FNq(A$):IFJ%=1THEN
f$+="OK.":Xb%=TRUE
ELSE:f$+="Missing!!"
ENDIF
PRINTf$:=Xb%
DEFFNv(Tb%):LOCALg$,q$:q$="<Invaders$Dir>.Screens.":g$="Dump"+STR$(Tb%):IFFNq(q$+g$)<>0THEN
REPEAT:Tb%+=1:g$="Dump"+STR$(Tb%):UNTILFNq(q$+g$)=0ORLEN(g$)>10:IFLEN(g$)>10THENTb%=-1
ENDIF
=Tb%
DEFFNn(n%):LOCALgc%:gc%=RND(100):=gc%<=n%
DEFFNo(a$):LOCALi%,x$:FORi%=1TOLEN(a$):x$+=CHR$(ASC(MID$(a$,i%,1))EOR131):NEXTi%:=x$
DEFPROCe(n%):LOCALt%:t%=TIME+n%:REPEAT:UNTILTIME>=t%:ENDPROC
DEFFNm(n%):=n%EOR1
DEFFNC(n%):LOCALc$,u%:u%=VAL(RIGHT$(STR$(n%),1)):c$=FNa(65):IFu%>=1ANDu%<=3THENc$=FNa(u%+61)
=c$
DEFFNl(a$,hc%,y$,ic%):LOCALjc%,c$:jc%=hc%-LEN(a$):IFjc%<=0THEN
c$=LEFT$(a$,hc%)
ELSE:IFic%THEN
c$=STRING$(hc%,y$):RIGHT$(c$,LEN(a$))=a$
ELSE:c$=a$+STRING$(jc%,y$)
ENDIF
ENDIF
=c$
DEFFNy(a$,hc%):LOCALc$:c$=STRING$(hc%," "):RIGHT$(c$,LEN(a$))=a$:=c$
DEFFNq(h$):LOCALXb%:SYS"XOS_File",17,h$TOXb%:=Xb%
DEFFNE(h$):LOCALE%:SYSFNc(3),5,h$TO,,,,E%:=E%
DEFFNx(_b%,h$):LOCALR%,kc%,lc%,mc%:mc%=FALSE:CASE_b%OF
WHEN0:R%=OPENUP(h$+"chkfile")
WHEN1:R%=OPENUP(h$)
OTHERWISE:ERROR255,FNa(104)+" "+STR$(_b%)
ENDCASE
IFR%<>0THEN
SYSFNc(4),254,R%TOlc%;kc%:IF(kc%AND1)THENCLOSE#R%:ERROR255,FNa(105)
IF((lc%AND(1<<7))<>0)THENmc%=TRUE
CLOSE#R%
ENDIF
=mc%
DEFPROCz:LOCALnc%:oc%=0:pc%=0:SYSFNc(10),-1,-1TOqc%:SYSFNc(11)TOrc%;nc%:IFnc%AND1THENrc%=16384
PROCT(rc%):ENDPROC
DEFPROCr:IFoc%THEN
SYSFNc(10),oc%-32768,-1TOqc%:oc%=0:pc%=0
ENDIF
ENDPROC
DEFFNe(sc%):LOCALD%,E%:E%=(sc%+15)AND-4:D%=FNF(E%):IFD%ELSEERROR254,FNa(211)
D%!0=&DEADDEAD:D%!4=sc%:!(D%-8+(D%!-4))=&DEADDEAD:=D%+8
DEFPROCc(RETURND%):D%-=8:IFD%!0<>&DEADDEADTHENERROR254,FNa(212)
IF!(D%-8+(D%!-4))<>&DEADDEADTHEN
ERROR254,FNa(213)
ENDIF
pc%-=D%!-4:SYSFNc(12),3,oc%,D%:D%=0:ENDPROC
DEFFNz(D%):LOCALp%:p%=D%-4:=p%!0
DEFFNg(D%,Bb%):PROCu(D%,Bb%):=D%
DEFPROCu(D%,Bb%):LOCALZ%,E%:E%=FNz(D%):FORZ%=0TOE%-4STEP4:D%!Z%=Bb%:NEXTZ%:ENDPROC
DEFFNf(D%):LOCALtc%,Z%,E%:E%=FNz(D%):tc%=FNe(E%):FORZ%=0TOE%-4STEP4:tc%!Z%=D%!Z%:NEXTZ%:=tc%
DEFPROCT(E%):IFoc%THENERROR254,FNa(215)
E%=(E%+rc%-1)ANDNOT(rc%-1):oc%=HIMEM:SYSFNc(10),qc%+E%,-1TOqc%:E%=qc%+32768-oc%:IFE%<1THEN
oc%=0:ERROR254,FNa(216)
ELSE:SYSFNc(12),0,oc%,,E%
ENDIF
pc%=0:ENDPROC
DEFPROCU(sc%):LOCALuc%:uc%=qc%:SYSFNc(10),qc%+sc%,-1TOqc%:sc%=qc%-uc%:IFsc%THENSYSFNc(12),5,oc%,,sc%TO,,,sc%
ENDPROC
DEFFNF(sc%):LOCALD%,nc%:SYSFNc(13),2,oc%,,sc%TO,,D%;nc%:IFnc%AND1THEN
PROCU((sc%+rc%)ANDNOT(rc%-1)):SYSFNc(13),2,oc%,,sc%TO,,D%;nc%:IFnc%AND1THEN=0
ENDIF
pc%+=D%!-4:=D%