// // Dis VM // File: Sysmod.h // Author: arr // #ifndef _DISVM_SRC_VM_SYS_SYSMOD_H_ #define _DISVM_SRC_VM_SYS_SYSMOD_H_ #include #include #include using disvm::vm_t; using disvm::runtime::byte_t; using disvm::runtime::word_t; using disvm::runtime::big_t; using disvm::runtime::real_t; using disvm::runtime::pointer_t; using disvm::runtime::vm_registers_t; using disvm::runtime::vm_frame_base_alloc_t; struct Sys_Qid { big_t path; word_t vers; word_t qtype; }; const byte_t Sys_Qid_map[] = { 0 }; struct Sys_Dir { /* vm_string_t */ pointer_t name; /* vm_string_t */ pointer_t uid; /* vm_string_t */ pointer_t gid; /* vm_string_t */ pointer_t muid; Sys_Qid qid; word_t mode; word_t atime; word_t mtime; byte_t _pad44[4]; big_t length; word_t dtype; word_t dev; }; const byte_t Sys_Dir_map[] = { 0xf0, }; struct Sys_FD { word_t fd; }; const byte_t Sys_FD_map[] = { 0 }; struct Sys_Connection { /* Sys_FD */ pointer_t dfd; /* Sys_FD */ pointer_t cfd; /* vm_string_t */ pointer_t dir; }; const byte_t Sys_Connection_map[] = { 0xe0, }; using Sys_Rread = struct { /* vm_array_t */ pointer_t t0; /* vm_string_t */ pointer_t t1; }; const byte_t Sys_Rread_map = { 0xc0, }; using Sys_Rwrite = struct { word_t t0; /* vm_string_t */ pointer_t t1; }; const byte_t Sys_Rwrite_map = { 0x40, }; struct Sys_FileIO { /* vm_channel_t */ pointer_t read; /* vm_channel_t */ pointer_t write; }; using Sys_FileIO_read = struct { word_t t0; word_t t1; word_t t2; /* vm_channel_t */ pointer_t t3; }; const byte_t Sys_FileIO_read_map = { 0x10, }; using Sys_FileIO_write = struct { word_t t0; /* vm_array_t */ pointer_t t1; word_t t2; /* vm_channel_t */ pointer_t t3; }; const byte_t Sys_FileIO_write_map = { 0x50, }; const byte_t Sys_FileIO_map[] = { 0xc0, }; void Sys_announce(vm_registers_t &, vm_t &); struct F_Sys_announce : public vm_frame_base_alloc_t { struct { word_t t0; Sys_Connection t1; }*ret; byte_t temps[12]; /* vm_string_t */ pointer_t addr; }; void Sys_aprint(vm_registers_t &, vm_t &); struct F_Sys_aprint : public vm_frame_base_alloc_t { /* vm_array_t */ pointer_t* ret; byte_t temps[12]; /* vm_string_t */ pointer_t s; byte_t vargs; }; void Sys_bind(vm_registers_t &, vm_t &); struct F_Sys_bind : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; /* vm_string_t */ pointer_t s; /* vm_string_t */ pointer_t on; word_t flags; }; void Sys_byte2char(vm_registers_t &, vm_t &); struct F_Sys_byte2char : public vm_frame_base_alloc_t { struct { word_t t0; word_t t1; word_t t2; }*ret; byte_t temps[12]; /* vm_array_t */ pointer_t buf; word_t n; }; void Sys_char2byte(vm_registers_t &, vm_t &); struct F_Sys_char2byte : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; word_t c; /* vm_array_t */ pointer_t buf; word_t n; }; void Sys_chdir(vm_registers_t &, vm_t &); struct F_Sys_chdir : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; /* vm_string_t */ pointer_t path; }; void Sys_create(vm_registers_t &, vm_t &); struct F_Sys_create : public vm_frame_base_alloc_t { /* Sys_FD */ pointer_t* ret; byte_t temps[12]; /* vm_string_t */ pointer_t s; word_t mode; word_t perm; }; void Sys_dial(vm_registers_t &, vm_t &); struct F_Sys_dial : public vm_frame_base_alloc_t { struct { word_t t0; Sys_Connection t1; }*ret; byte_t temps[12]; /* vm_string_t */ pointer_t addr; /* vm_string_t */ pointer_t local; }; void Sys_dirread(vm_registers_t &, vm_t &); struct F_Sys_dirread : public vm_frame_base_alloc_t { struct { word_t t0; /* vm_array_t */ pointer_t t1; }*ret; byte_t temps[12]; /* Sys_FD */ pointer_t fd; }; void Sys_dup(vm_registers_t &, vm_t &); struct F_Sys_dup : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; word_t old; word_t new_; }; void Sys_export(vm_registers_t &, vm_t &); struct F_Sys_export : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; /* Sys_FD */ pointer_t c; /* vm_string_t */ pointer_t dir; word_t flag; }; void Sys_fauth(vm_registers_t &, vm_t &); struct F_Sys_fauth : public vm_frame_base_alloc_t { /* Sys_FD */ pointer_t* ret; byte_t temps[12]; /* Sys_FD */ pointer_t fd; /* vm_string_t */ pointer_t aname; }; void Sys_fd2path(vm_registers_t &, vm_t &); struct F_Sys_fd2path : public vm_frame_base_alloc_t { /* vm_string_t */ pointer_t* ret; byte_t temps[12]; /* Sys_FD */ pointer_t fd; }; void Sys_fildes(vm_registers_t &, vm_t &); struct F_Sys_fildes : public vm_frame_base_alloc_t { /* Sys_FD */ pointer_t* ret; byte_t temps[12]; word_t fd; }; void Sys_file2chan(vm_registers_t &, vm_t &); struct F_Sys_file2chan : public vm_frame_base_alloc_t { /* Sys_FileIO */ pointer_t* ret; byte_t temps[12]; /* vm_string_t */ pointer_t dir; /* vm_string_t */ pointer_t file; }; void Sys_fprint(vm_registers_t &, vm_t &); struct F_Sys_fprint : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; /* Sys_FD */ pointer_t fd; /* vm_string_t */ pointer_t s; byte_t vargs; }; void Sys_fstat(vm_registers_t &, vm_t &); struct F_Sys_fstat : public vm_frame_base_alloc_t { struct { word_t t0; byte_t _pad4[4]; Sys_Dir t1; }*ret; byte_t temps[12]; /* Sys_FD */ pointer_t fd; }; void Sys_fversion(vm_registers_t &, vm_t &); struct F_Sys_fversion : public vm_frame_base_alloc_t { struct { word_t t0; /* vm_string_t */ pointer_t t1; }*ret; byte_t temps[12]; /* Sys_FD */ pointer_t fd; word_t msize; /* vm_string_t */ pointer_t version; }; void Sys_fwstat(vm_registers_t &, vm_t &); struct F_Sys_fwstat : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; /* Sys_FD */ pointer_t fd; byte_t _pad36[4]; Sys_Dir d; }; void Sys_iounit(vm_registers_t &, vm_t &); struct F_Sys_iounit : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; /* Sys_FD */ pointer_t fd; }; void Sys_listen(vm_registers_t &, vm_t &); struct F_Sys_listen : public vm_frame_base_alloc_t { struct { word_t t0; Sys_Connection t1; }*ret; byte_t temps[12]; Sys_Connection c; }; void Sys_millisec(vm_registers_t &, vm_t &); struct F_Sys_millisec : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; }; void Sys_mount(vm_registers_t &, vm_t &); struct F_Sys_mount : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; /* Sys_FD */ pointer_t fd; /* Sys_FD */ pointer_t afd; /* vm_string_t */ pointer_t on; word_t flags; /* vm_string_t */ pointer_t spec; }; void Sys_open(vm_registers_t &, vm_t &); struct F_Sys_open : public vm_frame_base_alloc_t { /* Sys_FD */ pointer_t* ret; byte_t temps[12]; /* vm_string_t */ pointer_t s; word_t mode; }; void Sys_pctl(vm_registers_t &, vm_t &); struct F_Sys_pctl : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; word_t flags; /* vm_list_t */ pointer_t movefd; }; void Sys_pipe(vm_registers_t &, vm_t &); struct F_Sys_pipe : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; /* vm_array_t */ pointer_t fds; }; void Sys_pread(vm_registers_t &, vm_t &); struct F_Sys_pread : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; /* Sys_FD */ pointer_t fd; /* vm_array_t */ pointer_t buf; word_t n; byte_t _pad44[4]; big_t off; }; void Sys_print(vm_registers_t &, vm_t &); struct F_Sys_print : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; /* vm_string_t */ pointer_t s; byte_t vargs; }; void Sys_pwrite(vm_registers_t &, vm_t &); struct F_Sys_pwrite : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; /* Sys_FD */ pointer_t fd; /* vm_array_t */ pointer_t buf; word_t n; byte_t _pad44[4]; big_t off; }; void Sys_read(vm_registers_t &, vm_t &); struct F_Sys_read : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; /* Sys_FD */ pointer_t fd; /* vm_array_t */ pointer_t buf; word_t n; }; void Sys_readn(vm_registers_t &, vm_t &); struct F_Sys_readn : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; /* Sys_FD */ pointer_t fd; /* vm_array_t */ pointer_t buf; word_t n; }; void Sys_remove(vm_registers_t &, vm_t &); struct F_Sys_remove : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; /* vm_string_t */ pointer_t s; }; void Sys_seek(vm_registers_t &, vm_t &); struct F_Sys_seek : public vm_frame_base_alloc_t { big_t* ret; byte_t temps[12]; /* Sys_FD */ pointer_t fd; byte_t _pad36[4]; big_t off; word_t start; }; void Sys_sleep(vm_registers_t &, vm_t &); struct F_Sys_sleep : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; word_t period; }; void Sys_sprint(vm_registers_t &, vm_t &); struct F_Sys_sprint : public vm_frame_base_alloc_t { /* vm_string_t */ pointer_t* ret; byte_t temps[12]; /* vm_string_t */ pointer_t s; byte_t vargs; }; void Sys_stat(vm_registers_t &, vm_t &); struct F_Sys_stat : public vm_frame_base_alloc_t { struct { word_t t0; byte_t _pad4[4]; Sys_Dir t1; }*ret; byte_t temps[12]; /* vm_string_t */ pointer_t s; }; void Sys_stream(vm_registers_t &, vm_t &); struct F_Sys_stream : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; /* Sys_FD */ pointer_t src; /* Sys_FD */ pointer_t dst; word_t bufsiz; }; void Sys_tokenize(vm_registers_t &, vm_t &); struct F_Sys_tokenize : public vm_frame_base_alloc_t { struct { word_t t0; /* vm_list_t */ pointer_t t1; }*ret; byte_t temps[12]; /* vm_string_t */ pointer_t s; /* vm_string_t */ pointer_t delim; }; void Sys_unmount(vm_registers_t &, vm_t &); struct F_Sys_unmount : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; /* vm_string_t */ pointer_t s1; /* vm_string_t */ pointer_t s2; }; void Sys_utfbytes(vm_registers_t &, vm_t &); struct F_Sys_utfbytes : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; /* vm_array_t */ pointer_t buf; word_t n; }; void Sys_werrstr(vm_registers_t &, vm_t &); struct F_Sys_werrstr : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; /* vm_string_t */ pointer_t s; }; void Sys_write(vm_registers_t &, vm_t &); struct F_Sys_write : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; /* Sys_FD */ pointer_t fd; /* vm_array_t */ pointer_t buf; word_t n; }; void Sys_wstat(vm_registers_t &, vm_t &); struct F_Sys_wstat : public vm_frame_base_alloc_t { word_t* ret; byte_t temps[12]; /* vm_string_t */ pointer_t s; byte_t _pad36[4]; Sys_Dir d; }; const char *Sys_PATH = "$Sys"; const word_t Sys_Maxint = 0x7fffffff; const word_t Sys_QTDIR = 0x80; const word_t Sys_QTAPPEND = 0x40; const word_t Sys_QTEXCL = 0x20; const word_t Sys_QTAUTH = 0x8; const word_t Sys_QTTMP = 0x4; const word_t Sys_QTFILE = 0; const word_t Sys_ATOMICIO = 0x2000; const word_t Sys_SEEKSTART = 0; const word_t Sys_SEEKRELA = 0x1; const word_t Sys_SEEKEND = 0x2; const word_t Sys_NAMEMAX = 0x100; const word_t Sys_ERRMAX = 0x80; const word_t Sys_WAITLEN = 0xc0; const word_t Sys_OREAD = 0; const word_t Sys_OWRITE = 0x1; const word_t Sys_ORDWR = 0x2; const word_t Sys_OTRUNC = 0x10; const word_t Sys_ORCLOSE = 0x40; const word_t Sys_OEXCL = 0x1000; const word_t Sys_DMDIR = 0x80000000; const word_t Sys_DMAPPEND = 0x40000000; const word_t Sys_DMEXCL = 0x20000000; const word_t Sys_DMAUTH = 0x8000000; const word_t Sys_DMTMP = 0x4000000; const word_t Sys_MREPL = 0; const word_t Sys_MBEFORE = 0x1; const word_t Sys_MAFTER = 0x2; const word_t Sys_MCREATE = 0x4; const word_t Sys_MCACHE = 0x10; const word_t Sys_NEWFD = 0x1; const word_t Sys_FORKFD = 0x2; const word_t Sys_NEWNS = 0x4; const word_t Sys_FORKNS = 0x8; const word_t Sys_NEWPGRP = 0x10; const word_t Sys_NODEVS = 0x20; const word_t Sys_NEWENV = 0x40; const word_t Sys_FORKENV = 0x80; const word_t Sys_EXPWAIT = 0; const word_t Sys_EXPASYNC = 0x1; const word_t Sys_UTFmax = 0x4; const word_t Sys_UTFerror = 0xfffd; const word_t Sys_Runemax = 0x10ffff; const word_t Sys_Runemask = 0x1fffff; #endif // _DISVM_SRC_VM_SYS_SYSMOD_H_