10 REM > ContextDemo
   20 :
   30 DIM ctrl% 31,name% 127:X%=ctrl%:Y%=X%DIV256
   40 PRINT"Context: &";~FNfs_RdCSD
   50 END
   60 PROCfs_WrCSD(csd%)
   70 :
   80 REM Top byte:
   90 REM  0xxxxxxx -> fs X
  100 REM  100ddddd -> adfs drive d
  110 REM  101ddddd -> hadfs drive d
  120 REM  110ddddd -> reserved drive d
  130 REM  111ddddd -> reserved drive d
  140 :
  150 REM > BLib.Context 1.01 12-Aug-2011
  160 REM Read and write filing system context
  170 REM ------------------------------------
  180 :
  190 REM -----------------------------------------------
  200 REM FNfs_RdCSD - Read current filing system context
  210 REM -----------------------------------------------
  220 REM Returns 0 or a value to pass back to PROCfs_WrCSD()
  230 :
  240 DEFFNfs_RdCSD
  250 LOCAL fs%,csd%,B%:fs%=FNfs:IFfs%<4:X%?3=fs%:=!X%
  260 IFfs%=16:=FNargs(&FE,25,0)OR&A0000000
  270 IFfs%=8:csd%=&1114:!X%=&FFDD:A%=5:CALL&FFF1:IFX%?4=76:csd%=&C314
  280 IFfs%=8:FORB%=0TO3:!X%=csd%+B%:CALL&FFF1:X%?(5+B%)=X%?4:NEXT:X%?8=(X%?8DIV32)OR&80:=X%!5
  290 IFfs%=5:B%=FNNet_Info(6,0):csd%=OPENIN"@":csd%=FNNet_Info(7,(B%AND&FF00FF)+csd%*256):=B%OR&5000000
  300 IFfs%=4:B%=ASCFNgbpb(6):=B%+256*name%?1+&4000000
  310 =0
  320 :
  330 REM --------------------------------------------------
  340 REM PROCfs_WrCSD(csd%) - Restore filing system context
  350 REM --------------------------------------------------
  360 REM On entry, csd%=0 or a previous context from FNfs_RdCSD
  370 :
  380 DEFPROCfs_WrCSD(csd%):IFcsd%=0:ENDPROC
  390 LOCAL fs%,B%:X%!5=csd%:fs%=X%?8:IFcsd%<0:fs%=((fs%-96)DIV32)*8
  400 OSCLI"FX143,18,"+STR$fs%:IFfs%<4:ENDPROC
  410 IFfs%=16:A%=FNargs(&FD,25,csd%AND&1FFFFFFF):ENDPROC
  420 IFfs%=8:X%?8=X%?8*32:csd%=&1114:!X%=&FFDD:A%=5:CALL&FFF1:IFX%?4=76:csd%=&C314
  430 IFfs%=8:A%=6:FORB%=0TO3:!X%=csd%+B%:X%?4=X%?(5+B%):CALL&FFF1:NEXT:OSCLI"DIR @":ENDPROC
  440 IFfs%=5:B%=FNNet_Info(6,0):CLOSE#((B%AND&FF00)DIV256):B%=FNNet_Info(7,csd%):ENDPROC
  450 IFfs%=4:OSCLI"DIR :"+CHR$X%?6+"."+CHR$X%?5:ENDPROC
  460 ENDPROC
  470 :
  480 :
  490 DEFFNgbpb(A%):X%!1=name%:CALL&FFD1:A%=name%+((1+?name%)AND((A%AND-2)=6))
  500 A%?(1+?A%)=13:=$(A%+1)
  510 DEFFNargs(A%,Y%,ptr%):LOCALX%,E%:IF?(TOP-3)=0:E%=Y%:Y%=0
  520 IFPAGE<&8000:LOCAL!&70:X%=&70:!X%=ptr%:CALL&FFDA:=!X%
  530 SYS"OS_Args",A%,Y%,ptr%TO,,ptr%:=ptr%
  540 DEFFNfs:LOCALA%,Y%,E%:=(USR&FFDA)AND&FF
  550 DEFFNNet_Info(A%,D%):?X%=A%:X%!1=D%:A%=&13:CALL&FFF1:=X%!1