Annotation of 43BSD/contrib/xns/xnslib/courier.h, revision 1.1.1.1

1.1       root        1: /* $Header: courier.h,v 2.0 85/11/21 07:22:05 jqj Exp $ */
                      2: /*
                      3:  $Log: courier.h,v $
                      4:  * Revision 2.0  85/11/21  07:22:05  jqj
                      5:  * 4.3BSD standard release
                      6:  * 
                      7:  * Revision 1.3  85/10/23  16:43:30  root
                      8:  * Probably correct versions of basic conversion operators for the Gould.
                      9:  * 
                     10:  * Revision 1.2  85/10/21  12:49:15  root
                     11:  * Gould version:  definitions for MoveLong, etc. (the MoveLong routine is in misc.c)
                     12:  * 
                     13:  * Revision 1.2  85/10/17  16:46:55  jqj
                     14:  * first Gould version: definitions for MoveLong etc.
                     15:  * 
                     16:  * Revision 1.5  85/05/23  06:18:06  jqj
                     17:  * Public Beta-test version, released 24 May 1985
                     18:  * 
                     19:  * Revision 1.3  85/03/11  16:36:54  jqj
                     20:  * Public alpha-test version, released 11 March 1985
                     21:  * 
                     22:  * Revision 1.2  85/01/27  07:37:18  jqj
                     23:  * finished but undebugged version
                     24:  * 
                     25:  */
                     26: 
                     27: #ifndef COURIERVERSION
                     28: /*
                     29:  * the version of Courier we support
                     30:  */
                     31: #define COURIERVERSION 3
                     32: 
                     33: /*
                     34:  * Predefined Courier types.
                     35:  */
                     36: typedef char           Boolean;
                     37: typedef unsigned short Cardinal;
                     38: typedef unsigned long  LongCardinal;
                     39: typedef short          Integer;
                     40: typedef long           LongInteger;
                     41: typedef char           *String;
                     42: typedef unsigned short Unspecified;
                     43: typedef unsigned long  LongUnspecified;
                     44: typedef int            NilRecord;
                     45: 
                     46: 
                     47: /*
                     48:  * Low-level byte moving, with byte-swapping.
                     49:  * Use these definitions for VAX and other low-enders.
                     50:  */
                     51: #if vax
                     52: #define externalize_Boolean(p, buf)    (*(short*)(buf) = *((char*)(p))<<8, 1)
                     53: #define internalize_Boolean(p, buf)    (*(char*)(p) = *((char*)(buf)+1), 1)
                     54: #define MoveShort(a, b)        (*(char*)(b) = *((char*)(a)+1),\
                     55:                         *((char*)(b)+1) = *(char*)(a),1)
                     56: #define MoveLong(a, b) (*(char*)(b) = *((char*)(a)+3),\
                     57:                         *((char*)(b)+1) = *((char*)(a)+2),\
                     58:                         *((char*)(b)+2) = *((char*)(a)+1),\
                     59:                         *((char*)(b)+3) = *(char*)(a), 2)
                     60: #endif
                     61: 
                     62: /*
                     63:  * Low-level byte moving, without byte-swapping.
                     64:  * Use these definitions for SUN and other high-enders.
                     65:  */
                     66: #if sun
                     67: #define externalize_Boolean(p, buf)  (*(Unspecified*)(buf) = 1&*(char*)(p), 1)
                     68: #define internalize_Boolean(p, buf)  (*(char*)(p) = 1&*(Unspecified*)(buf), 1)
                     69: #define MoveShort(a, b)        (*(short *)(b) = *(short *)(a),1)
                     70: #define MoveLong(a, b) (*(long *)(b) = *(long *)(a),2)
                     71: #endif
                     72: 
                     73: /*
                     74:  * Low-level byte moving, without byte-swapping.
                     75:  * Use these definitions for sel and other high-enders that require
                     76:  * longword alignment.
                     77:  */
                     78: #if sel
                     79: #define externalize_Boolean(p, buf)  (*(Unspecified*)(buf) = 1&*(char*)(p), 1)
                     80: #define internalize_Boolean(p, buf)  (*(p) = 1&*(Unspecified*)(buf), 1)
                     81: #define MoveShort(a, b)        (*(short *)(b) = *(short *)(a),1)
                     82: int MoveLong();
                     83: #endif
                     84: 
                     85: /*
                     86:  * sizeof_Foo(p) is a function that returns the externalized size of
                     87:  * the variable specified as argument (assumed to be of type Foo).
                     88:  * clear_Foo(p) is a function that deallocates any components of Foo.
                     89:  * externalize_Foo translates a variable from C form to external
                     90:  * serialized form.
                     91:  * internalize_Foo translates a variable from external serializedform 
                     92:  * to internal C form
                     93:  */
                     94: #define sizeof_NilRecord(p)            0
                     95: #define clear_NilRecord(p)
                     96: #define externalize_NilRecord(p, buf)          0
                     97: #define internalize_NilRecord(p, buf)          0
                     98: 
                     99: #define sizeof_Boolean(p)              1
                    100: #define clear_Boolean(p)
                    101: 
                    102: #define sizeof_Cardinal(p)             1
                    103: #define clear_Cardinal(p)
                    104: #define externalize_Cardinal(p, buf)           MoveShort(p, buf)
                    105: #define internalize_Cardinal(p, buf)           MoveShort(buf, p)
                    106: 
                    107: #define sizeof_LongCardinal(p)         2
                    108: #define clear_LongCardinal(p)
                    109: #define externalize_LongCardinal(p, buf)       MoveLong(p, buf)
                    110: #define internalize_LongCardinal(p, buf)       MoveLong(buf, p)
                    111: 
                    112: #define sizeof_Integer(p)              1
                    113: #define clear_Integer(p)
                    114: #define externalize_Integer(p, buf)            MoveShort(p, buf)
                    115: #define internalize_Integer(p, buf)            MoveShort(buf, p)
                    116: 
                    117: #define sizeof_LongInteger(p)          2
                    118: #define clear_LongInteger(p)
                    119: #define externalize_LongInteger(p, buf)                MoveLong(p, buf)
                    120: #define internalize_LongInteger(p, buf)                MoveLong(buf, p)
                    121: 
                    122: #define sizeof_Unspecified(p)          1
                    123: #define clear_Unspecified(p)
                    124: #define externalize_Unspecified(p, buf)                MoveShort(p, buf)
                    125: #define internalize_Unspecified(p, buf)                MoveShort(buf, p)
                    126: 
                    127: #define sizeof_LongUnspecified(p)      2
                    128: #define clear_LongUnspecified(p)
                    129: #define externalize_LongUnspecified(p, buf)    MoveLong(p, buf)
                    130: #define internalize_LongUnspecified(p, buf)    MoveLong(buf, p)
                    131: 
                    132: 
                    133: /* 
                    134:  * SPP stream types used by Courier
                    135:  */
                    136: #define SPPSST_RPC 0
                    137: #define SPPSST_BDT 1
                    138: #define SPPSST_END 254
                    139: #define SPPSST_ENDREPLY 255
                    140: 
                    141: /*
                    142:  * the following should be in xn.h or spp.h
                    143:  */
                    144: #define IDPPORT_COURIER 5
                    145: #ifndef MAXWORDS
                    146: #define MAXWORDS 267
                    147: #endif
                    148: #ifndef SPPMAXDATA
                    149: #define SPPMAXDATA (MAXWORDS*2)
                    150: #endif
                    151: 
                    152: /*
                    153:  * For streams
                    154:  */
                    155: typedef enum {
                    156:        nextSegment = 0,
                    157:        lastSegment = 1
                    158: } StreamEnumerator;
                    159: #define sizeof_StreamEnumerator sizeof_enumeration
                    160: #define clear_StreamEnumerator clear_enumeration
                    161: #define externalize_StreamEnumerator externalize_enumeration
                    162: #define internalize_StreamEnumerator internalize_enumeration
                    163: 
                    164: 
                    165: /*
                    166:  * miscellaneous structures and values used by Courier
                    167:  * runtimes
                    168:  */
                    169: 
                    170: /* 
                    171:  * message types for Courier messages (should be mixed case?)
                    172:  * (should only be of interest to the runtimes)
                    173:  */
                    174: #define CALL 0
                    175: #define REJECT 1
                    176: #define RETURN 2
                    177: #define ABORT 3
                    178: 
                    179: /*
                    180:  * components of Courier error messages
                    181:  */
                    182: 
                    183: typedef struct {
                    184:        Cardinal lowest;
                    185:        Cardinal highest;
                    186: } ImplementedVersionNumbers;
                    187: 
                    188: typedef struct {
                    189:        enum {
                    190:                unspecifiedError = 65535,
                    191:                invalidArgument = 3,
                    192:                noSuchProcedureValue = 2,
                    193:                noSuchVersionNumber = 1,
                    194:                noSuchProgramNumber = 0
                    195:        } designator;
                    196:        union {
                    197:                NilRecord u_noSuchProgramNumber;
                    198: #define noSuchProgramNumber_case u.u_noSuchProgramNumber
                    199:                ImplementedVersionNumbers u_noSuchVersionNumber;
                    200: #define noSuchVersionNumber_case u.u_noSuchVersionNumber
                    201:                NilRecord u_noSuchProcedureValue;
                    202: #define noSuchProcedureValue_case u.u_noSuchProcedureValue
                    203:                NilRecord u_invalidArgument;
                    204: #define invalidArgument_case u.u_invalidArgument
                    205:                NilRecord u_unspecifiedError;
                    206: #define unspecifiedError_case u.u_unspecifiedError
                    207:        } u;
                    208: } rejectionDetails;
                    209: 
                    210: /*
                    211:  * Macro for unpacking error arguments given a typedef and a field name
                    212:  */
                    213: #define CourierErrArgs(type,field) \
                    214:        (((type *)Exception.Message)->field)
                    215: 
                    216: /*
                    217:  * miscellaneous constants
                    218:  */
                    219: 
                    220: #ifndef TRUE
                    221: #define TRUE (1)
                    222: #endif
                    223: 
                    224: #ifndef FALSE
                    225: #define FALSE (0)
                    226: #endif
                    227: 
                    228: #ifndef NULL
                    229: #define NULL ((char*) 0)
                    230: #endif
                    231: 
                    232: 
                    233: /*
                    234:  * exceptions defined in Courier
                    235:  */
                    236: 
                    237: #define REJECT_ERROR 65535
                    238: #define PROTOCOL_VIOLATION 65534
                    239: 
                    240: /* plus all user-defined ERROR values, offset by ERROR_OFFSET */
                    241: #define ERROR_OFFSET 65536
                    242: 
                    243: /*
                    244:  * External declarations.
                    245:  */
                    246: 
                    247: extern Unspecified *Allocate();
                    248: extern Unspecified *ReceiveCallMessage(), *ReceiveReturnMessage();
                    249: extern Unspecified *ReadMessage();
                    250: extern int BDTwrite(),BDTclosewrite(),BDTread();
                    251: extern int sppclose(),sppclosereply();
                    252: 
                    253: #endif COURIERVERSION

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.