10 REM > BLib.FileIO 1.05 18Apr2008
   20 REM v1.04 22Mar2008 JGH: FNgbpb8 strips spaces
   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 DEFPROCgbpb(A%,chn%,addr%,num%,ptr%):?X%=chn%:X%!1=addr%:X%!5=num%:X%!9=ptr%:CALL&FFD1:ENDPROC
  160 :
  170 REM Return current disk (5), directory (6) or library (7) name
  180 REM ----------------------------------------------------------
  190 DEFFNgbpb(A%):X%!1=name%:CALL&FFD1:A%=name%+((1+?name%)AND((A%AND-2)=6)):A%?(1+?A%)=13:=$(A%+1)
  200 :
  210 REM Returns entry in current directory, or null string if at end
  220 REM ------------------------------------------------------------
  230 DEFFNgbpb8(ptr%):X%!1=name%:X%!5=1:X%!9=ptr%:A%=8:CALL&FFD1:IFX%!5=1:=""
  240 A%=name%+1:A%!(A%?-1)=&D20:A%?(INSTR($A%," ")-1)=13:=$A%
  250 :
  260 REM Returns entry and info in current directory, or null string if at end
  270 REM ---------------------------------------------------------------------
  280 DEFFNgbpb11(ptr%)
  290 IFos%=6:IFHIMEM>&FFFF:SYS"OS_GBPB",11,"",name%,1,ptr%,79TO,,,X%!5,X%!9:IFX%!5=0:=""
  300 IFos%=6:IFHIMEM>&FFFF:SYS"OS_WriteN",name%+29 TO $(name%+29):=$(name%+29)
  310 X%?0=0:X%!1=name%:X%!5=1:X%!9=ptr%:A%=11:CALL&FFD1:IFX%!5=0:=""
  320 name%!39=&D00:A%=INSTR($(name%+29),CHR$0):name%?(A%+28)=13:=$(name%+29)
  330 :
  340 REM OSARGS call with data. Returns any returned data
  350 REM ------------------------------------------------
  360 DEFFNargs(A%,Y%,ptr%):LOCALX%,E%:IF?(TOP-3)=0:E%=Y%:Y%=0
  370 IFHIMEM<&10000:LOCAL!&70:X%=&70:!X%=ptr%:CALL&FFDA:=!X%
  380 SYS"OS_Args",A%,Y%,ptr%TO,,ptr%:=ptr%
  390 :
  400 REM OSARGS call ignoring X, returns A
  410 REM ---------------------------------
  420 DEFFNargsA(A%):IFHIMEM<&10000:LOCALX%,Y%,E%,!&70:X%=&70:=(USR&FFDA)AND&FF
  430 SYS"OS_Args",A%TOA%:=A%
  440 :
  450 REM Get current filing system number
  460 REM --------------------------------
  470 DEFFNfs:LOCALA%,Y%,E%:=(USR&FFDA)AND&FF
  480 :