'===========================================================================
' Subject: FILE MENU LIST SELECTOR            Date: 07-15-97 (23:57)       
'  Author: Kurt Kuzba                         Code: QB, QBasic, PDS        
'  Origin: FidoNet QUIK_BAS Echo            Packet: MENU.ABC
'===========================================================================
'>   read all basic files out of a dir and then list then for
'>   you and you could just press a number to run them
'   This is fairly simple, really. Here is something to study.
'_|_|_|   BASMENU.BAS
'_|_|_|   A simple menuing system in QuickBasic.
'_|_|_|   No warrantee or guarantee given or implied.
'_|_|_|   PUBLIC DOMAIN   by  Kurt Kuzba.  (7/15/1997)
TYPE FileList: F AS STRING * 12: END TYPE
DECLARE SUB BoxBorder ()
DECLARE FUNCTION ChooseProgram$ (BF() AS FileList)
ON ERROR GOTO BooBoo
COLOR 12, 0
CLS
PRINT : PRINT "Creating a menu list..."
SHELL "dir /b *.bas > bas_list.txt"
DIM lst AS INTEGER, count AS INTEGER
DIM BasFile(5000) AS FileList, FError AS STRING
FError = "OK": lst = FREEFILE: OPEN "bas_list.txt" FOR INPUT AS #lst
IF FError <> "OK" THEN
   PRINT : PRINT " Could not open the directory list."
   WHILE INKEY$ > "": WEND: WHILE INKEY$ = "": WEND
   SYSTEM
END IF: count = 0: PRINT : PRINT "Reading menu list.";
WHILE (NOT EOF(lst)) AND (count < 5000)
   count = count + 1: PRINT "."; : LINE INPUT #lst, BasFile(count).F
WEND:  BasFile(0).F = STR$(count): KILL "bas_list.txt"
CALL BoxBorder: ToRun$ = ChooseProgram$(BasFile())
IF ToRun$ = "" THEN
   COLOR 9, 0: CLS : LOCATE 10, 1, 1
   PRINT " You have not chosen a program."
   PRINT " Hit any key to continue..."
   WHILE INKEY$ > "": WEND: WHILE INKEY$ = "": WEND
   SYSTEM
END IF
PRINT : PRINT "Running "; ToRun$
count = INSTR(ToRun$, ".")
IF count > 1 THEN ToRun$ = LEFT$(ToRun$, count - 1): RUN ToRun$
SYSTEM
BooBoo: FError = STR$(ERR): RESUME NEXT
SUB BoxBorder
   COLOR 14, 5
   LOCATE 7, 30
   PRINT " "; CHR$(218); CHR$(194); STRING$(14, 196);
   PRINT CHR$(194); CHR$(191); " ";
   FOR t% = 1 TO 10
      LOCATE 7 + t%, 30
      PRINT " "; STRING$(2, 179); SPACE$(14); STRING$(2, 179); " ";
   NEXT
   LOCATE 18, 30
   PRINT " "; CHR$(192); CHR$(193); STRING$(14, 196);
   PRINT CHR$(193); CHR$(217); " ";
   COLOR 13, 0: LOCATE 20
   LOCATE , 30: PRINT "Keys you may use:"
   LOCATE , 30: PRINT "DOWN, UP, HOME, END"
   LOCATE , 30: PRINT "PAGE UP, PAGE DOWN"
   LOCATE , 30: PRINT "ENTER  (select)"
   LOCATE , 30: PRINT "ESCAPE (abort)";
END SUB
FUNCTION ChooseProgram$ (BF() AS FileList)
   hi% = VAL(BF(0).F): choice% = 1: index% = 1
   DO
      FOR t% = 0 TO 9
         LOCATE 8 + t%, 33, 0
         COLOR 15, 1: IF choice% = (t% + index%) THEN COLOR 1, 7
         s$ = SPACE$(14)
         IF (t% + index%) <= hi% THEN MID$(s$, 2) = BF(t% + index%).F
         PRINT s$;
      NEXT
      DO: k$ = UCASE$(INKEY$): LOOP WHILE k$ = ""
      k% = ASC(k$): IF k% = 0 THEN k% = -ASC(MID$(k$, 2))
      SELECT CASE k%
         CASE 13: ChooseProgram$ = BF(choice%).F: EXIT DO
         CASE 27: ChooseProgram$ = "": EXIT DO
         CASE -71: choice% = 1: index% = 1
         CASE -72: choice% = choice% + (choice% > 1)
            IF choice% < index% THEN index% = choice%
         CASE -73: choice% = choice% - 10: index% = index% - 10
            IF choice% < 1 THEN choice% = 1
            IF index% < 1 THEN index% = 1
         CASE -79: choice% = hi%: index% = hi% - 9
            IF index% < 1 THEN index% = 1
         CASE -80: choice% = choice% - (choice% < hi%)
            IF index% < (choice% - 9) THEN index% = choice% - 9
         CASE -81: choice% = choice% + 10: index% = index% + 10
            IF choice% > hi% THEN choice% = hi%
            IF index% < (choice% - 9) THEN index% = choice% - 9
      END SELECT
   LOOP
END FUNCTION
'_|_|_|   end   BASMENU.BAS
