	IFND	LIBRARIES_DOSEXTENS_I
LIBRARIES_DOSEXTENS_I	EQU	1
**
**	$Filename: libraries/dosextens.i $
**	$Release: 1.3 $
**
**	DOS structures not needed for the casual AmigaDOS user 
**
**	(C) Copyright 1985,1986,1987,1988 Commodore-Amiga, Inc.
**	    All Rights Reserved
**

	IFND	EXEC_TYPES_I
	INCLUDE	"exec/types.i"
	ENDC
	IFND	EXEC_TASKS_I
	INCLUDE	"exec/tasks.i"
	ENDC
	IFND	EXEC_PORTS_I
	INCLUDE	"exec/ports.i"
	ENDC
	IFND	EXEC_LIBRARIES_I
	INCLUDE	"exec/libraries.i"
	ENDC

	IFND	LIBRARIES_DOS_I
	INCLUDE	"libraries/dos.i"
	ENDC


* All DOS processes have this STRUCTure
* Create and DeviceProc returns pointer to the MsgPort in this STRUCTure
* Process_addr = DeviceProc(..) - TC_SIZE

	STRUCTURE	Process,0
	STRUCT	pr_Task,TC_SIZE
	STRUCT	pr_MsgPort,MP_SIZE	* This is BPTR address from DOS functions
	WORD	pr_Pad		* Remaining variables on 4 byte boundaries
	BPTR	pr_SegList		* Array of seg lists used by this process
	LONG	pr_StackSize	* Size of process stack in bytes
	APTR	pr_GlobVec		* Global vector for this process (BCPL)
	LONG	pr_TaskNum		* CLI task number of zero if not a CLI
	BPTR	pr_StackBase	* Ptr to high memory end of process stack
	LONG	pr_Result2		* Value of secondary result from last call
	BPTR	pr_CurrentDir	* Lock associated with current directory
	BPTR	pr_CIS		* Current CLI Input Stream
	BPTR	pr_COS		* Current CLI Output Stream
	APTR	pr_ConsoleTask	* Console handler process for current window
	APTR	pr_FileSystemTask	* File handler process for current drive
	BPTR	pr_CLI		* pointer to ConsoleLineInterpreter
	APTR	pr_ReturnAddr	* pointer to previous stack frame
	APTR	pr_PktWait		* Function to be called when awaiting msg
	APTR	pr_WindowPtr	* Window pointer for errors
	LABEL	pr_SIZEOF		* Process

* The long word address (BPTR) of this STRUCTure is returned by
* Open() and other routines that return a file.	 You need only worry
* about this STRUCT to do async io's via PutMsg() instead of
* standard file system calls

	STRUCTURE	FileHandle,0
	APTR	fh_Link		* pointer to EXEC message
	APTR	fh_Interactive	* Boolean; TRUE if interactive handle
	APTR	fh_Type		* Port to do PutMsg() to
	LONG	fh_Buf
	LONG	fh_Pos
	LONG	fh_End
	LONG	fh_Funcs
fh_Func1	EQU	fh_Funcs
	LONG	fh_Func2
	LONG	fh_Func3
	LONG	fh_Args
fh_Arg1	EQU	fh_Args
	LONG	fh_Arg2
	LABEL	fh_SIZEOF * FileHandle

* This is the extension to EXEC Messages used by DOS
	STRUCTURE	DosPacket,0
	APTR	dp_Link	  * pointer to EXEC message
	APTR	dp_Port	  * pointer to Reply port for the packet
*			  * Must be filled in each send.
	LONG	dp_Type	  * See ACTION_... below and
*			  * 'R' means Read, 'W' means Write to the file system
	LONG	dp_Res1	  * For file system calls this is the result
*			  * that would have been returned by the
*			  * function, e.g. Write ('W') returns actual
*			  * length written
	LONG	dp_Res2	  * For file system calls this is what would
*			  * have been returned by IoErr()
	LONG	dp_Arg1
*  Device packets common equivalents
dp_Action	EQU	dp_Type
dp_Status	EQU	dp_Res1
dp_Status2	EQU	dp_Res2
dp_BufAddr	EQU	dp_Arg1
	LONG	dp_Arg2
	LONG	dp_Arg3
	LONG	dp_Arg4
	LONG	dp_Arg5
	LONG	dp_Arg6
	LONG	dp_Arg7
	LABEL	dp_SIZEOF * DosPacket

