home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format 85
/
af085a.adf
/
archives
/
af85a1.lzx
/
Dialog_Procedures
/
Source
/
AllProcs.AMOS
/
AllProcs.amosSourceCode
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
NeXTSTEP
RISC OS
UTF-8
Wrap
AMOS Source Code
|
1978-07-26
|
42.2 KB
|
2,192 lines
Set Buffer 30
'
' ***********************************
' *** AMOS Dialog Procedures V3.6 *** Written By John.A.Kinsella
' ***********************************
'
' *** SET VARIABLES HERE ****************************************************
'
_DIALOGBUTTON$=""
A#=0.0 : Rem Compiler Fix.
_WINOX=-1
_WINOY=-1
'
_MAXFILES=200
_FILES=0
_PATH$="Ram:"
_WILD$="**"
_FILE$=""
Dim _FILENAME$(_MAXFILES)
'
' *** SET GLOBAL VARIABLES HERE *********************************************
'
Global A#,_WINX1,_WINY1,_WINX2,_WINY2,_WINOX,_WINOY
'
' *** Open Default Screen & Set Font.
'
_OPENDIALOGSCREEN[0,256,44]
'
Limit Mouse 128,44 To 447,298
'
Get Rom Fonts
_SETFONT["Topaz",8]
'
' *** INSERT PROGRAM BELOW THIS LINE ****************************************
'
'
' *** INSERT PROGRAM ABOVE THIS LINE ****************************************
'
Screen Close 0
End
'
Procedure _OPENDIALOGSCREEN[N,H,Y]
'
Shared _BACK,_SHADOW,_LIGHT,_COLOUR,_TEXT
'
Screen Open N,640,H,4,Hires
Screen Display N,130,Y,,
Curs Off
Flash Off
Cls 0
Palette $AAA,$0,$FFF,$58B
'
Colour Back Colour(0)
'
_BACK=0
_SHADOW=1
_LIGHT=2
_COLOUR=3
_TEXT=1
'
Pen _TEXT
Paper _BACK
Ink _TEXT,_BACK
'
' *** Set Mouse Colours.
'
Colour 17,$EEC
Colour 18,$0
Colour 19,$E44
'
End Proc
'
Procedure _DRAW3DBOX[X1,Y1,X2,Y2,T$,IN,FC,BC]
'
Shared _SHADOW,_LIGHT
'
If IN=0 or IN=3
C1=_SHADOW
C2=_LIGHT
Else
C1=_LIGHT
C2=_SHADOW
End If
'
If IN<>2
Ink BC,FC
Bar X1,Y1 To X2,Y2
Ink C1
Box X1,Y1 To X2,Y2
If IN<3
Box X1+1,Y1 To X2-1,Y2
End If
Ink C2
Polyline X1+1,Y2 To X2,Y2 To X2,Y1
If IN<3
Polyline X1+1,Y2 To X2-1,Y2 To X2-1,Y1+1
End If
Else
Cls BC,X1+2,Y1+1 To X2-1,Y2
End If
'
I=0
J=0
B=0
While I<Len(T$)
I=Instr(T$,"|",I+1)
If I=0
I=Len(T$)+1
End If
J=I
Inc B
Wend
'
If Upper$(Left$(T$,3))="(S)"
_DRAWUSEROBJECT[X1,Y1,X2,Y2,Mid$(T$,4)]
Goto FIN
End If
'
H#=((Y2-Y1)-(B*Text Base))/(B+1)
Y#=Y1+H#+Text Base
'
Ink FC,BC
Gr Writing 0
'
I=0
J=0
LOP=0
While LOP<B
I=Instr(T$,"|",I+1)
If I=0
I=Len(T$)+1
End If
A$=Mid$(T$,J+1,I-J-1)
'
If Left$(A$,1)="'"
A$=Mid$(A$,2)
X7=X1+4
Goto NXT
End If
'
If Left$(A$,1)="^"
A$=Mid$(A$,2)
X7=(X2-Text Length(A$))-4
Goto NXT
End If
'
WID=Text Length(A$)
X7=(((X2-X1)/2)+X1)-(WID/2)+1
'
NXT:
Text X7,Y#,A$
'
Y#=Y#+Text Base+H#
'
J=I
Inc LOP
Wend
'
Gr Writing 1
'
FIN:
'
End Proc
'
Procedure _CHECKZONE[X1,Y1,X2,Y2,WT]
'
X=X Screen(X Mouse)
Y=Y Screen(Y Mouse)
M=Mouse Key
AN=0
'
If X<X1 or X>X2 or Y<Y1 or Y>Y2 or M=0
Goto FIN2
End If
'
AN=M
'
If WT=0
Goto FIN2
End If
'
If WT=1
Gr Writing 2
Bar X1,Y1 To X2,Y2
End If
'
While X>=X1 and X<=X2 and Y>=Y1 and Y<=Y2
X=X Screen(X Mouse)
Y=Y Screen(Y Mouse)
If Mouse Key=0
Goto FIN
End If
Wend
'
AN=0
'
FIN:
If WT=1
Bar X1,Y1 To X2,Y2
Gr Writing 1
End If
'
FIN2:
'
End Proc[AN]
'
Procedure _SETFONT[FT$,FS]
'
Shared _FONTNAME$,_FONTSIZE
'
FT$=Upper$(FT$)
'
OK=0
POS=1
'
While Font$(POS)<>""
If Upper$(Left$(Font$(POS),Len(FT$)+5))=(FT$+".FONT")
If Val(Mid$(Font$(POS),30,3))=FS
Set Font POS
OK=1
_FONTNAME$=FT$
_FONTSIZE=FS
End If
End If
Inc POS
Wend
'
End Proc[OK]
'
Procedure _ADDBUTTON[X1,Y1,X2,Y2,T$,BZ]
'
Shared _TEXT,_BACK
'
_DRAW3DBOX[X1,Y1,X2,Y2,T$,1,_TEXT,_BACK]
'
If BZ<>0
_ADDZONE[X1,Y1,X2,Y2,BZ,"B"]
End If
'
End Proc
'
Procedure _CHECKBUTTONS
'
Shared _DIALOGBUTTON$
'
ZN=0
I1=1
I2=1
'
While I2<Len(_DIALOGBUTTON$)
'
I2=Instr(_DIALOGBUTTON$,";",I1)
L$=Mid$(_DIALOGBUTTON$,I1,I2-I1)
'
AC=Asc(Mid$(L$,1,1))
X1=Val(Mid$(L$,3,3))
Y1=Val(Mid$(L$,7,3))
X2=Val(Mid$(L$,11,3))
Y2=Val(Mid$(L$,15,3))
BZ=Val(Mid$(L$,19,4))
'
WT=1
If BZ<0
BZ=-BZ
WT=0
End If
'
_CHECKZONE[X1,Y1,X2,Y2,WT]
If Param and(AC>64 and AC<91) : Rem A to Z.
ZN=BZ
Goto FIN
End If
'
I1=I2+1
'
Wend
'
FIN:
'
End Proc[ZN]
'
Procedure _CHECKWINBUTTONS
'
Shared _DIALOGBUTTON$
'
MX=X Screen(X Mouse)
MY=Y Screen(Y Mouse)
If(MX<_WINX1 or MX>_WINX2 or MY<_WINY1 or MY>_WINY2) and Mouse Key>0
_FLASH
End If
'
ZN=0
I1=1
I2=1
'
While I2<Len(_DIALOGBUTTON$)
'
I2=Instr(_DIALOGBUTTON$,";",I1)
L$=Mid$(_DIALOGBUTTON$,I1,I2-I1)
'
AC=Asc(Mid$(L$,1,1))
X1=Val(Mid$(L$,3,3))
Y1=Val(Mid$(L$,7,3))
X2=Val(Mid$(L$,11,3))
Y2=Val(Mid$(L$,15,3))
BZ=Val(Mid$(L$,19,4))
'
WT=1
If BZ<0
BZ=-BZ
WT=0
End If
'
If BZ<>1
WX=(X1-_WINOX)
WY=(Y1-_WINOY)
'
BW=(X2-X1)
BH=(Y2-Y1)
'
X1=_WINX1+WX
Y1=_WINY1+WY
X2=_WINX1+WX+BW
Y2=_WINY1+WY+BH
'
End If
'
_CHECKZONE[X1,Y1,X2,Y2,WT]
If Param and(AC>64 and AC<91) : Rem A to Z.
ZN=BZ
Goto FIN
End If
'
I1=I2+1
'
Wend
'
FIN:
'
End Proc[ZN]
'
Procedure _DELETEBUTTON[NO,BC]
'
Shared _DIALOGBUTTON$
'
I1=1
I2=1
'
If NO<0
NO=-NO
End If
'
While I2<Len(_DIALOGBUTTON$)
'
I2=Instr(_DIALOGBUTTON$,";",I1)
L$=Mid$(_DIALOGBUTTON$,I1,I2-I1)
'
BZ=Val(Mid$(L$,19,3))
If BZ<0
BZ=-BZ
End If
'
If BZ=NO
'
X1=Val(Mid$(L$,3,3))
Y1=Val(Mid$(L$,7,3))
X2=Val(Mid$(L$,11,3))
Y2=Val(Mid$(L$,15,3))
'
_DIALOGBUTTON$=Left$(_DIALOGBUTTON$,I1-1)+Mid$(_DIALOGBUTTON$,I2+1)
'
If BC>-1
Ink BC
Bar X1,Y1 To X2,Y2
End If
'
End If
'
I1=I2+1
'
Wend
'
End Proc
'
Procedure _ADDTICKBOX[X1,Y1,PO,BZ]
'
Shared _SHADOW,_TEXT,_BACK
'
_DRAW3DBOX[X1,Y1,X1+26,Y1+11,"",1,_TEXT,_BACK]
'
If BZ=0
PO=1-PO
End If
'
If BZ<>0
_ADDZONE[X1,Y1,X1+26,Y1+11,BZ,"T"]
End If
'
If PO=1
Ink _SHADOW
X1=X1+7
Y1=Y1+2
Draw X1,Y1+3 To X1+3,Y1+6
Draw X1+1,Y1+3 To X1+4,Y1+6
Draw X1+2,Y1+3 To X1+5,Y1+6
Draw X1+10,Y1 To X1+12,Y1
Draw X1+10,Y1+1 To X1+6,Y1+5
Draw X1+9,Y1+1 To X1+5,Y1+5
End If
'
End Proc[PO]
'
Procedure _ADDTICKBUTTON[X1,Y1,X2,Y2,T$,PO,BZ]
'
Shared _TEXT,_BACK
'
_DRAW3DBOX[X1,Y1,X2,Y2,T$,1,_TEXT,_BACK]
'
If BZ=0
PO=1-PO
End If
'
If BZ<>0
_ADDZONE[X1,Y1,X2,Y2,BZ,"U"]
End If
'
If PO=1
Gr Writing 2
Bar X1,Y1 To X2,Y2
Gr Writing 1
End If
'
End Proc[PO]
'
Procedure _ADDCYCLEBUTTON[X1,Y1,X2,Y2,T$,PO,BZ]
'
Shared _SHADOW,_LIGHT,_TEXT,_BACK
'
T$=T$+"|"
I1=1
I2=1
P=1
'
I=0
IO=0
B=0
While I<Len(T$)
I=Instr(T$,"|",I+1)
If I=0
I=Len(T$)+1
End If
IO=I
B=B+1
Wend
'
If BZ=0
Add PO,1,1 To B
End If
'
While I2<Len(T$)
I2=Instr(T$,"|",I1)
If P=PO
L$=Mid$(T$,I1,I2-I1)
Exit
End If
I1=I2+1
Inc P
Wend
'
_DRAW3DBOX[X1,Y1,X2,Y2,"",1,_TEXT,_BACK]
If BZ<>0
_ADDZONE[X1,Y1,X2,Y2,BZ,"C"]
End If
'
Ink _SHADOW
X1=X1+6
Y1=Y1+2
Y2=Y2-3
Draw X1+1,Y1 To X1+7,Y1
Draw X1,Y1+1 To X1,Y2-1
Draw X1+1,Y1+1 To X1+1,Y2-1
Draw X1+1,Y2 To X1+7,Y2
Draw X1+7,Y2-1 To X1+8,Y2-1
Draw X1+7,Y1+1 To X1+7,Y1+5
Draw X1+8,Y1+1 To X1+8,Y1+5
Draw X1+5,Y1+3 To X1+10,Y1+3
Draw X1+6,Y1+4 To X1+9,Y1+4
Draw X1+14,Y1 To X1+14,Y2+1
Ink _LIGHT
Draw X1+15,Y1 To X1+15,Y2+1
'
_DRAW3DBOX[X1+16,Y1-2,X2,Y2+3,L$,2,_TEXT,_BACK]
'
End Proc[PO]
'
Procedure _ADDINPUTBUTTON[X1,Y1,TXT$,L,ML,BZ]
'
Shared _TEXT,_BACK,_FONTNAME$,_FONTSIZE
'
XX=X1+2
YY=Y1+1
ED$=TXT$
SX=L
'
Ink _TEXT,_BACK
'
X1=X1-4
Y1=Y1-3
X2=X1+(L*8)+8+4
Y2=Y1+13
'
TEMP2$=_FONTNAME$
TEMP3=_FONTSIZE
_SETFONT["Topaz",8]
'
If BZ<>0
If BZ<>999
_ADDZONE[X1,Y1,X2,Y2,BZ,"I"]
End If
_DRAW3DBOX[X1,Y1,X2,Y2,"",1,_TEXT,_BACK]
_DRAW3DBOX[X1+2,Y1+1,X2-2,Y2-1,"",0,_TEXT,_BACK]
Gosub _DED
Goto _END
End If
'
XC=Len(ED$)
MN=0
PX=0
L=XC
'
Clear Key
'
Do
Gosub _DED
'
If Mouse Key=1
X=((X Screen(X Mouse)-(X1+5))/8)
If X>=0 and X<=L
XC=X
Gosub _DED
End If
End If
'
Gr Writing 2
Bar GRX,GRY To GRX+7,GRY+7
'
If Mouse Key
Repeat
Until Mouse Key=0
End If
'
Repeat
A$=Inkey$
S=Scancode
K=Key Shift
Until A$<>"" or Mouse Key or(A$<>"" and K)
'
XM=X Screen(X Mouse)
YM=Y Screen(Y Mouse)
If Mouse Key and(XM<X1 or XM>X2 or YM<Y1 or YM>Y2)
A$=Chr$(13)
End If
'
Bar GRX,GRY To GRX+7,GRY+7
Gr Writing 1
'
F=1
'
If A$=Chr$(13)
Exit
End If
'
If A$=Chr$(27)
ED$=TXT$
TXT$=""
Gosub _DED
Exit
End If
'
If S=65 and K=0 and XC+PX>MN
ED$=Left$(ED$,XC+PX-1)+Mid$(ED$,PX+XC+1)
E=1
Dec L
S=79
End If
'
If S=65 and K>0 and K<4
ED$=Mid$(ED$,PX+XC+1)
L=Len(ED$)
PX=0
XC=0
End If
'
If S=70 and K=0 and XC+PX<L
ED$=Left$(ED$,XC+PX)+Mid$(ED$,PX+XC+2)
E=1
Dec L
End If
'
If S=70 and K>0 and K<4
ED$=Left$(ED$,XC+PX)
L=Len(ED$)
F=0
End If
'
If S=79 and PX+XC>MN
F=0
If XC=0
Dec PX
Else
Dec XC
End If
End If
'
If S=79 and K>0 and K<4
F=0
PX=0
XC=0
End If
'
If S=78 and PX+XC<L
F=0
If XC=SX
Inc PX
Else
Inc XC
End If
End If
'
If S=78 and K>0 and K<4
F=0
XC=L
If XC>SX
XC=SX
End If
PX=L-SX
If PX<0
PX=0
End If
End If
'
If F
If A$>=" " and L<ML
ED$=Left$(ED$,PX+XC)+A$+Mid$(ED$,PX+XC+1)
Inc L
If L>SX
If XC>=SX
Inc PX
Else
Inc XC
End If
Else
Inc XC
End If
End If
End If
'
Loop
'
Goto _END
'
_DED:
_DRAW3DBOX[X1+2,Y1+1,X2-2,Y2-1,"'"+Mid$(ED$,PX+1,SX),2,_TEXT,_BACK]
GRX=X1+(XC*8)+6
GRY=Y1+3
Return
'
_END:
_DRAW3DBOX[X1+2,Y1+1,X2-2,Y2-1,"'"+Left$(ED$,SX),2,_TEXT,_BACK]
'
_SETFONT[TEMP2$,TEMP3]
'
End Proc[ED$]
'
Procedure _DRAWUSEROBJECT[X1,Y1,X2,Y2,T$]
'
Shared _FONTNAME$,_FONTSIZE,_SHADOW,_LIGHT,_TEXT,_BACK,_COLOUR
'
Left$(T$,3)=Upper$(Left$(T$,3))
'
' *** Paste Icon.
'
If Mid$(T$,1,3)="ICO"
NO=Val(Mid$(T$,4,3))
If Length(2)>=NO
Paste Icon X1+Val(Mid$(T$,7,3)),Y1+Val(Mid$(T$,10,3)),NO
End If
End If
'
' *** Paste Bob.
'
If Mid$(T$,1,3)="BOB"
NO=Val(Mid$(T$,4,3))
If Length(1)>=NO
Paste Bob X1+Val(Mid$(T$,7,3)),Y1+Val(Mid$(T$,10,3)),NO
End If
End If
'
' *** Up Arrow.
'
If T$="UAR"
Ink _SHADOW
X=X1+(X2-X1)/2
Y=Y1+(Y2-Y1)/2
Polygon X,Y1+2 To X1+4,Y2-2 To X,Y To X2-4,Y2-2 To X,Y1+2
End If
'
' *** Down Arrow.
'
If T$="DAR"
Ink _SHADOW
X=X1+(X2-X1)/2
Y=Y1+(Y2-Y1)/2
Polygon X,Y2-2 To X1+4,Y1+2 To X,Y To X2-4,Y1+2 To X,Y2-2
End If
'
' *** Left Arrow.
'
If T$="LAR"
Ink _SHADOW
X=X1+(X2-X1)/2
Y=Y1+(Y2-Y1)/2
Polygon X1+4,Y To X2-4,Y1+2 To X,Y To X2-4,Y2-2 To X1+4,Y
End If
'
' *** Right Arrow.
'
If T$="RAR"
Ink _SHADOW
X=X1+(X2-X1)/2
Y=Y1+(Y2-Y1)/2
Polygon X2-4,Y To X1+4,Y1+2 To X,Y To X1+4,Y2-2 To X2-4,Y
End If
'
' *** Group Box.
'
If T$="GBX"
_DRAW3DBOX[X1,Y1,X2,Y2,"",0,0,_BACK]
_DRAW3DBOX[X1+2,Y1+1,X2-2,Y2-1,"",1,0,_BACK]
End If
'
' *** Window.
'
If Mid$(T$,1,3)="WIN"
_DRAW3DBOX[X1,Y1,X2,Y2,"",4,0,_COLOUR]
_DRAW3DBOX[X1+3,Y1+10,X2-3,Y2-1,"",3,_LIGHT,_BACK]
_DRAW3DBOX[X1,Y1,X2,Y1+10,Mid$(T$,4),4,_LIGHT,_COLOUR]
End If
'
' *** File Icon.
'
If Mid$(T$,1,3)="FIL"
X1=X1+4
Y1=Y1+2
Ink _SHADOW
Draw X1,Y1+2 To X1,Y1+8
Draw X1+1,Y1+2 To X1+1,Y1+8
Draw X1+2,Y1+8 To X1+11,Y1+8
Draw X1+11,Y1+8 To X1+11,Y1+2
Plot X1+10,Y1+1
Plot X1+5,Y1+1
Draw X1+6,Y1 To X1+9,Y1
Draw X1+2,Y1+2 To X1+4,Y1+2
Draw X1+2,Y1+3 To X1+5,Y1+3
Draw X1+6,Y1+4 To X1+10,Y1+4
End If
'
End Proc
'
Procedure _ADDRADIOBUTTON[X,Y,GP,BN,PO,BZ]
'
Shared _LIGHT,_SHADOW,_COLOUR,_BACK
'
X1=X
Y1=Y
'
If PO=0
C1=_LIGHT
C2=_SHADOW
C3=_COLOUR
Else
C1=_SHADOW
C2=_LIGHT
C3=_BACK
End If
'
Ink C1
Draw X1+14,Y1 To X1+14,Y1+1
Draw X1+15,Y1+1 To X1+15,Y1+7
Draw X1+16,Y1+2 To X1+16,Y1+6
Draw X1+14,Y1+7 To X1+15,Y1+7
Draw X1+14,Y1+8 To X1+3,Y1+8
Ink C2
Draw X1+13,Y1 To X1+2,Y1
Draw X1+2,Y1+1 To X1+1,Y1+1
Draw X1,Y1+2 To X1,Y1+6
Draw X1+1,Y1+2 To X1+1,Y1+7
Draw X1+2,Y1+7 To X1+2,Y1+8
Ink C3
Draw X1+4,Y1+3 To X1+4,Y1+5
Draw X1+12,Y1+3 To X1+12,Y1+5
Bar X1+5,Y1+2 To X1+11,Y1+6
'
If BZ<>0
'
L$=Space$(8)
'
Mid$(L$,2,2)=Str$(GP)-" "
Mid$(L$,5,2)=Str$(BN)-" "
Mid$(L$,8,1)=Str$(PO)-" "
'
_ADDZONE[X,Y,X+16,Y+8,BZ,"R"+L$]
'
End If
'
End Proc
'
Procedure _SETRADIO[BZ]
'
Shared _DIALOGBUTTON$
'
_GETBUTTONSTRING[BZ]
F$=Param$
'
GN=Val(Mid$(F$,24,2))
BA=Val(Mid$(F$,27,2))
'
I1=1
I2=1
'
While I2<Len(_DIALOGBUTTON$)
'
I2=Instr(_DIALOGBUTTON$,";",I1)
L$=Mid$(_DIALOGBUTTON$,I1,I2-I1)
'
A$=Left$(L$,1)
GP=Val(Mid$(L$,24,2))
'
If((GP=GN) and((A$="R") or(A$="R")))
'
X1=Val(Mid$(L$,3,3))
Y1=Val(Mid$(L$,7,3))
BN=Val(Mid$(L$,27,2))
'
If BN=BA
_ADDRADIOBUTTON[X1,Y1,BN,GP,0,0]
Else
_ADDRADIOBUTTON[X1,Y1,BN,GP,1,0]
End If
End If
'
I1=I2+1
'
Wend
'
End Proc
'
Procedure _VERTICALSLIDER[X,Y,W,H,S,P,T$]
'
Shared _TEXT,_BACK,_TEXT
'
_DRAW3DBOX[X,Y,X+W,Y+H,"",4,_TEXT,_BACK]
HIG=0
'
If S>=1
T=Y+(H*(P-1))/S
B=Min(Y+H,T+H/S)
If B-T<3
T=Y+((H-3)*(P-1))/S
B=Min(Y+(H-3),T+(H-3)/S)
HIG=3
End If
Cls _TEXT,X+3,T+1 To X+W-2,B+1+HIG
End If
'
If T$<>""
_SLIDERROUTINE[T$,P]
End If
'
End Proc
'
Procedure _GRABVERTICALSLIDER[X,Y,W,H,S,P,T$]
'
If S<1 Then Pop Proc
'
T=Y+(H*(P-1))/S
B=Min(Y+H,T+H/S)
'
_CHECKZONE[X,Y,X+W,T-1,2]
If Param>0 and P>1
Dec P
Gosub _DRAWSLIDER
Goto FIN
End If
'
_CHECKZONE[X,B+1,X+W,Y+H,2]
If Param and P<S
Inc P
Gosub _DRAWSLIDER
Goto FIN
End If
'
_CHECKZONE[X,T,X+W,B,0]
If Param>0
'
PO=P
DY=Y Screen(Y Mouse)-T
'
Repeat
'
YY=Y Screen(Y Mouse)-Y-DY
PO=((YY*(S+1))/H+1)
'
If PO<1
PO=1
End If
If PO>S
PO=S
End If
'
If PO<>P
P=PO
Gosub _DRAWSLIDER
End If
'
Until Mouse Key=0
End If
'
Goto FIN
'
_DRAWSLIDER:
_VERTICALSLIDER[X,Y,W,H,S,P,""]
Return
'
FIN:
'
End Proc[P]
'
Procedure _HORIZONTALSLIDER[X,Y,W,H,S,P,T$]
'
Shared _TEXT,_BACK,_TEXT
'
_DRAW3DBOX[X,Y,X+W,Y+H,"",4,_TEXT,_BACK]
WID=0
'
If S>=1
T=X+(W*(P-1))/S
B=Min(X+W,T+W/S)
If B-T<6
T=X+((W-6)*(P-1))/S
B=Min(X+(W-6),T+(W-6)/S)
WID=6
End If
Cls _TEXT,T+1,Y+2 To B+1+WID,Y+H-1
End If
'
If T$<>""
_SLIDERROUTINE[T$,P]
End If
'
End Proc
'
Procedure _GRABHORIZONTALSLIDER[X,Y,W,H,S,P,T$]
'
If S<1 Then Pop Proc
'
T=X+(W*(P-1))/S
B=Min(X+W,T+W/S)
'
_CHECKZONE[X,Y,T-1,Y+H,2]
If Param>0 and P>1
Dec P
Gosub _DRAWSLIDER
Goto FIN
End If
'
_CHECKZONE[B+1,Y,X+W,Y+H,2]
If Param>0 and P<S
Inc P
Gosub _DRAWSLIDER
Goto FIN
End If
'
_CHECKZONE[T,Y,B,Y+H,0]
If Param>0
'
PO=P
DX=X Screen(X Mouse)-T
'
Repeat
'
XX=X Screen(X Mouse)-X-DX
PO=((XX*(S+1))/W+1)
'
If PO<1
PO=1
End If
If PO>S
PO=S
End If
'
If PO<>P
P=PO
Gosub _DRAWSLIDER
End If
'
Until Mouse Key=0
End If
'
Goto FIN
'
_DRAWSLIDER:
_HORIZONTALSLIDER[X,Y,W,H,S,P,""]
Return
'
FIN:
'
End Proc[P]
'
Procedure _SLIDERROUTINE[T$,P]
'
Shared _FONTNAME$,_FONTSIZE,_COLOUR,_SHADOW,_LIGHT,_BACK,_TEXT
'
Goto T$
Goto FIN
'
'
FIN:
'
End Proc
'
Procedure _DRAWTITLEBAR[T$]
'
Shared _FONTNAME$,_FONTSIZE,_SHADOW,_LIGHT
'
B_FT$=_FONTNAME$
B_FS=_FONTSIZE
'
_SETFONT["Topaz",8]
'
If T$=""
T$=T$+"'Amiga Workbench "+Str$(Chip Free)-" "+" graphics mem "
T$=T$+Str$(Fast Free)-" "+" other mem"
End If
_DRAW3DBOX[-1,-1,640,10,T$,1,_SHADOW,_LIGHT]
'
_SETFONT[B_FT$,B_FS]
'
End Proc
'
Procedure _GETBUTTONSTRING[NO]
'
Shared _DIALOGBUTTON$
'
I1=1
I2=1
P=0
'
If NO<0
NO=-NO
End If
'
While I2<Len(_DIALOGBUTTON$) and P<>NO
'
I2=Instr(_DIALOGBUTTON$,";",I1)
L$=Mid$(_DIALOGBUTTON$,I1,I2-I1)
'
BZ=Val(Mid$(L$,19,4))
If BZ<0
BZ=-BZ
End If
'
If BZ=NO
Exit
End If
'
I1=I2+1
'
Inc P
Wend
'
End Proc[L$]
'
Procedure _ENABLEBUTTON[NO]
'
Shared _DIALOGBUTTON$
'
I1=1
I2=1
P=0
'
While I2<Len(_DIALOGBUTTON$) and P<>NO
'
I2=Instr(_DIALOGBUTTON$,";",I1)
L$=Mid$(_DIALOGBUTTON$,I1,I2-I1)
'
BZ=Val(Mid$(L$,19,4))
If BZ<0
BZ=-BZ
End If
'
If BZ=NO
Mid$(_DIALOGBUTTON$,I1,1)=Upper$(Mid$(_DIALOGBUTTON$,I1,1))
End If
'
I1=I2+1
'
Inc P
Wend
'
End Proc
'
Procedure _DISABLEBUTTON[NO]
'
Shared _DIALOGBUTTON$
'
I1=1
I2=1
P=0
'
While I2<Len(_DIALOGBUTTON$) and P<>NO
'
I2=Instr(_DIALOGBUTTON$,";",I1)
L$=Mid$(_DIALOGBUTTON$,I1,I2-I1)
'
BZ=Val(Mid$(L$,19,4))
If BZ<0
BZ=-BZ
End If
'
If BZ=NO
Mid$(_DIALOGBUTTON$,I1,1)=Lower$(Mid$(_DIALOGBUTTON$,I1,1))
End If
'
I1=I2+1
'
Inc P
Wend
'
End Proc
'
Procedure _ADDZONE[X1,Y1,X2,Y2,BZ,TP$]
'
Shared _DIALOGBUTTON$
'
L$=Space$(22)+Mid$(TP$,2)+";"
'
Mid$(L$,1,1)=Mid$(TP$,1,1)
Mid$(L$,3,3)=Str$(X1)-" "
Mid$(L$,7,3)=Str$(Y1)-" "
Mid$(L$,11,3)=Str$(X2)-" "
Mid$(L$,15,3)=Str$(Y2)-" "
Mid$(L$,19,4)=Str$(BZ)-" "
'
_DIALOGBUTTON$=_DIALOGBUTTON$+L$
'
End Proc
'
Procedure _ADDWINDOW[X1,Y1,W,H,T$,BZ]
'
Shared _DIALOGBUTTON$
'
Get Block 1,X1,Y1,(W*8),(H*8)
'
_DRAWUSEROBJECT[X1,Y1,X1+(W*8)-1,Y1+(H*8)-1,"WIN"+T$]
'
If BZ<>0
'
_DELETEBUTTON[1,-1]
'
L$=Space$(22)+Str$(Y1+(H*8))-" "+";"
'
Mid$(L$,1,1)="W"
Mid$(L$,3,3)=Str$(X1)-" "
Mid$(L$,7,3)=Str$(Y1)-" "
Mid$(L$,11,3)=Str$(X1+(W*8)-1)-" "
Mid$(L$,15,3)=Str$(Y1+10)-" "
Mid$(L$,19,4)=Str$(BZ)-" "
'
_DIALOGBUTTON$=L$+_DIALOGBUTTON$
'
If _WINOX=-1 and _WINOY=-1
_WINOX=X1
_WINOY=Y1
End If
End If
'
_WINX1=X1
_WINY1=Y1
_WINX2=X1+(W*8)-1
_WINY2=Y1+(H*8)-1
'
End Proc
'
Procedure _CLOSEWINDOW[BZ]
'
Put Block 1
Del Block 1
'
If BZ<>0
_DELETEBUTTON[BZ,-1]
If A#=0.0
_WINOX=-1
_WINOY=-1
End If
End If
'
End Proc
'
Procedure _MOVEWINDOW[T$,BZ]
'
_GETBUTTONSTRING[BZ]
ED$=Param$
'
X1=Val(Mid$(ED$,3,3))
Y1=Val(Mid$(ED$,7,3))
W=((Val(Mid$(ED$,11,3))-X1)/8)+1
H=((Val(Mid$(ED$,23,3))-Y1)/8)
'
Get Block 2,X1,Y1,W*8,H*8
'
XX=X Screen(X Mouse)-X1
YY=Y Screen(Y Mouse)-Y1
'
Gr Writing 2
While Mouse Key>0
'
X=X Screen(X Mouse)
Y=Y Screen(Y Mouse)
'
If X-XX<0
X=XX
X Mouse=X Hard(XX)
End If
'
If Y-YY<0
Y=YY
Y Mouse=Y Hard(YY)
End If
'
If(X-XX)+(W*8)>Screen Width-1
X=XX+(Screen Width-(W*8))-1
X Mouse=X Hard(XX+(Screen Width-(W*8))-1)
End If
'
If(Y-YY)+(H*8)>Screen Height-1
Y=YY+(Screen Height-(Y*8))-1
Y Mouse=Y Hard(YY+(Screen Height-(H*8))-1)
End If
'
Box X-XX,Y-YY To(X-XX)+(W*8)-1,(Y-YY)+(H*8)-1
'
Repeat
Until X<>X Screen(X Mouse) or Y<>Y Screen(Y Mouse) or Mouse Key=0
'
Box X-XX,Y-YY To(X-XX)+(W*8)-1,(Y-YY)+(H*8)-1
'
Wend
Gr Writing 1
'
A#=1.0
_CLOSEWINDOW[BZ]
A#=0.0
'
_ADDWINDOW[X-XX,Y-YY,W,H,T$,-BZ]
'
Put Block 2,X-XX,Y-YY
Del Block 2
'
End Proc
'
Procedure _FLASH
'
Shared _BACK
'
C=Colour(_BACK)
'
R=(Colour(_BACK)/256)/2
G=(Colour(_BACK)/16 mod 16)/2
B=(Colour(_BACK) mod 16)/2
'
Colour _BACK,R*256+G*16+B
'
Wait 10
'
Colour _BACK,C
'
End Proc
'
Procedure _ALERTREQUESTER[M$,BT$]
'
Shared _DIALOGBUTTON$,_BACK,_COLOUR,_TEXT,_LIGHT,_SHADOW
'
If M$="_Cc_"
Goto FIN
End If
'
I=0
J=0
L=0
While I<Len(M$)
I=Instr(M$,"|",I+1)
If I=0
I=Len(M$)+1
End If
J=I
Inc L
Wend
'
I=0
J=0
B=0
While I<Len(BT$)
I=Instr(BT$,"|",I+1)
If I=0
I=Len(BT$)+1
End If
J=I
Inc B
Wend
'
B_DLG$=_DIALOGBUTTON$
_DIALOGBUTTON$=""
'
_OPENDIALOGSCREEN[7,50+(L*8),50]
Get Palette 0
H=50+(L*8)-1
'
_DRAW3DBOX[0,0,639,H-1,"",4,0,_COLOUR]
Set Pattern 2
_DRAW3DBOX[3,10,636,H-2,"",3,_LIGHT,_BACK]
Set Pattern 0
'
If BT$=""
_DRAW3DBOX[0,0,639,10,"",4,0,_COLOUR]
Ink _TEXT,_COLOUR
Text 5,7,"Information Requester"
_DRAW3DBOX[8,13,632,H-3,M$,3,_TEXT,_BACK]
Goto FIN2
End If
'
_DRAW3DBOX[0,0,18,10,"",4,1,_COLOUR]
_ADDZONE[0,0,18,10,1,"B"]
Ink _LIGHT
Bar 7,3 To 11,7
Ink _SHADOW
Box 7,3 To 11,7
_DRAW3DBOX[19,0,639,10,"",4,0,_COLOUR]
Ink _TEXT,_COLOUR
Text 24,7,"Button Requester"
_DRAW3DBOX[8,13,632,H-20,M$,3,_TEXT,_BACK]
'
BB#=B
D2#=326.0-((BB#*100.0)/2.0)
'
I=0
J=0
A=0
While A<B
I=Instr(BT$,"|",I+1)
If I=0
I=Len(BT$)+1
End If
_ADDBUTTON[D2#+100*A,H-18,D2#+100*A+86,H-5,Left$(Mid$(BT$,J+1,I-J-1),10),A+2]
J=I
Inc A
Wend
'
Repeat
_CHECKBUTTONS
Q=Param
Until Q
'
_DIALOGBUTTON$=B_DLG$
B_DLG$=""
ZN=0
'
FIN:
Screen Close 7
'
FIN2:
'
End Proc[Q-1]
'
Procedure _EXAMINEFILE[F$]
'
Open In 1,F$
L=Lof(1)
H$=Input$(1,Min(L,1088))
Close 1
'
Restore DAT
'
Repeat
Read S1,H1$,S2,H2$,FT$
If(Mid$(H$,S1,Len(H1$))=H1$) and(Mid$(H$,S2,Len(H2$))=H2$)
OK=1
Exit
End If
Until H1$="END"
'
If H1$="END"
C=0
For N=1 To Len(H$)
A=Asc(Mid$(H$,N,1))
If A>=32 or A=10 or A=9
Inc C
End If
Next N
P=(C*100)/Len(H$)
If P>95
FT$="ASCII TEXT"
End If
End If
'
DAT:
Data 1,"FORM",9,"ILBM","IFF PICTURE"
Data 1,"FORM",9,"SMUS","IFF MUSIC (AEGIS SONIX)"
Data 1,"FORM",9,"8SVX","IFF SAMPLE"
Data 1,"FORM",9,"ANIM","IFF ANIMATION"
Data 1,"FORM",9,"SC3D","SCULPT 3D SCENE"
Data 1,"AmSp",1,"","AMOS BOB BANK"
Data 1,"AmIc",1,"","AMOS ICON BANK"
Data 1,"AmBk",13,"Music","AMOS MUSIC BANK"
Data 1081,"M.K.",1,"","NOISE/SOUND/PRO TRACKER MODULE"
Data 1081,"FLT4",1,"","NOISE/SOUND/PRO TRACKER MODULE"
Data 1,"BeEp",1,"","JAMCRACKER MODULE"
Data 1,Chr$(65)+Chr$(250)+Chr$(15)+Chr$(250),1,"","SIDMON V1.0 MODULE"
Data 27,"V.2",1,"","BPSOUNDMON MODULE"
Data 1,"SMOD",1,"","FUTURE COMPOSER V1.0-V1.3"
Data 365,"DELTA MUSIC V2.0",0,"","DELTA MUSIC V2.0"
Data 1,"MMD1",1,"","MED MODULE"
Data 1,"MMD0",6,Chr$(2),"MED MODULE (4 CHANNELS)"
Data 1,"MMD0",6,Chr$(1),"MED MODULE (8 CHANNELS)"
Data 1,"AmBk",13,"Tracker","SOUNDTRACKER MODULE IN AN AMOS BANK"
Data 1,"AmBk",13,"Pac.Pic","AMOS PAC PIC"
Data 1,"AmBk",13,"Samples","AMOS SAMPLE BANK"
Data 1,"AmBk",13,"Menu","AMOS MENU BANK"
Data 1,"AmBk",13,"Amal","AMOS AMAL BANK"
Data 1,"AmBk",13,"Data","AMOS DATA BANK"
Data 1,"AmBk",13,"Resource","AMOS RESOURCE BANK"
Data 1,"AmBk",1,"","AMOS BANK"
Data 1,"AmBs",1,"","SET OF AMOS BANKS"
Data 1,"AMOS Basic",1,"","AMOS 1.3 PROGRAM"
Data 1,"AMOS Pro",1,"","AMOS PROFESSIONAL PROGRAM"
Data 1,Chr$(15)+Chr$(0)+Chr$(0),1,"","FONT DATA FILE"
Data 1,Chr$(0)+Chr$(0)+Chr$(3)+Chr$($F3),33,"pdNu","WORKBENCH FONT"
Data 1,Chr$(0)+Chr$(0)+Chr$(3)+Chr$($F3),1,"","EXECUTABLE PROGRAM"
Data 1,"PP20",1,"","POWERPACKEDDATA FILE"
Data 1,"MED"+Chr$(4),1,"","OCTAMED MODULE"
Data 1,"MSH"+Chr$(0),1,"","OCTAMED SYNTHSOUND"
Data 1,Chr$(227)+Chr$(16)+Chr$(0)+Chr$(1),1,"","WORKBENCH ICON"
Data 1,"PPbk",1,"","AMOS POWERPACKED BANK"
Data 1,Chr$(255)+Chr$(216)+Chr$(255)+Chr$(224),7,"JFIF","JPEG PICTURE"
Data 1,"DMS!",1,"","DISKMASHER FILE"
Data 1,"xSceneEditor",1,"","MOVIESETTER MOVIE WITH DATA"
Data 1,"FILM",1,"","MOVIESETTER MOVIE WITHOUT DATA"
Data 1,"DM20",1,"","DATAMASTER V2.0 DATABASE"
Data 1,"MM"+Chr$(0)+"*",1,"","TIFF PICTURE"
Data 5,"DEBR",27,"CHAG","FREELANCE V2.0 PRESENTATION"
Data 1,Chr$(10)+Chr$(5)+Chr$(1),1,"","PCX PICTURE"
Data 1,"BM",15,"(","BMP PICTURE"
Data 1,Chr$(0)+Chr$(32)+Chr$(16)+Chr$(34),1,"","CGM METAFILE"
Data 1,"GIF87",1,"","GIF PICTURE"
Data 1,"GIF89",1,"","GIF PICTURE"
Data 1,"/*",1,"","AREXX PROGRAM"
Data 1,Chr$(0)+Chr$(0)+Chr$(0)+Chr$(0),49,Chr$(128)+Chr$(30),"NEOCHOME PICTURE"
Data 1,"@D",1,"","AMIGAGUIDE DOCUMENT"
Data 1,"@d",1,"","AMIGAGUIDE DOCUMENT"
Data 1,"END",1,"","UNKNOWN FILE TYPE"
'
End Proc[FT$]
'
Procedure _GETWBPALETTE
'
F$=""
F=0
'
If Exist("Env:Sys/Palette.prefs")
F$="Env:Sys/Palette.prefs"
F=1
End If
'
If F=0 and Exist("ENVARC:Sys/Palette.prefs")
F$="EnvArc:Sys/Palette.prefs"
F=1
End If
'
If F=0 and Exist("Devs:System-Configuration")
F$="Devs:System-Configuration"
F=2
End If
'
If F=0
Palette $999,$0,$FFF,$58A,$F00,$F0,$F,$FF0
End If
'
' *** Change To WB Colours.
'
If F=1
Open In 1,F$
L=Lof(1)
Close 1
A$=String$(" ",L)
Bload F$,Varptr(A$)
For A=0 To 7
R=Peek(Varptr(A$)+180+A*8)/16
G=Peek(Varptr(A$)+182+A*8)/16
B=Peek(Varptr(A$)+184+A*8)/16
Colour A,(R*256+G*16+B)
Next A
A$=""
End If
'
If F=2
Open In 1,F$
L=Lof(1)
Close 1
A$=Space$(L)
Bload F$,Varptr(A$)
For A=0 To 3
Colour A,Deek(Varptr(A$)+110+A*2)
Colour A+16,Deek(Varptr(A$)+102+A*2)
Next A
A$=""
End If
'
Colour Back Colour(0)
'
End Proc
'
Procedure _PALETTEREQUESTER[S]
'
Shared _DIALOGBUTTON$,_BACK,_SHADOW,_LIGHT,_COLOUR,_TEXT,_FONTNAME$,_FONTSIZE
'
_TEMP1$=_DIALOGBUTTON$
_TEMP2$=_FONTNAME$
_TEMP3=_FONTSIZE
_DIALOGBUTTON$=""
'
SY=70
_OPENDIALOGSCREEN[7,80,SY]
Get Palette 0
'
_SETFONT["Topaz",8]
'
Screen S
SC=Screen Colour
If SC>64
SC=16
FF=16
Else
FF=SC
End If
C=1
'
Screen Open 6,320,20,SC,Lowres
Screen Display 6,,SY+81,,
Curs Off
Flash Off
Cls 0
Get Palette S
'
STP=320/SC
LOP=0
While LOP<SC+1
Ink LOP
Bar LOP*STP,2 To LOP*STP+STP,20
Inc LOP
Wend
Gosub _LINE
Screen 7
'
_DRAW3DBOX[0,0,639,79,"",,0,3]
_DRAWTITLEBAR["Palette Requester V1.1"]
_ADDBUTTON[0,0,44,10,"OK",11]
'
_DRAW3DBOX[10,16,38,34,"R",1,_TEXT,_BACK]
_DRAW3DBOX[10,36,38,54,"G",1,_TEXT,_BACK]
_DRAW3DBOX[10,56,38,74,"B",1,_TEXT,_BACK]
'
_HORIZONTALSLIDER[42,16,418,18,16,1,""]
_HORIZONTALSLIDER[42,36,418,18,16,1,""]
_HORIZONTALSLIDER[42,56,418,18,16,1,""]
'
_ADDBUTTON[462,19,476,31,"(S)LAR",1]
_ADDBUTTON[462,39,476,51,"(S)LAR",2]
_ADDBUTTON[462,59,476,71,"(S)LAR",3]
_ADDBUTTON[478,19,492,31,"(S)RAR",4]
_ADDBUTTON[478,39,492,51,"(S)RAR",5]
_ADDBUTTON[478,59,492,71,"(S)RAR",6]
'
_DRAW3DBOX[495,16,521,34,"",0,,_COLOUR]
_DRAW3DBOX[495,36,521,54,"",0,,_COLOUR]
_DRAW3DBOX[495,56,521,74,"",0,,_COLOUR]
_DRAW3DBOX[497,17,519,33,"",1,,_BACK]
_DRAW3DBOX[497,37,519,53,"",1,,_BACK]
_DRAW3DBOX[497,57,519,73,"",1,,_BACK]
'
_ADDBUTTON[525,16,629,30,"Spread",7]
_ADDBUTTON[525,31,629,45,"Swap",8]
_ADDBUTTON[525,46,629,60,"Copy",9]
_ADDBUTTON[525,61,629,75,"Reset",10]
'
Gosub _GET
Gosub _LINE
Gosub _R_SLIDER
Gosub _G_SLIDER
Gosub _B_SLIDER
'
Do
'
_CHECKBUTTONS
ZN=Param
'
_CHECKZONE[46,0,639,10,0]
If Param
YY=Y Screen(Y Mouse)
While Mouse Key
If Y Mouse>42 and Y Mouse<200
SY=Y Mouse
Screen Display 7,,SY-YY,,
Screen Display 6,,SY-YY+81,,
End If
Wend
End If
'
If ZN=11
Goto FIN
End If
'
If ZN=1 and R>0
Dec R
Gosub _R_SLIDER
Gosub _CHANGE
End If
'
If ZN=4 and R<15
Inc R
Gosub _R_SLIDER
Gosub _CHANGE
End If
'
If ZN=2 and G>0
Dec G
Gosub _G_SLIDER
Gosub _CHANGE
End If
'
If ZN=5 and G<15
Inc G
Gosub _G_SLIDER
Gosub _CHANGE
End If
'
If ZN=3 and B>0
Dec B
Gosub _B_SLIDER
Gosub _CHANGE
End If
'
If ZN=6 and B<15
Inc B
Gosub _B_SLIDER
Gosub _CHANGE
End If
'
If ZN=7
'
_DRAWTITLEBAR["Select Colour To Spread To (ESC Exits)"]
CC=C
Screen 6
Repeat
If Mouse Key
CC=Point(X Screen(6,X Mouse),Y Screen(6,Y Mouse))
End If
Until Inkey$=Chr$(27) or(CC<>C and CC<FF)
'
If CC<>C
FIRST=C
LAST=CC
Screen 6
If FIRST>LAST
Swap FIRST,LAST
End If
CF=Colour(FIRST)
CL=Colour(LAST)
NCOLS#=LAST-FIRST
'
DR#=(((CL/256) mod 16)-((CF/256) mod 16))/NCOLS#
DG#=(((CL/16) mod 16)-((CF/16) mod 16))/NCOLS#
DB#=((CL mod 16)-(CF mod 16))/NCOLS#
'
N=0
While N<(LAST-FIRST)+1
R=((CF/256) mod 16)+DR#*N
G=((CF/16) mod 16)+DG#*N
B=(CF mod 16)+DB#*N
Colour FIRST+N,R*256+G*16+B
Inc N
Wend
End If
'
Screen 7
_DRAWTITLEBAR["Palette Requester V1.1"]
_ADDBUTTON[0,0,44,10,"OK",0]
Gosub _GET
Gosub _R_SLIDER
Gosub _G_SLIDER
Gosub _B_SLIDER
'
End If
'
If ZN=8
'
_DRAWTITLEBAR["Select Colour To Swap With (ESC Exits)"]
CC=C
Screen 6
Repeat
If Mouse Key
CC=Point(X Screen(6,X Mouse),Y Screen(6,Y Mouse))
End If
Until Inkey$=Chr$(27) or(CC<>C and CC<FF)
'
TMP=Colour(C)
Colour C,Colour(CC)
Colour CC,TMP
Screen 7
_DRAWTITLEBAR["Palette Requester V1.1"]
_ADDBUTTON[0,0,44,10,"OK",0]
Gosub _GET
Gosub _R_SLIDER
Gosub _G_SLIDER
Gosub _B_SLIDER
'
End If
'
If ZN=9
'
_DRAWTITLEBAR["Select Colour To Copy To (ESC Exits)"]
CC=C
Screen 6
Repeat
If Mouse Key
CC=Point(X Screen(6,X Mouse),Y Screen(6,Y Mouse))
End If
Until Inkey$=Chr$(27) or(CC<>C and CC<FF)
'
Colour CC,Colour(C)
Screen 7
_DRAWTITLEBAR["Palette Requester V1.1"]
_ADDBUTTON[0,0,44,10,"OK",0]
Gosub _GET
Gosub _R_SLIDER
Gosub _G_SLIDER
Gosub _B_SLIDER
'
End If
'
If ZN=10
Screen 6
Get Palette S
Screen 7
Gosub _GET
Gosub _R_SLIDER
Gosub _G_SLIDER
Gosub _B_SLIDER
End If
'
If Scin(X Mouse,Y Mouse)=6
Gosub _PICK
End If
'
_CHECKZONE[42+(R*26),16,42+(R*26)+24,34,0]
If Param
While Mouse Key and X Screen(X Mouse)>46 and X Screen(X Mouse)<454
R=(X Screen(X Mouse)-42)/26
Gosub _R_SLIDER
Gosub _CHANGE
Wend
End If
'
_CHECKZONE[42+(G*26),36,42+(G*26)+24,54,0]
If Param
While Mouse Key and X Screen(X Mouse)>46 and X Screen(X Mouse)<454
G=(X Screen(X Mouse)-42)/26
Gosub _G_SLIDER
Gosub _CHANGE
Wend
End If
'
_CHECKZONE[42+(B*26),56,42+(B*26)+24,74,0]
If Param
While Mouse Key and X Screen(X Mouse)>46 and X Screen(X Mouse)<454
B=(X Screen(X Mouse)-42)/26
Gosub _B_SLIDER
Gosub _CHANGE
Wend
End If
'
Loop
'
FIN:
Screen S
Get Palette 6
Screen Close 7
Screen Close 6
_SETFONT[_TEMP2$,_TEMP3]
_DIALOGBUTTON$=_TEMP1$
Pop Proc
'
_PICK:
While Scin(X Mouse,Y Mouse)=6
Screen 6
If Mouse Key
C=Point(X Screen(6,X Mouse),Y Screen(6,Y Mouse))
Gosub _GET
Gosub _LINE
Gosub _R_SLIDER
Gosub _G_SLIDER
Gosub _B_SLIDER
End If
Wend
Screen 7
Return
'
_LINE:
Screen 6
Ink 0
Draw 0,0 To 319,0
Ink 1
Draw C*STP,0 To C*STP+STP,0
Screen 7
Return
'
_GET:
R=Colour(C)/256
G=Colour(C)/16 mod 16
B=Colour(C) mod 16
Return
'
_R_SLIDER:
_HORIZONTALSLIDER[42,16,418,18,16,R+1,""]
_DRAW3DBOX[497,17,519,33,Str$(R)-" ",2,_TEXT,_BACK]
Return
'
_G_SLIDER:
_HORIZONTALSLIDER[42,36,418,18,16,G+1,""]
_DRAW3DBOX[496,37,519,53,Str$(G)-" ",2,_TEXT,_BACK]
Return
'
_B_SLIDER:
_HORIZONTALSLIDER[42,56,418,18,16,B+1,""]
_DRAW3DBOX[497,57,519,73,Str$(B)-" ",2,_TEXT,_BACK]
Return
'
_CHANGE:
R$=Hex$(R)
G$=Mid$(Hex$(G),2,1)
B$=Mid$(Hex$(B),2,1)
Screen 6
Colour C,Val(R$+G$+B$)
Screen 7
Return
'
End Proc
'
Procedure _FILEREQUESTER[H$]
'
Shared _DIALOGBUTTON$,_FONTNAME$,_FONTSIZE,_TEXT,_COLOUR,_LIGHT,_BACK
Shared _MAXFILES,_FILES,_PATH$,_WILD$,_FILENAME$(),_FILE$
'
TEMP1$=_DIALOGBUTTON$
_DIALOGBUTTON$=""
'
TEMP2$=_FONTNAME$
TEMP3=_FONTSIZE
'
_SETFONT["Topaz",8]
'
_OPENDIALOGSCREEN[7,110,44]
Get Palette 0
_DRAWTITLEBAR[H$]
'
_DRAW3DBOX[0,11,639,108,"",1,,_COLOUR]
_DRAW3DBOX[8,13,334,106,"",1,,_BACK]
'
_ADDBUTTON[337,89,352,97,"(S)UAR",-1]
_DRAW3DBOX[337,13,352,87,"",1,,_BACK]
_ADDBUTTON[337,98,352,106,"(S)DAR",-2]
'
_DRAW3DBOX[356,45,440,59,"File",1,_TEXT,_BACK]
_ADDINPUTBUTTON[360,64,_FILE$,31,31,-3]
_DRAW3DBOX[356,13,440,27,"Drawer",1,_TEXT,_BACK]
_ADDINPUTBUTTON[360,32,_PATH$+_WILD$,31,120,-4]
'
_ADDBUTTON[356,77,490,91,"Parent",5]
_ADDBUTTON[356,92,490,106,"Volumes",6]
_ADDBUTTON[497,77,631,91,"Cancel",7]
_ADDBUTTON[497,92,631,106,"OK",8]
'
_BPATH$=_PATH$+_WILD$
_SWITCH=0
_POSITION=1
'
If _FILES=0
Gosub _GETDIRECTORY
End If
'
Gosub _DISPLAYLIST
Gosub _DISPLAYPATH
Gosub _DISPLAYFILE
'
Do
'
_CHECKBUTTONS
_BUTTONZONE=Param
'
If _BUTTONZONE=1 and _POSITION>1
Dec _POSITION
Gosub _DISPLAYLIST
End If
'
If _BUTTONZONE=2 and _POSITION<_FILES-11
Inc _POSITION
Gosub _DISPLAYLIST
End If
'
If _BUTTONZONE=3
_ADDINPUTBUTTON[360,64,_FILE$,31,31,0]
_FILE$=Param$
End If
'
If _BUTTONZONE=4
_BPATH$=_PATH$
_ADDINPUTBUTTON[360,32,_PATH$+_WILD$,31,120,0]
_PATH$=Param$
Gosub _CUTWILD
_TEMP$=_PATH$
Gosub _CHECKFILE
End If
'
If _BUTTONZONE=5
Gosub _PARENT
End If
'
If _BUTTONZONE=6
SWITCH=1
Gosub _GETDIRECTORY
Gosub _DISPLAYLIST
Gosub _DISPLAYPATH
Gosub _DISPLAYFILE
End If
'
If _BUTTONZONE=7
_FILE$=""
Goto FIN
End If
'
If _BUTTONZONE=8
_TEMP$=_PATH$+_FILE$
Goto FIN
End If
'
_COUNT=0
While _COUNT<11
_CHECKZONE[10,16+(_COUNT*8),332,23+(_COUNT*8),1]
If(Param>0) and(_FILENAME$(_POSITION+_COUNT)<>"")
_TEMP$=_FILENAME$(_POSITION+_COUNT)
Gosub _CHECKFILE
Gosub _DISPLAYFILE
End If
Inc _COUNT
Wend
'
_GRABVERTICALSLIDER[337,13,15,74,Min(_FILES,_FILES-11),_POSITION,""]
If Param<>_POSITION
_POSITION=Param
Gosub _DISPLAYLIST
End If
'
Loop
'
_GETDIRECTORY:
'
If Not Exist(_PATH$)
_PATH$=_BPATH$
End If
'
_COUNT=1
While _COUNT<_MAXFILES+1
_FILENAME$(_COUNT)=""
Inc _COUNT
Wend
'
Set Dir 31
_FILES=1
'
If SWITCH=0
'
_FILENAME$(_FILES)=Dir First$(_PATH$+_WILD$)
While _FILENAME$(_FILES)<>"" and _FILES<_MAXFILES
If Mid$(_FILENAME$(_FILES),1,1)="*"
Mid$(_FILENAME$(_FILES),31,5)="(Dir)"
End If
Inc _FILES
_FILENAME$(_FILES)=Dir Next$
Wend
'
Else
'
_FILENAME$(_FILES)=Dev First$("**")
While _FILENAME$(_FILES)<>"" and _FILES<_MAXFILES
Mid$(_FILENAME$(_FILES),31,5)="(Dev)"
Inc _FILES
_FILENAME$(_FILES)=Dev Next$
Wend
'
End If
'
_BPATH$=_PATH$
_POSITION=1
SWITCH=0
'
Return
'
_DISPLAYPATH:
_ADDINPUTBUTTON[360,32,_PATH$+_WILD$,31,31,999]
Return
'
_DISPLAYFILE:
_ADDINPUTBUTTON[360,64,_FILE$,31,31,999]
Return
'
_DISPLAYLIST:
'
_COUNT=_POSITION
While _COUNT<_POSITION+11
Locate 2,(_COUNT-_POSITION)+2
If _FILENAME$(_COUNT)<>""
If Left$(_FILENAME$(_COUNT),1)="*"
Pen _LIGHT
Else
Pen _TEXT
End If
Print _FILENAME$(_COUNT);
Else
Print Space$(38);
End If
Inc _COUNT
Wend
'
_VERTICALSLIDER[337,13,15,74,Min(_FILES,_FILES-11),_POSITION,""]
'
Return
'
_PARENT:
'
If Len(_PATH$)>2
_COUNT=Len(_PATH$)-1
While _COUNT>1
A$=Mid$(_PATH$,_COUNT,1)
If(A$="/") or(A$=":")
_PATH$=Left$(_PATH$,_COUNT)
Gosub _GETDIRECTORY
Gosub _DISPLAYPATH
Gosub _DISPLAYLIST
Exit
End If
Dec _COUNT
Wend
End If
Return
'
_CUTWILD:
'
_COUNT=Len(_PATH$)
While _COUNT>1
A$=Mid$(_PATH$,_COUNT,1)
If(A$="/") or(A$=":")
_WILD$=Right$(_PATH$,Len(_PATH$)-_COUNT)
_PATH$=Left$(_PATH$,_COUNT)
Exit
End If
Dec _COUNT
Wend
Return
'
_CHECKFILE:
'
_COUNT=30
While _COUNT>1
If Mid$(_TEMP$,_COUNT,1)<>" "
_TEMP$=Left$(_TEMP$,_COUNT)
Exit
End If
Dec _COUNT
Wend
'
If(Right$(_TEMP$,1)=":") or(Right$(_TEMP$,1)="/")
If Left$(_TEMP$,1)=" "
_PATH$=Mid$(_TEMP$,2)
Else
_PATH$=_TEMP$
End If
Gosub _GETDIRECTORY
SWITCH=0
Gosub _DISPLAYPATH
Gosub _DISPLAYLIST
Goto OK1
End If
'
A$=Left$(_TEMP$,1)
_TEMP$=Mid$(_TEMP$,2)
'
If A$="*"
_PATH$=_PATH$+_TEMP$+"/"
Gosub _GETDIRECTORY
Gosub _DISPLAYPATH
Gosub _DISPLAYLIST
Goto OK1
End If
'
_FILE$=_TEMP$
Gosub _DISPLAYFILE
'
OK1:
Return
'
FIN:
'
_SETFONT[TEMP2$,TEMP3]
_DIALOGBUTTON$=TEMP1$
Screen Close 7
'
End Proc[_TEMP$]
'
Procedure _INPUTREQUESTER[M$,TXT$,L,ML]
'
Shared _DIALOGBUTTON$,_BACK,_COLOUR,_TEXT,_LIGHT,_SHADOW
'
_TEMP1$=_DIALOGBUTTON$
_TEMP2$=_FONTNAME$
_TEMP3=_FONTSIZE
_DIALOGBUTTON$=""
_OLDTXT$=TXT$
'
_OPENDIALOGSCREEN[7,58,50]
Get Palette 0
H=57
'
_DRAW3DBOX[0,0,639,H-1,"",4,0,_COLOUR]
Set Pattern 2
_DRAW3DBOX[3,10,636,H-2,"",3,_LIGHT,_BACK]
Set Pattern 0
'
_DRAW3DBOX[2,1,637,9,M$,2,_TEXT,_COLOUR]
_DRAW3DBOX[8,13,632,H-20,"",3,,_BACK]
'
_ADDBUTTON[20,H-18,120,H-5,"Cancel",1]
_ADDBUTTON[519,H-18,619,H-5,"OK",2]
'
L=Min(L,76)
XX=(Screen Width/2)-(L*8/2)
_ADDINPUTBUTTON[XX,24,TXT$,L,ML,-3]
'
Do
'
_CHECKBUTTONS
_BUTTONZONE=Param
'
If _BUTTONZONE=1
TXT$=_OLDTXT$
Exit
End If
'
If _BUTTONZONE=2
Exit
End If
'
If _BUTTONZONE=3
_ADDINPUTBUTTON[XX,24,TXT$,L,ML,0]
TXT$=Param$
End If
'
Loop
'
_DIALOGBUTTON$=_TEMP1$
_SETFONT[_TEMP2$,_TEMP3]
Screen Close 7
'
End Proc[TXT$]