diff options
Diffstat (limited to 'nx-X11/include/DPS/dpsfriends.h')
-rw-r--r-- | nx-X11/include/DPS/dpsfriends.h | 481 |
1 files changed, 481 insertions, 0 deletions
diff --git a/nx-X11/include/DPS/dpsfriends.h b/nx-X11/include/DPS/dpsfriends.h new file mode 100644 index 000000000..920ffc134 --- /dev/null +++ b/nx-X11/include/DPS/dpsfriends.h @@ -0,0 +1,481 @@ +/* + * dpsfriends.h -- Low-level 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/dpsfriends.h,v 1.4 2001/08/01 00:44:34 tsi Exp $ */ + +#ifndef DPSFRIENDS_H +#define DPSFRIENDS_H + +#include <DPS/dpsconfig.h> + +/*=== CONSTANTS ===*/ + +/* TokenType values, used to specify the format of numeric values + for the system on which the client library is built. See DPS language + reference manual */ + +#define DPS_HI_IEEE 128 +#define DPS_LO_IEEE 129 +#define DPS_HI_NATIVE 130 +#define DPS_LO_NATIVE 131 + +#ifndef DPS_DEF_TOKENTYPE + +#if IEEEFLOAT + +#if SWAPBITS +#define DPS_DEF_TOKENTYPE DPS_LO_IEEE +#else /* SWAPBITS */ +#define DPS_DEF_TOKENTYPE DPS_HI_IEEE +#endif /* SWAPBITS */ + +#else /* IEEEFLOAT */ + +#if SWAPBITS +#define DPS_DEF_TOKENTYPE DPS_LO_NATIVE +#else /* SWAPBITS */ +#define DPS_DEF_TOKENTYPE DPS_HI_NATIVE +#endif /* SWAPBITS */ + +#endif /* IEEEFLOAT */ + +#endif /* DPS_DEF_TOKENTYPE */ + + /* DPS_DEF_TOKENTYPE is the specification code for the form of binary + object sequences generated by PSWrap. The C code generated by pswrap + references this name. DPS_DEF_TOKENTYPE is system-dependent. */ + + +/* --- binary object sequence support --- */ + +/* Object attributes & types: Values for attributedTypes */ + +#define DPS_LITERAL 0 +#define DPS_EXEC 0x080 + + /* Attribute masks */ + + +#define DPS_NULL 0 +#define DPS_INT 1 +#define DPS_REAL 2 +#define DPS_NAME 3 +#define DPS_BOOL 4 +#define DPS_STRING 5 +#define DPS_IMMEDIATE 6 +#define DPS_ARRAY 9 +#define DPS_MARK 10 + + /* Type values */ + + +/* Object sequence constants */ + +#define DPS_HEADER_SIZE 4 +#define DPS_EXT_HEADER_SIZE 8 + + +/*=== TYPES ===*/ + +typedef enum { + dps_ascii, dps_binObjSeq, dps_encodedTokens + } DPSProgramEncoding; + /* Defines the 3 possible encodings of PostScript language programs. */ + +typedef enum { + dps_indexed, dps_strings + } DPSNameEncoding; + /* Defines the 2 possible encodings for user names in the + dps_binObjSeq and dps_encodedTokens forms of PostScript language + programs. */ + +typedef enum { + dps_tBoolean, + dps_tChar, dps_tUChar, + dps_tFloat, dps_tDouble, + dps_tShort, dps_tUShort, + dps_tInt, dps_tUInt, + dps_tLong, dps_tULong } DPSDefinedType; + +struct _t_DPSContextRec; + + /* Enumerates the C data types that can be used to describe wrap + parameters. */ + +typedef void (*DPSContextProc)( + struct _t_DPSContextRec *ctxt +); + +typedef void (*DPSContextBufProc)( + struct _t_DPSContextRec *ctxt, char *buf, + unsigned int count +); + +typedef void (*DPSContextTypedArrayProc)( + struct _t_DPSContextRec *ctxt, + DPSDefinedType type, + char *array, unsigned int length +); + +typedef void (*DPSWriteNumStringProc)( + struct _t_DPSContextRec *ctxt, + DPSDefinedType type, + const void *array, + unsigned int count, + int scale +); + +typedef struct { + DPSContextBufProc BinObjSeqWrite; + /* Begin a new binary object sequence. 'buf' contains 'count' + bytes of a binary object sequence. 'buf' must point to the + beginning of a sequence, which includes at least the header + and the entire top-level sequence of objects. It may also + include subsidiary array elements and/or string chars. + Writes PostScript language as specified by the + encoding variables of ctxt, doing appropriate conversions as + needed. 'buf' and its contents must remain valid until the + entire binary object sequence has been sent. */ + + DPSContextTypedArrayProc WriteTypedObjectArray; + /* 'array' points at an array of 'length' elements of 'type'. + 'array' contains the element values for the body of a subsidiary + array in a binary object sequence. Writes PostScript language + as specified by the 4 format and encoding variables of ctxt, doing + appropriate conversions as needed. 'array' and its contents must + remain valid until the entire binary object sequence has been sent */ + + DPSContextBufProc WriteStringChars; + /* Used both to implement DPSWritePostScript and to send the bodies of + strings in binary object sequences. 'buf' contains 'count' bytes. + For the latter, 'buf' and its contents must remain valid until the + entire binary object sequence has been sent.*/ + + DPSContextBufProc WriteData; + /* See DPSWriteData in dpsclient.h */ + + DPSContextBufProc WritePostScript; + /* See DPSWritePostScript in dpsclient.h */ + + DPSContextProc FlushContext; + /* See DPSFlushContext in dpsclient.h */ + + DPSContextProc ResetContext; + /* See DPSResetContext in dpsclient.h */ + + DPSContextProc UpdateNameMap; + /* This routine is called if the context's space's name map is + out-of-sync with that of the client library's name map. It may + send a series of "defineusername" commands to the service. */ + + DPSContextProc AwaitReturnValues; + /* Called to receive return values. + ctxt->resultTableLength and ctxt->resultTable must have been + set previously. Returns when all expected results are received. + + This is normally called from wraps. It is unusual for an application + program to call this directly. + + See the definitions of DPSResultsRec and DPSContextRec for more info. + */ + + DPSContextProc Interrupt; + /* See DPSInterrupt in dpsclient.h */ + + DPSContextProc DestroyContext; + /* See DPSDestroyContext in dpsclient.h */ + + DPSContextProc WaitContext; + /* See DPSWaitContext in dpsclient.h */ + + DPSWriteNumStringProc WriteNumString; + /* Write a number string, possibly marking it to be converted into + an array depending upon the context flags. */ + +} DPSProcsRec, *DPSProcs; + + /* The DPSProcsRec may be extended to include system-specific items */ + +struct _t_DPSSpaceRec; + +typedef void (*DPSSpaceProc)( + struct _t_DPSSpaceRec *space +); + +typedef struct { + DPSSpaceProc DestroySpace; + /* See DPSDestroySpace in dpsclient.h */ + +} DPSSpaceProcsRec, *DPSSpaceProcs; + + /* The DPSSpaceProcsRec may be extended to include system-specific items */ + +typedef struct { + DPSDefinedType type; + int count; + char *value; +} DPSResultsRec, *DPSResults; + + /* A DPSResultsRec defines one of the formal result args of a wrapped + procedure. The 'type' field specifies the formal type of the + return value. The 'count' field specifies the number of values + expected (this supports array formals). The 'value' field points + to the location of the first value; the storage beginning there + must have room for count values of type. If 'count' == -1, then + 'value' points to a scalar (single) result arg. */ + +typedef struct _t_DPSSpaceRec { + DPSSpaceProcs procs; +} DPSSpaceRec, *DPSSpace; + + /* A DPSSpaceRec provides a representation of a space. + + The DPSSpaceRec may be extended to include system-specific items. + + BEWARE an implementation of the DPS client library is also likely to + extend the DPSSpaceRec to include implementation-dependent information + in additional fields. */ + +typedef struct _t_DPSContextExtensionRec { + int extensionId; + struct _t_DPSContextExtensionRec *next; +} DPSContextExtensionRec; + +struct _t_DPSContextRec; + +typedef struct _t_DPSContextRec { + char *priv; + DPSSpace space; + DPSProgramEncoding programEncoding; + DPSNameEncoding nameEncoding; + DPSProcs procs; + void (*textProc)(struct _t_DPSContextRec *, char *, long unsigned); + void (*errorProc)(struct _t_DPSContextRec *, int, long unsigned, long unsigned); + DPSResults resultTable; + unsigned int resultTableLength; + struct _t_DPSContextRec *chainParent, *chainChild; + unsigned int contextFlags; + DPSContextExtensionRec *extension; +} DPSContextRec, *DPSContext; + + /* A DPSContextRec provides a representation of a context. + + The 'priv' field is provided for use by application code. It is + initialized to NULL and is not touched thereafter by the client + library implementation. + + The 'space' field is the space to which the context belongs. The + 'programEncoding' and 'nameEncoding' fields describe the encodings + preferred by the context (server). The values in these fields are + established when the DPSContext is created and cannot be changed + therafter. The 'procs' field points to a vector of procedures + (in a DPSProcsRec) that implement the context operations. + + The 'textProc' and 'errorProc' are called by the client library + implementation to dispose of ascii text and errors, respectively, that + the PostScript interpreter produces. + + The 'resultTableLength' and 'resultTable' fields define the number, type + and location of values expected back from the PostScript interpreter. + They should be set up before writing any PostScript language that + may return values. + + The chainParent field is non-NIL if this context automatically receives + a copy of any PostScript language sent to the referenced (parent) context. + + The chainChild field is non-NIL if this context automatically sends + a copy of any PostScript language it receives to the referenced (child) + context. + + The contextFlags parameter contains a set of bit flags. The bits 0-15 + are reserved for system-independent flags, bits 16-31 for + system-specific flags. + + The extension parameter points to a linked list of extension records + to allow toolkit to associate arbitrary data with contexts. + + NOTE the client library implementation extends the DPSContextRec to + include implementation-dependent information in additional fields. + + You may read the fields of a DPSContextRec directly, but you should + never modify them directly. Use the macros provided for that purpose. */ + +#define DPS_FLAG_SYNC 0x1 +#define DPS_FLAG_CONVERT_NUMSTRINGS 0x2 +#define DPS_FLAG_NO_BINARY_CONVERSION 0x4 +#define DPS_FLAG_USE_ABBREVS 0x8 + +/* -- binary object sequence support -- */ + +#define DPSSYSNAME 0x0FFFF /* unsigned rep. of -1 */ + +typedef struct { + unsigned char attributedType; + unsigned char tag; + unsigned short length; + int val; +} DPSBinObjGeneric; /* boolean, int, string, name and array */ + + +typedef struct { + unsigned char attributedType; + unsigned char tag; + unsigned short length; + float realVal; +} DPSBinObjReal; /* float */ + + +typedef struct { + unsigned char attributedType; + unsigned char tag; + unsigned short length; + union { + int integerVal; + float realVal; + int nameVal; /* offset or index */ + int booleanVal; + int stringVal; /* offset */ + int arrayVal; /* offset */ + } val; +} DPSBinObjRec, *DPSBinObj; + +typedef struct { + unsigned char tokenType; + unsigned char nTopElements; + unsigned short length; + DPSBinObjRec objects[1]; +} DPSBinObjSeqRec, *DPSBinObjSeq; + +typedef struct { + unsigned char tokenType; + unsigned char escape; /* zero if this is an extended sequence */ + unsigned short nTopElements; + unsigned length; + DPSBinObjRec objects[1]; +} DPSExtendedBinObjSeqRec, *DPSExtendedBinObjSeq; + +/*=== SYNCHRONIZATION MACRO ===*/ + +#ifndef NeXTSTEP +#define DPSSYNCHOOK(ctxt) \ + if ((ctxt)->contextFlags & DPS_FLAG_SYNC) DPSWaitContext(ctxt); +#endif /* NeXT */ + +/*=== PROCEDURES ===*/ + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +extern void DPSAwaitReturnValues(DPSContext ctxt); + +extern void DPSUpdateNameMap(DPSContext ctxt); + +extern void DPSBinObjSeqWrite(DPSContext ctxt, char *buf, unsigned int count); + +extern DPSContext DPSPrivCurrentContext(void); + +extern void DPSWriteStringChars(DPSContext ctxt, char *buf, + unsigned int count); + +extern void DPSWriteNumString(DPSContext ctxt, DPSDefinedType type, + char *data, unsigned int size, int scale); + +extern void DPSWriteTypedObjectArray(DPSContext ctxt, DPSDefinedType type, + char *array, unsigned int length); + +extern void DPSSetResultTable(DPSContext ctxt, DPSResults tbl, + unsigned int len); + + +/* Support for user names */ + +extern void DPSMapNames(DPSContext ctxt, unsigned int nNames, char **names, + int **indices); + + /* This routine assigns indices to the given user names. It is + called once for each wrapped procedure. The parameters 'nNames' and + 'names' define an array of strings which are the user names. The + parameter 'indices' is an array of (int *) which are the locations + in which to store the indices. The caller must ensure that the string + pointers remain valid after the return. + + As a storage optimization, DPSMapNames will interpret a NIL + value in the names array as the previous valid string in + the name array. Effectively, if names[n] == NIL, DPSMapNames + will decrement n until names[] is non-NIL and use that string. + names[0] must be non-NIL. */ + +extern char *DPSNameFromIndex(long int index); + + /* This routine returns the text for the user name with the given index. + The string returned is owned by the library (treat it as readonly). */ + +extern DPSContextExtensionRec *DPSGetContextExtensionRec(DPSContext ctxt, + int extensionId); + + /* This procedure finds the context extension record with the given id */ + +extern void DPSAddContextExtensionRec(DPSContext ctxt, + DPSContextExtensionRec *rec); + + /* This procedure adds a context extension record */ + +extern DPSContextExtensionRec *DPSRemoveContextExtensionRec(DPSContext ctxt, + int extensionId); + + /* This procedure removes a context extension record */ + +extern int DPSGenerateExtensionRecID(void); + + /* This procedure generates a unique extension record id. */ + +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. */ + +#if defined(__cplusplus) || defined(c_plusplus) +} +#endif + +#endif /* DPSFRIENDS_H */ |