	CONST
		(* Ubuntu 18.04 /usr/include/i386-linux-gnu/bits/stat.h *)
			_STAT_VER_LINUX* = 3;

		(* /usr/include/sys/ucontext.h *)
			__NGREG = 19;

		(* /usr/include/ucontext.h *)
@@i=ucontext.h:d=_GNU_SOURCE:t=i:REG_EBP,REG_ESP,REG_EIP@@

	TYPE
		off64_t* = LONGINT;
		blkcnt64_t* = LONGINT;
		ino64_t* = LONGINT;

		(* Ubuntu 18.04 /usr/include/i386-linux-gnu/bits/stat.h: *)
			stat64_t* = RECORD [untagged]
				st_dev*: dev_t;
				__pad1: int; (* unsigned int *)
				__st_ino: ino_t;
				st_mode*: mode_t;
				st_nlink*: nlink_t;
				st_uid*: uid_t;
				st_gid*: gid_t;
				st_rdev*: dev_t;
				__pad2: int; (* unsigned int *)
				st_size*: off64_t;
				st_blksize*: blksize_t;
				st_blocks*: blkcnt64_t;
				st_atim*: timespec_t;
				st_mtim*: timespec_t;
				st_ctim*: timespec_t;
				st_ino*: ino64_t;
			END;

		(* /usr/include/bits/types/sigval_t.h *)
		(* /usr/include/bits/types/__sigval_t.h *)
			sigval_t* = RECORD [union]
				sival_int*: int;
				sival_ptr*: PtrVoid
			END;

		(* /usr/include/sys/ucontext.h  *)
			greg_t* = int;
			gregset_t* = ARRAY [untagged] __NGREG OF greg_t;
			fpregset_t* = POINTER [untagged] TO _libc_fpstate;

			_libc_fpreg = RECORD [untagged]
				significand: ARRAY [untagged] 4 OF SHORTINT (* unsigned short int *);
				exponent: SHORTINT (* unsigned short int *)
			END;

			_libc_fpstate = RECORD [untagged]
				cw: INTEGER (* unsigned long int *);
				sw: INTEGER (* unsigned long int *);
				tag: INTEGER (* unsigned long int *);
				ipoff: INTEGER (* unsigned long int *);
				cssel: INTEGER (* unsigned long int *);
				dataoff: INTEGER (* unsigned long int *);
				datasel: INTEGER (* unsigned long int *);
				_st: ARRAY [untagged] 8 OF _libc_fpreg;
				status: INTEGER (* unsigned long int *)
			END;

			mcontext_t* = RECORD [untagged]
				gregs-: gregset_t;
				fpregs: fpregset_t;
				oldmask: INTEGER (* unsigned long int *);
				cr2: INTEGER (* unsigned long int *)
			END;

(*
	VAR
		timezone*: INTEGER; (* seconds from GMT *)
		stdin*, stdout*, stderr* : PtrFILE;
*)

	PROCEDURE [ccall] __errno_location*(): PtrVoid;

	PROCEDURE [ccall] __xstat* (version: int; filename: PtrSTR; VAR buf: stat_t): int;
	PROCEDURE [ccall] __xstat64* (version: int; filename: PtrSTR; VAR buf: stat64_t): int;
	PROCEDURE [ccall] fopen64* (path, mode: PtrSTR): PtrFILE;
	PROCEDURE [ccall] lseek64* (fd: int; offset: off64_t; whence: int): off64_t;
	PROCEDURE [ccall] fseeko64* (stream: PtrFILE; off: off64_t; whence: int): int;

	(* POSIX.1 *)
		PROCEDURE [ccall] sigsetjmp* ["__sigsetjmp"] (VAR env: sigjmp_buf; savemask: int): int;
		PROCEDURE [ccall] siglongjmp* (VAR env: sigjmp_buf; val: int);

	(* POSIX.1 *)
		PROCEDURE [ccall] sigemptyset* (set: PtrSigset_t): int;
		PROCEDURE [ccall] sigfillset* (set: PtrSigset_t): int;
		PROCEDURE [ccall] sigaddset* (set: PtrSigset_t; signo: int): int;
		PROCEDURE [ccall] sigprocmask* (how: int; set: PtrSigset_t; oset: PtrSigset_t): int;

	(* POSIX.1 *)
		PROCEDURE [ccall] sigaction* (sig: int; VAR [nil] act: sigaction_t; VAR [nil] oact: sigaction_t): int;

	(* BSD *)
		PROCEDURE [ccall] sigaltstack* (VAR [nil] ss: stack_t; VAR [nil] oss: stack_t): int;

	(* POSIX.1 *)
		PROCEDURE [ccall] clock_gettime* (clock_id: clockid_t; VAR tp: timespec_t): int;

	(* AT&T UNIX *)
		PROCEDURE [ccall] time* (VAR [nil] tloc: time_t): time_t;

	(* AT&T UNIX *)
		PROCEDURE [ccall] gmtime* (VAR [nil] clock: time_t): tm;
		PROCEDURE [ccall] localtime* (VAR [nil] clock: time_t): tm;
		PROCEDURE [ccall] mktime* (VAR tm: tmDesc): time_t;

	(* POSIX.1 *)
		PROCEDURE [ccall] opendir* (filename: PtrSTR): PtrDIR;
		PROCEDURE [ccall] readdir* (dirp: PtrDIR): PtrDirent;

	(* GNU *)
		PROCEDURE [ccall] canonicalize_file_name* (path: PtrSTR): PtrSTR;

	(* Linux only *)
		PROCEDURE [ccall] sendfile* (out_fd: int; in_fd: int; VAR [nil] offset: off_t; count: size_t): ssize_t;
