112 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Modula-2
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Modula-2
		
	
	
	
	
	
| (*$Foreign language module *)
 | |
| DEFINITION MODULE Unix;
 | |
| (*	An interface to some Unix system-calls *)
 | |
|   FROM SYSTEM IMPORT WORD, ADDRESS;
 | |
| 
 | |
| (* Type needed for Signal *)
 | |
|   TYPE SignalPrc = PROCEDURE(INTEGER):INTEGER;
 | |
|   CONST
 | |
| 	SIGDFL = SignalPrc(0);
 | |
| 	SIGIGN = SignalPrc(1);
 | |
| 	ILLBREAK = ADDRESS(-1);
 | |
| 
 | |
|   VAR errno: INTEGER;
 | |
| (* Possible values of errno: *)
 | |
|   CONST
 | |
| 	EPERM = 1;	(* Not owner *)
 | |
| 	ENOENT = 2;	(* No such file or directory *)
 | |
| 	ESRCH = 3;	(* No such process *)
 | |
| 	EINTR = 4;	(* Interrupted system call *)
 | |
| 	EIO = 5;	(* I/O error *)
 | |
| 	ENXIO = 6;	(* No such device or address *)
 | |
| 	E2BIG = 7;	(* Arg list too long *)
 | |
| 	ENOEXEC = 8;	(* Exec format error *)
 | |
| 	EBADF = 9;	(* Bad file number *)
 | |
| 	ECHILD = 10;	(* No child processes *)
 | |
| 	EAGAIN = 11;	(* No more processes *)
 | |
| 	ENOMEM = 12;	(* Not enough space *)
 | |
| 	EACCES = 13;	(* Permission denied *)
 | |
| 	EFAULT = 14;	(* Bad address *)
 | |
| 	ENOTBLK = 15;	(* Block device required *)
 | |
| 	EBUSY = 16;	(* Mount device busy *)
 | |
| 	EEXIST = 17;	(* File exists *)
 | |
| 	EXDEV = 18;	(* Cross-device link *)
 | |
| 	ENODEV = 19;	(* No such device *)
 | |
| 	ENOTDIR = 20;	(* Not a directory *)
 | |
| 	EISDIR = 21;	(* Is a directory *)
 | |
| 	EINVAL = 22;	(* Invalid argument *)
 | |
| 	ENFILE = 23;	(* File table overflow *)
 | |
| 	EMFILE = 24;	(* Too many open files *)
 | |
| 	ENOTTY = 25;	(* Not a typewriter *)
 | |
| 	ETXTBSY = 26;	(* Text file busy *)
 | |
| 	EFBIG = 27;	(* File too large *)
 | |
| 	ENOSPC = 28;	(* No space left on device *)
 | |
| 	ESPIPE = 29;	(* Illegal seek *)
 | |
| 	EROFS = 30;	(* Read-only file system *)
 | |
| 	EMLINK = 31;	(* Too many links *)
 | |
| 	EPIPE = 32;	(* Broken pipe *)
 | |
| 	EDOM = 33;	(* Math argument *)
 | |
| 	ERANGE = 34;	(* Result too large *)
 | |
| 
 | |
|   PROCEDURE access(path: ADDRESS; amode : INTEGER) : INTEGER;
 | |
|   PROCEDURE acct(path: ADDRESS) : INTEGER;
 | |
|   PROCEDURE alarm(sec: CARDINAL) : CARDINAL;
 | |
|   PROCEDURE brk(endds: ADDRESS) : INTEGER;
 | |
|   PROCEDURE sbrk(incr: INTEGER) : ADDRESS;
 | |
|   PROCEDURE chdir(path: ADDRESS) : INTEGER;
 | |
|   PROCEDURE chmod(path: ADDRESS; mode: INTEGER) : INTEGER;
 | |
|   PROCEDURE chown(path: ADDRESS; owner, group: INTEGER) : INTEGER;
 | |
|   PROCEDURE chroot(path: ADDRESS) : INTEGER;
 | |
|   PROCEDURE close(fildes: INTEGER) : INTEGER;
 | |
