$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) '/*------------------------------------------------------------------*/ $CODE SEG "MLIB1" '/*------------------------------------------------------------------*/ ' SplitPath - Split a filespec into it's component drive, path, and name ' Source = String with drive, path, and filename together ' Fldrive = Returned as drive portion of Source$ ' Flpath = Returned as path portion of Source$ ' Flname = Returned as filename portion of Source$ ' SPEC = FILESPEC ' EXT = FILENAME EXTENSION SUB PSPLIT(BYVAL Source AS STRING, Fldrive AS STRING, Flpath AS STRING, Flname AS STRING, ST AS STRING, ET AS STRING) PUBLIC DIM StartPos AS INTEGER DIM x AS INTEGER StartPos = 0 IF MID$(Source, 2, 1) = ":" THEN Fldrive = LEFT$(Source, 2) Source = MID$(Source, 3) END IF FOR x = LEN(Source$) TO 1 STEP -1 IF MID$(Source$, x, 1) = "\" THEN StartPos = x EXIT FOR END IF NEXT Flname = RIGHT$(Source, (LEN(Source) - StartPos)) IF StartPos > 0 THEN Flpath = LEFT$(Source, StartPos) END IF S = INSTR(1,Flname,".") IF S > 0 THEN ET = RIGHT$(Flname,LEN(Flname)-S) ST = LEFT$(Flname,S-1) ELSE ST = Flname ET = "" END IF END SUB '/*------------------------------------------------------------------*/ $CODE SEG "MLIB1" '/*------------------------------------------------------------------*/ ' FILESPEC(OPT,STRING) ' Returns the filename component as specified by OPT. ' OPT: D - Returns the drive Letter ' P - Returns the path ' N - Returns the name ' F - Returns the filespec ' E - Returns the extension ' H - Returns the "home" path of the executing program ' M - Returns the drive+path+filespec of file ' EXAMPLE: T$ = "C:\CODE\MLIB\MTEST.DAT" ' FILESPEC("D",T$) = 'C:' ' FILESPEC("P",T$) = '\CODE\MLIB\' ' FILESPEC("N",T$) = 'MTEST.DAT' ' FILESPEC("F",T$) = 'MTEST' ' FILESPEC("E",T$) = 'DAT' ' FILESPEC("H",T$) = 'C:\CODE\MLIB\' ' FILESPEC("M",T$) = 'C:\CODE\MLIB\MTEST' FUNCTION FILESPEC(BYVAL OPT AS STRING, BYVAL FSNAME AS STRING) PUBLIC AS STRING PSPLIT FSNAME, Fldrive$, Flpath$, Flname$, SPEC$, EXT$ IF OPT = "D" THEN FUNCTION = TRIM$(Fldrive$) IF OPT = "P" THEN FUNCTION = TRIM$(Flpath$) IF OPT = "N" THEN FUNCTION = TRIM$(Flname$) IF OPT = "F" THEN FUNCTION = TRIM$(SPEC$) IF OPT = "E" THEN FUNCTION = TRIM$(EXT$) IF OPT = "H" THEN FUNCTION = TRIM$(Fldrive$+Flpath$) IF OPT = "M" THEN FUNCTION = TRIM$(Fldrive$+Flpath$+SPEC$) END FUNCTION '/*------------------------------------------------------------------*/ ' CLS ' T$ = "C:\CODE\MLIB\TEST\VDIR.EXE" ' PSPLIT T$, DRV$, PTH$, NM$, S$, E$ ' PRINT T$ ' PRINT DRV$ ' PRINT PTH$ ' PRINT NM$ ' PRINT S$ ' PRINT E$ ' T$ = "C:\CODE\MLIB\TEST\VDIR.E" ' PSPLIT T$, DRV$, PTH$, NM$, S$, E$ ' PRINT T$ ' PRINT DRV$ ' PRINT PTH$ ' PRINT NM$ ' PRINT S$ ' PRINT E$ ' T$ = "C:\CODE\MLIB\TEST\VDIR" ' PSPLIT T$, DRV$, PTH$, NM$, S$, E$ ' PRINT T$ ' PRINT DRV$ ' PRINT PTH$ ' PRINT NM$ ' PRINT S$ ' PRINT E$ ' T$ = "C:\CODE\MLIB\TEST\MDIR.EXE" ' PRINT "FILESPEC TEST" ' PRINT FILESPEC("D",T$) ' PRINT FILESPEC("P",T$) ' PRINT FILESPEC("N",T$) ' PRINT FILESPEC("F",T$) ' PRINT FILESPEC("E",T$) ' PRINT FILESPEC("M",T$) ' INPUT Z