home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1993-03-15 | 28.5 KB | 893 lines |
- ' AMOS V1.3 Configuration program
- ' --------------------------------
- ' Written by Francois Lionet
- '
- ' 29/4/1991
- ' Copyright Mandarin / Jawx 1991
- '
- ' Note: the CONFMENU procedure contains all the setup menus. Feel free to
- ' examine it and grab its code for your own menus!
- '
- Set Buffer 40
- Close Editor
- '
- Dim CONF$(470)
- Global NED,ABASE,DTALONG,ADATA,ADSTR,ADOFF,STMAX,NBDATA,CONF$(),NFILE$
- '
- Reserve As Work 10,15000
- '
- Screen Open 0,640,208,4,Hires : Curs Off
- Screen Display 0,,50,,
- Set Rainbow 0,1,30,"(1,1,15)(1,-1,15)","",""
- Rainbow 0,0,49,212
- '
- TITLE
- SET_MENU
- '
- Do
- Menu On
- ALERT["... Please choose a menu option ..."]
- Repeat : Until Choice
- ALERT[""]
- If STMAX=0 and(Choice(1)>2 or(Choice(1)=2 and Choice(2)>3))
- ALERT["Configuration not loaded!"] : Wait 50
- Else
- On Choice(1) Proc MN_AMOS,MN_DISC,MN_SET,MN_EDIT
- TITLE
- End If
- Loop
- '
- Procedure SET_AMOS
- Menu$(1)=" AMOS "
- Menu$(1,1)=" About this program "
- Menu$(1,2)="--------------------"
- Menu$(1,3)=" Quit "
- Menu$(1,4)=" Exit to system "
- Menu$(1,4,1)=" Sure ? "
- End Proc
- Procedure SET_MENU
- '
- SET_AMOS
- '
- Menu$(2)=" Disc "
- Menu$(2,1)=" Load default configuration "
- Menu$(2,2)=" Load other configuration "
- Menu$(2,3)=" Load an AMOS1.2 configuration "
- Menu$(2,4)="-------------------------------"
- Menu$(2,5)=" Save configuration "
- Menu$(2,6)=" Save as... "
- '
- Menu$(3)=" Set "
- Menu$(3,1)=" New keyboard "
- Menu$(3,2)="---------------------------" : Menu Inactive(3,2)
- Menu$(3,3)=" Loaded extensions "
- Menu$(3,4)=" Help accessory name "
- Menu$(3,5)=" AMOS system files name "
- Menu$(3,6)=" Ports names "
- Menu$(3,7)=" Function key names "
- Menu$(3,8)=" Directory negative filter "
- Menu$(3,9)=" Amiga function keys "
- Menu$(3,10)="---------------------------" : Menu Inactive(3,10)
- Menu$(3,11)=" Editor setup "
- Menu$(3,12)=" Screen display setup "
- Menu$(3,13)=" Interpretor setup "
- Menu$(3,14)=" Screen palettes - Page 1 "
- Menu$(3,15)=" Screen palettes - Page 2 "
- Menu$(3,16)="---------------------------" : Menu Inactive(3,16)
- Menu$(3,17)=" Set AMOS to PAL system "
- Menu$(3,17,1)=" Normal "
- Menu$(3,17,2)=" Interlaced "
- Menu$(3,18)=" Set AMOS to NTSC system "
- Menu$(3,18,1)=" Normal "
- Menu$(3,18,2)=" Interlaced "
- '
- Menu$(4)=" Edit messages "
- Menu$(4,1)=" - From editor "
- Menu$(4,2)=" - From test time "
- Menu$(4,3)=" - From run time "
- Menu$(4,4)=" - From all LOAD/SAVE operation "
- Menu$(4,5)=" - From directory and file selector "
- Menu$(4,6)=" - From error screen "
- Menu$(4,7)=" - From escape screen "
- Menu$(4,8)=" - From AMOS title "
- End Proc
- Procedure MN_AMOS
- Menu Off
- If Choice(2)=1 : CONFMENU[9] : End If
- If Choice(2)=3 : Screen Close 0 : Rainbow Del 0 : Edit : End If
- If Choice(2)=4 : System : ALERT["Can't quit: workbench is closed!"] : Bell : Wait 50 : End If
- End Proc
- Procedure MN_DISC
- Menu Off
- If Choice(2)=1
- If Ntsc=0
- NFILE$=":AMOS_System/AMOS1_3_PAL.Env"
- Else
- NFILE$=":AMOS_System/AMOS1_3_NTSC.Env"
- End If
- LD_DISC[NFILE$,True] : Pop Proc
- End If
- If Choice(2)=2
- NFILE$=Fsel$("*.Env","","Please choose AMOS1_3.Env file")
- If NFILE$<>""
- LD_DISC[NFILE$,True]
- Else
- ALERT["... Not done ..."] : Wait 50
- End If
- Pop Proc
- End If
- If Choice(2)=3
- F$=Fsel$("*.ENV","","Please choose AMOS1_2.ENV file")
- If F$<>""
- LD_DISC[F$,False] : CHANGE_EXT
- P=Instr(F$,"1_2")
- If P
- Mid$(F$,P)="1_3"
- NFILE$=F$
- Else
- NFILE$=""
- End If
- Else
- ALERT["... Not done ..."] : Wait 50
- End If
- Pop Proc
- End If
- If Choice(2)=5
- If NFILE$<>""
- SV_DISC[NFILE$] : Pop Proc
- Else
- Goto BAD
- End If
- End If
- If Choice(2)=6 or FLG<>0
- BAD:
- F$=Fsel$("*.ENV","","Please choose AMOS1_3.ENV file")
- SV_DISC[F$]
- NFILE$=F$
- End If
- End Proc
- Procedure MN_SET
- Menu Off
- If Choice(2)=1
- ST_KEY
- Else
- If Choice(2)>=17
- ST_TV[(Choice(2)-17)*2+Choice(3)-1]
- Else
- C=Choice(2)-2
- Restore SDTA
- For X=1 To C : Read Y : Next
- If C<8
- ST_EDIT[Y]
- Else
- CONFMENU[Y]
- End If
- End If
- End If
- SDTA: Data 4,$13,$12,5,7,16,13,0,1,2,3,4,5
- End Proc
- Procedure ST_TV[TVMODE]
- If TVMODE=0
- Poke ADATA+110,0 : Poke ADATA+112,0
- Doke ADATA+34,46 : Doke ADATA+32,103
- Doke ADATA+38,22
- ALERT["... Editor screen in PAL mode ..."]
- End If
- If TVMODE=1
- Poke ADATA+110,4 : Poke ADATA+112,4
- Doke ADATA+34,46 : Doke ADATA+32,75
- Doke ADATA+38,55
- ALERT["... Editor screen in PAL INTERLACED mode ..."]
- End If
- If TVMODE=2
- Poke ADATA+110,0 : Poke ADATA+112,0
- Doke ADATA+34,46 : Doke ADATA+32,103
- Doke ADATA+38,18
- ALERT["... Editor screen in NTSC mode ..."]
- End If
- If TVMODE=3
- Poke ADATA+110,4 : Poke ADATA+112,4
- Doke ADATA+34,46 : Doke ADATA+32,75
- Doke ADATA+38,44
- ALERT["... Editor screen in NTSC INTERLACED mode ..."]
- End If
- Wait 50
- End Proc
- Procedure MN_EDIT
- Restore EDTA
- For X=1 To Choice(2) : Read Y : Next
- ST_EDIT[Y]
- EDTA: Data 1,2,3,6,11,10,12,14
- End Proc
- Procedure LD_DISC[N$,V13]
- On Error Goto LD_ERROR
- A$="... Loading "+N$+" ..."
- ALERT[A$]
- Bload N$,Start(10)
- WORK
- AD=Start(10) : Repeat : AD=AD+4 : Until Leek(AD)=$3E9
- '
- If V13
- If Leek(AD+12)=0 : ALERT["This is an AMOS1.2x configuration file!!!"] : Wait 150 : NFILE$="" : Pop Proc : End If
- ABASE=AD+12
- ADOFF=ABASE
- DTALONG=Leek(ABASE-4)
- Else
- If Leek(AD+12)<>0 : ALERT["This is an AMOS1.3 configuration file!!!"] : Wait 150 : NFILE$="" : Pop Proc : End If
- ABASE=AD+12
- ADOFF=ABASE+Leek(ABASE-4)
- DTALONG=0
- End If
- '
- A$=Space$(2048)
- NN=1 : ID=1 : AD=ADOFF
- Do
- A=Deek(AD) : FLAG=Deek(AD+2) : Add AD,4
- Exit If A=$FFFF
- A=ABASE+A-DTALONG
- If Btst(15,FLAG)
- Repeat
- Gosub COP_ST
- Inc NN
- A=A+N
- P=Peek(A)
- Until P=$FF
- Dec NN
- Else
- If Btst(12,FLAG)
- AA=Varptr(A$) : Doke AA,FLAG : Doke AA+2,ID : Add AA,4
- N=0
- Repeat
- P=Peek(A+N) : Poke AA+N,P : Inc N
- Until P=$FF
- CONF$(NN)=Left$(A$,N+4)
- Else
- Gosub COP_ST
- End If
- End If
- Inc NN : Inc ID
- Loop
- '
- STMAX=NN : ADATA=AD : ADSTR=AD+FLAG
- '
- If V13=0
- DTALONG=Leek(ABASE-4)
- Copy ADOFF,ADSTR To ADOFF-DTALONG
- Add ADATA,-DTALONG
- Add ADOFF,-DTALONG
- Add ADSTR,-DTALONG
- End If
- '
- A$="" : X=Free
- '
- FINISHED
- Pop Proc
- '---> Routine
- COP_ST:
- AA=Varptr(A$) : Doke AA,FLAG : Doke AA+2,ID : Add AA,4
- N=0
- Repeat
- P=Peek(A+N) : Poke AA+N,P : Inc N
- If P=27 : Poke AA+N,Peek(A+N) : Inc N : Poke AA+N,Peek(A+N) : Inc N : End If
- Until P=0
- CONF$(NN)=Left$(A$,N+3)
- Return
- '---> Error
- LD_ERROR:
- Bell : ALERT["Can't find configuration file!"]
- Wait 200
- Resume LD_ERR2
- LD_ERR2:
- End Proc
- Procedure SV_DISC[N$]
- If N$="" : ALERT["Not done!"] : Bell : Wait 50 : Pop Proc : End If
- Clw : WORK
- '
- '---> Poke data back into bank
- ADO=ADOFF
- ADS=ADSTR
- NN=1
- Repeat
- A=Varptr(CONF$(NN))
- FLAG=Deek(A) : ID=Deek(A+2) : Add A,4
- Doke ADO,ADS-ABASE+DTALONG : Doke ADO+2,FLAG : Add ADO,4
- If Btst(15,FLAG)
- Repeat
- Gosub ST_COP
- Inc NN : A=Varptr(CONF$(NN)) : I=Deek(A+2) : Add A,4
- Until I<>ID
- Poke ADS,-1 : Inc ADS
- Dec NN
- Else
- Gosub ST_COP
- End If
- Inc NN
- Until NN=STMAX
- '
- ' End at a LONG WORD
- While(ADS-Start(10)) and %11
- Poke ADS,0 : Inc ADS
- Wend
- NLONG=(ADS-Start(10))/4-8
- Loke Start(10)+$14,NLONG
- Loke Start(10)+$1C,NLONG
- Loke ADS,$3F2 : Add ADS,4
- FINISHED
- '
- ' Saving!
- A$="... Saving "+N$+" ..."
- ALERT[A$]
- Bsave N$,Start(10) To ADS
- ALERT[""]
- Pop Proc
- '
- '---> Poke routine
- ST_COP:
- If Len(CONF$(NN))>4
- For N=0 To Len(CONF$(NN))-4-1
- Poke ADS,Peek(A+N)
- Inc ADS
- Next
- End If
- Poke ADS,0 : Inc ADS
- Return
- End Proc
- Procedure CHANGE_EXT
- For NN=1 To STMAX-1
- FLAG=Deek(Varptr(CONF$(NN)))
- ID=Deek(Varptr(CONF$(NN))+2)
- '
- If(FLAG and 255)=4
- '
- If Btst(14,FLAG)=0
- A$=Mid$(CONF$(NN),5)-" "
- Inc N
- If A$<>""
- If N<=3 or N=6
- A$=A$+".Lib"
- Else
- A$=""
- End If
- CONF$(NN)=Left$(CONF$(NN),4)+A$
- End If
- End If
- End If
- Next
- End Proc
- Procedure ST_EDIT[ED_FLG]
- Clw : WORK
- Dim ED$(130)
- NED=0 : NN=1
- '
- For NN=1 To STMAX-1
- FLAG=Deek(Varptr(CONF$(NN)))
- ID=Deek(Varptr(CONF$(NN))+2)
- '
- If(FLAG and 255)=ED_FLG
- '
- If Btst(14,FLAG)=0
- '---> Simple strings
- Inc NED
- ED$(NED)=Space$(8)+Mid$(CONF$(NN),5)
- Doke Varptr(ED$(NED)),FLAG
- Doke Varptr(ED$(NED))+2,NN
- Doke Varptr(ED$(NED))+4,ID
- CONF$(NN)=""
- '
- Else
- '
- '---> Strings with control codes
- ED$=Mid$(CONF$(NN),5) : CONF$(NN)="" : N=1
- Do
- Do
- N1=N
- Repeat
- Exit If N>Len(ED$),2
- A$=Mid$(ED$,N,1) : Inc N
- If A$=Chr$(27) : Add N,2 : End If
- Until A$>=" "
- CONF$(NN)=CONF$(NN)+Mid$(ED$,N1,N-N1-1)+Chr$(0)
- Inc NED : ED$(NED)=Space$(8)
- Doke Varptr(ED$(NED)),FLAG
- Doke Varptr(ED$(NED))+2,NN
- Doke Varptr(ED$(NED))+4,ID
- Repeat
- ED$(NED)=ED$(NED)+A$
- Exit If N>Len(ED$),3
- A$=Mid$(ED$,N,1) : Inc N
- Until A$<" "
- Dec N
- Loop
- CONF$(NN)=CONF$(NN)+Mid$(ED$,N1,N-N1)
- Exit
- Loop
- End If
- '
- End If
- '
- Next NN
- FINISHED
- '
- ' Open edit window
- '
- LED=Min(NED,16)
- Reserve Zone 30
- If NED<>LED
- ARROW[36,3*8,12,22,4,25] : ARROW[36,15*8,12,-22,4,27]
- End If
- CASE[36,9*8,12,22,4,26]
- VER_TEXT["Quit",4,7]
- Centre At(,19)+"Click on the string to edit."
- Centre At(,20)+"Important: some strings finish with a space, you should not remove it!"
- Centre At(,21)+"Are you working on a COPY of your language disk?"
- Paper 2 : Pen 1 : Wind Open 1,8*8,8*(9-(LED+2)/2),70,LED+2,1 : Scroll Off
- PY=0 : ACT=0 : Gosub ALL_PRINT
- Window 0 : Paper 1 : Pen 2
- Window 1
- '
- ' Test for mouse
- '
- Do
- Do
- Repeat
- Wait Vbl
- If AL : Dec AL : If AL=0 : ALERT[""] : End If : End If
- Z=Mouse Zone
- If Z<>ACT
- If ACT>0 : N=ACT : ACT=0 : Gosub ST_PRINT : End If
- If Z>0 and Z<=LED : ACT=Z : N=Z : Gosub ST_PRINT : End If
- End If
- If Mouse Key and Z>LED
- Exit If Z=26,3
- If LED<>NED
- If Z=25 and PY>0
- Home : Vscroll 1
- Dec PY : N=1 : Gosub ST_PRINT
- End If
- If Z=27 and PY+LED<NED
- Locate 0,LED-1 : Vscroll 3
- Inc PY : N=LED : Gosub ST_PRINT
- End If
- End If
- End If
- Until ACT>0 and Mouse Key=1
- FLAG=Deek(Varptr(ED$(ACT+PY))) : F=0
- For N=8 To Len(ED$(ACT+PY))
- If Mid$(ED$(ACT+PY),N,1)<>" " : Inc F : End If
- Next
- If F or Btst(11,FLAG) or(Btst(14,FLAG)=0)
- Bset 11,FLAG : Exit
- Else
- AL=100 : ALERT["This string is not editable!"]
- End If
- Loop
- While Mouse Key : Wend
- Inverse Off : Print Chr$(7);
- '
- ' Edit loop
- '
- XCU=0
- LM=Len(ED$) : ED$=Mid$(ED$(ACT+PY),9)
- If Btst(13,FLAG)
- LMAX=Len(ED$)
- Else
- LMAX=64
- End If
- Do
- Curs Off
- Locate 4,ACT-1 : Print ED$;
- If Len(ED$)<LMAX : Print String$(".",LMAX-Len(ED$)); : End If
- Locate 4+XCU,ACT-1 : Curs On
- Repeat
- A$=Inkey$ : KY=Scancode
- If Mouse Key : A$=Chr$(13) : End If
- Until A$<>""
- If A$=Chr$(27) : ED$=Mid$(ED$(ACT+PY),9) : A$=Chr$(13) : End If
- Exit If A$=Chr$(13)
- If KY=65 and XCU>0 : ED$=Left$(ED$,XCU-1)+Mid$(ED$,XCU+1) : KY=79 : End If
- If KY=70 : ED$=Left$(ED$,XCU)+Mid$(ED$,XCU+2) : KY=-1 : End If
- If KY=79 : XCU=Max(0,XCU-1) : KY=-1 : End If
- If KY=78 : XCU=Min(LMAX,XCU+1) : KY=-1 : End If
- If A$>=" " and KY>0
- If XCU<LMAX
- ED$=Left$(ED$,XCU)+A$+Mid$(ED$,XCU+1)
- If Len(ED$)>LMAX : ED$=Left$(ED$,LMAX) : End If
- XCU=Min(LMAX,XCU+1)
- End If
- End If
- Loop
- If Btst(13,FLAG)
- If Len(ED$)<LMAX
- ED$=ED$+Space$(LMAX-Len(ED$))
- End If
- End If
- If Btst(14,FLAG)
- If Len(ED$)=0
- ED$=" "
- End If
- End If
- ED$(ACT+PY)=Left$(ED$(ACT+PY),8)+ED$
- Doke Varptr(ED$(ACT+PY)),FLAG
- N=ACT : ACT=0 : Gosub ST_PRINT
- Loop
- '
- ' Put back in strings
- '
- Paper 1 : Wind Close : Paper 1 : Pen 2 : Clw
- WORK
- NN=1
- Repeat
- A=Varptr(ED$(NN))
- FLAG=Deek(A)
- N=Deek(A+2)
- ID=Deek(A+4)
- If Btst(14,FLAG)=0
- '---> Simple strings
- CONF$(N)=Space$(4)+Mid$(ED$(NN),9)
- ED$(NN)="" : Inc NN
- Else
- '---> Strings with codes
- ED$=CONF$(N) : CONF$(N)=Space$(4)
- P=1
- Do
- P1=P
- Repeat
- Exit If P>Len(ED$),2
- A$=Mid$(ED$,P,1) : Inc P
- If A$=Chr$(27) : Add P,2 : End If
- Until A$=Chr$(0)
- FLAG=FLAG or Deek(Varptr(ED$(NN)))
- CONF$(N)=CONF$(N)+Mid$(ED$,P1,P-P1-1)+Mid$(ED$(NN),9)
- ED$(NN)="" : Inc NN
- Loop
- CONF$(N)=CONF$(N)+Mid$(ED$,P1,P-P1)
- End If
- Doke Varptr(CONF$(N)),FLAG
- Doke Varptr(CONF$(N))+2,ID
- '
- Until NN>NED
- FINISHED
- Pop Proc
- '-------------------
- ' Print ALL strings
- '-------------------
- ALL_PRINT:
- For N=1 To LED
- Gosub ST_PRINT
- Set Zone N,X Graphic(0),Y Graphic(N-1) To X Graphic(66),Y Graphic(N-1)+8
- Next
- Return
- '------------------
- ' Print ONE string
- '------------------
- ST_PRINT:
- Curs Off
- If N=ACT
- Inverse On
- Else
- Inverse Off
- End If
- Locate 0,N-1 : Print Chr$(7); Using "###";N+PY;"-";Mid$(ED$(PY+N),9);
- Return
- End Proc
- Procedure CONFMENU[PAGE]
- Dim JMP$(64),ZIT(64),ITZ(64),ZBASE(64)
- ' Handle menu
- MK_MENU:
- Curs Off : Gosub DR_MENU
- NOZ=1
- Do
- Repeat
- Z=Mouse Zone : K=Mouse Key
- If Z<>OLDZ
- If OLDZ>0 : ACT=-1 : IT=ZIT(OLDZ) : OLDZ=-1 : Gosub DR_ITEM : End If
- If Z>0 : OLDZ=Z : ACT=Z : IT=ZIT(Z) : ZNE=ZBASE(IT) : Gosub DR_ITEM : End If
- End If
- Until Z<>0 and K<>0
- If JMP$(Z)<>"" : Gosub JMP$(Z) : End If
- ACT=Z : ZNE=ZBASE(IT) : Gosub DR_ITEM
- If K=1 : Repeat : Until Mouse Key=0 : End If
- Loop
- '
- MN_BACK:
- On Error Goto NO_SC1 : Screen Close 1
- NO_SC2: On Error
- Colour Back 0 : View
- Pop
- Pop Proc
- NO_SC1: Resume NO_SC2
- '
- ST_FLAG: V=V xor 1 : Gosub "POK"+VTYPE$ : Return
- ST_INTER: V=V xor 4 : Gosub "POK"+VTYPE$ : Return
- ST_PLUS: Add V,VPL : V=Min(V,VMX) : Gosub "POK"+VTYPE$ : Return
- ST_MINUS: Add V,-VPL : V=Max(V,VMN) : Gosub "POK"+VTYPE$ : Return
- R_PLUS: HEXPLUS[V,$100,$F00] : V=Param : Gosub "POK"+VTYPE$ : Return
- G_PLUS: HEXPLUS[V,$10,$F0] : V=Param : Gosub "POK"+VTYPE$ : Return
- B_PLUS: HEXPLUS[V,$1,$F] : V=Param : Gosub "POK"+VTYPE$ : Return
- R_MINUS: HEXPLUS[V,-$100,$F00] : V=Param : Gosub "POK"+VTYPE$ : Return
- G_MINUS: HEXPLUS[V,-$10,$F0] : V=Param : Gosub "POK"+VTYPE$ : Return
- B_MINUS: HEXPLUS[V,-$1,$F] : V=Param : Gosub "POK"+VTYPE$ : Return
- ' Draw menu page
- DR_MENU:
- Clw : Reserve Zone 64
- IT=0 : ZNE=1 : NOZ=0 : ACT=-1 : OLDPAR=-1
- Repeat
- Inc IT : ZBASE(IT)=ZNE : Gosub DR_ITEM
- Until FLAG=False
- Return
- ' Draw one menu item
- DR_ITEM:
- LAB$="L"+(Str$(PAGE)-" ")+"_"+(Str$(IT)-" ")
- On Error Goto NO_IT
- Restore LAB$ : Read IT$
- On Error
- M=0 : XX=-1
- Repeat
- NEND=Instr(IT$,"|",M+1)
- ENC=0 : LBL$="" : FL=0 : ZZ=0 : NB=0
- Repeat
- N=M+1
- M=Instr(IT$,",",N) : M2=Instr(IT$,":",N) : If M>M2 : M=0 : End If
- If M=0 or(NEND<>0 and M1>NEND) : M=M2 : FL=1 : End If
- A$=Upper$(Mid$(IT$,N,1)) : Inc N
- If A$="E" : ENC=1 : End If
- If A$="L" : Gosub GT_STR : LBL$=A$ : Inc ZZ : End If
- If A$="C" : CNT=1 : End If
- If A$="X" : Gosub GT_STR : XX=Val(A$) : End If
- If A$="Y" : Gosub GT_STR : YY=Val(A$) : End If
- If A$=">" : Gosub GT_STR : VMN=Val(A$) : End If
- If A$="<" : Gosub GT_STR : VMX=Val(A$) : End If
- If A$="+" : Gosub GT_STR : VPL=Val(A$) : End If
- If A$="V" : Gosub GT_STR : PAR=Val(A$) : End If
- If A$="S" : Gosub GT_STR : VST$=A$ : End If
- If A$="J" : Gosub GT_STR : Gosub A$ : End If
- Until FL
- If NEND
- A$=Mid$(IT$,M+1,NEND-M-1)
- Else
- A$=Mid$(IT$,M+1)
- End If
- Gosub DR_WORD
- M=NEND
- Until NEND=0
- FLAG=True
- Return
- '
- DR_WORD:
- If XX<0 : XX=40-Len(A$)/2 : End If
- Locate XX,YY
- '
- FST=0
- If Left$(A$,1)="&"
- Inc FST
- B$=Upper$(Mid$(A$,2,1)) : A$=Mid$(A$,3)
- If B$="F"
- Gosub GT_VAL
- A$=" No " : If V : A$=" Yes " : End If
- End If
- If B$="V"
- L=Val(Left$(A$,1)) : A$=Mid$(A$,2)
- Gosub GT_VAL : A$=Str$(V)
- If Len(A$)<L+1 : A$=A$+Space$(L+1-Len(A$)) : End If
- End If
- If B$="P"
- Gosub GT_VAL
- B$=Hex$(V,3) : A$=""
- For N=2 To 4 : A$=A$+Mid$(B$,N,1)+" " : Next
- End If
- If B$="-" : A$=" --- " : Inc ZZ : LBL$="ST_MINUS" : End If
- If B$="+" : A$=" +++ " : Inc ZZ : LBL$="ST_PLUS" : End If
- If B$="S" : If NOZ : Screen Hide 1 : End If : End If
- End If
- '
- X1=X Graphic(XX)-3 : Y1=Y Graphic(YY)-2 : X2=X Graphic(XX+Len(A$))+2 : Y2=Y1+11
- '
- If ZZ<>0 or NOZ=0 or FST<>0
- Inverse Off : If ZZ<>0 and ACT=ZNE : Inverse On : End If
- Print A$;
- If ENC<>0 and NOZ=0 : Box X1,Y1 To X2,Y2 : End If
- End If
- If ZZ<>0
- If NOZ=0
- Set Zone ZNE,X1,Y1 To X2,Y2
- ZIT(ZNE)=IT : ITZ(IT)=ZNE
- If LBL$<>""
- JMP$(ZNE)=LBL$
- End If
- End If
- Inc ZNE
- End If
- XX=XX+(X2-X1)/8+1
- Return
- '
- NO_IT: Resume NO_IT2
- NO_IT2: FLAG=False
- Return
- '
- GT_STR:
- A$=Mid$(IT$,N,M-N)
- Return
- '
- GT_VAL:
- VTYPE$=Left$(A$,1) : ADV=ADATA+Val(Mid$(A$,2))
- Goto "PIK"+VTYPE$
- PIKB: V=Peek(ADV) : Return
- PIKW: V=Deek(ADV) : Return
- PIKL: V=Leek(ADV) : Return
- POKB: Poke ADV,V : Return
- POKW: Doke ADV,V : Return
- POKL: Loke ADV,V : Return
- '
- ST_COL:
- If NOZ
- If PAR<>OLDPAR
- Screen Open 1,640,24,4,Hires : Screen Display 1,,50-24,, : Scroll Off : Flash Off : Curs Off
- Palette 0,0,0,0
- C=Val(Mid$(VST$,1,1)) : Paper C : Clw
- C=Val(Mid$(VST$,2,1)) : Pen C : Clw : Print At(1,1);Border$(At(79,1),1);
- C=Val(Mid$(VST$,3,1)) : Pen C : Print At(35,1);"Example";
- C=Val(Mid$(VST$,4,1)) : Pen C : Print " screen";
- OLDPAR=PAR
- End If
- Screen 1
- For N=0 To 3
- Colour N,Deek(ADATA+PAR+N*2)
- Next
- Screen 0
- End If
- Return
- '
- ST_BOR:
- If NOZ : Colour Back Deek(ADV) : Screen Display 0,,,, : End If
- Return
- '
- EX_SCR2:
- Screen Open 1,640,24,4,Hires : Screen Display 1,,0,, : Scroll Off : Curs Off
- Print : Centre "Example screen" : Print At(1,1);Border$(At(79,1),1);
- Screen 0
- Return
- '
- ST_YSC:
- If NOZ : Screen Display 1,,V,, : Screen Show 1 : End If
- Return
- ' Datas page 1
- L1_1: Data "C,Y1,E: AMOS Basic - Editor setup "
- L1_2: Data "X2,Y24:...Use LEFT and RIGHT mouse keys to set values...|E,X60,LMn_Back: Back to main menu "
- L1_3: Data "Y4,X0:- Make backups when saving ?|X50,E,LSt_Flag:&FW48"
- L1_4: Data "Y6,X0:- Save icons with programs ?|X50,E,LSt_Flag:&FW30"
- L1_5: Data "Y8,X0:- Try to close workbench on loading ?|X50,E,LSt_Flag:&FW108"
- L1_6: Data "Y10,X0:- PRINTER: line feed with carriage return ?|X50,E,LSt_Flag:&FW50"
- L1_7: Data "Y12,X0:- Text buffer size on loading:|X40,>1024,<524288,+4096,E:&-|E:&+|:&V6L26|:bytes"
- L1_8: Data "Y14,X0:- Editor scrolling speed:|X40,>2,<256,+2,E:&-|E:&+|:&V3W54|:pixels per 1/50 second"
- L1_9: Data "Y16,X0:- File selector opening speed:|X40,>2,<256,+2,E:&-|E:&+|:&V3W52|:pixels per 1/50 second"
- ' Datas page 2
- L2_1: Data "JEx_Scr2,C,Y1,E: AMOS Basic - Screen display setup "
- L2_2: Data "X2,Y24:...Use LEFT and RIGHT mouse keys to set values...|E,X60,LMn_Back: Back to main menu "
- L2_3: Data "X0,Y4:- Function keys screen interlaced?|:&S|X40,E,LSt_Inter:&FB110"
- L2_4: Data "X0,Y6:- Editor screen interlaced?|:&S|X40,E,LSt_Inter:&FB112&"
- L2_5: Data "X0,Y8:- Number of lines in edit window:|:&S|X40,>8,<64,+1,E:&-|E:&+|:&V2W38|:Lines"
- L2_6: Data "X0,Y9: Norm: PAL=22(55) / NTSC=18(44)"
- L2_7: Data "X0,Y11:- Position of function key screen:|X40,>0,<310,+1,E:&-|E:&+|:&V3W34|JSt_YSc:(hardware Y coordinate)"
- L2_8: Data "X0,Y12: Norm: PAL / NTSC= 46"
- L2_9: Data "X0,Y14:- Position of editor screen:|X40,>0,<310,+1,E:&-|E:&+|:&V3W32|JSt_YSc:(hardware Y coordinate)"
- L2_10: Data "X0,Y15: Norm: PAL / NTSC= 102(75)"
- L2_11: Data "X0,Y17:- Position of file selector:|X40,>0,<310,+1,E:&-|E:&+|:&V3W36|JSt_YSc:(hardware Y coordinate)"
- L2_12: Data "X0,Y18: Norm: 66"
- L2_13: Data "X0,Y20:- Position of default screen:|X40,>0,<310,+1,E:&-|E:&+|:&V3W10|JSt_YSc:(hardware Y coordinate)"
- L2_14: Data "X0,Y21: Norm: 50"
- ' Datas page 3
- L3_1: Data "C,Y1,E: AMOS Basic - Interpretor parameters"
- L3_2: Data "X2,Y24:...Use LEFT and RIGHT mouse keys to set values...|E,X60,LMn_Back: Back to main menu "
- L3_3: Data "Y6,X0:- Maximum number of bobs:|X40,>8,<512,+4,E:&-|E:&+|:&V3W8|:bobs"
- L3_4: Data "Y8,X0:- Number of hardware sprite lines:|X40,>16,<256,+4,E:&-|E:&+|:&V3L16|:scan lines"
- L3_5: Data "Y12,X0:- Variable names buffer size:|X40,>1024,<16384,+256,E:&-|E:&+|:&V5L20|:bytes"
- L3_6: Data "Y14,X0:- Direct mode variable buffer:|X40,>30,<600,+6,E:&-|E:&+|:&V3W24|:bytes"
- L3_7: Data "X2,Y18,E: CAUTION! |: Improper setting of copper buffer can crash the system!"
- L3_8: Data "Y20,X0:- Copper list buffer size:|X40,>3072,<12288,+256,E:&-|E:&+|:&V5L12|:bytes"
- ' Datas page 4
- L4_1: Data "C,Y1,E: AMOS Basic - Screen palettes setup, page 1 "
- L4_2: Data "X2,Y24:...Use LEFT and RIGHT mouse keys to set values...|E,X60,LMn_Back: Back to main menu "
- L4_3: Data "X0,Y6:- Function key palette:"
- L4_4: Data "X40,Y6:&PW66|V66,S0123,JSt_Col,X40,Y4,LR_Plus,E:+|E,LG_Plus:+|E,LB_Plus:+|X40,Y8,E,LR_Minus:-|E,LG_Minus:-|E,LB_Minus:-"
- L4_5: Data "X50,Y6:&PW68|V66,S0123,JSt_Col,X50,Y4,LR_Plus,E:+|E,LG_Plus:+|E,LB_Plus:+|X50,Y8,E,LR_Minus:-|E,LG_Minus:-|E,LB_Minus:-"
- L4_6: Data "X60,Y6:&PW70|V66,S0123,JSt_Col,X60,Y4,LR_Plus,E:+|E,LG_Plus:+|E,LB_Plus:+|X60,Y8,E,LR_Minus:-|E,LG_Minus:-|E,LB_Minus:-"
- L4_7: Data "X70,Y6:&PW72|V66,S0123,JSt_Col,X70,Y4,LR_Plus,E:+|E,LG_Plus:+|E,LB_Plus:+|X70,Y8,E,LR_Minus:-|E,LG_Minus:-|E,LB_Minus:-"
- L4_8: Data "X0,Y12:- Editor screen palette:"
- L4_9: Data "X40,Y12:&PW58|V58,S1222,JSt_Col,X40,Y10,LR_Plus,E:+|E,LG_Plus:+|E,LB_Plus:+|X40,Y14,E,LR_Minus:-|E,LG_Minus:-|E,LB_Minus:-"
- L4_10: Data "X50,Y12:&PW60|V58,S1222,JSt_Col,X50,Y10,LR_Plus,E:+|E,LG_Plus:+|E,LB_Plus:+|X50,Y14,E,LR_Minus:-|E,LG_Minus:-|E,LB_Minus:-"
- L4_11: Data "X60,Y12:&PW62|V58,S1222,JSt_Col,X60,Y10,LR_Plus,E:+|E,LG_Plus:+|E,LB_Plus:+|X60,Y14,E,LR_Minus:-|E,LG_Minus:-|E,LB_Minus:-"
- L4_12: Data "X0,Y18:- Screen border colour:"
- L4_13: Data "X40,Y18:&PW106|JSt_Bor,X40,Y16,LR_Plus,E:+|E,LG_Plus:+|E,LB_Plus:+|X40,Y20,E,LR_Minus:-|E,LG_Minus:-|E,LB_Minus:-"
- ' Datas page 5
- L5_1: Data "C,Y1,E: AMOS Basic - Screen palettes setup, page 2 "
- L5_2: Data "X2,Y24:...Use LEFT and RIGHT mouse keys to set values...|E,X60,LMn_Back: Back to main menu "
- L5_3: Data "X0,Y6:- Escape screen palette:"
- L5_4: Data "X40,Y6:&PW82|V82,S0222,JSt_Col,X40,Y4,LR_Plus,E:+|E,LG_Plus:+|E,LB_Plus:+|X40,Y8,E,LR_Minus:-|E,LG_Minus:-|E,LB_Minus:-"
- L5_5: Data "X50,Y6:&PW84|V82,S0222,JSt_Col,X50,Y4,LR_Plus,E:+|E,LG_Plus:+|E,LB_Plus:+|X50,Y8,E,LR_Minus:-|E,LG_Minus:-|E,LB_Minus:-"
- L5_6: Data "X60,Y6:&PW86|V82,S0222,JSt_Col,X60,Y4,LR_Plus,E:+|E,LG_Plus:+|E,LB_Plus:+|X60,Y8,E,LR_Minus:-|E,LG_Minus:-|E,LB_Minus:-"
- L5_7: Data "X0,Y12:- Error line palette:"
- L5_8: Data "X40,Y12:&PW90|V90,S0122,JSt_Col,X40,Y10,LR_Plus,E:+|E,LG_Plus:+|E,LB_Plus:+|X40,Y14,E,LR_Minus:-|E,LG_Minus:-|E,LB_Minus:-"
- L5_9: Data "X50,Y12:&PW92|V90,S0122,JSt_Col,X50,Y10,LR_Plus,E:+|E,LG_Plus:+|E,LB_Plus:+|X50,Y14,E,LR_Minus:-|E,LG_Minus:-|E,LB_Minus:-"
- L5_10: Data "X60,Y12:&PW94|V90,S0122,JSt_Col,X60,Y10,LR_Plus,E:+|E,LG_Plus:+|E,LB_Plus:+|X60,Y14,E,LR_Minus:-|E,LG_Minus:-|E,LB_Minus:-"
- L5_11: Data "X0,Y18:- Follow screen palette:"
- L5_12: Data "X40,Y18:&PW98|V98,S0123,JSt_Col,X40,Y16,LR_Plus,E:+|E,LG_Plus:+|E,LB_Plus:+|X40,Y20,E,LR_Minus:-|E,LG_Minus:-|E,LB_Minus:-"
- L5_13: Data "X50,Y18:&PW100|V98,S0123,JSt_Col,X50,Y16,LR_Plus,E:+|E,LG_Plus:+|E,LB_Plus:+|X50,Y20,E,LR_Minus:-|E,LG_Minus:-|E,LB_Minus:-"
- L5_14: Data "X60,Y18:&PW102|V98,S0123,JSt_Col,X60,Y16,LR_Plus,E:+|E,LG_Plus:+|E,LB_Plus:+|X60,Y20,E,LR_Minus:-|E,LG_Minus:-|E,LB_Minus:-"
- L5_15: Data "X70,Y18:&PW104|V98,S0123,JSt_Col,X70,Y16,LR_Plus,E:+|E,LG_Plus:+|E,LB_Plus:+|X70,Y20,E,LR_Minus:-|E,LG_Minus:-|E,LB_Minus:-"
- ' Datas page 9
- L9_1: Data "C,Y6,E: AMOS Basic configuration editor "
- L9_2: Data "C,Y10: Written by Francois Lionet "
- L9_3: Data "C,Y12: Copyright 1990 Mandarin / Jawx "
- L9_4: Data "X60,Y22,E,LMn_Back: Click me! "
- End Proc
- Procedure ST_KEY
- KY$=Fsel$("*.Key","","Please choose a new keyboard","")
- If(KY$<>"") and(Upper$(Right$(KY$,4))=".KEY")
- On Error Goto KY_ERR
- ALERT["... Loading keyboard definition ..."]
- Open In 1,KY$ : LKY=Lof(1) : Close
- If LKY<512
- A$=Space$(LKY+16) : Bload KY$,Varptr(A$)
- ALERT[""]
- KY$=Fsel$("Sys:AMOS_System/","Default.Key","Click on Ok to save, Quit to abort,","or choose another AMOS_System folder")
- If(KY$<>"") and(Upper$(Right$(KY$,11))="DEFAULT.KEY")
- ALERT["... Saving default keyboard ..."]
- Bsave KY$,Varptr(A$) To Varptr(A$)+LKY
- End If
- End If
- End If
- '
- KY_RES:
- On Error : Close : ALERT[""]
- Pop Proc
- '
- KY_ERR:
- ALERT["... Disk Error! ..."] : Bell : Wait 100
- Resume KY_RES
- End Proc
- Procedure WORK
- Channel 0 To Rainbow 0
- Amal 0,"Loop: For RA=0 To 29; Let X=RA; P;P;P;P;P; Next RA; Jump Loop"
- Amal On
- ALERT["... Processing data ..."]
- End Proc
- Procedure FINISHED
- Amal 0,"For R0=RA To 29; Let X=R0; P;P;P;P;P; Next R0"
- Amal On
- ALERT[""]
- End Proc
- Procedure ARROW[X,Y,SX,SY,S,ZON]
- Set Paint 0
- Ink 2 : Set Paint 3
- For N=0 To S-1
- Polyline X-SX+N,Y+SY To X,Y-SY To X+SX-N,Y+SY
- Next
- SX=Abs(SX) : SY=Abs(SY)
- Set Zone ZON,X-SX,Y-SY To X+SX,Y+SY
- End Proc
- Procedure CASE[X,Y,SX,SY,S,ZON]
- Set Paint 0
- Ink 2 : Set Paint 3
- For N=0 To S-1
- Box X-SX+N,Y-SY+N To X+SX-N,Y+SY-N
- Next
- Set Zone ZON,X-SX,Y-SY To X+SX,Y+SY
- End Proc
- Procedure VER_TEXT[A$,X,Y]
- For N=1 To Len(A$)
- Locate X,Y+N-1
- Print Mid$(A$,N,1);
- Next
- End Proc
- Procedure TITLE
- Paper 1 : Pen 2 : Clw
- Centre At(,10)+Border$(" AMOS V1.3 ENVIRONMENT EDITOR ",1)
- End Proc
- Procedure ALERT[A$]
- W=Windon : Window 0
- Centre At(,23)+Space$(78)
- Centre At(,23)+A$
- Window W
- End Proc
- Procedure HEXPLUS[V,P,MASK]
- End Proc[(V and($FFFF xor MASK)) or(MASK and(V+P))]