shithub: mc

ref: bfa86d22fdc7b22fa4bc2819d4aa928acfac5168
dir: /test/hello/sys.myr/

View raw version
pkg sys =
	type scno = int
	type fdopt = int
	type statbuf = struct
		 dev     : uint
		 ino     : uint
		 mode    : uint16
		 nlink   : uint16
		 uid     : uint16
		 gid     : uint16
		 rdev    : uint
		 size    : uint
		 blksize : uint
		 blocks  : uint
		 atime   : uint
		 atimens : uint
		 mtime   : uint
		 mtimens : uint
		 ctime   : uint
		 ctimens : uint
		 _unused1: uint
		 _unused2: uint
	;;

	const Rdonly  	: fdopt = 0x0
	const Wronly  	: fdopt = 0x1
	const Rdwr    	: fdopt = 0x2
	const Append  	: fdopt = 0x80
	const Creat   	: fdopt = 0x40
	const Nofollow	: fdopt = 0x20000
	const Ndelay  	: fdopt = 0x800
	const Trunc   	: fdopt = 0x200

	const Sysexit	: scno = 1
	const Sysread	: scno = 3
	const Syswrite	: scno = 4
	const Sysopen	: scno = 5
	const Sysclose	: scno = 6
	const Syscreat	: scno = 8
	const Syslseek	: scno = 19
	const Sysfstat	: scno = 108
	const Syskill	: scno = 37
	const Sysgetpid	: scno = 20
	const Sysmmap2	: scno = 192
	const Sysmunmap	: scno = 91

	extern const syscall : (sc:scno, count:int, args:... -> int)

	const exit	: (status:int -> int)
	const getpid	: ( -> int)
	const kill	: (pid:int, sig:int -> int)
	const open	: (path:char[,], opts:fdopt -> int)
	const close	: (fd:int -> int)
	const creat	: (path:char[,], mode:int -> int)
	const read	: (fd:int, buf:char[,] -> int)
	const write	: (fd:int, buf:char[,] -> int)
	const lseek	: (fd:int, off:uint, whence:int -> int)
	const fstat	: (fd:int, sb:statbuf* -> int)
	const munmap	: (addr:byte*, len:uint -> int)
	const mmap	: (add:byte*, len:uint, prot:uint, flags:uint, fd:int, off:uint)
;;

const exit	= {status;		-> syscall(Sysexit, 1);}
const getpid	= {;			-> syscall(Sysgetpid, 1);}
const kill	= {pid, sig;		-> syscall(Syskill,  2, pid, sig);}
const open	= {path, opts:fdopt;	-> syscall(Sysopen,  2, path castto(char*), opts);}
const close	= {fd;			-> syscall(Sysclose, 1, fd);}
const creat	= {path, mode;		-> syscall(Syscreat, 2, path castto(char*), mode);}
const read	= {fd, buf;		-> syscall(Sysread,  3, fd, buf castto(char*), buf.len);}
const write	= {fd, buf;		-> syscall(Syswrite, 3, fd, buf castto(char*), buf.len);}
const lseek	= {fd, off, whence;	-> syscall(Syslseek, 2, fd, off, whence);}
const fstat	= {fd, sb;		-> syscall(Sysfstat, 2, fd, sb);}
const munmap	= {addr, len;		-> syscall(Sysmunmap,   2, addr, len);}
const mmap	= {addr, len, prot, flags, fd, off;	-> syscall(Sysmmap2, 6, addr, len, prot, flags, fd, off);}