home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format 42 / af042a.adf / Help.ACC / Help.amosSourceCode < prev    next >
AMOS Source Code  |  1992-02-21  |  14KB  |  511 lines

  1. ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2. '                             AMOS Ascii Reader  
  3. '
  4. '                              By P.J.Hickman
  5. '
  6. '                        (c) 1990 Mandarin Software  
  7. ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  8. Default 
  9. If Chip Free+Fast Free<100000
  10.    Close Workbench 
  11.    Close Editor 
  12. End If 
  13. If Areg(1)
  14.    F$="AMOS:Help/Acc_Help.Lnk"
  15.    HELP_CALLED=True
  16. Else 
  17.    Screen Close 0
  18.    HELP_CALLED=False
  19. End If 
  20. Get Rom Fonts 
  21. SET_UP_SCREENS
  22. ' -----------------------------------------------------------------------
  23. '              Define global variables for ascii reader bit
  24. ' -----------------------------------------------------------------------
  25. Dim PAGESTART(100),PAGEEND(100)
  26. FILE_PRESENT=False
  27. CURRENT_PAGE=0
  28. PAGE_LENGTH=23
  29. ' -----------------------------------------------------------------------
  30. '                Define global variables for link file bit 
  31. ' -----------------------------------------------------------------------
  32. Dim OPTION$(7,1)
  33. For LOP=0 To 7
  34.    OPTION$(LOP,0)=""
  35.    OPTION$(LOP,1)=""
  36. Next LOP
  37. MENU_TITLE$=Space$(60)
  38. AMOUNT_OF_OPTIONS=0
  39. LINK_FILE_PRESENT=False
  40. LINK_MENU_DISPLAYED=False
  41. LINK_SELECTED=0
  42. ' -----------------------------------------------------------------------
  43. '                       Global variables for alert box 
  44. ' -----------------------------------------------------------------------
  45. Dim LINE$(5),BUTTON$(3)
  46. ' -----------------------------------------------------------------------
  47. Screen 2
  48. If HELP_CALLED
  49.    FILE_LOAD
  50.    F$=""
  51. End If 
  52. Repeat 
  53.    Repeat 
  54.       Screen 1
  55.       POSITION1=Mouse Zone
  56.       Screen 2
  57.       POSITION2=Mouse Zone
  58.       Screen 1
  59.       CLICK=Mouse Click
  60.    Until CLICK
  61.    If POSITION1=1 Then FINISH
  62.    If POSITION1=2 and Not LINK_MENU_DISPLAYED Then CHANGE_RES
  63.    If POSITION1=3 Then FILE_LOAD
  64.    If POSITION1=4 and FILE_PRESENT and Not LINK_MENU_DISPLAYED Then CHOOSE_PRINT
  65.    If POSITION1=5 and FILE_PRESENT and Not LINK_MENU_DISPLAYED Then PAGE_UP
  66.    If POSITION1=6 and FILE_PRESENT and Not LINK_MENU_DISPLAYED Then PAGE_DOWN
  67.    If POSITION1=7 and FILE_PRESENT and LINK_FILE_PRESENT and LINK_MENU_DISPLAYED
  68.       PAGE_SHOW[CURRENT_PAGE]
  69.       LINK_MENU_DISPLAYED=False
  70.       POSITION1=0
  71.    End If 
  72.    If POSITION1=7 and LINK_FILE_PRESENT and Not LINK_MENU_DISPLAYED
  73.       DISPLAY_MENU
  74.       POSITION1=0
  75.    End If 
  76.    If POSITION2>0 and POSITION2=<(AMOUNT_OF_OPTIONS+1) and POSITION2<>LINK_SELECTED and LINK_MENU_DISPLAYED
  77.       LINK_SELECTED=POSITION2
  78.       LINK_LOADER
  79.    End If 
  80. Until False
  81. ' -----------------------------------------------------------------------
  82. '                           Finish the Ascii Reader. 
  83. ' -----------------------------------------------------------------------
  84. Procedure FINISH
  85.    Shared F$
  86.    If F$="AMOS:Help/Acc_Help.Lnk"
  87.       Screen 2
  88.       Clw 
  89.       Centre "Please remember that this Ascii Reader uses a lot of memory."
  90.       Print 
  91.       Centre "You should erase it from memory using the 'NEW OTHERS' option"
  92.       Print 
  93.       Centre "from the editor menu."
  94.       Boom 
  95.       Timer=0
  96.       Repeat : Wait Vbl : Until Mouse Click or Timer>200
  97.    End If 
  98.    Default 
  99.    End 
  100. End Proc
  101. ' -----------------------------------------------------------------------
  102. '    Aaron Fothergill's (slightly altered to work in hires) Alert Box
  103. '       (Uses ZONE's 11+ and returns the button number as a PARAM) 
  104. ' -----------------------------------------------------------------------
  105. Procedure ALERT[W,H,BACK_COL,LINE_COL,NB,NL]
  106.    Shared LINE$(),BUTTON$()
  107.    Screen 2
  108.    TEMP=0
  109.    W=W*8
  110.    H=H*8
  111.    X=(Screen Width/2)-W/2
  112.    Y=10
  113.    Get Block 241,0,Y-2,Screen Width,H+6
  114.    Ink BACK_COL
  115.    Bar X,Y-2 To X+W,Y+H
  116.    Ink LINE_COL
  117.    Box X+1,Y-2 To X+W-1,Y+H-1
  118.    S=W/8/(NB+1)+1
  119.    Paper BACK_COL
  120.    Pen LINE_COL
  121.    For LOP=0 To NL
  122.       Locate 0,Y Text(Y)+1+LOP
  123.       Centre LINE$(LOP)
  124.    Next LOP
  125.    TEMP=0
  126.    While TEMP<>NB
  127.       Locate X Text(X)+S/2+S*TEMP,Y Text(Y+H)-2
  128.       Print Border$(Zone$(BUTTON$(TEMP),TEMP+10),2);
  129.       Inc TEMP
  130.    Wend 
  131.    TEMP=0
  132.    Repeat 
  133.       Repeat : Until Mouse Click and Mouse Key=1
  134.       TEMP=Mouse Zone
  135.    Until TEMP<>0
  136.    Put Block 241,0,Y-2
  137.    Del Block 241
  138.    Add TEMP,-9
  139. End Proc[TEMP]
  140. ' -----------------------------------------------------------------------
  141. Procedure CHOOSE_PRINT
  142.    Shared LINE$(),BUTTON$(),ENOUGH_MEM
  143.    If Fast Free+Chip Free>35000
  144.       ENOUGH_MEM=True
  145.    Else 
  146.       ENOUGH_MEM=False
  147.    End If 
  148.    If ENOUGH_MEM
  149.       LINE$(0)="How much of the file would you like to print?"
  150.       BUTTON$(0)="Just a page"
  151.       BUTTON$(1)="All of it!!"
  152.       BUTTON$(2)="CANCEL"
  153.       ALERT[52,7,0,1,3,1]
  154.       If Param=1
  155.          PAGE_PRINT
  156.       Else 
  157.          If Param=2
  158.             FILE_PRINT
  159.          End If 
  160.       End If 
  161.    Else 
  162.       LINE$(0)="Sorry, you need more memory to do this."
  163.       LINE$(2)="Print this file from Workbench instead."
  164.       BUTTON$(0)="Thanks for the reminder"
  165.       ALERT[44,8,0,1,1,3]
  166.    End If 
  167. End Proc
  168. ' -----------------------------------------------------------------------
  169. Procedure MENU_TITLE_PRINT
  170.    Shared MENU_TITLE$
  171.    Centre At(,1)+MENU_TITLE$
  172.    For LOP=1 To Len(MENU_TITLE$)+2
  173.       TEMP$=TEMP$+"~"
  174.    Next LOP
  175.    Centre At(,2)+TEMP$
  176. End Proc
  177. ' -----------------------------------------------------------------------
  178. Procedure DISPLAY_MENU
  179.    Shared MENU_TITLE$,OPTION$(),AMOUNT_OF_OPTIONS,LINK_MENU_DISPLAYED
  180.    Screen 2
  181.    Cls 0
  182.    MENU_TITLE_PRINT
  183.    NUM=1
  184.    For LOP=5 To((AMOUNT_OF_OPTIONS)*2)+5 Step 2
  185.       Print At(14,LOP);NUM;At(14,LOP);"[";At(16,LOP);"]  ";OPTION$(NUM-1,0)
  186.       Inc NUM
  187.    Next LOP
  188.    Inverse On 
  189.    Centre At(,21)+"PLEASE CLICK ON THE OPTION YOU WISH TO VIEW."
  190.    Inverse Off 
  191.    LINK_MENU_DISPLAYED=True
  192. End Proc
  193. ' -----------------------------------------------------------------------
  194. Procedure LINK_FILE_PROCESS
  195.    Shared LINK_FILE_PRESENT
  196.    LINK_FILE_PRESENT=True
  197.    MENU_TITLE_PRINT
  198.    DISPLAY_MENU
  199.    Limit Mouse X Hard(1,0),Y Hard(1,0) To X Hard(1,319),Y Hard(2,168)
  200. End Proc
  201. ' -----------------------------------------------------------------------
  202. Procedure FILE_PRINT
  203.    Shared FILE_LENGTH,LINE$(),BUTTON$()
  204.    On Error Goto FATEL_ERROR1 : 
  205.    For LOP=Start(10) To Start(10)+Length(10)
  206.       A=Peek(LOP)
  207.       Lprint Chr$(A);
  208.       If A=10 Then Lprint Chr$(13);
  209.    Next LOP
  210.    Lprint 
  211.    RECOVER_1:
  212.    Pop Proc
  213.    FATEL_ERROR1:
  214.    For LOP=1 To 5
  215.       Bell 
  216.       Wait 2
  217.    Next LOP
  218.    LINE$(0)="There is a Printer problem!"
  219.    BUTTON$(0)="Sorry about that"
  220.    ALERT[32,7,0,1,1,1]
  221.    Resume RECOVER_1
  222. End Proc
  223. ' -----------------------------------------------------------------------
  224. Procedure CHANGE_RES
  225.    Shared PAGE_LENGTH,FILE_PRESENT
  226.    Ink 0
  227.    If PAGE_LENGTH=18
  228.       Text 107,17,"P"
  229.       PAGE_LENGTH=23
  230.    Else 
  231.       Text 107,17,"N"
  232.       PAGE_LENGTH=18
  233.    End If 
  234.    If FILE_PRESENT
  235.       FILE_PROCESS
  236.    End If 
  237. End Proc
  238. ' -----------------------------------------------------------------------
  239. Procedure PAGE_PRINT
  240.    Shared CURRENT_PAGE,PAGESTART(),PAGEEND(),LINE$(),BUTTON$()
  241.    On Error Goto FATEL_ERROR2
  242.    ST=Start(10)
  243.    For LOP=PAGESTART(CURRENT_PAGE) To PAGEEND(CURRENT_PAGE)
  244.       A=Peek(LOP)
  245.       Lprint Chr$(A);
  246.       If A=10 Then Lprint Chr$(13);
  247.    Next LOP
  248.    Lprint 
  249.    RECOVER_2:
  250.    Pop Proc
  251.    FATEL_ERROR2:
  252.    For LOP=1 To 5
  253.       Bell 
  254.       Wait 2
  255.    Next LOP
  256.    LINE$(0)="There is a Printer problem!"
  257.    BUTTON$(0)="Sorry about that"
  258.    ALERT[32,7,0,1,1,1]
  259.    Resume RECOVER_2
  260. End Proc
  261. ' -----------------------------------------------------------------------
  262. Procedure PAGE_UP
  263.    Shared CURRENT_PAGE,PAGESTART(),PAGEEND()
  264.    If CURRENT_PAGE>0
  265.       Dec CURRENT_PAGE
  266.       PAGE_SHOW[CURRENT_PAGE]
  267.    End If 
  268. End Proc
  269. ' -----------------------------------------------------------------------
  270. Procedure PAGE_DOWN
  271.    Shared CURRENT_PAGE,PAGESTART(),PAGEEND(),PAGE_NUM
  272.    If CURRENT_PAGE<PAGE_NUM-1
  273.       Inc CURRENT_PAGE
  274.       PAGE_SHOW[CURRENT_PAGE]
  275.    End If 
  276. End Proc
  277. ' -----------------------------------------------------------------------
  278. Procedure FILE_LOAD
  279.    Shared FILE_PRESENT,FILE_LENGTH,LINK_FILE_PRESENT
  280.    Shared AMOUNT_OF_OPTIONS,MENU_TITLE$,OPTION$(),LINE$(),BUTTON$(),F$
  281.    On Error Goto FATEL_ERROR3
  282.    TEMP=1
  283.    If F$<>"AMOS:Help/Acc_Help.Lnk"
  284.       F$=Fsel$("","","Pick File To View")
  285.    Else 
  286.       TEMP=3
  287.    End If 
  288.    If Exist(F$)
  289.       Open In 1,F$
  290.       Input #1,IDTAG$
  291.       If IDTAG$="AARLFBYPJH"
  292.          TEMP=2
  293.          Input #1,MENU_TITLE$
  294.          Input #1,TEMP$
  295.          AMOUNT_OF_OPTIONS=Val(TEMP$)
  296.          For LOP=0 To AMOUNT_OF_OPTIONS
  297.             Input #1,OPTION$(LOP,0)
  298.             Input #1,OPTION$(LOP,1)
  299.          Next LOP
  300.          Close 
  301.          LINK_FILE_PROCESS
  302.       Else 
  303.          Close 
  304.          FILE_LOADER[F$]
  305.       End If 
  306.    Else 
  307.       For LOP=1 To 5
  308.          Bell 
  309.          Wait 2
  310.       Next LOP
  311.       If F$="AMOS:Help/Acc_Help.Lnk"
  312.          LINE$(0)="    I cannot find     "
  313.          LINE$(1)=" 'AMOS:Help/Acc_Help.Lnk' "
  314.          BUTTON$(0)="Oh no......"
  315.          ALERT[23,8,0,1,1,2]
  316.       Else 
  317.          For LOP=1 To 5
  318.             Bell 
  319.             Wait 2
  320.          Next LOP
  321.          LINE$(0)="That File Does not"
  322.          LINE$(1)="   exist!!!!!!!   !"
  323.          BUTTON$(0)="  Woops......  "
  324.       End If 
  325.    End If 
  326.    RECOVER_3:
  327.    F$=""
  328.    Pop Proc
  329.    FATEL_ERROR3:
  330.    Close 
  331.    If FILE$<>""
  332.       For LOP=1 To 5
  333.          Bell 
  334.          Wait 2
  335.       Next LOP
  336.       If TEMP=1
  337.          LINE$(0)="Woops, disc error!"
  338.          BUTTON$(0)="Never mind."
  339.          ALERT[21,7,0,1,1,1]
  340.       Else 
  341.          If TEMP=2
  342.             LINE$(0)="I seem to be having"
  343.             LINE$(1)="a problem with this"
  344.             LINE$(2)="      Link file.   "
  345.             BUTTON$(0)="Sorry......"
  346.             ALERT[22,8,0,1,1,3]
  347.          Else 
  348.             If TEMP=3
  349.                LINE$(0)="    I cannot find     "
  350.                LINE$(1)=" 'AMOS:Help/Acc_Help.Lnk' "
  351.                BUTTON$(0)="Oh no......"
  352.                ALERT[23,8,0,1,1,2]
  353.             End If 
  354.          End If 
  355.       End If 
  356.    End If 
  357.    Resume RECOVER_3
  358. End Proc
  359. ' -----------------------------------------------------------------------
  360. Procedure LINK_LOADER
  361.    Shared POSITION2,AMOUNT_OF_OPTIONS,MENU_TITLE$,OPTION$(),LINK_SELECTED,F$
  362.    FILE_LOADER[OPTION$(POSITION2-1,1)]
  363.    If Param=1 Then LINK_SELECTED=0
  364. End Proc
  365. ' -----------------------------------------------------------------------
  366. Procedure FILE_LOADER[F$]
  367.    Shared FILE_LENGTH,FILE_PRESENT,LINE$(),BUTTON$()
  368.    TEMP=0
  369.    On Error Goto FATEL_ERROR4
  370.    Open In 1,F$
  371.    FILE_LENGTH=Lof(1)
  372.    Close 
  373.    Erase 10
  374.    If Chip Free+Fast Free>FILE_LENGTH+1024
  375.       Reserve As Work 10,FILE_LENGTH
  376.       Bload F$,Start(10)
  377.       FILE_PROCESS
  378.       FILE_PRESENT=True
  379.    Else 
  380.       LINE$(0)=" Sorry, you do not have enough"
  381.       LINE$(1)="  memory to load this file.  "
  382.       BUTTON$(0)=" Never mind.... "
  383.       ALERT[32,8,0,1,1,2]
  384.    End If 
  385.    RECOVER_4:
  386.    Close 
  387.    Pop Proc
  388.    FATEL_ERROR4:
  389.    TEMP=1
  390.    LINE$(0)="Woops, disc error!"
  391.    BUTTON$(0)="Never mind."
  392.    ALERT[21,7,0,1,1,1]
  393.    Resume RECOVER_4
  394. End Proc[TEMP]
  395. ' -----------------------------------------------------------------------
  396. Procedure SET_UP_SCREENS
  397.    Unpack 5 To 1
  398.    ' ----- Show 'P' in TV icon to indicate PAL mode ----- 
  399.    Ink 0
  400.    Text 107,17,"P"
  401.    Restore POSITION_OF_ZONES
  402.    Reserve Zone 7
  403.    For LOP=1 To 7
  404.       Read X1,X2
  405.       Set Zone LOP,X1,4 To X2,27
  406.    Next LOP
  407.    OPEN_HIRES
  408.    Limit Mouse X Hard(1,0),Y Hard(1,0) To X Hard(1,320),Y Hard(2,200)
  409.    Reserve Zone 15
  410.    NUM=1
  411.    For LOP=5 To 19 Step 2
  412.       Print At(0,LOP);Zone$(Space$(79),NUM)
  413.       Inc NUM
  414.    Next LOP
  415.    Screen 1
  416.    POSITION_OF_ZONES:
  417.    Data 8,89,96,125,132,159,166,194,201,229,236,264,271,312
  418. End Proc
  419. ' -----------------------------------------------------------------------
  420. Procedure OPEN_HIRES
  421.    Shared PAGE_LENGTH
  422.    If PAGE_LENGTH=19
  423.       SCRLENGTH=168
  424.    Else 
  425.       SCRLENGTH=210
  426.    End If 
  427.    Screen Open 2,640,SCRLENGTH,2,Hires
  428.    Screen Display 2,,83,640,SCRLENGTH
  429.    Colour 1,$CCC
  430.    Curs Off : Flash Off : Cls 0
  431. End Proc
  432. ' -----------------------------------------------------------------------
  433. Procedure CONVERT
  434.    Shared FILE_LENGTH
  435.    ST=Start(10)
  436.    EN=Start(10)+FILE_LENGTH
  437.    Repeat 
  438.       X=Hunt(ST To EN,Chr$(13))
  439.       If X<>0
  440.          Poke X,32
  441.          ST=X
  442.       End If 
  443.    Until ST=EN or X=0
  444. End Proc
  445. ' -----------------------------------------------------------------------
  446. Procedure FILE_PROCESS
  447.    Shared PAGESTART(),PAGEEND(),FILE_LENGTH,PAGE_NUM,PAGE_LENGTH
  448.    Shared LINK_MENU_DISPLAYED,CURRENT_PAGE
  449.    PAGE_NUM=0
  450.    LINES=-1
  451.    TEMP=0
  452.    COUNT=0
  453.    Screen 2
  454.    Cls 0
  455.    Centre At(,9)+"Please Wait, Processing Document..........."
  456.    Bell 
  457.    CONVERT
  458.    Centre At(,9)+"Please Wait, Paginating Document..........."
  459.    Bell 
  460.    ST=Start(10)
  461.    EN=Start(10)+FILE_LENGTH
  462.    COUNT=ST
  463.    Wait 10
  464.    Repeat 
  465.       If PAGE_NUM=0
  466.          PAGESTART(PAGE_NUM)=ST
  467.       Else 
  468.          PAGESTART(PAGE_NUM)=COUNT+1
  469.       End If 
  470.       LINES=0
  471.       Repeat 
  472.          Inc LINES
  473.          Inc COUNT
  474.          TEMP=False
  475.          Repeat 
  476.             A=Hunt(COUNT To EN,Chr$(10))
  477.             If(A-COUNT>79) or A=0
  478.                Add COUNT,79
  479.                TEMP=True
  480.             Else 
  481.                COUNT=A
  482.             End If 
  483.          Until COUNT=>EN or A<>0 or TEMP=True
  484.       Until LINES=PAGE_LENGTH or COUNT=>EN
  485.       PAGEEND(PAGE_NUM)=COUNT
  486.       Inc PAGE_NUM
  487.    Until COUNT=>EN
  488.    PAGEEND(PAGE_NUM-1)=EN
  489.    Cls 0
  490.    PAGE_SHOW[0]
  491.    CURRENT_PAGE=0
  492.    Screen 1
  493.    LINK_MENU_DISPLAYED=False
  494. End Proc
  495. ' -----------------------------------------------------------------------
  496. Procedure PAGE_SHOW[NUM]
  497.    Shared PAGESTART(),PAGEEND(),FILE_LENGTH,PAGE_NUM,PAGE_LENGTH
  498.    Screen 2
  499.    Cls 0
  500.    Inverse On 
  501.    Centre At(,PAGE_LENGTH+1)+"~~~~~~~~ PAGE:"+Str$(NUM+1)+" ~~~~~~~~"
  502.    Inverse Off 
  503.    Home 
  504.    ST=Start(10)
  505.    For LOP=PAGESTART(NUM) To PAGEEND(NUM)
  506.       A=Peek(LOP)
  507.       Print Chr$(A);
  508.       If A=10 Then Print Chr$(13);
  509.    Next LOP
  510.    Screen 1
  511. End Proc