
#define	 DOSNAME  'dos.library'

/* Predefined Amiga DOS global constants */

CONST	DOSTRUE=-1,
		DOSFALSE=0

/* Mode parameter to Open() */
CONST	MODE_OLDFILE=1005,
						/* Open existing file read/write
						 * positioned at beginning of file. */
		MODE_NEWFILE=1006,
						/* Open freshly created file (delete
						 * old file) read/write, exclusive lock. */
		MODE_READWRITE=1004
						/* Open old file w/shared lock,
						 * creates file if doesn't exist. */

/* Relative position to Seek() */
CONST	OFFSET_BEGINNING=-1,	    /* relative to Begining Of File */
		OFFSET_CURRENT=	0,	    /* relative to Current file position */
		OFFSET_END=			1	    /* relative to End Of File	  */

CONST	OFFSET_BEGINING=OFFSET_BEGINNING  /* ancient compatibility */

CONST	BITSPERBYTE=8
CONST	BYTESPERLONG=4
CONST	BITSPERLONG=32
CONST	MAXINT=$7FFFFFFF
CONST	MININT=$80000000

/* Passed as type to Lock() */
CONST	SHARED_LOCK=-2	   	 /* File is readable by others */
CONST	ACCESS_READ=-2		    /* Synonym */
CONST	EXCLUSIVE_LOCK=-1	    /* No other access allowed	  */
CONST	ACCESS_WRITE=-1	    /* Synonym */

OBJECT DateStamp
	Days:LONG,	      /* Number of days since Jan. 1, 1978 */
	Minute:LONG,      /* Number of minutes past midnight */
	Tick:LONG	      /* Number of ticks past minute */

#define TICKS_PER_SECOND      50   /* Number of ticks in one second */

/* Returned by Examine() and ExNext(), must be on a 4 byte boundary */
OBJECT FileInfoBlock
	DiskKey:LONG,
	DirEntryType:LONG,	/* Type of Directory. If < 0, then a plain file.
								 * If > 0 a directory */
	FileName[108]:UBYTE,	/* Null terminated. Max 30 chars used for now */
	Protection:LONG,		/* bit mask of protection, rwxd are 3-0.	   */
	EntryType:LONG,
	Size:LONG,				/* Number of bytes in file */
	NumBlocks:LONG,		/* Number of blocks in file */
	Date:DateStamp,		/* Date file last changed */
	Comment[80]:UBYTE,	/* Null terminated comment associated with file */
	
   /* Note: the following fields are not supported by all filesystems.	*/
   /* They should be initialized to 0 sending an ACTION_EXAMINE packet.	*/
   /* When Examine() is called, these are set to 0 for you.		*/
   /* AllocDosObject() also initializes them to 0.			*/
	OwnerUID:UWORD,		/* owner's UID */
	OwnerGID:UWORD,		/* owner's GID */

	Reserved[32]:UBYTE

/* FIB stands for FileInfoBlock */

/* FIBB are bit definitions, FIBF are field definitions */
/* Regular RWED bits are 0 == allowed. */
/* NOTE: GRP and OTR RWED permissions are 0 == not allowed! */
/* Group and Other permissions are not directly handled by the filesystem */
#define FIBB_OTR_READ	   15	/* Other: file is readable */
#define FIBB_OTR_WRITE	   14	/* Other: file is writable */
#define FIBB_OTR_EXECUTE   13	/* Other: file is executable */
#define FIBB_OTR_DELETE    12	/* Other: prevent file from being deleted */
#define FIBB_GRP_READ	   11	/* Group: file is readable */
#define FIBB_GRP_WRITE	   10	/* Group: file is writable */
#define FIBB_GRP_EXECUTE   9	/* Group: file is executable */
#define FIBB_GRP_DELETE    8	/* Group: prevent file from being deleted */

#define FIBB_SCRIPT    6		/* program is a script (execute) file */
#define FIBB_PURE      5		/* program is reentrant and rexecutable */
#define FIBB_ARCHIVE   4		/* cleared whenever file is changed */
#define FIBB_READ      3		/* ignored by old filesystem */
#define FIBB_WRITE     2		/* ignored by old filesystem */
#define FIBB_EXECUTE   1		/* ignored by system, used by Shell */
#define FIBB_DELETE    0		/* prevent file from being deleted */

