1CHANGES BETWEEN 7.15 and 7.16: 2Chuck Martin 3 -The marks for the last nine edited cells are now updated properly 4 even if the data entered or edited is a string constant. 5 -When assigning a numeric value to a cell with = (or "let"), the 6 numeric part of the cell will be cleared if no expression or value 7 is specified (e.g. "let A0 ="). 8 -Fixed a bug that caused references to cells in rows 0-3 to some- 9 times be incorrect when copying. 10 -The vv command now increments modflg properly so sc knows that the 11 file has been modified. 12 -Added vi-like abbreviations, defined with the abbrev command and 13 undefined with the unabbrev command (shortcut key is ~). See the 14 man page for usage details. 15 -When in navigate mode, ^V now acts like the ESC key, which allows 16 you to use ^V^V to disable expansion of abbreviations, as in vi. 17 You can still use 'v' to insert the numeric value from the current 18 cell into the command line. 19 -Added support for POSIX regex functions (regcomp() and regexec()), 20 using extended regular expression syntax, and made it the default 21 in the Makefile. Also combined all regex variables into a single 22 variable in the Makefile. 23 -Rewrote the code that copies a marked cell. This fixes several 24 problems: the is_cleared and may_sync flags are now correctly set 25 (thanks to Michael Karcher for bringing that bug to my attention), 26 sc will no longer copy into a locked cell, and copying a blank cell 27 into a nonblank cell now clears the nonblank cell (it previously 28 had no effect). 29 -When in quick numeric entry mode and a command is started using 30 a digit or the +, -, or . keys, any cursor movement while the 31 cursor is at the end of the line and the line ends with a + or - 32 will automatically switch to navigate mode. 33 -The "+" key now works like "=" if the numeric part of the current 34 cell is empty, except that the entry will begin in navigate mode. 35 If quick numeric entry mode is enabled, after switching to insert 36 mode the first time, the cursor keys will behave as if the entry 37 was started with a digit or decimal. 38 -When defining a range in navigate mode and the character immedi- 39 ately preceding the cursor is either a + or -, or the cursor is 40 at the beginning of an empty "let" expression, pressing + or - 41 will insert "@sum(" into the line, followed by the range, followed 42 by ")" and then the character pressed (either + or -), and will 43 remain in navigate mode. Pressing TAB, :, or . in such a case 44 will do the same thing, but without the final + or -, and without 45 remaining in navigate mode. 46 -Pressing the space bar in navigate mode while highlighting a range 47 will enter the highlighted range in the command line, followed by 48 a space, but will remain in navigate mode. Otherwise, it will 49 move forward a column, as before. This is handy for entering 50 copy, move, or frame commands, for example, which accept more 51 than one range in the command. 52 -The openrow command now works like the 'o' command instead of the 53 'i' command, as it should. 54 -When adding or deleting a note, modflg and FullUpdate are now 55 always incremented so that the the screen is updated properly and 56 the change is saved if necessary. 57 -When deleting rows in a framed range, the frame is now adjusted 58 properly all the time, regardless of how many rows are deleted. 59 Also, if all of the inner range rows are deleted, the frame is 60 removed. 61 -Removed clear() from the goraw() function to avoid screen flicker 62 at the end of a macro, and added a clear() after each goraw() 63 function call that still needed it. 64 -Removed #includes for getopt.h and added one for unistd.h in 65 psc.c because getopt.h is only necessary for GNU long options, 66 which sc and psc don't use. 67 -Removed the "#" prefix from backup file names, leaving only the 68 trailing "~", which is more standard practice. This was in 69 response to a suggestion forwarded to me from the Debian Bug 70 Tracking System (although it technically wasn't a bug). 71 -The umask is set to 0 before creating backups, and then reset to 72 its original value afterwards, so that the backup file will have 73 the same identical permissions as the original file. 74 -Backup files now retain the modification time of the original 75 file before it was modified, and also the user and group ids, if 76 possible. 77 -The -P command line option can now accept "%" as its range, which 78 is interpreted to mean the whole spreadsheet. 79 -There is now a -W command line option that works similar to the -P 80 option, except it uses the write command instead of the put command, 81 and it takes a single range as an argument, which may be "%" to 82 designate the whole spreadsheet. 83 -User-defined formats may now be edited instead of having to re-enter 84 them from scratch. 85 -Rewrote much of the history search code so that it works much better 86 than before and allows both forward and reverse searching. Also 87 added regular expression handling to the history search functions. 88 -When searching or navigating the command line history, a message 89 is shown on the error line (2nd line) telling which line of the 90 history you're currently looking at. 91 -If a cell uses a format that hasn't been defined yet, and isn't one 92 of the predefined formats, it will now cause the cell to be blank 93 instead of containing random characters. Thanks to Hartmut Henkel 94 for reporting this bug. 95 -All user-defined formats are now cleared in erasedb(), such as when 96 loading a new file. 97 -When copying, if the destination range has fewer rows or columns 98 than the source range, the area to be cleared before copying will 99 be expanded to the same number of rows or columns as the source 100 range to prevent there being unexpected data in the "holes". 101 -In the copy() function, added a call to sync_refs() after erasing 102 the destination range, but before doing the actual copy, to prevent 103 messing up color ranges, frames, ranges in expressions, or named 104 ranges. 105 -Range commands are now initiated with "r" instead of "/". The "/" 106 key will be mapped to more advanced search (and possibly replace) 107 capabilities later. 108 -Strings with embedded, backslash-escaped quotes are now displayed 109 properly, with the backslashes removed. 110 -Shell escapes (using "!") now also work while in edit mode. 111 -Added @filename(e) function which returns the current default 112 filename. Expression e determines whether the full path should 113 be returned, or just the base name, depending on whether it is zero 114 or not. 115 -If craction is set to move the cursor either down or to the right, 116 autoinsert is not set, and the cell cursor is in the scrolling region 117 of a framed range, the cell cursor will never leave that region, but 118 will always go to the next row/column after entering data in the last 119 column/row of the range. After reaching the bottom right corner, 120 craction will be ignored. 121 -If quick numeric mode and craction are both set, pressing <RETURN> 122 will move in the direction craction is set for instead of switching 123 to input mode with an empty line. 124 -Changed test in get_motion() from checking for 0 to checking for 125 '0' (digit instead of NULL byte), so that commands like d0, c0, and 126 y0 (in edit mode) work correctly. 127 -If the dollar prescale option is set, all numbers entered with a 128 decimal point will be scaled, even if all of the digits after the 129 decimal point are zeros (or missing). 130 -Fixed a bug that prevented sc from remembering the filename when 131 starting with a non-existent filename on the command line (for 132 creating a new file). Also, added a message stating that a new 133 file is being created if sc is started with a single filename on 134 the command line and the file doesn't exist. 135 -All of the commands that take you to the limits of the spreadsheet 136 (0, $, ^, #, and the HOME key) now work differently when invoked 137 inside a framed range. Depending on where you are, they will take 138 you first to the limit of the inner range, then the outer range, 139 then the whole spreadsheet. Also moved the code for all of these 140 commands to their own functions in vi.c, since these portions of 141 code were all being duplicated in the navigate mode section of the 142 write_line() function. 143 -The last goto can now be repeated (find the next match) by pressing 144 'n'. All note commands must now be accessed by pressing '*' instead 145 of 'n' to allow this. To actually go to a note, press '*' twice. 146 -Added a new pull command, pullfmt (pf), that works like merge except 147 that only cell formatting is merged, leaving the actual data un- 148 touched. 149 -Changed starting value of findfunc in vi.c from '0' to '\0' to fix 150 a bug that caused lockups when using the ; and , commands before a 151 prior search with f, F, t, or T. 152 -Swapped the meaning of the ` and ' commands because the ' key is 153 less of a reach on most keyboards (and more standard), and restoring 154 the target cell to its original position on the screen seems to be 155 more useful and more often used than not restoring the position. 156 -In closecol(), doformat(), and formatcol() functions, rowsinrange 157 and colsinrange are now reset to prevent occasional lockups when 158 deleting or resizing columns. 159 -Moved color initialization earlier in the start-up so that it won't 160 override colors in a file (including the .scrc file). 161 -Trying to define color number 0 now correctly results in an error. 162 -Fixed support for entering numbers in exponential notation (thanks 163 to Michael Van Biesbrouck for bringing that bug to my attention). 164 Also, disallowed range names that are all numeric except for a 165 single 'e' or 'E' anywhere in the name, because they are ambiguous. 166 -Removed the strtof() function, since it partially duplicated the 167 functionality of the standard ANSI C strtod() function (but not as 168 well), and replaced all strtof() calls with calls to strtod() (with 169 a slightly different syntax). 170 -Moved the resetting of skipautorun inside the if(eraseflag) block 171 in the readfile() function to prevent it getting reset prematurely 172 (during the reading of the .scrc files) and resulting in the autorun 173 macro being run anyway. 174 -If deleting a range of rows, columns, or cells causes the range 175 pointed to by lastfr to no longer exist, lastfr is reset to NULL to 176 prevent a segmentation fault during the next screen update. 177 -The copy command now uses the delete buffer as temporary storage 178 for the source range being copied so that if the source and desti- 179 nation ranges overlap, the copy still works. 180 -The sync_refs() function now also syncs references in all delete 181 buffers so they will still be correct when pulled (even though the 182 references are adjusted when pulling, they were still occasionally 183 wrong if the cells originally referenced were moved in the meantime). 184 -A new copy command, "c.", can be used to copy the current cell into 185 a range which includes the current cell, and which is highlighted 186 by moving the cell cursor. This facilitates the rapid entry of the 187 same value, string, or expression into a range of cells. See the 188 man page for details. 189 -You can now left justify, right justify, or center all the strings 190 in a range with the "r{", "r}", and "r|" commands, respectively. 191 These operations are also available in macros with "leftjustify", 192 "rightjustify", and "center". 193 -When changing column formats, if ESC, ^G, or q is pressed, the 194 original format will be restored. 195 -The fixed operator was not working. It now works, but, like all 196 other keywords, must be preceded by "@". 197 -Autoinsert mode now works properly even if the bottom of the frame 198 is of width 0. 199 -A new Set option, autowrap, allows data to be entered in a framed 200 range row by row or column by column if craction is not 0, auto- 201 matically wrapping to the next row or column when the end of the 202 scrolling region is reached. If both autowrap and autoinsert are 203 enabled, autoinsertion only takes place if autowrap would take the 204 cell cursor outside of the scrolling region of the framed range. 205 -The "set" command now increments modflg so that sc knows the file 206 has been changed and asks whether to save when quitting. 207 -Added vi-like W and B commands to edit mode which only consider a 208 string of one or more spaces to be a word boundary. 209 -The @date function can now take an optional second parameter, which 210 is a strftime(3) compatible format string, which will override the 211 default format. 212 -All functions which take a single argument now store it as the 213 left parameter instead of the right (e.o.left instead of e.o.right), 214 so that adding an optional second parameter, such as in the @date 215 function in the previous item, keeps the parameters in the correct 216 order when decompiling for display on the top line or saving in 217 a file. 218 -When numeric constants are entered which are too large to be con- 219 tained in a double, they are replaced with @err. When the result 220 of a calculation is too large to be contained in a double, it results 221 in an error. These fix a dual bug which caused "inf" or "INF" to be 222 displayed (bug 1) and written to a file (bug 2) when saving. When 223 written to a file, it resulted in an error when the file was read 224 back in the next time. 225 -All rows, columns, and ranges that are yanked or deleted now have 226 their respective row/column hidden flags and column width, precision, 227 and format saved so they can be restored appropriately when pulling 228 rows or columns (these were all lost, previously, and the default 229 values were restored, instead). 230 -Added a pullcopy command and its interactive shortcut, pC, which 231 acts like pp, except that references are adjusted as in the other 232 copy operations. Also added a "p." command, which works like pC, 233 except that it allows a destination range to be defined as in the 234 "c." command. 235 -When highlighting a range in navigate mode, pressing "o" will move 236 you to the opposite corner of the highlighted range, allowing you 237 to adjust all four sides of the range. When used with the "c." 238 command, the cell to be copied will always be the cell the command 239 was started in. 240 -The deleterow, deletecol, yankrow, and yankcol commands now work 241 properly with no arguments instead of assuming there is a range 242 highlighted. 243 -The Z command (for hiding rows or columns) now allows a range of 244 rows or columns to be highlighted using any cursor movement keys, 245 like the d (delete) and y (yank) commands have for quite awhile. 246 -The erase_area() function now has a new argument to ignore locked 247 cells which is used when sorting so that locked cells can still 248 be sorted. Also added an unlock argument to free_ent() and caused 249 the is_locked flag to be copied in the copyent() function so that 250 sorting won't unlock cells. 251 -The @sum, @prod, @avg, @count, @stddev, @max, and @min functions 252 may now take an optional second argument which is an expression 253 that is evaluated for each cell in the range, and only those cells 254 for which the expression is non-zero are included in the calculation 255 of the function. See the man page for details. 256 -If rows are inserted into a framed range, note addresses are now 257 updated properly. 258 -Logical NOT (~ or !) now always decompiles to "!" instead of "~" 259 for display or writing to a file. 260 -In the O_VAR case in the seval() function, check to make sure that 261 ep is not NULL before checking if it has a label to prevent possible 262 segfaults with the seval command, and also changed its name to vp 263 for consistency with the O_VAR case handling in eval(). 264 -In doseval(), check the return value of seval() for NULL before 265 using it to prevent segfaults with the seval command if the ex- 266 pression given to seval isn't a valid string expression. 267 -Fixed a bug that prevented a string expression that currently 268 evaluated to a null string from being written to a file with the 269 put command by testing for either a non-null string value or a 270 string expression in the cell instead of just the former. 271 -Moved "FullUpdate++" outside of "if (eraseflg)" block at the end 272 of the readfile() function in cmds.c so that the screen is updated 273 properly after a macro. 274 -Added a getkey command for use in macros to get a single key from 275 the user instead of a string. Handy for "hotkeys" or "Press any 276 key..." type things. 277 -Changed two instances of update(0) to refresh() in formatcol(), and 278 added another refresh() after update(1) later in the same function 279 because the screen wasn't being refreshed properly in FreeBSD. 280 -Added a ^L option to redraw the screen while formatting a column. 281 -Added -ffloat-store to the compiler command line for interp.c to 282 fix intermittent error with @round function as well as some other 283 problems caused by the FPU registers in x86 machines, and possibly 284 others, having different precision than doubles in memory, and 285 removed some previous workarounds for some of these problems. 286 -Braille mode now positions the cursor at the far left of the current 287 cell and also moves the column names to the left edge of the column, 288 which works better with screen readers such as SpeakUp while still 289 retaining all of its advantages for braille readers. 290Michael Lapsley 291 -Added @lastrow and @lastcol functions, useful for macros designed 292 to default to the whole spreadsheet. 293 -Added getrange command for use by macros to check if a given named 294 range exists without causing an error, and return the actual range 295 if so. 296 -Added a history file (default: ~/.sc_history) to carry the command 297 history from one session to another. 298 -Added ability to interface with plugins (external programs for 299 adding commands to sc and converting files with user-specified 300 extensions automatically when reading or writing). 301Wilhelm B. Kloke 302 -Pointed out problems with arrow keys in nmgetch() when BSD43 is 303 defined due to changed ^B and ^F behavior, causing arrow keys to 304 work incorrectly on FreeBSD. Also, similar changes were necessary 305 for VMS when SIMPLE is defined. 306 -Add "optreset = 1" to -P option handling when BSD43 is defined so 307 the -P command line option will work properly on FreeBSD. 308Hartmut Henkel 309 -Added locale support. 310 -Rewrote dodate() function to use strftime() because ctime() doesn't 311 honor locale. 312 -Changed PI macro to M_PI, which is standard in math.h. 313 -Changed sprintf() to snprintf() in dofmt() function to prevent 314 potential segmentation faults. 315 -Added isascii() check in addition to existing isalpha() check to 316 prevent invalid address problems in some locales. 317TJ Dvorachek 318 -Time types in interp.c have been changed from long to time_t and 319 the time() prototype in dotime() is redundant and has been removed. 320 -Provided information for creation of a DJGPP section in the Makefile. 321 -In the signals() function in sc.c, the SIGBUS signal handler is not 322 set when compiling with DJGPP because it lacks SIGBUS. 323 324CHANGES BETWEEN 7.14 and 7.15: 325Chuck Martin 326 -Fixed "``" and "''" bug, introduced in 7.14 (they weren't being 327 accepted). I guess 7.14 was released too soon after last minute 328 changes, without sufficient testing. 329 -Fixed format bug that caused segfaults when there was no decimal 330 point in the format string, also introduced in 7.14 last minute 331 changes. 332 -When entering insert mode with '+' or '-', and the cell already 333 contains a numeric value or expression, the edit is now saved in 334 the dot buffer, as it should be. 335 -Don't save the current position (for the "`" and "'" commands) 336 during a goto in a macro. Also, don't save the current position 337 during any movement command where the current cell doesn't change 338 (leave the saved position pointing to the last position before an 339 actual move). 340 341CHANGES BETWEEN 7.13 and 7.14: 342Chuck Martin 343 -Added a braille option ("set braille" or ^Tb) with two different 344 modes, which makes use of braille displays with sc much easier 345 by judicious placement of the hardware cursor. 346 -The "cellcur" option (current cell highlighting) is no longer 347 saved with a file, since it's more likely a user preference 348 and/or terminal dependent, and is more appropriate for use in a 349 user's .scrc. 350 -Split the last fprintf() in list_frames() so that the outside 351 and inside ranges will be different (as they should be), even if 352 neither is a named range, since r_name() uses a single static 353 buffer. 354 -The range copy command (/c) with only one argument will now use the 355 highlighted range as the source if one is highlighted. Otherwise, 356 it will copy the last copied range, as before. 357 -The range copy command (/c) with no arguments will now use the 358 highlighted range as the destination, if one is highlighted, and 359 the last copied range as the source. 360 -The addnote command with only one argument will now use the 361 highlighted range if there is one, and the current cell otherwise, 362 as the range to link to the cell specified by the single argument. 363 -The frame command with a single argument will use the highlighted 364 range, if any, as the inside range, and the single argument as 365 the outside range. If no range is highlighted, the single argument 366 will be used as the inner range, and the existing outer range 367 containing the current cell will be used as the outer range, which 368 which was the previous behavior whenever a single range was speci- 369 fied. If the current cell is not in an existing framed range, an 370 error message will be issued. 371 -The frame command may now be used without any arguments, provided 372 a range is highlighted (which will be used as the inner range) 373 and the current cell is in a framed range whose outer range is to 374 be used as the default outer range. 375 -Fixed a bug that prevented defining a new range with a name that 376 was the same as the beginning of a previously defined longer 377 range name. 378 -A new command line option, -a, will skip the autorun macro if 379 one is defined. 380 -Bug fix: if a cell contains a string expression, but no numeric 381 value, pressing "e" to edit the non-existent numeric value will 382 no longer bring up the string expression for editing (it wouldn't 383 work, anyway, because string expressions don't work with the "let" 384 command). 385 -You can now use the cursor keys with ^Tr to set craction. 386 -In numeric mode, entering insert mode by pressing a digit, '+', 387 or '-' will cause the cursor keys to terminate an entry and 388 move the cell cursor in the desired direction. Switching to 389 edit mode will change the cursor keys back to their normal 390 function (moving the cursor in the command line or history), even 391 after switching back to insert mode. 392 -Fixed @index function so that indexing by both row and column 393 will still work even if there is only one row or one column 394 (so that, for example, a macro could generically access the 395 cell in the first row and first column of a range without 396 regard for the actual dimensions of the range). 397 -All flags are turned off in the clearent() function except 398 is_changed and is_cleared, which are turned on. Also, the 399 is_cleared flag is turned off in the fill() function after the 400 cell is cleared and then assigned a new value. This prevents 401 errors from appearing in expressions which reference cells in 402 the filled range whenever the sync_refs() function is called, 403 which happens any time any cell or range of cells is yanked, 404 deleted, pulled, copied, or moved. 405 -Each instance of @ext now saves its own previous value, which 406 eliminates the longstanding bug that caused the last returned 407 value to be used for all instances if external functions were 408 enabled and later disabled. 409 -Added a % command in edit mode that finds the matching parenthesis 410 of a pair, as in vi (only works for parentheses, not for braces 411 or brackets). 412 -When starting a new command, the dot buffer will not be altered 413 unless the command starts out in edit mode (like the "e" and 414 "E" commands). All other commands will only alter the dot buffer 415 after entering edit mode for the first time. This allows things 416 like editing data, using "goto" to jump to a new cell, and then 417 "." to make the same change to the new cell (previously, the 418 "goto" command caused the previous edit to be lost from the dot 419 buffer). 420 -Numeric arguments are now saved for use with the dot buffer when 421 editing a line, so the same argument will be used again when 422 repeating the action with the "." command. 423 -If a command line is identical to the last command in the history, 424 it won't be stored in the history again. 425 -The copy and move commands (/c and /m) no longer have an effect 426 on the delete buffer. This allows you to do things like delete 427 a cell or range of cells, move things around in the spreadsheet, 428 and then pull the deleted cell(s) back in. 429 -Implemented named buffers, "a" through "z" and "0" through "9", 430 selected with the " key. Buffers "1" through "9" hold the last 431 nine deletions, as in vi, and buffer "0" holds the last cell or 432 range of cells yanked, as in vim. See the man page for details. 433 (A "select" command was also added to allow the use of named 434 buffers in macros.) 435 -The format command now rejects a width of zero. 436 -Column headings over columns of width 1, 2, or 3 are now displayed 437 properly. If the width is 1 and the column name is two characters, 438 only the second character will be displayed in the heading. 439 -In navigate mode, v and ^V now place the numeric value from the 440 current cell into the command line, freeing up the ^A command 441 to be used as a synonym for the HOME key, as it is when not editing 442 a line. 443 -KEY_RESIZE is now handled properly so an error message is not 444 issued whenever an xterm window is resized. If SIGWINCH is 445 undefined, KEY_RESIZE resizes the spreadsheet to fit the window. 446 otherwise, it is ignored, since the SIGWINCH signal handles the 447 resizing. 448 -Pulling the same range several times now works correctly. Pre- 449 viously, some cell references were being altered after the first 450 pull under certain circumstances. 451 -Internal references are now adjusted properly when pulling a range 452 with "pt" (pulltp). 453 -The -R and -C command line options now work properly again. 454 -The pull merge command (pm) now actually does a merge, instead of 455 overwriting the destination cells, and a new pull command (paste, 456 or "pp") pulls a cell or range after first erasing the destination 457 cells. For macros, pull does the paste, while pullmerge does the 458 merge. 459 -The f (format) command now allows you to interactively change the 460 column width, precision, and format number as well as enter these 461 values on the command line as before. See the man page for details. 462 -The "&" in the fractional part of a custom format type now works 463 properly even if the precision is one. 464 -When using "&" in a custom format type, and there are literal 465 characters after the fractional portion, they will now be included 466 properly even when the precision is zero. 467 -Removed the "fill x y" (where x and y are numbers and the range 468 is supposed to be highlighted) form of the fill command, since 469 its usefulness and convenience leaves much to be desired the was 470 sc now handles the /f command. It's much easier to use the full 471 form now. 472 -Added marks '1' through '9' to remember the locations of the last 473 nine edits, and '0' for the current (or last, if not editing) edit. 474Hartmut Henkel 475 -When saving a range with "Put", the "format" and "hide" commands 476 are now written for the last column of the range, if necessary 477 (needed to change a "c < cn" to "c <= cn" in the write_fd() 478 function in each case). 479 480CHANGES BETWEEN 7.12 and 7.13: 481Chuck Martin 482 -New column formats may now be defined with "format # = string", 483 where # is a number from 0-9, and string is a format string like 484 that used for formatting individual cells. Numbers 0-4 will 485 replace the default formats (causing the precision value to be 486 ignored), and numbers 5-9 will add new ones. 487 -Format strings now interpret "&" in the fractional part to mean 488 that the column precision should be used. This allows user 489 specified formats to have their precision vary from column to 490 column without having to create multiple formats (see the previous 491 item). 492 -The "vr" command now limits itself to the current framed range, 493 if any, like "dr" and "yr". If not contained in a framed range, 494 it works as before. 495 -The "yy" command now yanks only the current cell instead of the 496 current row, as this seems more useful. Likewise, "vv" converts 497 the current cell from an expression to a constant value, and for 498 consistency, "dd" erases the current cell ("dd" is a synonym for 499 "x" now, instead of "dr"). 500 -You can now unset mdir and autorun by setting them to "". 501 -Both goraw() and deraw() do nothing if stdout is not a terminal. 502 This prevents segmentation faults when using sc non-interactively 503 with redirection or pipes. 504 -The redraw command also does nothing if stdout is not a terminal 505 for the same reason as the goraw() and deraw() functions (see the 506 previous item). 507 -doquit() and dump_me() no longer try to prompt the user about 508 saving a file under emergency situations such as a broken pipe 509 or kill signal if stdout is not connected to a terminal, which 510 prevents even more possible segmentation faults. Also, SIGINT 511 is no longer ignored, but calls doquit() instead. 512 -Added a "usecurses" variable, and replaced most instances of 513 "isatty(STDOUT_FILENO)" with "usecurses". The -q option also 514 resets usecurses to 0, so echoing commands to "sc -q" now works 515 from the command line. 516 -Added another "usecurses" before the confirmation message in the 517 writefile() function. 518 -The error() macro now checks stdout instead of stdin before dis- 519 playing its message. 520 -find_char() now checks to see if the last character in the dot 521 buffer is 'f', 'F', 't', or 'T', and if so, stores the next 522 character after it. This causes these commands to be stored 523 in the dot buffer if they are part of another command (such as 524 'df+'), but not otherwise. 525 -Fixed a bug where numeric arguments could not be used in edit and 526 navigate modes if quick numeric mode was set. 527 -Added a new command, seval, that evaluates an expression like 528 eval, except it evaluates string expressions instead of numeric 529 expressions. 530 -Added KEY_BACKSPACE and KEY_END to the control key handling part 531 of the main loop, and removed KEY_END from nmgetch(). 532 -Eliminated the hitwinch variable and moved all SIGWINCH stuff into 533 the SIGWINCH handler (winchg()). Also, changed update() to use 534 getmaxyx() instead of LINES and COLS. These changes make sc 535 react immediately to resizing xterms (for some reason, this 536 doesn't work with old versions of ncurses--at least not with 537 version 1.9.9g, which seems to require restarting sc to make size 538 changes effective). 539 -A new Y command in edit mode that yanks to the end of the line, 540 like y$ (I know this isn't the way Y works in vi, but it's the 541 way it *should* work for consistency [cf. the D and C commands], 542 and the way Y works in vi would be pointless in sc). 543 -The "cellassign = 1" in slet() is now only done if the cell being 544 assigned to is the current cell, like it was supposed to (I must 545 have deleted that part by accident somewhere along the line). 546 -The /S command now lists named ranges, framed ranges, and color 547 ranges, one after another, along with definitions of any colors 548 that have been changed from the default (no second letter required). 549 -Colors may now be unset (reverted back to their default start-up 550 values) by leaving out the expression (e.g. "color 3 =" will 551 set color 3 back to it's original foreground/background pair). 552 Unlike setting it explicitly to its original value, this will 553 not cause the expression to be written to the file when saved. 554 -Changed test in pullcells() function for checking if there is 555 data to pull so that instead of testing the actual pointer to 556 see if it's NULL, the index will be tested to see if it's 557 negative. The old method was causing segfaults if the delete 558 buffer was empty. 559 -^A now goes to the beginning of the line in edit and insert modes. 560 It retains its original behavior in navigate mode (the man page 561 already stated that inserting the numeric value of the current cell 562 into the command only works in navigate mode; now the behavior 563 matches the manual). 564 -Range names may now begin with a digit as long as there is at least 565 one non-numeric character (alpha or '_'). 566 -Added range name completion. 567 -Fixed a bug that caused range names to match when they shouldn't 568 when parsing a command (a range name would be matched by any 569 string of characters that matched the beginning of the name, so 570 that if "abc" and "abcd" are both defined, an expression using 571 "abc" would end up accessing the wrong range, since the list is 572 searched in reverse alphabetical order). 573 -Cells with attached notes are now identified with an asterisk to 574 the left of the numeric portion (using color 4, default black on 575 yellow, if color is enabled). 576 -The J, K, PageUp, and PageDown commands now use the pagesize setting 577 even in navigate mode. 578 -^B and ^F now do the same as PageUp and PageDown instead of moving 579 left or right one cell. This is to be more compatible with vi, 580 resulting in less confusion for those who use both. 581 -Centered strings are now entered by pressing '\' instead of '"', 582 so that '"' can be used for multiple delete buffers as in vi in 583 the future. 584 -If an autorun macro is already defined, pressing 'A' will include 585 it for editing in the command line it brings up, as it should 586 (it wasn't working properly due to a missing else). 587 -In openfile(), check if rfd is NULL (signifies opening pipe to 588 process for both reading and writing) before closing unused end 589 of (non-existent) second pipe. This was causing intermittent 590 lock-ups when only writing to a pipe because stdin was being 591 closed. 592 -The screen is no longer cleared or redrawn unless absolutely 593 necessary after a macro is run, since most macros won't need it, 594 and it causes screen flicker. Macros which need it (those that 595 write directly to the screen, bypassing sc) will need to do an 596 explicit redraw before ending. 597 -SIGPIPE now causes a flag to be set (brokenpipe), which is checked 598 a number of places so that nothing more is written to the pipe 599 and an error message is displayed, instead of trying to save the 600 file and quit (an annoyance when all you did was do a /S and then 601 quit before reading the whole output). 602 -If the last character in the string in a run command is '&' 603 (signifying the command will be run in the background), the 604 "Press any key to continue" prompt will not be displayed, and 605 sc will continue with no hesitation. I use this in Linux to 606 load another sc file in another virtual console with "openvt -sw" 607 (assign it to a function key for ease of use). 608 -Added @rows and @cols functions that take a range as argument and 609 return the number of rows or columns, respectively, in that range. 610 -Added a new error command for displaying error messages from macros 611 (syntax: `error "message to display"'). 612 -The duprow() and dupcol() functions now put the cursor in the 613 original column or row, respectively, which, among other things, 614 prevents sc from hanging when multiple rows or columns are appended. 615 -A `put ""' command (with the empty string) will save the default 616 name even in a pipeline, unless the default name is also the empty 617 string, in which case it will be written to stdout. 618 -Removing a function key definition by defining it to be "" (the 619 empty string) now changes the pointer to NULL in addition to freeing 620 the string, as it should. 621 -When using goto (g) to jump to a specific cell address (as opposed 622 to doing a search), only save the current address for the `` and 623 '' commands if the destination address is different. 624 -When inserting or deleting rows or columns, update the addresses 625 associated with the last explicit goto. 626 -Added definitions for color_set() and attr_get() to sc.h for 627 older versions of (n)curses that have missing or outdated versions 628 of these macros (not conforming to X/Open Curses). 629 -Colors are now reinitialized in startdisp() (using init_pair()) so 630 that they continue to work properly after resizing an xterm. 631 -The -P command line option can now be used without specifying the 632 source range, but the target address must be specified in such a 633 case, preceded by a '/' (e.g. '-P/f23'). In this case, sc will be 634 started interactively in navigate mode so you can highlight the 635 source range you want to import. 636 -The -P command line option may now be used more than once, and 637 the specified ranges will be output one after another, however, 638 the -v option must precede each instance of -P whose output is to 639 be converted to values. This allows multiple ranges to be copied 640 from one file to another without having to load and calculate the 641 entire source file for each of them. 642 -The destination given with the -P option may now be specified as 643 either a cell address or a range. If a range is specified, the 644 upper left corner of that range will be used. This allows named 645 ranges to be used. 646 -The initial allocation of memory for color pairs is now done in a 647 loop instead of eight explicit statements. 648 -Undoing changes made to a command now works after using replace mode. 649 Also, backspacing in replace mode restores the original character 650 instead of just deleting the new one and closing the hole. 651 652CHANGES BETWEEN 7.11 and 7.12: 653Chuck Martin 654 -The yankrow and deleterow commands can now take a numeric argument 655 or two numeric arguments separated by a colon to specify a row or 656 range of rows to yank/delete. Likewise, the yankcol and deletecol 657 commands can now take a column name or two column names separated 658 by a colon to specify a column or range of columns to yank/delete. 659 -Pressing y or d followed by any cursor movement, including PageUp, 660 PageDown, H, J, K, or L, will begin highlighting full rows/columns 661 to be yanked or deleted. Pressing TAB, '.', or ':' will terminate 662 the highlighting and insert the range of rows/columns in the 663 command line. Pressing the RETURN key, instead, will yank/delete 664 the default range of rows/columns displayed. 665 -Added a pagesize option that can be changed with the set (S) 666 command. If nonzero, it will determine the number of rows to 667 move up or down when using the J, K, PageUp, or PageDown keys. 668 -The PageUp, PageDown, J, and K commands will now be multiplied 669 by a preceding numeric argument like most other commands. 670 -An improper test was causing the syncref() function to corrupt 671 expressions which referenced empty cells every time anything was 672 deleted or moved. This has been fixed (the struct ent now has 673 an additional "is_cleared" flag). 674 -When adding a note with "na", automatically start out in navigate 675 mode. 676 677CHANGES BETWEEN 7.10 and 7.11: 678Chuck Martin 679 -You can now use ~ in edit mode to change the case of a character, 680 just like in vi. 681 -In quick numeric mode, the + and - keys now switch to insert mode 682 and append a + or - to the existing numeric entry, respectively. 683 This is so that you can easily add to or subtract from a cell that 684 already contains numeric data. 685 -When attempting to edit the numeric value in a cell with e, +, or 686 -, and no value or numeric expression has previously been entered 687 in that cell, you will no longer be presented with a 0 to edit. 688 -In navigate mode, the + and - keys now insert the current cell 689 address, followed by a + or -, respectively, and remain in navigate 690 mode, so that other cells may be easily added to or subtracted from 691 the equation. 692 -^E can now be used in insert mode to jump to the end of the line. 693 -Check to see if $HOME exists before copying it to curfile to 694 prevent segfaults if it's unset. 695 -The deraw() function now sets the background to the default colors 696 (white on black) before clearing the last line. 697 -If piping from a command (as opposed to *to* a command), as in 698 advanced macros, the cell cursor won't move to the last line and 699 the last line won't be cleared, which avoids unnecessary screen 700 updates. 701 -Function key definitions are now saved with a spreadsheet file. 702 It makes more sense to include them with the file than to consider 703 them user preferences for inclusion in a dotfile. 704 -Fixed a bug that prevented locked cells from being recalculated 705 (this actually looked deliberate, but I don't understand why, so 706 I "fixed" it anyway). 707 -Locked cells now can't be changed even if the command is entered 708 from scratch at the command line (previously, you were only pre- 709 vented from using =, <, >, or " to enter insert mode while in a 710 locked cell). 711 -There are now openrow and opencol commands ("o" followed by "r" or 712 "c") that work like insertrow and insertcol ("ir" and "ic"), except 713 that the new rows/columns are added after the current row/column 714 instead of before it. 715 -When adding new rows/columns with a, i, or o, the new cells will 716 always be included in the same ranges (named, framed, or color, 717 as well as those used in an expression) as their counterparts in 718 the current row/column. This is handy when adding rows/columns 719 at the edge of a range, by moving to the appropriate side of the 720 boundary and using the appropriate command (i or o). This is 721 actually multiple changes, since each type of range had to be 722 dealt with individually. 723 -Added new command line options for use in piping data to another 724 program or redirecting to a file. These are: "-P range" or "-P 725 range/var" for writing a range in sc format to stdout (the "var" is 726 a cell address used to adjust addresses for inclusion in another 727 file starting at cell address "var"), and -v for causing values to 728 be output instead of expressions when the -P option is used. This 729 only outputs cell data and formatting, without all of the colors, 730 range definitions, column formatting, etc., that are included with 731 the normal put command or when piping the output without the -P. 732 Also, piping in general has been much improved. 733 -When using get to load a new file, all options are reset to their 734 initial defaults, marked cells are unset, etc., and the user's 735 .scrc file is reread. 736 -Fixed a bug which allowed strings that are too long for the cell 737 width to slop over into the next cell when they shouldn't (there 738 is data in the next cell, for example). This bug only occurred in 739 framed ranges. 740 -The pipe symbol (|) is no longer required at the beginning of 741 the "pipe" commands. The way the proper file descriptor is 742 chosen has changed so it's no longer necessary. This makes it 743 easier to use shell scripts for macros because there's no pipe 744 symbol to quote (it should have been done this way in the first 745 place--I don't know why it didn't occur to me before). 746 -Added a "status" command for use in advanced macros that will return 747 information about the current state, such as whether the file has 748 been modified and whether stdin or stdout is connected to a terminal. 749 -Added an "eval" command for use in macros to evaluate an expression 750 without storing it in a cell first. This is a pipe command so the 751 result will be piped to the macro. 752 -Added a -q command line option to force sc to exit immediately 753 after reading all files, including stdin, if that is being read 754 as a file. This is useful for getting information from a file 755 without entering it interactively (e.g. echoing the eval command 756 to sc from a shell script, effectively using sc as a command line 757 calculator). 758 -Defining a function key as "" (the empty string) will effectively 759 undefine it, so it won't be written to the file when saving. When 760 used with F1, this restores the default behavior of reading the 761 man page. 762 -After doing a goto, update() is called, so that following a goto 763 by a whereami in a macro will return the correct second address 764 (the upper left corner of the current screen). 765 -^E and ^Y both work in navigate mode now. ^E works both for 766 scrolling and going to the end of a blank/non-blank region. The 767 END key also works in navigate mode. 768 -Fixed problem in the range commands (those initiated with a "/") 769 where the cursor wasn't being positioned properly at the end of 770 the command line due the the recent change in how insert mode is 771 entered (for making the dot buffer work properly). 772 -Simplified logic for doing autorun macros. 773 -When starting to define a range from navigate mode with the TAB, 774 ".", or ":" keys, a space is no longer inserted into the command 775 line (there was an "ins_in_line(' ')" in the wrong place). 776 -Added a new function, @err, that forces an error. If rows or 777 columns are deleted and not pulled back in, all references to 778 cells in those rows/columns will be replaced with @ERR until they 779 are pulled back in (@ERR is equivalent to @err, but the caps show 780 that it is due to a deleted cell being referenced). If the 781 spreadsheet is saved to a file before pulling, the @ERR will be 782 saved as a part of the expression, and will show as @err (lower 783 case) after being read in again, since the deleted cell can no 784 longer be restored. This is so that it can be fixed in a later 785 session. Previously, the whole expression was lost if there was 786 an error when the file was saved and reread. Also, if another 787 deletion is performed before pulling the last one in, all instances 788 of @ERR will change to @err, showing that these references may 789 no longer be restored. 790 -Fixed a bug when inserting columns at the end of the scrolling 791 portion of a framed range, which caused formulas referencing the 792 last cell in the scrolling portion to reference the new last cell 793 (in the last newly added column) instead of the old one. 794 -Added a command to sort the rows in a range according to either 795 numeric or string data (or both) in one or more columns. See man 796 page for details. 797 -Added a "cslop" option (short for "color slop"), disabled by 798 default, which, when disabled, prevents long strings from slopping 799 over into a cell in a different color range, even if there is no 800 data in it. When enabled with "set cslop" or ^Ts (to toggle it), 801 this slopover will occur regardless of whether there is a change 802 in color range or not. The default is very handy in framed ranges 803 to get more data on-screen by including only the beginnings of row 804 identifiers in the frame while maintaining a cleaner look, while 805 enabling cslop still allows you to see the full string. 806 -All options which can be disabled by using ! with the set command 807 can now use ~ instead (handy for shell scripts because it doesn't 808 need to be quoted). Some options worked this way before, but it 809 wasn't consistent. 810 -The move command will now accept the currently highlighted range 811 as its second argument even if you don't press TAB, ".", or ":" 812 to enter it into the line. 813 814CHANGES BETWEEN 7.9 and 7.10: 815Chuck Martin 816 -Implemented "dd" command as a synonym for "dr" and "yy" as a 817 synonym for "yr" (similar to the way these commands work in vi). 818 -Added a vi-like y (yank) command to edit mode which copies from 819 the command line to the text delete buffer without deleting. 820 -Added two more goto commands: `goto #"regex"' to do a regular 821 expression search through formatted numbers, and `goto %"regex"' 822 to do a regular expression search through expressions. Both of 823 these may take an optional range argument to limit the search 824 to a specified range. 825 -Added a |getframe command for use in macros to return the outer 826 and inner ranges, respectively, of a frame, separated by a space. 827 -You can now scroll up and down without moving the cell cursor 828 using ^E and ^Y, as in vi. Since ^E also has another function, 829 it only scrolls when immediately following a ^Y or another ^E. 830 -Corrected man page which still erroneously stated that C centers 831 the current cell (it is now used to define a color). 832 -ZZ now only writes a file if it has been modified. It also gives 833 an error message if there is no default file name. 834 -If cell highlighting is turned off while color is on, the cell 835 pointer (<) no longer leaves a trail through colored ranges (I 836 don't know why anyone would use this combination of options, but 837 it's fixed, anyway). 838 -When writing a range with the put (P) command, format commands 839 for columns outside the specified range are no longer written. 840 -Removed "#include <stdio.h>" from sc.c, vi.c, and xmalloc.c, since 841 this is redundant when curses.h is included. 842 -Added an autorun command (shortcut "A") to specify a macro to be 843 run automatically as soon as the file finishes loading. Autorun 844 macros will not be executed from a file which is merged (such as 845 another macro). 846 -When uninstalling, $(LIBDIR) (default: /usr/lib/sc) is removed 847 completely, instead of just its contents. 848 -When used in a pipeline rather than a terminal, the format command 849 doesn't try to resize the column because the format is "too large" 850 for the screen, which resulted not only in negatively sized 851 columns, but also segmentation faults when switching to interactive 852 mode. 853 -Initialized variable "pid" to 0 in readfile() function in cmds.c 854 to eliminate potential hangs when closing a file after reading. 855 -A message was added to let you know when a file is being read so 856 it doesn't look like the program hung when reading a large file. 857 -When switching from reading from a pipe to interactive mode, there 858 is now a stopdisp() before the freopen() and a startdisp() after 859 to make sure the curses initialization is done properly. 860 -Now checks to see if the stdin is a tty before trying to check 861 if the terminal has colors (curses has_colors()) to prevent 862 segfaults when run in a pipeline. 863 -Modified both the sc and psc man pages for a more consistent 864 look. 865 -You can now use numeric arguments in the middle of a command in 866 edit mode, as well as the beginning. For example, d3w and 3dw 867 both do the same thing. If you do both, they will be multiplied. 868 -sc now uses getopt() to parse its options. 869 -If stdin is not a terminal (as in a pipeline) and a filename of 870 "-" is not given, stdin will be merged in after all files on the 871 command line have been processed. 872 -Added a modflg++ to the frame-handling part of the deleterow() 873 function in cmds.c so that deleting a row in a frame will cause 874 you to be prompted to save the file if you quit. 875 -Added an autoinsert option and toggle (^Ti) to automatically 876 insert a row/column each time the last row/column is filled in 877 the scrolling portion of a framed range if craction is set to 878 move the cell cursor so that it moves outside this range. 879 -Marked cells are now updated properly when inserting or deleting 880 rows inside a framed range. 881 -In both edit mode and navigate mode, "v" is now a synonym for ^V. 882 -Moved savedot() out of vigetch() in vi.c so that the f, t, F, and 883 T commands wouldn't be saved for repeating with the dot command. 884 Added a ";" and "," command to repeat these commands instead, as 885 in vi (the latter reverses the direction of the search). 886 -Replaced all instances of "insert_mode()" in the main loop in sc.c 887 with "edit_mode; write_line('A')" so that they are written into 888 the dot buffer properly. 889 -Pressing RETURN in insert mode enters an ESC into the dot buffer 890 instead of a ^M so that the dot command only repeats the last 891 change, without automatically ending the input. 892 -Removed a sync_refs() from the frame-handling section of insertrow() 893 in cmds.c so that deleting and then pulling a row in a framed range 894 doesn't mess up expressions that referred to cells in that row. 895 -When not editing a line, ^A goes to A0 like the HOME key. 896 -Navigating with the HOME key, ^A, 0, ^, $, or # now saves the 897 current position for returning with `` or ''. 898 899CHANGES BETWEEN 7.8 and 7.9: 900Chuck Martin 901 -Fixed a bug where cells in the delete buffer were having their row 902 and column numbers changed each time they were pulled to match the 903 last pull address instead of keeping their original values. 904 -Added two more options for the 'p' (pull) command, in addition 905 to 'pr' (pull rows), 'pc' (pull columns), and 'pm' (pull merge). 906 These are 'px' (pull exchange), which works like 'pm', but instead 907 of leaving the contents of the delete buffer unchanged, exchanges 908 the cells in the delete buffer with those being overwritten; and 909 'pt' (pull transpose), which works like 'pm', but transposes the 910 rows and columns while pulling them into the spreadsheet. Also 911 added equivalent commands for use in macros: pull (pm), pullrows 912 (pr), pullcols (pc), pullxchg (px), and pulltp (pt). 913 -Fixed bug when inserting rows at the end of the scrolling portion 914 of a framed range, which caused formulas referencing the last cell 915 in the scrolling portion to reference the new last cell (in the 916 last newly added row) instead of the old one. 917 -Added a 'yankrow' and 'yankcol' command for macros, and 'yr' and 918 'yc' equivalents for the user, which work like /y, but work on 919 whole rows or columns instead of a range. 'yr' is limited to 920 the current framed range, if any, just like the other row commands. 921 -When deleting, yanking, etc., the upper left and lower right cells 922 of the range are allocated if they don't exist, so that pulling 923 them back in will always work correctly, even if all the cells 924 in one or more edges of the range being erased are empty. Pre- 925 viously, they might be offset due to the pullcells() function 926 using the minimum and maximum rows/columns of any cell in the delete 927 buffer to determine the range being pulled. 928 -The closecol() function now only takes one argument, since the 929 first argument was always curcol whenever the function was called. 930 -If the color option is the only one that has been changed, it 931 will still be saved in the file (the test was reversed). 932 -Cells may now be marked while in navigate mode. 933 -Can now 'goto' a cell, range, etc., while in navigate mode, without 934 losing the command line being entered. 935 -Added a |query command that allows a macro to display a question 936 or message and obtain information from the user. 937 -The 'run' command now frees up the space allocated to the command 938 string being run after it's through. 939 -Removed a '+1' from the coltoa() function because it was causing 940 the column returned to be off by one. 941 -Moved the gmyrow and gmycol variable assignments to the beginning 942 of the RealEvalOne() function so that @myrow and @mycol work not 943 only in numeric expressions, but also in string expressions. 944 -Two variables in screen.c seemed to serve the same purpose. These 945 were lastcol and lastcurcol. All occurrences of lastcurcol were 946 changed to lastcol to eliminate the redundancy, and lastcurrow 947 was changed to lastrow for consistency. 948 -Numeric arguments are now accepted in edit mode and navigate mode. 949 For now, the numeric argument must precede the whole command, rather 950 than come in the middle. For example, "3dw" works; "d3w" does not. 951 -The f, F, t, and T commands in edit mode now work properly even 952 if the cursor is currently on a character matching the one being 953 searched for. 954 -More bugs fixed in screen.c dealing with framed ranges, one which 955 was causing the row labels at the left of the screen to disagree 956 with the actual cells being shown under certain circumstances. 957 -Many more minor changes and bug fixes I've forgotten, and don't 958 have the time to figure out from the diffs. 959 960CHANGES BETWEEN 7.7 and 7.8: 961Chuck Martin 962 -Separated most of the code for framed ranges into its own file. 963 -Inserting, deleting, or appending rows while in a framed range 964 now only effects the framed range you're in. The old behavior 965 of inserting, deleting, or appending the row or rows all across 966 the whole spreadsheet is still the default behavior when done 967 outside of all framed ranges. 968 -Inserted columns are never hidden when created. Previously, the 969 hidden flag was copied from elsewhere, resulting in new columns 970 potentially being hidden for no apparent reason. 971 -Columns may now be inserted at the end of the scrolling region of 972 a framed range. Previously, they were added to the bottom of 973 the frame instead. 974 -Changed the behavior of the delete row/column (dr & dc), the 975 delete range (/x), and the delete cell (x) commands so that 976 subsequently pulling the deleted row/column/range into another 977 part of the spreadsheet will cause references to external cells 978 to continue to point to their original locations. References to 979 deleted cells show as "ERROR", but pulling the cells back in 980 restores the references. 981 -Implemented a "move range" (/m) command, which, unlike deleting 982 and pulling, will cause all cell references to move with the 983 range (both internal references to external cells and external 984 references to internal cells; see the man page for more informa- 985 tion). 986 -Implemented a "yank range" (/y) command, which copies a range 987 into the delete buffer without actually deleting it. 988 -The range-copy command (/c) may now be used without arguments, 989 or with only the destination specified. See the man page for 990 details. 991 -Implemented colors and color ranges, with the ability to base 992 foreground and background colors on a calculation or test, and 993 to set colors differently for negative numbers or cells with 994 errors. See man page for more information. 995 -Writing a file now gives a message telling what it's doing, 996 instead of only after it's done (useful for large files, so you 997 know it probably didn't lock up). 998 -The `, ', and * commands now work in navigate mode. 999 -The yn_ask() function in cmds.c now ignores anything except y, Y, 1000 n, N, ESC, and ^G, instead of giving an error message and returning. 1001 -@pi now acts as a function instead of a constant, so it won't be 1002 optimized away unless the optimize option is turned on. 1003 -You can now "define" a cell (give it a name) without pressing 1004 TAB or equivalent to start highlighting a range. 1005 -The redraw command no longer sets FullUpdate (it may not be 1006 necessary). 1007 -Negative numbers are now treated as constants instead of expressions 1008 (required adding unary "-" operator to list of tests in constant() 1009 function in interp.c). 1010 -Changed isfunc from type bool to type int, since this is more in 1011 keeping with the way it's now used. 1012 -Moved test for KEY_END back into nmgetch(), since, not being a 1013 control character, it wasn't working properly in the main loop. 1014 -The |getnum and |fgetnum commands can now return ERROR and INVALID 1015 if the cell has a first or second generation error, respectively. 1016 -Removed "#include <stdio.h>" from range.c, since this is redundant 1017 when curses.h is included. 1018 -Cursor keys now work properly with the END key (or ^E). 1019 -The goto command now works with all labels, including those which 1020 are the same as keywords. 1021 -ESC and ^G can now be used to cancel defining/undefining a framed 1022 range, and an error message is issued for invalid frame commands. 1023 -Strings can now be rejustified by pressing {, }, or | while the 1024 cell cursor is in the appropriate cell. 1025 -Documented the changes made to @index and @stindex in version 7.7 1026 in the man page. 1027 -Fixed numerous bugs in the screen-handling code in update() in 1028 screen.c (mostly in handling frames). Hiding columns no longer 1029 causes sc to lock up, and column headings are centered better. 1030 This is terribly inefficient code, and a nightmare to debug, and 1031 really needs to be rewritten from scratch. 1032 -You can now use ":" in navigate mode as a synonym for "." or TAB. 1033 -Removed redundantant TAB description in list of keybindings for 1034 edit mode in the man page. 1035 -When defining a range with the cursor, "," will now insert the 1036 range into the command line followed by a literal ",", similar to 1037 the way ")" works now. Also, if the range is ended with a TAB, 1038 ".", or ":", a space will be inserted after the range in the 1039 command line. 1040 -In navigate mode, "c" will insert the color range, "f" will insert 1041 the outer frame range, and "r" will insert the inner frame range 1042 which includes the current cell into the command line. 1043 -Going through the command history now positions the cursor at the 1044 end of the line instead of the beginning. 1045 -The command for hiding rows/columns has been changed from "z" to 1046 "Z", so that "z" could be used as in vi to move the current cell 1047 to the top ("z<RETURN>") or middle ("z.") of the screen, and also 1048 to center the current column ("z|") or the current cell, both 1049 vertically and horizontally ("zc"), which aren't in vi, but are 1050 patterned after vi. Other "z" commands may be added later. Also 1051 implemented vi-like "ZZ" shortcut to save and quit in one step. 1052 -Added "tags" to the list of files to be removed during a make clean 1053 or make distclean. 1054 -Removed the "-lfl" from the LIBS line in the Linux section, since 1055 flex isn't being used (Was it ever? Should this also be done 1056 in the system V.3 section?). 1057 -Lots more minor bug fixes and things I've forgotten. 1058 1059CHANGES BETWEEN 7.6 and 7.7: 1060Chuck Martin 1061 -The openrow() function has been eliminated, and insertrow() 1062 has been rewritten to eliminate looping. The closerow() 1063 function has also been rewritten to eliminate looping (it takes 1064 a second argument specifying the number of rows to delete). 1065 Also, the opencol() function has been eliminated, and its 1066 functionality incorporated into insertcol(). 1067 -New commands: insertrow, insertcol, deleterow, and deletecol for 1068 use in advanced macros. 1069 -Added rowsinrange and colsinrange variable assignments in 1070 doformat() function to eliminate potential lock-ups. 1071 -Changed many shorts to ints because they were actually increasing 1072 the code size instead of decreasing it, and slowing things down. 1073 -Added a cbreak() to the closefile() function so you can now 1074 "press any key" instead of "press RETURN" to continue. Also 1075 changed the main loop under "case '!'" in the same way. 1076 -Removed redundant v_name() declaration from write_fd(). 1077 -New command: run, for running arbitrary programs (useful in 1078 function key definitions). 1079 -The getnum, fgetnum, getstring, getexp, and getfmt commands may 1080 now be used with a range argument to get data from more than one 1081 cell at a time. 1082 -The @index and @stindex functions may now take a third argument 1083 to index into a two-dimensional array as well as the old one- 1084 dimensional version. Also, the @lookup, @hlookup, @vlookup, @index, 1085 and @stindex commands will now accept their range argument as the 1086 first argument instead of the second (the old order is still 1087 accepted), which makes more sense with the new two-dimensional 1088 @index and @stindex. 1089 -The goto command no longer duplicates the previous goto command 1090 if there is an error in the command (accepting the WORD token 1091 as an argument to mean "do nothing" fixed this). 1092 -"Showing" (listing) named ranges no longer pipes through sort, 1093 since that also sorted the headings and the following blank line 1094 with the data. Instead, named ranges are inserted into the 1095 list in sorted order as they're created. 1096 -Deleting a named range now updates modflg like it should. 1097 -The F1 key now defaults to running "man sc" if not redefined 1098 with the fkey command, and the default also works in edit mode, 1099 unlike the user-defined function keys. 1100 -When starting a range command with '/', if you change your mind 1101 and press ESC or ^G, the error line is now cleared. 1102 -When using 'ns' to show which cells have attached notes, a message 1103 is now presented informing the user what the highlighted cells 1104 mean (I know it should be obvious, but a message reminds you in 1105 case you get distracted, and forget your current cell isn't 1106 highlighted). 1107 -startshow() and showdr() were moved from sc.c to vi.c, where 1108 they can be used more easily. 1109 -RESCOL has been changed from a macro to an int, and renamed to 1110 rescol (lowercase), so it can be changed when the spreadsheet 1111 has too many rows for the row numbers to fit properly, causing 1112 problems with the first displayed column. 1113 -The default value of mode_ind has been changed from '.' to 'i'. 1114 -Renamed navigate_mode() to toggle_navigate_mode() to better fit 1115 its function. 1116 -Fixed history functions so that some lines aren't skipped when 1117 moving forward. 1118 -Fixed TAB behavior in navigate mode so it doesn't exit navigate 1119 mode, requiring you to press ^V to continue defining the range. 1120 -Implemented vi-like G, P, and p commands in edit mode, moved 1121 ^I (TAB) funcionality from main loop to write_line(), and added 1122 '.' as a synonym for TAB, and changed behavior of RETURN/ENTER 1123 key in navigate mode to end input as it does in insert or edit 1124 mode if a range is highlighted instead of entering the range into 1125 the line like TAB or '.' does. 1126 -The H, J, K, L, HOME, and page up/down keys now work in navigate 1127 mode. 1128 -The savedot() function now checks to see that there are at least 1129 two chars left in the dot buffer before saving if the last key 1130 pressed requires two chars to store (cursor keys, HOME, etc.). 1131 -Pressing ESC or ^G now cancels the r (replace a single character) 1132 command instead of being entered into the command line. 1133 -Implemented vi-like c0, d0, c$, and d$ commands, and fixed the 1134 dw command again (was deleting an extra char). 1135 -Replaced loop in del_chars() with a memmove(). 1136 -Implemented framed ranges, whereby rows or columns at the top, 1137 bottom, left, and/or right of the range will remain onscreen at 1138 all times whenever the cell cursor is in that range. 1139 -The set and goto commands now work properly again (set wasn't 1140 allowing multiple arguments and goto didn't accept error or 1141 invalid as an argument). 1142 -Defined ranges with names equivalent to function names (without 1143 the "@") or other keywords no longer cause errors when subsequently 1144 used. 1145 1146CHANGES BETWEEN 7.5 and 7.6: 1147Chuck Martin 1148 -Fixed error() macro so messages are displayed like they should be. 1149 This should probably be rewritten as a regular function. 1150 -Added programmable function keys. 1151 -Added a navigate mode that can be switched to while editing a 1152 line, which allows movement around the spreadsheet using any and 1153 all cursor movement keys. In addition to the control characters 1154 and cursor control keys, this now also including 0, $, ^, #, h, j, 1155 k, l, H, J, K, L, b, and w, which used to be unavailable while 1156 editing. The arg variable was made global so that cursor movement 1157 keys can be given a numeric argument even when in navigate mode. 1158 Since ^V is the command to enter navigate mode, it must be pressed 1159 twice to get its former action: once to enter navigate mode, and 1160 a second time (after moving to the cell you want) to enter the 1161 cell address in the command line (the RETURN/ENTER key may be 1162 substituted for the second ^V). 1163 -The ins_in_line() function is now global, so it can be used 1164 from the main loop in sc.c. 1165 -The /d command (for defining a range) doesn't automatically 1166 start highlighting a range, since that would mean switching to 1167 navigate mode, and a range name needs to be entered first, but 1168 the rest of the range commands enter navigate mode and start a 1169 range immediately. 1170 -Special keys, such as cursor control keys, the END, INSERT, 1171 and DELETE keys, etc., are no longer converted to straight 1172 ASCII equivalents in nmgetch(), but are passed as-is to the 1173 functions where they're used. Also, the conversions made in 1174 nmgetch() for the wyse wy75 have been disabled because they 1175 interfere with the programmable function keys. 1176 -Using the TAB key to highlight a range and enter it into a 1177 command will now insert it at the cursor position instead of 1178 appending it at the end of the line. 1179 -When editing, the current command line is temporarily added to 1180 the end of the history so you won't lose your work if you go 1181 back through the history, although it doesn't become a permanent 1182 part of the history until you press the RETURN/ENTER key. 1183 -The savedot() and dotcmd() functions have been modified to save 1184 and retrieve special keys like the INSERT and DELETE keys as two 1185 consecutive bytes. 1186 -The default prefix in the Makefile has been changed back to /usr. 1187 1188CHANGES BETWEEN 7.4 and 7.5: 1189Chuck Martin 1190 -Rewrote error() macro definition to fix segfaults in version 7.4. 1191 -Fixed division operator to eliminate segfaults in version 7.4. 1192 -Do NOT use version 7.4. The above bugs make it unusable. My 1193 sincere apologies for not testing thoroughly after some last 1194 minute changes. 1195 1196CHANGES BETWEEN 7.3 and 7.4: 1197Chuck Martin 1198 -Added a BUGS file that lists known but not-yet-fixed bugs. 1199 -Lots of changes to allow -Wall to be used with gcc without too 1200 many warnings, including additional #includes in some files, 1201 parentheses around assignments used as booleans, braces in the 1202 sed files, and the removal of many register declarations. -Wall 1203 is not used by default in the Makefile because a few innocuous 1204 warnings remain that may worry some people if they don't under- 1205 stand them. Also changed -O to -O2 in Linux section CFLAGS. 1206 -Added an uninstall target to Makefile. 1207 -Before jumping to a new cell (any movement except simple cursor 1208 movements or half-screen movements), the location is remembered, 1209 and may be returned to by using either `` (to restore the cell 1210 cursor to its original location on the screen) or '' (to do a 1211 simple jump to the cell without regard to where it exists on the 1212 screen). This is similar to the way vi works. 1213 -The Write command now puts date formatted values in the correct 1214 columns instead of at the beginning of the line ("pline" was 1215 changed to "pline+plinelim" in printfile() function). 1216 -Added a check for rfd != NULL in openfile() function so /s 1217 command and writing to a pipe will work again without segfaults. 1218 -Notes can be attached to cells, which amounts to providing a link 1219 to a range that can be jumped to quickly. See man page for details. 1220 -Backslash-escaped double quotes now work properly in strings, 1221 such as filenames. 1222 -If stdin is not a tty, no attempt is made to write the data to the 1223 screen. Also, startdisp() and stopdisp() become no-ops, and the 1224 first startdisp() has been moved to just before the main loop. 1225 This allows sc to work better in a pipeline for non-interactive 1226 use. 1227 -Implemented vi-like F and T commands for moving backward in 1228 a command line in edit mode. 1229 -Deleting to a character in edit mode with dt, df, dT, or dF now 1230 works properly even if the character is not found. 1231 -If a cell changes from ERROR or INVALID to a value of 0, the 1232 cell will now be updated properly on the screen without having 1233 to force an update by moving it offscreen and back on or doing 1234 a ^L. 1235 -If the denominator of a division operation references a cell 1236 with an ERROR, the result will correctly show INVALID instead 1237 of ERROR. 1238 -More "style" changes to code for more consistency, and other 1239 minor changes of little real effect or consequence. 1240 1241CHANGES BETWEEN 7.2 and 7.3: 1242Chuck Martin 1243 -Fixed doend() function to prevent occasional lock-ups when using 1244 ^E or the END key. 1245 -When outputting formatted data with Write or Tbl, dates formatted 1246 with Fmt are now converted and output correctly. 1247 -Makefile has been rewritten, with many unused targets removed, 1248 "clobber" target renamed to "distclean", ${prefix} variable 1249 defined to allow installation directory ${prefix} to be specified 1250 (/usr/local is now the default), among other things. 1251 -Added start-up files $HOME/.scrc and ./.scrc for configuration 1252 commands. New commands added for specifying default filename 1253 extensions are: scext, ascext, tbl0ext, tblext, latexext, 1254 slatexext, and texext. Also added `set scrc' (see man page). 1255 -If the filename ends in either .sc or the user defined extension 1256 for regular sc files (scext - see the man page), this extension 1257 will be stripped first before a new extension is appended by the 1258 Put, Write, or Tbl commands. If scext is defined, it will also 1259 be appended when saving a file with the Put command if it isn't 1260 already present. 1261 -Created temporary string variable for manipulation of filename 1262 when adding/deleting extensions before saving a file, since 1263 there wasn't always room in the existing space. This also 1264 fixed a bug when expanding `~/' or `~user/' into a user's home 1265 directory. 1266 -Expanding `~/' or `~user/' into a user's home directory now also 1267 works with pipes. 1268 -Much longer file names are now allowed when adding extensions 1269 on filesystems that allow them. The actual length allowed is 1270 filesystem dependent. 1271 -A filename of `-' can now be used to tell sc to read spreadsheet 1272 data from the standard input. Also, multiple files can now be 1273 specified on the command line, and they will be merged, with the 1274 default filename being taken from the first one if possible. 1275 -Added an "advanced" macro capability, where commands and data 1276 are passed through pipes. New commands added are: up, down, 1277 left right, endup, enddown, endleft, endright, |whereami, 1278 |getnum, |fgetnum, |getstring, |getexp, |getformat, |getfmt, 1279 recalc, redraw, and quit. Documentation is still sparse. Only 1280 available on systems which support pipes. 1281 -The mdir command no longer automatically appends a `\' to the 1282 path you enter, so that an actual filename can now be used 1283 (this is handy for advanced macros, which might contain more 1284 than one macro in a file, so you can add command line switches 1285 and arguments to the defined string instead of a filename). 1286 -Removed modflag++ from readfile() so sc doesn't assume the file 1287 was changed just because a macro was run. If a macro changes a 1288 file, modflag will be updated when the change occurs. 1289 -Significant digits in the fractional portion of a number were 1290 being lost if preceded by a 0 when the format specification used 1291 #'s. An "else break;" if a nonzero digit was found when looking 1292 for trailing 0's fixed this. 1293 -Decimal points are now suppressed if there are no significant 1294 digits after the decimal point in a formatted number. 1295 -The g (goto) command now has an optional second argument when 1296 used for searching that can be used to specify a range to search 1297 instead of always searching the whole spreadsheet. 1298 -Range names can now be less than three letters without being 1299 mistaken for column names, and may also contain any mix of 1300 letters, numbers, and underscores, as long as it isn't a valid 1301 cell address and the first character isn't numeric. 1302 -Rewrote the evaluation of the `-' and `=' operators and added 1303 an fflush(stdout) to each to force optimizing compilers like 1304 gcc to pop the FPU stack so both sides of the calculation have 1305 the same precision. Otherwise, comparisons would sometimes 1306 fail when they shouldn't, and subtractions that should be zero 1307 sometimes wouldn't be. This (differing precision due to the 1308 FPU) also turns out to be the cause of the spurious "Still 1309 changing after x iterations" message, which was fixed previously. 1310 -Removed toascii() in several places in nmgetch() to make sc 1311 8 bit clean and suitable for international use (international 1312 characters can now be entered as data in cells). Also removed 1313 -DINTERNATIONAL from Makefile and elsewhere, since it should 1314 no longer be necessary. 1315 -Removed unused ClearScreen variable. 1316 -If the -e command line switch is used, rndtoeven is set both 1317 before and after loading the files, so that it will override 1318 the contents of any files loaded. 1319 -When editing a cell's existing format string, the cursor now 1320 starts out at the last character instead of after the last 1321 character. 1322 -No longer tries to center a range that's wider than the screen, 1323 which was causing lock-ups. 1324 -If current cell highlighting is on, turn the cell pointer (<) 1325 off (don't need both) and hide the hardware cursor at the lower 1326 right-hand corner of the screen unless editing a command on the 1327 top line. 1328 -Row indicators are now right- instead of left-justified. 1329 -Turn off highlighting on row and column indicators for the 1330 current cell so they stand out. 1331 -Implemented vi-like e command to go to next end-of-word in edit 1332 mode. Also, cw now works just like ce, as it does in vi and its 1333 variants. 1334 -If deleting the last character in a line, x now backs up as in 1335 vi et al. 1336 -Many more minor changes that will probably not even be noticed. 1337Michael L. Hall 1338 -Don't quote (via a backslash) the "[" and "]" characters in 1339 LaTeX table output. 1340 1341CHANGES BETWEEN 7.1 and 7.2: 1342Chuck Martin 1343 -A dummy fflush(stdout) was added to the RealEvalOne() function 1344 to work around a strange bug which causes spurious "Still 1345 changing after x iterations" errors when automatic optimization 1346 of expressions is off (the default). This still needs a 1347 proper fix. See the BUGS file for more information. 1348 -The goto (g) command now accepts an optional second parameter 1349 which specifies which cell is to be located in the upper lefthand 1350 corner of the screen, if possible. When saving the file, this 1351 parameter is included in the goto command that brings you back 1352 to where you left off. 1353 -The mark (m) command remembers not only which cell the cursor is 1354 in, but also which cell is in the upper lefthand corner of the 1355 screen. The ` command uses this information when returning to 1356 the cell, but the ' command does not, so you can decide whether 1357 to center the marked cell when returning (') (assuming the cell 1358 is not currently visible) or whether to try to restore it to 1359 its original position on the screen (`). 1360 -If the destination of a goto command is a range instead of 1361 a single cell, the whole range is centered on the screen, 1362 if possible, instead of the upper lefthand cell of the range. 1363 Named ranges in the tutorial have been adjusted to use this fact. 1364 -If quick numeric entry mode was enabled and you started to enter 1365 a number, then changed your mind and escaped out of it, any 1366 subsequent cursor movement (except h, j, k, or l; i.e. only 1367 control key combinations and cursor keys) would put you back into 1368 insert mode. Setting numeric_field back to 0 in the stop_edit() 1369 function in vi.c fixed this. 1370 -Cursor control keys now work properly while in quick numeric 1371 entry mode if craction is set to other than no action (it used to 1372 follow both desired cursor movement and craction direction). 1373 -Implemented vi-like C and s commands in edit mode. See the man 1374 page for details. 1375 -All instances of rndinfinity have been changed to rndtoeven and 1376 all tests have been reversed to make the old rndinfinity behavior 1377 the default rounding method and round-to-even (banker's rounding) 1378 an option. A new command line switch, -e, allows you to set 1379 rndtoeven when sc is started. Round-to-even may be superior 1380 for some applications, but it isn't the way most people round 1381 or expect rounding to be done. Spreadsheets which explicitly 1382 set rndinfinity will display an error when loading, but will 1383 behave as intended and will save without it. Those which don't 1384 set rndinfinity but depend on the former default behavior will 1385 have to either be started with the -e option or have rndtoeven 1386 set manually the first time they are loaded. The advantages 1387 of setting rndtoeven for some applications have been added to 1388 the man page. 1389 -The craction toggle has been redone (again) to prompt for the 1390 direction you want to move after entering data in a cell. 1391 See the man page for more details. Also, craction now only 1392 has an effect if data is being assigned to the current cell 1393 (i.e. the command just entered starts with either "let", "label", 1394 "leftstring", or "rightstring"). 1395 -Placed parentheses around all "OP_BASE + ..." macros in sc.h 1396 to stave off potential problems and increase robustness. 1397 -Many more additions, deletions, and changes (too numerous to 1398 mention) to remove unused and unnecessary stuff, fix minor bugs, 1399 and make for more uniformity of style. 1400 1401CHANGES BETWEEN 6.21 and 7.1: 1402Chuck Martin 1403 -Converted function declarations and definitions from K&R style 1404 to ANSI style. 1405 -Removed unnecessary function declarations for standard library 1406 functions. 1407 -Multiple marks (up to 26) may now be set with m and copied with 1408 c. Marked cells may also be jumped to by using either ` or ' as 1409 in vi. For now, ` and ' work exactly alike, but this will change 1410 in a later release. 1411 -Expressions which resolve to a constant are no longer automatically 1412 optimized by default, but optimization may be turned on if desired 1413 with ^To or the -o commandline option. This allows you to edit 1414 expressions instead of having to reenter them from scratch. 1415 -Rewrote the @dts function from scratch. It is now Y2K compliant 1416 and allows parameters to be entered in y,m,d order as well as the 1417 old m,d,y order (the proper format is detected automatically). 1418 -Removed support for the undocumented feature added previously by 1419 David Fox (sorry, David!) which allowed dates to be entered as 1420 dd_mm_yy and replaced it with a similar feature which allows 1421 dates to be entered as y.m.d or m.d.y. This is actually just a 1422 shorthand way of entering the @dts function using only the numeric 1423 keypad, providing the year, month and day are all purely numeric 1424 (no formulas), and the year must include the century. 1425 -Rewrote the date formatting routine to use strftime() and added a 1426 second date format (format 4) identical to the regular one (format 1427 3), but with a four digit year. 1428 -Cells may now contain date formatting strings, entered with F, 1429 which work similar to the standard numeric formatting strings, but 1430 allow all the same conversion specifiers as strftime() to format a 1431 date. A ^D as the first character in the string is used to 1432 distinguish a date format string from a standard numeric format 1433 string. 1434 -^L now redraws the screen as it was instead of attempting to 1435 center the current row. Added a C command for centering the 1436 current row. 1437 -Changed main() in help.c to type int (was void). 1438 -Cells in columns pi, ln, fv, pv, and if may now be referred to 1439 in expressions (they previously conflicted with two letter 1440 function names), but the number pi now requires the @ in front 1441 of it to work (@pi). 1442 -The Insert and End keys now work. Insert works exactly like i 1443 and End works like ^E. 1444 -Moving up and down half a screen at a time now works much better. 1445 -Pressing Escape to exit insert mode now backspaces to be more 1446 consistent with the behavior of vi and its variants. 1447 -Moved switch (craction) from ^M/^J part of main input loop to 1448 if clause in cr_line() so that pressing RETURN to enter input 1449 mode won't move you to another cell if newline action is set to 1450 something other than the default no action. 1451 -Added a test in deleterow() to prevent segfaults when deleting 1452 too many rows. 1453 -^Tr now enters a special toggle mode instead of just toggling the 1454 newline action, since there are three options instead of two. 1455 That way, if you need to toggle twice in a row to get the action 1456 you want you can use ^Trr<RETURN> instead of ^Tr^Tr, which I 1457 think is easier (the second r can be any key except <RETURN>). 1458 -Removed a line from the tutorial because the first page was one 1459 line too long for a 24 line screen. This really needs to be 1460 completely rewritten, IMHO. 1461 -There are probably many more bug fixes and other changes including 1462 style changes to make the code look more consistent that I've 1463 forgotten or that I was just too lazy to figure out or document 1464 properly, but they're mostly minor. 1465 1466CHANGES BETWEEN 6.21 and 6.19 1467Mark R. Rubin 1468 -noted a problem using bison 1.16 (use any version but 1.16) 1469Marco S Hyman/Ian */and others 1470 -Crypt/CRYPT_PATH define problem 1471Paul Eggert 1472 -sc.doc $Revision: 6.21 $ 'buglet' 1473Ulf Noren/Dave Lewis 1474 -AIX3.1/Microport System V/AT don't have notimeout() 1475 changed NONOTIMEOUT to NO_NOTIMEOUT, define if not present 1476Niels Baggesen 1477 -function keys may not return ascii codes that isascii() understands 1478 -added an A command for vi mode (add at end of row). 1479 -Special key support: DC='x' (del char in vi mode), FIND='g' (goto), 1480 HELP='?', SELECT='m' 1481Dave Davey 1482 -noted Ultrix 4.2 curses doesn't have idlok() 1483 [I added NO_IDLOK in Makefile] 1484Kim DeVaughn 1485 -added ${RIGHTBUG} is now passed to sc.o && screen.o 1486 -suggested a better fix on SunOS 4.x dont use the Sys V 1487 package (CC = /usr/5bin/cc, etc), but use the BSD 4.3 defines 1488David Bonnell 1489 -scqref [will produce] TROFF output instead of plain text, 1490 [when] you define QREF_FMT=TROFF in the Makefile. 1491 The resulting quick reference guide uses the MS macro set and you 1492 build with something like: 1493 scqref > quickref 1494 troff -ms quickref > quickref.ps 1495Kurt Cockrum 1496 - sc.h: 1497 If not (defined(BSD42) || defined(BSD43) && !defined(ultrix)), 1498 include <memory.h> for the benefit of some USG systems... 1499 - screen.c: 1500 Repaired cpp logic: 1501 don't mention IDLOKBAD or idlok() unless SYSV3 defined; 1502 idlok() does not exist for USG pre-SYSV systems (may exist for 1503 SYSV{2,3,4}). 1504 - tutorial.sc: 1505 Repaired a number of off-by-1 errors. 1506Mats Wichmann 1507 -cleaned up Robert E. Cousins MIF format support code which is 1508 compatible with FrameMaker. 1509Neil Skilling 1510 -added @numiter which returns the number of iterations performed. 1511 It allows you to solve equations by direct substitution. Taking a 1512 guess from another cell if the first iteration otherwise taking the 1513 last best iterate. Other uses may be found. 1514Martin MacLaren 1515 -MS-DOS cleanup of Makefile 1516Art Mulder 1517 -^T toggle: don't list crypt if not available 1518John Amanatides 1519 -pointed out a possible NULL ref in interp.c 1520Phil Johnson 1521 -sc now appends: "asc", "cln", "tbl", etc. to output files 1522 -made the engineering format match that used by an engineer 1523 -deleted an unused engmult[] reference 1524 -added a fix to struct enode for the HP compiler 1525Kevin Cosgrove 1526 -noted sc should use any predefined PI 1527Jeff Buhrt 1528 -'make clean' now leaves the binaries and man pages [Jean-Pierre Radley] 1529 -'make clobber' cleans all built files (like clean used to) [""] 1530 -'-D' vs '-S' was needed on a XENIX2_3 line [""] 1531 -'quit()' -> 'doquit()', function conflict [""] 1532 -change xmalloc,xrealloc,xfree -> scxmalloc,scxrealloc,scxfree 1533 (xmalloc is a standard malloc) 1534 1535CHANGES BETWEEN 6.19 and 6.18 1536Tom Tkacik 1537 -sc.doc and CHANGES changes 1538Edgard 1539 -moving right off the screen now redraws vs optimize 1540Sisira Jayasinghe 1541 - added build.com (VMS) and VMS fixes 1542Jonathan I. Kamen && Charlie Shub 1543 -noted fmod doesn't exist on BSD4.3 and Mt Xinu 1544Ben Priest 1545 -vi compatability: ' ' moves right as well as 'l' while line editing 1546Jeff Buhrt 1547 -one more possible NULL pointer fixed 1548 -added NONOTIMEOUT for those that don't have notimeout() in curses 1549 -undef CRYPT=-DCRYPT_PATH... if crypt isn't available 1550 -merged simple fmod into interp.c if fmod() is not present 1551 1552CHANGES BETWEEN 6.18 and 6.17 1553James Dugal 1554 - NULL pointer fix for is_locked 1555Kevin Pye 1556 - add a new mode suitable for entry of large amounts of data. 1557 moves to next cell on return, maxrow/col when to start 1558 entering in the next row/col. (see help screens B&C) 1559 COMMANDS ADDED: ^Tz, ^Tr, Srowlimit=?, Scollimit=? 1560David Fox - added a date format so that columns whose values are the number 1561 of seconds since 1/1/70 will be displayed as dates in the format 1562 dd-mmm-yy, and a modification to the grammar so data entered in the 1563 format dd_mm_yy will be converted into the number of seconds since 1564 1/1/70. 1565 COMMANDS ADDED: f # # 3 1566Teus Hagen 1567 - labels are centered strings 1568 - constant strings with '\' preceeding character will 1569 be wheeled over the column width 1570 - a restart of sc on an sc file will go to last used cel 1571 - added toupper, tolower and do proper word capitalization 1572 COMMANDS ADDED: @toupper(), @tolower(), @capital(), @pi, "\[String] 1573Jeff Buhrt 1574 - external functions null/previous message was backwards 1575 - cleaned up help.c by inserting a new screen 1576 - found a possible NULL pointer in screen.c 1577 1578CHANGES BETWEEN 6.17 and 6.16 1579Ulf Noren 1580 - added cell locking, disallowing input, to ranges of cells 1581Herr Soeryantono 1582 - I added ifdef's around curses KEY_* functions his curses didn't have 1583 (Sun/OS 4 on a SPARC) 1584Jay Lepreau 1585 - changes to tutorial.sc: how to get out, should be used w/ 24 lines 1586 - IDLOKBAD was not passed to screen.c 1587 - suggested error messages if the execl of crypt fails 1588 - pointed out BSD's crypt is in /usr/bin/crypt 1589Henk P. Penning 1590 - suggested Makefile list the mode of the man page & tutorial.sc 1591 - make install will now install the psc man 1592 - yylval was not known in lex.c for HP-UX 7.05 1593Edgard 1594 - hitwinch fixes 1595 - KEY_HOME now takes you to 0,0 1596CHECK KEY_NPAGE/PPAGE 1597Stephen (Steve) M. Brooks 1598 - suggested the man pages should include Sc's revision 1599Dan Banay 1600 - code to set LINES and COLS after a window size change 1601Bart Schaefer 1602 - @myrow/@mycol fix 1603Bruce Jerrick 1604 - noted ln may not always work for the temporary source files 1605Gene H. Olson 1606 - fixes for SIGWINCH for Sun OS 4.1.1 1607Teus Hagen 1608 - added three functions: 1609 1) allow @PI as well 1610 2) @upper/@lower for casing characters in a string 1611 3) @capital for upper case first char of words in a string. 1612Martin Maclaren 1613 - added MS-DOS support 1614 COMPILER USED: Microsoft C, 5.1 1615 TOOLS USED : NDMAKE GNUBISON GNUSED PCCURSES 1616Cuong Bui 1617 - has a working Vietnamese version of sc, noted a A_CHARTEXT 1618 mask problem 1619Jeff Buhrt 1620 - when numeric prescale is on: 300 -> 3.0, now 300. -> 300. not 3.0 1621 (numbers with a decimal aren't scaled) 1622 1623CHANGES BETWEEN 6.16 and 6.15 1624Tom Tkacik 1625 -fixed a bug in ^W 1626Jonathan I. Kamens 1627 - added Makefile rules so scqref and psc don't clobber .o's 1628Larry Philps 1629 - fixed a SCO XENIX vs M_XENIX problem 1630 - fixed a problem where dosval() might not xmalloc enough memory 1631Dave Close 1632 - fix for Xenix 2.3 to reset terminal modes 1633 1634CHANGES BETWEEN 6.15 and 6.14 1635Lowell Skoog 1636 - fixed a bug in 'F'ormat 1637Henk Hesselink 1638 - format.c double neg. sign 1639 - interp.c minr/minc bug, plus modflg wasn't set 1640 - fixed a hardcoded path in sc.doc 1641 - improvement: 1642 -show current cell format in top line 1643 -[buhrt: go into edit mode on the old format if it existed 1644 otherwise insert mode] 1645Jonathan Crompron 1646 - made sure doformat() does a checkbounds() 1647Stephen (Steve) M. Brooks 1648 - pointed out -s in psc was broke 1649Michael Richardson 1650 - fixed negative numbers in exponential format 1651 1652CHANGES BETWEEN 6.14 and 6.13 1653Mats Wichmann 1654 - Sys V R4 patches, fixed 'Press RETURN ...' on a shell command 1655Tim Theisen 1656 - changed #define for memcpy/memset under ultrix 1657Rick Walker 1658 - Added @myrow and @mycol to give the row/col of the current cell 1659 'The two functions are @myrow and @mycol, which return the numerical 1660 row and column of the calling cell. The cell directly above a cell 1661 in the D column could then be accessed by @nval("d",@myrow-1).' 1662 NOTE: @myrow and @mycol can't be used in specifying ranges. 1663 1664CHANGES BETWEEN 6.13 and 6.12 1665Rick Walker 1666 - pointed out a move(x,y)-> (y,x) in sc.c 1667Glenn Barry 1668 - Further SunOS 4.X cleanups 1669Tom Tkacik 1670 - made sure 'J' moves downward 1/2 a screen even at the bottom 1671David I. Dalva 1672 - pointed out crypt may not be in /bin/crypt 1673Gregory Bond 1674 - allows the vi-mode editing of very long expressions 1675 (> 1 screen width) to work on 2nd + subsequent lines 1676Tom Anderson 1677 - "let A1 = aaa" (where aaa is defined as A0:A0) is now valid 1678 - added autolabeling 1679 'When there is an empty cell to the left of a cell that has 1680 just been defined (with /d), a label is created in the blank 1681 cell. The label holds the definition that has just been 1682 created. This labeling is only done for definitions of single 1683 cells (and not for ranges).' 1684 'The feature can be turned on and off with a toggle (^T) 1685 command' 1686Petri Wessman 1687 - Added support for SLaTeX, 'a Scandinavian version of LaTeX, in 1688 intensive use ... in Finland and in Sweden' 1689Jeff Buhrt 1690 - vmtbl.c explictly set arrays of pointers to NULL, vs memset() 1691 - psc [-P] plain numbers only:a number only when there is no [-+eE] 1692 [-S] all numbers are strings 1693 - psc: a number must end in [0-9.eE] anything else makes it a string 1694 (4, 4., 4.5, and 4e are numbers; 4-, 4+, etc are not). 1695 - psc: made sure we grow enough when we call growtbl() 1696 - cleaned up the Makefile w/ a few suggestions 1697 - SIGWINCH is delt with next time the screen would update (testing) 1698 - added IDLOKBAD to get around a SysV curses bug (see Makefile) 1699 - moved screen functions into screen.c (except for one indirect 1700 'repaint()' call in sc.c, and help.c) 1701 1702CHANGES BETWEEN 6.12 and 6.11 1703James Dugal 1704 - added format.c to SRCS in Makefile 1705 - noted RETURN didn't enter insert mode 1706Peter King 1707 - pointed out iscntrl is broken on some other systems as well 1708 - sent some lint cleanups 1709Michael Richardson 1710 - patch to stop format looping when scientific notation was selected 1711Glenn T. Barry 1712 - code to turn on hardware scrolling and added 'slow speed display' 1713 speedups, default for SYSV3 or see -DSUNOS41SYSV in Makefile. 1714Tom Tkacik 1715 - fixes to make sure J and K move same amount, and re-added H code 1716Jeff Buhrt 1717 - fixed a possible xfree(NULL) in getent() (found when adding K_VAL) 1718 - merged compiler cleanups 1719* - added $(name)qref to print a Quick Reference card 1720 - got rid of INVALIDS that may have been left around 1721* - pressing return on a empty line puts you into insert mode 1722 (like in <=Sc6.1). When entering you can also press ESC 1723 to go into the editor (no change); this is also documented 1724 now so it might stay around this time. 1725 1726CHANGES BETWEEN 6.11 and 6.10 1727 1728Jonathan I. Kamens 1729 - sc.doc now mentions the tutorial file in the FILES section 1730Andy Fyfe 1731 - pointed out 3 locations where a NULL should have been '\0' 1732Robert Bond 1733 - pointed out the ERROR could hide a cellerror 1734Piercarlo Grandi 1735 - H,J,I,K now move 1/2 screen 1736Ulf Noren 1737 - changes for AIX V3.1 1738 - defined CHTYPE and NLS for the preprocessor. CHTYPE is 1739 the type of every character in a curses window. 1740 - Added KEY_BACKSPACE to nmgetch 1741 - strtof ifdef 1742 - Iteration change: when Sc says: "Still changing after 9 iterations" 1743 Sc at that point will have eval'd 9 times 1744Chris Metcalf 1745 - pointed out I broke setlist when adding 'goto {error,invalid}' 1746James P. Dugal 1747 - iscntrl() wasn't handling TABS though CRs under Pyramid OSx4.1 1748Peter King 1749 - BROKENCURSES patch for nl()/nonl() bug on some BSD systems 1750 - backups, tutorial file, and man references now depend on $name 1751 - DFLTPAGER to DFLT_PAGER fix 1752 1753CHANGES BETWEEN 6.10 and 6.9 1754 1755Tom Tkacik 1756 - when moving off the current table (resizing) now move the cursor 1757 on 'l' or 'k'. 1758 - patches to sc.doc to correctly format the vi-mode notes 1759Jim Clausing 1760 - made sure / doesn't try to divide by zero. 1761Tom Kloos 1762 - correction to substr() example in help.c 1763Piercarlo "Peter" Grandi 1764 - Disable non-constant expressions while loading 1765 - Added extra code in dealing w/ floating point exceptions 1766 - #ifdef'd SAVENAME (vs hardcoded SC.SAVE) to allowing changing the 1767 emergency save name. 1768Casey Leedom 1769 - Makefile changes: man extension, RINT note, make values should 1770 never be left undefined and then referenced, don't leave 1771 around *.old's 1772Tom Anderson 1773 - patches to add type of column format (note format now has 3 args) 1774Jeff Buhrt 1775 - xmalloc/xfree fatal() will now call diesave() 1776 (MAKE SURE the saved file is ok if this were to happen) 1777 - history[] is now a circular queue, this will cut down on the 1778 number of data moves and also xmalloc/xfree calls 1779 (idea from Keith Bostic) 1780 - cells with an error (ex: divide by 0) will show 'ERROR' 1781 - you can 'goto error' (or 'goto') to find an ERROR (for next ERROR) 1782Robert Bond 1783 - When in numeric mode the ^B, ^F, ^N, ^P key will end a numeric entry. 1784 1785CHANGES BETWEEN 6.9 and 6.8 1786 1787Jim Richardson 1788 - pointed out vi mode was not documented in sc.doc 1789 - found a nasty buffer limit bug in savedot() 1790 - a side effect was ^D could cause a core dump (-Jeff) 1791Tim Wilson 1792 - Hints on compiling on Ultrix 1793Eric Putz 1794 -patch for printfile() (sc died on huge # of columns in a W) 1795Jeffrey C Honig 1796 -patch for lex.c which bombed on SunOS 4.1 if $TERM was not set 1797Tom Kloos 1798 -psc now calls [+-.] strings vs numbers. 1799 -also pointed out a format reversal problem 1800Jack Goral 1801 -changes to Makefile to compile under SCO Unix V rel 3.2.0 1802Mark Nagel 1803 -changes to allow arbitrarily complex formatting of cells 1804Kim Sanders 1805 -^W generated an incorrect equation (line was not started at beginning) 1806Mike Schwartz 1807 -a put command will use the same encryption key as when the 1808 file was read. 1809 >I have a suggestion for making the encyrption option of "sc" more 1810 >usable: Right now, if you use the -x option when you start up sc, it 1811 >prompts you for the key (just like "vi -x" does). But when you try to 1812 >write the file out using the Put command, it asks for the key again 1813 >each time. Why not make it use the same key you used before (as "vi 1814 >-x" does)? That would really help, because as it is, each time you try 1815 >to save the file you run the risk of mistyping the key. 1816 > 1817 >You might think this causes a security problem, since the key is then 1818 >an argument to crypt, and hence is visible from ps. But when crypt 1819 >runs, the first thing it does is to copy the key to an internal buffer 1820 >and then zero out the argv copy, so the window of vulnerability is 1821 >vanishingly small. 1822Adri Verhoef 1823 - pointed out a ^D caused a core dump (fixed) 1824Gene H. Olson 1825 - format now grows the spreadsheet before setting the column format. 1826 - removed an extra ';' that caused a possible column number trashing 1827Paul Eggert 1828 -sc now also has round-to-even, also known as ``banker's rounding''. 1829 >With round-to-even, a number exactly halfway between two values is 1830 >rounded to whichever is even; e.g. rnd(0.5)=0, rnd(1.5)=2, 1831 >rnd(2.5)=2, rnd(3.5)=4. This is the default rounding mode for 1832 >IEEE floating point, for good reason: it has better numeric 1833 >properties. For example, if X+Y is an integer, 1834 >then X+Y = rnd(X)+rnd(Y) with round-to-even, 1835 >but not always with sc's rounding (which is 1836 >round-to-positive-infinity). I ran into this problem when trying to 1837 >split interest in an account to two people fairly. 1838 -While we're on the subject, @round(X,Y) should also work when Y 1839 >is negative. For example, @round(123,-2) should yield 100. 1840 1841 1842CHANGES BETWEEN 6.8 and 6.7 1843 1844Jeff Buhrt (with help from some beta testers-Thank you) 1845 1) added a per row memory allocation 1846 -runs in about 1/2 run time and 1/3 the space of 6.6vm.1 1847 -insert/delete row now just moves pointers (# == maxrow+1-currow) 1848 and blanks one row (of columns (maxcol)) 1849 -as the number of cells grows the size is more linear 1850 (no more ##Meg images except for 100,000's of rows....) 1851 -row to column pointer translation is done by a macro (ATBL) 1852 that returns a pointer to the cell pointer. 1853 *ATBL would be a pointer to a *ent (cell). 1854 -the maximum # of columns is limited by ABSMAXCOLS or 1855 sizeof(struct ent *)*maxcols (whichever is smaller) 1856 (702 * 4 = 2808 is no real limit even for 286 large model) 1857 -the maximum # of rows is limited by the virtual memory limit or 1858 sizeof(struct ent **)*maxrows (whichever is smaller) 1859 (4*X=64k, X=16384 rows (excluding malloc overhead) on 1860 a '286 large model. Even w/ 3.25Meg and 10Mhz) 1861 (plus of course any memory used for cells) 1862 2) dolookup (int vs double) 1863 3) dolookup calling eval w/ ent * not enode * 1864 (dolookup called w/ ent * not enode *) 1865 4) cleaned up a lot of .... *x = 0 to (.... *)0 (cmds, interp) 1866 5) psc: fwidth/precision were reversed on the output 1867 6) Backup copy (on save) using same mode to [path/]#file~ 1868 (will prompt if a backup fails) 1869 7) put y/n prompt function into yn_ask(mesg) 1870 8) found a move(x,y) in sc -> move(y,x) and only move when needed 1871 9) we use FullUpdate || changed (to see if ANY cells changed) 1872 before trying to redraw the screen in update 1873 (now we don't try to redraw every time a key is hit) 1874 -if we are stand[ing]out we do not create a cell just to force a 1875 standout inside the repaint section of update() 1876 -only draw blank cells if we cleared it or it is standing out 1877 reason: the less work (what to update) curses has to do, the faster 1878 a screen update will be (less cpu required) 1879 14) {insert, delete}col replaced w/ {open,close}col(currow, numcol_to_insert) 1880 (limits looping) 1881 6.7.1.1 1882 15) goto nonexistant cell may loop 1883 16) make sure that startup size will at least fill the screen w/ cells. 1884 17) added version.c 1885 6.7.1.2 1886 18) When we would normally die w/o saving (SIGQUIT, etc), we now ask 1887 if people would like to save the current spreadsheet. 1888 If 'y', saves to the current file name, otherwise ~/SC.SAVE, 1889 then /tmp/SC.SAVE if all else fails. 1890 6.7.1.3 1891 19) don't use malloc.c for production code 1892 20) progname is now truncated to just the basename (systems w/ long paths 1893 caused problems) 1894 1895CHANGES BETWEEN 6.1 and 6.7 1896 1897Dave Lewis - 1898 Found and fixed a null pointer derefrece in the 'R' command. 1899 1900Rob McMahon - 1901 Changed the ctl() macro to work with ANSI style compilers. 1902 Cleaned up some non-readonly text problems. 1903 1904Rick Linck - 1905 Fixed a bug in lex.c - Ann Arbor Ambassadors have long ks and ke 1906 termcap entries. 1907 1908Sam Drake - 1909 A fix for undefined C_* symbols in AIX. 1910 1911Peter Brower - 1912 Cleaned up the INTERNATIONAL ifdefs with more portable code. 1913 1914Glen Ditchfield 1915 Cleaned up a problem in crypt.c when the encrypted file shrank. 1916 1917Bob Bond - 1918 Vi style editing for the command line. 1919 A bug in range name aliases. 1920 1921Jeff Buhrt - 1922 -Added "~" filename expansion. 1923 -702 columns (A-ZZ) and unlimited rows/cells based on max. memory 1924 -fixed a few bugs 1925 -slightly decreased CPU usage 1926 -MAKES backup copies of files 1927 -understands ~$HOME stuff 1928 1929CHANGES BETWEEN 5.1 and 6.1: 1930 1931Andy Valencia - 1932 xmalloc aligns data to a double boundary. 1933 1934Lawrence Cipriani - 1935 Fixed a bug in the "do you want to save this" sequence. 1936 1937Soren Lundsgaard - 1938 A null pointer derefrence. 1939 1940Rick Perry - 1941 Cleaned up a problem with modchk() in sc.c. 1942 1943Gregory Bond - 1944 Added code for multi argument versions of @min and @max. 1945 1946Tad Mannes - 1947 Added code to save/restore hidden rows and columns when the 1948 data base is saved or restored. 1949 1950Marius Olafsson - 1951 INTERNATIONAL changes. Allows full 8 bit characters (if 1952 curses supports them.) 1953 1954Kurt Horton - 1955 Added support for @pv, @fv and @pmt financial functins. 1956 Tested lots of different systems, linting. 1957 1958John Campbell - 1959 Support for VMS. See VMS_NOTES. 1960 1961Peter King - 1962 User selection of row or column order for recalculation. 1963 Also affects order of traversing regions in /f and /r 1964 User setting of automatic or manual recalculation. 1965 User setting of number of times to try recalculation. 1966 + and - commands when in non-numeric mode to do 1967 increment and decrement operations. 1968 @index, @stindex, @atan2, @lookup functions. 1969 Save/restore options. 1970 Support for TeX, LaTeX, and better support for tbl in "T" cmd. 1971 Provision of a copyent function to copy entries (same code repeated 1972 in several locations) 1973 Forwrow, backrow, forwcol, backcol functions to replace 1974 repeated code 1975 Correct interpretation of ESCAPE or ^G as an abort when in a 1976 two character command such as 'ar' or 'ac' 1977 Cleanup in eval() - catches non-trap function errors. 1978 1979Bob Bond - 1980 Added search options to "g". 1981 Added supression of hidden columns to "W" 1982 Added the mod operator "%" 1983 New help functions. 1984 Constant prescale "$" 1985 Added string matching to @lookup. 1986 Some more bug fixes. 1987 Testing, integration, documentation. 1988 1989Alan Silverstein- 1990 Greatly revised the manual entry. 1991 Added menus for ^E command and row/column commands, which 1992 involved a bunch of code cleanup. 1993 1994 Changed top row display to clearly indicate string labels 1995 versus number parts, and to distinguish string functions from 1996 constant labels. 1997 1998 When the character cursor is on a cell (not topline), ^H 1999 (backspace) is like ^B (move back one cell), rather than being 2000 ignored. 2001 2002 When the character cursor is on a cell (not topline), ^I (tab) 2003 is like ^F (move forward one cell), rather than being ignored. 2004 ^R is no longer identical with ^L. Now ^R highlights all cells 2005 which should be entered by a user because they contain constant 2006 numeric values (not the result of a numeric expression). 2007 2008 Added a ^X command, similar to ^R, which highlights cells which 2009 have expressions. It also displays the expressions in the 2010 highlighted cells as left-justified strings, instead of the 2011 label and/or value of the cell. 2012 2013 Added indirection functions (@nval() and @sval()) for simple 2014 table lookups. Given a column name and row number, they return 2015 the numeric or string value of the selected cell. 2016 2017 Added external functions (@ext()) for non-trivial 2018 computations. Given a command name and argument, it calls the 2019 command and reads back one output line. 2020 2021 Added a ^T,e command to toggle enabling of external functions. 2022 2023 Changed ^T,t to only control the top line display, and added 2024 ^T,c to control current cell highlighting. (Separated the 2025 functions.) 2026 2027 "!" (shell escape) gives a vi-style warning if there were any 2028 changes since the last write. (No change to manual entry.) 2029 2030 Fixed some startup, error, and prompt messages to be cleaner 2031 and/or more consistent. (No changes to manual entry.) 2032 2033 Fixed a bug: If @substr() upper bound (third parameter) is 2034 past the end of the string operand, return the substring 2035 through the end of the string, rather than returning a null 2036 string. 2037 2038 Fixed a bug: Reset SIGINT to default after forking before 2039 calling shell escape program and before starting pipeline (for 2040 commands which support this). Didn't reset SIGINT before 2041 calling crypt and external functions because in both cases it 2042 should be irrelevant. (No change to manual entry.) 2043 2044CHANGES BETWEEN 6.1 and 6.2: 2045 2046 2047Chris Cole- 2048 Compatibility with Lotus 1-2-3 2049 a) @hlookup(expr,range,expr) 2050 b) @vlookup(expr,range,expr) 2051 c) @round(expr,expr) 2052 d) @if(expr,expr,expr) 2053 e) @abs(expr) 2054