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:
AMOS Source Code  |  1993-06-19  |  54.3 KB  |  1,990 lines

  1. ' ---------------------------------- 
  2. '
  3. '  AMOSPro Compiler shell accessory
  4. '
  5. '              V 2.00  
  6. '
  7. '      By Jean-Baptiste BOLCATO
  8. '
  9. '  (c) 1993 Europress Software Ltd.
  10. '
  11. ' ---------------------------------- 
  12.  
  13. Set Buffer 16
  14. Set Sprite Buffer 48
  15. VER$="V 2.00"
  16. _CLOSE_DEF_SCREEN
  17. _LOW_RAM
  18. Break Off 
  19. On Error Proc _GEST_ERR2
  20.  
  21. Set Accessory 
  22. Close Workbench : Close Editor 
  23. Trap Resource Bank 16
  24. If Errtrap
  25.    ER$="The main resource bank has been erased!"
  26.    _GEST_ERR2
  27. End If 
  28.  
  29. ' icons animation parameters 
  30. TIMING=3 : ZAP=1 : VZAP=1
  31. Dim ANM_IC_T(11),XZ(6),YZ(6)
  32. Global MZ,MZ_OLD,IC,IC_OLD,TIME,TIMING,ZAP,VZAP
  33. Global ANM_IC_T(),XZ(),YZ(),XO,YO
  34. ' list of prog 
  35. NLST=32 : Dim LST$(NLST)
  36. ' screens opening parameters 
  37. Dim SOPEN(7) : SOP=20
  38. Global SCR,SCX,SCY,SCSX,SCSY,DY,SOP,SOPEN(),CHANGE
  39. Global PATH$,DPATH$,PRAM$,CNAME$,FACC,CFLASH$
  40. Global HELP$,ER$,VER$,COM$,FRE$,FRE,FRE_OLD
  41. Global FLAG$,ANM$,ANM_NF,SND$,LST$(),NLST
  42. Global TEMP_SRCE$,TEMP_DEST$
  43.  
  44. _CONFIG_DEF_LOAD
  45. _INIT_MAIN_SCREEN
  46. _INIT_ZONES
  47. _INIT_DISPLAY
  48. _SCREEN_OPEN[SCR,SCSY,SCX,SCY]
  49. Limit Mouse 64,25 To 512,310 : Show On 
  50.  
  51. ' Direct Setup called by User menu?
  52. COM$=Command Line$ : If COM$="SETUP" : _SETUP[True] : _QUIT[0] : End If 
  53.  
  54. ' Load APCmp program 
  55. _LOAD_APCMP
  56. ' Load anim, music & animated buttons if needed
  57. _LOAD_BANKS[15]
  58. ' Copy all Libs into ram-disc if needed
  59. _COPY_RAMLIBS
  60. _CONFIG_GET[9] : TEMP_SRCE$=Param$
  61. _CONFIG_GET[10] : TEMP_DEST$=Param$
  62. CHANGE=False
  63.  
  64. Do 
  65.    _ABOUT
  66.    Do 
  67.       Multi Wait 
  68.       _CHECKMEM
  69.       DIAL=Dialog(1)
  70.       If DIAL
  71.          If DIAL=6
  72.             _COMPILE
  73.          Else If(DIAL>=2 and DIAL<=4)
  74.             _SETFLAG[DIAL-1,Vdialog(1,50+DIAL-1)+3*(DIAL=3)+5*(DIAL=4)]
  75.             _UPDATE_BUTTONS[DIAL]
  76.          Else If DIAL=5
  77.             _SETUP[False]
  78.          Else If DIAL=15
  79.             _HELP["_DATAS_MAIN"]
  80.          Else If DIAL=14
  81.             _ABOUT
  82.          Else If DIAL=1
  83.             _QUIT[1]
  84.          End If 
  85.       End If 
  86.       ' animated buttons 
  87.       _GETFLAG[37]
  88.       If Param Then _ICONS_ANIMATE
  89.    Loop 
  90. Loop 
  91.  
  92. ' --- Procedures --- 
  93.  
  94. Procedure _ABOUT
  95.    X=Free
  96.    Trap Dialog Freeze 1
  97.    Trap Dialog Open 2,1
  98.    If Errtrap=0
  99.       Vdialog$(2,0)=" - "+VER$
  100.       Vdialog$(2,1)="Chip:"+Str$(Chip Free)+"   Fast:"+Str$(Fast Free)
  101.       Trap D=Dialog Run(2,9)
  102.       If Errtrap=0
  103.          _WAIT[300]
  104.       End If 
  105.    End If 
  106.    Trap Dialog Close 2
  107.    Trap Dialog Unfreeze 1
  108. End Proc
  109. Procedure _CHECKMEM
  110.    On Error Proc _GEST_ERR
  111.    Resume Label _FINISH_CHECKMEM
  112.    FRE=Chip Free+Fast Free
  113.    If FRE_OLD<>FRE
  114.       FRE_OLD=FRE
  115.       FRE$=Str$(FRE/1024)+" K "+Resource$(9)
  116.       Trap Vdialog$(1,99)=FRE$
  117.       Trap Dialog Update 1,14
  118.    End If 
  119.    Trap Vdialog$(1,99)=FRE$
  120.    If(Chip Free<20000) or FRE<40000
  121.       _INFO[Resource$(87)]
  122.       _WAIT[20]
  123.       F=0
  124.       _GETFLAG[37]
  125.       If Param
  126.          _SETFLAG[37,0]
  127.          F=1 : Erase 15
  128.       End If 
  129.       _GETFLAG[34]
  130.       If Param
  131.          _SETFLAG[34,0]
  132.          F=1 : Erase 10
  133.       End If 
  134.       _GETFLAG[35]
  135.       If Param
  136.          _SETFLAG[35,0]
  137.          F=1 : Erase 3
  138.       End If 
  139.       _GETFLAG[24]
  140.       If Param and DPATH$=PRAM$ and F=0
  141.          _WAIT[25]
  142.          _NOINFO
  143.          F=1
  144.          _WARN[Resource$(86),1]
  145.          If Param
  146.             _SETFLAG[24,0]
  147.             _DEL_RAMLIBS
  148.             DPATH$=PATH$
  149.          End If 
  150.       End If 
  151.       If F=0
  152.          _WAIT[25]
  153.          _NOINFO
  154.          _WARN[Resource$(85)+Resource$(20),1]
  155.          If Param=True
  156.             _WAIT[25]
  157.             _SETFLAG[24,0]
  158.             _DEL_RAMLIBS
  159.             DPATH$=PATH$
  160.          End If 
  161.       End If 
  162.    End If 
  163.    _FINISH_CHECKMEM:
  164.    _NOINFO
  165. End Proc
  166. Procedure _CLOSE_DEF_SCREEN
  167.    If Prg Under<>-1
  168.       Trap Screen 0
  169.       If Errtrap=0
  170.          Fade 1 : Wait 15
  171.          Screen Close 0
  172.       End If 
  173.    End If 
  174. End Proc
  175. Procedure _CONFIG_DEF_LOAD
  176.    DPATH$=Resource$(0)
  177.    PRAM$="RAM:AMOS_Compiler_Temp/"
  178.    C$="AMOSPro_Compiler_Config"
  179.    CNAME$=PRAM$+C$
  180.    _CONFIG_LOAD[CNAME$]
  181.    If Param
  182.       CNAME$=Dir$+C$
  183.       _CONFIG_LOAD[CNAME$]
  184.       If Param
  185.          CNAME$=Dir$+"s/"+C$
  186.          _CONFIG_LOAD[CNAME$]
  187.          If Param
  188.             CNAME$="S:"+C$
  189.             _CONFIG_LOAD[CNAME$]
  190.             If Param
  191.                CNAME$=Fsel$(Dir$+"**","",Resource$(73),Resource$(74))
  192.                _CONFIG_LOAD[CNAME$]
  193.                If Param
  194.                   ER$=Resource$(75)
  195.                   _GEST_ERR2
  196.                   Edit 
  197.                End If 
  198.             End If 
  199.          End If 
  200.       End If 
  201.    End If 
  202.    ' extract shell preferences
  203.    _CONFIG_GET[73]
  204.    ANM$=Param$
  205.    _CONFIG_GET[74]
  206.    SND$=Param$
  207.    _CONFIG_GET[72]
  208.    FLAG$=Param$
  209.    If Len(FLAG$)<43 Then ER$=Resource$(77) : _GEST_ERR2
  210.    If Prg Under<>1
  211.       _GETFLAG[1] : If Param=0 : _SETFLAG[1,1] : End If 
  212.       _GETFLAG[2] : If Param=0 : _SETFLAG[2,1] : End If 
  213.    End If 
  214.    ' go ram & restore path$, cname$   
  215.    If Exist(PRAM$+"AMOSPro_Compiler_Config")
  216.       DPATH$=PRAM$
  217.       Open In 1,PRAM$+"Compiler_Origin"
  218.       Trap Input #1,PATH$
  219.       Trap Input #1,CNAME$
  220.       Close 
  221.    End If 
  222. End Proc
  223. Procedure _CONFIG_GET[N]
  224.    Shared _CONFBK,CONFL
  225.    A=Start(_CONFBK)+8+1
  226.    If N>0
  227.       For C=1 To N
  228.          L=Peek(A) : If L=255 : Pop Proc[""] : End If 
  229.          Add A,L+2
  230.       Next 
  231.    End If 
  232.    L=Peek(A)
  233. End Proc[Peek$(A+1,L)]
  234. Procedure _CONFIG_LOAD[F$]
  235.    Shared _CONFBK,_CONFL
  236.    If Not Exist(F$) Then Pop Proc[1]
  237.    Trap Open In 1,F$ : If Errtrap Then Pop Proc[2]
  238.    _CONFL=Lof(1) : Close 
  239.    For B=65000 To 0 Step -1 : Exit If Length(B)=0 and Length(B+1)=0 : Next B
  240.    _CONFBK=B
  241.    Trap Reserve As Work B,1024*6 : If Errtrap Then Pop Proc[3]
  242.    Trap Bload F$,Start(B) : If Errtrap Then Erase B : Pop Proc[2]
  243.    If Peek$(Start(B),4)<>"CCt1" Then Erase B : Pop Proc[4]
  244. End Proc[0]
  245. Procedure _CONFIG_SAVE[F$]
  246.    Shared _CONFBK,_CONFL
  247.    Trap Bsave F$,Start(_CONFBK) To Start(_CONFBK)+_CONFL
  248.    If Errtrap Then Pop Proc[2]
  249. End Proc[0]
  250. Procedure _CONFIG_SET[N,A$]
  251.    Shared _CONFBK,_CONFL
  252.    Trap Reserve As Work _CONFBK+1,1024*6 : If Errtrap Then Pop Proc[2]
  253.    S=Start(_CONFBK) : SS=S : D=Start(_CONFBK+1) : DD=D
  254.    Add S,8
  255.    C=0 : L=Peek(S+1)
  256.    Repeat 
  257.       If C=N
  258.          Poke D,0 : Poke D+1,Len(A$) : Poke$ D+2,A$ : Add D,2+Len(A$)
  259.       Else 
  260.          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
  261.       End If 
  262.       Add S,2+L
  263.       L=Peek(S+1)
  264.       Inc C
  265.    Until L=255
  266.    Poke D,0 : Poke D+1,255 : Add D,2
  267.    Add D,D and 1
  268.    Copy DD,D To SS+8
  269.    Loke SS+4,D-DD
  270.    _CONFL=D-DD+8
  271.    Erase _CONFBK+1
  272. End Proc[0]
  273. Procedure _COMPILE
  274.    Shared _CONFBK
  275.    On Error Proc _GEST_ERR
  276.    Resume Label _FINISH_COMPILE
  277.    Dim T(3)
  278.    T(0)=3 : T(1)=1 : T(2)=0
  279.    SCR_ANIM=-1 : SCR_2=-1
  280.    REDRAW=False : CHANGE=True
  281.    COMP_STP=100
  282.    Dialog Freeze 1
  283.    ' Main flags 
  284.    _GETFLAG[1] : SRCE=Param
  285.    _GETFLAG[2] : DEST=Param
  286.    _GETFLAG[3] : TYPE=T(Param)
  287.    _GETFLAG[6] : If TYPE=1 : Add TYPE,Param : End If 
  288.    ' source   
  289.    If SRCE=0
  290.       Timer=0 : _INFO[Resource$(55)]
  291.       S$=TEMP_SRCE$ : Call Editor Equ("AEd_SaveAsName"),0,S$ : A$=Param$
  292.       Repeat : Until Timer>50 : _NOINFO
  293.       If A$<>"" : _WARN[A$,0] : _QUIT[0] : End If 
  294.       Ask Editor Equ("AEdAsk_ProgramName") : SS$=Param$
  295.       If SS$="" : SS$="Unnamed.AMOS" : End If 
  296.    Else If SRCE=1
  297.       S$=Fsel$("*.AMOS","",Resource$(27)) : SS$=S$
  298.       If S$<>""
  299.          _EXTRACT_PATH[S$]
  300.          Trap Dir$=Param$ : If Errtrap=0 : S$=Dir$+Mid$(S$,Len(Param$)+1) : End If 
  301.       End If 
  302.    Else If SRCE=2
  303.       REDRAW=True : _EDIT_LIST
  304.       If Param=True
  305.          NL=0 : S$=LST$(NL) : SS$=S$
  306.       End If 
  307.    End If 
  308.    If S$=""
  309.       _INFO[Resource$(115)] : _WAIT[100] : _NOINFO : Goto _FINISH_COMPILE
  310.    End If 
  311.    _EXTRACT_PATH[SS$] : SP$=Param$ : SN$=Mid$(SS$,Len(Param$)+1)
  312.    ' destination & type 
  313.    If DEST=0
  314.       TYPE=3 : D$=TEMP_DEST$
  315.       DD$=SS$ : F=0
  316.       For C=Len(DD$) To 1 Step -1
  317.          A$=Mid$(DD$,C,1)
  318.          Exit If(A$="/") or(A$=":")
  319.          If A$="." : DD$=Left$(DD$,C-1)+"_C"+Mid$(DD$,C) : F=1 : Exit : End If 
  320.       Next 
  321.       If F=0 : DD$=DD$+"_C.AMOS" : End If 
  322.       Call Editor Equ("AEd_CloseName"),1,DD$
  323.    Else 
  324.       D$=SS$ : F=True
  325.       If SRCE<2
  326.          A$=Fsel$("**","",Resource$(30),Resource$(33))
  327.          If A$=""
  328.             If Dir$<>SP$ : D$=Dir$+SN$ : End If 
  329.          Else 
  330.             D$=A$ : F=False
  331.             _EXTRACT_PATH[D$]
  332.             Trap Dir$=Param$ : If Errtrap=0 : D$=Dir$+Mid$(D$,Len(Param$)+1) : End If 
  333.          End If 
  334.       End If 
  335.       If F
  336.          If Upper$(Right$(D$,5))=".AMOS"
  337.             If TYPE<>3
  338.                D$=Left$(D$,Len(D$)-5)
  339.             Else 
  340.                D$=Left$(D$,Len(D$)-5)+"_C.AMOS"
  341.             End If 
  342.          End If 
  343.       End If 
  344.       DD$=D$
  345.    End If 
  346.    If D$=S$
  347.       _INFO[Resource$(116)] : _WAIT[100] : _NOINFO : Goto _FINISH_COMPILE
  348.    End If 
  349.    ' build command line 
  350.    C$="TYPE="+Mid$(Str$(TYPE),2)+" "
  351.    _GETFLAG[4] : If Param=0 : C$=C$+"NO" : End If : C$=C$+"ERR "
  352.    _GETFLAG[14] : If Param=0 : C$=C$+"NO" : End If : C$=C$+"LONG "
  353.    _GETFLAG[15] : If Param=0 : C$=C$+"NOLIB " Else C$=C$+"INCLIB " : End If 
  354.    _GETFLAG[5] : If Param=0 : C$=C$+"NO" : End If : C$=C$+"DEF "
  355.    _GETFLAG[6] : If Param=0 : C$=C$+"NO" : End If : C$=C$+"WB "
  356.    C$=C$+'TEMP="Ram:" '
  357.    C$=C$+'LIBS="'+DPATH$+'" '
  358.    _GETFLAG[24]
  359.    ' Go for it now!!! 
  360.    ANM=False
  361.    _GETFLAG[34]
  362.    If Param<>0 and Length(10)>0
  363.       ' Play Animation!
  364.       If FRE>100000
  365.          ANM=True
  366.          For S=0 To 7
  367.             Trap Screen S
  368.             If Errtrap
  369.                SCR_ANIM=S : SOPEN(S)=True : Exit 
  370.             End If 
  371.          Next 
  372.          ' hide all screens 
  373.          Trap Screen Hide SCR
  374.          Trap Screen Hide 9
  375.           Extension_5_006E "Step",ANM_NF
  376.       Else 
  377.          _WARN[Resource$(85)+Resource$(88),0]
  378.       End If 
  379.    End If 
  380.    If ANM=False
  381.       ' no animation!  
  382.        Extension_5_006E "Step",COMP_STP
  383.    End If 
  384.    _GETFLAG[35] : If Param : _PLAY_SND : End If 
  385.    Do 
  386.       SCR_2=-1
  387.       ' prepare display
  388.       If ANM=True
  389.          Hide 
  390.          F=Frame Play(10,1,SCR_ANIM)
  391.          Colour Back Colour(0)
  392.          Trap Double Buffer 
  393.          If Errtrap : Proc _GEST_ERR : End If 
  394.          Wait Vbl 
  395.       Else 
  396.          REDRAW=True
  397.          Dialog Open 2,1
  398.          D=Dialog Run(2,10)
  399.          Set Slider 2,2,2,0,4,4,4,0
  400.          _EXTRACT_PATH[S$]
  401.          A$=Resource$(14)+(S$-Param$)
  402.          Cls 6,SCSX/2-216,112 To SCSX/2+216,124
  403.          Ink 3 : Text SCSX/2-Len(A$)*4,120,A$
  404.          HSX1=SCSX/2-240+32+10 : HSY1=67+6
  405.          HSX2=SCSX/2+240-32-10 : HSY2=SCSY/2+60-40-6
  406.       End If 
  407.       ' start compilation
  408.       E$="" : FR=0 : BRK=0
  409.       Clear Key 
  410.       COM$='FROM "'+S$+'" TO "'+D$+'" '+C$
  411.       Timer=0
  412.       A$="Gaga" : MAGIC=Leek(Varptr(A$))
  413.        Extension_5_006E "Conf",Start(_CONFBK)
  414.        Extension_5_006E COM$,MAGIC
  415.       STATUS=Param
  416.       ' Compilation main loop
  417.       '*** Monitor   
  418.       While STATUS
  419.          If ANM=True
  420.             Repeat 
  421.                Inc FR
  422.                F=Frame Play(F,1)
  423.                Screen Swap : Wait Vbl 
  424.             Until FR=STATUS
  425.          Else 
  426.             Hslider HSX1,HSY1 To HSX2,HSY2,COMP_STP,0,STATUS
  427.          End If 
  428.          K$=Inkey$
  429.          Exit If K$=Chr$(27)
  430.          Multi Wait 
  431.           Extension_5_006E "Cont",MAGIC
  432.          STATUS=Param
  433.       Wend 
  434.       If K$=Chr$(27)
  435.           Extension_5_006E "Stop",MAGIC
  436.          COMP_ERR$=Resource$(111)
  437.          SIZE=0 : NBINST=0
  438.       Else 
  439.          COMP_ERR$= Extension_5_0078 
  440.          SIZE= Extension_5_00BE 
  441.          NBINST= Extension_5_00BE 
  442.       End If 
  443.       CERR=COMP_ERR$<>""
  444.       REQ=1 : If SRCE=2 : REQ=0 : End If 
  445.       If Exist(TEMP_SRCE$) : Trap Kill TEMP_SRCE$ : End If 
  446.       If CERR
  447.          REQ=1
  448.          If SRCE=2 : REQ=2 : End If 
  449.          If SRCE=0 : REQ=3 : End If 
  450.       Else 
  451.          If TYPE<3
  452.             _GETFLAG[27] : SQ=Param
  453.             If SQ : REQ=0 : End If 
  454.          End If 
  455.       End If 
  456.       ' result report
  457.       SX=SCSX : SY=72-(REQ<>0)*24
  458.       If ANM=True
  459.          _OPEN_FREE_SCREEN[SX,SY]
  460.          SCR_2=Param
  461.          If SCR_2=-1
  462.             Trap Screen Close SCR_ANIM
  463.             _OPEN_FREE_SCREEN[SX,SY]
  464.             SCR_2=Param
  465.             If SCR_2=-1
  466.                ANM=False
  467.                Trap Screen Show 9
  468.                Screen SCR : Colour Back Colour(0)
  469.                Screen Show SCR
  470.                SX=Max(416,Len(COMP_ERR$)*8+24)
  471.             End If 
  472.          End If 
  473.          Screen Display SCR_2,SCX,180,,
  474.          Screen To Front SCR_2 : Show 
  475.       Else 
  476.          Trap Dialog Close 2
  477.          SX=Max(416,Len(COMP_ERR$)*8+24)
  478.       End If 
  479.       _EXTRACT_PATH[DD$] : A$=Mid$(DD$,Len(Param$)+1)
  480.       _END_COMPILE[SX,SY,SIZE,NBINST,Timer,A$,COMP_ERR$,REQ]
  481.       BRK=Param
  482.       If REQ=3 and BRK=2
  483.          If SIZE<0
  484.             Call Editor Equ("AEd_GotoLine"),NBINST
  485.             Call Editor Equ("AEd_StartLine")
  486.          End If 
  487.          _QUIT[0]
  488.       End If 
  489.       ' squash the prog? 
  490.       If SQ and CERR=0
  491.          _SQUASH_A_PROG[D$,SIZE]
  492.       End If 
  493.       If DEST=0 and CERR=0
  494.          Call Editor Equ("AEd_OpenLoad"),1,D$
  495.          Trap Kill D$
  496.          If Param$="" : Call Editor Equ("AEd_Rename"),0,DD$ : End If 
  497.       End If 
  498.       If ANM=True Then Trap Screen Close SCR_2
  499.       ' List of Progs Looping? 
  500.       Exit If SRCE<>2 or BRK=2
  501.       Inc NL : S$=LST$(NL)
  502.       If S$="" Then Exit 
  503.       If TYPE<>3
  504.          D$=Left$(S$,Len(S$)-5)
  505.       Else 
  506.          D$=Left$(S$,Len(S$)-5)+"_C.AMOS"
  507.       End If 
  508.       SS$=S$ : DD$=D$
  509.       F=FF
  510.    Loop 
  511.    _FINISH_COMPILE:
  512.    _GETFLAG[35] : If Param Then _STOP_SND
  513.    If ANM=True
  514.       Trap Screen Close SCR_ANIM
  515.       Trap Screen Close SCR_2
  516.    End If 
  517.    Trap Screen Show 9
  518.    Screen SCR : Colour Back Colour(0)
  519.    If REDRAW=True Then _INIT_DISPLAY Else Trap Dialog Unfreeze 1
  520.    Screen Show SCR
  521.    If QQ : _QUIT[0] : End If 
  522. End Proc
  523. Procedure _COPY_RAMLIBS
  524.    _GETFLAG[24]
  525.    If Param
  526.       If Exist("Ram:")
  527.          If DPATH$<>PRAM$
  528.             Dim F$(64)
  529.             On Error Proc _GEST_ERR
  530.             Resume Label _NORAM
  531.             Trap Dialog Freeze 1
  532.             Dialog Open 2,1
  533.             Vdialog$(2,0)=Resource$(40)
  534.             Trap D=Dialog Run(2,15)
  535.             If Errtrap=0
  536.                Set Slider 2,2,2,0,4,4,4,0
  537.                SX=336
  538.                HSX1=(SCSX-SX)/2+32+2 : HSY1=(SCSY-72)/2+33
  539.                HSX2=(SCSX+SX)/2-32-19 : HSY2=(SCSY-72)/2+44
  540.                Hslider HSX1,HSY1 To HSX2,HSY2,10,0,0
  541.             End If 
  542.             F$(0)="AMOSPro.Lib"
  543.             F$(1)="Compiler.Lib"
  544.             F$(2)="Def_Compiled.info"
  545.             F$(3)="AMOSPro_Default_Resource.Abk"
  546.             F$(4)="Header_AMOS.AMOS"
  547.             F$(5)="Header_CLI.Lib"
  548.             F$(6)="Header_Backstart.Lib"
  549.             F$(7)="AMOSPro_Editor_Config"
  550.             NCOP=7
  551.             If Prg State=-1
  552.                Inc NCOP
  553.                F$(NCOP)="APCmp"
  554.             End If 
  555.             If Length(16)=0
  556.                Inc NCOP
  557.                F$(NCOP)="AMOSPro_Compiler_Resource.Abk"
  558.             End If 
  559.             _GETFLAG[37]
  560.             If Param
  561.                Inc NCOP
  562.                F$(NCOP)="AMOSPro_CompilerA_Resource.Abk"
  563.             End If 
  564.             R=-16
  565.             Repeat 
  566.                If Resource$(R)<>""
  567.                   Inc NCOP
  568.                   A$=Resource$(R)
  569.                   S=Instr(A$," ") : If S : A$=Left$(A$,S-1) : End If 
  570.                   F$(NCOP)=A$
  571.                End If 
  572.                Dec R
  573.             Until R<-26
  574.             Set Dir ,""
  575.             Trap Open In 1,DPATH$+F$(0)
  576.             If Errtrap
  577.                _NOINFO
  578.                _WARN[F$(I)+Resource$(41),0]
  579.                _WARN[Resource$(42),0]
  580.                Goto _NORAM
  581.             End If 
  582.             Close 1
  583.             For I=0 To NCOP
  584.                If Exist(DPATH$+F$(I))
  585.                   Open In 1,DPATH$+F$(I)
  586.                   TL=TL+Lof(1)
  587.                   Close 1
  588.                End If 
  589.             Next I
  590.             If Chip Free+Fast Free<TL+110*1024
  591.                _NOINFO
  592.                _WARN[Resource$(43),0]
  593.                Goto _NORAM
  594.             End If 
  595.             Trap Mkdir Left$(PRAM$,Len(PRAM$)+(Right$(PRAM$,1)="/"))
  596.             For I=0 To NCOP
  597.                A$=DPATH$+F$(I) : B$=PRAM$+F$(I)
  598.                If Not Exist(B$)
  599.                   _FCOPY[A$,B$]
  600.                End If 
  601.                If HSX1 : Hslider HSX1,HSY1 To HSX2,HSY2,NCOP,0,I : End If 
  602.             Next I
  603.             _FCOPY[CNAME$,PRAM$+"AMOSPro_Compiler_config"]
  604.             F=-1
  605.             _NORAM:
  606.             _NOINFO
  607.             Set Dir ,".info/*.info/*.*.info"
  608.             If F
  609.                PATH$=DPATH$
  610.                Open Out 1,PRAM$+"Compiler_Origin"
  611.                Print #1,PATH$
  612.                Print #1,CNAME$
  613.                Close 
  614.                DPATH$=PRAM$
  615.             End If 
  616.          End If 
  617.       End If 
  618.    End If 
  619. End Proc
  620. Procedure _DEL_RAMLIBS
  621.    On Error Goto _ERR
  622.    Dim F$(64)
  623.    Set Dir 32,""
  624.    If Upper$(Left$(PRAM$,4))="RAM:"
  625.       _INFO[Resource$(44)]
  626.       _WAIT[10]
  627.       A$=Dir First$(PRAM$+"**")
  628.       I=0
  629.       While A$<>""
  630.          F$(N)=Left$(A$,32)-" " : Inc N
  631.          A$=Dir Next$
  632.       Wend 
  633.       If N>0
  634.          For I=0 To N-1
  635.             Trap Kill PRAM$+F$(I)
  636.          Next I
  637.       End If 
  638.       Trap Kill PRAM$
  639.       _END: _NOINFO : Pop Proc
  640.    End If 
  641.    _ERR: Resume _END
  642. End Proc
  643. Procedure _EDIT_LIST
  644.    On Error Proc _GEST_ERR
  645.    Resume Label _FINISH_EDLIST
  646.    Dim LST2$(NLST)
  647.    Trap Dialog Close 1
  648.    NL=0
  649.    While LST$(NL)<>"" and NL<NLST
  650.       _EXTRACT_PATH[LST$(NL)] : PAT$=Param$
  651.       LST2$(NL)=Left$(" "+LST$(NL)-PAT$,30)
  652.       Inc NL
  653.    Wend 
  654.    Dialog Open 1,1
  655.    Vdialog(1,0)=Array(LST2$(0))
  656.    Vdialog(1,1)=NL
  657.    POSL=-1
  658.    D=Dialog Run(1,11)
  659.    Dialog Update 1,8,,NLST+1,NL
  660.    Do 
  661.       D=Dialog(1)
  662.       Multi Wait 
  663.       If D
  664.          Exit If D=2 or D=1
  665.          If D=3
  666.             If NL<NLST
  667.                F$=Fsel$(PAT$+"*.AMOS","",Resource$(27))
  668.                If F$<>""
  669.                   If Exist(F$)
  670.                      _MATCH[F$]
  671.                      If Param=False
  672.                         LST$(NL)=F$
  673.                         _EXTRACT_PATH[F$] : PAT$=Param$
  674.                         LST2$(NL)=Left$(" "+LST$(NL)-PAT$,30)
  675.                         Inc NL
  676.                         Dialog Update 1,8,,NLST+1,NL
  677.                         If(Rdialog(1,7)<NL-12 or Rdialog(1,7)>=NL) and NL>=12
  678.                            Dialog Update 1,7,NL-12,,NL
  679.                         Else 
  680.                            Dialog Update 1,7,0,,NL
  681.                         End If 
  682.                      Else 
  683.                         _WARN[Err$(79),0]
  684.                      End If 
  685.                   Else 
  686.                      _WARN[Err$(81),0]
  687.                   End If 
  688.                End If 
  689.             Else 
  690.                _WARN[Resource$(31),0]
  691.             End If 
  692.          Else If D=4
  693.             If NL<NLST
  694.                F$=Fsel$(PAT$+"*.AMOS","",Resource$(28),Resource$(29))
  695.                If F$<>""
  696.                   If Exist(F$)
  697.                      _EXTRACT_PATH[F$] : PAT$=Param$
  698.                      F$=Dir First$(PAT$+"*.AMOS")
  699.                      While F$<>""
  700.                         If NL<NLST
  701.                            If Left$(F$,1)<>"*"
  702.                               _STRING_FILTER[F$] : F$=PAT$+Param$
  703.                               _MATCH[F$]
  704.                               If Param=False
  705.                                  LST$(NL)=F$
  706.                                  LST2$(NL)=Left$(" "+LST$(NL)-PAT$,30)
  707.                                  Inc NL
  708.                               End If 
  709.                            End If 
  710.                            F$=Dir Next$
  711.                         Else 
  712.                            _WARN[Resource$(31),0]
  713.                            Exit 
  714.                         End If 
  715.                      Wend 
  716.                      POSL=-1
  717.                      Dialog Update 1,8,,NLST+1,NL
  718.                      If(Rdialog(1,7)<NL-12 or Rdialog(1,7)>=NL) and NL>=12
  719.                         Dialog Update 1,7,NL-12,,NL
  720.                      Else 
  721.                         Dialog Update 1,7,0,,NL
  722.                      End If 
  723.                   Else 
  724.                      _WARN[Err$(81),0]
  725.                   End If 
  726.                End If 
  727.             Else 
  728.                _WARN[Resource$(31),0]
  729.             End If 
  730.          Else If D=5
  731.             If NL>0
  732.                If POSL>=0
  733.                   For I=POSL To NL-1
  734.                      LST$(I)=LST$(I+1)
  735.                      LST2$(I)=LST2$(I+1)
  736.                   Next I
  737.                   LST$(NL)="" : LST2$(NL)=""
  738.                   Dec NL
  739.                   If POSL>=NL : POSL=NL-1 : End If 
  740.                   Dialog Update 1,7,0,,NL
  741.                   Dialog Update 1,8,,POSL,NL
  742.                End If 
  743.             End If 
  744.          Else If D=6
  745.             If NL>0
  746.                _WARN[Resource$(32),1]
  747.                If Param=True
  748.                   For I=0 To NL
  749.                      LST$(I)=""
  750.                      LST2$(I)=""
  751.                   Next I
  752.                   NL=0
  753.                   Dialog Update 1,7,0,,NL
  754.                   Dialog Update 1,8,,NLST+1,NL
  755.                End If 
  756.             End If 
  757.          Else If D=8
  758.             POSL=Rdialog(1,8)
  759.             If POSL>=NL
  760.                Dialog Update 1,8,,NLST+1,NL
  761.             End If 
  762.          Else If D=15
  763.             _HELP["_DATAS_EDITLIST"]
  764.          End If 
  765.       End If 
  766.    Loop 
  767.    _FINISH_EDLIST:
  768.    _NOINFO
  769.    Dialog Close 1
  770. End Proc[(D=2)]
  771. Procedure _END_COMPILE[W,H,SZ,NBI,T,D$,E$,REQUESTER]
  772.    Dialog Open 2,1
  773.    X=Free
  774.    Vdialog(2,0)=W
  775.    Vdialog(2,1)=H
  776.    Vdialog(2,2)=REQUESTER
  777.    If E$=""
  778.       Vdialog$(2,3)=Resource$(110)
  779.       T=T/50 : M=T/60 : S=T mod 60
  780.       Vdialog$(2,4)=D$
  781.       Vdialog$(2,5)=Resource$(121)+" "+Str$(SZ)+" "+Resource$(12)+" -"+Str$(NBI)+" "+Resource$(122)
  782.       A$=Resource$(120)+" "
  783.       If M>0 : A$=A$+Str$(M)+" minutes," : End If 
  784.       A$=A$+Str$(S)+" seconds."
  785.       Vdialog$(2,6)=A$
  786.    Else 
  787.       Vdialog$(2,3)=Resource$(112)
  788.       Vdialog$(2,4)=D$
  789.       Vdialog$(2,5)=E$
  790.       Vdialog$(2,6)=""
  791.    End If 
  792.    
  793.    ' bell warning!
  794.    _GETFLAG[36]
  795.    If Param
  796.       If Length(3)
  797.          T$=Peek$(Start(3)-8,8)
  798.          If T$="Music   " or T$="Samples "
  799.             Play 3,70,0
  800.          End If 
  801.       Else 
  802.          Play 3,70,0
  803.       End If 
  804.    End If 
  805.    D=Dialog Run(2,12)
  806.    Screen Show 
  807.    Timer=0
  808.    Do 
  809.       D=Dialog(2)
  810.       Multi Wait 
  811.       Exit If REQUESTER=1 and D=1
  812.       Exit If REQUESTER>=2 and D>=1
  813.       Exit If REQUESTER=0 and(Timer>250 or Mouse Click)
  814.    Loop 
  815.    Dialog Close 2
  816. End Proc[D]
  817. Procedure _EXTRACT_PATH[A$]
  818.    If A$<>""
  819.       I=Len(A$)+1
  820.       Repeat 
  821.          Dec I : B$=Mid$(A$,I,1)
  822.       Until B$="/" or B$=":" or I=1
  823.       If I>1
  824.          A$=Left$(A$,I)
  825.       Else 
  826.          A$=""
  827.       End If 
  828.    End If 
  829. End Proc[A$]
  830. Procedure _FCOPY[S$,D$]
  831.    On Error Goto _ERR
  832.    Open In 1,S$
  833.    Open Out 2,D$
  834.    LF=Lof(1)
  835.    Do 
  836.       Exit If P>=LF
  837.       L=Min(1024,LF-P)
  838.       A$=Input$(1,L)
  839.       Print #2,A$;
  840.       Add P,L
  841.    Loop 
  842.    Close 
  843.    Pop Proc[0]
  844.    _ERR: Resume _ER2
  845.    _ER2: Trap Kill D$ : Close : Pop Proc[-1]
  846. End Proc
  847. Procedure _GEST_ERR
  848.    _WARN[Err$(Errn),0]
  849.    Resume Label 
  850. End Proc
  851. Procedure _GEST_ERR2
  852.    For I=0 To 7
  853.       If SOPEN(I) : Screen Close I : End If 
  854.    Next I
  855.    Auto View On 
  856.    Screen Open 0,640,24,2,Hires
  857.    Screen Display 0,,100,,
  858.    Amos To Front 
  859.    Palette 0,$FFF : Curs Off 
  860.    If Errn=0 Then A$=ER$ Else A$=Err$(Errn)
  861.    Centre ">> "+A$+" <<"
  862.    Print : Print : Centre "Press any key"
  863.    Wait Key 
  864.    Screen Close 0
  865.    Edit 
  866. End Proc
  867. Procedure _GETFLAG[N]
  868. End Proc[Asc(Mid$(FLAG$,N,1))-48]
  869. Procedure _HELP[H$]
  870.    If Chip Free>60000 and(Chip Free+Fast Free)>150000
  871.       Restore H$
  872.       Read NH
  873.       Dim HLP$(NH)
  874.       For I=0 To NH-1 : Read HLP$(I) : Next I
  875.       Dialog Freeze 1
  876.       Do 
  877.          Channel 0 To Sprite 0
  878.          Channel 1 To Sprite 0
  879.          Amal 0,"L A=1; Loop: L X=XM; L Y=YM; Pause; Jump Loop;"
  880.          Amal 1,"Anim 0,(1,3)(2,3)(3,3)(4,3)(3,3)(2,3); "
  881.          Hide : Amal On 0
  882.          HLP$=""
  883.          Do 
  884.             Multi Wait 
  885.             ZDIAL=Zdialog(1,X Screen(X Mouse),Y Screen(Y Mouse))
  886.             If ZDIAL<=NH and ZDIAL>=0
  887.                If HLP$(ZDIAL)<>""
  888.                   If HLP$<>HLP$(ZDIAL)
  889.                      Amal On 1
  890.                      HLP$=HLP$(ZDIAL)
  891.                   End If 
  892.                End If 
  893.             Else 
  894.                Amal Freeze 1
  895.                Sprite 0,X Mouse,Y Mouse,1
  896.                HLP$=""
  897.             End If 
  898.             If Mouse Click=1
  899.                If ZDIAL=15
  900.                   Dialog Update 1,15,0
  901.                   Repeat : Multi Wait : Until Mouse Key=0
  902.                   Dialog Unfreeze 1
  903.                   Exit 2
  904.                Else 
  905.                   If HLP$<>""
  906.                      Amal Off : Sprite Off : Show On 
  907.                      If Prg State<0
  908.                         P1$="AMOSPro_Accessories:AMOSPro_Help/AMOSPro_Help"
  909.                         P2$="AMOSPro_Extras:Compiler_Help/AMOSPro_Help"
  910.                      Else 
  911.                         P1$="AMOSPro_Accessories:AMOSPro_Help/AMOSPro_Help.AMOS"
  912.                         P2$="AMOSPro_Extras:Compiler_Help/AMOSPro_Help.AMOS"
  913.                      End If 
  914.                      H$="AMOSPro_Extras:Compiler_Help/Compiler_Help"
  915.                   If Exist(P1$) : P$=P1$ Else P$=P2$ : End If 
  916.                      Command Line$="-f"+H$+" "+HLP$
  917.                      Trap Prun P$
  918.                      If Errtrap or Param
  919.                         _WARN[Resource$(79),0]
  920.                         Exit 2
  921.                      End If 
  922.                      Exit 
  923.                   End If 
  924.                End If 
  925.             End If 
  926.          Loop 
  927.       Loop 
  928.    Else 
  929.       _WARN[Resource$(78),0]
  930.    End If 
  931.    Dialog Update 1,15,0
  932.    Amal Off : Show 
  933.    _DATAS_MAIN:
  934.    Data 7
  935.    Data "UseShell"
  936.    Data "Main_Escape"
  937.    Data "Main_Source"
  938.    Data "Main_Dest"
  939.    Data "Main_Type"
  940.    Data "GoMain_Setup"
  941.    Data "Main_Compile"
  942.    _DATAS_EDITLIST:
  943.    Data 9
  944.    Data "EditList"
  945.    Data "Cancel"
  946.    Data "Ok"
  947.    Data "EdList_AddPrg"
  948.    Data "EdList_AddDir"
  949.    Data "EdList_DelPrg"
  950.    Data "EdList_DelAll"
  951.    Data "EdList_Window"
  952.    Data "EdList_Window"
  953.    _DATAS_SETUP:
  954.    Data 9
  955.    Data "Main_setup"
  956.    Data "Cancel"
  957.    Data "Ok"
  958.    Data "GoSetUp1"
  959.    Data "GoSetUp2"
  960.    Data "GoSetUp3"
  961.    Data "SetUp_LoadConfig"
  962.    Data "SetUp_SaveDefault"
  963.    Data "SetUp_SaveConfig"
  964.    _DATAS_SETUP1_1:
  965.    Data 9
  966.    Data "Setup1"
  967.    Data "Cancel"
  968.    Data "Ok"
  969.    Data "SUp1_errmess"
  970.    Data "SUp1_defscr"
  971.    Data "SUp1_backboot"
  972.    Data "SUp1_CLIrun"
  973.    Data ""
  974.    Data "NextPanel"
  975.    _DATAS_SETUP1_2:
  976.    Data 5
  977.    Data "Setup1"
  978.    Data "PrevPanel"
  979.    Data ""
  980.    Data "SUp1_LongJump"
  981.    Data "SUp1_AMOSlib"
  982.    _DATAS_SETUP2_1:
  983.    Data 9
  984.    Data "Setup2"
  985.    Data "Cancel"
  986.    Data "Ok"
  987.    Data "SUp2_copylib"
  988.    Data "SUp2_leavelib"
  989.    Data "SUp2_APcmpram"
  990.    Data "SUp2_squash"
  991.    Data ""
  992.    Data "NextPanel"
  993.    _DATAS_SETUP2_2:
  994.    Data 10
  995.    Data "Setup2"
  996.    Data "Cancel"
  997.    Data "Ok"
  998.    Data "SUp2_iffanim"
  999.    Data "SUp2_tracker"
  1000.    Data "SUp2_warnbell"
  1001.    Data "SUp2_animbutt"
  1002.    Data ""
  1003.    Data ""
  1004.    Data "NextPanel"
  1005.    _DATAS_SETUP3:
  1006.    Data 7
  1007.    Data "Setup3"
  1008.    Data "Cancel"
  1009.    Data "Ok"
  1010.    Data "SUp3_defcom"
  1011.    Data "SUp3_gosysfile"
  1012.    Data "SUp3_gocmpmess"
  1013.    Data "SUp3_gocmperr"
  1014.    _DATAS_SETUP3_1:
  1015.    Data 5
  1016.    Data "SUp3_sysfile"
  1017.    Data "Cancel"
  1018.    Data "Ok"
  1019.    Data "SUp3_sysfile"
  1020.    Data "SUp3_sysfile"
  1021.    _DATAS_SETUP3_2:
  1022.    Data 5
  1023.    Data "SUp3_cmpmess"
  1024.    Data "Cancel"
  1025.    Data "Ok"
  1026.    Data "SUp3_cmpmess"
  1027.    Data "SUp3_cmpmess"
  1028.    _DATAS_SETUP3_3:
  1029.    Data 5
  1030.    Data "SUp3_cmperr"
  1031.    Data "Cancel"
  1032.    Data "Ok"
  1033.    Data "SUp3_cmperr"
  1034.    Data "SUp3_cmperr"
  1035. End Proc
  1036. Procedure _ICONS_ANIMATE
  1037.    MZ=Mouse Zone
  1038.    If MZ<>MZ_OLD and IC<>IC_OLD
  1039.       If IC_OLD>0 and MZ_OLD>0
  1040.          Resource Unpack 45+IC_OLD,XZ(MZ_OLD)+XO,YZ(MZ_OLD)+YO
  1041.       End If 
  1042.       MZ_OLD=MZ : IC_OLD=IC
  1043.    End If 
  1044.    If MZ
  1045.       Inc TIME
  1046.       If TIME=TIMING
  1047.          TIME=0
  1048.          If MZ=1
  1049.             IC=10
  1050.             XO=0 : YO=0
  1051.          Else If MZ=5
  1052.             IC=8
  1053.             XO=16 : YO=4
  1054.          Else If MZ=6
  1055.             IC=9
  1056.             XO=120 : YO=4
  1057.          Else If MZ>=2
  1058.             IC=Vdialog(1,50+MZ-1)
  1059.             XO=48 : YO=4
  1060.          End If 
  1061.          If ANM_IC_T(IC)=0
  1062.             Add ZAP,1,1 To 5
  1063.          Else 
  1064.             Add ZAP,VZAP
  1065.             If ZAP=0
  1066.                ZAP=1
  1067.                VZAP=1
  1068.             Else If ZAP=6
  1069.                ZAP=5
  1070.                VZAP=-1
  1071.             End If 
  1072.          End If 
  1073.          Resource Bank 15
  1074.          Resource Unpack IC*5+ZAP,XZ(MZ)+XO,YZ(MZ)+YO
  1075.          Resource Bank 16
  1076.          IC_OLD=IC : MZ_OLD=MZ
  1077.       End If 
  1078.    Else 
  1079.       IC=0
  1080.    End If 
  1081. End Proc
  1082. Procedure _INFO[A$]
  1083.    Trap Dialog Freeze 1
  1084.    Trap Dialog Close 2
  1085.    Dialog Open 2,1
  1086.    Vdialog$(2,0)=A$
  1087.    Trap D=Dialog Run(2,14)
  1088. End Proc[Errtrap]
  1089. Procedure _INIT_DISPLAY
  1090.    _INIT_WORK
  1091.    FRE_OLD=-1 : _CHECKMEM
  1092.    Trap Vdialog$(1,99)=FRE$
  1093.    Trap D=Dialog Run(1,0)
  1094.    _UPDATE_BUTTONS[0]
  1095. End Proc
  1096. Procedure _INIT_MAIN_SCREEN
  1097.    If Prg Under=1
  1098.       For S=0 To 7
  1099.          Trap Screen Close S
  1100.       Next 
  1101.       Set Sprite Buffer 40
  1102.    End If 
  1103.    ADAT=Leek(Dreg(3))
  1104.    If ADAT Then SCSX=Deek(ADAT) : SCX=Deek(ADAT+4) : SCY=Deek(ADAT+6)+16
  1105.    If SCSX<640 Then SCSX=640 : SCX=128 : SCY=68
  1106.    SCSY=160
  1107.    Auto View Off : SCR=-1
  1108.    _OPEN_FREE_SCREEN[SCSX,SCSY]
  1109.    SCR=Param
  1110.    If SCR<0 Then ER$=Resource$(85)+Resource$(83) : _GEST_ERR2
  1111. End Proc
  1112. Procedure _INIT_WORK
  1113.    Trap Dialog Close 1
  1114.    Dialog Open 1,1,99,1024*8
  1115.    For I=1 To Len(FLAG$)
  1116.       _GETFLAG[I]
  1117.       Vdialog(1,I)=Param
  1118.    Next I
  1119.    _GETFLAG[1] : Vdialog(1,51)=Param
  1120.    _GETFLAG[2] : Vdialog(1,52)=Param+3
  1121.    _GETFLAG[3] : Vdialog(1,53)=Param+5
  1122. End Proc[Errtrap]
  1123. Procedure _INIT_ZONES
  1124.    NZ=6
  1125.    VA0=((SCSX-640)/16)*8
  1126.    ' Set up zones 
  1127.    Restore DAT0
  1128.    Reserve Zone NZ
  1129.    For Z=1 To NZ
  1130.       Read XZ(Z),YZ(Z),A,B : Set Zone Z,XZ(Z),YZ(Z) To XZ(Z)+A,YZ(Z)+B
  1131.    Next 
  1132.    DAT0:
  1133.    Data 0,0,40,16
  1134.    Data 16+VA0,68,200,24
  1135.    Data 240+VA0,68,200,24
  1136.    Data 464+VA0,68,160,24
  1137.    Data 24+VA0,120,184,24
  1138.    Data SCSX-384-VA0-24,120,384,24
  1139.    Restore DAT1
  1140.    For I=0 To 10
  1141.       Read ANM_IC_T(I)
  1142.    Next I
  1143.    DAT1:
  1144.    Data 0,1,0,0,1,1,1,1,1,1,1,1
  1145. End Proc
  1146. Procedure _LOAD_APCMP
  1147.    If Not Extension_5_00AE 
  1148.       _INFO[Resource$(25)]
  1149.       Repeat 
  1150.          Trap Extension_5_0098 DPATH$+"APCmp"
  1151.          If Errtrap
  1152.             Trap Extension_5_0098 PATH$+"APCmp"
  1153.             If Errtrap
  1154.                _WAIT[10]
  1155.                _NOINFO
  1156.                _WARN[Resource$(80),0]
  1157.                F$=Fsel$("","",Resource$(82))
  1158.                If Exist(Dir$+"APCmp")
  1159.                   DPATH$=Dir$
  1160.                Else 
  1161.                   ER$=Resource$(81) : _GEST_ERR2
  1162.                End If 
  1163.             End If 
  1164.          End If 
  1165.          _NOINFO
  1166.       Until Extension_5_00AE 
  1167.    End If 
  1168. End Proc
  1169. Procedure _LOAD_BANKS[A]
  1170.    If A
  1171.       Timer=0
  1172.       _GETFLAG[37] : FF=Param
  1173.       _GETFLAG[34] : FF=Param or FF
  1174.       _GETFLAG[35] : FF=Param or FF
  1175.       If FF : _INFO[Resource$(24)] : End If 
  1176.       If A and 1
  1177.          _GETFLAG[37] : Rem animated buttons 
  1178.          If Param
  1179.             If Length(15)=0
  1180.                Trap Load DPATH$+"AMOSPro_CompilerA_resource.Abk",15
  1181.                If Errtrap
  1182.                   If DPATH$=PRAM$
  1183.                      Trap Load PATH$+"AMOSPro_CompilerA_resource.Abk",15
  1184.                      If Errtrap
  1185.                         _INFO[Resource$(70)] : _WAIT[50]
  1186.                         _SETFLAG[37,0] : Erase 15
  1187.                      Else 
  1188.                         Save PRAM$+"AMOSPro_CompilerA_resource.Abk",15
  1189.                      End If 
  1190.                   Else 
  1191.                      _INFO[Resource$(70)] : _WAIT[50]
  1192.                      _SETFLAG[37,0] : Erase 15
  1193.                   End If 
  1194.                End If 
  1195.             End If 
  1196.          Else 
  1197.             Erase 15
  1198.          End If 
  1199.       End If 
  1200.       If A and 2
  1201.          _GETFLAG[34] : Rem iff animation
  1202.          Erase 10
  1203.          If Param
  1204.             E$=""
  1205.             Trap Open In 1,ANM$
  1206.             If Errtrap=0
  1207.                L=Frame Length(1)
  1208.                Trap Reserve As Work 10,L
  1209.                If Errtrap=0
  1210.                   Trap ANM_NF=Frame Load(1 To 10,100)-3
  1211.                   If Errtrap
  1212.                      E$=Resource$(85)+Resource$(71)
  1213.                   End If 
  1214.                Else 
  1215.                   E$=Resource$(85)+Resource$(71)
  1216.                End If 
  1217.             Else 
  1218.                E$=Resource$(71)
  1219.             End If 
  1220.             Trap Close 1
  1221.             If E$<>""
  1222.                Erase 10
  1223.                _INFO[E$] : _WAIT[50]
  1224.                _SETFLAG[34,0]
  1225.             End If 
  1226.          End If 
  1227.       End If 
  1228.       If A and 4
  1229.          _GETFLAG[35] : Rem Soundtrack 
  1230.          Erase 3
  1231.          If Param
  1232.             If Length(3)=0
  1233.                Trap Load SND$,3
  1234.                If Errtrap
  1235.                   Trap Med Load SND$,3
  1236.                   If Errtrap
  1237.                      If Errtrap<>188
  1238.                         Trap Track Load SND$,3
  1239.                      End If 
  1240.                      If Errtrap
  1241.                         _INFO[Resource$(72)] : _WAIT[50]
  1242.                         _SETFLAG[35,0] : Erase 3
  1243.                      End If 
  1244.                   End If 
  1245.                End If 
  1246.             End If 
  1247.          End If 
  1248.       End If 
  1249.       If FF
  1250.          Repeat : Multi Wait : Until Timer>50
  1251.          _NOINFO
  1252.       End If 
  1253.    End If 
  1254. End Proc
  1255. Procedure _LOW_RAM
  1256.    C=Chip Free : F=Fast Free
  1257.    If Chip Free<64*1024
  1258.       RAM$="64 K free chip"
  1259.    Else If(Chip Free+Fast Free)<160*1024
  1260.       RAM$="160 K free ram"
  1261.    End If 
  1262.    If RAM$<>""
  1263.       ER$="Sorry, AMOSPro-Compiler Shell needs at least "+RAM$+" to run."
  1264.       _GEST_ERR2
  1265.    End If 
  1266. End Proc
  1267. Procedure _MATCH[A$]
  1268.    A=0 : F=False
  1269.    Repeat 
  1270.       If A$=LST$(A) Then F=True : Exit 
  1271.       Inc A
  1272.    Until LST$(A)=""
  1273. End Proc[F]
  1274. Procedure _NOINFO
  1275.    Trap Dialog Close 2
  1276.    Trap Dialog Unfreeze 1
  1277. End Proc
  1278. Procedure _OPEN_FREE_SCREEN[SX,SY]
  1279.    On Error Goto _ERROR
  1280.    For S=0 To 7
  1281.       Trap Screen S
  1282.       If Errtrap
  1283.          Resource Screen Open S,SX,SY,0 : Screen Hide S
  1284.          Cls 0 : Paper 6 : Pen 7 : Flash Off 
  1285.          Wait Vbl 
  1286.          SOPEN(S)=True
  1287.          Pop Proc[S]
  1288.       End If 
  1289.    Next 
  1290.    _ERROR:
  1291. End Proc[-1]
  1292. Procedure _PLAY_SND
  1293.    On Error Proc _GEST_ERR
  1294.    Resume Label _NO_SOUND
  1295.    If Length(3)
  1296.       T$=Peek$(Start(3)-8,8)
  1297.       If T$="Music   "
  1298.          Trap Music 1
  1299.       Else If T$="Tracker "
  1300.          Track Loop On 
  1301.          Trap Track Play 3
  1302.       Else If T$="Med     "
  1303.          Trap Med Play 3
  1304.       Else If T$="Samples "
  1305.          Sam Bank 3
  1306.          Sam Loop On 
  1307.          Trap Sam Play 12,1
  1308.       End If 
  1309.    End If 
  1310.    Pop Proc
  1311.    _NO_SOUND:
  1312.    Trap Music Off 
  1313.    Trap Sam Stop 
  1314.    Trap Track Stop 
  1315.    Trap Med Stop 
  1316. End Proc
  1317. Procedure _QUIT[REQ]
  1318.    If REQ
  1319.       If CHANGE
  1320.          _WARN[Resource$(20),1]
  1321.          If Param=False
  1322.             Pop Proc
  1323.          End If 
  1324.       End If 
  1325.    End If 
  1326.    If Exist(TEMP_SRCE$) : Trap Kill TEMP_SRCE$ : End If 
  1327.    If Exist(TEMP_DEST$) : Trap Kill TEMP_DEST$ : End If 
  1328.    _GETFLAG[26]
  1329.    If Param=0 Then Extension_5_00A0 
  1330.    If DPATH$=PRAM$
  1331.       _GETFLAG[25]
  1332.       If Param=0
  1333.          _DEL_RAMLIBS
  1334.       End If 
  1335.    End If 
  1336.    Trap Dialog Close 
  1337.    Trap Close 
  1338.    _SCREEN_CLOSE[SCR,SCSY]
  1339.    For S=0 To 7
  1340.       If SOPEN(S) : Trap Screen Close S : End If 
  1341.    Next S
  1342.    Colour Back 0
  1343.    Trap Screen Show 9
  1344.    For I=2 To 15 : Trap Erase I : Next I
  1345.    Trap Erase 65000
  1346.    Edit 
  1347. End Proc
  1348. Procedure _SCREEN_OPEN[S,SY,OFF_X,OFF_Y]
  1349.    Amos To Front 
  1350.    Trap Screen S
  1351.    If Errtrap=0
  1352.       Screen Show S : Auto View On 
  1353.       For I=1 To SY Step SOP
  1354.          Screen Display S,OFF_X,OFF_Y,,I
  1355.          Wait Vbl 
  1356.       Next I
  1357.       Screen Display S,OFF_X,OFF_Y,,SY
  1358.    End If 
  1359. End Proc[Errtrap]
  1360. Procedure _SCREEN_CLOSE[S,SY]
  1361.    Trap Screen S
  1362.    If Errtrap=0
  1363.       For I=1 To SY Step SOP
  1364.          Screen Offset S,,I
  1365.          Screen Display S,,,,SY-I
  1366.          Wait Vbl 
  1367.       Next I
  1368.    End If 
  1369. End Proc[Errtrap]
  1370. Procedure _SETFLAG[N,V]
  1371.    Mid$(FLAG$,N,1)=Chr$(48+V)
  1372. End Proc
  1373. Procedure _SETUP[SETUP_DIRECT]
  1374.    On Error Proc _GEST_ERR
  1375.    Resume Label _FINISH_SETUP
  1376.    Dim L$(80)
  1377.    Trap Dialog Close 1
  1378.    FLAG_OLD$=FLAG$
  1379.    ANM_OLD$=ANM$
  1380.    SND_OLD$=SND$
  1381.    Dialog Open 1,1,60,1024*12
  1382.    Do 
  1383.       For I=4 To Len(FLAG$)
  1384.          _GETFLAG[I]
  1385.          Vdialog(1,I)=Param
  1386.       Next I
  1387.       Do 
  1388.          D1=Dialog Run(1,1)
  1389.          Do 
  1390.             Multi Wait 
  1391.             D1=Dialog(1)
  1392.             If D1=1
  1393.                FLAG$=FLAG_OLD$
  1394.                ANM$=ANM_OLD$
  1395.                SND$=SND_OLD$
  1396.                Exit 3
  1397.             Else If D1=2 and SETUP_DIRECT=0
  1398.                A=0
  1399.                If Vdialog(1,37)<>Asc(Mid$(FLAG_OLD$,37,1))-48 : A=1 : End If 
  1400.                If Vdialog(1,34)<>Asc(Mid$(FLAG_OLD$,34,1))-48 or ANM$<>ANM_OLD$ : A=A+2 : End If 
  1401.                If Vdialog(1,35)<>Asc(Mid$(FLAG_OLD$,35,1))-48 or SND$<>SND_OLD$ : A=A+4 : End If 
  1402.                _CONFIG_SET[72,FLAG$]
  1403.                _CONFIG_SET[73,ANM$]
  1404.                _CONFIG_SET[74,SND$]
  1405.                If DPATH$=PRAM$
  1406.                   _GETFLAG[24]
  1407.                   If Param=0
  1408.                      _DEL_RAMLIBS
  1409.                      DPATH$=PATH$
  1410.                   End If 
  1411.                Else 
  1412.                   _COPY_RAMLIBS
  1413.                End If 
  1414.                _LOAD_BANKS[A]
  1415.                Exit 3
  1416.             Else If D1=3
  1417.                
  1418.                ' Compiled prog setup 1
  1419.                FLAG_OLD2$=FLAG$
  1420.                Wait Vbl 
  1421.                D2=Dialog Run(1,2)
  1422.                Do 
  1423.                   Multi Wait 
  1424.                   D2=Dialog(1)
  1425.                   If D2=1
  1426.                      FLAG$=FLAG_OLD2$
  1427.                      Exit 3
  1428.                   Else If D2=2
  1429.                      Exit 3
  1430.                   Else If D2=15
  1431.                      _HELP["_DATAS_SETUP1_1"]
  1432.                   Else If D2>=3 and D2<8
  1433.                      D=D2+1
  1434.                      Vdialog(1,D)=Abs(Vdialog(1,D)-1)
  1435.                      _SETFLAG[D,Vdialog(1,D)]
  1436.                   Else If D2=8
  1437.                      
  1438.                      ' Compiled prog setup 2
  1439.                      D3=Dialog Run(1,3)
  1440.                      Do 
  1441.                         Multi Wait 
  1442.                         D3=Dialog(1)
  1443.                         If D3=1
  1444.                            FLAG$=FLAG_OLD2$
  1445.                            Exit 4
  1446.                         Else If D3=2
  1447.                            Exit 4
  1448.                         Else If D3=8
  1449.                            Exit 
  1450.                         Else If D3=15
  1451.                            _HELP["_DATAS_SETUP1_2"]
  1452.                         Else If D3>=3
  1453.                            D=D3+11
  1454.                            Vdialog(1,D)=Abs(Vdialog(1,D)-1)
  1455.                            _SETFLAG[D,Vdialog(1,D)]
  1456.                         End If 
  1457.                      Loop 
  1458.                      D2=Dialog Run(1,2)
  1459.                   End If 
  1460.                Loop 
  1461.             Else If D1=4
  1462.                
  1463.                ' Compiler setup 1 
  1464.                FLAG_OLD2$=FLAG$
  1465.                ANM_OLD2$=ANM$
  1466.                SND_OLD2$=SND$
  1467.                Wait Vbl 
  1468.                D2=Dialog Run(1,4)
  1469.                Do 
  1470.                   Multi Wait 
  1471.                   D2=Dialog(1)
  1472.                   If D2=1
  1473.                      FLAG$=FLAG_OLD2$
  1474.                      ANM$=ANM_OLD2$
  1475.                      SND$=SND_OLD2$
  1476.                      Exit 3
  1477.                   Else If D2=2
  1478.                      Exit 3
  1479.                   Else If D2=15
  1480.                      _HELP["_DATAS_SETUP2_1"]
  1481.                   Else If D2>=3 and D2<8
  1482.                      D=D2+21
  1483.                      Vdialog(1,D)=Abs(Vdialog(1,D)-1)
  1484.                      _SETFLAG[D,Vdialog(1,D)]
  1485.                   Else If D2=8
  1486.                      
  1487.                      ' Compiler setup 2 
  1488.                      D3=Dialog Run(1,5)
  1489.                      LMAX=(SCSX-Vdialog(1,0)*2-88)/8
  1490.                      Ink 5 : Text Vdialog(1,0)+24,Vdialog(1,1)+51,Left$(ANM$,LMAX)
  1491.                      Text Vdialog(1,0)+24,Vdialog(1,1)+75,Left$(SND$,LMAX)
  1492.                      Do 
  1493.                         Multi Wait 
  1494.                         D3=Dialog(1)
  1495.                         If D3=1
  1496.                            FLAG$=FLAG_OLD2$
  1497.                            ANM$=ANM_OLD2$
  1498.                            SND$=SND_OLD2$
  1499.                            Exit 4
  1500.                         Else If D3=2
  1501.                            Exit 4
  1502.                         Else If D3=9
  1503.                            Exit 
  1504.                         Else If D3=7
  1505.                            If Vdialog(1,3+31)
  1506.                               _EXTRACT_PATH[ANM$]
  1507.                               A$=Fsel$(Param$,ANM$-Param$,Resource$(2))
  1508.                               If A$<>""
  1509.                                  ANM$=A$
  1510.                                  Cls 6,Vdialog(1,0)+24,Vdialog(1,1)+45 To Vdialog(1,0)+24+LMAX*8,Vdialog(1,1)+53
  1511.                                  Ink 5 : Text Vdialog(1,0)+24,Vdialog(1,1)+51,Left$(ANM$,LMAX)
  1512.                               End If 
  1513.                            End If 
  1514.                         Else If D3=8
  1515.                            If Vdialog(1,4+31)
  1516.                               _EXTRACT_PATH[SND$]
  1517.                               A$=Fsel$(Param$,SND$-Param$,Resource$(2))
  1518.                               If A$<>""
  1519.                                  SND$=A$
  1520.                                  Cls 6,Vdialog(1,0)+24,Vdialog(1,1)+69 To Vdialog(1,0)+24+LMAX*8,Vdialog(1,1)+77
  1521.                                  Ink 5 : Text Vdialog(1,0)+24,Vdialog(1,1)+75,Left$(SND$,LMAX)
  1522.                               End If 
  1523.                            End If 
  1524.                         Else If D3=15
  1525.                            _HELP["_DATAS_SETUP2_2"]
  1526.                         Else If D3>=3
  1527.                            D=D3+31
  1528.                            Vdialog(1,D)=Abs(Vdialog(1,D)-1)
  1529.                            _SETFLAG[D,Vdialog(1,D)]
  1530.                         End If 
  1531.                      Loop 
  1532.                      D2=Dialog Run(1,4)
  1533.                   End If 
  1534.                Loop 
  1535.             Else If D1=5
  1536.                
  1537.                ' System set-up
  1538.                FLAG_OLD2$=FLAG$
  1539.                Do 
  1540.                   Wait Vbl 
  1541.                   D2=Dialog Run(1,6)
  1542.                   Do 
  1543.                      Multi Wait 
  1544.                      D2=Dialog(1)
  1545.                      If D2=1
  1546.                         FLAG$=FLAG_OLD2$
  1547.                         Exit 4
  1548.                      Else If D2=2
  1549.                         Exit 4
  1550.                      Else If D2=15
  1551.                         _HELP["_DATAS_SETUP3"]
  1552.                      Else If D2=3
  1553.                         Dialog Freeze 1
  1554.                         Dialog Open 2,1
  1555.                         _CONFIG_GET[0]
  1556.                         Vdialog$(2,1)=Param$
  1557.                         Vdialog$(2,0)=Resource$(181)
  1558.                         D3=Dialog Run(2,8)
  1559.                         Do 
  1560.                            Multi Wait 
  1561.                            D3=Dialog(2)
  1562.                            If D3=1
  1563.                               Dialog Close 2
  1564.                               Exit 2
  1565.                            Else If D3=2
  1566.                               _CONFIG_SET[0,Rdialog$(2,3)]
  1567.                               Dialog Close 2
  1568.                               Exit 2
  1569.                            End If 
  1570.                         Loop 
  1571.                      Else If D2>=4 and D2<=6
  1572.                         If D2=4
  1573.                            CF=1
  1574.                            For I=1 To 14
  1575.                               _CONFIG_GET[I]
  1576.                               L$(I-CF)=Param$
  1577.                            Next I
  1578.                            Vdialog$(1,0)=Resource$(182)
  1579.                            Vdialog(1,2)=Array(L$(0))
  1580.                            Vdialog(1,1)=14
  1581.                            H$="_DATAS_SETUP3_1"
  1582.                         Else If D2=5
  1583.                            CF=15
  1584.                            For I=15 To 39
  1585.                               _CONFIG_GET[I]
  1586.                               L$(I-CF)=Param$
  1587.                            Next I
  1588.                            Vdialog$(1,0)=Resource$(183)
  1589.                            Vdialog(1,2)=Array(L$(0))
  1590.                            Vdialog(1,1)=24
  1591.                            H$="_DATAS_SETUP3_2"
  1592.                         Else 
  1593.                            CF=40
  1594.                            For I=40 To 71
  1595.                               _CONFIG_GET[I]
  1596.                               L$(I-CF)=Param$
  1597.                            Next I
  1598.                            Vdialog$(1,0)=Resource$(184)
  1599.                            Vdialog(1,2)=Array(L$(0))
  1600.                            Vdialog(1,1)=32
  1601.                            CF=40
  1602.                            H$="_DATAS_SETUP3_3"
  1603.                         End If 
  1604.                         Vdialog(1,3)=0
  1605.                         Vdialog(1,4)=0
  1606.                         Do 
  1607.                            D3=Dialog Run(1,7)
  1608.                            Do 
  1609.                               Multi Wait 
  1610.                               D3=Dialog(1)
  1611.                               If D3=1
  1612.                                  Exit 3
  1613.                               Else If D3=2
  1614.                                  Exit 3
  1615.                               Else If D3=4
  1616.                                  L=Rdialog(1,4)
  1617.                                  Dialog Freeze 1
  1618.                                  Dialog Open 2,1
  1619.                                  Vdialog$(2,1)=L$(L)
  1620.                                  Vdialog$(2,0)=Resource$(185)+Str$(L+1)
  1621.                                  D4=Dialog Run(2,8)
  1622.                                  Do 
  1623.                                     Multi Wait 
  1624.                                     D4=Dialog(2)
  1625.                                     If D4=1
  1626.                                        Dialog Close 2
  1627.                                        Exit 2
  1628.                                     Else If D4=2
  1629.                                        L$(L)=Rdialog$(2,3)
  1630.                                        _CONFIG_SET[CF+L,L$(L)]
  1631.                                        Dialog Close 2
  1632.                                        Exit 2
  1633.                                     End If 
  1634.                                  Loop 
  1635.                               Else If D3=15
  1636.                                  _HELP[H$]
  1637.                               End If 
  1638.                            Loop 
  1639.                         Loop 
  1640.                      End If 
  1641.                   Loop 
  1642.                Loop 
  1643.             Else If D1=6
  1644.                
  1645.                ' Load config
  1646.                F$=Fsel$(Dir$+"**","",Resource$(22))
  1647.                If F$<>""
  1648.                   _CONFIG_LOAD[F$]
  1649.                   _CONFIG_GET[72]
  1650.                   FL$=Param$
  1651.                   If Len(FL$)<43
  1652.                      _INFO[Resource$(77)]
  1653.                      _CONFIG_SET[72,FLAG$]
  1654.                      _CONFIG_SET[73,ANM$]
  1655.                      _CONFIG_SET[74,SND$]
  1656.                      _WAIT[50] : _NOINFO
  1657.                   End If 
  1658.                   _CONFIG_GET[73] : ANM$=Param$
  1659.                   _CONFIG_GET[74] : SND$=Param$
  1660.                End If 
  1661.             Else If D1=7 or(D1=2 and SETUP_DIRECT)
  1662.                
  1663.                ' Save default 
  1664.                If CNAME$="" : CNAME$=Fsel$(Dir$+"**","",Resource$(22)) : End If 
  1665.                If CNAME$<>""
  1666.                   A=0
  1667.                   If Vdialog(1,37)<>Asc(Mid$(FLAG_OLD$,37,1))-48 : A=1 : End If 
  1668.                   If Vdialog(1,34)<>Asc(Mid$(FLAG_OLD$,34,1))-48 or ANM$<>ANM_OLD$ : A=A+2 : End If 
  1669.                   If Vdialog(1,35)<>Asc(Mid$(FLAG_OLD$,35,1))-48 or SND$<>SND_OLD$ : A=A+4 : End If 
  1670.                   _CONFIG_SET[72,FLAG$]
  1671.                   _CONFIG_SET[73,ANM$]
  1672.                   _CONFIG_SET[74,SND$]
  1673.                   _CONFIG_SAVE[CNAME$]
  1674.                   If Param=0
  1675.                      If DPATH$=PRAM$
  1676.                         _CONFIG_SAVE[PRAM$+"AMOSPro_Compiler_Config"]
  1677.                         _GETFLAG[24]
  1678.                         If Param=0
  1679.                            _DEL_RAMLIBS
  1680.                            DPATH$=PATH$
  1681.                         End If 
  1682.                      Else 
  1683.                         _COPY_RAMLIBS
  1684.                      End If 
  1685.                      _LOAD_BANKS[A]
  1686.                      Exit 3
  1687.                   Else 
  1688.                      _WARN[Resource$(76),0]
  1689.                   End If 
  1690.                End If 
  1691.             Else If D1=8
  1692.                
  1693.                ' save as
  1694.                F$=Fsel$("**","",Resource$(23))
  1695.                If F$<>""
  1696.                   _CONFIG_SAVE[F$]
  1697.                   If Param
  1698.                      _WARN[Resource$(76),0]
  1699.                   Else 
  1700.                      If DPATH$=PRAM$
  1701.                         _CONFIG_SAVE[PRAM$+"AMOSPro_Compiler_Config"]
  1702.                      End If 
  1703.                   End If 
  1704.                End If 
  1705.             Else If D1=15
  1706.                _HELP["_DATAS_SETUP"]
  1707.             End If 
  1708.          Loop 
  1709.       Loop 
  1710.    Loop 
  1711.    _FINISH_SETUP:
  1712.    Trap Dialog Close 1
  1713.    _INIT_DISPLAY
  1714. End Proc
  1715. Procedure _SQUASH_A_PROG[S$,SZ]
  1716.    On Error Proc _GEST_ERR
  1717.    Resume Label _FINISH_SQUASH
  1718.    D$=S$+"_Temp"
  1719.    FIRST=1
  1720.    _INFO[Resource$(54)]
  1721.    ' Squash Generic Procedure 
  1722.    Trap Open In 1,S$
  1723.    If Errtrap Then Goto _FINISH_SQUASH
  1724.    Open Out 2,D$
  1725.    HEAD1$=Input$(1,12)
  1726.    NHUNK=Leek(Varptr(HEAD1$)+8)
  1727.    HEAD2$=Input$(1,4*(2+NHUNK))
  1728.    Print #2,HEAD1$;
  1729.    Print #2,HEAD2$;
  1730.    For H=0 To NHUNK-1
  1731.       FLAG=True : If FIRST<>0 and H=0 and NHUNK>1 : FLAG=0 : End If 
  1732.       Gosub SQHUNK
  1733.       Exit If BRK
  1734.       Loke Varptr(HEAD2$)+4*(2+H),HH
  1735.    Next 
  1736.    If BRK=0
  1737.       Pof(2)=12
  1738.       Print #2,HEAD2$;
  1739.       LPROG=Lof(2)
  1740.       Close 
  1741.    Else 
  1742.       Close 
  1743.       Kill D$
  1744.       LPROG=0
  1745.    End If 
  1746.    Goto SQEND
  1747.    Resume Label KK
  1748.    Kill D$
  1749.    KK: LPROG=-1
  1750.    Goto SQEND
  1751.    SQHUNK:
  1752.    H$=Input$(1,8) : Pof(1)=Pof(1)-8
  1753.    HH=Leek(Varptr(H$)) and $C0000000
  1754.    LP=Leek(Varptr(H$)+4) : HH=HH or LP : Rol.l 2,LP
  1755.    Add LP,8+4
  1756.    F=0
  1757.    Erase 8 : Reserve As Work 8,LP+16
  1758.    OLDPOF=Pof(1)
  1759.    _ONCE_AGAIN:
  1760.    AP=Start(8) : P=0
  1761.    Repeat 
  1762.       L=2048 : If P+L>LP : L=LP-P : End If 
  1763.       A$=Input$(1,L)
  1764.       Copy Varptr(A$),Varptr(A$)+L To AP
  1765.       Add P,L : Add AP,L
  1766.    Until P>=LP
  1767.    AP=Start(8)
  1768.    If FLAG<>0 and F=0 and LP>256
  1769.       If Leek(AP)<>$78566467
  1770.          L= Extension_5_00CE(AP+8,LP-12,-1,512,17)
  1771.          If L=-1
  1772.             Pof(1)=OLDPOF : F=-1 : Goto _ONCE_AGAIN
  1773.          End If 
  1774.          If L=-2 : BRK=-1 : Goto _ABORT : End If 
  1775.          LH=(L+3) and $FFFFFFFC
  1776.          Copy AP+8,AP+8+LH To AP+8+12
  1777.          Loke AP+8,$78566467 : Loke AP+12,LP : Loke AP+16,L
  1778.          Add LH,12 : Loke AP+4,LH/4
  1779.          HH=(HH and $C0000000) or(LH/4)
  1780.          Loke AP+8+LH,$3F2
  1781.          LP=8+LH+4
  1782.       End If 
  1783.    End If 
  1784.    A$=Space$(2048) : P=0
  1785.    Repeat 
  1786.       L=2048 : If P+L>LP : L=LP-P : End If 
  1787.       Copy AP,AP+L To Varptr(A$)
  1788.       Print #2,Left$(A$,L);
  1789.       Add P,L : Add AP,L
  1790.    Until P>=LP
  1791.    _ABORT:
  1792.    Erase 8
  1793.    Return 
  1794.    ' end
  1795.    SQEND:
  1796.    If LPROG>0
  1797.       A$=Resource$(50)+Str$(LPROG)+","+Str$(SZ-LPROG)+Resource$(51)
  1798.       _INFO[A$]
  1799.    Else If LPROG=0
  1800.       _INFO[Resource$(53)]
  1801.    Else If LPROG<0
  1802.       _INFO[Resource$(52)]
  1803.    End If 
  1804.    Resume Label NOKIL1
  1805.    Kill S$
  1806.    NOKIL1:
  1807.    Resume Label NOKIL2
  1808.    Rename D$ To S$
  1809.    NOKIL2:
  1810.    _WAIT[150]
  1811.    _FINISH_SQUASH:
  1812.    _NOINFO
  1813. End Proc
  1814. Procedure _STOP_SND
  1815.    On Error Proc _GEST_ERR
  1816.    Resume Label _END
  1817.    If Length(3)
  1818.       T$=Peek$(Start(3)-8,8)
  1819.       If T$="Music   "
  1820.          Trap Music Off 
  1821.       Else If T$="Tracker "
  1822.          Trap Track Stop 
  1823.       Else If T$="Med     "
  1824.          Trap Med Stop 
  1825.       Else If T$="Samples "
  1826.          Trap Sam Stop 
  1827.       End If 
  1828.    End If 
  1829.    _END:
  1830. End Proc
  1831. Procedure _STRING_FILTER[A$]
  1832.    A$=Mid$(A$,2,Len(A$)-9)
  1833.    For I=Len(A$) To 1 Step -1
  1834.       Exit If Mid$(A$,I,1)<>" "
  1835.    Next I
  1836.    A$=Left$(A$,I)
  1837. End Proc[A$]
  1838. Procedure _UPDATE_BUTTONS[A]
  1839.    On Error Proc _GEST_ERR2
  1840.    CHANGE=True
  1841.    If A=0
  1842.       If Prg Under<>1
  1843.          A$="DAT2_"+Right$("0"+(Str$(10*Vdialog(1,51)+Vdialog(1,52))-" "),2)
  1844.          Trap Restore A$
  1845.          If Errtrap : Restore DAT2_14 : End If 
  1846.          DAT2_14:
  1847.          Data 0,2,1,-1
  1848.          Data 0,0,0,0,4,-1
  1849.          Data 0,0,0,0,0,6,7,5,-1
  1850.          DAT2_24:
  1851.          Data 0,2,1,-1
  1852.          Data 0,0,0,0,4,-1
  1853.          Data 0,0,0,0,0,6,7,5,-1
  1854.       Else 
  1855.          A$="DAT"+Right$("0"+(Str$(10*Vdialog(1,51)+Vdialog(1,52))-" "),2)
  1856.          Trap Restore A$
  1857.          If Errtrap : Restore DAT14 : End If 
  1858.          DAT03:
  1859.          Data 1,2,0,-1
  1860.          Data 0,0,0,4,3,-1
  1861.          Data 0,0,0,0,0,5,-1
  1862.          DAT04:
  1863.          Data 1,2,0,-1
  1864.          Data 0,0,0,4,3,-1
  1865.          Data 0,0,0,0,0,6,7,5,-1
  1866.          DAT13:
  1867.          Data 1,2,0,-1
  1868.          Data 0,0,0,4,3,-1
  1869.          Data 0,0,0,0,0,5,-1
  1870.          DAT14:
  1871.          Data 1,2,0,-1
  1872.          Data 0,0,0,4,3,-1
  1873.          Data 0,0,0,0,0,6,7,5,-1
  1874.          DAT24:
  1875.          Data 1,2,0,-1
  1876.          Data 0,0,0,0,4,-1
  1877.          Data 0,0,0,0,0,6,7,5,-1
  1878.       End If 
  1879.       For BUTT=2 To 4
  1880.          I=0
  1881.          Do 
  1882.             Read VA
  1883.             Exit If VA<0
  1884.             Vdialog(1,40+BUTT*10+I)=VA
  1885.             Inc I
  1886.          Loop 
  1887.       Next BUTT
  1888.    Else 
  1889.       If Prg Under<>1
  1890.          Pop Proc
  1891.       Else 
  1892.          If A=2
  1893.             If Vdialog(1,51)<=1
  1894.                If Vdialog(1,52)=3
  1895.                   Restore DAT20
  1896.                   DAT20:
  1897.                   Data 2
  1898.                   Data 3,0,0,0,4,3,-1
  1899.                   Data 4,0,0,0,0,0,5,-1
  1900.                Else 
  1901.                   Restore DAT21
  1902.                   DAT21:
  1903.                   Data 2
  1904.                   Data 3,0,0,0,4,3,-1
  1905.                   Data 4,0,0,0,0,0,6,7,5,-1
  1906.                End If 
  1907.             Else 
  1908.                Restore DAT22
  1909.                DAT22:
  1910.                Data 2
  1911.                Data 3,0,0,0,0,4,-1
  1912.                Data 4,0,0,0,0,0,6,7,5,-1
  1913.             End If 
  1914.          Else 
  1915.             If A=3
  1916.                If Vdialog(1,52)=3
  1917.                   Restore DAT30
  1918.                   DAT30:
  1919.                   Data 1
  1920.                   Data 4,0,0,0,0,0,5,-1
  1921.                Else 
  1922.                   Restore DAT31
  1923.                   DAT31:
  1924.                   Data 1
  1925.                   Data 4,0,0,0,0,0,6,7,5,-1
  1926.                End If 
  1927.             Else 
  1928.                Pop Proc
  1929.             End If 
  1930.          End If 
  1931.          Read NB_LIST
  1932.          For J=1 To NB_LIST
  1933.             FLAG=True
  1934.             Read BUTT
  1935.             I=0
  1936.             Do 
  1937.                Read V
  1938.                Exit If V<0
  1939.                VA=V
  1940.                If VA=Vdialog(1,50+BUTT-1) : FLAG=False : End If 
  1941.                Vdialog(1,40+BUTT*10+I)=VA
  1942.                Inc I
  1943.             Loop 
  1944.             If FLAG
  1945.                Vdialog(1,50+BUTT-1)=VA
  1946.                _SETFLAG[BUTT-1,Vdialog(1,50+BUTT-1)+5*(BUTT=4)+3*(BUTT=3)]
  1947.                Dialog Update 1,BUTT
  1948.             End If 
  1949.          Next J
  1950.       End If 
  1951.    End If 
  1952. End Proc
  1953. Procedure _WAIT[T]
  1954.    Clear Key 
  1955.    For I=1 To T
  1956.       Multi Wait 
  1957.       Exit If Mouse Key or Inkey$<>""
  1958.    Next I
  1959.    Repeat 
  1960.       Multi Wait 
  1961.    Until Mouse Key=0
  1962. End Proc
  1963. Procedure _WARN[A$,REQUESTER]
  1964.    L=Len(A$)*8
  1965.    Trap Dialog Open 3,1
  1966.    If Errtrap=0
  1967.       Vdialog(3,0)=REQUESTER
  1968.       Vdialog$(3,1)=A$
  1969.       Trap D=Dialog Run(3,13)
  1970.       If Errtrap=0
  1971.          Trap Dialog Freeze 1
  1972.          Trap Dialog Freeze 2
  1973.          If REQUESTER=1
  1974.             Repeat 
  1975.                Multi Wait 
  1976.                D=Dialog(3)
  1977.             Until D=1 or D=2
  1978.          Else 
  1979.             _WAIT[250]
  1980.          End If 
  1981.          Dialog Close 3
  1982.          Trap Dialog Unfreeze 1
  1983.          Trap Dialog Unfreeze 2
  1984.          Pop Proc[(D=2)]
  1985.       End If 
  1986.    End If 
  1987.    Trap Dialog Close 3
  1988.    ER$=Resource$(84)
  1989.    _GEST_ERR2
  1990. End Proc