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 >
C/C++ Source or Header  |  1992-07-05  |  11KB  |  434 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.21 $
  10.  *
  11.  */
  12.  
  13. #if defined(MSDOS) || defined(__OS2__)
  14. # include <stdio.h>
  15. # if defined(__OS2__)
  16. #  define toascii(c) (c&0xFF)
  17. # endif
  18. #endif
  19.  
  20. #define    ATBL(tbl, row, col)    (*(tbl + row) + (col))
  21.  
  22. #define MINROWS 100     /* minimum size at startup */
  23. #define MINCOLS 30 
  24. #define    ABSMAXCOLS 702    /* absolute cols: ZZ (base 26) */
  25.  
  26. #define CRROWS 1
  27. #define CRCOLS 2
  28. #define RESCOL 4    /* columns reserved for row numbers */
  29. #define RESROW 3 /* rows reserved for prompt, error, and column numbers */
  30.  
  31. /* formats for engformat() */
  32. #define REFMTFIX    0
  33. #define REFMTFLT    1
  34. #define REFMTENG    2
  35. #define REFMTDATE    3
  36.  
  37. #define DEFWIDTH 10    /* Default column width and precision */
  38. #define DEFPREC   2
  39. #define DEFREFMT  REFMTFIX /* Make default format fixed point  THA 10/14/90 */
  40.  
  41. #define HISTLEN  10    /* Number of history entries for vi emulation */
  42. #ifdef PSC
  43. # define error(msg)    fprintf(stderr, msg);
  44. #else
  45. # define error (void)move(1,0), (void)clrtoeol(), (void) printw
  46. #endif
  47. #define    FBUFLEN    1024    /* buffer size for a single field */
  48. #define    PATHLEN    1024    /* maximum path length */
  49.  
  50. #ifndef A_CHARTEXT    /* Should be defined in curses.h */
  51. # ifdef INTERNATIONAL
  52. #  define A_CHARTEXT 0xff
  53. # else
  54. #  define A_CHARTEXT 0x7f
  55. # endif
  56. #endif
  57.  
  58. #if (defined(BSD42) || defined(BSD43)) && !defined(strrchr)
  59. #define strrchr rindex
  60. #endif
  61.  
  62. #if (defined(BSD42) || defined(BSD43)) && !defined(strchr)
  63. #define strchr index
  64. #endif
  65.  
  66. #ifdef SYSV4
  67. size_t    strlen();
  68. #endif
  69.  
  70. #ifndef FALSE
  71. # define    FALSE    0
  72. # define    TRUE    1
  73. #endif /* !FALSE */
  74.  
  75. /*
  76.  * ent_ptr holds the row/col # and address type of a cell
  77.  *
  78.  * vf is the type of cell address, 0 non-fixed, or bitwise OR of FIX_ROW or
  79.  *    FIX_COL
  80.  * vp : we just use vp->row or vp->col, vp may be a new cell just for holding
  81.  *    row/col (say in gram.y) or a pointer to an existing cell
  82.  */
  83. struct ent_ptr {
  84.     int vf;
  85.     struct ent *vp;
  86. };
  87.  
  88. /* holds the beginning/ending cells of a range */
  89. struct range_s {
  90.     struct ent_ptr left, right;
  91. };
  92.  
  93. /*
  94.  * Some not too obvious things about the flags:
  95.  *    is_valid means there is a valid number in v.
  96.  *    is_locked means that the cell cannot be edited.
  97.  *    label set means it points to a valid constant string.
  98.  *    is_strexpr set means expr yields a string expression.
  99.  *    If is_strexpr is not set, and expr points to an expression tree, the
  100.  *        expression yields a numeric expression.
  101.  *    So, either v or label can be set to a constant. 
  102.  *        Either (but not both at the same time) can be set from an expression.
  103.  */
  104.  
  105. #define VALID_CELL(p, r, c) ((p = *ATBL(tbl, r, c)) && \
  106.                  ((p->flags & is_valid) || p->label))
  107.  
  108. /* info for each cell, only alloc'd when something is stored in a cell */
  109. struct ent {
  110.     double v;        /* v && label are set in EvalAll() */
  111.     char *label;
  112.     struct enode *expr;    /* cell's contents */
  113.     short flags;    
  114.     short row, col;
  115.     struct ent *next;    /* next deleted ent (pulled, deleted cells) */
  116.     char *format;    /* printf format for this cell */
  117.     char cellerror;    /* error in a cell? */
  118. };
  119.  
  120. /* stores a range (left, right) */
  121. struct range {
  122.     struct ent_ptr r_left, r_right;
  123.     char *r_name;            /* possible name for this range */
  124.     struct range *r_next, *r_prev;    /* chained ranges */
  125.     int r_is_range;
  126. };
  127.  
  128. #define FIX_ROW 1
  129. #define FIX_COL 2
  130.  
  131. /* stores type of operation this cell will preform */
  132. struct enode {
  133.     int op;
  134.     union {
  135.     int gram_match;         /* some compilers (hp9000ipc) need this */
  136.     double k;        /* constant # */
  137.     struct ent_ptr v;    /* ref. another cell */
  138.     struct range_s r;    /* op is on a range */
  139.     char *s;        /* string part of a cell */
  140.     struct {        /* other cells use to eval()/seval() */
  141.         struct enode *left, *right;
  142.     } o;
  143.     } e;
  144. };
  145.  
  146. /* op values */
  147. #define O_VAR 'v'
  148. #define O_CONST 'k'
  149. #define O_ECONST 'E'    /* constant cell w/ an error */
  150. #define O_SCONST '$'
  151. #define REDUCE 0200    /* Or'ed into OP if operand is a range */
  152.  
  153. #define OP_BASE 256
  154. #define ACOS OP_BASE + 0
  155. #define ASIN OP_BASE + 1
  156. #define ATAN OP_BASE + 2
  157. #define CEIL OP_BASE + 3
  158. #define COS OP_BASE + 4
  159. #define EXP OP_BASE + 5 
  160. #define FABS OP_BASE + 6 
  161. #define FLOOR OP_BASE + 7
  162. #define HYPOT OP_BASE + 8
  163. #define LOG OP_BASE + 9
  164. #define LOG10 OP_BASE + 10
  165. #define POW OP_BASE + 11
  166. #define SIN OP_BASE + 12
  167. #define SQRT OP_BASE + 13
  168. #define TAN OP_BASE + 14
  169. #define DTR OP_BASE + 15
  170. #define RTD OP_BASE + 16
  171. #define MIN OP_BASE + 17
  172. #define MAX OP_BASE + 18
  173. #define RND OP_BASE + 19
  174. #define HOUR OP_BASE + 20
  175. #define MINUTE OP_BASE + 21
  176. #define SECOND OP_BASE + 22
  177. #define MONTH OP_BASE + 23
  178. #define DAY OP_BASE + 24
  179. #define YEAR OP_BASE + 25
  180. #define NOW OP_BASE + 26
  181. #define DATE OP_BASE + 27
  182. #define FMT OP_BASE + 28
  183. #define SUBSTR OP_BASE + 29
  184. #define STON OP_BASE + 30
  185. #define EQS OP_BASE + 31
  186. #define EXT OP_BASE + 32
  187. #define ELIST OP_BASE + 33    /* List of expressions */
  188. #define LMAX  OP_BASE + 34
  189. #define LMIN  OP_BASE + 35
  190. #define NVAL OP_BASE + 36
  191. #define SVAL OP_BASE + 37
  192. #define PV OP_BASE + 38
  193. #define FV OP_BASE + 39
  194. #define PMT OP_BASE + 40
  195. #define STINDEX OP_BASE + 41
  196. #define LOOKUP OP_BASE + 42
  197. #define ATAN2 OP_BASE + 43
  198. #define INDEX OP_BASE + 44
  199. #define DTS OP_BASE + 45
  200. #define TTS OP_BASE + 46
  201. #define ABS OP_BASE + 47 
  202. #define HLOOKUP OP_BASE + 48
  203. #define VLOOKUP OP_BASE + 49
  204. #define ROUND OP_BASE + 50
  205. #define IF OP_BASE + 51
  206. #define MYROW OP_BASE + 52
  207. #define MYCOL OP_BASE + 53
  208. #define COLTOA OP_BASE + 54
  209. #define UPPER OP_BASE + 55
  210. #define LOWER OP_BASE + 56
  211. #define CAPITAL OP_BASE + 57
  212. #define NUMITER    OP_BASE + 58
  213.  
  214. /* flag values */
  215. #define is_valid     0001
  216. #define is_changed   0002
  217. #define is_strexpr   0004
  218. #define is_leftflush 0010
  219. #define is_deleted   0020
  220. #define is_locked    0040
  221. #define is_label     0100
  222.  
  223. /* cell error (1st generation (ERROR) or 2nd+ (INVALID)) */
  224. #define    CELLOK        0
  225. #define    CELLERROR    1
  226. #define    CELLINVALID    2
  227.  
  228. #define ctl(c) ((c)&037)
  229. #define ESC 033
  230. #define DEL 0177
  231.  
  232. /* calculation order */
  233. #define BYCOLS 1
  234. #define BYROWS 2
  235.  
  236. /* tblprint style output for: */
  237. #define    TBL    1        /* 'tbl' */
  238. #define    LATEX    2        /* 'LaTeX' */
  239. #define    TEX    3        /* 'TeX' */
  240. #define    SLATEX    4        /* 'SLaTeX' (Scandinavian LaTeX) */
  241. #define    FRAME    5        /* tblprint style output for FrameMaker */
  242.  
  243. /* Types for etype() */
  244. #define NUM    1
  245. #define STR    2
  246.  
  247. #define    GROWAMT    30    /* default minimum amount to grow */
  248.  
  249. #define    GROWNEW        1    /* first time table */
  250. #define    GROWROW        2    /* add rows */
  251. #define    GROWCOL        3    /* add columns */
  252. #define    GROWBOTH    4    /* grow both */
  253. extern    struct ent ***tbl;    /* data table ref. in vmtbl.c and ATBL() */
  254.  
  255. extern    char curfile[];
  256. extern    int strow, stcol;
  257. extern    int currow, curcol;
  258. extern    int savedrow, savedcol;
  259. extern    int FullUpdate;
  260. extern    int maxrow, maxcol;
  261. extern    int maxrows, maxcols;    /* # cells currently allocated */
  262. extern    int *fwidth;
  263. extern    int *precision;
  264. extern  int *realfmt;
  265. extern    char *col_hidden;
  266. extern    char *row_hidden;
  267. extern    char line[FBUFLEN];
  268. extern    int linelim;
  269. extern    int changed;
  270. extern    struct ent *to_fix;
  271. extern    int showsc, showsr;
  272.  
  273. extern    FILE *openout();
  274. extern    FILE *fdopen(), *fopen();
  275. extern    char *coltoa();
  276. extern    char *findhome();
  277. extern    char *r_name();
  278. extern    char *scxmalloc();
  279. extern    char *scxrealloc();
  280. extern    char *strrchr();
  281. extern    char *v_name();
  282. extern    int any_locked_cells();
  283. extern    int are_ranges();
  284. extern    int atocol();
  285. extern    int cwritefile();
  286. extern    int engformat();
  287. extern    int etype();
  288. extern    int fork();
  289. extern    int format();
  290. extern    int get_rcqual();
  291. extern    int growtbl();
  292. extern    int locked_cell();
  293. extern    int modcheck();
  294. extern    int nmgetch();
  295. extern    int writefile();
  296. extern    int yn_ask();
  297. extern    struct enode *copye();
  298. extern    struct enode *new();
  299. extern    struct enode *new_const();
  300. extern    struct enode *new_range();
  301. extern    struct enode *new_str();
  302. extern    struct enode *new_var();
  303. extern    struct ent *lookat();
  304. extern    struct range *find_range();
  305. extern    void EvalAll();
  306. extern    void add_range();
  307. extern    void backcol();
  308. extern    void backrow();
  309. extern    void checkbounds();
  310. extern    void clearent();
  311. extern    void clean_range();
  312. extern    void closecol();
  313. extern    void closeout();
  314. extern    void closerow();
  315. extern    void colshow_op();
  316. extern    void copy();
  317. extern    void copyent();
  318. extern    void creadfile();
  319. extern    void deleterow();
  320. extern    void del_range();
  321. extern    void deraw();
  322. extern    void diesave();
  323. extern    void doend();
  324. extern    void doformat();
  325. extern    void dupcol();
  326. extern    void duprow();
  327. extern    void editexp();
  328. extern    void editfmt();
  329. extern    void edit_mode();
  330. extern    void edits();
  331. extern    void editv();
  332. extern    void efree();
  333. extern    void erase_area();
  334. extern    void erasedb();
  335. extern    void eraser();
  336. extern    void fill();
  337. extern    void flush_saved();
  338. extern    void format_cell();
  339. extern    void forwcol();
  340. extern    void forwrow();
  341. extern    void free_ent();
  342. extern    void go_last();
  343. extern    void goraw();
  344. extern    void help();
  345. extern    void hide_col();
  346. extern    void hide_row();
  347. extern    void hidecol();
  348. extern    void hiderow();
  349. extern    void initkbd();
  350. extern    void ins_string();
  351. extern    void insert_mode();
  352. extern    void insertrow();
  353. extern    void kbd_again();
  354. extern    void label();
  355. extern    void let();
  356. extern    void list_range();
  357. extern    void lock_cells();
  358. extern    void moveto();
  359. extern    void num_search();
  360. extern    void opencol();
  361. extern    void printfile();
  362. extern    void pullcells();
  363. extern    void readfile();
  364. extern    void resetkbd();
  365. extern    void rowshow_op();
  366. extern    void scxfree();
  367. extern    void setauto();
  368. extern    void setiterations();
  369. extern    void setorder();
  370. extern    void showcol();
  371. extern    void showdr();
  372. extern    void showrow();
  373. extern    void showstring();
  374. extern    void signals();
  375. extern    void slet();
  376. extern    void startshow();
  377. extern    void str_search();
  378. extern    void sync_ranges();
  379. extern    void sync_refs();
  380. extern    void tblprintfile();
  381. extern    void unlock_cells();
  382. extern    void valueize_area();
  383. extern    void write_fd();
  384. extern    void write_line();
  385. extern    void write_range();
  386. extern    void yyerror();
  387. #ifdef DOBACKUPS
  388. extern    int backup_file();
  389. #endif
  390.  
  391. extern    int modflg;
  392. #if !defined(VMS) && !defined(MSDOS) && !defined(__OS2__) && defined(CRYPT_PATH)
  393. extern    int Crypt;
  394. #endif
  395. extern    char *mdir;
  396. extern    double prescale;
  397. extern    int extfunc;
  398. extern    int propagation;
  399. extern    int repct;
  400. extern    int calc_order;
  401. extern    int autocalc;
  402. extern    int autolabel;
  403. extern    int numeric;
  404. extern    int showcell;
  405. extern    int showtop;
  406. extern    int loading;
  407. extern    int getrcqual;
  408. extern    int tbl_style;
  409. extern    int rndinfinity;
  410. extern    char *progname;
  411. extern    int craction;
  412. extern    int rowlimit;
  413. extern    int collimit;
  414.  
  415. #if BSD42 || SYSIII
  416.  
  417. #ifndef cbreak
  418. #define    cbreak        crmode
  419. #define    nocbreak    nocrmode
  420. #endif
  421.  
  422. #endif
  423.  
  424. #if defined(BSD42) || defined(BSD43) && !defined(ultrix)
  425. # define memcpy(dest, source, len)    bcopy(source, dest, (unsigned int)len);
  426. # define memset(dest, zero, len)    bzero((dest), (unsigned int)(len));
  427. #else
  428. # if defined(__OS2__)
  429. #  include <string.h>
  430. # else
  431. #  include <memory.h>
  432. # endif
  433. #endif
  434.