home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-bin / x11r6.1 / include / x11 / pex5 / pexlibint.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-10-17  |  31.2 KB  |  1,058 lines

  1. /* $XConsortium: PEXlibint.h,v 1.18 95/06/08 23:20:39 gildea Exp $ */
  2.  
  3. /******************************************************************************
  4.  
  5. Copyright (c) 1992  X Consortium
  6.  
  7. Permission is hereby granted, free of charge, to any person obtaining a copy
  8. of this software and associated documentation files (the "Software"), to deal
  9. in the Software without restriction, including without limitation the rights
  10. to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  11. copies of the Software, and to permit persons to whom the Software is
  12. furnished to do so, subject to the following conditions:
  13.  
  14. The above copyright notice and this permission notice shall be included in
  15. all copies or substantial portions of the Software.
  16.  
  17. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  18. IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  19. FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
  20. X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
  21. AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  22. CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  23.  
  24. Except as contained in this notice, the name of the X Consortium shall not be
  25. used in advertising or otherwise to promote the sale, use or other dealings
  26. in this Software without prior written authorization from the X Consortium.
  27.  
  28.  
  29. Copyright 1987,1991 by Digital Equipment Corporation, Maynard, Massachusetts
  30.  
  31.                         All Rights Reserved
  32.  
  33. Permission to use, copy, modify, distribute, and sell this software and its
  34. documentation for any purpose is hereby granted without fee, provided that
  35. the above copyright notice appear in all copies and that both that copyright
  36. notice and this permission notice appear in supporting documentation, and that
  37. the name of Digital not be used in advertising or publicity
  38. pertaining to distribution of the software without specific, written prior
  39. permission.  Digital make no representations about the suitability
  40. of this software for any purpose.  It is provided "as is" without express or
  41. implied warranty.
  42.  
  43. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  44. ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
  45. DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
  46. ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  47. WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  48. ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  49. SOFTWARE.
  50. ******************************************************************************/
  51.  
  52. #ifndef _PEXLIBINT_H_
  53. #define _PEXLIBINT_H_
  54.  
  55. #define NEED_REPLIES
  56. #include <X11/Xlibint.h>
  57. #include <X11/Xfuncs.h>
  58. #include "PEXproto.h"
  59. #include "pl_convert.h"
  60. #include "pl_store.h"
  61. #include "pl_extract.h"
  62. #include "pl_xdata.h"
  63.  
  64.  
  65. /* -------------------------------------------------------------------------
  66.  * Display extension data structures and macros.
  67.  * ------------------------------------------------------------------------- */
  68.  
  69. /*
  70.  * For each display initialized by PEXInitialize(), a record is allocated
  71.  * which holds various information about that display.  These records are
  72.  * maintained in a linked list.  The record for the most recently referenced
  73.  * display is always kept at the beginning of the list (for quick access).
  74.  */
  75.  
  76. typedef struct PEXDisplayInfo
  77. {
  78.     Display             *display;    /* pointer to X display structure */
  79.     XExtCodes        *extCodes;   /* extension codes */
  80.     PEXExtensionInfo    *extInfo;    /* extension info */
  81.     unsigned char       extOpcode;   /* opcode for pex extension */
  82.     unsigned short      fpFormat;    /* floating point format */
  83.     char        fpConvert;   /* flag for floating point conversion */
  84.     PEXEnumTypeDesc    *fpSupport;  /* float formats supported by server */
  85.     int            fpCount;     /* number of float formats supported */
  86.     XID               lastResID;   /* renderer/structure ID of last OC */
  87.     int                 lastReqType; /* request type (store/rend) of last OC */
  88.     int            lastReqNum;  /* request number of last OC */
  89.     struct PEXDisplayInfo *next;     /* next in list */
  90. } PEXDisplayInfo;
  91.  
  92.  
  93. /*
  94.  * Insert a new record in the beginning of the linked list.
  95.  */
  96.  
  97. #define PEXAddDisplayInfo(_display, _info) \
  98. \
  99. { \
  100.     _info->display = _display; \
  101. \
  102.     _info->next = PEXDisplayInfoHeader; \
  103.     PEXDisplayInfoHeader = _info; \
  104. }
  105.  
  106.  
  107. /*
  108.  * Remove the record assosicated with '_display' from the linked list
  109.  * and return a pointer to it in '_info'.
  110.  */
  111.  
  112. #define PEXRemoveDisplayInfo(_display, _info) \
  113. \
  114. { \
  115.     PEXDisplayInfo    *prev = NULL; \
  116. \
  117.     _info = PEXDisplayInfoHeader; \
  118. \
  119.     while (_info && _info->display != _display) \
  120.     { \
  121.     prev = _info; \
  122.     _info = _info->next; \
  123.     } \
  124. \
  125.     if (_info) \
  126.     if (!prev) \
  127.         PEXDisplayInfoHeader = _info->next; \
  128.     else \
  129.         prev->next = _info->next; \
  130. }    
  131.  
  132.  
  133. /*
  134.  * Return the info assosicated with '_display' in '_info'.
  135.  * If the info is not the first in the list, move it to the front.
  136.  */
  137.  
  138. #define PEXGetDisplayInfo(_display, _info) \
  139. \
  140. { \
  141.     if (_info = PEXDisplayInfoHeader) \
  142.     { \
  143.         if (PEXDisplayInfoHeader->display != _display) \
  144.         { \
  145.         PEXDisplayInfo    *prev = PEXDisplayInfoHeader; \
  146. \
  147.         _info = _info->next; \
  148.         while (_info && _info->display != _display) \
  149.         { \
  150.             prev = _info; \
  151.             _info = _info->next; \
  152.         } \
  153. \
  154.         if (_info) \
  155.         { \
  156.             prev->next = _info->next; \
  157.             _info->next = PEXDisplayInfoHeader; \
  158.             PEXDisplayInfoHeader = _info; \
  159.         } \
  160.     } \
  161.     } \
  162. }
  163.  
  164.  
  165.  
  166. /* -------------------------------------------------------------------------
  167.  * Memory related macros.
  168.  * ------------------------------------------------------------------------- */
  169.  
  170. #define PAD(_size) (3 - (((_size) + 3) & 0x3))
  171.  
  172. #define PADDED_BYTES(_bytes) (_bytes + PAD (_bytes))
  173.  
  174. #define NUMWORDS(_size) (((unsigned int) ((_size) + 3)) >> 2)
  175.  
  176. #define NUMBYTES(_len) (((unsigned int) (_len)) << 2)
  177.  
  178. #define LENOF(_ctype) (SIZEOF (_ctype) >> 2)
  179.  
  180.  
  181. /* 
  182.  * Count the number of ones in a longword.
  183.  */
  184.  
  185. #define CountOnes(_mask, _countReturn) \
  186.     _countReturn = ((_mask) - (((_mask)>>1)&0x77777777) \
  187.     - (((_mask)>>2)&0x33333333) - (((_mask)>>3)&0x11111111)); \
  188.     _countReturn = ((((_countReturn)+((_countReturn)>>4)) & 0x0F0F0F0F) % 255)
  189.  
  190.  
  191.  
  192. /* -------------------------------------------------------------------------
  193.  * Macros for dealing with the transport buffer. 
  194.  * ------------------------------------------------------------------------- */
  195.  
  196. /*
  197.  * The maximum protocol request size.
  198.  */
  199.  
  200. #define MAX_REQUEST_SIZE ((1<<16) - 1)
  201.  
  202.  
  203. /*
  204.  * Has the X transport buffer been flushed?
  205.  */
  206.  
  207. #define XBufferFlushed(_display) \
  208.     ((_display)->buffer == (_display)->bufptr)
  209.  
  210.  
  211. /*
  212.  * The number of bytes left in the X transport buffer.
  213.  */
  214.  
  215. #define BytesLeftInXBuffer(_display) \
  216.     ((_display)->bufmax - (_display)->bufptr)
  217.  
  218.  
  219. /*
  220.  * The number of words left in the X transport buffer.
  221.  */
  222.  
  223. #define WordsLeftInXBuffer(_display) \
  224.     (((_display)->bufmax - (_display)->bufptr) >> 2)
  225.  
  226.  
  227. /* 
  228.  * See if XSynchronize has been called.  If so, send request right away.
  229.  */
  230.  
  231. #define PEXSyncHandle(_display)\
  232.     if ((_display)->synchandler) (*(_display)->synchandler) (_display)
  233.  
  234.  
  235. /*
  236.  * Read a reply into a scratch buffer.
  237.  */
  238.  
  239. #define XREAD_INTO_SCRATCH(_display, _pBuf, _numBytes) \
  240.     _pBuf = (char *) _XAllocTemp (_display, (unsigned long) (_numBytes)); \
  241.     _XRead (_display, _pBuf, (long) (_numBytes));
  242.  
  243. #define FINISH_WITH_SCRATCH(_display, _pBuf, _numBytes) \
  244.     _XFreeTemp (_display, _pBuf, (unsigned long) (_numBytes));
  245.  
  246.  
  247. /* -------------------------------------------------------------------------
  248.  * Output Command request header.  The pexOpCode field specifies the type
  249.  * of request - Render Output Commands or Store Elements.
  250.  * ------------------------------------------------------------------------- */
  251.  
  252. typedef struct pexOCRequestHeader
  253. {
  254.     CARD8       extOpcode;
  255.     CARD8       pexOpcode;
  256.     CARD16      reqLength B16;
  257.     INT16       fpFormat B16;
  258.     CARD16      pad B16;
  259.     CARD32      target B32;
  260.     CARD32      numCommands B32;
  261. } pexOCRequestHeader;
  262.  
  263.  
  264.  
  265. /* -------------------------------------------------------------------------
  266.  * Macros for setting up requests.
  267.  * ------------------------------------------------------------------------- */
  268.  
  269. /*
  270.  * Request names and opcodes.
  271.  */
  272.  
  273. #if (defined(__STDC__) && !defined(UNIXCPP)) || defined(ANSICPP)
  274. #define REQNAME(_name_) pex##_name_##Req
  275. #define REQOPCODE(_name_) PEXRC##_name_
  276. #define REQSIZE(_name_) sz_pex##_name_##Req
  277. #else
  278. #define REQNAME(_name_) pex/**/_name_/**/Req
  279. #define REQOPCODE(_name_) PEXRC/**/_name_
  280. #define REQSIZE(_name_) sz_pex/**/_name_/**/Req
  281. #endif
  282.  
  283.  
  284. /* 
  285.  * PEXGetReq sets up a request to be sent to the X server.  If there isn't
  286.  * enough room left in the X buffer, it is flushed before the new request
  287.  * is started.
  288.  */
  289.  
  290. #define PEXGetReq(_name, _req) \
  291.     if ((display->bufptr + REQSIZE(_name)) > display->bufmax) \
  292.         _XFlush (display); \
  293.     _req = (char *) (display->last_req = display->bufptr); \
  294.     display->bufptr += REQSIZE(_name); \
  295.     display->request++
  296.  
  297.  
  298. /*
  299.  * PEXGetReqExtra is the same as PEXGetReq and except that an additional
  300.  * "n" bytes are allocated after the request.  "n" will be padded to a word
  301.  * boundary.
  302.  */
  303.  
  304. #define PEXGetReqExtra(_name, _n, _req) \
  305.     if ((display->bufptr + REQSIZE(_name) + \
  306.     PADDED_BYTES (_n)) > display->bufmax) _XFlush (display); \
  307.     _req = (char *) (display->last_req = display->bufptr); \
  308.     display->bufptr += (REQSIZE(_name) + PADDED_BYTES (_n)); \
  309.     display->request++
  310.  
  311.  
  312. /*
  313.  * BEGIN_REQUEST_HEADER and END_REQUEST_HEADER are used to hide
  314.  * the extra work that has to be done on 64 bit clients.  On such
  315.  * machines, all structure pointers must point to an 8 byte boundary.
  316.  * As a result, we must first store the request header info in
  317.  * a static data stucture, then bcopy it into the transport buffer.
  318.  */
  319.  
  320. #ifndef WORD64
  321.  
  322. #define BEGIN_REQUEST_HEADER(_name, _pBuf, _pReq) \
  323. { \
  324.     PEXDisplayInfo *pexDisplayInfo; \
  325.     PEXGetDisplayInfo (display, pexDisplayInfo); \
  326.     _pReq = (REQNAME(_name) *) _pBuf;
  327.  
  328. #define END_REQUEST_HEADER(_name, _pBuf, _pReq) \
  329.     _pBuf += REQSIZE(_name); \
  330. }
  331.  
  332. #else /* WORD64 */
  333.  
  334. #define BEGIN_REQUEST_HEADER(_name, _pBuf, _pReq) \
  335. { \
  336.     PEXDisplayInfo *pexDisplayInfo; \
  337.     REQNAME(_name) tReq; \
  338.     PEXGetDisplayInfo (display, pexDisplayInfo); \
  339.     _pReq = &tReq;
  340.  
  341. #define END_REQUEST_HEADER(_name, _pBuf, _pReq) \
  342.     memcpy (_pBuf, _pReq, REQSIZE(_name)); \
  343.     _pBuf += REQSIZE(_name); \
  344. }
  345.  
  346. #endif /* WORD64 */
  347.  
  348.  
  349. /*
  350.  * Macros used to store the request header info.
  351.  */
  352.  
  353. #define PEXStoreReqHead(_name, _req) \
  354.     _req->reqType = pexDisplayInfo->extOpcode; \
  355.     _req->opcode = REQOPCODE(_name); \
  356.     _req->length = (REQSIZE(_name)) >> 2;
  357.  
  358.  
  359. #define PEXStoreFPReqHead(_name, _fpFormat, _req) \
  360.     _req->reqType = pexDisplayInfo->extOpcode; \
  361.     _req->opcode = REQOPCODE(_name); \
  362.     _req->length = (REQSIZE(_name)) >> 2; \
  363.     _req->fpFormat = _fpFormat;
  364.  
  365. #define PEXStoreReqExtraHead(_name, _extraBytes, _req) \
  366.     _req->reqType = pexDisplayInfo->extOpcode; \
  367.     _req->opcode = REQOPCODE(_name); \
  368.     _req->length = (REQSIZE(_name) + PADDED_BYTES (_extraBytes)) >> 2;
  369.  
  370. #define PEXStoreFPReqExtraHead(_name, _fpFormat, _extraBytes, _req) \
  371.     _req->reqType = pexDisplayInfo->extOpcode; \
  372.     _req->opcode = REQOPCODE(_name); \
  373.     _req->length = (REQSIZE(_name) + PADDED_BYTES (_extraBytes)) >> 2; \
  374.     _req->fpFormat = _fpFormat;
  375.  
  376.  
  377.  
  378. /*
  379.  * Return flag for floating point conversion, as well as the
  380.  * float format to convert to.  The call to this macro must come
  381.  * after BEGIN_REQUEST_HEADER and before END_REQUEST_HEADER.
  382.  */
  383.  
  384. #define CHECK_FP(_fpConvert, _fpFormat) \
  385.     _fpConvert = pexDisplayInfo->fpConvert; \
  386.     _fpFormat = pexDisplayInfo->fpFormat;
  387.  
  388.  
  389.  
  390. /* -------------------------------------------------------------------------
  391.  * Get pointer to a structure in a buffer stream.  On 64 bit clients,
  392.  * all structure pointers must point to an 8 byte boundary.  As a result,
  393.  * we must first bcopy into a static data structure, then return a pointer
  394.  * to this static data structure.
  395.  *
  396.  * Note: GET_STRUCT_PTR must be used in the declaration section of a block.
  397.  * ------------------------------------------------------------------------- */
  398.  
  399. #ifndef WORD64
  400.  
  401. #define GET_STRUCT_PTR(_name, _pBuf, _pStruct) \
  402.     _pStruct = (_name *) _pBuf;
  403.  
  404. #else /* WORD64 */
  405.  
  406. #define GET_STRUCT_PTR(_name, _pBuf, _pStruct) \
  407.     _name tStruct; \
  408.     memcpy (&tStruct, _pBuf, SIZEOF (_name)); \
  409.     _pStruct = &tStruct;
  410.  
  411. #endif /* WORD64 */
  412.  
  413.  
  414.  
  415. /* -------------------------------------------------------------------------
  416.  * Color related macros.
  417.  * ------------------------------------------------------------------------- */
  418.  
  419. /* 
  420.  * Protocol color size based on color type (in bytes).
  421.  */
  422.  
  423. #define GetColorSize(_type) \
  424.     ((_type) == PEXColorTypeIndexed ? SIZEOF (pexIndexedColor) : \
  425.     ((_type) == PEXColorTypeRGB8 ? SIZEOF (pexRgb8Color) : \
  426.     ((_type) == PEXColorTypeRGB16 ? SIZEOF (pexRgb16Color) : \
  427.     SIZEOF (pexRgbFloatColor))))
  428.  
  429. /* 
  430.  * Protocol color size based on color type (in words).
  431.  */
  432.  
  433. #define GetColorLength(_type)\
  434.     ((_type) == PEXColorTypeIndexed ?  LENOF (pexIndexedColor) :\
  435.     ((_type) == PEXColorTypeRGB8 ? LENOF (pexRgb8Color) :\
  436.     ((_type) == PEXColorTypeRGB16 ? LENOF (pexRgb16Color) : \
  437.     LENOF (pexRgbFloatColor))))
  438.  
  439. /* 
  440.  * Client color size based on color type (in bytes).
  441.  */
  442.  
  443. #define GetClientColorSize(_type) \
  444.     ((_type) == PEXColorTypeIndexed ? sizeof (PEXColorIndexed) : \
  445.     ((_type) == PEXColorTypeRGB8 ? sizeof (PEXColorRGB8) : \
  446.     ((_type) == PEXColorTypeRGB16 ? sizeof (PEXColorRGB16) : \
  447.     sizeof (PEXColorRGB))))
  448.  
  449.  
  450.  
  451. /* -------------------------------------------------------------------------
  452.  * Constants
  453.  * ------------------------------------------------------------------------- */
  454.  
  455. /*
  456.  * IEEE-754-32 is the most common floating point type.  Vendors who have
  457.  * a different native floating point format should define NATIVE_FP_FORMAT
  458.  * at compile time via the -D switch (this is done by modifying the vendors
  459.  * config file to include a "#define PexNativeFPFormat your_format".
  460.  */
  461.  
  462. #ifndef NATIVE_FP_FORMAT
  463. #define NATIVE_FP_FORMAT    PEXIEEE_754_32
  464. #endif
  465.  
  466.  
  467. /*
  468.  * The PEXlib SI supports Cray floating point format, but this constant
  469.  * is not a registered float format, so it's not found in PEX.h.  We define
  470.  * it here.
  471.  *
  472.  * If a vendor wants to add support for his own float format in PEXlib, he
  473.  * should add a consant here for the format, and bump up NUM_FP_FORMATS.
  474.  * Then he must modify the fp conversion function table found in the file
  475.  * pl_global_def.h to include his format.
  476.  *
  477.  * Note : Floating point formats 1-4 are registered with PEX at this time.
  478.  */
  479.  
  480. #define PEXCRAY_Floating    5
  481.  
  482. #define NUM_FP_FORMATS        5
  483.  
  484.  
  485. /*
  486.  * Maximum size of pick cache in bytes.
  487.  */
  488.  
  489. #define MAX_PICK_CACHE_SIZE    2048
  490.  
  491.  
  492. /*
  493.  * Protocol data structure sizes.  SIZEOF (rec) == sz_rec.
  494.  */
  495.  
  496. #define sz_pexAccumulateStateReq         12
  497. #define sz_pexAddToNameSet             4
  498. #define sz_pexRemoveFromNameSet         4
  499. #define sz_pexAnnotationText             32
  500. #define sz_pexAnnotationText2D             24
  501. #define sz_pexApplicationData             8
  502. #define sz_pexATextStyle             8
  503. #define sz_pexBeginPickAllReq             28
  504. #define sz_pexBeginPickOneReq             20
  505. #define sz_pexBeginRenderingReq         12
  506. #define sz_pexBeginStructureReq         12
  507. #define sz_pexCellArray             48
  508. #define sz_pexCellArray2D             28
  509. #define sz_pexChangeNameSetReq             12
  510. #define sz_pexChangePickDeviceReq         20
  511. #define sz_pexChangePipelineContextReq         24
  512. #define sz_pexChangeRendererReq         16
  513. #define sz_pexChangeSearchContextReq         16
  514. #define sz_pexChangeStructureRefsReq         12
  515. #define sz_pexCharExpansion             8
  516. #define sz_pexCharHeight             8
  517. #define sz_pexATextHeight            8
  518. #define sz_pexCharSpacing             8
  519. #define sz_pexCharUpVector             12
  520. #define sz_pexATextUpVector             12
  521. #define sz_pexCopyElementsReq             36
  522. #define sz_pexCopyLookupTableReq         12
  523. #define sz_pexCopyNameSetReq             12
  524. #define sz_pexCopyPipelineContextReq         24
  525. #define sz_pexCopySearchContextReq         16
  526. #define sz_pexCopyStructureReq             12
  527. #define sz_pexCreateLookupTableReq         16
  528. #define sz_pexCreatePickMeasureReq         16
  529. #define sz_pexCreatePipelineContextReq         24
  530. #define sz_pexCreateRendererReq         20
  531. #define sz_pexCreateSearchContextReq         16
  532. #define sz_pexCreateWorkstationReq         76
  533. #define sz_pexFacetCullingMode             8
  534. #define sz_pexCurveApprox             12
  535. #define sz_pexDeleteBetweenLabelsReq         16
  536. #define sz_pexDeleteElementsReq         24
  537. #define sz_pexDeleteElementsToLabelReq         20
  538. #define sz_pexDeleteTableEntriesReq         12
  539. #define sz_pexDestroyStructuresReq         8
  540. #define sz_pexFacetDistinguishFlag         8
  541. #define sz_pexElementSearchReply         32
  542. #define sz_pexElementSearchReq             28
  543. #define sz_pexEndPickAllReply             32
  544. #define sz_pexEndPickAllReq             8
  545. #define sz_pexEndPickOneReply             32
  546. #define sz_pexEndPickOneReq             8
  547. #define sz_pexEndRenderingReq             12
  548. #define sz_pexEscapeReq             8
  549. #define sz_pexEscapeWithReplyReq         sz_pexEscapeReq
  550. #define sz_pexEscapeWithReplyReply         32
  551. #define sz_pexExecuteStructure             8
  552. #define sz_pexExtendedCellArray         52
  553. #define sz_pexFillAreaWithData             16
  554. #define sz_pexFillAreaSetWithData        20
  555. #define sz_pexFetchElementsReply         32
  556. #define sz_pexFetchElementsReq             28
  557. #define sz_pexFillArea                 8
  558. #define sz_pexFillArea2D             8
  559. #define sz_pexFillAreaSet             12
  560. #define sz_pexFillAreaSet2D             12
  561. #define sz_pexGDP                 16
  562. #define sz_pexGDP2D                 16
  563. #define sz_pexGetAncestorsReply         32
  564. #define sz_pexGetAncestorsReq             16
  565. #define sz_pexGetDescendantsReq         sz_pexGetAncestorsReq
  566. #define sz_pexGetDefinedIndicesReply         32
  567. #define sz_pexGetElementInfoReply         32
  568. #define sz_pexGetElementInfoReq         28
  569. #define sz_pexGetEnumTypeInfoReply         32
  570. #define sz_pexGetEnumTypeInfoReq         16
  571. #define sz_pexGetExtensionInfoReply         32
  572. #define sz_pexGetExtensionInfoReq         8
  573. #define sz_pexGetImpDepConstantsReply         32
  574. #define sz_pexGetImpDepConstantsReq         16
  575. #define sz_pexGetNameSetReply             32
  576. #define sz_pexGetPickDeviceReply         32
  577. #define sz_pexGetPickDeviceReq             16
  578. #define sz_pexGetPickMeasureReply         32
  579. #define sz_pexGetPickMeasureReq         12
  580. #define sz_pexGetPipelineContextReply         32
  581. #define sz_pexGetPipelineContextReq         24
  582. #define sz_pexGetPredefinedEntriesReply     32
  583. #define sz_pexGetPredefinedEntriesReq         20
  584. #define sz_pexGetRendererAttributesReply    32
  585. #define sz_pexGetRendererAttributesReq         16
  586. #define sz_pexGetRendererDynamicsReply         32
  587. #define sz_pexGetSearchContextReply         32
  588. #define sz_pexGetSearchContextReq         16
  589. #define sz_pexGetStructureInfoReply         32
  590. #define sz_pexGetStructureInfoReq         12
  591. #define sz_pexGetStructuresInNetworkRepl    32
  592. #define sz_pexGetStructuresInNetworkReq     12
  593. #define sz_pexGetTableEntriesReply         32
  594. #define sz_pexGetTableEntriesReq         16
  595. #define sz_pexGetTableEntryReply         32
  596. #define sz_pexGetTableEntryReq             16
  597. #define sz_pexGetTableInfoReply         32
  598. #define sz_pexGetTableInfoReq             12
  599. #define sz_pexGetWorkstationAttributesReply     32
  600. #define sz_pexGetWorkstationAttributesReq     20
  601. #define sz_pexGetWorkstationDynamicsReply     32
  602. #define sz_pexGetWorkstationDynamicsReq     8
  603. #define sz_pexGetWorkstationPostingsReply     32
  604. #define sz_pexGetWorkstationViewRepReply     32
  605. #define sz_pexGetWorkstationViewRepReq         12
  606. #define sz_pexGlobalTransform             68
  607. #define sz_pexGlobalTransform2D         40
  608. #define sz_pexGSE                 12
  609. #define sz_pexHLHSRID                8
  610. #define sz_pexInteriorStyle             8
  611. #define sz_pexBFInteriorStyle             8
  612. #define sz_pexLabel                 8
  613. #define sz_pexLightSourceState             8
  614. #define sz_pexLineType                 8
  615. #define sz_pexLineWidth             8
  616. #define sz_pexSurfaceEdgeWidth             8
  617. #define sz_pexListFontsReply             32
  618. #define sz_pexListFontsReq             8
  619. #define sz_pexListFontsWithInfoReply         32
  620. #define sz_pexListFontsWithInfoReq         12
  621. #define sz_pexLoadFontReq             12
  622. #define sz_pexLocalTransform             72
  623. #define sz_pexLocalTransform2D             44
  624. #define sz_pexLookupTable             4
  625. #define sz_pexMapDCtoWCReply             32
  626. #define sz_pexMapDCtoWCReq             16
  627. #define sz_pexMapWCtoDCReply             32
  628. #define sz_pexMapWCtoDCReq             16
  629. #define sz_pexMarkers                 4
  630. #define sz_pexMarkers2D                4
  631.  
  632. #define sz_pexMarkerBundleIndex         8
  633. #define sz_pexTextBundleIndex             8
  634. #define sz_pexLineBundleIndex             8
  635. #define sz_pexInteriorBundleIndex         8
  636. #define sz_pexInteriorStyleIndex         8
  637. #define sz_pexBFInteriorStyleIndex         8
  638. #define sz_pexEdgeBundleIndex             8
  639. #define sz_pexViewIndex             8
  640. #define sz_pexDepthCueIndex             8
  641. #define sz_pexColorApproxIndex             8
  642.  
  643. #define sz_pexMarkerColorIndex             8
  644. #define sz_pexTextColorIndex            8
  645. #define sz_pexLineColorIndex            8
  646. #define sz_pexSurfaceColorIndex            8
  647. #define sz_pexBFSurfaceColorIndex        8
  648. #define sz_pexSurfaceEdgeColorIndex        8
  649.  
  650. #define sz_pexMarkerColor             8
  651. #define sz_pexTextColor             8
  652. #define sz_pexLineColor             8
  653. #define sz_pexSurfaceColor             8
  654. #define sz_pexBFSurfaceColor             8
  655. #define sz_pexSurfaceEdgeColor             8
  656.  
  657. #define sz_pexTextFontIndex            8
  658.  
  659. #define sz_pexMarkerScale             8
  660. #define sz_pexMarkerType             8
  661. #define sz_pexMatchRenderingTargetsReply     32
  662. #define sz_pexMatchRenderingTargetsReq         20
  663. #define sz_pexMaxHitsReachedEvent         32
  664. #define sz_pexModelClipFlag             8
  665. #define sz_pexModelClipVolume             8
  666. #define sz_pexModelClipVolume2D         8
  667. #define sz_pexNoop                 4
  668. #define sz_pexNURBCurve             24
  669. #define sz_pexNURBSurface             28
  670. #define sz_pexParaSurfCharacteristics         8
  671. #define sz_pexPatternAttributes            40
  672. #define sz_pexPatternAttributes2D        12
  673. #define sz_pexPatternSize             12
  674. #define sz_pexPickAllReply             32
  675. #define sz_pexPickAllReq             20
  676. #define sz_pexPickID                 8
  677. #define sz_pexPickOneReply             32
  678. #define sz_pexPickOneReq             20
  679. #define sz_pexPolyline                 4
  680. #define sz_pexPolyline2D             4
  681. #define sz_pexPolylineInterpMethod        8
  682. #define sz_pexPolylineSetWithData        12
  683. #define sz_pexPostStructureReq             20
  684. #define sz_pexQuadrilateralMesh         16
  685. #define sz_pexQueryFontReply             32
  686. #define sz_pexQueryFontReq             8
  687. #define sz_pexQueryTextExtentsReply         32
  688. #define sz_pexQueryTextExtentsReq         36
  689. #define sz_pexRedrawClipRegionReq         12
  690. #define sz_pexRenderElementsReq         28
  691. #define sz_pexRenderNetworkReq             16
  692. #define sz_pexRenderOutputCommandsReq         16
  693. #define sz_pexRenderingColorModel         8
  694. #define sz_pexReq                 4
  695. #define sz_pexResourceReq             8
  696. #define sz_pexFreeLookupTableReq         sz_pexResourceReq
  697. #define sz_pexGetDefinedIndicesReq         sz_pexResourceReq
  698. #define sz_pexFreePipelineContextReq         sz_pexResourceReq
  699. #define sz_pexFreeRendererReq             sz_pexResourceReq
  700. #define sz_pexGetRendererDynamicsReq         sz_pexResourceReq
  701. #define sz_pexEndStructureReq             sz_pexResourceReq
  702. #define sz_pexCreateStructureReq         sz_pexResourceReq
  703. #define sz_pexCreateNameSetReq             sz_pexResourceReq
  704. #define sz_pexFreeNameSetReq             sz_pexResourceReq
  705. #define sz_pexGetNameSetReq             sz_pexResourceReq
  706. #define sz_pexFreeSearchContextReq         sz_pexResourceReq
  707. #define sz_pexFreeWorkstationReq         sz_pexResourceReq
  708. #define sz_pexRedrawAllStructuresReq         sz_pexResourceReq
  709. #define sz_pexUpdateWorkstationReq         sz_pexResourceReq
  710. #define sz_pexExecuteDeferredActionsReq     sz_pexResourceReq
  711. #define sz_pexUnpostAllStructuresReq         sz_pexResourceReq
  712. #define sz_pexGetWorkstationPostingsReq     sz_pexResourceReq
  713. #define sz_pexFreePickMeasureReq         sz_pexResourceReq
  714. #define sz_pexUnloadFontReq             sz_pexResourceReq
  715. #define sz_pexSearchNetworkReq             sz_pexResourceReq
  716. #define sz_pexRestoreModelClipVolume        4
  717. #define sz_pexSetOfFillAreaSets            24
  718. #define sz_pexSearchNetworkReply         32
  719. #define sz_pexIndividualASF            12
  720. #define sz_pexSetEditingModeReq         12
  721. #define sz_pexSetElementPointerAtLabelReq     16
  722. #define sz_pexSetElementPointerReq         16
  723. #define sz_pexSetTableEntriesReq         16
  724. #define sz_pexSetWorkstationBufferModeReq     12
  725. #define sz_pexSetWorkstationDisplayUpdateModeReq 12
  726. #define sz_pexSetWorkstationHLHSRModeReq     12
  727. #define sz_pexSetWorkstationViewPriorityReq     16
  728. #define sz_pexSetWorkstationViewRepReq         172
  729. #define sz_pexSetWorkstationViewportReq     32
  730. #define sz_pexSetWorkstationWindowReq         36
  731. #define sz_pexStoreElementsReq             16
  732. #define sz_pexSurfaceApprox             16
  733. #define sz_pexSurfaceEdgeFlag             8
  734. #define sz_pexSurfaceEdgeType             8
  735. #define sz_pexSurfaceInterpMethod        8
  736. #define sz_pexBFSurfaceInterpMethod        8
  737. #define sz_pexReflectionAttributes        28
  738. #define sz_pexBFReflectionAttributes        28
  739. #define sz_pexReflectionModel             8
  740. #define sz_pexBFReflectionModel         8
  741. #define sz_pexText                 44
  742. #define sz_pexText2D                 16
  743. #define sz_pexTextAlignment             8
  744. #define sz_pexATextAlignment             8
  745. #define sz_pexTextPath                 8
  746. #define sz_pexATextPath             8
  747. #define sz_pexTextPrecision             8
  748. #define sz_pexTriangleStrip             16
  749. #define sz_pexUnpostStructureReq         12
  750. #define sz_pexUpdatePickMeasureReq         12
  751. #define sz_pexCieColor                 12
  752. #define sz_pexColor                 12
  753. #define sz_pexColorApproxEntry             40
  754. #define sz_pexColorSpecifier             4
  755. #define sz_pexColorEntry            sz_pexColorSpecifier
  756. #define sz_pexCoord2D                 8
  757. #define sz_pexCoord3D                 12
  758. #define sz_pexCoord4D                 16
  759. #define sz_pexCullMode                 2
  760. #define sz_pexCurveApproxData             8
  761. #define sz_pexDepthCueEntry             24
  762. #define sz_pexDeviceCoord             8
  763. #define sz_pexDeviceCoord2D             4
  764. #define sz_pexDeviceRect             8
  765. #define sz_pexEdgeBundleEntry             12
  766. #define sz_pexElementInfo             4
  767. #define sz_pexElementPos             8
  768. #define sz_pexElementRange             16
  769. #define sz_pexElementRef             8
  770. #define sz_pexEnumTypeDesc             4
  771. #define sz_pexEnumTypeIndex             4
  772. #define sz_pexEscapeSetEchoColorData         8
  773. #define sz_pexExtentInfo             24
  774. #define sz_pexFloatColor             12
  775. #define sz_pexFont                 4
  776. #define sz_pexFontInfo                 20
  777. #define sz_pexFontProp                 8
  778. #define sz_pexHalfSpace             24
  779. #define sz_pexHalfSpace2D             16
  780. #define sz_pexHlsColor                 12
  781. #define sz_pexHsvColor                 12
  782. #define sz_pexIndexedColor             4
  783. #define sz_pexInteriorBundleEntry         28
  784. #define sz_pexLightEntry             48
  785. #define sz_pexLineBundleEntry             20
  786. #define sz_pexLocalTransform2DData         40
  787. #define sz_pexLocalTransform3DData         68
  788. #define sz_pexMarkerBundleEntry         12
  789. #define sz_pexMatrix                 64
  790. #define sz_pexMatrix3X3             36
  791. #define sz_pexMonoEncoding             8
  792. #define sz_pexName                 4
  793. #define sz_pexNameSet                 4
  794. #define sz_pexNameSetPair             8
  795. #define sz_pexNpcSubvolume             24
  796. #define sz_pexPD_NPC_HitVolume             sz_pexNpcSubvolume
  797. #define sz_pexOutputCommandError         32
  798. #define sz_pexPD_DC_HitBox             8
  799. #define sz_pexPSC_IsoparametricCurves         8
  800. #define sz_pexPSC_LevelCurves             28
  801. #define sz_pexPatternEntry             8
  802. #define sz_pexPickElementRef             12
  803. #define sz_pexPickRecord             4
  804. #define sz_pexReflectionAttr             24
  805. #define sz_pexRendererTarget             8
  806. #define sz_pexRgb16Color             8
  807. #define sz_pexRgb8Color             4
  808. #define sz_pexRgbFloatColor             12
  809. #define sz_pexString                 2
  810. #define sz_pexStructure             4
  811. #define sz_pexStructureInfo             8
  812. #define sz_pexSurfaceApproxData            12
  813. #define sz_pexSwitch                 1
  814. #define sz_pexTableInfo             8
  815. #define sz_pexTableIndex             2
  816. #define sz_pexTextAlignmentData         4
  817. #define sz_pexTextBundleEntry             16
  818. #define sz_pexTextFontEntry             4
  819. #define sz_pexTrimCurve             28
  820. #define sz_pexVector2D                 8
  821. #define sz_pexVector3D                 12
  822. #define sz_pexVertex                 12
  823. #define sz_pexViewEntry             156
  824. #define sz_pexViewRep                 160
  825. #define sz_pexViewport                 20
  826.  
  827. /* from PEXlibint.h */
  828. #define sz_pexOCRequestHeader             16
  829.  
  830. /* for X-Window system protocol elements */
  831. #define sz_CARD32                 4
  832. #define sz_CARD16                 2
  833. #define sz_CARD8                 1
  834. #define sz_INT32                 4
  835. #define sz_INT16                 2
  836.  
  837. /* for other things */
  838. #define sz_char                 1
  839. #define sz_short                2
  840. #define sz_long                    4
  841. #define sz_float                4
  842.  
  843.  
  844.  
  845. /* -------------------------------------------------------------------------
  846.  * Externally defined globals.
  847.  * ------------------------------------------------------------------------- */
  848.  
  849. /*
  850.  * Linked list of open displays.
  851.  */
  852.  
  853. extern PEXDisplayInfo    *PEXDisplayInfoHeader;
  854.  
  855.  
  856. /*
  857.  * Pick path cache.
  858.  */
  859.  
  860. extern PEXPickPath    *PEXPickCache;
  861. extern unsigned int    PEXPickCacheSize;
  862. extern int        PEXPickCacheInUse;
  863.  
  864.  
  865. /*
  866.  * Floating point conversion function table.
  867.  */
  868.  
  869. extern void (*(PEX_fp_convert[NUM_FP_FORMATS][NUM_FP_FORMATS]))();
  870.  
  871.  
  872.  
  873. /* -------------------------------------------------------------------------
  874.  * Function prototypes for PEXlib internal functions.
  875.  * ------------------------------------------------------------------------- */
  876.  
  877. extern void _PEXCopyPaddedBytesToOC(
  878. #if NeedFunctionPrototypes
  879.     Display *            /* display */,
  880.     int             /* numBytes */,
  881.     char *            /* data */
  882. #endif
  883. );
  884.  
  885. extern void _PEXSendBytesToOC(
  886. #if NeedFunctionPrototypes
  887.     Display *            /* display */,
  888.     int             /* numBytes */,
  889.     char *            /* data */
  890. #endif
  891. );
  892.  
  893. extern void _PEXOCFacet(
  894. #if NeedFunctionPrototypes
  895.     Display *            /* display */,
  896.     int                /* colorType */,
  897.     unsigned int        /* facetAttr */,
  898.     PEXFacetData *        /* facetData */,
  899.     int                /* fpFormat */
  900. #endif
  901. );
  902.  
  903. extern void _PEXOCListOfFacet(
  904. #if NeedFunctionPrototypes
  905.     Display *            /* display */,
  906.     int                /* count */,
  907.     int                /* colorType */,
  908.     unsigned int        /* facetAttr */,
  909.     PEXArrayOfFacetData     /* facetData */,
  910.     int                /* fpFormat */
  911. #endif
  912. );
  913.  
  914. extern void _PEXOCListOfVertex(
  915. #if NeedFunctionPrototypes
  916.     Display *            /* display */,
  917.     int                /* count */,
  918.     int                /* colorType */,
  919.     unsigned int        /* vertAttr */,
  920.     PEXArrayOfVertex         /* vertData */,
  921.     int                /* fpFormat */
  922. #endif
  923. );
  924.  
  925. extern void _PEXOCListOfColor(
  926. #if NeedFunctionPrototypes
  927.     Display *            /* display */,
  928.     int                /* count */,
  929.     int                /* colorType */,
  930.     PEXArrayOfColor         /* colors */,
  931.     int                /* fpFormat */
  932. #endif
  933. );
  934.  
  935. extern void _PEXStoreFacet(
  936. #if NeedFunctionPrototypes
  937.     int                /* colorType */,
  938.     unsigned int        /* facetAttr */,
  939.     PEXFacetData *        /* facetData */,
  940.     char **            /* bufPtr */,
  941.     int                /* fpFormat */
  942. #endif
  943. );
  944.  
  945. extern void _PEXStoreListOfFacet(
  946. #if NeedFunctionPrototypes
  947.     int                /* count */,
  948.     int                /* colorType */,
  949.     unsigned int        /* facetAttr */,
  950.     PEXArrayOfFacetData     /* facetData */,
  951.     char **            /* bufPtr */,
  952.     int                /* fpFormat */
  953. #endif
  954. );
  955.  
  956. extern void _PEXStoreListOfVertex(
  957. #if NeedFunctionPrototypes
  958.     int                /* count */,
  959.     int                /* colorType */,
  960.     unsigned int        /* vertAttr */,
  961.     PEXArrayOfVertex         /* vertData */,
  962.     char **            /* bufPtr */,
  963.     int                /* fpFormat */
  964. #endif
  965. );
  966.  
  967. extern void _PEXStoreListOfColor(
  968. #if NeedFunctionPrototypes
  969.     int                /* count */,
  970.     int                /* colorType */,
  971.     PEXArrayOfColor         /* colors */,
  972.     char **            /* bufPtr */,
  973.     int                /* fpFormat */
  974. #endif
  975. );
  976.  
  977. extern void _PEXExtractFacet(
  978. #if NeedFunctionPrototypes
  979.     char **            /* bufPtr */,
  980.     int                /* colorType */,
  981.     unsigned int        /* facetAttr */,
  982.     PEXFacetData *        /* facetData */,
  983.     int                /* fpFormat */
  984. #endif
  985. );
  986.  
  987. extern void _PEXExtractListOfFacet(
  988. #if NeedFunctionPrototypes
  989.     int                /* count */,
  990.     char **            /* bufPtr */,
  991.     int                /* colorType */,
  992.     unsigned int        /* facetAttr */,
  993.     PEXArrayOfFacetData     /* facetData */,
  994.     int                /* fpFormat */
  995. #endif
  996. );
  997.  
  998. extern void _PEXExtractListOfVertex(
  999. #if NeedFunctionPrototypes
  1000.     int                /* count */,
  1001.     char **            /* bufPtr */,
  1002.     int                /* colorType */,
  1003.     unsigned int        /* vertAttr */,
  1004.     PEXArrayOfVertex         /* vertData */,
  1005.     int                /* fpFormat */
  1006. #endif
  1007. );
  1008.  
  1009. extern void _PEXExtractListOfColor(
  1010. #if NeedFunctionPrototypes
  1011.     int                /* count */,
  1012.     char **            /* bufPtr */,
  1013.     int                /* colorType */,
  1014.     PEXArrayOfColor         /* colors */,
  1015.     int                /* fpFormat */
  1016. #endif
  1017. );
  1018.  
  1019. extern void _PEXGenOCBadLengthError(
  1020. #if NeedFunctionPrototypes
  1021.     Display *            /* display */,
  1022.     XID                /* resource_id */,
  1023.     PEXOCRequestType        /* req_type */
  1024. #endif
  1025. );
  1026.  
  1027.  
  1028.  
  1029. /* -------------------------------------------------------------------------
  1030.  * Miscellaneous.
  1031.  * ------------------------------------------------------------------------- */
  1032.  
  1033. /*
  1034.  * Argument types in function definitions.
  1035.  */
  1036.  
  1037. #define INPUT  
  1038. #define OUTPUT  
  1039. #define INOUT
  1040.  
  1041.  
  1042. /*
  1043.  * Xlib defines min and max as macros; Must undef since min and max
  1044.  * are field names in PEXlib data structures.
  1045.  */
  1046.  
  1047. #ifdef min
  1048. #undef min
  1049. #endif
  1050.  
  1051. #ifdef max
  1052. #undef max
  1053. #endif
  1054.  
  1055. #endif /* _PEXLIBINT_H_ */
  1056.  
  1057.  
  1058.