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