* A Packet does not require the Message to before it in memory, but
* for convenience it is useful to associate the two.
* Also see the function init_std_pkt for initializing this STRUCTure

	STRUCTURE	StandardPacket,0
	STRUCT	sp_Msg,MN_SIZE
	STRUCT	sp_Pkt,dp_SIZEOF
	LABEL	sp_SIZEOF * StandardPacket


* Packet types
ACTION_NIL	EQU	0
ACTION_GET_BLOCK	EQU	2	;OBSOLETE
ACTION_SET_MAP	EQU	4
ACTION_DIE	EQU	5
ACTION_EVENT	EQU	6
ACTION_CURRENT_VOLUME	EQU	7
ACTION_LOCATE_OBJECT	EQU	8
ACTION_RENAME_DISK	EQU	9
ACTION_WRITE	EQU	'W'
ACTION_READ	EQU	'R'
ACTION_FREE_LOCK	EQU	15
ACTION_DELETE_OBJECT	EQU	16
ACTION_RENAME_OBJECT	EQU	17
ACTION_MORE_CACHE	EQU	18
ACTION_COPY_DIR	EQU	19
ACTION_WAIT_CHAR	EQU	20
ACTION_SET_PROTECT	EQU	21
ACTION_CREATE_DIR	EQU	22
ACTION_EXAMINE_OBJECT	EQU	23
ACTION_EXAMINE_NEXT	EQU	24
ACTION_DISK_INFO	EQU	25
ACTION_INFO	EQU	26
ACTION_FLUSH	EQU	27
ACTION_SET_COMMENT	EQU	28
ACTION_PARENT	EQU	29
ACTION_TIMER	EQU	30
ACTION_INHIBIT	EQU	31
ACTION_DISK_TYPE	EQU	32
ACTION_DISK_CHANGE	EQU	33
ACTION_SET_DATE	EQU	34

ACTION_SCREEN_MODE	EQU	994

ACTION_READ_RETURN	EQU	1001
ACTION_WRITE_RETURN	EQU	1002
ACTION_SEEK	EQU	1008
ACTION_FINDUPDATE	EQU	1004
ACTION_FINDINPUT	EQU	1005
ACTION_FINDOUTPUT	EQU	1006
ACTION_END	EQU	1007
ACTION_TRUNCATE	EQU	1022	/* fast file system only */
ACTION_WRITE_PROTECT	EQU	1023	/* fast file system only */

* DOS library node structure.
* This is the data at positive offsets from the library node.
* Negative offsets from the node is the jump table to DOS functions
* node = (STRUCT DosLibrary *) OpenLibrary( "dos.library" .. )

	STRUCTURE	DosLibrary,0
	STRUCT	dl_lib,LIB_SIZE
	APTR	dl_Root	     * Pointer to RootNode, described below
	APTR	dl_GV	     * Pointer to BCPL global vector
	LONG	dl_A2	     * Private register dump of DOS
	LONG	dl_A5
	LONG	dl_A6
	LABEL	dl_SIZEOF *	 DosLibrary

*

	STRUCTURE	RootNode,0
	BPTR	rn_TaskArray       * [0] is max number of CLI's
*			       * [1] is APTR to process id of CLI 1
*			       * [n] is APTR to process id of CLI n
	BPTR	rn_ConsoleSegment  * SegList for the CLI
	STRUCT	rn_Time,ds_SIZEOF  * Current time
	LONG	rn_RestartSeg      * SegList for the disk validator process
	BPTR	rn_Info	       * Pointer ot the Info structure
	BPTR	rn_FileHandlerSegment * code for file handler 
	LABEL	rn_SIZEOF * RootNode

	STRUCTURE	DosInfo,0
	BPTR	di_McName	       * Network name of this machine currently 0
	BPTR	di_DevInfo	       * Device List
	BPTR	di_Devices	       * Currently zero
	BPTR	di_Handlers	       * Currently zero
	APTR	di_NetHand	       * Network handler processid currently zero
	LABEL	di_SIZEOF * DosInfo