|   PROCEDURE creat(path: ADDRESS; 
 | |
|   		  mode: INTEGER) : INTEGER;
 | |
|   PROCEDURE dup(fildes: INTEGER) : INTEGER;
 | |
|   PROCEDURE execve(path: ADDRESS;
 | |
| 		   argv: ADDRESS;
 | |
| 		   envp: ADDRESS) : INTEGER;
 | |
|   PROCEDURE exit(status: INTEGER);
 | |
|   (* Sys5 *) PROCEDURE fcntl(fildes, request, arg: INTEGER) : INTEGER;
 | |
|   PROCEDURE ftime(bufp:ADDRESS) : INTEGER;
 | |
|   PROCEDURE fork() : INTEGER;
 | |
|   PROCEDURE getpid() : INTEGER;
 | |
|   PROCEDURE getppid() : INTEGER;
 | |
|   PROCEDURE getuid() : INTEGER;
 | |
|   PROCEDURE geteuid() : INTEGER;
 | |
|   PROCEDURE getgid() : INTEGER;
 | |
|   PROCEDURE getegid() : INTEGER;
 | |
|   PROCEDURE ioctl(fildes, request: INTEGER; arg: ADDRESS) : INTEGER;
 | |
|   PROCEDURE kill(pid, sig: INTEGER) : INTEGER;
 | |
|   PROCEDURE link(path1, path2: ADDRESS) : INTEGER;
 | |
|   PROCEDURE lseek(fildes: INTEGER; offset: LONGINT; whence: INTEGER) : LONGINT;
 | |
|   PROCEDURE mknod(path: ADDRESS; mode, dev: INTEGER) : INTEGER;
 | |
|   PROCEDURE mount(spec, dir: ADDRESS; rwflag: INTEGER) : INTEGER;
 | |
|   PROCEDURE nice(incr: INTEGER) : INTEGER;
 | |
|   PROCEDURE open(path: ADDRESS; oflag: INTEGER) : INTEGER;
 | |
|   PROCEDURE pause();
 | |
|   PROCEDURE pipe(fildes: ADDRESS) : INTEGER;
 | |
|   PROCEDURE profil(buff: ADDRESS;
 | |
| 		   bufsiz, offset, scale: INTEGER);
 | |
|   PROCEDURE ptrace(request, pid, addr, data: WORD) : INTEGER;
 | |
|   PROCEDURE read(fildes: INTEGER;
 | |
| 		 buf: ADDRESS;
 | |
| 		 nbyte: INTEGER) : INTEGER;
 | |
|   PROCEDURE setuid(uid: INTEGER) : INTEGER;
 | |
|   PROCEDURE setgid(gid: INTEGER) : INTEGER;
 | |
|   PROCEDURE signal(sig: INTEGER;
 | |
| 		   func: SignalPrc;
 | |
| 		   VAR oldfunc: SignalPrc) : INTEGER;
 | |
|   PROCEDURE stat(path: ADDRESS; statbuf: ADDRESS) : INTEGER;
 | |
|   PROCEDURE fstat(fildes: INTEGER; statbuf: ADDRESS) : INTEGER;
 | |
|   PROCEDURE stime(t: LONGINT) : INTEGER;
 | |
|   PROCEDURE sync();
 | |
|   PROCEDURE time(tloc: ADDRESS) : LONGINT;
 | |
|   PROCEDURE times(buffer: ADDRESS) : LONGINT;
 | |
|   PROCEDURE umask(cmask: INTEGER) : INTEGER;
 | |
|   PROCEDURE umount(spec: ADDRESS) : INTEGER;
 | |
|   PROCEDURE unlink(path: ADDRESS) : INTEGER;
 | |
|   PROCEDURE utime(path: ADDRESS; times: ADDRESS) : INTEGER;
 | |
|   PROCEDURE wait(VAR statloc: INTEGER): INTEGER;
 | |
|   PROCEDURE write(fildes: INTEGER;
 | |
| 		  buf: ADDRESS;
 | |
| 		  nbyte: CARDINAL) : INTEGER;
 | |
| END Unix.
 |