BSD style makefile
[unix-history] / usr / src / contrib / sc / sc.h
/* 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