home *** CD-ROM | disk | FTP | other *** search
/ pc.louisiana.edu/pub/unix/ / Louisiana_UNIX.tar / Louisiana_UNIX / xspread3.0.zoo / sc.h < prev    next >
C/C++ Source or Header  |  1994-03-25  |  20KB  |  721 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 A $
  10.  *
  11.  */
  12.  
  13. #if defined(MSDOS)
  14. #include <stdio.h>
  15. #endif
  16. #include <limits.h>
  17.  
  18. #define    ATBL(tbl, row, col)    (*(tbl + row) + (col))
  19.  
  20. #define MINROWS 100     /* minimum size at startup */
  21. #define MINCOLS 30 
  22. #define    ABSMAXCOLS 702    /* absolute cols: ZZ (base 26) */
  23.  
  24. #ifdef PSC
  25. #define error(s) fprintf(stderr,s)
  26. #endif
  27.  
  28. #ifdef DOINGX
  29. /*the following give the minimum size of the main window, in text coordinates*/ 
  30. #define MIN_COLS 80
  31. #define MIN_ROWS 25
  32. #endif
  33.  
  34. #define REG_LEN 28      /* following eight moved here by Bob Parbs 12-92 */
  35. #define ROWLIM  5       /* increased to five from four after move */
  36. #define COLIM   3 
  37. #define TSSIZE  15
  38. #define MAXSS   2000
  39. #define MINMAX  25
  40. #define MAXROW  25 
  41. #define MAXCOL  25      /* moved from matrix.c */
  42.  
  43. #define CRCOLS 1
  44. #define CRROWS 2
  45. #define RESCOL 4    /* columns reserved for row numbers */
  46. /*#ifdef DOINGX*/
  47. #define RESROW 4 /* rows reserved for prompt, error, and column numbers */
  48. /*#else
  49. #define RESROW 3 */ /* rows reserved for prompt, error, and column numbers */
  50. /*#endif*/
  51.  
  52. /* formats for engformat() */
  53. #define REFMTFIX    0    /* fixed point: -0.00010 */
  54. #define REFMTFLT    1    /* scientific notation: -1.00E\-04 */
  55. #define REFMTENG    2    /* engineering notation: -100.00u */
  56. #define REFMTDATE    3    /* dates: 05/15/92 */
  57. #define REFMTEXP    4    /* modulo 3 exponent notation: -100.E-06 */
  58.  
  59. #define DEFWIDTH 10    /* Default column width and precision */
  60. #define DEFPREC   2
  61. #define DEFREFMT  REFMTFIX /* Make default format fixed point  THA 10/14/90 */
  62.  
  63. #define HISTLEN  10    /* Number of history entries for vi emulation */
  64.  
  65. #define    FBUFLEN    1024    /* buffer size for a single field */
  66.  
  67.     /* maximum path length */
  68. #ifdef PATH_MAX
  69. # define    PATHLEN    PATH_MAX
  70. #else
  71. # ifdef PATHSIZE
  72. #  define    PATHLEN    PATHSIZE
  73. # else
  74. #  define    PATHLEN    1024
  75. # endif
  76. #endif
  77.  
  78. #ifndef A_CHARTEXT    /* Should be defined in curses.h */
  79. # ifdef INTERNATIONAL
  80. #  define A_CHARTEXT 0xff
  81. # else
  82. #  define A_CHARTEXT 0x7f
  83. # endif
  84. #endif
  85.  
  86. #ifndef FALSE
  87. # define    FALSE    0
  88. # define    TRUE    1
  89. #endif /* !FALSE */
  90.  
  91. #ifdef SIGVOID
  92. typedef void    sig_type;
  93. #else
  94. typedef int    sig_type;
  95. #endif
  96.  
  97. /*
  98.  * ent_ptr holds the row/col # and address type of a cell
  99.  *
  100.  * vf is the type of cell address, 0 non-fixed, or bitwise OR of FIX_ROW or
  101.  *    FIX_COL
  102.  * vp : we just use vp->row or vp->col, vp may be a new cell just for holding
  103.  *    row/col (say in gram.y) or a pointer to an existing cell
  104.  */
  105. struct ent_ptr {
  106.     int vf;
  107.     struct ent *vp;
  108. };
  109.  
  110. /* holds the beginning/ending cells of a range */
  111. struct range_s {
  112.     struct ent_ptr left, right;
  113. };
  114.  
  115. /*
  116.  * Some not too obvious things about the flags:
  117.  *    is_valid means there is a valid number in v.
  118.  *    is_locked means that the cell cannot be edited.
  119.  *    label set means it points to a valid constant string.
  120.  *    is_strexpr set means expr yields a string expression.
  121.  *    If is_strexpr is not set, and expr points to an expression tree, the
  122.  *        expression yields a numeric expression.
  123.  *    So, either v or label can be set to a constant. 
  124.  *        Either (but not both at the same time) can be set from an expression.
  125.  */
  126.  
  127. #define VALID_CELL(p, r, c) ((p = *ATBL(tbl, r, c)) && \
  128.                  ((p->flags & is_valid) || p->label))
  129.  
  130. /* info for each cell, only alloc'd when something is stored in a cell */
  131. struct ent {
  132.     double v;        /* v && label are set in EvalAll() */
  133.     char *label;
  134.     struct enode *expr;    /* cell's contents */
  135.     short flags;    
  136.     short row, col;
  137.     struct ent *next;    /* next deleted ent (pulled, deleted cells) */
  138.     char *format;    /* printf format for this cell */
  139.     char cellerror;    /* error in a cell? */
  140. };
  141.  
  142. /* stores a range (left, right) */
  143. struct range {
  144.     struct ent_ptr r_left, r_right;
  145.     char *r_name;            /* possible name for this range */
  146.     struct range *r_next, *r_prev;    /* chained ranges */
  147.     int r_is_range;
  148. };
  149.  
  150. #define FIX_ROW 1
  151. #define FIX_COL 2
  152.  
  153. /* stores type of operation this cell will preform */
  154. struct enode {
  155.     int op;
  156.     union {
  157.     int gram_match;         /* some compilers (hp9000ipc) need this */
  158.     double k;        /* constant # */
  159.     struct ent_ptr v;    /* ref. another cell */
  160.     struct range_s r;    /* op is on a range */
  161.     char *s;        /* string part of a cell */
  162.     struct {        /* other cells use to eval()/seval() */
  163.         struct enode *left, *right;
  164.     } o;
  165.     } e;
  166. };
  167.  
  168. /* following structure moved from matrix.c by Bob Parbs 12-92 */
  169. struct m_range_sd{
  170.     int ssr,ser,ssc,sec;
  171.     int dsr,der,dsc,dec;
  172.     };
  173.  
  174. /* this struct also moved from matrix.c by Bob Parbs 12-92 */
  175. struct m_range{
  176.     int sr,er,sc,ec;
  177.     };
  178.  
  179. /* op values */
  180. #define O_VAR        'v'
  181. #define O_CONST        'k'
  182. #define O_ECONST    'E'    /* constant cell w/ an error */
  183. #define O_SCONST    '$'
  184. #define REDUCE        0200    /* Or'ed into OP if operand is a range */
  185.  
  186. #define OP_BASE    256
  187. #define ACOS    (OP_BASE + 0)
  188. #define ASIN    (OP_BASE + 1)
  189. #define ATAN    (OP_BASE + 2)
  190. #define CEIL    (OP_BASE + 3)
  191. #define COS    (OP_BASE + 4)
  192. #define EXP    (OP_BASE + 5)
  193. #define FABS    (OP_BASE + 6)
  194. #define FLOOR    (OP_BASE + 7)
  195. #define HYPOT    (OP_BASE + 8)
  196. #define LOG    (OP_BASE + 9)
  197. #define LOG10    (OP_BASE + 10)
  198. #define POW    (OP_BASE + 11)
  199. #define SIN    (OP_BASE + 12)
  200. #define SQRT    (OP_BASE + 13)
  201. #define TAN    (OP_BASE + 14)
  202. #define DTR    (OP_BASE + 15)
  203. #define RTD    (OP_BASE + 16)
  204. #define MINR    (OP_BASE + 17)    /* MIN/MAX might already be macros ... */
  205. #define MAXR    (OP_BASE + 18)
  206. #define RND    (OP_BASE + 19)
  207. #define HOUR    (OP_BASE + 20)
  208. #define MINUTE    (OP_BASE + 21)
  209. #define SECOND    (OP_BASE + 22)
  210. #define MONTH    (OP_BASE + 23)
  211. #define DAY    (OP_BASE + 24)
  212. #define YEAR    (OP_BASE + 25)
  213. #define NOW    (OP_BASE + 26)
  214. #define DATE    (OP_BASE + 27)
  215. #define FMT    (OP_BASE + 28)
  216. #define SUBSTR    (OP_BASE + 29)
  217. #define STON    (OP_BASE + 30)
  218. #define EQS    (OP_BASE + 31)
  219. #define EXT    (OP_BASE + 32)
  220. #define ELIST    (OP_BASE + 33)    /* List of expressions */
  221. #define LMAX    (OP_BASE + 34)
  222. #define LMIN    (OP_BASE + 35)
  223. #define NVAL    (OP_BASE + 36)
  224. #define SVAL    (OP_BASE + 37)
  225. #define PV    (OP_BASE + 38)
  226. #define FV    (OP_BASE + 39)
  227. #define PMT    (OP_BASE + 40)
  228. #define STINDEX    (OP_BASE + 41)
  229. #define LOOKUP    (OP_BASE + 42)
  230. #define ATAN2    (OP_BASE + 43)
  231. #define INDEX    (OP_BASE + 44)
  232. #define DTS    (OP_BASE + 45)
  233. #define TTS    (OP_BASE + 46)
  234. #define ABS    (OP_BASE + 47)
  235. #define HLOOKUP    (OP_BASE + 48)
  236. #define VLOOKUP    (OP_BASE + 49)
  237. #define ROUND    (OP_BASE + 50)
  238. #define IF    (OP_BASE + 51)
  239. #define MYROW    (OP_BASE + 52)
  240. #define MYCOL    (OP_BASE + 53)
  241. #define COLTOA    (OP_BASE + 54)
  242. #define UPPER    (OP_BASE + 55)
  243. #define LOWER    (OP_BASE + 56)
  244. #define CAPITAL    (OP_BASE + 57)
  245. #define NUMITER    (OP_BASE + 58)
  246. #define MATRIX_ADD   (OP_BASE + 59)
  247. #define MATRIX_SUB   (OP_BASE + 60)
  248. #define MATRIX_INV   (OP_BASE + 61)
  249. #define MATRIX_MULT  (OP_BASE + 62)
  250. #define MATRIX_TRANS (OP_BASE + 63)
  251.  
  252. /* flag values */
  253. #define is_valid     0001
  254. #define is_changed   0002
  255. #define is_strexpr   0004
  256. #define is_leftflush 0010
  257. #define is_deleted   0020
  258. #define is_locked    0040
  259. #define is_label     0100
  260.  
  261. /* cell error (1st generation (ERROR) or 2nd+ (INVALID)) */
  262. #define    CELLOK        0
  263. #define    CELLERROR    1
  264. #define    CELLINVALID    2
  265.  
  266. #define ctl(c)    ((c)&037)
  267. #define ESC    033
  268. #define DEL    0177
  269.  
  270. /* calculation order */
  271. #define BYCOLS    1
  272. #define BYROWS    2
  273.  
  274. /* tblprint style output for: */
  275. #define    TBL    1        /* 'tbl' */
  276. #define    LATEX    2        /* 'LaTeX' */
  277. #define    TEX    3        /* 'TeX' */
  278. #define    SLATEX    4        /* 'SLaTeX' (Scandinavian LaTeX) */
  279. #define    FRAME    5        /* tblprint style output for FrameMaker */
  280.  
  281. /* Types for etype() */
  282. #define NUM    1
  283. #define STR    2
  284.  
  285. #define    GROWAMT    30    /* default minimum amount to grow */
  286.  
  287. #define    GROWNEW        1    /* first time table */
  288. #define    GROWROW        2    /* add rows */
  289. #define    GROWCOL        3    /* add columns */
  290. #define    GROWBOTH    4    /* grow both */
  291. extern    struct ent ***tbl;    /* data table ref. in vmtbl.c and ATBL() */
  292.  
  293. extern char    curfile[];
  294. extern int    strow, stcol;
  295. extern int    currow, curcol;
  296. extern int    savedrow, savedcol;
  297. extern int    FullUpdate;
  298. extern int    maxrow, maxcol;
  299. extern int    maxrows, maxcols;    /* # cells currently allocated */
  300. extern int    *fwidth;
  301. extern int    *precision;
  302. extern int    *realfmt;
  303. extern char    *col_hidden;
  304. extern char    *row_hidden;
  305. extern char    line[FBUFLEN];
  306. extern int    linelim;
  307. extern int    changed;
  308. extern struct ent *to_fix;
  309. extern int    showsc, showsr;
  310. /*extern char     prvstring[1024];/*to store last string Bob Parbs 12-92 */
  311. extern char    stringbuf[FBUFLEN];
  312. extern int    maintextrows,    /* text rows in mainwin */
  313.         maintextcols;    /* text cols in mainwin */
  314. extern int    running;    /* are we done? -be careful on use... */
  315.  
  316. #ifdef __STDC__
  317.  
  318. extern void    EvalAll(void);
  319. extern void    add_range(char *, struct ent_ptr, struct ent_ptr, int);
  320. extern int    any_locked_cells(int, int, int, int);
  321. extern int    are_ranges(void);
  322. extern int    atocol(char *, int);
  323. extern void    backcol(int);
  324. extern void    backrow(int);
  325. #ifdef DOBACKUPS
  326. extern int    backup_file(char *);
  327. #endif
  328. extern void    checkbounds(int *, int *);
  329. extern void    clean_range(void);
  330. extern void    clearent(struct ent *);
  331. extern void    clearlines(int, int);
  332. extern void    closecol(int, int);
  333. extern void    closeout(FILE *, int);
  334. extern void    closerow(int);
  335. extern void    colshow_op(void);
  336. extern char *    coltoa(int);
  337. extern void    copy(struct ent *, struct ent *, struct ent *, struct ent *);
  338. extern struct enode *    copye(struct enode *, int, int);
  339. extern void    copyent(struct ent *, struct ent *, int, int);
  340. extern void    creadfile(char *, int);
  341. extern void    cr_line(void);
  342. extern int    cwritefile(char *, int, int, int, int);
  343. extern void    del_range(struct ent *, struct ent *);
  344. extern void    deleterow(int);
  345. extern void    deraw(void);
  346. extern void    diesave(void);
  347. extern double    dodts(int, int, int);
  348. extern void    doend(int, int);
  349. extern void    doformat(int, int, int, int, int);
  350. extern void    dupcol(void);
  351. extern void    duprow(void);
  352. extern void    edit_mode(void);
  353. extern void    editexp(int, int);
  354. extern void    editfmt(int, int);
  355. extern void    edits(int, int);
  356. extern void    editv(int, int);
  357. extern void    efree(struct enode *);
  358. extern int    engformat(int, int, int, double, char *, int);
  359. extern void    erase_area(int, int, int, int);
  360. extern void    erasedb(void);
  361. extern void    eraser(struct ent *, struct ent *);
  362. extern int    etype(struct enode *);
  363. extern void    fill(struct ent *, struct ent *, double, double);
  364. extern struct range *    find_range(char *, int, struct ent *, struct ent *);
  365. extern char *    findhome(char *);
  366. extern void    flush_saved(void);
  367. extern int    format(char *, double, char *, int);
  368. extern void    format_cell(struct ent *, struct ent *, char *);
  369. extern void    forwcol(int);
  370. extern void    forwrow(int);
  371. extern void    free_ent(struct ent *);
  372. extern char *    fsuffix(char *, char *);
  373. #ifndef DOINGX
  374. extern int    get_rcqual(int);
  375. #else
  376. extern char *    get_str(char *, int);
  377. #endif
  378. extern void    go_last(void);
  379. extern void    goraw(void);
  380. extern int    growtbl(int, int, int);
  381. extern void    help(void);
  382. extern void    hide_col(int);
  383. extern void    hide_row(int);
  384. extern void    hidecol(int);
  385. extern void    hiderow(int);
  386. extern void    initkbd(void);
  387. extern void    ins_string(char *);
  388. extern void    insert_mode(void);
  389. extern void    insertrow(int);
  390. extern void    kbd_again(void);
  391. extern void    label(struct ent *, char *, int);
  392. extern void    let(struct ent *, struct enode *);
  393. extern void    list_range(FILE *);
  394. extern void    lock_cells(struct ent *, struct ent *);
  395. extern int    locked_cell(int, int);
  396. extern struct ent *    lookat(int, int);
  397. extern int    modcheck(char *);
  398. extern void    moveto(int, int);
  399. extern struct enode *    new(int, struct enode *, struct enode *);
  400. extern struct enode *    new_const(int, double);
  401. extern struct enode *    new_range(int, struct range_s);
  402. extern struct enode *    new_str(char *);
  403. extern struct enode *    new_var(int, struct ent_ptr);
  404. extern int    nmgetch(void);
  405. extern void    num_search(double, int);
  406. extern void    opencol(int, int);
  407. extern FILE *    openout(char *, int *);
  408. extern void    printfile(char *, int, int, int, int);
  409. extern void    pullcells(int);
  410. extern char *    r_name(int, int, int, int);
  411. extern void    readfile(char *, int);
  412. extern void    repaint(int, int, int);
  413. extern void    resetkbd(void);
  414. extern void    rowshow_op(void);
  415. extern void    scxfree(char *);
  416. extern char *    scxmalloc(unsigned int);
  417. extern char *    scxrealloc(char *, unsigned int);
  418. extern void    setauto(int);
  419. extern void    setiterations(int);
  420. extern void    setorder(int);
  421. extern void    show_top_line(void);
  422. extern void    showcol(int, int);
  423. extern void    showdr(void);
  424. extern void    showrow(int, int);
  425. extern void    showstring(char *, int, int, int, int, int    *, int, int *,int,int);
  426. extern void    signals(void);
  427. extern void    slet(struct ent *, struct enode *, int);
  428. extern void    startdisp(void);
  429. extern void    startshow(void);
  430. extern void    stopdisp(void);
  431. extern void    str_search(char *);
  432. extern void    sync_ranges(void);
  433. extern void    sync_refs(void);
  434. extern void    tblprintfile(char *, int, int, int, int);
  435. extern sig_type    time_out(int);
  436. extern void    unlock_cells(struct ent *, struct ent *);
  437. extern void    update(int);
  438. extern char *    v_name(int, int);
  439. extern void    valueize_area(int, int, int, int);
  440. extern void    write_fd(FILE *, int, int, int, int);
  441. extern void    write_line(int);
  442. extern void    write_range(FILE *);
  443. extern int    writefile(char *, int, int, int, int);
  444. extern int    yn_ask(char *);
  445. extern void    yyerror(char *);
  446.  
  447. #else    /* __STDC__ */
  448.  
  449. extern void    EvalAll();
  450. extern void    add_range();
  451. extern void     addmatrix();       /* added by Bob Parbs 12-92 */
  452. extern int    any_locked_cells();
  453. extern int    are_ranges();
  454. extern int    atocol();
  455. extern void    backcol();
  456. extern void    backrow();
  457. #ifdef DOBACKUPS
  458. extern int    backup_file();
  459. #endif
  460. extern void    checkbounds();
  461. extern void    clean_range();
  462. extern void    clearent();
  463. extern void    clearlines(/*startrow, endrow*/);
  464. extern void    closecol();
  465. extern void    closeout();
  466. extern void    closerow();
  467. extern void    colshow_op();
  468. extern char *    coltoa();
  469. extern int      convert();         /* added by Bob Parbs 12-92 */ 
  470. extern void    copy();
  471. extern struct enode *    copye();
  472. extern void    copyent();
  473. extern void    creadfile();
  474. extern void    cr_line();
  475. extern int    cwritefile();
  476. extern void    del_range();
  477. extern void    deleterow();
  478. extern void    deraw();
  479. extern void    diesave();
  480. extern double    dodts();
  481. extern void    doend();
  482. extern void    doformat();
  483. extern void    dupcol();
  484. extern void    duprow();
  485. extern void    edit_mode();
  486. extern void    editexp();
  487. extern void    editfmt();
  488. extern void    edits();
  489. extern void    editv();
  490. extern void    efree();
  491. extern int    engformat();
  492. extern void    erase_area();
  493. extern void    erasedb();
  494. extern void    eraser();
  495. extern int    etype();
  496. extern void    fill();
  497. extern struct range *    find_range();
  498. extern struct m_range_sd * find_rge();   /* added by Bob Parbs 12-92 */
  499. extern struct m_range * findrge();       /* Bob Parbs 12-92 */
  500. extern char *    findhome();
  501. extern void    flush_saved();
  502. extern int    format();
  503. extern void    format_cell();
  504. extern void    forwcol();
  505. extern void    forwrow();
  506. extern void    free_ent();
  507. extern char *    fsuffix();
  508. extern void     get_add();               /* Bob Parbs 12-92 */
  509. extern void     get_invert();            /* Bob Parbs 12-92 */
  510. extern void     get_mult();              /* Bob Parbs 12-92 */
  511. #ifndef DOINGX
  512. extern int    get_rcqual();
  513. #else
  514. extern char *    get_str();
  515. #endif
  516. extern void     get_sub();               /* Bob Parbs 12-92 */
  517. extern void     get_trans();             /* Bob Parbs 12-92 */
  518. extern void    go_last();
  519. extern void    goraw();
  520. extern int    growtbl();
  521. extern void    help();
  522. extern void    hide_col();
  523. extern void    hide_row();
  524. extern void    hidecol();
  525. extern void    hiderow();
  526. extern void    initkbd();
  527. extern void    ins_string();
  528. extern void    insert_mode();
  529. extern void    insertrow();
  530. extern void     invertmatrix();          /* Bob Parbs 12-92 */
  531. extern void    kbd_again();
  532. extern void    label();
  533. extern void    let();
  534. extern void    list_range();
  535. extern void    lock_cells();
  536. extern int    locked_cell();
  537. extern struct ent *    lookat();
  538. extern int    modcheck();
  539. extern void    moveto();
  540. extern void     multmatrix();            /* Bob Parbs 12-92 */
  541. extern void     multmatrix1();           /* Bob Parbs 12-92 */
  542. extern struct enode *    new();
  543. extern struct enode *    new_const();
  544. extern struct enode *    new_range();
  545. extern struct enode *    new_str();
  546. extern struct enode *    new_var();
  547. extern int    nmgetch();
  548. extern void    num_search();
  549. extern void    opencol();
  550. extern FILE *    openout();
  551. extern void    printfile();
  552. extern void    pullcells();
  553. extern char *    r_name();
  554. extern void    readfile();
  555. extern void    repaint();
  556. extern void    resetkbd();
  557. extern void    rowshow_op();
  558. extern void    scxfree();
  559. extern char *    scxmalloc();
  560. extern char *    scxrealloc();
  561. extern void    setauto();
  562. extern void    setiterations();
  563. extern void    setorder();
  564. extern void    show_top_line();
  565. extern void    showcol();
  566. extern void    showdr();
  567. extern void    showrow();
  568. extern void    showstring();
  569. extern void    signals();
  570. extern void    slet();
  571. extern void    startdisp();
  572. extern void    startshow();
  573. extern void    stopdisp();
  574. extern void    str_search();
  575. extern void     submatrix();              /* Bob Parbs 12-92 */
  576. extern void    sync_ranges();
  577. extern void    sync_refs();
  578. extern void    tblprintfile();
  579. extern sig_type    time_out();
  580. extern void     transpose();              /* Bob Parbs 12-92 */
  581. extern void    unlock_cells();
  582. extern void    update();
  583. extern char *    v_name();
  584. extern void    valueize_area();
  585. extern void    write_fd();
  586. extern void    write_line();
  587. extern void    write_range();
  588. extern int    writefile();
  589. extern int    yn_ask();
  590. extern void    yyerror();
  591.  
  592. #endif    /* __STDC__ */
  593.  
  594. #if !defined(VMS) && !defined(MSDOS) && defined(CRYPT_PATH)
  595. extern int    Crypt;
  596. #endif
  597. extern int    autocalc;
  598. extern int    autolabel;
  599. extern int    calc_order;
  600. extern int    collimit;
  601. extern int    craction;
  602. extern int    extfunc;
  603. extern int    getrcqual;
  604. extern int    loading;
  605. extern char *    mdir;
  606. extern int    modflg;
  607. extern int    numeric;
  608. extern double    prescale;
  609. extern char *    progname;
  610. extern int    propagation;
  611. extern int    repct;
  612. extern int    rndinfinity;
  613. extern int    rowlimit;
  614. extern int    showcell;
  615. extern int    showtop;
  616. extern int    tbl_style;
  617.  
  618. #if BSD42 || SYSIII
  619.  
  620. #ifndef cbreak
  621. #define    cbreak        crmode
  622. #define    nocbreak    nocrmode
  623. #endif
  624.  
  625. #endif
  626.  
  627. #if ( defined(BSD42) || defined(BSD43) || defined(__convex__) ) && !defined(ultrix) && !defined(__osf__)
  628.  
  629. #define    memcpy(dest, source, len)    bcopy(source, dest, (unsigned int)len);
  630. #define    memset(dest, zero, len)        bzero((dest), (unsigned int)(len));
  631. #else
  632. #include <memory.h>
  633. #endif
  634.  
  635. /*
  636.  * Feature-setting declarations.  Can be used to control the default
  637.  * setting of various features.
  638.  */
  639.  
  640. #ifndef    SHOWCURSOR
  641. #define    SHOWCURSOR    TRUE
  642. #endif
  643.  
  644. #ifndef CASEINSENSITIVECMDLINE    /* Peter Doemel, 11-Feb-1993 */
  645. # if defined(VMS) || defined(MSDOS)
  646. #  define CASEINSENSITIVECMDLINE
  647. # endif
  648. #endif
  649.  
  650. /*
  651.  * Declarations of standard functions used in various places.  Mostly
  652.  * to shut up line and 'gcc -Wall'.
  653.  */
  654.  
  655. #ifdef __STDC__
  656. #include <stdlib.h>
  657. #include <unistd.h>
  658. #include <ctype.h>
  659.  
  660. extern int    re_exec();
  661. extern int    stty();
  662. extern int    wait();
  663. extern int    yylex(void);
  664. extern int    yyparse();
  665.  
  666. #else    /* __STDC__ */
  667.  
  668. extern int    _filbuf();
  669. extern int    _flsbuf();
  670. extern int    alarm();
  671. extern int    close();
  672. extern int    dup();
  673. extern int    endwin();
  674. extern int    execl();
  675. #ifdef SYSV3
  676. extern void    exit();
  677. #endif
  678. extern int    fclose();
  679. extern FILE *    fdopen();
  680. extern int    fflush();
  681. extern FILE *    fopen();
  682. extern int    fork();
  683. extern int    fprintf();
  684. extern int    fputs();
  685. extern char    *getenv();
  686. extern int    ioctl();
  687. extern int    kill();
  688. extern int    pclose();
  689. extern int    pipe();
  690. extern FILE *    popen();
  691. extern double    pow();
  692. extern int    printf();
  693. extern int    printw();
  694. extern int    puts();
  695. extern int    re_exec();
  696. extern int    read();
  697. extern char *    strchr();
  698. extern char *    strrchr();
  699. /*extern int    strlen();*/
  700. /*extern size_t    strlen();*/
  701. extern int    stty();
  702. extern long    time();
  703. extern int    tolower();
  704. extern int    toupper();
  705. extern int    waddch();
  706. extern int    waddstr();
  707. extern int    wait();
  708. extern int    wclear();
  709. extern int    wclrtobot();
  710. extern int    wclrtoeol();
  711. extern int    wmove() ;
  712. extern int    wmove();
  713. extern int    wrefresh();
  714. extern int    write();
  715. extern int    wstandend();
  716. extern int    wstandout();
  717. extern int    yylex();
  718. extern int    yyparse();
  719.  
  720. #endif    /* __STDC__ */
  721.