462 lines
15 KiB
OpenEdge ABL
462 lines
15 KiB
OpenEdge ABL
IFND DOS_DOSEXTENS_I
|
|
DOS_DOSEXTENS_I SET 1
|
|
**
|
|
** $Filename: dos/dosextens.i $
|
|
** $Release: 2.04 Includes, V37.4 $
|
|
** $Revision: 36.37 $
|
|
** $Date: 91/11/08 $
|
|
**
|
|
** DOS structures not needed for the casual AmigaDOS user
|
|
**
|
|
** (C) Copyright 1985-1991 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 EXEC_SEMAPHORES_I
|
|
INCLUDE "exec/semaphores.i"
|
|
ENDC
|
|
IFND DEVICES_TIMER_I
|
|
INCLUDE "devices/timer.i"
|
|
ENDC
|
|
|
|
IFND DOS_DOS_I
|
|
INCLUDE "dos/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 CommandLineInterface
|
|
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
|
|
|
|
* following definitions are new with 2.0
|
|
BPTR pr_HomeDir * Home directory of executing program
|
|
LONG pr_Flags * flags telling dos about process
|
|
APTR pr_ExitCode * code to call on exit of program or NULL
|
|
LONG pr_ExitData * Passed as an argument to pr_ExitCode
|
|
APTR pr_Arguments * Arguments passed to the process at start
|
|
STRUCT pr_LocalVars,MLH_SIZE * Local environment variables
|
|
APTR pr_ShellPrivate * for the use of the current shell
|
|
BPTR pr_CES * Error stream - if NULL, use pr_COS
|
|
LABEL pr_SIZEOF * Process
|
|
|
|
*
|
|
* Flags for pr_Flags
|
|
*
|
|
BITDEF PR,FREESEGLIST,0
|
|
BITDEF PR,FREECURRDIR,1
|
|
BITDEF PR,FREECLI,2
|
|
BITDEF PR,CLOSEINPUT,3
|
|
BITDEF PR,CLOSEOUTPUT,4
|
|
BITDEF PR,FREEARGS,5
|
|
|
|
* 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_STARTUP 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_SET_FILE_SIZE EQU 1022 ; fast file system only
|
|
ACTION_WRITE_PROTECT EQU 1023 ; fast file system only
|
|
|
|
* new 2.0 packets
|
|
ACTION_SAME_LOCK EQU 40
|
|
ACTION_CHANGE_SIGNAL EQU 995
|
|
ACTION_FORMAT EQU 1020
|
|
ACTION_MAKE_LINK EQU 1021
|
|
*
|
|
*
|
|
ACTION_READ_LINK EQU 1024
|
|
ACTION_FH_FROM_LOCK EQU 1026
|
|
ACTION_IS_FILESYSTEM EQU 1027
|
|
ACTION_CHANGE_MODE EQU 1028
|
|
*
|
|
ACTION_COPY_DIR_FH EQU 1030
|
|
ACTION_PARENT_FH EQU 1031
|
|
ACTION_EXAMINE_ALL EQU 1033
|
|
ACTION_EXAMINE_FH EQU 1034
|
|
|
|
ACTION_LOCK_RECORD EQU 2008
|
|
ACTION_FREE_RECORD EQU 2009
|
|
|
|
ACTION_ADD_NOTIFY EQU 4097
|
|
ACTION_REMOVE_NOTIFY EQU 4098
|
|
|
|
* Tell a file system to serialize the current volume. This is typically
|
|
* done by changing the creation date of the disk. This packet does not take
|
|
* any arguments. NOTE: be prepared to handle failure of this packet for
|
|
* V37 ROM filesystems.
|
|
|
|
ACTION_SERIALIZE_DISK EQU 4200
|
|
|
|
* A structure for holding error messages - stored as array with error == 0
|
|
* for the last entry.
|
|
|
|
STRUCTURE ErrorString,0
|
|
APTR estr_Nums
|
|
APTR estr_Strings
|
|
LABEL ErrorString_SIZEOF
|
|
|
|
* 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 * BCPL standard register values
|
|
LONG dl_A5
|
|
LONG dl_A6
|
|
APTR dl_Errors * PRIVATE pointer to array of error msgs
|
|
APTR dl_TimeReq * PRIVATE pointer to timer request
|
|
APTR dl_UtilityBase * PRIVATE pointer to utility library base
|
|
APTR dl_IntuitionBase * PRIVATE pointer to intuition library base
|
|
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 to the Info structure
|
|
BPTR rn_FileHandlerSegment * code for file handler
|
|
STRUCT rn_CliList,MLH_SIZE * new list of all CLI processes
|
|
* * the first cpl_Array is also rn_TaskArray
|
|
APTR rn_BootProc * private! ptr to msgport of boot fs
|
|
BPTR rn_ShellSegment * seglist for Shell (for NewShell)
|
|
LONG rn_Flags * dos flags
|
|
LABEL rn_SIZEOF * RootNode
|
|
|
|
BITDEF RN,WILDSTAR,24
|
|
BITDEF RN,PRIVATE1,1
|
|
|
|
* ONLY to be allocated by DOS!
|
|
STRUCTURE CliProcList,0
|
|
STRUCT cpl_Node,MLN_SIZE
|
|
LONG cpl_First * number of first entry in array
|
|
APTR cpl_Array * pointer to array of process msgport pointers
|
|
* * [0] is max number of CLI's in this entry (n)
|
|
* * [1] is APTR to process id of CLI cpl_First
|
|
* * [n] is APTR to process id of CLI cpl_First+n-1
|
|
LABEL cpl_SIZEOF
|
|
|
|
STRUCTURE DosInfo,0
|
|
BPTR di_McName * PRIVATE: system resident module list
|
|
di_ResList EQU di_McName
|
|
BPTR di_DevInfo * Device List
|
|
BPTR di_Devices * Currently zero
|
|
BPTR di_Handlers * Currently zero
|
|
APTR di_NetHand * Network handler processid currently zero
|
|
STRUCT di_DevLock,SS_SIZE * do NOT access directly!
|
|
STRUCT di_EntryLock,SS_SIZE * do NOT access directly!
|
|
STRUCT di_DeleteLock,SS_SIZE * do NOT access directly!
|
|
LABEL di_SIZEOF * DosInfo
|
|
|
|
* structure for the Dos resident list. Do NOT allocate these, use
|
|
* AddSegment(), and heed the warnings in the autodocs!
|
|
|
|
STRUCTURE Segment,0
|
|
BPTR seg_Next
|
|
LONG seg_UC
|
|
BPTR seg_Seg
|
|
STRUCT seg_Name,4 ; Actually the first 4 chars of BSTR name
|
|
LABEL seg_SIZEOF
|
|
|
|
CMD_SYSTEM EQU -1
|
|
CMD_INTERNAL EQU -2
|
|
CMD_DISABLED EQU -999
|
|
|
|
|
|
* 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 * Head of the path locklist
|
|
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)
|
|
STRUCT dol_AssignName,0 ; name for assign path (UNION)
|
|
BSTR dol_Handler ; file name to load if seglist is null
|
|
STRUCT dol_List,0 ; List of directories assigned (UNION)
|
|
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 ; assign
|
|
DLT_VOLUME EQU 2
|
|
DLT_LATE EQU 3 ; late-binding assign
|
|
DLT_NONBINDING EQU 4 ; non-binding assign (AssignPath)
|
|
DLT_PRIVATE EQU -1 ; for internal use only
|
|
|
|
* structure return by GetDeviceProc()
|
|
STRUCTURE DevProc,0
|
|
APTR dvp_Port ; struct MsgPort *
|
|
BPTR dvp_Lock
|
|
ULONG dvp_Flags
|
|
APTR dvp_DevNode ; struct DosList * - DON'T TOUCH OR USE!
|
|
LABEL dvp_SIZEOF
|
|
|
|
* definitions for dvp_Flags
|
|
BITDEF DVP,UNLOCK,0
|
|
BITDEF DVP,ASSIGN,1
|
|
|
|
* Flags to be passed to LockDosList(), etc
|
|
BITDEF LD,DEVICES,2
|
|
BITDEF LD,VOLUMES,3
|
|
BITDEF LD,ASSIGNS,4
|
|
BITDEF LD,ENTRY,5
|
|
BITDEF LD,DELETE,6
|
|
|
|
* You MUST specify one of LDF_READ or LDF_WRITE
|
|
BITDEF LD,READ,0
|
|
BITDEF LD,WRITE,1
|
|
|
|
* actually all but LDF_ENTRY (which is used for internal locking)
|
|
LDF_ALL EQU (LDF_DEVICES!LDF_VOLUMES!LDF_ASSIGNS)
|
|
|
|
* 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 DLT_VOLUME DosList entry
|
|
LABEL fl_SIZEOF
|
|
|
|
* error report types for ErrorReport()
|
|
REPORT_STREAM EQU 0 ; a stream
|
|
REPORT_TASK EQU 1 ; a process - unused
|
|
REPORT_LOCK EQU 2 ; a lock
|
|
REPORT_VOLUME EQU 3 ; a volume node
|
|
REPORT_INSERT EQU 4 ; please insert volume
|
|
|
|
* Special error codes for ErrorReport()
|
|
ABORT_DISK_ERROR EQU 296 ; Read/write error
|
|
ABORT_BUSY EQU 288 ; You MUST replace...
|
|
|
|
* types for initial packets to shells from run/newcli/execute/system.
|
|
* For shell-writers only
|
|
RUN_EXECUTE EQU -1
|
|
RUN_SYSTEM EQU -2
|
|
RUN_SYSTEM_ASYNCH EQU -3
|
|
|
|
* Types for fib_DirEntryType. NOTE that both USERDIR and ROOT are
|
|
* directories, and that directory/file checks should use <0 and >=0.
|
|
* This is not necessarily exhaustive! Some handlers may use other
|
|
* values as needed, though <0 and >=0 should remain as supported as
|
|
* possible.
|
|
ST_ROOT EQU 1
|
|
ST_USERDIR EQU 2
|
|
ST_SOFTLINK EQU 3 ; looks like dir, but may point to a file!
|
|
ST_LINKDIR EQU 4 ; hard link to dir
|
|
ST_FILE EQU -3 ; must be negative for FIB!
|
|
ST_LINKFILE EQU -4 ; hard link to file
|
|
ST_PIPEFILE EQU -5 ; for pipes that support ExamineFH
|
|
|
|
ENDC ; DOS_DOSEXTENS_I
|