home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1993-06-16 | 10.6 KB | 429 lines |
- ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- '
- ' AMOSPro Editor Configuration V 2.0
- '
- ' By Fran�ois Lionet
- '
- ' Additonal code by Jean-Baptiste Bolcato
- '
- ' (c) 1993 Europress Software Ltd.
- '
- ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- Set Buffer 20
- Set Accessory
-
- Global XDI,YDI,YSI,SOP,QUIT,OPEN
- Global BNAME$
- Global STMX,NST
- Global MX,MY,MK,MZ,MS
- Global BKPOS,BKCHANGE,ABK,ADAT,BK,TBNK,BKCHUNKS
- Global ESX,ESY,D_NAME$
-
- COM$=Command Line$
- Command Line$=""
-
- ' Maximum number of strings
- STMX=256
- Dim ST$(STMX)
- Global ST$(),STAD
- Dim FLAGS(16)
- Global FLAGS()
- BK=10
- ' Opening speed
- SOP=16 : OPEN=False
-
- ' Initialisation
- ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Resource Bank 16
- ' Make sure this program is called from the editor menu!
- COM=0
- If Prg Under=1
- If Left$(COM$,4)="EDIT" : COM=Val(Right$(COM$,1)) : End If
- End If
-
- ADAT=Leek(Dreg(3))
- If ADAT Then ESX=Deek(ADAT) : XDI=Deek(ADAT+4)
- If ESX<640 Then ESX=640 : XDI=128
- ESY=200 : YDI=45 : YSI=ESY
- If COM=6 : YSI=128 : End If
- INIT_SCREEN
- If COM>=1 and COM<=6
- On COM Proc MN_SETUP,MN_MENUS,MN_DIALOG,MN_TEST,MN_RUN,MN_PALETTE
- MN_QUIT
- End If
- MN_BAD
-
- Procedure MN_SETUP
- ADAT=Leek(Dreg(3)) : If ADAT=0 : Stop : End If
- Do
- ' Save baks + Interlaced
- Vdialog(1,2)=Peek(ADAT+24) and 1
- Vdialog(1,3)=Peek(ADAT+10) and 1
- ' UNDO
- SETVDIA[16,Leek(ADAT+18),0,10000,1]
- SETVDIA[20,Leek(ADAT+14)/1024,0,256,1]
- ' History
- SETVDIA[24,Deek(ADAT+26),1,128,1]
- M=0
- D=Dialog Run(1,1)
- OPEN_SCREEN[0]
- Repeat
- Multi Wait
- D=Dialog(1)
- Exit If D=1,2
- If D
- If D=4
- If Vdialog(1,3)
- I=2 : Y=288*2
- Else
- I=1 : Y=288
- End If
- MN_SCREEN[Resource$(13),ADAT,640,704,184,Y,2,I]
- Exit
- End If
- If D=5 : MN_FILES : Exit : End If
- Call Editor 182,100,"Null!"
- If Param=0
- Poke ADAT+24,Rdialog(1,2) and 1
- Poke ADAT+10,Rdialog(1,3) and 1
- Loke ADAT+18,Rdialog(1,16)
- Loke ADAT+14,Rdialog(1,20)*1024
- Doke ADAT+26,Rdialog(1,24)
- Else
- OOMEM
- End If
- End If
- Until QUIT
- QUIT=0
- Loop
- ' Reduce screen if not interlaced
- SY=Deek(ADAT+2) : I=Peek(ADAT+10)
- If I=0
- If SY>288
- SY=256 : If Ntsc : SY=200 : End If
- Doke ADAT+2,SY
- End If
- End If
- End Proc
- Procedure MN_BAD
- OPEN_SCREEN[0] : Wait Vbl
- D=Dialog Box(1,2,Resource$(31))
- MN_QUIT
- End Proc
- Procedure SETVDIA[V,A,B,C,D]
- Vdialog(1,V)=A
- Vdialog(1,V+1)=B
- Vdialog(1,V+2)=C
- Vdialog(1,V+3)=D
- End Proc
- Procedure MN_SCREEN[T$,AD,XMIN,XMAX,YMIN,YMAX,RESX,RESY]
- X=Free
- A=Lowres : If RESX=2 : A=Hires : End If
- If RESY=2 : Add A,Laced : End If
- Trap Screen Open 1,XMAX,YMAX,2,A
- If Errtrap : OOMEM : End If
- Screen Hide 1
- Screen Display 0,,,,16
- OPEN_SCREEN[0]
- Curs Off : Cls 0 : Palette 0,$FF0
- For X=0 To XMAX Step 16 : Draw X,0 To X,YMAX : Next
- For Y=0 To YMAX Step 16 : Draw 0,Y To XMAX,Y : Next
- Wind Open 1,0,8,20,4,1 : Curs Off : Scroll Off
- SX=Deek(AD) : SY=Deek(AD+2)
- WX=Deek(AD+4) : WY=Deek(AD+6)
- Screen Display 1,WX,WY,SX/RESX,SY
- Screen To Front 0
- Vdialog$(1,0)=T$
- SETVDIA[16,Deek(AD+8),2,312,1]
- D=Dialog Run(1,7)
- Screen Show 1
- Repeat
- Multi Wait
- D=Dialog(1) : Exit If D=1
- If D=2 : M=1 : Clw : Gosub _DISP : End If
- If D=3 : M=2 : Clw : Gosub _DISP : End If
- If D=0
- If Mouse Key=1
- Dialog Freeze
- While Mouse Key
- If M=1
- WX=X Mouse : WY=Y Mouse
- End If
- If M=2
- SX=Max(Min(X Screen(1,X Mouse),XMAX),XMIN)
- SY=Max(Min(Y Screen(1,Y Mouse),YMAX),YMIN)
- If RESX=1
- SX=SX and $FFFFFFF0
- Else
- SX=SX and $FFFFFFE0
- End If
- SY=SY and $FFFFFFF8
- End If
- Screen Display 1,WX,WY,SX/RESX,SY
- Gosub _DISP
- Wait Vbl
- Wend
- Dialog Unfreeze
- End If
- End If
- Until QUIT
- ' Send modification to editor
- Call Editor 182,100,"Null!"
- If Param=0
- Doke AD,SX : Doke AD+2,SY
- Doke AD+4,WX : Doke AD+6,WY
- Doke AD+8,Vdialog(1,16)
- Else
- Bell
- End If
- Screen Close 1
- Screen Display 0,,,,ESY
- Screen To Front 0
- View : Wait Vbl
- QUIT=-1
- Pop Proc
- _DISP:
- Home
- If M=1
- Print Resource$(18);WX;" "
- Print Resource$(19);WY;" "
- Else
- Print Resource$(20);SX;" "
- Print Resource$(21);SY;" "
- End If
- Return
- End Proc
- Procedure MN_FILES
- MN_STRINGS[1,45,48,Resource$(27),Resource$(29),Resource$(30),0]
- End Proc
- Procedure MN_MENUS
- MN_STRINGS[2,1,200,Resource$(4),Resource$(16),Resource$(16),1]
- End Proc
- Procedure MN_DIALOG
- MN_STRINGS[3,1,255,Resource$(5),Resource$(16),Resource$(16),0]
- End Proc
- Procedure MN_TEST
- MN_STRINGS[4,1,64,Resource$(6),Resource$(16),Resource$(16),0]
- End Proc
- Procedure MN_RUN
- MN_STRINGS[5,1,164,Resource$(7),Resource$(16),Resource$(16),0]
- End Proc
- Procedure MN_PALETTE
- ADAT=Leek(Dreg(3)) : If ADAT=0 : Stop : End If
- NCOL=8
- Dim S(NCOL+1) : Vdialog(1,16)=NCOL+1
- For C=0 To NCOL : S(C)=Deek(ADAT+C*2+28) : Next
- S(NCOL)=Deek(ADAT+12) : Rem background color
- D=Dialog Run(1,8)
- W=ESX-88-24
- For C=0 To NCOL-1
- Ink C
- Bar 88+(W*C)/(NCOL+1),37 To 88+(W*(C+1))/(NCOL+1)-1,43
- Next
- Ink 3,0 : Gr Writing 1 : Set Pattern 17
- Bar 88+(W*C)/(NCOL+1),37 To ESX-24,43
- Gr Writing 0 : Set Pattern 1
- OPEN_SCREEN[0]
- CUR=0
- Do
- If CUR=NCOL
- C=Deek(ADAT+12)
- Else
- C=Deek(ADAT+CUR*2+28)
- End If
- R=(C and $F00)/$100 : G=(C and $F0)/$10 : B=C and $F
- Dialog Update 1,3,R
- Dialog Update 1,4,G
- Dialog Update 1,5,B
- Repeat
- Multi Wait
- D=Dialog(1)
- Exit If D=1,2
- If D=2
- For CUR=0 To NCOL
- Exit If Rdialog(1,2)=CUR
- Next
- Exit
- End If
- If CUR<NCOL
- CUR$=Str$(CUR)
- If Len(CUR$)=2 : CUR$=CUR$+" " : End If
- If Len(CUR$)=4 : CUR$=CUR$-" " : End If
- Else
- CUR$=Resource$(37)
- End If
- Ink 3,Point(31,43) : Text 32,43,CUR$
- F=0
- If D=3 : R=Rdialog(1,3) : Inc F : End If
- If D=4 : G=Rdialog(1,4) : Inc F : End If
- If D=5 : B=Rdialog(1,5) : Inc F : End If
- If D=6 : C=S(CUR) : Gosub _SET2 : Exit : End If
- If D=7 : Gosub GRB_RESOURCE : Exit : End If
- If F : Gosub _SET : End If
- Until QUIT
- QUIT=0
- Loop
- Pop Proc
- _SET:
- C=R*$100+G*$10+B
- _SET2:
- Call Editor 182,100,"Null!"
- If Param=0
- If CUR<NCOL
- Screen 8 : Colour CUR,C
- Screen 9 : Colour CUR,C
- Screen 0
- 'If CUR<>1
- Colour CUR,C
- 'End If
- Doke ADAT+CUR*2+28,C
- Else
- Colour Back C
- Doke ADAT+12,C
- End If
- End If
- View : Wait Vbl
- Return
- GRB_RESOURCE:
- ADAT=Leek(Dreg(3))
- If ADAT
- Trap Load Resource$(0)+Resource$(-1045),15
- If Errtrap : Return : End If
- Trap Resource Bank 15
- If Errtrap : Return : End If
- S=0
- Repeat
- Inc S : Trap Screen S
- Until Errtrap<>0 or S=8
- If S<8
- Call Editor 182,100,"Null!"
- If Param=0
- Resource Screen Open S,64,8,0
- Screen Hide S
- Trap Screen 8 : Get Palette S
- Trap Screen 9 : Get Palette S
- Trap Screen 0 : Get Palette S
- Screen Close S
- For C=0 To NCOL-1
- S(C)=Colour(C)
- Doke ADAT+C*2+28,Colour(C)
- Next C
- If CUR=NCOL : CUR=0 : End If
- C=Colour(CUR)
- End If
- End If
- Trap Erase 15
- Resource Bank 16
- End If
- Return
- End Proc
- Procedure MN_STRINGS[SO,SD,SF,T1$,T2$,T3$,FLAG]
- Dim TMP$(SF-SD+1)
- For S=SD To SF : TMP$(N)=Resource$(-1000*SO-S) : Inc N : Next : POS=0
- Do
- X=Free
- Vdialog$(1,0)=T1$ : Vdialog$(1,1)=T2$
- Vdialog(1,2)=POS
- Vdialog(1,3)=Array(TMP$(0))
- D=Dialog Run(1,2)
- OPEN_SCREEN[0]
- Repeat
- Multi Wait
- D=Dialog(1)
- POS=Rdialog(1,2)
- Exit If D=1,2
- If D=3
- N=Rdialog(1,3)
- MN_EDIT[T3$,TMP$(N)]
- If FLAG=0
- A$=Param$
- Else
- L=Len(TMP$(N)) : A$=Param$
- If Len(A$)<L
- A$=A$+String$(Left$(A$,1),L-Len(A$))
- Else
- A$=Left$(A$,L)
- End If
- End If
- A$=Space$(4)+A$ : Loke Varptr(A$),SD+N
- Call Editor 182,SO,A$
- If Param
- OOMEM
- Else
- TMP$(N)=Mid$(A$,5)
- End If
- QUIT=-1
- End If
- Until QUIT
- QUIT=0
- Loop
- N=0 : For S=SD To SF : ST$(S)=TMP$(N) : Inc N : Next
- End Proc
- Procedure MN_EDIT[T$,S$]
- Vdialog$(1,1)=S$
- Vdialog$(1,2)=T$
- D=Dialog Run(1,3)
- If D=2 : S$=Rdialog$(1,3) : End If
- End Proc[S$]
- Procedure INIT_SCREEN
- Resource Screen Open 0,ESX,ESY,0
- Screen Hide 0
- Screen Display 0,XDI,YDI,,YSI
- Curs Off : Flash Off : Cls 0
- Wait Vbl
- GRB_EDITOR_PALETTE
- Paper 0 : Pen 1
- Limit Mouse 50,25 To 530,312
- On Error Goto ERR
- Dialog Open 1,1,48
- Pop Proc
- ERR: Screen Show 0 : Print "Error in dialog bank, position";Edialog;"." : Wait Key : End
- End Proc
- Procedure OOMEM
- Trap Dialog Clr 1
- Trap Dialog Close
- Trap D=Dialog Box(1,2,Resource$(46))
- MN_QUIT
- End Proc
- Procedure MN_QUIT
- Dialog Close
- For I=7 To 1 Step -1
- Trap Screen Close I
- Next I
- Trap Screen 0
- If Errtrap=0
- For I=YSI To 0 Step -SOP
- Screen Display 0,,,,I
- Wait Vbl
- Next
- Screen Close 0
- End If
- Edit
- End Proc
- Procedure OPEN_SCREEN[S]
- If OPEN=False
- Trap Screen S
- If Errtrap : Pop Proc : End If
- Screen Display S,,,,1
- Screen Show S
- For I=1 To YSI Step SOP
- Screen Display S,,,,I
- Wait Vbl
- Next
- Screen Display S,,,,YSI
- Wait Vbl
- OPEN=True
- End If
- End Proc
- Procedure GRB_EDITOR_PALETTE
- ADAT=Leek(Dreg(3))
- If ADAT=0
- Palette 0,$6F,$77,$EEE,$F00,$DD,$AA,$FF3
- Else
- For C=0 To 7
- Colour C,Deek(ADAT+28+C*2)
- Next
- Colour 1,(Colour(2) and $EEE)/2
- End If
- End Proc