* original by James Gosling, September 1982
* modified by Mark Weiser and Bruce Israel,
* More mods by Alan Silverstein, 3-4/88, see list of changes.
#define ATBL(tbl, row, col) (*(tbl + row) + (col))
#define MINROWS 40 /* minimum size at startup */
#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 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 */
#if (defined(BSD42) || defined(BSD43)) && !defined(strrchr)
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
*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 ent_ptr r_left
, r_right
;
struct range
*r_next
, *r_prev
;
struct enode
*left
, *right
;
#define REDUCE 0200 /* Or'ed into OP if operand is a range */
#define FLOOR OP_BASE + 7
#define HYPOT OP_BASE + 8
#define LOG10 OP_BASE + 10
#define SQRT OP_BASE + 13
#define HOUR OP_BASE + 20
#define MINUTE OP_BASE + 21
#define SECOND OP_BASE + 22
#define MONTH OP_BASE + 23
#define YEAR OP_BASE + 25
#define DATE OP_BASE + 27
#define SUBSTR OP_BASE + 29
#define STON OP_BASE + 30
#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 STINDEX OP_BASE + 41
#define LOOKUP OP_BASE + 42
#define ATAN2 OP_BASE + 43
#define INDEX OP_BASE + 44
#define HLOOKUP OP_BASE + 48
#define VLOOKUP OP_BASE + 49
#define ROUND OP_BASE + 50
#define is_leftflush 0010
#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' */
#define GROWAMT 10 /* default minimum amount to grow */
#define GROWNEW 1 /* first time table */
#define GROWROW 2 /* add rows */
extern struct ent
***tbl
;
extern int currow
, curcol
;
extern int savedrow
, savedcol
;
extern int maxrow
, maxcol
;
extern int maxrows
, maxcols
; /* # cells currently allocated */
extern char line
[FBUFLEN
];
extern struct ent
*to_fix
;
extern int showsc
, showsr
;
extern double dolookup();
extern int RealEvalAll();
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 RealEvalOne();
extern void checkbounds();
extern void colshow_op();
extern void colvalueize();
extern void colvalueize();
extern void erase_area();
extern void flush_saved();
extern void ins_string();
extern void insert_mode();
extern void list_range();
extern void num_search();
extern void rowshow_op();
extern void rowvalueize();
extern void setiterations();
extern void showstring();
extern void str_search();
extern void tblprintfile();
extern void two_arg_index();
extern void valueize_area();
extern void write_line();
extern int backup_file();
#define nocbreak nocrmode