home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Amos / amproe2x.dms / in.adf / Interpreter_Config.AMOS / Interpreter_Config.amosSourceCode < prev   
Encoding:
AMOS Source Code  |  1993-06-16  |  13.3 KB  |  522 lines

  1. ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
  2. '
  3. ' AMOSPro Interpreter Configuration V 2.0  
  4. '
  5. ' By Fran�ois Lionet 
  6. '
  7. ' Additionnal code by Jean-Baptiste Bolcato  
  8. '
  9. ' (c) 1993 Europress Software Ltd. 
  10. '
  11. ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  12.  
  13. Set Buffer 16
  14. ' If called from the editor's menu 
  15. Set Accessory 
  16. ' Will only have effect it the program is runned alone...  
  17. Close Editor 
  18.  
  19. Global XDI,YDI,YSI,SOP,QUIT,OPEN
  20. Global BNAME$
  21. Global STMX,NST
  22. Global MX,MY,MK,MZ,MS
  23. Global BKPOS,BKCHANGE,ABK,ADAT,BK,TBNK,BKCHUNKS
  24. Global ESX,ESY,D_NAME$
  25.  
  26. ' Maximum number of strings
  27. STMX=64
  28. Dim ST$(STMX)
  29. Global ST$(),STAD
  30. Dim FLAGS(16)
  31. Global FLAGS()
  32.  
  33. ' Default work bank
  34. BK=10
  35.  
  36. ' Location of the default config 
  37. D_NAME$="S:AMOSPro_Interpreter_Config"
  38.  
  39. ' Opening speed
  40. SOP=16 : OPEN=False
  41.  
  42. ' Get Editor size
  43. ADAT=Leek(Dreg(3))
  44. If ADAT Then ESX=Deek(ADAT) : XDI=Deek(ADAT+4)
  45. If ESX<640 Then ESX=640 : XDI=128
  46. ESY=200 : YDI=45 : YSI=ESY
  47.  
  48. Resource Bank 16
  49. INIT_SCREEN
  50. BANK_NEW
  51. MN_MAIN
  52.  
  53. Procedure MN_MAIN
  54.    Do 
  55.       If BNAME$=""
  56.          Vdialog$(1,0)=Resource$(2)+Resource$(53)
  57.       Else 
  58.          If BNAME$=D_NAME$
  59.             Vdialog$(1,0)=Resource$(2)+Resource$(54)
  60.          Else 
  61.             Vdialog$(1,0)=Resource$(2)+Right$(BNAME$,32)
  62.          End If 
  63.       End If 
  64.       D=Dialog Run(1,1)
  65.       OPEN_SCREEN[0]
  66.       Repeat 
  67.          Multi Wait 
  68.          D=Dialog(1)
  69.          On D Proc MN_LEAVE,MN_DLOAD,MN_NLOAD,MN_SAVE,MN_SAVEAS,MN_EXT,MN_SETUP1,MN_SETUP2,MN_FILES
  70.       Until QUIT
  71.       QUIT=0
  72.    Loop 
  73. End Proc
  74. Procedure MN_LEAVE
  75.    D=2
  76.    If BKCHANGE : D=Dialog Box(1,1,Resource$(11)) : End If 
  77.    If D=2
  78.       MN_QUIT
  79.    End If 
  80. End Proc
  81. Procedure MN_DLOAD
  82.    MN_LOADIT[D_NAME$]
  83. End Proc
  84. Procedure MN_NLOAD
  85.    MN_LOADIT[""]
  86. End Proc
  87. Procedure MN_LOADIT[F$]
  88.    Dialog Freeze 
  89.    D=2 : If BKCHANGE : D=Dialog Box(1,1,Resource$(11)) : End If 
  90.    If D=2
  91.       BANK_NEW : QUIT=-1
  92.       If F$=""
  93.          F$=Fsel$("**","",Resource$(14))
  94.          If F$="" : Goto _END : End If 
  95.       End If 
  96.       BNAME$=""
  97.       On Error Goto _ERR
  98.       Open In 1,F$ : L=Lof(1) : Close 
  99.       Reserve As Work BK,L+8*1024
  100.       Bload F$,Start(BK) : ABK=Start(BK)
  101.       If Peek$(ABK,4)="PId1"
  102.          STAD=ABK+Leek(ABK+4)+8
  103.          If Peek$(STAD,4)="PIt1"
  104.             ADAT=ABK+8 : BNAME$=F$
  105.             ' Strings
  106.             A=STAD+8
  107.             For ST=1 To STMX
  108.                L=Peek(A+1) : Exit If L=$FF
  109.                ST$(ST)=Peek$(A+2,L)
  110.                Add A,L+2
  111.             Next 
  112.          End If 
  113.       End If 
  114.       If BNAME$="" : D=Dialog Box(1,2,Resource$(15)) : End If 
  115.    End If 
  116.    Goto _END
  117.    _ERR: Resume _DIA
  118.    _DIA: Bell : D=Dialog Box(1,2,Resource$(55)) : BNAME$="" : Goto _END
  119.    _END: Dialog Unfreeze 
  120. End Proc
  121. Procedure MN_SAVE
  122.    MN_SAVEIT[BNAME$]
  123. End Proc
  124. Procedure MN_SAVEAS
  125.    MN_SAVEIT[""]
  126. End Proc
  127. Procedure MN_SAVEIT[F$]
  128.    If BNAME$="" : D=Dialog Box(1,2,Resource$(56)) : Pop Proc : End If 
  129.    Dialog Freeze 
  130.    If F$=""
  131.       F$=Fsel$("**","",Resource$(14))
  132.       If F$="" : Goto _END : End If 
  133.    End If 
  134.    
  135.    ' Poke the strings back into the bank
  136.    AP=STAD+8
  137.    For S=1 To STMX
  138.       Poke AP,0
  139.       Poke AP+1,Len(ST$(S))
  140.       Poke$ AP+2,ST$(S)
  141.       Add AP,2+Len(ST$(S))
  142.    Next 
  143.    Poke AP,0 : Poke AP+1,$FF : Add AP,2
  144.    Loke STAD+4,AP-STAD-8
  145.    AP=AP+AP mod 2
  146.    
  147.    ' Save the data zone to disc 
  148.    On Error Goto _ERR
  149.    Bsave F$,ABK To AP
  150.    BKCHANGE=0 : BNAME$=F$
  151.    D=Dialog Box(1,2,Resource$(52))
  152.    Goto _END
  153.    
  154.    _ERR: Resume _DIA
  155.    _DIA: D=Dialog Box(1,2,Resource$(57)) : BNAME$="" : Goto _END
  156.    _END: Dialog Unfreeze 
  157. End Proc
  158. Procedure MN_EXT
  159.    If BNAME$="" : D=Dialog Box(1,2,Resource$(56)) : Pop Proc : End If 
  160.    Dim TMP$(26)
  161.    For S=16 To 42
  162.       TMP$(N)=ST$(S) : Inc N
  163.    Next 
  164.    POS=0
  165.    Do 
  166.       Vdialog(1,2)=POS
  167.       Vdialog(1,3)=Array(TMP$(0))
  168.       D=Dialog Run(1,2)
  169.       Repeat 
  170.          Multi Wait 
  171.          D=Dialog(1)
  172.          POS=Rdialog(1,2)
  173.          Exit If D=1,2
  174.          If D=3
  175.             N=Rdialog(1,3)
  176.             MN_EDIT[Resource$(18)+Str$(N+1),TMP$(N)]
  177.             TMP$(N)=Param$
  178.             QUIT=-1 : Inc BKCHANGE
  179.          End If 
  180.       Until QUIT
  181.       QUIT=0
  182.    Loop 
  183.    N=0
  184.    For S=16 To 42
  185.       ST$(S)=TMP$(N) : Inc N
  186.    Next 
  187.    QUIT=-1
  188. End Proc
  189. Procedure MN_FILES
  190.    If BNAME$="" : D=Dialog Box(1,2,Resource$(56)) : Pop Proc : End If 
  191.    Dim TMP$(15)
  192.    For S=1 To 15
  193.       TMP$(N)=ST$(S) : Inc N
  194.    Next 
  195.    POS=0
  196.    Do 
  197.       Vdialog(1,2)=POS
  198.       Vdialog(1,3)=Array(TMP$(0))
  199.       D=Dialog Run(1,4)
  200.       Repeat 
  201.          Multi Wait 
  202.          D=Dialog(1)
  203.          POS=Rdialog(1,2)
  204.          Exit If D=1,2
  205.          If D=3
  206.             N=Rdialog(1,3)
  207.          If N=0 : T=23 Else T=24 : End If 
  208.             MN_EDIT[Resource$(T),TMP$(N)]
  209.             TMP$(N)=Param$
  210.             QUIT=-1 : Inc BKCHANGE
  211.          End If 
  212.       Until QUIT
  213.       QUIT=0
  214.    Loop 
  215.    N=0
  216.    For S=1 To 15
  217.       ST$(S)=TMP$(N) : Inc N
  218.    Next 
  219.    QUIT=-1
  220. End Proc
  221. Procedure MN_EDIT[T$,S$]
  222.    Vdialog$(1,1)=S$
  223.    Vdialog$(1,2)=T$
  224.    D=Dialog Run(1,3)
  225.    If D=2 : S$=Rdialog$(1,3) : End If 
  226. End Proc[S$]
  227. Procedure MN_SETUP1
  228.    If BNAME$="" : D=Dialog Box(1,2,Resource$(56)) : Pop Proc : End If 
  229.    Do 
  230.       ' Grab the flags 
  231.       For F=0 To 8
  232.          If Peek(ADAT+34+F)
  233.             Vdialog(1,2+F)=1
  234.          Else 
  235.             Vdialog(1,2+F)=0
  236.          End If 
  237.       Next 
  238.       D=Dialog Run(1,5)
  239.       Repeat 
  240.          Multi Wait 
  241.          D=Dialog(1)
  242.          Exit If D=1,2
  243.          If D=11 : MN_SCREEN[Resource$(43),ADAT+48,480,704,80,288,2,1] : End If 
  244.          If D=12 : MN_SCREEN[Resource$(44),ADAT+58,320,704,80,288,2,1] : End If 
  245.          If D=13 : MN_DEFAULT : End If 
  246.       Until QUIT
  247.       QUIT=0
  248.    Loop 
  249.    For F=0 To 8
  250.       Poke ADAT+34+F,Vdialog(1,2+F)
  251.    Next 
  252.    QUIT=-1 : Inc BKCHANGE
  253. End Proc
  254. Procedure MN_SETUP2
  255.    If BNAME$="" : D=Dialog Box(1,2,Resource$(56)) : Pop Proc : End If 
  256.    Do 
  257.       ' Number of bobs 
  258.       SETVDIA[16,Deek(ADAT+8),8,256,1]
  259.       ' Number of sprites
  260.       SETVDIA[20,Leek(ADAT+16),16,312,2]
  261.       ' Copper List
  262.       SETVDIA[24,Leek(ADAT+12)/1024,2,32,1]
  263.       ' Variable name buffer 
  264.       SETVDIA[28,Leek(ADAT+20)/1024,1,32,1]
  265.       ' Default buffer 
  266.       SETVDIA[32,Leek(ADAT+26)/1024,1,2048,1]
  267.       ' Ports  
  268.       Vdialog$(1,2)=ST$(43) : Vdialog$(1,3)=ST$(44)
  269.       ' Amiga-A
  270.       If Leek(ADAT+148)
  271.          A$=Upper$(Chr$(Peek(ADAT+151))) : S=Peek(ADAT+149)
  272.       Else 
  273.          A$="A" : S=$40
  274.       End If 
  275.       Vdialog$(1,4)=A$
  276.       For A=0 To 7
  277.          B=0 : If Btst(A,S) : B=1 : End If 
  278.          Vdialog(1,A+5)=B
  279.       Next 
  280.       D=Dialog Run(1,6)
  281.       Repeat 
  282.          Multi Wait 
  283.          D=Dialog(1)
  284.          Exit If D=1,2
  285.       Until QUIT
  286.       QUIT=0
  287.    Loop 
  288.    ' Number of bobs 
  289.    Doke ADAT+8,Vdialog(1,16)
  290.    ' Number of sprites
  291.    Loke ADAT+16,Vdialog(1,20)
  292.    ' Copper List
  293.    Loke ADAT+12,Vdialog(1,24)*1024
  294.    ' Variable name buffer 
  295.    Loke ADAT+20,Vdialog(1,28)*1024
  296.    ' Default buffer 
  297.    Loke ADAT+26,Vdialog(1,32)*1024
  298.    ' Ports  
  299.    ST$(43)=Rdialog$(1,2) : ST$(44)=Rdialog$(1,3)
  300.    ' Amiga-A
  301.    A$=Upper$(Left$(Rdialog$(1,4),1))
  302.    If A$>="A" and A$<="Z"
  303.       Poke ADAT+151,Asc(A$) : Poke ADAT+150,Asc(Lower$(A$))
  304.       S=0 : For A=0 To 7 : If Rdialog(1,A+5) : Bset A,S : End If : Next 
  305.       Poke ADAT+149,S
  306.    End If 
  307.    QUIT=-1 : Inc BKCHANGE
  308. End Proc
  309. Procedure MN_DEFAULT
  310.    NPLAN_MAX=4 : Rem 16 colours max (boost up to 8 when AGA-256 colours)
  311.    Dim S(256),SS(256),C(NPLAN_MAX)
  312.    For C=0 To 15 : S(C)=Deek(ADAT+C*2+80) : SS(C)=S(C) : Next 
  313.    NPLAN=Deek(ADAT+72)
  314.    C(1)=2 : C(2)=4 : C(3)=8 : C(4)=16
  315.    Rem C(5)=32 : C(6)=64: C(7)=128 : C(8)=256 
  316.    CUR=0
  317.    HIR=1 : If Deek(ADAT+76) and $8000 : Inc HIR : End If 
  318.    LAC=1 : If Deek(ADAT+76) and $4 : Inc LAC : End If 
  319.    Reserve As Work 100,16 : SCR=Start(100)
  320.    Loke SCR,Leek(ADAT+68)
  321.    X=Deek(ADAT+144) : If X=0 : X=128 : End If 
  322.    Y=Deek(ADAT+146) : If Y=0 : Y=50 : End If 
  323.    Doke SCR+4,X : Doke SCR+6,Y : Doke SCR+8,0
  324.    Do 
  325.       NCOL=C(NPLAN) : W=ESX-88-24
  326.       SETVDIA[16,NPLAN,1,NPLAN_MAX+1,1]
  327.       Vdialog(1,3)=HIR-1
  328.       Vdialog(1,4)=LAC-1
  329.       Vdialog(1,20)=NCOL
  330.       D=Dialog Run(1,8)
  331.       Ink 1 : Bar 88,113 To ESX-24,119
  332.       Do 
  333.          NCOL=C(NPLAN)
  334.          If CUR>NCOL : CUR=NCOL : End If 
  335.          C=S(CUR) : Colour 1,C
  336.          R=(C and $F00)/$100 : G=(C and $F0)/$10 : B=C and $F
  337.          Dialog Update 1,6,CUR,1,NCOL
  338.          Dialog Update 1,7,R
  339.          Dialog Update 1,8,G
  340.          Dialog Update 1,9,B
  341.          CUR$=Str$(CUR)
  342.          If Len(CUR$)=2 : CUR$=CUR$+" " : End If 
  343.          If Len(CUR$)=4 : CUR$=CUR$-" " : End If 
  344.          Ink 3,Point(31,118) : Text 32,118,CUR$
  345.          Repeat 
  346.             Multi Wait 
  347.             D=Dialog(1)
  348.             Exit If D=1,3
  349.             If D=3 : HIR=Vdialog(1,3)+1 : End If 
  350.             If D=4 : LAC=Vdialog(1,4)+1 : End If 
  351.             If D=7 : R=Rdialog(1,7) : Inc F : End If 
  352.             If D=8 : G=Rdialog(1,8) : Inc F : End If 
  353.             If D=9 : B=Rdialog(1,9) : Inc F : End If 
  354.             If D=10 : C=SS(CUR) : S(CUR)=C : Colour 1,C : Exit : End If 
  355.             If F : Gosub _SET : Colour 1,C : End If 
  356.             If D=6 : Gosub _SET : CUR=Rdialog(1,6) : Exit : End If 
  357.             If D=16 : NPLAN=Vdialog(1,16) : Exit : End If 
  358.             If D=5
  359.                If HIR=1 : If Deek(SCR)>384 : Doke SCR,Deek(SCR)/2 : End If : End If 
  360.                If LAC=1 : If Deek(SCR+2)>288 : Doke SCR+2,Deek(SCR+2)/2 : End If : End If 
  361.                MN_SCREEN[Resource$(67),SCR,240,384*HIR,32,288*LAC,HIR,LAC]
  362.                Exit 2
  363.             End If 
  364.          Until QUIT
  365.          QUIT=0
  366.       Loop 
  367.    Loop 
  368.    
  369.    ' *** modidy here to save more than 16 colours! ***  
  370.    For C=0 To 15 : Doke ADAT+C*2+80,S(C) : Next : Doke ADAT+78,S(0)
  371.    Doke ADAT+72,NPLAN : Doke ADAT+74,NCOL
  372.    R=0
  373.    If HIR=2 : R=$8000 : End If 
  374.    If LAC=2 : R=R or $4 : End If 
  375.    Loke ADAT+68,Leek(SCR)
  376.    Doke ADAT+144,Deek(SCR+4)
  377.    Doke ADAT+146,Deek(SCR+6)
  378.    Doke ADAT+76,R
  379.    Inc BKCHANGE
  380.    Erase 100 : QUIT=True : Pop Proc
  381.    _SET: C=R*$100+G*$10+B : S(CUR)=C : Return 
  382. End Proc
  383. Procedure MN_SCREEN[T$,AD,XMIN,XMAX,YMIN,YMAX,RESX,RESY]
  384.    X=Free
  385.    A=Lowres : If RESX=2 : A=Hires : End If 
  386.    If RESY=2 : Add A,Laced : End If 
  387.    Screen Open 1,XMAX,YMAX,2,A : Screen Hide 1
  388.    Screen Display 0,,,,16
  389.    Curs Off : Cls 0 : Palette 0,$FF0
  390.    For X=0 To XMAX Step 16 : Draw X,0 To X,YMAX : Next 
  391.    For Y=0 To YMAX Step 16 : Draw 0,Y To XMAX,Y : Next 
  392.    Wind Open 1,0,8,20,4,1 : Curs Off : Scroll Off 
  393.    SX=Deek(AD) : SY=Deek(AD+2)
  394.    WX=Deek(AD+4) : WY=Deek(AD+6)
  395.    Screen Display 1,WX,WY,SX/RESX,SY
  396.    Screen To Front 0
  397.    Vdialog$(1,0)=T$
  398.    SETVDIA[16,Deek(AD+8),2,312,1]
  399.    D=Dialog Run(1,7)
  400.    Screen Show 1
  401.    Repeat 
  402.       Multi Wait 
  403.       D=Dialog(1) : Exit If D=1
  404.       If D=2 : M=1 : Clw : Gosub _DISP : End If 
  405.       If D=3 : M=2 : Clw : Gosub _DISP : End If 
  406.       If D=0
  407.          If Mouse Key=1
  408.             Dialog Freeze 
  409.             While Mouse Key
  410.                If M=1
  411.                   WX=X Mouse : WY=Y Mouse
  412.                End If 
  413.                If M=2
  414.                   SX=Max(Min(X Screen(1,X Mouse),XMAX),XMIN)
  415.                   SY=Max(Min(Y Screen(1,Y Mouse),YMAX),YMIN)
  416.                   If RESX=1
  417.                      SX=SX and $FFFFFFF0
  418.                   Else 
  419.                      SX=SX and $FFFFFFE0
  420.                   End If 
  421.                   SY=SY and $FFFFFFF8
  422.                End If 
  423.                Screen Display 1,WX,WY,SX/RESX,SY
  424.                Gosub _DISP
  425.                Wait Vbl 
  426.             Wend 
  427.             Dialog Unfreeze 
  428.          End If 
  429.       End If 
  430.    Until QUIT
  431.    Screen Close 1
  432.    Screen Display 0,,50,,ESY
  433.    Doke AD,SX : Doke AD+2,SY
  434.    Doke AD+4,WX : Doke AD+6,WY
  435.    Doke AD+8,Vdialog(1,16)
  436.    QUIT=-1
  437.    Pop Proc
  438.    _DISP:
  439.    Home 
  440.    If M=1
  441.       Print Resource$(48);WX;"  "
  442.       Print Resource$(49);WY;"  "
  443.    Else 
  444.       Print Resource$(50);SX;"  "
  445.       Print Resource$(51);SY;"  "
  446.    End If 
  447.    Return 
  448. End Proc
  449. Procedure BANK_NEW
  450.    ' Erase the current config from memory 
  451.    BNAME$=""
  452.    For S=0 To STMX : ST$(S)="" : Next 
  453.    BKCHANGE=0
  454. End Proc
  455. Procedure SETVDIA[V,A,B,C,D]
  456.    Vdialog(1,V)=A
  457.    Vdialog(1,V+1)=B
  458.    Vdialog(1,V+2)=C
  459.    Vdialog(1,V+3)=D
  460. End Proc
  461. Procedure INIT_SCREEN
  462.    Trap Resource Screen Open 0,ESX,ESY,0
  463.    If Errtrap : OOMEM : End If 
  464.    Screen Hide 0
  465.    Screen Display 0,XDI,YDI,,
  466.    Curs Off : Flash Off : Cls 0
  467.    GRB_EDITOR_PALETTE
  468.    Paper 0 : Pen 1
  469.    Limit Mouse 96,25 To 530,312
  470.    On Error Goto ERR
  471.    Trap Dialog Open 1,1,48,1024*4
  472.    If Errtrap : OOMEM : End If 
  473.    Pop Proc
  474.    ERR: Print "dialog error in position";Edialog;"." : Wait Key : End 
  475. End Proc
  476. Procedure GRB_EDITOR_PALETTE
  477.    ADAT=Leek(Dreg(3))
  478.    If ADAT=0
  479.       Palette 0,$6F,$77,$EEE,$F00,$DD,$AA,$FF3
  480.    Else 
  481.       For C=0 To 7
  482.          Colour C,Deek(ADAT+28+C*2)
  483.       Next 
  484.       Colour 1,(Colour(2) and $EEE)/2
  485.    End If 
  486. End Proc
  487. Procedure OOMEM
  488.    Trap Dialog Clr 1
  489.    Trap Dialog Close 
  490.    Trap D=Dialog Box(1,2,Resource$(61))
  491.    MN_QUIT
  492. End Proc
  493. Procedure MN_QUIT
  494.    Dialog Close 
  495.    For I=7 To 1 Step -1
  496.       Trap Screen Close I
  497.    Next I
  498.    Trap Screen 0
  499.    If Errtrap=0
  500.       For I=YSI To 0 Step -SOP
  501.          Screen Display 0,,,,I
  502.          Wait Vbl 
  503.       Next 
  504.       Screen Close 0
  505.    End If 
  506.    Edit 
  507. End Proc
  508. Procedure OPEN_SCREEN[S]
  509.    If OPEN=False
  510.       Trap Screen S
  511.       If Errtrap : Pop Proc : End If 
  512.       Screen Display S,,,,1
  513.       Screen Show S : Wait Vbl 
  514.       For I=1 To YSI Step SOP
  515.          Screen Display S,,,,I
  516.          Wait Vbl 
  517.       Next 
  518.       Screen Display S,,,,YSI
  519.       Wait Vbl 
  520.       OPEN=True
  521.    End If 
  522. End Proc