mirror of
https://github.com/Stichting-MINIX-Research-Foundation/xsrc.git
synced 2025-09-13 14:47:21 -04:00
393 lines
16 KiB
C
393 lines
16 KiB
C
/*
|
|
* dpsclient.h - Application interface to the Display PostScript Library.
|
|
*
|
|
* (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/include/DPS/dpsclient.h,v 1.4 2001/08/01 00:44:34 tsi Exp $ */
|
|
|
|
#ifndef DPSCLIENT_H
|
|
#define DPSCLIENT_H
|
|
|
|
#include <DPS/dpsfriends.h>
|
|
|
|
/*=== TYPES ===*/
|
|
|
|
typedef int DPSErrorCode;
|
|
|
|
/* Standard error codes (type DPSErrorCode)
|
|
* These are intended to be used with dpsexcept.h
|
|
* System-specific extensions can be made. Codes 1000 through 1099 are
|
|
* reserved for use by Adobe.
|
|
*/
|
|
|
|
#define dps_err_ps 1000
|
|
#define dps_err_nameTooLong 1001
|
|
#define dps_err_resultTagCheck 1002
|
|
#define dps_err_resultTypeCheck 1003
|
|
#define dps_err_invalidContext 1004
|
|
#define dps_err_invalidAccess 1005
|
|
|
|
/* The above definitions specify the error codes passed to a DPSErrorProc:
|
|
|
|
dps_err_ps identifies standard PostScript language interpreter
|
|
errors. The arg1 argument to the errorProc is the address of the
|
|
binary object sequence sent by the handleerror (or resynchandleerror)
|
|
operator to report the error. The sequence has 1 object, which is an
|
|
array of 4 objects. See the language extensions document for details
|
|
on the contents of this sequence. arg2 is the number of bytes in the
|
|
entire binary object sequence.
|
|
|
|
dps_err_nameTooLong flags user names that are too long. 128 chars
|
|
is the maximum length for PostScript language names. The name and its
|
|
length are passed as arg1 and arg2 to the error proc.
|
|
|
|
dps_err_resultTagCheck flags erroneous result tags, most likely
|
|
due to erroneous explicit use of the printobject operator. The
|
|
pointer to the binary object sequence and its length are passed
|
|
as arg1 and arg2 to the error proc. There is one object in the
|
|
sequence.
|
|
|
|
dps_err_resultTypeCheck flags incompatible result types. A pointer
|
|
to the offending binary object is passed as arg1; arg2 is unused.
|
|
|
|
dps_err_invalidContext flags an invalid DPSContext argument. An
|
|
attempt to send PostScript language code to a context that has
|
|
terminated is the most likely cause of this error. arg1 to the
|
|
DPSErrorProc is the context id (see the fork operator); arg2 is
|
|
unused.
|
|
|
|
dps_err_invalidAccess flags an attempt to access a context in
|
|
a way that it does not support. An example is waiting for return
|
|
values on a text context.
|
|
*/
|
|
|
|
typedef void (*DPSTextProc)(
|
|
struct _t_DPSContextRec *ctxt, char *buf,
|
|
long unsigned int count
|
|
);
|
|
|
|
/* Call-back procedure to handle text from the PostScript interpreter.
|
|
'buf' contains 'count' bytes of ASCII text. */
|
|
|
|
typedef void (*DPSErrorProc)(
|
|
struct _t_DPSContextRec *ctxt,
|
|
DPSErrorCode errorCode,
|
|
long unsigned int arg1, long unsigned int arg2
|
|
);
|
|
|
|
/* Call-back procedure to report errors from the PostScript interpreter.
|
|
The meaning of arg1 and arg2 depend on 'errorCode', as described above.
|
|
See DPSDefaultErrorProc, below.
|
|
*/
|
|
|
|
typedef struct {
|
|
int systemNameIndex;
|
|
char *operatorName;
|
|
char *abbrev;
|
|
} DPSAbbrevRec;
|
|
|
|
/* Abbreviation table for standard context abbreviations. See
|
|
DPSFetchAbbrevList, below.
|
|
*/
|
|
|
|
typedef enum {dps_context_execution, dps_context_text} DPSContextType;
|
|
|
|
/* See DPSGetContextType below */
|
|
|
|
/*=== PROCEDURES ===*/
|
|
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
extern void DPSversion(DPSContext ctxt, int bufsize, char buf[]);
|
|
|
|
extern void DPSDefaultErrorProc(DPSContext ctxt, DPSErrorCode errorCode,
|
|
long unsigned int arg1,
|
|
long unsigned int arg2);
|
|
|
|
/* A sample DPSErrorProc for handling errors from the PostScript interpreter.
|
|
The meaning of arg1 and arg2 depend on 'errorCode'. See DPSErrorCode,
|
|
above.
|
|
|
|
DPSDefaultErrorProc formulates a text message and passes it to the
|
|
text backstop proc (see DPSSetTextBackstop).
|
|
|
|
If errorCode == dps_err_ps AND the application had previously caused
|
|
resyncstart to be executed by ctxt, DPSDefaultErrorProc calls
|
|
RAISE(dps_err_ps, ctxt) after invoking the text backstop proc.
|
|
DPSDefaultErrorProc is the only procedure in the Display PostScript
|
|
library that calls RAISE, and it calls RAISE only in the case outlined
|
|
above.
|
|
|
|
When DPSDefaultErrorProc is used as a context's errorProc, the exception
|
|
to report dps_err_ps can be raised by any of the procedures in the Display
|
|
PostScript library, even ones invoked to deal with other contexts. Note
|
|
therefore that wraps might raise this exception. Applications that use
|
|
resyncstart must be prepared to handle exceptions.
|
|
|
|
See DPSResetContext for details on what to do when an exception to
|
|
report dps_err_ps is raised.
|
|
|
|
See dpsexcept.h for general information on RAISE and exception handling */
|
|
|
|
extern void DPSSetTextBackstop(DPSTextProc textProc);
|
|
|
|
/* Call this to establish textProc as the handler for text output from
|
|
DPSDefaultErrorProc or from contexts created by the 'fork' operator but
|
|
not made known to the dps client library. NULL will be passed as the ctxt
|
|
argument to textProc in the latter case. */
|
|
|
|
extern DPSTextProc DPSGetCurrentTextBackstop(void);
|
|
|
|
/* Returns the textProc passed most recently to DPSSetTextBackstop, or NULL
|
|
if none */
|
|
|
|
extern void DPSSetErrorBackstop(DPSErrorProc errorProc);
|
|
|
|
/* Call this to establish errorProc as the handler for PostScript interpreter
|
|
errors from contexts created by the 'fork' operator but not made
|
|
known to the dps client library. NULL will be passed as the ctxt
|
|
argument to errorProc. */
|
|
|
|
extern DPSErrorProc DPSGetCurrentErrorBackstop(void);
|
|
|
|
/* Returns the errorProc passed most recently to DPSSetErrorBackstop, or NULL
|
|
if none */
|
|
|
|
extern DPSContext DPSGetCurrentContext(void);
|
|
|
|
/* Get the default context. Used in conjunction with psops.h and with
|
|
wraps that are defined without an explicit DPSContext argument.
|
|
Initially NULL. */
|
|
|
|
extern void DPSSetContext(DPSContext ctxt);
|
|
|
|
/* Set the default context. Used in conjunction with psops.h and with
|
|
wraps that are defined without an explicit DPSContext argument. */
|
|
|
|
extern void DPSWritePostScript(DPSContext ctxt, char *buf,
|
|
unsigned int count);
|
|
|
|
/* Send as input to 'ctxt' 'count' bytes of PostScript language contained
|
|
in 'buf'. The code may be in either of the 3 encodings for PostScript
|
|
language programs: plain text, encoded tokens, or binary object sequence.
|
|
If the form is encoded tokens or binary object sequence, an entire
|
|
one of these must be sent (perhaps in a series of calls on
|
|
DPSWritePostScript) before PostScript language in a different encoding
|
|
can be sent.
|
|
|
|
DPSWritePostScript may transform the PostScript language to a different
|
|
encoding, depending on the characteristics established for 'ctxt' when
|
|
it was created. For example, a context created to store its PostScript
|
|
in an ASCII file would convert binary object sequences to ASCII.
|
|
|
|
If 'ctxt' represents an invalid context, for example because
|
|
the context has terminated in the server, the dps_err_invalidContext
|
|
error will be reported via ctxt's error proc.
|
|
|
|
If 'ctxt' is incapable of accepting more PostScript language, for example
|
|
because it is backlogged with code that was sent earlier to be executed,
|
|
this will block until transmission of 'count' bytes can be completed. */
|
|
|
|
extern void DPSPrintf(DPSContext ctxt, char *fmt, ...);
|
|
|
|
/* Write string 'fmt' to ctxt with the optional arguments converted,
|
|
formatted and logically inserted into the string in a manner
|
|
identical to the C library routine printf.
|
|
|
|
If 'ctxt' represents an invalid context, for example because
|
|
the context has terminated in the server, the dps_err_invalidContext
|
|
error will be reported via ctxt's error proc.
|
|
|
|
If 'ctxt' is incapable of accepting more PostScript language, for example
|
|
because it is backlogged with code that was sent earlier to be executed,
|
|
this will block until transmission of the string can be completed. */
|
|
|
|
extern void DPSWriteData(DPSContext ctxt, char *buf, unsigned int count);
|
|
|
|
/* Write 'count' bytes of data from 'buf' to 'ctxt'. This will not
|
|
change the data.
|
|
|
|
If 'ctxt' represents an invalid context, for example because
|
|
the context has terminated in the server, the dps_err_invalidContext
|
|
error will be reported via ctxt's error proc.
|
|
|
|
If 'ctxt' is incapable of accepting more PostScript language, for example
|
|
because it is backlogged with code that was sent earlier to be executed,
|
|
this will block until transmission of 'count' bytes can be completed. */
|
|
|
|
extern void DPSFlushContext(DPSContext ctxt);
|
|
|
|
/* Force any buffered data to be sent to ctxt.
|
|
|
|
If 'ctxt' represents an invalid context, for example because
|
|
the context has terminated in the server, the dps_err_invalidContext
|
|
error will be reported via ctxt's error proc.
|
|
|
|
If 'ctxt' is incapable of accepting more PostScript language, for example
|
|
because it is backlogged with code that was sent earlier to be executed,
|
|
this will block until transmission of all buffered bytes can be completed.
|
|
*/
|
|
|
|
extern int DPSChainContext(DPSContext parent, DPSContext child);
|
|
|
|
/* This links child and all of child's children onto parent's 'chainChild'
|
|
list. The 'chainChild' list threads those contexts that automatically
|
|
receive copies of any PostScript code sent to parent. A context may
|
|
appear on only one such list.
|
|
|
|
Normally, DPSChainContext returns 0. It returns -1 if child already
|
|
appears on some other context's 'chainChild' list. */
|
|
|
|
extern void DPSUnchainContext(DPSContext ctxt);
|
|
|
|
/* This unlinks ctxt from the chain that it is on, if any. It leaves
|
|
ctxt->chainParent == ctxt->chainChild == NULL
|
|
*/
|
|
|
|
extern void DPSResetContext(DPSContext ctxt);
|
|
|
|
/* This should be called by the application in its HANDLER clauses
|
|
when Exception.Code == dps_err_ps. See the discussion above about
|
|
DPSDefaultErrorProc. Also see the discussion of error handling in
|
|
the client library documentation.
|
|
|
|
DPSResetContext closes the input stream to the server for the context
|
|
and discards any pending bytes on the output stream from the server for
|
|
the context. It then waits for this output stream to close, then reopens
|
|
both streams. DPSResetContext is designed to work with resyncstart to
|
|
leave the context ready to read and execute more input after handling
|
|
a PostScript error.
|
|
|
|
If 'ctxt' represents an invalid context, for example because
|
|
the context has terminated in the server, the dps_err_invalidContext
|
|
error will be reported via ctxt's error proc. */
|
|
|
|
extern void DPSInterruptContext(DPSContext ctxt);
|
|
|
|
/* Sends a request to the server to interrupt execution of the context.
|
|
This causes a PostScript language 'interrupt' error in the context.
|
|
|
|
DPSInterruptContext returns immediately after sending the request.
|
|
|
|
If 'ctxt' represents an invalid context, for example because
|
|
the context has terminated in the server, the dps_err_invalidContext
|
|
error will be reported via ctxt's error proc. */
|
|
|
|
extern void DPSDestroyContext(DPSContext ctxt);
|
|
|
|
/* This calls DPSUnchainContext, then (for an interpreter context) sends a
|
|
request to the interpreter to terminate ctxt, then frees the storage
|
|
referenced by ctxt. The termination request is ignored by the
|
|
server if the context is invalid, for example if it has already
|
|
terminated. */
|
|
|
|
extern void DPSDestroySpace(DPSSpace spc);
|
|
|
|
/* Calls DPSDestroyContext for each of the contexts in the space, then
|
|
sends a request to the server to terminate the space, then frees the
|
|
storage referenced by spc. */
|
|
|
|
extern void DPSSetNumStringConversion(DPSContext ctxt, int flag);
|
|
|
|
/* Sets the numstring conversion flag, which tells the client library
|
|
to convert numstrings to simple arrays */
|
|
|
|
extern void DPSSetWrapSynchronization(DPSContext ctxt, int flag);
|
|
|
|
/* Sets the wrap synchronization flag, which makes all wraps synchronize
|
|
with the server */
|
|
|
|
extern void DPSSuppressBinaryConversion(DPSContext ctxt, int flag);
|
|
|
|
/* Sets the no binary convert flag, which makes the client library not
|
|
convert binary object sequences and binary tokens into ASCII */
|
|
|
|
extern void DPSSetAbbrevMode(DPSContext ctxt, int flag);
|
|
|
|
/* Sets the abbrev mode flag, which controls whether the client library
|
|
uses abbreviated operator names when converting from binary to ascii */
|
|
|
|
extern void DPSFetchAbbrevList(DPSAbbrevRec **list, int *count);
|
|
|
|
/* Returns the list of abbreviations used for binary to ascii conversion.
|
|
The returned list is sorted both by systemNameIndex and by operatorName.
|
|
*/
|
|
|
|
extern char *DPSGetSysnameAbbrev(int n);
|
|
|
|
/* Returns the abbreviation for the operator with system name n, or
|
|
NULL if there is no such abbreviation */
|
|
|
|
extern char *DPSGetOperatorAbbrev(char *op);
|
|
|
|
/* Returns the abbreviation for the operator, or NULL if there is no
|
|
such abbreviation */
|
|
|
|
extern DPSContextType DPSGetContextType(DPSContext ctxt);
|
|
|
|
/* Returns whether a context is a text context or an execution context */
|
|
|
|
/* generated functions used in dpstk */
|
|
extern void DPSrectfill(DPSContext ctxt, double x, double y, double w, double h);
|
|
extern void DPSsetcmykcolor(DPSContext ctxt, double c, double m, double y, double k);
|
|
extern void DPSsetgray(DPSContext ctxt, double gray);
|
|
extern void DPSsethsbcolor(DPSContext ctxt, double h, double s, double b);
|
|
extern void DPSsetrgbcolor(DPSContext ctxt, double r, double g, double b);
|
|
extern void DPSsetXoffset(DPSContext ctxt, int x, int y);
|
|
extern void DPSinitviewclip(DPSContext ctxt);
|
|
extern void DPSinitgraphics(DPSContext ctxt);
|
|
extern void DPSscale(DPSContext ctxt, double x, double y);
|
|
extern void DPSinitclip(DPSContext ctxt);
|
|
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
}
|
|
#endif
|
|
|
|
#define DPSSetTextProc(ctxt, tp) ((ctxt)->textProc = (tp))
|
|
|
|
/* Change ctxt's textProc. */
|
|
|
|
#define DPSSetErrorProc(ctxt, ep) ((ctxt)->errorProc = (ep))
|
|
|
|
/* Change ctxt's errorProc. */
|
|
|
|
#define DPSSpaceFromContext(ctxt) ((ctxt)->space)
|
|
|
|
/* Extract space handle from context. */
|
|
|
|
#endif /* DPSCLIENT_H */
|