home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: Science
/
Science.zip
/
OS2SCALC.ZIP
/
SC.H
< prev
next >
Wrap
C/C++ Source or Header
|
1990-07-19
|
4KB
|
180 lines
/* VC A Table Calculator
* Common definitions
*
* original by James Gosling, September 1982
* modified by Mark Weiser and Bruce Israel,
* University of Maryland
* OS/2 Modifications by Brady Flowers, 7/19/90
*
*/
#include<stdio.h>
/* #ifdef MCH_AMIGA */
/* #define ROWS 23 */
/* #define COLS 79 */
/* #else */
/* #define ROWS 24 */
/* #define COLS 80 */
/* #endif */
#ifdef OS2
#define VOID void
#else
#define VOID
#ifndef NULL
#define NULL 0L
#endif
#endif
#define MAXROWS 200
#define MAXCOLS 40
struct ent {
double v;
char *label;
struct enode *expr;
short flags;
short row, col;
struct ent *next;
};
struct enode {
int op;
union {
double k;
struct ent *v;
struct {
struct enode *left, *right;
} o;
} e;
};
/* op values */
#define O_VAR 'v'
#define O_CONST 'k'
#define O_REDUCE(c) (c+0200)
/* flag values */
#define is_valid 0001
#define is_changed 0002
#define is_lchanged 0004
#define is_leftflush 0010
#define is_deleted 0020
/* NOTE: The original construct for teh ctl macro was
* #define ctl(c) ('c'&037)
* which doesn't work under ANSI C. The macro has
* been replaced and all occurances of the construct
* ctl(c) replaced with ctl('c')
*/
#define ctl(c) (c&037)
struct ent *tbl[MAXROWS][MAXCOLS];
int strow, stcol;
int currow, curcol;
int savedrow, savedcol;
int FullUpdate;
int maxrow, maxcol;
int fwidth[MAXCOLS];
int precision[MAXCOLS];
char hidden_col[MAXCOLS];
char hidden_row[MAXROWS];
char line[1000];
int linelim;
int changed;
struct ent *to_fix;
#ifndef OS2
struct enode *new();
struct ent *lookat();
struct enode *copye();
#endif
char *coltoa();
int modflg;
#ifdef OS2
/* Prototype! */
/* sc.c */
VOID error(char *fmt, ...);
VOID yyerror(char *err);
struct ent *lookat(int row, int col);
VOID free_ent(register struct ent *p);
VOID flush_saved(void);
VOID update(void);
void quit(void);
int main(int argc, char **argv);
int modcheck(char *endstr);
VOID writefile(char *fname);
VOID readfile(char *fname, int eraseflg);
VOID erasedb(void);
/* cmds.c */
VOID duprow(void);
VOID dupcol(void);
VOID insertrow(int arg);
VOID deleterow(int arg);
VOID insertcol(int arg);
VOID deletecol(int arg);
VOID valueizerow(int arg);
VOID valueizecol(int arg);
VOID erase_area(int sr, int sc, int er, int ec);
VOID valueize_area(int sr, int sc, int er, int ec);
VOID pullcells(int to_insert);
VOID showcol_op(void);
VOID showrow_op(void);
int get_qual(void);
VOID openrow(int rs);
VOID closerow(register int r);
VOID opencol(int cs);
VOID closecol(int cs);
/* lex.c */
int yylex(void);
VOID initkbd(void);
int nmgetch(void);
VOID debug(char *fmt, ... );
char *strtof(register char *p, double *res);
VOID help(void);
/* gram.c */
int yyparse(void);
/* interp.c */
double dosum(int minr, int minc, int maxr, int maxc);
double doprod(int minr, int minc, int maxr, int maxc);
double doavg(int minr, int minc, int maxr, int maxc);
double eval(register struct enode *e);
VOID EvalAll(void);
int RealEvalAll(void);
#ifndef GRAM_C
struct enode *new(int op, void *a1, void *a2);
#endif
VOID copy(struct ent *dv, struct ent *v1, struct ent *v2);
VOID let(struct ent *v, struct enode *e);
VOID clearent(struct ent *v);
int constant(register struct enode *e);
VOID efree(register struct enode *e);
VOID label(register struct ent *v, register char *s, int flushdir);
VOID decodev(register struct ent *v);
char *coltoa(int col);
VOID decompile(register struct enode *e, int priority);
VOID editv(int row, int col);
VOID editexp(int row, int col);
VOID edits(int row, int col);
VOID printfile(char *fname);
VOID tblprintfile(char *fname);
struct enode *copye(register struct enode *e, int Rdelta, int Cdelta);
VOID sync_refs(void);
VOID sync_ref(register struct enode *e);
VOID hiderow(int arg);
VOID hidecol(int arg);
VOID showrow(int r1, int r2);
VOID showcol(int c1, int c2);
#endif