/* jsysequ.h:  Cromemco C I/O header file

   Copyright (c) 1984 by Cromemco, Inc., All Rights Reserved

   This file contains declarations of all values which are
   used during calls to the Cromix-Plus operating system.

   26-Dec-84
*/



/*
	standard channel numbers
*/

#define	STDIN		0	/* standard input channel	*/
#define	STDOUT		1	/* standard output channel	*/
#define	STDERR		2	/* standard error channel	*/



/*
   access modes for create
*/

#define op_read		0	/* read only			*/
#define op_write	1	/* write only			*/
#define op_rdwr		2	/* read and write		*/
#define op_append	3	/* append only			*/
#define op_xread	4	/* exclusive read only		*/
#define op_xwrite	5	/* exclusive write only		*/
#define op_xrdwr	6	/* exclusive read and write	*/
#define op_xappend	7	/* exclusive append only	*/

#define op_truncf	0x80	/* truncate on create flag	*/
#define op_condf	0x40	/* conditional create flag	*/
#define op_force	0x20	/* force open on block device	*/

/*	Modes for setpos system call 	*/
#define fwd_begin	0	/* Forward from the beginning of the file  */
#define fwd_current	1	/* Forward from the current position	   */
#define fwd_end		2	/* Forward from the end of the file	   */
#define bak_current	-1	/* Backward from the current file position */
#define bak_end		-2	/* Backward from the end of the file	   */

/*
   status types for _fstat, _cstat, _fchstat, _cchstat
*/

#define st_all		0	/* all of inode (128 bytes)		*/
#define st_owner	1	/* owner				*/
#define st_group	2	/* group				*/
#define st_aowner	3	/* owner access, mask			*/
#define st_agroup	4	/* group access, mask			*/
#define st_aother	5	/* other access, mask			*/
#define st_ftype	6	/* file type, special device #		*/
#define st_size		7	/* file size				*/
#define st_nlinks	8	/* number of links			*/
#define st_inum		9	/* inode number				*/
#define st_device	10	/* device containing inode		*/
#define st_tcreate	11	/* time created				*/
#define st_tmodify	12	/* time last modified			*/
#define st_taccess	13	/* time last accessed			*/
#define st_tdumped	14	/* time last dumped			*/
#define st_devno	15	/* device number if inode is a device	*/
#define st_pdevno	16	/* phys device # if inode is a device	*/

/*
    file types for st_ftype
*/

#define is_ordin	0	/* ordinary file */
#define is_direct	1	/* directory file */
#define is_char		2	/* character device */
#define is_block	3	/* block device */
#define is_pipe		4	/* Pipe */

/*
    mask values for file access flags
*/

#define ac_read		0x01	/* read access bit	*/
#define ac_exec		0x02	/* execute access bit	*/
#define ac_writ		0x04	/* write access bit	*/
#define ac_apnd		0x08	/* append access bit	*/

/*
   id types and values for _setuser, _getuser, _setgroup, _getgroup
*/

#define id_effective	0	/* effective id			*/
#define id_login	1	/* login id			*/
#define id_program	2	/* program id			*/
#define id_number	3	/* id contained in idnumber	*/

/*
   signal types
*/

#define sigabort	1	/* Control-C key			*/
#define siguser		2	/* User specifiable key			*/
#define sigkill		3	/* Kill signal				*/
#define sigterm		4	/* Terminate				*/
#define sigalarm	5	/* Alarm				*/
#define sigpipe		6	/* Broken pipe signal			*/
#define sighangup	7	/* Modem hang up			*/
/*			8	   Reserved				*/

#define	SIGABORT	(1 << sigabort - 1)
#define	SIGUSER		(1 << siguser  - 1)
#define	SIGKILL		(1 << sigkill  - 1)
#define	SIGTERM		(1 << sigterm  - 1)
#define	SIGALARM	(1 << sigalarm - 1)
#define	SIGPIPE		(1 << sigpipe  - 1)
#define	SIGHANGUP	(1 << sighangup- 1)


/*
    Cromix-Plus System Call Numbers
*/

#define _makdev		0x00	/* make device entry		*/
#define _makdir		0x01	/* make a directory		*/
#define _getdir		0x02	/* get current directory name	*/
#define _setdir		0x03	/* change current directory	*/
#define _mount		0x04	/* mount file system		*/
#define _unmount	0x05	/* unmount file system		*/
#define _delete		0x06	/* delete file			*/
#define _chkdev		0x07	/* check for device driver	*/
#define _create		0x08	/* create & open file		*/
#define _open		0x09	/* open file			*/
#define _chdup		0x0A	/* duplicate channel		*/
#define _close		0x0B	/* close file			*/
#define _exchg		0x0C	/* exchange the contents of two inodes */
#define _trunc		0x0D	/* truncate open file		*/
#define	_pipe		0x0E	/* generate a pipe		*/

#define _getpos		0x10	/* get file position		*/
#define _setpos		0x11	/* set file position		*/
#define _getmode	0x12	/* get device characteristics	*/
#define _setmode	0x13	/* set device characteristics	*/
#define _rdseq		0x14	/* read n bytes			*/
#define _wrseq		0x15	/* write n bytes		*/
#define _rdbyte		0x16	/* read 1 byte			*/
#define _wrbyte		0x17	/* write 1 byte			*/
#define _rdline		0x18	/* read a line			*/
#define _wrline		0x19	/* write a line			*/

