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