!*********************************************************************** !* !* Program to check if a character file has a VIEW directory !* !* Copyright (C) R.D. Eager University of Kent MCMLXXXV !* !*********************************************************************** ! ! !*********************************************************************** !* !* Constants !* !*********************************************************************** ! constantinteger sscharfiletype = 3; ! Subsystem file type constantinteger sspdfiletype = 6; ! Subsystem file type ! ! !*********************************************************************** !* !* Record formats !* !*********************************************************************** ! recordformat hf(integer dataend,datastart,filesize,filetype,sum, datetime, (integer spare1,spare2 or c { Character file } integer format,records or c { Data file } integer adir,count or c { Pdfile } integer pstart,spare3 or c { Old directory file } integer spare4,controlmode or c { Background control file } integer lda,ofm)) { Object file } recordformat rf(integer conad,filetype,datastart,dataend) ! ! !*********************************************************************** !* !* Subsystem references !* !*********************************************************************** ! systemroutinespec connect(string (31) file,integer mode,hole, prot,record (rf)name r,integername flag) systemintegerfunctionspec dtword(integer n) systemstringfunctionspec failuremessage(integer mess) systemintegerfunctionspec parmap systemroutinespec setfname(string (63) s) systemroutinespec setpar(string (255) s) externalroutinespec set return code(integer i) systemstringfunctionspec spar(integer n) ! ! !*********************************************************************** !* !* Service routines !* !*********************************************************************** ! integerfunction diff(integer time1,time2) ! Yields the absolute difference in seconds between the two time stamps ! 'time1' and 'time2'. result = imod(dtword(time1)-dtword(time2)) end ; ! of diff ! ! !*********************************************************************** !* !* V I E W C H E C K !* !*********************************************************************** ! externalroutine viewcheck(string (255) parms) integer flag string (31) file record (rf) rr record (hf)name h,mh ! set return code(1000) ! setpar(parms) if parmap # 1 then start flag = 263; ! Wrong number of parameters -> err finish ! if spar(1) = "?" then start printstring("There is only one parameter - the name of the file to be checked") newline printstring("It must be a character file or a partitioned file") newline set return code(0) return finish ! file = spar(1) connect(file,0,0,0,rr,flag) -> err if flag # 0 h == record(rr_conad) ! if h_filetype = sscharfiletype then start if h_spare2 = 2 then flag = 0 else flag = 1 finish else c if h_filetype = sspdfiletype then start connect(file."_VIEWKEYS",0,0,0,rr,flag) if flag = 0 then start ; ! Key member exists connect(file."_VIEWDIR2",0,0,0,rr,flag) if flag = 0 then start ; ! Directory member exists mh == record(rr_conad) if diff(h_datetime,mh_datetime) > 5 then flag = 2 else flag = 0 finish else flag = 1 finish else flag = 1 else setfname(file) flag = 267; ! Invalid filetype -> err finish ! if flag = 0 then start printstring("File directory is up to date") finish else c if flag = 1 then start printstring("File has no directory") else printstring("File directory is out of date") finish newline ! set return code(flag) return ! err: newline printstring("VIEWCHECK fails -".failuremessage(flag)) set return code(flag) return end ; ! of VIEWCHECK endoffile