#define _printf		0x1B	/* print formatted string	*/
#define _error		0x1C	/* print error message		*/

#define _fstat		0x20	/* get file status (inode)	*/
#define _cstat		0x21	/* get channel status (inode)	*/
#define _fchstat	0x22	/* change file status		*/
#define _cchstat	0x23	/* change channel status	*/
#define _flink		0x24	/* link to file			*/
#define _clink		0x25	/* link to open channel		*/
#define _faccess	0x26	/* test file access		*/
#define _caccess	0x27	/* test channel access		*/

#define _getdate	0x30	/* get date			*/
#define _setdate	0x31	/* set date			*/
#define _gettime	0x32	/* get time			*/
#define _settime	0x33	/* set time			*/
#define _getuser	0x34	/* get user id			*/
#define _setuser	0x35	/* set user id			*/
#define _getgroup	0x36	/* get group id			*/
#define _setgroup	0x37	/* set group id			*/
#define _getprior	0x38	/* get the current processes priority number */
#define _setprior	0x39	/* set the current processes priority number */
#define _getproc	0x3A	/* get process id		*/

#define _ksam		0x3D	/* ksam system call		*/
#define	_lock		0x3E	/* lock key			*/
#define	_unlock		0x3F	/* unlock key			*/
#define _signal		0x40	/* set up to receive a signal	*/
#define _kill		0x41	/* send a signal		*/
#define _sleep		0x42	/* sleep for specified number of seconds */
#define _alarm		0x43	/* set alarm clock		*/
#define _pause		0x44	/* pause for alarm clock	*/
#define _wait		0x45	/* wait for child process	*/
#define _exit		0x46	/* exit process (close files)	*/
#define	_fork		0x47	/* fork a process		*/
#define _fshell		0x48	/* fork a shell process		*/
#define _shell		0x49	/* transfer to shell process	*/

#define _fexec		0x4B	/* fork and execute program	*/
#define _exec		0x4C	/* execute program		*/
#define	_execz80	0x4D	/* execute z80 program		*/

#define	_memory		0x50	/* allocate user memory		*/
#define _indirect	0x51	/* system call in A-register	*/
#define _update		0x52	/* update disk I/O buffers	*/
#define _mult		0x53	/* multiply			*/
#define _divd		0x54	/* divide			*/
#define _version	0x55	/* get system version #		*/
#define _boot		0x56	/* boot new operating system	*/


/*
	Cromix-Plus error numbers
*/

#define _badchan	1	/* bad channel # */
#define _toomany	2	/* channel already open */
#define _notopen	3	/* channel not open */
#define _endfile	4	/* end-of-file */
#define _ioerror	5	/* I/O error */
#define _filtable	6	/* file table exhausted */
#define _notexist	7	/* file does not exist */
#define _badname	8	/* bad file name */
#define _diraccess	9	/* directory access */
#define _filaccess	10	/* file access */
#define _exists		11	/* file already exists */
#define _nospace	12	/* no disk space left */
#define _noinode	13	/* no inodes left */
#define _inotable	14	/* inode table exhausted */
#define _badcall	15	/* illegal system call */
#define _filsize	16	/* file size too big */
#define _mnttable	17	/* mount table exhausted */
#define _notdir		18	/* not a directory */
#define _isdir		19	/* is a directory */
#define _priv		20	/* privileged system call */
#define _notblk		21	/* not a block special device */
#define _fsbusy		22	/* file system busy */
#define _notordin	23	/* not an ordinary file */
#define _notmount	24	/* device not mounted */
#define _nochild	25	/* no child processes */
#define _nomemory	26	/* not enough memory */
#define _ovflo		27	/* divide overflow */
#define _argtable	28	/* argument table exhausted */
#define _arglist	29	/* arg list too big */
#define _numlinks	30	/* too many number of links */
#define _difdev		31	/* cross-device link */
#define _nodevice	32	/* no special device */
#define _usrtable	33	/* user process table exhausted */
#define _badvalue	34	/* value out of range */
#define _notconn	35	/* I/O device not connected */
#define _devopen	36	/* device open error		   */
#define _diruse		37	/* directory in use (delete) */
#define _filuse		38	/* file in use (exclusive access) */
#define _nomatch	39	/* no match on ambiguous name */
#define _chnaccess	40	/* channel access */
#define _notcromix	41	/* not a cromix disk */
#define _badfree	42	/* bad free list */
#define _badinum	43	/* bad inode number */
#define _readonly	44	/* device mounted for read only */
#define _noproc		45	/* process does not exist */
#define _ssignal	46	/* system call was aborted */
#define	_badpipe	47	/* bad call on pipe */
#define _locked		48	/* locked */
#define _deadlock	49	/* deadlocked */
#define	_lcktable	50	/* lock table exhausted */
#define _tapeio		51	/* tape I/O error */
#define _badio		52	/* I/O error */
#define	_not68000	53	/* 68000 programs cannot run under Z80 */
#define	_badformat	54	/* Bad file format */
#define	_runaway	55	/* Runaway program aborted */
#define _cdossim	56	/* CDOS simulator required */
#define	_corrupt	57	/* System image corrupted */
