Set Buffer 25
Rem **************************
Rem ** CREATED WITH GUIAmos **
Rem **   By Andrew Fisher   **
rem **   LEVEL 9 Software   **
Rem **   CopyRight©® 1995   **
Rem **************************
Rem
Screen Close 0
Assign"FONTS:"To"GUIAmos:newfonts/"
Get Disc Fonts 
Rem Setup Variables
xTBS= 13:YTBS= 13:WID=7
DimTYPE( 35),X1( 35),y1( 35),X2( 35),y2( 35),_ONOF( 35),ty( 35),_TOT( 35),pos( 35),_len( 35),_maxlen( 35),_def$( 35),file$( 35),tgles( 35),TX$( 35,10),ps( 35)
Gosub Setup

Rem ***** Main Loop *****
Do
MZ=Mouse Zone : MS=Mouse Screen : MK=Mouse Key
Rem Check Mouse key 1
If MK=1
Rem Check If gadget is a Button
If MZ<>0 and TYPE(MZ)=1 or type(mz)=80 : Z=MZ : Gosub DEFINE : While Mouse Key=1 : If Mouse Zone<>Z : Gosub OFF : Exit : End If : Wend : Gosub OFF : End If 
Z=MZ
Rem Check If gadget is a Toggle
If TYPE(MZ)=22 : Gosub DEFINE : While Mouse Key=1 : If Mouse Zone=0 : Gosub OFF : Exit : End If : Wend : Gosub OFF : Gosub SHIFT : End If 
Rem Check If gadget is a Horozontal Slider
if type(mz)=6:gosub hslide:endif
Rem Check If gadget is a Vertical Slider
if type(mz)=7:gosub vslide:endif
Rem Check If gadget is a Vertical Scroller
If TYPE(MZ)=35 : Gosub _VSCROLLER : End If 
Rem Check If gadget is a Horozontal Scroller
If TYPE(MZ)=34 : Gosub _hscroller : End If 
Rem Check for File selection gad
  If TYPE(MZ)=23 : Z=MZ : Gosub DEFINE : While Mouse Key=1 : If Mouse Zone<>Z : Gosub OFF : Exit : End If : Wend : Gosub OFF : Gosub FILE : End If 
Rem Check If gadget is a Tick Box
If MZ<>0 And TYPE(MZ)=4: Z=MZ
Rem Check If tick Box is ticked/ not ticked
If _ONOF(z)=0 : Gosub _TICK : _ONOF(z)=1 : Else Gosub _UNTICK : _ONOF(z)=0 : Endif : While Mouse Key=1 : Wend : Endif
End If
Wait Vbl 
Clear Key 
Loop
SHIFT:
Set Font 1
Rem Draw over previous text
Ink 0 : Bar X1(MZ)+1+ 17,Y1(MZ)+1 To X2(MZ)-1,Y2(MZ)-1
Rem Add one to the current toggle position
Add PS(MZ),1,1 To TGLES(MZ)
Rem find the centre of the box in both x & y
CENX=Abs(((X2(MZ)-X1(MZ)+ 17)-((Len(TX$(MZ,PS(MZ))))*5))/2)
CENY=(Abs(Y2(MZ)-Y1(MZ))/2)+3
Rem place text on screen
Ink 1,0 : Text CENX+X1(MZ)+1,CENY+Y1(MZ),TX$(MZ,PS(MZ))
Return 
rem file selection gadget
FILE: 
FILE$(MZ)=Fsel$("","","","")
Return 

rem return button to original state
OFF:
Ink 2 : Polyline X1(Z),Y2(Z) To X1(Z),Y1(Z) To X2(Z),Y1(Z)
If TYPE(MZ)=80 : Polyline X1(Z)+1,Y2(Z)-1 To X1(Z)+1,Y1(Z)+1 To X2(Z)-1,Y1(Z)+1 : End If 
Ink 1 : Polyline X2(Z),Y1(Z) To X2(Z),Y2(Z) To X1(Z),Y2(Z)
If TYPE(MZ)=80 : Polyline X1(Z)+1,Y2(Z)-1 To X2(Z)-1,Y2(Z)-1 To X2(Z)-1,Y1(Z)+1 : End If 
Return 

Rem Place button on screen (3d)
DEFINE:
Ink 1 : Polyline X1(Z),Y2(Z) To X1(Z),Y1(Z) To X2(Z),Y1(Z)
If TYPE(MZ)=80 : Polyline X1(Z)+1,Y2(Z)-1 To X1(Z)+1,Y1(Z)+1 To X2(Z)-1,Y1(Z)+1 : End If 
Ink 2 : Polyline X2(Z),Y1(Z) To X2(Z),Y2(Z) To X1(Z),Y2(Z)
If TYPE(MZ)=80 : Polyline X1(Z)+1,Y2(Z)-1 To X2(Z)-1,Y2(Z)-1 To X2(Z)-1,Y1(Z)+1 : End If 
Return

