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: 1.1 $
10  *
11  */
12 
13 #if defined(MSDOS)
14 #include <stdio.h>
15 #endif
16 
17 /*#if defined(BSD42) || defined(BSD43) && !defined(SYSV)
18 #include <strings.h>
19 #else
20 #ifndef SYSIII
21 #include <string.h>
22 #endif
23 #endif
24 */
25 
26 #ifndef PI
27 #define PI (double)3.14159265358979323846
28 #endif
29 
30 #define	ATBL(tbl, row, col)	(*(tbl + row) + (col))
31 
32 #define MINROWS 100 	/* minimum size at startup */
33 #define MINCOLS 30
34 #define	ABSMAXCOLS 702	/* absolute cols: ZZ (base 26) */
35 
36 #ifdef PSC
37 #define error(s) fprintf(stderr,s)
38 #endif
39 
40 #ifdef HAVE_X11_X_H
41 /*the following give the minimum size of the main window, in text coordinates*/
42 #define MIN_COLS 80
43 #define MIN_ROWS 25
44 #endif
45 
46 #define REG_LEN 28      /* following eight moved here by Bob Parbs 12-92 */
47 #define ROWLIM  5       /* increased to five from four after move */
48 #define COLIM   3
49 #define TSSIZE  15
50 #define MAXSS   2000
51 #define MINMAX  25
52 #define MAXROW  25
53 #define MAXCOL  25      /* moved from matrix.c */
54 
55 #define CRCOLS 1
56 #define CRROWS 2
57 #define RESCOL 4	/* columns reserved for row numbers */
58 #define RESROW 4  /* rows reserved for prompt, error, and column numbers */
59 
60 /* formats for engformat() */
61 #define REFMTFIX	0	/* fixed point: -0.00010 */
62 #define REFMTFLT	1	/* scientific notation: -1.00E\-04 */
63 #define REFMTENG	2	/* engineering notation: -100.00u */
64 #define REFMTDATE	3	/* dates: 05/15/92 */
65 #define REFMTEXP	4	/* modulo 3 exponent notation: -100.E-06 */
66 
67 #define DEFWIDTH 10	/* Default column width and precision */
68 #define DEFPREC   2
69 #define DEFREFMT  REFMTFIX /* Make default format fixed point  THA 10/14/90 */
70 
71 #define HISTLEN  10	/* Number of history entries for vi emulation */
72 
73 #define	FBUFLEN	1024	/* buffer size for a single field */
74 
75 	/* maximum path length */
76 #ifdef PATH_MAX
77 # define	PATHLEN	PATH_MAX
78 #else
79 # ifdef PATHSIZE
80 #  define	PATHLEN	PATHSIZE
81 # else
82 #  define	PATHLEN	1024
83 # endif
84 #endif
85 
86 #ifndef A_CHARTEXT	/* Should be defined in curses.h */
87 # ifdef INTERNATIONAL
88 #  define A_CHARTEXT 0xff
89 # else
90 #  define A_CHARTEXT 0x7f
91 # endif
92 #endif
93 
94 #ifndef FALSE
95 # define	FALSE	0
96 # define	TRUE	1
97 #endif /* !FALSE */
98 
99 
100 /*
101  * ent_ptr holds the row/col # and address type of a cell
102  *
103  * vf is the type of cell address, 0 non-fixed, or bitwise OR of FIX_ROW or
104  *	FIX_COL
105  * vp : we just use vp->row or vp->col, vp may be a new cell just for holding
106  *	row/col (say in gram.y) or a pointer to an existing cell
107  */
108 struct ent_ptr {
109     int vf;
110     struct ent *vp;
111 };
112 
113 /* holds the beginning/ending cells of a range */
114 struct range_s {
115 	struct ent_ptr left, right;
116 };
117 
118 /*
119  * Some not too obvious things about the flags:
120  *    is_valid means there is a valid number in v.
121  *    is_locked means that the cell cannot be edited.
122  *    label set means it points to a valid constant string.
123  *    is_strexpr set means expr yields a string expression.
124  *    If is_strexpr is not set, and expr points to an expression tree, the
125  *        expression yields a numeric expression.
126  *    So, either v or label can be set to a constant.
127  *        Either (but not both at the same time) can be set from an expression.
128  */
129 
130 #define VALID_CELL(p, r, c) ((p = *ATBL(tbl, r, c)) && \
131 			     ((p->flags & is_valid) || p->label))
132 
133 /* info for each cell, only alloc'd when something is stored in a cell */
134 struct ent {
135     double v;		/* v && label are set in EvalAll() */
136     char *label;
137     struct enode *expr;	/* cell's contents */
138     short flags;
139     short row, col;
140     struct ent *next;	/* next deleted ent (pulled, deleted cells) */
141     char *format;	/* printf format for this cell */
142     char cellerror;	/* error in a cell? */
143 };
144 
145 /* stores a range (left, right) */
146 struct range {
147     struct ent_ptr r_left, r_right;
148     char *r_name;			/* possible name for this range */
149     struct range *r_next, *r_prev;	/* chained ranges */
150     int r_is_range;
151 };
152 
153 #define FIX_ROW 1
154 #define FIX_COL 2
155 
156 /* stores type of operation this cell will preform */
157 struct enode {
158     int op;
159     union {
160 	int gram_match;         /* some compilers (hp9000ipc) need this */
161 	double k;		/* constant # */
162 	struct ent_ptr v;	/* ref. another cell */
163 	struct range_s r;	/* op is on a range */
164 	char *s;		/* string part of a cell */
165 	struct {		/* other cells use to eval()/seval() */
166 	    struct enode *left, *right;
167 	} o;
168     } e;
169 };
170 
171 /* following structure moved from matrix.c by Bob Parbs 12-92 */
172 struct m_range_sd{
173     int ssr,ser,ssc,sec;
174     int dsr,der,dsc,dec;
175     };
176 
177 /* this struct also moved from matrix.c by Bob Parbs 12-92 */
178 struct m_range{
179     int sr,er,sc,ec;
180     };
181 
182 /* op values */
183 #define O_VAR		'v'
184 #define O_CONST		'k'
185 #define O_ECONST	'E'	/* constant cell w/ an error */
186 #define O_SCONST	'$'
187 #define REDUCE		0200	/* Or'ed into OP if operand is a range */
188 
189 #define OP_BASE	256
190 #define ACOS	(OP_BASE + 0)
191 #define ASIN	(OP_BASE + 1)
192 #define ATAN	(OP_BASE + 2)
193 #define CEIL	(OP_BASE + 3)
194 #define COS	(OP_BASE + 4)
195 #define EXP	(OP_BASE + 5)
196 #define FABS	(OP_BASE + 6)
197 #define FLOOR	(OP_BASE + 7)
198 #define HYPOT	(OP_BASE + 8)
199 #define LOG	(OP_BASE + 9)
200 #define LOG10	(OP_BASE + 10)
201 #define POW	(OP_BASE + 11)
202 #define SIN	(OP_BASE + 12)
203 #define SQRT	(OP_BASE + 13)
204 #define TAN	(OP_BASE + 14)
205 #define DTR	(OP_BASE + 15)
206 #define RTD	(OP_BASE + 16)
207 #define MINR	(OP_BASE + 17)	/* MIN/MAX might already be macros ... */
208 #define MAXR	(OP_BASE + 18)
209 #define RND	(OP_BASE + 19)
210 #define HOUR	(OP_BASE + 20)
211 #define MINUTE	(OP_BASE + 21)
212 #define SECOND	(OP_BASE + 22)
213 #define MONTH	(OP_BASE + 23)
214 #define DAY	(OP_BASE + 24)
215 #define YEAR	(OP_BASE + 25)
216 #define NOW	(OP_BASE + 26)
217 #define DATE	(OP_BASE + 27)
218 #define FMT	(OP_BASE + 28)
219 #define SUBSTR	(OP_BASE + 29)
220 #define STON	(OP_BASE + 30)
221 #define EQS	(OP_BASE + 31)
222 #define EXT	(OP_BASE + 32)
223 #define ELIST	(OP_BASE + 33)	/* List of expressions */
224 #define LMAX	(OP_BASE + 34)
225 #define LMIN	(OP_BASE + 35)
226 #define NVAL	(OP_BASE + 36)
227 #define SVAL	(OP_BASE + 37)
228 #define PV	(OP_BASE + 38)
229 #define FV	(OP_BASE + 39)
230 #define PMT	(OP_BASE + 40)
231 #define STINDEX	(OP_BASE + 41)
232 #define LOOKUP	(OP_BASE + 42)
233 #define ATAN2	(OP_BASE + 43)
234 #define INDEX	(OP_BASE + 44)
235 #define DTS	(OP_BASE + 45)
236 #define TTS	(OP_BASE + 46)
237 #define ABS	(OP_BASE + 47)
238 #define HLOOKUP	(OP_BASE + 48)
239 #define VLOOKUP	(OP_BASE + 49)
240 #define ROUND	(OP_BASE + 50)
241 #define IF	(OP_BASE + 51)
242 #define MYROW	(OP_BASE + 52)
243 #define MYCOL	(OP_BASE + 53)
244 #define COLTOA	(OP_BASE + 54)
245 #define UPPER	(OP_BASE + 55)
246 #define LOWER	(OP_BASE + 56)
247 #define CAPITAL	(OP_BASE + 57)
248 #define NUMITER	(OP_BASE + 58)
249 #define MATRIX_ADD   (OP_BASE + 59)
250 #define MATRIX_SUB   (OP_BASE + 60)
251 #define MATRIX_INV   (OP_BASE + 61)
252 #define MATRIX_MULT  (OP_BASE + 62)
253 #define MATRIX_TRANS (OP_BASE + 63)
254 #define IRR	(OP_BASE+64)
255 
256 /* flag values */
257 #define is_valid     0001
258 #define is_changed   0002
259 #define is_strexpr   0004
260 #define is_leftflush 0010
261 #define is_deleted   0020
262 #define is_locked    0040
263 #define is_label     0100
264 
265 /* cell error (1st generation (ERROR) or 2nd+ (INVALID)) */
266 #define	CELLOK		0
267 #define	CELLERROR	1
268 #define	CELLINVALID	2
269 
270 #define ctl(c)	((c)&037)
271 #define ESC	033
272 #define DEL	0177
273 
274 /* calculation order */
275 #define BYCOLS	1
276 #define BYROWS	2
277 
278 /* tblprint style output for: */
279 #define	TBL	1		/* 'tbl' */
280 #define	LATEX	2		/* 'LaTeX' */
281 #define	TEX	3		/* 'TeX' */
282 #define	SLATEX	4		/* 'SLaTeX' (Scandinavian LaTeX) */
283 #define	FRAME	5		/* tblprint style output for FrameMaker */
284 
285 /* Types for etype() */
286 #define NUM	1
287 #define STR	2
288 
289 #define	GROWAMT	30	/* default minimum amount to grow */
290 
291 #define	GROWNEW		1	/* first time table */
292 #define	GROWROW		2	/* add rows */
293 #define	GROWCOL		3	/* add columns */
294 #define	GROWBOTH	4	/* grow both */
295 extern	struct ent ***tbl;	/* data table ref. in vmtbl.c and ATBL() */
296 
297 /* a linked list of free [struct ent]'s, uses .next as the pointer */
298 extern	struct ent *freeents;
299 
300 /* a linked list of free [struct enodes]'s, uses .e.o.left as the pointer */
301 extern	struct enode *freeenodes;
302 
303 extern char	curfile[];
304 extern int	strow, stcol;
305 extern int	currow, curcol;
306 extern int	savedrow, savedcol;
307 extern int	FullUpdate;
308 extern int	maxrow, maxcol;
309 extern int	maxrows, maxcols;	/* # cells currently allocated */
310 extern int	*fwidth;
311 extern int	*precision;
312 extern int	*realfmt;
313 extern char	*col_hidden;
314 extern char	*row_hidden;
315 extern char	line[FBUFLEN];
316 extern int	linelim;
317 extern int	changed;
318 extern struct ent *to_fix;
319 extern int	seenerr;	/*
320 				 * yyerror() not to redisplay error
321 				 * 1 if error just been displayed, 0 otherwise
322 				 */
323 extern int	showsc, showsr;
324 extern char	stringbuf[FBUFLEN];
325 extern int	maintextrows,	/* text rows in mainwin */
326 		maintextcols;	/* text cols in mainwin */
327 extern int	running;	/* are we done? -be careful on use... */
328 extern int	using_X;	/* are we doing X? (vs curses) */
329 
330 extern void	Color_Menu PROTO((void));
331 extern void	EvalAll PROTO((void));
332 extern void	Main_Menu PROTO((void));
333 extern void	Graph_Menu PROTO((void));
334 extern void	Search_Menu PROTO((void));
335 extern void	Sort_Menu PROTO((void));
336 
337 extern void	add_range PROTO((char *, struct ent_ptr, struct ent_ptr, int));
338 extern int	any_locked_cells PROTO((int, int, int, int));
339 extern int	are_ranges PROTO((void));
340 extern int	atocol PROTO((char *, int));
341 extern void	backcol PROTO((int));
342 extern void	backrow PROTO((int));
343 #ifdef DOBACKUPS
344 extern int	backup_file PROTO((char *));
345 #endif
346 extern void	checkbounds PROTO((int *, int *));
347 extern void	clean_range PROTO((void));
348 extern void	clearent PROTO((struct ent *));
349 extern void	clearlines PROTO((int, int));
350 extern void	closecol PROTO((int, int));
351 extern void	closeout PROTO((FILE *, int));
352 extern void	closerow PROTO((int));
353 extern void	colshow_op PROTO((void));
354 extern char *	coltoa PROTO((int));
355 extern void	copy PROTO((struct ent *, struct ent *, struct ent *, struct ent *));
356 extern struct enode *	copye PROTO((struct enode *, int, int));
357 extern void	copyent PROTO((struct ent *, struct ent *, int, int));
358 extern void	creadfile PROTO((char *, int));
359 extern void	cr_line PROTO((void));
360 extern int	cwritefile PROTO((char *, int, int, int, int));
361 extern void	del_range PROTO((struct ent *, struct ent *));
362 extern void	deleterow PROTO((int));
363 extern void	deraw PROTO((void));
364 extern void	diesave PROTO((void));
365 extern double	dodts PROTO((int, int, int));
366 extern void	doend PROTO((int, int));
367 extern void	doformat PROTO((int, int, int, int, int));
368 extern double	doirr PROTO((int, int, int, int));
369 extern RETSIGTYPE doquit PROTO((int));
370 extern void	dupcol PROTO((void));
371 extern void	duprow PROTO((void));
372 extern void	edit_mode PROTO((void));
373 extern void	editexp PROTO((int, int));
374 extern void	editfmt PROTO((int, int));
375 extern void	edits PROTO((int, int));
376 extern void	editv PROTO((int, int));
377 extern void	efree PROTO((struct enode *));
378 extern int	engformat PROTO((int, int, int, double, char *, int));
379 extern void	erase_area PROTO((int, int, int, int));
380 extern void	erasedb PROTO((void));
381 extern void	eraser PROTO((struct ent *, struct ent *));
382 extern int	etype PROTO((struct enode *));
383 extern void	fill PROTO((struct ent *, struct ent *, double, double));
384 extern struct range *	find_range PROTO((char *, int, struct ent *, struct ent *));
385 extern char *	findhome PROTO((char *));
386 extern void	flush_saved PROTO((void));
387 extern int	format PROTO((char *, double, char *, int));
388 extern void	format_cell PROTO((struct ent *, struct ent *, char *));
389 extern void	forwcol PROTO((int));
390 extern void	forwrow PROTO((int));
391 extern void	free_ent PROTO((struct ent *));
392 extern char *	fsuffix PROTO((char *, char *, char *));
393 
394 /* from matrix.c */
395 extern void	addmatrix PROTO((int, int, int, int, int, int,int,int,int,int));
396 extern int	convert PROTO((int, char [], int ));
397 struct m_range_sd *find_rge PROTO((char *));
398 struct m_range *findrge PROTO((char *));
399 extern void	get_add PROTO((void));
400 extern void	get_invert PROTO((void));
401 extern void	get_mult PROTO((void));
402 extern void	get_sub PROTO((void));
403 extern void	get_trans PROTO((void));
404 extern void	invertmatrix PROTO((int, int, int, int, int, int));
405 extern void	multmatrix1 PROTO((int, int, int, int, int, int, int, int, int, int));
406 extern void	multmatrix PROTO((int, int, int, int, int, int, int, int, int, int));
407 extern void	submatrix PROTO((int, int, int, int, int, int, int, int, int, int));
408 extern void	transpose PROTO((int, int, int, int, int, int));
409 
410 extern void	get_default_dir PROTO((char *tmp));
411 extern void	get_default_path PROTO((char *tmp));
412 /*extern int	get_rcqual PROTO((int);*/
413 extern char *	get_str PROTO((char *, int));
414 extern void	go_last PROTO((void));
415 extern void	goraw PROTO((void));
416 extern void	graphic_read_defn PROTO((FILE *));
417 extern void	graphic_write_defn PROTO((FILE *));
418 extern int	growtbl PROTO((int, int, int));
419 extern void	help PROTO((void));
420 extern void	hide_col PROTO((int));
421 extern void	hide_row PROTO((int));
422 extern void	hidecol PROTO((int));
423 extern void	hiderow PROTO((int));
424 extern void	initkbd PROTO((void));
425 extern void	ins_string PROTO((char *));
426 extern void	insert_mode PROTO((void));
427 extern void	insertrow PROTO((int));
428 extern void	kbd_again PROTO((void));
429 extern void	label PROTO((struct ent *, char *, int));
430 extern void	let PROTO((struct ent *, struct enode *));
431 extern void	list_range PROTO((FILE *));
432 extern void	lock_cells PROTO((struct ent *, struct ent *));
433 extern int	locked_cell PROTO((int, int));
434 extern struct ent *	lookat PROTO((int, int));
435 extern unsigned int menu PROTO((unsigned int, char **, char **));
436 extern void	message PROTO((char *));
437 extern int	modcheck PROTO((char *));
438 extern void	moveto PROTO((int, int));
439 extern char *	mystrtof PROTO((char *, double *));
440 extern struct enode *	new PROTO((int, struct enode *, struct enode *));
441 extern struct enode *	new_const PROTO((int, double));
442 extern struct enode *	new_range PROTO((int, struct range_s));
443 extern struct enode *	new_str PROTO((char *));
444 extern struct enode *	new_var PROTO((int, struct ent_ptr));
445 extern int	nmgetch PROTO((void));
446 extern void	num_search PROTO((double, int));
447 extern void	opencol PROTO((int, int));
448 extern FILE *	openout PROTO((char *, int *));
449 extern void	printfile PROTO((char *, int, int, int, int));
450 extern char *	printfile_suffix PROTO((void));
451 extern void	print_help PROTO((void));
452 extern void	pullcells PROTO((int));
453 extern char *	r_name PROTO((int, int, int, int));
454 extern void	readfile PROTO((char *, int));
455 extern void	repaint PROTO((int, int, int));
456 extern void	resetkbd PROTO((void));
457 extern void	rowshow_op PROTO((void));
458 extern void	scerror PROTO((char *));
459 extern void	scxfree PROTO((char *));
460 extern char *	scxmalloc PROTO((unsigned int));
461 extern char *	scxrealloc PROTO((char *, unsigned int));
462 extern void	setauto PROTO((int));
463 extern void	setiterations PROTO((int));
464 extern void	setorder PROTO((int));
465 extern void	show_top_line PROTO((void));
466 extern void	showcol PROTO((int, int));
467 extern void	showdr PROTO((void));
468 extern void	showrow PROTO((int, int));
469 extern void	showstring PROTO((char *, int, int, int, int, int *, int, int *,int,int,int));
470 extern void	signals PROTO((void));
471 extern void	slet PROTO((struct ent *, struct enode *, int));
472 extern void	startdisp PROTO((void));
473 extern void	startshow PROTO((void));
474 extern void	stopdisp PROTO((void));
475 extern void	str_search PROTO((char *));
476 extern void	sync_ranges PROTO((void));
477 extern void	sync_refs PROTO((void));
478 extern void	tblprintfile PROTO((char *, int, int, int, int));
479 extern void	unlock_cells PROTO((struct ent *, struct ent *));
480 extern void	update PROTO((int));
481 extern char *	v_name PROTO((int, int));
482 extern void	valueize_area PROTO((int, int, int, int));
483 extern char *	what_file PROTO((char *, char *));
484 extern void	write_fd PROTO((FILE *, int, int, int, int));
485 extern void	write_line PROTO((int));
486 extern void	write_range PROTO((FILE *));
487 extern int	writefile PROTO((char *, int, int, int, int));
488 extern int	yn_ask PROTO((char *));
489 extern void	yyerror PROTO((char *));
490 
491 
492 #if !defined(VMS) && !defined(MSDOS) && defined(CRYPT_PATH)
493 extern int	Crypt;
494 #endif
495 extern int	autocalc;
496 extern int	autolabel;
497 extern int	calc_order;
498 extern int	collimit;
499 extern int	craction;
500 extern int	extfunc;
501 extern int	getrcqual;
502 extern int	loading;
503 extern char *	mdir;
504 extern int	modflg;
505 extern int	numeric;
506 extern double	prescale;
507 extern char *	progname;
508 extern int	propagation;
509 extern int	repct;
510 extern int	rndinfinity;
511 extern int	rowlimit;
512 extern int	showcell;
513 extern int	showtop;
514 extern int	tbl_style;
515 extern char *	version;
516 
517 #if BSD42 || SYSIII
518 
519 #ifndef cbreak
520 #define	cbreak		crmode
521 #define	nocbreak	nocrmode
522 #endif
523 
524 #endif
525 
526 /* Old (pre-autoconf):
527 #ifndef SYSV
528 #if ( defined(BSD42) || defined(BSD43) || defined(__convex__) ) && !defined(ultrix) && !defined(__osf__)
529 #define	memcpy(dest, source, len)	bcopy(source, dest, (unsigned int)len);
530 #define	memset(dest, zero, len)		bzero((dest), (unsigned int)(len));
531 #else
532 #include <memory.h>
533 #endif
534 #endif
535 */
536 #if STDC_HEADERS
537 /*# include <string.h>*/
538 # define MEMZERO(dest, len)		memset((dest), 0, (unsigned int)(len));
539 #else
540 # ifndef HAVE_STRCHR
541 #  define strchr index
542 #  define strrchr rindex
543 # endif
544 extern char *strchr (), *strrchr ();
545 # ifndef HAVE_MEMCPY
546 #  define memcpy(d, s, n)		bcopy ((s), (d), (n))
547 #  define memmove(d, s, n)		bcopy ((s), (d), (n))
548 #  define MEMZERO(dest, len)		bzero((dest), (unsigned int)(len));
549 # else
550 #  define MEMZERO(dest, len)		memset((dest), 0, (unsigned int)(len));
551 # endif
552 #endif
553 
554 /*
555  * Feature-setting declarations.  Can be used to control the default
556  * setting of various features.
557  */
558 
559 #ifndef	SHOWCURSOR
560 #define	SHOWCURSOR	TRUE
561 #endif
562 
563 #ifndef CASEINSENSITIVECMDLINE	/* Peter Doemel, 11-Feb-1993 */
564 # if defined(VMS) || defined(MSDOS)
565 #  define CASEINSENSITIVECMDLINE
566 # endif
567 #endif
568 
569 /*
570  * Declarations of standard functions used in various places.  Mostly
571  * to shut up line and 'gcc -Wall'.
572  */
573 
574 #ifdef __STDC__
575 /*
576 #include <stdlib.h>
577 #include <unistd.h>
578 #include <ctype.h>
579 */
580 
581 extern int	re_exec();
582 #ifndef __FreeBSD__
583 extern int	stty();
584 #endif
585 extern int	wait();
586 extern int	yylex(void);
587 extern int	yyparse();
588 
589 #else	/* __STDC__ */
590 
591 extern int	_filbuf();
592 extern int	_flsbuf();
593 extern int	alarm();
594 extern int	close();
595 extern int	dup();
596 extern int	endwin();
597 extern int	execl();
598 #ifdef SYSV3
599 extern void	exit();
600 #endif
601 extern int	fclose();
602 extern FILE *	fdopen();
603 extern int	fflush();
604 extern FILE *	fopen();
605 extern int	fork();
606 extern int	fprintf();
607 extern int	fputs();
608 extern char	*getenv();
609 extern int	ioctl();
610 extern int	kill();
611 extern int	pclose();
612 extern int	pipe();
613 extern FILE *	popen();
614 extern double	pow();
615 extern int	printf();
616 extern int	printw();
617 extern int	puts();
618 extern int	re_exec();
619 extern int	read();
620 /*extern int	strlen();*/
621 /*extern size_t	strlen();*/
622 extern int	stty();
623 extern long	time();
624 extern int	tolower();
625 extern int	toupper();
626 extern int	waddch();
627 extern int	waddstr();
628 extern int	wait();
629 extern int	wclear();
630 extern int	wclrtobot();
631 extern int	wclrtoeol();
632 extern int	wmove() ;
633 extern int	wmove();
634 extern int	wrefresh();
635 extern int	write();
636 extern int	wstandend();
637 extern int	wstandout();
638 extern int	yylex();
639 extern int	yyparse();
640 
641 #endif	/* __STDC__ */
642