home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga ISO Collection
/
AmigaUtilCD2.iso
/
Programming
/
Amos
/
amprocom.dms
/
in.adf
/
Compiler_Shell.AMOS
/
Compiler_Shell.amosSourceCode
< prev
next >
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
NeXTSTEP
RISC OS/Acorn
UTF-8
Wrap
AMOS Source Code
|
1993-06-19
|
54.3 KB
|
1,990 lines
' ----------------------------------
'
' AMOSPro Compiler shell accessory
'
' V 2.00
'
' By Jean-Baptiste BOLCATO
'
' (c) 1993 Europress Software Ltd.
'
' ----------------------------------
Set Buffer 16
Set Sprite Buffer 48
VER$="V 2.00"
_CLOSE_DEF_SCREEN
_LOW_RAM
Break Off
On Error Proc _GEST_ERR2
Set Accessory
Close Workbench : Close Editor
Trap Resource Bank 16
If Errtrap
ER$="The main resource bank has been erased!"
_GEST_ERR2
End If
' icons animation parameters
TIMING=3 : ZAP=1 : VZAP=1
Dim ANM_IC_T(11),XZ(6),YZ(6)
Global MZ,MZ_OLD,IC,IC_OLD,TIME,TIMING,ZAP,VZAP
Global ANM_IC_T(),XZ(),YZ(),XO,YO
' list of prog
NLST=32 : Dim LST$(NLST)
' screens opening parameters
Dim SOPEN(7) : SOP=20
Global SCR,SCX,SCY,SCSX,SCSY,DY,SOP,SOPEN(),CHANGE
Global PATH$,DPATH$,PRAM$,CNAME$,FACC,CFLASH$
Global HELP$,ER$,VER$,COM$,FRE$,FRE,FRE_OLD
Global FLAG$,ANM$,ANM_NF,SND$,LST$(),NLST
Global TEMP_SRCE$,TEMP_DEST$
_CONFIG_DEF_LOAD
_INIT_MAIN_SCREEN
_INIT_ZONES
_INIT_DISPLAY
_SCREEN_OPEN[SCR,SCSY,SCX,SCY]
Limit Mouse 64,25 To 512,310 : Show On
' Direct Setup called by User menu?
COM$=Command Line$ : If COM$="SETUP" : _SETUP[True] : _QUIT[0] : End If
' Load APCmp program
_LOAD_APCMP
' Load anim, music & animated buttons if needed
_LOAD_BANKS[15]
' Copy all Libs into ram-disc if needed
_COPY_RAMLIBS
_CONFIG_GET[9] : TEMP_SRCE$=Param$
_CONFIG_GET[10] : TEMP_DEST$=Param$
CHANGE=False
Do
_ABOUT
Do
Multi Wait
_CHECKMEM
DIAL=Dialog(1)
If DIAL
If DIAL=6
_COMPILE
Else If(DIAL>=2 and DIAL<=4)
_SETFLAG[DIAL-1,Vdialog(1,50+DIAL-1)+3*(DIAL=3)+5*(DIAL=4)]
_UPDATE_BUTTONS[DIAL]
Else If DIAL=5
_SETUP[False]
Else If DIAL=15
_HELP["_DATAS_MAIN"]
Else If DIAL=14
_ABOUT
Else If DIAL=1
_QUIT[1]
End If
End If
' animated buttons
_GETFLAG[37]
If Param Then _ICONS_ANIMATE
Loop
Loop
' --- Procedures ---
Procedure _ABOUT
X=Free
Trap Dialog Freeze 1
Trap Dialog Open 2,1
If Errtrap=0
Vdialog$(2,0)=" - "+VER$
Vdialog$(2,1)="Chip:"+Str$(Chip Free)+" Fast:"+Str$(Fast Free)
Trap D=Dialog Run(2,9)
If Errtrap=0
_WAIT[300]
End If
End If
Trap Dialog Close 2
Trap Dialog Unfreeze 1
End Proc
Procedure _CHECKMEM
On Error Proc _GEST_ERR
Resume Label _FINISH_CHECKMEM
FRE=Chip Free+Fast Free
If FRE_OLD<>FRE
FRE_OLD=FRE
FRE$=Str$(FRE/1024)+" K "+Resource$(9)
Trap Vdialog$(1,99)=FRE$
Trap Dialog Update 1,14
End If
Trap Vdialog$(1,99)=FRE$
If(Chip Free<20000) or FRE<40000
_INFO[Resource$(87)]
_WAIT[20]
F=0
_GETFLAG[37]
If Param
_SETFLAG[37,0]
F=1 : Erase 15
End If
_GETFLAG[34]
If Param
_SETFLAG[34,0]
F=1 : Erase 10
End If
_GETFLAG[35]
If Param
_SETFLAG[35,0]
F=1 : Erase 3
End If
_GETFLAG[24]
If Param and DPATH$=PRAM$ and F=0
_WAIT[25]
_NOINFO
F=1
_WARN[Resource$(86),1]
If Param
_SETFLAG[24,0]
_DEL_RAMLIBS
DPATH$=PATH$
End If
End If
If F=0
_WAIT[25]
_NOINFO
_WARN[Resource$(85)+Resource$(20),1]
If Param=True
_WAIT[25]
_SETFLAG[24,0]
_DEL_RAMLIBS
DPATH$=PATH$
End If
End If
End If
_FINISH_CHECKMEM:
_NOINFO
End Proc
Procedure _CLOSE_DEF_SCREEN
If Prg Under<>-1
Trap Screen 0
If Errtrap=0
Fade 1 : Wait 15
Screen Close 0
End If
End If
End Proc
Procedure _CONFIG_DEF_LOAD
DPATH$=Resource$(0)
PRAM$="RAM:AMOS_Compiler_Temp/"
C$="AMOSPro_Compiler_Config"
CNAME$=PRAM$+C$
_CONFIG_LOAD[CNAME$]
If Param
CNAME$=Dir$+C$
_CONFIG_LOAD[CNAME$]
If Param
CNAME$=Dir$+"s/"+C$
_CONFIG_LOAD[CNAME$]
If Param
CNAME$="S:"+C$
_CONFIG_LOAD[CNAME$]
If Param
CNAME$=Fsel$(Dir$+"**","",Resource$(73),Resource$(74))
_CONFIG_LOAD[CNAME$]
If Param
ER$=Resource$(75)
_GEST_ERR2
Edit
End If
End If
End If
End If
End If
' extract shell preferences
_CONFIG_GET[73]
ANM$=Param$
_CONFIG_GET[74]
SND$=Param$
_CONFIG_GET[72]
FLAG$=Param$
If Len(FLAG$)<43 Then ER$=Resource$(77) : _GEST_ERR2
If Prg Under<>1
_GETFLAG[1] : If Param=0 : _SETFLAG[1,1] : End If
_GETFLAG[2] : If Param=0 : _SETFLAG[2,1] : End If
End If
' go ram & restore path$, cname$
If Exist(PRAM$+"AMOSPro_Compiler_Config")
DPATH$=PRAM$
Open In 1,PRAM$+"Compiler_Origin"
Trap Input #1,PATH$
Trap Input #1,CNAME$
Close
End If
End Proc
Procedure _CONFIG_GET[N]
Shared _CONFBK,CONFL
A=Start(_CONFBK)+8+1
If N>0
For C=1 To N
L=Peek(A) : If L=255 : Pop Proc[""] : End If
Add A,L+2
Next
End If
L=Peek(A)
End Proc[Peek$(A+1,L)]
Procedure _CONFIG_LOAD[F$]
Shared _CONFBK,_CONFL
If Not Exist(F$) Then Pop Proc[1]
Trap Open In 1,F$ : If Errtrap Then Pop Proc[2]
_CONFL=Lof(1) : Close
For B=65000 To 0 Step -1 : Exit If Length(B)=0 and Length(B+1)=0 : Next B
_CONFBK=B
Trap Reserve As Work B,1024*6 : If Errtrap Then Pop Proc[3]
Trap Bload F$,Start(B) : If Errtrap Then Erase B : Pop Proc[2]
If Peek$(Start(B),4)<>"CCt1" Then Erase B : Pop Proc[4]
End Proc[0]
Procedure _CONFIG_SAVE[F$]
Shared _CONFBK,_CONFL
Trap Bsave F$,Start(_CONFBK) To Start(_CONFBK)+_CONFL
If Errtrap Then Pop Proc[2]
End Proc[0]
Procedure _CONFIG_SET[N,A$]
Shared _CONFBK,_CONFL
Trap Reserve As Work _CONFBK+1,1024*6 : If Errtrap Then Pop Proc[2]
S=Start(_CONFBK) : SS=S : D=Start(_CONFBK+1) : DD=D
Add S,8
C=0 : L=Peek(S+1)
Repeat
If C=N
Poke D,0 : Poke D+1,Len(A$) : Poke$ D+2,A$ : Add D,2+Len(A$)
Else
Poke D,0 : Poke D+1,L : If L>0 : Copy S+2,S+2+L To D+2 : End If : Add D,2+L
End If
Add S,2+L
L=Peek(S+1)
Inc C
Until L=255
Poke D,0 : Poke D+1,255 : Add D,2
Add D,D and 1
Copy DD,D To SS+8
Loke SS+4,D-DD
_CONFL=D-DD+8
Erase _CONFBK+1
End Proc[0]
Procedure _COMPILE
Shared _CONFBK
On Error Proc _GEST_ERR
Resume Label _FINISH_COMPILE
Dim T(3)
T(0)=3 : T(1)=1 : T(2)=0
SCR_ANIM=-1 : SCR_2=-1
REDRAW=False : CHANGE=True
COMP_STP=100
Dialog Freeze 1
' Main flags
_GETFLAG[1] : SRCE=Param
_GETFLAG[2] : DEST=Param
_GETFLAG[3] : TYPE=T(Param)
_GETFLAG[6] : If TYPE=1 : Add TYPE,Param : End If
' source
If SRCE=0
Timer=0 : _INFO[Resource$(55)]
S$=TEMP_SRCE$ : Call Editor Equ("AEd_SaveAsName"),0,S$ : A$=Param$
Repeat : Until Timer>50 : _NOINFO
If A$<>"" : _WARN[A$,0] : _QUIT[0] : End If
Ask Editor Equ("AEdAsk_ProgramName") : SS$=Param$
If SS$="" : SS$="Unnamed.AMOS" : End If
Else If SRCE=1
S$=Fsel$("*.AMOS","",Resource$(27)) : SS$=S$
If S$<>""
_EXTRACT_PATH[S$]
Trap Dir$=Param$ : If Errtrap=0 : S$=Dir$+Mid$(S$,Len(Param$)+1) : End If
End If
Else If SRCE=2
REDRAW=True : _EDIT_LIST
If Param=True
NL=0 : S$=LST$(NL) : SS$=S$
End If
End If
If S$=""
_INFO[Resource$(115)] : _WAIT[100] : _NOINFO : Goto _FINISH_COMPILE
End If
_EXTRACT_PATH[SS$] : SP$=Param$ : SN$=Mid$(SS$,Len(Param$)+1)
' destination & type
If DEST=0
TYPE=3 : D$=TEMP_DEST$
DD$=SS$ : F=0
For C=Len(DD$) To 1 Step -1
A$=Mid$(DD$,C,1)
Exit If(A$="/") or(A$=":")
If A$="." : DD$=Left$(DD$,C-1)+"_C"+Mid$(DD$,C) : F=1 : Exit : End If
Next
If F=0 : DD$=DD$+"_C.AMOS" : End If
Call Editor Equ("AEd_CloseName"),1,DD$
Else
D$=SS$ : F=True
If SRCE<2
A$=Fsel$("**","",Resource$(30),Resource$(33))
If A$=""
If Dir$<>SP$ : D$=Dir$+SN$ : End If
Else
D$=A$ : F=False
_EXTRACT_PATH[D$]
Trap Dir$=Param$ : If Errtrap=0 : D$=Dir$+Mid$(D$,Len(Param$)+1) : End If
End If
End If
If F
If Upper$(Right$(D$,5))=".AMOS"
If TYPE<>3
D$=Left$(D$,Len(D$)-5)
Else
D$=Left$(D$,Len(D$)-5)+"_C.AMOS"
End If
End If
End If
DD$=D$
End If
If D$=S$
_INFO[Resource$(116)] : _WAIT[100] : _NOINFO : Goto _FINISH_COMPILE
End If
' build command line
C$="TYPE="+Mid$(Str$(TYPE),2)+" "
_GETFLAG[4] : If Param=0 : C$=C$+"NO" : End If : C$=C$+"ERR "
_GETFLAG[14] : If Param=0 : C$=C$+"NO" : End If : C$=C$+"LONG "
_GETFLAG[15] : If Param=0 : C$=C$+"NOLIB " Else C$=C$+"INCLIB " : End If
_GETFLAG[5] : If Param=0 : C$=C$+"NO" : End If : C$=C$+"DEF "
_GETFLAG[6] : If Param=0 : C$=C$+"NO" : End If : C$=C$+"WB "
C$=C$+'TEMP="Ram:" '
C$=C$+'LIBS="'+DPATH$+'" '
_GETFLAG[24]
' Go for it now!!!
ANM=False
_GETFLAG[34]
If Param<>0 and Length(10)>0
' Play Animation!
If FRE>100000
ANM=True
For S=0 To 7
Trap Screen S
If Errtrap
SCR_ANIM=S : SOPEN(S)=True : Exit
End If
Next
' hide all screens
Trap Screen Hide SCR
Trap Screen Hide 9
Extension_5_006E "Step",ANM_NF
Else
_WARN[Resource$(85)+Resource$(88),0]
End If
End If
If ANM=False
' no animation!
Extension_5_006E "Step",COMP_STP
End If
_GETFLAG[35] : If Param : _PLAY_SND : End If
Do
SCR_2=-1
' prepare display
If ANM=True
Hide
F=Frame Play(10,1,SCR_ANIM)
Colour Back Colour(0)
Trap Double Buffer
If Errtrap : Proc _GEST_ERR : End If
Wait Vbl
Else
REDRAW=True
Dialog Open 2,1
D=Dialog Run(2,10)
Set Slider 2,2,2,0,4,4,4,0
_EXTRACT_PATH[S$]
A$=Resource$(14)+(S$-Param$)
Cls 6,SCSX/2-216,112 To SCSX/2+216,124
Ink 3 : Text SCSX/2-Len(A$)*4,120,A$
HSX1=SCSX/2-240+32+10 : HSY1=67+6
HSX2=SCSX/2+240-32-10 : HSY2=SCSY/2+60-40-6
End If
' start compilation
E$="" : FR=0 : BRK=0
Clear Key
COM$='FROM "'+S$+'" TO "'+D$+'" '+C$
Timer=0
A$="Gaga" : MAGIC=Leek(Varptr(A$))
Extension_5_006E "Conf",Start(_CONFBK)
Extension_5_006E COM$,MAGIC
STATUS=Param
' Compilation main loop
'*** Monitor
While STATUS
If ANM=True
Repeat
Inc FR
F=Frame Play(F,1)
Screen Swap : Wait Vbl
Until FR=STATUS
Else
Hslider HSX1,HSY1 To HSX2,HSY2,COMP_STP,0,STATUS
End If
K$=Inkey$
Exit If K$=Chr$(27)
Multi Wait
Extension_5_006E "Cont",MAGIC
STATUS=Param
Wend
If K$=Chr$(27)
Extension_5_006E "Stop",MAGIC
COMP_ERR$=Resource$(111)
SIZE=0 : NBINST=0
Else
COMP_ERR$= Extension_5_0078
SIZE= Extension_5_00BE
NBINST= Extension_5_00BE
End If
CERR=COMP_ERR$<>""
REQ=1 : If SRCE=2 : REQ=0 : End If
If Exist(TEMP_SRCE$) : Trap Kill TEMP_SRCE$ : End If
If CERR
REQ=1
If SRCE=2 : REQ=2 : End If
If SRCE=0 : REQ=3 : End If
Else
If TYPE<3
_GETFLAG[27] : SQ=Param
If SQ : REQ=0 : End If
End If
End If
' result report
SX=SCSX : SY=72-(REQ<>0)*24
If ANM=True
_OPEN_FREE_SCREEN[SX,SY]
SCR_2=Param
If SCR_2=-1
Trap Screen Close SCR_ANIM
_OPEN_FREE_SCREEN[SX,SY]
SCR_2=Param
If SCR_2=-1
ANM=False
Trap Screen Show 9
Screen SCR : Colour Back Colour(0)
Screen Show SCR
SX=Max(416,Len(COMP_ERR$)*8+24)
End If
End If
Screen Display SCR_2,SCX,180,,
Screen To Front SCR_2 : Show
Else
Trap Dialog Close 2
SX=Max(416,Len(COMP_ERR$)*8+24)
End If
_EXTRACT_PATH[DD$] : A$=Mid$(DD$,Len(Param$)+1)
_END_COMPILE[SX,SY,SIZE,NBINST,Timer,A$,COMP_ERR$,REQ]
BRK=Param
If REQ=3 and BRK=2
If SIZE<0
Call Editor Equ("AEd_GotoLine"),NBINST
Call Editor Equ("AEd_StartLine")
End If
_QUIT[0]
End If
' squash the prog?
If SQ and CERR=0
_SQUASH_A_PROG[D$,SIZE]
End If
If DEST=0 and CERR=0
Call Editor Equ("AEd_OpenLoad"),1,D$
Trap Kill D$
If Param$="" : Call Editor Equ("AEd_Rename"),0,DD$ : End If
End If
If ANM=True Then Trap Screen Close SCR_2
' List of Progs Looping?
Exit If SRCE<>2 or BRK=2
Inc NL : S$=LST$(NL)
If S$="" Then Exit
If TYPE<>3
D$=Left$(S$,Len(S$)-5)
Else
D$=Left$(S$,Len(S$)-5)+"_C.AMOS"
End If
SS$=S$ : DD$=D$
F=FF
Loop
_FINISH_COMPILE:
_GETFLAG[35] : If Param Then _STOP_SND
If ANM=True
Trap Screen Close SCR_ANIM
Trap Screen Close SCR_2
End If
Trap Screen Show 9
Screen SCR : Colour Back Colour(0)
If REDRAW=True Then _INIT_DISPLAY Else Trap Dialog Unfreeze 1
Screen Show SCR
If QQ : _QUIT[0] : End If
End Proc
Procedure _COPY_RAMLIBS
_GETFLAG[24]
If Param
If Exist("Ram:")
If DPATH$<>PRAM$
Dim F$(64)
On Error Proc _GEST_ERR
Resume Label _NORAM
Trap Dialog Freeze 1
Dialog Open 2,1
Vdialog$(2,0)=Resource$(40)
Trap D=Dialog Run(2,15)
If Errtrap=0
Set Slider 2,2,2,0,4,4,4,0
SX=336
HSX1=(SCSX-SX)/2+32+2 : HSY1=(SCSY-72)/2+33
HSX2=(SCSX+SX)/2-32-19 : HSY2=(SCSY-72)/2+44
Hslider HSX1,HSY1 To HSX2,HSY2,10,0,0
End If
F$(0)="AMOSPro.Lib"
F$(1)="Compiler.Lib"
F$(2)="Def_Compiled.info"
F$(3)="AMOSPro_Default_Resource.Abk"
F$(4)="Header_AMOS.AMOS"
F$(5)="Header_CLI.Lib"
F$(6)="Header_Backstart.Lib"
F$(7)="AMOSPro_Editor_Config"
NCOP=7
If Prg State=-1
Inc NCOP
F$(NCOP)="APCmp"
End If
If Length(16)=0
Inc NCOP
F$(NCOP)="AMOSPro_Compiler_Resource.Abk"
End If
_GETFLAG[37]
If Param
Inc NCOP
F$(NCOP)="AMOSPro_CompilerA_Resource.Abk"
End If
R=-16
Repeat
If Resource$(R)<>""
Inc NCOP
A$=Resource$(R)
S=Instr(A$," ") : If S : A$=Left$(A$,S-1) : End If
F$(NCOP)=A$
End If
Dec R
Until R<-26
Set Dir ,""
Trap Open In 1,DPATH$+F$(0)
If Errtrap
_NOINFO
_WARN[F$(I)+Resource$(41),0]
_WARN[Resource$(42),0]
Goto _NORAM
End If
Close 1
For I=0 To NCOP
If Exist(DPATH$+F$(I))
Open In 1,DPATH$+F$(I)
TL=TL+Lof(1)
Close 1
End If
Next I
If Chip Free+Fast Free<TL+110*1024
_NOINFO
_WARN[Resource$(43),0]
Goto _NORAM
End If
Trap Mkdir Left$(PRAM$,Len(PRAM$)+(Right$(PRAM$,1)="/"))
For I=0 To NCOP
A$=DPATH$+F$(I) : B$=PRAM$+F$(I)
If Not Exist(B$)
_FCOPY[A$,B$]
End If
If HSX1 : Hslider HSX1,HSY1 To HSX2,HSY2,NCOP,0,I : End If
Next I
_FCOPY[CNAME$,PRAM$+"AMOSPro_Compiler_config"]
F=-1
_NORAM:
_NOINFO
Set Dir ,".info/*.info/*.*.info"
If F
PATH$=DPATH$
Open Out 1,PRAM$+"Compiler_Origin"
Print #1,PATH$
Print #1,CNAME$
Close
DPATH$=PRAM$
End If
End If
End If
End If
End Proc
Procedure _DEL_RAMLIBS
On Error Goto _ERR
Dim F$(64)
Set Dir 32,""
If Upper$(Left$(PRAM$,4))="RAM:"
_INFO[Resource$(44)]
_WAIT[10]
A$=Dir First$(PRAM$+"**")
I=0
While A$<>""
F$(N)=Left$(A$,32)-" " : Inc N
A$=Dir Next$
Wend
If N>0
For I=0 To N-1
Trap Kill PRAM$+F$(I)
Next I
End If
Trap Kill PRAM$
_END: _NOINFO : Pop Proc
End If
_ERR: Resume _END
End Proc
Procedure _EDIT_LIST
On Error Proc _GEST_ERR
Resume Label _FINISH_EDLIST
Dim LST2$(NLST)
Trap Dialog Close 1
NL=0
While LST$(NL)<>"" and NL<NLST
_EXTRACT_PATH[LST$(NL)] : PAT$=Param$
LST2$(NL)=Left$(" "+LST$(NL)-PAT$,30)
Inc NL
Wend
Dialog Open 1,1
Vdialog(1,0)=Array(LST2$(0))
Vdialog(1,1)=NL
POSL=-1
D=Dialog Run(1,11)
Dialog Update 1,8,,NLST+1,NL
Do
D=Dialog(1)
Multi Wait
If D
Exit If D=2 or D=1
If D=3
If NL<NLST
F$=Fsel$(PAT$+"*.AMOS","",Resource$(27))
If F$<>""
If Exist(F$)
_MATCH[F$]
If Param=False
LST$(NL)=F$
_EXTRACT_PATH[F$] : PAT$=Param$
LST2$(NL)=Left$(" "+LST$(NL)-PAT$,30)
Inc NL
Dialog Update 1,8,,NLST+1,NL
If(Rdialog(1,7)<NL-12 or Rdialog(1,7)>=NL) and NL>=12
Dialog Update 1,7,NL-12,,NL
Else
Dialog Update 1,7,0,,NL
End If
Else
_WARN[Err$(79),0]
End If
Else
_WARN[Err$(81),0]
End If
End If
Else
_WARN[Resource$(31),0]
End If
Else If D=4
If NL<NLST
F$=Fsel$(PAT$+"*.AMOS","",Resource$(28),Resource$(29))
If F$<>""
If Exist(F$)
_EXTRACT_PATH[F$] : PAT$=Param$
F$=Dir First$(PAT$+"*.AMOS")
While F$<>""
If NL<NLST
If Left$(F$,1)<>"*"
_STRING_FILTER[F$] : F$=PAT$+Param$
_MATCH[F$]
If Param=False
LST$(NL)=F$
LST2$(NL)=Left$(" "+LST$(NL)-PAT$,30)
Inc NL
End If
End If
F$=Dir Next$
Else
_WARN[Resource$(31),0]
Exit
End If
Wend
POSL=-1
Dialog Update 1,8,,NLST+1,NL
If(Rdialog(1,7)<NL-12 or Rdialog(1,7)>=NL) and NL>=12
Dialog Update 1,7,NL-12,,NL
Else
Dialog Update 1,7,0,,NL
End If
Else
_WARN[Err$(81),0]
End If
End If
Else
_WARN[Resource$(31),0]
End If
Else If D=5
If NL>0
If POSL>=0
For I=POSL To NL-1
LST$(I)=LST$(I+1)
LST2$(I)=LST2$(I+1)
Next I
LST$(NL)="" : LST2$(NL)=""
Dec NL
If POSL>=NL : POSL=NL-1 : End If
Dialog Update 1,7,0,,NL
Dialog Update 1,8,,POSL,NL
End If
End If
Else If D=6
If NL>0
_WARN[Resource$(32),1]
If Param=True
For I=0 To NL
LST$(I)=""
LST2$(I)=""
Next I
NL=0
Dialog Update 1,7,0,,NL
Dialog Update 1,8,,NLST+1,NL
End If
End If
Else If D=8
POSL=Rdialog(1,8)
If POSL>=NL
Dialog Update 1,8,,NLST+1,NL
End If
Else If D=15
_HELP["_DATAS_EDITLIST"]
End If
End If
Loop
_FINISH_EDLIST:
_NOINFO
Dialog Close 1
End Proc[(D=2)]
Procedure _END_COMPILE[W,H,SZ,NBI,T,D$,E$,REQUESTER]
Dialog Open 2,1
X=Free
Vdialog(2,0)=W
Vdialog(2,1)=H
Vdialog(2,2)=REQUESTER
If E$=""
Vdialog$(2,3)=Resource$(110)
T=T/50 : M=T/60 : S=T mod 60
Vdialog$(2,4)=D$
Vdialog$(2,5)=Resource$(121)+" "+Str$(SZ)+" "+Resource$(12)+" -"+Str$(NBI)+" "+Resource$(122)
A$=Resource$(120)+" "
If M>0 : A$=A$+Str$(M)+" minutes," : End If
A$=A$+Str$(S)+" seconds."
Vdialog$(2,6)=A$
Else
Vdialog$(2,3)=Resource$(112)
Vdialog$(2,4)=D$
Vdialog$(2,5)=E$
Vdialog$(2,6)=""
End If
' bell warning!
_GETFLAG[36]
If Param
If Length(3)
T$=Peek$(Start(3)-8,8)
If T$="Music " or T$="Samples "
Play 3,70,0
End If
Else
Play 3,70,0
End If
End If
D=Dialog Run(2,12)
Screen Show
Timer=0
Do
D=Dialog(2)
Multi Wait
Exit If REQUESTER=1 and D=1
Exit If REQUESTER>=2 and D>=1
Exit If REQUESTER=0 and(Timer>250 or Mouse Click)
Loop
Dialog Close 2
End Proc[D]
Procedure _EXTRACT_PATH[A$]
If A$<>""
I=Len(A$)+1
Repeat
Dec I : B$=Mid$(A$,I,1)
Until B$="/" or B$=":" or I=1
If I>1
A$=Left$(A$,I)
Else
A$=""
End If
End If
End Proc[A$]
Procedure _FCOPY[S$,D$]
On Error Goto _ERR
Open In 1,S$
Open Out 2,D$
LF=Lof(1)
Do
Exit If P>=LF
L=Min(1024,LF-P)
A$=Input$(1,L)
Print #2,A$;
Add P,L
Loop
Close
Pop Proc[0]
_ERR: Resume _ER2
_ER2: Trap Kill D$ : Close : Pop Proc[-1]
End Proc
Procedure _GEST_ERR
_WARN[Err$(Errn),0]
Resume Label
End Proc
Procedure _GEST_ERR2
For I=0 To 7
If SOPEN(I) : Screen Close I : End If
Next I
Auto View On
Screen Open 0,640,24,2,Hires
Screen Display 0,,100,,
Amos To Front
Palette 0,$FFF : Curs Off
If Errn=0 Then A$=ER$ Else A$=Err$(Errn)
Centre ">> "+A$+" <<"
Print : Print : Centre "Press any key"
Wait Key
Screen Close 0
Edit
End Proc
Procedure _GETFLAG[N]
End Proc[Asc(Mid$(FLAG$,N,1))-48]
Procedure _HELP[H$]
If Chip Free>60000 and(Chip Free+Fast Free)>150000
Restore H$
Read NH
Dim HLP$(NH)
For I=0 To NH-1 : Read HLP$(I) : Next I
Dialog Freeze 1
Do
Channel 0 To Sprite 0
Channel 1 To Sprite 0
Amal 0,"L A=1; Loop: L X=XM; L Y=YM; Pause; Jump Loop;"
Amal 1,"Anim 0,(1,3)(2,3)(3,3)(4,3)(3,3)(2,3); "
Hide : Amal On 0
HLP$=""
Do
Multi Wait
ZDIAL=Zdialog(1,X Screen(X Mouse),Y Screen(Y Mouse))
If ZDIAL<=NH and ZDIAL>=0
If HLP$(ZDIAL)<>""
If HLP$<>HLP$(ZDIAL)
Amal On 1
HLP$=HLP$(ZDIAL)
End If
End If
Else
Amal Freeze 1
Sprite 0,X Mouse,Y Mouse,1
HLP$=""
End If
If Mouse Click=1
If ZDIAL=15
Dialog Update 1,15,0
Repeat : Multi Wait : Until Mouse Key=0
Dialog Unfreeze 1
Exit 2
Else
If HLP$<>""
Amal Off : Sprite Off : Show On
If Prg State<0
P1$="AMOSPro_Accessories:AMOSPro_Help/AMOSPro_Help"
P2$="AMOSPro_Extras:Compiler_Help/AMOSPro_Help"
Else
P1$="AMOSPro_Accessories:AMOSPro_Help/AMOSPro_Help.AMOS"
P2$="AMOSPro_Extras:Compiler_Help/AMOSPro_Help.AMOS"
End If
H$="AMOSPro_Extras:Compiler_Help/Compiler_Help"
If Exist(P1$) : P$=P1$ Else P$=P2$ : End If
Command Line$="-f"+H$+" "+HLP$
Trap Prun P$
If Errtrap or Param
_WARN[Resource$(79),0]
Exit 2
End If
Exit
End If
End If
End If
Loop
Loop
Else
_WARN[Resource$(78),0]
End If
Dialog Update 1,15,0
Amal Off : Show
_DATAS_MAIN:
Data 7
Data "UseShell"
Data "Main_Escape"
Data "Main_Source"
Data "Main_Dest"
Data "Main_Type"
Data "GoMain_Setup"
Data "Main_Compile"
_DATAS_EDITLIST:
Data 9
Data "EditList"
Data "Cancel"
Data "Ok"
Data "EdList_AddPrg"
Data "EdList_AddDir"
Data "EdList_DelPrg"
Data "EdList_DelAll"
Data "EdList_Window"
Data "EdList_Window"
_DATAS_SETUP:
Data 9
Data "Main_setup"
Data "Cancel"
Data "Ok"
Data "GoSetUp1"
Data "GoSetUp2"
Data "GoSetUp3"
Data "SetUp_LoadConfig"
Data "SetUp_SaveDefault"
Data "SetUp_SaveConfig"
_DATAS_SETUP1_1:
Data 9
Data "Setup1"
Data "Cancel"
Data "Ok"
Data "SUp1_errmess"
Data "SUp1_defscr"
Data "SUp1_backboot"
Data "SUp1_CLIrun"
Data ""
Data "NextPanel"
_DATAS_SETUP1_2:
Data 5
Data "Setup1"
Data "PrevPanel"
Data ""
Data "SUp1_LongJump"
Data "SUp1_AMOSlib"
_DATAS_SETUP2_1:
Data 9
Data "Setup2"
Data "Cancel"
Data "Ok"
Data "SUp2_copylib"
Data "SUp2_leavelib"
Data "SUp2_APcmpram"
Data "SUp2_squash"
Data ""
Data "NextPanel"
_DATAS_SETUP2_2:
Data 10
Data "Setup2"
Data "Cancel"
Data "Ok"
Data "SUp2_iffanim"
Data "SUp2_tracker"
Data "SUp2_warnbell"
Data "SUp2_animbutt"
Data ""
Data ""
Data "NextPanel"
_DATAS_SETUP3:
Data 7
Data "Setup3"
Data "Cancel"
Data "Ok"
Data "SUp3_defcom"
Data "SUp3_gosysfile"
Data "SUp3_gocmpmess"
Data "SUp3_gocmperr"
_DATAS_SETUP3_1:
Data 5
Data "SUp3_sysfile"
Data "Cancel"
Data "Ok"
Data "SUp3_sysfile"
Data "SUp3_sysfile"
_DATAS_SETUP3_2:
Data 5
Data "SUp3_cmpmess"
Data "Cancel"
Data "Ok"
Data "SUp3_cmpmess"
Data "SUp3_cmpmess"
_DATAS_SETUP3_3:
Data 5
Data "SUp3_cmperr"
Data "Cancel"
Data "Ok"
Data "SUp3_cmperr"
Data "SUp3_cmperr"
End Proc
Procedure _ICONS_ANIMATE
MZ=Mouse Zone
If MZ<>MZ_OLD and IC<>IC_OLD
If IC_OLD>0 and MZ_OLD>0
Resource Unpack 45+IC_OLD,XZ(MZ_OLD)+XO,YZ(MZ_OLD)+YO
End If
MZ_OLD=MZ : IC_OLD=IC
End If
If MZ
Inc TIME
If TIME=TIMING
TIME=0
If MZ=1
IC=10
XO=0 : YO=0
Else If MZ=5
IC=8
XO=16 : YO=4
Else If MZ=6
IC=9
XO=120 : YO=4
Else If MZ>=2
IC=Vdialog(1,50+MZ-1)
XO=48 : YO=4
End If
If ANM_IC_T(IC)=0
Add ZAP,1,1 To 5
Else
Add ZAP,VZAP
If ZAP=0
ZAP=1
VZAP=1
Else If ZAP=6
ZAP=5
VZAP=-1
End If
End If
Resource Bank 15
Resource Unpack IC*5+ZAP,XZ(MZ)+XO,YZ(MZ)+YO
Resource Bank 16
IC_OLD=IC : MZ_OLD=MZ
End If
Else
IC=0
End If
End Proc
Procedure _INFO[A$]
Trap Dialog Freeze 1
Trap Dialog Close 2
Dialog Open 2,1
Vdialog$(2,0)=A$
Trap D=Dialog Run(2,14)
End Proc[Errtrap]
Procedure _INIT_DISPLAY
_INIT_WORK
FRE_OLD=-1 : _CHECKMEM
Trap Vdialog$(1,99)=FRE$
Trap D=Dialog Run(1,0)
_UPDATE_BUTTONS[0]
End Proc
Procedure _INIT_MAIN_SCREEN
If Prg Under=1
For S=0 To 7
Trap Screen Close S
Next
Set Sprite Buffer 40
End If
ADAT=Leek(Dreg(3))
If ADAT Then SCSX=Deek(ADAT) : SCX=Deek(ADAT+4) : SCY=Deek(ADAT+6)+16
If SCSX<640 Then SCSX=640 : SCX=128 : SCY=68
SCSY=160
Auto View Off : SCR=-1
_OPEN_FREE_SCREEN[SCSX,SCSY]
SCR=Param
If SCR<0 Then ER$=Resource$(85)+Resource$(83) : _GEST_ERR2
End Proc
Procedure _INIT_WORK
Trap Dialog Close 1
Dialog Open 1,1,99,1024*8
For I=1 To Len(FLAG$)
_GETFLAG[I]
Vdialog(1,I)=Param
Next I
_GETFLAG[1] : Vdialog(1,51)=Param
_GETFLAG[2] : Vdialog(1,52)=Param+3
_GETFLAG[3] : Vdialog(1,53)=Param+5
End Proc[Errtrap]
Procedure _INIT_ZONES
NZ=6
VA0=((SCSX-640)/16)*8
' Set up zones
Restore DAT0
Reserve Zone NZ
For Z=1 To NZ
Read XZ(Z),YZ(Z),A,B : Set Zone Z,XZ(Z),YZ(Z) To XZ(Z)+A,YZ(Z)+B
Next
DAT0:
Data 0,0,40,16
Data 16+VA0,68,200,24
Data 240+VA0,68,200,24
Data 464+VA0,68,160,24
Data 24+VA0,120,184,24
Data SCSX-384-VA0-24,120,384,24
Restore DAT1
For I=0 To 10
Read ANM_IC_T(I)
Next I
DAT1:
Data 0,1,0,0,1,1,1,1,1,1,1,1
End Proc
Procedure _LOAD_APCMP
If Not Extension_5_00AE
_INFO[Resource$(25)]
Repeat
Trap Extension_5_0098 DPATH$+"APCmp"
If Errtrap
Trap Extension_5_0098 PATH$+"APCmp"
If Errtrap
_WAIT[10]
_NOINFO
_WARN[Resource$(80),0]
F$=Fsel$("","",Resource$(82))
If Exist(Dir$+"APCmp")
DPATH$=Dir$
Else
ER$=Resource$(81) : _GEST_ERR2
End If
End If
End If
_NOINFO
Until Extension_5_00AE
End If
End Proc
Procedure _LOAD_BANKS[A]
If A
Timer=0
_GETFLAG[37] : FF=Param
_GETFLAG[34] : FF=Param or FF
_GETFLAG[35] : FF=Param or FF
If FF : _INFO[Resource$(24)] : End If
If A and 1
_GETFLAG[37] : Rem animated buttons
If Param
If Length(15)=0
Trap Load DPATH$+"AMOSPro_CompilerA_resource.Abk",15
If Errtrap
If DPATH$=PRAM$
Trap Load PATH$+"AMOSPro_CompilerA_resource.Abk",15
If Errtrap
_INFO[Resource$(70)] : _WAIT[50]
_SETFLAG[37,0] : Erase 15
Else
Save PRAM$+"AMOSPro_CompilerA_resource.Abk",15
End If
Else
_INFO[Resource$(70)] : _WAIT[50]
_SETFLAG[37,0] : Erase 15
End If
End If
End If
Else
Erase 15
End If
End If
If A and 2
_GETFLAG[34] : Rem iff animation
Erase 10
If Param
E$=""
Trap Open In 1,ANM$
If Errtrap=0
L=Frame Length(1)
Trap Reserve As Work 10,L
If Errtrap=0
Trap ANM_NF=Frame Load(1 To 10,100)-3
If Errtrap
E$=Resource$(85)+Resource$(71)
End If
Else
E$=Resource$(85)+Resource$(71)
End If
Else
E$=Resource$(71)
End If
Trap Close 1
If E$<>""
Erase 10
_INFO[E$] : _WAIT[50]
_SETFLAG[34,0]
End If
End If
End If
If A and 4
_GETFLAG[35] : Rem Soundtrack
Erase 3
If Param
If Length(3)=0
Trap Load SND$,3
If Errtrap
Trap Med Load SND$,3
If Errtrap
If Errtrap<>188
Trap Track Load SND$,3
End If
If Errtrap
_INFO[Resource$(72)] : _WAIT[50]
_SETFLAG[35,0] : Erase 3
End If
End If
End If
End If
End If
End If
If FF
Repeat : Multi Wait : Until Timer>50
_NOINFO
End If
End If
End Proc
Procedure _LOW_RAM
C=Chip Free : F=Fast Free
If Chip Free<64*1024
RAM$="64 K free chip"
Else If(Chip Free+Fast Free)<160*1024
RAM$="160 K free ram"
End If
If RAM$<>""
ER$="Sorry, AMOSPro-Compiler Shell needs at least "+RAM$+" to run."
_GEST_ERR2
End If
End Proc
Procedure _MATCH[A$]
A=0 : F=False
Repeat
If A$=LST$(A) Then F=True : Exit
Inc A
Until LST$(A)=""
End Proc[F]
Procedure _NOINFO
Trap Dialog Close 2
Trap Dialog Unfreeze 1
End Proc
Procedure _OPEN_FREE_SCREEN[SX,SY]
On Error Goto _ERROR
For S=0 To 7
Trap Screen S
If Errtrap
Resource Screen Open S,SX,SY,0 : Screen Hide S
Cls 0 : Paper 6 : Pen 7 : Flash Off
Wait Vbl
SOPEN(S)=True
Pop Proc[S]
End If
Next
_ERROR:
End Proc[-1]
Procedure _PLAY_SND
On Error Proc _GEST_ERR
Resume Label _NO_SOUND
If Length(3)
T$=Peek$(Start(3)-8,8)
If T$="Music "
Trap Music 1
Else If T$="Tracker "
Track Loop On
Trap Track Play 3
Else If T$="Med "
Trap Med Play 3
Else If T$="Samples "
Sam Bank 3
Sam Loop On
Trap Sam Play 12,1
End If
End If
Pop Proc
_NO_SOUND:
Trap Music Off
Trap Sam Stop
Trap Track Stop
Trap Med Stop
End Proc
Procedure _QUIT[REQ]
If REQ
If CHANGE
_WARN[Resource$(20),1]
If Param=False
Pop Proc
End If
End If
End If
If Exist(TEMP_SRCE$) : Trap Kill TEMP_SRCE$ : End If
If Exist(TEMP_DEST$) : Trap Kill TEMP_DEST$ : End If
_GETFLAG[26]
If Param=0 Then Extension_5_00A0
If DPATH$=PRAM$
_GETFLAG[25]
If Param=0
_DEL_RAMLIBS
End If
End If
Trap Dialog Close
Trap Close
_SCREEN_CLOSE[SCR,SCSY]
For S=0 To 7
If SOPEN(S) : Trap Screen Close S : End If
Next S
Colour Back 0
Trap Screen Show 9
For I=2 To 15 : Trap Erase I : Next I
Trap Erase 65000
Edit
End Proc
Procedure _SCREEN_OPEN[S,SY,OFF_X,OFF_Y]
Amos To Front
Trap Screen S
If Errtrap=0
Screen Show S : Auto View On
For I=1 To SY Step SOP
Screen Display S,OFF_X,OFF_Y,,I
Wait Vbl
Next I
Screen Display S,OFF_X,OFF_Y,,SY
End If
End Proc[Errtrap]
Procedure _SCREEN_CLOSE[S,SY]
Trap Screen S
If Errtrap=0
For I=1 To SY Step SOP
Screen Offset S,,I
Screen Display S,,,,SY-I
Wait Vbl
Next I
End If
End Proc[Errtrap]
Procedure _SETFLAG[N,V]
Mid$(FLAG$,N,1)=Chr$(48+V)
End Proc
Procedure _SETUP[SETUP_DIRECT]
On Error Proc _GEST_ERR
Resume Label _FINISH_SETUP
Dim L$(80)
Trap Dialog Close 1
FLAG_OLD$=FLAG$
ANM_OLD$=ANM$
SND_OLD$=SND$
Dialog Open 1,1,60,1024*12
Do
For I=4 To Len(FLAG$)
_GETFLAG[I]
Vdialog(1,I)=Param
Next I
Do
D1=Dialog Run(1,1)
Do
Multi Wait
D1=Dialog(1)
If D1=1
FLAG$=FLAG_OLD$
ANM$=ANM_OLD$
SND$=SND_OLD$
Exit 3
Else If D1=2 and SETUP_DIRECT=0
A=0
If Vdialog(1,37)<>Asc(Mid$(FLAG_OLD$,37,1))-48 : A=1 : End If
If Vdialog(1,34)<>Asc(Mid$(FLAG_OLD$,34,1))-48 or ANM$<>ANM_OLD$ : A=A+2 : End If
If Vdialog(1,35)<>Asc(Mid$(FLAG_OLD$,35,1))-48 or SND$<>SND_OLD$ : A=A+4 : End If
_CONFIG_SET[72,FLAG$]
_CONFIG_SET[73,ANM$]
_CONFIG_SET[74,SND$]
If DPATH$=PRAM$
_GETFLAG[24]
If Param=0
_DEL_RAMLIBS
DPATH$=PATH$
End If
Else
_COPY_RAMLIBS
End If
_LOAD_BANKS[A]
Exit 3
Else If D1=3
' Compiled prog setup 1
FLAG_OLD2$=FLAG$
Wait Vbl
D2=Dialog Run(1,2)
Do
Multi Wait
D2=Dialog(1)
If D2=1
FLAG$=FLAG_OLD2$
Exit 3
Else If D2=2
Exit 3
Else If D2=15
_HELP["_DATAS_SETUP1_1"]
Else If D2>=3 and D2<8
D=D2+1
Vdialog(1,D)=Abs(Vdialog(1,D)-1)
_SETFLAG[D,Vdialog(1,D)]
Else If D2=8
' Compiled prog setup 2
D3=Dialog Run(1,3)
Do
Multi Wait
D3=Dialog(1)
If D3=1
FLAG$=FLAG_OLD2$
Exit 4
Else If D3=2
Exit 4
Else If D3=8
Exit
Else If D3=15
_HELP["_DATAS_SETUP1_2"]
Else If D3>=3
D=D3+11
Vdialog(1,D)=Abs(Vdialog(1,D)-1)
_SETFLAG[D,Vdialog(1,D)]
End If
Loop
D2=Dialog Run(1,2)
End If
Loop
Else If D1=4
' Compiler setup 1
FLAG_OLD2$=FLAG$
ANM_OLD2$=ANM$
SND_OLD2$=SND$
Wait Vbl
D2=Dialog Run(1,4)
Do
Multi Wait
D2=Dialog(1)
If D2=1
FLAG$=FLAG_OLD2$
ANM$=ANM_OLD2$
SND$=SND_OLD2$
Exit 3
Else If D2=2
Exit 3
Else If D2=15
_HELP["_DATAS_SETUP2_1"]
Else If D2>=3 and D2<8
D=D2+21
Vdialog(1,D)=Abs(Vdialog(1,D)-1)
_SETFLAG[D,Vdialog(1,D)]
Else If D2=8
' Compiler setup 2
D3=Dialog Run(1,5)
LMAX=(SCSX-Vdialog(1,0)*2-88)/8
Ink 5 : Text Vdialog(1,0)+24,Vdialog(1,1)+51,Left$(ANM$,LMAX)
Text Vdialog(1,0)+24,Vdialog(1,1)+75,Left$(SND$,LMAX)
Do
Multi Wait
D3=Dialog(1)
If D3=1
FLAG$=FLAG_OLD2$
ANM$=ANM_OLD2$
SND$=SND_OLD2$
Exit 4
Else If D3=2
Exit 4
Else If D3=9
Exit
Else If D3=7
If Vdialog(1,3+31)
_EXTRACT_PATH[ANM$]
A$=Fsel$(Param$,ANM$-Param$,Resource$(2))
If A$<>""
ANM$=A$
Cls 6,Vdialog(1,0)+24,Vdialog(1,1)+45 To Vdialog(1,0)+24+LMAX*8,Vdialog(1,1)+53
Ink 5 : Text Vdialog(1,0)+24,Vdialog(1,1)+51,Left$(ANM$,LMAX)
End If
End If
Else If D3=8
If Vdialog(1,4+31)
_EXTRACT_PATH[SND$]
A$=Fsel$(Param$,SND$-Param$,Resource$(2))
If A$<>""
SND$=A$
Cls 6,Vdialog(1,0)+24,Vdialog(1,1)+69 To Vdialog(1,0)+24+LMAX*8,Vdialog(1,1)+77
Ink 5 : Text Vdialog(1,0)+24,Vdialog(1,1)+75,Left$(SND$,LMAX)
End If
End If
Else If D3=15
_HELP["_DATAS_SETUP2_2"]
Else If D3>=3
D=D3+31
Vdialog(1,D)=Abs(Vdialog(1,D)-1)
_SETFLAG[D,Vdialog(1,D)]
End If
Loop
D2=Dialog Run(1,4)
End If
Loop
Else If D1=5
' System set-up
FLAG_OLD2$=FLAG$
Do
Wait Vbl
D2=Dialog Run(1,6)
Do
Multi Wait
D2=Dialog(1)
If D2=1
FLAG$=FLAG_OLD2$
Exit 4
Else If D2=2
Exit 4
Else If D2=15
_HELP["_DATAS_SETUP3"]
Else If D2=3
Dialog Freeze 1
Dialog Open 2,1
_CONFIG_GET[0]
Vdialog$(2,1)=Param$
Vdialog$(2,0)=Resource$(181)
D3=Dialog Run(2,8)
Do
Multi Wait
D3=Dialog(2)
If D3=1
Dialog Close 2
Exit 2
Else If D3=2
_CONFIG_SET[0,Rdialog$(2,3)]
Dialog Close 2
Exit 2
End If
Loop
Else If D2>=4 and D2<=6
If D2=4
CF=1
For I=1 To 14
_CONFIG_GET[I]
L$(I-CF)=Param$
Next I
Vdialog$(1,0)=Resource$(182)
Vdialog(1,2)=Array(L$(0))
Vdialog(1,1)=14
H$="_DATAS_SETUP3_1"
Else If D2=5
CF=15
For I=15 To 39
_CONFIG_GET[I]
L$(I-CF)=Param$
Next I
Vdialog$(1,0)=Resource$(183)
Vdialog(1,2)=Array(L$(0))
Vdialog(1,1)=24
H$="_DATAS_SETUP3_2"
Else
CF=40
For I=40 To 71
_CONFIG_GET[I]
L$(I-CF)=Param$
Next I
Vdialog$(1,0)=Resource$(184)
Vdialog(1,2)=Array(L$(0))
Vdialog(1,1)=32
CF=40
H$="_DATAS_SETUP3_3"
End If
Vdialog(1,3)=0
Vdialog(1,4)=0
Do
D3=Dialog Run(1,7)
Do
Multi Wait
D3=Dialog(1)
If D3=1
Exit 3
Else If D3=2
Exit 3
Else If D3=4
L=Rdialog(1,4)
Dialog Freeze 1
Dialog Open 2,1
Vdialog$(2,1)=L$(L)
Vdialog$(2,0)=Resource$(185)+Str$(L+1)
D4=Dialog Run(2,8)
Do
Multi Wait
D4=Dialog(2)
If D4=1
Dialog Close 2
Exit 2
Else If D4=2
L$(L)=Rdialog$(2,3)
_CONFIG_SET[CF+L,L$(L)]
Dialog Close 2
Exit 2
End If
Loop
Else If D3=15
_HELP[H$]
End If
Loop
Loop
End If
Loop
Loop
Else If D1=6
' Load config
F$=Fsel$(Dir$+"**","",Resource$(22))
If F$<>""
_CONFIG_LOAD[F$]
_CONFIG_GET[72]
FL$=Param$
If Len(FL$)<43
_INFO[Resource$(77)]
_CONFIG_SET[72,FLAG$]
_CONFIG_SET[73,ANM$]
_CONFIG_SET[74,SND$]
_WAIT[50] : _NOINFO
End If
_CONFIG_GET[73] : ANM$=Param$
_CONFIG_GET[74] : SND$=Param$
End If
Else If D1=7 or(D1=2 and SETUP_DIRECT)
' Save default
If CNAME$="" : CNAME$=Fsel$(Dir$+"**","",Resource$(22)) : End If
If CNAME$<>""
A=0
If Vdialog(1,37)<>Asc(Mid$(FLAG_OLD$,37,1))-48 : A=1 : End If
If Vdialog(1,34)<>Asc(Mid$(FLAG_OLD$,34,1))-48 or ANM$<>ANM_OLD$ : A=A+2 : End If
If Vdialog(1,35)<>Asc(Mid$(FLAG_OLD$,35,1))-48 or SND$<>SND_OLD$ : A=A+4 : End If
_CONFIG_SET[72,FLAG$]
_CONFIG_SET[73,ANM$]
_CONFIG_SET[74,SND$]
_CONFIG_SAVE[CNAME$]
If Param=0
If DPATH$=PRAM$
_CONFIG_SAVE[PRAM$+"AMOSPro_Compiler_Config"]
_GETFLAG[24]
If Param=0
_DEL_RAMLIBS
DPATH$=PATH$
End If
Else
_COPY_RAMLIBS
End If
_LOAD_BANKS[A]
Exit 3
Else
_WARN[Resource$(76),0]
End If
End If
Else If D1=8
' save as
F$=Fsel$("**","",Resource$(23))
If F$<>""
_CONFIG_SAVE[F$]
If Param
_WARN[Resource$(76),0]
Else
If DPATH$=PRAM$
_CONFIG_SAVE[PRAM$+"AMOSPro_Compiler_Config"]
End If
End If
End If
Else If D1=15
_HELP["_DATAS_SETUP"]
End If
Loop
Loop
Loop
_FINISH_SETUP:
Trap Dialog Close 1
_INIT_DISPLAY
End Proc
Procedure _SQUASH_A_PROG[S$,SZ]
On Error Proc _GEST_ERR
Resume Label _FINISH_SQUASH
D$=S$+"_Temp"
FIRST=1
_INFO[Resource$(54)]
' Squash Generic Procedure
Trap Open In 1,S$
If Errtrap Then Goto _FINISH_SQUASH
Open Out 2,D$
HEAD1$=Input$(1,12)
NHUNK=Leek(Varptr(HEAD1$)+8)
HEAD2$=Input$(1,4*(2+NHUNK))
Print #2,HEAD1$;
Print #2,HEAD2$;
For H=0 To NHUNK-1
FLAG=True : If FIRST<>0 and H=0 and NHUNK>1 : FLAG=0 : End If
Gosub SQHUNK
Exit If BRK
Loke Varptr(HEAD2$)+4*(2+H),HH
Next
If BRK=0
Pof(2)=12
Print #2,HEAD2$;
LPROG=Lof(2)
Close
Else
Close
Kill D$
LPROG=0
End If
Goto SQEND
Resume Label KK
Kill D$
KK: LPROG=-1
Goto SQEND
SQHUNK:
H$=Input$(1,8) : Pof(1)=Pof(1)-8
HH=Leek(Varptr(H$)) and $C0000000
LP=Leek(Varptr(H$)+4) : HH=HH or LP : Rol.l 2,LP
Add LP,8+4
F=0
Erase 8 : Reserve As Work 8,LP+16
OLDPOF=Pof(1)
_ONCE_AGAIN:
AP=Start(8) : P=0
Repeat
L=2048 : If P+L>LP : L=LP-P : End If
A$=Input$(1,L)
Copy Varptr(A$),Varptr(A$)+L To AP
Add P,L : Add AP,L
Until P>=LP
AP=Start(8)
If FLAG<>0 and F=0 and LP>256
If Leek(AP)<>$78566467
L= Extension_5_00CE(AP+8,LP-12,-1,512,17)
If L=-1
Pof(1)=OLDPOF : F=-1 : Goto _ONCE_AGAIN
End If
If L=-2 : BRK=-1 : Goto _ABORT : End If
LH=(L+3) and $FFFFFFFC
Copy AP+8,AP+8+LH To AP+8+12
Loke AP+8,$78566467 : Loke AP+12,LP : Loke AP+16,L
Add LH,12 : Loke AP+4,LH/4
HH=(HH and $C0000000) or(LH/4)
Loke AP+8+LH,$3F2
LP=8+LH+4
End If
End If
A$=Space$(2048) : P=0
Repeat
L=2048 : If P+L>LP : L=LP-P : End If
Copy AP,AP+L To Varptr(A$)
Print #2,Left$(A$,L);
Add P,L : Add AP,L
Until P>=LP
_ABORT:
Erase 8
Return
' end
SQEND:
If LPROG>0
A$=Resource$(50)+Str$(LPROG)+","+Str$(SZ-LPROG)+Resource$(51)
_INFO[A$]
Else If LPROG=0
_INFO[Resource$(53)]
Else If LPROG<0
_INFO[Resource$(52)]
End If
Resume Label NOKIL1
Kill S$
NOKIL1:
Resume Label NOKIL2
Rename D$ To S$
NOKIL2:
_WAIT[150]
_FINISH_SQUASH:
_NOINFO
End Proc
Procedure _STOP_SND
On Error Proc _GEST_ERR
Resume Label _END
If Length(3)
T$=Peek$(Start(3)-8,8)
If T$="Music "
Trap Music Off
Else If T$="Tracker "
Trap Track Stop
Else If T$="Med "
Trap Med Stop
Else If T$="Samples "
Trap Sam Stop
End If
End If
_END:
End Proc
Procedure _STRING_FILTER[A$]
A$=Mid$(A$,2,Len(A$)-9)
For I=Len(A$) To 1 Step -1
Exit If Mid$(A$,I,1)<>" "
Next I
A$=Left$(A$,I)
End Proc[A$]
Procedure _UPDATE_BUTTONS[A]
On Error Proc _GEST_ERR2
CHANGE=True
If A=0
If Prg Under<>1
A$="DAT2_"+Right$("0"+(Str$(10*Vdialog(1,51)+Vdialog(1,52))-" "),2)
Trap Restore A$
If Errtrap : Restore DAT2_14 : End If
DAT2_14:
Data 0,2,1,-1
Data 0,0,0,0,4,-1
Data 0,0,0,0,0,6,7,5,-1
DAT2_24:
Data 0,2,1,-1
Data 0,0,0,0,4,-1
Data 0,0,0,0,0,6,7,5,-1
Else
A$="DAT"+Right$("0"+(Str$(10*Vdialog(1,51)+Vdialog(1,52))-" "),2)
Trap Restore A$
If Errtrap : Restore DAT14 : End If
DAT03:
Data 1,2,0,-1
Data 0,0,0,4,3,-1
Data 0,0,0,0,0,5,-1
DAT04:
Data 1,2,0,-1
Data 0,0,0,4,3,-1
Data 0,0,0,0,0,6,7,5,-1
DAT13:
Data 1,2,0,-1
Data 0,0,0,4,3,-1
Data 0,0,0,0,0,5,-1
DAT14:
Data 1,2,0,-1
Data 0,0,0,4,3,-1
Data 0,0,0,0,0,6,7,5,-1
DAT24:
Data 1,2,0,-1
Data 0,0,0,0,4,-1
Data 0,0,0,0,0,6,7,5,-1
End If
For BUTT=2 To 4
I=0
Do
Read VA
Exit If VA<0
Vdialog(1,40+BUTT*10+I)=VA
Inc I
Loop
Next BUTT
Else
If Prg Under<>1
Pop Proc
Else
If A=2
If Vdialog(1,51)<=1
If Vdialog(1,52)=3
Restore DAT20
DAT20:
Data 2
Data 3,0,0,0,4,3,-1
Data 4,0,0,0,0,0,5,-1
Else
Restore DAT21
DAT21:
Data 2
Data 3,0,0,0,4,3,-1
Data 4,0,0,0,0,0,6,7,5,-1
End If
Else
Restore DAT22
DAT22:
Data 2
Data 3,0,0,0,0,4,-1
Data 4,0,0,0,0,0,6,7,5,-1
End If
Else
If A=3
If Vdialog(1,52)=3
Restore DAT30
DAT30:
Data 1
Data 4,0,0,0,0,0,5,-1
Else
Restore DAT31
DAT31:
Data 1
Data 4,0,0,0,0,0,6,7,5,-1
End If
Else
Pop Proc
End If
End If
Read NB_LIST
For J=1 To NB_LIST
FLAG=True
Read BUTT
I=0
Do
Read V
Exit If V<0
VA=V
If VA=Vdialog(1,50+BUTT-1) : FLAG=False : End If
Vdialog(1,40+BUTT*10+I)=VA
Inc I
Loop
If FLAG
Vdialog(1,50+BUTT-1)=VA
_SETFLAG[BUTT-1,Vdialog(1,50+BUTT-1)+5*(BUTT=4)+3*(BUTT=3)]
Dialog Update 1,BUTT
End If
Next J
End If
End If
End Proc
Procedure _WAIT[T]
Clear Key
For I=1 To T
Multi Wait
Exit If Mouse Key or Inkey$<>""
Next I
Repeat
Multi Wait
Until Mouse Key=0
End Proc
Procedure _WARN[A$,REQUESTER]
L=Len(A$)*8
Trap Dialog Open 3,1
If Errtrap=0
Vdialog(3,0)=REQUESTER
Vdialog$(3,1)=A$
Trap D=Dialog Run(3,13)
If Errtrap=0
Trap Dialog Freeze 1
Trap Dialog Freeze 2
If REQUESTER=1
Repeat
Multi Wait
D=Dialog(3)
Until D=1 or D=2
Else
_WAIT[250]
End If
Dialog Close 3
Trap Dialog Unfreeze 1
Trap Dialog Unfreeze 2
Pop Proc[(D=2)]
End If
End If
Trap Dialog Close 3
ER$=Resource$(84)
_GEST_ERR2
End Proc