summaryrefslogtreecommitdiff
path: root/xc/include/DPS/dpsclient.h
diff options
context:
space:
mode:
Diffstat (limited to 'xc/include/DPS/dpsclient.h')
-rw-r--r--xc/include/DPS/dpsclient.h420
1 files changed, 420 insertions, 0 deletions
diff --git a/xc/include/DPS/dpsclient.h b/xc/include/DPS/dpsclient.h
new file mode 100644
index 000000000..f47a82372
--- /dev/null
+++ b/xc/include/DPS/dpsclient.h
@@ -0,0 +1,420 @@
+/*
+ * 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
+ */
+
+#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_DPSContext *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_DPSContext *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 ===*/
+
+#ifdef _NO_PROTO
+
+extern void DPSDefaultErrorProc();
+extern void DPSSetTextBackstop();
+extern DPSTextProc DPSGetCurrentTextBackstop();
+extern void DPSSetErrorBackstop();
+extern DPSErrorProc DPSGetCurrentErrorBackstop();
+extern DPSContext DPSGetCurrentContext();
+extern void DPSSetContext();
+extern void DPSWritePostScript();
+extern void DPSPrintf();
+extern void DPSWriteData();
+extern void DPSFlushContext();
+extern int DPSChainContext();
+extern void DPSUnchainContext();
+extern void DPSResetContext();
+extern void DPSWaitContext();
+extern void DPSInterruptContext();
+extern void DPSDestroyContext();
+extern void DPSDestroySpace();
+extern void DPSSetNumStringConversion();
+extern void DPSSetWrapSynchronization();
+extern void DPSSuppressBinaryConversion();
+extern void DPSSetAbbrevMode();
+extern void DPSFetchAbbrevList();
+extern char *DPSGetSysnameAbbrev();
+extern char *DPSGetOperatorAbbrev();
+extern DPSContextType DPSGetContextType();
+
+#else /* _NO_PROTO */
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+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();
+
+ /* 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();
+
+ /* Returns the errorProc passed most recently to DPSSetErrorBackstop, or NULL
+ if none */
+
+extern DPSContext DPSGetCurrentContext();
+
+ /* 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 DPSWaitContext(DPSContext ctxt);
+
+ /* Waits until the PostScript interpreter is ready for more input to
+ this context. This is useful for synchronizing an application
+ with the DPS server.
+
+ 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 */
+
+#if defined(__cplusplus) || defined(c_plusplus)
+}
+#endif
+
+#endif /* _NO_PROTO */
+
+#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 */