#define FIBF_OTR_READ	   (1<<FIBB_OTR_READ)
#define FIBF_OTR_WRITE	   (1<<FIBB_OTR_WRITE)
#define FIBF_OTR_EXECUTE   (1<<FIBB_OTR_EXECUTE)
#define FIBF_OTR_DELETE    (1<<FIBB_OTR_DELETE)
#define FIBF_GRP_READ	   (1<<FIBB_GRP_READ)
#define FIBF_GRP_WRITE	   (1<<FIBB_GRP_WRITE)
#define FIBF_GRP_EXECUTE   (1<<FIBB_GRP_EXECUTE)
#define FIBF_GRP_DELETE    (1<<FIBB_GRP_DELETE)

#define FIBF_SCRIPT    (1<<FIBB_SCRIPT)
#define FIBF_PURE      (1<<FIBB_PURE)
#define FIBF_ARCHIVE   (1<<FIBB_ARCHIVE)
#define FIBF_READ      (1<<FIBB_READ)
#define FIBF_WRITE     (1<<FIBB_WRITE)
#define FIBF_EXECUTE   (1<<FIBB_EXECUTE)
#define FIBF_DELETE    (1<<FIBB_DELETE)

/* Standard maximum length for an error string from fault.  However, most */
/* error strings should be kept under 60 characters if possible.  Don't   */
/* forget space for the header you pass in. */
#define FAULT_MAX	82

/* BCPL strings have a length in the first byte and then the characters.
 * For example:	 s[0]=3 s[1]=S s[2]=Y s[3]=S				 */

/* returned by Info(), must be on a 4 byte boundary */
OBJECT InfoData
	NumSoftErrors:LONG,	/* number of soft errors on disk */
	UnitNumber:LONG,		/* Which unit disk is (was) mounted on */
	DiskState:LONG,			/* See defines below */
	NumBlocks:LONG,			/* Number of blocks on disk */
	NumBlocksUsed:LONG,	/* Number of block in use */
	BytesPerBlock:LONG,
	DiskType:LONG,			/* Disk Type code */
	VolumeNode:BPTR,		/* BCPL pointer to volume node */
	InUse:LONG				/* Flag, zero if not in use */

/* ID stands for InfoData */
	/* Disk states */
#define ID_WRITE_PROTECTED	80	 /* Disk is write protected */
#define ID_VALIDATING		81	 /* Disk is currently being validated */
#define ID_VALIDATED			82	 /* Disk is consistent and writeable */

	/* Disk types */
/* ID_INTER_* use international case comparison routines for hashing */
/* Any other new filesystems should also, if possible. */
#define ID_NO_DISK_PRESENT		-1
#define ID_UNREADABLE_DISK		$42414400	/* 'BAD\0' */
#define ID_DOS_DISK				$444F5300	/* 'DOS\0' */
#define ID_FFS_DISK				$444F5301	/* 'DOS\1' */
#define ID_INTER_DOS_DISK		$444F5302	/* 'DOS\2' */
#define ID_INTER_FFS_DISK		$444F5303	/* 'DOS\3' */
#define ID_FASTDIR_DOS_DISK	$444F5304	/* 'DOS\4' */
#define ID_FASTDIR_FFS_DISK	$444F5305	/* 'DOS\5' */
#define ID_NOT_REALLY_DOS		$4E444F53	/* 'NDOS'  */
#define ID_KICKSTART_DISK		$4B49434B	/* 'KICK'  */
#define ID_MSDOS_DISK			$4d534400	/* 'MSD\0' */