* DOS Processes started from the CLI via RUN or NEWCLI have this additional
* set to data associated with them

	STRUCTURE	CommandLineInterface,0
	LONG	cli_Result2	       * Value of IoErr from last command
	BSTR	cli_SetName	       * Name of current directory
	BPTR	cli_CommandDir      * Lock associated with command directory
	LONG	cli_ReturnCode      * Return code from last command
	BSTR	cli_CommandName     * Name of current command
	LONG	cli_FailLevel       * Fail level (set by FAILAT)
	BSTR	cli_Prompt	       * Current prompt (set by PROMPT)
	BPTR	cli_StandardInput   * Default (terminal) CLI input
	BPTR	cli_CurrentInput    * Current CLI input
	BSTR	cli_CommandFile     * Name of EXECUTE command file
	LONG	cli_Interactive     * Boolean True if prompts required
	LONG	cli_Background      * Boolean True if CLI created by RUN
	BPTR	cli_CurrentOutput   * Current CLI output
	LONG	cli_DefaultStack    * Stack size to be obtained in long words
	BPTR	cli_StandardOutput  * Default (terminal) CLI output
	BPTR	cli_Module	       * SegList of currently loaded command
	LABEL	cli_SIZEOF	       * CommandLineInterface

* This structure can take on different values depending on whether it is
* a device, an assigned directory, or a volume.	 Below is the structure
* reflecting volumes only.  Following that is the structure representing
* only devices. Following that is the unioned structure representing all
* the values
	
* structure representing a volume 

	STRUCTURE	DevList,0
	BPTR	dl_Next			; bptr to next device list
	LONG	dl_Type			; see DLT below
	APTR	dl_Task			; ptr to handler task
	BPTR	dl_Lock			; not for volumes
	STRUCT	dl_VolumeDate,ds_SIZEOF ; creation date
	BPTR	dl_LockList		; outstanding locks
	LONG	dl_DiskType		; 'DOS', etc
	LONG	dl_unused
	BSTR	dl_Name			; bptr to bcpl name
	LABEL	DevList_SIZEOF

* device structure (same as the DeviceNode structure in filehandler.i

	STRUCTURE	DevInfo,0
	BPTR	dvi_Next
	LONG	dvi_Type
	APTR	dvi_Task
	BPTR	dvi_Lock
	BSTR	dvi_Handler
	LONG	dvi_Stacksize
	LONG	dvi_Priority
	LONG	dvi_Startup
	BPTR	dvi_SegList
	BPTR	dvi_GlobVec
	BSTR	dvi_Name
	LABEL	dvi_SIZEOF

* combined structure for devices, assigned directories, volumes 

	STRUCTURE	DosList,0
	BPTR	dol_Next	     ; bptr to next device on lis
	LONG	dol_Type	     ; see DLT below
	APTR	dol_Task	     ; ptr to handler task
	BPTR	dol_Lock

	STRUCT	dol_VolumeDate,0	; creation date (UNION)
	BSTR	dol_Handler		; file name to load if seglist is null
	LONG	dol_StackSize		; stacksize to use when starting process
	LONG	dol_Priority		; task priority when starting process

	STRUCT	dol_LockList,0		; outstanding locks (UNION)
	ULONG	dol_Startup		; startup msg: FileSysStartupMsg
	; for disks

	STRUCT	dol_DiskType,0		; 'DOS', etc (UNION)
	BPTR	dol_SegList		; already loaded code for new task

	BPTR	dol_GlobVec		; BCPL global vector

	BSTR	dol_Name		; bptr to bcpl name
	LABEL	DosList_SIZEOF



* definitions for dl_Type
DLT_DEVICE	EQU	0
DLT_DIRECTORY	EQU	1
DLT_VOLUME	EQU	2


* a lock structure, as returned by Lock() or DupLock()
	STRUCTURE	FileLock,0
	BPTR	fl_Link			; bcpl pointer to next lock
	LONG	fl_Key			; disk block number
	LONG	fl_Access		; exclusive or shared
	APTR	fl_Task			; handler task's port
	BPTR	fl_Volume		; bptr to a DeviceList
	LABEL	fl_SIZEOF

	ENDC	; LIBRARIES_DOSEXTENS_I
