145149Skarels /* PostScript type and data structure defs 245149Skarels 345149Skarels Copyright 1983 -- Adobe Systems, Inc. 445149Skarels PostScript is a trademark of Adobe Systems, Inc. 545149Skarels NOTICE: All information contained herein or attendant hereto is, and 645149Skarels remains, the property of Adobe Systems, Inc. Many of the intellectual 745149Skarels and technical concepts contained herein are proprietary to Adobe Systems, 845149Skarels Inc. and may be covered by U.S. and Foreign Patents or Patents Pending or 945149Skarels are protected as trade secrets. Any dissemination of this information or 1045149Skarels reproduction of this material are strictly forbidden unless prior written 1145149Skarels permission is obtained from Adobe Systems, Inc. 1245149Skarels 1345149Skarels Original version: Chuck Geschke: January 20, 1983 1445149Skarels Edit History: 1545149Skarels Chuck Geschke: Tue Sep 4 14:16:04 1984 1645149Skarels Tom Boynton: Thu Mar 3 15:47:27 1983 1745149Skarels Doug Brotz: Wed Jul 11 17:28:07 1984 1845149Skarels Ed Taft: Sun Sep 23 15:32:14 1984 1945149Skarels End Edit History. 2045149Skarels 2145149Skarels Note: types.h is intended to be usable either as an inclusion in 2245149Skarels postscript.h or by itself. Nothing in types.h should depend on 2345149Skarels definitions in any other .h file. 2445149Skarels 2545149Skarels Note: for the moment we depend absolutely on an int being the same 2645149Skarels as a long int and being at least 32 bits. 2745149Skarels */ 2845149Skarels 2945149Skarels #ifndef TYPES_H 3045149Skarels #define TYPES_H 3145149Skarels 3245149Skarels /* generally useful macros */ 3345149Skarels 3445149Skarels #define endswitch default:; 3545149Skarels #define until(x) while (!(x)) 3645149Skarels #define abs(x) ((x)<0?-(x):(x)) 3745149Skarels 3845149Skarels #if IEEESOFT 3945149Skarels #define RtoILOOPHOLE(r) (*(integer *)(&(r))) 4045149Skarels #define RealEq0(r) ((RtoILOOPHOLE(r)<<1)==0) 4145149Skarels #define RealNe0(r) ((RtoILOOPHOLE(r)<<1)!=0) 4245149Skarels #define RealGt0(r) (RtoILOOPHOLE(r)>0) 4345149Skarels #define RealGe0(r) ((RtoILOOPHOLE(r)>=0)||RealEq0(r)) 4445149Skarels #define RealLt0(r) ((RtoILOOPHOLE(r)<0)&&RealNe0(r)) 4545149Skarels #define RealLe0(r) (RtoILOOPHOLE(r)<=0) 4645149Skarels #else IEEESOFT 4745149Skarels #define RealEq0(r) ((r)==0.0) 4845149Skarels #define RealNe0(r) ((r)!=0.0) 4945149Skarels #define RealGt0(r) ((r)>0.0) 5045149Skarels #define RealGe0(r) ((r)>=0.0) 5145149Skarels #define RealLt0(r) ((r)<0.0) 5245149Skarels #define RealLe0(r) ((r)<=0.0) 5345149Skarels #endif IEEESOFT 5445149Skarels 5545149Skarels #define fabs(x) (RealLt0(x)?-(x):(x)) 5645149Skarels #define MIN(a,b) ((a)<(b)?(a):(b)) 5745149Skarels #define MAX(a,b) ((a)>(b)?(a):(b)) 5845149Skarels #define forward extern 5945149Skarels #define private static 6045149Skarels #define public 6145149Skarels #define global extern 6245149Skarels typedef unsigned int boolean; 6345149Skarels #define true 1 6445149Skarels #define false 0 6545149Skarels typedef long int word; 6645149Skarels typedef word *wordptr; 6745149Skarels #define procedure integer /* actually void */ 6845149Skarels typedef unsigned char character; 6945149Skarels typedef character *string, *charptr; 7045149Skarels typedef long int integer; 7145149Skarels typedef float real; 7245149Skarels typedef double longreal; 7345149Skarels typedef unsigned short int cardinal; 7445149Skarels typedef unsigned long int longcardinal; 7545149Skarels typedef integer Fixed; /* 16 bits of integer, 16 bits of fraction */ 7645149Skarels typedef integer (*PIntProc)(); /* pointer to procedure returning integer */ 7745149Skarels #ifdef STREAM_H 7845149Skarels typedef StmRec *StreamHandle; 7945149Skarels #endif STREAM_H 8045149Skarels #define MAXlevel 15 /* max save level */ 8145149Skarels #define MAXexecLevel 10 /* max recursion level of psExecute */ 8245149Skarels #define MAXinteger 017777777777 8345149Skarels #define MINinteger 020000000000 8445149Skarels #define MAXunsignedinteger ((unsigned)037777777777) 8545149Skarels #define MAXcardinal 0177777 8645149Skarels #define MAXlongcardinal 037777777777 8745149Skarels #define MAXdctLength 2000 8845149Skarels #define MAXnameLength 127 8945149Skarels #define MAXnumeralString 35 /* must be at least 32 on a VAX */ 9045149Skarels #define MAXtimeString 24 /* must be at least 24 on UNIX */ 9145149Skarels #define MAXstringLength MAXcardinal 9245149Skarels #define MAXarrayLength MAXcardinal 9345149Skarels #define MAXdctCount MAXcardinal 9445149Skarels #define MAXcmdIndex 10000 /* to distinguish cmd index from raw PC */ 9545149Skarels #define NUL '\0' 9645149Skarels 9745149Skarels #define chPerPg 1024 /* VAX specific */ 9845149Skarels #define chPerWd 4 9945149Skarels #define wdPerPg chPerPg/chPerWd 10045149Skarels 10145149Skarels /* the following defs are for relative pointers into PS VM */ 10245149Skarels 103*45521Skarels typedef unsigned long int Offset; 10445149Skarels typedef Offset StrOffset, ArrayOffset, DictOffset, KeyValOffset, NameOffset, 10545149Skarels SROoffset, SRCoffset, SRDoffset, SRoffset; 10645149Skarels #define NIL NULL 10745149Skarels 10845149Skarels /* the definition of basic PostScript objects */ 10945149Skarels 11045149Skarels #define nullObj 0 11145149Skarels #define intObj 1 11245149Skarels #define realObj 2 11345149Skarels #define nameObj 3 11445149Skarels #define boolObj 4 11545149Skarels #define strObj 5 11645149Skarels #define stmObj 6 11745149Skarels #define cmdObj 7 11845149Skarels #define dictObj 8 11945149Skarels #define arrayObj 9 12045149Skarels #define markObj 10 12145149Skarels #define saveObj 11 12245149Skarels #define fontObj 12 12345149Skarels #define nObTypes 13 12445149Skarels 12545149Skarels #define nBitVectorBits 32 126*45521Skarels typedef unsigned long int BitVector; 12745149Skarels 12845149Skarels typedef unsigned char Level; 12945149Skarels 13045149Skarels typedef unsigned int Access; 13145149Skarels 13245149Skarels #define nAccess 0 13345149Skarels #define rAccess 1 13445149Skarels #define wAccess 2 13545149Skarels #define xAccess 4 13645149Skarels #define aAccess 7 13745149Skarels 13845149Skarels #define Lobj 0 /* tag for literal object */ 13945149Skarels #define Xobj 1 /* tag for executable object */ 14045149Skarels 14145149Skarels typedef struct object{ 14245149Skarels cardinal tag:1; 14345149Skarels Access access:3; 14445149Skarels cardinal type:4; 14545149Skarels Level level; 14645149Skarels cardinal length; 14745149Skarels union{ 14845149Skarels /*null*/ int nullval; 14945149Skarels /*int*/ integer ival; 15045149Skarels /*real*/ real rval; 15145149Skarels /*name*/ NameOffset nmval; 15245149Skarels /*bool*/ boolean bval; 15345149Skarels /*str*/ StrOffset strval; 15445149Skarels /*stm*/ integer stmval; 15545149Skarels /*cmd*/ NameOffset cmdval; 15645149Skarels /*dict*/ DictOffset dictval; 15745149Skarels /*array*/ ArrayOffset arrayval; 15845149Skarels /*mark*/ int markval; 15945149Skarels /*save*/ int saveval; 160*45521Skarels /*font*/ int fontval;} val; 16145149Skarels } Object, *PObject, NullObj, *PNullObj, 16245149Skarels IntObj, *PIntObj, RealObj, *PRealObj, 16345149Skarels NameObj, *PNameObj, BoolObj, *PBoolObj, 16445149Skarels StrObj, *PStrObj, StmObj, *PStmObj, 16545149Skarels CmdObj, *PCmdObj, DictObj, *PDictObj, 16645149Skarels AryObj, *PAryObj, MarkObj, *PMarkObj, 16745149Skarels SaveObj, *PSaveObj, FontObj, *PFontObj; 16845149Skarels 16945149Skarels /* following macros are useful for contructing Objects */ 17045149Skarels 17145149Skarels #define LNullObj(o) o = iLNullObj; o.level=LEVEL 17245149Skarels #define LIntObj(o,v) o = iLIntObj; o.level=LEVEL; o.val.ival=v 17345149Skarels #define LRealObj(o,v) o = iLRealObj; o.level=LEVEL; o.val.rval=v 17445149Skarels #define LNameObj(o,v) o = iLNameObj; o.level=LEVEL; o.val.nmval=v 17545149Skarels #define LBoolObj(o,v) o = iLBoolObj; o.level=LEVEL; o.val.bval=v 17645149Skarels #define LStrObj(o,l,v) o = iLStrObj; o.level=LEVEL; o.length=l; o.val.strval=v 17745149Skarels #define LStmObj(o,i,s) o = iLStmObj; o.level=LEVEL; o.length=i; o.val.stmval=s 17845149Skarels #define LDictObj(o,v) o = iLDictObj; o.level=LEVEL; o.val.dictval=v 17945149Skarels #define LAryObj(o,l,v) o = iLAryObj; o.level=LEVEL; o.length=l; o.val.arrayval=v 18045149Skarels #define LMarkObj(o) o = iLMarkObj; o.level=LEVEL 18145149Skarels #define LSaveObj(o,v) o = iLSaveObj; o.level=LEVEL; o.val.saveval=v 18245149Skarels #define LFontObj(o,v) o = iLFontObj; o.level=LEVEL; o.val.fontval=v 18345149Skarels #define XNameObj(o,v) o = iXNameObj; o.level=LEVEL; o.val.nmval=v 18445149Skarels #define XStrObj(o,l,v) o = iXStrObj; o.level=LEVEL; o.length=l; o.val.strval=v 18545149Skarels #define XCmdObj(o,i,v) o = iXCmdObj; o.level=LEVEL; o.val.cmdval=i; o.length=v 18645149Skarels #define XAryObj(o,l,v) o = iXAryObj; o.level=LEVEL; o.length=l; o.val.arrayval=v 18745149Skarels 18845149Skarels #ifndef LEVEL 18945149Skarels #define LEVEL level 19045149Skarels #endif 19145149Skarels 19245149Skarels extern NullObj iLNullObj; 19345149Skarels extern IntObj iLIntObj; 19445149Skarels extern RealObj iLRealObj; 19545149Skarels extern NameObj iLNameObj, iXNameObj; 19645149Skarels extern BoolObj iLBoolObj; 19745149Skarels extern StrObj iLStrObj, iXStrObj; 19845149Skarels extern StmObj iLStmObj; 19945149Skarels extern CmdObj iXCmdObj; 20045149Skarels extern DictObj iLDictObj; 20145149Skarels extern AryObj iLAryObj, iXAryObj; 20245149Skarels extern MarkObj iLMarkObj; 20345149Skarels extern SaveObj iLSaveObj; 20445149Skarels extern FontObj iLFontObj; 20545149Skarels 20645149Skarels 20745149Skarels /* graphics data types */ 20845149Skarels 20945149Skarels typedef real Component; 21045149Skarels typedef struct {Component x, y;} Cd; 21145149Skarels typedef struct {integer x, y;} DevCd; 21245149Skarels 21345149Skarels typedef struct {real a, b, c, d, tx, ty;} Mtx, *PMtx; 21445149Skarels 21545149Skarels /* initialization */ 21645149Skarels 21745149Skarels typedef enum {init, romreg, ramreg} InitReason; 21845149Skarels 21945149Skarels #endif TYPES_H 220