10 REM > BLib.Path 1.02 J.G.Harston
   20 REM Platform-independant pathname functions
   30 :
   40 :
   50 REM PROCf_init - initialise filing-system variables
   60 REM -----------------------------------------------
   70 DEFPROCf_init
   80 d$=".":s$="/":IF(os%AND-24):d$="/":s$=".":IF(os%AND-32):d$="\"
   90 ENDPROC
  100 :
  110 :
  120 REM FNfn_root(path$) - return root of path
  130 REM --------------------------------------
  140 DEFFNfn_root(A$):LOCALA%,B%:IFLEFT$(A$,2)=d$+d$:=LEFT$(A$,INSTR(A$+d$,d$,3)-1)
  150 A%=INSTR(A$,":",2):B%=INSTR(A$,d$,A%)AND(A%<>0):IFB%:A%=B%-1
  160 IFA%:=LEFT$(A$,A%)
  170 IFINSTR(":$%&^@\-",LEFT$(A$,1)):=LEFT$(A$,INSTR(A$+d$,d$)-1)
  180 =""
  190 :
  200 :
  210 REM FNfn_leaf(path$) - returns leafname
  220 REM -----------------------------------
  230 DEFFNfn_leaf(A$):LOCALA%,B%:A%=INSTR(A$,":",2)
  240 REPEATB%=A%:A%=INSTR(A$,d$,A%+1):UNTILA%=0:=MID$(A$,B%+1)
  250 :
  260 :
  270 REM FNfn_path(path$) - returns pathname
  280 REM -----------------------------------
  290 DEFFNfn_path(A$):LOCALA%,B%:A%=INSTR(A$,":",2)
  300 REPEATB%=A%:A%=INSTR(A$,d$,A%+1):UNTILA%=0:=LEFT$(A$,B%)
  310 :
  320 :
  330 REM FNfn_ext(path$) - returns leafname's extension
  340 REM ----------------------------------------------
  350 DEFFNfn_ext(A$):IFINSTR(A$,s$)=0:=""
  360 LOCAL A%:A%=LENA$+1:REPEATA%=A%-1:UNTILINSTR(":"+d$+s$,MID$(A$,A%,1))
  370 IFMID$(A$,A%,1)=s$:=MID$(A$,A%) ELSE =""
  380 :
  390 :
  400 REM FNfn_noext(path$) - returns path with no extension
  410 REM --------------------------------------------------
  420 DEFFNfn_noext(A$):IFINSTR(A$,s$)=0:=A$
  430 LOCAL A%:A%=LENA$+1:REPEATA%=A%-1:UNTILINSTR(":"+s$+d$,MID$(A$,A%,1))
  440 IFMID$(A$,A%,1)=s$:=LEFT$(A$,A%-1) ELSE =A$
  450 :
  460 :
  470 REM FNfn_fullpath(path$, file$) - return full absolute path
  480 REM -------------------------------------------------------
  490 DEFFNfn_fullpath(P$,A$)
  500 IFINSTR("$%&^\-",LEFT$(A$,1)):IF(os%AND-24)=0:=A$
  510 IFINSTR(A$,":")ORLEFT$(A$,1)=d$:=A$
  520 =P$+LEFT$(d$,RIGHT$(P$,1)<>d$)+A$
  530 :
  540 :
  550 REM FNf_name(path$) - ensure no extension if no extension specified
  560 REM ---------------------------------------------------------------
  570 DEFFNf_name(A$)
  580 IF?(TOP-3)=0:LOCALA%,B%:REPEATB%=A%:A%=INSTR(A$,d$,A%+1):UNTILA%=0:IFINSTR(A$,".",B%)=0:A$=A$+"."
  590 =A$
  600 :
  610 :