home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / opus / v5 / opussdk / amigaguide / dopus / ipc.h < prev    next >
C/C++ Source or Header  |  1977-12-31  |  5KB  |  110 lines

  1. @DATABASE "dopus/ipc.h"
  2. @MASTER   "opussdk:include/dopus/ipc.h"
  3. @REMARK   (c) Dr Greg Perry and Jonathan Potter, GPSoftware 1996
  4. @REMARK   This file was initially created by ADtoHT 2.1 on 07-Sep-96 18:20:14
  5. @REMARK   ADtoHT is © 1993-1995 Christian Stieber
  6.  
  7. @NODE MAIN "dopus/ipc.h"
  8. @TOC "DopusSDK/MAIN"
  9.  
  10. @{"dopus/ipc.h" LINK File}
  11.  
  12.  
  13. @{b}Structures@{ub}
  14.  
  15. @{"_IPC" LINK "dopus/ipc.h/File" 24}
  16.  
  17.  
  18. @{b}Typedefs@{ub}
  19.  
  20. @{"IPCData" LINK "dopus/ipc.h/File" 24}  @{"IPCMessage" LINK "dopus/ipc.h/File" 11}
  21.  
  22.  
  23. @{b}#defines@{ub}
  24.  
  25. @{"IPCDATA()" LINK "dopus/ipc.h/File" 36}      @{"IPCF_GETPATH" LINK "dopus/ipc.h/File" 40}  @{"IPCM_STACK()" LINK "dopus/ipc.h/File" 41}   @{"IPCSIG_HIDE" LINK "dopus/ipc.h/File" 64}
  26. @{"IPCSIG_QUIT" LINK "dopus/ipc.h/File" 66}    @{"IPCSIG_SHOW" LINK "dopus/ipc.h/File" 65}   @{"REPLY_NO_PORT" LINK "dopus/ipc.h/File" 20}  @{"REPLY_NO_PORT_IPC" LINK "dopus/ipc.h/File" 21}
  27. @{"SET_IPCDATA()" LINK "dopus/ipc.h/File" 37}  
  28.  
  29. @ENDNODE
  30. @NODE File "dopus/ipc.h"
  31. #ifndef _DOPUS_IPC
  32. #define _DOPUS_IPC
  33.  
  34. /*****************************************************************************
  35.  
  36.  Inter-process communication
  37.  
  38.  *****************************************************************************/
  39.  
  40. // IPC message
  41. typedef struct
  42.         struct Message  msg;                    // Exec message
  43.         ULONG           command;                // Message command
  44.         ULONG           flags;                  // Message flags
  45.         APTR            data;                   // Message data
  46.         APTR            data_free;              // Data to be FreeVec()ed automatically
  47.         @{"struct _IPC" LINK File 24}     *sender;                // Sender IPC
  48. } IPCMessage;
  49.  
  50. #define REPLY_NO_PORT           (struct MsgPort *)-1    // Sync msg, no port supplied
  51. #define REPLY_NO_PORT_IPC       (struct MsgPort *)-2    // Sync msg from a non-IPC process
  52.  
  53. // IPC process
  54. typedef struct _IPC {
  55.         struct MinNode          node;
  56.         struct Process          *proc;          // Process pointer
  57.         @{"IPCMessage" LINK File 11}              startup_msg;    // Startup message
  58.         struct MsgPort          *command_port;  // Port to send commands to
  59.         @{"struct ListLock" LINK "dopus/lists.h/File" 63}         *list;          // List we're a member of
  60.         APTR                    userdata;
  61.         APTR                    memory;         // Memory
  62.         struct MsgPort          *reply_port;    // Port for replies
  63.         ULONG                   flags;          // Flags
  64. } IPCData;
  65.  
  66. #define IPCDATA(ipc)            ((APTR)ipc->userdata)
  67. #define SET_IPCDATA(ipc,data)   ipc->userdata=(APTR)data
  68.  
  69. // Used in the stack paramter for IPC_Launch
  70. #define IPCF_GETPATH            (1<<31)         // Want copy of path list
  71. #define IPCM_STACK(s)           (s&0xffffff)    // Mask out stack value
  72.  
  73. // Pre-defined commands
  74. enum {
  75.         IPC_COMMAND_BASE=0x8000000,
  76.         IPC_STARTUP,                            // Startup command
  77.         IPC_ABORT,                              // Abort!
  78.         IPC_QUIT,                               // Quit process
  79.         IPC_ACTIVATE,                           // Activate process
  80.         IPC_HELLO,                              // Something saying hello
  81.         IPC_GOODBYE,                            // Something saying goodbye
  82.         IPC_HIDE,                               // Process, hide thyself
  83.         IPC_SHOW,                               // Tell process to reveal itself
  84.         IPC_RESET,                              // Process should reset
  85.         IPC_HELP,                               // Help!
  86.         IPC_NEW,                                // Create something new
  87.         IPC_GOT_GOODBYE,                        // Got goodbye from something
  88.         IPC_IDENTIFY,                           // Identify yourself
  89.         IPC_PRIORITY,                           // Change your priority to this
  90.         IPC_REMOVE,                             // Remove yourself
  91. };
  92.  
  93. // Pre-defined signals
  94. #define IPCSIG_HIDE             SIGBREAKF_CTRL_D
  95. #define IPCSIG_SHOW             SIGBREAKF_CTRL_E
  96. #define IPCSIG_QUIT             SIGBREAKF_CTRL_F
  97.  
  98.  
  99. ULONG IPC_Command(@{"IPCData" LINK File 24} *,ULONG,ULONG,APTR,APTR,struct MsgPort *);
  100. @{"IPCData" LINK File 24} *IPC_FindProc(@{"struct ListLock" LINK "dopus/lists.h/File" 63} *,char *,BOOL,ULONG);
  101. void IPC_Flush(@{"IPCData" LINK File 24} *);
  102. void IPC_Free(@{"IPCData" LINK File 24} *);
  103. long IPC_Launch(@{"struct ListLock" LINK "dopus/lists.h/File" 63} *,IPCData **,char *,ULONG,ULONG,ULONG,struct Library *);
  104. void IPC_ListCommand(@{"struct ListLock" LINK "dopus/lists.h/File" 63} *,ULONG,ULONG,ULONG,BOOL);
  105. @{"IPCData" LINK File 24} *IPC_ProcStartup(ULONG *,ULONG (*__asm)(register __a0 @{"IPCData" LINK File 24} *,register __a1 APTR));
  106. void IPC_Reply(@{"IPCMessage" LINK File 11} *);
  107.  
  108. #endif
  109. @ENDNODE
  110.