Annotation of win32/sql/oracle/include/oci/sx3.h, revision 1.1.1.1
1.1 parser 1: /*
2: * $Header: /var/lib/cvsroot/parser3/parser3/src/sql/oracle/oracle32/include/oci/sx3.h,v 1.1 2001/08/22 14:02:20 parser Exp $
3: */
4:
5: /* Copyright (c) Oracle Corporation 1997, 1998, 1999. All Rights Reserved. */
6:
7: /*
8: NAME
9: sx3.h - System dependent eXternal definitions for disk data structures.
10: (Solaris version).
11:
12: DESCRIPTION
13: System dependent definitions and declarations used in all Oracle disk
14: data structures.
15:
16: RELATED DOCUMENTS
17:
18: INSPECTION STATUS
19: Inspection date:
20: Inspection status:
21: Estimated increasing cost defects per page:
22: Rule sets:
23:
24: ACCEPTANCE REVIEW STATUS
25: Review date:
26: Review status:
27: Reviewers:
28:
29: PUBLIC FUNCTIONS
30: None
31:
32: PRIVATE FUNCTIONS
33: None
34:
35: EXAMPLES
36: N/A
37:
38: NOTES
39:
40: This file contains system dependent definitions and declarations of
41: data types used in on-disk structures. On-disk structures should be
42: defined in separate header files and can only use data types defined
43: in this file. On-disk structures should not use any native types or
44: any other type not defined in this file (but defined in sx.h).
45:
46: Separating the definitions of on-disk data types allows us to keep
47: them compatible across different versions. The key purpose of this
48: file is to restrict the data types which can go on disk and to make sure
49: that their sizes remain the same across different versions.
50:
51: The -MAXVAL and -MINVAL constants represent the numerical range of
52: the relevant data type on the current port, i.e. the value of such
53: symbol may change from one port to another. The MIN-MAXVAL and
54: MAX-MINVAL constants represent the numerical range of the relevant
55: data type across all ports, i.e. the value of these should never be
56: changed by porters. Note that MAXSB1MINVAL is -127, instead of
57: -128, to support one's ** complement arithmetic architectures.
58:
59:
60: DEVELOPERS: This file has been created to separate all the valid
61: data types that can go on on-disk structures. All the types in
62: this file are guaranteed to be of the same size across different
63: versions, specifically while migrating from 32 bit to 64 bit.
64: This is very important to maintain the consistency of data on
65: the disk. All on-disk structures should be defined in separate
66: header files (*3.h) and *3.h can only include other *3.h header
67: files. New data types d*word, dptr_t, dboolean and dsize_t have been
68: defined to be used in place of *word, ptr_t, boolean and size_t. All
69: the existing references to *word, size_t, boolean and ptr_t in on-disk
70: structures have to be replaced with d*word, dsize_t, dboolean and
71: dptr_t as word, size_t, boolean and ptr_t could be of different sizes
72: in different versions. d*word, dsize_t, dboolean and dptr_t are currently
73: defined to have the same size as the existing type and are guaranteed to
74: remain the same size in all future versions, like in 64 bit versions.
75:
76: The d*word, dsize_t, dboolean and dptr_t data types should never be used in
77: any new data structures. Also dptr_t is defined as a non pointer type
78: to preserve the size. So it should never be used to store a pointer.
79: It is provided as a place holder to preserve the size of the structure.
80:
81: RELATED NOTE: Normal alignment macros like slalsu should never be used
82: for on-disk data types. You should use a new set of alignment macros
83: defined in sl.h. Instead of slalsu, slalsd, slalpu and slalpd you should
84: use sldalsu, sldalsd, sldalpu and sldalpd respectively.
85:
86:
87: PRODUCT LINE DEVELOPERS: This file is solaris specific and
88: product lines have to modify this file to reflect their platform. In
89: this file the datatypes eb1, ub1, sb1, eb2, ub2, sb2, eb4, ub4, sb4
90: must be defined so that they are always of same size for a
91: particular platform across different versions. For eg: In solaris
92: ub1, ub2, ub4 occupy 1, 2 and 4 bytes respectively. While porting to
93: different versions for solaris (say to 64 bit), porters have to make
94: sure that they always occupy 1,2 and 4 bytes. If the native data
95: type associated with these types are changed to preserve the sizes,
96: then literals MIN & MAXVALS have to be changed accordingly. While
97: porting to 64 bit, only the definitions of *b1,*b2 and *b4 can be
98: changed to preserve their sizes. All other datatypes must not be
99: changed.
100:
101: dword, dsize_t, dboolean and dptr_t are defined to provide backward
102: compatibility with word, size_t, boolean and ptr_t. Their definitions
103: must be set such that their size is the same as existing word, size_t,
104: boolean and ptr_t and should never be changed in the future. For example
105: in solaris ptr_t (defined as void *) has the same size as unsigned long
106: which is 4 bytes. So dptr_t is defined as ub4 and as ub4's size will
107: be constant in the future so will be dsize_t's size. The definition
108: of d* should never be changed once they have been defined for a
109: particular product line.
110:
111: MODIFIED (MM/DD/YY)
112: tsaulys 02/10/99 - move obsolete types and macros
113: dcolello 08/25/98 - WIN32COMMON: port
114: kkarun 08/14/98 - Rollback 667803
115: tsaulys 07/31/98 - do not use text for C++ (when LUSEMFC defined)
116: skabraha 05/08/98 - no more 1's complement support
117: skabraha 04/17/98 - changing xb4 to int
118: skabraha 01/27/98 - adding M_IDEN and SLMXFNMLEN
119: skabraha 10/28/97 - Defining some datatypes to garbage
120: skabraha 10/16/97 - Creation
121:
122:
123: */
124:
125:
126: #ifndef SX3_ORACLE
127: #define SX3_ORACLE
128:
129: #ifndef ORALIMITS
130: # include <limits.h>
131: # define ORALIMITS
132: #endif /* !ORALIMITS */
133:
134: /*
135: ** Note: this is the WIN32COMMON version of sx3.h. Always make sure that
136: ** WIN32COMMON is defined. It is not defined yet if this file is included
137: ** first for whatever reason.
138: */
139: #ifndef WIN32COMMON
140: #define WIN32COMMON
141: #endif
142:
143: #ifdef WIN32COMMON
144: /* make sure stdlib.h is included to avoid warning with max()/min() macros */
145: #ifndef ORASTDLIB
146: # include <stdlib.h>
147: # define ORASTDLIB
148: #endif
149: #endif /* WIN32COMMON */
150:
151:
152: /* All references to size_t has to be replaced with dsize_t. size_t should not
153: * be used in any disk structures. To enforce this size_t is defined to
154: * an invalid type here. It is redefined to a valid type in sx.h from the
155: * included file stddef.h.
156: */
157:
158: #ifdef size_t
159: # undef size_t
160: #endif /* size_t */
161:
162:
163: #define size_t size_t_may_not_be_used_here
164:
165: /* As olint accepts most of the datatypes on its own here we are #defining
166: * the unwanted data types to garbage to catch its usage. These will be
167: * #undefed in the beginning of sx.h.
168: */
169:
170: #ifndef SX3_GARBAGE_DEFS
171: # define SX3_GARBAGE_DEFS
172:
173: # define uword uword_may_not_be_used_here
174: # define sword sword_may_not_be_used_here
175: # define ubig_ora ubig_ora_may_not_be_used_here
176: # define sbig_ora sbig_ora_may_not_be_used_here
177: # define ub8 ub8_may_not_be_used_here
178: # define sb8 sb8_may_not_be_used_here
179: # ifndef WIN32COMMON
180: # define boolean boolean_may_not_be_used_here
181: # else /* WIN32COMMON */
182: # undef boolean
183: # endif /* WIN32COMMON */
184: # define ptr_t ptr_t_may_not_be_used_here
185:
186: #endif /* SX3_GARBAGE_DEFS */
187:
188: /**-------------------------------------------------------------------------**/
189: /** DATA TYPE DEFINITIONS **/
190: /**-------------------------------------------------------------------------**/
191:
192: /* We #define while linting as lint complains while casting between
193: * two datatypes which have been typedefed to compatible types.
194: */
195:
196: /* xb1 definitions. xb1 will be exactly one byte - at least 8 bits,
197: * possibly more. sizeof(ub1) is guaranteed to be 1
198: */
199:
200: #ifndef lint
201: typedef unsigned char ub1; /* use where unsigned important */
202: typedef signed char sb1; /* use where signed important */
203: #else
204: #define ub1 unsigned char
205: #define sb1 signed char
206: #endif /* LINT */
207:
208: #define UB1MAXVAL ((ub1)UCHAR_MAX)
209: #define UB1MINVAL ((ub1) 0)
210: #define SB1MAXVAL ((sb1)SCHAR_MAX)
211: #define SB1MINVAL ((sb1)SCHAR_MIN)
212: #define MINUB1MAXVAL ((ub1) 255)
213: #define MAXUB1MINVAL ((ub1) 0)
214: #define MINSB1MAXVAL ((sb1) 127)
215: #define MAXSB1MINVAL ((sb1) -127)
216:
217:
218: /* xb2 definitions. xb2 will be atleast 2 bytes, possible more */
219:
220: #ifndef lint
221: typedef unsigned short ub2; /* use where unsigned important */
222: typedef signed short sb2; /* use where signed important */
223: #else
224: #define ub2 unsigned short
225: #define sb2 signed short
226: #endif /* LINT */
227:
228: #define UB2MAXVAL ((ub2)USHRT_MAX)
229: #define UB2MINVAL ((ub2) 0)
230: #define SB2MAXVAL ((sb2) SHRT_MAX)
231: #define SB2MINVAL ((sb2) SHRT_MIN)
232: #define MINUB2MAXVAL ((ub2) 65535)
233: #define MAXUB2MINVAL ((ub2) 0)
234: #define MINSB2MAXVAL ((sb2) 32767)
235: #define MAXSB2MINVAL ((sb2)-32767)
236:
237:
238: /* xb4 definitions. xb4 will be atleast 4 bytes, possibly more */
239:
240: #ifndef lint
241: typedef unsigned int ub4; /* use where unsigned important */
242: typedef signed int sb4; /* use where signed important */
243: #else
244: #define ub4 unsigned int
245: #define sb4 signed int
246: #endif /* LINT */
247:
248: #define UB4MAXVAL ((ub4)UINT_MAX)
249: #define UB4MINVAL ((ub4) 0)
250: #define SB4MAXVAL ((sb4) INT_MAX)
251: #define SB4MINVAL ((sb4) INT_MIN)
252: #define MINUB4MAXVAL ((ub4) 4294967295)
253: #define MAXUB4MINVAL ((ub4) 0)
254: #define MINSB4MAXVAL ((sb4) 2147483647)
255: #define MAXSB4MINVAL ((sb4)-2147483647)
256:
257:
258: /* number of bits in a byte */
259: #define UB1BITS CHAR_BIT
260: #define UB1MASK ((1 << ((uword)CHAR_BIT)) - 1)
261:
262: /* This definition has been moved from s.h as it is used by on-disk
263: * data structures. The macros for bitvec are in s.h.
264: */
265: typedef ub1 bitvec;
266:
267: /* BITVEC - to size bitvec arrays */
268: #define BITVEC(n) (((n)+(UB1BITS-1))>>3)
269:
270: /* human readable (printable) characters. oratext should always be one byte */
271: /*
272: * Update for C++ design: change text to oratext
273: * typedef unsigned char text;
274: */
275:
276: #ifdef lint
277: # define oratext unsigned char
278: #else
279: typedef unsigned char oratext;
280: #endif
281:
282: /* macros defining min & max */
283:
284: #ifdef WIN32COMMON
285: #ifndef max
286: #define max(x, y) (((x) < (y)) ? (y) : (x))
287: #endif
288: #else
289: #define max(x, y) (((x) < (y)) ? (y) : (x))
290: #endif
291: #define min(x, y) (((x) < (y)) ? (x) : (y))
292:
293: /**-------------------------------------------------------------------------**/
294: /** ALTERNATE DATA TYPES FOR THOSE OBSOLETED FOR ON_DISK DATA STRUCTURES **/
295: /**-------------------------------------------------------------------------**/
296:
297: /* Developers should replace all existing references to *word, ptr_t, boolean
298: * and size_t in disk data structures with d*word, dptr_t, dboolean and
299: * dsize_t respectively. These types are guaranteed to be of the same size
300: * across different versions on a platform.
301: *
302: * d*word, dsize_t, dboolean and dptr_t should never be used in new data structures.
303: * They should only be used to preserve the sizes of existing data
304: * structures.
305: *
306: * WARNING: dptr_t has been defined to be a non-pointer datatype so that we
307: * can guarantee that the size remains same!!!
308: */
309:
310:
311: /* PRODUCT LINE DEVELOPERS: Change this typedef to a type which has the
312: * same size as the current size of *word in your platform. Once the size
313: * of d*word has been defined, it should always be of the same size in
314: * all future versions (irrespective of the size of *word in later versions)
315: *
316: * For example in Solaris uword is defined as having 4 bytes. Hence d*word is
317: * defined as *b4. This definition will NOT be changed in the future, thus
318: * preserving the size.
319: */
320:
321: /* deword is defined as eb4. As ebx is defined later in the obselete section
322: * the definition of deword was moved there.
323: */
324:
325: #ifndef lint
326: typedef ub4 duword;
327: typedef sb4 dsword;
328: /* word is an obselete datatype. But it still needs to be changed to dword */
329: typedef dsword dword;
330:
331: #else
332: #define duword ub4
333: #define dsword sb4
334: #define dword dsword
335: #endif /*LINT */
336:
337: #define DUWORDMAXVAL UB4MAXVAL
338: #define DUWORDMINVAL UB4MINVAL
339: #define DSWORDMAXVAL SB4MAXVAL
340: #define DSWORDMINVAL SB4MINVAL
341: #define MINDUWORDMAXVAL MINUB4MAXVAL
342: #define MAXDUWORDMINVAL MAXUB4MINVAL
343: #define MINDSWORDMAXVAL MINSB4MAXVAL
344: #define MAXDSWORDMINVAL MAXSB4MINVAL
345: #define DWORDMAXVAL DSWORDMAXVAL
346: #define DWORDMINVAL DSWORDMINVAL
347:
348:
349:
350: /* PRODUCT LINE DEVELOPERS: Change this typedef to a type which has the
351: * same size as the current size of size_t in your platform. Once the size
352: * of dsize_t has been defined, it should always be of the same size in all
353: * future versions (irrespective of the size of size_t in later versions)
354: *
355: * For example in Solaris size_t is defined as unsigned int which is
356: * the same as ub4. Hence it is defined as ub4.
357: */
358:
359: #ifndef lint
360: typedef ub4 dsize_t;
361: # else
362: # define dsize_t ub4
363: #endif /*LINT */
364:
365: # define DSIZE_TMAXVAL UB4MAXVAL
366: # define MINDSIZE_TMAXVAL (dsize_t)65535
367:
368:
369: /* PRODUCT LINE DEVELOPERS: Change this typedef to a type which has the
370: * same size as the current size of boolean in your platform. Once the size
371: * of dboolean has been defined, it should always be of the same size in all
372: * future versions (irrespective of the size of boolean in later versions)
373: *
374: * For example in Solaris boolean is defined as int which is 4 bytes. Hence
375: * dboolean is defined as sb4.
376: */
377:
378: #ifndef lint
379: typedef sb4 dboolean;
380: # else
381: # define dboolean sb4
382: #endif /*LINT */
383:
384:
385: /*
386: * PRODUCT LINE DEVELOPERS: Change this typedef to a type which has the
387: * same size as the size of ptr_t in the existing version. Once the size of
388: * dptr_t has been defined it should always be of the same size in all future
389: * versions, irrrespective of the size of ptr_t in later versions.
390: *
391: * For example in Solaris the pointer is a 4 byte quantity and hence dptr_t
392: * is defined as ub4.
393: *
394: * WARNING! dptr_t has been defined to be a non-pointer datatype so that
395: * we can guarantee that the size remains same! So it should never be used
396: * to store a pointer. It should only be used as a place holder to preserve
397: * the size of the structure.
398: */
399:
400:
401: #ifndef lint
402: typedef ub4 dptr_t;
403: #else
404: #define dptr_t ub4
405: #endif /* lint */
406:
407:
408: /* SLMXFNMLEN: Maximum file name length */
409: #ifdef AIXRIOS
410: # define SLMXFNMLEN 256
411: #else
412: # define SLMXFNMLEN 512
413: #endif /* AIXRIOS */
414:
415:
416: /**-------------------------------------------------------------------------**/
417: /** OBSOLETE DATA TYPES **/
418: /**-------------------------------------------------------------------------**/
419:
420: /* OBSOLETE: The following data types have been obsoleted. They should
421: * not be used in any new code. Types word, b1, b2, & b4 were
422: * considered to be synonyms of eword, eb1, eb2 & eb4, but which
423: * actually had to be implemented as sword, sb1, sb2, & sb4 for
424: * backward compatibility of old code.
425: */
426:
427: /* ebx definitions */
428:
429: #ifndef lint
430: typedef char eb1;
431: typedef short eb2;
432: typedef int eb4;
433: typedef eb4 deword;
434: #else
435: # define eb1 char
436: # define eb2 short
437: # define eb4 int
438: # define deword eb4
439: #endif
440:
441: #define EB1MAXVAL ((eb1)SCHAR_MAX)
442: #define EB1MINVAL ((eb1) 0)
443: #define MINEB1MAXVAL ((eb1) 127)
444: #define MAXEB1MINVAL ((eb1) 0)
445: #define EB2MAXVAL ((eb2) SHRT_MAX)
446: #define EB2MINVAL ((eb2) 0)
447: #define MINEB2MAXVAL ((eb2) 32767)
448: #define MAXEB2MINVAL ((eb2) 0)
449: #define EB4MAXVAL ((eb4) INT_MAX)
450: #define EB4MINVAL ((eb4) 0)
451: #define MINEB4MAXVAL ((eb4) 2147483647)
452: #define MAXEB4MINVAL ((eb4) 0)
453: #define DEWORDMAXVAL EB4MAXVAL
454: #define DEWORDMINVAL EB4MINVAL
455: #define MINDEWORDMAXVAL MINEB4MAXVAL
456: #define MAXDEWORDMINVAL MAXEB4MINVAL
457:
458:
459: /* bx definitions */
460:
461: #ifndef lint
462: typedef sb1 b1;
463: #else
464: #define b1 sb1
465: #endif /* lint */
466: #define B1MAXVAL SB1MAXVAL
467: #define B1MINVAL SB1MINVAL
468:
469: #ifndef lint
470: typedef sb2 b2;
471: #else
472: #define b2 sb2
473: #endif /* lint */
474: #define B2MAXVAL SB2MAXVAL
475: #define B2MINVAL SB2MINVAL
476:
477: #ifndef lint
478: typedef sb4 b4;
479: #else
480: #define b4 sb4
481: #endif /* lint */
482: # define B4MAXVAL SB4MAXVAL
483: # define B4MINVAL SB4MINVAL
484:
485:
486: #ifndef uiXT
487: /* Since the use of BITS16 and BITS32 conflict with X Windows definitions, */
488: /* they need to disappear when Xt-based toolkits are being compiled. */
489:
490: /* OBSOLETE: BITS8/16/32 are synonyms of ub1/2/4, which are preferred */
491: typedef ub1 BITS8; /* Can hold 8 bits */
492: typedef ub2 BITS16; /* Can hold 16 bits */
493: typedef ub4 BITS32; /* Can hold 32 bits */
494: #endif /* uiXT */
495:
496: /* OBSOLETE: For C++ users who are using Microsoft Foundation Classes, the
497: * obsolete Oracle type text conflicts with a reserved keyword. If LUSEMFC is
498: * defined, the Oracle definition of text is not used.
499: */
500: #if !defined(LUSEMFC)
501: # ifdef lint
502: # define text unsigned char
503: # define OraText unsigned char
504: # else
505: typedef oratext text;
506: typedef oratext OraText;
507: # endif /* lint */
508: #endif /* !LUSEMFC */
509:
510: /* OBSOLETE:
511: ** M_IDEN - maximum identifier size
512: **
513: ** This constant is generic, and should NEVER be changed.
514: */
515: #define M_IDEN 30
516:
517:
518: #endif /* SX3_ORACLE */
519:
520:
E-mail: