; HYPERIT.ACT ; File selector ; HyperIt!; By Bill Kendrick; (c) New Breed Software 1995INCLUDE"D:RUNTIME.ACT"BYTE ARRAY PAGE6(43)=[$A2 $10 $20 $56 $E4 $A9 $06 $8D $58 $03 $A9 $00 $8D $59 $03 $A9 $07 $8D $52 $03 $A9 $1A $8D $54 $03 $A9 $06 $8D $55 $03 $20 $56 $E4 $A9 $0C $8D $52 $03 $20 $56 $E4 $6C $1E $06]Byte Array PMBuf(2048),ScBuffer(7680)Byte HPosP0=53248,HPosP1=53249, Stick0=632,Strig0=644,CH=764, RTClok20=20Card SavMsc=88Byte S,F,MX,MY,Arrow,OY,Selected,Slow, Key,Files,FX,FY,SFile,IsADir,ReadPlace, LoadPlaceCard PM,WhereFont,CSet,SZChar Array Path(41),File(60),There(512), TheFile(80)Byte Array Active(16),AX1(16),AY1(16), AX2(16),AY2(16),AKs(32),AI(16),OA(16), IsDir(64),Ext(192)Byte CIO_statusProc runit(char array filename) byte b,cmd,startadrlo,startadrhi, endadrlo,endadrhi,runadrlo,runadrhi card pointer iocbxbuf,iocbxlen byte pointer iocbxcmd card startadr,endadr,len,runadr close(1) open(1,filename,4,0) b=getd(1) b=getd(1) startadrlo=getd(1) startadrhi=getd(1) endadrlo=getd(1) endadrhi=getd(1) startadr=startadrlo+(256*startadrhi) endadr=endadrlo+(256*endadrhi) len=endadr-startadr+1 iocbxcmd=$352 iocbxbuf=$354 iocbxlen=$358 cmd=7 iocbxbuf^=startadr iocbxcmd^=cmd iocbxlen^=len for b=0 to 43 do cmd=page6(b) poke($620+b,cmd) od [$4C $20 $06]returnCHAR FUNC CIO=*(BYTE dev, CARD addr, size, BYTE cmd, aux1, aux2)[$29$F$85$A0$86$A1$A$A$A$A$AA$A5$A5$9D$342$A5$A3$9D$348$A5$A4$9D$349$A5$A6$F0$8$9D$34A$A5$A7$9D$34B$98$9D$345$A5$A1$9D$344$20$E456$8C CIO_status$C0$88$D0$6$98$A4$A0$99 EOF$A085$60]CARD FUNC BGet=*(BYTE dev,CARD addr, size)[$48$A9$7$85$A5$A9$0$85$A6$A5$A3$5$A4$D0$6$85$A0$85$A1$68$60$68$20 CIO$BD$348$85$A0$BD$349$85$A1$60]PROC BPut=*(BYTE dev,CARD addr, size)[$48$A9$B$85$A5$A9$0$85$A6$A5$A3$5$A4$D0$2$68$60$68$4C CIO]MODULEProc SetUp() Byte A Graphics(24) Poke(730,1) Poke(731,1) Poke(709,0) Poke(710,15) Poke(53277,3) Poke(623,0) PM=(PMBuf/1024)*1024+1024 CSet=PM+512+256 WhereFont=224*256 Poke(54279,PM/256) Zero(PM+512,256) Poke(704,142) Poke(705,138) PokeC(53256,0) HPosP0=0 HPosP1=0 Poke(559,46) MX=79 MY=47 OY=0 Arrow=0 For A=0 To 15 Do Active(A)=0 Od Close(4) Open(4,"K:",4,0)ReturnProc Quit() Graphics(0) HPosP0=0 HPosP1=0 CH=255 Close(1) Close(2) Close(3) Close(4) Poke(1536,0) [$6C$0A$00] ; go_dosReturnProc Cls() Zero(SavMsc,7680)ReturnProc Invert(Byte X1,Y1,X2,Y2) Byte XX,J,V Byte Pointer Top For XX=X1 To X2 Do Top=SavMsc+XX+Y1*320 For J=0 To (Y2-Y1)*8+7 Do V=(Top^)!255 Top^=V Top==+40 Od OdReturnProc TempInactivate() Byte A For A=0 To 15 Do OA(A)=Active(A) Active(A)=0 OdReturnProc Reactivate() Byte A For A=0 To 15 Do Active(A)=OA(A) OdReturnProc Mouse() Byte A S=Stick0 F=Strig0 Slow=Slow+1 Key=0 If CH<255 Then If CH=142 Then S=14 Slow=4 ElseIf CH=143 Then S=13 Slow=4 ElseIf CH=134 Then S=11 Slow=4 ElseIf CH=135 Then S=7 Slow=4 ElseIf CH=140 Then F=0 Else Key=GetD(4) Fi CH=255 Fi If Slow>=3 Or Arrow=1 Then If S>4 And S<8 And MX<160 Then MX==+1 ElseIf S>8 And S<12 And MX>0 Then MX==-1 Fi If (S=13 Or S=9 Or S=5) And MY<95 Then MY==+1 ElseIf (S=14 Or S=10 Or S=6) And MY>0 Then MY==-1 Fi Slow=0 Fi If OY<>MY Then Zero(PM+512+16+OY,8) Zero(PM+512+128+16+OY,8) OY=MY Fi Selected=255 If Arrow=0 Then MoveBlock(PM+512+16+MY,"~x4.'"+1,8) MoveBlock(PM+512+128+16+MY,""+1,8) If F=0 Then For A=0 To 15 Do If Active(A)=1 And (MX RSH 2)>=AX1(A) And (MX RSH 2)<=AX2(A) And (MY RSH 2)>=AY1(A) And (MY RSH 2)<=AY2(A) Then Selected=A Fi Od If Selected<>255 Then If AI(Selected)=1 Then Sound(0,0,0,15) A=RTClok20+1 Do Until RTClok20=A Od Sound(0,0,0,0) A=Selected Invert(AX1(A),AY1(A),AX2(A),AY2(A)) Do Until Strig0=1 Od Invert(AX1(A),AY1(A),AX2(A),AY2(A)) Fi Fi Fi If Key<>0 Then For A=0 To 15 Do If Active(A)=1 And (AKs(A*2)=Key Or AKs(A*2+1)=Key) Then Selected=A Fi Od If Selected<>255 Then If AI(Selected)=1 Then Sound(0,0,0,15) A=RTClok20+1 Do Until RTClok20=A Od Sound(0,0,0,0) A=Selected Invert(AX1(A),AY1(A),AX2(A),AY2(A)) Invert(AX1(A),AY1(A),AX2(A),AY2(A)) Fi Fi Fi ElseIf Arrow=1 Then MoveBlock(PM+512+16+MY,"88ƒ8"+1,8) MoveBlock(PM+512+128+16+MY,"8|||8"+1,8) Fi HPosP0=MX+48 HPosP1=MX+48ReturnProc SetFont(Char Array Name) If Name(0)=0 Then WhereFont=224*256 Else Arrow=1 Mouse() Close(2) Open(2,Name,4,0) BGet(2,CSet,1024) Close(2) WhereFont=CSet Arrow=0 Mouse() FiReturnProc Print8(Byte X,Y Char Array Text) Byte A,J,C,I Byte Pointer Top,V For A=1 To Text(0) Do C=Text(A) I=C&128 C=C&127 If C>=32 And C<96 Then C==-32 ElseIf C<32 Then C==+64 Fi Top=SavMsc+X+A-1+Y*320 V=WhereFont+C*8 If I=0 Then For J=0 To 7 Do Top^=V^ Top==+40 V==+1 Od Else For J=0 To 7 Do Top^=(V^)!255 Top==+40 V==+1 Od Fi OdReturnProc Box40(Byte X1,Y1,X2,Y2,Clear) Char Array St(41) Byte YY,Wid Arrow=1 Mouse() Wid=X2-X1+1 SCopy(St,"") St(0)=Wid St(Wid)=' Print8(X1,Y1,St) If Clear=1 Then SCopy(St," ") St(0)=Wid St(Wid)=' For YY=Y1+1 To Y2-1 Do Print8(X1,YY,St) Mouse() Od Else For YY=Y1+1 To Y2-1 Do Print8(X1,YY,"") Print8(X2,YY,"") Mouse() Od Fi SCopy(St,"") St(0)=Wid St(Wid)=' Print8(X1,Y2,St) Arrow=0ReturnProc SnapScreen() MoveBlock(ScBuffer,SavMsc,7680)ReturnProc RedrawScreen() MoveBlock(SavMsc,ScBuffer,7680)ReturnByte Func AddButton(Byte X1,Y1,X2,Y2,Inv Char Array Keys) Byte A,B B=255 For A=0 To 15 Do If Active(A)=0 And B=255 Then B=A Fi Od Active(B)=1 AX1(B)=X1 AX2(B)=X2 AY1(B)=Y1 AY2(B)=Y2 If Keys(1)=' Then Keys(1)=155 Fi If Keys(2)=' Then Keys(2)=155 Fi AKs(B*2)=Keys(1) AKs(B*2+1)=Keys(2) AI(B)=InvReturn(B)Byte Func NormalButton(Byte X,Y Char Array Text,Keys) Byte B Print8(X,Y,Text) B=AddButton(X,Y,X+Text(0)-1,Y,1,Keys)Return(B)Byte Func DoQuit() Byte Yes,Done,NoPlace,YesPlace SnapScreen() Box40(10,10,30,17,1) Print8(11,10,"") Print8(13,12,"Are you sure you") Print8(13,13,"want to quit!?") NoPlace=NormalButton(17,15,"","N") YesPlace=NormalButton(23,15,"[Yes]","Y") TempInactivate() Active(NoPlace)=1 Active(YesPlace)=1 Done=0 Yes=0 Do Mouse() If Key=12 Or Key=28 Or Key=35 Or Selected=NoPlace Then Done=1 ElseIf Key=34 Or Selected=YesPlace Then Done=1 Yes=1 Fi Until Done=1 Od RedrawScreen() Reactivate() Active(NoPlace)=0 Active(YesPlace)=0Return(Yes)Proc Help() Byte MorePlace,DonePlace,YY,A Char Array Text(41) SnapScreen() Box40(1,2,38,22,0) Print8(2,2,"") Close(1) Open(1,"D:HYPERIT.HLP",4,0) MorePlace=NormalButton(24,22,"","M") DonePlace=NormalButton(31,22,"[Done]","D") TempInactivate() Active(MorePlace)=1 Active(DonePlace)=1 SetFont("D:FANCY.FNT") YY=3 Do Arrow=1 Mouse() InputSD(1,Text) If Text(0)<36 Then For A=Text(0)+1 To 36 Do Text(A)=32 Od Text(0)=36 Fi Print8(2,YY,Text) YY=YY+1 If YY>21 Or EOF(1)<>0 Then If EOF(1)<>0 And YY<21 Then For A=1 To 36 Do Text(A)=32 Od Text(0)=36 For A=YY To 21 Do Mouse() Print8(2,A,Text) Od Fi YY=3 Arrow=0 Do Mouse() Until Selected<>255 Od Fi Until EOF(1)<>0 Or Selected=DonePlace Od Close(1) SetFont("") Reactivate() Active(MorePlace)=0 Active(DonePlace)=0 RedrawScreen()ReturnProc FileIs(Char Array Name) Byte A,C SCopy(TheFile,Path) C=TheFile(0) For A=1 To File(0) Do TheFile(C+A)=File(A) Od TheFile(0)==+File(0) C=TheFile(0) TheFile(C+1)='. TheFile(C+2)='S TheFile(C+3)='T TheFile(C+4)='K TheFile(0)==+4 C=TheFile(0) TheFile(C+1)=62 ; '> For A=1 To Name(0) Do TheFile(TheFile(0)+A+1)=Name(A) Od TheFile(0)==+Name(0)+1ReturnProc ISD(Char Array S) InputSD(1,S)ReturnProc Play() Close(1) Open(1,"D:HYPERIT.DAT",8,0) PrintDE(1,Path) PrintDE(1,File) Close(1) RunIt("D:HYPERITP.COM")ReturnProc ChgPath() Byte P,YY Char Array C(2),NewPath(41) Print8(1,2,Path) P=Path(0) SCopy(NewPath,Path) Arrow=1 Do Mouse() Print8(P+1,2," ") If (Key>='0 And Key<='9) Or (Key>='A And Key<='Z) Or (Key>='a And Key<='z) Or (Key='_ Or Key='.) Or (Key=': Or Key='>) Then If P<39 Then C(0)=1 C(1)=Key Print8(P+1,2,C) P=P+1 NewPath(P)=Key NewPath(0)=P Fi ElseIf Key=126 And P>0 Then P=P-1 NewPath(0)=P-1 Fi Until Key=27 Or Key=155 Od If Key=155 Then If NewPath(0)>=2 Then SCopy(Path,NewPath) Fi Print8(1,2," ") Print8(1,2,Path) For YY=5 To 20 Do Print8(0,YY,"| |") Mouse() Od Arrow=0 Active(ReadPlace)=0 Active(LoadPlace)=0 ReadPlace=NormalButton(1,22,"","R") LoadPlace=NormalButton(19,22,"[Load Stack]","L") SFile=0 Else Print8(1,2," ") Print8(1,2,Path) Arrow=0 FiReturnProc Title() Byte YY Cls() Poke(710,202) Poke(712,202) Arrow=1 Mouse() Box40(2,2,32,8,0) Print8(4,4," 0.5b") Print8(4,5,"by Bill Kendrick") Print8(4,6,"(c) New Breed Software 1995") Arrow=0 Do Mouse() Until F=0 Or Key<>0 Od Arrow=1 Mouse() Close(1) Open(1,"D:HYPERIT.DAT",8,0) PrintDE(1,"D:") PrintDE(1,"*") Close(1)ReturnCard Func MyVC(Card Place) Card V V=0 For Place=Place To Place+4 Do If Peek(Place)>='0 And Peek(Place)<='9 Then V=V*10 V=V+Peek(Place)-48 Fi OdReturn(V)Proc Main() Byte Leave,Current,Done,XX,YY,OXX,OYY, A,B Byte PathPlace,StacksPlace,QuitPlace, HelpPlace,InfoPlace,OkPlace Error=Main SetUp() If Peek(1536)<>123 Then Poke(1536,123) Title() Fi Close(1) Open(1,"D:HYPERIT.DAT",4,0) InputSD(1,Path) Close(1) If Path(0)=0 Then SCopy(Path,"D:") Fi Do Graphics(24) SetFont("") Poke(559,46) Poke(710,12) Poke(712,12) Poke(709,0) Arrow=1 Cls() Print8(0,0,"⠨㩠Ӭ") Mouse() Print8(0,1,"Drive/Path") Print8(0,2,"|") Print8(39,2,"|") Print8(1,2,Path) Print8(0,3,"") PathPlace=AddButton(0,1,39,3,1,"DP") Mouse() Print8(0,4,"Stacks and Dirs") For YY=5 To 20 Do Print8(0,YY,"|") Print8(37,YY,"|") Mouse() Od Print8(0,21,"") StacksPlace=AddButton(1,5,34,20,0,"-=") ReadPlace=NormalButton(1,22,"","R") LoadPlace=NormalButton(19,22,"[Load Stack]","L") InfoPlace=NormalButton(19,23,"[Info]","I") QuitPlace=NormalButton(33,22,"[Quit]","Q") HelpPlace=NormalButton(1,23,"","H?") Arrow=0 Leave=0 Done=0 Files=0 SFile=0 Print8(30,23,"--------") Do Mouse() If Selected=PathPlace Then ChgPath() ElseIf Selected=StacksPlace And Files<>0 Then If Key='- Or Key='= Then If SFile<>0 Then Invert(OXX*9+1,OYY+5,OXX*9+1+8,OYY+5) Fi If Key='- Then If SFile>1 Then SFile==-1 Else SFile=1 Fi Fi If Key='= And SFile0 Then Invert(OXX*9+1,OYY+5,OXX*9+1+8,OYY+5) Fi SFile=XX*16+YY+1 Invert(XX*9+1,YY+5,XX*9+1+8,YY+5) OXX=XX OYY=YY If SFile<>0 Then For A=1 To 8 Do File(A)=There(SFile*8-8+A) Od File(0)=8 Fi Fi Fi If SFile<>0 Then IsADir=IsDir(SFile) Active(ReadPlace)=0 Active(LoadPlace)=0 ReadPlace=NormalButton(1,22,"[Read Directory]","R") If IsADir=0 Then LoadPlace=NormalButton(19,22,"","L") Else LoadPlace=NormalButton(19,22,"","O") Fi Print8(30,23,"--------") B=0 For A=1 To 8 Do If File(A)<>32 Then B=A Fi Od File(0)=B Print8(30,23,File) Fi ElseIf Selected=ReadPlace Then Print8(30,23,"0 Found") Arrow=1 Active(ReadPlace)=0 Active(LoadPlace)=0 ReadPlace=NormalButton(1,22,"","R") LoadPlace=NormalButton(19,22,"[Load Stack]","L") SCopy(File,Path) File(File(0)+1)='* File(File(0)+2)='. File(File(0)+3)='* File(File(0)+4)=0 File(0)==+3 For YY=40 To 167 Do Zero(SavMsc+YY*40+1,35) Od Close(1) Open(1,File,6,0) Files=0 SFile=0 OXX=0 OYY=0 FX=1 FY=5 Do Mouse() InputSD(1,File) If File(2)=': Then Files==+1 If File(11)='S And File(12)='T And File(13)='K Then IsDir(Files)=0 Else IsDir(Files)=1 Ext(Files*3)=File(11) Ext(Files*3+1)=File(12) Ext(Files*3+2)=File(13) Fi For YY=1 To 8 Do There(Files*8-8+YY)=File(YY+2) File(YY)=File(YY+2) Od File(0)=8 Print8(FX,FY,File) If IsDir(Files)=1 Then Print8(FX+8,FY,"-") Fi FY=FY+1 If FY>20 Then FX=FX+9 FY=5 Fi StrB(Files,File) Print8(30,23,File) Fi Until EOF(1)<>0 Od Close(1) Arrow=0 ElseIf Selected=LoadPlace And SFile<>0 Then If IsADir=0 Then Cls() For YY=0 To 15 Do Active(YY)=0 Od Play() Done=1 Else Arrow=1 B=Path(0) For A=1 To File(0) Do Path(B+A)=File(A) Od A=B+File(0) Path(A+1)='. A=A+1 If Ext(SFile*3)<>32 Then Path(A+1)=Ext(SFile*3) A=A+1 Fi If Ext(SFile*3+1)<>32 Then Path(A+1)=Ext(SFile*3+1) A=A+1 Fi If Ext(SFile*3+2)<>32 Then Path(A+1)=Ext(SFile*3+2) A=A+1 Fi Path(A+1)='> A=A+1 Path(0)=A Print8(1,2," ") Print8(1,2,Path) For YY=5 To 20 Do Print8(0,YY,"| |") Mouse() Od Arrow=0 Active(ReadPlace)=0 Active(LoadPlace)=0 ReadPlace=NormalButton(1,22,"","R") LoadPlace=NormalButton(19,22,"[Load Stack]","L") SFile=0 Fi ElseIf Selected=InfoPlace And SFile<>0 And IsADir=0 Then SnapScreen() Box40(3,5,30,18,1) Print8(4,5,"ﺠ") Print8(10,5,File) OkPlace=NormalButton(25,18,"","O") TempInactivate() Active(OkPlace)=1 FileIs("INFO.DAT") Close(1) Open(1,TheFile,4,0) YY=6 Arrow=1 Do Mouse() ISD(TheFile) Print8(4,YY,TheFile) YY==+1 Until EOF(1)<>0 Or YY=16 Od Close(1) FileIs("*.*") Open(1,TheFile,6,0) XX=0 YY=0 SZ=0 Do ISD(TheFile) If TheFile(1)<'0 Or TheFile(1)>'9 Then XX==+1 If TheFile(11)='C And TheFile(12)='R And TheFile(13)='D Then YY==+1 Fi Fi SZ==+MyVC(TheFile+14) Until EOF(1)<>0 Od Close(1) Print8(5,17,"Cards: / Size:") StrB(YY,TheFile) Print8(12,17,TheFile) StrB(XX,TheFile) Print8(15,17,TheFile) StrC(SZ,TheFile) Print8(24,17,TheFile) Arrow=0 Do Mouse() Until Selected=OkPlace Od Reactivate() Active(OkPlace)=0 RedrawScreen() ElseIf Selected=HelpPlace Then Help() ElseIf Selected=QuitPlace Then Leave=DoQuit() If Leave=1 Then Done=1 Fi Fi Until Done=1 Od Cls() Until Leave=1 Od Quit()Return