/* SC A Table Calculator * Common definitions * * original by James Gosling, September 1982 * modified by Mark Weiser and Bruce Israel, * University of Maryland * R. Bond 12/86 * More mods by Alan Silverstein, 3-4/88, see list of changes. * $Revision: 6.8 $ * */ #define ATBL(tbl, row, col) (*(tbl + row) + (col)) #define MINROWS 40 /* minimum size at startup */ #define MINCOLS 20 #define ABSMAXCOLS 702 /* absolute cols: ZZ (base 26) */ #define RESCOL 4 /* columns reserved for row numbers */ #define RESROW 3 /* rows reserved for prompt, error, and column numbers */ #define DEFWIDTH 10 /* Default column width and precision */ #define DEFPREC 2 #define HISTLEN 10 /* Number of history entries for vi emulation */ #define error (void)move(1,0), (void)clrtoeol(), (void) printw #define FBUFLEN 1024 /* buffer size for a single field */ #define PATHLEN 1024 /* maximum path length */ #ifndef A_CHARTEXT /* Should be defined in curses.h */ #ifdef INTERNATIONAL #define A_CHARTEXT 0xff #else #define A_CHARTEXT 0x7f #endif #endif #if (defined(BSD42) || defined(BSD43)) && !defined(strrchr) #define strrchr rindex #endif struct ent_ptr { int vf; struct ent *vp; }; struct range_s { struct ent_ptr left, right; }; /* * Some not too obvious things about the flags: * is_valid means there is a valid number in v. * label set means it points to a valid constant string. * is_strexpr set means expr yields a string expression. * If is_strexpr is not set, and expr points to an expression tree, the * expression yields a numeric expression. * So, either v or label can be set to a constant. * Either (but not both at the same time) can be set from an expression. */ #define VALID_CELL(p, r, c) ((p = *ATBL(tbl, r, c)) && \ ((p->flags & is_valid) || p->label)) struct ent { double v; char *label; struct enode *expr; short flags; short row, col; struct ent *next; /* next deleted ent */ struct ent *evnext; /* next ent w/ a object to eval */ struct ent *evprev; /* prev ent w/ a object to eval */ }; struct range { struct ent_ptr r_left, r_right; char *r_name; struct range *r_next, *r_prev; int r_is_range; }; #define FIX_ROW 1 #define FIX_COL 2 struct enode { int op; union { double k; struct ent_ptr v; struct range_s r; char *s; struct { struct enode *left, *right; } o; } e; }; /* op values */ #define O_VAR 'v' #define O_CONST 'k' #define O_SCONST '$' #define REDUCE 0200 /* Or'ed into OP if operand is a range */ #define OP_BASE 256 #define ACOS OP_BASE + 0 #define ASIN OP_BASE + 1 #define ATAN OP_BASE + 2 #define CEIL OP_BASE + 3 #define COS OP_BASE + 4 #define EXP OP_BASE + 5 #define FABS OP_BASE + 6 #define FLOOR OP_BASE + 7 #define HYPOT OP_BASE + 8 #define LOG OP_BASE + 9 #define LOG10 OP_BASE + 10 #define POW OP_BASE + 11 #define SIN OP_BASE + 12 #define SQRT OP_BASE + 13 #define TAN OP_BASE + 14 #define DTR OP_BASE + 15 #define RTD OP_BASE + 16 #define MIN OP_BASE + 17 #define MAX OP_BASE + 18 #define RND OP_BASE + 19 #define HOUR OP_BASE + 20 #define MINUTE OP_BASE + 21 #define SECOND OP_BASE + 22 #define MONTH OP_BASE + 23 #define DAY OP_BASE + 24 #define YEAR OP_BASE + 25 #define NOW OP_BASE + 26 #define DATE OP_BASE + 27 #define FMT OP_BASE + 28 #define SUBSTR OP_BASE + 29 #define STON OP_BASE + 30 #define EQS OP_BASE + 31 #define EXT OP_BASE + 32 #define ELIST OP_BASE + 33 /* List of expressions */ #define LMAX OP_BASE + 34 #define LMIN OP_BASE + 35 #define NVAL OP_BASE + 36 #define SVAL OP_BASE + 37 #define PV OP_BASE + 38 #define FV OP_BASE + 39 #define PMT OP_BASE + 40 #define STINDEX OP_BASE + 41 #define LOOKUP OP_BASE + 42 #define ATAN2 OP_BASE + 43 #define INDEX OP_BASE + 44 #define DTS OP_BASE + 45 #define TTS OP_BASE + 46 #define ABS OP_BASE + 47 #define HLOOKUP OP_BASE + 48 #define VLOOKUP OP_BASE + 49 #define ROUND OP_BASE + 50 #define IF OP_BASE + 51 /* flag values */ #define is_valid 0001 #define is_changed 0002 #define is_strexpr 0004 #define is_leftflush 0010 #define is_deleted 0020 #define ctl(c) ((c)&037) #define ESC 033 #define DEL 0177 #define BYCOLS 1 #define BYROWS 2 #define BYGRAPH 4 /* Future */ #define TBL 1 /* tblprint style output for 'tbl' */ #define LATEX 2 /* tblprint style output for 'LaTeX' */ #define TEX 3 /* tblprint style output for 'TeX' */ /* Types for etype() */ #define NUM 1 #define STR 2 #define GROWAMT 10 /* default minimum amount to grow */ #define GROWNEW 1 /* first time table */ #define GROWROW 2 /* add rows */ #define GROWCOL 3 #define GROWBOTH 4 extern struct ent ***tbl; extern char curfile[]; extern int strow, stcol; extern int currow, curcol; extern int savedrow, savedcol; extern int FullUpdate; extern int maxrow, maxcol; extern int maxrows, maxcols; /* # cells currently allocated */ extern int *fwidth; extern int *precision; extern char *col_hidden; extern char *row_hidden; extern char line[FBUFLEN]; extern int linelim; extern int changed; extern struct ent *to_fix; extern int showsc, showsr; extern FILE *openout(); extern char *coltoa(); extern char *findhome(); extern char *r_name(); extern char *seval(); extern char *strrchr(); extern char *v_name(); extern char *xmalloc(); extern double dolookup(); extern double eval(); extern int RealEvalAll(); extern int are_ranges(); extern int atocol(); extern int constant(); extern int etype(); extern int fork(); extern int get_rcqual(); extern int growtbl(); extern int nmgetch(); extern int writefile(); extern int xfree(); extern int yn_ask(); extern struct enode *copye(); extern struct enode *new(); extern struct enode *new_const(); extern struct enode *new_range(); extern struct enode *new_str(); extern struct enode *new_var(); extern struct ent *lookat(); extern struct range *find_range(); extern void EvalAll(); extern void Evalall(); extern void RealEvalOne(); extern void backcol(); extern void backrow(); extern void checkbounds(); extern void clearent(); extern void closecol(); extern void closeout(); extern void closerow(); extern void colshow_op(); extern void colvalueize(); extern void colvalueize(); extern void copy(); extern void copyent(); extern void copyrtv(); extern void decompile(); extern void deletecol(); extern void deleterow(); extern void deraw(); extern void doend(); extern void doformat(); extern void dupcol(); extern void duprow(); extern void editexp(); extern void edits(); extern void editv(); extern void efree(); extern void erase_area(); extern void erasedb(); extern void eraser(); extern void fill(); extern void flush_saved(); extern void forwcol(); extern void forwrow(); extern void free_ent(); extern void go_last(); extern void goraw(); extern void help(); extern void hide_col(); extern void hide_row(); extern void hidecol(); extern void hiderow(); extern void index_arg(); extern void ins_string(); extern void insert_mode(); extern void insertcol(); extern void insertrow(); extern void kbd_again(); extern void label(); extern void let(); extern void list_arg(); extern void list_range(); extern void moveto(); extern void num_search(); extern void one_arg(); extern void opencol(); extern void openrow(); extern void printfile(); extern void pullcells(); extern void range_arg(); extern void readfile(); extern void repaint(); extern void resetkbd(); extern void rowshow_op(); extern void rowvalueize(); extern void setauto(); extern void setiterations(); extern void setorder(); extern void showcol(); extern void showdr(); extern void showrow(); extern void showstring(); extern void signals(); extern void slet(); extern void startshow(); extern void str_search(); extern void sync_refs(); extern void syncref(); extern void tblprintfile(); extern void three_arg(); extern void two_arg(); extern void two_arg_index(); extern void update(); extern void valueize_area(); extern void write_fd(); extern void write_line(); extern void yyerror(); #ifdef DOBACKUPS extern int backup_file(); #endif extern int modflg; extern int Crypt; extern char *mdir; extern double prescale; extern int extfunc; extern int propagation; extern int calc_order; extern int autocalc; extern int numeric; extern int showcell; extern int showtop; extern int loading; extern int getrcqual; extern int tbl_style; extern char *progname; #if BSD42 || SYSIII #ifndef cbreak #define cbreak crmode #define nocbreak nocrmode #endif #endif