xref: /original-bsd/local/transcript/src/types.h (revision 3588a932)
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