home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Computing 66
/
ac066b.adf
/
AMOS.DMS
/
AMOS.adf
/
Config1_3.AMOS
/
Config1_3.amosSourceCode
Wrap
AMOS Source Code
|
1993-03-15
|
29KB
|
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))]