xref: /csrg-svn/local/transcript/src/types.h (revision 45521)
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