home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / EFFO / pd7.lzh / SRC / sc.h < prev    next >
Text File  |  1990-02-19  |  5KB  |  215 lines

  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.1 $
  10.  *
  11.  */
  12.  
  13.  
  14.  
  15. #define MAXROWS 200
  16. #define MAXCOLS 40
  17. #define RESCOL 4  /* columns reserved for row numbers */
  18. #define RESROW 3  /* rows reserved for prompt, error, and column numbers */
  19. #define DEFWIDTH 10 /* Default column width and precision */
  20. #define DEFPREC   2
  21. #define error move(1,0), clrtoeol(), (void) printw
  22.  
  23. struct ent_ptr {
  24.     int vf;
  25.     struct ent *vp;
  26. };
  27.  
  28. struct range_s {
  29.         struct ent_ptr left, right;
  30. };
  31.  
  32. /*
  33.  * If you want to save room, make row and col below into unsigned
  34.  * chars and make sure MAXROWS and MAXCOLS above are both less
  35.  * than 256.  (128 if your compiler doesn't support unsigned char).
  36.  *
  37.  * Some not too obvious things about the flags:
  38.  *    is_valid means there is a valid number in v.
  39.  *    label set means it points to a valid constant string.
  40.  *    is_strexpr set means expr yields a string expression.
  41.  *    If is_strexpr is not set, and expr points to an expression tree, the
  42.  *        expression yields a numeric expression.
  43.  *    So, either v or label can be set to a constant.
  44.  *        Either (but not both at the same time) can be set from an expression.
  45.  */
  46.  
  47. #define VALID_CELL(p, r, c) ((p = tbl[r][c])&&((p->flags&is_valid)||p->label))
  48.  
  49. struct ent {
  50.     double v;
  51.     char *label;
  52.     struct enode *expr;
  53.     short flags;
  54.     short row, col;
  55.     struct ent *next;
  56. };
  57.  
  58. struct range {
  59.     struct ent_ptr r_left, r_right;
  60.     char *r_name;
  61.     struct range *r_next, *r_prev;
  62.     int r_is_range;
  63. };
  64.  
  65. #define FIX_ROW 1
  66. #define FIX_COL 2
  67.  
  68. struct enode {
  69.     int op;
  70.     union {
  71.         double k;
  72.         struct ent_ptr v;
  73.         struct range_s r;
  74.         char *s;
  75.         struct {
  76.             struct enode *left, *right;
  77.         } o;
  78.     } e;
  79. };
  80.  
  81. /* op values */
  82. #define O_VAR 'v'
  83. #define O_CONST 'k'
  84. #define O_SCONST '$'
  85. #define REDUCE 0200     /* Or'ed into OP if operand is a range */
  86.  
  87. #define OP_BASE 256
  88. #define ACOS OP_BASE + 0
  89. #define ASIN OP_BASE + 1
  90. #define ATAN OP_BASE + 2
  91. #define CEIL OP_BASE + 3
  92. #define COS OP_BASE + 4
  93. #define EXP OP_BASE + 5
  94. #define FABS OP_BASE + 6
  95. #define FLOOR OP_BASE + 7
  96. #define HYPOT OP_BASE + 8
  97. #define LOG OP_BASE + 9
  98. #define LOG10 OP_BASE + 10
  99. #define POW OP_BASE + 11
  100. #define SIN OP_BASE + 12
  101. #define SQRT OP_BASE + 13
  102. #define TAN OP_BASE + 14
  103. #define DTR OP_BASE + 15
  104. #define RTD OP_BASE + 16
  105. #define MIN OP_BASE + 17
  106. #define MAX OP_BASE + 18
  107. #define RND OP_BASE + 19
  108. #define HOUR OP_BASE + 20
  109. #define MINUTE OP_BASE + 21
  110. #define SECOND OP_BASE + 22
  111. #define MONTH OP_BASE + 23
  112. #define DAY OP_BASE + 24
  113. #define YEAR OP_BASE + 25
  114. #define NOW OP_BASE + 26
  115. #define DATE OP_BASE + 27
  116. #define FMT OP_BASE + 28
  117. #define SUBSTR OP_BASE + 29
  118. #define STON OP_BASE + 30
  119. #define EQS OP_BASE + 31
  120. #define EXT OP_BASE + 32
  121. #define ELIST OP_BASE + 33      /* List of expressions */
  122. #define LMAX  OP_BASE + 34
  123. #define LMIN  OP_BASE + 35
  124. #define NVAL OP_BASE + 36
  125. #define SVAL OP_BASE + 37
  126. #define PV OP_BASE + 38
  127. #define FV OP_BASE + 39
  128. #define PMT OP_BASE + 40
  129. #define STINDEX OP_BASE + 41
  130. #define LOOKUP OP_BASE + 42
  131. #define ATAN2 OP_BASE + 43
  132. #define INDEX OP_BASE + 44
  133.  
  134. /* flag values */
  135. #define is_valid     0001
  136. #define is_changed   0002
  137. #define is_strexpr   0004
  138. #define is_leftflush 0010
  139. #define is_deleted   0020
  140.  
  141. #define ctl(c) ('c'&037)
  142. #define ESC 033
  143. #define DEL 0177
  144.  
  145. #define BYCOLS 1
  146. #define BYROWS 2
  147. #define BYGRAPH 4               /* Future */
  148.  
  149. #define TBL     1               /* tblprint style output for 'tbl' */
  150. #define LATEX   2               /* tblprint style output for 'LaTeX' */
  151. #define TEX     3               /* tblprint style output for 'TeX' */
  152.  
  153. /* Types for etype() */
  154.  
  155. #define NUM     1
  156. #define STR     2
  157.  
  158. extern struct ent *tbl[MAXROWS][MAXCOLS];
  159.  
  160. extern char curfile[];
  161. extern int strow, stcol;
  162. extern int currow, curcol;
  163. extern int savedrow, savedcol;
  164. extern int FullUpdate;
  165. extern int maxrow, maxcol;
  166. extern int fwidth[MAXCOLS];
  167. extern int precision[MAXCOLS];
  168. extern char col_hidden[MAXCOLS];
  169. extern char row_hidden[MAXROWS];
  170. extern char line[1000];
  171. extern int linelim;
  172. extern int changed;
  173. extern struct ent *to_fix;
  174. extern int showsc, showsr;
  175. extern struct enode *new();
  176. extern struct enode *new_const();
  177. extern struct enode *new_var();
  178. extern struct enode *new_str();
  179. extern struct enode *new_range();
  180. extern struct ent *lookat();
  181. extern struct enode *copye();
  182. extern char *coltoa();
  183. extern FILE *openout();
  184. extern struct range *find_range();
  185. extern char *v_name();
  186. extern char *r_name();
  187. extern double eval();
  188. extern char *seval();
  189. extern int modflg;
  190. extern int Crypt;
  191. extern char *mdir;
  192. extern char *xmalloc();
  193. extern int xfree();
  194. extern double prescale;
  195. extern int extfunc;
  196. extern int propagation;
  197. extern int calc_order;
  198. extern int autocalc;
  199. extern int numeric;
  200. extern int showcell;
  201. extern int showtop;
  202. extern int loading;
  203. extern int tbl_style;
  204. extern char *progname;
  205.  
  206. #if defined(BSD42) || defined(SYSIII)
  207.  
  208. #ifndef cbreak
  209. #define cbreak          crmode
  210. #define nocbreak        nocrmode
  211. #endif
  212.  
  213. #endif
  214.  
  215.