Copyright (C) 1994, Digital Equipment Corp.
INTERFACEMODE MASKSUstat ; FROM Ctypes IMPORT int, long, char_star,char; FROM Utypes IMPORT dev_t, ino_t, off_t, mode_t, nlink_t, uid_t, gid_t, time_t;
de facto standard definitions
CONST S_IFMT = 16_F000; (* type of file *) S_IAMB = 16_1FF; (* access mode bits *) S_IFIFO = 16_1000; (* fifo *) S_IFCHR = 16_2000; (* character special *) S_IFDIR = 16_4000; (* directory *) S_IFNAM = 16_5000; (* XENIX special named file *) S_INSEM = 16_1; (* XENIX semaphore subtype of IFNAM *) S_INSHD = 16_2; (* XENIX shared data subtype of IFNAM *) S_IFBLK = 16_6000; (* block special *) S_IFREG = 16_8000; (* regular *) S_IFLNK = 16_A000; (* symbolic link *) S_IFSOCK = 16_C000; (* socket *)** PIPE and PORT don't exist, they're for src/os/POSIX/FilePosix.m3 **
S_IFPIPE = 16_1000; (* fifo *) S_IFPORT = 16_0000; (* pipe *) S_ISUID = 16_800; (* set user id on execution *) S_ISGID = 16_400; (* set group id on execution *) S_ISVTX = 16_200; (* save swapped text even after use *) S_ENFMT = S_ISGID; (* record locking enforcement flag *)the following macros are for POSIX conformance
S_IRWXU = 8_0700; (* read, write, execute: owner *)
S_IRUSR = 8_0400; (* read permission: owner *)
S_IWUSR = 8_0200; (* write permission: owner *)
S_IXUSR = 8_0100; (* execute permission: owner *)
S_IRWXG = 8_0070; (* read, write, execute: group *)
S_IRGRP = 8_0040; (* read permission: group *)
S_IWGRP = 8_0020; (* write permission: group *)
S_IXGRP = 8_0010; (* execute permission: group *)
S_IRWXO = 8_0007; (* read, write, execute: other *)
S_IROTH = 8_0004; (* read permission: other *)
S_IWOTH = 8_0002; (* write permission: other *)
S_IXOTH = 8_0001; (* execute permission: other *)
(* deprecated: use S_IRUSR, ... defined above *)
S_IREAD = S_IRUSR;
S_IWRITE = S_IWUSR;
S_IEXEC = S_IXUSR;
S_GREAD = S_IRGRP;
S_GWRITE = S_IWGRP;
S_GEXEC = S_IXGRP;
S_OREAD = S_IROTH;
S_OWRITE = S_IWOTH;
S_OEXEC = S_IXOTH;
TYPE
struct_stat = RECORD
st_dev : dev_t;
st_pad1 : ARRAY [0..2] OF long;
st_ino : ino_t;
st_mode : mode_t;
st_nlink : nlink_t;
st_uid : uid_t;
st_gid : gid_t;
st_rdev : dev_t;
st_pad2 : ARRAY [0..1] OF long;
st_size : off_t;
st_pad3 : long;
(* st_atime : timestruc_t; *** KLUDGE for FSPosix and FilePosix*)
st_atime : time_t;
st_spare1 : long;
(* st_mtime : timestruc_t; *** KLUDGE for FSPosix and FilePosix*)
st_mtime : time_t;
st_spare2 : long;
(* st_ctime : timestruc_t; *** KLUDGE for FSPosix and FilePosix*)
st_ctime : time_t;
st_spare3 : long;
st_blksize: long;
st_blocks : long;
st_fstype : ARRAY [0..15] OF char ;
st_pad4 : ARRAY [0..7] OF long; END;
struct_stat_star = UNTRACED REF struct_stat;
<*EXTERNAL*> PROCEDURE stat (path: char_star; buf: struct_stat_star): int;
<*EXTERNAL*> PROCEDURE lstat (path: char_star; buf: struct_stat_star): int;
<*EXTERNAL*> PROCEDURE fstat (fd: int; buf: struct_stat_star): int;
END Ustat.