home *** CD-ROM | disk | FTP | other *** search
- /*
- * lem.h - lone include file for lem(ming) editor
- *
- * copyright (c) by Alan W. Paeth, 1987. All rights reserved.
- */
-
- #include <stdio.h>
- #include <strings.h>
- #include <ctype.h>
-
- #define VERNO 1
-
- /*
- * useful arithmetic functions
- */
-
- #define MIN(a,b) ((a)<(b)?(a):(b))
- #define MAX(a,b) ((a)>(b)?(a):(b))
- #define ABS(a) ((a)>0?(a):(-(a)))
- #define C(a) ('a'&0x1f)
- #define UC(c) (islower((c)) ? toupper((c)) : (c))
-
- typedef struct
- {
- char stat; /* DEL, UNDEL, SEL */
- char group; /* group id (or zero) */
- char type; /* LINE, TEXT, ELLI, BOX */
- char align; /* ALIGNLEFT, ALIGNRGHT, ALIGNCENT */
- char emph; /* EMPHNONE, EMPHBOLD, EMPHITAL */
- char size; /* 1..10 */
- short x0, y0, x1, y1; /* screen coordinates/bounding box */
- char *text; /* string pointer if text */
- } *pel, el;
-
- /*
- * object macros
- */
-
- #define forobjects for(i=1; i<lastobj; i++)
- #define forobjsrev for(i=lastobj-1; i>0; i--)
- #define o objs[i]
-
- /*
- * field access
- */
-
- #define Ostat (o->stat)
- #define Ogroup (o->group)
- #define Otype (o->type)
- #define Oalign (o->align)
- #define Oemph (o->emph)
- #define Osize (o->size)
- #define Osizer ((Osize >= rclen) ? 1 : Osize)
- #define Otext (o->text)
- #define Oxs (o->x0)
- #define Oys (o->y0)
- #define Oxe (o->x1)
- #define Oye (o->y1)
-
- /*
- * derived field access
- */
-
- #define Ox ((o->x0+o->x1+1)/2)
- #define Oy ((o->y0+o->y1+1)/2)
- #define Ow (o->x1-o->x0)
- #define Oh (o->y1-o->y0)
- #define Oxl (MIN(o->x0,o->x1))
- #define Oyl (MIN(o->y0,o->y1))
- #define Oxh (MAX(o->x0,o->x1))
- #define Oyh (MAX(o->y0,o->y1))
-
- #define Oxlt (Oalign==ALIGNCENT ? Oxs-Oxe/2:(Oalign==ALIGNLEFT ? Oxs:Oxs-Oxe))
- #define Oylt (Oys-Oye/2)
- /* (Oalign==ALIGNCENT ? Oyl : (Oalign==ALIGNLEFT ? Oy : Oy-Oh)) */
- #define Oxht (Oxlt+Oxe)
- #define Oyht (Oylt+Oye)
- #define Oxcen (Otype==TEXT ? Oxs : Ox)
- #define Oycen (Otype==TEXT ? Oys : Oy)
-
- #define Osel (o->stat == SEL)
- #define Oundel (o->stat == UNDEL)
- #define Odel (o->stat == DEL)
- #define Onotdel (o->stat != DEL)
-
- /*
- * bounds limits
- */
-
- #define MAXOBJS 2000
- #define MAXCHAR 60
-
- /*
- * .lemrc information
- */
-
- typedef struct
- {
- int psize;
- int thick;
- char *dsp;
- char *tyr;
- char *tyb;
- char *tyi;
- char *psr;
- char *psb;
- char *psi;
- } *pfontdir, fontdir;
-
-
- /*
- * file name (conventions)
- */
-
- #define RCNAME ".lemrc"
- #define LEMEXTN "lem"
-
- /*
- * initialization defaults (for .rc file in lemrc.c)
- */
-
- #define RCLINE 120
- #define RCLEN 10
- #define RCWIDTH 9
-
- #define DEFPSIZEFT 12
- #define DEFDENSEFT 1.0
- #define DEFIKRFT "TimesRoman"
- #define DEFTYRFT "TR"
- #define DEFTYBFT "TB"
- #define DEFTYIFT "TB"
- #define DEFPSRFT "Times-Roman"
- #define DEFPSBFT "Times-Bold"
- #define DEFPSIFT "Times-Italic"
-
- /*
- * system color aliases
- */
-
- #define DRAWCOL cwhite
- #define SELECTCOL cred
- #define ERASECOL cblack
- #define MARKONOBJCOL cred
- #define MARKONREGCOL cgreen
- #define HELPCOL cgreen
- #define MARKOFFCOL cblack
- #define TICKONCOL cwhite
- #define TICKOFFCOL cblack
-
- /*
- * event types
- */
-
- #define NOEVT 0
- #define ALPHA 1
- #define CNTRL 2
- #define MOUSE 3
-
- /*
- * geometric tolerances
- */
-
- #define ENDTOL 5 /* near endpoints of lines */
- #define MARKTOL 5 /* near a mark */
- #define DRAGTOL 5 /* dragging otherwise */
- #define FLATTOL 15 /* rectilinear lines */
- #define SELTOL 15 /* near selection points */
- #define SHRTTOL 5 /* lines may not be (entered) any shorter */
- #define LINETOL 5 /* perp distance to a line */
- #define TEXTTOL 0 /* text bounding box extra margins (usually no slop) */
- #define SPLTTOL 3 /* do not split lines <^K> if made this short */
-
- #define TUGPROX 2 /* when towing objects */
- #define ARROWLEN 8 /* arrowhead length */
- #define MINTICK 8 /* minimum VISIBLE tick spacing */
- #define DEFCOPYWID 16 /* default copy width when gridding is off */
-
- /*
- * type modes
- */
-
- #define LINE 'L'
- #define TEXT 'T'
- #define ELLI 'E'
- #define BOX 'B'
-
- /*
- * status modes
- */
-
- #define DEL 'D'
- #define UNDEL 'U'
- #define SEL 'S'
-
- /*
- * align modes
- */
-
- #define ALIGNLEFT 'L'
- #define ALIGNRGHT 'R'
- #define ALIGNCENT 'C'
-
- /*
- * emphasis modes
- */
-
- #define EMPHNONE 'N'
- #define EMPHBOLD 'B'
- #define EMPHITAL 'I'
-
- /*
- * define system font (for help text and unknown fonts)
- */
-
- #define SYSFONT 1
-
- /*
- * generic object operations
- */
-
- #define SELECT 1
- #define DESELECT 2
- #define DELETE 3
- #define UNDELETE 4
-
- /*
- * undo flags
- */
-
- #define UNDOMOVE 'M'
- #define UNDOTUG 'T'
- #define UNDOAFF 'A'
- #define UNDODEL 'D'
- #define UNDONONE 'N'
-
- /*
- * application specific
- */
-
- #define MARKSIZE 2
-
- /*
- * externals (see also lemglobal.c)
- */
-
- extern char *firstfile;
- extern int displayon;
-
- extern int screenw, screenh, cred, cgreen, cblack, cwhite;
- extern int changes, tickflag, ticksize, tickdot, tx, ty, txoff, tyoff;
- extern int markx, marky, markon, markobj;
- extern int anysel;
- extern char gtype, galign, gemph, gsize;
-
- extern char undo;
- extern int unx, uny, unxe, unye;
- extern float un11, un12, un21, un22;
-
- extern int fontsize[RCLEN];
- extern char *picfont[RCLEN], *postfont[RCLEN], *xfont[RCLEN], *ikfont[RCLEN];
- extern float rval[RCLEN], gval[RCLEN], bval[RCLEN];
-
- extern pel objs[MAXOBJS];
- extern int lastobj;
-
- extern fontdir lemfont[RCLEN];
-
- extern int rclen;
-
- extern char line[MAXCHAR], msgtext[MAXCHAR], prompttext[MAXCHAR];
-
- /*
- * forward refenreces
- */
-
- char *salloc(), *prompt(), getstroke();
-