void setcolwidth(int col) /* Sets the new column width for a selected column */ { int width, row; writeprompt(MSGCOLWIDTH); if (!getint(&width, MINCOLWIDTH, MAXCOLWIDTH)) return; colwidth[col] = width; setrightcol(); if (rightcol < col) { rightcol = col; setleftcol(); setrightcol(); } for (row = 0; row <= lastrow; row++) { if ((cell[col][row] != NULL) && (cell[col][row]->attrib == TEXT)) clearoflags(col + 1, row, NOUPDATE); else clearoflags(col, row, NOUPDATE); updateoflags(col, row, NOUPDATE); } displayscreen(NOUPDATE); changed = TRUE; } /* setcolwidth */
void deletecell(int col, int row, int display) /* Deletes a cell */ { CELLPTR cellptr = cell[col][row]; if (cellptr == NULL) return; switch (cellptr->attrib) { case TEXT : memleft += textcellsize(cellptr->v.text); clearoflags(col + 1, row, display); break; case VALUE : memleft += valuecellsize; break; case FORMULA : memleft += formulacellsize(cellptr->v.f.formula); break; } /* switch */ format[col][row] &= ~OVERWRITE; free(cell[col][row]); cell[col][row] = NULL; if (col == lastcol) setlastcol(); if (row == lastrow) setlastrow(); updateoflags(col, row, display); changed = TRUE; } /* deletecell */
void act(char *s) /* Acts on a particular input */ { int attrib, allocated; double value; deletecell(curcol, currow, UPDATE); value = parse(s, &attrib); switch(attrib) { case TEXT : allocated = alloctext(curcol, currow, s); if (allocated) displaycell(curcol, currow, NOHIGHLIGHT, NOUPDATE); break; case VALUE : allocated = allocvalue(curcol, currow, value); break; case FORMULA : allocated = allocformula(curcol, currow, s, value); break; } /* switch */ if (allocated) { format[curcol][currow] &= ~OVERWRITE; clearoflags(curcol + 1, currow, UPDATE); if (attrib == TEXT) setoflags(curcol, currow, UPDATE); if (curcol > lastcol) lastcol = curcol; if (currow > lastrow) lastrow = currow; if (autocalc) recalc(); } else errormsg(MSGLOMEM); printfreemem(); } /* act */