/* %Z% %M% version %I% %Q%of %H% %T% Last Delta: %G% %U% to %P% */ #include <stdio.h> #include <jerq.h> #define abs(A) ((A)<0 ? -(A) : (A)) #define isletter(C) ((C>='a' && (C)<='z') || (C>='A' && (C)<='Z')) #define isdigit(C) (C>='0' && (C)<='9') #define MOUSE_XY (sub(mouse.xy, Pt(1,1))) #define BORDER 4 #define BrushSize 60 /* Height of brush frame */ #define ButSize 60 /* Height of button frame */ #define LW 2 /* line width for frame boxes */ #define MW 5 /* Margin width between frames*/ #define Xmin BORDER /* left edge of frame */ #define Xmax (Drect.corner.x - BORDER) /* right edge of frame */ #define XPicSize (Drect.corner.x - 2 * (LW + BORDER)) /* Width of Pic frame */ #define Ymin BORDER /* top of frame */ #define Ymax (Drect.corner.y - BORDER) /* bottom of frame */ #define YBR (Ymin+LW+MW+BrushSize+LW) /* bottom of brush frame */ #define YPIC (YBR+MW) /* top of drawing frame */ #define Ybut (Ymax - ButSize - 2 * LW) /* Top of button frame */ #define YBOT (Ybut - MW) /* bottom of drawing frame */ #define YPicSize (YBOT - YPIC) /* Height of Pic frame */ #define YCEN ((YBR+Ymin)>>1) /* center line of brush area */ #define Xbut (((Xmax-Xmin)<<1)/3) #define XeditD ((Xmax-Xmin)/2) #define Xtext (Xmin+LW) #define Ytext (Ybut+ButSize/6) #define butHt min(((ButSize-(LW<<2))/3), ((Xmax-Xbut-(3*LW))/18)) #define TNULL (struct thing *)0 #define CIRCLE 0 #define BOX 1 #define ELLIPSE 2 #define LINE 3 #define ARC 4 #define SPLINE 5 #define TEXT 6 #define MACRO 7 #define REVLINE 8 /* Special case for spline editing only! */ #define NUMBR 7 #define DXBR ((Xmax-Xmin)/NUMBR) #define MAXTEXT 100 #define MAXNAMESIZE 64 #define PIC NUMBR #define ED PIC+1 #define BRUSH PIC+1 #define GROWCIRCLE BRUSH+1 #define MOVE BRUSH+2 #define GROWEWID BRUSH+3 #define GROWEHT BRUSH+4 #define RADdefault ((Xmax-Xmin)/24) #define WIDdefault ((Xmax-Xmin)/8) #define HTdefault ((Xmax-Xmin)/12) #define nearlyStraight 5 #define nearEDGE 5 #define nearPT 8 #define SOLID 0 #define DASHED 1 #define DOTTED 2 #define startARROW 1 #define endARROW 2 #define doubleARROW 3 #define ROMAN 1 #define ITALIC 2 #define BOLD 3 #define DEFONT 4 #define CENTER 0 #define LEFTJUST 1 #define RIGHTJUST 2 #define POINTSIZE 10 #define GRIDon 1 #define GRIDoff 0 #define WHITEfield 1 #define BLACKfield 0 #define INITbuttons 0 #define DRAWbuttons 1 #define EDITbuttons 2 #define SPLINEbuttons 3 #define BLANKbuttons 4 #define MACRObuttons 5 #define COPYbuttons 6 #define MOVEbuttons 7 #define QUITbuttons 8 #define READbuttons 9 #define numButtonStates 10 #define fontBlk struct FONTBlk struct FONTBlk { short ps, num, useCount; Font *f; fontBlk *next, *last; }; typedef struct { Point start, end; } pointPair; typedef struct { short ht, wid; } intPair; typedef struct { short used, size; Point *plist } pointStream; typedef struct { short just; char *s; fontBlk *f; } textString; struct macro { char *name; short outName; short useCount; Rectangle bb; struct thing *parts; struct macro *next; struct macro *xReflectionOf, *yReflectionOf; }; struct thing { short type; Point origin; Rectangle bb; union { short brush; short radius; Point corner; Point end; pointPair arc; intPair ellipse; textString text; pointStream spline; struct macro *list; } otherValues; short arrow, boorder; struct thing *next, *last; }; extern fontBlk *fonts; extern Rectangle *Select(); extern Rectangle moveBox(); extern Rectangle macroBB(); extern Rectangle canon(); extern struct macro *recordMacro(); extern struct thing *newCircle(); extern struct thing *newBox(); extern struct thing *newEllipse(); extern struct thing *newLine(); extern struct thing *newArc(); extern struct thing *newText(); extern struct thing *newSpline(); extern struct thing *newMacro(); extern struct thing *selectThing(); extern struct thing *copyThing(); extern struct thing *deleteThing(); extern struct thing *deleteAllThings(); extern struct thing *insert(); extern struct thing *remove(); extern struct thing *doMouseButtons(); extern struct thing *place(); extern struct thing *displayCommandMenu(); extern struct thing *displayThingMenu(); extern struct thing *doGet(); extern struct thing *doClear(); extern struct thing *defineMacro(); extern struct thing *makeRelative(); extern struct thing *reflect(); extern Point track(); extern Point track2(); extern Point computeArcOrigin(); extern Point near(); extern Point jchar(); extern Point PtCurrent; extern char *getString(); extern char *getSpace(); extern FILE *popen(); extern fontBlk *findFont(); extern xtipple (); extern Cursor carrot, crossHairs, prompt, hourglass, pointsize, candle, rusure; extern Texture grid, plain, rvplain;