|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T X
Length: 23572 (0x5c14)
Types: TextFile
Names: »XpexPhigsWks.c«
└─⟦8648bda34⟧ Bits:30007244 EUUGD5_II: X11R5
└─⟦b23e377d7⟧ »./contrib-2/contrib-2.00«
└─⟦0ed22c3ba⟧
└─⟦this⟧ »contrib/lib/Xpex/extensions/lib/PEX/Xpex/lib/resources/XpexPhigsWks.c«
/* $Header: XpexPhigsWks.c,v 2.6 91/09/11 15:50:59 sinyaw Exp $ */
/*****************************************************************
Copyright 1991 by Sony Microsystems Company, San Jose, California
All Rights Reserved
Permission to use, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and
that both that copyright notice and this permission notice appear
in supporting documentation, and that the name of Sony not be used
in advertising or publicity pertaining to distribution of the
software without specific, written prior permission.
SONY DISCLAIMS ANY AND ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
INCLUDING ALL EXPRESS WARRANTIES AND ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS, FOR A PARTICULAR PURPOSE. IN NO EVENT
SHALL SONY BE LIABLE FOR ANY DAMAGES OF ANY KIND, INCLUDING BUT NOT
LIMITED TO SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES RESULTING FROM
LOSS OF USE, DATA OR LOSS OF ANY PAST, PRESENT, OR PROSPECTIVE PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.
*****************************************************************/
#include "Xpexlibint.h"
#include "Xpexlib.h"
#include <X11/extensions/Xext.h>
#include "extutil.h"
#include "Xpextutil.h"
XpexPhigsWks
XpexCreatePhigsWks(dpy, drawable, wks_res, buffer_mode)
Display *dpy;
Drawable drawable;
XpexWksResources *wks_res;
XpexBufferMode buffer_mode;
{
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
register pexCreatePhigsWksReq *req;
pexPhigsWks wks_id;
XpexCheckExtension(dpy,i,0);
LockDisplay(dpy);
XpexGetReq(CreatePhigsWks,dpy,i,req);
req->wks = wks_id = XAllocID(dpy);
req->drawable = drawable;
req->markerBundle = wks_res->marker_bundle;
req->textBundle = wks_res->text_bundle;
req->lineBundle = wks_res->line_bundle;
req->interiorBundle = wks_res->interior_bundle;
req->edgeBundle = wks_res->edge_bundle;
req->colourTable = wks_res->color_table;
req->depthCueTable = wks_res->depth_cue_table;
req->lightTable = wks_res->light_table;
req->colourApproxTable = wks_res->color_approx_table;
req->patternTable = wks_res->pattern_table;
req->textFontTable = wks_res->text_font_table;
req->highlightIncl = wks_res->highlight_incl;
req->highlightExcl = wks_res->highlight_excl;
req->invisIncl = wks_res->invis_incl;
req->invisExcl = wks_res->invis_excl;
req->bufferMode = buffer_mode;
UnlockDisplay(dpy);
SyncHandle();
return wks_id;
}
void
XpexFreePhigsWks(dpy, wks_id)
Display *dpy;
XpexPhigsWks wks_id;
{
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
register pexFreePhigsWksReq *req;
XpexSimpleCheckExtension(dpy,i);
LockDisplay(dpy);
XpexGetResReq(FreePhigsWks, dpy, i, wks_id, req);
UnlockDisplay(dpy);
SyncHandle();
}
Status
XpexGetWksInfo(dpy, wks_id, valueMask, values)
Display *dpy;
XpexPhigsWks wks_id;
XpexBitmask valueMask[2];
XpexWksInfo *values;
{
/* static Status _XpexGetWksInfo(); */
static void unpack_wks_info();
CARD32 *list;
if (!_XpexGetWksInfo(dpy, wks_id, valueMask, &list)) {
return 0;
}
unpack_wks_info((CARD32 *)list, valueMask, values);
if (list) {
XFree(list);
}
return 1;
}
Status
XpexGetDynamics(dpy, drawable, dynamics)
Display *dpy;
Drawable drawable;
XpexDynamics *dynamics; /* RETURN */
{
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
register pexGetDynamicsReq *req;
pexGetDynamicsReply reply;
XpexCheckExtension(dpy,i,0);
LockDisplay(dpy);
XpexGetReq(GetDynamics, dpy, i, req);
req->drawable = drawable;
if (!_XReply(dpy, (xReply *)&reply, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return 0;
}
dynamics->view_rep = (int) reply.viewRep;
dynamics->marker_bundle = (int) reply.markerBundle;
dynamics->text_bundle = (int) reply.textBundle;
dynamics->line_bundle = (int) reply.lineBundle;
dynamics->interior_bundle = (int) reply.interiorBundle;
dynamics->edge_bundle = (int) reply.edgeBundle;
dynamics->color_table = (int) reply.colourTable;
dynamics->pattern_table = (int) reply.patternTable;
dynamics->wks_transform = (int) reply.wksTransform;
dynamics->highlight_filter = (int) reply.highlightFilter;
dynamics->invisibility_filter = (int) reply.invisibilityFilter;
dynamics->hlhsr_mode = (int) reply.HlhsrMode;
dynamics->structure_modify = (int) reply.structureModify;
dynamics->post_structure = (int) reply.postStructure;
dynamics->unpost_structure = (int) reply.unpostStructure;
dynamics->delete_structure = (int) reply.deleteStructure;
dynamics->reference_modify = (int) reply.referenceModify;
dynamics->buffer_modify = (int) reply.bufferModify;
UnlockDisplay(dpy);
SyncHandle();
return 1;
}
Status
XpexGetViewRep(dpy, wks_id, index, view_update, requested, current)
Display *dpy;
XpexPhigsWks wks_id;
XpexTableIndex index;
XpexUpdateState *view_update; /* RETURN */
XpexViewRep *requested; /* RETURN */
XpexViewRep *current; /* RETURN */
{
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
register pexGetViewRepReq *req;
pexGetViewRepReply reply;
pexViewRep *view_reps;
unsigned size;
Status status = 0;
XpexCheckExtension(dpy,i,0);
LockDisplay(dpy);
XpexGetReq(GetViewRep, dpy, i, req);
req->fpFormat = XpexGetFloatingPointFormat(dpy);
req->wks = wks_id;
req->index = index;
if (!_XReply(dpy, (xReply *)&reply, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return 0;
}
*view_update = (XpexUpdateState) reply.viewUpdate;
if ((size = reply.length * sizeof(CARD32)) > 0) {
if (view_reps = (pexViewRep *) Xmalloc(size)) {
_XRead(dpy, (char *) view_reps, (long) size);
bcopy((char *)&view_reps[0],
(char *)requested, sizeof(pexViewRep));
bcopy((char *)&view_reps[1],
(char *)current, sizeof(pexViewRep));
XFree((char *)view_reps);
} else {
status = 0;
_XpexClearReply(dpy, reply.length);
}
}
UnlockDisplay(dpy);
SyncHandle();
return status;
}
void
XpexRedrawAllStructures(dpy, wks_id)
Display *dpy;
XpexPhigsWks wks_id;
{
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
register pexRedrawAllStructuresReq *req;
XpexSimpleCheckExtension(dpy,i);
LockDisplay(dpy);
XpexGetResReq(RedrawAllStructures,dpy,i,wks_id,req);
UnlockDisplay(dpy);
SyncHandle();
}
void
XpexUpdateWorkstation(dpy, wks_id)
Display *dpy;
XpexPhigsWks wks_id;
{
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
register pexUpdateWorkstationReq *req;
XpexSimpleCheckExtension(dpy,i);
LockDisplay(dpy);
XpexGetResReq(UpdateWorkstation,dpy,i,wks_id,req);
UnlockDisplay(dpy);
SyncHandle();
}
void
XpexRedrawClipRegion(dpy, wks_id, dev_rects, count)
Display *dpy;
XpexPhigsWks wks_id;
XpexDeviceRect *dev_rects;
int count;
{
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
register pexRedrawClipRegionReq *req;
int extra = count * sizeof(pexDeviceRect);
pexDeviceRect *dest;
XpexSimpleCheckExtension(dpy,i);
LockDisplay(dpy);
XpexGetReqExtra(RedrawClipRegion,dpy,i,extra,req);
req->wks = wks_id;
req->numRects = (CARD32) count;
dest = (pexDeviceRect *) (req + 1);
while (count--) {
dest->xmin = (INT16) dev_rects->xmin;
dest->ymin = (INT16) dev_rects->ymin;
dest->xmax = (INT16) dev_rects->xmax;
dest->ymax = (INT16) dev_rects->ymax;
dest++;
dev_rects++; /* src */
}
UnlockDisplay(dpy);
SyncHandle();
}
void
XpexExecuteDeferredActions(dpy, wks_id)
Display *dpy;
XpexPhigsWks wks_id;
{
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
register pexExecuteDeferredActionsReq *req;
XpexSimpleCheckExtension(dpy,i);
LockDisplay(dpy);
XpexGetResReq(ExecuteDeferredActions, dpy, i, wks_id, req);
UnlockDisplay(dpy);
SyncHandle();
}
void
XpexSetViewPriority(dpy, wks_id, index1, index2, priority)
Display *dpy;
XpexPhigsWks wks_id;
XpexTableIndex index1;
XpexTableIndex index2;
short priority;
{
register pexSetViewPriorityReq *req;
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
XpexSimpleCheckExtension(dpy,i);
LockDisplay(dpy);
XpexGetReq(SetViewPriority,dpy,i,req);
req->wks = wks_id;
req->index1 = index1;
req->index2 = index2;
req->priority = priority;
UnlockDisplay(dpy);
SyncHandle();
}
void
XpexSetDisplayUpdateMode(dpy, wks_id, mode)
Display *dpy;
XpexPhigsWks wks_id;
XpexEnumTypeIndex mode;
{
register pexSetDisplayUpdateModeReq *req;
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
XpexSimpleCheckExtension(dpy,i);
LockDisplay(dpy);
XpexGetReq(SetDisplayUpdateMode, dpy, i, req);
req->wks = wks_id;
req->displayUpdate = (pexEnumTypeIndex) mode;
UnlockDisplay(dpy);
SyncHandle();
}
Status
XpexMapDCtoWC(dpy, wks_id, dc_pts, num_dc_pts, view_index,
wc_pts, num_wc_pts)
Display *dpy;
XpexPhigsWks wks_id;
XpexDeviceCoord *dc_pts;
int num_dc_pts;
XpexTableIndex *view_index; /* RETURN */
XpexCoord3D **wc_pts; /* RETURN */
int *num_wc_pts; /* RETURN */
{
register pexCoord3D *pCoord3D;
register pexDeviceCoord *dest;
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
register pexMapDCtoWCReq *req;
pexMapDCtoWCReply reply;
Status status = 1;
int extra = num_dc_pts * sizeof(pexDeviceCoord);
unsigned size;
XpexCheckExtension(dpy,i,0);
LockDisplay(dpy);
XpexGetReqExtra(MapDCtoWC, dpy, i, extra, req);
req->fpFormat = XpexGetFloatingPointFormat(dpy);
req->wks = wks_id;
req->numCoords = (CARD32) num_dc_pts;
dest = (pexDeviceCoord *)(req + 1);
bcopy((char *)dc_pts, (char *)dest, extra);
if( ! _XReply(dpy, (xReply *)&reply, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return 0;
}
*view_index = (XpexTableIndex) reply.viewIndex;
*num_wc_pts = (int) reply.numCoords;
if ((size = reply.length * sizeof(CARD32)) > 0) {
if (pCoord3D = (pexCoord3D *) Xmalloc(size)) {
_XRead(dpy, (char *)pCoord3D, (long) size);
bcopy((char *)pCoord3D, (char *)*wc_pts, size);
XFree((char *)pCoord3D);
} else {
status = 0;
_XpexClearReply(dpy, reply.length);
}
}
UnlockDisplay(dpy);
SyncHandle();
return status;
}
Status
XpexMapWCtoDC(dpy, wks_id, view_index, wc_pts, num_wc_pts,
dc_pts, num_dc_pts)
Display *dpy;
XpexPhigsWks wks_id;
XpexTableIndex view_index;
XpexCoord3D *wc_pts;
int num_wc_pts;
XpexDeviceCoord **dc_pts; /* RETURN */
int *num_dc_pts; /* RETURN */
{
register pexCoord3D *dest;
register pexDeviceCoord *pDC;
register pexMapWCtoDCReq *req;
pexMapWCtoDCReply reply;
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
Status status = 1;
int extra = num_wc_pts * sizeof(pexCoord3D);
unsigned size;
XpexCheckExtension(dpy,i,0);
LockDisplay(dpy);
XpexGetReqExtra(MapWCtoDC, dpy, i, extra, req);
req->wks = wks_id;
req->index = (pexTableIndex) view_index;
req->numCoords = (CARD32) num_wc_pts;
dest = (pexCoord3D *) (req + 1);
bcopy((char *)wc_pts, (char *)dest, extra);
if (!_XReply(dpy, (xReply *)&reply, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return 0;
}
*num_dc_pts = (int) reply.numCoords;
if ((size = reply.length * sizeof(CARD32)) > 0) {
if (pDC = (pexDeviceCoord *)Xmalloc(size)) {
_XRead(dpy, (char *) pDC, (long) size);
bcopy((char *)pDC, (char *)*dc_pts, size);
XFree((char *)pDC);
} else {
status = 0;
_XpexClearReply(dpy, reply.length);
}
}
UnlockDisplay(dpy);
SyncHandle();
return status;
}
void
XpexSetViewRep(dpy, wks_id, view_rep)
Display *dpy;
XpexPhigsWks wks_id;
XpexViewRep *view_rep;
{
register int i, j;
register pexViewRep *dest;
register pexSetViewRepReq *req;
register XExtDisplayInfo *info = XpexFindDisplay(dpy);
XpexSimpleCheckExtension(dpy,info);
LockDisplay(dpy);
XpexGetReq(SetViewRep, dpy, info, req);
req->fpFormat = XpexGetFloatingPointFormat(dpy);
req->wks = wks_id;
req->viewRep.index = view_rep->index;
req->viewRep.view.clipFlags = view_rep->view.clipFlags;
bcopy((char *)&(view_rep->view.clipLimits),
(char *)&(req->viewRep.view.clipLimits),
sizeof(pexViewRep));
for (j = 0; j <= 3 ; j++) {
for (i = 0; i <= 3 ; i++) {
req->viewRep.view.orientation[j][i] =
(XpexFloat) view_rep->view.orientation[j][i];
}
}
for (j = 0; j <= 3 ; j++) {
for (i = 0; i <= 3 ; i++) {
req->viewRep.view.mapping[j][i] =
(XpexFloat) view_rep->view.mapping[j][i];
}
}
UnlockDisplay(dpy);
SyncHandle();
}
#define Xpex_ConvertNpcSubvolume(_dest,_src) \
_dest->minval.x = (XpexFloat) _src->minval.x; \
_dest->minval.y = (XpexFloat) _src->minval.y; \
_dest->minval.z = (XpexFloat) _src->minval.z; \
_dest->maxval.x = (XpexFloat) _src->maxval.x; \
_dest->maxval.y = (XpexFloat) _src->maxval.y; \
_dest->maxval.z = (XpexFloat) _src->maxval.z
void
XpexSetWksWindow(dpy, wks_id, npc_subvolume)
Display *dpy;
XpexPhigsWks wks_id;
XpexNpcSubvolume *npc_subvolume;
{
register pexSetWksWindowReq *req;
register pexNpcSubvolume *pDest;
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
XpexSimpleCheckExtension(dpy,i);
LockDisplay(dpy);
XpexGetReq(SetWksWindow, dpy, i, req);
req->wks = wks_id;
pDest = (pexNpcSubvolume *)(req + 1);
Xpex_ConvertNpcSubvolume(pDest,npc_subvolume);
UnlockDisplay(dpy);
SyncHandle();
}
#undef Xpex_ConvertNpcSubvolume
#define Xpex_ConvertWksViewport(_dest,_src) \
_dest->minval.x = (INT16) _src->minval.x; \
_dest->minval.y = (INT16) _src->minval.y; \
_dest->minval.z = (XpexFloat) _src->minval.z; \
_dest->maxval.x = (INT16) _src->maxval.x; \
_dest->maxval.y = (INT16) _src->maxval.y; \
_dest->maxval.z = (XpexFloat) _src->maxval.z; \
_dest->useDrawable = (pexSwitch) _src->useDrawable
void
XpexSetWksViewport(dpy, wks_id, viewport)
Display *dpy;
XpexPhigsWks wks_id;
XpexViewport *viewport;
{
register pexViewport *dest;
register pexSetWksViewportReq *req;
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
XpexSimpleCheckExtension(dpy,i);
LockDisplay(dpy);
XpexGetReq(SetWksViewport, dpy, i, req);
req->wks = wks_id;
dest = (pexViewport *)(req + 1);
Xpex_ConvertWksViewport(dest,viewport);
UnlockDisplay(dpy);
SyncHandle();
}
#undef Xpex_ConvertWksViewport
void
XpexSetHlhsrMode(dpy, wks_id, mode)
Display *dpy;
XpexPhigsWks wks_id;
XpexHlhsrMode mode;
{
register pexSetHlhsrModeReq *req;
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
XpexSimpleCheckExtension(dpy,i);
LockDisplay(dpy);
XpexGetReq(SetHlhsrMode, dpy, i, req);
req->wks = wks_id;
req->mode = mode;
UnlockDisplay(dpy);
SyncHandle();
}
void
XpexSetWksBufferMode(dpy, wks_id, buffer_mode)
Display *dpy;
XpexPhigsWks wks_id;
int buffer_mode;
{
register pexSetWksBufferModeReq *req;
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
XpexSimpleCheckExtension(dpy,i);
LockDisplay(dpy);
XpexGetReq(SetWksBufferMode,dpy,i,req);
req->wks = wks_id;
req->bufferMode = (CARD16) buffer_mode;
UnlockDisplay(dpy);
SyncHandle();
}
void
XpexPostStructure(dpy, wks_id, s_id, priority)
Display *dpy;
XpexPhigsWks wks_id;
XpexStructure s_id;
XpexFloat priority;
{
register pexPostStructureReq *req;
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
XpexSimpleCheckExtension(dpy,i);
LockDisplay(dpy);
XpexGetReq(PostStructure, dpy, i, req);
req->fpFormat = XpexGetFloatingPointFormat(dpy);
req->wks = wks_id;
req->sid = s_id;
req->priority = (XpexFloat) priority;
UnlockDisplay(dpy);
SyncHandle();
}
void
XpexUnpostStructure(dpy, wks_id, s_id)
Display *dpy;
XpexPhigsWks wks_id;
XpexStructure s_id;
{
register pexUnpostStructureReq *req;
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
XpexSimpleCheckExtension(dpy,i);
LockDisplay(dpy);
XpexGetReq(UnpostStructure, dpy, i, req);
req->wks = wks_id;
req->sid = s_id;
UnlockDisplay(dpy);
SyncHandle();
}
void
XpexUnpostAllStructures(dpy, wks_id)
Display *dpy;
XpexPhigsWks wks_id;
{
register pexUnpostAllStructuresReq *req;
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
XpexSimpleCheckExtension(dpy,i);
LockDisplay(dpy);
XpexGetResReq(UnpostAllStructures, dpy, i, wks_id, req);
UnlockDisplay(dpy);
SyncHandle();
}
Status
XpexGetWksPostings(dpy, s_id, wks_ids, count)
Display *dpy;
XpexStructure s_id;
XpexPhigsWks **wks_ids; /* RETURN */
int *count; /* RETURN */
{
register pexGetWksPostingsReq *req;
pexGetWksPostingsReply reply;
unsigned size;
Status status = 1;
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
XpexCheckExtension(dpy,i,0);
LockDisplay(dpy);
XpexGetResReq(GetWksPostings, dpy, i, s_id, req);
if (!_XReply(dpy, (xReply *)&reply, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return 0;
}
*count = (int) reply.length;
if ((size = reply.length * sizeof(CARD32)) > 0) {
if (*wks_ids = (pexPhigsWks *) Xmalloc(size)) {
_XRead(dpy, (char *)*wks_ids, (long)size);
} else {
status = 0;
_XpexClearReply(dpy, reply.length);
}
}
UnlockDisplay(dpy);
SyncHandle();
return status;
}
/* static */ Status
_XpexGetWksInfo(dpy, wks_id, valuemask, list)
Display *dpy;
XpexPhigsWks wks_id;
XpexBitmask valuemask[PEXMSGetWksInfo];
CARD32 **list; /* RETURN */
{
register pexGetWksInfoReq *req;
pexGetWksInfoReply reply;
register XExtDisplayInfo *i = XpexFindDisplay(dpy);
Status status = 1;
unsigned size;
XpexCheckExtension(dpy,i,0);
LockDisplay(dpy);
XpexGetReq(GetWksInfo, dpy, i, req);
req->fpFormat = XpexGetFloatingPointFormat(dpy);
req->wks = wks_id;
req->itemMask[0] = valuemask[0];
req->itemMask[1] = valuemask[1];
if (!_XReply(dpy, (xReply *)&reply, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return 0;
}
if ((size = reply.length * sizeof(CARD32)) > 0) {
if (*list = (CARD32 *)Xmalloc(size)) {
_XRead(dpy, (char *) *list, (long) size);
} else {
status = 0;
_XpexClearReply(dpy, reply.length);
}
}
UnlockDisplay(dpy);
SyncHandle();
return status;
}
typedef struct {
pexTableIndex index B16;
CARD16 pad B16;
} pexTableIndexPadded;
static void
unpack_wks_info(list, itemMask, wksInfo)
CARD32 *list;
XpexBitmask itemMask[2];
XpexWksInfo *wksInfo; /* RETURN */
{
char *ptr;
if (itemMask[0] & XpexPW_DisplayUpdate) {
wksInfo->display_update = *((INT16 *) list);
list++;
}
if (itemMask[0] & XpexPW_VisualState) {
wksInfo->visual_state = *((CARD8 *) list);
list++;
}
if (itemMask[0] & XpexPW_DisplaySurface) {
wksInfo->display_surface = *((CARD8 *) list);
list++;
}
if (itemMask[0] & XpexPW_ViewUpdate) {
wksInfo->view_update = *((CARD8 *) list);
list++;
}
if (itemMask[0] & XpexPW_DefinedViews) {
register int i;
pexTableIndexPadded *src;
int count = wksInfo->defined_views.num_indices = (int) *list++;
int size = count * sizeof(pexTableIndex);
if (count) {
if (wksInfo->defined_views.indices =
(pexTableIndex *) Xmalloc(size)) {
src = (pexTableIndexPadded *) list;
for (i = 0; i < count; i++) {
wksInfo->defined_views.indices[i] = src[i].index;
}
}
ptr = ((char *) list) +
(count * sizeof(pexTableIndexPadded));
list = (CARD32 *) ptr;
}
}
if (itemMask[0] & XpexPW_WksUpdate) {
wksInfo->wks_update = *((CARD8 *) list);
list++;
}
if (itemMask[0] & XpexPW_ReqNpcSubvolume) {
pexNpcSubvolume *p = (pexNpcSubvolume *) list;
wksInfo->req_NPC_subvolume.minval.x = p->minval.x;
wksInfo->req_NPC_subvolume.minval.y = p->minval.y;
wksInfo->req_NPC_subvolume.minval.z = p->minval.z;
wksInfo->req_NPC_subvolume.maxval.x = p->maxval.x;
wksInfo->req_NPC_subvolume.maxval.y = p->maxval.y;
wksInfo->req_NPC_subvolume.maxval.z = p->maxval.z;
list = (CARD32 *) ++p;
}
if (itemMask[0] & XpexPW_CurNpcSubvolume) {
pexNpcSubvolume *p = (pexNpcSubvolume *) list;
wksInfo->cur_NPC_subvolume.minval.x = p->minval.x;
wksInfo->cur_NPC_subvolume.minval.y = p->minval.y;
wksInfo->cur_NPC_subvolume.minval.z = p->minval.z;
wksInfo->cur_NPC_subvolume.maxval.x = p->maxval.x;
wksInfo->cur_NPC_subvolume.maxval.y = p->maxval.y;
wksInfo->cur_NPC_subvolume.maxval.z = p->maxval.z;
list = (CARD32 *) ++p;
}
if (itemMask[0] & XpexPW_ReqWksViewport) {
pexViewport *p = (pexViewport *) list;
wksInfo->req_wks_viewpt.minval.x = p->minval.x;
wksInfo->req_wks_viewpt.minval.y = p->minval.y;
wksInfo->req_wks_viewpt.minval.z = p->minval.z;
wksInfo->req_wks_viewpt.maxval.x = p->maxval.x;
wksInfo->req_wks_viewpt.maxval.y = p->maxval.y;
wksInfo->req_wks_viewpt.maxval.z = p->maxval.z;
wksInfo->req_wks_viewpt.useDrawable = p->useDrawable;
list = (CARD32 *) ++p;
}
if (itemMask[0] & XpexPW_CurWksViewport) {
pexViewport *p = (pexViewport *) list;
wksInfo->cur_wks_viewpt.minval.x = p->minval.x;
wksInfo->cur_wks_viewpt.minval.y = p->minval.y;
wksInfo->cur_wks_viewpt.minval.z = p->minval.z;
wksInfo->cur_wks_viewpt.maxval.x = p->maxval.x;
wksInfo->cur_wks_viewpt.maxval.y = p->maxval.y;
wksInfo->cur_wks_viewpt.maxval.z = p->maxval.z;
wksInfo->cur_wks_viewpt.useDrawable = p->useDrawable;
list = (CARD32 *) ++p;
}
if (itemMask[0] & XpexPW_HlhsrUpdate) {
wksInfo->hlhsr_update = *((CARD8 *) list);
list++;
}
if (itemMask[0] & XpexPW_ReqHlhsrMode) {
wksInfo->req_hlhsr_mode = *((INT16 *) list);
list++;
}
if (itemMask[0] & XpexPW_CurHlhsrMode) {
wksInfo->cur_hlhsr_mode = *((INT16 *) list);
list++;
}
if (itemMask[0] & XpexPW_Drawable) {
wksInfo->drawable_id = *list++;
}
if (itemMask[0] & XpexPW_MarkerBundle) {
wksInfo->marker_bundle = *list++;
}
if (itemMask[0] & XpexPW_TextBundle) {
wksInfo->text_bundle = *list++;
}
if (itemMask[0] & XpexPW_LineBundle) {
wksInfo->line_bundle = *list++;
}
if (itemMask[0] & XpexPW_InteriorBundle) {
wksInfo->interior_bundle = *list++;
}
if (itemMask[0] & XpexPW_EdgeBundle) {
wksInfo->edge_bundle = *list++;
}
if (itemMask[0] & XpexPW_ColorTable) {
wksInfo->color_table = *list++;
}
if (itemMask[0] & XpexPW_DepthCueTable) {
wksInfo->depth_cue_table = *list++;
}
if (itemMask[0] & XpexPW_LightTable) {
wksInfo->light_table = *list++;
}
if (itemMask[0] & XpexPW_ColorApproxTable) {
wksInfo->color_approx_table = *list++;
}
if (itemMask[0] & XpexPW_PatternTable) {
wksInfo->pattern_table = *list++;
}
if (itemMask[0] & XpexPW_TextFontTable) {
wksInfo->text_font_table = *list++;
}
if (itemMask[0] & XpexPW_HighlightIncl) {
wksInfo->highlight_incl = *list++;
}
if (itemMask[0] & XpexPW_HighlightExcl) {
wksInfo->highlight_excl = *list++;
}
if (itemMask[0] & XpexPW_InvisibilityIncl) {
wksInfo->invis_incl = *list++;
}
if (itemMask[0] & XpexPW_InvisibilityExcl) {
wksInfo->invis_excl = *list++;
}
if (itemMask[0] & XpexPW_PostedStructures) {
pexStructureInfo *src;
XpexPostedStructureInfo *dest;
int count =
wksInfo->posted_structs.num_info = *((CARD32 *) list);
list += sizeof(CARD32);
if (count) {
register int i;
int sizeOfList = count * sizeof(pexStructureInfo);
src = (pexStructureInfo *) list;
if (wksInfo->posted_structs.info =
(XpexPostedStructureInfo *) Xmalloc(sizeOfList)) {
dest = wksInfo->posted_structs.info;
for (i = 0; i < count; i++) {
dest[i].sid = src[i].sid;
dest[i].priority = src[i].priority;
}
list += sizeOfList;
}
}
}
if (itemMask[0] & XpexPW_NumPriorities) {
wksInfo->num_priorities = *list++;
}
if (itemMask[0] & XpexPW_BufferUpdate) {
wksInfo->buffer_update = *((CARD8 *) list);
list++;
}
if (itemMask[1] & XpexPW_ReqBufferMode) {
wksInfo->req_buffer_mode = *((CARD16 *) list);
list++;
}
if (itemMask[1] & XpexPW_CurBufferMode) {
wksInfo->cur_buffer_mode = *((CARD16 *) list);
list++; /* not really necessary */
}
}