home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 26
/
AACD 26.iso
/
AACD
/
Programming
/
AllPlaton
/
Unsorted
/
ModuleOptimizer.AMOS
/
ModuleOptimizer.amosSourceCode
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
Macintosh to JP
NeXTSTEP
RISC OS/Acorn
Shift JIS
UTF-8
Wrap
AMOS Source Code
|
1996-11-23
|
36.1 KB
|
1,465 lines
' *************************************
' * *
' * AMCAF File-Requester V1.0 *
' * Written by Chris Hodges *
' * *
' *************************************
'
Set Buffer 40
MXFILES=300
Dim FIL$(MXFILES)
'
Dim FB(40,4),FB$(40)
Global FB(),FB$()
TH=8
Global TH
MAIN
End
Procedure MAIN
Dim SAMS(31,3)
Gosub INIT
OMK=0 : REQS=1
Do
Repeat : Multi Wait : Until Amos Here
If Timer>25
A$="}Chip: "+ Extension_8_0EB8(Chip Free/1024,4)+" KB Fast: "+ Extension_8_0EB8(Fast Free/1024,5)+"KB "
TEX[300,0,614,10,A$]
Timer=0
End If
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
BT=0
If MK=1 and OMK<>1
CHKMOUSE[XM,YM,25,40]
BT=Param
End If
Exit If BT=25 or BT=32
If BT=27 Then Amos To Back
If BT=28 Then Gosub LOAMOD
If BT=29 Then Gosub SAVMOD
If BT=30 Then Erase 9 : Gosub UPDATALL
If BT=31 Then Gosub ABOUT
If BT=33 Then Gosub OPTALL
If BT=34 Then Gosub OPTSAMPS
If BT=35 Then Gosub OPTSONG
If BT=36 Then Gosub OPTPATT
If BT=37 Then Gosub INFOSONG
OMK=MK
Loop
Screen Close 0
Pop Proc
ABOUT:
REQUEST["Module Optimizer V0.1. Written by Chris Hodges.","Wow!"]
Return
INFOSONG:
Extension_8_10C6 64
Extension_8_10D6 15
Extension_8_10F2 125
Extension_8_108E 9
REQUEST["Not yet implemented","Ooops"]
Extension_8_10A8
Return
OPTALL:
Gosub OPTSONG
Gosub OPTSAMPS
Gosub OPTPATT
Return
OPTPATT:
DRAPROCBAR[38,0,1]
For A=0 To NPATTN-1
For AA=0 To NPATTN-1
If AA<>A
For B=0 To 255
Exit If Leek(ST+1084+A*1024+B*4)<>Leek(ST+1084+AA*1024+B*4)
Next
If B=256
REQUEST["Pattern"+Str$(A)+" and"+Str$(AA)+" are the same.","Kill|Keep"]
End If
End If
DRAPROCBAR[38,AA+A*NPATTN+1,NPATTN*NPATTN]
Next
Next
SL=Peek(ST+950)
Reserve As Work 10,NPATTN*64
Erase 10
Return
OPTSONG:
SL=Peek(ST+950)
DRAPROCBAR[38,0,1]
Do
For A=0 To NPATTN-1
For AA=0 To 127
Exit If Peek(ST+952+AA)=A
Next
If AA=128
For AA=0 To 255
Exit If Leek(ST+1084+A*1024+AA*4)
Next
If AA<256 and REQS>0
Do
REQUEST["Pattern"+Str$(A)+" not used.","Kill|Hear|Keep"]
P=Param
Exit If P=0 or P=2
OP=Peek(ST+952+SL)
Poke ST+950,SL+1
Poke ST+952+SL,A
Extension_8_109E 9,SL
Repeat
Multi Wait
Until Extension_8_10B6 =$FF
Extension_8_10A8
Poke ST+950,SL
Poke ST+952+SL,OP
Loop
Else
P=0
End If
If P=0
Copy ST+1084+(NPATTN-1)*1024,ST+1084+NPATTN*1024 To ST+1084+A*1024
Copy SAMS(1,0),SAMS(31,0)+SAMS(31,1) To SAMS(1,0)-1024
For AA=0 To 127
If Peek(ST+952+AA)=NPATTN-1
Poke ST+952+AA,A
End If
Next
Gosub UPDATINFO : A=-1 : Exit
End If
End If
DRAPROCBAR[38,A+1,NPATTN]
Next
Exit If A<>-1
Loop
Reserve As Work 10,1024
AD=Start(10)
P=0
DRAPROCBAR[38,0,1]
M=0
For A=0 To 127
C=Peek(ST+952+A)
M=Max(M,C)
If A>0
For AA=0 To A-1
Exit If Peek(ST+952+AA)=C
Next
Else
AA=0
End If
If AA=A
ADS=ST+1084+C*1024
Copy ST+1084+P*1024,ST+2108+P*1024 To AD
Copy ADS,ADS+1024 To ST+1084+P*1024
Copy AD,AD+1024 To ADS
For AA=0 To 127
B=Peek(ST+952+AA)
If B=P
Poke ST+952+AA,C
End If
If B=C
Poke ST+952+AA,P
End If
Next
Inc P
End If
DRAPROCBAR[38,A+1,128]
Next
Erase 10
If M<NPATTN-1
Copy SAMS(0,0),SAMS(31,0)+SAMS(31,1) To ST+2108+NPATTN*1024
End If
M=NPATTN
For A=SL To 127
Poke ST+952+A,0
Next
Gosub UPDATALL
If M<NPATTN
Copy SAMS(0,0),SAMS(31,0)+SAMS(31,1) To ST+1084+NPATTN*1024
End If
Return
OPTSAMPS:
DRAPROCBAR[38,0,1]
For AA=1 To 31
If SAMS(AA,1)>0
If AD and 1 : Inc AD : End If
If SAMS(AA,2)>0
NL=Min(SAMS(AA,0),SAMS(AA,2)+SAMS(AA,3))
If NL<SAMS(AA,1)
If SAMS(AA,0)+SAMS(AA,1)<SAMS(31,0)
Copy SAMS(AA,0)+SAMS(AA,1),SAMS(31,0)+SAMS(31,1) To SAMS(AA,0)+NL
End If
Doke ST+12+AA*30,NL/2
Gosub UPDATINFO
End If
End If
End If
DRAPROCBAR[38,AA,91]
Next
For AA=1 To 31
If SAMS(AA,1)>0
P=0
For AD=SAMS(AA,0)+SAMS(AA,1)-1 To SAMS(AA,0)+1 Step -1
Add P,Abs( Extension_8_0BF0(AD))
Exit If P>8
Next
If AD and 1 : Inc AD : End If
NL=Max(AD-SAMS(AA,0),SAMS(AA,2)+SAMS(AA,3))
If NL<SAMS(AA,1)
If SAMS(AA,0)+SAMS(AA,1)<SAMS(31,0)
Copy SAMS(AA,0)+SAMS(AA,1),SAMS(31,0)+SAMS(31,1) To SAMS(AA,0)+NL
End If
Doke ST+12+AA*30,NL/2
Gosub UPDATINFO
End If
End If
DRAPROCBAR[38,AA+31,91]
Next
' For AA=1 To 31
' If SAMS(AA,1)>0
' P=0
' For AD=SAMS(AA,0)+4 To SAMS(AA,0)+SAMS(AA,1)-1
' Add P,Abs(Speek(AD))
' Exit If P>8
' Next
' If AD and 1 : Dec AD : End If
' NL=SAMS(AA,1)-Min((AD-SAMS(AA,0)),SAMS(AA,2))+4
' If NL<SAMS(AA,1)
' Copy SAMS(AA,0)+(SAMS(AA,1)-NL),SAMS(31,0)+SAMS(31,1) To SAMS(AA,0)+4
' Doke ST+12+AA*30,NL/2
' Doke ST+16+AA*30,(SAMS(AA,2)-(SAMS(AA,1)-NL))/2
' Doke ST+18+AA*30,(SAMS(AA,2)-(SAMS(AA,1)-NL))/2
' Gosub UPDATINFO
' End If
' End If
' DRAPROCBAR[38,AA+62,91]
' Next
Reserve As Work 10,64
AD=ST+1084
For A=1 To NPATTN*256
IN=(Peek(AD) and $F0)+Peek(AD+2)/16 : Add AD,4
Doke Start(10)+IN*2,1
Next
AD=Start(10)
For AA=1 To 31
If SAMS(AA,1)>0
If Deek(AD+AA*2)=0
If REQS
Do
REQUEST["Sample"+Str$(AA)+" not in use.","Kill|Hear|Keep"]
P=Param
Exit If P=0 or P=2
Extension_8_1412 15,SAMS(AA,0),Max(SAMS(AA,1),258),15635
Loop
Else
P=0
End If
If P=0
Doke ST+12+AA*30,0
Doke ST+14+AA*30,0
Doke ST+16+AA*30,0
Doke ST+18+AA*30,1
If SAMS(AA,0)+SAMS(AA,1)<SAMS(31,0)
Copy SAMS(AA,0)+SAMS(AA,1),SAMS(31,0)+SAMS(31,1) To SAMS(AA,0)
End If
Gosub UPDATINFO
End If
End If
Else
If Deek(AD+AA*2) and REQS
REQUEST["Warning: Sample"+Str$(AA)+" is used but non-existent!","Ooops!"]
End If
End If
DRAPROCBAR[38,AA+62,91]
Next
Erase 10
Gosub UPDATALL
Return
UPDATALL:
Gosub UPDATINFO
Return
INIT:
Screen Open 0,640,256,4,$8000
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Palette 0,$FFF,$AAA,$666
Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
Screen Display 0,128,40,320,256
Gr Writing 0
Multi Wait : Limit Mouse
DEFCLOWIN[25,0,0]
FILBOX[0,11,639,255,0]
DEFTEX[26,19,0,616,10,"{Module Optimizer V0.1",1]
DEFSCRTBK[27,617,0]
DEFTEX[28,4,13,100,24,"Load Module",1]
DEFTEX[29,4,26,100,37,"Save Module",1]
DEFTEX[30,4,39,100,50,"Unload Mod.",1]
DEFTEX[31,4,52,100,63,"About",1]
DEFTEX[32,4,65,100,76,"Quit Out!",1]
DEFTEX[33,102,13,240,24,"Optimize All",1]
DEFTEX[34,102,26,240,37,"Optimize Samples",1]
DEFTEX[35,102,39,240,50,"Optimize Song",1]
DEFTEX[36,102,52,240,63,"Optimize Pattern",1]
DEFTEX[37,102,65,240,76,"Info on Module",1]
DRABOX[243,13,635,76,1]
DEFBOX[38,247,64,631,74,4]
Gosub UPDATINFO
Return
UPDATINFO:
If Length(9)
MN$=Peek$(Start(9),30,Chr$(0))
NPATTN=0
For A=0 To 127
P=Peek(ST+952+A)
If P>NPATTN : NPATTN=P : End If
Next
Inc NPATTN
NPATTL=NPATTN*1024
NSAMPN=0
NSAMPL=0
For A=1 To 31
P=Deek(ST+12+A*30)
SAMS(A,0)=ST+1084+NPATTL+NSAMPL
SAMS(A,1)=P*2
SAMS(A,2)=Deek(ST+16+A*30)*2
SAMS(A,3)=Deek(ST+18+A*30)*2
If P : Inc NSAMPN : Add NSAMPL,P*2 : End If
Next
NLENGTH=NPATTL+NSAMPL+1084
ACTGAD[29] : ACTGAD[30] : For A=33 To 37 : ACTGAD[A] : Next
Else
MN$="No file loaded."
NLENGTH=0 : NPATTN=0 : NPATTL=0 : NSAMPN=0 : NSAMPL=0
OLENGTH=0 : OPATTN=0 : OPATTL=0 : OSAMPN=0 : OSAMPL=0
DEAGAD[29] : DEAGAD[30] : For A=33 To 37 : DEAGAD[A] : Next
End If
TEX[246,14,632,23,"{Module loaded : "+MN$]
TEX[246,22,632,31,"{Original length: "+ Extension_8_0EB8(OLENGTH,6)+" New length :"+ Extension_8_0EB8(NLENGTH,6)]
TEX[246,30,632,39,"{Num of samples : "+ Extension_8_0EB8(OSAMPN,2)+" Num of samples :"+ Extension_8_0EB8(NSAMPN,2)]
TEX[246,38,632,47,"{Num of patterns: "+ Extension_8_0EB8(OPATTN,2)+" Num of patterns:"+ Extension_8_0EB8(NPATTN,2)]
TEX[246,46,632,55,"{Samplelength : "+ Extension_8_0EB8(OSAMPL,6)+" Samplelength :"+ Extension_8_0EB8(NSAMPL,6)]
TEX[246,54,632,63,"{Patternlength : "+ Extension_8_0EB8(OPATTN*1024,6)+" Patternlength :"+ Extension_8_0EB8(NPATTN*1024,6)]
Return
LOAMOD:
FILEREQ[-1,640,200,0,"Load a module",OFILE$,OPATH$,"","Load","Cancel","",""]
F$=Param$
If F$="" Then Return
Trap Extension_8_0672 F$
If Errtrap
REQUEST["Error: "+ Extension_8_0522( Extension_8_0532 ),"Abort"]
Gosub UPDATALL
Return
End If
If Extension_8_0688 >0
REQS=0
Gosub MULTIFILE
REQS=1
Return
End If
Trap Extension_8_0456 F$,-9
If Errtrap
Erase 9
REQUEST["Error: "+ Extension_8_0522( Extension_8_0532 ),"Abort"]
Gosub UPDATALL
Return
End If
OPATH$= Extension_8_03E0(F$)
OFILE$= Extension_8_02F0(F$)
Gosub PROFILE
Return
PROFILE:
ST=Start(9)
If Extension_8_0998("M.K.")<>Leek(ST+1080)
If REQS
REQUEST["WARNING!!! No Protracker-ID found! Proceed anyway?","Proceed|Abort"]
Else
Erase 9 : Gosub UPDATALL
Return
End If
If Param=1
Erase 9
Gosub UPDATALL
Return
End If
End If
OPATTN=0
For A=0 To 127
If(A and 8)=0 Then DRAPROCBAR[38,A+1,128]
P=Peek(ST+952+A)
If P>OPATTN Then OPATTN=P
Next
Inc OPATTN
OPATTL=OPATTN*1024
OSAMPN=0 : OSAMPL=0
For A=1 To 31
DRAPROCBAR[38,A,31]
P=Deek(ST+12+A*30)
If P Then Inc OSAMPN : Add OSAMPL,P*2
Next
OLENGTH=OPATTL+OSAMPL+1084
Gosub UPDATALL
Return
MULTIFILE:
REQUEST["You have selected a directory. I assume that you want to process the whole directory.","Process|Cancel"]
If Param=1 Then Return
FILEREQ[-1,640,200,0,"Enter target directory",OFILE$,OPATH$,"","Begin","Cancel","","DS"]
TD$=Param$
If TD$="" Then Return
OPATH$= Extension_8_03E0(F$)
TD$= Extension_8_03E0(TD$)
SP=0
Extension_8_063A OPATH$
Do
F$= Extension_8_064C
Exit If F$=""
If Extension_8_0688 <0
Trap Extension_8_0456 Extension_8_03EC(OPATH$)+F$,9
If Errtrap=0
Gosub PROFILE
Gosub OPTALL
Trap Bsave Extension_8_03EC(TD$)+F$,ST To ST+NLENGTH
Add SP,OLENGTH-NLENGTH
Erase 9
Gosub UPDATALL
End If
End If
Loop
REQUEST["Total space gained:"+Str$(SP)+" Bytes.","Yeah!"]
FILEREQNOTIFY
Return
SAVMOD:
FILEREQ[-1,640,200,0,"Save the module",OFILE$,OPATH$,"","Save","Cancel","","S"]
F$=Param$
If F$="" Then Return
Bsave F$,ST To ST+NLENGTH
FILEREQNOTIFY
Return
End Proc
Procedure FILEREQNOTIFY
Shared FIL$()
FIL$(0)=""
End Proc
Procedure FILEREQ[SN,SX,SY,YP,T$,F$,D$,PAT$,OK$,FAIL$,FON$,OP$]
Shared FIL$(),MXFILES
OTH=TH
Gosub INIT
Gosub SETUPSCREEN
Gosub REFRESH
Multi Wait : Limit Mouse
OMK=0 : EXA=0 : ENT=0
Do
If Timer>25 and RDIR=1
Sort FIL$(0)
Gosub REFRESH
Timer=0
End If
Repeat
If RDIR Then Gosub EXAMINDIR Else Multi Wait
Until Amos Here
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
If MK=2 Then Gosub DEVLIST
If I$<>"" and ENT>0
STRGAD[ENT,I$]
If Param=-1
If ENT=6
F$=Mid$(FB$(6),2) : BT=4
FIL$(0)= Extension_8_08C4(FILOFF)+ Extension_8_08C4(MXNAMLEN)+RDIR$
Exit
End If
If ENT=7
DD$=D$
D$=Mid$(FB$(7),2)
If Exist(D$)
Gosub NEWREAD
Else
REQUEST["Directory "+D$+" not found!","Oh sorry!"]
D$=DD$
NEWTEX[7,"{"+D$]
End If
End If
If ENT=8
PAT$=Mid$(FB$(8),2)
Gosub NEWREAD
End If
ENT=0
End If
End If
BT=0
If MK=1 and OMK<>1
CHKMOUSE[XM,YM,1,15]
BT=Param
End If
If BT and ENT Then NEWTEX[ENT,FB$(ENT)] : ENT=0
If BT=1 Then Gosub DRAGSCREEN
If BT=11 Then Gosub SELECT
If BT=2 or BT=4 or BT=5
If RDIR
FIL$(0)=""
Else
FIL$(0)= Extension_8_08C4(FILOFF)+ Extension_8_08C4(MXNAMLEN)+RDIR$
End If
Exit
End If
If BT=3 Then Amos To Back
If BT>5 and BT<9 Then ENT=BT : STRGAD[BT,""]
If BT=9 Then Gosub DEVLIST
If BT=10 Then Gosub PARDIR
If BT=12 Then Gosub DRAGSLIDER
If BT=13 Then Gosub ARROWUP
If BT=14 Then Gosub ARROWDOWN
If BT=15 Then Gosub FLIPPAGE
OMK=MK
Loop
Screen Close SN
For A=1 To 15
DISGAD[A]
Next
If BT=4 Then A$= Extension_8_03EC(D$)+F$ Else A$=""
TH=OTH
Trap Limit Mouse
Pop Proc[A$]
INIT:
If SN<0
For A=0 To 7
Trap Screen A
If Errtrap : SN=A : Exit : End If
Next
End If
If T$="" Then T$="AMCAF File Selector"
If D$="" Then D$= Extension_8_03E0(Dir$)
If Instr(OP$,"P") Then PAT=1 Else PAT=0
If Instr(OP$,"R") Then FIL$(0)=""
If Instr(OP$,"D") Then DIONLY=1 Else DIONLY=0
If Instr(OP$,"Q") Then QUICK=1 Else QUICK=0
If Instr(OP$,"S") Then SAVREQ=1 Else SAVREQ=0
KICK=Deek(Leek(4)+20)
If KICK<37 Then PAT=0
SX=Max(Min((SX+15) and $FFE0,640),160)
SY=Max(Min(SY,256),96)
If YP<40 Then YP=168-SY/2
If FIL$(0)<>""
RDIR$=Mid$(FIL$(0),5)
If D$<>RDIR$
FIL$(0)=""
RDIR=1 : NUMFIL=0 : FILOFF=0 : SELFIL=-1
Return
End If
For A=1 To MXFILES
Exit If FIL$(A)=Chr$(255)
Next
NUMFIL=A-1 : FILOFF= Extension_8_098C(FIL$(0))
MXNAMLEN= Extension_8_098C(Mid$(FIL$(0),3))
RDIR=0
Else
RDIR=1 : NUMFIL=0 : FILOFF=0 : SELFIL=-1
End If
Return
SETUPSCREEN:
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Palette 0,$FFF,$AAA,$666
Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
Screen Display SN,288-SX/4,YP,SX,SY
If FON$<>""
A=Val(Left$(FON$,2))
If A>0
Trap Extension_8_05B0 Mid$(FON$,3),A
If Errtrap=0
TH=A
End If
End If
End If
Gr Writing 0
DEFCLOWIN[2,0,0]
FILBOX[0,TH+3,SX-1,SY-1,0]
DEFTEX[1,19,0,SX-24,TH+2,"{"+T$,3]
DEFSCRTBK[3,SX-23,0]
A=Text Length("Pattern:")+8
If DIONLY=0
DEFTEX[6,A,SY-TH*2-9,SX-5,SY-TH-7,"{"+F$,7]
TEX[4,FB(6,1),FB(6,0),FB(6,3),"}File:"]
FY2=SY-TH*3-13
Else
FY2=SY-TH*2-9
End If
DEFTEX[7,A,FY2,SX-5,FY2+TH+2,"{"+D$,7]
TEX[4,FB(7,1),FB(7,0),FB(7,3),"}Dir:"]
If PAT
DEFTEX[8,A,FY2-TH-4,SX-5,FY2-2,"{"+PAT$,7]
TEX[4,FB(8,1),FB(8,0),FB(8,3),"}Pattern:"]
FY2=FB(8,1)-2
Else
FY2=FB(7,1)-2
End If
DEFTEX[4,4,SY-TH-5,SX/4-2,SY-3,OK$,1]
DEFTEX[9,SX/4+1,SY-TH-5,SX/2-3,SY-3,"Devices",1]
DEFTEX[10,SX/2,SY-TH-5,SX/2+SX/4-4,SY-3,"Parent",1]
If Right$(D$,1)=":" Then DEAGAD[10]
DEFTEX[5,SX/2+SX/4-1,SY-TH-5,SX-5,SY-3,FAIL$,1]
DEFARROWU[13,SX-22,FY2-17]
DEFARROWD[14,SX-22,FY2-8]
D=(FY2-TH-9)
MXLIN=D/TH
FY1=TH+7+(D-TH*MXLIN)/2
DEFBOX[15,SX-22,TH+5,SX-5,FY2-18,3]
DRASLIDER[15,FILOFF,MXLIN,NUMFIL,12]
Return
PARDIR:
If Right$(D$,1)=":" Then Return
If RDIR Then Extension_8_0660
D$= Extension_8_03E0(D$)
Gosub NEWREAD
Return
NEWREAD:
If RDIR Then Extension_8_0660
NEWTEX[7,"{"+D$]
EXA=0 : RDIR=1 : Gosub EXAMINDIR
If Right$(D$,1)=":" Then DEAGAD[10] Else ACTGAD[10]
ACTGAD[9]
Return
DEVLIST:
If RDIR=1 or Right$(FIL$(NUMFIL),1)=":" Then Return
FILOFF=NUMFIL
F$=Dev First$("")
While NUMFIL<MXFILES and(F$<>"")
F$=Mid$(F$,2,Instr(F$,":")-1)
TYP= Extension_8_02D0(F$)
If TYP=0
MXNAMLEN=Max(MXNAMLEN,Len(F$))
Request Off
Trap Extension_8_0672 F$
A=Errtrap
Request On
If A=0
NAM$= Extension_8_06D8
SOR$="A"+Upper$(F$)+Chr$(0)+" <Dev> "+F$+Chr$(0)+" ("+NAM$+") "
Else
SOR$="A"+Upper$(F$)+Chr$(0)+" <Dev> "+F$+Chr$(0)+" "+ Extension_8_0522( Extension_8_0532 )
End If
Inc NUMFIL
FIL$(NUMFIL)=SOR$
End If
If TYP=1
MXNAMLEN=Max(MXNAMLEN,Len(F$))
Inc NUMFIL
FIL$(NUMFIL)="B"+Upper$(F$)+Chr$(0)+" <Dir> "+F$+Chr$(0)+" Assign"
End If
F$=Dev Next$
Wend
Sort FIL$(0)
FILOFF=Min(FILOFF,NUMFIL-MXLIN)
Gosub REFRESH
DEAGAD[9]
Return
SELECT:
Y=YM-FY1
If Y<0 or Y>=FY1+MXLIN*TH Then Return
F=Y/TH+FILOFF+1
If F>NUMFIL Then Return
TYP=Asc(FIL$(F))
A$=Peek$(Varptr(FIL$(F))+Instr(FIL$(F),Chr$(0))+8,40,Chr$(0))
If TYP=32
D$= Extension_8_03EC(D$)+A$
Gosub NEWREAD
End If
If TYP=45
F$=A$
NEWTEX[6,"{"+F$]
If SELFIL<>F
If SELFIL-FILOFF=>0 and SELFIL-FILOFF<=MXLIN
A=SELFIL-FILOFF-1 : SELFIL=-1
Gosub LISTFILE
End If
SELFIL=F : A=SELFIL-FILOFF-1 : Timer=0
Gosub LISTFILE
Else
If Timer<50 and SAVREQ=0
BT=4
End If
End If
End If
If TYP=65 or TYP=66
D$=A$ : Gosub NEWREAD
End If
Return
DRAGSCREEN:
PUSHGAD[BT]
A=YM
Limit Mouse X Hard(0),40+A To X Hard(SX-1),296-SY+A
Repeat
If RDIR : Gosub EXAMINDIR : Else Multi Wait : End If
YM=Y Screen(Y Mouse)-A : MK=Mouse Key : I$=Inkey$
Add YP,YM
Screen Display SN,,YP,,
Until MK<>1
Multi Wait : Limit Mouse
OMK=1
RELEGAD[BT]
Return
ARROWUP:
PUSHGAD[BT]
Repeat
Multi Wait
MK=Mouse Key : I$=Inkey$
If FILOFF>0
Dec FILOFF
Gosub SCROLFILES
End If
Until MK<>1
RELEGAD[BT]
Return
ARROWDOWN:
PUSHGAD[BT]
Repeat
Multi Wait
MK=Mouse Key : I$=Inkey$
If FILOFF<NUMFIL-MXLIN
Inc FILOFF
Gosub SCROLFILES
End If
Until MK<>1
RELEGAD[BT]
Return
DRAGSLIDER:
DISGAD[12]
O=YM-FB(12,1)
Repeat
Multi Wait
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
DRAGSLIDER[15,YM-O,MXLIN,NUMFIL,12]
If NUMFIL>MXLIN
FILOFF=Param
Gosub SCROLFILES
End If
Until MK<>1
ENAGAD[12]
DRASLIDER[15,FILOFF,MXLIN,NUMFIL,12]
OMK=1
Return
REFRESH:
DEFBOX[11,4,TH+5,SX-25,FY2,7]
If NUMFIL>0
For A=0 To Min(MXLIN-1,NUMFIL-1)
Gosub LISTFILE
Next
OLDOFF=FILOFF
End If
If FB(12,4) and 1 Then DRASLIDER[15,FILOFF,MXLIN,NUMFIL,12]
Return
SCROLFILES:
If OLDOFF=FILOFF Then Return
X1=FB(11,0)+2 : X2=FB(11,2)-2 : Y1=FY1+1 : Y2=FY1+TH*MXLIN+1
D=FILOFF-OLDOFF
If Abs(D)>MXLIN-2 Then Gosub REFRESH : Return
If D>0
Screen Copy SN,X1,Y1+D*TH,X2,Y2 To SN,X1,Y1
For A=MXLIN-D To MXLIN-1
Gosub LISTFILE
Next
Else
Screen Copy SN,X1,Y1,X2,Y2+D*TH To SN,X1,Y1-D*TH
For A=0 To -D-1
Gosub LISTFILE
Next
End If
OLDOFF=FILOFF
If FB(12,4) and 1 Then DRASLIDER[15,FILOFF,MXLIN,NUMFIL,12]
Return
FLIPPAGE:
If NUMFIL<MXLIN Then Return
If YM>(FB(12,1)+FB(12,3))/2
FILOFF=Min(FILOFF+MXLIN,NUMFIL-MXLIN)
Else
FILOFF=Max(FILOFF-MXLIN,0)
End If
Gosub REFRESH
DRASLIDER[15,FILOFF,MXLIN,NUMFIL,12]
Return
LISTFILE:
If QUICK
A$=FIL$(A+FILOFF+1)
A$=Peek$(Varptr(A$)+Instr(A$,Chr$(0)),40,Chr$(0))
Else
A$=FIL$(A+FILOFF+1)
B$=Mid$(A$,Instr(A$,Chr$(0))+1)
FIL$=Left$(B$,Instr(B$,Chr$(0))-1)
RES$=Mid$(B$,Len(FIL$)+2)
A$=FIL$+Space$(MXNAMLEN-(Len(FIL$)-8))+RES$
End If
If Asc(FIL$(A+FILOFF+1))<>45
TEX2[6,FY1+A*TH,SX-28,FY1+(A+1)*TH+1,"{"+A$]
Else
TEX[6,FY1+A*TH,SX-28,FY1+(A+1)*TH+1,"{"+A$]
End If
If A+FILOFF+1=SELFIL
Gr Writing 2
Ink 2 : Bar 8,FY1+A*TH+1 To SX-29,FY1+(A+1)*TH
Gr Writing 0
End If
Return
EXAMINDIR:
If EXA=0
FILOFF=0 : NUMFIL=0 : MXNAMLEN=5 : RDIR$=D$
SELFIL=-1
For A=1 To MXFILES
FIL$(A)=Chr$(255)
Next
Trap Extension_8_063A D$
If Errtrap=0
EXA=1 : Timer=0
Else
Gosub REFRESH
REQUEST[ Extension_8_0522( Extension_8_0532 )+"!","Cancel"]
RDIR=0 : Return
End If
End If
If NUMFIL=MXFILES
Extension_8_0660
Sort FIL$(0)
RDIR=0
Gosub REFRESH
Return
End If
FIL$= Extension_8_064C
If FIL$=""
Sort FIL$(0)
Timer=0 : RDIR=0 : Gosub REFRESH
Return
End If
TYP= Extension_8_0688
If QUICK=0
DATE$=Mid$( Extension_8_0F0A( Extension_8_06F4 ),4)+" "+ Extension_8_0F1A( Extension_8_070E )
COM$= Extension_8_0762
FLAG$= Extension_8_0728( Extension_8_0742 )
End If
If TYP<0
If DIONLY=0
If KICK>36
A= Extension_8_0300(FIL$,PAT$)
Else
A=-1
End If
Else
A=0
End If
If A
MXNAMLEN=Max(MXNAMLEN,Len(FIL$))
SIZE$= Extension_8_0EC8( Extension_8_06A2 ,7)
Inc NUMFIL
If QUICK
FIL$(NUMFIL)="-"+Upper$(FIL$)+Chr$(0)+SIZE$+" "+FIL$+Chr$(0)
Else
SOR$="-"+Upper$(FIL$)+Chr$(0)+SIZE$+" "+FIL$+Chr$(0)+DATE$+" "+FLAG$+" "+COM$
FIL$(NUMFIL)=SOR$
End If
End If
Else
MXNAMLEN=Max(MXNAMLEN,Len(FIL$))
Inc NUMFIL
If QUICK
FIL$(NUMFIL)=" "+Upper$(FIL$)+Chr$(0)+" <Dir> "+FIL$+Chr$(0)
Else
SOR$=" "+Upper$(FIL$)+Chr$(0)+" <Dir> "+FIL$+Chr$(0)+DATE$+" "+FLAG$+" "+COM$
FIL$(NUMFIL)=SOR$
End If
End If
Return
End Proc
Procedure REQUEST[T$,OP$]
Dim LIN$(10)
OPT=1 : OTH=TH
For A=1 To Len(OP$)
If Mid$(OP$,A,1)="|" Then Inc OPT
Next
If Screen=-1
TH=8
SX=Max(Len(OP$)*8+OPT*32+8+15,320) and $FE0
LPR=SX/8-2
Else
SX=Max(Text Length(OP$)+OPT*32+8+15,320) and $FE0
LPR=SX/Text Length("M")-2
End If
LI=0 : LP=1 : LILE=0
For A=1 To Len(T$)
P=Asc(Mid$(T$,A,1))
Inc LILE
If LILE>LPR
LIN$(LI)=Mid$(T$,LP,SP-LP+1)
LP=SP+2 : LILE=A-LP
Inc LI
End If
If P=32 Then SP=A-1
If P=167 Then LILE=LPR+2 : SP=A-1
Next
LIN$(LI)=Mid$(T$,LP) : Inc LI
NBLI=LI-1
SY=32+LI*TH
If Screen=-1
SN=0
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Palette 0,$FFF,$AAA,$666
Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
Screen Display SN,288-SX/4,168-SY/2,SX,SY
Gr Writing 0
Wait Vbl : Limit Mouse
OLDSCR=-1
XP=0 : YP=0
Else
If Screen Height<SY or Screen Width<SX or Screen Colour<4
For A=0 To 7
Trap Screen A
If Errtrap : SN=A : Exit : End If
Next
OLDSCR=Screen
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Get Palette OLDSCR
Screen Display SN,288-SX/4,168-SY/2,SX,SY
Gr Writing 0
Wait Vbl : Limit Mouse
XP=0 : YP=0
Else
XP=(Screen Width-SX)/2
YP=(Screen Height-SY)/2
SN=-1
Get Cblock 9,XP-4,YP-2,SX+16,SY+4
DRABOX[XP-4,YP-2,XP+SX+3,YP+SY+1,0]
DRABOX[XP-2,YP-1,XP+SX+1,YP+SY,1]
Limit Mouse X Hard(XP),Y Hard(YP) To X Hard(XP+SX-1),Y Hard(YP+SY-1)
End If
End If
FILBOX[XP,YP,XP+SX-1,YP+SY-1,0]
For A=0 To NBLI
TEX[XP+4,YP+4+A*TH,XP+SX-5,YP+12+A*TH,LIN$(A)]
Next
OP=0
For A=1 To OPT
NP=Instr(OP$,"|",OP+1) : If NP=0 Then NP=Len(OP$)+1
T$=Mid$(OP$,OP+1,NP-OP-1)
X1=XP+4+((A-1)*(SX-6))/OPT
X2=XP+1+(A*(SX-6))/OPT
DEFTEX[15+A,X1,YP+SY-TH-14,X2,YP+SY-3,T$,1]
OP=NP
Next
OMK=0
Do
Repeat : Multi Wait : Until Amos Here
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
BT=0
If MK=1 and OMK<>1
CHKMOUSE[XM,YM,16,15+OPT]
BT=Param
End If
Exit If BT
OMK=MK
Loop
For A=1 To OPT
DISGAD[15+A]
Next
Limit Mouse
If SN>-1
Screen Close SN
If OLDSCR>-1
Screen OLDSCR
End If
Else
Put Cblock 9
Del Cblock 9
End If
TH=OTH
End Proc[BT-16]
Procedure NUMENT[T$,OP$,DEFNUM,LOWER,UPPER]
Dim LIN$(10)
OPT=1 : OTH=TH
For A=1 To Len(OP$)
If Mid$(OP$,A,1)="|" Then Inc OPT
Next
If Screen=-1
TH=8
SX=Max(Len(OP$)*8+OPT*32+8+15,320) and $FE0
LPR=SX/8-2
Else
SX=Max(Text Length(OP$)+OPT*32+8+15,320) and $FE0
LPR=SX/Text Length("M")-2
End If
LI=0 : LP=1 : LILE=0
For A=1 To Len(T$)
P=Asc(Mid$(T$,A,1))
Inc LILE
If LILE>LPR
LIN$(LI)=Mid$(T$,LP,SP-LP+1)
LP=SP+2 : LILE=A-LP
Inc LI
End If
If P=32 Then SP=A-1
If P=167 Then LILE=LPR+2 : SP=A-1
Next
LIN$(LI)=Mid$(T$,LP) : Inc LI
NBLI=LI-1
SY=48+LI*TH
If Screen=-1
SN=0
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Palette 0,$FFF,$AAA,$666
Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
Screen Display SN,288-SX/4,168-SY/2,SX,SY
Gr Writing 0
Wait Vbl : Limit Mouse
OLDSCR=-1
XP=0 : YP=0
Else
If Screen Height<SY or Screen Width<SX or Screen Colour<4
For A=0 To 7
Trap Screen A
If Errtrap : SN=A : Exit : End If
Next
OLDSCR=Screen
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Get Palette OLDSCR
Screen Display SN,288-SX/4,168-SY/2,SX,SY
Gr Writing 0
Wait Vbl : Limit Mouse
XP=0 : YP=0
Else
XP=(Screen Width-SX)/2
YP=(Screen Height-SY)/2
SN=-1
Get Cblock 9,XP-4,YP-2,SX+16,SY+4
DRABOX[XP-4,YP-2,XP+SX+3,YP+SY+1,0]
DRABOX[XP-2,YP-1,XP+SX+1,YP+SY,1]
Limit Mouse X Hard(XP),Y Hard(YP) To X Hard(XP+SX-1),Y Hard(YP+SY-1)
End If
End If
FILBOX[XP,YP,XP+SX-1,YP+SY-1,0]
For A=0 To NBLI
TEX[XP+4,YP+4+A*TH,XP+SX-5,YP+12+A*TH,LIN$(A)]
Next
DEFTEX[16,XP+4,YP+SY-TH*2-18,XP+SX-5,YP+SY-TH-16,"{"+Mid$(Str$(DEFNUM),2),7]
OP=0
For A=1 To OPT
NP=Instr(OP$,"|",OP+1) : If NP=0 Then NP=Len(OP$)+1
T$=Mid$(OP$,OP+1,NP-OP-1)
X1=XP+4+((A-1)*(SX-6))/OPT
X2=XP+1+(A*(SX-6))/OPT
DEFTEX[16+A,X1,YP+SY-TH-14,X2,YP+SY-3,T$,1]
OP=NP
Next
OMK=0
STRGAD[16,""]
Do
Repeat : Multi Wait : Until Amos Here
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
BT=17
If I$<>""
If I$<" " or(I$>="0" and I$<="9")
If Not(I$="0" and NUM=0)
STRGAD[16,I$]
Exit If Param=-1
End If
End If
End If
NUM=Val(Mid$(FB$(16),2))
If NUM<LOWER
NUM=LOWER
NEWTEX[16,"{"+Mid$(Str$(NUM),2)]
STRGAD[16,""]
End If
If NUM>UPPER
NUM=UPPER
NEWTEX[16,"{"+Mid$(Str$(NUM),2)]
STRGAD[16,""]
End If
BT=0
If MK=1 and OMK<>1
CHKMOUSE[XM,YM,16,16+OPT]
BT=Param
End If
Exit If BT>16
OMK=MK
Loop
For A=1 To OPT+1
DISGAD[15+A]
Next
Limit Mouse
If SN>-1
Screen Close SN
If OLDSCR>-1
Screen OLDSCR
End If
Else
Put Cblock 9
Del Cblock 9
End If
TH=OTH
A$= Extension_8_0EB8(BT-17,1)+Mid$(Str$(NUM),2)
End Proc[A$]
Procedure TXTENT[T$,OP$,DEFTXT$,NUMLET]
Dim LIN$(10)
OPT=1 : OTH=TH
For A=1 To Len(OP$)
If Mid$(OP$,A,1)="|" Then Inc OPT
Next
If Screen=-1
TH=8
SX=Max(Len(OP$)*8+OPT*32+8+15,320) and $FE0
LPR=SX/8-2
Else
SX=Max(Text Length(OP$)+OPT*32+8+15,320) and $FE0
LPR=SX/Text Length("M")-2
End If
LI=0 : LP=1 : LILE=0
For A=1 To Len(T$)
P=Asc(Mid$(T$,A,1))
Inc LILE
If LILE>LPR
LIN$(LI)=Mid$(T$,LP,SP-LP+1)
LP=SP+2 : LILE=A-LP
Inc LI
End If
If P=32 Then SP=A-1
If P=167 Then LILE=LPR+2 : SP=A-1
Next
LIN$(LI)=Mid$(T$,LP) : Inc LI
NBLI=LI-1
SY=48+LI*TH
If Screen=-1
SN=0
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Palette 0,$FFF,$AAA,$666
Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
Screen Display SN,288-SX/4,168-SY/2,SX,SY
Gr Writing 0
Wait Vbl : Limit Mouse
OLDSCR=-1
XP=0 : YP=0
Else
If Screen Height<SY or Screen Width<SX or Screen Colour<4
For A=0 To 7
Trap Screen A
If Errtrap : SN=A : Exit : End If
Next
OLDSCR=Screen
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Get Palette OLDSCR
Screen Display SN,288-SX/4,168-SY/2,SX,SY
Gr Writing 0
Wait Vbl : Limit Mouse
XP=0 : YP=0
Else
XP=(Screen Width-SX)/2
YP=(Screen Height-SY)/2
SN=-1
Get Cblock 9,XP-4,YP-2,SX+16,SY+4
DRABOX[XP-4,YP-2,XP+SX+3,YP+SY+1,0]
DRABOX[XP-2,YP-1,XP+SX+1,YP+SY,1]
Limit Mouse X Hard(XP),Y Hard(YP) To X Hard(XP+SX-1),Y Hard(YP+SY-1)
End If
End If
FILBOX[XP,YP,XP+SX-1,YP+SY-1,0]
For A=0 To NBLI
TEX[XP+4,YP+4+A*TH,XP+SX-5,YP+12+A*TH,LIN$(A)]
Next
DEFTEX[16,XP+4,YP+SY-TH*2-18,XP+SX-5,YP+SY-TH-16,"{"+DEFTXT$,7]
OP=0
For A=1 To OPT
NP=Instr(OP$,"|",OP+1) : If NP=0 Then NP=Len(OP$)+1
T$=Mid$(OP$,OP+1,NP-OP-1)
X1=XP+4+((A-1)*(SX-6))/OPT
X2=XP+1+(A*(SX-6))/OPT
DEFTEX[16+A,X1,YP+SY-TH-14,X2,YP+SY-3,T$,1]
OP=NP
Next
OMK=0
STRGAD[16,""]
Do
Repeat : Multi Wait : Until Amos Here
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
BT=17
If I$<>""
STRGAD[16,I$]
Exit If Param=-1
End If
TXT$=Mid$(FB$(16),2)
If Len(TXT$)>NUMLET
NEWTEX[16,"{"+Left$(TXT$,NUMLET)]
STRGAD[16,""]
End If
BT=0
If MK=1 and OMK<>1
CHKMOUSE[XM,YM,16,16+OPT]
BT=Param
End If
Exit If BT>16
OMK=MK
Loop
For A=1 To OPT+1
DISGAD[15+A]
Next
Limit Mouse
If SN>-1
Screen Close SN
If OLDSCR>-1
Screen OLDSCR
End If
Else
Put Cblock 9
Del Cblock 9
End If
TH=OTH
A$= Extension_8_0EB8(BT-17,1)+TXT$
End Proc[A$]
Procedure CHKMOUSE[XM,YM,LL,UL]
For BT=LL To UL
If XM=>FB(BT,0) and XM<=FB(BT,2) and YM=>FB(BT,1) and YM<=FB(BT,3) and(FB(BT,4) and 1) Then Exit
Next
If BT>UL Then Pop Proc[0]
If FB(BT,4) and 2 Then Pop Proc[BT]
OST=-1 : AA=0
ST= Extension_8_093A(FB(BT,4) and 4,2)
Repeat
Multi Wait
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
If XM=>FB(BT,0) and XM<=FB(BT,2) and YM=>FB(BT,1) and YM<=FB(BT,3) Then A=1 Else A=0
If AA<>A Then AA=A : ST=1-ST
If OST<>ST
If ST
PUSHGAD[BT]
Else
RELEGAD[BT]
End If
OST=ST
End If
Until MK<>1
If A=0 Then Pop Proc[0]
If ST
RELEGAD[BT]
Else
PUSHGAD[BT]
End If
End Proc[BT]
Procedure DEFTEX[BT,X1,Y1,X2,Y2,T$,FL]
TEXBOX[X1,Y1,X2,Y2, Extension_8_093A(FL and 4,2),T$]
DEFGAD[BT,X1,Y1,X2,Y2,FL]
FB$(BT)=T$
End Proc
Procedure DEFBOX[BT,X1,Y1,X2,Y2,FL]
FILBOX[X1,Y1,X2,Y2, Extension_8_093A(FL and 4,2)]
DEFGAD[BT,X1,Y1,X2,Y2,FL]
End Proc
Procedure DEFGAD[BT,X1,Y1,X2,Y2,FL]
FB(BT,0)=X1 : FB(BT,1)=Y1
FB(BT,2)=X2 : FB(BT,3)=Y2
FB(BT,4)=FL
FB$(BT)=""
End Proc
Procedure DEAGAD[BT]
If(FB(BT,4) and 1)=0 Then Pop Proc
FB(BT,4)=FB(BT,4) and $FE
Set Pattern 2
Ink 3 : Bar FB(BT,0),FB(BT,1) To FB(BT,2),FB(BT,3)
Set Pattern 0
End Proc
Procedure ACTGAD[BT]
If FB(BT,4) and 1 Then Pop Proc
CLRGAD[BT]
FB(BT,4)=FB(BT,4) or 1
If FB$(BT)<>""
TEXBOX[FB(BT,0),FB(BT,1),FB(BT,2),FB(BT,3), Extension_8_093A(FB(BT,4) and 4,2),FB$(BT)]
Else
DRABOX[FB(BT,0),FB(BT,1),FB(BT,2),FB(BT,3), Extension_8_093A(FB(BT,4) and 4,2)]
End If
End Proc
Procedure DISGAD[BT]
FB(BT,4)=FB(BT,4) and $FE
End Proc
Procedure ENAGAD[BT]
FB(BT,4)=FB(BT,4) or 1
End Proc
Procedure CLRGAD[BT]
FB(BT,4)=FB(BT,4) and $FE
Ink 2 : Bar FB(BT,0),FB(BT,1) To FB(BT,2),FB(BT,3)
End Proc
Procedure PUSHGAD[BT]
DRABOX[FB(BT,0),FB(BT,1),FB(BT,2),FB(BT,3),1]
End Proc
Procedure RELEGAD[BT]
DRABOX[FB(BT,0),FB(BT,1),FB(BT,2),FB(BT,3),0]
End Proc
Procedure FILBOX[X1,Y1,X2,Y2,SE]
Ink 2 : Bar X1+2,Y1+1 To X2-2,Y2-1
Extension_8_0388 X1,Y2,2
Extension_8_0388 X2,Y1,2
Ink 1+SE*2 : Draw X1,Y2-1 To X1,Y1 : Draw To X2-1,Y1 : Draw X1+1,Y2-1 To X1+1,Y1
Ink 3-SE*2 : Draw X1+1,Y2 To X2,Y2 : Draw To X2,Y1+1 : Draw X2-1,Y2 To X2-1,Y1+1
End Proc
Procedure NEWTEX[BT,T$]
FB$(BT)=T$
TEX[FB(BT,0)+1,FB(BT,1),FB(BT,2)-1,FB(BT,3),T$]
End Proc
Procedure TEXBOX[X1,Y1,X2,Y2,SE,T$]
TEX[X1+1,Y1,X2-1,Y2,T$]
Extension_8_0388 X1,Y2,2 : Extension_8_0388 X2,Y1,2
Ink 1+SE*2 : Draw X1,Y2-1 To X1,Y1 : Draw To X2-1,Y1 : Draw X1+1,Y2-1 To X1+1,Y1
Ink 3-SE*2 : Draw X1+1,Y2 To X2,Y2 : Draw To X2,Y1+1 : Draw X2-1,Y2 To X2-1,Y1+1
End Proc
Procedure TEX[X1,Y1,X2,Y2,T$]
If Asc(T$)=123
M=1 : T$=Mid$(T$,2)
Else
If Asc(T$)=125
M=2 : T$=Mid$(T$,2)
Else
M=0
End If
End If
TL=Text Length(T$)
While TL>(X2-X1)-4
T$=Left$(T$,Len(T$)-1)
TL=Text Length(T$)
Wend
If M=1
X=X1+4 : Y=Y1+1
Else
If M=2
X=X2-Text Length(T$)-2 : Y=Y1+1
Else
X=(X1+X2-TL)/2 : Y=(Y1+Y2-TH+1)/2
End If
End If
If Y2>0 Then Ink 2 : Bar X1+1,Y1+1 To X2-1,Y2-1
Ink 0 : Text X,Y+Text Base,T$
End Proc
Procedure TEX2[X1,Y1,X2,Y2,T$]
If Asc(T$)=123
M=1 : T$=Mid$(T$,2)
Else
If Asc(T$)=125
M=2 : T$=Mid$(T$,2)
Else
M=0
End If
End If
TL=Text Length(T$)
While TL>(X2-X1)-4
T$=Left$(T$,Len(T$)-1)
TL=Text Length(T$)
Wend
If M=1
X=X1+4 : Y=Y1+1
Else
If M=2
X=X2-Text Length(T$)-2 : Y=Y1+1
Else
X=(X1+X2-TL)/2 : Y=(Y1+Y2-TH+1)/2
End If
End If
If Y2>0 Then Ink 2 : Bar X1+1,Y1+1 To X2-1,Y2-1
Ink 1 : Text X,Y+Text Base,T$
End Proc
Procedure DRABOX[X1,Y1,X2,Y2,SE]
Ink 1+SE*2 : Draw X1,Y2-1 To X1,Y1 : Draw To X2-1,Y1 : Draw X1+1,Y2-1 To X1+1,Y1
Ink 3-SE*2 : Draw X1+1,Y2 To X2,Y2 : Draw To X2,Y1+1 : Draw X2-1,Y2 To X2-1,Y1+1
End Proc
Procedure STRGAD[BT,I$]
Shared POS
A$=FB$(BT)
If I$=""
POS=Len(A$)-1
End If
If I$>Chr$(31) Then A$=Left$(A$,POS+1)+I$+Mid$(A$,POS+2) : Inc POS
If I$=Chr$(8) and POS>0 Then A$=Left$(A$,POS)+Mid$(A$,POS+2) : Dec POS
If I$=Cleft$ and POS>0 Then Dec POS
If I$=Cright$ and POS<Len(A$)-1 Then Inc POS
If I$=Chr$(13)
NEWTEX[BT,A$]
Pop Proc[-1]
End If
NEWTEX[BT,A$]
X1=FB(BT,0)+5+Text Length(Mid$(A$,2,POS)) : Y1=FB(BT,1)+1
X2=X1+Max(Text Length(Mid$(A$,POS+2,1)),4)
If X2<FB(BT,2)-4
Gr Writing 2
Ink 3 : Bar X1,Y1 To X2-1,Y1+TH-1
Gr Writing 0
End If
End Proc[0]
Procedure DEFCLOWIN[BT,X,Y]
DRACLOWIN[X,Y]
DEFGAD[BT,X,Y,X+18,Y+TH+2,1]
End Proc
Procedure DRACLOWIN[X,Y]
FILBOX[X,Y,X+18,Y+TH+2,0]
Ink 0 : Box 7+X,3+Y To 11+X,Y+TH-1
End Proc
Procedure DEFSCRTBK[BT,X,Y]
DRASCRTBK[X,Y]
DEFGAD[BT,X,Y,X+22,Y+TH+2,1]
End Proc
Procedure DRASCRTBK[X,Y]
FILBOX[X,Y,X+22,Y+TH+2,0]
Ink 0 : Box 4+X,2+Y To 14+X,Y+TH/2+2
Ink 2 : Bar 8+X,Y+TH/2 To 18+X,Y+TH
Ink 0 : Box 8+X,Y+TH/2 To 18+X,Y+TH
End Proc
Procedure DEFARROWU[BT,X,Y]
DRAARROWU[X,Y]
DEFGAD[BT,X,Y,X+17,Y+8,3]
End Proc
Procedure DRAARROWU[X,Y]
DRABOX[X,Y,X+17,Y+8,0]
Extension_8_1016 X+4,Y+6 To X+8,Y+2,0
Extension_8_1016 X+5,Y+6 To X+8,Y+3,0
Extension_8_1016 X+9,Y+2 To X+13,Y+6,0
Extension_8_1016 X+9,Y+3 To X+12,Y+6,0
End Proc
Procedure DEFARROWD[BT,X,Y]
DRAARROWD[X,Y]
DEFGAD[BT,X,Y,X+17,Y+8,3]
End Proc
Procedure DRAARROWD[X,Y]
DRABOX[X,Y,X+17,Y+8,0]
Extension_8_1016 X+4,Y+2 To X+8,Y+6,0
Extension_8_1016 X+5,Y+2 To X+8,Y+5,0
Extension_8_1016 X+9,Y+6 To X+13,Y+2,0
Extension_8_1016 X+9,Y+5 To X+12,Y+2,0
End Proc
Procedure DRAPROCBAR[BT,POS,MX]
X1=FB(BT,0)+2 : X2=FB(BT,2)-2 : Y1=FB(BT,1)+1 : Y2=FB(BT,3)-1
DX=X2-X1
PX=X1+(POS*DX)/MX
If PX>X1 and PX<X2
Ink 0 : Bar X1,Y1 To PX,Y2
Ink 2 : Bar PX,Y1 To X2,Y2
End If
If PX=X1 Then Ink 2 : Bar X1,Y1 To X2,Y2
If PX=X2 Then Ink 0 : Bar X1,Y1 To X2,Y2
End Proc
Procedure DRASLIDER[BT,LINOFF,PAG,NUMLIN,NB]
D=(FB(BT,3)-FB(BT,1))-4
Y1=(LINOFF*D)/Max(NUMLIN,PAG)+FB(BT,1)+2
Y2=((LINOFF+PAG)*D)/Max(NUMLIN,PAG)+FB(BT,1)+2
DEFGAD[NB,FB(BT,0)+4,Y1,FB(BT,2)-4,Y2,3]
Ink 2
If Y1>FB(BT,1)+2 Then Bar FB(BT,0)+4,FB(BT,1)+1 To FB(BT,2)-4,Y1-1
If Y2<FB(BT,3)-2 Then Bar FB(BT,0)+4,Y2+1 To FB(BT,2)-4,FB(BT,3)-1
If Y2-Y1>0
Ink 0 : Bar FB(BT,0)+4,Y1 To FB(BT,2)-4,Y2
Else
Extension_8_1016 FB(BT,0)+4,Y1 To FB(BT,2)-4,Y2,0
End If
End Proc
Procedure DRAGSLIDER[BT,Y,PAG,NUMLIN,NB]
Y1=FB(NB,1) : Y2=FB(NB,3) : D=Y2-Y1
Y1=Min(Max(FB(BT,1)+2,Y),FB(BT,3)-2-D)
Y2=Y1+D : FB(NB,1)=Y1 : FB(NB,3)=Y2
Ink 2
If Y1>FB(BT,1)+2 Then Bar FB(BT,0)+4,FB(BT,1)+1 To FB(BT,2)-4,Y1-1
If Y2<FB(BT,3)-2 Then Bar FB(BT,0)+4,Y2+1 To FB(BT,2)-4,FB(BT,3)-1
If Y2-Y1>0
Ink 1 : Bar FB(BT,0)+4,Y1 To FB(BT,2)-4,Y2
Else
Extension_8_1016 FB(BT,0)+4,Y1 To FB(BT,2)-4,Y2,1
End If
D=FB(BT,3)-FB(BT,1)-4
L=Min(((Y1-FB(BT,1)-2)*Max(NUMLIN,PAG)+D/2)/D,NUMLIN-PAG)
End Proc[L]