/* Errors from IoErr(), etc. */
CONST	ERROR_NO_FREE_STORE			=103,
		ERROR_TASK_TABLE_FULL		=105,
		ERROR_BAD_TEMPLATE			=114,
		ERROR_BAD_NUMBER				=115,
		ERROR_REQUIRED_ARG_MISSING	=116,
		ERROR_KEY_NEEDS_ARG			=117,
		ERROR_TOO_MANY_ARGS			=118,
		ERROR_UNMATCHED_QUOTES		=119,
		ERROR_LINE_TOO_LONG			=120,
		ERROR_FILE_NOT_OBJECT		=121,
		ERROR_INVALID_RESIDENT_LIBRARY=122,
		ERROR_NO_DEFAULT_DIR			=201,
		ERROR_OBJECT_IN_USE			=202,
		ERROR_OBJECT_EXISTS			=203,
		ERROR_DIR_NOT_FOUND			=204,
		ERROR_OBJECT_NOT_FOUND		=205,
		ERROR_BAD_STREAM_NAME		=206,
		ERROR_OBJECT_TOO_LARGE		=207,
		ERROR_ACTION_NOT_KNOWN	 	=209,
		ERROR_INVALID_COMPONENT_NAME=210,
		ERROR_INVALID_LOCK			=211,
		ERROR_OBJECT_WRONG_TYPE		=212,
		ERROR_DISK_NOT_VALIDATED	=213,
		ERROR_DISK_WRITE_PROTECTED	=214,
		ERROR_RENAME_ACROSS_DEVICES=215,
		ERROR_DIRECTORY_NOT_EMPTY	=216,
		ERROR_TOO_MANY_LEVELS		=217,
		ERROR_DEVICE_NOT_MOUNTED	=218,
		ERROR_SEEK_ERROR				=219,
		ERROR_COMMENT_TOO_BIG		=220,
		ERROR_DISK_FULL				=221,
		ERROR_DELETE_PROTECTED		=222,
		ERROR_WRITE_PROTECTED		=223,
		ERROR_READ_PROTECTED			=224,
		ERROR_NOT_A_DOS_DISK			=225,
		ERROR_NO_DISK					=226,
		ERROR_NO_MORE_ENTRIES		=232,
/* added for 1.4 */
		ERROR_IS_SOFT_LINK			=233,
		ERROR_OBJECT_LINKED			=234,
		ERROR_BAD_HUNK					=235,
		ERROR_NOT_IMPLEMENTED		=236,
		ERROR_RECORD_NOT_LOCKED		=240,
		ERROR_LOCK_COLLISION			=241,
		ERROR_LOCK_TIMEOUT			=242,
		ERROR_UNLOCK_ERROR			=243

/* error codes 303-305 are defined in dosasl.h */

/* These are the return codes used by convention by AmigaDOS commands */
/* See FAILAT and IF for relvance to EXECUTE files		      */
#define RETURN_OK				    0  /* No problems, success */
#define RETURN_WARN			    5  /* A warning only */
#define RETURN_ERROR			   10  /* Something wrong */
#define RETURN_FAIL			   20  /* Complete or severe failure*/

/* Bit numbers that signal you that a user has issued a break */
#define SIGBREAKB_CTRL_C   12
#define SIGBREAKB_CTRL_D   13
#define SIGBREAKB_CTRL_E   14
#define SIGBREAKB_CTRL_F   15

/* Bit fields that signal you that a user has issued a break */
/* for example:	 if (SetSignal(0,0) & SIGBREAKF_CTRL_C) cleanup_and_exit(); */
#define SIGBREAKF_CTRL_C   1<<SIGBREAKB_CTRL_C
#define SIGBREAKF_CTRL_D   1<<SIGBREAKB_CTRL_D
#define SIGBREAKF_CTRL_E   1<<SIGBREAKB_CTRL_E
#define SIGBREAKF_CTRL_F   1<<SIGBREAKB_CTRL_F

/* Values returned by SameLock() */
#define LOCK_DIFFERENT		-1
#define LOCK_SAME				0
#define LOCK_SAME_VOLUME	1	/* locks are on same volume */
#define LOCK_SAME_HANDLER	LOCK_SAME_VOLUME
/* LOCK_SAME_HANDLER was a misleading name, def kept for src compatibility */

/* types for ChangeMode() */
#define CHANGE_LOCK	0
#define CHANGE_FH		1

/* Values for MakeLink() */
#define LINK_HARD	0
#define LINK_SOFT	1	/* softlinks are not fully supported yet */

/* values returned by ReadItem */
#define	ITEM_EQUAL		-2		/* "=" Symbol */
#define ITEM_ERROR		-1		/* error */
#define ITEM_NOTHING		0		/* *N, ;, endstreamch */
#define ITEM_UNQUOTED	1		/* unquoted item */
#define ITEM_QUOTED		2		/* quoted item */

/* types for AllocDosObject/FreeDosObject */
#define DOS_FILEHANDLE		0	/* few people should use this */
#define DOS_EXALLCONTROL	1	/* Must be used to allocate this! */
#define DOS_FIB				2	/* useful */
#define DOS_STDPKT			3	/* for doing packet-level I/O */
#define DOS_CLI				4	/* for shell-writers, etc */
#define DOS_RDARGS			5	/* for ReadArgs if you pass it in */
