phil@BRL.MIL (Phil Dykstra) (09/29/88)
System: Sun 3/50 w/68881 OS: SunOS 3.5 gcc: 1.28 compiled with 1.28 The output of the cpp follows. gcc-cc1 -O causes an IOT trap on my system, without -O works. - Phil =============================== # 1 "device.c" # 1 "main.h" # 1 "/usr/include/stdio.h" extern struct _iobuf { int _cnt; unsigned char *_ptr; unsigned char *_base; int _bufsiz; short _flag; char _file; } _iob[]; extern struct _iobuf *fopen(); extern struct _iobuf *fdopen(); extern struct _iobuf *freopen(); extern struct _iobuf *popen(); extern struct _iobuf *tmpfile(); extern long ftell(); extern char *fgets(); extern char *gets(); extern char *ctermid(); extern char *cuserid(); extern char *tempnam(); extern char *tmpnam(); # 5 "main.h" # 1 "/usr/include/math.h" extern int errno, signgam; extern double fmod(), gamma(); extern int matherr(); extern double asinh(), acosh(), atanh(); extern double erf(), erfc(); extern double exp(), expm1(), log(), log10(), log1p(), pow(); extern double fabs(), floor(), ceil(), rint(); extern double lgamma(); extern double hypot(), cabs(); extern double copysign(), drem(), logb(), scalb(); extern int finite(); extern double j0(), j1(), jn(), y0(), y1(), yn(); extern double sin(), cos(), tan(), asin(), acos(), atan(), atan2(); extern double sinh(), cosh(), tanh(); extern double cbrt(), sqrt(); extern double modf(), ldexp(), frexp(), atof(); # 55 "/usr/include/math.h" struct exception { int type; char *name; double arg1; double arg2; double retval; }; # 6 "main.h" # 1 "/usr/local/lib/gcc-include/assert.h" void _eprintf (); # 7 "main.h" # 1 "/usr/include/setjmp.h" typedef int jmp_buf[15]; # 8 "main.h" # 1 "/usr/include/strings.h" char *strcat(); char *strncat(); int strcmp(); int strncmp(); char *strcpy(); char *strncpy(); int strlen(); char *index(); char *rindex(); # 9 "main.h" typedef struct dict_struct *Type; typedef struct object { int flags; Type type; int Length; union { int Integer, Boolean, Font; float Real; Type Dictionary; unsigned char *String; struct name_struct *Name; struct op_struct *Operator; struct file_struct *File; struct object *Array; } u; } Object; enum file_type { StringFile, StreamFile }; struct file_struct { enum file_type file_type; int available; union { unsigned char *c_ptr; struct _iobuf *f_ptr; } f; }; struct dict_entry { Object entry_key, entry_value; }; struct dict_struct { int dict_flags, dict_size, dict_fill; struct dict_entry *dict_body; }; typedef struct stack { int stack_fill, stack_size; Object overflow, underflow, *stack_body; } *Stack, StackOb; Object SameFlags (), MakeObject (), Cvx (), Cvlit (), ReadOnly (), WriteOnly (), ExecOnly (); int OpCheck (), min (), rCheck (), wCheck (), xCheck (); Object MakeArray (), ParseArray (), getArray (), getIArray (), *BodyArray (); Object MakeBoolean (); Object MakeDict (), DictLoad (), Lookup (), DictFrom (), Load (); Type MakeType (), TypeOf (), BodyDict (); extern int EqTrue (), Equal (); Object FileFrom (), FileString (); int Getch (); struct file_struct *BodyFile (); Object MakeInteger (), IntReal (); Object ParseNumber (); float Deg (), Rad (); Object ParseId (), NameFrom (), MakeName (), Cvn (), StringName (); unsigned char *BodyName (); Object MakeOp (), NameOperator (); Object Parse (); int PolyFirst (), PolySecond (), PolyThird (), PolyPair (); Object MakeReal (), RealInteger (); float BodyReal (), BodyFloat (); char *Malloc (); Object Pop (), Top (), Where (), DictLookup (); int Push (); extern Object MakeString (), StringFrom (), getIString (), ParseString (), ParseHexString (); unsigned char *BodyString (); int lengthString (); extern Object PDictFull; extern Object PDictOverflow, PInvFont, PSyntaxError; extern Object PDictUnderflow, PInvRestore, PTypeCheck; extern Object PExecOverflow, PIOError, PUndefined; extern Object PExecUnderflow, PLimitCheck, PUnFilename; extern Object PInterrupt, PNoCurrentPoint, PUnResult; extern Object PInvAccess, PRangeCheck, PUnMatched; extern Object PInvExit, POpOverflow, PUnregistered; extern Object PInvFileAccess, POpUnderflow, PVMError; extern Type Boolean, Mark, String, Real, Poly, Operator; extern Type Name, File, Dictionary, Condition, Null, Integer; extern Type Array, Mark, Condition, Null, Float, FontID; extern Object SysDict, Absent, Nil; extern Object True, False, Marker, Self; extern Object OpInterp, Lbracket, Rbracket; extern Object StatementEdit, Fstdin, Fstdout, Fstderr; extern Stack OpStack, ExecStack, DictStack; extern jmp_buf env; extern int interactive, verbose; extern char default_library[], *library; extern unsigned char *Bcopy (); extern struct _iobuf *vfp, *Fopen (); extern void Fclose (); extern int getchbuf; Object DictFind(); # 12 "device.c" # 1 "graphics.h" # 1 "device.h" # 1 "hard.h" # 1 "mat.h" typedef struct matrix { float A, B, C, D, tx, ty; } Matrix; typedef struct vector { float vx, vy, vt; } Vector; extern Matrix NewMatrix (), MatMult (), MatInvert (), Translate (), Rotate (), Scale (); extern Vector NewVector (), DiffVector (); extern Vector Transform (), ITransform (), DTransform (), IDTransform (); # 5 "hard.h" # 1 "rop.h" # 6 "hard.h" # 1 "colour.h" typedef struct { float hue, saturation, brightness; } Colour; extern Colour Black, White; extern Colour NewColour (), NewHSBColour (), NewRGBColour (), NewGray (); extern void ColourHSB (), ColourRGB (); extern float Gray (), Brightness (); # 7 "hard.h" # 1 "path.h" typedef struct hard_point { float hx, hy; } HardPoint; enum pelem_type { EHeader, EMove, ELine, EArc, ECurve, EClose }; struct path_element { enum pelem_type ptype; union { HardPoint point; struct arc { int dir; HardPoint centre; float radius, from, to; } arc; struct bezier { HardPoint x0, x1, x2; } curve; } pe; struct path_element *next, *last; }; typedef struct path_element *Path; extern HardPoint NewHardPoint (), ExtToInt (), MoveHardPoint (); extern Path NewPath (), PathCopy (), NewMove (); extern int PNewPath (), PInitMatrix (); extern Path NewClipPath (), PathRemove (), ReversePath (), FlattenPath (); extern float Normalise (), PointX (), PointY (); # 8 "hard.h" typedef struct device_point { int dx, dy; } DevicePoint; extern struct hardware *HardwareFromString (), *NewBitmapHardware (), *NewWindowHardware (), *InitHardware (); extern DevicePoint HardwareExtent (); extern char *StringFromHardware (); extern void BitBlt (), BitBltBlob (), BitBltLine (), DestroyHardware (); extern void HardUpdate (), UpdateControl (); extern Matrix DeviceMatrix (); extern void RasterTile (), BitBltTrapezoid (); extern int IsWindowHardware (), TransferSize (); extern void SetTransfer (); extern void Paint (), PaintLine (), PaintTrapezoid (); extern int ScreenSize (); extern void BuildScreen (), SetScreen (); extern DevicePoint NewDevicePoint (); # 5 "device.h" struct device { Matrix default_matrix; Path default_clip; int link_count; struct hardware *dev; }; extern struct device *NewDevice (), *NewCacheDevice (), *LinkDevice (), *DeviceFrom (), *UniqueDevice (); extern struct device *NewBitmapDevice (); # 5 "graphics.h" # 1 "point.h" typedef struct point { float x, y; } Point; extern Matrix PointTranslate (); extern Point NewPoint (), IntToExt (), MovePoint (); extern int MoveTo (), LineTo (); extern Object AssignMatrix (); # 6 "graphics.h" # 1 "font.h" extern Object Fid, FD, FontMatrix, FontType, Encoding, FontBBox, FontName; extern Object UserShow, CharStrings, Metrics; # 7 "graphics.h" struct show_context { char InShow; char space; Point Width; HardPoint shim, space_shim; Object CharName; struct cache *ccache; Matrix mat; }; struct state { Matrix CTM; Colour colour; HardPoint cp; int cp_defined; Path path; Path clip; Object font; float line_width; int line_cap; int line_join; struct { float frequency, rotation, *thresh; int count; Object spot_function; } screen; struct { Object transfn; float *tran; int tcount; } transfer; int flatness; float miter_limit; float dash_offset, dash_array [11 ]; int dash_length; struct device *device; struct show_context *show; struct device *clipdevice; }; extern struct state *gstate; extern int stroke_method, fill_method; # 13 "device.c" static int NullDevice (); static int FrameDevice (); static int GrabBits (); Colour Black = { 0.0, 0.0, 0.0 }, White = { 0.0, 0.0, 1.0 }; struct device *NewWindowDevice (), *NewBitmapDevice (), *NewCacheDevice (); InitDevices () { struct hardware *h; DevicePoint extent; InstallOp ("framedevice", FrameDevice, 4, 0, 0, 0, Array, Integer, Integer, Array); InstallOp ("nulldevice", NullDevice, 0, 0, 0, 0); InstallOp ("grabbits", GrabBits, 4, 0, 0, 0, Float, Float, Float, Float); extent = HardwareExtent (h = InitHardware ()); gstate->device = 0 ; gstate->clipdevice = 0 ; SetDevice (LinkDevice (DeviceFrom (h, DeviceMatrix (extent.dx, extent.dy)))); } static int GrabBits (x, y, w, h) Object x, y, w, h; { HardPoint origin, corner, extent; int width, height, size; char *s; struct hardware *dev; origin = ExtToInt (NewPoint (BodyReal (x), BodyReal (y))); corner = ExtToInt (NewPoint (BodyReal (x) + BodyReal (w), BodyReal (y) + BodyReal (h))); width = corner.hx - origin.hx; height = corner.hy - origin.hy; fprintf ((&_iob[2]) , "width = %d, height = %d\n", width, height); extent = NewHardPoint ((float) width, (float) height); dev = NewBitmapHardware (width, height); BitBlt (gstate->device->dev, dev, NewDevicePoint ((int) origin.hx, (int) origin.hy), NewDevicePoint (0, 0), NewDevicePoint ((int) extent.hx, (int) extent.hy), 3 ); s = StringFromHardware (dev); DestroyHardware (dev); size = (width + 7) / 8 * height; (((OpStack)->stack_fill != (OpStack)->stack_size) ? ((OpStack)->stack_body[(OpStack)->stack_fill] = ( MakeString (s, size)), (OpStack)->stack_fill++, 1 ) : 0 ) ; Free (s); (((OpStack)->stack_fill != (OpStack)->stack_size) ? ((OpStack)->stack_body[(OpStack)->stack_fill] = ( MakeInteger (width)), (OpStack)->stack_fill++, 1 ) : 0 ) ; (((OpStack)->stack_fill != (OpStack)->stack_size) ? ((OpStack)->stack_body[(OpStack)->stack_fill] = ( MakeInteger (height)), (OpStack)->stack_fill++, 1 ) : 0 ) ; return 1 ; } static int NullDevice () { SetDevice ( NewDevice ( NewClipPath (0.0, 0.0, 0.0, 0.0), NewMatrix (1.0, 0.0, 0.0, 1.0, 0.0, 0.0), (struct hardware *) 0 )); return 1 ; } static int FrameDevice (mat, width, height, proc) Object mat, width, height, proc; { Matrix m; if (lengthArray (mat) != 6 || !ExtractMatrix (&m, mat)) return Error (PTypeCheck); if (BodyInteger (width) < 0 || BodyInteger (height) < 0) return Error (PRangeCheck); SetDevice (NewWindowDevice (BodyInteger (width) * 8, BodyInteger (height), m)); ErasePage (); return 1 ; } struct device *DeviceFrom (h, m) struct hardware *h; Matrix m; { DevicePoint extent; extent = HardwareExtent (h); return NewDevice ( NewClipPath (0.0, (float) extent.dx, (float) extent.dy, 0.0), m, h); } struct device *NewWindowDevice (width, height, m) int width, height; Matrix m; { return DeviceFrom (NewWindowHardware (width, height), m); } struct device *NewBitmapDevice (width, height, m) int width, height; Matrix m; { return DeviceFrom (NewBitmapHardware (width, height), m); } struct device *NewCacheDevice (m, width, height, swidth, sheight) Matrix m; int width, height, swidth, sheight; { return NewDevice ( NewClipPath (0.0, (float) width, (float) height, 0.0), NewMatrix (m.A, m.B, m.C, m.D, (float) swidth, (float) height - sheight), NewBitmapHardware (width, height)); } Path NewClipPath (left, right, top, bottom) float left, right, top, bottom; { Path p = NewPath (); HardPoint cp; int cp_def = gstate->cp_defined; cp = gstate->cp; (void) MoveTo (p, NewHardPoint (left, bottom)); (void) LineTo (p, NewHardPoint (right, bottom)); (void) LineTo (p, NewHardPoint (right, top)); (void) LineTo (p, NewHardPoint (left, top)); ClosePath (p); gstate->cp = cp; gstate->cp_defined = cp_def; return p; } struct device *NewDevice (clip, m, dev) Path clip; Matrix m; struct hardware *dev; { struct device *res = (struct device *) Malloc (sizeof (struct device)); res->link_count = 0; res->default_clip = clip; res->default_matrix = m; res->dev = dev; return res; } SetDevice (d) struct device *d; { UnlinkDevice (gstate->device); gstate->device = LinkDevice (d); gstate->CTM = d->default_matrix; InitClip (); } int IsCache (d) struct device *d; { return !IsWindowHardware (d->dev); } struct device *LinkDevice (d) struct device *d; { if (d) ++d->link_count; return d; } UnlinkDevice (d) struct device *d; { if (d == 0 ) return; if (--d->link_count != 0) return; if (d->dev != 0 ) DestroyHardware (d->dev); Free ((char *) d); } struct device *UniqueDevice (d) struct device *d; { struct device *res; DevicePoint ex; if (d && d->link_count == 1) return d; ex = HardwareExtent (gstate->device->dev); res = LinkDevice (NewBitmapDevice (ex.dx, ex.dy, gstate->CTM)); BitBlt (0 , res->dev, NewDevicePoint (0, 0), NewDevicePoint (0, 0), ex, 0 ); return res; } DevicePoint NewDevicePoint (x, y) int x, y; { DevicePoint res; res.dx = x; res.dy = y; return res; } DevicePoint HardToDevice (p) HardPoint p; { return NewDevicePoint ((int) p.hx, (int) p.hy); } DevicePaintLine (d, fromPoint, toPoint, colour) struct device *d; HardPoint fromPoint, toPoint; Colour colour; { PaintLine (d->dev, HardToDevice (fromPoint), HardToDevice (toPoint), colour); }