10 REM > BLib.FileIO 1.03 15Feb2008
   20 REM v1.03 15Feb2008 JGH: Add veneer functions in f_ domain
   30 REM v1.01 07Sep2006 JGH: FNargs avoid zero page on RISC OS
   40 REM v1.00 09Aug1988 JGH: Initial version
   50 :
   60 REM General File Interface Routines
   70 REM ===============================
   80 :
   90 REM Returns file type, file info in X%!...
  100 REM --------------------------------------
  110 DEFFNfile(A$,A%):$name%=A$:?X%=name%:X%?1=name%DIV256:=(USR&FFDD)AND&FF
  120 :
  130 REM General OSGBPB call
  140 REM -------------------
  150 DEFPROCf_gbpb(A%,C%,D%,N%,P%):PROCgbpb(A%,C%,D%,N%,P%):ENDPROC
  160 DEFPROCgbpb(A%,chn%,addr%,num%,ptr%):?X%=chn%:X%!1=addr%:X%!5=num%:X%!9=ptr%:CALL &FFD1:ENDPROC
  170 :
  180 REM Return current disk (5), directory (6) or library (7) name
  190 REM ----------------------------------------------------------
  200 DEFFNf_thing(A%)=FNgbpb(A%)
  210 DEFFNgbpb(A%):X%!1=name%:CALL&FFD1:A%=name%+((1+?name%)AND((A%AND-2)=6))
  220 A%?(1+?A%)=13:=$(A%+1)
  230 :
  240 REM Returns entry in current directory, or null string if at end
  250 REM ------------------------------------------------------------
  260 DEFFNf_scan(A%)=FNgbpb8(A%)
  270 DEFFNgbpb8(ptr%):X%!1=name%:X%!5=1:X%!9=ptr%:A%=8:CALL&FFD1:IFX%!5=1:=""
  280 A%=name%:A%?(1+?A%)=13:=$(A%+1)
  290 :
  300 REM OSARGS call with data. Returns any returned data
  310 REM ------------------------------------------------
  320 DEFFNf_args(A%,B%,C%)=FNargs(A%,B%,C%)
  330 DEFFNargs(A%,Y%,ptr%):LOCAL X%,E%:IF?(TOP-3)=0:E%=Y%:Y%=0
  340 IFPAGE<&8000:LOCAL !&70:X%=&70:!X%=ptr%:CALL&FFDA:=!X%
  350 SYS"OS_Args",A%,Y%,ptr% TO ,,ptr%:=ptr%
  360 :
  370 REM OSARGS call ignoring X, returns A
  380 REM ---------------------------------
  390 DEFFNf_argsA(A%)=FNargsA(A%)
  400 DEFFNargsA(A%):IFPAGE<&8000:LOCAL X%,Y%,E%,!&70:X%=&70:=(USR&FFDA)AND&FF
  410 SYS"OS_Args",A% TO A%:=A%
  420 :
  430 REM Get current filing system number
  440 REM --------------------------------
  450 DEFFNfs:LOCAL A%,Y%,E%:=(USR&FFDA)AND&FF