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 >
AMOS Source Code  |  1993-03-16  |  12KB  |  484 lines

  1. ' -------------------------------------------------------------------  
  2. '
  3. ' AMOSPro Help Accessory V1.1  
  4. '
  5. ' By Fran�ois Lionet 
  6. ' Enormous help file by Stephen Hill 
  7. '
  8. ' (c) 1992 Europress Software Ltd.   
  9. '
  10. ' -------------------------------------------------------------------  
  11.  
  12. Set Buffer 24
  13. Set Accessory 
  14.  
  15. Global NHELP$,CHELP$,DHELP$
  16. Global DB$,COM$,MAP$
  17. Global AFILE,EFILE,ABANK
  18. Global SCR,SCX,SCY,SCSX,SCSY,DY,QUIT,SOP
  19.  
  20. ' History system 
  21. Global MHIST,HIST,PHIST
  22. MHIST=10
  23. Dim HISTCOM$(MHIST),HISTNAME$(MHIST),HISTLAST(MHIST)
  24. Global HISTCOM$(),HISTNAME$(),HISTLAST()
  25.  
  26. ' Latest news system 
  27. Global MLATEST,PLATEST,NLATEST,LASTDIR$
  28. MLATEST=10
  29. Dim LATEST$(MLATEST)
  30. Global LATEST$()
  31.  
  32. Resource Bank 16
  33. COM$=Command Line$
  34.  
  35. ' Name of the main help files  
  36. DHELP$=Resource$(-12)
  37. ' Another HELP file? 
  38. F=Instr(COM$,"-f")
  39. If F
  40.    FF=Instr(COM$," ") : If FF=0 : FF=Len(COM$)+1 : End If 
  41.    F$=Mid$(COM$,F+2,FF-F-2)
  42.    COM$=Left$(COM$,F-1)+Mid$(COM$,FF+1)
  43.    DHELP$=F$
  44. End If 
  45. CHELP$="" : NHELP$=DHELP$
  46. A$=Resource$(-13)
  47. For P=Len(A$) To 1 Step -1 : B$=Mid$(A$,P,1) : Exit If B$=":" or B$="/" : Next 
  48. LASTDIR$=Left$(A$,P)
  49.  
  50. ' Will only have effect if program is NOT an accessory!
  51. Close Editor 
  52. ' If the program is called from the editor, lets make some romm! 
  53. If Prg Under=1
  54.    For S=0 To 7 : Trap Screen Close S : Next 
  55.    Set Sprite Buffer 40
  56. End If 
  57.  
  58. ' Max size of one help text
  59. Reserve As Work 10,16*1024
  60. ' Size of the help screen
  61. SCSX=640 : SCX=128
  62. ADAT=Leek(Dreg(3)) : If ADAT : SCSX=Deek(ADAT) : SCX=Deek(ADAT+4) : End If 
  63. SCY=75 : SCSY=168
  64. ' Opening speed  
  65. SOP=20
  66.  
  67. ' Open a free screen 
  68. Auto View Off : SCR=-1
  69. _OPEN_FREE_SCREEN[SCSX,SCSY] : If Param<0 : _OMM : End If 
  70. SCR=Param : GRB_EDITOR_PALETTE
  71.  
  72. ' Initialise Interface 
  73. _INIT_WORK : If Param<0 : _OMM : End If 
  74. Screen Show SCR : Auto View On 
  75. For Y=1 To SCSY Step SOP
  76.    Screen Display SCR,SCX,SCY,,Y
  77.    Wait Vbl 
  78. Next 
  79. Screen Display SCR,,SCY,,SCSY
  80. Wait Vbl 
  81. Show On : Limit Mouse 64,25 To 512,310
  82.  
  83. ' Load the help map file.
  84. ' ~~~~~~~~~~~~~~~~~~~~~~~
  85. _PRINT_MESSAGE["Loading AMOSPro Help File"]
  86. NLATEST=-1 : PLATEST=NLATEST
  87.  
  88. Do 
  89.    Do 
  90.       X=Free
  91.       
  92.       If COM$="" : COM$="HelpMenu" : End If 
  93.       
  94.       ' Latest News system 
  95.       If PHIST=0
  96.          If Upper$(Left$(COM$,8))="HELPINFO"
  97.             _LOADLATEST
  98.             If PLATEST>0
  99.                Dec PLATEST : NHELP$=LATEST$(PLATEST)
  100.             End If 
  101.          End If 
  102.       End If 
  103.       
  104.       ' Load the map file if changed 
  105.       If Upper$(NHELP$)<>CHELP$
  106.          Trap Open In 1,NHELP$+".Map"
  107.          Trap MAP$=Input$(1,Lof(1))
  108.          Close 
  109.          If Errtrap : MN_ABORT[Resource$(5)] : End If 
  110.          CHELP$=Upper$(NHELP$)
  111.       End If 
  112.       
  113.       _HELP_FIND[COM$]
  114.       
  115.       If EFILE=0
  116.          If OCOM$=""
  117.             OCOM$=COM$ : COM$="HelpHelp" : NHELP$=DHELP$ : Exit 
  118.          Else 
  119.             MN_ABORT[Resource$(5)]
  120.          End If 
  121.       End If 
  122.       
  123.       _INIT_BANK
  124.       
  125.       If OCOM$<>""
  126.          _PRINT_BANK[String$("_",78)]
  127.          _PRINT_BANK[""]
  128.          _PRINT_BANK["  "+Resource$(2)+OCOM$]
  129.          _PRINT_BANK["  "+Resource$(4)]
  130.          _PRINT_BANK[String$("_",78)]
  131.          _PRINT_BANK[""]
  132.          OCOM$=""
  133.       End If 
  134.       
  135.       ' Load the text file 
  136.       ' ~~~~~~~~~~~~~~~~~~ 
  137.       Set Input 10,-1
  138.       Trap Open In 1,NHELP$+".Txt"
  139.       Trap Pof(1)=AFILE
  140.       Trap Input #1,T$
  141.       If Errtrap : MN_ABORT[Resource$(5)] : End If 
  142.       TT$=Space$((80-Len(T$))/2)+T$+Space$((80-Len(T$))/2)
  143.       If Len(TT$)<80 : TT$=TT$+" " : End If 
  144.       _PRINT_BANK["{[,3,2]"+Space$(80)+"}"]
  145.       _PRINT_BANK["{[,3,2]"+TT$+"}"]
  146.       _PRINT_BANK["{[,3,2]"+Space$(80)+"}"]
  147.       _PRINT_BANK[""]
  148.       
  149.       D=Min(EFILE-Pof(1),Length(10))
  150.       If D>0
  151.          Trap Sload 1 To ABANK,EFILE-Pof(1)
  152.          If Errtrap : MN_ABORT[Resource$(5)] : End If 
  153.       End If 
  154.       
  155.       Close 
  156.       
  157.       Do 
  158.          D=Dialog Run(1,1)
  159.          _PRINT_MESSAGE[Resource$(1)]
  160.          
  161.          Do 
  162.             Multi Wait 
  163.             D=Dialog(1)
  164.             If D=5 : MN_HYPER : Exit 2 : End If 
  165.             If D=1 : MN_QUIT : Edit : End If 
  166.             If D=6
  167.                If PHIST=0 : _HISTORY : End If 
  168.                If HISTCOM$(PHIST+1)<>""
  169.                   Inc PHIST
  170.                   COM$=HISTCOM$(PHIST)
  171.                   NHELP$=HISTNAME$(PHIST)
  172.                   If HISTLAST(PHIST)>=0
  173.                      PLATEST=HISTLAST(PHIST)
  174.                   Else 
  175.                      PLATEST=NLATEST
  176.                   End If 
  177.                   Exit 2
  178.                End If 
  179.             End If 
  180.             If D=7 : MN_PRINT : Exit : End If 
  181.             If D=8 : _HISTORY : COM$="HelpMenu" : NHELP$=DHELP$ : PLATEST=NLATEST : Exit 2 : End If 
  182.          Loop 
  183.       Loop 
  184.    Loop 
  185. Loop 
  186.  
  187. Procedure _LOADLATEST
  188.  
  189.    ' Load the latest news directory 
  190.    
  191.    If NLATEST<0
  192.  
  193.       For N=1 To MLATEST : LATEST$(N)=Chr$(255) : Next 
  194.       LATEST$(0)="" : NLATEST=1
  195.       
  196.       F$=Resource$(-13)
  197.       Trap A$=Dir First$(F$+"**")
  198.       If Errtrap=0
  199.          While A$<>""
  200.             P=Instr(Upper$(A$),".MAP")
  201.             If P
  202.                LATEST$(NLATEST)=LASTDIR$+Mid$(Left$(A$,P-1),2)
  203.                Inc NLATEST
  204.             End If 
  205.             A$=Dir Next$
  206.          Wend 
  207.       End If 
  208.  
  209.       Sort LATEST$(0) : LATEST$(0)=DHELP$
  210.       PLATEST=NLATEST
  211.  
  212.    End If 
  213.  
  214. End Proc
  215. Procedure MN_HYPER
  216.    
  217.    H$=Rdialog$(1,5)
  218.    If H$<>""
  219.       If Left$(H$,1)="I"
  220.          _HISTORY : PHIST=0 : COM$=Mid$(H$,2)
  221.       End If 
  222.       If Left$(H$,1)="R"
  223.          If Prg Under=1
  224.             PRG$=Mid$(H$,2)
  225.             D=Dialog Box(DB$,2,Resource$(6)+PRG$+"?")
  226.             If D=2
  227.                D=Dialog Box(DB$,3,Resource$(16))
  228.                ' Function #61: Open+Load
  229.                Call Editor 61,1,PRG$
  230.                If Param=0
  231.                   MN_QUIT : Edit 
  232.                Else 
  233.                   R=Dialog Box(DB$,1,Param$+".")
  234.                End If 
  235.             End If 
  236.          Else 
  237.             R=Dialog Box(DB$,1,Resource$(15))
  238.          End If 
  239.       End If 
  240.    End If 
  241.    
  242. End Proc
  243. Procedure _HISTORY
  244.    For H=MHIST-1 To 1 Step -1
  245.       HISTCOM$(H)=HISTCOM$(H-1)
  246.       HISTNAME$(H)=HISTNAME$(H-1)
  247.       HISTLAST(H)=HISTLAST(H-1)
  248.    Next 
  249.    HISTCOM$(0)=COM$+" "
  250.    HISTNAME$(0)=CHELP$
  251.    HISTLAST(0)=PLATEST
  252.    PHIST=0
  253. End Proc
  254. Procedure MN_PRINT
  255.    
  256.    Dialog Freeze 
  257.    
  258.    X=Free
  259.    
  260.    D=Dialog Box(DB$,2,Resource$(9)) : If D<>2 : Pop Proc : End If 
  261.    
  262.    Do 
  263.       Trap Printer Open 
  264.       Exit If Errtrap=0
  265.       R=Dialog Box(DB$,2,Resource$(18))
  266.       If R<>2 : Pop Proc : End If 
  267.    Loop 
  268.    
  269.    D=Dialog Box(DB$,3,Resource$(17))
  270.    
  271.    AD=Start(10)
  272.    
  273.    Do 
  274.  
  275.       If Printer Online=0
  276.          Repeat 
  277.             R=Dialog Box(DB$,2,Resource$(13))
  278.             Exit If R<>2,2
  279.          Until Printer Online
  280.       End If 
  281.       
  282.       Exit If Peek(AD)=0
  283.       A$=Peek$(AD,160,Chr$(10)) : Add AD,Len(A$)+1
  284.       
  285.       Do 
  286.          
  287.          A=Instr(A$,"{[") : Exit If A=0
  288.          B=Instr(A$,"]") : Exit If B=0
  289.          C=Instr(A$,"}") : Exit If C=0
  290.          
  291.          A$=Left$(A$,A-1)+Mid$(A$,B+1,C-B-1)+Mid$(A$,C+1)
  292.          
  293.       Loop 
  294.       
  295.       Trap Printer Send A$+Chr$(27)+"E"
  296.       Repeat : Exit If Inkey$<>"",2 : Multi Wait : Until Printer Check
  297.       
  298.    Loop 
  299.    
  300.    Repeat : Exit If Inkey$<>"" : Until Printer Check
  301.    Trap Printer Close 
  302.    Dialog Unfreeze 
  303.    
  304. End Proc
  305. Procedure MN_QUIT
  306.    Trap Dialog Close 
  307.    Trap Screen SCR
  308.    If Errtrap=0
  309.       For Y=1 To SCSY Step SOP
  310.          Screen Offset SCR,,Y
  311.          Screen Display SCR,,SCY+Y,,SCSY-Y
  312.          Wait Vbl 
  313.       Next 
  314.       Screen Close SCR
  315.    End If 
  316.    Erase 10 : Close 
  317. End Proc
  318. Procedure _HELP_FIND[C$]
  319.    
  320.    ' Find a keywork in the map file 
  321.    ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
  322.    
  323.    C$=Upper$(C$)-" "
  324.    C=2 : If(Left$(C$,1)<"A") or(Left$(C$,1)>"Z") : C=1 : End If 
  325.    I=0 : AFILE=0 : EFILE=0
  326.    
  327.    Repeat 
  328.       S$=Chr$(0)+Chr$($FF)+Left$(C$,C)
  329.       I=Instr(MAP$,S$,4)
  330.       If 0 : Print Mid$(S$,3);"-";Mid$(MAP$,I+2,8) : Wait Key : End If 
  331.       Exit If I=0
  332.       OI=I : Inc C
  333.    Until C>Len(C$)
  334.    
  335.    If OI
  336.       A$=Mid$(MAP$,OI-4,4) : AFILE=Leek(Varptr(A$))
  337.       A$=Left$(MAP$,4)
  338.       For I=OI+2 To OI+128
  339.          If Mid$(MAP$,I,1)=Chr$(0) : A$=Mid$(MAP$,I,4) : Exit : End If 
  340.       Next 
  341.       EFILE=Leek(Varptr(A$))
  342.    End If 
  343. End Proc
  344. Procedure _INIT_WORK
  345.    
  346.    ' Definition of alert boxes
  347.    ' ~~~~~~~~~~~~~~~~~~~~~~~~~
  348.    DB$=DB$+"IF     0VA 1=;"
  349.    DB$=DB$+"["
  350.    DB$=DB$+"SIze   1VATW160+ SW MI,40;"
  351.    DB$=DB$+"BAse   SWidth SX -2/,SHeight SY- 2/;"
  352.    DB$=DB$+"SAve   1;"
  353.    DB$=DB$+"BOx    0,0,1,SX,SY;"
  354.    DB$=DB$+"PRint  1VACX,SY2/ TH2/ -,1VA,3;"
  355.    DB$=DB$+"RUn    0,%1111;"
  356.    DB$=DB$+"]"
  357.    DB$=DB$+"IF     0VA 2=;"
  358.    DB$=DB$+"["
  359.    DB$=DB$+"SIze   SWidth 1VATW80+ MIn,64;"
  360.    DB$=DB$+"BAse   SWidth SX -2/,SHeight SY- 2/;"
  361.    DB$=DB$+"SAve   1;"
  362.    DB$=DB$+"BOx    0,0,1,SX,SY;"
  363.    DB$=DB$+"PRint  1VACX,16,1VA,3;"
  364.    DB$=DB$+"BUtton 1,16,SY24-,64,16,0,0,1;[UNpack 0,0,13BP+; PRint 12ME CX BP+,4,12ME,3;][BR0;BQ;]"
  365.    DB$=DB$+"KY     27,0;"
  366.    DB$=DB$+"BUtton 2,SX72-,SY24-,64,16,0,0,1;[UNpack 0,0,13BP+; PRint 11ME CX BP+,4,11ME,3;][BR0;BQ;]"
  367.    DB$=DB$+"KY     13,0;"
  368.    DB$=DB$+"RUn    0,3;"
  369.    DB$=DB$+"]"
  370.    DB$=DB$+"IF     0VA 3=;"
  371.    DB$=DB$+"["
  372.    DB$=DB$+"SIze   1VATW160+ SW MI,40;"
  373.    DB$=DB$+"BAse   SWidth SX -2/,SHeight SY- 2/;"
  374.    DB$=DB$+"BOx    0,0,1,SX,SY;"
  375.    DB$=DB$+"PRint  1VACX,SY2/ TH2/ -,1VA,3;"
  376.    DB$=DB$+"]"
  377.    DB$=DB$+"EXit;"
  378.    
  379.    ' Definition of the DBL program
  380.    ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  381.    DB$=DB$+"LA 1;"
  382.    DB$=DB$+"SIze   SW,SH;"
  383.    DB$=DB$+"BAse   SWidth SX -2/,SHeight SY- 2/;"
  384.    DB$=DB$+"PUzzle  21;"
  385.    DB$=DB$+"SVar    2,0;"
  386.    DB$=DB$+"LIne 24,0,7,SX288-;"
  387.    DB$=DB$+"LIne 0,SY4-,10,SX;"
  388.    DB$=DB$+"VLine SX16-,24,17,SY4-;"
  389.    DB$=DB$+"BUtton 1,0,0,24,16,0,0,1;[UNpack 0,0,1 BP+;][BR0;]"
  390.    DB$=DB$+"KY     27,0;"
  391.    DB$=DB$+"KY     $DF,0;"
  392.    DB$=DB$+"BUtton 2,SX16-,10,16,7,0,0,1;[UNpack 0,0,13 BP+;][SV2,0 2VA1- MAx;ZC4,2VA;BR0;]"
  393.    DB$=DB$+"KY     $CC,0;"
  394.    DB$=DB$+"BUtton 3,XA,YB,16,7,0,0,1;[UNpack 0,0,15 BP+;][SV2,3VA 2VA1+ MIn;ZC4,2VA;BR0;]"
  395.    DB$=DB$+"KY     $CD,0;"
  396.    DB$=DB$+"HText  5,0,11,SX16-8/,SY16-8/,0VA,2VA,8,2,3;[]"
  397.    DB$=DB$+"SVar 3,ZVar;"
  398.    DB$=DB$+"VSlide 4,SX11-,25,8,SY30-,0,SH8/2-,3VA,SH16-8/2-;[SV2,ZP;ZC 5,2VA;]"
  399.    DB$=DB$+"BB     6,SX288-,0,96,7 ME;"
  400.    DB$=DB$+"BB     7,SX96-,0,96,8 ME;"
  401.    DB$=DB$+"BB     8,SX192-,0,96,3 ME;"
  402.    DB$=DB$+"BUtton 0,24,0,SX160-,10,0,0,0;[][SM;]"
  403.    DB$=DB$+"EXit;"
  404.    
  405.    ' BB z,x,y,txt 
  406.    DB$=DB$+"UI     BB,5;["
  407.    DB$=DB$+"SZone  P5;"
  408.    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;]"
  409.    DB$=DB$+"]"
  410.    
  411.    ' Open the dialog channel
  412.    Dialog Open 1,DB$,16,1024*12
  413.    ' Display an empty screen
  414.    Poke Start(10),0 : Vdialog(1,0)=Start(10)
  415.    ' Start the interface
  416.    Trap D=Dialog Run(1,1)
  417.    Dialog Clr 1
  418. End Proc[Errtrap]
  419. Procedure _START_HYPER[A$]
  420.    Vdialog(1,0)=Start(10) : D=Dialog Run(1,1)
  421. End Proc
  422. Procedure _PRINT_MESSAGE[A$]
  423.    Cls 6,32,1 To SCSX-292,9
  424.    Gr Writing 0 : Ink 7,7,7
  425.    Text 32,7,A$
  426. End Proc
  427. Procedure _OPEN_FREE_SCREEN[SX,SY]
  428.    
  429.    ' This procedure finds a free screen, and
  430.    ' opens it with the resource bank defaults 
  431.    
  432.    For S=0 To 7
  433.       Trap Screen S
  434.       If Errtrap
  435.          Trap Resource Screen Open S,SX,SY,0
  436.          If Errtrap : Pop Proc[-1] : End If 
  437.          Screen Hide S : Cls 0 : Paper 0 : Pen 0 : Wait Vbl 
  438.          Pop Proc[S]
  439.       End If 
  440.    Next 
  441.    
  442. End Proc[-1]
  443. Procedure _INIT_BANK
  444.    Fill Start(10) To Start(10)+Length(10),0
  445.    ABANK=Start(10)
  446. End Proc
  447. Procedure _PRINT_BANK[A$]
  448.    Poke$ ABANK,A$+Chr$(10) : Add ABANK,Len(A$)+1
  449. End Proc
  450. Procedure _OMM
  451.    Auto View On 
  452.    If SCR>=0
  453.       Trap Screen Close SCR
  454.       Trap Screen Open SCR,640,8,2,Hires
  455.       If Errtrap=0
  456.          Curs Off 
  457.          Screen Display SCR,,78,,
  458.          Palette $777,$FFF
  459.          Centre Resource$(14)
  460.          Clear Key : While Mouse Key : Multi Wait : Wend 
  461.          Repeat : Multi Wait : Until Inkey$<>"" or Mouse Key<>0
  462.          Screen Close SCR
  463.       End If 
  464.    End If 
  465.    MN_QUIT
  466.    Error 24
  467. End Proc
  468. Procedure MN_ABORT[A$]
  469.    Auto View On : Wait Vbl 
  470.    R=Dialog Box(DB$,1,A$)
  471.    MN_QUIT
  472.    Edit 
  473. End Proc
  474. Procedure GRB_EDITOR_PALETTE
  475.    ADAT=Leek(Dreg(3))
  476.    If ADAT=0
  477.       Palette 0,$6F,$77,$EEE,$F00,$DD,$AA,$FF3
  478.    Else 
  479.       For C=0 To 7
  480.          Colour C,Deek(ADAT+28+C*2)
  481.       Next 
  482.       Colour 1,(Colour(2) and $EEE)/2
  483.    End If 
  484. End Proc