Rem Place Tick on the screen
_TICK:
Ink 1 : If TY(Z)=0 : Polyline X1(Z)+(xTBS-2),Y1(Z)+2 To X1(Z)+4,Y1(Z)+(yTBS-2) To X1(Z)+2,Y1(Z)+(yTBS-5) : Else Ink 3 : Bar X1(Z)+1,Y1(Z)+1 To X2(Z)-1,Y2(Z)-1 : End If 
Return

Rem take tick off the screen
_UNTICK:
Ink 0 : Bar X1(Z)+1,Y1(Z)+1 To X2(Z)-1,Y2(Z)-1
Return
Hslide:
Set Slider 0,0,1,1,0,0,1,0
rem maths to get position of slider
XM#=X Screen(X Mouse) : MZ=Mouse Zone : _VAL#=X1(MZ) : SZ#=X2(MZ)-X1(MZ) : TPOS#=(XM#-_VAL#)/(SZ#/_TOT(MZ))
tpos=tpos#
If TPOS=POS(MZ) Then Return 
POS(MZ)=TPOS#
rem update slider
If POS(MZ)=<_TOT(MZ) : Hslider X1(MZ),Y1(MZ) To X2(MZ),Y2(MZ),_TOT(MZ),POS(MZ),1 : Else POS(MZ)=_TOT(MZ) : End If 
Return
 
Rem Move the position of Horozontal slider
Vslide:
Set Slider 0,0,1,1,0,0,1,0
YM#=Y Screen(Y Mouse) : MZ=Mouse Zone : _VAL#=Y1(MZ) : SZ#=Y2(MZ)-Y1(MZ) : TPOS#=(YM#-_VAL#)/(SZ#/_TOT(MZ))
tpos=tpos#
If TPOS=POS(MZ) Then Return 
POS(MZ)=TPOS#
If POS(MZ)=<_TOT(MZ) : Vslider X1(MZ),Y1(MZ) To X2(MZ),Y2(MZ),_TOT(MZ),POS(MZ),1 : Else POS(MZ)=_TOT(MZ) : End If 
 Return 

_HScroller:
rem Find out which side of the slider the mouse is on either <>
Rem because I have only use one zone hers instead of two 
Rem (it saves zones anyway) 
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : X=XM-X1(MZ)
If X=>WID : XOFF=WID : XOFF2=0 : Add POS(MZ-1),1 : Else XOFF=0 : XOFF2=-WID : If POS(MZ-1)-1=>0 : Add POS(MZ-1),-1 : End If : End If
Screen 1
Ink 1 : Polyline X2(MZ)+XOFF2,Y1(MZ) To X1(MZ)+XOFF,Y1(MZ) To X1(MZ)+XOFF,Y2(MZ)
Ink 2 : Polyline X1(MZ)+XOFF,Y2(MZ) To X2(MZ)+XOFF2,Y2(MZ) To X2(MZ)+XOFF2,Y1(MZ)
While Mouse Key=1 : Wend 
Ink 2 : Polyline X2(MZ)+XOFF2,Y1(MZ) To X1(MZ)+XOFF,Y1(MZ) To X1(MZ)+XOFF,Y2(MZ)
Ink 1 : Polyline X1(MZ)+XOFF,Y2(MZ) To X2(MZ)+XOFF2,Y2(MZ) To X2(MZ)+XOFF2,Y1(MZ)
MZ=MZ-1
If POS(MZ)=<_TOT(MZ) : Hslider X1(MZ),Y1(MZ) To X2(MZ),Y2(MZ),_TOT(MZ),POS(MZ),1 : Else POS(MZ)=_TOT(MZ) : End If 
Return 

_VSCROLLER:
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : Y=YM-Y1(MZ)
If Y=<WID+1 : YOFF=WID+1 : YOFF2=0 : If POS(MZ-1)-1=>0 : Add POS(MZ-1),-1 : End If : Else YOFF=0 : YOFF2=WID+1 : Add POS(MZ-1),1 : End If 
Screen 1
Ink 1 : Polyline X2(MZ),Y1(MZ)+YOFF2 To X1(MZ),Y1(MZ)+YOFF2 To X1(MZ),Y2(MZ)-YOFF
Ink 2 : Polyline X1(MZ),Y2(MZ)-YOFF To X2(MZ),Y2(MZ)-YOFF To X2(MZ),Y1(MZ)+YOFF2
While Mouse Key=1 : Wend 
Ink 2 : Polyline X2(MZ),Y1(MZ)+YOFF2 To X1(MZ),Y1(MZ)+YOFF2 To X1(MZ),Y2(MZ)-YOFF
Ink 1 : Polyline X1(MZ),Y2(MZ)-YOFF To X2(MZ),Y2(MZ)-YOFF To X2(MZ),Y1(MZ)+YOFF2
MZ=MZ-1
If POS(MZ)=<_TOT(MZ) : Vslider X1(MZ),Y1(MZ) To X2(MZ),Y2(MZ),_TOT(MZ),POS(MZ),1 : Else POS(MZ)=_TOT(MZ) : End If 
Return 

