diff options
author | mongo <mongo@iomega> | 2016-04-15 16:20:17 -0300 |
---|---|---|
committer | mongo <mongo@iomega> | 2016-04-15 16:20:17 -0300 |
commit | f686ba184e0af3fd37aa8a743631a7a376f30843 (patch) | |
tree | e9a48dc691511a2961f93163944ba0ca1a84e5b3 /src/sc.h | |
parent | c0a088d7a4bc61e6e69fa5bd8964c39f68507c71 (diff) |
Renamed src.scim2 to src
Diffstat (limited to 'src/sc.h')
-rwxr-xr-x | src/sc.h | 389 |
1 files changed, 389 insertions, 0 deletions
diff --git a/src/sc.h b/src/sc.h new file mode 100755 index 0000000..c375fb8 --- /dev/null +++ b/src/sc.h @@ -0,0 +1,389 @@ +#ifndef SC_H_ +#define SC_H_ + +#include <stdio.h> +#include <memory.h> + +#define ATBL(tbl, row, col) (*(tbl + row) + (col)) +#define MINROWS 100 /* minimum size at startup */ + +/* MAX rows size of sheet. Default 65536. */ +/* Can be changed up to 1048576 in Makefile */ +#ifndef MAXROWS +#define MAXROWS 65536 +#endif + +#define MINCOLS 30 +#define ABSMAXCOLS 702 /* MAX cols. (ZZ in base 26) */ +#define CRROWS 1 +#define CRCOLS 2 +/* formats for engformat() */ +#define REFMTFIX 0 +#define REFMTFLT 1 +#define REFMTENG 2 +#define REFMTDATE 3 +#define REFMTLDATE 4 +#define DEFWIDTH 10 /* Default column width and precision */ +#define DEFPREC 2 +#define DEFREFMT REFMTFIX /* Make default format fixed point THA 10/14/90 */ +#define FKEYS 24 /* Number of function keys available */ +#define COLFORMATS 10 /* Number of custom column formats */ +#define FBUFLEN 1024 /* buffer size for a single field */ +#define PATHLEN 1024 /* maximum path length */ +#define MAXCMD 160 /* for ! command and commands that use the pager */ + +#ifndef DFLT_PAGER + #define DFLT_PAGER "more" /* more is probably more widespread than less */ +#endif /* DFLT_PAGER */ + + +#ifndef A_CHARTEXT /* Should be defined in curses.h */ + #define A_CHARTEXT 0xff +#endif + +// comentado el dia 20/06/2014 +//#ifndef color_set +// #define color_set(c, o) attron(COLOR_PAIR(c)) +//#endif + +/* +#if !defined(attr_get) || defined(NCURSES_VERSION) && NCURSES_VERSION_MAJOR < 5 +#undef attr_get +#define attr_get(a, p, o) ((void)((a) != 0 && (*(a) = stdscr->_attrs)), \ + (void)((p) != 0 && \ + (*(p) = PAIR_NUMBER(stdscr->_attrs))), OK) +#endif +*/ + +#ifndef FALSE + # define FALSE 0 + # define TRUE 1 +#endif + +/* + * Some not too obvious things about the flags: + * is_valid means there is a valid number in v. + * is_locked means that the cell cannot be edited. + * is_label set means it points to a valid constant string. + * is_strexpr set means expr yields a string expression. + * If is_strexpr is not set, and expr points to an expression tree, the + * expression yields a numeric expression. + * So, either v or label can be set to a constant. + * Either (but not both at the same time) can be set from an expression. + */ + +#define VALID_CELL(p, r, c) ((p = *ATBL(tbl, r, c)) && ((p->flags & is_valid) || p->label)) + +/* info for each cell, only alloc'd when something is stored in a cell */ +struct ent { + double v; /* v && label are set in EvalAll() */ + char * label; + struct enode * expr; /* cell's contents */ + short flags; + int row, col; + //short nlastrow, nlastcol; + struct ent * next; // used for yanklist, freeents list, undo.. + char * format; /* printf format for this cell */ + char cellerror; /* error in a cell? */ + struct ucolor * ucolor; + int pad; // padding between other cells +}; + +#define FIX_ROW 1 +#define FIX_COL 2 + +/* + * ent_ptr holds the row/col # and address type of a cell + * + * vf is the type of cell address, 0 non-fixed, or bitwise OR of FIX_ROW or + * FIX_COL + * vp : we just use vp->row or vp->col, vp may be a new cell just for holding + * row/col (say in gram.y) or a pointer to an existing cell + */ +struct ent_ptr { + int vf; + struct ent * vp; +}; + +// stores a range (left, right) +struct range { + struct ent_ptr r_left, r_right; + char * r_name; + struct range * r_next, * r_prev; + int r_is_range; +}; + +// holds the beginning/ending cells of a range +struct range_s { + struct ent_ptr left, right; +}; + +/* stores type of operation this cell will perform */ +struct enode { + int op; + union { + + struct { /* other cells use to eval() / seval() */ + struct enode * left, * right; + char *s; /* previous value of @ext function in case */ + } o; /* external functions are turned off */ + + int gram_match; /* some compilers (hp9000ipc) need this */ + double k; /* constant # */ + char * s; /* string part of a cell */ + + struct range_s r; /* op is on a range */ + struct ent_ptr v; /* ref. another cell on which this enode depends */ + struct ent_ptr x; /* ref to cells that depends on this enode */ + } e; +}; + +/* stores a color range (left, right) +// comentado el 19/06/2014 +struct crange { + struct ent *r_left, *r_right; + int r_color; + struct crange *r_next, *r_prev; // chained ranges +}; + +struct colorpair { + int fg; + int bg; + struct enode *expr; +}; +*/ + +struct impexfilt { + char ext[PATHLEN]; + char plugin[PATHLEN]; + char type; + struct impexfilt * next; +}; + +/* Use this structure to save the last 'g' command */ +struct go_save { + int g_type; + double g_n; + char * g_s; + int g_row; + int g_col; + int g_lastrow; + int g_lastcol; + int strow; + int stcol; + int stflag; + int errsearch; +}; + +/* op values */ +#define O_VAR 'v' +#define O_CONST 'k' +#define O_ECONST 'E' /* constant cell w/ an error */ +#define O_SCONST '$' +#define REDUCE 0200 /* Or'ed into OP if operand is a range */ +#define OP_BASE 256 +#define ACOS (OP_BASE + 0) +#define ASIN (OP_BASE + 1) +#define ATAN (OP_BASE + 2) +#define CEIL (OP_BASE + 3) +#define COS (OP_BASE + 4) +#define EXP (OP_BASE + 5) +#define FABS (OP_BASE + 6) +#define FLOOR (OP_BASE + 7) +#define HYPOT (OP_BASE + 8) +#define LOG (OP_BASE + 9) +#define LOG10 (OP_BASE + 10) +#define POW (OP_BASE + 11) +#define SIN (OP_BASE + 12) +#define SQRT (OP_BASE + 13) +#define TAN (OP_BASE + 14) +#define DTR (OP_BASE + 15) +#define RTD (OP_BASE + 16) +#define SUM (OP_BASE + 17) +#define PROD (OP_BASE + 18) +#define AVG (OP_BASE + 19) +#define COUNT (OP_BASE + 20) +#define STDDEV (OP_BASE + 21) +#define MAX (OP_BASE + 22) +#define MIN (OP_BASE + 23) +#define RND (OP_BASE + 24) +#define HOUR (OP_BASE + 25) +#define MINUTE (OP_BASE + 26) +#define SECOND (OP_BASE + 27) +#define MONTH (OP_BASE + 28) +#define DAY (OP_BASE + 29) +#define YEAR (OP_BASE + 30) +#define NOW (OP_BASE + 31) +#define DATE (OP_BASE + 32) +#define FMT (OP_BASE + 33) +#define SUBSTR (OP_BASE + 34) +#define STON (OP_BASE + 35) +#define EQS (OP_BASE + 36) +#define EXT (OP_BASE + 37) +#define ELIST (OP_BASE + 38) /* List of expressions */ +#define LMAX (OP_BASE + 39) +#define LMIN (OP_BASE + 40) +#define NVAL (OP_BASE + 41) +#define SVAL (OP_BASE + 42) +#define PV (OP_BASE + 43) +#define FV (OP_BASE + 44) +#define PMT (OP_BASE + 45) +#define STINDEX (OP_BASE + 46) +#define LOOKUP (OP_BASE + 47) +#define ATAN2 (OP_BASE + 48) +#define INDEX (OP_BASE + 49) +#define DTS (OP_BASE + 50) +#define TTS (OP_BASE + 51) +#define ABS (OP_BASE + 52) +#define HLOOKUP (OP_BASE + 53) +#define VLOOKUP (OP_BASE + 54) +#define ROUND (OP_BASE + 55) +#define IF (OP_BASE + 56) +#define FILENAME (OP_BASE + 57) +#define MYROW (OP_BASE + 58) +#define MYCOL (OP_BASE + 59) +#define LASTROW (OP_BASE + 60) +#define LASTCOL (OP_BASE + 61) +#define COLTOA (OP_BASE + 62) +#define UPPER (OP_BASE + 63) +#define LOWER (OP_BASE + 64) +#define CAPITAL (OP_BASE + 65) +#define NUMITER (OP_BASE + 66) +#define ERR_ (OP_BASE + 67) +#define PI_ (OP_BASE + 68) +//#define SC_BLACK (OP_BASE + 69) +//#define SC_RED (OP_BASE + 70) +//#define SC_GREEN (OP_BASE + 71) +//#define SC_YELLOW (OP_BASE + 72) +//#define SC_BLUE (OP_BASE + 73) +//#define SC_MAGENTA (OP_BASE + 74) +//#define SC_CYAN (OP_BASE + 75) +//#define SC_WHITE (OP_BASE + 76) +#define SLEN (OP_BASE + 77) +#define ASCII (OP_BASE + 78) +#define CHR (OP_BASE + 79) +#define SET8BIT (OP_BASE + 80) + +/* flag values */ +#define is_valid 0001 +#define is_changed 0002 +#define is_strexpr 0004 +#define is_leftflush 0010 +#define is_deleted 0020 +#define is_locked 0040 +#define is_label 0100 +#define iscleared 0200 +#define may_sync 0400 +/* cell error (1st generation (ERROR) or 2nd+ (INVALID)) */ +#define CELLOK 0 +#define CELLERROR 1 +#define CELLINVALID 2 +/* calculation order */ +#define BYCOLS 1 +#define BYROWS 2 +/* tblprint style output for: */ +#define TBL 1 /* 'tbl' */ +#define LATEX 2 /* 'LaTeX' */ +#define TEX 3 /* 'TeX' */ +#define SLATEX 4 /* 'SLaTeX' (Scandinavian LaTeX) */ +#define FRAME 5 /* tblprint style output for FrameMaker */ +/* Types for etype() */ +#define NUM 1 +#define STR 2 +#define GROWAMT 30 /* default minimum amount to grow */ +#define GROWNEW 1 /* first time table */ +#define GROWROW 2 /* add rows */ +#define GROWCOL 3 /* add columns */ +#define GROWBOTH 4 /* grow both */ + +extern int currow, curcol; +extern int maxrow, maxcol; +extern struct ent ***tbl; // data table ref. in vmtbl.c and ATBL() +extern char curfile[]; +extern int arg; +extern int lastrow, lastcol; +extern int gmyrow, gmycol; // globals used for @myrow, @mycol cmds +extern int rescol; // columns reserved for row numbers +extern int maxrows, maxcols; // # cells currently allocated +extern int rowsinrange; // Number of rows in target range of a goto +extern int colsinrange; // Number of cols in target range of a goto +extern int *fwidth; +extern int *precision; +extern int *realfmt; +extern char *colformat[10]; +extern char *col_hidden; +extern char *row_hidden; +extern char line[FBUFLEN]; +extern int linelim; +extern int changed; +extern int dbidx; +extern int qbuf; // buffer no. specified by `"' command +extern int showsc, showsr; // starting cell of highlighted range +extern int cellassign; +extern int macrofd; +extern int cslop; +extern int usecurses; +extern int brokenpipe; // Set to true if SIGPIPE is received +extern int modflg; +extern char *mdir; +extern char *autorun; +extern int skipautorun; +extern char *fkey[FKEYS]; +extern char *scext; +extern int repct; +extern int calc_order; +extern double prescale; +extern int propagation; +//extern int autocalc; +//extern int autolabel; +//extern int autoinsert; +//extern int autowrap; +//extern int showcell; +//extern int showtop; +//extern int craction; +extern int optimize; +extern int color; +extern int numeric; +extern int colorneg; +extern int colorerr; +extern int rndtoeven; +extern int tbl_style; +//extern int pagesize; // If nonzero, use instead of 1/2 screen height +//extern int rowlimit; +//extern int collimit; +extern int loading; + +extern struct enode *copye(register struct enode *e, int Rdelta, int Cdelta, int r1, int c1, int r2, int c2, int transpose); +extern char dpoint; // country-dependent decimal point from locale +extern char thsep; // country-dependent thousands separator from locale +extern char * coltoa(int col); +extern char * findplugin(char *ext, char type); +extern char * findhome(char *path); +extern char * r_name(int r1, int c1, int r2, int c2); +extern char * scxmalloc(unsigned n); +extern char * scxrealloc(char *ptr, unsigned n); +extern char * seval(register struct enode *se); +extern char * v_name(int row, int col); +extern double eval(register struct enode *e); +extern struct enode *new(int op, struct enode *a1, struct enode *a2); +extern struct enode *new_const(int op, double a1); +extern struct enode *new_range(int op, struct range_s a1); +extern struct enode *new_str(char *s); +extern struct enode *new_var(int op, struct ent_ptr a1); +extern struct ent *lookat(int row, int col); +extern void EvalAll(); +extern void checkbounds(int *rowp, int *colp); +extern void clearent(struct ent *v); +extern void closefile(FILE *f, int pid, int rfd); +extern void colshow_op(); +extern struct colorpair *cpairs[8]; +extern void editexp(int row, int col); +extern void efree(struct enode *e); +extern void label(register struct ent *v, register char *s, int flushdir); + +extern double eval_result; +extern char * seval_result; +void sc_debug(char * s, ...); +void sc_info(char * s, ...); +void sc_error(char * s, ...); +#endif // SC_H_ |