{* * System call interface unit for OS-X * Version 94-09-17 *} UNIT sys; INTERFACE const process_free = #0; { Process status constants } process_active = #1; process_waiting = #2; process_terminated = #3; process_suspended = #4; max_process = 24; max_socket = 24; max_packet = 256; { Maximum IPC message size } { o_read = 0; { Open file modes } o_write = 1; o_rdwr = 2; stdin = 0; { Standard file descriptors } stdout = 1; stderr = 2; } type { name_string = array[14] of char; disk_block = array[1024] of char; waitq = record first : pointer; last : pointer; end; semaphore = record first : pointer; last : pointer; count : char; end; } PROCEDURE get_sysinfo(item: int): int; {PROCEDURE get_driver(id: int; info: ^hw_info): int;} PROCEDURE get_hostaddr(): int; PROCEDURE get_hostname(): ^string; PROCEDURE set_hostaddr(n: int); PROCEDURE set_hostname(s: string); PROCEDURE mem_alloc(size: int): pointer; PROCEDURE mem_release(p: pointer; size: int); PROCEDURE gmem_avail(map: char): int; PROCEDURE gmem_max(map: char): int; PROCEDURE mem_avail(): int; PROCEDURE mem_max(): int; PROCEDURE lock(); PROCEDURE unlock(); PROCEDURE await(q: pointer); PROCEDURE cause(q: pointer); PROCEDURE wait(s: pointer); PROCEDURE signal(s: pointer); PROCEDURE sys_time(): int; PROCEDURE idSelf(): int; PROCEDURE hold(delay_time: int); PROCEDURE restart(id: int): int; PROCEDURE sleep(); PROCEDURE exit(status: int); PROCEDURE stop(); PROCEDURE join(id: int): int; PROCEDURE set_priority(id,pri: int); PROCEDURE set_break(id: int; enable: boolean); PROCEDURE argv(n: int): ^string; PROCEDURE argc(): int; PROCEDURE argp(): pointer; PROCEDURE fork(proc: procedure; stack_size: int; argp: pointer; name: string): int; { PROCEDURE init_waitq(var q: waitq); PROCEDURE init_semaphore(var s: semaphore; value: int); } PROCEDURE create_semaphore(value: int): pointer; PROCEDURE destroy_semaphore(sp: pointer); PROCEDURE create_socket(): int; PROCEDURE alloc_socket(s: int): int; PROCEDURE destroy_socket(s: int); PROCEDURE ipc_send(src,dst: int; data: pointer; size: int): int; PROCEDURE ipc_rec(local: int var src: int; data: pointer; size: int): int; PROCEDURE ipc_rec_tw(local: int var src: int; data: pointer; size,timeout: int): int; PROCEDURE rpc_call(module,service: char; msg,buf: pointer; server,hsize,dsize,rsize,timeout: int): int; PROCEDURE syserr(): int; PROCEDURE set_syserr(errno: int); { PROCEDURE kill(id,signo: int); PROCEDURE pstat(id: int; var buf: pstatbuf): boolean; PROCEDURE get_time(): int; PROCEDURE set_time(time: int); PROCEDURE get_date(): int; PROCEDURE set_date(date: int); } PROCEDURE chkdst(n: int): int; PROCEDURE open(path: string; mode: int): int; PROCEDURE close(fd: int); PROCEDURE seek(fd: int; pos: int); PROCEDURE lseek(fd: int; posLo,posHi: int); PROCEDURE ftype(fd: int): char; PROCEDURE dup(fd: int): int; PROCEDURE read(fd: int; buf: pointer; size: int): int; PROCEDURE write(fd: int; buf: pointer; size: int): int; { PROCEDURE getc(fd: int): int; PROCEDURE putc(fd: int; ch: char); PROCEDURE getchar(): int; PROCEDURE putchar(ch: char); PROCEDURE puts(s: string); } PROCEDURE read_dir(fd: int; buf: pointer; size: int): int; PROCEDURE get_cwd(): ^string; PROCEDURE set_cwd(path: string); PROCEDURE exec(host,argc: int; argv: pointer): int; PROCEDURE getchar(): int; PROCEDURE putchar(ch: char); PROCEDURE rmount(path: string; ufidp: pointer): int; PROCEDURE rlookup(path: string; ufidp: pointer): int; PROCEDURE delete(path: string): int; PROCEDURE fstat(fd: int; buf: pointer): int; {PROCEDURE ioctl(fd: int; cmd: int; args: pointer; size: int): int;} PROCEDURE get_time(): int; PROCEDURE get_date(): int; PROCEDURE set_time(n: int); PROCEDURE set_date(n: int); IMPLEMENTATION var ignore : int; PROCEDURE get_sysinfo(item: int): int; extern $fd00; PROCEDURE get_hostaddr(): int; extern $fd08; PROCEDURE get_hostname(): ^string; extern $fd0c; PROCEDURE set_hostaddr(n: int); extern $fd10; PROCEDURE set_hostname(s: string); extern $fd14; PROCEDURE mem_alloc(size: int): pointer; extern $fd20; PROCEDURE mem_release(p: pointer; size: int); extern $fd24; PROCEDURE gmem_avail(map: char): int; extern $fd2c; PROCEDURE gmem_max(map: char): int; extern $fd30; PROCEDURE mem_avail(): int; extern $fd34; PROCEDURE mem_max(): int; extern $fd38; PROCEDURE lock(); extern $fd50; PROCEDURE unlock(); extern $fd54; PROCEDURE await(q: pointer); extern $fd58; PROCEDURE cause(q: pointer); extern $fd5c; PROCEDURE wait(s: pointer); extern $fd6c; PROCEDURE signal(s: pointer); extern $fd70; PROCEDURE sys_time(): int; extern $fd74; PROCEDURE idSelf(): int; extern $fd78; PROCEDURE hold(delay_time: int); extern $fd7c; PROCEDURE sleep(); extern $fd80; PROCEDURE exit(status: int); extern $fd84; PROCEDURE stop(); extern $fd88; PROCEDURE join(id: int): int; extern $fd8c; PROCEDURE set_priority(id,pri: int); extern $fd94; PROCEDURE set_break(id: int; enable: boolean); extern $fd98; PROCEDURE argv(n: int): ^string; extern $fd9c; PROCEDURE argc(): int; extern $fda0; PROCEDURE argp(): pointer; extern $fda4; PROCEDURE fork(proc: procedure; stack_size: int; argp: pointer; name: string): int; extern $fdac; { PROCEDURE init_waitq(var q: waitq); extern $fdb0; PROCEDURE init_semaphore(var s: semaphore; value: int); extern $fdb4; } PROCEDURE create_semaphore(value: int): pointer; extern $fdb0; PROCEDURE destroy_semaphore(sp: pointer); extern $fdb4; PROCEDURE restart(id: int): int; extern $fdb8; PROCEDURE create_socket(): int; extern $fdd0; PROCEDURE alloc_socket(s: int): int; extern $fdd4; PROCEDURE destroy_socket(s: int); extern $fdd8; PROCEDURE ipc_send(src,dst: int; data: pointer; size: int): int; extern $fddc; PROCEDURE ipc_rec(local: int var src: int; data: pointer; size: int): int; extern $fde0; PROCEDURE ipc_rec_tw(local: int var src: int; data: pointer; size,timeout: int): int; extern $fde4; PROCEDURE rpc_call(module,service: char; msg,buf: pointer; server,hsize,dsize,rsize,timeout: int): int; extern $fdf0; PROCEDURE syserr(): int; extern $fdbc; PROCEDURE set_syserr(errno: int); extern $fdc0; PROCEDURE chkdst(n: int): int; extern $fdf4; PROCEDURE open(path: string; mode: int): int; extern $fe00; PROCEDURE close(fd: int); extern $fe04; PROCEDURE seek(fd: int; pos: int); extern $fe08; PROCEDURE lseek(fd: int; pos,posHi: int); extern $fe0c; PROCEDURE ftype(fd: int): char; extern $fe10; PROCEDURE dup(fd: int): int; extern $fe14; PROCEDURE read(fd: int; buf: pointer; size: int): int; extern $fe18; PROCEDURE write(fd: int; buf: pointer; size: int): int; extern $fe1c; { PROCEDURE getc(fd: int): int; extern $fe20; PROCEDURE putc(fd: int; ch: char); extern $fe24; PROCEDURE getchar(): int; extern $fe28; PROCEDURE putchar(ch: char); extern $fe2c; PROCEDURE puts(s: string); extern $fe30; } PROCEDURE read_dir(fd: int; buf: pointer; size: int): int; extern $fe3c; PROCEDURE get_cwd(): ^string; extern $fe40; PROCEDURE set_cwd(path: string); extern $fe44; PROCEDURE exec(host,argc: int; argv: pointer): int; extern $fe48; { PROCEDURE get_time(): int; extern $1C8; PROCEDURE set_time(time: int); extern $1CC; PROCEDURE get_date(): int; extern $1D0; PROCEDURE set_date(date: int); extern $1D4; } PROCEDURE getchar(): int; var ch : char; BEGIN if read(0,@ch,1) = 1 then return int(ch); else return -1; end; END; PROCEDURE putchar(ch: char); BEGIN ignore := write(1,@ch,1); END; PROCEDURE rlookup(path: string; ufidp: pointer): int; extern $fe4c; PROCEDURE rmount(path: string; ufidp: pointer): int; extern $fe50; PROCEDURE fstat(fd: int; buf: pointer): int; extern $fe54; PROCEDURE delete(path: string): int; extern $fe58; { PROCEDURE ioctl(fd: int; cmd: int; args: pointer; size: int): int; var server : int; buf : stat_t; msg : file_message2; BEGIN if fstat(fd,buf) = 0 then server := chkdst(buf.ufid.server); return rpc_call(mod_filed,file_ioctl,@msg,args,server,sizeof(file_message2),size,size,rpc_timeout); end; return -1; END; } PROCEDURE get_time(): int; extern $fe5c; PROCEDURE get_date(): int; extern $fe60; PROCEDURE set_time(n: int); extern $fe64; PROCEDURE set_date(n: int); extern $fe68; BEGIN END sys;