|
|
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:
1.1.1.3 ! root 119: typedef void PAPI * NDR_CCONTEXT;
1.1 root 120: typedef struct {void * pad[2]; void * userContext; } * NDR_SCONTEXT;
121:
122: #define NDRSContextValue(hContext) (&(hContext)->userContext)
123:
124: #define cbNDRContext 20 /* size of context on WIRE */
125:
126: typedef void (*NDR_RUNDOWN)(void * context);
127:
1.1.1.3 ! root 128: RPC_BINDING_HANDLE RPC_ENTRY
! 129: NDRCContextBinding (
! 130: IN NDR_CCONTEXT CContext
! 131: );
! 132:
1.1 root 133: void RPC_ENTRY
134: NDRCContextMarshall (
135: IN NDR_CCONTEXT CContext,
136: OUT void PAPI *pBuff
137: );
138:
139: void RPC_ENTRY
140: NDRCContextUnmarshall (
141: OUT NDR_CCONTEXT PAPI *pCContext,
1.1.1.2 root 142: IN RPC_BINDING_HANDLE hBinding,
1.1 root 143: IN void PAPI *pBuff,
1.1.1.2 root 144: IN unsigned long DataRepresentation
1.1 root 145: );
146:
147: void RPC_ENTRY
148: NDRSContextMarshall (
149: IN NDR_SCONTEXT CContext,
150: OUT void PAPI *pBuff,
151: IN NDR_RUNDOWN userRunDownIn
152: );
153:
154: NDR_SCONTEXT RPC_ENTRY
155: NDRSContextUnmarshall (
1.1.1.2 root 156: IN void PAPI *pBuff,
157: IN unsigned long DataRepresentation
158: );
1.1 root 159:
160: void RPC_ENTRY
161: NDRcopy (
1.1.1.2 root 162: IN void PAPI *pTarget,
163: IN void PAPI *pSource,
164: IN unsigned int size
165: );
166:
167: /*
168: * Other MIDL base types / predefined types:
169: */
170:
171: typedef unsigned char byte;
172: typedef unsigned char boolean;
173:
174: #ifndef _WCHAR_T_DEFINED
175: typedef unsigned short wchar_t;
176: #define _WCHAR_T_DEFINED
177: #endif
178:
179: #ifndef _SIZE_T_DEFINED
180: typedef unsigned int size_t;
181: #define _SIZE_T_DEFINED
182: #endif
183:
184: #ifdef __RPC_DOS__
185: #define __RPC_FAR _far
186: #define __RPC_CALLEE_STUB
187: #endif
188:
189: #ifdef __RPC_WIN16__
190: #define __RPC_FAR _far
191: #define __RPC_CALLEE_STUB _export
192: #endif
193:
194: #ifdef __RPC_WIN32__
195: #define __RPC_FAR
1.1.1.3 ! root 196: #define __RPC_CALLEE_STUB
1.1.1.2 root 197: #endif
198:
199: #ifdef __RPC_OS2_1X__
200: #define __RPC_FAR _far
201: #define __RPC_CALLEE_STUB _loadds
202: #endif
203:
204: #ifndef __MIDL_USER_DEFINED
205: #define midl_user_allocate MIDL_user_allocate
206: #define midl_user_free MIDL_user_free
207: #define __MIDL_USER_DEFINED
208: #endif
209:
210:
211: /*
212: *
213: * Base type conversion macros:
214: *
215: */
216:
217: #define byte_from_ndr(source, target) \
218: { \
219: *target = *(*(char **)&source->Buffer)++; \
220: }
221:
1.1.1.3 ! root 222: #define byte_array_from_ndr(Source, LowerIndex, UpperIndex, Target) \
! 223: { \
! 224: NDRcopy ( \
! 225: (((char *)Target)+LowerIndex), \
! 226: Source->Buffer, \
! 227: (unsigned int)(UpperIndex-LowerIndex)); \
! 228: *(unsigned long *)&Source->Buffer += (UpperIndex-LowerIndex); \
! 229: }
! 230:
1.1.1.2 root 231: #define boolean_from_ndr(source, target) \
232: { \
233: *target = *(*(char **)&source->Buffer)++; \
234: }
235:
1.1.1.3 ! root 236: #define boolean_array_from_ndr(Source, LowerIndex, UpperIndex, Target) \
! 237: { \
! 238: NDRcopy ( \
! 239: (((char *)Target)+LowerIndex), \
! 240: Source->Buffer, \
! 241: (unsigned int)(UpperIndex-LowerIndex)); \
! 242: *(unsigned long *)&Source->Buffer += (UpperIndex-LowerIndex); \
! 243: }
! 244:
1.1.1.2 root 245: #define small_from_ndr(source, target) \
246: { \
247: *target = *(*(char **)&source->Buffer)++; \
248: }
249:
1.1.1.3 ! root 250: #define small_array_from_ndr(Source, LowerIndex, UpperIndex, Target) \
! 251: { \
! 252: NDRcopy ( \
! 253: (((char *)Target)+LowerIndex), \
! 254: Source->Buffer, \
! 255: (unsigned int)(UpperIndex-LowerIndex)); \
! 256: *(unsigned long *)&Source->Buffer += (UpperIndex-LowerIndex); \
! 257: }
! 258:
1.1.1.2 root 259: /*
260: *
261: * Character and string support routines:
262: *
263: */
264:
265: int RPC_ENTRY
266: MIDL_wchar_strlen (
267: IN wchar_t s[]
268: );
269:
270: void RPC_ENTRY
271: MIDL_wchar_strcpy (
272: OUT void * t,
273: IN wchar_t * s
274: );
275:
276: /*
277: *
278: * Base type conversion routines:
279: *
280: */
281:
282: void RPC_ENTRY
283: char_from_ndr (
284: IN OUT PRPC_MESSAGE SourceMessage,
285: OUT unsigned char * Target
286: );
287:
288: void RPC_ENTRY
289: char_array_from_ndr (
290: IN OUT PRPC_MESSAGE SourceMessage,
1.1.1.3 ! root 291: IN unsigned long LowerIndex,
! 292: IN unsigned long UpperIndex,
1.1.1.2 root 293: OUT unsigned char Target[]
294: );
295:
296: void RPC_ENTRY
297: short_from_ndr (
298: IN OUT PRPC_MESSAGE source,
299: OUT unsigned short * target
300: );
301:
302: void RPC_ENTRY
303: short_array_from_ndr(
304: IN OUT PRPC_MESSAGE SourceMessage,
1.1.1.3 ! root 305: IN unsigned long LowerIndex,
! 306: IN unsigned long UpperIndex,
1.1.1.2 root 307: OUT unsigned short Target[]
308: );
309:
310: void RPC_ENTRY
311: short_from_ndr_temp (
312: IN OUT unsigned char ** source,
313: OUT unsigned short * target,
314: IN unsigned long format
315: );
316:
317: void RPC_ENTRY
318: long_from_ndr (
319: IN OUT PRPC_MESSAGE source,
320: OUT unsigned long * target
321: );
322:
323: void RPC_ENTRY
324: long_array_from_ndr(
325: IN OUT PRPC_MESSAGE SourceMessage,
1.1.1.3 ! root 326: IN unsigned long LowerIndex,
! 327: IN unsigned long UpperIndex,
1.1.1.2 root 328: OUT unsigned long Target[]
329: );
330:
331: void RPC_ENTRY
332: long_from_ndr_temp (
333: IN OUT unsigned char ** source,
334: OUT unsigned long * target,
335: IN unsigned long format
336: );
337:
338: void RPC_ENTRY
339: enum_from_ndr(
340: IN OUT PRPC_MESSAGE SourceMessage,
341: OUT unsigned int * Target
342: );
343:
344: void RPC_ENTRY
345: float_from_ndr (
346: IN OUT PRPC_MESSAGE SourceMessage,
347: OUT void * Target
348: );
349:
350: void RPC_ENTRY
351: float_array_from_ndr (
352: IN OUT PRPC_MESSAGE SourceMessage,
1.1.1.3 ! root 353: IN unsigned long LowerIndex,
! 354: IN unsigned long UpperIndex,
1.1.1.2 root 355: OUT void * Target
356: );
357:
358: void RPC_ENTRY
359: double_from_ndr (
360: IN OUT PRPC_MESSAGE SourceMessage,
361: OUT void * Target
362: );
363:
364: void RPC_ENTRY
365: double_array_from_ndr (
366: IN OUT PRPC_MESSAGE SourceMessage,
1.1.1.3 ! root 367: IN unsigned long LowerIndex,
! 368: IN unsigned long UpperIndex,
1.1.1.2 root 369: OUT void * Target
370: );
371:
372: /*
373: *
374: * Other data conversion / unmarshalling routines:
375: *
376: */
377:
378: void RPC_ENTRY
379: data_from_ndr (
380: PRPC_MESSAGE source,
381: void * target,
382: char * format,
383: unsigned char MscPak
384: );
385:
386: void RPC_ENTRY
1.1.1.3 ! root 387: data_into_ndr (
! 388: void * source,
! 389: PRPC_MESSAGE target,
! 390: char * format,
! 391: unsigned char MscPak
! 392: );
! 393:
! 394: void RPC_ENTRY
1.1.1.2 root 395: tree_into_ndr (
396: void * source,
397: PRPC_MESSAGE target,
398: char * format,
399: unsigned char MscPak
400: );
401:
402: void RPC_ENTRY
1.1.1.3 ! root 403: data_size_ndr (
! 404: void * source,
! 405: PRPC_MESSAGE target,
! 406: char * format,
! 407: unsigned char MscPak
! 408: );
! 409:
! 410: void RPC_ENTRY
1.1.1.2 root 411: tree_size_ndr (
412: void * source,
413: PRPC_MESSAGE target,
414: char * format,
415: unsigned char MscPak
416: );
417:
418: void RPC_ENTRY
419: tree_peek_ndr (
420: PRPC_MESSAGE source,
421: unsigned char ** buffer,
1.1.1.3 ! root 422: char * format,
! 423: unsigned char MscPak
1.1.1.2 root 424: );
425:
426: void PAPI * RPC_ENTRY
427: midl_allocate (
428: size_t size
429: );
430:
431: #ifdef __cplusplus
432: }
433: #endif
1.1 root 434:
1.1.1.2 root 435: #endif /* __RPCNDR_H__ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.