home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 2 BBS / 02-BBS.zip / control.zip / RXMSGAPI.INF (.txt) < prev    next >
OS/2 Help File  |  1993-03-29  |  17KB  |  635 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. LICENSE terms ΓòÉΓòÉΓòÉ
  3.  
  4. SRI is copyright (Γòò) Colin Adams 1992,1993. 
  5.  
  6. SRI (Squish/Rexx Interface) may be used freely in a non-commercial envrionment. 
  7. If SRI is to be used in a commercial environment then a cheque for 10 pounds 
  8. sterling drawn on a UK bank (or 15 pounds sterling if via International Money 
  9. order, or the like) should be sent to: 
  10.  
  11.  Colin Adams
  12.  14 Colman Court
  13.  Preston
  14.  Lancashire
  15.  PR1 8DL
  16.  United Kingdom
  17.  
  18.  
  19. ΓòÉΓòÉΓòÉ 2. Introduction ΓòÉΓòÉΓòÉ
  20.  
  21. RXMSGAPI is a Rexx DLL to allow Rexx programmers to call functions within Scott 
  22. Dudley's MSGAPI.DLL. This enables the Rexx programmer to write applications to 
  23. manipulate FidoNet-style Squish and *.MSG message bases. 
  24.  
  25. Scott Dudley's MSGAPI.DOC document is essential supplemental reading. 
  26.  
  27.  
  28. ΓòÉΓòÉΓòÉ 3. Using the MSGAPI interface ΓòÉΓòÉΓòÉ
  29.  
  30.  1. Installation 
  31.  
  32.  2. Writing a Rexx exec that uses MSGAPI 
  33.  
  34.  
  35. ΓòÉΓòÉΓòÉ 3.1. Installation ΓòÉΓòÉΓòÉ
  36.  
  37.  1. Copy RXMSGAPI.DLL to a directory specified in your LIBPATH statement, in 
  38.     CONFIG.SYS . Do not rename the .DLL file. 
  39.  
  40.  2. Reboot OS/2. 
  41.  
  42.  3. Inspect the supplied test.cmd Rexx exec - suitably edited, also test2.cmd. 
  43.  
  44.  4. Write your own very first Rexx MSGAPI program. 
  45.  
  46.  
  47. ΓòÉΓòÉΓòÉ 3.2. Writing a Rexx exec that uses MSGAPI ΓòÉΓòÉΓòÉ
  48.  
  49.  1. Allocating the DLL 
  50.  
  51.  2. Freeing the DLL 
  52.  
  53.  
  54. ΓòÉΓòÉΓòÉ 3.2.1. Allocating the DLL ΓòÉΓòÉΓòÉ
  55.  
  56. In order to activate the MSGAPI interface, you must first make the DLL 
  57. available to your Rexx exec. As IBM do not document this very well (HELP 
  58. REX0115 will give you a clue), I will give complete instructions: 
  59.  
  60.  1. Register the DLL and name the command environment 
  61.  
  62.     The RXSUBCOM command must be used to perform this operation. All following 
  63.     examples assume a default environment of CMD (the OS/2 command processor). 
  64.  
  65.         /* Rexx exec using MSGAPI */
  66.         'RXSUBCOM Register MSGAPI RXMSGAPI RXMSGAPI'
  67.  
  68.     The first parameter to the Register function of RXSUBCOM, names the command 
  69.     environment you wish to use on the address command. In this case MSGAPI. 
  70.     You can change this to whatever you wish, but it is not recommended. 
  71.  
  72.  2. Load the DLL. 
  73.  
  74.         'RXSUBCOM Load MSGAPI RXMSGAPI'
  75.  
  76.  3. Commands can now be sent to the MSGAPI interface using address MSGAPI (or 
  77.     whatever you named it). 
  78.  
  79.  
  80. ΓòÉΓòÉΓòÉ 3.2.2. Freeing the DLL ΓòÉΓòÉΓòÉ
  81.  
  82. When you have finished using the interface, you can save storage by freeing it 
  83. up: 
  84.  
  85. address CMD 'rxsubcom drop msgapi'
  86.  
  87.  
  88. ΓòÉΓòÉΓòÉ 4. Reference ΓòÉΓòÉΓòÉ
  89.  
  90. Note:  All RXMSGAPI command names are case sensitive. For parameters that will 
  91. be passed to MSGAPI, consult MSGAPI.DOC . In particular, Rexx NAMES passed to 
  92. an API must be in UPPER CASE. 
  93.  
  94.  
  95. ΓòÉΓòÉΓòÉ 4.1. Return codes ΓòÉΓòÉΓòÉ
  96.  
  97. RXMSGAPI raises the FAILURE condition if an unknown command request is passed 
  98. to it - this represents a Rexx programmer error, and should be trapped during 
  99. development of your Rexx code. 
  100.  
  101. In all other error cases, RXMSGAPI raises the ERROR condition. It is a question 
  102. of programming style wether or not to trap this condition. 
  103.  
  104.  1. Parameter validation errors 
  105.  
  106.  2. Rexx Shared Variables interface return codes 
  107.  
  108.  3. API return codes 
  109.  
  110.  
  111. ΓòÉΓòÉΓòÉ 4.1.1. Parameter validation errors ΓòÉΓòÉΓòÉ
  112.  
  113. If the DLL detects a problem with the parameters passed to it (only rudimentary 
  114. checking is done - e.g. are the right number passed) it returns one of the 
  115. following codes in RC: 
  116.  
  117. -9991 
  118.           Error with first parameter 
  119.  
  120. -9992 
  121.           Error with second parameter 
  122.  
  123. -9993 
  124.           Error with third parameter 
  125.  
  126. -9994 
  127.           Error with fourth parameter 
  128. etc. 
  129.  
  130. If there is an error from the Rexx Shared Variables interface, then RXMSGAPI 
  131. returns -8880 minus the error code from the interface - (you have probably 
  132. specified the wrong variable name). 
  133.  
  134.  
  135. ΓòÉΓòÉΓòÉ 4.1.2. Rexx Shared Variables interace return codes ΓòÉΓòÉΓòÉ
  136.  
  137. RXSHV_OK   - 0 
  138.           The request was processed with out error (all flag bits are FALSE). 
  139.  
  140. RXSHV_NEWV  - 1 
  141.           The named variable was uninitialized. 
  142.  
  143. RXSHV_LVAR  - 2 
  144.           No more variables are available for an RXSHV_NEXTV operation. 
  145.  
  146. RXSHV_TRUNC - 4 
  147.           A variable value or variable name was truncated because the supplied 
  148.           RXSTRING was too small for the copied value. 
  149.  
  150. RXSHV_BADN  - 8 
  151.           The variable name specified in shvname was invalid for the requested 
  152.           operation. 
  153.  
  154. RXSHV_MEMFL - 16 
  155.           The REXX interpreter was unable to obtain the storage required to 
  156.           complete the request. 
  157.  
  158. RXSHV_BADF  - 128 
  159.           The shared variable request block contains an invalid function code. 
  160.  
  161.  
  162. ΓòÉΓòÉΓòÉ 4.1.3. API return codes ΓòÉΓòÉΓòÉ
  163.  
  164. If the API returns error-free, then RC is set to 0. 
  165.  
  166. Otherwise RC is set to a string of the form: 
  167.  
  168.  APIname returned error code number 
  169.  
  170.  
  171. ΓòÉΓòÉΓòÉ 4.2. OPEN_API ΓòÉΓòÉΓòÉ
  172.  
  173. address MSGAPI 'OPEN_API [default_zone [revision_level]]'
  174.  
  175. where: 
  176.  
  177. o revision_level requests which version of the MSG API you wish to request - 
  178.   omit for the default - 0. 
  179.  
  180.   Note:  Anything other than 0 may cause a general protection fault - it does 
  181.   here! 
  182.  
  183. o default_zone indicates a default fidonet zone - defaults to 2 if omitted 
  184.  
  185.  
  186. ΓòÉΓòÉΓòÉ 4.3. CLOSE_API ΓòÉΓòÉΓòÉ
  187.  
  188. address MSGAPI 'CLOSE_API'
  189.  
  190.  
  191. ΓòÉΓòÉΓòÉ 4.4. OPEN_AREA ΓòÉΓòÉΓòÉ
  192.  
  193. address MSGAPI 'OPEN_AREA' 'msg_area' 'msg_area_name' 'mode' 'type'
  194.  
  195. where: 
  196.  
  197. o msg_area is the NAME of a Rexx variable that will be set by OPEN_AREA. You 
  198.   then pass this name to the other MSGAPI calls (actually you can pass any 
  199.   variable name to the other MSGAPI calls, as long as the VALUE of the variable 
  200.   contains the value set by OPEN_AREA). 
  201.  
  202.  
  203.   msg_area_name is the name of a squish or *.msg area. This name should be a 
  204.   *.MSG directory name or a squish base name, as per squish.cfg. It is NOT the 
  205.   TAG name. 
  206.  
  207. o mode is the access mode for the area. Possible values are: 
  208.  
  209.    MSGAREA_NORMAL open fails if the area does not exist 
  210.    MSGAREA_CRIFNEC open will attempt to create the area if it does not exist. 
  211.                   Open will fail if it is unable to create the area. 
  212.    MSGAREA_CREATE open will attempt to create the area or truncate it to no 
  213.                   messages. 
  214.  
  215. o type is the type of message area. Possible values are: 
  216.  
  217.    SQUISH Squish format area 
  218.    SDM    *.MSG format area 
  219.    SDMECHO *.MSG format echomail area (1.MSG contains a highwatermark) 
  220.  
  221.  
  222. ΓòÉΓòÉΓòÉ 4.5. CLOSE_AREA ΓòÉΓòÉΓòÉ
  223.  
  224. address MSGAPI 'CLOSE_AREA' 'msg_area'
  225.  
  226. where: 
  227.  
  228. msg_area is the NAME of a Rexx variable. This variable should contain the value 
  229. set by an OPEN_AREA call. 
  230.  
  231.  
  232. ΓòÉΓòÉΓòÉ 4.6. OPEN_MSG ΓòÉΓòÉΓòÉ
  233.  
  234. address MSGAPI 'OPEN_MSG' 'msg_handle' 'msg_area' 'mode' 'message_number'
  235.  
  236. where: 
  237.  
  238. o msg_handle is the NAME of a Rexx variable. OPEN_MSG will set this and its 
  239.   value should be passed to other API functions. 
  240.  
  241. o msg_area is the NAME of a Rexx variable. This should contain a value obtained 
  242.   from OPEN_AREA. 
  243.  
  244. o mode is the access mode for the area. Possible values are: 
  245.  
  246.    MOPEN_CREATE create a NEW message. 
  247.    MOPEN_READ  open an existing message for READ ONLY. 
  248.    MOPEN_WRITE open an existing message for WRITE ONLY. 
  249.    MOPEN_RW    open an existing message for both reading and writing. 
  250.  
  251. o message_number is the number of the message. See MSGAPI.DOC for the meaning. 
  252.   For MOPEN_READ or MOPEN_RW you can also specify: 
  253.  
  254.    MSGNUM_CUR The current message 
  255.    MSGNUM_NEXT The next message 
  256.    MSGNUM_PREV The previous message. as per MSGAPI.DOC . 
  257.  
  258.  
  259. ΓòÉΓòÉΓòÉ 4.7. CLOSE_MSG ΓòÉΓòÉΓòÉ
  260.  
  261. address MSGAPI 'CLOSE_MSG' 'msg_var'
  262.  
  263. where: 
  264.  
  265. msg_var is the NAME of a Rexx variable. This variable should contain the value 
  266. set by an OPEN_MSG call. 
  267.  
  268.  
  269. ΓòÉΓòÉΓòÉ 4.8. READ_MSG ΓòÉΓòÉΓòÉ
  270.  
  271. address MSGAPI 'READ_MSG' 'msg_handle' 'xmsg_stem' 'offset' 'bytes' 'text_var' 'control_bytes' 'control_var'
  272.  
  273. Where: 
  274.  
  275. o msg_handle is the NAME of a Rexx variable. This variable should contain the 
  276.   value set be an OPEN_MSG call. 
  277.  
  278. o xmsg_stem is the NAME of a Rexx stem variable. The name MUST contain a 
  279.   terminating period, or the name MUST be the literal: NULL. If the name is 
  280.   NULL then no message header information will be returned. Otherwise READ_MSG 
  281.   will set the following variables: (assume an xmsg_stem value of XMSG.) 
  282.  
  283.    - XMSG.attr 
  284.  
  285.    - XMSG.from 
  286.  
  287.    - XMSG.to 
  288.  
  289.    - XMSG.subj 
  290.  
  291.    - XMSG.orig 
  292.  
  293.    - XMSG.dest 
  294.  
  295.    - XMSG.date_written 
  296.  
  297.    - XMSG.date_arrived 
  298.  
  299.    - XMSG.utc_ofs 
  300.  
  301.    - XMSG.replyto 
  302.  
  303.    - XMSG.replies.[1..10] 
  304.  
  305.    - XMSG.ftsc_date 
  306.  
  307.   See MSGAPI header files for the meaning/values of these fields. 
  308.  
  309. o offset should be a decimal number specifying an offset into the body of the 
  310.   message at which to start reading text. Specify 0 for the begining of the 
  311.   message body. 
  312.  
  313. o bytes specifies the maximum number of bytes to read from the message body. 
  314.   Specify 0 if you do not wish to read the message text. 
  315.  
  316. o text_var should be the NAME of a Rexx variable to hold the read message text. 
  317.   Specify the literal name NULL if you do not wish to read the message body. 
  318.  
  319. o control_bytes specifies the maximum number of bytes of control information to 
  320.   be read. Specify 0 if you do not wish to read the control information. 
  321.  
  322. o control_var should be the NAME of a Rexx variable to hold the control 
  323.   information read. Specify the literal NULL if you do not wish to read the 
  324.   control information. 
  325.  
  326. RC is set to the number of bytes transferred. 
  327.  
  328.  
  329. ΓòÉΓòÉΓòÉ 4.9. WRITE_MSG ΓòÉΓòÉΓòÉ
  330.  
  331. address MSGAPI 'WRITE_MSG' 'msg_handle' 'append' 'xmsg_stem' 'text' 'textlen' 'totlen' 'control_len' 'control_var'
  332.  
  333. Where: 
  334.  
  335. o msg_handle is the NAME of a Rexx variable. This variable should contain the 
  336.   value set be an OPEN_MSG call. 
  337.  
  338. o append 
  339.  
  340.   Set to 1 to append message text. Otherwise set to 0. 
  341.  
  342. o xmsg_stem is the NAME of a Rexx stem variable. The name MUST contain a 
  343.   terminating period, or the name MUST be the literal: NULL. If the name is 
  344.   NULL then no message header information will be set. Otherwise WRITE_MSG will 
  345.   set the message header from the following variables: (assume an xmsg_stem 
  346.   value of XMSG.) 
  347.  
  348.    - XMSG.attr 
  349.  
  350.      This must be numeric. 
  351.  
  352.    - XMSG.from 
  353.  
  354.      This should be the name of the user from whom the message is coming. 
  355.  
  356.    - XMSG.to 
  357.  
  358.      This should be the name of the user to whom the message is going. 
  359.  
  360.    - XMSG.subj 
  361.  
  362.      This should be the subject of the message. 
  363.  
  364.    - XMSG.orig 
  365.  
  366.      This should be the originating address of the message in the form: 
  367.  
  368.           zone:net/node.point
  369.  
  370.      ALL components should be specified. @fidonet.org must NOT be added. 
  371.  
  372.    - XMSG.dest 
  373.  
  374.      This should be the destination address. Form as per Originating Address. 
  375.  
  376.    - XMSG.date_written 
  377.  
  378.      This should be the date and time when the message is written in UTC. The 
  379.      form MUST be: 
  380.  
  381.           dd/mm/yyyy:hh:mm:ss
  382.  
  383.    - XMSG.date_arrived 
  384.  
  385.      This should be the date the message has arrived. Set it to the date the 
  386.      message is written. 
  387.  
  388.    - XMSG.utc_ofs 
  389.  
  390.      The number of minutes past UTC in your local area. 
  391.  
  392.    - XMSG.replyto 
  393.  
  394.      The Unique Message-id of a message to which this is a reply. 
  395.  
  396.    - XMSG.replies.[1..10] 
  397.  
  398.      Stems .1 through .10 must be set to the Unique message-ids which are 
  399.      replies to this message. Therefore set all to 0. 
  400.  
  401.    - XMSG.ftsc_date 
  402.  
  403.      Set this string to the FTSC date and time of the message. 
  404.  
  405. o text is the NAME of a Rexx variable. This variable should contain the text of 
  406.   the message. Specify the literal NULL if no message text is to be written. 
  407.  
  408. o textlen is the length of the text of the message. Set to 0 if no message text 
  409.   is to be written. 
  410.  
  411. o totlen is the TOTAL length of the text of the message. Of special use for 
  412.   writing multi-pass messages. Set to 0 if no message text is to be written. 
  413.  
  414. o control_len is the length of the control information. Set to 0 if no control 
  415.   information is to be written. 
  416.  
  417. o control_var is the NAME of a Rexx variable. This variable should contain the 
  418.   control information for the message. Specify the literal NULL if no control 
  419.   information is to be written. 
  420.  
  421.  
  422. ΓòÉΓòÉΓòÉ 4.10. KILL_MSG ΓòÉΓòÉΓòÉ
  423.  
  424. address MSGAPI 'KILL_MSG' 'msg_area' 'message_number'
  425.  
  426. Where: 
  427.  
  428. o msg_area is the NAME of a Rexx variable. This should contain a value obtained 
  429.   from OPEN_AREA. 
  430.  
  431. o message_number is the number of the message to kill. 
  432.  
  433.  
  434. ΓòÉΓòÉΓòÉ 4.11. LOCK ΓòÉΓòÉΓòÉ
  435.  
  436. address MSGAPI 'LOCK' 'msg_area'
  437.  
  438. Where: 
  439.  
  440. o msg_area is the NAME of a Rexx variable. This should contain a value obtained 
  441.   from OPEN_AREA. 
  442.  
  443.  
  444. ΓòÉΓòÉΓòÉ 4.12. UNLOCK ΓòÉΓòÉΓòÉ
  445.  
  446. address MSGAPI 'UNLOCK' 'msg_area'
  447.  
  448. Where: 
  449.  
  450. o msg_area is the NAME of a Rexx variable. This should contain a value obtained 
  451.   from OPEN_AREA. 
  452.  
  453.  
  454. ΓòÉΓòÉΓòÉ 4.13. GET_CURRENT_POSITION ΓòÉΓòÉΓòÉ
  455.  
  456. address MSGAPI 'GET_CURRENT_POSITION' 'message_handle' 'position'
  457.  
  458. Where: 
  459.  
  460. o message_handle is the NAME of a Rexx variable. This should contain a value 
  461.   obtained from OPEN_MSG. 
  462.  
  463. o position is the NAME of a Rexx variable. This will be set to the current 
  464.   position within the body of the message, if RC is set to zero. 
  465.  
  466.  
  467. ΓòÉΓòÉΓòÉ 4.14. MSGN_TO_UID ΓòÉΓòÉΓòÉ
  468.  
  469. address MSGAPI 'MSGN_TO_UID' 'msg_area' 'msgnum'
  470.  
  471. Where: 
  472.  
  473. o msg_area is the NAME of a Rexx variable. This should contain a value obtained 
  474.   from OPEN_AREA. 
  475.  
  476. o msgnum is the NAME of a Rexx variable. This should contain the message number 
  477.   to be converted. If RC is set to zero, then conversion is successful. 
  478.  
  479.  
  480. ΓòÉΓòÉΓòÉ 4.15. UID_TO_MSGN ΓòÉΓòÉΓòÉ
  481.  
  482. address MSGAPI 'UID_TO_MSGN' 'msg_area' 'msgnum' 'type'
  483.  
  484. Where: 
  485.  
  486. o msg_area is the NAME of a Rexx variable. This should contain a value obtained 
  487.   from OPEN_AREA. 
  488.  
  489. o msgnum is the NAME of a Rexx variable. This should contain the message number 
  490.   to be converted. If RC is set to zero, then conversion is successful. 
  491.  
  492. o type is an ASCII literal specifying the type of conversion to be performed: 
  493.  
  494.    EXACT     Returns the message number if it exists, or 0. 
  495.  
  496.    PREV      Returns the message number if it exists, or the previous message. 
  497.  
  498.    NEXT      Returns the message number if it exists, or the next message. 
  499.  
  500.  
  501. ΓòÉΓòÉΓòÉ 4.16. GET_HIGH_WATER ΓòÉΓòÉΓòÉ
  502.  
  503. address MSGAPI 'GET_HIGH_WATER' 'msg_area' 'mark'
  504.  
  505. Where: 
  506.  
  507. o msg_area is the NAME of a Rexx variable. This should contain a value obtained 
  508.   from OPEN_AREA. 
  509.  
  510. o mark is the NAME of a Rexx variable. This will be set to the high-water-mark 
  511.   if RC is zero. 
  512.  
  513.  
  514. ΓòÉΓòÉΓòÉ 4.17. SET_HIGH_WATER ΓòÉΓòÉΓòÉ
  515.  
  516. address MSGAPI 'SET_HIGH_WATER' 'msg_area' 'mark'
  517.  
  518. Where: 
  519.  
  520. o msg_area is the NAME of a Rexx variable. This should contain a value obtained 
  521.   from OPEN_AREA. 
  522.  
  523. o mark is the NAME of a Rexx variable. This should contain the high-water-mark 
  524.   to be set. 
  525.  
  526.  
  527. ΓòÉΓòÉΓòÉ 4.18. GET_TEXT_LENGTH ΓòÉΓòÉΓòÉ
  528.  
  529. address MSGAPI 'GET_TEXT_LENGTH' 'message_handle' 'length'
  530.  
  531. Where: 
  532.  
  533. o message_handle is the NAME of a Rexx variable. This should contain a value 
  534.   obtained from OPEN_MSG. 
  535.  
  536. o length is the NAME of a Rexx variable. This will be set to the length of the 
  537.   body of the message, if RC is set to zero. 
  538.  
  539.  
  540. ΓòÉΓòÉΓòÉ 4.19. GET_CONTROL_LENGTH ΓòÉΓòÉΓòÉ
  541.  
  542. address MSGAPI 'GET_CONTROL_LENGTH' 'message_handle' 'length'
  543.  
  544. Where: 
  545.  
  546. o message_handle is the NAME of a Rexx variable. This should contain a value 
  547.   obtained from OPEN_MSG. 
  548.  
  549. o length is the NAME of a Rexx variable. This will be set to the length of the 
  550.   control information of the message, if RC is set to zero. 
  551.  
  552.  
  553. ΓòÉΓòÉΓòÉ 4.20. GET_CURRENT_MSG ΓòÉΓòÉΓòÉ
  554.  
  555. address MSGAPI 'GET_CURRENT_MSG' 'msg_area' 'msg_num'
  556.  
  557. Where: 
  558.  
  559. o msg_area is the NAME of a Rexx variable. This should contain a value obtained 
  560.   from OPEN_AREA. 
  561.  
  562. o msg_num is the NAME of a Rexx variable. This will be set to the message 
  563.   number if RC is set to zero. 
  564.  
  565.  
  566. ΓòÉΓòÉΓòÉ 4.21. GET_NUMBER_MSGS ΓòÉΓòÉΓòÉ
  567.  
  568. address MSGAPI 'GET_NUMBER_MSGS' 'msg_area' 'number'
  569.  
  570. Where: 
  571.  
  572. o msg_area is the NAME of a Rexx variable. This should contain a value obtained 
  573.   from OPEN_AREA. 
  574.  
  575. o number is the NAME of a Rexx variable. This will be set to the number of 
  576.   messages in the area, if RC is set to zero. 
  577.  
  578.  
  579. ΓòÉΓòÉΓòÉ 4.22. GET_HIGH_MSG ΓòÉΓòÉΓòÉ
  580.  
  581. address MSGAPI 'GET_HIGH_MSG' 'msg_area' 'number'
  582.  
  583. Where: 
  584.  
  585. o msg_area is the NAME of a Rexx variable. This should contain a value obtained 
  586.   from OPEN_AREA. 
  587.  
  588. o number is the NAME of a Rexx variable. This will be set to the number of the 
  589.   highest message in the area, if RC is set to zero. 
  590.  
  591.  
  592. ΓòÉΓòÉΓòÉ 4.23. VALIDATE ΓòÉΓòÉΓòÉ
  593.  
  594. address MSGAPI 'VALIDATE' 'type' 'msg_area_name'
  595.  
  596. Where: 
  597.  
  598.  
  599.   msg_area_name is the name of a squish or *.msg area. This name should be a 
  600.   *.MSG directory name or a squish base name, as per squish.cfg. It is NOT the 
  601.   TAG name. 
  602.  
  603. o type is the type of message area. Possible values are: 
  604.  
  605.    SQUISH Squish format area 
  606.    SDM    *.MSG format area 
  607.    SDMECHO *.MSG format echomail area (1.MSG contains a highwatermark) 
  608.  
  609. RC will be set to 0 if the area exists and is valid. 
  610.  
  611.  
  612. ΓòÉΓòÉΓòÉ 4.24. VALID_MESSAGE_HANDLE ΓòÉΓòÉΓòÉ
  613.  
  614. address MSGAPI 'VALID_MESSAGE_HANDLE' 'message_handle'
  615.  
  616. Where: 
  617.  
  618. o message_handle is the NAME of a Rexx variable. This should contain a value 
  619.   obtained from OPEN_MSG. 
  620.  
  621. RC will be set to 0 if the handle is valid. 
  622.  
  623.  
  624. ΓòÉΓòÉΓòÉ 4.25. VALID_AREA_HANDLE ΓòÉΓòÉΓòÉ
  625.  
  626. address MSGAPI 'VALID_AREA_HANDLE' 'msg_area'
  627.  
  628. Where: 
  629.  
  630. o msg_area is the NAME of a Rexx variable. This should contain a value obtained 
  631.   from OPEN_AREA. 
  632.  
  633. RC will be set to 0 if the handle is valid.