Copyright (C) 1994, Digital Equipment Corp.
INTERFACE** <sys/types.h> **Utypes ; FROM Ctypes IMPORT long, unsigned_long, int, unsigned_int, short, unsigned_short, unsigned_char, char_star, void_star, char;
TYPE ptrdiff_t = long; wchar_t = unsigned_char; wctype_t = unsigned_int; fpos_t = long; time_t = int; clock_t = int; size_t = unsigned_long; ssize_t = long;
* shorthand type definitions for unsigned storage classes
TYPE uchar = unsigned_char; u_char = unsigned_char; uchar_t = unsigned_char; vuchar_t = (* volatile *) unsigned_char; vu_char = (* volatile *) unsigned_char; ushort = unsigned_short; u_short = unsigned_short; ushort_t = unsigned_short; vushort_t = (* volatile *) unsigned_short; vu_short = (* volatile *) unsigned_short; uint = unsigned_int; u_int = unsigned_int; uint_t = unsigned_int; vuint_t = (* volatile *) unsigned_int; vu_int = (* volatile *) unsigned_int; ulong = unsigned_long; u_long = unsigned_long; ulong_t = unsigned_long; vulong_t = (* volatile *) unsigned_long; vu_long = (* volatile *) unsigned_long; TYPE struct__physadr = RECORD r: ARRAY [0..0] OF int; END; physadr_t = UNTRACED REF struct__physadr; physadr = physadr_t; TYPE struct_label_t = RECORD val: ARRAY [0..11] OF long; END; label_t = struct_label_t; TYPE level_t = int; daddr_t = int; (* disk address *) caddr_t = char_star; (* "core" (i.e. memory) address *) qaddr_t = UNTRACED REF quad; addr_t = char_star; ino_t = uint_t; (* inode number (filesystem) *) cnt_t = short; dev_t = int; (* device number (major+minor) *) chan_t = int; (* channel number (minor's minor) *) off_t = long; (* file offset *) rlim_t = unsigned_long; (* resource limit *) paddr_t = int; nlink_t = ushort_t; key_t = int; (* ipc key type *) mode_t = uint_t; (* file mode *) uid_t = uint_t; (* user ID *) gid_t = uint_t; (* group ID *) mid_t = void_star; (* module ID *) pid_t = int; (* process ID *) slab_t = ARRAY [0..11] OF char; (* security label *)
* The following type is for various kinds of identifiers. The * actual type must be the same for all since some system calls * (such as sigsend) take arguments that may be any of these * types. The enumeration type idtype_t defined in sys/procset.h * is used to indicate what type of id is being specified.
TYPE id_t = pid_t; (* A process, process group, session, scheduling class, user or group id. *) CONST P_MYID = -1; (* a usually illegal value for IDs, but specifying whatever the value is for my process *) TYPE shmatt_t = ulong_t; (* for shmid_ds.shm_nattach *) msgqnum_t = ulong_t; (* for msqid_ds.msg_qnum *) msglen_t = ulong_t; (* for msqid_ds.msg_qbytes *) TYPE wint_t = unsigned_int; (* wide character *) sigset_t = unsigned_long; (* signal mask *) timer_t = long; (* timer id *) TYPE sig_t = PROCEDURE ();
* Types used by dev_t annotation procedures
TYPE major_t = uint_t; (* major device number *) minor_t = uint_t; (* minor device number *) devs_t = uint_t; (* device-specific info *) unit_t = uint_t; (* unit number of device *)
* Basic system types and major/minor device constructing/busting macros.
major part of a device
PROCEDURE major (x: dev_t): major_t;minor part of a device
PROCEDURE minor (x: dev_t): minor_t;make a device number
PROCEDURE makedev (x: major_t; y: minor_t): dev_t; TYPE struct__quad = RECORD val: ARRAY [0..1] OF int; END; quad = struct__quad; TYPE swblk_t = long; fixpt_t = u_long; CONST NBBY = 8; (* number of bits in a byte *) (* * Select uses bit masks of file descriptors in longs. * These macros manipulate such bit fields (the filesystem macros use chars). * FD_SETSIZE may be defined by the user, but the default here * should be equal to OPEN_MAX_SYSTEM (param.h). *) MAX_NOFILE = 4096; FD_SETSIZE = MAX_NOFILE; (* How many things we'll allow select to use. 0 if unlimited *) MAXSELFD = MAX_NOFILE; TYPE fd_mask = int; CONST NFDBITS = BYTESIZE (fd_mask) * NBBY; (* bits per mask (power of 2!)*) NFDSHIFT = 5; (* Shift based on above *) PROCEDURE howmany (x, y: INTEGER): INTEGER; CONST n_masks = (FD_SETSIZE + NFDBITS - 1) DIV NFDBITS; (* == howmany (FD_SETSIZE, NFDBITS) *) TYPE struct_fd_set = RECORD fds_bits: ARRAY [0 .. n_masks - 1] OF fd_mask; END; fd_set = struct_fd_set; PROCEDURE FD_SET (n: INTEGER; p: UNTRACED REF fd_set): INTEGER; PROCEDURE FD_CLEAR (n: INTEGER; p: UNTRACED REF fd_set): INTEGER; PROCEDURE FD_ISSET (n: INTEGER; p: UNTRACED REF fd_set): INTEGER; PROCEDURE FD_ZERO (p: UNTRACED REF fd_set); END Utypes.