|
|
1.1.1.2 ! root 1: ! 2: /*++ ! 3: ! 4: Copyright (c) 1992 Microsoft Corporation ! 5: ! 6: Module Name: ! 7: ! 8: floatc.cxx ! 9: ! 10: Abstract: ! 11: ! 12: Float and double conversion routines. ! 13: ! 14: Author: ! 15: ! 16: DonnaLi (??-??-91) ! 17: ! 18: Environment: ! 19: ! 20: This code should execute in all environments supported by RPC ! 21: (DOS, Win 3.X, and Win/NT as well as OS2). ! 22: ! 23: Revision History: ! 24: ! 25: DONNALI 08-29-91 Start recording history ! 26: donnali 09-11-91 change conversion macros ! 27: donnali 09-18-91 check in files for moving ! 28: STEVEZ 10-15-91 Merge with NT tree ! 29: donnali 10-28-91 add prototype ! 30: donnali 11-19-91 bugfix for strings ! 31: MIKEMON 12-17-91 DCE runtime API conversion ! 32: donnali 03-24-92 change rpc public header f ! 33: STEVEZ 04-04-92 add nsi include ! 34: mikemon 04-18-92 security support and misc ! 35: DovhH 04-24-24 Changed signature of <int>_from_ndr ! 36: (to unsigned <int>) ! 37: Added <base_type>_array_from_ndr routines ! 38: Comments: ! 39: ! 40: This file does not belong in runtime\mtrt. Needs to move to ! 41: ndrlib directory (after code freeze). ! 42: ! 43: --*/ 1.1 root 44: 45: #ifndef __RPCNDR_H__ 46: #define __RPCNDR_H__ 47: 1.1.1.2 ! root 48: #include "rpcnsip.h" ! 49: ! 50: #ifdef __cplusplus ! 51: extern "C" { ! 52: #endif ! 53: ! 54: /* ! 55: ! 56: Network Computing Architecture (NCA) definition: ! 57: ! 58: Network Data Representation: (NDR) Label format: ! 59: An unsigned long (32 bits) with the following layout: ! 60: ! 61: 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 ! 62: 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 ! 63: +---------------+---------------+---------------+-------+-------+ ! 64: | Reserved | Reserved |Floating point | Int | Char | ! 65: | | |Representation | Rep. | Rep. | ! 66: +---------------+---------------+---------------+-------+-------+ ! 67: ! 68: Where ! 69: ! 70: Reserved: ! 71: ! 72: Must be zero (0) for NCA 1.5 and NCA 2.0. ! 73: ! 74: Floating point Representation is: ! 75: ! 76: 0 - IEEE ! 77: 1 - VAX ! 78: 2 - Cray ! 79: 3 - IBM ! 80: ! 81: Int Rep. is Integer Representation: ! 82: ! 83: 0 - Big Endian ! 84: 1 - Little Endian ! 85: ! 86: Char Rep. is Character Representation: ! 87: ! 88: 0 - ASCII ! 89: 1 - EBCDIC ! 90: ! 91: The Microsoft Local Data Representation (for all platforms which are ! 92: of interest currently is edefined below: ! 93: 1.1 root 94: */ 95: 1.1.1.2 ! root 96: #define NDR_CHAR_REP_MASK (unsigned long)0X0000000FL ! 97: #define NDR_INT_REP_MASK (unsigned long)0X000000F0L ! 98: #define NDR_FLOAT_REP_MASK (unsigned long)0X0000FF00L ! 99: ! 100: #define NDR_LITTLE_ENDIAN (unsigned long)0X00000010L ! 101: #define NDR_BIG_ENDIAN (unsigned long)0X00000000L ! 102: ! 103: #define NDR_IEEE_FLOAT (unsigned long)0X00000000L ! 104: #define NDR_VAX_FLOAT (unsigned long)0X00000100L ! 105: ! 106: #define NDR_ASCII_CHAR (unsigned long)0X00000000L ! 107: #define NDR_EBCDIC_CHAR (unsigned long)0X00000001L ! 108: ! 109: #define NDR_LOCAL_DATA_REPRESENTATION (unsigned long)0X00000010L ! 110: ! 111: /* ! 112: * Context related definitions: ! 113: * ! 114: * Client and Server Contexts. Just enough of the structure is exposed ! 115: * to allow access to some public fields ! 116: * ! 117: */ ! 118: ! 119: typedef struct {RPC_BINDING_HANDLE hRPC;} PAPI * NDR_CCONTEXT; 1.1 root 120: typedef struct {void * pad[2]; void * userContext; } * NDR_SCONTEXT; 121: 122: #define NDRSContextValue(hContext) (&(hContext)->userContext) 123: #define NDRCContextBinding(hContext) ((hContext)->hRPC) 124: 125: #define cbNDRContext 20 /* size of context on WIRE */ 126: 127: typedef void (*NDR_RUNDOWN)(void * context); 128: 129: void RPC_ENTRY 130: NDRCContextMarshall ( 131: IN NDR_CCONTEXT CContext, 132: OUT void PAPI *pBuff 133: ); 134: 135: void RPC_ENTRY 136: NDRCContextUnmarshall ( 137: OUT NDR_CCONTEXT PAPI *pCContext, 1.1.1.2 ! root 138: IN RPC_BINDING_HANDLE hBinding, 1.1 root 139: IN void PAPI *pBuff, 1.1.1.2 ! root 140: IN unsigned long DataRepresentation 1.1 root 141: ); 142: 143: void RPC_ENTRY 144: NDRSContextMarshall ( 145: IN NDR_SCONTEXT CContext, 146: OUT void PAPI *pBuff, 147: IN NDR_RUNDOWN userRunDownIn 148: ); 149: 150: NDR_SCONTEXT RPC_ENTRY 151: NDRSContextUnmarshall ( 1.1.1.2 ! root 152: IN void PAPI *pBuff, ! 153: IN unsigned long DataRepresentation ! 154: ); 1.1 root 155: 156: void RPC_ENTRY 157: NDRcopy ( 1.1.1.2 ! root 158: IN void PAPI *pTarget, ! 159: IN void PAPI *pSource, ! 160: IN unsigned int size ! 161: ); ! 162: ! 163: /* ! 164: * Other MIDL base types / predefined types: ! 165: */ ! 166: ! 167: typedef unsigned char byte; ! 168: typedef unsigned char boolean; ! 169: ! 170: #ifndef _WCHAR_T_DEFINED ! 171: typedef unsigned short wchar_t; ! 172: #define _WCHAR_T_DEFINED ! 173: #endif ! 174: ! 175: #ifndef _SIZE_T_DEFINED ! 176: typedef unsigned int size_t; ! 177: #define _SIZE_T_DEFINED ! 178: #endif ! 179: ! 180: #ifdef __RPC_DOS__ ! 181: #define __RPC_FAR _far ! 182: #define __RPC_CALLEE_STUB ! 183: #endif ! 184: ! 185: #ifdef __RPC_WIN16__ ! 186: #define __RPC_FAR _far ! 187: #define __RPC_CALLEE_STUB _export ! 188: #endif ! 189: ! 190: #ifdef __RPC_WIN32__ ! 191: #define __RPC_FAR ! 192: #define __RPC_EXPORT ! 193: #endif ! 194: ! 195: #ifdef __RPC_OS2_1X__ ! 196: #define __RPC_FAR _far ! 197: #define __RPC_CALLEE_STUB _loadds ! 198: #endif ! 199: ! 200: #ifndef __MIDL_USER_DEFINED ! 201: #define midl_user_allocate MIDL_user_allocate ! 202: #define midl_user_free MIDL_user_free ! 203: #define __MIDL_USER_DEFINED ! 204: #endif ! 205: ! 206: ! 207: /* ! 208: * ! 209: * Base type conversion macros: ! 210: * ! 211: */ ! 212: ! 213: #define byte_from_ndr(source, target) \ ! 214: { \ ! 215: *target = *(*(char **)&source->Buffer)++; \ ! 216: } ! 217: ! 218: #define boolean_from_ndr(source, target) \ ! 219: { \ ! 220: *target = *(*(char **)&source->Buffer)++; \ ! 221: } ! 222: ! 223: #define small_from_ndr(source, target) \ ! 224: { \ ! 225: *target = *(*(char **)&source->Buffer)++; \ ! 226: } ! 227: ! 228: /* ! 229: * ! 230: * Character and string support routines: ! 231: * ! 232: */ ! 233: ! 234: int RPC_ENTRY ! 235: MIDL_wchar_strlen ( ! 236: IN wchar_t s[] ! 237: ); ! 238: ! 239: void RPC_ENTRY ! 240: MIDL_wchar_strcpy ( ! 241: OUT void * t, ! 242: IN wchar_t * s ! 243: ); ! 244: ! 245: /* ! 246: * ! 247: * Base type conversion routines: ! 248: * ! 249: */ ! 250: ! 251: void RPC_ENTRY ! 252: char_from_ndr ( ! 253: IN OUT PRPC_MESSAGE SourceMessage, ! 254: OUT unsigned char * Target ! 255: ); ! 256: ! 257: void RPC_ENTRY ! 258: char_array_from_ndr ( ! 259: IN OUT PRPC_MESSAGE SourceMessage, ! 260: IN unsigned int MemberCount, ! 261: OUT unsigned char Target[] ! 262: ); ! 263: ! 264: void RPC_ENTRY ! 265: short_from_ndr ( ! 266: IN OUT PRPC_MESSAGE source, ! 267: OUT unsigned short * target ! 268: ); ! 269: ! 270: void RPC_ENTRY ! 271: short_array_from_ndr( ! 272: IN OUT PRPC_MESSAGE SourceMessage, ! 273: IN unsigned int MemberCount, ! 274: OUT unsigned short Target[] ! 275: ); ! 276: ! 277: void RPC_ENTRY ! 278: short_from_ndr_temp ( ! 279: IN OUT unsigned char ** source, ! 280: OUT unsigned short * target, ! 281: IN unsigned long format ! 282: ); ! 283: ! 284: void RPC_ENTRY ! 285: long_from_ndr ( ! 286: IN OUT PRPC_MESSAGE source, ! 287: OUT unsigned long * target ! 288: ); ! 289: ! 290: void RPC_ENTRY ! 291: long_array_from_ndr( ! 292: IN OUT PRPC_MESSAGE SourceMessage, ! 293: IN unsigned int MemberCount, ! 294: OUT unsigned long Target[] ! 295: ); ! 296: ! 297: void RPC_ENTRY ! 298: long_from_ndr_temp ( ! 299: IN OUT unsigned char ** source, ! 300: OUT unsigned long * target, ! 301: IN unsigned long format ! 302: ); ! 303: ! 304: void RPC_ENTRY ! 305: enum_from_ndr( ! 306: IN OUT PRPC_MESSAGE SourceMessage, ! 307: OUT unsigned int * Target ! 308: ); ! 309: ! 310: void RPC_ENTRY ! 311: float_from_ndr ( ! 312: IN OUT PRPC_MESSAGE SourceMessage, ! 313: OUT void * Target ! 314: ); ! 315: ! 316: void RPC_ENTRY ! 317: float_array_from_ndr ( ! 318: IN OUT PRPC_MESSAGE SourceMessage, ! 319: IN unsigned int MemberCount, ! 320: OUT void * Target ! 321: ); ! 322: ! 323: void RPC_ENTRY ! 324: double_from_ndr ( ! 325: IN OUT PRPC_MESSAGE SourceMessage, ! 326: OUT void * Target ! 327: ); ! 328: ! 329: void RPC_ENTRY ! 330: double_array_from_ndr ( ! 331: IN OUT PRPC_MESSAGE SourceMessage, ! 332: IN unsigned int MemberCount, ! 333: OUT void * Target ! 334: ); ! 335: ! 336: /* ! 337: * ! 338: * Other data conversion / unmarshalling routines: ! 339: * ! 340: */ ! 341: ! 342: void RPC_ENTRY ! 343: data_from_ndr ( ! 344: PRPC_MESSAGE source, ! 345: void * target, ! 346: char * format, ! 347: unsigned char MscPak ! 348: ); ! 349: ! 350: void RPC_ENTRY ! 351: tree_into_ndr ( ! 352: void * source, ! 353: PRPC_MESSAGE target, ! 354: char * format, ! 355: unsigned char MscPak ! 356: ); ! 357: ! 358: void RPC_ENTRY ! 359: tree_size_ndr ( ! 360: void * source, ! 361: PRPC_MESSAGE target, ! 362: char * format, ! 363: unsigned char MscPak ! 364: ); ! 365: ! 366: void RPC_ENTRY ! 367: tree_peek_ndr ( ! 368: PRPC_MESSAGE source, ! 369: unsigned char ** buffer, ! 370: char * format ! 371: ); ! 372: ! 373: void PAPI * RPC_ENTRY ! 374: midl_allocate ( ! 375: size_t size ! 376: ); ! 377: ! 378: #ifdef __cplusplus ! 379: } ! 380: #endif 1.1 root 381: 1.1.1.2 ! root 382: #endif /* __RPCNDR_H__ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.