1 /*	SC	A Table Calculator
2  *		Common definitions
3  *
4  *		original by James Gosling, September 1982
5  *		modified by Mark Weiser and Bruce Israel,
6  *			University of Maryland
7  *		R. Bond  12/86
8  *		More mods by Alan Silverstein, 3-4/88, see list of changes.
9  *		$Revision: 7.16 $
10  *
11  */
12 
13 #ifdef MSDOS
14 #include <stdio.h>
15 #endif
16 
17 #define	ATBL(tbl, row, col)	(*(tbl + row) + (col))
18 
19 #define MINROWS 100 	/* minimum size at startup */
20 #define MINCOLS 30
21 #define	ABSMAXCOLS 702	/* absolute cols: ZZ (base 26) */
22 
23 #define CRROWS 1
24 #define CRCOLS 2
25 #define RESROW 3 /* rows reserved for prompt, error, and column numbers */
26 
27 /* formats for engformat() */
28 #define REFMTFIX	0
29 #define REFMTFLT	1
30 #define REFMTENG	2
31 #define REFMTDATE	3
32 #define REFMTLDATE	4
33 
34 #define DEFWIDTH 10	/* Default column width and precision */
35 #define DEFPREC   2
36 #define DEFREFMT  REFMTFIX /* Make default format fixed point  THA 10/14/90 */
37 
38 #define FKEYS		 24	/* Number of function keys available */
39 #define HISTLEN		100	/* Number of history entries for vi emulation */
40 #define CPAIRS		  8	/* Number of color pairs available */
41 #define COLFORMATS	 10	/* Number of custom column formats */
42 #define DELBUFSIZE	 40	/* Number of named buffers + 4 */
43 #ifdef PSC
44 # define error(msg)	fprintf(stderr, msg);
45 #else
46 # define error isatty(fileno(stdout)) && !move(1,0) && !clrtoeol() && printw
47 #endif
48 #define	FBUFLEN	1024	/* buffer size for a single field */
49 #define	PATHLEN	1024	/* maximum path length */
50 
51 #ifndef DFLT_PAGER
52 #define	DFLT_PAGER "more"	/* more is probably more widespread than less */
53 #endif /* DFLT_PAGER */
54 
55 #define MAXCMD 160	/* for ! command and commands that use the pager */
56 
57 
58 #ifndef A_CHARTEXT	/* Should be defined in curses.h */
59 #define A_CHARTEXT 0xff
60 #endif
61 
62 #ifndef color_set
63 #define color_set(c, o)		attron(COLOR_PAIR(c))
64 #endif
65 
66 #if !defined(attr_get) || defined(NCURSES_VERSION) && NCURSES_VERSION_MAJOR < 5
67 #undef attr_get
68 #define attr_get(a, p, o)	((void)((a) != 0 && (*(a) = stdscr->_attrs)), \
69 				(void)((p) != 0 && \
70 				(*(p) = PAIR_NUMBER(stdscr->_attrs))), OK)
71 #endif
72 
73 #if (defined(BSD42) || defined(BSD43)) && !defined(strrchr)
74 #define strrchr rindex
75 #endif
76 
77 #if (defined(BSD42) || defined(BSD43)) && !defined(strchr)
78 #define strchr index
79 #endif
80 
81 #ifdef SYSV4
82 size_t	strlen();
83 #endif
84 
85 #ifndef FALSE
86 # define	FALSE	0
87 # define	TRUE	1
88 #endif /* !FALSE */
89 
90 /*
91  * ent_ptr holds the row/col # and address type of a cell
92  *
93  * vf is the type of cell address, 0 non-fixed, or bitwise OR of FIX_ROW or
94  *	FIX_COL
95  * vp : we just use vp->row or vp->col, vp may be a new cell just for holding
96  *	row/col (say in gram.y) or a pointer to an existing cell
97  */
98 struct ent_ptr {
99     int vf;
100     struct ent *vp;
101 };
102 
103 /* holds the beginning/ending cells of a range */
104 struct range_s {
105     struct ent_ptr left, right;
106 };
107 
108 /*
109  * Some not too obvious things about the flags:
110  *    is_valid means there is a valid number in v.
111  *    is_locked means that the cell cannot be edited.
112  *    is_label set means it points to a valid constant string.
113  *    is_strexpr set means expr yields a string expression.
114  *    If is_strexpr is not set, and expr points to an expression tree, the
115  *        expression yields a numeric expression.
116  *    So, either v or label can be set to a constant.
117  *        Either (but not both at the same time) can be set from an expression.
118  */
119 
120 #define VALID_CELL(p, r, c) ((p = *ATBL(tbl, r, c)) && \
121 			     ((p->flags & is_valid) || p->label))
122 
123 /* info for each cell, only alloc'd when something is stored in a cell */
124 struct ent {
125     double v;			/* v && label are set in EvalAll() */
126     char *label;
127     struct enode *expr;		/* cell's contents */
128     short flags;
129     short row, col;
130     short nrow, ncol;		/* link to note */
131     short nlastrow, nlastcol;
132     struct ent *next;		/* next deleted ent (pulled, deleted cells) */
133     char *format;		/* printf format for this cell */
134     char cellerror;		/* error in a cell? */
135 };
136 
137 #define FIX_ROW 1
138 #define FIX_COL 2
139 
140 /* stores type of operation this cell will perform */
141 struct enode {
142     int op;
143     union {
144 	int gram_match;         /* some compilers (hp9000ipc) need this */
145 	double k;		/* constant # */
146 	struct ent_ptr v;	/* ref. another cell */
147 	struct range_s r;	/* op is on a range */
148 	char *s;		/* string part of a cell */
149 	struct {		/* other cells use to eval()/seval() */
150 	    struct enode *left, *right;
151 	    char *s;		/* previous value of @ext function in case */
152 	} o;			/*	external functions are turned off */
153     } e;
154 };
155 
156 /* stores a range (left, right) */
157 struct range {
158     struct ent_ptr r_left, r_right;
159     char *r_name;			/* possible name for this range */
160     struct range *r_next, *r_prev;	/* chained ranges */
161     int r_is_range;
162 };
163 
164 /* stores a framed range (left, right) */
165 struct frange {
166     struct ent *or_left, *or_right;	/* outer range */
167     struct ent *ir_left, *ir_right;	/* inner range */
168     struct frange *r_next, *r_prev;	/* chained ranges */
169 };
170 
171 /* stores a color range (left, right) */
172 struct crange {
173     struct ent *r_left, *r_right;
174     int r_color;
175     struct crange *r_next, *r_prev;	/* chained ranges */
176 };
177 
178 struct colorpair {
179     int fg;
180     int bg;
181     struct enode *expr;
182 };
183 
184 /* stores an abbreviation and its expansion */
185 struct abbrev {
186     char *abbr;
187     char *exp;
188     struct abbrev *a_next, *a_prev;
189 };
190 
191 struct impexfilt {
192     char ext[PATHLEN];
193     char plugin[PATHLEN];
194     char type;
195     struct impexfilt *next;
196 };
197 
198 /* Use this structure to save the last 'g' command */
199 struct go_save {
200     int		g_type;
201     double	g_n;
202     char	*g_s;
203     int		g_row;
204     int		g_col;
205     int		g_lastrow;
206     int		g_lastcol;
207     int		strow;
208     int		stcol;
209     int		stflag;
210     int		errsearch;
211 };
212 
213 /* op values */
214 #define O_VAR 'v'
215 #define O_CONST 'k'
216 #define O_ECONST 'E'	/* constant cell w/ an error */
217 #define O_SCONST '$'
218 #define REDUCE 0200	/* Or'ed into OP if operand is a range */
219 
220 #define OP_BASE 256
221 #define ACOS (OP_BASE + 0)
222 #define ASIN (OP_BASE + 1)
223 #define ATAN (OP_BASE + 2)
224 #define CEIL (OP_BASE + 3)
225 #define COS (OP_BASE + 4)
226 #define EXP (OP_BASE + 5)
227 #define FABS (OP_BASE + 6)
228 #define FLOOR (OP_BASE + 7)
229 #define HYPOT (OP_BASE + 8)
230 #define LOG (OP_BASE + 9)
231 #define LOG10 (OP_BASE + 10)
232 #define POW (OP_BASE + 11)
233 #define SIN (OP_BASE + 12)
234 #define SQRT (OP_BASE + 13)
235 #define TAN (OP_BASE + 14)
236 #define DTR (OP_BASE + 15)
237 #define RTD (OP_BASE + 16)
238 #define SUM (OP_BASE + 17)
239 #define PROD (OP_BASE + 18)
240 #define AVG (OP_BASE + 19)
241 #define COUNT (OP_BASE + 20)
242 #define STDDEV (OP_BASE + 21)
243 #define MAX (OP_BASE + 22)
244 #define MIN (OP_BASE + 23)
245 #define RND (OP_BASE + 24)
246 #define HOUR (OP_BASE + 25)
247 #define MINUTE (OP_BASE + 26)
248 #define SECOND (OP_BASE + 27)
249 #define MONTH (OP_BASE + 28)
250 #define DAY (OP_BASE + 29)
251 #define YEAR (OP_BASE + 30)
252 #define NOW (OP_BASE + 31)
253 #define DATE (OP_BASE + 32)
254 #define FMT (OP_BASE + 33)
255 #define SUBSTR (OP_BASE + 34)
256 #define STON (OP_BASE + 35)
257 #define EQS (OP_BASE + 36)
258 #define EXT (OP_BASE + 37)
259 #define ELIST (OP_BASE + 38)	/* List of expressions */
260 #define LMAX  (OP_BASE + 39)
261 #define LMIN  (OP_BASE + 40)
262 #define NVAL (OP_BASE + 41)
263 #define SVAL (OP_BASE + 42)
264 #define PV (OP_BASE + 43)
265 #define FV (OP_BASE + 44)
266 #define PMT (OP_BASE + 45)
267 #define STINDEX (OP_BASE + 46)
268 #define LOOKUP (OP_BASE + 47)
269 #define ATAN2 (OP_BASE + 48)
270 #define INDEX (OP_BASE + 49)
271 #define DTS (OP_BASE + 50)
272 #define TTS (OP_BASE + 51)
273 #define ABS (OP_BASE + 52)
274 #define HLOOKUP (OP_BASE + 53)
275 #define VLOOKUP (OP_BASE + 54)
276 #define ROUND (OP_BASE + 55)
277 #define IF (OP_BASE + 56)
278 #define FILENAME (OP_BASE + 57)
279 #define MYROW (OP_BASE + 58)
280 #define MYCOL (OP_BASE + 59)
281 #define LASTROW (OP_BASE + 60)
282 #define LASTCOL (OP_BASE + 61)
283 #define COLTOA (OP_BASE + 62)
284 #define UPPER (OP_BASE + 63)
285 #define LOWER (OP_BASE + 64)
286 #define CAPITAL (OP_BASE + 65)
287 #define NUMITER (OP_BASE + 66)
288 #define ERR_ (OP_BASE + 67)
289 #define PI_ (OP_BASE + 68)
290 #define BLACK (OP_BASE + 69)
291 #define RED (OP_BASE + 70)
292 #define GREEN (OP_BASE + 71)
293 #define YELLOW (OP_BASE + 72)
294 #define BLUE (OP_BASE + 73)
295 #define MAGENTA (OP_BASE + 74)
296 #define CYAN (OP_BASE + 75)
297 #define WHITE (OP_BASE + 76)
298 
299 #undef is_cleared
300 #define is_valid     0001
301 #define is_changed   0002
302 #define is_strexpr   0004
303 #define is_leftflush 0010
304 #define is_deleted   0020
305 #define is_locked    0040
306 #define is_label     0100
307 #define is_cleared   0200
308 #define may_sync     0400
309 
310 /* cell error (1st generation (ERROR) or 2nd+ (INVALID)) */
311 #define	CELLOK		0
312 #define	CELLERROR	1
313 #define	CELLINVALID	2
314 
315 #define ctl(c) ((c)&037)
316 #define ESC 033
317 #define DEL 0177
318 
319 /* calculation order */
320 #define BYCOLS 1
321 #define BYROWS 2
322 
323 /* values for showrange for ranges of rows or columns */
324 #define SHOWROWS 2
325 #define SHOWCOLS 3
326 
327 /* tblprint style output for: */
328 #define	TBL	1		/* 'tbl' */
329 #define	LATEX	2		/* 'LaTeX' */
330 #define	TEX	3		/* 'TeX' */
331 #define	SLATEX	4		/* 'SLaTeX' (Scandinavian LaTeX) */
332 #define	FRAME	5		/* tblprint style output for FrameMaker */
333 
334 /* Types for etype() */
335 #define NUM	1
336 #define STR	2
337 
338 #define	GROWAMT	30	/* default minimum amount to grow */
339 
340 #define	GROWNEW		1	/* first time table */
341 #define	GROWROW		2	/* add rows */
342 #define	GROWCOL		3	/* add columns */
343 #define	GROWBOTH	4	/* grow both */
344 extern	struct ent ***tbl;	/* data table ref. in vmtbl.c and ATBL() */
345 
346 extern	char curfile[];
347 extern	int arg;
348 extern	int strow, stcol;
349 extern	int currow, curcol;
350 extern	int gmyrow, gmycol;	/* globals used for @myrow, @mycol cmds */
351 extern	int rescol;		/* columns reserved for row numbers */
352 extern	int savedrow[37], savedcol[37];
353 extern	int savedstrow[37], savedstcol[37];
354 extern	int FullUpdate;
355 extern	int maxrow, maxcol;
356 extern	int maxrows, maxcols;	/* # cells currently allocated */
357 extern	int rowsinrange;	/* Number of rows in target range of a goto */
358 extern	int colsinrange;	/* Number of cols in target range of a goto */
359 extern	int *fwidth;
360 extern	int *precision;
361 extern  int *realfmt;
362 extern	char *colformat[10];
363 extern	char *col_hidden;
364 extern	char *row_hidden;
365 extern	char line[FBUFLEN];
366 extern	int linelim;
367 extern	int changed;
368 extern	struct ent *delbuf[DELBUFSIZE];
369 extern	char *delbuffmt[DELBUFSIZE];
370 extern	int dbidx;
371 extern	int qbuf;		/* buffer no. specified by `"' command */
372 extern	int showsc, showsr;
373 extern	int showrange;		/* Causes ranges to be highlighted */
374 extern	int cellassign;
375 extern	int macrofd;
376 extern	int cslop;
377 extern	int usecurses;
378 extern	int brokenpipe;		/* Set to true if SIGPIPE is received */
379 extern  char dpoint;	/* country-dependent decimal point from locale */
380 extern  char thsep;	/* country-dependent thousands separator from locale */
381 
382 extern	FILE *openfile(char *fname, int *rpid, int *rfd);
383 extern	char *coltoa(int col);
384 extern	char *findplugin(char *ext, char type);
385 extern	char *findhome(char *path);
386 extern	char *r_name(int r1, int c1, int r2, int c2);
387 extern	char *scxmalloc(unsigned n);
388 extern	char *scxrealloc(char *ptr, unsigned n);
389 extern	char *seval(register struct enode *se);
390 extern	char *v_name(int row, int col);
391 extern	double eval(register struct enode *e);
392 extern	int any_locked_cells(int r1, int c1, int r2, int c2);
393 extern	int are_colors();
394 extern	int are_frames();
395 extern	int are_ranges();
396 extern	int atocol(char *string, int len);
397 extern	int creadfile(char *save, int  eraseflg);
398 extern	int cwritefile(char *fname, int r0, int c0, int rn, int cn);
399 extern	int engformat(int fmt, int width, int lprecision, double val,
400 	char *buf, int buflen);
401 extern	int etype(register struct enode *e);
402 extern	int find_range(char *name, int len, struct ent *lmatch,
403 	struct ent *rmatch, struct range **rng);
404 extern	int format(char *fmt, int lprecision, double val, char *buf,
405 	int buflen);
406 extern	int get_rcqual(int ch);
407 extern	int growtbl(int rowcol, int toprow, int topcol);
408 extern	int locked_cell(int r, int c);
409 extern	int modcheck(char *endstr);
410 extern	int nmgetch();
411 extern	int plugin_exists(char *name, int len, char *path);
412 extern	int readfile(char *fname, int eraseflg);
413 extern	int writefile(char *fname, int r0, int c0, int rn, int cn);
414 extern	int yn_ask(char *msg);
415 extern	struct abbrev *find_abbr(char *abbrev, int len, struct abbrev **prev);
416 extern	struct colorpair *cpairs[8];
417 extern	struct enode *copye(register struct enode *e, int Rdelta, int Cdelta,
418 	int r1, int c1, int r2, int c2, int transpose);
419 extern	struct enode *new(int op, struct enode *a1, struct enode *a2);
420 extern	struct enode *new_const(int op, double a1);
421 extern	struct enode *new_range(int op, struct range_s a1);
422 extern	struct enode *new_str(char *s);
423 extern	struct enode *new_var(int op, struct ent_ptr a1);
424 extern	struct ent *lookat(int row, int col);
425 extern	struct crange *find_crange(int row, int col);
426 extern	struct frange *find_frange(int row, int col);
427 extern	void EvalAll();
428 extern	void add_crange(struct ent *r_left, struct ent *r_right, int pair);
429 extern	void add_frange(struct ent *or_left, struct ent *or_right,
430 	struct ent *ir_left, struct ent *ir_right, int toprows, int bottomrows,
431 	int leftcols, int rightcols);
432 extern	void add_range(char *name, struct ent_ptr left, struct ent_ptr right,
433 	int is_range);
434 extern	void addplugin(char *ext, char *plugin, char type);
435 extern	void backcol(int arg);
436 extern	void backrow(int arg);
437 extern	void change_color(int pair, struct enode *e);
438 extern	void checkbounds(int *rowp, int *colp);
439 extern	void clearent(struct ent *v);
440 extern	void clean_crange();
441 extern	void clean_frange();
442 extern	void clean_range();
443 extern	void closecol(int arg);
444 extern	void closefile(FILE *f, int pid, int rfd);
445 extern	void closerow(int r, int numrow);
446 extern	void colshow_op();
447 extern	void copy(struct ent *dv1, struct ent *dv2, struct ent *v1,
448 	struct ent *v2);
449 extern	void copyent(register struct ent *n, register struct ent *p,
450 	int dr, int dc, int r1, int c1, int r2, int c2, int transpose);
451 extern	void decompile(register struct enode *e, int priority);
452 extern	void deleterow(register int arg);
453 extern	void del_range(struct ent *left, struct ent *right);
454 extern	void del_abbr(char *abbrev);
455 extern	void deraw(int ClearLastLine);
456 extern	void diesave();
457 extern	void doend(int rowinc, int colinc);
458 extern	void doformat(int c1, int c2, int w, int p, int r);
459 extern	void dupcol();
460 extern	void duprow();
461 extern	void doquery(char *s, char *data, int fd);
462 extern	void dostat(int fd);
463 extern	void dotick(int tick);
464 extern	void editexp(int row, int col);
465 extern	void editfmt(int row, int col);
466 extern	void edit_mode();
467 extern	void edits(int row, int col);
468 extern	void editv(int row, int col);
469 extern	void efree(struct enode *e);
470 extern	void erase_area(int sr, int sc, int er, int ec, int ignorelock);
471 extern	void erasedb();
472 extern	void eraser(struct ent *v1, struct ent *v2);
473 extern	void fgetnum(int r0, int c0, int rn, int cn, int fd);
474 extern	void fill(struct ent *v1, struct ent *v2, double start, double inc);
475 extern	void fix_colors(int row1, int col1, int row2, int col2,
476 	int delta1, int delta2);
477 extern	void fix_frames(int row1, int col1, int row2, int col2,
478 	int delta1, int delta2);
479 extern	void fix_ranges(int row1, int col1, int row2, int col2,
480 	int delta1, int delta2);
481 extern	void flush_saved();
482 extern	void formatcol(int arg);
483 extern	void format_cell(struct ent *v1, struct ent *v2, char *s);
484 extern	void forwcol(int arg);
485 extern	void forwrow(int arg);
486 extern	void free_ent(register struct ent *p, int unlock);
487 extern	void getexp(int r0, int c0, int rn, int cn, int fd);
488 extern	void getfmt(int r0, int c0, int rn, int cn, int fd);
489 extern	void getformat(int col, int fd);
490 extern	void getnum(int r0, int c0, int rn, int cn, int fd);
491 extern	void getstring(int r0, int c0, int rn, int cn, int fd);
492 extern	void go_last();
493 extern	void goraw();
494 extern	void help();
495 extern	void hide_col(int arg);
496 extern	void hide_row(int arg);
497 extern	void hidecol(int arg);
498 extern	void hiderow(int arg);
499 extern	void initcolor(int colornum);
500 extern	void initkbd();
501 extern	void ins_in_line(int c);
502 extern	void ins_string(char *s);
503 extern	void insert_mode();
504 extern	void insertcol(int arg, int delta);
505 extern	void insertrow(int arg, int delta);
506 extern	void kbd_again();
507 extern	void label(register struct ent *v, register char *s, int flushdir);
508 extern	void let(struct ent *v, struct enode *e);
509 extern	void list_colors(FILE *f);
510 extern	void list_ranges(FILE *f);
511 extern	void lock_cells(struct ent *v1, struct ent *v2);
512 extern	void markcell();
513 extern	void move_area(int dr, int dc, int sr, int sc, int er, int ec);
514 extern	void mover(struct ent *d, struct ent *v1, struct ent *v2);
515 extern	void moveto(int row, int col, int lastrow, int lastcol,
516 	int cornrow, int corncol);
517 extern	void toggle_navigate_mode();
518 extern	void num_search(double n, int firstrow, int firstcol, int lastrow,
519 	int lastcol, int errsearch);
520 extern	void printfile(char *fname, int r0, int c0, int rn, int cn);
521 extern	void pullcells(int to_insert);
522 extern	void query(char *s, char *data);
523 extern	void read_hist();
524 extern	void remember(int save);
525 extern	void resetkbd();
526 extern	void rowshow_op();
527 extern	void scxfree(char *p);
528 extern	void setauto(int i);
529 extern	void setiterations(int i);
530 extern	void setorder(int i);
531 extern	void showcol(int c1, int c2);
532 extern	void showdr();
533 extern	void showrow(int r1, int r2);
534 extern	void showstring(char *string, int dirflush, int hasvalue, int row,
535 	int col, int *nextcolp, int mxcol, int *fieldlenp, int r, int c,
536 	struct frange *fr, int frightcols, int flcols, int frcols);
537 extern	void signals();
538 extern	void slet(struct ent *v, struct enode *se, int flushdir);
539 extern	void sortrange(struct ent *left, struct ent *right, char *criteria);
540 extern	void startshow();
541 extern	void startdisp();
542 extern	void stopdisp();
543 extern	void str_search(char *s, int firstrow, int firstcol, int lastrow,
544 	int lastcol, int num);
545 extern	void sync_cranges();
546 extern	void sync_franges();
547 extern	void sync_ranges();
548 extern	void sync_refs();
549 extern	void tblprintfile(char *fname, int r0, int c0, int rn, int cn);
550 extern	void unlock_cells(struct ent *v1, struct ent *v2);
551 extern	void update(int anychanged);
552 extern	void valueize_area(int sr, int sc, int er, int ec);
553 extern	void write_cells(register FILE *f, int r0, int c0, int rn, int cn,
554 	int dr, int dc);
555 extern	void write_colors(FILE *f, int indent);
556 extern	void write_cranges(FILE *f);
557 extern	void write_fd(register FILE *f, int r0, int c0, int rn, int cn);
558 extern	void write_franges(FILE *f);
559 extern	void write_hist();
560 extern	void write_line(int c);
561 extern	void write_ranges(FILE *f);
562 extern	void yank_area(int sr, int sc, int er, int ec);
563 extern	void yyerror(char *err);
564 extern	int yylex();
565 extern	int yyparse();
566 #ifdef DOBACKUPS
567 extern	int backup_file(char *path);
568 #endif
569 
570 extern	int modflg;
571 #if !defined(VMS) && !defined(MSDOS) && defined(CRYPT_PATH)
572 extern	int Crypt;
573 #endif
574 extern	char *mdir;
575 extern	char *autorun;
576 extern	int skipautorun;
577 extern	char *fkey[FKEYS];
578 extern	char *scext;
579 extern	char *ascext;
580 extern	char *tbl0ext;
581 extern	char *tblext;
582 extern	char *latexext;
583 extern	char *slatexext;
584 extern	char *texext;
585 extern	int scrc;
586 extern	double prescale;
587 extern	int extfunc;
588 extern	int propagation;
589 extern	int repct;
590 extern	int calc_order;
591 extern	int autocalc;
592 extern	int autolabel;
593 extern	int autoinsert;
594 extern	int autowrap;
595 extern	int optimize;
596 extern	int numeric;
597 extern	int showcell;
598 extern	int showtop;
599 extern	int color;
600 extern	int colorneg;
601 extern	int colorerr;
602 extern	int braille;
603 extern	int braillealt;
604 extern	int loading;
605 extern	int getrcqual;
606 extern	int tbl_style;
607 extern	int rndtoeven;
608 extern	char *progname;
609 extern	int numeric_field;
610 extern	int craction;
611 extern	int  pagesize;	/* If nonzero, use instead of 1/2 screen height */
612 extern	int rowlimit;
613 extern	int collimit;
614 
615 #if BSD42 || SYSIII
616 
617 #ifndef cbreak
618 #define	cbreak		crmode
619 #define	nocbreak	nocrmode
620 #endif
621 
622 #endif
623 
624 #if defined(BSD42) || defined(BSD43) && !defined(ultrix)
625 #define	memcpy(dest, source, len)	bcopy(source, dest, (unsigned int)len);
626 #define	memset(dest, zero, len)		bzero((dest), (unsigned int)(len));
627 #else
628 #include <memory.h>
629 #endif
630