BSD style makefile
[unix-history] / usr / src / contrib / sc / sc.h
CommitLineData
36f1eed6
KB
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: 6.8 $
10 *
11 */
12
13#define ATBL(tbl, row, col) (*(tbl + row) + (col))
14
15#define MINROWS 40 /* minimum size at startup */
16#define MINCOLS 20
17#define ABSMAXCOLS 702 /* absolute cols: ZZ (base 26) */
18#define RESCOL 4 /* columns reserved for row numbers */
19#define RESROW 3 /* rows reserved for prompt, error, and column numbers */
20#define DEFWIDTH 10 /* Default column width and precision */
21#define DEFPREC 2
22#define HISTLEN 10 /* Number of history entries for vi emulation */
23#define error (void)move(1,0), (void)clrtoeol(), (void) printw
24#define FBUFLEN 1024 /* buffer size for a single field */
25#define PATHLEN 1024 /* maximum path length */
26
27#ifndef A_CHARTEXT /* Should be defined in curses.h */
28#ifdef INTERNATIONAL
29#define A_CHARTEXT 0xff
30#else
31#define A_CHARTEXT 0x7f
32#endif
33#endif
34
35#if (defined(BSD42) || defined(BSD43)) && !defined(strrchr)
36#define strrchr rindex
37#endif
38
39struct ent_ptr {
40 int vf;
41 struct ent *vp;
42};
43
44struct range_s {
45 struct ent_ptr left, right;
46};
47
48/*
49 * Some not too obvious things about the flags:
50 * is_valid means there is a valid number in v.
51 * label set means it points to a valid constant string.
52 * is_strexpr set means expr yields a string expression.
53 * If is_strexpr is not set, and expr points to an expression tree, the
54 * expression yields a numeric expression.
55 * So, either v or label can be set to a constant.
56 * Either (but not both at the same time) can be set from an expression.
57 */
58
59#define VALID_CELL(p, r, c) ((p = *ATBL(tbl, r, c)) && \
60 ((p->flags & is_valid) || p->label))
61
62struct ent {
63 double v;
64 char *label;
65 struct enode *expr;
66 short flags;
67 short row, col;
68 struct ent *next; /* next deleted ent */
69 struct ent *evnext; /* next ent w/ a object to eval */
70 struct ent *evprev; /* prev ent w/ a object to eval */
71};
72
73struct range {
74 struct ent_ptr r_left, r_right;
75 char *r_name;
76 struct range *r_next, *r_prev;
77 int r_is_range;
78};
79
80#define FIX_ROW 1
81#define FIX_COL 2
82
83struct enode {
84 int op;
85 union {
86 double k;
87 struct ent_ptr v;
88 struct range_s r;
89 char *s;
90 struct {
91 struct enode *left, *right;
92 } o;
93 } e;
94};
95
96/* op values */
97#define O_VAR 'v'
98#define O_CONST 'k'
99#define O_SCONST '$'
100#define REDUCE 0200 /* Or'ed into OP if operand is a range */
101
102#define OP_BASE 256
103#define ACOS OP_BASE + 0
104#define ASIN OP_BASE + 1
105#define ATAN OP_BASE + 2
106#define CEIL OP_BASE + 3
107#define COS OP_BASE + 4
108#define EXP OP_BASE + 5
109#define FABS OP_BASE + 6
110#define FLOOR OP_BASE + 7
111#define HYPOT OP_BASE + 8
112#define LOG OP_BASE + 9
113#define LOG10 OP_BASE + 10
114#define POW OP_BASE + 11
115#define SIN OP_BASE + 12
116#define SQRT OP_BASE + 13
117#define TAN OP_BASE + 14
118#define DTR OP_BASE + 15
119#define RTD OP_BASE + 16
120#define MIN OP_BASE + 17
121#define MAX OP_BASE + 18
122#define RND OP_BASE + 19
123#define HOUR OP_BASE + 20
124#define MINUTE OP_BASE + 21
125#define SECOND OP_BASE + 22
126#define MONTH OP_BASE + 23
127#define DAY OP_BASE + 24
128#define YEAR OP_BASE + 25
129#define NOW OP_BASE + 26
130#define DATE OP_BASE + 27
131#define FMT OP_BASE + 28
132#define SUBSTR OP_BASE + 29
133#define STON OP_BASE + 30
134#define EQS OP_BASE + 31
135#define EXT OP_BASE + 32
136#define ELIST OP_BASE + 33 /* List of expressions */
137#define LMAX OP_BASE + 34
138#define LMIN OP_BASE + 35
139#define NVAL OP_BASE + 36
140#define SVAL OP_BASE + 37
141#define PV OP_BASE + 38
142#define FV OP_BASE + 39
143#define PMT OP_BASE + 40
144#define STINDEX OP_BASE + 41
145#define LOOKUP OP_BASE + 42
146#define ATAN2 OP_BASE + 43
147#define INDEX OP_BASE + 44
148#define DTS OP_BASE + 45
149#define TTS OP_BASE + 46
150#define ABS OP_BASE + 47
151#define HLOOKUP OP_BASE + 48
152#define VLOOKUP OP_BASE + 49
153#define ROUND OP_BASE + 50
154#define IF OP_BASE + 51
155
156/* flag values */
157#define is_valid 0001
158#define is_changed 0002
159#define is_strexpr 0004
160#define is_leftflush 0010
161#define is_deleted 0020
162
163#define ctl(c) ((c)&037)
164#define ESC 033
165#define DEL 0177
166
167#define BYCOLS 1
168#define BYROWS 2
169#define BYGRAPH 4 /* Future */
170
171#define TBL 1 /* tblprint style output for 'tbl' */
172#define LATEX 2 /* tblprint style output for 'LaTeX' */
173#define TEX 3 /* tblprint style output for 'TeX' */
174
175/* Types for etype() */
176
177#define NUM 1
178#define STR 2
179
180#define GROWAMT 10 /* default minimum amount to grow */
181
182#define GROWNEW 1 /* first time table */
183#define GROWROW 2 /* add rows */
184#define GROWCOL 3
185#define GROWBOTH 4
186extern struct ent ***tbl;
187
188extern char curfile[];
189extern int strow, stcol;
190extern int currow, curcol;
191extern int savedrow, savedcol;
192extern int FullUpdate;
193extern int maxrow, maxcol;
194extern int maxrows, maxcols; /* # cells currently allocated */
195extern int *fwidth;
196extern int *precision;
197extern char *col_hidden;
198extern char *row_hidden;
199extern char line[FBUFLEN];
200extern int linelim;
201extern int changed;
202extern struct ent *to_fix;
203extern int showsc, showsr;
204
205extern FILE *openout();
206extern char *coltoa();
207extern char *findhome();
208extern char *r_name();
209extern char *seval();
210extern char *strrchr();
211extern char *v_name();
212extern char *xmalloc();
213extern double dolookup();
214extern double eval();
215extern int RealEvalAll();
216extern int are_ranges();
217extern int atocol();
218extern int constant();
219extern int etype();
220extern int fork();
221extern int get_rcqual();
222extern int growtbl();
223extern int nmgetch();
224extern int writefile();
225extern int xfree();
226extern int yn_ask();
227extern struct enode *copye();
228extern struct enode *new();
229extern struct enode *new_const();
230extern struct enode *new_range();
231extern struct enode *new_str();
232extern struct enode *new_var();
233extern struct ent *lookat();
234extern struct range *find_range();
235extern void EvalAll();
236extern void Evalall();
237extern void RealEvalOne();
238extern void backcol();
239extern void backrow();
240extern void checkbounds();
241extern void clearent();
242extern void closecol();
243extern void closeout();
244extern void closerow();
245extern void colshow_op();
246extern void colvalueize();
247extern void colvalueize();
248extern void copy();
249extern void copyent();
250extern void copyrtv();
251extern void decompile();
252extern void deletecol();
253extern void deleterow();
254extern void deraw();
255extern void doend();
256extern void doformat();
257extern void dupcol();
258extern void duprow();
259extern void editexp();
260extern void edits();
261extern void editv();
262extern void efree();
263extern void erase_area();
264extern void erasedb();
265extern void eraser();
266extern void fill();
267extern void flush_saved();
268extern void forwcol();
269extern void forwrow();
270extern void free_ent();
271extern void go_last();
272extern void goraw();
273extern void help();
274extern void hide_col();
275extern void hide_row();
276extern void hidecol();
277extern void hiderow();
278extern void index_arg();
279extern void ins_string();
280extern void insert_mode();
281extern void insertcol();
282extern void insertrow();
283extern void kbd_again();
284extern void label();
285extern void let();
286extern void list_arg();
287extern void list_range();
288extern void moveto();
289extern void num_search();
290extern void one_arg();
291extern void opencol();
292extern void openrow();
293extern void printfile();
294extern void pullcells();
295extern void range_arg();
296extern void readfile();
297extern void repaint();
298extern void resetkbd();
299extern void rowshow_op();
300extern void rowvalueize();
301extern void setauto();
302extern void setiterations();
303extern void setorder();
304extern void showcol();
305extern void showdr();
306extern void showrow();
307extern void showstring();
308extern void signals();
309extern void slet();
310extern void startshow();
311extern void str_search();
312extern void sync_refs();
313extern void syncref();
314extern void tblprintfile();
315extern void three_arg();
316extern void two_arg();
317extern void two_arg_index();
318extern void update();
319extern void valueize_area();
320extern void write_fd();
321extern void write_line();
322extern void yyerror();
323#ifdef DOBACKUPS
324extern int backup_file();
325#endif
326
327extern int modflg;
328extern int Crypt;
329extern char *mdir;
330extern double prescale;
331extern int extfunc;
332extern int propagation;
333extern int calc_order;
334extern int autocalc;
335extern int numeric;
336extern int showcell;
337extern int showtop;
338extern int loading;
339extern int getrcqual;
340extern int tbl_style;
341extern char *progname;
342
343#if BSD42 || SYSIII
344
345#ifndef cbreak
346#define cbreak crmode
347#define nocbreak nocrmode
348#endif
349
350#endif