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