Setup:
Rem Open data file and load all info!
Open In 1,"DF0:Example.DAT"
For I=1 To 14 : Input #1,NUL : Next I
For I=1 To 35 : Input #1,TYPE(I) : Next I 
For I=1 To 35 : Input #1,_ONOF(I): Next I
For I=1 To 35 : input #1,ty(I) : Next I
for i=1 to 35 : input #1,_tot(i): Next i
for i=1 to 35 : input #1,pos(i): next i
For I=1 To 35 : Input #1,x1(I): Next I
For I=1 To 35 : Input #1,y1(I): Next I
For I=1 To 35 : Input #1,x2(I): Next I
For I=1 To 35 : Input #1,y2(I): Next I
for i=1 to 35 : input #1,_len(I): Next I
For I=1 To 35 : input #1,_MAXLEN(I) : Next I
For I=1 To 35 : input #1,_DEF$(I) : Next I
for i=1 to 35
If TYPE(I)=22
for no=1 to 10
input #1,tx$(I,no)
next no
endif
next i
For I=1 To 35:If TYPE(I)=22 : input #1,tgles(I) :endif :Next I
For i=1 to  35
Ps(i)=1
next i
Close 1
Rem load the iff background
Load Iff"DF0:Examplegui",1
Limit mouse xhard(0),yhard(0) to xhard(2*screen width),yhard(screen height)
curs off
Reserve Zone  35
Rem Setup Some Zones!
For I=1 To 35
If TYPE(I)=1 or TYPE(I)=4 or TYPE(I)=6 or TYPE(I)=7 or TYPE(I)=23 or type(i)=22 or type(i)=34 or type(i)=35 or type(i)=80
Set Zone i,X1(i),Y1(i) To X2(i),Y2(i)
   End If 
Next I
For I=1 To 35
If _ONOF(I)=1 : Ink 1
If TY(I)=0
Polyline X1(I)+(xTBS-2),Y1(I)+2 To X1(I)+4,Y1(I)+(yTBS-2) To X1(I)+2,Y1(I)+(yTBS-5)
Else 
Ink 3 : Bar X1(i)+1,Y1(i)+1 To X2(i)-1,Y2(i)-1
      End If 
 End If 
next i
Set Slider 0,0,1,1,0,0,1,0
For i=1 to 35
if type(i)=6
Hslider X1(i),Y1(i) To X2(i),Y2(i),_TOT(i),POS(i),1 
endif
Next i
For i=1 to 35
if type(i)=7
vslider X1(i),Y1(i) To X2(i),Y2(i),_TOT(i),POS(i),1 
endif
next i
For I=1 To 35
If TYPE(I)=20 or type(i)=21
Inc _TEXTZ
D$=_DEF$(I)-" "
if type(i)=20:ty$="ED": DEF$="'"+_def$(i)+"'": Else TY$="DI ": If D$="0": DEF$="2"
Else _maxlen(i)=val(_def$(i)):def$="1":endif :end If
A$=A$+ty$+str$(_textz)+","+Str$(X1(I))+","+Str$(y1(I))+","+Str$(_LEN(I)-1)+","+str$(_maxlen(i))+","+DEF$
a$=A$+",0,1;"
Endif
Next I  
_TEXTZ=0
a$=a$+"EXit;"
Dialog Open 1,a$,32, 1348
B=Dialog Run(1)
Gr Writing 1
rem Setup Menus
Menu$( 1)="Project 
Menu$( 2)="Colours 
Menu$( 3)="Help! 
Menu$( 4)="GuiAmos 
Menu$( 1, 1)="A 
Menu$( 1, 1, 1)="Quick 
Menu$( 1, 1, 2)="Demo 
Menu$( 1, 1, 3)="Example 
Menu$( 1, 1, 4)="To 
Menu$( 1, 1, 5)="Show 
Menu$( 1, 1, 6)="GuiAmos 
Menu$( 1, 1, 7)="At 
Menu$( 1, 1, 8)="Work 
menu on
Return
