home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format 67
/
af067a.adf
/
ACCESS.DMS
/
ACCESS.adf
/
AMOSPro_Help
/
AMOSPro_Help.AMOS
/
AMOSPro_Help.amosSourceCode
next >
Wrap
AMOS Source Code
|
1993-03-16
|
12KB
|
484 lines
' -------------------------------------------------------------------
'
' AMOSPro Help Accessory V1.1
'
' By Fran�ois Lionet
' Enormous help file by Stephen Hill
'
' (c) 1992 Europress Software Ltd.
'
' -------------------------------------------------------------------
Set Buffer 24
Set Accessory
Global NHELP$,CHELP$,DHELP$
Global DB$,COM$,MAP$
Global AFILE,EFILE,ABANK
Global SCR,SCX,SCY,SCSX,SCSY,DY,QUIT,SOP
' History system
Global MHIST,HIST,PHIST
MHIST=10
Dim HISTCOM$(MHIST),HISTNAME$(MHIST),HISTLAST(MHIST)
Global HISTCOM$(),HISTNAME$(),HISTLAST()
' Latest news system
Global MLATEST,PLATEST,NLATEST,LASTDIR$
MLATEST=10
Dim LATEST$(MLATEST)
Global LATEST$()
Resource Bank 16
COM$=Command Line$
' Name of the main help files
DHELP$=Resource$(-12)
' Another HELP file?
F=Instr(COM$,"-f")
If F
FF=Instr(COM$," ") : If FF=0 : FF=Len(COM$)+1 : End If
F$=Mid$(COM$,F+2,FF-F-2)
COM$=Left$(COM$,F-1)+Mid$(COM$,FF+1)
DHELP$=F$
End If
CHELP$="" : NHELP$=DHELP$
A$=Resource$(-13)
For P=Len(A$) To 1 Step -1 : B$=Mid$(A$,P,1) : Exit If B$=":" or B$="/" : Next
LASTDIR$=Left$(A$,P)
' Will only have effect if program is NOT an accessory!
Close Editor
' If the program is called from the editor, lets make some romm!
If Prg Under=1
For S=0 To 7 : Trap Screen Close S : Next
Set Sprite Buffer 40
End If
' Max size of one help text
Reserve As Work 10,16*1024
' Size of the help screen
SCSX=640 : SCX=128
ADAT=Leek(Dreg(3)) : If ADAT : SCSX=Deek(ADAT) : SCX=Deek(ADAT+4) : End If
SCY=75 : SCSY=168
' Opening speed
SOP=20
' Open a free screen
Auto View Off : SCR=-1
_OPEN_FREE_SCREEN[SCSX,SCSY] : If Param<0 : _OMM : End If
SCR=Param : GRB_EDITOR_PALETTE
' Initialise Interface
_INIT_WORK : If Param<0 : _OMM : End If
Screen Show SCR : Auto View On
For Y=1 To SCSY Step SOP
Screen Display SCR,SCX,SCY,,Y
Wait Vbl
Next
Screen Display SCR,,SCY,,SCSY
Wait Vbl
Show On : Limit Mouse 64,25 To 512,310
' Load the help map file.
' ~~~~~~~~~~~~~~~~~~~~~~~
_PRINT_MESSAGE["Loading AMOSPro Help File"]
NLATEST=-1 : PLATEST=NLATEST
Do
Do
X=Free
If COM$="" : COM$="HelpMenu" : End If
' Latest News system
If PHIST=0
If Upper$(Left$(COM$,8))="HELPINFO"
_LOADLATEST
If PLATEST>0
Dec PLATEST : NHELP$=LATEST$(PLATEST)
End If
End If
End If
' Load the map file if changed
If Upper$(NHELP$)<>CHELP$
Trap Open In 1,NHELP$+".Map"
Trap MAP$=Input$(1,Lof(1))
Close
If Errtrap : MN_ABORT[Resource$(5)] : End If
CHELP$=Upper$(NHELP$)
End If
_HELP_FIND[COM$]
If EFILE=0
If OCOM$=""
OCOM$=COM$ : COM$="HelpHelp" : NHELP$=DHELP$ : Exit
Else
MN_ABORT[Resource$(5)]
End If
End If
_INIT_BANK
If OCOM$<>""
_PRINT_BANK[String$("_",78)]
_PRINT_BANK[""]
_PRINT_BANK[" "+Resource$(2)+OCOM$]
_PRINT_BANK[" "+Resource$(4)]
_PRINT_BANK[String$("_",78)]
_PRINT_BANK[""]
OCOM$=""
End If
' Load the text file
' ~~~~~~~~~~~~~~~~~~
Set Input 10,-1
Trap Open In 1,NHELP$+".Txt"
Trap Pof(1)=AFILE
Trap Input #1,T$
If Errtrap : MN_ABORT[Resource$(5)] : End If
TT$=Space$((80-Len(T$))/2)+T$+Space$((80-Len(T$))/2)
If Len(TT$)<80 : TT$=TT$+" " : End If
_PRINT_BANK["{[,3,2]"+Space$(80)+"}"]
_PRINT_BANK["{[,3,2]"+TT$+"}"]
_PRINT_BANK["{[,3,2]"+Space$(80)+"}"]
_PRINT_BANK[""]
D=Min(EFILE-Pof(1),Length(10))
If D>0
Trap Sload 1 To ABANK,EFILE-Pof(1)
If Errtrap : MN_ABORT[Resource$(5)] : End If
End If
Close
Do
D=Dialog Run(1,1)
_PRINT_MESSAGE[Resource$(1)]
Do
Multi Wait
D=Dialog(1)
If D=5 : MN_HYPER : Exit 2 : End If
If D=1 : MN_QUIT : Edit : End If
If D=6
If PHIST=0 : _HISTORY : End If
If HISTCOM$(PHIST+1)<>""
Inc PHIST
COM$=HISTCOM$(PHIST)
NHELP$=HISTNAME$(PHIST)
If HISTLAST(PHIST)>=0
PLATEST=HISTLAST(PHIST)
Else
PLATEST=NLATEST
End If
Exit 2
End If
End If
If D=7 : MN_PRINT : Exit : End If
If D=8 : _HISTORY : COM$="HelpMenu" : NHELP$=DHELP$ : PLATEST=NLATEST : Exit 2 : End If
Loop
Loop
Loop
Loop
Procedure _LOADLATEST
' Load the latest news directory
If NLATEST<0
For N=1 To MLATEST : LATEST$(N)=Chr$(255) : Next
LATEST$(0)="" : NLATEST=1
F$=Resource$(-13)
Trap A$=Dir First$(F$+"**")
If Errtrap=0
While A$<>""
P=Instr(Upper$(A$),".MAP")
If P
LATEST$(NLATEST)=LASTDIR$+Mid$(Left$(A$,P-1),2)
Inc NLATEST
End If
A$=Dir Next$
Wend
End If
Sort LATEST$(0) : LATEST$(0)=DHELP$
PLATEST=NLATEST
End If
End Proc
Procedure MN_HYPER
H$=Rdialog$(1,5)
If H$<>""
If Left$(H$,1)="I"
_HISTORY : PHIST=0 : COM$=Mid$(H$,2)
End If
If Left$(H$,1)="R"
If Prg Under=1
PRG$=Mid$(H$,2)
D=Dialog Box(DB$,2,Resource$(6)+PRG$+"?")
If D=2
D=Dialog Box(DB$,3,Resource$(16))
' Function #61: Open+Load
Call Editor 61,1,PRG$
If Param=0
MN_QUIT : Edit
Else
R=Dialog Box(DB$,1,Param$+".")
End If
End If
Else
R=Dialog Box(DB$,1,Resource$(15))
End If
End If
End If
End Proc
Procedure _HISTORY
For H=MHIST-1 To 1 Step -1
HISTCOM$(H)=HISTCOM$(H-1)
HISTNAME$(H)=HISTNAME$(H-1)
HISTLAST(H)=HISTLAST(H-1)
Next
HISTCOM$(0)=COM$+" "
HISTNAME$(0)=CHELP$
HISTLAST(0)=PLATEST
PHIST=0
End Proc
Procedure MN_PRINT
Dialog Freeze
X=Free
D=Dialog Box(DB$,2,Resource$(9)) : If D<>2 : Pop Proc : End If
Do
Trap Printer Open
Exit If Errtrap=0
R=Dialog Box(DB$,2,Resource$(18))
If R<>2 : Pop Proc : End If
Loop
D=Dialog Box(DB$,3,Resource$(17))
AD=Start(10)
Do
If Printer Online=0
Repeat
R=Dialog Box(DB$,2,Resource$(13))
Exit If R<>2,2
Until Printer Online
End If
Exit If Peek(AD)=0
A$=Peek$(AD,160,Chr$(10)) : Add AD,Len(A$)+1
Do
A=Instr(A$,"{[") : Exit If A=0
B=Instr(A$,"]") : Exit If B=0
C=Instr(A$,"}") : Exit If C=0
A$=Left$(A$,A-1)+Mid$(A$,B+1,C-B-1)+Mid$(A$,C+1)
Loop
Trap Printer Send A$+Chr$(27)+"E"
Repeat : Exit If Inkey$<>"",2 : Multi Wait : Until Printer Check
Loop
Repeat : Exit If Inkey$<>"" : Until Printer Check
Trap Printer Close
Dialog Unfreeze
End Proc
Procedure MN_QUIT
Trap Dialog Close
Trap Screen SCR
If Errtrap=0
For Y=1 To SCSY Step SOP
Screen Offset SCR,,Y
Screen Display SCR,,SCY+Y,,SCSY-Y
Wait Vbl
Next
Screen Close SCR
End If
Erase 10 : Close
End Proc
Procedure _HELP_FIND[C$]
' Find a keywork in the map file
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C$=Upper$(C$)-" "
C=2 : If(Left$(C$,1)<"A") or(Left$(C$,1)>"Z") : C=1 : End If
I=0 : AFILE=0 : EFILE=0
Repeat
S$=Chr$(0)+Chr$($FF)+Left$(C$,C)
I=Instr(MAP$,S$,4)
If 0 : Print Mid$(S$,3);"-";Mid$(MAP$,I+2,8) : Wait Key : End If
Exit If I=0
OI=I : Inc C
Until C>Len(C$)
If OI
A$=Mid$(MAP$,OI-4,4) : AFILE=Leek(Varptr(A$))
A$=Left$(MAP$,4)
For I=OI+2 To OI+128
If Mid$(MAP$,I,1)=Chr$(0) : A$=Mid$(MAP$,I,4) : Exit : End If
Next
EFILE=Leek(Varptr(A$))
End If
End Proc
Procedure _INIT_WORK
' Definition of alert boxes
' ~~~~~~~~~~~~~~~~~~~~~~~~~
DB$=DB$+"IF 0VA 1=;"
DB$=DB$+"["
DB$=DB$+"SIze 1VATW160+ SW MI,40;"
DB$=DB$+"BAse SWidth SX -2/,SHeight SY- 2/;"
DB$=DB$+"SAve 1;"
DB$=DB$+"BOx 0,0,1,SX,SY;"
DB$=DB$+"PRint 1VACX,SY2/ TH2/ -,1VA,3;"
DB$=DB$+"RUn 0,%1111;"
DB$=DB$+"]"
DB$=DB$+"IF 0VA 2=;"
DB$=DB$+"["
DB$=DB$+"SIze SWidth 1VATW80+ MIn,64;"
DB$=DB$+"BAse SWidth SX -2/,SHeight SY- 2/;"
DB$=DB$+"SAve 1;"
DB$=DB$+"BOx 0,0,1,SX,SY;"
DB$=DB$+"PRint 1VACX,16,1VA,3;"
DB$=DB$+"BUtton 1,16,SY24-,64,16,0,0,1;[UNpack 0,0,13BP+; PRint 12ME CX BP+,4,12ME,3;][BR0;BQ;]"
DB$=DB$+"KY 27,0;"
DB$=DB$+"BUtton 2,SX72-,SY24-,64,16,0,0,1;[UNpack 0,0,13BP+; PRint 11ME CX BP+,4,11ME,3;][BR0;BQ;]"
DB$=DB$+"KY 13,0;"
DB$=DB$+"RUn 0,3;"
DB$=DB$+"]"
DB$=DB$+"IF 0VA 3=;"
DB$=DB$+"["
DB$=DB$+"SIze 1VATW160+ SW MI,40;"
DB$=DB$+"BAse SWidth SX -2/,SHeight SY- 2/;"
DB$=DB$+"BOx 0,0,1,SX,SY;"
DB$=DB$+"PRint 1VACX,SY2/ TH2/ -,1VA,3;"
DB$=DB$+"]"
DB$=DB$+"EXit;"
' Definition of the DBL program
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB$=DB$+"LA 1;"
DB$=DB$+"SIze SW,SH;"
DB$=DB$+"BAse SWidth SX -2/,SHeight SY- 2/;"
DB$=DB$+"PUzzle 21;"
DB$=DB$+"SVar 2,0;"
DB$=DB$+"LIne 24,0,7,SX288-;"
DB$=DB$+"LIne 0,SY4-,10,SX;"
DB$=DB$+"VLine SX16-,24,17,SY4-;"
DB$=DB$+"BUtton 1,0,0,24,16,0,0,1;[UNpack 0,0,1 BP+;][BR0;]"
DB$=DB$+"KY 27,0;"
DB$=DB$+"KY $DF,0;"
DB$=DB$+"BUtton 2,SX16-,10,16,7,0,0,1;[UNpack 0,0,13 BP+;][SV2,0 2VA1- MAx;ZC4,2VA;BR0;]"
DB$=DB$+"KY $CC,0;"
DB$=DB$+"BUtton 3,XA,YB,16,7,0,0,1;[UNpack 0,0,15 BP+;][SV2,3VA 2VA1+ MIn;ZC4,2VA;BR0;]"
DB$=DB$+"KY $CD,0;"
DB$=DB$+"HText 5,0,11,SX16-8/,SY16-8/,0VA,2VA,8,2,3;[]"
DB$=DB$+"SVar 3,ZVar;"
DB$=DB$+"VSlide 4,SX11-,25,8,SY30-,0,SH8/2-,3VA,SH16-8/2-;[SV2,ZP;ZC 5,2VA;]"
DB$=DB$+"BB 6,SX288-,0,96,7 ME;"
DB$=DB$+"BB 7,SX96-,0,96,8 ME;"
DB$=DB$+"BB 8,SX192-,0,96,3 ME;"
DB$=DB$+"BUtton 0,24,0,SX160-,10,0,0,0;[][SM;]"
DB$=DB$+"EXit;"
' BB z,x,y,txt
DB$=DB$+"UI BB,5;["
DB$=DB$+"SZone P5;"
DB$=DB$+"BUtton P1,P2,P3,P4,10,0,0,1;[SW 0;LIne 0,0,BP3* 20+,SX;PRint ZV CX BP+,1,ZV,3;][BR0;]"
DB$=DB$+"]"
' Open the dialog channel
Dialog Open 1,DB$,16,1024*12
' Display an empty screen
Poke Start(10),0 : Vdialog(1,0)=Start(10)
' Start the interface
Trap D=Dialog Run(1,1)
Dialog Clr 1
End Proc[Errtrap]
Procedure _START_HYPER[A$]
Vdialog(1,0)=Start(10) : D=Dialog Run(1,1)
End Proc
Procedure _PRINT_MESSAGE[A$]
Cls 6,32,1 To SCSX-292,9
Gr Writing 0 : Ink 7,7,7
Text 32,7,A$
End Proc
Procedure _OPEN_FREE_SCREEN[SX,SY]
' This procedure finds a free screen, and
' opens it with the resource bank defaults
For S=0 To 7
Trap Screen S
If Errtrap
Trap Resource Screen Open S,SX,SY,0
If Errtrap : Pop Proc[-1] : End If
Screen Hide S : Cls 0 : Paper 0 : Pen 0 : Wait Vbl
Pop Proc[S]
End If
Next
End Proc[-1]
Procedure _INIT_BANK
Fill Start(10) To Start(10)+Length(10),0
ABANK=Start(10)
End Proc
Procedure _PRINT_BANK[A$]
Poke$ ABANK,A$+Chr$(10) : Add ABANK,Len(A$)+1
End Proc
Procedure _OMM
Auto View On
If SCR>=0
Trap Screen Close SCR
Trap Screen Open SCR,640,8,2,Hires
If Errtrap=0
Curs Off
Screen Display SCR,,78,,
Palette $777,$FFF
Centre Resource$(14)
Clear Key : While Mouse Key : Multi Wait : Wend
Repeat : Multi Wait : Until Inkey$<>"" or Mouse Key<>0
Screen Close SCR
End If
End If
MN_QUIT
Error 24
End Proc
Procedure MN_ABORT[A$]
Auto View On : Wait Vbl
R=Dialog Box(DB$,1,A$)
MN_QUIT
Edit
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