$CPU 8086 ' make compatible with XT systems $LIB ALL OFF ' turn off all PowerBASIC libraries $ERROR ALL OFF ' turn off all PowerBASIC error checking $OPTIMIZE SIZE ' optimize for smaller code $COMPILE UNIT ' compile to a UNIT (.PBU) '$COMPILE EXE ' compile to a UNIT (.PBU) DEFINT A-Z ' Required for all numeric functions, forces PB to not ' include floating point in UNIT (makes it smaller) '/*------------------------------------------------------------------*/ DECLARE FUNCTION LASTPOS(BYVAL NEEDLE AS STRING, BYVAL HAYSTACK AS STRING, BYVAL START AS INTEGER) AS INTEGER DECLARE FUNCTION FILESPEC(BYVAL OPT AS STRING, BYVAL FLNAME AS STRING) AS STRING DECLARE SUB GETFILES(FSP$,FA$()) DECLARE SUB SBOX(TOPROW%,LEFTCOLUMN%,Title$,CHOICES$(),ROPT%,RKEY$,Rtrn$,WINSIZE%,DMOUSE%,TAG%,DefaultPointer%,HIATTR%,ATTR%,BATTR%,OPT%) DECLARE FUNCTION GETDRIVELIST() AS STRING DECLARE FUNCTION ISDRIVEREADY( BYVAL Drive$ ) AS INTEGER DECLARE FUNCTION TRIMR(Strng$,Amount%) AS STRING DECLARE FUNCTION TRIML(Strng$,Amount%) AS STRING '/*------------------------------------------------------------------*/ $CODE SEG "MLIB5" '/*------------------------------------------------------------------*/ ' FBOX ROW,COL,NROWS,PTH$,RKEY$,RTRN$,BATTR,TATTR,MF,BOXTYPE ' File selection Box. ' Displays a selection box of files and directories. ' Directories are dislayed first. Pressing enter with the bar ' placed on a directory "\" will cause the contents of that ' directory to be displayed. Press enter with the bar placed on ' [..] will cause the higher level directory to be displayed. ' If no higher level directory can be displayed then a valid ' drive list is displayed. ' DOS wildcard options (?*) apply. ' FBOX does NOT change the current directory when a selection is ' made. ' ROW = Top Row. If 0 then row centering is used. ' COL = Left Column. If 0 then column centering is used. ' NROWS = Numer of rows to display. ' PTH$ = Path to start display. See GETFILES for wildcard options. ' RKEY$ = What keys to cause return. ESC is the default. ' RTRN$ = Return string. ' BATTR = Bar attribute. If 0 then 79 is used. ' TATTR = Text and Box attribute. If 0 then 48 is used. ' MF = Mouse Flag ' 0 = Don't use mouse ' 1 = Use mouse ' BOXTYPE= Type of box. See TBOX for types. ' EXAMPLE: FBOX 0,0,0,"C:\DATA\*.*",RKEY$,RTRN$,0,0,0,3 ' ' NOTE: If the drive and path are NOT specified, then the current ' drive and path are used. '/*------------------------------------------------------------------*/ SUB FBOX(TROW%,TCOL%,NROWS%,PTH$,RKEY$,RTRN$,BATTR%,TATTR%,DMOUSE%,BOXTYPE%) PUBLIC IF NROWS% = 0 THEN NROWS% = 10 IF BATTR% = 0 THEN BATTR% = 79 IF TATTR% = 0 THEN TATTR% = 48 REDIM FL$(1000) RTRN$ = "" SDRV$ = FILESPEC("D",PTH$) IF INSTR(1,SDRV$,":") < 1 THEN SDRV$ = FILESPEC("D",CURDIR$) SPTH$ = FILESPEC("P",PTH$) IF INSTR(1,SPTH$,"\") < 1 THEN SPTH$ = FILESPEC("P",CURDIR$+"\") WC$ = FILESPEC("N",PTH$) ' SAY 1,1,SDRV$,31 ' SAY 2,1,SPTH$,31 ' SAY 3,1,WC$,31 ' Y$ = GETKEY '/* --- Determine Drive ---*/ DO IF LEFT$(SPTH$,1) <> "\" THEN SPTH$ = "\" + SPTH$ IF RIGHT$(SPTH$,1) <> "\" THEN SPTH$ = SPTH$ + "\" CPTH$ = SDRV$ + SPTH$ + WC$ GETFILES CPTH$,FL$() FBOXJUMP: RKEYS$ = RKEY$ + CHR$(27) SBOX 0,0,CPTH$,FL$(),0,RKEYS$,RTRN$,NROWS%,DMOUSE%,0,0,BATTR%,TATTR%,TATTR%,BOXTYPE% IF RKEYS$ = CHR$(13) THEN '/* --- Change Drive? --- IF INSTR(1,RTRN$,":") = 2 THEN SDRV$ = RTRN$ SPTH$ = "\" RTRN$ = "" END IF '/* --- Change Directory/Drive? --- IF RTRN$ = "[..]" THEN '/* --- If at Root - Get Valid Drive List --- IF SPTH$ = "\" THEN T$ = GETDRIVELIST CNT = 2 FL$(1) = "[..]" FOR TCNT = 1 TO LEN(T$) T1$ = MID$(T$,TCNT,1) '/* IF ISDRIVEREADY(T1$) > 0 THEN FL$(CNT) = T1$+":" INCR CNT '/* END IF NEXT TCNT FL$(CNT) = "" RTRN$ = "" GOTO FBOXJUMP ELSE '/* --- Not at Root - Get Prior Directory --- S = LASTPOS("\",SPTH$,LEN(SPTH$)-1) SPTH$ = LEFT$(SPTH$,S) RTRN$ = "" END IF RTRN$ = "" END IF IF INSTR(1,RTRN$,"\") = 1 THEN SPTH$ = SPTH$ + TRIML(RTRN$,1) RTRN$ = "" END IF END IF LOOP UNTIL RTRN$ <> "" OR RKEYS$ = CHR$(27) OR INSTR(1,RKEY$,RKEYS$) > 0 IF RIGHT$(T$,1) <> "\" THEN T$ = T$ + "\" IF RKEYS$ = CHR$(13) THEN RTRN$ = SDRV$+SPTH$+RTRN$ RKEY$ = RKEYS$ END SUB '/*------------------------------------------------------------------*/ ' $INCLUDE "C:\CODE\MLIB\MLIB.INC" ' RKEY$ = CHR$(27) ' FBOX 0,0,0,UCASE$(COMMAND$),8,RKEY$,RTRN$,0,0,1,4 ' SAY 24,1,RTRN$,30 ' SAY 12,1,CURDIR$,31 ' Y$ = GETKEY '/*------------------------------------------------------------------*/