diff options
Diffstat (limited to 'nx-X11/lib/dps/dpsXpriv.c')
-rw-r--r-- | nx-X11/lib/dps/dpsXpriv.c | 534 |
1 files changed, 0 insertions, 534 deletions
diff --git a/nx-X11/lib/dps/dpsXpriv.c b/nx-X11/lib/dps/dpsXpriv.c deleted file mode 100644 index c0f12545c..000000000 --- a/nx-X11/lib/dps/dpsXpriv.c +++ /dev/null @@ -1,534 +0,0 @@ -/* - * dpsXpriv.c - * - * (c) Copyright 1988-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/dps/dpsXpriv.c,v 1.7 2002/03/05 21:50:14 herrb Exp $ */ - -#include <stdlib.h> -#include <stdio.h> -#include <errno.h> -#include <string.h> -#include <unistd.h> -#include <sys/time.h> - -#ifdef GC -#undef GC -#endif /* GC */ - -#ifdef VMS -/* Xlib does not like UNIX defined to any value under VMS. */ -#undef UNIX -#include <decw$include/X.h> -#include <decw$include/Xproto.h> -#include <decw$include/Xlib.h> -#include <decw$include/Xutil.h> -#else /* VMS */ -#include <X11/X.h> -#include <X11/Xproto.h> -#include <X11/Xlib.h> -#include <X11/Xutil.h> -#endif /* VMS */ -#include "DPS/XDPSlib.h" -#include "DPS/XDPS.h" -#include "dpsprivate.h" -#include "DPS/dpsconfig.h" -#include "publictypes.h" -#include "dpsXpriv.h" -#include "DPS/dpsXclient.h" -#include "DPS/dpsexcept.h" -#include "dpsassert.h" - -#ifdef ISC -#include <sys/bsdtypes.h> -#endif - -#ifdef __QNX__ -#include <sys/select.h> -#endif - -#if defined(hpux) || defined(AIXV3) -#define SELECT_TYPE int * -#else -#define SELECT_TYPE fd_set * -#endif - -typedef struct _RegstDPY - { - Display *dpy; - int firstEvent; - struct _RegstDPY *next; - unsigned char ctxtTokenType; /* establish for each context. */ - unsigned char prefTokenType; /* ...of the server. */ - } RegstDPYRec, *PRegstDPY; - - -/* XDPSContextTimedOut is set to true by the BlockForEvent routine - when expected return values are not received within a certain - amount of time. In this case, BlockForEvent will return and the - higher callers may take appropriate action to avoid deadlocks. */ -int XDPSContextTimedOut = false; /* Unimplemented */ -DPSProcs XDPSconvProcs = NIL; -DPSProcs XDPSrawProcs = NIL; - -/* XDPSQuitBlocking is set to false by the BlockForEvent routine and - becomes true if either a zombie status event or an output event - is received for the context waiting for return values. */ -int XDPSQuitBlocking = false; - - -static DPSClientPrintProc clientPrintProc = NIL; -static PRegstDPY firstDPY = NIL; -/* operands for "setobjectformat" if we must agree with server. */ -static char *format_operands[] = {"1", "2", "3", "4"}; - - - -static PRegstDPY IsRegistered ( - register Display *dpy) -{ - register PRegstDPY rdpy; - - for (rdpy = firstDPY; rdpy != NIL; rdpy = rdpy->next) - if (rdpy->dpy == dpy) - return (rdpy); - return (NIL); -} - - -void XDPSPrivZapDpy( - register Display *dpy) -{ - register PRegstDPY rdpy, prev = NIL; - - for (rdpy = firstDPY; rdpy != NIL; prev = rdpy,rdpy = rdpy->next) - if (rdpy->dpy == dpy) - { - if (prev == NIL) - firstDPY = rdpy->next; - else - prev->next = rdpy->next; - break; - } - free(rdpy); -} - - -/* ARGSUSED */ -static int UsuallyFalse ( - Display *dpy, - XEvent *event, - char *arg) -{ - return((event->type & 0x7F) == X_Error); -} - -void XDPSForceEvents ( - Display *dpy) -{ - XEvent event; - - while (XCheckIfEvent (dpy, &event, UsuallyFalse, (char *) NULL)) { - int (*proc)(Display *, XErrorEvent *) = XSetErrorHandler(NULL); - (void) XSetErrorHandler(proc); - if (proc != 0 && event.type < 256) - (void)(*proc)(dpy, &event.xerror); - } -} - - -static void OutputEventHandler ( - register XDPSLOutputEvent *event) -{ - PRegstDPY rdpy; - register DPSContext ctxt; - - if ((rdpy = IsRegistered (event->display)) == NIL || - rdpy->firstEvent != event->type) - return; - - ctxt = XDPSContextFromXID (event->display, event->cxid); - if (ctxt != NIL) - { - if (ctxt->resultTable != NIL) - XDPSQuitBlocking = true; - (*clientPrintProc) (ctxt, event->data, event->length); - } -} - - -static int BlockForEvent ( - Display *dpy) -{ - fd_set readfds; - - XDPSQuitBlocking = false; - /* XDPSQuitBlocking becomes true if a zombie status event or - any output event is received by the status event handler for - the currently-awaiting-results context. */ - while (1) { - FD_SET(ConnectionNumber(dpy), &readfds); - if (select (ConnectionNumber(dpy)+1, (SELECT_TYPE) &readfds, - (SELECT_TYPE) NULL, (SELECT_TYPE) NULL, - (struct timeval *) NULL) < 0) { - if (errno == EINTR) { - /* Ignore interrupt signals */ - errno = 0; - continue; - } - return (-1); /* Broken connection (errno == EBADF) */ - } else { - XDPSForceEvents (dpy); - if (XDPSQuitBlocking) break; - XNoOp(dpy); - /* The noop is necessary to force proper behavior when the - connection goes away - listen carefully! When the dpy - connection is closed, the above select returns indicating - activity on the connection. We call XDPSForceEvents, which - calls XCheckIfEvent, which ultimately may call XFlush - (if there are no events queued). The XNoOp call puts - a message in the outgoing queue, so that XFlush is forced - to write on the connection. When it tries to write, the - error condition will be noted and XIOError will be called, - usually causing the application to terminate. Note that - the error won't happen until the second time thru this - loop, but that's ok. */ - } - } - return (0); -} - - -void XDPSSetContextEncoding ( - DPSContext ctxt, - DPSProgramEncoding progEncoding, - DPSNameEncoding nameEncoding) -{ - /* This routine should not be called if ctxt is a text context */ - - if ((nameEncoding != dps_indexed && nameEncoding != dps_strings) || - (progEncoding != dps_ascii && progEncoding != dps_encodedTokens && - progEncoding != dps_binObjSeq)) - { - if (ctxt->errorProc != NIL) - (*ctxt->errorProc) (ctxt, dps_err_encodingCheck, - nameEncoding, progEncoding); - return; - } - else if (progEncoding == dps_ascii || progEncoding == dps_encodedTokens || - nameEncoding == dps_strings) - ctxt->procs = XDPSconvProcs; - else - ctxt->procs = XDPSrawProcs; - - ctxt->nameEncoding = nameEncoding; - ctxt->programEncoding = progEncoding; -} - - -/* ARGSUSED */ -void DPSDefaultTextBackstop (ctxt, buf, count) - DPSContext ctxt; - char *buf; - long unsigned int count; -{ - if (buf == NULL || count == 0) - { - (void) fflush(stdout); - return; - } - (void) fwrite (buf, sizeof (char), count, stdout); - (void) fflush (stdout); -} - -/* ARGSUSED */ -void DPSInitClient( - DPSTextProc textProc, - void (*releaseProc) (char *, char *)) -{ - DPSAssert (releaseProc != NIL); - XDPSSetProcs (); - DPSSetTextBackstop (DPSDefaultTextBackstop); - DPSSetErrorBackstop (DPSDefaultErrorProc); -} - - -DPSNumFormat XDPSNumFormat ( - Display *dpy) -{ - PRegstDPY rdpy; - - if ((rdpy = IsRegistered (dpy)) == NIL) - return ((DPSNumFormat) -1); - else - return ((rdpy->ctxtTokenType < DPS_HI_NATIVE) ? dps_ieee : dps_native); -} - -XDPSPrivContext XDPSCreatePrivContextRec ( - Display *dpy, - Drawable drawable, - GC gc, - int x, - int y, - unsigned int eventmask, - XStandardColormap *grayramp, - XStandardColormap *ccube, - int actual, - int secure) -{ - int event_base; - int token_type; /* From server. */ - char *num_format_name; /* From server. */ - PRegstDPY rdpy; - XDPSPrivContext wh; - - if (DPSInitialize() != 0) return(NULL); - if ((rdpy = IsRegistered (dpy)) == NIL) - { - /* DPS extension on this dpy? */ - event_base = XDPSLInit (dpy, &token_type, &num_format_name); - if (event_base >= 0 && - (rdpy = (PRegstDPY) calloc (sizeof (RegstDPYRec), 1))) - { - XDPSLSetTextEventHandler (dpy, (XDPSLEventHandler) OutputEventHandler); - XDPSLSetStatusEventHandler (dpy, (XDPSLEventHandler) XDPSStatusEventHandler); - XDPSLSetReadyEventHandler (dpy, (XDPSLEventHandler) XDPSReadyEventHandler); - XDPSLInitDisplayFlags(dpy); - rdpy->dpy = dpy; - rdpy->firstEvent = event_base; - rdpy->next = firstDPY; - - rdpy->prefTokenType = (unsigned char) token_type; - - if (strcmp (num_format_name, DPS_FORMATNAME) == 0) - rdpy->ctxtTokenType = DPS_DEF_TOKENTYPE; - else - /* Everybody must talk ieee! */ -#if SWAPBITS - rdpy->ctxtTokenType = DPS_LO_IEEE; -#else /* SWAPBITS */ - rdpy->ctxtTokenType = DPS_HI_IEEE; -#endif /* SWAPBITS */ - - firstDPY = rdpy; - } - else - return (NULL); - } - - if ((wh = (XDPSPrivContext) calloc (sizeof (XDPSPrivContextRec), 1)) != 0) - { - wh->dpy = dpy; - wh->drawable = drawable; - wh->gc = gc; - wh->x = x; - wh->y = y; - wh->eventmask = eventmask; - wh->grayramp = grayramp; - wh->ccube = ccube; - wh->actual = actual; - wh->newObjFormat = format_operands[rdpy->ctxtTokenType - DPS_HI_IEEE]; - wh->secure = secure; - return (wh); - } - else - return (NULL); -} - - -DPSNumFormat DPSCreatePrivContext ( - XDPSPrivContext wh, - DPSContext ctxt, - ContextPSID *cidP, - SpaceXID *sxidP, - boolean newSpace, - DPSClientPrintProc printProc) -{ - PRegstDPY rdpy; - - if (clientPrintProc == NIL) - clientPrintProc = printProc; - - if ((rdpy = IsRegistered (wh->dpy)) == NIL) - return ((DPSNumFormat) -1); - - if (newSpace || sxidP == NIL) - wh->cxid = XDPSLCreateContextAndSpace (wh->dpy, wh->drawable, wh->gc, - wh->x, wh->y, wh->eventmask, - wh->grayramp, wh->ccube, - wh->actual, cidP, sxidP, - wh->secure); /* L2-DPS/PROTO 9 */ - else - wh->cxid = XDPSLCreateContext (wh->dpy, *sxidP, wh->drawable, wh->gc, - wh->x, wh->y, wh->eventmask, - wh->grayramp, wh->ccube, wh->actual, cidP, - wh->secure); /* L2-DPS/PROTO 9 */ - if (wh->cxid == None) return((DPSNumFormat) -1); - wh->ctxt = ctxt; - if (wh->newObjFormat != NIL) - { - XDPSLGiveInput (wh->dpy, wh->cxid, wh->newObjFormat, 1); - XDPSLGiveInput (wh->dpy, wh->cxid, " setobjectformat\n", 17); - } - - if (rdpy->ctxtTokenType != DPS_DEF_TOKENTYPE) - ctxt->procs = XDPSconvProcs; - return ((rdpy->ctxtTokenType < DPS_HI_NATIVE) ? dps_ieee : dps_native); -} - - -void DPSIncludePrivContext ( - XDPSPrivContext wh, - DPSContext ctxt, - ContextPSID cid, - SpaceXID sxid, - DPSClientPrintProc printProc) -{ - XDPSPrivContext newWh; - SpaceXID space; - - if (clientPrintProc == NIL) - clientPrintProc = printProc; - - newWh = (XDPSPrivContext) calloc (sizeof (XDPSPrivContextRec), 1); - if (!newWh) DPSOutOfMemory(); - *newWh = *wh; - if (IsRegistered (wh->dpy) != NIL) - { - newWh->cxid = XDPSLCreateContextFromID (wh->dpy, cid, &space); - DPSAssertWarn (space == sxid, ctxt, "attempting context from context ID from different space"); - newWh->ctxt = ctxt; - /* Did we have to change object format for parent context? */ - /* Note: the child context must inherit the object format of - its parent. When this happens in the server there - will be no need for the following code segment. */ - if (wh->newObjFormat != NIL) /* Yes, do it for the child too. */ - { - XDPSLGiveInput (wh->dpy, newWh->cxid, wh->newObjFormat, 1); - XDPSLGiveInput (wh->dpy, newWh->cxid, " setobjectformat\n", 17); - } - } - else - { - newWh->cxid = 0; /* Must not refer to a good context. */ - newWh->ctxt = NIL; - } - - (void) DPSSetWh (ctxt, (char *) newWh); -} - -/* ARGSUSED */ -void DPSSendPostScript ( - register XDPSPrivContext wh, - DPSClientPrintProc printProc, - ContextPSID cid, - char *buffer, - long int count, - boolean (*returnControl)(void)) -{ - boolean blocking = buffer == NIL; - - if (IsRegistered (wh->dpy) == NIL) - (*printProc) (wh->ctxt, NIL, 0); - else { - if (count > 0) - XDPSLGiveInput (wh->dpy, wh->cxid, buffer, count); - - if (blocking) { - XDPSLFlush (wh->dpy); - if (BlockForEvent (wh->dpy) < 0 && wh->ctxt->errorProc != NIL) { - (*(wh->ctxt->errorProc)) (wh->ctxt, dps_err_closedDisplay, - ConnectionNumber(wh->dpy), - 0); - } - } - DPSCheckRaiseError(wh->ctxt); - } -} - - -/* ARGSUSED */ -void DPSSendInterrupt ( - XDPSPrivContext wh, - ContextPSID cid, - DPSClientPrintProc printProc) -{ - XDPSLNotifyContext (wh->dpy, wh->cxid, PSINTERRUPT); -} - - -/* ARGSUSED */ -void DPSSendEOF ( - XDPSPrivContext wh, - ContextPSID cid, - DPSClientPrintProc printProc) -{ - XDPSLReset (wh->dpy, wh->cxid); -} - - -/* ARGSUSED */ -void DPSSendTerminate ( - XDPSPrivContext wh, - ContextPSID cid, - DPSClientPrintProc printProc) -{ - XDPSLNotifyContext (wh->dpy, wh->cxid, PSKILL); -} - - -void XDPSSendUnfreeze ( - Display *dpy, - ContextXID cxid) -{ - XDPSLNotifyContext (dpy, cxid, PSUNFREEZE); -} - - -/* ARGSUSED */ -void DPSSendDestroySpace( - XDPSPrivContext wh, - SpaceXID sxid, - DPSClientPrintProc printProc) -{ - XDPSLDestroySpace (wh->dpy, sxid); -} - - -void DPSOutOfMemory (void) -{ - DPSFatalProc(NULL, "DPS Client Library Error: Out of memory.\n"); - exit (1); -} |