home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1993-03-16 | 12.2 KB | 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