home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dr. CD ROM (Annual Premium Edition)
/
premium.zip
/
premium
/
IBMOS2_1
/
SC621.ZIP
/
sc621
/
sc.h
< prev
next >
Wrap
C/C++ Source or Header
|
1992-07-05
|
11KB
|
434 lines
/* 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.21 $
*
*/
#if defined(MSDOS) || defined(__OS2__)
# include <stdio.h>
# if defined(__OS2__)
# define toascii(c) (c&0xFF)
# endif
#endif
#define ATBL(tbl, row, col) (*(tbl + row) + (col))
#define MINROWS 100 /* minimum size at startup */
#define MINCOLS 30
#define ABSMAXCOLS 702 /* absolute cols: ZZ (base 26) */
#define CRROWS 1
#define CRCOLS 2
#define RESCOL 4 /* columns reserved for row numbers */
#define RESROW 3 /* rows reserved for prompt, error, and column numbers */
/* formats for engformat() */
#define REFMTFIX 0
#define REFMTFLT 1
#define REFMTENG 2
#define REFMTDATE 3
#define DEFWIDTH 10 /* Default column width and precision */
#define DEFPREC 2
#define DEFREFMT REFMTFIX /* Make default format fixed point THA 10/14/90 */
#define HISTLEN 10 /* Number of history entries for vi emulation */
#ifdef PSC
# define error(msg) fprintf(stderr, msg);
#else
# define error (void)move(1,0), (void)clrtoeol(), (void) printw
#endif
#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
#if (defined(BSD42) || defined(BSD43)) && !defined(strchr)
#define strchr index
#endif
#ifdef SYSV4
size_t strlen();
#endif
#ifndef FALSE
# define FALSE 0
# define TRUE 1
#endif /* !FALSE */
/*
* ent_ptr holds the row/col # and address type of a cell
*
* vf is the type of cell address, 0 non-fixed, or bitwise OR of FIX_ROW or
* FIX_COL
* vp : we just use vp->row or vp->col, vp may be a new cell just for holding
* row/col (say in gram.y) or a pointer to an existing cell
*/
struct ent_ptr {
int vf;
struct ent *vp;
};
/* holds the beginning/ending cells of a range */
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.
* is_locked means that the cell cannot be edited.
* 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))
/* info for each cell, only alloc'd when something is stored in a cell */
struct ent {
double v; /* v && label are set in EvalAll() */
char *label;
struct enode *expr; /* cell's contents */
short flags;
short row, col;
struct ent *next; /* next deleted ent (pulled, deleted cells) */
char *format; /* printf format for this cell */
char cellerror; /* error in a cell? */
};
/* stores a range (left, right) */
struct range {
struct ent_ptr r_left, r_right;
char *r_name; /* possible name for this range */
struct range *r_next, *r_prev; /* chained ranges */
int r_is_range;
};
#define FIX_ROW 1
#define FIX_COL 2
/* stores type of operation this cell will preform */
struct enode {
int op;
union {
int gram_match; /* some compilers (hp9000ipc) need this */
double k; /* constant # */
struct ent_ptr v; /* ref. another cell */
struct range_s r; /* op is on a range */
char *s; /* string part of a cell */
struct { /* other cells use to eval()/seval() */
struct enode *left, *right;
} o;
} e;
};
/* op values */
#define O_VAR 'v'
#define O_CONST 'k'
#define O_ECONST 'E' /* constant cell w/ an error */
#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
#define MYROW OP_BASE + 52
#define MYCOL OP_BASE + 53
#define COLTOA OP_BASE + 54
#define UPPER OP_BASE + 55
#define LOWER OP_BASE + 56
#define CAPITAL OP_BASE + 57
#define NUMITER OP_BASE + 58
/* flag values */
#define is_valid 0001
#define is_changed 0002
#define is_strexpr 0004
#define is_leftflush 0010
#define is_deleted 0020
#define is_locked 0040
#define is_label 0100
/* cell error (1st generation (ERROR) or 2nd+ (INVALID)) */
#define CELLOK 0
#define CELLERROR 1
#define CELLINVALID 2
#define ctl(c) ((c)&037)
#define ESC 033
#define DEL 0177
/* calculation order */
#define BYCOLS 1
#define BYROWS 2
/* tblprint style output for: */
#define TBL 1 /* 'tbl' */
#define LATEX 2 /* 'LaTeX' */
#define TEX 3 /* 'TeX' */
#define SLATEX 4 /* 'SLaTeX' (Scandinavian LaTeX) */
#define FRAME 5 /* tblprint style output for FrameMaker */
/* Types for etype() */
#define NUM 1
#define STR 2
#define GROWAMT 30 /* default minimum amount to grow */
#define GROWNEW 1 /* first time table */
#define GROWROW 2 /* add rows */
#define GROWCOL 3 /* add columns */
#define GROWBOTH 4 /* grow both */
extern struct ent ***tbl; /* data table ref. in vmtbl.c and ATBL() */
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 int *realfmt;
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 FILE *fdopen(), *fopen();
extern char *coltoa();
extern char *findhome();
extern char *r_name();
extern char *scxmalloc();
extern char *scxrealloc();
extern char *strrchr();
extern char *v_name();
extern int any_locked_cells();
extern int are_ranges();
extern int atocol();
extern int cwritefile();
extern int engformat();
extern int etype();
extern int fork();
extern int format();
extern int get_rcqual();
extern int growtbl();
extern int locked_cell();
extern int modcheck();
extern int nmgetch();
extern int writefile();
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 add_range();
extern void backcol();
extern void backrow();
extern void checkbounds();
extern void clearent();
extern void clean_range();
extern void closecol();
extern void closeout();
extern void closerow();
extern void colshow_op();
extern void copy();
extern void copyent();
extern void creadfile();
extern void deleterow();
extern void del_range();
extern void deraw();
extern void diesave();
extern void doend();
extern void doformat();
extern void dupcol();
extern void duprow();
extern void editexp();
extern void editfmt();
extern void edit_mode();
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 format_cell();
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 initkbd();
extern void ins_string();
extern void insert_mode();
extern void insertrow();
extern void kbd_again();
extern void label();
extern void let();
extern void list_range();
extern void lock_cells();
extern void moveto();
extern void num_search();
extern void opencol();
extern void printfile();
extern void pullcells();
extern void readfile();
extern void resetkbd();
extern void rowshow_op();
extern void scxfree();
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_ranges();
extern void sync_refs();
extern void tblprintfile();
extern void unlock_cells();
extern void valueize_area();
extern void write_fd();
extern void write_line();
extern void write_range();
extern void yyerror();
#ifdef DOBACKUPS
extern int backup_file();
#endif
extern int modflg;
#if !defined(VMS) && !defined(MSDOS) && !defined(__OS2__) && defined(CRYPT_PATH)
extern int Crypt;
#endif
extern char *mdir;
extern double prescale;
extern int extfunc;
extern int propagation;
extern int repct;
extern int calc_order;
extern int autocalc;
extern int autolabel;
extern int numeric;
extern int showcell;
extern int showtop;
extern int loading;
extern int getrcqual;
extern int tbl_style;
extern int rndinfinity;
extern char *progname;
extern int craction;
extern int rowlimit;
extern int collimit;
#if BSD42 || SYSIII
#ifndef cbreak
#define cbreak crmode
#define nocbreak nocrmode
#endif
#endif
#if defined(BSD42) || defined(BSD43) && !defined(ultrix)
# define memcpy(dest, source, len) bcopy(source, dest, (unsigned int)len);
# define memset(dest, zero, len) bzero((dest), (unsigned int)(len));
#else
# if defined(__OS2__)
# include <string.h>
# else
# include <memory.h>
# endif
#endif