home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: Science / Science.zip / OS2SCALC.ZIP / SC.H < prev    next >
C/C++ Source or Header  |  1990-07-19  |  4KB  |  180 lines

  1. /*    VC    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.  *    OS/2 Modifications by Brady Flowers, 7/19/90
  8.  *
  9.  */
  10.  
  11. #include<stdio.h>
  12.  
  13. /* #ifdef MCH_AMIGA */
  14. /* #define ROWS    23 */
  15. /* #define COLS    79 */
  16. /* #else */
  17. /* #define ROWS    24 */
  18. /* #define COLS    80 */
  19. /* #endif */
  20.  
  21. #ifdef OS2
  22. #define VOID void
  23. #else
  24. #define VOID
  25. #ifndef NULL
  26. #define NULL 0L
  27. #endif
  28. #endif
  29.  
  30. #define MAXROWS 200
  31. #define MAXCOLS 40
  32.  
  33. struct ent {
  34.     double v;
  35.     char *label;
  36.     struct enode *expr;
  37.     short flags;
  38.     short row, col;
  39.     struct ent *next;
  40. };
  41.  
  42.  
  43. struct enode {
  44.     int op;
  45.     union {
  46.     double k;
  47.     struct ent *v;
  48.     struct {
  49.         struct enode *left, *right;
  50.     } o;
  51.     } e;
  52. };
  53.  
  54. /* op values */
  55. #define O_VAR 'v'
  56. #define O_CONST 'k'
  57. #define O_REDUCE(c) (c+0200)
  58.  
  59. /* flag values */
  60. #define is_valid     0001
  61. #define is_changed   0002
  62. #define is_lchanged  0004
  63. #define is_leftflush 0010
  64. #define is_deleted   0020
  65.  
  66.   /* NOTE: The original construct for teh ctl macro was 
  67.    *       #define ctl(c) ('c'&037)
  68.    *       which doesn't work under ANSI C.  The macro has
  69.    *       been replaced and all occurances of the construct
  70.    *       ctl(c) replaced with ctl('c')
  71.    */
  72. #define ctl(c) (c&037)
  73.  
  74. struct ent *tbl[MAXROWS][MAXCOLS];
  75.  
  76. int strow, stcol;
  77. int currow, curcol;
  78. int savedrow, savedcol;
  79. int FullUpdate;
  80. int maxrow, maxcol;
  81. int fwidth[MAXCOLS];
  82. int precision[MAXCOLS];
  83. char hidden_col[MAXCOLS];
  84. char hidden_row[MAXROWS];
  85. char line[1000];
  86. int linelim;
  87. int changed;
  88. struct ent *to_fix;
  89. #ifndef OS2
  90. struct enode *new();
  91. struct ent *lookat();
  92. struct enode *copye();
  93. #endif
  94. char *coltoa();
  95.  
  96. int modflg;
  97.  
  98. #ifdef OS2
  99.  
  100. /* Prototype! */
  101. /* sc.c */
  102. VOID error(char *fmt, ...);
  103. VOID yyerror(char *err);
  104. struct ent *lookat(int row, int col);
  105. VOID free_ent(register struct ent *p);
  106. VOID flush_saved(void);
  107. VOID update(void);
  108. void quit(void);
  109. int  main(int argc, char **argv);
  110. int  modcheck(char *endstr);
  111. VOID writefile(char *fname);
  112. VOID readfile(char *fname, int eraseflg);
  113. VOID erasedb(void);
  114.  
  115. /* cmds.c */
  116. VOID duprow(void);
  117. VOID dupcol(void);
  118. VOID insertrow(int arg);
  119. VOID deleterow(int arg);
  120. VOID insertcol(int arg);
  121. VOID deletecol(int arg);
  122. VOID valueizerow(int arg);
  123. VOID valueizecol(int arg);
  124. VOID erase_area(int sr, int sc, int er, int ec);
  125. VOID valueize_area(int sr, int sc, int er, int ec);
  126. VOID pullcells(int to_insert);
  127. VOID showcol_op(void);
  128. VOID showrow_op(void);
  129. int  get_qual(void);
  130. VOID openrow(int rs);
  131. VOID closerow(register int r);
  132. VOID opencol(int cs);
  133. VOID closecol(int cs);
  134.  
  135. /* lex.c */
  136. int  yylex(void);
  137. VOID initkbd(void);
  138. int  nmgetch(void);
  139. VOID debug(char *fmt, ... );
  140. char *strtof(register char *p, double *res);
  141. VOID help(void);
  142.  
  143. /* gram.c */
  144. int  yyparse(void);
  145.  
  146. /* interp.c */
  147. double dosum(int minr, int minc, int maxr, int maxc);
  148. double doprod(int minr, int minc, int maxr, int maxc);
  149. double doavg(int minr, int minc, int maxr, int maxc);
  150. double eval(register struct enode *e);
  151. VOID   EvalAll(void);
  152. int    RealEvalAll(void);
  153. #ifndef GRAM_C
  154. struct enode *new(int op, void *a1, void *a2);
  155. #endif
  156. VOID   copy(struct ent *dv, struct ent *v1, struct ent *v2);
  157. VOID   let(struct ent *v, struct enode *e);
  158. VOID   clearent(struct ent *v);
  159. int    constant(register struct enode *e);
  160. VOID   efree(register struct enode *e);
  161. VOID   label(register struct ent *v, register char *s, int flushdir);
  162. VOID   decodev(register struct ent *v);
  163. char   *coltoa(int col);
  164. VOID   decompile(register struct enode *e, int priority);
  165. VOID   editv(int row, int col);
  166. VOID   editexp(int row, int col);
  167. VOID   edits(int row, int col);
  168. VOID   printfile(char *fname);
  169. VOID   tblprintfile(char *fname);
  170. struct enode *copye(register struct enode *e, int Rdelta, int Cdelta);
  171. VOID   sync_refs(void);
  172. VOID   sync_ref(register struct enode *e);
  173. VOID   hiderow(int arg);
  174. VOID   hidecol(int arg);
  175. VOID   showrow(int r1, int r2);
  176. VOID   showcol(int c1, int c2);
  177.  
  178. #endif
  179.  
  180.