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

  1. ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
  2. '
  3. ' AMOSPro Editor Configuration V 2.0 
  4. '
  5. ' By Fran�ois Lionet   
  6. '
  7. ' Additonal code by Jean-Baptiste Bolcato
  8. '
  9. ' (c) 1993 Europress Software Ltd. 
  10. '
  11. ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  12.  
  13. Set Buffer 20
  14. Set Accessory 
  15.  
  16. Global XDI,YDI,YSI,SOP,QUIT,OPEN
  17. Global BNAME$
  18. Global STMX,NST
  19. Global MX,MY,MK,MZ,MS
  20. Global BKPOS,BKCHANGE,ABK,ADAT,BK,TBNK,BKCHUNKS
  21. Global ESX,ESY,D_NAME$
  22.  
  23. COM$=Command Line$
  24. Command Line$=""
  25.  
  26. ' Maximum number of strings
  27. STMX=256
  28. Dim ST$(STMX)
  29. Global ST$(),STAD
  30. Dim FLAGS(16)
  31. Global FLAGS()
  32. BK=10
  33. ' Opening speed
  34. SOP=16 : OPEN=False
  35.  
  36. ' Initialisation 
  37. ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
  38. Resource Bank 16
  39. ' Make sure this program is called from the editor menu! 
  40. COM=0
  41. If Prg Under=1
  42.    If Left$(COM$,4)="EDIT" : COM=Val(Right$(COM$,1)) : End If 
  43. End If 
  44.  
  45. ADAT=Leek(Dreg(3))
  46. If ADAT Then ESX=Deek(ADAT) : XDI=Deek(ADAT+4)
  47. If ESX<640 Then ESX=640 : XDI=128
  48. ESY=200 : YDI=45 : YSI=ESY
  49. If COM=6 : YSI=128 : End If 
  50. INIT_SCREEN
  51. If COM>=1 and COM<=6
  52.    On COM Proc MN_SETUP,MN_MENUS,MN_DIALOG,MN_TEST,MN_RUN,MN_PALETTE
  53.    MN_QUIT
  54. End If 
  55. MN_BAD
  56.  
  57. Procedure MN_SETUP
  58.    ADAT=Leek(Dreg(3)) : If ADAT=0 : Stop : End If 
  59.    Do 
  60.       ' Save baks + Interlaced 
  61.       Vdialog(1,2)=Peek(ADAT+24) and 1
  62.       Vdialog(1,3)=Peek(ADAT+10) and 1
  63.       ' UNDO 
  64.       SETVDIA[16,Leek(ADAT+18),0,10000,1]
  65.       SETVDIA[20,Leek(ADAT+14)/1024,0,256,1]
  66.       ' History
  67.       SETVDIA[24,Deek(ADAT+26),1,128,1]
  68.       M=0
  69.       D=Dialog Run(1,1)
  70.       OPEN_SCREEN[0]
  71.       Repeat 
  72.          Multi Wait 
  73.          D=Dialog(1)
  74.          Exit If D=1,2
  75.          If D
  76.             If D=4
  77.                If Vdialog(1,3)
  78.                   I=2 : Y=288*2
  79.                Else 
  80.                   I=1 : Y=288
  81.                End If 
  82.                MN_SCREEN[Resource$(13),ADAT,640,704,184,Y,2,I]
  83.                Exit 
  84.             End If 
  85.             If D=5 : MN_FILES : Exit : End If 
  86.             Call Editor 182,100,"Null!"
  87.             If Param=0
  88.                Poke ADAT+24,Rdialog(1,2) and 1
  89.                Poke ADAT+10,Rdialog(1,3) and 1
  90.                Loke ADAT+18,Rdialog(1,16)
  91.                Loke ADAT+14,Rdialog(1,20)*1024
  92.                Doke ADAT+26,Rdialog(1,24)
  93.             Else 
  94.                OOMEM
  95.             End If 
  96.          End If 
  97.       Until QUIT
  98.       QUIT=0
  99.    Loop 
  100.    ' Reduce screen if not interlaced
  101.    SY=Deek(ADAT+2) : I=Peek(ADAT+10)
  102.    If I=0
  103.       If SY>288
  104.          SY=256 : If Ntsc : SY=200 : End If 
  105.          Doke ADAT+2,SY
  106.       End If 
  107.    End If 
  108. End Proc
  109. Procedure MN_BAD
  110.    OPEN_SCREEN[0] : Wait Vbl 
  111.    D=Dialog Box(1,2,Resource$(31))
  112.    MN_QUIT
  113. End Proc
  114. Procedure SETVDIA[V,A,B,C,D]
  115.    Vdialog(1,V)=A
  116.    Vdialog(1,V+1)=B
  117.    Vdialog(1,V+2)=C
  118.    Vdialog(1,V+3)=D
  119. End Proc
  120. Procedure MN_SCREEN[T$,AD,XMIN,XMAX,YMIN,YMAX,RESX,RESY]
  121.    X=Free
  122.    A=Lowres : If RESX=2 : A=Hires : End If 
  123.    If RESY=2 : Add A,Laced : End If 
  124.    Trap Screen Open 1,XMAX,YMAX,2,A
  125.    If Errtrap : OOMEM : End If 
  126.    Screen Hide 1
  127.    Screen Display 0,,,,16
  128.    OPEN_SCREEN[0]
  129.    Curs Off : Cls 0 : Palette 0,$FF0
  130.    For X=0 To XMAX Step 16 : Draw X,0 To X,YMAX : Next 
  131.    For Y=0 To YMAX Step 16 : Draw 0,Y To XMAX,Y : Next 
  132.    Wind Open 1,0,8,20,4,1 : Curs Off : Scroll Off 
  133.    SX=Deek(AD) : SY=Deek(AD+2)
  134.    WX=Deek(AD+4) : WY=Deek(AD+6)
  135.    Screen Display 1,WX,WY,SX/RESX,SY
  136.    Screen To Front 0
  137.    Vdialog$(1,0)=T$
  138.    SETVDIA[16,Deek(AD+8),2,312,1]
  139.    D=Dialog Run(1,7)
  140.    Screen Show 1
  141.    Repeat 
  142.       Multi Wait 
  143.       D=Dialog(1) : Exit If D=1
  144.       If D=2 : M=1 : Clw : Gosub _DISP : End If 
  145.       If D=3 : M=2 : Clw : Gosub _DISP : End If 
  146.       If D=0
  147.          If Mouse Key=1
  148.             Dialog Freeze 
  149.             While Mouse Key
  150.                If M=1
  151.                   WX=X Mouse : WY=Y Mouse
  152.                End If 
  153.                If M=2
  154.                   SX=Max(Min(X Screen(1,X Mouse),XMAX),XMIN)
  155.                   SY=Max(Min(Y Screen(1,Y Mouse),YMAX),YMIN)
  156.                   If RESX=1
  157.                      SX=SX and $FFFFFFF0
  158.                   Else 
  159.                      SX=SX and $FFFFFFE0
  160.                   End If 
  161.                   SY=SY and $FFFFFFF8
  162.                End If 
  163.                Screen Display 1,WX,WY,SX/RESX,SY
  164.                Gosub _DISP
  165.                Wait Vbl 
  166.             Wend 
  167.             Dialog Unfreeze 
  168.          End If 
  169.       End If 
  170.    Until QUIT
  171.    ' Send modification to editor
  172.    Call Editor 182,100,"Null!"
  173.    If Param=0
  174.       Doke AD,SX : Doke AD+2,SY
  175.       Doke AD+4,WX : Doke AD+6,WY
  176.       Doke AD+8,Vdialog(1,16)
  177.    Else 
  178.       Bell 
  179.    End If 
  180.    Screen Close 1
  181.    Screen Display 0,,,,ESY
  182.    Screen To Front 0
  183.    View : Wait Vbl 
  184.    QUIT=-1
  185.    Pop Proc
  186.    _DISP:
  187.    Home 
  188.    If M=1
  189.       Print Resource$(18);WX;"  "
  190.       Print Resource$(19);WY;"  "
  191.    Else 
  192.       Print Resource$(20);SX;"  "
  193.       Print Resource$(21);SY;"  "
  194.    End If 
  195.    Return 
  196. End Proc
  197. Procedure MN_FILES
  198.    MN_STRINGS[1,45,48,Resource$(27),Resource$(29),Resource$(30),0]
  199. End Proc
  200. Procedure MN_MENUS
  201.    MN_STRINGS[2,1,200,Resource$(4),Resource$(16),Resource$(16),1]
  202. End Proc
  203. Procedure MN_DIALOG
  204.    MN_STRINGS[3,1,255,Resource$(5),Resource$(16),Resource$(16),0]
  205. End Proc
  206. Procedure MN_TEST
  207.    MN_STRINGS[4,1,64,Resource$(6),Resource$(16),Resource$(16),0]
  208. End Proc
  209. Procedure MN_RUN
  210.    MN_STRINGS[5,1,164,Resource$(7),Resource$(16),Resource$(16),0]
  211. End Proc
  212. Procedure MN_PALETTE
  213.    ADAT=Leek(Dreg(3)) : If ADAT=0 : Stop : End If 
  214.    NCOL=8
  215.    Dim S(NCOL+1) : Vdialog(1,16)=NCOL+1
  216.    For C=0 To NCOL : S(C)=Deek(ADAT+C*2+28) : Next 
  217.    S(NCOL)=Deek(ADAT+12) : Rem background color 
  218.    D=Dialog Run(1,8)
  219.    W=ESX-88-24
  220.    For C=0 To NCOL-1
  221.       Ink C
  222.       Bar 88+(W*C)/(NCOL+1),37 To 88+(W*(C+1))/(NCOL+1)-1,43
  223.    Next 
  224.    Ink 3,0 : Gr Writing 1 : Set Pattern 17
  225.    Bar 88+(W*C)/(NCOL+1),37 To ESX-24,43
  226.    Gr Writing 0 : Set Pattern 1
  227.    OPEN_SCREEN[0]
  228.    CUR=0
  229.    Do 
  230.       If CUR=NCOL
  231.          C=Deek(ADAT+12)
  232.       Else 
  233.          C=Deek(ADAT+CUR*2+28)
  234.       End If 
  235.       R=(C and $F00)/$100 : G=(C and $F0)/$10 : B=C and $F
  236.       Dialog Update 1,3,R
  237.       Dialog Update 1,4,G
  238.       Dialog Update 1,5,B
  239.       Repeat 
  240.          Multi Wait 
  241.          D=Dialog(1)
  242.          Exit If D=1,2
  243.          If D=2
  244.             For CUR=0 To NCOL
  245.                Exit If Rdialog(1,2)=CUR
  246.             Next 
  247.             Exit 
  248.          End If 
  249.          If CUR<NCOL
  250.             CUR$=Str$(CUR)
  251.             If Len(CUR$)=2 : CUR$=CUR$+" " : End If 
  252.             If Len(CUR$)=4 : CUR$=CUR$-" " : End If 
  253.          Else 
  254.             CUR$=Resource$(37)
  255.          End If 
  256.          Ink 3,Point(31,43) : Text 32,43,CUR$
  257.          F=0
  258.          If D=3 : R=Rdialog(1,3) : Inc F : End If 
  259.          If D=4 : G=Rdialog(1,4) : Inc F : End If 
  260.          If D=5 : B=Rdialog(1,5) : Inc F : End If 
  261.          If D=6 : C=S(CUR) : Gosub _SET2 : Exit : End If 
  262.          If D=7 : Gosub GRB_RESOURCE : Exit : End If 
  263.          If F : Gosub _SET : End If 
  264.       Until QUIT
  265.       QUIT=0
  266.    Loop 
  267.    Pop Proc
  268.    _SET:
  269.    C=R*$100+G*$10+B
  270.    _SET2:
  271.    Call Editor 182,100,"Null!"
  272.    If Param=0
  273.       If CUR<NCOL
  274.          Screen 8 : Colour CUR,C
  275.          Screen 9 : Colour CUR,C
  276.          Screen 0
  277.          'If CUR<>1 
  278.          Colour CUR,C
  279.          'End If  
  280.          Doke ADAT+CUR*2+28,C
  281.       Else 
  282.          Colour Back C
  283.          Doke ADAT+12,C
  284.       End If 
  285.    End If 
  286.    View : Wait Vbl 
  287.    Return 
  288.    GRB_RESOURCE:
  289.    ADAT=Leek(Dreg(3))
  290.    If ADAT
  291.       Trap Load Resource$(0)+Resource$(-1045),15
  292.       If Errtrap : Return : End If 
  293.       Trap Resource Bank 15
  294.       If Errtrap : Return : End If 
  295.       S=0
  296.       Repeat 
  297.          Inc S : Trap Screen S
  298.       Until Errtrap<>0 or S=8
  299.       If S<8
  300.          Call Editor 182,100,"Null!"
  301.          If Param=0
  302.             Resource Screen Open S,64,8,0
  303.             Screen Hide S
  304.             Trap Screen 8 : Get Palette S
  305.             Trap Screen 9 : Get Palette S
  306.             Trap Screen 0 : Get Palette S
  307.             Screen Close S
  308.             For C=0 To NCOL-1
  309.                S(C)=Colour(C)
  310.                Doke ADAT+C*2+28,Colour(C)
  311.             Next C
  312.             If CUR=NCOL : CUR=0 : End If 
  313.             C=Colour(CUR)
  314.          End If 
  315.       End If 
  316.       Trap Erase 15
  317.       Resource Bank 16
  318.    End If 
  319.    Return 
  320. End Proc
  321. Procedure MN_STRINGS[SO,SD,SF,T1$,T2$,T3$,FLAG]
  322.    Dim TMP$(SF-SD+1)
  323.    For S=SD To SF : TMP$(N)=Resource$(-1000*SO-S) : Inc N : Next : POS=0
  324.    Do 
  325.       X=Free
  326.       Vdialog$(1,0)=T1$ : Vdialog$(1,1)=T2$
  327.       Vdialog(1,2)=POS
  328.       Vdialog(1,3)=Array(TMP$(0))
  329.       D=Dialog Run(1,2)
  330.       OPEN_SCREEN[0]
  331.       Repeat 
  332.          Multi Wait 
  333.          D=Dialog(1)
  334.          POS=Rdialog(1,2)
  335.          Exit If D=1,2
  336.          If D=3
  337.             N=Rdialog(1,3)
  338.             MN_EDIT[T3$,TMP$(N)]
  339.             If FLAG=0
  340.                A$=Param$
  341.             Else 
  342.                L=Len(TMP$(N)) : A$=Param$
  343.                If Len(A$)<L
  344.                   A$=A$+String$(Left$(A$,1),L-Len(A$))
  345.                Else 
  346.                   A$=Left$(A$,L)
  347.                End If 
  348.             End If 
  349.             A$=Space$(4)+A$ : Loke Varptr(A$),SD+N
  350.             Call Editor 182,SO,A$
  351.             If Param
  352.                OOMEM
  353.             Else 
  354.                TMP$(N)=Mid$(A$,5)
  355.             End If 
  356.             QUIT=-1
  357.          End If 
  358.       Until QUIT
  359.       QUIT=0
  360.    Loop 
  361.    N=0 : For S=SD To SF : ST$(S)=TMP$(N) : Inc N : Next 
  362. End Proc
  363. Procedure MN_EDIT[T$,S$]
  364.    Vdialog$(1,1)=S$
  365.    Vdialog$(1,2)=T$
  366.    D=Dialog Run(1,3)
  367.    If D=2 : S$=Rdialog$(1,3) : End If 
  368. End Proc[S$]
  369. Procedure INIT_SCREEN
  370.    Resource Screen Open 0,ESX,ESY,0
  371.    Screen Hide 0
  372.    Screen Display 0,XDI,YDI,,YSI
  373.    Curs Off : Flash Off : Cls 0
  374.    Wait Vbl 
  375.    GRB_EDITOR_PALETTE
  376.    Paper 0 : Pen 1
  377.    Limit Mouse 50,25 To 530,312
  378.    On Error Goto ERR
  379.    Dialog Open 1,1,48
  380.    Pop Proc
  381.    ERR: Screen Show 0 : Print "Error in dialog bank, position";Edialog;"." : Wait Key : End 
  382. End Proc
  383. Procedure OOMEM
  384.    Trap Dialog Clr 1
  385.    Trap Dialog Close 
  386.    Trap D=Dialog Box(1,2,Resource$(46))
  387.    MN_QUIT
  388. End Proc
  389. Procedure MN_QUIT
  390.    Dialog Close 
  391.    For I=7 To 1 Step -1
  392.       Trap Screen Close I
  393.    Next I
  394.    Trap Screen 0
  395.    If Errtrap=0
  396.       For I=YSI To 0 Step -SOP
  397.          Screen Display 0,,,,I
  398.          Wait Vbl 
  399.       Next 
  400.       Screen Close 0
  401.    End If 
  402.    Edit 
  403. End Proc
  404. Procedure OPEN_SCREEN[S]
  405.    If OPEN=False
  406.       Trap Screen S
  407.       If Errtrap : Pop Proc : End If 
  408.       Screen Display S,,,,1
  409.       Screen Show S
  410.       For I=1 To YSI Step SOP
  411.          Screen Display S,,,,I
  412.          Wait Vbl 
  413.       Next 
  414.       Screen Display S,,,,YSI
  415.       Wait Vbl 
  416.       OPEN=True
  417.    End If 
  418. End Proc
  419. Procedure GRB_EDITOR_PALETTE
  420.    ADAT=Leek(Dreg(3))
  421.    If ADAT=0
  422.       Palette 0,$6F,$77,$EEE,$F00,$DD,$AA,$FF3
  423.    Else 
  424.       For C=0 To 7
  425.          Colour C,Deek(ADAT+28+C*2)
  426.       Next 
  427.       Colour 1,(Colour(2) and $EEE)/2
  428.    End If 
  429. End Proc