home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 4 / FreshFish_May-June1994.bin / bbs / cbm / nduk-v37.lha / V37 / include / dos / dosextens.h < prev    next >
C/C++ Source or Header  |  1991-11-27  |  17KB  |  493 lines

  1. #ifndef DOS_DOSEXTENS_H
  2. #define DOS_DOSEXTENS_H
  3. /*
  4. **    $Filename: dos/dosextens.h $
  5. **    $Release: 2.04 Includes, V37.4 $
  6. **    $Revision: 36.38 $
  7. **    $Date: 91/11/08 $
  8. **
  9. **    DOS structures not needed for the casual AmigaDOS user
  10. **
  11. **    (C) Copyright 1985-1991 Commodore-Amiga, Inc.
  12. **        All Rights Reserved
  13. */
  14.  
  15. #ifndef EXEC_TASKS_H
  16. #include "exec/tasks.h"
  17. #endif
  18. #ifndef EXEC_PORTS_H
  19. #include "exec/ports.h"
  20. #endif
  21. #ifndef EXEC_LIBRARIES_H
  22. #include "exec/libraries.h"
  23. #endif
  24. #ifndef EXEC_SEMAPHORES_H
  25. #include "exec/semaphores.h"
  26. #endif
  27. #ifndef DEVICES_TIMER_H
  28. #include "devices/timer.h"
  29. #endif
  30.  
  31. #ifndef DOS_DOS_H
  32. #include "dos/dos.h"
  33. #endif
  34.  
  35. /* All DOS processes have this structure */
  36. /* Create and Device Proc returns pointer to the MsgPort in this structure */
  37. /* dev_proc = (struct Process *) (DeviceProc(..) - sizeof(struct Task)); */
  38.  
  39. struct Process {
  40.     struct  Task    pr_Task;
  41.     struct  MsgPort pr_MsgPort; /* This is BPTR address from DOS functions  */
  42.     WORD    pr_Pad;        /* Remaining variables on 4 byte boundaries */
  43.     BPTR    pr_SegList;        /* Array of seg lists used by this process  */
  44.     LONG    pr_StackSize;    /* Size of process stack in bytes        */
  45.     APTR    pr_GlobVec;        /* Global vector for this process (BCPL)    */
  46.     LONG    pr_TaskNum;        /* CLI task number of zero if not a CLI        */
  47.     BPTR    pr_StackBase;    /* Ptr to high memory end of process stack  */
  48.     LONG    pr_Result2;        /* Value of secondary result from last call */
  49.     BPTR    pr_CurrentDir;    /* Lock associated with current directory   */
  50.     BPTR    pr_CIS;        /* Current CLI Input Stream            */
  51.     BPTR    pr_COS;        /* Current CLI Output Stream            */
  52.     APTR    pr_ConsoleTask;    /* Console handler process for current window*/
  53.     APTR    pr_FileSystemTask;    /* File handler process for current drive   */
  54.     BPTR    pr_CLI;        /* pointer to CommandLineInterface        */
  55.     APTR    pr_ReturnAddr;    /* pointer to previous stack frame        */
  56.     APTR    pr_PktWait;        /* Function to be called when awaiting msg  */
  57.     APTR    pr_WindowPtr;    /* Window for error printing            */
  58.  
  59.     /* following definitions are new with 2.0 */
  60.     BPTR    pr_HomeDir;        /* Home directory of executing program        */
  61.     LONG    pr_Flags;        /* flags telling dos about process        */
  62.     void    (*pr_ExitCode)();    /* code to call on exit of program or NULL  */
  63.     LONG    pr_ExitData;    /* Passed as an argument to pr_ExitCode.    */
  64.     UBYTE   *pr_Arguments;    /* Arguments passed to the process at start */
  65.     struct MinList pr_LocalVars; /* Local environment variables            */
  66.     ULONG   pr_ShellPrivate;    /* for the use of the current shell        */
  67.     BPTR    pr_CES;        /* Error stream - if NULL, use pr_COS        */
  68. };  /* Process */
  69.  
  70. /*
  71.  * Flags for pr_Flags
  72.  */
  73. #define    PRB_FREESEGLIST        0
  74. #define    PRF_FREESEGLIST        1
  75. #define    PRB_FREECURRDIR        1
  76. #define    PRF_FREECURRDIR        2
  77. #define    PRB_FREECLI        2
  78. #define    PRF_FREECLI        4
  79. #define    PRB_CLOSEINPUT        3
  80. #define    PRF_CLOSEINPUT        8
  81. #define    PRB_CLOSEOUTPUT        4
  82. #define    PRF_CLOSEOUTPUT        16
  83. #define    PRB_FREEARGS        5
  84. #define    PRF_FREEARGS        32
  85.  
  86. /* The long word address (BPTR) of this structure is returned by
  87.  * Open() and other routines that return a file.  You need only worry
  88.  * about this struct to do async io's via PutMsg() instead of
  89.  * standard file system calls */
  90.  
  91. struct FileHandle {
  92.    struct Message *fh_Link;     /* EXEC message          */
  93.    struct MsgPort *fh_Port;     /* Reply port for the packet */
  94.    struct MsgPort *fh_Type;     /* Port to do PutMsg() to
  95.                   * Address is negative if a plain file */
  96.    LONG fh_Buf;
  97.    LONG fh_Pos;
  98.    LONG fh_End;
  99.    LONG fh_Funcs;
  100. #define fh_Func1 fh_Funcs
  101.    LONG fh_Func2;
  102.    LONG fh_Func3;
  103.    LONG fh_Args;
  104. #define fh_Arg1 fh_Args
  105.    LONG fh_Arg2;
  106. }; /* FileHandle */
  107.  
  108. /* This is the extension to EXEC Messages used by DOS */
  109.  
  110. struct DosPacket {
  111.    struct Message *dp_Link;     /* EXEC message          */
  112.    struct MsgPort *dp_Port;     /* Reply port for the packet */
  113.                  /* Must be filled in each send. */
  114.    LONG dp_Type;         /* See ACTION_... below and
  115.                   * 'R' means Read, 'W' means Write to the
  116.                   * file system */
  117.    LONG dp_Res1;         /* For file system calls this is the result
  118.                   * that would have been returned by the
  119.                   * function, e.g. Write ('W') returns actual
  120.                   * length written */
  121.    LONG dp_Res2;         /* For file system calls this is what would
  122.                   * have been returned by IoErr() */
  123. /*  Device packets common equivalents */
  124. #define dp_Action  dp_Type
  125. #define dp_Status  dp_Res1
  126. #define dp_Status2 dp_Res2
  127. #define dp_BufAddr dp_Arg1
  128.    LONG dp_Arg1;
  129.    LONG dp_Arg2;
  130.    LONG dp_Arg3;
  131.    LONG dp_Arg4;
  132.    LONG dp_Arg5;
  133.    LONG dp_Arg6;
  134.    LONG dp_Arg7;
  135. }; /* DosPacket */
  136.  
  137. /* A Packet does not require the Message to be before it in memory, but
  138.  * for convenience it is useful to associate the two.
  139.  * Also see the function init_std_pkt for initializing this structure */
  140.  
  141. struct StandardPacket {
  142.    struct Message   sp_Msg;
  143.    struct DosPacket sp_Pkt;
  144. }; /* StandardPacket */
  145.  
  146. /* Packet types */
  147. #define ACTION_NIL        0
  148. #define ACTION_STARTUP        0
  149. #define ACTION_GET_BLOCK    2    /* OBSOLETE */
  150. #define ACTION_SET_MAP        4
  151. #define ACTION_DIE        5
  152. #define ACTION_EVENT        6
  153. #define ACTION_CURRENT_VOLUME    7
  154. #define ACTION_LOCATE_OBJECT    8
  155. #define ACTION_RENAME_DISK    9
  156. #define ACTION_WRITE        'W'
  157. #define ACTION_READ        'R'
  158. #define ACTION_FREE_LOCK    15
  159. #define ACTION_DELETE_OBJECT    16
  160. #define ACTION_RENAME_OBJECT    17
  161. #define ACTION_MORE_CACHE    18
  162. #define ACTION_COPY_DIR        19
  163. #define ACTION_WAIT_CHAR    20
  164. #define ACTION_SET_PROTECT    21
  165. #define ACTION_CREATE_DIR    22
  166. #define ACTION_EXAMINE_OBJECT    23
  167. #define ACTION_EXAMINE_NEXT    24
  168. #define ACTION_DISK_INFO    25
  169. #define ACTION_INFO        26
  170. #define ACTION_FLUSH        27
  171. #define ACTION_SET_COMMENT    28
  172. #define ACTION_PARENT        29
  173. #define ACTION_TIMER        30
  174. #define ACTION_INHIBIT        31
  175. #define ACTION_DISK_TYPE    32
  176. #define ACTION_DISK_CHANGE    33
  177. #define ACTION_SET_DATE        34
  178.  
  179. #define ACTION_SCREEN_MODE    994
  180.  
  181. #define ACTION_READ_RETURN    1001
  182. #define ACTION_WRITE_RETURN    1002
  183. #define ACTION_SEEK        1008
  184. #define ACTION_FINDUPDATE    1004
  185. #define ACTION_FINDINPUT    1005
  186. #define ACTION_FINDOUTPUT    1006
  187. #define ACTION_END        1007
  188. #define ACTION_SET_FILE_SIZE    1022    /* fast file system only in 1.3 */
  189. #define ACTION_WRITE_PROTECT    1023    /* fast file system only in 1.3 */
  190.  
  191. /* new 2.0 packets */
  192. #define ACTION_SAME_LOCK    40
  193. #define ACTION_CHANGE_SIGNAL    995
  194. #define ACTION_FORMAT        1020
  195. #define ACTION_MAKE_LINK    1021
  196. /**/
  197. /**/
  198. #define ACTION_READ_LINK    1024
  199. #define ACTION_FH_FROM_LOCK    1026
  200. #define ACTION_IS_FILESYSTEM    1027
  201. #define ACTION_CHANGE_MODE    1028
  202. /**/
  203. #define ACTION_COPY_DIR_FH    1030
  204. #define ACTION_PARENT_FH    1031
  205. #define ACTION_EXAMINE_ALL    1033
  206. #define ACTION_EXAMINE_FH    1034
  207.  
  208. #define ACTION_LOCK_RECORD    2008
  209. #define ACTION_FREE_RECORD    2009
  210.  
  211. #define ACTION_ADD_NOTIFY    4097
  212. #define ACTION_REMOVE_NOTIFY    4098
  213.  
  214. /* Tell a file system to serialize the current volume. This is typically
  215.  * done by changing the creation date of the disk. This packet does not take
  216.  * any arguments.  NOTE: be prepared to handle failure of this packet for
  217.  * V37 ROM filesystems.
  218.  */
  219. #define    ACTION_SERIALIZE_DISK    4200
  220.  
  221. /*
  222.  * A structure for holding error messages - stored as array with error == 0
  223.  * for the last entry.
  224.  */
  225. struct ErrorString {
  226.     LONG  *estr_Nums;
  227.     UBYTE *estr_Strings;
  228. };
  229.  
  230. /* DOS library node structure.
  231.  * This is the data at positive offsets from the library node.
  232.  * Negative offsets from the node is the jump table to DOS functions
  233.  * node = (struct DosLibrary *) OpenLibrary( "dos.library" .. )         */
  234.  
  235. struct DosLibrary {
  236.     struct Library dl_lib;
  237.     struct RootNode *dl_Root; /* Pointer to RootNode, described below */
  238.     APTR    dl_GV;          /* Pointer to BCPL global vector          */
  239.     LONG    dl_A2;          /* BCPL standard register values          */
  240.     LONG    dl_A5;
  241.     LONG    dl_A6;
  242.     struct ErrorString *dl_Errors;      /* PRIVATE pointer to array of error msgs */
  243.     struct timerequest *dl_TimeReq;      /* PRIVATE pointer to timer request */
  244.     struct Library     *dl_UtilityBase;   /* PRIVATE ptr to utility library */
  245.     struct Library     *dl_IntuitionBase; /* PRIVATE ptr to intuition library */
  246. };  /*    DosLibrary */
  247.  
  248. /*                   */
  249.  
  250. struct RootNode {
  251.     BPTR    rn_TaskArray;         /* [0] is max number of CLI's
  252.