/* PhysCalc header file
Copyright (C) 1990 Marty White
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/*----- DEFINES -----*/
#ifdef __TINY__
#error This program requires more memory than the tiny model allows!
#endif
#ifndef SHAREDIR
#define SHAREDIR "/usr/share/physcalc/"
#endif
#define VERSION "2.4" /* Version number */
#define TRACE
#define NAMELEN 60 /* standard maximum name length */
#define SMALLBUF (2*80) /* standard small buffer size */
#define LARGEBUF (4*80) /* standard large buffer size */
#define MAXDIM 15 /* Maximum number of dimensions */
#define MTHERR 1 /* division by 0, square root of (-1) */
#define PARERR 2 /* unbalanced parenthesis */
#define SYNERR 3 /* syntax error */
#define UFNERR 4 /* unknown function */
#define UVRERR 5 /* unknown/uncalculable variable */
#define TYPERR 6 /* Wrong type */
#define MEMERR 7 /* Non-fatal out of memory */
#define SNODE 1 /* String node */
#define INODE 2 /* long Integer node */
#define FNODE 3 /* Fraction node */
#define DNODE 4 /* Double node */
#define NNODE 5 /* Dimensional Number node */
#define LNODE 6 /* List (function) node */
#define OPS 17 /* number of operators */
#define FUNCS 10 /* number of functions */
#define OPLEN 5 /* max length + \0 of operators */
#define FNLEN 11 /* max length + \0 of built in function names */
#define FUNCS2 3
/*--- Taken from MSTD.H (my standard header file) ---*/
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif
#define isname(c) (isalnum(c) || c=='_' || c=='.')
#define skipspc(s) while (isspace(*(s))) (s)++
#define LOCAL static
#define IMPORT extern
#define EXPORT
/*----- STRUCTURE DECLARATIONS -----*/
typedef struct d_num { /* Structure for holding a dimensional number */
double num; /* scalar value */
int di[ MAXDIM ]; /* dimensions */
} DNUM;
struct fractstruct { /* Fraction structure */
int numer,denom;
};
typedef struct nodestruct { /* Holds multiple var types */
int type;
union {
char str[1]; /* String */
double dbl; /* double number */
long lng; /* long integer */
struct fractstruct frt; /* Fraction */
struct d_num dmn;
struct nodestruct *list[1]; /* List of ptrs to nodes */
} *data; /* Pointer to the above union */
} NODE,*NODEP; /* sizeof(NODE) should be 4 bytes */
struct dimstruct { /* Holds a dimension definition */
struct dimstruct *next; /* ptr to next in list */
char *name; /* dimension name */
int dimension[ MAXDIM ]; /* dimensionality */
};
struct varstruct { /* Holds a user-variable */
struct varstruct *next;
char *name;
NODEP value;
int rflag; /* flag to prevent infinite recursion */
};
struct ufstruct { /* Holds a user-function */
struct ufstruct *next;
char *name;
NODEP dummy; /* List-node of dummy strings */
NODEP value;
};
syntax highlighted by Code2HTML, v. 0.9.1