GetOsInfo
From Pickwiki
Jump to navigationJump to search
Note that this routine is not fast.
For pure speed you're probably better off running shell commands to parse the directory information you are looking for. This works well for a generic utility that you can use in UniData to take a quick look at the directories or grab item information.
SUBROUTINE GET.OS.INFO(RTN.INFO,CURRENT.ID,TYPE) * * Colin Alfke * COMMON [[/OS]].INFO/ VOC, PATH IF UNASSIGNED(PATH) THEN PATH = '' * CMND = @COMMAND PLATFORM = OCONV(SYSTEM(33),'MCU') IF PLATFORM = "UNIX" THEN DELIM = "/" ELSE DELIM = "\" FN = FIELD(CMND,' ',2) * * Get the full path from the VOC * FILE.PATH = '' IF PATH # @PATH OR NOT(FILEINFO(VOC,0)) THEN OPEN 'VOC' TO VOC THEN READV FILE.PATH FROM VOC, FN, 2 ELSE FILE.PATH = '' END PATH = @PATH END * * Convert any environment variables to the full path * CONVERT DELIM TO @VM IN FILE.PATH NUM.PATH = DCOUNT(FILE.PATH<1>,@VM) FOR NP = 1 TO NUM.PATH IF FILE.PATH<1,NP>[1,1] = "@" THEN FILE.PATH<1,NP> = GETENV(FILE.PATH<1,NP>[2,999]) END NEXT NP CONVERT @VM TO DELIM IN FILE.PATH * * Get the info * FP = FILE.PATH:DELIM:CURRENT.ID BEGIN CASE CASE TYPE = 'S' ;* Size RTN.INFO = DIR(FP)<1> CASE TYPE = 'D' ;* Date RTN.INFO = DIR(FP)<2> CASE TYPE = 'T' ;* Time RTN.INFO = DIR(FP)<3> CASE TYPE = 'P' ;* Privileges RTN.INFO = DIR(FP)<4> CASE 1 ;* Date and Time TEMP = DIR(FP) RTN.INFO = OCONV(TEMP<2>,'D4'):" ":OCONV(TEMP<3>,'MTS') END CASE RETURN
Here are some dictionaries that you can use to call this routine (I keep them in the VOC so I can run them on any file):
OS.DATE: IReturn Operating System date on the file SUBR("GET.OS.INFO",@ID,'D') D4 OS Date 11R S
OS.TIME: IReturn Operating System time on the file SUBR("GET.OS.INFO",@ID,'T') MTS OS Time 8R S
OS.PRIV: IReturn Operating System priveleges on the file SUBR("GET.OS.INFO",@ID,'P') OS Priv 5L S
OS.SIZE: IReturn Operating System size on the file SUBR("GET.OS.INFO",@ID,'S') OS Size 15R S
OS.INFO: IReturn Operating System Info SUBR("GET.OS.INFO",@ID,'') OS Info 21L S