diff options
Diffstat (limited to 'nx-X11/include/DPS/dpsXclient.h')
-rw-r--r-- | nx-X11/include/DPS/dpsXclient.h | 423 |
1 files changed, 423 insertions, 0 deletions
diff --git a/nx-X11/include/DPS/dpsXclient.h b/nx-X11/include/DPS/dpsXclient.h new file mode 100644 index 000000000..afd06f0de --- /dev/null +++ b/nx-X11/include/DPS/dpsXclient.h @@ -0,0 +1,423 @@ +/* + * dpsXclient.h -- XDPS extension interface to the Display Postscript Library. + * + * (c) Copyright 1989-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 + */ + +#ifndef DPSXCLIENT_H +#define DPSXCLIENT_H + +#ifdef VMS +#include <decw$include/X.h> +#include <decw$include/Xlib.h> +#include <decw$include/Xutil.h> +#else /* VMS */ +#include <X11/X.h> +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#endif /* VMS */ +#include <DPS/XDPS.h> +#include <DPS/dpsclient.h> +#include <DPS/dpsNXargs.h> + +/* Codes 2000 thru 2099 reserved for XDPS extension error codes */ + +/* dps_err_invalidAccess was promoted to a general error code; maintain its + old value for compatibility */ + +#undef dps_err_invalidAccess +#define dps_err_invalidAccess 2000 +#define dps_err_encodingCheck 2001 +#define dps_err_closedDisplay 2002 +#define dps_err_deadContext 2003 +#define dps_err_warning 2004 +#define dps_err_fatal 2005 +#define dps_err_recursiveWait 2006 + + /* The above definitions specify additional error conditions: + + dps_err_invalidAccess: signaled when expecting output from a context + created by another client. Such contexts send their + output only to the original creator and attempting to + receive output from them would cause indefinite blocking. + + dps_err_encodingCheck: signaled when changing name encoding for a + context created by another client or a context created + in a space which was created by another client. Such + contexts can only accept string name encoding. This + error is also generated when an attempt is made to change + name or program encoding to other than acceptable values. + + dps_err_closedDisplay: when sending PostScript code to a context + that has had its 'display' closed. + + dps_err_deadContext: signaled when expecting output from a context + which has died in the server but still has its X resources + active (a zombie context). Attempting to receive output + from such a context would cause indefinite blocking. + + dps_err_warning: a recoverable error has been found by the Client + Library. The error proc should display the message + (text string passed through arg1) and then simply + return. + + dps_err_fatal: a non-recoverable error has been found by the Client + Library. The error proc should display the message + (text string passed through arg1), and then call + abort() or should otherwise exit the application. + The error proc should not return. + + dps_err_recursiveWait: a client has called a wrap that returns + a value from a status or output handler, and this handler + was invoked while waiting for the results of another + value-returning wrap. Such a recursive wait would + cause indefinite blocking. This error will usually + cause both wraps to return incorrect values and will + often trigger further errors. + + */ + +extern long int DPSLastUserObjectIndex; + +typedef enum {dps_event_pass_through, dps_event_internal_dispatch, + dps_event_query} DPSEventDelivery; + +/* Event delivery types for XDPSSetEventDelivery */ + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +extern DPSContext XDPSCreateContext(Display *dpy, + Drawable drawable, + GC gc, + int x, + int y, + unsigned int eventmask, + XStandardColormap *grayramp, + XStandardColormap *ccube, + int actual, + DPSTextProc textProc, + DPSErrorProc errorProc, + DPSSpace space); + + /* Checks to see if 'dpy' supports the DPS extension. If not, NULL is + returned. If so, a context associated with 'dpy', 'drawable' and + 'gc' is created. 'x' and 'y' are offsets from the drawable's origin + to the PostScript device's origin in X coordinates. 'eventmask' is + currently ignored. 'grayramp', 'ccube', and 'actual' collectively + define the colormap that will be associated with the new context. + 'textProc' is called to dispose of text sent by the context. + 'errorProc' is called to handle errors reported by the context. + 'space' determines the execution space of the new context. A null + space causes a new one to be created. */ + +extern DPSContext XDPSCreateSimpleContext(Display *dpy, + Drawable drawable, + GC gc, + int x, + int y, + DPSTextProc textProc, + DPSErrorProc errorProc, + DPSSpace space); + + /* Does the same thing as XDPSCreateContext (above) but uses the + standard colormap information for the new context. */ + +extern DPSContext DPSCreateTextContext(DPSTextProc textProc, + DPSErrorProc errorProc); + + /* Create a new DPSContext whose PostScript is converted to text and sent + to 'textProc' (rather than the interpreter). 'errorProc' can + be used by the implementation of 'textProc' to report any i/o + errors. */ + + +extern DPSContext XDPSCreateSecureContext(Display *dpy, + Drawable drawable, + GC gc, + int x, + int y, + unsigned int eventmask, + XStandardColormap *grayramp, + XStandardColormap *ccube, + int actual, + DPSTextProc textProc, + DPSErrorProc errorProc, + DPSSpace space); + + /* Identical to XDPSCreateContext, but creates a secure context. */ + +extern DPSContext DPSContextFromContextID(DPSContext ctxt, + ContextPSID cid, + DPSTextProc textProc, + DPSErrorProc errorProc); + + /* Returns a DPSContext that is bound to the PostScript context + created when the "fork" operator was executed by 'ctxt', resulting + in the integer value 'cid'. + + If a DPSContext has already been created for cid, that DPSContext + is returned. Otherwise, a new one is created, as follows: + + If 'textProc' or 'errorProc' are NULL, the new DPSContext will + inherit the respective procs from 'ctxt', otherwise the the new + context gets the 'textProc' and/or 'errorProc' passed in. The new + DPSContext inherits everything else from 'ctxt', except its + chaining properties, which are set to NULL. + + DPSContextFromContextID will return NULL if it is unable to create + the context. */ + +extern DPSContext XDPSFindContext(Display *dpy, ContextPSID cid); + + /* Find a known context based on its PostScript id, return its DPSContext. */ + + +extern void DPSDefaultTextBackstop(DPSContext ctxt, char *buf, + long unsigned int count); + + /* This is the text backstop proc automatically installed by + the client library. Since it is a DPSTextProc, you may + use it as your context textProc. Writes text to stdout + and flushes stdout. */ + +extern void DPSChangeEncoding(DPSContext ctxt, + DPSProgramEncoding newProgEncoding, + DPSNameEncoding newNameEncoding); + + /* Change one or more of the context's 2 encoding parameters. + If the formats and encodings for the system on which the client + library is built are different than the formats and encodings + specified by 'ctxt', DPSWritePostScript (as well as the + operations BinObjSeqWrite and WriteTypedObjectArray defined + above, but not WriteData) will convert the bytes of + code from the former to the latter before sending + them on to 'ctxt'. */ + +typedef void (*XDPSStatusProc)(DPSContext ctxt, int code); + +extern XDPSStatusProc XDPSRegisterStatusProc(DPSContext ctxt, + XDPSStatusProc proc); + + /* Register a procedure to be called when a XDPSLStatusEvent + is received by the client. The procedure will be called with two + parameters: the context it was registered with, and the + status code derived from the event. The proc may be + called at any time that the client processes events. Overwrites + any previously registered routine and returns it. See XDPS.h */ + +extern int XDPSGetContextStatus(DPSContext ctxt); + + /* Returns the status of 'ctxt' as defined in XDPS.h. */ + +extern long int DPSNewUserObjectIndex(void); + + /* Returns a new user object index. The Client Library is + the sole allocator of new user object indices. User object + indices are dynamic, and should not be used for computation + or stored in long term storage, such as a file. */ + +/* ============================= */ +/* The following items are provided for lower level access to the DPS + X library extension. +*/ + +extern DPSContext XDPSContextFromSharedID(Display *dpy, + ContextPSID cid, + DPSTextProc textProc, + DPSErrorProc errorProc); + + /* Create a context record for PostScript "cid" shared by another client. */ + +extern DPSSpace XDPSSpaceFromSharedID(Display *dpy, SpaceXID sxid); + + /* Create a space record for a "sxid" shared by another client. */ + +extern XID XDPSXIDFromContext(Display **Pdpy, DPSContext ctxt); + + /* Get the XID for the given context record. Return its 'dpy' */ + +extern XID XDPSXIDFromSpace(Display **Pdpy, DPSSpace spc); + + /* Get the XID for the given space record. Retunr its 'dpy' */ + +extern DPSContext XDPSContextFromXID (Display *dpy, XID xid); + + /* Get the context record for the given XID on 'dpy'*/ + +extern DPSSpace XDPSSpaceFromXID (Display *dpy, XID xid); + + /* Get the space record for the given XID on 'dpy'*/ + +extern void XDPSUnfreezeContext(DPSContext ctxt); + + /* Notify a context that is in "frozen" mode to continue + with execution. */ + +extern void XDPSSetStatusMask(DPSContext ctxt, + unsigned long enableMask, + unsigned long disableMask, + unsigned long nextMask); + + /* Set the status reporting mask for the client. The enableMask + specifies the events the client wants to receive, the + disableMask specifies the events the client no longer wants + to receive, and the nextMask specifies the events that + the client wishes to receive only the next instance of. + The mask values are specified in XDPS.h */ + +/* ============================= */ +/* New event dispatching procedures */ + +extern DPSEventDelivery XDPSSetEventDelivery(Display *dpy, + DPSEventDelivery newMode); + + /* Set or query the event delivery mode */ + +extern Bool XDPSIsStatusEvent(XEvent *event, DPSContext *ctxt, int *status); + + /* Check if an event is a DPS status event; return the context and + status if so. */ + +extern Bool XDPSIsOutputEvent(XEvent *event); + + /* Check if an event is a DPS output event. */ + +extern Bool XDPSIsReadyEvent(XEvent *event, DPSContext *ctxt, int *val); + + /* Check if an event is a DPS ready event; return the context and + data if so. */ + +extern Bool XDPSIsDPSEvent(XEvent *event); + + /* Check if an event is a DPS event. */ + +extern Bool XDPSDispatchEvent(XEvent *event); + + /* Check if an event is a DPS event; call the status or output + handler if so. */ + +extern void XDPSSyncGCClip(Display *dpy, GC gc); + + /* This procedure guarantees that changes made to the GC clip are + recognized by the DPS contexts associated with them. This is + particularly important whenever XClipRectangles or XSetRegion is + used. */ + +extern void XDPSReconcileRequests(DPSContext ctxt); + + /* This procedure guarantees that any X requests sent prior to + the call are processed before any DPS requests sent after the + call are processed, without doing a round-trip. */ + +extern Status XDPSNXSetClientArg(int arg, void *value); + + /* Set arguments that alter the behavior of the Client Library + when using DPS NX. Arguments are detailed in dpsNXargs.h. + It is assumed that val is of the correct type. Return value + is Success only if argument is set successfully, or if + the results are a no-op because DPS NX is not being used. */ + +extern Status XDPSNXSetAgentArg(Display *dpy, int arg, int value); + + /* Set arguments that alter the behavior of a DPS NX agent associated + with the X server specified by dpy. Arguments are detailed + in dpsNXargs.h. It is assumed that val is of the correct + type. Return value is Success only if argument is set + successfully, or if the results are a no-op because DPS NX + is not being used. */ + +/* L2 DPS/PROTO 9 */ + +extern void XDPSNotifyWhenReady(DPSContext ctxt, + int i1, int i2, int i3, int i4); + + /* Send a ready event with that data */ + +typedef void (*XDPSReadyProc)(DPSContext ctxt, int data[4]); + +extern XDPSReadyProc XDPSRegisterReadyProc(DPSContext ctxt, + XDPSReadyProc proc); + + /* Register a procedure to be called when a XDPSLReadyEvent + is received by the client. The procedure will be called with two + parameters: the context it was registered with, and the + Ready data derived from the event. The proc may be + called at any time that the client processes events. Overwrites + any previously registered routine and returns it. See XDPS.h */ + +extern int XDPSGetProtocolVersion(Display *dpy); + + /* Returns the protocol version for that display */ + +extern Status XDPSCreateStandardColormaps( + Display *dpy, + Drawable drawable, + Visual *visual, + int reds, int greens, int blues, int grays, + XStandardColormap *colorCube, XStandardColormap *grayRamp, + Bool retain); + + /* Create a color cube and gray ramp in a colormap, using ICCCM + properties if present and optionally setting them */ + +extern void XDPSGetDefaultColorMaps(Display *dpy, + Screen *screen, + Drawable drawable, + XStandardColormap *colorcube, + XStandardColormap *grayramp); + + /* Get the default color maps for the screen, such as they are. If screen + is NULL, use the drawable to find out which screen. Either colorcube or + grayramp may be NULL to indicate that you don't want that colormap. */ + +/* DPS NX 2.0 */ + +extern void XDPSFlushGC(Display *dpy, GC gc); + + /* Update the interpreter's copy of the GC, flushing all changes. + Whenever the GC associated with a context is changed + (either the values of the GC are changed, or the entire + GC is to be changed with setXgcdrawable or setgstate), + XDPSFlushGC should be called on the changed GC before + any PostScript language that depends on the change is + sent to the interpreter. */ + +#if defined(__cplusplus) || defined(c_plusplus) +} +#endif + +#endif /* DPSXCLIENT_H */ |