home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 301-325 / apd301 / amos_text_v1.2 / amos_text_v1.amosSourceCode next >
AMOS Source Code  |  1991-06-29  |  19KB  |  726 lines

  1. Rem *********************************************************************  
  2. Rem ** AMOS Text by Bouch '91 (C) 1991 RIPOFFWARE SOFTWARE PRODUCTIONS **  
  3. Rem *********************************************************************  
  4. Rem
  5. Rem VERSION 1.2
  6. Rem
  7. Set Buffer 11
  8. Break Off 
  9. TITLE$=""
  10. Dim LINES(2000),FILE$(50)
  11. Procedure SET_UP_SCREEN
  12.    Shared TITLE$
  13.    Screen Open 1,320,50,8,Lowres
  14.    Curs Off 
  15.    Flash Off 
  16.    Unpack 10
  17.    Screen Display 1,130,250,320,50
  18.    Palette 0,$F00,$F0,$3F,$FFF,$BBB,$888,$444
  19.    Colour 17,$999
  20.    Colour 18,$555
  21.    Colour 19,$333
  22.    Screen Open 0,640,200,2,Hires
  23.    Colour 17,$999
  24.    Colour 18,$555
  25.    Colour 19,$333
  26.    Curs Off 
  27.    Flash Off 
  28.    Palette 0,$FFF
  29.    Pen 1
  30.    Paper 0
  31.    Cls 
  32.    Set Rainbow 1,1,215,"(2,1,15)(1,0,150)(2,-1,15)","(2,1,15)(1,0,150)(2,-1,15)","(2,1,15)(1,0,150)(2,-1,15)"
  33.    Rainbow 1,0,40,215
  34.    Print Cdown$
  35.    Centre "-----AMOS TEXT READER-----(C) 1991 RIPOFFWARE-----BY DAVID BOUCHER-----"
  36.    Print Cdown$
  37.    Centre "LOADING FILE LIST....PLEASE WAIT..."
  38.    Print Cdown$
  39.    Screen 1
  40.    Reserve Zone 8
  41.    For B=1 To 6
  42.       Read X
  43.       Set Zone B,X,13 To X+12,25
  44.    Next 
  45.    Data 149,163,184,198,219,232
  46.    Set Zone 7,265,2 To 275,35
  47.    Set Zone 8,253,2 To 263,35
  48.    Limit Mouse 128,50 To 447,290
  49.    INFO_LINE["WELCOME TO AMOS TEXT - BY DAVID BOUCHER"]
  50.    Do 
  51.       P=0
  52.       LIST_DIR[":DOC_Files","*.DOC"]
  53.       If Param<0 Then REQUEST["ERROR:","CANNOT FIND "+Chr$(34)+":DOC_FILES"+Chr$(34),"DIRECTORY.","RETRY!","EXIT!"] : P=Param
  54.       If Param=0 Then REQUEST["ERROR:","CANNOT FIND ANY "+Chr$(34)+".DOC"+Chr$(34),"FILES.","RETRY!","EXIT!"] : P=Param
  55.       Exit If P=0
  56.       If P=2 Then Wait 10 : End 
  57.    Loop 
  58.    Screen 0
  59.    Cls 
  60.    Bank To Menu 8
  61. End Proc
  62. Procedure SELECT_FILE
  63.    Shared TITLE$
  64.    Menu Off 
  65.    INFO_LINE["LOAD TEXT FILE"]
  66.    Screen 0
  67.    Cls 
  68.    Print Cdown$
  69.    Centre "-----AMOS TEXT READER-----(C) 1991 RIPOFFWARE-----BY DAVID BOUCHER-----"
  70.    Print Cdown$
  71.    If TITLE$<>"" Then ABORT$="ABORT!"
  72.    PT$=TITLE$
  73.    LIST_REQ["PICK A FILE TO LOAD","OK!",ABORT$]
  74.    T$=Param$
  75.    If T$="" Then Menu On : Pop Proc
  76.    Do 
  77.       NEW_FILE[":DOC_Files/"+T$]
  78.       If Param=True
  79.          TITLE$=T$
  80.          Centre "DISPLAYING "+TITLE$
  81.          Print Cdown$
  82.          Centre "PLEASE WAIT WHILE I SORT THIS TEXT FILE OUT!"
  83.          Print Cdown$
  84.          INFO_LINE["WELCOME TO AMOS TEXT - BY DAVID BOUCHER"]
  85.          DEF_LINES
  86.          Exit 
  87.       Else 
  88.          REQUEST["ERROR:","COULD NOT LOAD",T$,"RETRY!","ABORT!"]
  89.          If Param=2 : Wait 10 : Pop Proc : End If 
  90.       End If 
  91.    Loop 
  92.    Menu On 
  93. End Proc
  94. Procedure MAINLOOP
  95.    Shared L,LINE,TITLE$,SEARCH$
  96.    If TITLE$="" Then Wait 10 : End 
  97.    L=0
  98.    SEARCH$=""
  99.    PAGE_ON[24]
  100.    Menu$(5)=" "+TITLE$," "+TITLE$
  101.    Screen 1
  102.    Do 
  103.       PANEL
  104.       If MES=0 Then INFO_LINE["PRESS HELP FOR MORE INFO"] : MES=2
  105.       CONTROL
  106.       DUMMY=Free
  107.       If MES=1 Then MES=0
  108.       C=Param
  109.       Screen 0
  110.       If C=2 and L<LINE-1 Then PAGE_ON[24] : C=0
  111.       If C=2 Then INFO_LINE["--END OF TEXT--"] : MES=1
  112.       If C=1 and L>24 Then PAGE_BACK[24] : C=0
  113.       If C=1 Then INFO_LINE["--START OF TEXT--"] : MES=1
  114.       If C=4 and L<LINE-1 Then PAGE_ON[1] : C=0
  115.       If C=4 Then INFO_LINE["--END OF TEXT--"] : MES=1
  116.       If C=3 and L>24 Then PAGE_BACK[1] : C=0
  117.       If C=5 and L>24
  118.          Cls 
  119.          L=0
  120.          LED[5,1]
  121.          Screen 0
  122.          PAGE_ON[24]
  123.          LED[5,0]
  124.          C=0
  125.       End If 
  126.       If C=5 Then INFO_LINE["--START OF TEXT--"] : MES=1
  127.       If C=6 and L<LINE-1
  128.          Cls 
  129.          L=LINE-25
  130.          LED[6,1]
  131.          Screen 0
  132.          PAGE_ON[24]
  133.          LED[6,0]
  134.       End If 
  135.       If C=6 Then INFO_LINE["--END OF TEXT--"] : MES=1
  136.       If C=7 Then Wait 10 : End 
  137.       Screen 1
  138.       If L<24 Then L=24
  139.       If L=LINE Then L=LINE-1
  140.       If C=8 Then HELP[1] : MES=0
  141.       If C=9 Then HELP[2] : MES=0
  142.       If C=10 Then SEARCH : MES=0
  143.       If C=11 Then OUTPUT[1,LINE-1] : MES=1
  144.       Exit If C=12
  145.    Loop 
  146. End Proc
  147. Procedure LIST_DIR[DR$,FILTER$]
  148.    Shared FILE$()
  149.    If Exist(DR$)
  150.       Dir$=DR$
  151.       FILE=1
  152.       FILTER$=Upper$(FILTER$)
  153.       FILE$=Upper$(Dir First$(FILTER$))
  154.       FILTER$=FILTER$-"*"
  155.       Do 
  156.          Exit If FILE$=""
  157.          If Left$(FILE$,1)<>"*"
  158.             P=Instr(FILE$,FILTER$)+Len(FILTER$)-1
  159.             FILE$=Mid$(FILE$,2,P-1)
  160.             FILE$(FILE)=FILE$
  161.             Inc FILE
  162.          End If 
  163.          FILE$=Upper$(Dir Next$)
  164.       Loop 
  165.    End If 
  166. End Proc[FILE-1]
  167. Procedure NEW_FILE[TITLE$]
  168.    If Exist(TITLE$)
  169.       Erase 9
  170.       Open In 1,TITLE$
  171.       L=Lof(1)
  172.       Close 1
  173.       Reserve As Work 9,L+2
  174.       Bload TITLE$,Start(9)
  175.       OK=True
  176.    End If 
  177. End Proc[OK]
  178. Procedure DEF_LINES
  179.    Shared LINES(),LINE
  180.    For LINE=0 To 26
  181.       LINES(LINE)=0
  182.    Next 
  183.    LINES(0)=Start(9)-1
  184.    LINE=1
  185.    L=Start(9)
  186.    Do 
  187.       OL=L
  188.       L=Hunt(L+1 To Start(9)+Length(9),Chr$(10))
  189.       Exit If L=0
  190.       If OL+78<L Then L=OL+75
  191.       LINES(LINE)=L
  192.       Inc LINE
  193.       Exit If L>=Start(9)+Length(9)
  194.    Loop 
  195.    LINES(LINE)=0
  196.    If LINE<25 Then LINE=25
  197. End Proc
  198. Procedure CONTROL
  199.    While Z=0
  200.       Clear Key 
  201.       Do 
  202.          K$=Inkey$
  203.          Z=Mouse Zone
  204.          M1=Choice(1)
  205.          M2=Choice(2)
  206.          If K$<>"" Then Z=0 : M2=0 : Exit 
  207.          If Mouse Click=1 and Z>0 Then M2=0 : Exit 
  208.          If Choice and M1=1 Then Z=0 : Z$="" : Exit 
  209.       Loop 
  210.       Z$=Lower$(K$)
  211.       SC=Scancode
  212.       If Z$="u" Then Z=1
  213.       If Z$="d" Then Z=2
  214.       If Z$=" " Then Z=2
  215.       If Z$=Chr$(30) Then Z=3
  216.       If Z$=Chr$(31) Then Z=4
  217.       If Z$="t" Then Z=5
  218.       If Z$="b" Then Z=6
  219.       If Z$="e" Then Z=7
  220.       If Z$=Chr$(27) Then Z=7
  221.       If M2=6 Then Z=7
  222.       If SC=95 Then Z=8
  223.       If M2=1 Then Z=8
  224.       If Z$="c" Then Z=9
  225.       If M2=2 Then Z=9
  226.       If Z$="s" Then Z=10
  227.       If M2=3 Then Z=10
  228.       If Z$="p" Then Z=11
  229.       If M2=4 Then Z=11
  230.       If Z$="l" Then Z=12
  231.       If M2=5 Then Z=12
  232.    Wend 
  233. End Proc[Z]
  234. Procedure PRNT_LINE[PL]
  235.    Shared LINES()
  236.    If LINES(PL)>0
  237.       For CH=LINES(PL-1)+1 To LINES(PL)
  238.          L$=L$+Chr$(Peek(CH))
  239.       Next 
  240.       Cline 
  241.    If L$=Chr$(10) : Print : Else Print L$-Chr$(10) : End If 
  242.    Else 
  243.       Print 
  244.    End If 
  245. End Proc
  246. Procedure PAGE_ON[NOL]
  247.    Shared L,LINE
  248.    If NOL=24 Then LED[2,1] : Else LED[4,1]
  249.    Screen 0
  250.    Locate ,24
  251.    P=0
  252.    Do 
  253.       Inc L
  254.       Inc P
  255.       Exit If L=LINE
  256.       PRNT_LINE[L]
  257.       Exit If P=NOL
  258.    Loop 
  259.    If NOL=24 Then LED[2,0] : Else LED[4,0]
  260.    Screen 0
  261. End Proc
  262. Procedure PAGE_BACK[NOL]
  263.    Shared L,LINE
  264.    If NOL=24 Then LED[1,1] : Else LED[3,1]
  265.    Screen 0
  266.    P=0
  267.    Add L,-23
  268.    Do 
  269.       Dec L
  270.       Inc P
  271.       Exit If L=0
  272.       Home 
  273.       Print Cup$;
  274.       PRNT_LINE[L]
  275.       Exit If P=NOL
  276.    Loop 
  277.    Add L,23
  278.    If NOL=24 Then LED[1,0] : Else LED[3,0]
  279.    Screen 0
  280. End Proc
  281. Procedure HELP[P]
  282.    Shared L
  283.    Screen 0
  284.    Cls 
  285.    D=1
  286.    If P=1 Then Restore HELP : Else Restore CREDITS
  287.    If P=1 Then INFO_LINE["HELP SCREEN"] : Else INFO_LINE["CREDITS SCREEN"]
  288.    Do 
  289.       Read DAT$
  290.       Exit If DAT$=""
  291.       Centre DAT$
  292.       Print 
  293.    Loop 
  294.    Clear Key 
  295.    Do 
  296.       Exit If Mouse Click<>0
  297.       Exit If Inkey$<>""
  298.    Loop 
  299.    Cls 
  300.    Add L,-24
  301.    PAGE_ON[24]
  302.    HELP:
  303.    Data "*************AMOS Text Version 1.2 - by David Boucher*************"
  304.    Data "*                                                                *"
  305.    Data "*    Welcome to The AMOS Text text reader by David Boucher.      *"
  306.    Data "* The program can be operated with either mouse or keyboard.     *"
  307.    Data "* Use the mouse to select the icons on the panel below to move   *"
  308.    Data "*  Through the text. Extra options can be selected from a menu.  *"
  309.    Data "*   The program can also be operated using the following keys:-  *"
  310.    Data "*                                                                *"
  311.    Data "*       KEY TO PRESS...       IN ORDER TO...                     *"
  312.    Data "*                                                                *"
  313.    Data "*         D or SPACE          Move down a page,                  *"
  314.    Data "*         U                   Move up a page,                    *"
  315.    Data "*         DOWN ARROW          Move down a line,                  *"
  316.    Data "*         UP ARROW            Move up a line,                    *"
  317.    Data "*         T                   Move to top of text,               *"
  318.    Data "*         B                   Move to bottom of text,            *"
  319.    Data "*         HELP                Display this page,                 *"
  320.    Data "*         C                   Display credits page,              *"
  321.    Data "*         S                   Search through text,               *"
  322.    Data "*         P                   Print,                             *"
  323.    Data "*         L                   Load text file,                    *"
  324.    Data "*         ESCAPE or E         Exit AMOS Text.                    *"
  325.    Data "*                                                                *"
  326.    Data "***************************PRESS A KEY****************************"
  327.    Data ""
  328.    CREDITS:
  329.    Data " "
  330.    Data "************************************************"
  331.    Data "**  AMOS Text Version 1.2 - by David Boucher  **"
  332.    Data "**       RIPOFFWARE SOFTWARE PRODUCTIONS      **"
  333.    Data "************************************************"
  334.    Data " "
  335.    Data "AMOS Text Version 1.2 - (C) 1991 David Boucher."
  336.    Data " "
  337.    Data "AMOS TEXT - THE TEXT READER, DESIGNED AND CODED BY DAVID BOUCHER"
  338.    Data " "
  339.    Data "Placed in the Public Domain - FREELY DISTRIBUTABLE."
  340.    Data " "
  341.    Data " "
  342.    Data "Read "+Chr$(34)+"AMOS_TEXT.doc"+Chr$(34)+" for more info."
  343.    Data " "
  344.    Data " "
  345.    Data "Please send your comments, questions, suggestions,"
  346.    Data "bug-reports(?), PD software and MONEY to:"
  347.    Data " "
  348.    Data "DAVID BOUCHER, 37, SMITH STREET, LONGTON, STOKE-ON-TRENT,"
  349.    Data "STAFFORDSHIRE. ST3 1DR ENGLAND"
  350.    Data " "
  351.    Data " "
  352.    Data "PRESS A KEY"
  353.    Data ""
  354. End Proc
  355. Procedure OUTPUT[FIRST,LAST]
  356.    Shared LINES(),PRED
  357.    REQUEST["OUTPUT FILE TO PRINTER?","ARE YOU SURE?","","YES!","NO!"]
  358.    If Param=2 Then Pop Proc
  359.    Wait 20
  360.    If PRED=0
  361.       Do 
  362.          Exit If Exist("SYS:")
  363.          REQUEST["PLEASE INSERT YOUR","BOOT DISK","IN ANY DRIVE","OK!","CANCEL!"]
  364.          If Param=2 : INFO_LINE["COULD NOT PRINT"] : Pop Proc : End If 
  365.       Loop 
  366.    End If 
  367.    INFO_LINE["PRINTING..."]
  368.    For P=FIRST To LAST
  369.       L$=""
  370.       If LINES(P)>0
  371.          For CH=LINES(P-1)+1 To LINES(P)
  372.             L$=L$+Chr$(Peek(CH))
  373.          Next 
  374.       If L$=Chr$(10) : Lprint : Else Lprint L$-Chr$(10) : End If 
  375.       Else 
  376.          Lprint 
  377.       End If 
  378.    Next 
  379.    PRED=1
  380.    INFO_LINE["PRESS HELP FOR MORE INFO"]
  381. End Proc
  382. Procedure SEARCH
  383.    Shared SEARCH$,L,LINE,LINES(),PL,FOUND
  384.    Screen 0
  385.    STRING_REQ["ENTER STRING TO FIND","OK!","CANCEL!",SEARCH$]
  386.    S$=Param$
  387.    If S$="" Then Pop Proc
  388.    S$=Upper$(S$)
  389.    If S$=SEARCH$ Then PF=FOUND : Else PF=-1
  390.    SEARCH$=S$
  391.    PL=L-23
  392.    FOUND=0
  393.    Do 
  394.       LINE$=""
  395.       L$=""
  396.       If LINES(PL)>0
  397.          For CH=LINES(PL-1)+1 To LINES(PL)
  398.             L$=L$+Chr$(Peek(CH))
  399.          Next 
  400.       If L$=Chr$(10) : LINE$="" : Else LINE$=L$-Chr$(10) : End If 
  401.       Else 
  402.          LINE$=""
  403.       End If 
  404.       LINE$=Upper$(LINE$)
  405.       If Instr(LINE$,SEARCH$)>0 and PL>PF Then FOUND=PL : Exit 
  406.       Inc PL
  407.       If PL=LINE Then Exit 
  408.    Loop 
  409.    If FOUND=0 Then REQUEST["COULDN'T FIND STRING",SEARCH$,"","OK!",""] : Pop Proc
  410.    L=FOUND-1
  411.    If L>LINE-25 Then L=LINE-25
  412.    Cls 
  413.    For NL=1 To 24
  414.       If L=FOUND-1 Then Pen 0 : Paper 1 : Else Pen 1 : Paper 0
  415.       PAGE_ON[1]
  416.    Next 
  417.    Pen 1
  418.    Paper 0
  419.    Cline 
  420. End Proc
  421. Procedure LED[NO,MD]
  422.    Screen 1
  423.    Ink MD
  424.    If NO=1 Then Bar 151,6 To 160,9
  425.    If NO=2 Then Bar 165,6 To 174,9
  426.    If NO=3 Then Bar 187,6 To 195,9
  427.    If NO=4 Then Bar 200,6 To 209,9
  428.    If NO=5 Then Bar 221,6 To 230,9
  429.    If NO=6 Then Bar 235,6 To 244,9
  430.    If NO=7 Then Bar 282,5 To 290,8
  431.    If NO=8 Then Bar 282,18 To 290,21
  432. End Proc
  433. Procedure PANEL
  434.    Shared L,LINE
  435.    Screen 1
  436.    Ink 0,6
  437.    L#=L-24
  438.    LINE#=LINE-25
  439.    If LINE#>0
  440.       PC#=L#/LINE#
  441.    End If 
  442.    PC=Int(PC#*100)
  443.    PC$=Right$(("000"+Str$(PC)-" "),3)+"%"
  444.    Text 284,34,PC$
  445.    If L<25 Then LED[7,1] : Else LED[7,0]
  446.    If L=LINE-1 Then LED[8,1] : Else LED[8,0]
  447. End Proc
  448. Procedure INFO_LINE[TXT$]
  449.    TEMP=Screen
  450.    Screen 1
  451.    Ink 0
  452.    Bar 0,41 To 320,50
  453.    X=(320-Len(TXT$)*8)/2
  454.    Ink 5,0
  455.    Text X,47,TXT$
  456.    Screen TEMP
  457. End Proc
  458. Procedure BX[X,Y,XX,YY,T]
  459.    If T=1 Then Ink 1 Else Ink 3
  460.    Box X,Y To XX-1,YY-1
  461.    If T=1 Then Ink 3 Else Ink 1
  462.    Box X+1,Y+1 To XX,YY
  463.    If T<3 Then Ink 2 : Else Ink 0
  464.    Bar X+1,Y+1 To XX-1,YY-1
  465. End Proc
  466. Procedure XINPUT[TXT$,ML,POS,CX,CY,MD]
  467.    Shared ER,POS
  468.    Do 
  469.       Home 
  470.       NOC=Len(TXT$)
  471.       Locate CX,CY
  472.       Print TXT$+Space$(ML-(NOC-1))
  473.       Locate CX+POS,CY
  474.       Do 
  475.          LTR$=Inkey$
  476.          Exit If LTR$<>""
  477.          If Mouse Click=1 and MD=1 Then ER=3 : Exit 2
  478.       Loop 
  479.       CC=Asc(LTR$)
  480.       SC=Scancode
  481.       If CC=13 Then ER=1 : Exit 
  482.       If CC=27 and MD=1 Then ER=2 : Exit 
  483.       If Mouse Click=1 and MD=1 Then ER=3 : Exit 
  484.       If CC>31 and NOC<=ML-1
  485.          If POS=NOC
  486.             TXT$=TXT$+LTR$
  487.          Else 
  488.             TXT$=Left$(TXT$,POS)+LTR$+Right$(TXT$,NOC-POS)
  489.          End If 
  490.          Inc POS
  491.       End If 
  492.       If CC=29 and POS>0
  493.          Dec POS
  494.       End If 
  495.       If CC=28 and POS<NOC
  496.          Inc POS
  497.       End If 
  498.       If CC=8 and POS>0 and NOC>0
  499.          If POS=NOC
  500.             TXT$=Left$(TXT$,NOC-1)
  501.          Else 
  502.             TXT$=Left$(TXT$,POS-1)+Right$(TXT$,NOC-POS)
  503.          End If 
  504.          Dec POS
  505.       End If 
  506.       If SC=70 and POS<NOC and NOC>0
  507.          If POS=0
  508.             TXT$=Right$(TXT$,NOC-1)
  509.          Else 
  510.             TXT$=Left$(TXT$,POS)+Right$(TXT$,NOC-(POS+1))
  511.          End If 
  512.       End If 
  513.    Loop 
  514. End Proc[TXT$]
  515. Procedure REQUEST[T1$,T2$,T3$,B1$,B2$]
  516.    If Len(T1$)>25 Then T1$=Left$(T1$,25)
  517.    If Len(T2$)>25 Then T2$=Left$(T2$,25)
  518.    If Len(T3$)>25 Then T3$=Left$(T3$,25)
  519.    If Len(B1$)>10 Then B1$=Left$(B1$,10)
  520.    If Len(B2$)>10 Then B2$=Left$(B2$,10)
  521.    If B1$<>"" Then B1=1
  522.    If B2$<>"" Then B2=1
  523.    If B1=0 and B2=0 Then Pop Proc
  524.    TEMP=Screen
  525.    Screen Open 7,640,61,4,Hires
  526.    Screen Display 7,128,120,640,64
  527.    Curs Off 
  528.    Flash Off 
  529.    Palette 0,$FFF,$888,$333
  530.    Colour 17,$999
  531.    Colour 18,$555
  532.    Colour 19,$333
  533.    Pen 1
  534.    Paper 0
  535.    Cls 
  536.    BX[200,0,440,60,1]
  537.    If B1=1 Then BX[210,40,310,55,1]
  538.    If B2=1 Then BX[330,40,430,55,1]
  539.    BX[210,5,430,35,2]
  540.    Ink 0,2,2
  541.    Text 220,15,T1$
  542.    Text 220,23,T2$
  543.    Text 220,31,T3$
  544.    O=(80-Len(B1$)*8)/2
  545.    Text 220+O,50,B1$
  546.    O=(80-Len(B2$)*8)/2
  547.    Text 340+O,50,B2$
  548.    D=0
  549.    Do 
  550.       Do 
  551.          Z=Mouse Click
  552.          X=X Screen(X Mouse)
  553.          Y=Y Screen(Y Mouse)
  554.          Z$=Inkey$
  555.          Exit If Z$<>""
  556.          Exit If Z=1
  557.       Loop 
  558.       If Z$=Chr$(13) and B1=1 Then D=1
  559.       If Z$=Chr$(27) and B2=1 Then D=2
  560.       If X>210 and X<310 and Y>40 and Y<55 and Z=1 and B1=1 Then D=1
  561.       If X>330 and X<430 and Y>40 and Y<55 and Z=1 and B2=1 Then D=2
  562.       Exit If D>0
  563.    Loop 
  564.    If D=1
  565.       BX[210,40,310,55,2]
  566.       Ink 0,2,2
  567.       O=(80-Len(B1$)*8)/2
  568.       Text 220+O,50,B1$
  569.    Else 
  570.       BX[330,40,430,55,2]
  571.       Ink 0,2,2
  572.       O=(80-Len(B2$)*8)/2
  573.       Text 340+O,50,B2$
  574.    End If 
  575.    Wait 10
  576.    Screen Close 7
  577.    Screen TEMP
  578. End Proc[D]
  579. Procedure LIST_REQ[T$,B1$,B2$]
  580.    Shared FILE$()
  581.    If Len(T$)>10 Then T$=Left$(T$,25)
  582.    If Len(B1$)>10 Then B1$=Left$(B1$,10)
  583.    If Len(B2$)>10 Then B2$=Left$(B2$,10)
  584.    If B1$<>"" Then B1=1
  585.    If B2$<>"" Then B2=1
  586.    If B1=0 and B2=0 Then Pop Proc
  587.    TEMP=Screen
  588.    Screen Open 7,640,61,4,Hires
  589.    Screen Display 7,128,120,640,64
  590.    Curs Off 
  591.    Flash Off 
  592.    Palette 0,$FFF,$888,$333
  593.    Colour 17,$999
  594.    Colour 18,$555
  595.    Colour 19,$333
  596.    Pen 1
  597.    Paper 0
  598.    Cls 
  599.    BX[200,0,440,60,1]
  600.    BX[210,10,400,35,3]
  601.    BX[410,5,430,15,2]
  602.    BX[410,25,430,35,2]
  603.    If B1=1 Then BX[210,40,310,55,1]
  604.    If B2=1 Then BX[330,40,430,55,1]
  605.    Ink 3
  606.    Polygon 414,13 To 420,7 To 426,13
  607.    Polygon 414,27 To 420,33 To 426,27
  608.    Ink 0,2,2
  609.    O=(80-Len(B1$)*8)/2
  610.    Text 220+O,50,B1$
  611.    O=(80-Len(B2$)*8)/2
  612.    Text 340+O,50,B2$
  613.    O=(200-Len(T$)*8)/2
  614.    Text 210+O,8,T$
  615.    ITEM=1
  616.    Do 
  617.       Ink 2,0,0
  618.       DUMMY=Free
  619.       Text 215,17,Left$(FILE$(ITEM-1)+Space$(22),22)
  620.       Text 215,33,Left$(FILE$(ITEM+1)+Space$(22),22)
  621.       Ink 1,0,0
  622.       Text 215,25,Left$(FILE$(ITEM)+Space$(22),22)
  623.       If FILE$(ITEM+1)="" Then LAST=1 : Else LAST=0
  624.       D=0
  625.       Do 
  626.          Z=Mouse Click
  627.          X=X Screen(X Mouse)
  628.          Y=Y Screen(Y Mouse)
  629.          Z$=Inkey$
  630.          Exit If Z$<>""
  631.          Exit If Z=1
  632.       Loop 
  633.       If Z$=Chr$(31) and LAST=0 Then Inc ITEM
  634.       If Z$=Chr$(30) and ITEM>1 Then Dec ITEM
  635.       If Z$=Chr$(13) and B1=1 Then D=1
  636.       If Z$=Chr$(27) and B2=1 Then D=2
  637.       If X>210 and X<310 and Y>40 and Y<55 and Z=1 and B1=1 Then D=1
  638.       If X>330 and X<430 and Y>40 and Y<55 and Z=1 and B2=1 Then D=2
  639.       If X>410 and X<430 and Y>5 and Y<15 and Z=1 and ITEM>1 Then Dec ITEM
  640.       If X>410 and X<430 and Y>25 and Y<35 and Z=1 and LAST=0 Then Inc ITEM
  641.       Exit If D>0
  642.    Loop 
  643.    If D=1
  644.       BX[210,40,310,55,2]
  645.       Ink 0,2,2
  646.       O=(80-Len(B1$)*8)/2
  647.       Text 220+O,50,B1$
  648.       FILE$=FILE$(ITEM)
  649.    Else 
  650.       BX[330,40,430,55,2]
  651.       Ink 0,2,2
  652.       O=(80-Len(B2$)*8)/2
  653.       Text 340+O,50,B2$
  654.    End If 
  655.    Wait 10
  656.    Screen Close 7
  657.    Screen TEMP
  658. End Proc[FILE$]
  659. Procedure STRING_REQ[T$,B1$,B2$,TXT$]
  660.    Shared POS,ER
  661.    If Len(T$)>25 Then T$=Left$(T$,25)
  662.    If Len(TXT$)>24 Then TXT$=Left$(TXT$,24)
  663.    If Len(B1$)>10 Then B1$=Left$(B1$,10)
  664.    If Len(B2$)>10 Then B2$=Left$(B2$,10)
  665.    If B1$<>"" Then B1=1
  666.    If B2$<>"" Then B2=1
  667.    If B1=0 and B2=0 Then Pop Proc
  668.    TEMP=Screen
  669.    Screen Open 7,640,61,4,Hires
  670.    Screen Display 7,128,120,640,64
  671.    Curs Off 
  672.    Flash Off 
  673.    Palette 0,$FFF,$888,$333
  674.    Colour 17,$999
  675.    Colour 18,$555
  676.    Colour 19,$333
  677.    Pen 1
  678.    Paper 0
  679.    Cls 
  680.    BX[200,0,440,60,1]
  681.    BX[210,22,430,33,3]
  682.    If B1=1 Then BX[210,40,310,55,1]
  683.    If B2=1 Then BX[330,40,430,55,1]
  684.    Ink 0,2,2
  685.    O=(200-Len(T$)*8)/2
  686.    Text 220+O,15,T$
  687.    O=(80-Len(B1$)*8)/2
  688.    Text 220+O,50,B1$
  689.    O=(80-Len(B2$)*8)/2
  690.    Text 340+O,50,B2$
  691.    POS=0
  692.    Curs On 
  693.    Do 
  694.       XINPUT[TXT$,25,POS,27,3,1]
  695.       TXT$=Param$
  696.       X=X Screen(X Mouse)
  697.       Y=Y Screen(Y Mouse)
  698.       If X>210 and X<310 and Y>40 and Y<55 and ER=3 and B1=1 Then ER=1
  699.       If X>330 and X<430 and Y>40 and Y<55 and ER=3 and B2=1 Then ER=2
  700.       If ER=1
  701.          Curs Off 
  702.          BX[210,40,310,55,2]
  703.          Ink 0,2,2
  704.          O=(80-Len(B1$)*8)/2
  705.          Text 220+O,50,B1$
  706.          Exit 
  707.       End If 
  708.       If ER=2
  709.          Curs Off 
  710.          BX[330,40,430,55,2]
  711.          Ink 0,2,2
  712.          O=(80-Len(B2$)*8)/2
  713.          Text 340+O,50,B2$
  714.          TXT$=""
  715.          Exit 
  716.       End If 
  717.    Loop 
  718.    Wait 10
  719.    Screen Close 7
  720.    Screen TEMP
  721. End Proc[TXT$]
  722. SET_UP_SCREEN
  723. Do 
  724.    SELECT_FILE
  725.    MAINLOOP
  726. Loop