diff options
Diffstat (limited to 'nx-X11/lib/dpstk/XDPSshare.c')
-rw-r--r-- | nx-X11/lib/dpstk/XDPSshare.c | 727 |
1 files changed, 0 insertions, 727 deletions
diff --git a/nx-X11/lib/dpstk/XDPSshare.c b/nx-X11/lib/dpstk/XDPSshare.c deleted file mode 100644 index ef146db4e..000000000 --- a/nx-X11/lib/dpstk/XDPSshare.c +++ /dev/null @@ -1,727 +0,0 @@ -/* - * XDPSshare.c - * - * (c) Copyright 1990-1994 Adobe Systems Incorporated. - * All rights reserved. - * - * Permission to use, copy, modify, distribute, and sublicense this software - * and its documentation for any purpose and without fee is hereby granted, - * provided that the above copyright notices appear in all copies and that - * both those copyright notices and this permission notice appear in - * supporting documentation and that the name of Adobe Systems Incorporated - * not be used in advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. No trademark license - * to use the Adobe trademarks is hereby granted. If the Adobe trademark - * "Display PostScript"(tm) is used to describe this software, its - * functionality or for any other purpose, such use shall be limited to a - * statement that this software works in conjunction with the Display - * PostScript system. Proper trademark attribution to reflect Adobe's - * ownership of the trademark shall be given whenever any such reference to - * the Display PostScript system is made. - * - * ADOBE MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THE SOFTWARE FOR - * ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. - * ADOBE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL - * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON- INFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL ADOBE BE LIABLE - * TO YOU OR ANY OTHER PARTY FOR ANY SPECIAL, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE, STRICT LIABILITY OR ANY OTHER ACTION ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ADOBE WILL NOT - * PROVIDE ANY TRAINING OR OTHER SUPPORT FOR THE SOFTWARE. - * - * Adobe, PostScript, and Display PostScript are trademarks of Adobe Systems - * Incorporated which may be registered in certain jurisdictions - * - * Author: Adobe Systems Incorporated - */ -/* $XFree86: xc/lib/dpstk/XDPSshare.c,v 1.2 2000/06/07 22:03:01 tsi Exp $ */ - -#include <stdio.h> -#include <stdlib.h> - -#include <X11/Xlib.h> - -#include <DPS/dpsXclient.h> -#include <DPS/dpsops.h> -#include <DPS/XDPSlib.h> -#include <DPS/dpsXshare.h> - -#include "XDPSswraps.h" -#include "dpsXcommonI.h" - -static int extensionId = 0; - -/* - Alloc...Info allocates an info entry and stores it at the head of the list. - Find...Info looks for an info entry and returns NULL if not found. - Lookup...Info looks for an info entry and creates one if not found. -*/ - -typedef struct _ContextInfoRec { - int extensionId; - DPSContextExtensionRec next; - DPSContext text; - Bool enableText; - unsigned long initFlags; - struct _DisplayInfoRec *displayInfo; -} ContextInfoRec, *ContextInfo; - -typedef enum {ext_yes, ext_no, ext_no_idea} ExtensionStatus; - -typedef struct _DisplayInfoRec { - Display *display; - ExtensionStatus extensionPresent; - DPSContext defaultContext; - int *depthsForScreen; - int **validDepths; - GC **gcForDepth; - struct _DisplayInfoRec *next; -} DisplayInfoRec, *DisplayInfo; - -/* If a display is in displayList, it means that we have looked to see if - the extension exists on the display. If context is not NULL, the - display has a default context associated with it. */ - -static DisplayInfo displayList = NULL; - -static DisplayInfo LookupDisplayInfo(Display *display); - -static ContextInfo AllocContextInfo(DPSContext context) -{ - ContextInfo c = (ContextInfo) calloc(1, sizeof(ContextInfoRec)); - - if (extensionId == 0) extensionId = DPSGenerateExtensionRecID(); - - c->extensionId = extensionId; - DPSAddContextExtensionRec(context, (DPSContextExtensionRec *) c); - - return c; -} - -static ContextInfo FindContextInfo(DPSContext context) -{ - if (extensionId == 0) extensionId = DPSGenerateExtensionRecID(); - - return (ContextInfo) DPSGetContextExtensionRec(context, extensionId); -} - -static ContextInfo RemoveContextInfo(DPSContext context) -{ - return (ContextInfo) DPSRemoveContextExtensionRec(context, - extensionId); -} - -/* May only be called for a display in the display list. */ - -static ContextInfo LookupContext( - Display *display, - DPSContext context) -{ - ContextInfo c = FindContextInfo(context); - - if (c != NULL) return c; - - /* Create one */ - - c = AllocContextInfo(context); - c->displayInfo = LookupDisplayInfo(display); - return c; -} - -static DisplayInfo AllocDisplayInfo( - Display *display, - DPSContext context) -{ - DisplayInfo d = (DisplayInfo) malloc(sizeof(DisplayInfoRec)); - register int i; - - if (d == NULL) return NULL; - d->next = displayList; - displayList = d; - - d->display = display; - d->defaultContext = context; - d->extensionPresent = (context == NULL) ? ext_no_idea : ext_yes; - - d->depthsForScreen = (int *) calloc(ScreenCount(display), sizeof(int)); - d->validDepths = (int **) calloc(ScreenCount(display), sizeof(int *)); - d->gcForDepth = (GC **) calloc(ScreenCount(display), sizeof(GC *)); - - for (i = 0; i < ScreenCount(display); i++) { - d->validDepths[i] = XListDepths(display, i, &d->depthsForScreen[i]); - d->gcForDepth[i] = (GC *) calloc(d->depthsForScreen[i], sizeof(GC)); - } - - return d; -} - -static DisplayInfo FindDisplayInfo(Display *display) -{ - DisplayInfo d = displayList; - - while (d != NULL && d->display != display) d = d->next; - return d; -} - -static DisplayInfo LookupDisplayInfo(Display *display) -{ - DisplayInfo d = FindDisplayInfo(display); - - if (d == NULL) d = AllocDisplayInfo(display, (DPSContext) NULL); - - return d; -} - -int _XDPSSetComponentInitialized(DPSContext context, unsigned long bit) -{ - ContextInfo c = FindContextInfo(context); - - if (c == NULL) return dps_status_unregistered_context; - c->initFlags |= bit; - return dps_status_success; -} - -int _XDPSTestComponentInitialized( - DPSContext context, - unsigned long bit, - Bool *result) -{ - ContextInfo c = FindContextInfo(context); - - if (c == NULL) { - *result = False; - return dps_status_unregistered_context; - } - *result = ((c->initFlags & bit) != 0); - return dps_status_success; -} - -int XDPSSetContextDepth( - DPSContext context, - Screen *screen, - int depth) -{ - return XDPSSetContextParameters(context, screen, depth, None, 0, - (XDPSStandardColormap *) NULL, - (XDPSStandardColormap *) NULL, - XDPSContextScreenDepth); -} - -int XDPSSetContextDrawable( - DPSContext context, - Drawable drawable, - int height) -{ - if (drawable != None && height <= 0) return dps_status_illegal_value; - _DPSSSetContextDrawable(context, drawable, height); - return dps_status_success; -} - -int XDPSSetContextRGBMap( - DPSContext context, - XDPSStandardColormap *map) -{ - return XDPSSetContextParameters(context, (Screen *) NULL, 0, None, 0, - map, (XDPSStandardColormap *) NULL, - XDPSContextRGBMap); -} - -int XDPSSetContextGrayMap( - DPSContext context, - XDPSStandardColormap *map) -{ - return XDPSSetContextParameters(context, (Screen *) NULL, 0, None, 0, - map, (XDPSStandardColormap *) NULL, - XDPSContextGrayMap); -} - -static GC DisplayInfoSharedGC(DisplayInfo d, Screen *screen, int depth) -{ - int s = XScreenNumberOfScreen(screen); - register int i; - XGCValues v; - Pixmap p; - - if (s >= ScreenCount(DisplayOfScreen(screen))) return NULL; - - for (i = 0; i < d->depthsForScreen[s] && - d->validDepths[s][i] != depth; i++) {} - - if (i >= d->depthsForScreen[s]) return NULL; - - if (d->gcForDepth[s][i] == 0) { /* Not "None" -- used calloc */ - if (depth == DefaultDepthOfScreen(screen)) { - d->gcForDepth[s][i] = XCreateGC(d->display, - RootWindowOfScreen(screen), 0, &v); - } else { - p = XCreatePixmap(d->display, - RootWindowOfScreen(screen), - 1, 1, depth); - d->gcForDepth[s][i] = XCreateGC(d->display, p, 0, &v); - XFreePixmap(d->display, p); - } - } - - return d->gcForDepth[s][i]; -} - -int XDPSSetContextParameters( - DPSContext context, - Screen *screen, - int depth, - Drawable drawable, - int height, - XDPSStandardColormap *rgbMap, - XDPSStandardColormap *grayMap, - unsigned int flags) -{ - ContextInfo c = FindContextInfo(context); - Bool doDepth = False, doDrawable = False, doRGB = False, doGray = False; - Colormap map = None; - XStandardColormap cmap; - GC gc; - GContext gctx = None; - DisplayInfo d; - Display *dpy; - int rgb_base_pixel = 0; - int red_max = 0; - int red_mult = 0; - int green_max = 0; - int green_mult = 0; - int blue_max = 0; - int blue_mult = 0; - int gray_base_pixel = 0; - int gray_max = 0; - int gray_mult = 0; - - if (c == NULL) return dps_status_unregistered_context; - d = c->displayInfo; - - (void) XDPSXIDFromContext(&dpy, context); - - if (flags & XDPSContextScreenDepth) { - doDepth = True; - - if (DisplayOfScreen(screen) != dpy) { - return dps_status_illegal_value; - } - - gc = DisplayInfoSharedGC(d, screen, depth); - if (gc == NULL) return dps_status_illegal_value; - - gctx = XGContextFromGC(gc); - } - - if (flags & XDPSContextDrawable) { - doDrawable = True; - if (drawable != None && height <= 0) return dps_status_illegal_value; - } - - if (flags & XDPSContextRGBMap) { - doRGB = True; - if (rgbMap == NULL) { - XDPSGetDefaultColorMaps(dpy, screen, drawable, &cmap, - (XStandardColormap *) NULL); - rgb_base_pixel = cmap.base_pixel; - red_max = cmap.red_max; - red_mult = cmap.red_mult; - green_max = cmap.green_max; - green_mult = cmap.green_mult; - blue_max = cmap.blue_max; - blue_mult = cmap.blue_mult; - map = cmap.colormap; - } else { - rgb_base_pixel = rgbMap->base_pixel; - red_max = rgbMap->red_max; - red_mult = rgbMap->red_mult; - green_max = rgbMap->green_max; - green_mult = rgbMap->green_mult; - blue_max = rgbMap->blue_max; - blue_mult = rgbMap->blue_mult; - map = rgbMap->colormap; - } - } - - if (flags & XDPSContextGrayMap) { - doGray = True; - if (grayMap == NULL) { - XDPSGetDefaultColorMaps(dpy, screen, drawable, - (XStandardColormap *) NULL, &cmap); - gray_base_pixel = cmap.base_pixel; - gray_max = cmap.red_max; - gray_mult = cmap.red_mult; - if (doRGB && map != cmap.colormap) { - return dps_status_illegal_value; - } else map = cmap.colormap; - } else { - gray_base_pixel = grayMap->base_pixel; - gray_max = grayMap->red_max; - gray_mult = grayMap->red_mult; - if (doRGB && map != grayMap->colormap) { - return dps_status_illegal_value; - } else map = grayMap->colormap; - } - } - - if (doDepth || doDrawable || doRGB || doGray) { - _DPSSSetContextParameters(context, gctx, drawable, height, map, - rgb_base_pixel, red_max, red_mult, - green_max, green_mult, blue_max, blue_mult, - gray_base_pixel, gray_max, gray_mult, - doDepth, doDrawable, doRGB, doGray); - } - return dps_status_success; -} - -int XDPSPushContextParameters( - DPSContext context, - Screen *screen, - int depth, - Drawable drawable, - int height, - XDPSStandardColormap *rgbMap, - XDPSStandardColormap *grayMap, - unsigned int flags, - DPSPointer *pushCookieReturn) -{ - ContextInfo c = FindContextInfo(context); - int status; - - if (c == NULL) return dps_status_unregistered_context; - - DPSgsave(context); - - status = XDPSSetContextParameters(context, screen, depth, drawable, height, - rgbMap, grayMap, flags); - - *pushCookieReturn = (DPSPointer) context; - return status; -} - -int XDPSPopContextParameters(DPSPointer pushCookie) -{ - DPSContext context = (DPSContext) pushCookie; - ContextInfo c = FindContextInfo(context); - - if (c == NULL) return dps_status_illegal_value; - - DPSgrestore(context); - - return dps_status_success; -} - -int XDPSCaptureContextGState(DPSContext context, DPSGState *gsReturn) -{ - *gsReturn = DPSNewUserObjectIndex(); - /* We want to keep 0 as an unassigned value */ - if (*gsReturn == 0) *gsReturn = DPSNewUserObjectIndex(); - - _DPSSCaptureGState(context, *gsReturn); - - return dps_status_success; -} - -int XDPSUpdateContextGState(DPSContext context, DPSGState gs) -{ - _DPSSUpdateGState(context, gs); - - return dps_status_success; -} - -int XDPSFreeContextGState(DPSContext context, DPSGState gs) -{ - _DPSSUndefineUserObject(context, gs); - - return dps_status_success; -} - -int XDPSSetContextGState( - DPSContext context, - DPSGState gs) -{ - _DPSSRestoreGState(context, gs); - - return dps_status_success; -} - -int XDPSPushContextGState( - DPSContext context, - DPSGState gs, - DPSPointer *pushCookieReturn) -{ - int status; - - DPSgsave(context); - - status = XDPSSetContextGState(context, gs); - *pushCookieReturn = (DPSPointer) context; - return status; -} - -int XDPSPopContextGState(DPSPointer pushCookie) -{ - DPSContext context = (DPSContext) pushCookie; - - DPSgrestore(context); - return dps_status_success; -} - -void XDPSRegisterContext(DPSContext context, Bool makeSharedContext) -{ - Display *display; - Bool inited; - ContextInfo c; - - /* Get the display */ - (void) XDPSXIDFromContext(&display, context); - - if (makeSharedContext) { /* Install as shared ctxt for this display */ - c = LookupContext(display, context); - c->displayInfo->defaultContext = context; - } else { /* Just add to the context list */ - c = LookupContext(display, context); - } - - c->displayInfo->extensionPresent = ext_yes; - - (void) _XDPSTestComponentInitialized(context, dps_init_bit_share, &inited); - if (!inited) { - (void) _XDPSSetComponentInitialized(context, dps_init_bit_share); - _DPSSInstallDPSlibDict(context); - } -} - -DPSContext XDPSGetSharedContext(Display *display) -{ - DisplayInfo d = LookupDisplayInfo(display); - ContextInfo c; - DPSContext context; - - if (d->extensionPresent == ext_no) return NULL; - - if (d->defaultContext != NULL) context = d->defaultContext; - else { - context = XDPSCreateSimpleContext(display, - None, None, 0, 0, - DPSDefaultTextBackstop, - DPSDefaultErrorProc, NULL); - if (context != NULL) { - c = AllocContextInfo(context); - d->defaultContext = context; - c->displayInfo = d; - (void) _XDPSSetComponentInitialized(context, dps_init_bit_share); - _DPSSInstallDPSlibDict(context); - (void) XDPSSetContextDepth(context, - DefaultScreenOfDisplay(display), - DefaultDepth(display, - DefaultScreen(display))); - } - } - - if (context == NULL) d->extensionPresent = ext_no; - else d->extensionPresent = ext_yes; - - return context; -} - -void XDPSDestroySharedContext(DPSContext context) -{ - ContextInfo c = RemoveContextInfo(context); - - if (c == NULL) return; - - if (c->displayInfo->defaultContext == context) { - c->displayInfo->defaultContext = NULL; - } - DPSDestroySpace(DPSSpaceFromContext(context)); /* Also gets context */ - if (c->text != NULL) DPSDestroySpace(DPSSpaceFromContext(c->text)); - free((char *) c); -} - -void XDPSUnregisterContext(DPSContext context) -{ - ContextInfo c = RemoveContextInfo(context); - - if (c == NULL) return; - - if (c->displayInfo->defaultContext == context) { - c->displayInfo->defaultContext = NULL; - } - if (c->text != NULL) DPSDestroySpace(DPSSpaceFromContext(c->text)); - free((char *) c); -} - -void XDPSFreeDisplayInfo(Display *display) -{ - DisplayInfo *dp = &displayList; - DisplayInfo d; - register int i, j; - - while (*dp != NULL && (*dp)->display != display) dp = &((*dp)->next); - - if (*dp == NULL) return; - - d = *dp; - *dp = d->next; /* remove from list */ - - for (i = 0; i < ScreenCount(display); i++) { -#ifdef NO_XLISTDEPTHS - free((char *) d->validDepths[i]); -#else - XFree((char *) d->validDepths[i]); -#endif - for (j = 0; j < d->depthsForScreen[i]; j++) { - if (d->gcForDepth[i][j] != 0) { - XFreeGC(display, d->gcForDepth[i][j]); - } - } - } - - free((char *) d->depthsForScreen); - free((char *) d->validDepths); - free((char *) d->gcForDepth); - free((char *) d); -} - -int XDPSChainTextContext(DPSContext context, Bool enable) -{ - ContextInfo c = FindContextInfo(context); - - if (c == NULL) return dps_status_unregistered_context; - - /* Check if already in desired state */ - - if (c->enableText == enable) return dps_status_success; - - if (enable) { - if (c->text == NULL) { - c->text = DPSCreateTextContext(DPSDefaultTextBackstop, - DPSDefaultErrorProc); - if (c->text == NULL) return dps_status_no_extension; - } - DPSChainContext(context, c->text); - c->enableText = True; - return dps_status_success; - } - - /* disabling, currently enabled */ - - DPSUnchainContext(c->text); - c->enableText = False; - return dps_status_success; -} - -Bool XDPSExtensionPresent(Display *display) -{ - DisplayInfo d = LookupDisplayInfo(display); - - if (d->extensionPresent != ext_no_idea) { - return (d->extensionPresent == ext_yes); - } - - /* Check if the extension is present by trying to initialize it */ - - if (XDPSLInit(display, (int *) NULL, (char **) NULL) == -1) { - d->extensionPresent = ext_no; - } else d->extensionPresent = ext_yes; - - return (d->extensionPresent == ext_yes); -} - -int PSDefineAsUserObj(void) -{ - return DPSDefineAsUserObj(DPSGetCurrentContext()); -} - -void PSRedefineUserObj(int uo) -{ - DPSRedefineUserObj(DPSGetCurrentContext(), uo); -} - -void PSUndefineUserObj(int uo) -{ - DPSUndefineUserObj(DPSGetCurrentContext(), uo); -} - -int DPSDefineAsUserObj(DPSContext ctxt) -{ - int out = DPSNewUserObjectIndex(); - /* We want to keep 0 as an unassigned value */ - if (out == 0) out = DPSNewUserObjectIndex(); - - _DPSSDefineUserObject(ctxt, out); - return out; -} - -void DPSRedefineUserObj(DPSContext ctxt, int uo) -{ - _DPSSDefineUserObject(ctxt, uo); -} - -void DPSUndefineUserObj(DPSContext ctxt, int uo) -{ - _DPSSUndefineUserObject(ctxt, uo); -} - -int PSReserveUserObjIndices(int number) -{ - return DPSReserveUserObjIndices(DPSGetCurrentContext(), number); -} - -int DPSReserveUserObjIndices(DPSContext ctxt, int number) -{ - int out = DPSNewUserObjectIndex(); - - /* We want to keep 0 as an unassigned value */ - if (out == 0) out = DPSNewUserObjectIndex(); - - number--; - while (number-- > 0) (void) DPSNewUserObjectIndex(); - return out; -} - -void PSReturnUserObjIndices(int start, int number) -{ - DPSReturnUserObjIndices(DPSGetCurrentContext(), start, number); -} - -void DPSReturnUserObjIndices(DPSContext ctxt, int start, int number) -{ - /* Nothing left any more */ -} - -#ifdef NO_XLISTDEPTHS -/* This function copyright 1989 Massachusetts Institute of Technology */ - -/* - * XListDepths - return info from connection setup - */ -int *XListDepths ( - Display *dpy, - int scrnum, - int *countp) -{ - Screen *scr; - int count; - int *depths; - - if (scrnum < 0 || scrnum >= dpy->nscreens) return NULL; - - scr = &dpy->screens[scrnum]; - if ((count = scr->ndepths) > 0) { - register Depth *dp; - register int i; - - depths = (int *) malloc (count * sizeof(int)); - if (!depths) return NULL; - for (i = 0, dp = scr->depths; i < count; i++, dp++) - depths[i] = dp->depth; - } else { - /* a screen must have a depth */ - return NULL; - } - *countp = count; - return depths; -} -#endif /* NO_XLISTDEPTHS */ |