diff options
author | mongo <mongo@iomega> | 2016-04-15 16:21:56 -0300 |
---|---|---|
committer | mongo <mongo@iomega> | 2016-04-15 16:21:56 -0300 |
commit | 3caeca4abb02f1b3fc085c04fadba3d62c26f12d (patch) | |
tree | 130d7c8038c10e3243e151ca074d721fd43db25b | |
parent | f686ba184e0af3fd37aa8a743631a7a376f30843 (diff) |
Deleted unneeded files
-rw-r--r-- | src/a.sc | 10 | ||||
-rwxr-xr-x | src/cmds.c~ | 1778 | ||||
-rw-r--r-- | src/experres.h | 107 | ||||
-rw-r--r-- | src/gram.c | 3928 | ||||
-rwxr-xr-x | src/main.c~ | 506 | ||||
-rwxr-xr-x | src/scim | bin | 655896 -> 0 bytes | |||
-rw-r--r-- | src/statres.h | 45 | ||||
-rw-r--r-- | src/y.tab.h | 399 |
8 files changed, 0 insertions, 6773 deletions
diff --git a/src/a.sc b/src/a.sc deleted file mode 100644 index d62c912..0000000 --- a/src/a.sc +++ /dev/null @@ -1,10 +0,0 @@ -# This data file was generated by SC-IM. -# You almost certainly shouldn't edit it. - -let A0 = 1 -let B0 = 1 -let A1 = 2 -let B1 = 2 -let A2 = A0+A1 -let B2 = A0+A1 -goto B1 diff --git a/src/cmds.c~ b/src/cmds.c~ deleted file mode 100755 index d40c044..0000000 --- a/src/cmds.c~ +++ /dev/null @@ -1,1778 +0,0 @@ -#include <ncursesw/curses.h> -#include <stdlib.h> -#include <ctype.h> // for isdigit -#include <wchar.h> -#include <wctype.h> -#include "maps.h" -#include "yank.h" -#include "marks.h" -#include "cmds.h" -#include "buffer.h" -#include "screen.h" -#include "conf.h" // for conf parameters -#include "color.h" // for set_ucolor -#include "xmalloc.h" // for scxfree -#include "vmtbl.h" // for growtbl -#include "utils/string.h" // for add_char -#include "y.tab.h" // for yyparse -#ifdef UNDO -#include "undo.h" -#endif - -void syncref(register struct enode *e); -extern unsigned int shall_quit; -char insert_edit_submode; -struct ent * freeents = NULL; // keep deleted ents around before sync_refs -wchar_t interp_line[BUFFERSIZE]; - -// mark_ent_as_deleted (free_ents en sc original): -// This structure is used to keep ent structs around before they -// are actualy deleted (memory freed) to allow the sync_refs routine a chance to fix the -// variable references. -// it sets is_deleted flag of an ent. -void mark_ent_as_deleted(register struct ent *p) { - if (p == NULL) return; - //p->flags |= iscleared; - p->flags |= is_deleted; - - p->next = freeents; /* put this ent on the front of freeents */ - freeents = p; - - return; -} - -// flush_saved: iterates throw freeents (ents marked as deleted) -// calls clearent for freeing ents contents memory -// and free ent pointer. this function should always be called -// at exit. this is mandatory, just in case we want to UNDO any changes. -void flush_saved() { - register struct ent *p; - register struct ent *q; - - p = freeents; - while (p != NULL) { - (void) clearent(p); - q = p->next; - free(p); - p = q; - } - freeents = NULL; - return; -} - -// sync_refs and syncref are used to REMOVE references to -// deleted struct ents. -// Note that the deleted structure must still -// be hanging around before the call, but not referenced -// by an entry in tbl. -// IMPROVE: Shouldn't traverse the whole table. -void sync_refs() { - int i, j; - register struct ent *p; - // sync_ranges(); - for (i=0; i <= maxrow; i++) - for (j=0; j <= maxcol; j++) - if ( (p = *ATBL(tbl, i, j)) && p->expr ) { - syncref(p->expr); - //sc_info("%d %d %d", i, j, ++k); - } - return; -} - -void syncref(register struct enode *e) { - if ( e == (struct enode *) 0 ) { - //if ( e == NULL || e->op == ERR_ ) { - return; - } else if (e->op & REDUCE) { - e->e.r.right.vp = lookat(e->e.r.right.vp->row, e->e.r.right.vp->col); - e->e.r.left.vp = lookat(e->e.r.left.vp->row, e->e.r.left.vp->col); - } else { - switch (e->op) { - case 'v': - //if (e->e.v.vp->flags & iscleared) { - if (e->e.v.vp->flags & is_deleted) { - e->op = ERR_; - //sc_info("%d %d", e->e.v.vp->row, e->e.v.vp->col); - e->e.o.left = NULL; - e->e.o.right = NULL; - } else if (e->e.v.vp->flags & may_sync) - e->e.v.vp = lookat(e->e.v.vp->row, e->e.v.vp->col); - break; - case 'k': - break; - case '$': - break; - default: - syncref(e->e.o.right); - syncref(e->e.o.left); - break; - } - } - return; -} - -// Delete a column -void deletecol() { - int r, c, i; - struct ent **pp; - - if (any_locked_cells(0, curcol, maxrow, curcol)) { - sc_info("Locked cells encountered. Nothing changed"); - return; - } - - // mark ent of column to erase with isdeleted flag - for (r = 0; r <= maxrow; r++) { - pp = ATBL(tbl, r, curcol); - if ( *pp != NULL ) { - mark_ent_as_deleted(*pp); - //clearent(*pp); - //free(*pp); - *pp = NULL; - } - } - - // Copy references from right column cells to left column (which gets removed) - for (r = 0; r <= maxrow; r++) { - for (c = curcol; c < maxcol; c++) { - pp = ATBL(tbl, r, c); - - // nota: pp[1] = ATBL(tbl, r, c+1); - if ( pp[1] != NULL ) pp[1]->col--; - pp[0] = pp[1]; - } - - // Free last column memory (Could also initialize 'ent' to zero with `cleanent`). - pp = ATBL(tbl, r, maxcol); - *pp = (struct ent *) 0; - // agregado el 06/12/2014 - } - - // Fix columns precision and width - for (i = curcol; i < maxcols - 2; i++) { - fwidth[i] = fwidth[i+1]; - precision[i] = precision[i+1]; - realfmt[i] = realfmt[i+1]; - col_hidden[i] = col_hidden[i+1]; - } - - for (; i < maxcols - 1; i++) { - fwidth[i] = DEFWIDTH; - precision[i] = DEFPREC; - realfmt[i] = DEFREFMT; - col_hidden[i] = FALSE; - } - - maxcol--; - sync_refs(); - //flush_saved(); // we have to flush_saved only at exit. - //this is because we have to keep ents in case we want to UNDO - modflg++; - return; -} - -// Copy a cell (struct ent). "special" indicates special treatment when -// merging two cells for the "pm" command, merging formats only for the -// "pf" command, or for adjusting cell references when transposing with -// the "pt" command. r1, c1, r2, and c2 define the range in which the dr -// and dc values should be used. -void copyent(register struct ent *n, register struct ent *p, int dr, int dc, - int r1, int c1, int r2, int c2, int special) { - if (!n || !p) { - sc_error("internal error"); - return; - } - - //n->flags = may_sync; - if (special != 'f') { - if (p->flags & is_valid) { - n->v = p->v; - n->flags |= p->flags & is_valid; - } - if (special != 'v' && p->expr) { - n->expr = copye(p->expr, dr, dc, r1, c1, r2, c2, special == 't'); - if (p->flags & is_strexpr) - n->flags |= is_strexpr; - else - n->flags &= ~is_strexpr; - } - if (p->label) { - if (n->label) scxfree(n->label); - n->label = scxmalloc((unsigned) (strlen(p->label) + 1)); - (void) strcpy(n->label, p->label); - n->flags &= ~is_leftflush; - n->flags |= ((p->flags & is_label) | (p->flags & is_leftflush)); - } - n->flags |= p->flags & is_locked; - } - if (p->format && special != 'v') { - if (n->format) scxfree(n->format); - n->format = scxmalloc((unsigned) (strlen(p->format) + 1)); - (void) strcpy(n->format, p->format); - } else if (special != 'v' && special != 'f') - n->format = NULL; - - if (special != 'v') { - n->pad = p->pad; - if (n->ucolor) { // remove current cellcolor format in n ent - free(n->ucolor); - n->ucolor = NULL; - } - if (p->ucolor) { // copy new cellcolor format from p to n ent - n->ucolor = (struct ucolor *) malloc (sizeof(struct ucolor)); - n->ucolor->fg = p->ucolor->fg; - n->ucolor->bg = p->ucolor->bg; - n->ucolor->bold = p->ucolor->bold; - n->ucolor->dim = p->ucolor->dim; - n->ucolor->reverse = p->ucolor->reverse; - n->ucolor->standout = p->ucolor->standout; - n->ucolor->underline = p->ucolor->underline; - n->ucolor->blink = p->ucolor->blink; - } - } - - n->flags |= is_changed; - n->row = p->row; - n->col = p->col; - return; -} - -int etype(register struct enode *e) { - if (e == (struct enode *)0) - return NUM; - switch (e->op) { - case UPPER: case LOWER: case CAPITAL: - case O_SCONST: case '#': case DATE: case FMT: case STINDEX: - case EXT: case SVAL: case SUBSTR: - return (STR); - - case '?': - case IF: - return (etype(e->e.o.right->e.o.left)); - - case 'f': - return (etype(e->e.o.right)); - - case O_VAR: { - register struct ent *p; - p = e->e.v.vp; - if (p->expr) - return (p->flags & is_strexpr ? STR : NUM); - else if (p->label) - return (STR); - else - return (NUM); - } - - default: - return (NUM); - } - return -1; -} - -// ignorelock is used when sorting so that locked cells can still be sorted -void erase_area(int sr, int sc, int er, int ec, int ignorelock) { - int r, c; - struct ent **pp; - - if (sr > er) { - r = sr; sr = er; er = r; - } - - if (sc > ec) { - c = sc; sc = ec; ec = c; - } - - if (sr < 0) - sr = 0; - if (sc < 0) - sc = 0; - checkbounds(&er, &ec); - - // Do a lookat() for the upper left and lower right cells of the range - // being erased to make sure they are included in the delete buffer so - // that pulling cells always works correctly even if the cells at one - // or more edges of the range are all empty. - - (void) lookat(sr, sc); - (void) lookat(er, ec); - - for (r = sr; r <= er; r++) { - for (c = sc; c <= ec; c++) { - pp = ATBL(tbl, r, c); - if (*pp && (!((*pp)->flags & is_locked) || ignorelock)) { - mark_ent_as_deleted(*pp); - *pp = NULL; - } - } - } - return; -} - -struct enode * copye(register struct enode *e, int Rdelta, int Cdelta, int r1, int c1, int r2, int c2, int transpose) { - register struct enode *ret; - static struct enode *range = NULL; - - if (e == (struct enode *)0) { - ret = (struct enode *)0; - - } else if (e->op & REDUCE) { - int newrow, newcol; - //if (freeenodes) { - // ret = freeenodes; - // freeenodes = ret->e.o.left; - //} else - ret = (struct enode *) scxmalloc((unsigned) sizeof (struct enode)); - ret->op = e->op; - newrow = e->e.r.left.vf & FIX_ROW || - e->e.r.left.vp->row < r1 || e->e.r.left.vp->row > r2 || - e->e.r.left.vp->col < c1 || e->e.r.left.vp->col > c2 ? - e->e.r.left.vp->row : - transpose ? r1 + Rdelta + e->e.r.left.vp->col - c1 : - e->e.r.left.vp->row + Rdelta; - newcol = e->e.r.left.vf & FIX_COL || - e->e.r.left.vp->row < r1 || e->e.r.left.vp->row > r2 || - e->e.r.left.vp->col < c1 || e->e.r.left.vp->col > c2 ? - e->e.r.left.vp->col : - transpose ? c1 + Cdelta + e->e.r.left.vp->row - r1 : - e->e.r.left.vp->col + Cdelta; - ret->e.r.left.vp = lookat(newrow, newcol); - ret->e.r.left.vf = e->e.r.left.vf; - newrow = e->e.r.right.vf & FIX_ROW || - e->e.r.right.vp->row < r1 || e->e.r.right.vp->row > r2 || - e->e.r.right.vp->col < c1 || e->e.r.right.vp->col > c2 ? - e->e.r.right.vp->row : - transpose ? r1 + Rdelta + e->e.r.right.vp->col - c1 : - e->e.r.right.vp->row + Rdelta; - newcol = e->e.r.right.vf & FIX_COL || - e->e.r.right.vp->row < r1 || e->e.r.right.vp->row > r2 || - e->e.r.right.vp->col < c1 || e->e.r.right.vp->col > c2 ? - e->e.r.right.vp->col : - transpose ? c1 + Cdelta + e->e.r.right.vp->row - r1 : - e->e.r.right.vp->col + Cdelta; - ret->e.r.right.vp = lookat(newrow, newcol); - ret->e.r.right.vf = e->e.r.right.vf; - } else { - struct enode *temprange=0; - //if (freeenodes) { - // ret = freeenodes; - // freeenodes = ret->e.o.left; - //} else - ret = (struct enode *) scxmalloc((unsigned) sizeof (struct enode)); - ret->op = e->op; - switch (ret->op) { - case SUM: - case PROD: - case AVG: - case COUNT: - case STDDEV: - case MAX: - case MIN: - temprange = range; - range = e->e.o.left; - r1 = 0; - c1 = 0; - r2 = maxrow; - c2 = maxcol; - } - switch (ret->op) { - case 'v': - { - int newrow, newcol; - if (range && e->e.v.vp->row >= range->e.r.left.vp->row && - e->e.v.vp->row <= range->e.r.right.vp->row && - e->e.v.vp->col >= range->e.r.left.vp->col && - e->e.v.vp->col <= range->e.r.right.vp->col) { - newrow = range->e.r.left.vf & FIX_ROW ? e->e.v.vp->row : e->e.v.vp->row + Rdelta; - newcol = range->e.r.left.vf & FIX_COL ? e->e.v.vp->col : e->e.v.vp->col + Cdelta; - } else { - newrow = e->e.v.vf & FIX_ROW || - e->e.v.vp->row < r1 || e->e.v.vp->row > r2 || - e->e.v.vp->col < c1 || e->e.v.vp->col > c2 ? - e->e.v.vp->row : transpose ? r1 + Rdelta + e->e.v.vp->col - c1 : - e->e.v.vp->row + Rdelta; - newcol = e->e.v.vf & FIX_COL || - e->e.v.vp->row < r1 || e->e.v.vp->row > r2 || - e->e.v.vp->col < c1 || e->e.v.vp->col > c2 ? - e->e.v.vp->col : transpose ? c1 + Cdelta + e->e.v.vp->row - r1 : - e->e.v.vp->col + Cdelta; - } - ret->e.v.vp = lookat(newrow, newcol); - ret->e.v.vf = e->e.v.vf; - break; - } - case 'k': - ret->e.k = e->e.k; - break; - case 'f': - case 'F': - if ((range && ret->op == 'F') || (!range && ret->op == 'f')) - Rdelta = Cdelta = 0; - ret->e.o.left = copye(e->e.o.left, Rdelta, Cdelta, r1, c1, r2, c2, transpose); - ret->e.o.right = (struct enode *)0; - break; - case '$': - case EXT: - ret->e.s = scxmalloc((unsigned) strlen(e->e.s)+1); - (void) strcpy(ret->e.s, e->e.s); - if (e->op == '$') /* Drop through if ret->op is EXT */ - break; - default: - ret->e.o.left = copye(e->e.o.left, Rdelta, Cdelta, r1, c1, r2, c2, transpose); - ret->e.o.right = copye(e->e.o.right, Rdelta, Cdelta, r1, c1, r2, c2, transpose); - break; - } - switch (ret->op) { - case SUM: - case PROD: - case AVG: - case COUNT: - case STDDEV: - case MAX: - case MIN: - range = temprange; - } - } - return ret; -} - -/* Modified 9/17/90 THA to handle more formats */ -void doformat(int c1, int c2, int w, int p, int r) { - register int i; - int crows = 0; - int ccols = c2; - - if (c1 >= maxcols && !growtbl(GROWCOL, 0, c1)) c1 = maxcols-1 ; - if (c2 >= maxcols && !growtbl(GROWCOL, 0, c2)) c2 = maxcols-1 ; - - if (w == 0) { - sc_info("Width too small - setting to 1"); - w = 1; - } - - if (! atoi(get_conf_value("nocurses")) && w > COLS - rescol - 2) { - sc_info("Width too large - Maximum = %d", COLS - rescol - 2); - w = COLS - rescol - 2; - } - - if (p > w) { - sc_info("Precision too large"); - p = w; - } - - checkbounds(&crows, &ccols); - if (ccols < c2) { - sc_error("Format statement failed to create implied column %d", c2); - return; - } - - for (i = c1; i <= c2; i++) - fwidth[i] = w, precision[i] = p, realfmt[i] = r; - - //rowsinrange = 1; - //colsinrange = fwidth[curcol]; - - modflg++; - return; - -} - -void formatcol(int c) { - int arg = 1; - int i; - - switch (c) { - case '<': - case 'h': - case OKEY_LEFT: - for (i = curcol; i < curcol + arg; i++) { - fwidth[i]--; - if (fwidth[i] < 1) - fwidth[i] = 1; - } - //rowsinrange = 1; - //colsinrange = fwidth[curcol]; - modflg++; - break; - case '>': - case 'l': - case OKEY_RIGHT: - for (i = curcol; i < curcol + arg; i++) { - fwidth[i]++; - if (fwidth[i] > COLS - rescol - 2) - fwidth[i] = COLS - rescol - 2; - } - //rowsinrange = 1; - //colsinrange = fwidth[curcol]; - modflg++; - break; - case '-': - case 'j': - case OKEY_DOWN: - for (i = curcol; i < curcol + arg; i++) { - precision[i]--; - if (precision[i] < 0) - precision[i] = 0; - } - modflg++; - break; - case '+': - case 'k': - case OKEY_UP: - for (i = curcol; i < curcol + arg; i++) - precision[i]++; - modflg++; - break; - } - sc_info("Current format is %d %d %d", fwidth[curcol], precision[curcol], realfmt[curcol]); - update(TRUE); - return; -} - -// Insert a single row. It will be inserted before currow -// if after is 0; after if it is 1. -void insert_row(int after) { - int r, c; - struct ent **tmprow, **pp; - int lim = maxrow - currow + 1; - - if (currow > maxrow) maxrow = currow; - maxrow++; - lim = maxrow - lim + after; - if (maxrow >= maxrows && !growtbl(GROWROW, maxrow, 0)) return; - - tmprow = tbl[maxrow]; - for (r = maxrow; r > lim; r--) { - row_hidden[r] = row_hidden[r-1]; - tbl[r] = tbl[r-1]; - for (c = 0, pp = ATBL(tbl, r, 0); c < maxcols; c++, pp++) - if (*pp) (*pp)->row = r; - } - tbl[r] = tmprow; // the last row is never used - - modflg++; - return; -} - -// Insert a single col. The col will be inserted -// BEFORE CURCOL if after is 0; -// AFTER CURCOL if it is 1. -void insert_col(int after) { - int r, c; - register struct ent **pp; - int lim = maxcol - curcol - after + 1; - - if (curcol + after > maxcol) - maxcol = curcol + after; - maxcol++; - - if ((maxcol >= maxcols) && !growtbl(GROWCOL, 0, maxcol)) - return; - - for (c = maxcol; c >= curcol + after + 1; c--) { - fwidth[c] = fwidth[c-1]; - precision[c] = precision[c-1]; - realfmt[c] = realfmt[c-1]; - col_hidden[c] = col_hidden[c-1]; - } - for (c = curcol + after; c - curcol - after < 1; c++) { - fwidth[c] = DEFWIDTH; - precision[c] = DEFPREC; - realfmt[c] = DEFREFMT; - col_hidden[c] = FALSE; - } - - for (r=0; r <= maxrow; r++) { - pp = ATBL(tbl, r, maxcol); - for (c = lim; --c >= 0; pp--) - if ((pp[0] = pp[-1])) pp[0]->col++; - - pp = ATBL(tbl, r, curcol + after); - for (c = curcol + after; c - curcol - after < 1; c++, pp++) - *pp = (struct ent *) 0; - } - - curcol += after; - modflg++; - return; -} - -// delete a row -void deleterow() { - register struct ent **pp; - int r, c; - struct ent **tmprow; - - - if (any_locked_cells(currow, 0, currow, maxcol)) { - sc_info("Locked cells encountered. Nothing changed"); - - } else { - //flush_saved(); - erase_area(currow, 0, currow, maxcol, 0); - if (currow > maxrow) return; - r = currow; - - // Rows are dealt with in numrow groups, each group of rows spaced numrow rows apart. - // save the first row of the group and empty it out - tmprow = tbl[r]; - pp = ATBL(tbl, r, 0); - for (c = maxcol + 1; --c >= 0; pp++) { - if (*pp != NULL) { - mark_ent_as_deleted(*pp); - *pp = NULL; - //clearent(*pp); - //free(*pp); - } - } - - // move the rows, put the deleted, but now empty, row at the end - for (; r + 1 < maxrows - 1; r++) { - row_hidden[r] = row_hidden[r+1]; - tbl[r] = tbl[r + 1]; - pp = ATBL(tbl, r, 0); - for (c = 0; c < maxcols; c++, pp++) - if (*pp) (*pp)->row = r; - } - tbl[r] = tmprow; - - maxrow--; - - sync_refs(); - //flush_saved(); // we have to flush only at exit. this is in case we want to UNDO - modflg++; - } - return; -} - -void ljustify(int sr, int sc, int er, int ec) { - struct ent *p; - int i, j; - - if (sr > er) { - i = sr; - sr = er; - er = i; - } - if (sc > ec) { - i = sc; - sc = ec; - ec = i; - } - for (i = sr; i <= er; i++) { - for (j = sc; j <= ec; j++) { - p = *ATBL(tbl, i, j); - if (p && p->label) { - p->flags &= ~is_label; - p->flags |= is_leftflush | is_changed; - changed++; - modflg++; - } - } - } - return; -} - -void rjustify(int sr, int sc, int er, int ec) { - struct ent *p; - int i, j; - - if (sr > er) { - i = sr; - sr = er; - er = i; - } - if (sc > ec) { - i = sc; - sc = ec; - ec = i; - } - for (i = sr; i <= er; i++) { - for (j = sc; j <= ec; j++) { - p = *ATBL(tbl, i, j); - if (p && p->label) { - p->flags &= ~(is_label | is_leftflush); - p->flags |= is_changed; - changed++; - modflg++; - } - } - } - return; -} - -void center(int sr, int sc, int er, int ec) { - struct ent *p; - int i, j; - - if (sr > er) { - i = sr; - sr = er; - er = i; - } - if (sc > ec) { - i = sc; - sc = ec; - ec = i; - } - for (i = sr; i <= er; i++) { - for (j = sc; j <= ec; j++) { - p = *ATBL(tbl, i, j); - if (p && p->label) { - p->flags &= ~is_leftflush; - p->flags |= is_label | is_changed; - changed++; - modflg++; - } - } - } - return; -} - -/* -void move_area(int dr, int dc, int sr, int sc, int er, int ec) { - struct ent *p; - struct ent **pp; - int deltar, deltac; - int r, c; - - if (sr > er) r = sr; - sr = er; - er = r; - if (sc > ec) - c = sc; - sc = ec; - ec = c; - if (sr < 0) sr = 0; - if (sc < 0) sc = 0; - checkbounds(&er, &ec); - - r = currow; - currow = sr; - c = curcol; - curcol = sc; - - // First we erase the source range, which puts the cells on the delete - // buffer stack. - erase_area(sr, sc, er, ec, 0); - - currow = r; - curcol = c; - deltar = dr - sr; - deltac = dc - sc; - - // Now we erase the destination range, which adds it to the delete buffer - // stack, but then we flush it off. We then move the original source - // range from the stack to the destination range, adjusting the addresses - // as we go, leaving the stack in its original state. - erase_area(dr, dc, er + deltar, ec + deltac, 0); - //flush_saved(); - for (p = delbuf[dbidx]; p; p = p->next) { - pp = ATBL(tbl, p->row + deltar, p->col + deltac); - *pp = p; - p->row += deltar; - p->col += deltac; - p->flags &= ~is_deleted; - } -} -*/ - -void chg_mode(char strcmd){ - switch (strcmd) { - case '=': - curmode = INSERT_MODE; - break; - case '<': - curmode = INSERT_MODE; - break; - case '>': - curmode = INSERT_MODE; - break; - case '\\': - curmode = INSERT_MODE; - break; - case 'E': - curmode = EDIT_MODE; - break; - case 'e': - curmode = EDIT_MODE; - break; - case ':': - curmode = COMMAND_MODE; - break; - case '.': - curmode = NORMAL_MODE; - break; - case 'v': - curmode = VISUAL_MODE; - break; - } - return; -} - -// del selected cells -// can be a single cell or a range -void del_selected_cells() { - - // delete range - if (is_range_selected() != -1) { - srange * r = get_selected_range(); - if (any_locked_cells(r->tlrow, r->tlcol, r->brrow, r->brcol)) { - sc_error("Locked cells encountered. Nothing changed"); - return; - } - yank_area(r->tlrow, r->tlcol, r->brrow, r->brcol, 'a', 1); - - #ifdef UNDO - create_undo_action(); - copy_to_undostruct(r->tlrow, r->tlcol, r->brrow, r->brcol, 'd'); - #endif - - erase_area(r->tlrow, r->tlcol, r->brrow, r->brcol, 0); - modflg++; - sync_refs(); - //flush_saved(); NO DESCOMENTAR. VER ABAJO. - - #ifdef UNDO - copy_to_undostruct(r->tlrow, r->tlcol, r->brrow, r->brcol, 'a'); - end_undo_action(); - #endif - - // delete cell - } else { - if (any_locked_cells(currow, curcol, currow, curcol)) { - sc_error("Locked cells encountered. Nothing changed"); - return; - } - yank_area(currow, curcol, currow, curcol, 'e', 1); - - #ifdef UNDO - create_undo_action(); - copy_to_undostruct(currow, curcol, currow, curcol, 'd'); - #endif - - erase_area(currow, curcol, currow, curcol, 0); - modflg++; - sync_refs(); - - #ifdef UNDO - copy_to_undostruct(currow, curcol, currow, curcol, 'a'); - end_undo_action(); - #endif - -/* - // UNDO feature - // Save deleted ent - struct ent * e_prev = (struct ent *) malloc( (unsigned) sizeof(struct ent) ); - cleanent(e_prev); - copyent(e_prev, lookat(currow, curcol), 0, 0, 0, 0, currow, curcol, 0); - // Save ents that depends on the deleted one: TODO - //struct ent * e_prev2 = (struct ent *) malloc( (unsigned) sizeof(struct ent) ); - //cleanent(e_prev2); - //copyent(e_prev2, lookat(currow+9, curcol+2), 0, 0, 0, 0, currow+9, curcol+2, 0); - //e_prev->next = e_prev2; - - // create undo struct: - struct undo u; - u.removed = e_prev; - u.added = NULL; // Eliminar esta linea, luego de implementar los TODO descriptos - - // delete the ent: - erase_area(currow, curcol, currow, curcol, 0); - modflg++; - // sync refs after the delete - sync_refs(); - - // Save current status of each ent that depends on the deleted one TODO - struct ent * e_now = (struct ent *) malloc( (unsigned) sizeof(struct ent) ); - cleanent(e_now); - (void) copyent(e_now, lookat(currow+9, curcol+2), 0, 0, 0, 0, currow+9, curcol+2, 0); - u.added = e_now; - - // Add undo struct to undolist: - add_to_undolist(&u); // <---------| -*/ - //flush_saved(); // No descomentar. Se debe hacer flush SOLO al salir - } - - return; -} - -// Change cell content sending inputline to interpreter -// REVISED -void insert_or_edit_cell() { - char ope[BUFFERSIZE] = ""; - switch (insert_edit_submode) { - case '=': - strcpy(ope, "let"); - break; - case '<': - strcpy(ope, "leftstring"); - break; - case '>': - strcpy(ope, "rightstring"); - break; - case '\\': - strcpy(ope, "label"); - break; - } - if (inputline[0] == L'"') { - del_wchar(inputline, 0); - } else if (insert_edit_submode != '=' && inputline[0] != L'"') { - add_wchar(inputline, L'\"', 0); - add_wchar(inputline, L'\"', wcslen(inputline)); - } - - #ifdef UNDO - create_undo_action(); - copy_to_undostruct(currow, curcol, currow, curcol, 'd'); - #endif - - (void) swprintf(interp_line, BUFFERSIZE, L"%s %s = %ls", ope, v_name(currow, curcol), inputline); - - send_to_interp(interp_line); - - #ifdef UNDO - copy_to_undostruct(currow, curcol, currow, curcol, 'a'); - end_undo_action(); - #endif - - inputline[0] = L'\0'; - inputline_pos = 0; - real_inputline_pos = 0; - chg_mode('.'); - clr_header(input_win, 0); - - char * opt = get_conf_value("newline_action"); - switch (opt[0]) { - case 'j': - currow = forw_row(1)->row; - break; - case 'l': - curcol = forw_col(1)->col; - break; - } - update(TRUE); - return; -} - -// REVISED - Send command to interpreter -void send_to_interp(wchar_t * oper) { - //sc_debug("!!%ls!!", oper); - wcstombs(line, oper, BUFFERSIZE); - //sc_debug("enviado a intérprete. line >>%s<<", line); - linelim = 0; - (void) yyparse(); - if (atoi(get_conf_value("autocalc")) && ! loading) EvalAll(); - return; -} - -/* return a pointer to a cell's [struct ent *], creating if needed */ -struct ent * lookat(int row, int col) { - register struct ent **pp; - - checkbounds(&row, &col); - pp = ATBL(tbl, row, col); - if ( *pp == NULL ) { - //*pp = (struct ent *) scxmalloc( (unsigned) sizeof(struct ent) ); - *pp = (struct ent *) malloc( (unsigned) sizeof(struct ent) ); - (*pp)->label = (char *) 0; - (*pp)->flags = may_sync; - (*pp)->expr = (struct enode *) 0; - (*pp)->v = (double) 0.0; - (*pp)->format = (char *) 0; - (*pp)->cellerror = CELLOK; - (*pp)->next = NULL; - (*pp)->ucolor = NULL; - (*pp)->pad = 0; - } - (*pp)->row = row; - (*pp)->col = col; - if (row > maxrow) maxrow = row; - if (col > maxcol) maxcol = col; - return (*pp); -} - -// cleanent: blank an ent -void cleanent(struct ent * p) { - p->label = (char *) 0; - p->row = 0; - p->col = 0; - p->flags = may_sync; - p->expr = (struct enode *) 0; - p->v = (double) 0.0; - p->format = (char *) 0; - p->cellerror = CELLOK; - p->next = NULL; - p->ucolor = NULL; - p->pad = 0; - return; -} - -// clearent: free memory of an ent and its contents -void clearent(struct ent *v) { - if (!v) return; - - label(v, "", -1); - v->v = (double)0; - - if (v->expr) efree(v->expr); - v->expr = NULL; - - if (v->format) scxfree(v->format); - v->format = NULL; - - if (v->ucolor) free(v->ucolor); - v->ucolor = NULL; - - v->flags = ( is_changed | iscleared ); - changed++; - modflg++; - - return; -} - -void scroll_left(int n) { - while (n--) { - if (! offscr_sc_cols ) { - break; - } - int a = 1; - int b = 0; - offscr_sc_cols--; - while (a != b && curcol) { - a = offscr_sc_cols; - calc_offscr_sc_cols(); - b = offscr_sc_cols; - if (a != b) { - curcol --; - offscr_sc_cols = a; - } - } - } - return; -} - -void scroll_right(int n) { - while (n--) { |