1Current Xspread supporter:
2Included below
3	1) High level list of change from Xspread3.1.1 to this version.
4	2) A detailed list of changes to xspread.
5	3) A note I sent earlier.
6
7
8					-Jeff Buhrt
9					Ameritech Services, Inc.
10					317-265-7426
11				I-net:	jeff@appf.ci.in.ameritech.com
12
13***********************
14Major things that have changed (Xspread3.1.1 to this version)
15	-X & Curses (text/sc) mode will automatically be selected based on
16		availability of X libs, $DISPLAY, etc.
17		-X can be deselected (curses used) by adding '-X' to xspread
18	-Gnu autoconfig creates a 'configure' script that automatically
19		searchs for system features vs hand updating configs.
20	-The Quick Reference card, scqref (formerly a separate program),
21	 which xspread has never printed, can be printed by:
22			xspread -q	# text format output
23			xspread -qt	# troff -ms format output
24			xspread -h	# prints usage from help.c vs version.c
25					(allows qref to use same data)
26	-Addition of functions:
27		evalall, @irr, read (read text strings)
28		[copy can now copy to a cell (it figures out the size needed)]
29	-Corrected/added
30		-enhanced vi support
31		-Framemaker table support (file suffix/format)
32		-Get/Put/etc. now consistant on filling in with defaults
33		-cleaned code for portability & limiting compiler warnings
34	-Makefile now builds 'pxspread' (the name carried from 'psc')
35		-Psc will take ascii files and try to convert them into
36		 xspread data.
37	-Tested on AIX 3.2.5 & 4.1.3, AT&T SysV R3.2.3, Linux slackware 1.59
38
39***********************
40CHANGES:
411) ierr = 1; // means no error ?
42	-ierr = 0 makes more sense for no error
43
44other: (grep JEFFB)
45	-format.c: 0 fill and precision might not always work together
46	-graphic_main.c:	~line209
47		note: case 0 will never be called
48
49graphic_main.c:
50	-~line950	graphic_skipscale() was never
51	-NULL==0 (most of the time) thus case 0 is skipped
52	-I moved: graphic_init(), graphic_read_defn(), graphic_write_defn()
53	 to the bottom, they are needed whether we have X11 or not
54
55cleaned up a few places where:
56	-NULL was used vs the integer 0
57	-if (pointer = funt())	-> if ((pointer = funt()) != NULL)
58		because is (x = 0) intended or (x == 0)
59		-gcc suggests adding extra '()' as a minimum, the
60		 most readable is to be explict in the compare
61
62moved message(char *) into util.c to be next to error(char *) which
63	-does almost the same thing (different display line and a sleep).
64	-scXstuff.c isn't used in !DOINGX mode
65
66added missing function prototypes
67	-'function PROTO((arg1, arg2, ...))' is now used vs the old __STDC__
68	 listing each function twice (once with and once without args).
69	-PROTO() is eather '#define PROTO(x) x' [when we are ansi and can
70	 handle function arguments in prototypes]
71	 or '#define PROTO(x)' [when we are traditional K&R]
72
73Things that are shared should be defined in a common header included by
74both files so the compiler can cross check. (extension of above)
75(added missing)
76Ex:	the struct's: freeents & freeenodes
77	functions
78
79added '{}' around the structure initializer pairs in [es]res.sed
80	-They are used to produce: experres.h and statres.h respectively,
81	 which are included by lex.c.
82	-This allows gram.y to have more comments on what things mean.
83
84Curses:
85	-Fixed a few curses problems that DOINGX didn't take into account,
86	including but not limited to:
87		-move(x,y) (incorrect) was used vs move(y,x) in clearlines()
88	-Added HAVE_X*: now supports curses & X in the same executable
89	-DOINGX was dropped and replaced...
90
91screen.c
92	-in update() 'char field[]' didn't need to be static
93	-added safety checking of default screen size to make sure
94	 curses xspread could run w/ a file as stdin
95	 [this was very stumping until I realized xspread never left update(),
96	  it was constantly try to place the center row/col between two
97	  impossible limits]
98
99get/put default directories
100	-auto adding $HOME to the path on a get/put makes life harder,
101	 you have to backspace over/edit out the expanded path, if
102	 people store everything in their $HOME maybe. What if I am
103	 in a directory path hundreds of chars deep (maybe?), the default
104	 should be where I am.
105	-a possiblity is a .xspreadrc that has personal preferences...
106	FIXED BY: using what default said before and some very nice
107	 code that was sent in after Sc6.28 (but never used in a released
108	 version of sc).
109
110Other
111	-name change: error() -> scerror() for ansi/gcc/AIX conflict
112	-eres.sed/sres.sed now put {} each line (struct element) and
113		handle comments in gram.y (detail above)
114	-The W command will give as much space as needed to a label in
115	 the last column being written, so can be used with r to read and
116	 write arb line length text files.
117	-added FRAME table type suffix.
118	-Centralized table suffix generation.
119
120
121gram.y
122	-added comments (merged from my local version)
123%	-added the finacial function IRR -Internal Rate of Return
124		'@irr()' computes internal-rate-of-return over a range
125		 containing a cash flow.
126%	-added S_READ -read a string delimited file to a range
127		'r [range_or_var]' command which reads the contents of a file
128		 as strings into a range or starting at a cell.
129%	-added S_EVALALL
130		command 'evalall' for use in scripts (the default is
131		not to to any evaluation while reading a file)
132%	-S_COPY to a var, ex: copy to a50 from a10:f30
133		(make the destination conform to the source)
134
135%-needs added to doc/* files
136
137vi.c
138	-support for D and C in edit mode, as well as c$, d$, c0, d0.
139	 Man and help pages.
140	-fixed incorrect interpretation of cl command at end of line
141
142
143TODO:
144auto-config PAGER (use env) if fails use internal
145CRYPT same as above...
146SIGTSTP causes an endless loop (curses on Linux)
147
148CHECK:
149	-reg*c*mp don't seem to work same way
150	-probe for:
151		-HAVE_X11*
152
153***********
154I just noticed the [somewhat] new Xspread3.x code...
155
156Some notes on the new Xspread3.1.1:
1571) In the C code: '\0' should be used vs NULL to end strings
158	NULL is a pointer, '\0' end of string, 0 an integer
159	(CDC even had a few UNIX machines where: NULL != '\0' != 0)
1602) Makefile: $(OBJS) should not include gram.o so gram.o doesn't
161	try to be built by 2 different make targets
162
1633) AIX3.2 needs -lPW for regcmp/regex
1644) Per the TODO file:
165-TODO-
166>	BTW, there is a serious bug concerning functions that return strings
167>	(eg @DATE, @SUBSTR): it says "invalid numeric function" or somesuch.
168>	This means that eval() instead of seval() is being called for those
169>	functions, but I couldn't discover why.  At present, you can't use
170>	functions that return strings.
171
172	Strings functions are assigned the string part of a cell.
173	Use: label, leftstring, rightstring (verbs in gram.y that call slet())
174		vs let (which calls let())
175
176	I always thought that something could be done to make it automatic.
177	a) ie: [xspread saying this] 'I know that he said assign this to the
178	   numeric part, but what is given is a string therefor I will just
179	   do a 'label' or such vs the let.
180	b) rethink the numeric/string idea of cells [note: major change]
1815) I will look into what was broken with the curses, aka 'sc' part, of xspread.
1826) I have little to no time in the last few years for support of 'sc' and
183	would love to turn over the maintainership. Really Xspread is becoming
184	stable enough, as long as the text/curses part were supported, just
185	to merge officially (become the same product).
186-TODO-
187>	Currently this is xspread..  One day it will be incorporated
188>	with SC.  SC and xspread will be the same program.
189>	I've also noticed that sc.c could not compile if DOINGX is not defined
190>	due to the use of userfont which is declared only when DOINGX is
191>	defined.  Some of the other defines also still get screwed up.
192
1937) I will answer any questions as needed, etc.
194
195
196