10 REM > BLib.FName
   20 ;
   30 REM Swap between BBC and ZIP/Unix/URL path
   40 DEFFNfn_bbczip(A$):IFA$="":=""
   50 LOCALA%,B%:FORA%=1TOLENA$:B%=ASCMID$(A$,A%,1)
   60   IFB%=61ORB%=64:A$=LEFT$(A$,A%-1)+CHR$(B%EOR125)+MID$(A$,A%+1)
   70   IFB%=35ORB%=63:A$=LEFT$(A$,A%-1)+CHR$(B%EOR28)+MID$(A$,A%+1)
   80   IFB%=36ORB%=60:A$=LEFT$(A$,A%-1)+CHR$(B%EOR24)+MID$(A$,A%+1)
   90   IFB%=62ORB%=94:A$=LEFT$(A$,A%-1)+CHR$(B%EOR96)+MID$(A$,A%+1)
  100   IF(B%AND&FE)=46:A$=LEFT$(A$,A%-1)+CHR$(B%EOR1)+MID$(A$,A%+1)
  110 NEXT:=A$
  120 :
  130 DEFFNfn_dosbbc(A$):LOCALC%:REM Convert a DOS path to a BBC path
  140 DEFFNfn_bbcdos(A$):LOCALC%:C%=1:REM Convert a BBC path to a DOS path
  150 IFA$="":=""
  160 LOCALA%,B%:FORA%=1TOLENA$:B%=ASCMID$(A$,A%,1)
  170   IFB%=61ORB%=64:A$=LEFT$(A$,A%-1)+CHR$(B%EOR125)+MID$(A$,A%+1)
  180   IFB%=35ORB%=63:A$=LEFT$(A$,A%-1)+CHR$(B%EOR28)+MID$(A$,A%+1)
  190   IFB%=36ORB%=60:A$=LEFT$(A$,A%-1)+CHR$(B%EOR24)+MID$(A$,A%+1)
  200   IFB%=62ORB%=94:A$=LEFT$(A$,A%-1)+CHR$(B%EOR96)+MID$(A$,A%+1)
  210   IFB%=46:IFC%:A$=LEFT$(A$,A%-1)+"\"+MID$(A$,A%+1)
  220   IFB%=46:IFC%=0:A$=LEFT$(A$,A%-1)+"/"+MID$(A$,A%+1)
  230   IFB%=92:IFC%:A$=LEFT$(A$,A%-1)+"/"+MID$(A$,A%+1)
  240   IFB%=92:IFC%=0:A$=LEFT$(A$,A%-1)+"."+MID$(A$,A%+1)
  250   IFB%=47:IFC%:A$=LEFT$(A$,A%-1)+"."+MID$(A$,A%+1)
  260   IFB%=47:IFC%=0:A$=LEFT$(A$,A%-1)+"\"+MID$(A$,A%+1)
  270 NEXT:=A$
  280 :
  290 REM Swap between DOS and Zip/Unix/URL path
  300 DEFFNfn_doszip(A$):IFA$="":=""
  310 LOCALA%,B%:FORA%=1TOLENA$:B%=ASCMID$(A$,A%,1)
  320   IFB%=47ORB%=92:A$=LEFT$(A$,A%-1)+CHR$(B%EOR115)+MID$(A$,A%+1)
  330 NEXT:=A$
  340 :