home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
rtsi.com
/
2014.01.www.rtsi.com.tar
/
www.rtsi.com
/
OS9
/
OSK
/
EFFO
/
pd3.lzh
/
SBPROLOG2.2
/
SIM
/
BUILTIN
/
syscall.c
< prev
next >
Wrap
Text File
|
1991-08-10
|
1KB
|
40 lines
/* This file implements some of the syscall() facilities
for OS9 Microware C and is totally machine dependent */
#ifdef OS9
/* syscall(n,arg1,arg2 ...) can be called with >= 1 arguments,
OS9 Microware C passes the first 2 arguments in registers,
so multi-argument functions have to be handled carefully,
all arguments are supposed to be of int size (4 bytes) */
int syscall(n,arg1,other_args)
int n, arg1, other_args;
{
int *args;
args = &other_args; /* pointer to argument array (arg2,arg3 ...) */
switch (n) {
case 1: return (exit(arg1)); /* exit */
case 3: return (read(arg1,args[0],args[1])); /* read */
case 4: return (write(arg1,args[0],args[1])); /* write */
case 5: return (open(arg1,args[0])); /* open */
case 6: return (close(arg1)); /* close */
case 8: return (creat(arg1,args[0])); /* creat */
case 10: return (unlink(arg1)); /* unlink */
case 12: return (chdir(arg1)); /* chdir */
case 15: return (chmod(arg1,args[0])); /* chmod */
case 19: return (lseek(arg1,args[0],args[1])); /* lseek */
case 33: return (access(arg1,args[0])); /* access */
case 37: return (kill(arg1,args[0])); /* kill */
case 84: return (wait(arg1)); /* wait */
case 136: return (mknod(arg1,args[0])); /* mknod */
default: quit("This SYSCALL is not implemented !");
}
}
#endif