Read disk, directory and library name
The following function from the FileIO library will return the name of the currently selected disk, directory or library.
REM Return current disk (5), directory (6) or library (7) name REM ---------------------------------------------------------- DEFFNgbpb(A%):X%!1=name%:CALL&FFD1:A%=name%+((1+?name%)AND((A%AND-2)=6)) A%?(1+?A%)=13:=$(A%+1)
When calling the function:
-
FNgbpb(5)
returns the disk name -
FNgbpb(6)
returns the current directory name -
FNgbpb(7)
returns the current library name
NFS always returns the names padded with spaces - 16 characters for the disk name, and 10 characters for the directory and library name.
Reading the full pathname
The following functions from the Pathname library read the full pathname for the current directory, the current library and the user's home directory.
REM FNPath_Name - Return pathname with drive number or name if no number REM FNPath_Full - Returns full pathname with diskname REM The returned pathname can be used to select the directory with *DIR REM -------------------------------------------------------------------- : DEFFNPath_Name:A%=6 DEFFNPath_Full:A%=&106 LOCAL n$,p$:REPEAT:X%!1=name%:CALL &FFD1 ?(name%+2+?name%+?(name%+?name%+1))=13 n$=$(name%+2+?name%):*DIR ^ n$=LEFT$(n$,INSTR(n$+" "," ")-1) p$=n$+"."+p$:UNTILn$="$"ORn$="&" p$=LEFT$(p$,LENp$-1):OSCLI"DIR "+p$ IFA%=6:X%!1=name%:CALL &FFD1:?(name%+1+?name%)=13:n$=$(name%+1):IFn$<>"":=":"+n$+"."+p$ X%!1=name%:A%=5:CALL &FFD1 ?(name%+1+?name%)=13:n$=$(name%+1) n$=LEFT$(n$,INSTR(n$+" "," ")-1):=":"+n$+"."+p$ : : REM FNPath_Lib - Return library pathname REM ------------------------------------ : DEFFNPath_Lib LOCAL a$,b$:a$=FNPath_Name:*DIR % b$=FNPath_Name:OSCLI"DIR "+a$:=b$ : : REM FNPath_LibFull - Return full library pathname REM --------------------------------------------- : DEFFNPath_LibFull LOCAL a$,b$:a$=FNPath_Name:*DIR % b$=FNPath_Full:OSCLI"DIR "+a$:=b$ : : REM FNPath_URD - Return URD pathname REM -------------------------------- : DEFFNPath_URD LOCAL a$,b$:a$=FNPath_Name:*DIR & b$=FNPath_Name:OSCLI"DIR "+a$:=b$ : : REM FNPath_URDFull - Return full URD pathname REM ----------------------------------------- : DEFFNPath_URDFull LOCAL a$,b$:a$=FNPath_Name:*DIR & b$=FNPath_Full:OSCLI"DIR "+a$:=b$
This is an example of what would be returned by the functions:
-
FNPath_Name
would return :0.$.Progs.Temp -
FNPath_Full
would return :ProgramDisk.$.Progs.Temp -
FNPath_Lib
would return :1.$.Library -
FNPath_LibFull
would return :UtilsDisk.$.Library -
FNPath_URD
would return :0.$.User1 -
FNPath_URDFull
would return :MyDisk.$.User1
These functions will work on NFS, ADFS and any well behaved filing system that recognises the '^' directory. They will not work on Acorn file servers that do not recognise '^'.
Dependancies
These functions need global control blocks set up beforehand with:
DIM ctrl% 31,name% 31:X%=ctrl%:Y%=X%DIV256
Jgharston 11:26, 27 August 2008 (BST)