home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_BAS / DNALIB59.ZIP / DIRBOX.BAS < prev    next >
BASIC Source File  |  1994-02-10  |  31KB  |  861 lines

  1. DECLARE SUB LineEdit(Allow$,Text$,Mouse%,MouseRow%,MouseCol%,Fill%,Row%,Col%,EditKey%,Attr%)
  2. DECLARE SUB Popwind(Title$,Toprow%,Leftcolumn%,Bottomrow%,Rightcolumn%,Attr%,Shadow%,Border%)
  3. DECLARE SUB Dialog(Choices$(),Title$,Mouse%,Cntr%,TopRow%,LeftColumn%,TxtColor%,Attr%,Shadow%,Border%)
  4. DECLARE SUB RestoreScreen(ScreenID$,TopRow%,LeftColumn%)
  5. DECLARE SUB SaveScreen(ScreenID$,TopRow%,LeftColumn%,BottomRow%,RightColumn%,Shadow%)
  6. DECLARE SUB CalcByte(Attr%,LowByte%,HiByte%)
  7. DECLARE SUB Clicked(Rgt%,Lft%,Row%,Col%)
  8. DECLARE SUB HideCursor()
  9. DECLARE SUB ShowCursor()
  10. DECLARE FUNCTION LeftButtonReleased%()
  11.  
  12. SUB DirectoryBox(ReturnedFile$,Mouse%,Attr%,BarAttr%,ButtonAttr%,Shadow%,Border%)PUBLIC
  13.  
  14. DIM Directory$(1:100)
  15. DIM FileName$(1:999)
  16. DIM Message$(2)
  17.  
  18. ON LOCAL ERROR GOTO ErrorHandle
  19.  
  20. Allow$ = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_^$~!{}()@'`*.\:"
  21. FileMask$ = "*.*"
  22.  
  23. CalcByte Attr%,FGround%,BGround%
  24. CalcByte ButtonAttr%,BtFG%,BtBG%
  25. CalcByte BarAttr%,BarFG%,BarBG%
  26.  
  27. IF Mouse% THEN HideCursor
  28.  
  29. SaveScreen DirScreen$,4,9,21,71,1
  30.  
  31. Popwind Title$,4,9,21,71,Attr%,Shadow%,Border%
  32. Popwind Title$,8,11,17,54,Attr%,0,1
  33. Popwind Title$,8,58,17,69,Attr%,0,1
  34.  
  35. IF Mouse% THEN
  36.   COLOR FGround%,BGround%
  37.   LOCATE 4,11,0
  38.   PRINT CHR$(91,254,93);
  39. END IF
  40.  
  41. Row% = 19:Col% = 13
  42.  
  43. COLOR BtFG%,BGround%
  44. LOCATE 6,11,0
  45. PRINT "File Name:";
  46.  
  47. COLOR BtFG%,BtBG%
  48. LOCATE Row%, Col%,0
  49. PRINT " Open ";
  50. COLOR 0,BGround%
  51. LOCATE Row%, Col% + 6,0
  52. PRINT "▄";
  53. COLOR 0,BGround%
  54. LOCATE Row% + 1,Col% + 1,0
  55. PRINT "▀▀▀▀▀▀";
  56.  
  57. COLOR BtFG%,BtBG%
  58. LOCATE Row%,Col% + 11,0
  59. PRINT " Esc ";
  60. COLOR 0,BGround%
  61. LOCATE Row%,Col% + 16,0
  62. PRINT "▄";
  63. COLOR 0,BGround%
  64. LOCATE Row% + 1,Col% + 12,0
  65. PRINT "▀▀▀▀▀"
  66.  
  67. IF RIGHT$(CURDIR$,1) = "\" THEN  'make sure there is a back slash
  68.   Current$ = CURDIR$ + "*.*"
  69. ELSE
  70.   Current$ = CURDIR$ + CHR$(92) + "*.*"
  71. END IF
  72.  
  73. DO
  74.  
  75. IF DirCount% THEN          'empty out the array
  76.   FOR i% = 1 TO DirCount%
  77.     Directory$(i%) = ""
  78.   NEXT i%
  79. END IF
  80.  
  81. IF FileCount% THEN         'empty out the array
  82.   FOR i% = 1 TO FileCount%
  83.     FileName$(i%) = ""
  84.   NEXT i%
  85. END IF
  86.  
  87. FOR i% = 1 TO LEN(Current$)      'get the path, need this when testing ATTRIB
  88.   Test$ = RIGHT$(Current$,i%)
  89.   IF LEFT$(Test$,1) = CHR$(92) THEN
  90.     Path$ = LEFT$(Current$,LEN(Current$) - (i% - 1))
  91.     EXIT FOR
  92.   END IF
  93. NEXT i%
  94.  
  95. i% = 1
  96.  
  97.  DirName$ = DIR$(Path$ + "*.*",16)   'get directorys and put them in an array
  98.  x% = ATTRIB(Path$ + DirName$)
  99.  IF x% = 16 THEN Directory$(i%) = DirName$
  100.  
  101.    DO
  102.      DirName$ = DIR$
  103.      IF LEN(DirName$) THEN
  104.        x% = ATTRIB(Path$ + DirName$)
  105.        IF x% = 16 THEN
  106.          INCR i%
  107.          Directory$(i%) = DirName$
  108.        END IF
  109.      END IF
  110.    LOOP WHILE LEN(DirName$)
  111.  
  112. IF LEN(Path$) > 3 THEN
  113.   IF LEN(Directory$(i%)) THEN
  114.     INCR i%
  115.     Directory$(i%) = ".."
  116.   ELSE
  117.     Directory$(i%) = ".."
  118.   END IF
  119. END IF
  120.  
  121. DirCount% = i%      'keep a count of directorys
  122.  
  123. ARRAY SORT Directory$(1) FOR DirCount%     'sort them A - Z
  124.  
  125. i% = 1
  126.  
  127.  TName$ = DIR$(Current$)     'get filenames and put them in an array
  128.  FileName$(i%) = TName$
  129.  DO
  130.    TName$ = DIR$
  131.    INCR i%
  132.    FileName$(i%) = TName$
  133.  LOOP WHILE LEN(TName$)
  134.  
  135. FileCount% = i% - 1       'keep a count of files
  136.  
  137. ARRAY SORT FileName$(1) FOR FileCount%    'sort them A - Z
  138.  
  139. DirStart% = 1:DirFinish% = 8:DirPointer% = 0  'initialize these
  140. FileStart% = 1:FileFinish% = 24
  141.  
  142. DO
  143.  
  144. MouseJumpToRepaintLoop:
  145.  
  146. IF OldFilePointer% THEN       'keep track of pointer
  147.   FilePointer% = OldFilePointer%
  148. ELSE
  149.   FilePointer% = 1
  150. END IF
  151.  
  152. DO
  153.  
  154. MouseJumpToFilesLoop:
  155.  
  156. IF Mouse% THEN HideCursor
  157.  
  158. GOSUB PrintDirs
  159. GOSUB PrintFiles
  160.  
  161. Current$ = Path$ + FileMask$     'display the full path and file name
  162. IF LEN(Current$) < 48 THEN       'of the selected item
  163.   Add% = 48 - LEN(Current$)
  164.   Current$ = Current$ + SPACE$(Add%)
  165. END IF
  166.  
  167. Current$ = UCASE$(Current$)    'force upper case
  168.  
  169. Editkey% = 255  'this causes LineEdit to print and exit
  170.  
  171. LineEdit Allow$,Current$,Mouse%,MouseRow%,MouseCol%,176,6,22,EditKey%,Attr%
  172.  
  173. WHILE NOT INSTAT
  174.   IF Mouse% THEN
  175.     ShowCursor
  176.     Rgt% = 0:Lft% = 0:MRow% = 0:MCol% = 0
  177.     Clicked Rgt%,Lft%,MRow%,MCol%
  178.     IF Lft% AND MRow% > 8 AND MRow% < 17 THEN
  179.       SELECT CASE MCol%
  180.         CASE 13 TO 24  'first row
  181.           IF FilePointer% = FileStart% + MRow% - 9 THEN
  182.             IF LeftButtonReleased% THEN
  183.               Chose% = 13:GOTO MouseJumpToMainKeyBoard
  184.             END IF
  185.           ELSE
  186.             IF FileStart% + MRow% - 9 <= FileCount% THEN
  187.               FilePointer% = FileStart% + MRow% - 9
  188.               GOTO MouseJumpToFilesLoop
  189.             END IF
  190.           END IF
  191.         CASE 27 TO 38  'second row
  192.           IF FilePointer% = FileStart% + 8 + MRow% - 9 THEN
  193.             IF LeftButtonReleased% THEN
  194.               Chose% = 13:GOTO MouseJumpToMainKeyBoard
  195.             END IF
  196.           ELSE
  197.             IF FileStart% + 8 + MRow% - 9 <= FileCount% THEN
  198.               FilePointer% = FileStart% + 8 + MRow% - 9
  199.               GOTO MouseJumpToFilesLoop
  200.             END IF
  201.           END IF
  202.         CASE 41 TO 52  'third row
  203.           IF FilePointer% = FileStart% + 16 + MRow% - 9 THEN
  204.             IF LeftButtonReleased% THEN
  205.               Chose% = 13:GOTO MouseJumpToMainKeyBoard
  206.             END IF
  207.           ELSE
  208.             IF FileStart% + 16 + MRow% - 9 <= FileCount% THEN
  209.               FilePointer% = FileStart% + 16 + MRow% - 9
  210.               GOTO MouseJumpToFilesLoop
  211.             END IF
  212.           END IF
  213.         CASE 59 TO 68  'dirs
  214.           IF DirStart% + MRow% - 9 <= DirCount% THEN
  215.             DirPointer% = DirStart% + MRow% - 9
  216.             OldFilePointer% = FilePointer%
  217.             FilePointer% = 0
  218.             HideCursor
  219.             GOSUB PrintFiles
  220.             GOTO MouseJumpToDirLoop
  221.           END IF
  222.         CASE 69 TO 70  'jump to Dirs mouse scroll bar
  223.           IF LeftButtonReleased% THEN
  224.             OldFilePointer% = FilePointer%
  225.             FilePointer% = 0
  226.             HideCursor
  227.             GOSUB PrintFiles
  228.             GOTO MouseJumpToDirs
  229.           END IF
  230.       END SELECT
  231.     ELSE
  232.       IF Lft% AND MCol% > 11 AND MCol% < 71 THEN
  233.         SELECT CASE MRow%
  234.           CASE 4  'Esc box
  235.             IF MCol% = 12 AND LeftButtonReleased% THEN
  236.               Chose% = 27:GOTO MouseJumpToMainKeyBoard
  237.             END IF
  238.           CASE 6  'line editor
  239.             IF MCol% > 21 AND MCol% < 71 AND LeftButtonReleased% THEN
  240.               OldFilePointer% = FilePointer%
  241.               FilePointer% = 0
  242.               HideCursor
  243.               GOSUB PRINTFILES
  244.               GOTO MouseJumpToEditRoutine
  245.             END IF
  246.           CASE 17  'mouse scroll bars if less than 24 files +/- pointer else pageup/down
  247.             SELECT CASE MCol%
  248.               CASE 28 TO 29   'mouse scroll right
  249.                 IF FileCount% < 25 THEN
  250.                   IF LeftButtonReleased% THEN
  251.                     Chose% = -72:GOTO MouseJumpToMainKeyBoard
  252.                   END IF
  253.                 ELSE
  254.                   IF LeftButtonReleased% THEN
  255.                     Chose% = -73:GOTO MouseJumpToMainKeyBoard
  256.                   END IF
  257.                 END IF
  258.               CASE 52 TO 53  'mouse scroll left
  259.                 IF FileCount% < 25 THEN
  260.                   IF LeftButtonReleased% THEN
  261.                     Chose% = -80:GOTO MouseJumpToMainKeyBoard
  262.                   END IF
  263.                 ELSE
  264.                   IF LeftButtonReleased% THEN
  265.                     Chose% = -81:GOTO MouseJumpToMainKeyBoard
  266.                   END IF
  267.                 END IF
  268.             END SELECT
  269.           CASE 19
  270.             SELECT CASE MCol%
  271.               CASE 13 TO 18  'Open button
  272.                 IF LeftButtonReleased% THEN
  273.                   Chose% = 13:GOTO MouseJumpToMainKeyBoard
  274.                 END IF
  275.               CASE 24 TO 28  'Esc button
  276.                 IF LeftButtonReleased% THEN
  277.                   Chose% = 27:GOTO MouseJumpToMainKeyBoard
  278.                 END IF
  279.             END SELECT
  280.         END SELECT
  281.       END IF
  282.     END IF
  283.   END IF
  284. WEND
  285. Ky$ = INKEY$
  286.  
  287. IF LEN(Ky$) = 1 THEN
  288.   Chose% = ASC(Ky$)
  289. ELSE
  290.   Chose% = -ASC(RIGHT$(Ky$,1))
  291. END IF
  292.  
  293. MouseJumpToMainKeyBoard:
  294.  
  295.   SELECT CASE Chose%
  296.  
  297.        CASE -71 ' home
  298.          IF FileCount% < 24 THEN
  299.            FilePointer% = 1
  300.          ELSE
  301.            FilePointer% = 1
  302.            FileStart% = 1
  303.            FileFinish% = 24
  304.          END IF
  305.        CASE -72 ' up arrow
  306.          IF FilePointer% > 1 THEN
  307.            DECR FilePointer%
  308.            IF FilePointer% < FileStart% THEN
  309.              DECR FileStart%:DECR FileFinish%
  310.            END IF
  311.          END IF
  312.        CASE -73 ' page up
  313.          IF FilePointer% - 24 > 0 THEN
  314.            IF FileStart% - 24 > 0 THEN
  315.              DECR FilePointer%,24
  316.              DECR FileStart%,24
  317.              DECR FileFinish%,24
  318.            ELSE
  319.              DECR FilePointer%,24
  320.              FileStart% = 1
  321.              FileFinish% = 24
  322.            END IF
  323.          ELSE
  324.            FileStart% = 1
  325.            FileFinish% = 24
  326.          END IF
  327.        CASE -75 ' left arrow
  328.          IF FilePointer% - 8 > 0 THEN
  329.            DECR FilePointer%,8
  330.            IF FilePointer% < FileStart% THEN
  331.              IF FileStart% - 8 > 0 THEN
  332.                DECR FileStart%,8:DECR FileFinish%,8
  333.              ELSE
  334.                FileStart% = 1
  335.                FileFinish% = 24
  336.              END IF
  337.            END IF
  338.          ELSE
  339.            IF FileCount% > 24 THEN
  340.              FileStart% = 1
  341.              FileFinish% = 24
  342.            END IF
  343.          END IF
  344.        CASE -77 ' right arrow
  345.          IF FilePointer% + 8 <= FileCount% THEN
  346.            INCR FilePointer%,8
  347.            IF FilePointer% > FileFinish% THEN
  348.              IF FileFinish% + 8 < FileCount% THEN
  349.                INCR FileStart%,8:INCR FileFinish%,8
  350.              ELSE
  351.                FileFinish% = FileCount%
  352.                FileStart% = FileFinish% - 23
  353.              END IF
  354.            END IF
  355.          ELSE
  356.            IF FileCount% > 24 THEN
  357.              FileFinish% = FileCount%
  358.              FileStart% = FileFinish% - 23
  359.            END IF
  360.          END IF
  361.        CASE -79 ' end key
  362.          IF FileCount% < 24 THEN
  363.            FilePointer% = FileCount%
  364.          ELSE
  365.            FilePointer% = FileCount%
  366.            FileStart% = FileCount% - 23
  367.            FileFinish% = FileCount%
  368.          END IF
  369.        CASE -80 ' down arrow
  370.          IF FilePointer% < FileCount% THEN
  371.            INCR FilePointer%
  372.            IF FilePointer% > FileFinish% THEN
  373.              INCR FileStart%:INCR FileFinish%
  374.            END IF
  375.          END IF
  376.        CASE -81 ' page down
  377.          IF FileCount% > 24 THEN
  378.            IF FilePointer% + 24 <= FileCount% THEN
  379.              IF FileFinish% + 24 <= FileCount% THEN
  380.                INCR FilePointer%,24
  381.                INCR FileStart%,24
  382.                INCR FileFinish%,24
  383.              ELSE
  384.                INCR FilePointer%,24
  385.                FileFinish% = FileCount%
  386.                FileStart% = FileFinish% - 23
  387.              END IF
  388.            ELSE
  389.              FileFinish% = FileCount%
  390.              FileStart% = FileFinish% - 23
  391.            END IF
  392.          END IF
  393.        CASE 9   ' tab key
  394.          OldFilePointer% = FilePointer%
  395.          FilePointer% = 0
  396.          GOSUB PrintFiles
  397.          MouseJumpToDirs:
  398.          IF OldDirPointer% THEN
  399.            DirPointer% = OldDirPointer%
  400.          ELSE
  401.            DirPointer% = 1
  402.          END IF
  403.                          DO
  404.                            MouseJumpToDirLoop:
  405.                            IF Mouse% THEN HideCursor
  406.                            GOSUB PrintDirs
  407.  
  408.                            WHILE NOT INSTAT
  409.                              IF Mouse% THEN
  410.                                ShowCursor
  411.                                Rgt% = 0:Lft% = 0:MRow% = 0:MCol% = 0
  412.                                Clicked Rgt%,Lft%,MRow%,MCol%
  413.                                IF Lft% AND MRow% > 8 AND MRow% < 17 THEN
  414.                                  SELECT CASE MCol%
  415.                                    CASE 13 TO 24  'first row
  416.                                      IF FileStart% + MRow% - 9 <= FileCount% THEN
  417.                                        FilePointer% = FileStart% + MRow% - 9
  418.                                        OldDirPointer% = DirPointer%
  419.                                        DirPointer% = 0
  420.                                        GOTO MouseJumpToFilesLoop
  421.                                      END IF
  422.                                    CASE 27 TO 38  'second row
  423.                                      IF FileStart% + 8 + MRow% - 9 <= FileCount% THEN
  424.                                        FilePointer% = FileStart% + 8 + MRow% - 9
  425.                                        OldDirPointer% = DirPointer%
  426.                                        DirPointer% = 0
  427.                                        GOTO MouseJumpToFilesLoop
  428.                                      END IF
  429.                                    CASE 41 TO 52  'third row
  430.                                      IF FileStart% + 16 + MRow% - 9 <= FileCount% THEN
  431.                                        FilePointer% = FileStart% + 16 + MRow% - 9
  432.                                        OldDirPointer% = DirPointer%
  433.                                        DirPointer% = 0
  434.                                        GOTO MouseJumpToFilesLoop
  435.                                      END IF
  436.                                    CASE 59 TO 68  'dirs
  437.                                      IF DirPointer% = DirStart% + MRow% - 9 THEN
  438.                                        IF LeftButtonReleased% THEN
  439.                                          Chose% = 13:GOTO MouseJumpToSubKeyBoard
  440.                                        END IF
  441.                                      ELSE
  442.                                        IF DirStart% + MRow% - 9 <= DirCount% THEN
  443.                                          DirPointer% = DirStart% + MRow% - 9
  444.                                          GOTO MouseJumpToDirLoop
  445.                                        END IF
  446.                                      END IF
  447.                                    CASE 69  'Dirs mouse scrollbars
  448.                                      SELECT CASE MRow%
  449.                                        CASE 9
  450.                                          IF LeftButtonReleased% THEN
  451.                                            Chose% = -72:GOTO MouseJumpToSubKeyBoard
  452.                                          END IF
  453.                                        CASE 16
  454.                                          IF LeftButtonReleased% THEN
  455.                                            Chose% = -80:GOTO MouseJumpToSubKeyBoard
  456.                                          END IF
  457.                                      END SELECT
  458.                                    END SELECT
  459.                                  ELSE
  460.                                    IF Lft% AND MCol% > 11 AND MCol% < 71 THEN
  461.                                      SELECT CASE MRow%
  462.                                        CASE 4  'Esc box
  463.                                          IF MCol% = 12 AND LeftButtonReleased% THEN
  464.                                            Chose% = 27:GOTO MouseJumpToMainKeyBoard
  465.                                          END IF
  466.                                        CASE 6  'line editor
  467.                                          IF MCol% > 21 AND MCol% < 71 AND LeftButtonReleased% THEN
  468.                                            OldDirPointer% = DirPointer%
  469.                                            DirPointer% = 0
  470.                                            HideCursor
  471.                                            GOSUB PrintDirs
  472.                                            GOTO MouseJumpToEditRoutine
  473.                                          END IF
  474.                                        CASE 17  'jump to files mouse bar
  475.                                          IF MCol% > 28 AND MCol% < 53 THEN
  476.                                            IF LeftButtonReleased% THEN
  477.                                              OldDirPointer% = DirPointer%
  478.                                              DirPointer% = 0
  479.                                              GOTO MouseJumpToRepaintLoop
  480.                                            END IF
  481.                                          END IF
  482.                                        CASE 19
  483.                                          SELECT CASE MCol%
  484.                                            CASE 13 TO 18  'Open button
  485.                                              IF LeftButtonReleased% THEN
  486.                                                Chose% = 13:GOTO MouseJumpToSubKeyBoard
  487.                                              END IF
  488.                                            CASE 24 TO 28  'Esc button
  489.                                              IF LeftButtonReleased% THEN
  490.                                                Chose% = 27:GOTO MouseJumpToMainKeyBoard
  491.                                              END IF
  492.                                          END SELECT
  493.                                      END SELECT
  494.                                    END IF
  495.                                  END IF
  496.                                END IF
  497.                            WEND
  498.                            Ky$ = INKEY$
  499.  
  500.                            IF LEN(Ky$) = 1 THEN
  501.                              Chose% = ASC(Ky$)
  502.                            ELSE
  503.                              Chose% = -ASC(RIGHT$(Ky$,1))
  504.                            END IF
  505.  
  506.                            MouseJumpToSubKeyBoard:
  507.                            SELECT CASE Chose%
  508.  
  509.                              CASE -71 ' home
  510.                                IF DirCount% > 8 THEN
  511.                                  DirPointer% = 1
  512.                                  DirFinish% = 8
  513.                                  DirStart% = 1
  514.                                ELSE
  515.                                  DirPointer% = 1
  516.                                END IF
  517.                              CASE -72 ' up arrow
  518.                                IF DirPointer% > 1 THEN
  519.                                  DECR DirPointer%
  520.                                  IF DirPointer% < DirStart% THEN
  521.                                    DECR DirStart%:DECR DirFinish%
  522.                                  END IF
  523.                                END IF
  524.                              CASE -79 ' end key
  525.                                IF DirCount% > 8 THEN
  526.                                  DirPointer% = DirCount%
  527.                                  DirFinish% = DirCount%
  528.                                  DirStart% = DirFinish% - 7
  529.                                ELSE
  530.                                  DirPointer% = DirCount%
  531.                                END IF
  532.                              CASE -80 ' down arrow
  533.                                IF DirPointer% < DirCount% THEN
  534.                                  INCR DirPointer%
  535.                                  IF DirPointer% > DirFinish% THEN
  536.                                    INCR DirStart%:INCR DirFinish%
  537.                                  END IF
  538.                                END IF
  539.                              CASE 9   ' tab key
  540.                                OldDirPointer% = DirPointer%
  541.                                DirPointer% = 0
  542.                                GOSUB PrintDirs
  543.                                MouseJumpToEditRoutine:
  544.                                EditLoop:
  545.                                Editkey% = 0
  546.                                LineEdit Allow$,Current$,Mouse%,MouseRow%,MouseCol%,176,6,22,EditKey%,BarAttr%
  547.                                SELECT CASE Editkey%
  548.                                  CASE -255  'exit was with mouse
  549.                                    IF MouseRow% > 8 AND MouseRow% < 17 THEN
  550.                                      SELECT CASE MouseCol%
  551.                                        CASE 13 TO 24  'first row
  552.                                          IF FileStart% + MouseRow% - 9 <= FileCount% THEN
  553.                                            FilePointer% = FileStart% + MouseRow% - 9
  554.                                          ELSE
  555.                                            FilePointer% = FileCount%
  556.                                          END IF
  557.                                            GOTO MouseJumpToFilesLoop
  558.                                       CASE 27 TO 38  'second row
  559.                                         IF FileStart% + 8 + MouseRow% - 9 <= FileCount% THEN
  560.                                           FilePointer% = FileStart% + 8 + MouseRow% - 9
  561.                                         ELSE
  562.                                           FilePointer% = FileCount%
  563.                                         END IF
  564.                                           GOTO MouseJumpToFilesLoop
  565.                                       CASE 41 TO 52  'third row
  566.                                         IF FileStart% + 16 + MouseRow% - 9 <= FileCount% THEN
  567.                                           FilePointer% = FileStart% + 16 + MouseRow% - 9
  568.                                         ELSE
  569.                                           FilePointer% = FileCount%
  570.                                         END IF
  571.                                           GOTO MouseJumpToFilesLoop
  572.                                       CASE 59 TO 68  'dirs
  573.                                         IF DirStart% + MouseRow% - 9 <= DirCount% THEN
  574.                                           DirPointer% = DirStart% + MouseRow% - 9
  575.                                         ELSE
  576.                                           DirPointer% = DirCount%
  577.                                         END IF
  578.                                           Current$ = UCASE$(Current$)
  579.                                           Editkey% = 255
  580.                                           LineEdit Allow$,Current$,Mouse%,MouseRow%,MouseCol%,176,6,22,EditKey%,Attr%
  581.                                           GOTO MouseJumpToDirLoop
  582.                                       CASE 69 TO 70  'jump to Dirs mouse scroll bar
  583.                                            Current$ = UCASE$(Current$)
  584.                                            Editkey% = 255
  585.                                            LineEdit Allow$,Current$,Mouse%,MouseRow%,MouseCol%,176,6,22,EditKey%,Attr%
  586.                                            GOTO MouseJumpToDirs
  587.                                       CASE ELSE
  588.                                         GOTO EditLoop
  589.                                      END SELECT
  590.                                    ELSE
  591.                                      IF MouseCol% > 11 AND MouseCol% < 71 THEN
  592.                                        SELECT CASE MouseRow%
  593.                                          CASE 4  'Esc box
  594.                                            IF MouseCol% = 12 THEN
  595.                                              Chose% = 27:GOTO MouseJumpToMainKeyBoard
  596.                                            END IF
  597.                                          CASE 6
  598.                                            ReturnedFile$ = RTRIM$(Current$)
  599.                                            Editkey% = 13
  600.                                            EXIT,EXIT,EXIT,EXIT
  601.                                          CASE 17
  602.                                            IF MouseCol% > 28 AND MouseCol% < 53 THEN
  603.                                                GOTO MouseJumpToRepaintLoop
  604.                                            END IF
  605.                                          CASE 19
  606.                                            SELECT CASE MouseCol%
  607.                                              CASE 13 TO 18  'Open button
  608.                                                Chose% = 13:GOTO MouseJumpToMainKeyBoard
  609.                                              CASE 24 TO 28  'Esc button
  610.                                                Chose% = 27:GOTO MouseJumpToMainKeyBoard
  611.                                            END SELECT
  612.                                        END SELECT
  613.                                      END IF
  614.                                      GOTO EditLoop
  615.                                    END IF
  616.                                  CASE 13
  617.                                    Current$ = RTRIM$(Current$)
  618.                                    OldDirPointer% = 0
  619.                                    OldFilePointer% = 0
  620.                                    EXIT,EXIT,EXIT
  621.                                  CASE 27
  622.                                    ReturnedFile$ = ""
  623.                                    Editkey% = 27
  624.                                    EXIT,EXIT,EXIT,EXIT 'I'm outer here
  625.                                  CASE ELSE
  626.                                    EXIT,EXIT
  627.                                END SELECT
  628.                              CASE 13  ' enter
  629.                                IF Directory$(DirPointer%) = ".." THEN
  630.                                  Path$ = RTRIM$(Path$,CHR$(92))
  631.                                  FOR i% = 1 TO LEN(Path$)
  632.                                    Test$ = RIGHT$(Path$,i%)
  633.                                    IF LEFT$(Test$,1) = CHR$(92) THEN
  634.                                      Current$ = LEFT$(Path$,LEN(Path$) - (i% - 1))
  635.                                      EXIT FOR
  636.                                    END IF
  637.                                  NEXT i%
  638.                                ELSE
  639.                                  Current$ = Path$ + Directory$(DirPointer%) + CHR$(92)
  640.                                END IF
  641.                                OldDirPointer% = 0
  642.                                OldFilePointer% = 0
  643.                                EXIT,EXIT,EXIT
  644.                              CASE 27  ' Esc
  645.                                ReturnedFile$ = ""
  646.                                Editkey% = 27
  647.                                EXIT,EXIT,EXIT,EXIT 'I'm outer here
  648.                              CASE ELSE
  649.                                BEEP
  650.                            END SELECT
  651.  
  652.                           LOOP
  653.  
  654.  
  655.        CASE 13  ' enter
  656.          ReturnedFile$ = RTRIM$(Current$)
  657.          Editkey% = 13
  658.          EXIT,EXIT,EXIT
  659.        CASE 27  ' Esc
  660.          ReturnedFile$ = ""
  661.          Editkey% = 27
  662.          EXIT,EXIT,EXIT
  663.        CASE ELSE
  664.          BEEP
  665.  
  666.   END SELECT
  667.  
  668. LOOP
  669.  
  670. LOOP
  671.  
  672. LOOP
  673.  
  674. Row% = 19:Col% = 13
  675.  
  676. SELECT CASE Editkey%
  677.  
  678.     CASE 13 'Ok
  679.           IF Mouse% THEN HideCursor
  680.           COLOR FGround%,BGround%
  681.           LOCATE Row%,Col%,0
  682.           PRINT " ";
  683.           LOCATE Row% + 1,Col% + 1,0
  684.           PRINT "      ";
  685.       COLOR BtFG%,BtBG%
  686.           LOCATE Row%,Col% + 1,0
  687.           PRINT " Open "
  688.  
  689.     CASE 27 'Esc
  690.           IF Mouse% THEN HideCursor
  691.           COLOR FGround%,BGround%
  692.           LOCATE Row%,Col% + 11,0
  693.           PRINT " ";
  694.           LOCATE Row% + 1,Col% + 12,0
  695.           PRINT "      ";
  696.       COLOR BtFG%,BtBG%
  697.           LOCATE Row%,Col% + 12,0
  698.           PRINT " Esc "
  699.  
  700. END SELECT
  701.  
  702. IF Mouse% THEN ShowCursor
  703. DELAY .5
  704. IF Mouse% THEN HideCursor
  705. RestoreScreen DirScreen$,4,9
  706.  
  707. EXIT SUB
  708. '----------------------------------------------------------------------------
  709. PrintFiles:
  710. Row% = 9
  711. Col% = 12
  712.  
  713. FOR a% = FileStart% TO FileFinish%
  714.   IF a% = FileStart% + 8 OR a% = FileStart% + 16 THEN Row% = 9:INCR Col%,14
  715.     IF a% = FilePointer% THEN
  716.       FileMask$ = FileName$(a%)
  717.       COLOR BarFG%,BarBG%
  718.       LOCATE Row%,Col%,0
  719.       PRINT SPACE$(1) + FileName$(a%) + SPACE$(13 - LEN(FileName$(a%)));
  720.     ELSE
  721.       COLOR FGround%,BGround%
  722.       LOCATE Row%,Col%,0
  723.       PRINT SPACE$(1) + FileName$(a%) + SPACE$(13 - LEN(FileName$(a%)));
  724.     END IF
  725.     INCR Row%
  726.   NEXT a%
  727.  
  728. FileScrollBar% = FileCount% \ 22
  729. IF FileScrollBar% < 1 THEN FileScrollBar% = 1
  730. Bar% = 0
  731. Col% = 29
  732.  
  733. IF FilePointer% THEN
  734.   ScrollFilePointer% = FilePointer%
  735. ELSEIF OldFilePointer% THEN
  736.   ScrollFilePointer% = OldFilePointer%
  737. ELSE
  738.   ScrollFilePointer% = 1
  739. END IF
  740.  
  741. COLOR FGround%,BGround%
  742. LOCATE 17,13,0
  743. PRINT "┤            ├";
  744. COLOR BtFG%,BGround%
  745. LOCATE 17,14,0
  746. PRINT ScrollFilePointer%; "of"; FileCount%;
  747.  
  748. FOR a% = FileStart% TO FileFinish%
  749.   COLOR FGround%,BGround%
  750.   LOCATE 17,Col%,0
  751.   IF a% = FileStart% THEN
  752.     PRINT CHR$(27);
  753.   ELSEIF a% = FileFinish% THEN
  754.     PRINT CHR$(26);
  755.   ELSE
  756.     IF Bar% =  0 THEN
  757.       c% = ScrollFilePointer%
  758.       FOR i% = 1 TO FileScrollBar%
  759.         b% = c% \ FileScrollBar%
  760.         IF a% = b% + FileStart% THEN
  761.           Bar% = 1
  762.           EXIT FOR
  763.         ELSE
  764.           INCR c%
  765.         END IF
  766.       NEXT i%
  767.       IF Bar%  THEN
  768.     PRINT CHR$(219);
  769.       ELSE
  770.         IF Bar% = 0 AND a% = FileFinish% - 1 THEN
  771.           PRINT CHR$(219);
  772.         ELSE
  773.           PRINT CHR$(176);
  774.         END IF
  775.       END IF
  776.     ELSE
  777.       PRINT CHR$(176);
  778.     END IF
  779.   END IF
  780.   INCR Col%
  781. NEXT a%
  782.  
  783. RETURN
  784. '----------------------------------------------------------------------------
  785. PrintDirs:
  786.  
  787. DirScrollBar% = DirCount% \ 6
  788. Bar% = 0
  789. Row% = 9
  790. Col% = 59
  791.  
  792. IF DirPointer% THEN
  793.   ScrollDirPointer% = DirPointer%
  794. ELSEIF OldDirPointer% THEN
  795.   ScrollDirPointer% = OldDirPointer%
  796. ELSE
  797.   ScrollDirPointer% = 1
  798. END IF
  799.  
  800. FOR a% = DirStart% TO DirFinish%
  801.   IF a% = DirPointer% THEN
  802.     COLOR BarFG%,BarBG%
  803.     LOCATE Row%,Col%,0
  804.     PRINT SPACE$(1) + Directory$(a%) + SPACE$(9 - LEN(Directory$(a%)));
  805.   ELSE
  806.     COLOR FGround%,BGround%
  807.     LOCATE Row%,Col%,0
  808.     PRINT SPACE$(1) + Directory$(a%) + SPACE$(9 - LEN(Directory$(a%)));
  809.   END IF
  810.   COLOR FGround%,BGround%
  811.   LOCATE Row%,69,0
  812.   IF a% = DirStart% THEN
  813.     PRINT CHR$(24);
  814.   ELSEIF a% = DirFinish% THEN
  815.     PRINT CHR$(25);
  816.   ELSE
  817.     IF Bar% =  0 THEN
  818.       c% = ScrollDirPointer%
  819.       FOR i% = 1 TO DirScrollBar%
  820.         b% = c% \ DirScrollBar%
  821.         IF a% = b% + DirStart% THEN
  822.           Bar% = 1
  823.           EXIT FOR
  824.         ELSE
  825.           INCR c%
  826.         END IF
  827.       NEXT i%
  828.       IF Bar%  THEN
  829.     PRINT CHR$(219);
  830.       ELSE
  831.         IF Bar% = 0 AND a% = DirFinish% - 1 THEN
  832.           PRINT CHR$(219);
  833.         ELSE
  834.           PRINT CHR$(176);
  835.         END IF
  836.       END IF
  837.     ELSE
  838.       PRINT CHR$(176);
  839.     END IF
  840.   END IF
  841.   INCR Row%
  842. NEXT a%
  843.  
  844. RETURN
  845. '----------------------------------------------------------------------------
  846. ErrorHandle:
  847.  
  848.   SELECT CASE ERR
  849.  
  850.     CASE 71
  851.       Message$(1) = "  Disk Drive not Ready  "
  852.     CASE 76
  853.       Message$(1) = "  Path or File not Found  "
  854.  
  855.   END SELECT
  856.  
  857.   Dialog Message$(),"Error",Mouse%,3,0,0,BarFG%,ButtonAttr%,Shadow%,Border%
  858.  
  859. RESUME NEXT
  860. '----------------------------------------------------------------------------
  861. END SUB