1 /* PostScript type and data structure defs 2 3 Copyright 1983 -- Adobe Systems, Inc. 4 PostScript is a trademark of Adobe Systems, Inc. 5 NOTICE: All information contained herein or attendant hereto is, and 6 remains, the property of Adobe Systems, Inc. Many of the intellectual 7 and technical concepts contained herein are proprietary to Adobe Systems, 8 Inc. and may be covered by U.S. and Foreign Patents or Patents Pending or 9 are protected as trade secrets. Any dissemination of this information or 10 reproduction of this material are strictly forbidden unless prior written 11 permission is obtained from Adobe Systems, Inc. 12 13 Original version: Chuck Geschke: January 20, 1983 14 Edit History: 15 Chuck Geschke: Tue Sep 4 14:16:04 1984 16 Tom Boynton: Thu Mar 3 15:47:27 1983 17 Doug Brotz: Wed Jul 11 17:28:07 1984 18 Ed Taft: Sun Sep 23 15:32:14 1984 19 End Edit History. 20 21 Note: types.h is intended to be usable either as an inclusion in 22 postscript.h or by itself. Nothing in types.h should depend on 23 definitions in any other .h file. 24 25 Note: for the moment we depend absolutely on an int being the same 26 as a long int and being at least 32 bits. 27 */ 28 29 #ifndef TYPES_H 30 #define TYPES_H 31 32 /* generally useful macros */ 33 34 #define endswitch default:; 35 #define until(x) while (!(x)) 36 #define abs(x) ((x)<0?-(x):(x)) 37 38 #if IEEESOFT 39 #define RtoILOOPHOLE(r) (*(integer *)(&(r))) 40 #define RealEq0(r) ((RtoILOOPHOLE(r)<<1)==0) 41 #define RealNe0(r) ((RtoILOOPHOLE(r)<<1)!=0) 42 #define RealGt0(r) (RtoILOOPHOLE(r)>0) 43 #define RealGe0(r) ((RtoILOOPHOLE(r)>=0)||RealEq0(r)) 44 #define RealLt0(r) ((RtoILOOPHOLE(r)<0)&&RealNe0(r)) 45 #define RealLe0(r) (RtoILOOPHOLE(r)<=0) 46 #else IEEESOFT 47 #define RealEq0(r) ((r)==0.0) 48 #define RealNe0(r) ((r)!=0.0) 49 #define RealGt0(r) ((r)>0.0) 50 #define RealGe0(r) ((r)>=0.0) 51 #define RealLt0(r) ((r)<0.0) 52 #define RealLe0(r) ((r)<=0.0) 53 #endif IEEESOFT 54 55 #define fabs(x) (RealLt0(x)?-(x):(x)) 56 #define MIN(a,b) ((a)<(b)?(a):(b)) 57 #define MAX(a,b) ((a)>(b)?(a):(b)) 58 #define forward extern 59 #define private static 60 #define public 61 #define global extern 62 typedef unsigned int boolean; 63 #define true 1 64 #define false 0 65 typedef long int word; 66 typedef word *wordptr; 67 #define procedure integer /* actually void */ 68 typedef unsigned char character; 69 typedef character *string, *charptr; 70 typedef long int integer; 71 typedef float real; 72 typedef double longreal; 73 typedef unsigned short int cardinal; 74 typedef unsigned long int longcardinal; 75 typedef integer Fixed; /* 16 bits of integer, 16 bits of fraction */ 76 typedef integer (*PIntProc)(); /* pointer to procedure returning integer */ 77 #ifdef STREAM_H 78 typedef StmRec *StreamHandle; 79 #endif STREAM_H 80 #define MAXlevel 15 /* max save level */ 81 #define MAXexecLevel 10 /* max recursion level of psExecute */ 82 #define MAXinteger 017777777777 83 #define MINinteger 020000000000 84 #define MAXunsignedinteger ((unsigned)037777777777) 85 #define MAXcardinal 0177777 86 #define MAXlongcardinal 037777777777 87 #define MAXdctLength 2000 88 #define MAXnameLength 127 89 #define MAXnumeralString 35 /* must be at least 32 on a VAX */ 90 #define MAXtimeString 24 /* must be at least 24 on UNIX */ 91 #define MAXstringLength MAXcardinal 92 #define MAXarrayLength MAXcardinal 93 #define MAXdctCount MAXcardinal 94 #define MAXcmdIndex 10000 /* to distinguish cmd index from raw PC */ 95 #define NUL '\0' 96 97 #define chPerPg 1024 /* VAX specific */ 98 #define chPerWd 4 99 #define wdPerPg chPerPg/chPerWd 100 101 /* the following defs are for relative pointers into PS VM */ 102 103 typedef unsigned long int Offset; 104 typedef Offset StrOffset, ArrayOffset, DictOffset, KeyValOffset, NameOffset, 105 SROoffset, SRCoffset, SRDoffset, SRoffset; 106 #define NIL NULL 107 108 /* the definition of basic PostScript objects */ 109 110 #define nullObj 0 111 #define intObj 1 112 #define realObj 2 113 #define nameObj 3 114 #define boolObj 4 115 #define strObj 5 116 #define stmObj 6 117 #define cmdObj 7 118 #define dictObj 8 119 #define arrayObj 9 120 #define markObj 10 121 #define saveObj 11 122 #define fontObj 12 123 #define nObTypes 13 124 125 #define nBitVectorBits 32 126 typedef unsigned long int BitVector; 127 128 typedef unsigned char Level; 129 130 typedef unsigned int Access; 131 132 #define nAccess 0 133 #define rAccess 1 134 #define wAccess 2 135 #define xAccess 4 136 #define aAccess 7 137 138 #define Lobj 0 /* tag for literal object */ 139 #define Xobj 1 /* tag for executable object */ 140 141 typedef struct object{ 142 cardinal tag:1; 143 Access access:3; 144 cardinal type:4; 145 Level level; 146 cardinal length; 147 union{ 148 /*null*/ int nullval; 149 /*int*/ integer ival; 150 /*real*/ real rval; 151 /*name*/ NameOffset nmval; 152 /*bool*/ boolean bval; 153 /*str*/ StrOffset strval; 154 /*stm*/ integer stmval; 155 /*cmd*/ NameOffset cmdval; 156 /*dict*/ DictOffset dictval; 157 /*array*/ ArrayOffset arrayval; 158 /*mark*/ int markval; 159 /*save*/ int saveval; 160 /*font*/ int fontval;} val; 161 } Object, *PObject, NullObj, *PNullObj, 162 IntObj, *PIntObj, RealObj, *PRealObj, 163 NameObj, *PNameObj, BoolObj, *PBoolObj, 164 StrObj, *PStrObj, StmObj, *PStmObj, 165 CmdObj, *PCmdObj, DictObj, *PDictObj, 166 AryObj, *PAryObj, MarkObj, *PMarkObj, 167 SaveObj, *PSaveObj, FontObj, *PFontObj; 168 169 /* following macros are useful for contructing Objects */ 170 171 #define LNullObj(o) o = iLNullObj; o.level=LEVEL 172 #define LIntObj(o,v) o = iLIntObj; o.level=LEVEL; o.val.ival=v 173 #define LRealObj(o,v) o = iLRealObj; o.level=LEVEL; o.val.rval=v 174 #define LNameObj(o,v) o = iLNameObj; o.level=LEVEL; o.val.nmval=v 175 #define LBoolObj(o,v) o = iLBoolObj; o.level=LEVEL; o.val.bval=v 176 #define LStrObj(o,l,v) o = iLStrObj; o.level=LEVEL; o.length=l; o.val.strval=v 177 #define LStmObj(o,i,s) o = iLStmObj; o.level=LEVEL; o.length=i; o.val.stmval=s 178 #define LDictObj(o,v) o = iLDictObj; o.level=LEVEL; o.val.dictval=v 179 #define LAryObj(o,l,v) o = iLAryObj; o.level=LEVEL; o.length=l; o.val.arrayval=v 180 #define LMarkObj(o) o = iLMarkObj; o.level=LEVEL 181 #define LSaveObj(o,v) o = iLSaveObj; o.level=LEVEL; o.val.saveval=v 182 #define LFontObj(o,v) o = iLFontObj; o.level=LEVEL; o.val.fontval=v 183 #define XNameObj(o,v) o = iXNameObj; o.level=LEVEL; o.val.nmval=v 184 #define XStrObj(o,l,v) o = iXStrObj; o.level=LEVEL; o.length=l; o.val.strval=v 185 #define XCmdObj(o,i,v) o = iXCmdObj; o.level=LEVEL; o.val.cmdval=i; o.length=v 186 #define XAryObj(o,l,v) o = iXAryObj; o.level=LEVEL; o.length=l; o.val.arrayval=v 187 188 #ifndef LEVEL 189 #define LEVEL level 190 #endif 191 192 extern NullObj iLNullObj; 193 extern IntObj iLIntObj; 194 extern RealObj iLRealObj; 195 extern NameObj iLNameObj, iXNameObj; 196 extern BoolObj iLBoolObj; 197 extern StrObj iLStrObj, iXStrObj; 198 extern StmObj iLStmObj; 199 extern CmdObj iXCmdObj; 200 extern DictObj iLDictObj; 201 extern AryObj iLAryObj, iXAryObj; 202 extern MarkObj iLMarkObj; 203 extern SaveObj iLSaveObj; 204 extern FontObj iLFontObj; 205 206 207 /* graphics data types */ 208 209 typedef real Component; 210 typedef struct {Component x, y;} Cd; 211 typedef struct {integer x, y;} DevCd; 212 213 typedef struct {real a, b, c, d, tx, ty;} Mtx, *PMtx; 214 215 /* initialization */ 216 217 typedef enum {init, romreg, ramreg} InitReason; 218 219 #endif TYPES_H 220