home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume10 / lemming / part01 / lem.h < prev    next >
Encoding:
C/C++ Source or Header  |  1987-08-05  |  5.2 KB  |  277 lines

  1. /*
  2.  * lem.h - lone include file for lem(ming) editor
  3.  *
  4.  * copyright (c) by Alan W. Paeth, 1987. All rights reserved.
  5.  */
  6.  
  7. #include <stdio.h>
  8. #include <strings.h>
  9. #include <ctype.h>
  10.  
  11. #define VERNO 1
  12.  
  13. /*
  14.  * useful arithmetic functions
  15.  */
  16.  
  17. #define MIN(a,b) ((a)<(b)?(a):(b))
  18. #define MAX(a,b) ((a)>(b)?(a):(b))
  19. #define ABS(a) ((a)>0?(a):(-(a)))
  20. #define C(a) ('a'&0x1f)
  21. #define UC(c) (islower((c)) ? toupper((c)) : (c))
  22.  
  23. typedef struct
  24.     {
  25.     char stat;            /* DEL, UNDEL, SEL */
  26.     char group;            /* group id (or zero) */
  27.     char type;            /* LINE, TEXT, ELLI, BOX */
  28.     char align;            /* ALIGNLEFT, ALIGNRGHT, ALIGNCENT */
  29.     char emph;            /* EMPHNONE, EMPHBOLD, EMPHITAL */
  30.     char size;            /* 1..10 */
  31.     short x0, y0, x1, y1;    /* screen coordinates/bounding box */
  32.     char *text;            /* string pointer if text */
  33.     } *pel, el;
  34.  
  35. /*
  36.  * object macros
  37.  */
  38.  
  39. #define forobjects for(i=1; i<lastobj; i++)
  40. #define forobjsrev for(i=lastobj-1; i>0; i--)
  41. #define o objs[i]
  42.  
  43. /*
  44.  * field access
  45.  */
  46.  
  47. #define Ostat (o->stat)
  48. #define Ogroup (o->group)
  49. #define Otype (o->type)
  50. #define Oalign (o->align)
  51. #define Oemph (o->emph)
  52. #define Osize (o->size)
  53. #define Osizer ((Osize >= rclen) ? 1 : Osize)
  54. #define Otext (o->text)
  55. #define Oxs (o->x0)
  56. #define Oys (o->y0)
  57. #define Oxe (o->x1)
  58. #define Oye (o->y1)
  59.  
  60. /*
  61.  * derived field access
  62.  */
  63.  
  64. #define Ox ((o->x0+o->x1+1)/2)
  65. #define Oy ((o->y0+o->y1+1)/2)
  66. #define Ow (o->x1-o->x0)
  67. #define Oh (o->y1-o->y0)
  68. #define Oxl (MIN(o->x0,o->x1))
  69. #define Oyl (MIN(o->y0,o->y1))
  70. #define Oxh (MAX(o->x0,o->x1))
  71. #define Oyh (MAX(o->y0,o->y1))
  72.  
  73. #define Oxlt (Oalign==ALIGNCENT ? Oxs-Oxe/2:(Oalign==ALIGNLEFT ? Oxs:Oxs-Oxe))
  74. #define Oylt (Oys-Oye/2)
  75. /* (Oalign==ALIGNCENT ? Oyl : (Oalign==ALIGNLEFT ? Oy : Oy-Oh)) */
  76. #define Oxht (Oxlt+Oxe)
  77. #define Oyht (Oylt+Oye)
  78. #define Oxcen (Otype==TEXT ? Oxs : Ox)
  79. #define Oycen (Otype==TEXT ? Oys : Oy)
  80.  
  81. #define Osel (o->stat == SEL)
  82. #define Oundel (o->stat == UNDEL)
  83. #define Odel (o->stat == DEL)
  84. #define Onotdel (o->stat != DEL)
  85.  
  86. /*
  87.  * bounds limits
  88.  */
  89.  
  90. #define MAXOBJS 2000
  91. #define MAXCHAR 60
  92.  
  93. /*
  94.  * .lemrc information
  95.  */
  96.  
  97. typedef struct
  98.     {
  99.     int psize;
  100.     int thick;
  101.     char *dsp;
  102.     char *tyr;
  103.     char *tyb;
  104.     char *tyi;
  105.     char *psr;
  106.     char *psb;
  107.     char *psi;
  108.     } *pfontdir, fontdir;
  109.  
  110.  
  111. /*
  112.  * file name (conventions)
  113.  */
  114.   
  115. #define RCNAME  ".lemrc"
  116. #define LEMEXTN "lem"
  117.  
  118. /*
  119.  * initialization defaults (for .rc file in lemrc.c)
  120.  */
  121.  
  122. #define RCLINE 120
  123. #define RCLEN 10
  124. #define RCWIDTH 9
  125.  
  126. #define DEFPSIZEFT 12
  127. #define DEFDENSEFT 1.0
  128. #define DEFIKRFT "TimesRoman"
  129. #define DEFTYRFT "TR"
  130. #define DEFTYBFT "TB"
  131. #define DEFTYIFT "TB"
  132. #define DEFPSRFT "Times-Roman"
  133. #define DEFPSBFT "Times-Bold"
  134. #define DEFPSIFT "Times-Italic"
  135.  
  136. /*
  137.  * system color aliases
  138.  */
  139.  
  140. #define DRAWCOL cwhite
  141. #define SELECTCOL cred
  142. #define ERASECOL cblack
  143. #define MARKONOBJCOL cred
  144. #define MARKONREGCOL cgreen
  145. #define HELPCOL cgreen
  146. #define MARKOFFCOL cblack
  147. #define TICKONCOL cwhite
  148. #define TICKOFFCOL cblack
  149.  
  150. /*
  151.  * event types
  152.  */
  153.  
  154. #define NOEVT 0
  155. #define ALPHA 1
  156. #define CNTRL 2
  157. #define MOUSE 3
  158.  
  159. /*
  160.  * geometric tolerances
  161.  */
  162.  
  163. #define ENDTOL  5    /* near endpoints of lines */
  164. #define MARKTOL 5    /* near a mark */
  165. #define DRAGTOL 5    /* dragging otherwise */
  166. #define FLATTOL 15    /* rectilinear lines */
  167. #define SELTOL  15    /* near selection points */
  168. #define SHRTTOL 5    /* lines may not be (entered) any shorter */
  169. #define LINETOL 5    /* perp distance to a line */
  170. #define TEXTTOL 0    /* text bounding box extra margins (usually no slop) */
  171. #define SPLTTOL 3    /* do not split lines <^K> if made this short */
  172.  
  173. #define TUGPROX 2    /* when towing objects */
  174. #define ARROWLEN 8    /* arrowhead length */
  175. #define MINTICK 8    /* minimum VISIBLE tick spacing */
  176. #define DEFCOPYWID 16    /* default copy width when gridding is off */
  177.  
  178. /*
  179.  * type modes
  180.  */
  181.  
  182. #define LINE 'L'
  183. #define TEXT 'T'
  184. #define ELLI 'E'
  185. #define BOX  'B'
  186.  
  187. /*
  188.  * status modes
  189.  */
  190.  
  191. #define DEL 'D'
  192. #define UNDEL 'U'
  193. #define SEL 'S'
  194.  
  195. /*
  196.  * align modes
  197.  */
  198.  
  199. #define ALIGNLEFT 'L'
  200. #define ALIGNRGHT 'R'
  201. #define ALIGNCENT 'C'
  202.  
  203. /*
  204.  * emphasis modes
  205.  */
  206.  
  207. #define EMPHNONE 'N'
  208. #define EMPHBOLD 'B'
  209. #define EMPHITAL 'I'
  210.  
  211. /*
  212.  * define system font (for help text and unknown fonts)
  213.  */
  214.  
  215. #define SYSFONT 1
  216.  
  217. /*
  218.  * generic object operations
  219.  */
  220.  
  221. #define SELECT 1
  222. #define DESELECT 2
  223. #define DELETE 3
  224. #define UNDELETE 4
  225.  
  226. /*
  227.  * undo flags
  228.  */
  229.  
  230. #define UNDOMOVE 'M'
  231. #define UNDOTUG 'T'
  232. #define UNDOAFF 'A'
  233. #define UNDODEL 'D'
  234. #define UNDONONE 'N'
  235.  
  236. /*
  237.  * application specific
  238.  */
  239.  
  240. #define MARKSIZE 2
  241.  
  242. /*
  243.  * externals (see also lemglobal.c)
  244.  */
  245.  
  246. extern char *firstfile;
  247. extern int displayon;
  248.  
  249. extern int screenw, screenh, cred, cgreen, cblack, cwhite;
  250. extern int changes, tickflag, ticksize, tickdot, tx, ty, txoff, tyoff;
  251. extern int markx, marky, markon, markobj;
  252. extern int anysel;
  253. extern char gtype, galign, gemph, gsize;
  254.  
  255. extern char undo;
  256. extern int unx, uny, unxe, unye;
  257. extern float un11, un12, un21, un22;
  258.  
  259. extern int fontsize[RCLEN];
  260. extern char *picfont[RCLEN], *postfont[RCLEN], *xfont[RCLEN], *ikfont[RCLEN];
  261. extern float rval[RCLEN], gval[RCLEN], bval[RCLEN];
  262.  
  263. extern pel objs[MAXOBJS];
  264. extern int lastobj;
  265.  
  266. extern fontdir lemfont[RCLEN];
  267.  
  268. extern int rclen;
  269.  
  270. extern char line[MAXCHAR], msgtext[MAXCHAR], prompttext[MAXCHAR];
  271.  
  272. /*
  273.  * forward refenreces
  274.  */
  275.  
  276. char *salloc(), *prompt(), getstroke();
  277.