done/tested: (Jeff Buhrt)
1) added a per row memory allocation
	-runs in about 1/2 run time and 1/3 the space of 6.6vm.1
	-insert/delete row now just moves pointers (# == maxrow+1-currow)
		and blanks one row (of columns (maxcol))
	-as the number of cells grows the size is more linear
		(no more ##Meg images except for 100,000's of rows....)
	-row to column pointer translation is done by a macro (ATBL)
		that returns a pointer to the cell pointer.
		*ATBL would be a pointer to a *ent (cell).
	-the maximum # of columns is limited by ABSMAXCOLS or
		sizeof(struct ent *)*maxcols (whichever is smaller)
		(702 * 4 = 2808 is no real limit even for 286 large model)
	-the maximum # of rows is limited by the virtual memory limit or
		sizeof(struct ent **)*maxrows (whichever is smaller)
		(4*X=64k, X=16384 rows (excluding malloc overhead) on
			a '286 large model. Even w/ 3.25Meg and 10Mhz)
		(plus of course any memory used for cells)
2) dolookup (int vs double)
3) dolookup calling eval w/ ent * not enode *
	 (dolookup called w/ ent * not enode *)
4) cleaned up a lot of .... *x = 0 to  (.... *)0 (cmds, interp)
5) psc: fwidth/precision were reversed on the output
6) Backup copy (on save) using same mode to [path/]#file~
	 (will prompt if a backup fails)
7) put y/n prompt function into yn_ask(mesg)
8) found a move(x,y) in sc -> move(y,x) and only move when needed
9) we use FullUpdate || changed (to see if ANY cells changed) 
	before trying to redraw the screen in update
	(now we don't try to redraw every time a key is hit)
	-if we are stand[ing]out we do not create a cell just to force a
	 standout inside the repaint section of update()
	-only draw blank cells if we cleared it or it is standing out
	reason: the less work (what to update) curses has to do, the faster
		a screen update will be (less cpu required)
14) {insert, delete}col replaced w/ {open,close}col(currow, numcol_to_insert)
	(limits looping)
15) goto nonexistant cell may loop
16) make sure that startup size will at least fill the screen w/ cells.
17) added version.c
18) When we would normally die w/o saving (SIGQUIT, etc), we now ask
	if people would like to save the current spreadsheet.
	If 'y', saves to the current file name, otherwise ~/SC.SAVE,
	then /tmp/SC.SAVE if all else fails.
19) don't use malloc.c for production code
20) progname is now truncated to just the basename (systems w/ long paths
	caused problems)

1) autobackup of things typed in.
	idea: each cell change output to a stdio open file
		in the save format, fflush() every so often...
		(diffs w/r to the original file)
2) lock/freeze (glue down) a section of the screen (the rest of the screen
	scrolls but a row/column/block stays fixed on the screen)
3) (seems ok, but check) FIX the insert/delete row functions.
	a) column of equations (EX: E50 = E49+D50)
	b) insert a few rows, look at the equations below the insert point
	c) delete the inserted rows
	d) The equations should now be the same as in (a), but they are not...
4) make sure ISVALID should <not> be used in place of checkbounds
	in interp.c
5) hide range
6) block moving into range
7) chain cells w/ equations into a linked list or dependency tree
	-have a top level eval, eval and UPDATE all lower nodes
8) an option to go into a ^R like <mode>
	++data entry fields (highlight entry cells)....
	++only allow entry in these cells....
10) don't redraw the whole screen all the time 
	(only cells that change, (in addition to what is in 'fixed #9'))
11) add uemacs keybinding stuff
12) add uemacs macro language
13) add uemacs command completion
14) insertrow should be openrow w/ a count arg (limits looping)
15) on a Get if the buffer hasn't been written, ask to overwrite