1 /* $XConsortium: objects.h,v 1.6 92/03/20 14:35:56 keith Exp $ */ 2 /* Copyright International Business Machines, Corp. 1991 3 * All Rights Reserved 4 * Copyright Lexmark International, Inc. 1991 5 * All Rights Reserved 6 * 7 * License to use, copy, modify, and distribute this software and its 8 * documentation for any purpose and without fee is hereby granted, 9 * provided that the above copyright notice appear in all copies and that 10 * both that copyright notice and this permission notice appear in 11 * supporting documentation, and that the name of IBM or Lexmark not be 12 * used in advertising or publicity pertaining to distribution of the 13 * software without specific, written prior permission. 14 * 15 * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF 16 * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY 17 * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, 18 * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE 19 * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT 20 * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE 21 * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE 22 * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL 23 * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL 24 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 25 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS 26 * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF 27 * THIS SOFTWARE. 28 */ 29 /*SHARED*/ 30 31 /*END SHARED*/ 32 /*SHARED*/ 33 34 #ifdef WIN32 35 #include <stdio.h> 36 #include <stdlib.h> 37 #include <kpathsea/kpathsea.h> 38 #endif 39 40 #include "types.h" 41 42 #define Permanent(obj) t1_Permanent(obj) 43 #define Destroy(obj) t1_Destroy(obj) 44 #define Dup(obj) t1_Dup(obj) 45 #define InitImager t1_InitImager 46 #define TermImager t1_TermImager 47 #define ErrorMsg t1_ErrorMsg 48 49 struct xobject *t1_Permanent(void *); /* make an object permanent */ 50 struct xobject *t1_Destroy(void *); /* destroy an object */ 51 struct xobject *t1_Dup(struct xobject *); /* duplicate an object */ 52 void t1_InitImager(void); /* initialize TYPE1IMAGER */ 53 void t1_TermImager(void); /* terminate TYPE1IMAGER */ 54 const char *t1_ErrorMsg(void); /* return last TYPE1IMAGER error message */ 55 56 /*END SHARED*/ 57 /*SHARED*/ 58 59 #define Allocate(n,t,s) t1_Allocate(n,t,s) 60 #define Free(obj) t1_Free(obj) 61 #define NonObjectFree(a) Xfree(a) 62 #define Consume t1_Consume 63 #define ArgErr(s,o,r) t1_ArgErr(s,o,r) 64 #define TypeErr(n,o,e,r) t1_TypeErr(n,o,e,r) 65 #define Copy(obj) t1_Copy(obj) 66 #define Unique(obj) t1_Unique(obj) 67 68 void t1_abort(const char *); /* crash; software logic error */ 69 struct xobject *t1_Allocate(int, void *, int); /* allocate memory */ 70 void t1_Free(void *); /* free memory */ 71 struct xobject *t1_Unique(struct xobject *); 72 /* make a unique temporary copy of an object */ 73 struct xobject *t1_ArgErr(const char *, void *, void *); 74 /* handle argument errors */ 75 struct xobject *t1_TypeErr(const char *, void *, int, void *); 76 /* handle 'bad type' argument errors */ 77 void t1_Consume(int, ...); /* consume a variable number of arguments */ 78 struct xobject *t1_Copy(struct xobject *); 79 /* make a new copy, not reference bump PNM */ 80 81 /*END SHARED*/ 82 /*SHARED*/ 83 84 #define ON (~0) /* all bits on */ 85 #ifndef FALSE 86 #define FALSE 0 /* handy zero value */ 87 #endif 88 #ifndef TRUE 89 #define TRUE 1 /* handy non-zero value */ 90 #endif 91 92 #ifndef NULL 93 #define NULL 0 94 /* 95 The NULL pointer is system specific. (Most systems, however, use 0.) 96 TYPE1IMAGER could have its own NULL, independent of the rest of the system, 97 were it not for malloc(). The system call malloc() returns NULL when 98 out of memory. 99 :i1/portibility assumptions/ 100 */ 101 #endif 102 103 #ifdef MAX 104 #undef MAX 105 #endif 106 107 #ifdef MIN 108 #undef MIN 109 #endif 110 111 #ifdef ABS 112 #undef ABS 113 #endif 114 115 #define MIN(a,b) (((a)<(b)) ? a : b) 116 #define MAX(a,b) (((a)>(b)) ? a : b) 117 #define ABS(a) (((a)>=0)?(a):-(a)) 118 119 /*END SHARED*/ 120 /*SHARED*/ 121 122 struct xobject { 123 char type; /* encoded type of object */ 124 unsigned char flag; /* flag byte for temporary object characteristics */ 125 short references; /* count of pointers to this object 126 (plus 1 for permanent objects) PNM */ 127 } ; 128 129 /*END SHARED*/ 130 /*SHARED*/ 131 132 #define XOBJ_COMMON char type; unsigned char flag; short references; 133 134 /*END SHARED*/ 135 /*SHARED*/ 136 137 138 #define INVALIDTYPE 0 139 #define FONTTYPE 1 140 #define REGIONTYPE 3 141 #define PICTURETYPE 4 142 #define SPACETYPE 5 143 #define LINESTYLETYPE 6 144 #define EDGETYPE 7 145 #define STROKEPATHTYPE 8 146 #define CLUTTYPE 9 147 148 #define ISPATHTYPE(type) ((type)&0x10) /* all path segments have this bit on */ 149 #define LINETYPE (0+ISPATHTYPE(ON)) 150 #define CONICTYPE (1+ISPATHTYPE(ON)) 151 #define BEZIERTYPE (2+ISPATHTYPE(ON)) 152 #define HINTTYPE (3+ISPATHTYPE(ON)) 153 154 #define MOVETYPE (5+ISPATHTYPE(ON)) 155 #define TEXTTYPE (6+ISPATHTYPE(ON)) 156 157 /*END SHARED*/ 158 /*SHARED*/ 159 160 #define ISPERMANENT(flag) ((flag)&0x01) 161 #define ISIMMORTAL(flag) ((flag)&0x02) 162 163 /*END SHARED*/ 164 /*SHARED*/ 165 166 #define PRESERVE(obj) if (!ISPERMANENT((obj)->flag)) \ 167 (obj)->references++; 168 169 /*END SHARED*/ 170 /*SHARED*/ 171 172 #define INT32COPY(dest,source,bytes) { \ 173 register int32_t *p1 = (int32_t *)dest; register int32_t *p2 = (int32_t *)source; \ 174 register int count = (bytes) / sizeof(int32_t); \ 175 while (--count >= 0) *p1++ = *p2++; } 176 177 178 /*END SHARED*/ 179 /*SHARED*/ 180 181 #define FOLLOWING(p) ((p)+1) 182 183 /*END SHARED*/ 184 /*SHARED*/ 185 186 #define TYPECHECK(name, obj, expect, whenBAD, consumables, rettype) { \ 187 if (obj->type != expect) { \ 188 (Consume)consumables; \ 189 return((rettype)TypeErr(name, obj, expect, whenBAD)); \ 190 } \ 191 } 192 193 /*END SHARED*/ 194 /*SHARED*/ 195 196 #define ARGCHECK(test,msg,obj,whenBAD,consumables,rettype) { \ 197 if (test) { \ 198 (Consume)consumables; \ 199 return((rettype)ArgErr(msg, obj, whenBAD)); \ 200 } \ 201 } 202 203 /*END SHARED*/ 204 /*SHARED*/ 205 206 /* Changed use of Dup() below to Temporary(Copy()) because Dup() does not 207 necessarily return a Unique Copy anymore! 3-26-91 */ 208 #define TYPENULLCHECK(name, obj, expect, whenBAD, consumables,rettype) \ 209 if (obj == NULL) { \ 210 (Consume)consumables; \ 211 if (whenBAD != NULL && ISPERMANENT(whenBAD->flag)) \ 212 return((rettype)Temporary(Copy(whenBAD))); \ 213 else return((rettype)whenBAD); \ 214 } else { \ 215 if (obj->type != expect) { \ 216 (Consume)consumables; \ 217 return((rettype)TypeErr(name, obj, expect, whenBAD)); \ 218 } \ 219 } 220 /*END SHARED*/ 221 /*SHARED*/ 222 223 #define MAKECONSUME(obj,stmt) { if (!ISPERMANENT(obj->flag)) stmt; } 224 225 /*END SHARED*/ 226 /*SHARED*/ 227 228 #define MAKEUNIQUE(obj,stmt) ( ( (obj)->references > 1 ) ? stmt : obj ) 229 230 /*END SHARED*/ 231 /*SHARED*/ 232 /* NDW: personally, I want to see status and error messages! */ 233 #define IfTrace0(condition,model) \ 234 {if (condition) printf(model);} 235 #define IfTrace1(condition,model,arg0) \ 236 {if (condition) printf(model,arg0);} 237 #define IfTrace2(condition,model,arg0,arg1) \ 238 {if (condition) printf(model,arg0,arg1);} 239 #define IfTrace3(condition,model,arg0,arg1,arg2) \ 240 {if (condition) printf(model,arg0,arg1,arg2);} 241 #define IfTrace4(condition,model,arg0,arg1,arg2,arg3) \ 242 {if (condition) printf(model,arg0,arg1,arg2,arg3);} 243 #define IfTrace5(condition,model,arg0,arg1,arg2,arg3,arg4) \ 244 {if (condition) printf(model,arg0,arg1,arg2,arg3,arg4);} 245 #define IfTrace6(condition,model,arg0,arg1,arg2,arg3,arg4,arg5) \ 246 {if (condition) printf(model,arg0,arg1,arg2,arg3,arg4,arg5);} 247 /* NDW: patch ends */ 248 249 void Trace0(); 250 char *Trace1(),*Trace2(),*Trace3(),*Trace4(),*Trace5(),*Trace6(); 251 252 #ifdef GLOBALS 253 254 #define extern 255 #define INITIALIZED(value) = value 256 257 #else 258 259 #define INITIALIZED(value) 260 261 #endif 262 263 extern char MustCheckArgs INITIALIZED(TRUE); 264 extern char MustTraceCalls INITIALIZED(FALSE); 265 extern char MustCrash INITIALIZED(TRUE); 266 extern char InternalTrace INITIALIZED(TRUE); 267 extern char LineIOTrace INITIALIZED(TRUE); 268 269 extern char ProcessHints INITIALIZED(TRUE); 270 271 extern char SaveFontPaths INITIALIZED(TRUE); 272 273 extern short CRASTERCompressionType INITIALIZED(1); 274 275 extern char ConicDebug INITIALIZED(0); 276 extern char LineDebug INITIALIZED(0); 277 extern char RegionDebug INITIALIZED(0); 278 extern char PathDebug INITIALIZED(0); 279 extern char FontDebug INITIALIZED(0); 280 extern char SpaceDebug INITIALIZED(0); 281 extern char StrokeDebug INITIALIZED(0); 282 extern char MemoryDebug INITIALIZED(0); 283 extern char HintDebug INITIALIZED(0); 284 extern char ImageDebug INITIALIZED(0); 285 extern char OffPageDebug INITIALIZED(0); 286 287 extern short CachedChars INITIALIZED(0x7FFF); 288 extern short CachedFonts INITIALIZED(0x7FFF); 289 extern int CacheBLimit INITIALIZED(12500); 290 extern char Continuity INITIALIZED(2); 291 292 #ifdef extern 293 #undef extern 294 #endif 295 296 extern void Xfree(void*); 297 298 /*END SHARED*/ 299