home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 15 / CD_ASCQ_15_070894.iso / vrac / dnalib7a.zip / PICKBOX.BAS < prev    next >
BASIC Source File  |  1994-05-16  |  20KB  |  567 lines

  1. DECLARE SUB Popwind(Title$,Toprow%,Leftcolumn%,Bottomrow%,Rightcolumn%,Attr%,Shadow%,Border%)
  2. DECLARE SUB RestoreScreen(ScreenID$,TopRow%,LeftColumn%)
  3. DECLARE SUB SaveScreen(ScreenID$,TopRow%,LeftColumn%,BottomRow%,RightColumn%,Shadow%)
  4. DECLARE SUB CalcByte(Attr%,LowByte%,HiByte%)
  5. DECLARE SUB Clicked(Rgt%,Lft%,Row%,Col%)
  6. DECLARE SUB HideCursor()
  7. DECLARE SUB ShowCursor()
  8. DECLARE SUB LocateCursor(Row%,Col%)
  9. DECLARE FUNCTION LeftButtonReleased%()
  10. DECLARE FUNCTION AltKey%()
  11.  
  12. SUB PickBox(StringArray$(),ReturnedArray$,Title$,TopRow%,Tag%,Mouse%,Attr%,BarAttr%,ButtonAttr%,Shadow%,Border%)PUBLIC
  13.  
  14. $CODE SEG "DNASEG2"
  15.  
  16. CalcByte Attr%,FGround%,BGround%
  17. CalcByte BarAttr%,BarFG%,BarBG%
  18. CalcByte ButtonAttr%,BtFG%,BtBG%
  19. PickStart% = 1: PickFinish% = 60: PickPointer% = 1
  20.  
  21. DO
  22.  
  23. INCR i%
  24. INCR j%
  25.                                                                                                                                                                                 'strings there are and the
  26. IF LEN (StringArray$(i%)) = 0 THEN
  27.   DECR i%
  28. ELSE
  29.   StringArray$(i%) = " " + StringArray$(i%)
  30. END IF
  31.  
  32. LOOP WHILE i% = j%
  33.  
  34. PickCount% = i%
  35.  
  36.  
  37. IF Mouse% THEN HideCursor
  38.  
  39. SaveScreen PickScreen$,TopRow%,3 - Shadow%,TopRow% + 18,78 - Shadow%,Shadow%
  40. Popwind Title$,TopRow%,3 - Shadow%,TopRow% + 18,78 - Shadow%,Attr%,Shadow%,Border%
  41. Popwind "",TopRow% + 1,5 - Shadow%,TopRow% + 14,76 - Shadow%,Attr%,0,1
  42.  
  43. IF Tag% AND ISFALSE Mouse% THEN
  44.   COLOR FGround%,BGround%
  45.   LOCATE TopRow% + 18,27 - Shadow%,0: PRINT "[ Space Bar to Tag - UnTag ]";
  46. END IF
  47.  
  48. IF Mouse% THEN
  49.   COLOR FGround%,BGround%
  50.   LOCATE TopRow%,4 - Shadow%,0
  51.   PRINT CHR$(91,254,93);
  52.   IF Tag% THEN
  53.     COLOR FGround%,BGround%
  54.     LOCATE TopRow% + 18,17 - Shadow%,0: PRINT "[ Space Bar or Left Mouse button to Tag - UnTag ]";
  55.   END IF
  56. END IF
  57.  
  58. COLOR BtFG%,BtBG%: LOCATE TopRow% + 16,7 - Shadow%,0: PRINT " Enter ";
  59. COLOR 0,BGround%: LOCATE TopRow% + 16,14 - Shadow%,0: PRINT "▄";
  60. COLOR 0,BGround%: LOCATE TopRow% + 17,8 - Shadow%,0: PRINT "▀▀▀▀▀▀▀";
  61. COLOR BtFG%,BtBG%: LOCATE TopRow% + 16,18 - Shadow%,0: PRINT " Esc ";
  62. COLOR 0,BGround%: LOCATE TopRow% + 16,23 - Shadow%,0: PRINT "▄";
  63. COLOR 0,BGround%: LOCATE TopRow% + 17,19 - Shadow%,0: PRINT "▀▀▀▀▀"
  64.  
  65. DO
  66.  
  67. MouseJump:
  68.  
  69. IF Tag% THEN
  70.   COLOR BtFG%,BtBG%: LOCATE TopRow% + 16,27 - Shadow%,0: PRINT " Tag All ";
  71.   COLOR 0,BGround%: LOCATE TopRow% + 16,36 - Shadow%,0: PRINT "▄";
  72.   COLOR 0,BGround%: LOCATE TopRow% + 17,28 - Shadow%,0: PRINT "▀▀▀▀▀▀▀▀▀";
  73.   COLOR BtFG%,BtBG%: LOCATE TopRow% + 16,40 - Shadow%,0: PRINT " UnTag All ";
  74.   COLOR 0,BGround%: LOCATE TopRow% + 16,51 - Shadow%,0: PRINT "▄";
  75.   COLOR 0,BGround%: LOCATE TopRow% + 17,41 - Shadow%,0: PRINT "▀▀▀▀▀▀▀▀▀▀▀";
  76.   COLOR BtFG%,BtBG%: LOCATE TopRow% + 16,55 - Shadow%,0: PRINT " Reverse Tags ";
  77.   COLOR 0,BGround%: LOCATE TopRow% + 16,69 - Shadow%,0: PRINT "▄";
  78.   COLOR 0,BGround%: LOCATE TopRow% + 17,56 - Shadow%,0: PRINT "▀▀▀▀▀▀▀▀▀▀▀▀▀▀";
  79. END IF
  80.  
  81. GOSUB PrintRoutine
  82.  
  83. WHILE NOT INSTAT
  84.   IF Mouse% THEN
  85.     IF SaveMouse% THEN LocateCursor MouseRow%,MouseCol%
  86.     ShowCursor
  87.     Rgt% = 0:Lft% = 0:MRow% = 0:MCol% = 0:SaveMouse% = 0
  88.     Clicked Rgt%,Lft%,MRow%,MCol%
  89.     IF MRow% >= TopRow% AND MRow% <= TopRow% + 18 AND MCol% >= 3 - Shadow% AND MCol% <= 78 - Shadow% THEN
  90.       IF MRow% > TopRow% + 1 AND MRow% < TopRow% + 14 AND MCol% > 5 - Shadow% AND MCol% < 76 - Shadow% THEN
  91.         SELECT CASE MCol%
  92.           CASE 6 - Shadow% TO 19 - Shadow%
  93.             IF PickPointer% = PickStart%  + (MRow% - (TopRow% + 2)) THEN
  94.               IF LeftButtonReleased% THEN
  95.                 IF Tag% THEN
  96.                   Chose% = 32: GOTO KeyBoardRoutine
  97.                 ELSE
  98.                   Chose% = 13: GOTO KeyBoardRoutine
  99.                 END IF
  100.               END IF
  101.             ELSE
  102.               IF PickStart% + (MRow% - (TopRow% + 2)) <= PickCount% THEN
  103.                 PickPointer% = PickStart% + (MRow% - (TopRow% + 2))
  104.                 GOTO MouseJump
  105.               END IF
  106.             END IF
  107.           CASE 20 - Shadow% TO 33 - Shadow%
  108.             IF PickPointer% = PickStart% + 12 + (MRow% - (TopRow% + 2)) THEN
  109.               IF LeftButtonReleased% THEN
  110.                 IF Tag% THEN
  111.                   Chose% = 32: GOTO KeyBoardRoutine
  112.                 ELSE
  113.                   Chose% = 13: GOTO KeyBoardRoutine
  114.                 END IF
  115.               END IF
  116.             ELSE
  117.               IF PickStart% + 12 + (MRow% - (TopRow% + 2)) <= PickCount% THEN
  118.                 PickPointer% = PickStart% + 12 + (MRow% - (TopRow% + 2))
  119.                 GOTO MouseJump
  120.               END IF
  121.             END IF
  122.           CASE 34 - Shadow% TO 47 - Shadow%
  123.             IF PickPointer% = PickStart% + 24 + (MRow% - (TopRow% + 2)) THEN
  124.               IF LeftButtonReleased% THEN
  125.                 IF Tag% THEN
  126.                   Chose% = 32: GOTO KeyBoardRoutine
  127.                 ELSE
  128.                   Chose% = 13: GOTO KeyBoardRoutine
  129.                 END IF
  130.               END IF
  131.             ELSE
  132.               IF PickStart% + 24 + (MRow% - (TopRow% + 2)) <= PickCount% THEN
  133.                 PickPointer% = PickStart% + 24 + (MRow% - (TopRow% + 2))
  134.                 GOTO MouseJump
  135.               END IF
  136.             END IF
  137.           CASE 48 - Shadow% TO 61 - Shadow%
  138.             IF PickPointer% = PickStart% + 36 + (MRow% - (TopRow% + 2)) THEN
  139.               IF LeftButtonReleased% THEN
  140.                 IF Tag% THEN
  141.                   Chose% = 32: GOTO KeyBoardRoutine
  142.                 ELSE
  143.                   Chose% = 13: GOTO KeyBoardRoutine
  144.                 END IF
  145.               END IF
  146.             ELSE
  147.               IF PickStart% + 36 + (MRow% - (TopRow% + 2)) <= PickCount% THEN
  148.                 PickPointer% = PickStart% + 36 + (MRow% - (TopRow% + 2))
  149.                 GOTO MouseJump
  150.               END IF
  151.             END IF
  152.           CASE 62 - Shadow% TO 75 - Shadow%
  153.             IF PickPointer% = PickStart% + 48 + (MRow% - (TopRow% + 2)) THEN
  154.               IF LeftButtonReleased% THEN
  155.                 IF Tag% THEN
  156.                   Chose% = 32: GOTO KeyBoardRoutine
  157.                 ELSE
  158.                   Chose% = 13: GOTO KeyBoardRoutine
  159.                 END IF
  160.               END IF
  161.             ELSE
  162.               IF PickStart% + 48 + (MRow% - (TopRow% + 2)) <= PickCount% THEN
  163.                 PickPointer% = PickStart% + 48 + (MRow% - (TopRow% + 2))
  164.                 GOTO MouseJump
  165.               END IF
  166.             END IF
  167.         END SELECT
  168.       ELSE
  169.         SELECT CASE MRow%
  170.           CASE TopRow%
  171.             IF MCol% = 5 - Shadow% THEN
  172.               IF LeftButtonReleased% THEN Chose% = 27: GOTO KeyBoardRoutine
  173.             END IF
  174.           CASE TopRow% + 14
  175.             SELECT CASE MCol%
  176.               CASE 11 - Shadow% TO 12 - Shadow%
  177.                 IF Lft% THEN Chose% = -72: GOTO KeyBoardRoutine
  178.               CASE 69 - Shadow% TO 70 - Shadow%
  179.                 IF Lft% THEN Chose% = -80: GOTO KeyBoardRoutine
  180.             END SELECT
  181.           CASE TopRow% + 16
  182.             SELECT CASE MCol%
  183.               CASE 7 - Shadow% TO 13 - Shadow%   'Enter
  184.                 IF LeftButtonReleased% THEN Chose% = 13: GOTO KeyBoardRoutine
  185.               CASE 18 - Shadow% TO 22 - Shadow%  'Esc
  186.                 IF LeftButtonReleased% THEN Chose% = 27: GOTO KeyBoardRoutine
  187.               CASE 27 - Shadow% TO 35 - Shadow%  'Tag All
  188.                 IF LeftButtonReleased% THEN Chose% = -20: GOTO KeyBoardRoutine
  189.               CASE 40 - Shadow% TO 50 - Shadow%  'UnTag All
  190.                 IF LeftButtonReleased% THEN Chose% = -22: GOTO KeyBoardRoutine
  191.               CASE 55 - Shadow% TO 68 - Shadow%  'Reverse Tags
  192.                 IF LeftButtonReleased% THEN Chose% = -19: GOTO KeyBoardRoutine
  193.             END SELECT
  194.         END SELECT
  195.       END IF
  196.     ELSE
  197.       IF LeftButtonReleased% THEN Chose% = 27: GOTO KeyBoardRoutine
  198.     END IF
  199.   END IF
  200.     IF AltKey% THEN
  201.       IF Tag% THEN
  202.         COLOR BarFG%,BtBG%: LOCATE TopRow% + 16,28 - Shadow%,0: PRINT "T";
  203.         COLOR BarFG%,BtBG%: LOCATE TopRow% + 16,41 - Shadow%,0: PRINT "U";
  204.         COLOR BarFG%,BtBG%: LOCATE TopRow% + 16,56 - Shadow%,0: PRINT "R";
  205.       END IF
  206.     END IF
  207. WEND
  208.  
  209. Ky$ = INKEY$
  210.  
  211. IF LEN(Ky$) = 1 THEN
  212.   Chose% = ASC(Ky$)
  213. ELSE
  214.   Chose% = -ASC(RIGHT$(Ky$,1))
  215. END IF
  216.  
  217. KeyBoardRoutine:
  218.  
  219. IF Mouse% THEN
  220.   IF MRow% > TopRow% + 1 AND MRow% < TopRow% + 14 AND_
  221.     MCol% > 5 - Shadow% AND MCol% < 76 - Shadow% THEN
  222.     SaveMouse% = 1
  223.     LocateCursor 1,1
  224.   END IF
  225. END IF
  226.  
  227.   SELECT CASE Chose%
  228.        CASE -19 'Alt R
  229.          IF Tag% THEN
  230.            IF Mouse% THEN HideCursor
  231.            COLOR BtFG%,BtBG%: LOCATE TopRow% + 16,56 - Shadow%,0: PRINT " Reverse Tags ";
  232.            COLOR 0,BGround%: LOCATE TopRow% + 16,55 - Shadow%,0: PRINT " ";
  233.            COLOR 0,BGround%: LOCATE TopRow% + 17,56 - Shadow%,0: PRINT "              ";
  234.            DELAY .2
  235.            FOR i% = 1 TO PickCount%
  236.              IF INSTR(StringArray$(i%),CHR$(Tag%)) THEN
  237.                ReturnedArray$ = REMOVE$(ReturnedArray$,StringArray$(i%))
  238.                StringArray$(i%) = " " + LTRIM$(StringArray$(i%),CHR$(Tag%))
  239.              ELSE
  240.                StringArray$(i%) = CHR$(Tag%) + LTRIM$(StringArray$(i%))
  241.                ReturnedArray$ = ReturnedArray$ + StringArray$(i%)
  242.              END IF
  243.            NEXT i%
  244.          END IF
  245.        CASE -22 'Alt U
  246.          IF Tag% THEN
  247.            IF Mouse% THEN HideCursor
  248.            COLOR BtFG%,BtBG%: LOCATE TopRow% + 16,41 - Shadow%,0: PRINT " UnTag All ";
  249.            COLOR 0,BGround%: LOCATE TopRow% + 16,40 - Shadow%,0: PRINT " ";
  250.            COLOR 0,BGround%: LOCATE TopRow% + 17,41 - Shadow%,0: PRINT "           ";
  251.            DELAY .2
  252.            FOR i% = 1 TO PickCount%
  253.              IF INSTR(StringArray$(i%),CHR$(Tag%)) THEN
  254.                ReturnedArray$ = REMOVE$(ReturnedArray$,StringArray$(i%))
  255.                StringArray$(i%) = " " + LTRIM$(StringArray$(i%),CHR$(Tag%))
  256.              END IF
  257.            NEXT i%
  258.          END IF
  259.        CASE -20 'Alt T
  260.          IF Tag% THEN
  261.            IF Mouse% THEN HideCursor
  262.            COLOR BtFG%,BtBG%: LOCATE TopRow% + 16,28 - Shadow%,0: PRINT " Tag All ";
  263.            COLOR 0,BGround%: LOCATE TopRow% + 16,27 - Shadow%,0: PRINT " ";
  264.            COLOR 0,BGround%: LOCATE TopRow% + 17,28 - Shadow%,0: PRINT "         ";
  265.            DELAY .2
  266.            FOR i% = 1 TO PickCount%
  267.              IF INSTR(StringArray$(i%),CHR$(32)) THEN
  268.                StringArray$(i%) = CHR$(Tag%) + LTRIM$(StringArray$(i%))
  269.                ReturnedArray$ = ReturnedArray$ + StringArray$(i%)
  270.              END IF
  271.            NEXT i%
  272.          END IF
  273.        CASE -71 ' home
  274.          IF PickCount% < 60 THEN
  275.            PickPointer% = 1
  276.          ELSE
  277.            PickPointer% = 1
  278.            PickStart% = 1
  279.            PickFinish% = 60
  280.          END IF
  281.        CASE -72 ' up arrow
  282.          IF PickPointer% > 1 THEN
  283.            DECR PickPointer%
  284.            IF PickPointer% < PickStart% THEN
  285.              DECR PickStart%:DECR PickFinish%
  286.            END IF
  287.          END IF
  288.        CASE -73 ' page up
  289.          IF PickPointer% - 60 > 0 THEN
  290.            IF PickStart% - 60 > 0 THEN
  291.              DECR PickPointer%,60
  292.              DECR PickStart%,60
  293.              DECR PickFinish%,60
  294.            ELSE
  295.              DECR PickPointer%,60
  296.              PickStart% = 1
  297.              PickFinish% = 60
  298.            END IF
  299.          ELSE
  300.            PickStart% = 1
  301.            PickFinish% = 60
  302.          END IF
  303.        CASE -75 ' left arrow
  304.          IF PickPointer% - 12 > 0 THEN
  305.            DECR PickPointer%,12
  306.            IF PickPointer% < PickStart% THEN
  307.              IF PickStart% - 12 > 0 THEN
  308.                DECR PickStart%,12:DECR PickFinish%,12
  309.              ELSE
  310.                PickStart% = 1
  311.                PickFinish% = 60
  312.              END IF
  313.            END IF
  314.          ELSE
  315.            IF PickCount% > 60 THEN
  316.              PickStart% = 1
  317.              PickFinish% = 60
  318.            END IF
  319.          END IF
  320.        CASE -77 ' right arrow
  321.          IF PickPointer% + 12 <= PickCount% THEN
  322.            INCR PickPointer%,12
  323.            IF PickPointer% > PickFinish% THEN
  324.              IF PickFinish% + 12 < PickCount% THEN
  325.                INCR PickStart%,12:INCR PickFinish%,12
  326.              ELSE
  327.                PickFinish% = PickCount%
  328.                PickStart% = PickFinish% - 59
  329.              END IF
  330.            END IF
  331.          ELSE
  332.            IF PickCount% > 60 THEN
  333.              PickFinish% = PickCount%
  334.              PickStart% = PickFinish% - 59
  335.            END IF
  336.          END IF
  337.        CASE -79 ' end key
  338.          IF PickCount% < 60 THEN
  339.            PickPointer% = PickCount%
  340.          ELSE
  341.            PickPointer% = PickCount%
  342.            PickStart% = PickCount% - 59
  343.            PickFinish% = PickCount%
  344.          END IF
  345.        CASE -80 ' down arrow
  346.          IF PickPointer% < PickCount% THEN
  347.            INCR PickPointer%
  348.            IF PickPointer% > PickFinish% THEN
  349.              INCR PickStart%:INCR PickFinish%
  350.            END IF
  351.          END IF
  352.        CASE -81 ' page down
  353.          IF PickCount% > 60 THEN
  354.            IF PickPointer% + 60 <= PickCount% THEN
  355.              IF PickFinish% + 60 <= PickCount% THEN
  356.                INCR PickPointer%,60
  357.                INCR PickStart%,60
  358.                INCR PickFinish%,60
  359.              ELSE
  360.                INCR PickPointer%,60
  361.                PickFinish% = PickCount%
  362.                PickStart% = PickFinish% - 59
  363.              END IF
  364.            ELSE
  365.              PickFinish% = PickCount%
  366.              PickStart% = PickFinish% - 59
  367.            END IF
  368.          END IF
  369.        CASE 13  ' enter
  370.          IF Tag% THEN
  371.            IF LEN(ReturnedArray$) THEN
  372.              ReturnedArray$ = ReturnedArray$
  373.            ELSE
  374.              ReturnedArray$ = ""
  375.            END IF
  376.          ELSE
  377.            ReturnedArray$ = LTRIM$(StringArray$(PickPointer%))
  378.          END IF
  379.          EXIT LOOP
  380.        CASE 27  ' Esc
  381.          ReturnedArray$ = ""
  382.          EXIT LOOP
  383.        CASE 32  'Space Bar
  384.           IF Tag% THEN
  385.             IF INSTR(StringArray$(PickPointer%),CHR$(Tag%)) THEN
  386.               ReturnedArray$ = REMOVE$(ReturnedArray$,StringArray$(PickPointer%))
  387.               StringArray$(PickPointer%) = " " + LTRIM$(StringArray$(PickPointer%),CHR$(Tag%))
  388.             ELSE
  389.               StringArray$(PickPointer%) = CHR$(Tag%) + LTRIM$(StringArray$(PickPointer%))
  390.               ReturnedArray$ = ReturnedArray$ + StringArray$(PickPointer%)
  391.             END IF
  392.             IF PickPointer% < PickFinish% AND PickPointer% < PickCount% THEN
  393.               INCR PickPointer%
  394.             ELSEIF PickFinish% < PickCount% THEN    'check to see if we have
  395.               INCR PickPointer%                     'any more choices waiting
  396.               INCR PickStart%
  397.               INCR PickFinish%
  398.             END IF
  399.           END IF
  400.         CASE 65 TO 90,97 TO 122
  401.             Found% = 0
  402.             Marker% = PickPointer%
  403.             IF PickPointer% + 1 <= PickCount% THEN  'search forward from pointer
  404.               FOR i% = PickPointer% + 1 TO PickCount%
  405.                 Temp$ = LEFT$(StringArray$(i%),2)       'get two characters
  406.                 TestKey$ = UCASE$(RIGHT$(Temp$,1))  'char after the space or tag
  407.                   IF TestKey$ = UCASE$(CHR$(Chose%)) THEN 'compare first char to key
  408.                     Found% = 1
  409.                     PickPointer% = i%
  410.                     IF PickPointer% + 60 <= PickCount% THEN
  411.                       PickFinish% = PickPointer% + 59
  412.                       PickStart% = PickFinish% - 59
  413.                     ELSE
  414.                       IF PickCount% > 60 THEN
  415.                         PickFinish% = PickCount%
  416.                         PickStart% = PickFinish% - 59
  417.                       END IF
  418.                     END IF
  419.                     EXIT FOR
  420.                   END IF
  421.               NEXT i%
  422.             END IF
  423.             IF Found% = 0 THEN
  424.               FOR j% = 1 TO PickPointer%
  425.                 Temp$ = LEFT$(StringArray$(j%),2)
  426.                 TestKey$ = UCASE$(RIGHT$(Temp$,1))
  427.                   IF TestKey$ = UCASE$(CHR$(Chose%)) THEN
  428.                     Found% = 1
  429.                     PickPointer% = j%
  430.                     IF PickPointer% = Marker% THEN
  431.                       BEEP:EXIT FOR
  432.                     ELSE
  433.                       IF PickPointer% + 60 <= PickCount% THEN
  434.                         PickFinish% = PickPointer% + 59
  435.                         PickStart% = PickFinish% - 59
  436.                       ELSE
  437.                         IF PickCount% > 60 THEN
  438.                           PickFinish% = PickCount%
  439.                           PickStart% = PickFinish% - 59
  440.                         END IF
  441.                       END IF
  442.                     END IF
  443.                     EXIT FOR
  444.                   END IF
  445.               NEXT j%
  446.             END IF
  447.             IF Found% = 0 THEN
  448.               BEEP
  449.             END IF
  450.        CASE ELSE
  451.          BEEP
  452.  
  453.   END SELECT
  454.  
  455. LOOP
  456.  
  457. SELECT CASE Chose%
  458.   CASE 13
  459.     IF Mouse% THEN HideCursor
  460.     COLOR BtFG%,BtBG%: LOCATE TopRow% + 16,8 - Shadow%,0: PRINT " Enter ";
  461.     COLOR 0,BGround%: LOCATE TopRow% + 16,7 - Shadow%,0: PRINT " ";
  462.     COLOR 0,BGround%: LOCATE TopRow% + 17,8 - Shadow%,0: PRINT "       ";
  463.   CASE 27
  464.     IF Mouse% THEN HideCursor
  465.     COLOR BtFG%,BtBG%: LOCATE TopRow% + 16,19 - Shadow%,0: PRINT " Esc ";
  466.     COLOR 0,BGround%: LOCATE TopRow% + 16,18 - Shadow%,0: PRINT " ";
  467.     COLOR 0,BGround%: LOCATE TopRow% + 17,19 - Shadow%,0: PRINT "     "
  468. END SELECT
  469.  
  470. FOR i% = 1 TO PickCount%
  471.   IF INSTR(StringArray$(i%),CHR$(Tag%)) THEN
  472.     StringArray$(i%) = LTRIM$(StringArray$(i%),CHR$(Tag%)) 'remove tag char
  473.   ELSE
  474.     StringArray$(i%) = LTRIM$(StringArray$(i%))            'remove the space
  475.   END IF
  476. NEXT i%
  477.  
  478. IF SaveMouse% THEN LocateCursor MouseRow%,MouseCol%
  479. IF Mouse% THEN HideCursor
  480.  
  481. DELAY .5
  482.  
  483. RestoreScreen PickScreen$,TopRow%,3 - Shadow%
  484.  
  485. EXIT SUB
  486. '----------------------------------------------------------------------------
  487. PrintRoutine:
  488.  
  489. Row% = TopRow% + 2
  490. Col% = 6 - Shadow%
  491.  
  492. IF Mouse% THEN HideCursor
  493.  
  494. FOR a% = PickStart% TO PickFinish%
  495.   IF a% = PickStart% + 12 OR a% = PickStart% + 24 _
  496.   OR a% = PickStart% + 36 OR a% = PickStart% + 48 _
  497.   THEN Row% = TopRow% + 2:INCR Col%,14
  498.   IF a% = PickPointer% THEN
  499.     COLOR BarFG%,BarBG%
  500.     LOCATE Row%,Col%,0
  501.     IF SaveMouse% THEN MouseRow% = Row%: MouseCol% = Col% + 6
  502.     PRINT  StringArray$(a%) + SPACE$(14 - LEN(StringArray$(a%)));
  503.   ELSE
  504.     COLOR FGround%,BGround%
  505.     LOCATE Row%,Col%,0
  506.     IF LEN(StringArray$(a%)) THEN PRINT StringArray$(a%) + SPACE$(14 - LEN(StringArray$(a%)));
  507.   END IF
  508.   INCR Row%
  509. NEXT a%
  510.  
  511. PickScrollBar% = PickCount% \ 58
  512. IF PickScrollBar% < 1 THEN PickScrollBar% = 1
  513. Bar% = 0
  514. Col% = 11 - Shadow%
  515.  
  516. IF PickPointer% THEN
  517.   ScrollPickPointer% = PickPointer%
  518. ELSE
  519.   ScrollPickPointer% = 1
  520. END IF
  521.  
  522. COLOR FGround%,BGround%
  523. LOCATE TopRow% + 1,61 - Shadow%,0
  524. PRINT "┤            ├";
  525. COLOR BarFG%,BGround%
  526. LOCATE TopRow% + 1,62 - Shadow%,0
  527. PRINT ScrollPickPointer%; "of"; PickCount%;
  528.  
  529. FOR a% = PickStart% TO PickFinish%
  530.   COLOR FGround%,BGround%
  531.   LOCATE TopRow% + 14,Col%,0
  532.   IF a% = PickStart% THEN
  533.     PRINT CHR$(27);
  534.   ELSEIF a% = PickFinish% THEN
  535.     PRINT CHR$(26);
  536.   ELSE
  537.     IF Bar% =  0 THEN
  538.       c% = ScrollPickPointer%
  539.       FOR i% = 1 TO PickScrollBar%
  540.         b% = c% \ PickScrollBar%
  541.         IF a% = b% + PickStart% THEN
  542.           Bar% = 1
  543.           EXIT FOR
  544.         ELSE
  545.           INCR c%
  546.         END IF
  547.       NEXT i%
  548.       IF Bar%  THEN
  549.         PRINT CHR$(219);
  550.       ELSE
  551.         IF Bar% = 0 AND a% = PickFinish% - 1 THEN
  552.           PRINT CHR$(219);
  553.         ELSE
  554.           PRINT CHR$(176);
  555.         END IF
  556.       END IF
  557.     ELSE
  558.       PRINT CHR$(176);
  559.     END IF
  560.   END IF
  561.   INCR Col%
  562. NEXT a%
  563.  
  564. RETURN
  565. '----------------------------------------------------------------------------
  566. END SUB
  567.