#include <Xdefs.h>
#include <Xfuncproto.h>
#ifndef FONTMODULE
#include <stdlib.h>
#endif
#define Permanent(obj) t1_Permanent(obj)
#ifdef notused
#define Temporary(obj) t1_Temporary(obj)
#endif
#define Destroy(obj) t1_Destroy(obj)
#define Dup(obj) t1_Dup(obj)
#define InitImager t1_InitImager
#define TermImager t1_TermImager
#define Pragmatics(f,v) t1_Pragmatics(f,v)
#define ErrorMsg t1_ErrorMsg
extern struct xobject *t1_Permanent ( pointer obj );
#ifdef notused
extern struct xobject *t1_Temporary( pointer obj );
#endif
extern struct xobject *t1_Destroy ( pointer obj );
extern struct xobject *t1_Dup ( pointer obj );
extern void t1_InitImager ( void );
extern void t1_TermImager ( void );
extern void t1_Pragmatics ( char *username, int value );
extern char *t1_ErrorMsg ( void );
extern void xiFree ( long *addr );
extern char *xiMalloc ( unsigned Size );
extern void addmemory ( long *addr, long size );
extern void delmemory ( void );
#ifndef OS_H
extern void FatalError(const char *f, ...)
#if defined(__GNUC__) && \
((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ > 4)))
__attribute((noreturn))
#endif
;
extern void ErrorF(const char *f, ...);
#endif
#define Abort(line) FatalError(line)
#define Allocate(n,t,s) t1_Allocate(n,t,s)
#define Free(obj) t1_Free(obj)
#define NonObjectFree(a) xiFree((long *)(a))
#define Consume t1_Consume
#define ArgErr(s,o,r) t1_ArgErr(s,o,r)
#define TypeErr(n,o,e,r) t1_TypeErr(n,o,e,r)
#define Copy(obj) t1_Copy(obj)
#define Unique(obj) t1_Unique(obj)
extern struct xobject *t1_Allocate( int size, pointer template,
int extra );
extern void t1_Free ( pointer obj );
extern struct xobject *t1_Unique ( pointer obj );
extern struct xobject *t1_ArgErr ( char *string, pointer obj, pointer ret );
extern struct xobject *t1_TypeErr ( char *name, pointer obj,
int expect, pointer ret );
extern void t1_Consume ( int n, ... );
extern struct xobject *t1_Copy ( pointer obj );
#define ON (~0)
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
#ifndef NULL
#include <stddef.h>
#endif
#ifndef MIN
#define MIN(a,b) (((a)<(b)) ? a : b)
#endif
#ifndef MAX
#define MAX(a,b) (((a)>(b)) ? a : b)
#endif
#ifndef ABS
#define ABS(a) (((a)>=0)?(a):-(a))
#endif
struct xobject {
char type;
unsigned char flag;
short references;
} ;
#define XOBJ_COMMON char type; unsigned char flag; short references;
#define INVALIDTYPE 0
#define FONTTYPE 1
#define REGIONTYPE 3
#define PICTURETYPE 4
#define SPACETYPE 5
#define LINESTYLETYPE 6
#define EDGETYPE 7
#define STROKEPATHTYPE 8
#define CLUTTYPE 9
#define ISPATHTYPE(type) ((type)&0x10)
#define LINETYPE (0+ISPATHTYPE(ON))
#define CONICTYPE (1+ISPATHTYPE(ON))
#define BEZIERTYPE (2+ISPATHTYPE(ON))
#define HINTTYPE (3+ISPATHTYPE(ON))
#define MOVETYPE (5+ISPATHTYPE(ON))
#define TEXTTYPE (6+ISPATHTYPE(ON))
#define ISPERMANENT(flag) ((flag)&0x01)
#define ISIMMORTAL(flag) ((flag)&0x02)
#define PRESERVE(obj) if (!ISPERMANENT((obj)->flag)) \
(obj)->references++;
#define LONGCOPY(dest,source,bytes) { \
register long *p1 = (long *)dest; register long *p2 = (long *)source; \
register int count = (bytes) / sizeof(long); \
while (--count >= 0) *p1++ = *p2++; }
#define FOLLOWING(p) ((p)+1)
#define TYPECHECK(name, obj, expect, whenBAD, consumables, rettype) { \
if (obj->type != expect) { \
(Consume)consumables; \
return((rettype)TypeErr(name, obj, expect, whenBAD)); \
} \
}
#define ARGCHECK(test,msg,obj,whenBAD,consumables,rettype) { \
if (test) { \
(Consume)consumables; \
return((rettype)ArgErr(msg, obj, whenBAD)); \
} \
}
#define TYPENULLCHECK(name, obj, expect, whenBAD, consumables,rettype) \
if (obj == NULL) { \
(Consume)consumables; \
if (whenBAD != NULL && ISPERMANENT(whenBAD->flag)) \
return((rettype)Temporary(Copy(whenBAD))); \
else return((rettype)whenBAD); \
} else { \
if (obj->type != expect) { \
(Consume)consumables; \
return((rettype)TypeErr(name, obj, expect, whenBAD)); \
} \
}
#define MAKECONSUME(obj,stmt) { if (!ISPERMANENT(obj->flag)) stmt; }
#define MAKEUNIQUE(obj,stmt) ( ( (obj)->references > 1 ) ? stmt : obj )
#ifdef GLOBALS
#define extern
#define INITIALIZED(value) = value
#else
#define INITIALIZED(value)
#endif
extern char MustCheckArgs INITIALIZED(TRUE);
extern char MustTraceCalls INITIALIZED(FALSE);
#ifdef BUILDCID
extern char MustCrash INITIALIZED(FALSE);
#else
extern char MustCrash INITIALIZED(TRUE);
#endif
extern char InternalTrace INITIALIZED(TRUE);
extern char LineIOTrace INITIALIZED(TRUE);
extern char ProcessHints INITIALIZED(TRUE);
extern char SaveFontPaths INITIALIZED(TRUE);
extern short CRASTERCompressionType INITIALIZED(1);
extern char ConicDebug INITIALIZED(0);
extern char LineDebug INITIALIZED(0);
extern char RegionDebug INITIALIZED(0);
extern char PathDebug INITIALIZED(0);
extern char FontDebug INITIALIZED(0);
extern char SpaceDebug INITIALIZED(0);
extern char StrokeDebug INITIALIZED(0);
extern char MemoryDebug INITIALIZED(0);
extern char HintDebug INITIALIZED(0);
extern char ImageDebug INITIALIZED(0);
extern char OffPageDebug INITIALIZED(0);
extern short CachedChars INITIALIZED(0x7FFF);
extern short CachedFonts INITIALIZED(0x7FFF);
extern int CacheBLimit INITIALIZED(12500);
extern char Continuity INITIALIZED(2);
#ifdef extern
#undef extern
#endif
#define DumpArea(area) t1_DumpArea(area)
#define DumpText(text) t1_DumpText(text)
#define DumpPath(path) t1_DumpPath(path)
#define DumpSpace(space) t1_DumpSpace(space)
#define DumpEdges(e) t1_DumpEdges(e)
#define FormatFP(s,p) t1_FormatFP(s,p)
extern void t1_DumpText(void);