libtt/process.c: coverity CID 87051; use after free
[oweals/cde.git] / cde / lib / DtHelp / SDLI.h
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
6  * These libraries and programs are free software; you can
7  * redistribute them and/or modify them under the terms of the GNU
8  * Lesser General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * These libraries and programs are distributed in the hope that
13  * they will be useful, but WITHOUT ANY WARRANTY; without even the
14  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  * PURPOSE. See the GNU Lesser General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these librararies and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  */
23 /* $XConsortium: SDLI.h /main/7 1995/11/28 14:24:36 cde-hp $ */
24 /*************************************<+>*************************************
25  *****************************************************************************
26  **
27  **  File:   SDLI.h
28  **
29  **  Project:
30  **
31  **  Description:  Public Header file for Canvas.c
32  **
33  **  (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 Hewlett-Packard Company
34  **
35  **  (c) Copyright 1993, 1994 Hewlett-Packard Company
36  **  (c) Copyright 1993, 1994 International Business Machines Corp.
37  **  (c) Copyright 1993, 1994 Sun Microsystems, Inc.
38  **  (c) Copyright 1993, 1994 Novell, Inc.
39  **
40  *******************************************************************
41  *************************************<+>*************************************/
42 #ifndef _DtHelpSDLI_h
43 #define _DtHelpSDLI_h
44
45
46 #ifdef __cplusplus
47 extern "C" {
48 #endif
49
50 /*****************************************************************************
51  * SDL DTD versioning defines
52  *****************************************************************************/
53 /*
54  * The first version
55  */
56 #define SDL_DTD_VERSION         1
57
58 /*
59  * The first minor version
60  */
61 #define SDL_DTD_1_0             0
62
63 /*
64  * Virpage levels went from 1-n.
65  * Any virpage with a level of
66  * zero (or less) are hidden.
67  */
68 #define SDL_DTD_1_1             1
69
70 /*****************************************************************************
71  * Attribute type enumerations
72  *****************************************************************************/
73 enum    SdlAttrDataType {
74 /* bad data type */
75         SdlAttrDataTypeInvalid,
76 /* valid data types */
77         SdlAttrDataTypeId  , SdlAttrDataTypeNumber, SdlAttrDataTypeCdata,
78         SdlAttrDataTypeFont, SdlAttrDataTypeEnum };
79
80 /*****************************************************************************
81  * Option enumerations
82  *****************************************************************************/
83 enum    sdlOption
84   {
85 /*
86  * all _DtCv enums are from the canvas engine
87  */
88 /* bad option indicator */
89         SdlOptionBad = _DtCvOPTION_BAD,
90 /* string breakng types */
91         SdlLiteral   = _DtCvLITERAL,
92         SdlDynamic   = _DtCvDYNAMIC,
93 /* table border types */
94         SdlBorderNone   = _DtCvBORDER_NONE,
95         SdlBorderFull   = _DtCvBORDER_FULL,
96         SdlBorderHorz   = _DtCvBORDER_HORZ,
97         SdlBorderVert   = _DtCvBORDER_VERT,
98         SdlBorderTop    = _DtCvBORDER_TOP,
99         SdlBorderBottom = _DtCvBORDER_BOTTOM,
100         SdlBorderLeft   = _DtCvBORDER_LEFT,
101         SdlBorderRight  = _DtCvBORDER_RIGHT,
102 /* horizontal orientation */
103         SdlJustifyLeftCorner  = _DtCvJUSTIFY_LEFT_CORNER,
104         SdlJustifyLeft        = _DtCvJUSTIFY_LEFT,
105         SdlJustifyLeftMargin  = _DtCvJUSTIFY_LEFT_MARGIN,
106         SdlJustifyCenter      = _DtCvJUSTIFY_CENTER,
107         SdlJustifyRightMargin = _DtCvJUSTIFY_RIGHT_MARGIN,
108         SdlJustifyRight       = _DtCvJUSTIFY_RIGHT,
109         SdlJustifyRightCorner = _DtCvJUSTIFY_RIGHT_CORNER,
110 /* extra horizontal text placement */
111         SdlJustifyNum         = _DtCvJUSTIFY_NUM,
112 /* extra vertical orientation */
113         SdlJustifyTop         = _DtCvJUSTIFY_TOP,
114         SdlJustifyBottom      = _DtCvJUSTIFY_BOTTOM,
115 /* flow types */
116         SdlWrap     = _DtCvWRAP,
117         SdlNoWrap   = _DtCvWRAP_NONE,
118         SdlWrapJoin = _DtCvWRAP_JOIN,
119 /* SDL specific options */
120 /* Boolean */
121         SdlBoolYes      , SdlBoolNo     ,
122
123 /* key classes */
124         SdlClassAcro    , SdlClassBook    , SdlClassEmph    , SdlClassJargon ,
125         SdlClassL10n    , SdlClassName    , SdlClassQuote   , SdlClassProduct,
126         SdlClassTermdef , SdlClassTerm    , SdlClassMachIn  , SdlClassMachOut,
127         SdlClassMachCont, SdlClassPubLit  , SdlClassUdefkey ,
128
129 /* head classes */
130         SdlClassLabel     , SdlClassHead , SdlClassCaption ,
131         SdlClassAnnotation, SdlClassPHead, SdlClassUdefhead,
132
133 /* format classes */
134         SdlClassTable   , SdlClassCell    , SdlClassList,
135         SdlClassItem    , SdlClassText    , SdlClassUdeffrmt,
136
137 /* graphic classes */
138         SdlClassFigure, SdlClassInLine  , SdlClassButton  ,
139         SdlClassIcon  , SdlClassUdefgraph,
140
141 /* phrase styles */
142         SdlClassSuper   , SdlClassSub     ,
143
144 /* apps types */
145         SdlAppAll       , SdlAppHelp      , SdlAppTutorial  ,
146         SdlAppRef       , SdlAppSys       ,
147
148 /* timing */
149         SdlTimingSync   , SdlTimingAsync  ,
150
151 /* types */
152         SdlTypeLiteral  , SdlTypeLined    ,
153         SdlTypeDynamic  , SdlTypeUnlinedLiteral,
154         SdlTypeCdata    ,
155
156 /* links */
157         SdlWindowCurrent , SdlWindowNew, SdlWindowPopup,
158 /* traversal */
159         SdlTraversalReturn, SdlTraversalNoReturn,
160 /* <id> types */
161         SdlIdVirpage , SdlIdBlock   , SdlIdForm    , SdlIdPara    ,
162         SdlIdCPara   , SdlIdHead    , SdlIdSubHead , SdlIdAnchor  ,
163         SdlIdSwitch  , SdlIdSnRef   , SdlIdGraphic , SdlIdText    ,
164         SdlIdAudio   , SdlIdVideo   , SdlIdAnimate ,
165         SdlIdCrossDoc, SdlIdManPage , SdlIdTextFile,
166         SdlIdSysCmd  , SdlIdScript  , SdlIdCallback,
167 /* <script> interpreter types */
168         SdlInterpKsh, SdlInterpTcl, SdlInterpCsh, SdlInterpSh,
169 /* <headstyle> placement types */
170         SdlPlaceParent, SdlPlaceObject,
171 /* <headstyle> stack types */
172         SdlStackHoriz , SdlStackVert
173     };
174
175 typedef enum sdlOption SdlOption;
176
177 /*****************************************************************************
178  * SDL Element enumerations
179  *****************************************************************************/
180 enum    SdlElement
181     {
182         SdlElementNone,
183         SdlElementComment,
184         SdlElementSdlDoc,
185         SdlElementVStruct,
186         SdlElementVirpage,
187         SdlElementHead,
188         SdlElementSubHead,
189         SdlElementSnb,
190         SdlElementBlock,
191         SdlElementForm,
192         SdlElementPara,
193         SdlElementCPara,
194         SdlElementFdata,
195         SdlElementFstyle,
196         SdlElementFrowvec,
197         SdlElementKey,
198         SdlElementCdata,
199 /* System notations */
200         SdlElementGraphic,
201         SdlElementText,
202         SdlElementAudio,
203         SdlElementVideo,
204         SdlElementAnimate,
205         SdlElementCrossDoc,
206         SdlElementManPage,
207         SdlElementTextFile,
208         SdlElementSysCmd,
209         SdlElementCallback,
210         SdlElementScript,
211 /* System notations (end) */
212         SdlElementAnchor,
213         SdlElementLink,
214         SdlElementSwitch,
215         SdlElementSnRef,
216         SdlElementRefItem,
217         SdlElementAltText,
218         SdlElementSphrase,
219         SdlElementRev,
220         SdlElementSpc,
221 /* Conditionals */
222         SdlElementIf,
223         SdlElementCond,
224         SdlElementThen,
225         SdlElementElse,
226 /* Conditionals (end) */
227 /* The sgml header to the document */
228         SdlElementDocument,
229         SdlElementSgml,
230         SdlElementDocType,
231 /* Generated elements in the document */
232         SdlElementLoids,
233         SdlElementToss,
234         SdlElementLoPhrases,
235         SdlElementPhrase,
236         SdlElementIndex,
237         SdlElementEntry,
238         SdlElementRelDocs,
239         SdlElementRelFile,
240         SdlElementNotes,
241 /* Generated elements (end) */
242 /* Table of styles and sematics. */
243         SdlElementKeyStyle,
244         SdlElementHeadStyle,
245         SdlElementFormStyle,
246         SdlElementFrmtStyle,
247         SdlElementGrphStyle,
248 /* Table of styles and sematics.(end) */
249         SdlElementId,
250 /* Support asyncronous blocks */
251         SdlElementBlockAsync,
252 /* Support getting the title of a virpage */
253         SdlElementTitle,
254 /* Support content that has optional markup followed by PCDATA */
255         SdlPcDataFollows
256     };
257
258 /********    Private Defines Declarations    ********/
259 /* sort of enumerated types */
260 #define ENUM_VALUE      0x01
261 #define NUMBER_VALUE    0x02
262 #define STRING1_VALUE   0x03
263 #define STRING2_VALUE   0x04
264
265 #define VALUE_MASK      0x07
266
267 #define VALUE_TYPE_SHIFT        3
268 #define MINOR_MASK      (0x07 << VALUE_TYPE_SHIFT)
269
270 #define SET_ENUM_ATTR(x)        ((x) << VALUE_TYPE_SHIFT | ENUM_VALUE)
271 #define SET_NUMBER_ATTR(x)      ((x) << VALUE_TYPE_SHIFT | NUMBER_VALUE)
272 #define SET_STRING_ATTR(x)      ((x) << VALUE_TYPE_SHIFT | STRING1_VALUE)
273 #define SET_STRING2_ATTR(x)     ((x) << VALUE_TYPE_SHIFT | STRING2_VALUE)
274
275 #define ATTRS_EQUAL(type, x, y) \
276                 (((type) != SdlAttrDataTypeEnum) ? \
277                         ((x) == (y) ? 1 : 0) : \
278                 (((((x) & VALUE_MASK) == ((y) & VALUE_MASK)) && \
279                 ((x) & (y) & ~(VALUE_MASK))) ? 1 : 0))
280
281 #define SDLIsString1(x)         ((((x) & VALUE_MASK) == STRING1_VALUE) ? 1 : 0)
282 #define SDLIsString2(x)         ((((x) & VALUE_MASK) == STRING2_VALUE) ? 1 : 0)
283
284 #define SDLIsStrAttrSet(pa, attr) \
285         (((((attr) & VALUE_MASK)==STRING1_VALUE) ? ((pa).str1_values & attr) : \
286                 ((((attr) & VALUE_MASK)==STRING2_VALUE) ? \
287                         ((pa).str2_values & attr) : 0)) & (~VALUE_MASK))
288
289 #define SDLIsAttrSet(pa, attr) \
290         (((((attr) & VALUE_MASK)==ENUM_VALUE) ? ((pa).enum_values & attr) : \
291          ((((attr) & VALUE_MASK)==NUMBER_VALUE) ? ((pa).num_values & attr) : \
292          ((((attr) & VALUE_MASK)==STRING1_VALUE) ? ((pa).str1_values & attr) : \
293                                 ((pa).str2_values & attr)))) & (~VALUE_MASK))
294
295 #define  SDLAttrFlagType(x)      ((x) & VALUE_MASK)
296
297 /************************************************************************
298  * Enum types
299  ************************************************************************/
300 /*
301  * this set has the same attribute 'class',
302  * but each has a different set of values.
303  */
304 #define SDL_ATTR_CLASS          SET_ENUM_ATTR(1 << 3)
305 #define SDL_ATTR_CLASSALL       (SDL_ATTR_CLASS)
306 #define SDL_ATTR_CLASSH         SET_ENUM_ATTR((1 << 3) | 0x01)
307 #define SDL_ATTR_CLASSF         SET_ENUM_ATTR((1 << 3) | 0x02)
308 #define SDL_ATTR_CLASSK         SET_ENUM_ATTR((1 << 3) | 0x03)
309 #define SDL_ATTR_CLASSG         SET_ENUM_ATTR((1 << 3) | 0x04)
310 #define SDL_ATTR_CLASSFG        SET_ENUM_ATTR((1 << 3) | 0x05)
311 #define SDL_ATTR_CLASSP         SET_ENUM_ATTR((1 << 3) | 0x06)
312
313 /*
314  * this set has the same attribute 'type',
315  * but each has a different set of values.
316  */
317 #define SDL_ATTR_TYPE           SET_ENUM_ATTR((1 << 4) | 0x00)
318 #define SDL_ATTR_TYPEFRMT       SET_ENUM_ATTR((1 << 4) | 0x01)
319 #define SDL_ATTR_TYPEID         SET_ENUM_ATTR((1 << 4) | 0x02)
320
321 #define SDL_ATTR_APP            SET_ENUM_ATTR(1 << 5)
322 #define SDL_ATTR_TIMING         SET_ENUM_ATTR(1 << 6)
323 #define SDL_ATTR_HDR            SET_ENUM_ATTR(1 << 7)
324
325 /* Format Style Attributes */
326 #define SDL_ATTR_BORDER         SET_ENUM_ATTR(1 << 8)
327 #define SDL_ATTR_JUSTIFY        SET_ENUM_ATTR((1 << 9) | 0x00)
328 #define SDL_ATTR_JUSTIFY1       SET_ENUM_ATTR((1 << 9) | 0x01)
329 #define SDL_ATTR_JUSTIFY2       SET_ENUM_ATTR((1 << 9) | 0x02)
330 #define SDL_ATTR_VJUST          SET_ENUM_ATTR(1 << 10)
331
332 /* Head Style Attributes */
333 #define SDL_ATTR_ORIENT         SET_ENUM_ATTR(1 << 11)
334 #define SDL_ATTR_VORIENT        SET_ENUM_ATTR(1 << 12)
335 #define SDL_ATTR_FLOW           SET_ENUM_ATTR(1 << 13)
336 #define SDL_ATTR_WINDOW         SET_ENUM_ATTR(1 << 14)
337 #define SDL_ATTR_PLACEMENT      SET_ENUM_ATTR(1 << 15)
338 #define SDL_ATTR_STACK          SET_ENUM_ATTR(1 << 16)
339
340 /* Link Attribute */
341 #define SDL_ATTR_TRAVERSAL      SET_ENUM_ATTR(1 << 17)
342
343 /* Font Style Attributes */
344 #define SDL_ATTR_STYLE          SET_ENUM_ATTR(1 << 18)
345 #define SDL_ATTR_SPACING        SET_ENUM_ATTR(1 << 19)
346 #define SDL_ATTR_WEIGHT         SET_ENUM_ATTR(1 << 20)
347 #define SDL_ATTR_SLANT          SET_ENUM_ATTR(1 << 21)
348 #define SDL_ATTR_SPECIAL        SET_ENUM_ATTR(1 << 22)
349 #define SDL_ATTR_INTERP         SET_ENUM_ATTR(1 << 23)
350
351 /************************************************************************
352  * number types
353  ************************************************************************/
354 /*
355  * LEVEL and RLEVEL share the same data element in the structure
356  */
357 #define SDL_ATTR_LEVEL           SET_NUMBER_ATTR(1 << 3)
358 #define SDL_ATTR_RLEVEL          SET_NUMBER_ATTR(1 << 4)
359
360 #define SDL_ATTR_LENGTH          SET_NUMBER_ATTR(1 << 5)
361 #define SDL_ATTR_NCOLS           SET_NUMBER_ATTR(1 << 6)
362 #define SDL_ATTR_COUNT           SET_NUMBER_ATTR(1 << 7)
363
364 /* Font Style Attributes */
365 #define SDL_ATTR_POINTSZ         SET_NUMBER_ATTR(1 << 8)
366 #define SDL_ATTR_SETWIDTH        SET_NUMBER_ATTR(1 << 9)
367
368 /* Format Style Attributes */
369 #define SDL_ATTR_FMARGIN         SET_NUMBER_ATTR(1 << 10)
370 #define SDL_ATTR_LMARGIN         SET_NUMBER_ATTR(1 << 11)
371 #define SDL_ATTR_RMARGIN         SET_NUMBER_ATTR(1 << 12)
372 #define SDL_ATTR_TMARGIN         SET_NUMBER_ATTR(1 << 13)
373 #define SDL_ATTR_BMARGIN         SET_NUMBER_ATTR(1 << 14)
374 #define SDL_ATTR_SRCHWT          SET_NUMBER_ATTR(1 << 15)
375 #define SDL_ATTR_OFFSET          SET_NUMBER_ATTR(1 << 16)
376
377 /* Head Style Attributes */
378 #define SDL_ATTR_HEADWDTH        SET_NUMBER_ATTR(1 << 17)
379
380 /************************************************************************
381  * string1 types
382  ************************************************************************/
383 #define SDL_ATTR_VERSION        SET_STRING_ATTR(1 << 0)
384 #define SDL_ATTR_LANGUAGE       SET_STRING_ATTR(1 << 1)
385 #define SDL_ATTR_DOCID          SET_STRING_ATTR(1 << 2)
386
387 /* style attr */
388 #define SDL_ATTR_PHRASE         SET_STRING_ATTR(1 << 3)
389
390 /* refitem */
391 #define SDL_ATTR_BUTTON         SET_STRING_ATTR(1 << 4)
392
393 /* link */
394 #define SDL_ATTR_DESCRIPT       SET_STRING_ATTR(1 << 5)
395 #define SDL_ATTR_LINKINFO       SET_STRING_ATTR(1 << 6)
396
397 /* Font Style Attributes */
398 #define SDL_ATTR_COLOR          SET_STRING_ATTR(1 <<  7)
399 #define SDL_ATTR_XLFD           SET_STRING_ATTR(1 <<  8)
400 #define SDL_ATTR_XLFDI          SET_STRING_ATTR(1 <<  9)
401 #define SDL_ATTR_XLFDB          SET_STRING_ATTR(1 << 10)
402 #define SDL_ATTR_XLFDIB         SET_STRING_ATTR(1 << 11)
403 #define SDL_ATTR_TYPENAM        SET_STRING_ATTR(1 << 12)
404 #define SDL_ATTR_TYPENAMI       SET_STRING_ATTR(1 << 13)
405 #define SDL_ATTR_TYPENAMB       SET_STRING_ATTR(1 << 14)
406 #define SDL_ATTR_TYPENAMIB      SET_STRING_ATTR(1 << 15)
407
408 /*
409  * start share of element 'id'.
410  */
411 #define SDL_ATTR_ID             SET_STRING_ATTR(1 << 16)
412 #define SDL_ATTR_NAME           SET_STRING_ATTR(1 << 17)
413 #define SDL_ATTR_RID            SET_STRING_ATTR(1 << 18)
414 #define SDL_ATTR_CELLS          SET_STRING_ATTR(1 << 19)
415 #define SDL_ATTR_FRST_PG        SET_STRING_ATTR(1 << 20)
416
417 /*
418  * SSI and RSSI share the same element 'ssi'.
419  */
420 #define SDL_ATTR_SSI            SET_STRING_ATTR(1 << 21)
421 #define SDL_ATTR_RSSI           SET_STRING_ATTR(1 << 22)
422
423 /************************************************************************
424  * string2 types
425  ************************************************************************/
426 /*
427  * Group A, B, C, and D all share the same data space
428  *
429  * Group A.
430  */
431 #define SDL_ATTR_CHARSET        SET_STRING2_ATTR(1 <<  0)
432 #define SDL_ATTR_COLW           SET_STRING2_ATTR(1 <<  1)
433 #define SDL_ATTR_COLJ           SET_STRING2_ATTR(1 <<  2)
434 #define SDL_ATTR_TEXT           SET_STRING2_ATTR(1 <<  3)
435 #define SDL_ATTR_BRANCHES       SET_STRING2_ATTR(1 <<  4)
436 #define SDL_ATTR_ABBREV         SET_STRING2_ATTR(1 <<  5)
437 #define SDL_ATTR_ENTER          SET_STRING2_ATTR(1 <<  6)
438 #define SDL_ATTR_EXIT           SET_STRING2_ATTR(1 <<  7)
439
440 /*
441  * Group B.
442  */
443 #define SDL_ATTR_PRODUCT        SET_STRING2_ATTR(1 <<  8)
444 #define SDL_ATTR_LICENSE        SET_STRING2_ATTR(1 <<  9)
445 #define SDL_ATTR_TIMESTAMP      SET_STRING2_ATTR(1 << 10)
446 #define SDL_ATTR_PRODPN         SET_STRING2_ATTR(1 << 11)
447 #define SDL_ATTR_PRODVER        SET_STRING2_ATTR(1 << 12)
448 #define SDL_ATTR_AUTHOR         SET_STRING2_ATTR(1 << 13)
449 #define SDL_ATTR_SDLDTD         SET_STRING2_ATTR(1 << 14)
450 #define SDL_ATTR_SRCDTD         SET_STRING2_ATTR(1 << 15)
451 #define SDL_ATTR_PUBID          SET_STRING2_ATTR(1 << 16)
452
453 /*
454  * Group C.
455  * the group uses the SDL_ATTR_PRODUCT & SDL_ATTR_LICENSE
456  */
457 #define SDL_ATTR_FORMAT         SET_STRING2_ATTR(1 << 17)
458 #define SDL_ATTR_METHOD         SET_STRING2_ATTR(1 << 18)
459 #define SDL_ATTR_XID            SET_STRING2_ATTR(1 << 19)
460 #define SDL_ATTR_COMMAND        SET_STRING2_ATTR(1 << 20)
461 #define SDL_ATTR_DATA           SET_STRING2_ATTR(1 << 21)
462
463 /*
464  * Group D.
465  * Used for <entry>
466  */
467 #define SDL_ATTR_MAIN           SET_STRING2_ATTR(1 << 22)
468 #define SDL_ATTR_LOCS           SET_STRING2_ATTR(1 << 23)
469 #define SDL_ATTR_SYNS           SET_STRING2_ATTR(1 << 24)
470 #define SDL_ATTR_SORT           SET_STRING2_ATTR(1 << 25)
471
472 /* Attribute Value defines */
473 enum    SdlAttrValue
474   {
475         SdlAttrValueBad,
476         SdlAttrValueImplied,
477         SdlAttrValueRequired,
478         SdlAttrValueImpliedDef
479   };
480
481 /* Segment types */
482 #define SDL_ELEMENT     CE_ELEMENT
483 #define SDL_STRING      CE_STRING
484 #define SDL_GRAPHIC     CE_GRAPHIC
485
486 #define SDL_ELEMENT_SHIFT       CE_SHIFT_PAST_CHAR_SIZE
487 #define SDL_ELEMENT_MASK        (0xfffff  << SDL_ELEMENT_SHIFT)
488
489 /*
490  * this is the maximum number of bits in an unsigned long value.
491  * This is for the inclusion and exclustion masks.
492  */
493 /* On Hewlett-Packard Machines! */
494 #define SDL_MASK_SIZE   32
495 #define SDL_MASK_LEN     2
496
497 /********    Private Macro Declarations    ********/
498
499 #define SDLSetTypeOfSegment(x,y)        (((x) & ~(CE_PRIMARY_MASK)) | (y))
500 #define SDLGetTypeOfSegent(x)   _CEGetPrimaryType(x)
501
502 #define SDLSetTypeToElement(x)  SDLSetTypeOfSegment((x), SDL_ELEMENT)
503 #define SDLSetTypeToString(x)   SDLSetTypeOfSegment((x), SDL_STRING)
504 #define SDLSetTypeToGraphic(x)  SDLSetTypeOfSegment((x), SDL_GRAPHIC)
505 #define SDLSetTypeToSpecial(x)  SDLSetTypeOfSegment((x), CE_SPECIAL)
506
507 #ifndef SDLAttrOffset
508 #define SDLAttrOffset(p_type, field) \
509         (((char *)(&(((p_type)NULL)->field)))-((char *)NULL))
510 #endif
511
512 #define SDLSearchMask(mask, value) \
513         ((mask[(value)/SDL_MASK_SIZE] & \
514                 (((unsigned)1L) << ((value) % SDL_MASK_SIZE))) ? True : False)
515
516 #define SDLMaskValue1(value) \
517         (((value) < SDL_MASK_SIZE ? ((unsigned)1L) : 0) \
518                                                 << ((value) % SDL_MASK_SIZE))
519
520 #define SDLMaskValue2(value) \
521         (((value) < SDL_MASK_SIZE ? 0: ((unsigned)1L)) \
522                                                 << ((value) % SDL_MASK_SIZE))
523
524 #define SDLClearAllBits { 0, 0 }
525
526 #define SDLSetAllBits   \
527         { ~(SDLMaskValue1(SdlElementNone)), ~(SDLMaskValue2(SdlElementNone)) }
528
529 #define SDLCheckMask(mask) \
530         (((mask)[0] != 0 || (mask)[1] != 0) ? 1 : 0)
531
532 #define SDLStripFromMask(mask, value) \
533         (mask)[(value)/SDL_MASK_SIZE] = \
534                 ((mask)[(value)/SDL_MASK_SIZE] & \
535                         (~(((unsigned)1L) << ((value) % SDL_MASK_SIZE))))
536
537 #define SDLInitMask(value)      \
538         { \
539           SDLMaskValue1(value), \
540           SDLMaskValue2(value), \
541         }
542
543 #define SDLInitMaskTwo(value1, value2) \
544         { \
545           SDLMaskValue1(value1) | SDLMaskValue1(value2), \
546           SDLMaskValue2(value1) | SDLMaskValue2(value2), \
547         }
548 #define SDLInitMaskThree(value1, value2, value3) \
549         { \
550           SDLMaskValue1(value1) | SDLMaskValue1(value2) | SDLMaskValue1(value3), \
551           SDLMaskValue2(value1) | SDLMaskValue2(value2) | SDLMaskValue2(value3), \
552         }
553 #define SDLInitMaskFour(value1, value2, value3, value4) \
554         { \
555           SDLMaskValue1(value1)   | SDLMaskValue1(value2) | \
556             SDLMaskValue1(value3) | SDLMaskValue1(value4),  \
557           SDLMaskValue2(value1)   | SDLMaskValue2(value2) | \
558             SDLMaskValue2(value3) | SDLMaskValue2(value4),  \
559         }
560 #define SDLInitMaskFive(value1, value2, value3, value4, value5) \
561         { \
562           SDLMaskValue1(value1) | SDLMaskValue1(value2) | SDLMaskValue1(value3) | \
563             SDLMaskValue1(value4) | SDLMaskValue1(value5),\
564           SDLMaskValue2(value1) | SDLMaskValue2(value2) | SDLMaskValue2(value3) | \
565             SDLMaskValue2(value4) | SDLMaskValue2(value5),\
566         }
567 #define SDLInitMaskSix(value1, value2, value3, value4, value5, value6) \
568         { \
569           SDLMaskValue1(value1)   | SDLMaskValue1(value2) | \
570             SDLMaskValue1(value3) | SDLMaskValue1(value4) | \
571             SDLMaskValue1(value5) | SDLMaskValue1(value6),  \
572           SDLMaskValue2(value1)   | SDLMaskValue2(value2) | \
573             SDLMaskValue2(value3) | SDLMaskValue2(value4) | \
574             SDLMaskValue2(value5) | SDLMaskValue2(value6),  \
575         }
576 #define SDLInitMaskSeven(value1, value2, value3,\
577                                 value4, value5, value6, value7) \
578         { \
579           SDLMaskValue1(value1)   | SDLMaskValue1(value2) | \
580             SDLMaskValue1(value3) | SDLMaskValue1(value4) | \
581             SDLMaskValue1(value5) | SDLMaskValue1(value6) | \
582             SDLMaskValue1(value7),  \
583           SDLMaskValue2(value1)   | SDLMaskValue2(value2) | \
584             SDLMaskValue2(value3) | SDLMaskValue2(value4) | \
585             SDLMaskValue2(value5) | SDLMaskValue2(value6) | \
586             SDLMaskValue2(value7),  \
587         }
588
589 #define SDLInitMaskEight(value1, value2, value3, value4, value5, \
590                                 value6, value7, value8) \
591         { \
592           SDLMaskValue1(value1)   | SDLMaskValue1(value2) | \
593             SDLMaskValue1(value3) | SDLMaskValue1(value4) | \
594             SDLMaskValue1(value5) | SDLMaskValue1(value6) | \
595             SDLMaskValue1(value7) | SDLMaskValue1(value8),  \
596           SDLMaskValue2(value1)   | SDLMaskValue2(value2) | \
597             SDLMaskValue2(value3) | SDLMaskValue2(value4) | \
598             SDLMaskValue2(value5) | SDLMaskValue2(value6) | \
599             SDLMaskValue2(value7) | SDLMaskValue2(value8),  \
600         }
601
602 #define SDLInitMaskNine(value1, value2, value3, value4, value5, \
603                                 value6, value7, value8, value9) \
604         { \
605           SDLMaskValue1(value1)   | SDLMaskValue1(value2) | \
606             SDLMaskValue1(value3) | SDLMaskValue1(value4) | \
607             SDLMaskValue1(value5) | SDLMaskValue1(value6) | \
608             SDLMaskValue1(value7) | SDLMaskValue1(value8) | \
609             SDLMaskValue1(value9),                         \
610           SDLMaskValue2(value1)   | SDLMaskValue2(value2) | \
611             SDLMaskValue2(value3) | SDLMaskValue2(value4) | \
612             SDLMaskValue2(value5) | SDLMaskValue2(value6) | \
613             SDLMaskValue2(value7) | SDLMaskValue2(value8) | \
614             SDLMaskValue2(value9),                         \
615         }
616
617 #define SDLInitMaskEleven(value1, value2, value3, value4, value5, \
618                                 value6, value7, value8, value9, value10, \
619                                 value11) \
620         { \
621           SDLMaskValue1(value1)    | SDLMaskValue1(value2)  | \
622             SDLMaskValue1(value3)  | SDLMaskValue1(value4)  | \
623             SDLMaskValue1(value5)  | SDLMaskValue1(value6)  | \
624             SDLMaskValue1(value7)  | SDLMaskValue1(value8)  | \
625             SDLMaskValue1(value9)  | SDLMaskValue1(value10) | \
626             SDLMaskValue1(value11),                          \
627           SDLMaskValue2(value1)    | SDLMaskValue2(value2)  | \
628             SDLMaskValue2(value3)  | SDLMaskValue2(value4)  | \
629             SDLMaskValue2(value5)  | SDLMaskValue2(value6)  | \
630             SDLMaskValue2(value7)  | SDLMaskValue2(value8)  | \
631             SDLMaskValue2(value9)  | SDLMaskValue2(value10) | \
632             SDLMaskValue2(value11),                          \
633         }
634
635 #define SDLInitMaskTwelve(value1, value2, value3, value4, value5, \
636                                 value6, value7, value8, value9, value10, \
637                                 value11, value12) \
638         { \
639           SDLMaskValue1(value1)    | SDLMaskValue1(value2)  | \
640             SDLMaskValue1(value3)  | SDLMaskValue1(value4)  | \
641             SDLMaskValue1(value5)  | SDLMaskValue1(value6)  | \
642             SDLMaskValue1(value7)  | SDLMaskValue1(value8)  | \
643             SDLMaskValue1(value9)  | SDLMaskValue1(value10) | \
644             SDLMaskValue1(value11) | SDLMaskValue1(value12),  \
645           SDLMaskValue2(value1)    | SDLMaskValue2(value2)  | \
646             SDLMaskValue2(value3)  | SDLMaskValue2(value4)  | \
647             SDLMaskValue2(value5)  | SDLMaskValue2(value6)  | \
648             SDLMaskValue2(value7)  | SDLMaskValue2(value8)  | \
649             SDLMaskValue2(value9)  | SDLMaskValue2(value10) | \
650             SDLMaskValue2(value11) | SDLMaskValue2(value12),  \
651         }
652
653 #define SDLInitMaskThirteen(value1, value2, value3, value4, value5, \
654                                 value6 , value7 , value8 , value9, value10, \
655                                 value11, value12, value13) \
656         { \
657           SDLMaskValue1(value1)    | SDLMaskValue1(value2)  | \
658             SDLMaskValue1(value3)  | SDLMaskValue1(value4)  | \
659             SDLMaskValue1(value5)  | SDLMaskValue1(value6)  | \
660             SDLMaskValue1(value7)  | SDLMaskValue1(value8)  | \
661             SDLMaskValue1(value9)  | SDLMaskValue1(value10) | \
662             SDLMaskValue1(value11) | SDLMaskValue1(value12) | \
663             SDLMaskValue1(value13),                          \
664           SDLMaskValue2(value1)    | SDLMaskValue2(value2)  | \
665             SDLMaskValue2(value3)  | SDLMaskValue2(value4)  | \
666             SDLMaskValue2(value5)  | SDLMaskValue2(value6)  | \
667             SDLMaskValue2(value7)  | SDLMaskValue2(value8)  | \
668             SDLMaskValue2(value9)  | SDLMaskValue2(value10) | \
669             SDLMaskValue2(value11) | SDLMaskValue2(value12) | \
670             SDLMaskValue2(value13),                          \
671         }
672
673 #define SDLInitMaskFourteen(value1, value2, value3, value4, value5, \
674                                 value6 , value7 , value8 , value9, value10, \
675                                 value11, value12, value13, value14) \
676         { \
677           SDLMaskValue1(value1)    | SDLMaskValue1(value2)  | \
678             SDLMaskValue1(value3)  | SDLMaskValue1(value4)  | \
679             SDLMaskValue1(value5)  | SDLMaskValue1(value6)  | \
680             SDLMaskValue1(value7)  | SDLMaskValue1(value8)  | \
681             SDLMaskValue1(value9)  | SDLMaskValue1(value10) | \
682             SDLMaskValue1(value11) | SDLMaskValue1(value12) | \
683             SDLMaskValue1(value13) | SDLMaskValue1(value14),  \
684           SDLMaskValue2(value1)    | SDLMaskValue2(value2)  | \
685             SDLMaskValue2(value3)  | SDLMaskValue2(value4)  | \
686             SDLMaskValue2(value5)  | SDLMaskValue2(value6)  | \
687             SDLMaskValue2(value7)  | SDLMaskValue2(value8)  | \
688             SDLMaskValue2(value9)  | SDLMaskValue2(value10) | \
689             SDLMaskValue2(value11) | SDLMaskValue2(value12) | \
690             SDLMaskValue2(value13) | SDLMaskValue1(value14),  \
691         }
692
693 /********    Private Typedef Declarations    ********/
694 typedef char*   SDLId;
695 typedef char*   SDLCdata;
696
697 typedef int     SDLNumber;
698 typedef unsigned long   SDLMask;        /* must be a 32 bit value */
699
700 typedef _DtHelpFontHints*       _DtHelpFontHintPtr;
701
702 /********    Private Structures Declarations    ********/
703
704 typedef struct  {
705         const char      *string;
706         SdlOption        option_value;
707 } OptionList;
708
709 typedef struct  {
710         unsigned long           attr_value;
711         const OptionList        *options;
712 } SDLAttributeOptions;
713
714 typedef struct {
715         const char      *string;
716         _DtHelpFontValue option_value;
717 } FontSpecOption;
718
719 typedef struct {
720         unsigned long            attr_value;
721         const FontSpecOption    *options;
722 } SDLFontSpecList;
723
724 typedef struct {
725         SDLMask mask[SDL_MASK_LEN];
726         int     (*model)();
727 } SDLContent;
728
729 enum    SdlStructType {
730         SdlStructTypeBad = -1,
731         SdlIgnore,
732         SdlFontSpecific,
733         SdlElementSpecific,
734         SdlTableSpecific,
735         SdlContainerSpecific
736 };
737
738 typedef struct {
739         const char              *name;
740         enum SdlAttrDataType     data_type;
741         enum SdlStructType       struct_type;
742         int                      sdl_attr_define;
743         int                      field_ptr;
744 } SDLAttribute;
745
746 typedef struct {
747         int                      sdl_attr_define;
748         enum SdlAttrValue        sdl_value;
749         const char              *def_string;
750 } SDLElementAttrList;
751
752 enum    _sdlElToGeneral
753   {
754     SdlToNone,
755     SdlToContainer,
756     SdlToMarker,
757     SdlToGraphic,
758     SdlToString,
759     SdlToSpc,
760     SdlToSnb
761   };
762
763 typedef enum _sdlElToGeneral    SdlToGeneral;
764
765 typedef struct _sdlElementInfo {
766         const char              *element_str;     /* the element string     */
767         const char              *element_end_str; /* the ending string      */
768         int                      str_sig_chars;   /* # of significant chars */
769         int                      end_sig_chars;   /* # of significant chars */
770         enum    SdlElement       sdl_element;     /* The element's value    */
771         SDLMask                  exceptions[SDL_MASK_LEN];
772                                                   /* what elements cannot
773                                                      appear in this element */
774         const SDLElementAttrList *attrib_list;    /* attribute list         */
775         const SDLContent        *content;         /* The element's content  */
776         int                      elim_flag;       /* If this element's
777                                                      segment list is null,
778                                                      eleminate the element  */
779         int                      cdata_flag;      /* If no attributes, is
780                                                      there cdata before the
781                                                      end                    */
782         int                      formatting;      /* does this cause a
783                                                      formatting break       */
784         int                      new_fonts;       /* does this cause new
785                                                      fonts to be pulled in? */
786         SdlToGeneral             sdl_to_gen;      /* What kind of general
787                                                      type is this element?  */
788 } SDLElementInfo;
789
790 /********    Private Macros Declarations    ********/
791
792 #ifndef _SdlIsTossStyle
793 #define _SdlIsTossStyle(x)      (SdlElementKeyStyle  == (x) || \
794                                  SdlElementHeadStyle == (x) || \
795                                  SdlElementFormStyle == (x) || \
796                                  SdlElementFrmtStyle == (x) || \
797                                  SdlElementGrphStyle == (x))
798 #endif
799
800 /********    Private Function Declarations    ********/
801
802 #ifdef __cplusplus
803 }  /* Close scope of 'extern "C"' declaration which encloses file. */
804 #endif
805
806 #endif /* _DtHelpSDLI_h */
807 /* DON'T ADD ANYTHING AFTER THIS #endif */