home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 3 / MA_Cover_3.iso / maksiu / tools / helpacc.lha / Help.Acc / Help.amosSourceCode < prev   
Encoding:
AMOS Source Code  |  1992-03-17  |  9.2 KB  |  333 lines

  1. Set Buffer 40
  2. Dim BX(2),BY(2),BXL(2)
  3. Global CURRINDEX$,LASTINDEX$,LOOKLIST$,IN$,BX(),BY(),BXL(),TITLEON,MXCHUNKBUFFER,BUFFERFORZONES,INDEXTEXTBUFFER,INDEXOFFSBUFFER,OFFSET,DFLT,MXZONES,ENTRIES
  4. '
  5. '  Hello!  Why not save this as "Help.Acc" in your usual directory, so 
  6. '  when you load AMOS, you could press HELP and have this loaded and run.
  7. '
  8. '  Then you can exit with the ESC key and go on and program.  Then, when you 
  9. '  need help on a command, simply put the cursor at the start of that
  10. '  command and push help.  :]
  11. '
  12. '  Or, if you want to read up on a bunch of commands, you can merely run 
  13. '  this and get all the information you want.  :]
  14. '
  15. '  Remember, this was NOT meant to substitute the manual, but actually 
  16. '  substitute the HELP.Acc which did nothing but let you read text files.
  17. '
  18. '  Alex...  [Warning, DO NOT COMPILE THIS PROGRAM!  It won't WORK!]
  19. '
  20. Procedure DISPENTRY[I$]
  21. POS=1 : DISPTITLE[CURRINDEX$]
  22. While POS<Len(I$)
  23.  A=Instr(I$,Chr$(1),POS)
  24.  If A>0
  25.   O$=Mid$(I$,POS,A-POS)
  26.  Else 
  27.   O$=Mid$(I$,POS)
  28.  End If 
  29. Gosub SETUP : Gosub EOP : POS=POS+Len(O$)+1
  30. If A>0
  31.  Gosub WTKEY
  32.  If Param>0 or Param<-1
  33.   Goto EXT
  34.  End If 
  35. End If 
  36. Wend 
  37. I=0
  38. While I=0
  39.  MWAIT[0,0,0,0] : I=Param
  40. Wend : Goto EXT
  41. '
  42. SETUP: Clw : Reset Zone : Return 
  43. '
  44. WTKEY: P$="Click Left Mouse Button HERE For More." : TXTBOX[P$,40,(Screen Height/8)-1,1,3,1,1] : I=0
  45. While I=0
  46.  MWAIT[BX(1),BY(1),BXL(1),1] : I=Param
  47. Wend 
  48. MURDERBOX[1] : Return 
  49. '
  50. EOP:
  51. O=Len(O$)
  52. While Mid$(O$,O-1,2)=(Chr$(13)+Chr$(10))
  53.  O=O-2
  54. Wend 
  55. Print Left$(O$,O); : Return 
  56. '
  57. EXT: ZIP=Free
  58. End Proc[Param]
  59. Procedure TXTBOX[I$,X,Y,F,B,M,TBOX]
  60. If F=B
  61.  B=F-1
  62.  If B<0
  63.   B=3
  64.  End If 
  65. End If 
  66. If M=1
  67.  I$=I$
  68.  X=X-((Len(I$)+2)/2)
  69.  If X<0
  70.   X=0
  71.  End If 
  72. End If 
  73. BX(TBOX)=X : BY(TBOX)=Y : I=(Len(I$)/2)*2+4 : BXL(TBOX)=Len(I$)+2 : Get Bob TBOX,X*8,(Y-1)*8 To(X+I)*8,(Min(Y+1,Screen Height/8))*8
  74. Ink B,B : Bar X*8,Y*8-2 To(X+Len(I$)+2)*8-1,Y*8+7
  75. Ink F,B : Text 8*(X+1),Y*8+Text Base-1,I$
  76. Ink 2,2 : Box X*8,Y*8-2 To(X+Len(I$)+2)*8-1,Y*8+7
  77. End Proc
  78. Procedure MURDERBOX[T]
  79. No Mask T : Paste Bob BX(T)*8,(BY(T)-1)*8,T
  80. End Proc
  81. Procedure MWAIT[X,Y,XL,YL]
  82. OK=0 : While OK=0 : TESTESC : OK=Mouse Click : MX=X Screen(X Mouse)/8 : YY=Y Screen(Y Mouse) : MY=(YY/8) : CY=-(YY>5 and YY<15) : Wend : MZ=Mouse Zone : RT=0
  83. If OK=2
  84.  If LOOKLIST$>""
  85.   RT=-4
  86.  End If 
  87. Else 
  88.  If((MX-X>-1 and MX-X<XL) and(MY-Y>-1 and MY-Y<=YL) and MZ=0)
  89.   RT=-1
  90.  Else 
  91.   If MZ>0
  92.    RT=MZ
  93.   Else 
  94.    If CY
  95.     If(MX>49 and MX<64) or(MX>65 and MX<79)
  96.      If MX>64
  97.       RT=-3
  98.      Else 
  99.       RT=-2
  100.      End If 
  101.     End If 
  102.    End If 
  103.   End If 
  104.  End If 
  105. End If 
  106. End Proc[RT]
  107. Procedure TESTESC
  108. I$=Inkey$
  109. If Scancode=69
  110.  If DFLT
  111.   Default 
  112.  Else 
  113.   Screen Close 0
  114.  End If 
  115.  End 
  116. End If 
  117. End Proc
  118. Procedure INDEXINPUT
  119. TXTBOX["Reading Index.  Please Wait...",40,1+Screen Height/16,1,3,1,1] : On Error Goto CRAP
  120. If Length(6)=0
  121.  Load "AMOS_Misc:AutoDocs.Abk"
  122. End If 
  123. FERGETIT:
  124. Areg(0)=Start(6) : Call Start(9) : Reserve As Work 10,Dreg(1)+16 : INDEXTEXTBUFFER=Start(10) : Reserve As Work 11,Dreg(2)*4+16 : INDEXOFFSBUFFER=Start(11) : Reserve As Work 12,Dreg(3)+16 : BUFFERFORZONES=Start(12) : MXZONES=Dreg(3)+2
  125. MXCHUNKBUFFER=Dreg(4) : Dreg(0)=BUFFERFORZONES : Dreg(1)=INDEXTEXTBUFFER : Dreg(2)=INDEXOFFSBUFFER : Areg(0)=Start(6) : Call Start(9)+4 : Goto CONT
  126. CRAP: Resume FERGETIT
  127. '
  128. CONT: Areg(0)=INDEXTEXTBUFFER : A$=Space$(MXCHUNKBUFFER) : Areg(1)=Varptr(A$) : Call Start(9)+16
  129. End Proc[Dreg(0)]
  130. Procedure DISPLIST
  131. Clw : OFFSET=1 : I=(Screen Height/8)-4 : For X=0 To I*2-1 Step 2 : DRWLINE[X+OFFSET] : Print Left$(Chr$(13)+Chr$(10),-2*(X<(I*2-2))); : Next X
  132. End Proc
  133. Procedure SCRLUP
  134. Locate 0,0 : Vscroll 1 : OFFSET=OFFSET-2 : DRWLINE[OFFSET]
  135. End Proc
  136. Procedure SCRLDW
  137. Locate 0,(Screen Height/8)-5 : OFFSET=OFFSET+2 : Print : DRWLINE[OFFSET+((Screen Height/8)-5)*2]
  138. End Proc
  139. Procedure DRWLINE[X]
  140. Print Mid$(ENTRIES$(X),2,35); : Locate 40, : Print Mid$(ENTRIES$(X+1),2,35);
  141. End Proc
  142. Procedure GTENTRY[HTSPOT,INDEX$]
  143. If((INDEX$="") and(HTSPOT>0))
  144.  Dreg(0)=HTSPOT : A$=String$(Chr$(0),MXCHUNKBUFFER) : Areg(1)=Varptr(A$) : Areg(0)=BUFFERFORZONES : Call Start(9)+12
  145.  If Dreg(0)=-1
  146.   INDEX$=Left$(A$,Instr(A$,"\"))
  147.  End If 
  148. End If 
  149. I=0
  150. If INDEX$=""
  151.  Goto EXT
  152. Else 
  153.  Areg(0)=BUFFERFORZONES : Dreg(7)=INDEXOFFSBUFFER : A$=INDEX$+String$(Chr$(0),MXCHUNKBUFFER) : Areg(1)=Varptr(A$) : Areg(2)=INDEXTEXTBUFFER : Call Start(9)+8
  154.  If Dreg(0)=-1
  155.   I=Instr(A$,Chr$(0)) : I=I-Sgn(I) : LASTINDEX$=CURRINDEX$ : CURRINDEX$=Upper$(INDEX$)
  156.  Else 
  157.   I=0
  158.  End If 
  159. End If 
  160. Goto EXT
  161. DEATH: I=0
  162. EXT:
  163. End Proc[Left$(A$,I)]
  164. Procedure HELPME
  165. If Length(8)=0
  166.  Load "AMOS_Misc:Read Me.Abk",8
  167. End If 
  168. If Right$(LOOKLIST$,Len(CURRINDEX$))<>CURRINDEX$
  169.  LOOKLIST$=LOOKLIST$+CURRINDEX$
  170. End If 
  171. A$=String$(Chr$(0),Length(8)) : I=Hunt(Start(8) To Start(8)+Length(8),Chr$(0))
  172. Copy Start(8)+12,I To Varptr(A$) : C=Instr(A$,Chr$(0)) : C=C-Sgn(C)
  173. CURRINDEX$=">        Information And Documentation\" : DISPENTRY[Left$(A$,C)] : CURRINDEX$=""
  174. End Proc[Param]
  175. Procedure TITLE
  176. If TITLEON=0
  177.  TITLEON=1 : TXTBOX["BYTE BUiLDERS INDUSTRIES AMOS AutoDocs Reader",1,1,1,3,0,2]
  178. End If 
  179. End Proc
  180. Procedure RETTITLE
  181. If TITLEON=0
  182.  MURDERBOX[2] : TITLE
  183. End If 
  184. End Proc
  185. Procedure DISPTITLE[T$]
  186. If TITLEON=1
  187.  MURDERBOX[2] : TITLEON=0
  188. End If 
  189. T$=Mid$(T$,2,Len(T$)-2) : T$=Left$(T$,45) : T$=T$+Space$(45-Len(T$)) : TXTBOX[T$,1,1,0,3,0,2]
  190. End Proc
  191. Procedure AUTODOCSSETUP
  192. DFLT=0
  193. If Screen=0
  194.  Screen Close 0 : DFLT=1
  195. End If 
  196. Default : A=Screen Base+72 : WY=(Deek(A+6)/8)*8 : WX=Deek(A+4) : SX=Deek(A+10) : SY=((Deek(A+12)) and $FFF)
  197. A=Areg(1) : Screen Close 0 : Screen Open 0,640,WY,4,Hires : Screen Display 0,SX,SY,,
  198. IN$="" : While Peek(A)<>0 and Len(IN$)<255 : IN$=IN$+Chr$(Peek(A)) : Inc A : Wend 
  199. Flash 3,"(299,5)(2aa,5)(2bb,5)(2cc,5)(2bb,5)(2aa,5)" : Paper 0 : Colour 0,0 : Cls : Colour 2,$EEE : Colour 1,$22F
  200. Wind Open 1,0,16,79,(Screen Height/8)-2,4 : Cls 0 : Curs Off : Ink 2 : Box 0,15 To Screen Width-1,Screen Height-1 : Box 7,19 To Screen Width-8,Screen Height-5 : Ink 1 : Paint 1,16
  201. TXTBOX["Display List",50,1,2,1,0,1] : TXTBOX["Reader Help",66,1,2,1,0,1] : TITLE : INDEXINPUT
  202. End Proc[Param+1]
  203. Procedure AUTODOCS
  204. Areg(0)=INDEXTEXTBUFFER : A$=Space$(MXCHUNKBUFFER) : OK=1 : ENTRIES=0 : Reserve Zone MXZONES
  205. While OK=1 : Areg(1)=Varptr(A$) : Call Start(9)+20 : L=(Areg(1)-1)-Varptr(A$) : OK=Sgn(L) : Inc ENTRIES : ENTRIES$(ENTRIES)=Left$(A$,L) : Wend : Dec ENTRIES
  206. 'Open Out 1,"df1:List of Cmds" : Sort ENTRIES$(1) : For X=1 To ENTRIES+1 : Print #1,ENTRIES$(X) : Next X : Close 1 : End 
  207. MURDERBOX[1] : I=(ENTRIES/2)*2 : ENTRIES=ENTRIES-(I<>ENTRIES) : CNTR=Screen Height/16
  208. If Len(IN$)>251
  209.  IN$=""
  210. End If 
  211. If IN$>""
  212.  IN$=IN$+" "
  213. End If 
  214. CMDS$="" : I=1 : X=0 : TEST=0
  215. While((I<Len(IN$)) and(X=0))
  216. TXTBOX["Scanning Text.  Please Hold...",40,1+Screen Height/16,1,3,1,1] : TEST=1
  217.  A=Instr(IN$," : ",I)+3
  218.  If A<4
  219.   A=Len(IN$)
  220.  End If 
  221.  C$=Mid$(IN$,I,A-I) : X=0 : LE=LE+Len(C$)
  222.  While Left$(C$,1)=" " : C$=Mid$(C$,2) : Wend 
  223.  If C$>""
  224.   While((X=0) and(C$>""))
  225.    GTENTRY[0,">"+C$+"\"] : X=Len(Param$)
  226.    If X=0
  227.      While((Instr(" #$%<>+-/*^@(=,;:",Right$(C$,1))=0) and(C$>"")) : C$=Left$(C$,Len(C$)-1) : Wend : C$=Left$(C$,Len(C$)-1)
  228.    End If 
  229.   Wend 
  230.  End If 
  231. I=I+LE
  232. Wend 
  233. If TEST
  234.  MURDERBOX[1] : TEST=0
  235. End If 
  236. If X>0
  237.  DISPENTRY[Param$] : Goto CONT
  238. End If 
  239. DISPLAYLIST: RETTITLE : LASTDOWN=0 : LASTUP=0 : BXON=1 : LASTENTRY=ENTRIES-(((Screen Height/8)-4)*2)
  240. DISPLIST : CURRINDEX$="" : TXTBOX["Click on an Entry or scroll with mouse.",40,(Screen Height/8)-1,1,3,1,1]
  241. GTNEXT:
  242. OK=0 : While OK=0 : TESTESC : OK=Mouse Click : OK=-(OK=1 or OK=4) : MX=X Screen(X Mouse)/8 : Y=Y Screen(Y Mouse) : MY=Y/8 : CY=-(Y>5 and Y<15) : I=MY-CNTR
  243.  If Abs(I)>(Screen Height/24)
  244.   If I>0
  245.    If Timer>LASTDOWN and(OFFSET/2)*2<LASTENTRY
  246.     If BXON>0
  247.      MURDERBOX[1] : BXON=0
  248.     End If 
  249.     SCRLDW : LASTDOWN=Timer+((Screen Height/16)-Min((Abs(I)-(Screen Height/24))*3,Screen Height/16))
  250.    End If 
  251.   Else 
  252.    If Timer>LASTUP and OFFSET>1
  253.     If BXON>0
  254.      MURDERBOX[1] : BXON=0
  255.     End If 
  256.     SCRLUP : LASTUP=Timer+((Screen Height/16)-Min((Abs(I)-(Screen Height/24))*3,Screen Height/16))
  257.    End If 
  258.   End If 
  259.  End If 
  260. Wend 
  261. If BXON>0
  262.  BXON=0 : MURDERBOX[1]
  263. End If 
  264. MY=MY-3
  265. If CY>0
  266.  If(MX>49 and MX<64) or(MX>65 and MX<79)
  267.   If MX>64
  268.    HELPME : Goto CONT
  269.   Else 
  270.    Goto DISPLAYLIST
  271.   End If 
  272.  Else 
  273.   Goto GTNEXT
  274.  End If 
  275. End If 
  276. I$=""
  277. If MY>-1 and MY<(Screen Height/8-4)
  278.  I=OFFSET+MY*2-(MX>41) : I$=ENTRIES$(I)+"\" : GTENTRY[0,I$]
  279.  If Len(Param$)>0
  280.   DISPENTRY[Param$] : Goto CONT
  281.  Else 
  282.   Goto GTNEXT
  283.  End If 
  284. Else 
  285.  Goto GTNEXT
  286. End If 
  287. '
  288. CONT: I=Param
  289. If I=-2
  290.  Goto DISPLAYLIST
  291. End If 
  292. If I=-3
  293.  HELPME : Goto CONT
  294. End If 
  295. If I=-4
  296.  If LOOKLIST$>""
  297.   NXTONE:
  298.   Y=Len(LOOKLIST$) : While((Mid$(LOOKLIST$,Y,1)<>">") and(Y>0)) : Dec Y : Wend 
  299.   I$=Mid$(LOOKLIST$,Y) : GTENTRY[0,I$]
  300.   If Len(Param$)>0
  301.    If CURRINDEX$=LASTINDEX$
  302.     LOOKLIST$=Left$(LOOKLIST$,Y-Sgn(Y)) : Goto NXTONE
  303.    End If 
  304.    LOOKLIST$=Left$(LOOKLIST$,Y-Sgn(Y)) : DISPENTRY[Param$]
  305.   Else 
  306.    I=0
  307.   End If 
  308.  End If 
  309. End If 
  310. If I>0
  311.  GTENTRY[I,""]
  312.  If Len(Param$)>0
  313.   Gosub LIST : DISPENTRY[Param$]
  314.  Else 
  315.   I=0
  316.  End If 
  317. End If 
  318. If I=0 or I=-1
  319.  MWAIT[0,0,-1,-1]
  320. End If 
  321. Goto CONT
  322. '
  323. LIST:
  324. If((Right$(LOOKLIST$,Len(LASTINDEX$))<>LASTINDEX$) and(Instr(LOOKLIST$,LASTINDEX$)=0))
  325.  If Right$(LOOKLIST$,Len(LASTINDEX$))<>LASTINDEX$
  326.    LOOKLIST$=LOOKLIST$+LASTINDEX$
  327.  End If 
  328. End If 
  329. Return 
  330. End Proc
  331. AUTODOCSSETUP : ENTRIES=Param : Dim ENTRIES$(ENTRIES)
  332. Global ENTRIES$()
  333. AUTODOCS