home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / mod201j.zip / modula2.exe / os2api / dosnmpip.def < prev    next >
Text File  |  1994-05-03  |  9KB  |  234 lines

  1. DEFINITION MODULE DOSNMPIPES;
  2.  
  3. (************************************************************************
  4.   OS/2 2.0 interface for named pipe support.
  5.  
  6.   Copyright (c) 1992 by Juergen Neuhoff
  7. *************************************************************************)
  8.  
  9. (*$XL+       Modula-2 language extensions: '_' allowed for symbol names *)
  10. (*$CDECL+    C-style procedures                                         *)
  11. (*$A         default alignment for record fields                        *)
  12.  
  13. IMPORT SYSTEM;
  14. FROM   OS2DEF     IMPORT TYPEPREFIX, APIRET, LHANDLE, HSEM;
  15.  
  16. TYPE
  17.   HPIPE        = LHANDLE;
  18.   PHPIPE       = POINTER TO HPIPE;
  19.   AVAILDATA    = RECORD
  20.     CASE         : TYPEPREFIX OF
  21.     | TRUE       :
  22.       cbpipe     : CARDINAL;   (* bytes left in the pipe *)
  23.       cbmessage  : CARDINAL;   (* bytes left in the current message *)
  24.     | FALSE      :
  25.       Pipe       : CARDINAL;   (* bytes left in the pipe *)
  26.       Message    : CARDINAL;   (* bytes left in the current message *)
  27.     END;         END;
  28.   PAVAILDATA   = POINTER TO AVAILDATA;
  29.   PIPEINFO     = RECORD
  30.     CASE         : TYPEPREFIX OF
  31.     | TRUE       :
  32.       cbOut      : CARDINAL;             (* length of outgoing I/O buffer *)
  33.       cbIn       : CARDINAL;             (* length of incoming I/O buffer *)
  34.       cbMaxInst  : SHORTCARD;            (* maximum number of instances   *)
  35.       cbCurInst  : SHORTCARD;            (* current number of instances   *)
  36.       cbName     : SHORTCARD;            (* length of pipe name           *)
  37.       szName     : ARRAY [0..0] OF CHAR; (* start of name                 *)
  38.     | FALSE      :
  39.       OutLen     : CARDINAL;             (* length of outgoing I/O buffer *)
  40.       InLen      : CARDINAL;             (* length of incoming I/O buffer *)
  41.       MaxInst    : SHORTCARD;            (* maximum number of instances   *)
  42.       CurInst    : SHORTCARD;            (* current number of instances   *)
  43.       NameLen    : SHORTCARD;            (* length of pipe name           *)
  44.       Name       : ARRAY [0..0] OF CHAR; (* start of name                 *)
  45.     END;         END;
  46.   PPIPEINFO    = POINTER TO PIPEINFO;
  47.   PIPESEMSTATE = RECORD
  48.     CASE         : TYPEPREFIX OF
  49.     | TRUE       :
  50.       fStatus    : SHORTCARD;  (* type of record, 0 = EOI, 1 = read ok, *)
  51.                                (* 2 = write ok, 3 = pipe closed         *)
  52.       fFlag      : SHORTCARD;  (* additional info, 01 = waiting thread  *)
  53.       usKey      : CARDINAL;   (* user's key value                      *)
  54.       usAvail    : CARDINAL;   (* available data/space if status = 1/2  *)
  55.     | FALSE      :
  56.       Status     : SHORTCARD;  (* type of record, 0 = EOI, 1 = read ok, *)
  57.                                (* 2 = write ok, 3 = pipe closed         *)
  58.       Flag       : SHORTCARD;  (* additional info, 01 = waiting thread  *)
  59.       Key        : CARDINAL;   (* user's key value                      *)
  60.       Avail      : CARDINAL;   (* available data/space if status = 1/2  *)
  61.     END;         END;
  62.   PPIPESEMSTATE = POINTER TO PIPESEMSTATE;
  63.  
  64. CONST
  65.   NP_INDEFINITE_WAIT    = -1;
  66.   NP_DEFAULT_WAIT       =  0;
  67.  
  68. CONST (* DosPeekNmPipe() pipe states *)
  69.   NP_STATE_DISCONNECTED = 0001H;
  70.   NP_STATE_LISTENING    = 0002H;
  71.   NP_STATE_CONNECTED    = 0003H;
  72.   NP_STATE_CLOSING      = 0004H;
  73.  
  74. CONST(* DosCreateNPipe open modes *)
  75.   NP_ACCESS_INBOUND     = 0000H;
  76.   NP_ACCESS_OUTBOUND    = 0001H;
  77.   NP_ACCESS_DUPLEX      = 0002H;
  78.   NP_INHERIT            = 0000H;
  79.   NP_NOINHERIT          = 0080H;
  80.   NP_WRITEBEHIND        = 0000H;
  81.   NP_NOWRITEBEHIND      = 4000H;
  82.  
  83. CONST (* DosCreateNPipe and DosQueryNPHState state *)
  84.   NP_READMODE_BYTE       = 0000H;
  85.   NP_READMODE_MESSAGE    = 0100H;
  86.   NP_TYPE_BYTE           = 0000H;
  87.   NP_TYPE_MESSAGE        = 0400H;
  88.   NP_END_CLIENT          = 0000H;
  89.   NP_END_SERVER          = 4000H;
  90.   NP_WAIT                = 0000H;
  91.   NP_NOWAIT              = 8000H;
  92.   NP_UNLIMITED_INSTANCES = 00FFH;
  93.  
  94. PROCEDURE DosCallNPipe
  95. ( FileName               : ARRAY OF CHAR;
  96.   Buffer                 : ARRAY OF SYSTEM.BYTE;
  97.   BufferLen              : LONGCARD;
  98.   VAR OutBuffer          : ARRAY OF SYSTEM.BYTE;
  99.   OutBufferLen           : LONGCARD;
  100.   VAR BytesOut           : LONGCARD;
  101.   TimeOut                : LONGCARD
  102. )                        : APIRET;
  103.  
  104. PROCEDURE DosConnectNPipe
  105. ( PipeHandle             : HPIPE
  106. )                        : APIRET;
  107.  
  108. PROCEDURE DosDisConnectNPipe
  109. ( PipeHandle             : HPIPE
  110. )                        : APIRET;
  111.  
  112. PROCEDURE DosCreateNPipe
  113. ( FileName               : ARRAY OF CHAR;
  114.   VAR PipeHandle         : HPIPE;
  115.   OpenMode               : LONGCARD;
  116.   PipeMode               : LONGCARD;
  117.   OutBufSize             : LONGCARD;
  118.   InBufSize              : LONGCARD;
  119.   TimeOut                : LONGCARD
  120. )                        : APIRET;
  121.  
  122. PROCEDURE DosPeekNPipe
  123. ( PipeHandle             : HPIPE;
  124.   VAR Buffer             : ARRAY OF SYSTEM.BYTE;
  125.   BufferLen              : LONGCARD;
  126.   VAR BytesRead          : LONGCARD;
  127.   VAR BytesAvail         : AVAILDATA;
  128.   VAR PipeState          : LONGCARD
  129. )                        : APIRET;
  130.  
  131. PROCEDURE DosQueryNPHState
  132. ( PipeHandle             : HPIPE;
  133.   VAR PipeHandleState    : LONGCARD
  134. )                        : APIRET;
  135.  
  136. PROCEDURE DosQueryNPipeInfo
  137. ( PipeHandle             : HPIPE;
  138.   InfoLevel              : LONGCARD;
  139.   VAR InfoBuf            : ARRAY OF SYSTEM.BYTE;
  140.   InfoBufSize            : LONGCARD
  141. )                        : APIRET;
  142.  
  143. PROCEDURE DosQueryNPipeSemState
  144. ( SemHandle              : HSEM;
  145.   VAR InfoBuf            : PIPESEMSTATE;
  146.   InfoBufSize            : LONGCARD
  147. )                        : APIRET;
  148.  
  149. PROCEDURE DosRawReadNPipe
  150. ( PipeName               : ARRAY OF CHAR;
  151.   BufferLen              : LONGCARD;
  152.   VAR BytesRead          : LONGCARD;
  153.   VAR Buffer             : ARRAY OF SYSTEM.BYTE
  154. )                        : APIRET;
  155.  
  156. PROCEDURE DosRawWriteNPipe
  157. ( PipeName               : ARRAY OF CHAR;
  158.   BufferLen              : LONGCARD
  159. )                        : APIRET;
  160.  
  161. PROCEDURE DosSetNPHState
  162. ( PipeHandle             : HPIPE;
  163.   PipeHandleState        : LONGCARD
  164. )                        : APIRET;
  165.  
  166. PROCEDURE DosSetNPipeSem
  167. ( PipeHandle             : HPIPE;
  168.   SemHandle              : HSEM;
  169.   KeyHandle              : LONGCARD
  170. )                        : APIRET;
  171.  
  172. PROCEDURE DosTransactNPipe
  173. ( PipeHandle             : HPIPE;
  174.   VAR OutBuffer          : ARRAY OF SYSTEM.BYTE;
  175.   OutBufferLen           : LONGCARD;
  176.   VAR InBuffer           : ARRAY OF SYSTEM.BYTE;
  177.   InBufferLen            : LONGCARD;
  178.   VAR BytesRead          : LONGCARD
  179. )                        : APIRET;
  180.  
  181. PROCEDURE DosWaitNPipe
  182. ( FileName               : ARRAY OF CHAR;
  183.   TimeOut                : LONGCARD
  184. )                        : APIRET;
  185.  
  186. CONST (* values in PIPESEMSTATE.Status *)
  187.   NPSS_EOI               = 0;     (* End Of Information    *)
  188.   NPSS_RDATA             = 1;     (* read data available   *)
  189.   NPSS_WSPACE            = 2;     (* write space available *)
  190.   NPSS_CLOSE             = 3;     (* pipe in CLOSING state *)
  191.  
  192. CONST (* values in npss_flag *)
  193.   NPSS_WAIT              = 01H;  (* waiting thread on end of pipe *)
  194.  
  195. CONST (* defined bits in pipe mode *)
  196.   NP_NBLK                = 8000H; (* non-blocking read/write *)
  197.   NP_SERVER              = 4000H; (* set if server end       *)
  198.   NP_WMESG               = 0400H; (* write messages          *)
  199.   NP_RMESG               = 0100H; (* read as messages        *)
  200.   NP_ICOUNT              = 00FFH; (* instance count field    *)
  201.  
  202. CONST
  203.   (*      Named pipes may be in one of several states depending on the actions
  204.    *      that have been taken on it by the server end and client end.  The
  205.    *      following state/action table summarizes the valid state transitions:
  206.    *
  207.    *      Current state           Action                  Next state
  208.    *
  209.    *       <none>             server DosMakeNmPipe        DISCONNECTED
  210.    *       DISCONNECTED       server connect              LISTENING
  211.    *       LISTENING          client open                 CONNECTED
  212.    *       CONNECTED          server disconn              DISCONNECTED
  213.    *       CONNECTED          client close                CLOSING
  214.    *       CLOSING            server disconn              DISCONNECTED
  215.    *       CONNECTED          server close                CLOSING
  216.    *       <any other>        server close                <pipe deallocated>
  217.    *
  218.    *      If a server disconnects his end of the pipe, the client end will enter a
  219.    *      special state in which any future operations (except close) on the file
  220.    *      descriptor associated with the pipe will return an error.
  221.    *)
  222.  
  223.   (*
  224.    *      Values for named pipe state
  225.    *)
  226.  
  227.    NP_DISCONNECTED    =  1;        (* after pipe creation or Disconnect *)
  228.    NP_LISTENING       =  2;        (* after DosNmPipeConnect            *)
  229.    NP_CONNECTED       =  3;        (* after Client open                 *)
  230.    NP_CLOSING         =  4;        (* after Client or Server close      *)
  231.  
  232.  
  233. END DOSNMPIPES.
  234.