home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1995 April / Internet Tools.iso / osi / isode / vmsisode / vmsisode80_tar.Z / vmsisode80_tar / sockit / gccinclude / x11 / intrinsic.h < prev    next >
Encoding:
C/C++ Source or Header  |  1990-04-24  |  18.1 KB  |  669 lines

  1. /*  DEC/CMS REPLACEMENT HISTORY, Element INTRINSIC.H */
  2. /*   7    31-MAR-1988 12:03:25 TREGGIARI "MARCH 30 INTRINSICS" */
  3. /*   6    24-MAR-1988 16:03:56 TREGGIARI "Replace with completely new version" */
  4. /*  *5    27-FEB-1988 18:22:07 GEORGE "Add copyright" */
  5. /*  *4     5-JAN-1988 15:43:52 TREGGIARI "Replace with completely new version" */
  6. /*  *3    18-DEC-1987 14:10:37 TREGGIARI "Replace with completely new version" */
  7. /*  *2     2-NOV-1987 17:17:57 TREGGIARI "Replace with completely new version" */
  8. /*  *1     2-NOV-1987 14:55:38 ORGOVAN "Initial Entry" */
  9. /*  DEC/CMS REPLACEMENT HISTORY, Element INTRINSIC.H */
  10. /*
  11. * $Header: Intrinsic.h,v 6.17 87/12/16 10:23:22 asente Exp $
  12. */
  13.  
  14. /*
  15. *****************************************************************************
  16. **                                                                          *
  17. **                         COPYRIGHT (c) 1988 BY                            *
  18. **             DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.                *
  19. **               ALL RIGHTS RESERVED                              *
  20. **                                                                          *
  21. **  THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND  COPIED  *
  22. **  ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH  LICENSE AND WITH THE  *
  23. **  INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR  ANY  OTHER  *
  24. **  COPIES  THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY  *
  25. **  OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF  THE  SOFTWARE  IS  HEREBY  *
  26. **  TRANSFERRED.                                                            *
  27. **                                                                          *
  28. **  THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE  WITHOUT  NOTICE  *
  29. **  AND  SHOULD  NOT  BE  CONSTRUED  AS  A COMMITMENT BY DIGITAL EQUIPMENT  *
  30. **  CORPORATION.                                                            *
  31. **                                                                          *
  32. **  DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR  RELIABILITY  OF  ITS  *
  33. **  SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.                 *
  34. **                                                                          *
  35. *****************************************************************************
  36. **++
  37. **  FACILITY:
  38. **
  39. **    < to be supplied >
  40. **
  41. **  ABSTRACT:
  42. **
  43. **    < to be supplied >
  44. **
  45. **  ENVIRONMENT:
  46. **
  47. **    < to be supplied >
  48. **
  49. **  MODIFICATION HISTORY:
  50. **
  51. **    < to be supplied >
  52. **
  53. **--
  54. **/
  55.  
  56. #ifndef _XtIntrinsic_h
  57. #define _XtIntrinsic_h
  58. #ifndef VMS
  59. #include    <X11/Xlib.h>
  60. #include    <X11/Xresource.h>
  61. #include    <sys/types.h>
  62. #else
  63. #include    <decw$include/Xlib.h>
  64. #include    <decw$include/Xresource.h>
  65. #ifdef __GNUC__
  66. #include    <sys/types.h>
  67. #else
  68. #include    types
  69. #endif
  70. #endif
  71.  
  72. #ifndef NULL
  73. #define NULL 0
  74. #endif
  75.  
  76. #ifdef unix
  77. #define globalref extern
  78. #define globaldef
  79. #endif
  80.  
  81. #ifndef FALSE
  82. #define FALSE 0
  83. #define TRUE  1
  84. #endif
  85.  
  86. #define XtNumber(arr)        ((Cardinal) (sizeof(arr) / sizeof(arr[0])))
  87.  
  88. typedef char *String;
  89. typedef struct _WidgetRec *Widget;
  90. typedef Widget *WidgetList;
  91. typedef struct _WidgetClassRec *WidgetClass;
  92. typedef struct _CompositeRec *CompositeWidget;
  93. typedef struct _XtActionsRec *XtActionList;
  94. typedef struct _XtResource *XtResourceList;
  95. typedef unsigned int   Cardinal;
  96. typedef char    Boolean;
  97. typedef unsigned long    *Opaque;
  98. typedef struct _TranslationData    *XtTranslations;
  99. typedef struct _XtCallbackRec*    XtCallbackList;
  100. typedef unsigned long   XtValueMask;
  101. typedef unsigned long   XtIntervalId;
  102. typedef unsigned long   XtInputId;
  103. typedef unsigned int    XtGeometryMask;
  104. typedef unsigned long   XtGCMask;   /* Mask of values that are used by widget*/
  105. typedef unsigned long   Pixel;        /* Index into colormap            */
  106. typedef int        Position;   /* Offset from 0 coordinate            */
  107. typedef unsigned int    Dimension;  /* Size in pixels                */
  108. typedef enum {no_callbacklist, no_callbacks, yes_callbacks} CallbackStatus;
  109.  
  110. /****************************************************************
  111.  *
  112.  * System Dependent Definitions
  113.  *
  114.  *
  115.  * XtArgVal ought to be a union of caddr_t, char *, long, int *, and proc *
  116.  * but casting to union types is not really supported.
  117.  *
  118.  * So the typedef for XtArgVal should be chosen such that
  119.  *
  120.  *      sizeof (XtArgVal) >=    sizeof(caddr_t)
  121.  *                sizeof(char *)
  122.  *                sizeof(long)
  123.  *                sizeof(int *)
  124.  *                sizeof(proc *)
  125.  *
  126.  * ArgLists rely heavily on the above typedef.
  127.  *
  128.  ****************************************************************/
  129. typedef long XtArgVal;
  130.  
  131. #ifdef VMS
  132. #include <decw$include/Core.h>
  133. #include <decw$include/Composite.h>
  134. #include <decw$include/Constraint.h>
  135. #else
  136. #include "Core.h"
  137. #include "Composite.h"
  138. #include "Constraint.h"
  139. #endif
  140.  
  141. extern Boolean XtIsSubclass ();
  142.     /* Widget       widget;        */
  143.     /* WidgetClass  widgetClass;    */
  144.  
  145. #define XtIsComposite(widget)    XtIsSubclass((widget), compositeWidgetClass)
  146.  
  147. extern Widget XtCreateWidget ();
  148.     /* String        name;        */
  149.     /* WidgetClass  widget_class;    */
  150.     /* Widget       parent;        */
  151.     /* ArgList      args;        */
  152.     /* Cardinal     num_args;       */
  153.  
  154. extern Widget XtCreateManagedWidget ();
  155.     /* String        name;        */
  156.     /* WidgetClass  widget_class;    */
  157.     /* Widget       parent;        */
  158.     /* ArgList      args;        */
  159.     /* Cardinal     num_args;       */
  160.  
  161. extern Widget XtCreateApplicationShell ();
  162.     /* String        name;        */
  163.     /* WidgetClass  widget_class;    */
  164.     /* ArgList      args;        */
  165.     /* Cardinal     num_args;       */
  166.  
  167. extern void XtRealizeWidget ();
  168.     /* Widget    widget      */
  169.  
  170. extern Boolean XtIsRealized ();
  171.     /* Widget    widget; */
  172.  
  173. extern void XtDestroyWidget ();
  174.     /* Widget widget */
  175.  
  176. extern void XtSetSensitive ();
  177.     /* Widget    widget;    */
  178.     /* Boolean   sensitive; */
  179.  
  180. extern void XtSetMappedWhenManaged ();
  181.     /* Widget    widget;    */
  182.     /* Boolean   mappedWhenManaged; */
  183.  
  184. extern Widget XtNameToWidget(); /* root, name */
  185.     /* Widget root; */
  186.     /* String name; */
  187.  
  188. extern Widget XtWindowToWidget(); /* window */
  189.     /* Display *display; */
  190.     /* Window window; */
  191.  
  192. /**********************************************************
  193.  *
  194.  * Composite widget Procedures
  195.  *
  196.  **********************************************************\
  197.  
  198. extern void XtManageChildren ();
  199.     /* WidgetList children; */
  200.     /* Cardinal   num_children; */
  201.  
  202. extern void XtManageChild ();
  203.     /* Widget    child; */
  204.  
  205. extern void XtUnmanageChildren ();
  206.     /* WidgetList children; */
  207.     /* Cardinal   num_children; */
  208.  
  209. extern void XtUnmanageChild ();
  210.     /* Widget child; */
  211.  
  212. /*************************************************************
  213.  *
  214.  *  Callbacks
  215.  *
  216.  **************************************************************/
  217.  
  218. typedef void (*XtCallbackProc)();
  219.     /* Widget widget; */
  220.     /* caddr_t closure;  data the application registered */
  221.     /* caddr_t callData; widget instance specific data passed to application*/
  222.  
  223. typedef struct _XtCallbackRec {
  224.     XtCallbackProc  callback;
  225.     caddr_t        closure;
  226. } XtCallbackRec;
  227.  
  228. extern void XtAddCallback ();
  229.     /* Widget        widget;        */
  230.     /* String        callback_name;  */
  231.     /* XtCallbackProc   callback;       */
  232.     /* caddr_t        closure;    */
  233.  
  234. extern void XtRemoveCallback ();
  235.     /* Widget        widget;        */
  236.     /* String        callback_name;  */
  237.     /* XtCallbackProc   callback;       */
  238.     /* caddr_t        closure;    */
  239.  
  240. extern void XtAddCallbacks ();
  241.     /* Widget        widget;        */
  242.     /* String        callback_name;  */
  243.     /* XtCallbackList   callbacks;       */
  244.  
  245. extern void XtRemoveCallbacks ();
  246.     /* Widget        widget;        */
  247.     /* String        callback_name;  */
  248.     /* XtCallbackList   callbacks;       */
  249.  
  250. extern void XtRemoveAllCallbacks ();
  251.     /* Widget        widget;        */
  252.     /* String        callback_name;  */
  253.  
  254. extern void XtCallCallbacks ();
  255.     /* Widget        widget;        */
  256.     /* String        callback_name;   */
  257.     /* caddr_t        callData;    */
  258.  
  259. /* These utilities are here on Leo's request. We should think about them */
  260. /* and decide if they really belong in the intrinsics, or a level above */
  261.  
  262. /* In particular, this procedure is nasty... */
  263. extern void XtOverrideCallback(); /* widget, callcallback */
  264.     /* Widget        widget; */
  265.     /* String        callback_name; */
  266.     /* XtCallbackProc    callback; */
  267.  
  268. extern CallbackStatus XtHasCallbacks(); /* widget, callback_name */
  269.     /* Widget        widget; */
  270.     /* String        callback_name; */
  271.  
  272. /****************************************************************
  273.  *
  274.  * Toolkit initialization
  275.  *
  276.  ****************************************************************/
  277.  
  278. extern Widget XtInitialize();
  279.     /* String            name;       */
  280.     /* String            class;      */
  281.     /* XrmOptionsDescRec    options;    */
  282.     /* Cardinal             num_options;  */
  283.     /* Cardinal            *argc; */ /* returns count of args not processed */
  284.     /* char            **argv;     */
  285.  
  286. /****************************************************************
  287.  *
  288.  * Memory Management
  289.  *
  290.  ****************************************************************/
  291.  
  292. #define XtNew(type) ((type *) XtMalloc((unsigned) sizeof(type)))
  293.  
  294. #ifdef VMS
  295. /* this is temporary, until VMS gets back in sync */
  296.  
  297. #ifdef XtMalloc
  298. #undef XtMalloc
  299. #endif
  300.  
  301. #ifdef XtCalloc
  302. #undef XtCalloc
  303. #endif
  304.  
  305. #ifdef XtRealloc
  306. #undef XtRealloc
  307. #endif
  308.  
  309. #ifdef XtFree
  310. #undef XtFree
  311. #endif
  312.  
  313. #endif
  314.  
  315. extern char *XtMalloc(); /* size */
  316.     /* Cardinal size; */
  317.  
  318. extern char *XtCalloc(); /* num, size */
  319.     /* Cardinal num, size; */
  320.  
  321. extern char *XtRealloc(); /* ptr, num */
  322.     /* char     *ptr; */
  323.     /* Cardinal num; */
  324.  
  325. extern void XtFree(); /* ptr */
  326.     /* char  *ptr */
  327.  
  328.  
  329. /****************************************************************
  330.  *
  331.  * Arg lists
  332.  *
  333.  ****************************************************************/
  334.  
  335. typedef struct {
  336.     String    name;
  337.     XtArgVal    value;
  338. } Arg, *ArgList;
  339.  
  340. #define XtSetArg(arg, n, d) \
  341.     ( (arg).name = (n), (arg).value = (XtArgVal)(d) )
  342.  
  343. extern ArgList XtMergeArgLists(); /* args1, num_args1, args2, num_args2 */
  344.     /* ArgList  args1;      */
  345.     /* Cardinal num_args1;  */
  346.     /* ArgList  args2;      */
  347.     /* Cardinal num_args2;  */
  348.  
  349. /****************************************************************
  350.  *
  351.  * Event Management
  352.  *
  353.  ****************************************************************/
  354.  
  355. typedef void (*XtEventHandler)(); /* widget, closure, event */
  356.     /* Widget  widget   */
  357.     /* caddr_t closure  */
  358.     /* XEvent  *event;  */
  359.  
  360. typedef unsigned long EventMask;
  361. #define XtAllEvents ((EventMask) -1L)
  362.  
  363. extern void XtAddEventHandler(); /* widget, eventMask, nonmaskable, proc, closure */
  364.     /* Widget        widget      */
  365.     /* EventMask        eventMask;  */
  366.     /* Boolean          nonmaskable; */
  367.     /* XtEventHandler   proc;       */
  368.     /* caddr_t        closure ;   */
  369.  
  370.  
  371. extern void XtRemoveEventHandler(); /* widget, eventMask, nonmaskable, proc, closure */
  372.     /* Widget        widget      */
  373.     /* EventMask        eventMask;  */
  374.     /* Boolean          nonmaskable;*/
  375.     /* XtEventHandler   proc;       */
  376.     /* caddr_t        closure ;   */
  377.  
  378.  
  379. extern void XtAddRawEventHandler(); /* widget, eventMask, nonmaskable, proc, closure */
  380.     /* Widget        widget      */
  381.     /* EventMask        eventMask;  */
  382.     /* Boolean          nonmaskable; */
  383.     /* XtEventHandler   proc;       */
  384.     /* caddr_t        closure ;   */
  385.  
  386.  
  387. extern void XtRemoveRawEventHandler(); /* widget, eventMask, nonmaskable, proc, closure */
  388.     /* Widget        widget      */
  389.     /* EventMask        eventMask;  */
  390.     /* Boolean          nonmaskable;*/
  391.     /* XtEventHandler   proc;       */
  392.     /* caddr_t        closure ;   */
  393.  
  394.  
  395. extern void XtAddGrab();
  396.     /* Widget   widget;            */
  397.     /* Boolean  exclusive;        */
  398.     /* Boolean  spring_loaded;      */
  399.  
  400. extern void XtRemoveGrab();
  401.     /* Widget   widget;            */
  402.  
  403. extern void XtDispatchEvent(); /* event */
  404.     /* XEvent    *event; */
  405.  
  406. extern void XtMainLoop();
  407.  
  408. /****************************************************************
  409.  *
  410.  * Event Gathering Routines
  411.  *
  412.  ****************************************************************/
  413.  
  414. typedef unsigned long    XtInputMask;
  415.  
  416. #define XtInputNoneMask        0L
  417. #define XtInputReadMask        (1L<<0)
  418. #define XtInputWriteMask    (1L<<1)
  419. #define XtInputExceptMask    (1L<<2)
  420.  
  421. extern Atom XtHasInput;
  422. extern Atom XtTimerExpired;
  423.  
  424. typedef void (*XtTimerCallbackProc)();
  425.     /* opaque closure         */
  426.     /* XtIntervalId   *id      */
  427.  
  428. extern XtIntervalId XtAddTimeOut();
  429.     /* unsigned long interval */
  430.     /* XtTimerCallbackProc  proc  */
  431.     /* Opaque   closure       */
  432.  
  433. extern void XtRemoveTimeOut();
  434.     /* XtIntervalId timer;      */
  435.  
  436. typedef void (* XtInputCallbackProc)();
  437.     /* Opaque closure;          */
  438.     /* int    *source;           */
  439.     /* XtInputId  *id;           */
  440.  
  441. extern XtInputId XtAddInput(); /* source, condition, proc, closure */
  442.     /* int source;        */
  443.     /* Opaque condition;        */
  444.     /* XtInputCallbackProc proc;*/
  445.     /* Opaque closure;          */
  446.  
  447. extern void XtRemoveInput(); /* id */
  448.     /* XtInputid id;        */
  449.  
  450. extern void XtNextEvent(); /* event */
  451.     /* XtEvent *event;        */
  452.  
  453. extern XtPeekEvent(); /* event */
  454.     /* XtEvent *event;        */
  455.  
  456. extern Boolean XtPending ();
  457.  
  458.  
  459. /****************************************************************
  460.  *
  461.  * Geometry Management
  462.  *
  463.  ****************************************************************/
  464.  
  465. #define XtSMDontChange    5 /* don't change the stacking order stack_mode */
  466.  
  467. typedef struct {
  468.     XtGeometryMask request_mode;
  469.     Position x, y;
  470.     Dimension width, height, border_width;
  471.     Widget sibling;
  472.     int stack_mode;    /* Above, Below, TopIf, BottomIf, Opposite */
  473. } XtWidgetGeometry;
  474.  
  475. typedef enum  {
  476.     XtGeometryYes,        /* Request accepted. */
  477.     XtGeometryNo,         /* Request denied. */
  478.     XtGeometryAlmost,     /* Request denied, but willing to take replyBox. */
  479. } XtGeometryResult;
  480.  
  481. extern XtGeometryResult XtMakeGeometryRequest();
  482.     /*  widget, request, reply            */
  483.     /* Widget    widget;             */
  484.     /* XtWidgetGeometry    *request;        */
  485.     /* XtWidgetGeometry     *reply;  /* RETURN */
  486.  
  487. extern XtGeometryResult XtMakeResizeRequest ();
  488.     /* Widget    widget;    */
  489.     /* Dimension width, height; */
  490.     /* Dimension *replyWidth, *replyHeight; */
  491.  
  492. extern void XtTransformCoords();
  493.     /* register Widget w;    */
  494.     /* Position x, y;        */
  495.     /* register Position *rootx, *rooty; */
  496.  
  497.  
  498. /****************************************************************
  499.  *
  500.  * Widget resource initialization, reading, writing
  501.  *
  502.  ****************************************************************/
  503.  
  504.  
  505. extern void XtGetSubresources();
  506.     /* Widget        widget;        */
  507.     /* caddr_t        base;        */
  508.     /* String        name;        */
  509.     /* String        class;        */
  510.     /* XtResourceList   resources;      */
  511.     /* Cardinal        num_resources;  */
  512.     /* ArgList        args;        */
  513.     /* Cardinal        num_args;       */
  514.  
  515. extern void XtSetValues(); 
  516.     /* Widget           widget;         */
  517.     /* ArgList        args;        */
  518.     /* Cardinal        num_args;       */
  519.  
  520. extern void XtGetValues();
  521.     /* Widget           widget;         */
  522.     /* ArgList        args;        */
  523.     /* Cardinal     num_args;       */
  524.  
  525. extern void XtSetSubvalues(); 
  526.     /* caddr_t          base;        */
  527.     /* XtResourceList   resources;      */
  528.     /* Cardinal        num_resources;  */
  529.     /* ArgList        args;        */
  530.     /* Cardinal        num_args;       */
  531.  
  532. extern void XtGetSubvalues(); 
  533.     /* caddr_t          base;        */
  534.     /* XtResourceList   resources;      */
  535.     /* Cardinal        num_resources;  */
  536.     /* ArgList        args;        */
  537.     /* Cardinal        num_args;       */
  538.  
  539.  
  540. /****************************************************************
  541.  *
  542.  * Translation Management
  543.  *
  544.  ****************************************************************/
  545.  
  546.  
  547. typedef void (*XtActionProc)();
  548.     /* Widget widget; */
  549.     /* XEvent *event; */
  550.     /* String *params; */
  551.     /* Cardinal *num_params; */
  552.  
  553. typedef struct _XtActionsRec{
  554.     char    *string;
  555.     XtActionProc proc;
  556. } XtActionsRec;
  557.  
  558. extern XtTranslations XtParseTranslationTable(); /* source */
  559.     /* String *source; */
  560.  
  561. extern void XtFreeTranslations(); /* stateTable */
  562.     /* XtTranslations stateTable; */
  563.  
  564. extern void XtOverrideTranslations(); /* widget, new */
  565.     /* Widget widget; */
  566.     /* XtTranslations new; */
  567.  
  568. extern void XtAugmentTranslations(); /* widget, new */
  569.     /* Widget widget; */
  570.     /* XtTranslations new; */
  571.  
  572. extern void XtAddActions(); /* action, num_actions */
  573.    /* XtActionList action */
  574.    /* Cardinal num_actions */
  575.  
  576. /*************************************************************
  577.  *
  578.  * Error Handling
  579.  *
  580.  ************************************************************/
  581.  
  582. extern void XtSetErrorHandler(); /* errorProc */
  583.   /* (*errorProc)(String); */
  584.  
  585. extern void XtSetWarningHandler(); /* errorProc */
  586.   /* (*errorProc)(String); */
  587.  
  588. /*************************************************************
  589.  *
  590.  * popup Handling
  591.  *
  592.  ************************************************************/
  593.  
  594. extern Widget XtCreatePopupShell();
  595.  
  596.     /* String        name;        */
  597.     /* WidgetClass  widgetClass;    */
  598.     /* Widget       parent;        */
  599.     /* ArgList      args;        */
  600.     /* Cardinal     num_args;       */
  601.  
  602. typedef enum {XtGrabNone, XtGrabNonexclusive, XtGrabExclusive} XtGrabKind;
  603.  
  604. extern void XtPopup();
  605.     /* Widget       widget;        */
  606.     /* XtGrabKind   grab_kind;      */
  607.  
  608. extern void XtCallbackNone();
  609.     /* Widget       widget;        */
  610.     /* caddr_t      closure;        */
  611.     /* caddr_t      call_data;      */
  612.  
  613. extern void XtCallbackNonexclusive();
  614.     /* Widget       widget;        */
  615.     /* caddr_t      closure;        */
  616.     /* caddr_t      call_data;      */
  617.  
  618. extern void XtCallbackExclusive();
  619.     /* Widget       widget;        */
  620.     /* caddr_t      closure;        */
  621.     /* caddr_t      call_data;      */
  622.  
  623. extern void XtPopdown();
  624.     /* Widget       widget;        */
  625.  
  626. typedef struct {
  627.     Widget  shell_widget;
  628.     Widget  enable_widget;
  629. } XtPopdownIDRec, *XtPopdownID;
  630.     
  631. extern void XtCallbackPopdown();
  632.     /* Widget       widget;        */
  633.     /* caddr_t      closure;        */
  634.     /* caddr_t      call_data;      */
  635.  
  636. /*************************************************************
  637.  *
  638.  * Information routines
  639.  *
  640.  ************************************************************/
  641.  
  642. #ifndef _XtIntrinsicP_h
  643.  
  644. /* We're not included from the private file, so define these
  645.  
  646. extern Display *XtDisplay();
  647.     /*    Widget widget;        */
  648.  
  649. extern Screen *XtScreen();
  650.     /*    Widget widget;        */
  651.  
  652. extern Window XtWindow();
  653.     /*    Widget widget;        */
  654.  
  655. extern WidgetClass XtSuperclass();
  656.     /*    Widget widget;        */
  657.  
  658. extern WidgetClass XtClass();
  659.     /*    Widget widget;        */
  660.  
  661. extern Boolean XtIsManaged();
  662.     /*    Widget widget;        */
  663.  
  664. #endif _XtIntrinsicP_h
  665.  
  666. #endif _XtIntrinsic_h
  667. /* DON'T ADD STUFF AFTER THIS #endif */
  668.  
  669.