home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / som30tk.zip / som30os2.zip / include / somcorba.h < prev    next >
C/C++ Source or Header  |  1996-12-24  |  7KB  |  228 lines

  1. /* @(#) 1.9 src/somk/somcorba.h, somk.api, som3.0 9/4/96 13:39:07 [12/24/96 07:40:22] */
  2.  
  3. /*
  4.  * 96F8647, 96F8648, 96F8850 (C) Copyright IBM Corp. 1992, 1994
  5.  * All Rights Reserved
  6.  * Licensed Materials - Property of IBM
  7.  */
  8.  
  9. /*
  10.  *    SOMCORBA.H
  11.  *    Typedefs, structs, & prototypes in support of CORBA extensions
  12.  *    to the SOM run-time
  13.  */
  14.  
  15. #ifndef SOMCorba_h
  16. #define SOMCorba_h
  17. #include <string.h>  /* needed for memset, used below */
  18.  
  19. #ifdef CORBA_FUNCTION_NAMES
  20. #define CORBAObject Object
  21. #endif
  22.  
  23. /* in SOM, a CORBA object is a SOM object */
  24. typedef SOMObject CORBAObject;
  25.  
  26. /* CORBA 5.7, p.89 */
  27. typedef unsigned char octet;
  28. typedef char *string;
  29. #ifndef SOM_BOOLEAN /* legacy kernel source defines this */
  30.     #define SOM_BOOLEAN
  31.     typedef unsigned char boolean;
  32. #endif /* SOM_BOOLEAN */
  33.  
  34.  
  35.  
  36. /* CORBA 7.5.1, p. 129 */
  37. typedef string Identifier;
  38.  
  39. /* CORBA 4.13, p. 80 */
  40. /*
  41.  * Generated SOM usage bindings for IDL enums start at 1, but
  42.  * somcorba.h is not generated, and the original SOM 2.0 somcorba.h
  43.  * used C enum typedefs to define the exception_type and
  44.  * completion_status enumerations.  As a result, to maintain backwards
  45.  * binary compatibility, the mapping for these enums starts at 0
  46.  * (which is also the mapping specified by CORBA 2.0).
  47.  *
  48.  * The additional value enum_name_MAX is needed to ensure that all
  49.  * compilers will allocate 4 bytes for these enums.  This technique
  50.  * for representing IDL enums is used in the CORBA 2.0 * C++ mappings.
  51.  */
  52. typedef enum exception_type {NO_EXCEPTION, USER_EXCEPTION, SYSTEM_EXCEPTION,
  53.     exception_type_MAX = 2147483647       /* ensure mapped as 4 bytes */
  54. } exception_type;
  55. typedef enum completion_status {YES, NO, MAYBE,
  56.     completion_status_MAX = 2147483647    /* ensure mapped as 4 bytes */
  57. } completion_status;
  58.  
  59. typedef struct StExcep {
  60.     unsigned long minor;
  61.     completion_status completed;
  62. } StExcep;
  63.  
  64. typedef struct Environment {
  65.     exception_type             _major;
  66.     struct {
  67.         char *                 _exception_name;
  68.         void *                 _params;
  69.     } exception;
  70.     void *                     _somdAnchor;
  71. } Environment;
  72.  
  73. /* CORBA 7.6.1, p.139 plus 5.7, p.89 enum Data Type Mapping */
  74. typedef unsigned long TCKind;
  75.   #define TypeCode_tk_null      1
  76.   #define TypeCode_tk_void      2
  77.   #define TypeCode_tk_short     3
  78.   #define TypeCode_tk_long      4
  79.   #define TypeCode_tk_ushort    5
  80.   #define TypeCode_tk_ulong     6
  81.   #define TypeCode_tk_float     7
  82.   #define TypeCode_tk_double    8
  83.   #define TypeCode_tk_boolean   9
  84.   #define TypeCode_tk_char      10
  85.   #define TypeCode_tk_octet     11
  86.   #define TypeCode_tk_any       12
  87.   #define TypeCode_tk_TypeCode  13
  88.   #define TypeCode_tk_Principal 14
  89.   #define TypeCode_tk_objref    15
  90.   #define TypeCode_tk_struct    16
  91.   #define TypeCode_tk_union     17
  92.   #define TypeCode_tk_enum      18
  93.   #define TypeCode_tk_string    19
  94.   #define TypeCode_tk_sequence  20
  95.   #define TypeCode_tk_array     21
  96.  
  97.   #define TypeCode_tk_pointer   101 /* SOM extension */
  98.   #define TypeCode_tk_self      102 /* SOM extension */
  99.   #define TypeCode_tk_foreign   103 /* SOM extension */
  100.  
  101. /* Short forms of tk_<x> enumerators */
  102.  
  103.   #define tk_null       TypeCode_tk_null
  104.   #define tk_void       TypeCode_tk_void
  105.   #define tk_short      TypeCode_tk_short
  106.   #define tk_long       TypeCode_tk_long
  107.   #define tk_ushort     TypeCode_tk_ushort
  108.   #define tk_ulong      TypeCode_tk_ulong
  109.   #define tk_float      TypeCode_tk_float
  110.   #define tk_double     TypeCode_tk_double
  111.   #define tk_boolean    TypeCode_tk_boolean
  112.   #define tk_char       TypeCode_tk_char
  113.   #define tk_octet      TypeCode_tk_octet
  114.   #define tk_any        TypeCode_tk_any
  115.   #define tk_TypeCode   TypeCode_tk_TypeCode
  116.   #define tk_Principal  TypeCode_tk_Principal
  117.   #define tk_objref     TypeCode_tk_objref
  118.   #define tk_struct     TypeCode_tk_struct
  119.   #define tk_union      TypeCode_tk_union
  120.   #define tk_enum       TypeCode_tk_enum
  121.   #define tk_string     TypeCode_tk_string
  122.   #define tk_sequence   TypeCode_tk_sequence
  123.   #define tk_array      TypeCode_tk_array
  124.   #define tk_pointer    TypeCode_tk_pointer
  125.   #define tk_self       TypeCode_tk_self
  126.   #define tk_foreign    TypeCode_tk_foreign
  127.  
  128. #ifndef SOM_TYPECODE
  129.   #define SOM_TYPECODE
  130.   typedef void * TypeCode;
  131. #endif /* SOM_TYPECODE */
  132.  
  133. /* CORBA 5.7, p.89 */
  134. typedef struct any {
  135.     TypeCode _type;
  136.     void   * _value;
  137.     } any;
  138.  
  139. /* Convenience macros for sequences */
  140. #define sequence(type) _IDL_SEQUENCE_ ## type
  141. #define SOM_SEQUENCE_NAME(name,type)\
  142.     struct name {\
  143.         unsigned long _maximum;\
  144.         unsigned long _length;\
  145.         type     *    _buffer;\
  146.     }
  147. #define SOM_SEQUENCE(type)\
  148.     struct {\
  149.         unsigned long _maximum;\
  150.         unsigned long _length;\
  151.         type     *    _buffer;\
  152.     }
  153.  
  154. #define SOM_SEQUENCE_TYPEDEF(type) typedef SOM_SEQUENCE(type) sequence(type)
  155. #define SOM_SEQUENCE_TYPEDEF_NAME(type, name) typedef SOM_SEQUENCE(type) name
  156.  
  157. /* per CORBA 5.10, p.91 */
  158. #ifndef _IDL_SEQUENCE_void_defined
  159. #define _IDL_SEQUENCE_void_defined
  160. SOM_SEQUENCE_TYPEDEF (void);
  161. #endif /* _IDL_SEQUENCE_void_defined */
  162.  
  163. /* SOM extensions for sequence manipulation */
  164. #define GENERIC_SEQUENCE        sequence(void)
  165. #define sequenceNew(type,max)   (*(sequence(type) *)tcSequenceNew(TC_##type,max))
  166. /* Note that sequenceNew macro assumes that a TypeCode constant of the  */
  167. /* form TC_xxx exists for any type xxx used as an argument              */
  168. #define sequenceElement(s,elem) ((s)._buffer[elem])
  169. #define sequenceLength(s)       ((s)._length)
  170. #define sequenceMaximum(s)      ((s)._maximum)
  171.  
  172. SOMEXTERN char * SOMLINK somExceptionId    (Environment *ev);
  173. SOMEXTERN void * SOMLINK somExceptionValue (Environment *ev);
  174. SOMEXTERN void   SOMLINK somExceptionFree  (Environment *ev);
  175. SOMEXTERN void   SOMLINK somSetException   (Environment *ev,
  176.     exception_type major, char *exception_name, void *params);
  177. SOMEXTERN Environment * SOMLINK somGetGlobalEnvironment (void);
  178.  
  179. /* Exception function names per CORBA 5.19, p.99 */
  180. #define exception_id    somExceptionId
  181. #define exception_value somExceptionValue
  182. #define exception_free  somExceptionFree
  183.  
  184. #ifndef    TRUE
  185. #define    TRUE 1
  186. #endif  /* TRUE */
  187. #ifndef    FALSE
  188. #define    FALSE 0
  189. #endif  /* FALSE */
  190.  
  191. #define SOM_InterfaceRepository\
  192.     (__get_somInterfaceRepository(SOMClassMgrObject))
  193.  
  194. /*  Convenience macros for manipulating environment structures
  195.  *
  196.  *  SOM_CreateLocalEnvironment returns a pointer to an Environment.
  197.  *  The other 3 macros all expect a single argument that is also
  198.  *  a pointer to an Environment.  Use the create/destroy forms for
  199.  *  a dynamic local environment and the init/uninit forms for a stack-based
  200.  *  local environment.
  201.  *
  202.  *  For example
  203.  *
  204.  *      Environment *ev;
  205.  *      ev = SOM_CreateLocalEnvironment ();
  206.  *      ... Use ev in methods
  207.  *      SOM_DestroyLocalEnvironment (ev);
  208.  *
  209.  *  or
  210.  *
  211.  *      Environment ev;
  212.  *      SOM_InitEnvironment (&ev);
  213.  *      ... Use &ev in methods
  214.  *      SOM_UninitEnvironment (&ev);
  215.  */
  216. #define SOM_CreateLocalEnvironment()\
  217.     ((Environment *) SOMCalloc (1, sizeof (Environment)))
  218. #define SOM_DestroyLocalEnvironment(ev)\
  219.     (somExceptionFree ((ev)), (somGetGlobalEnvironment() == (ev)) ?\
  220.         (void) 0 : SOMFree ((ev)))
  221. #define SOM_InitEnvironment(ev)\
  222.     ((somGetGlobalEnvironment() == (ev)) ?\
  223.         (void *) NULL : memset (((char *)((ev))), 0, sizeof (Environment)))
  224. #define SOM_UninitEnvironment(ev)\
  225.     (somExceptionFree ((ev)))
  226.  
  227. #endif /* SOMCorba_h */
  228.