Released version :
------------------
23.01.01
New features.
-------------
Additional functions and bug fixes.
Discussion
----------
This release is mainly some additional functions and bug fixes.
There are a few open bugs that we list here.
Program options
---------------
None.
Commands
--------
New
---
No new commands.
Changes
-------
STRING name = "abc"+"def+"ghij"
The string command can now have an initial value of concatenated strings.
FIND<NUL> or FIND; or FIND<return> will now find empty text lines.
This applieas to all 4 FIND commands.
LOCATE<NUL> will stop at every line.
Abbreviations
-------------
No change.
Modes
-----
No change.
Functions
---------
New
---
let int# = ADDITEM ( list , "item", int_separator )
let int# = ADDUNIQ ( list , "item", int_separator )
let str# = ADDITEM ( "list", "item", int_separator )
let str# = ADDUNIQ ( "list", "item", int_separator )
ADDITEM () add an item to a list.
ADDUNIQUE () add an item to a list only if it is not already in the list.
let str# = SORT ( "list" , "key" , int_separator )
let int# = SORT ( io_strvar , "key" , int_separator )
SORT() sorts a list alphabetically or numerically.
let str# = DIRLIST ( "directory" , "pattern" , "mask", separator, ecode )
DIRLIST() generates a list from a directories entries.
let str# = NEXTITEM ( index_column , "source", 'seper_char' ) def ','.
let str# = NEXTFIELD ( field_column , "source", 'seper_char' ) def ':'.
let str# = NEXTLINE ( line_column , "source", 'seper_char' ) def '\n'.
NEXITEM() and friends sequentially read a list one item at a time.
let str# = UNIQUE ( "list" , [ int_separator ] )
UNIQUE() ensure there are no duplicate items in a list.
let str# = STRCAT ( "stra", %strb% , 'strc' , ... )
STRCAT() concatenates several strings.
let str# = GETCWD ( )
GETCWD() returns the current working directory.
Changes
-------
Warning : these may effect existing macros.
STRTIME(),NOW() now returns 1970.01.01 when time is un-available.
FCOPY(),FSIZE() return -3 for size too big for integer.
REWIND(),FSEEK(),FLOCK() now use 0 and -1 as return values.
The OPENDIR() function now defaults to a mask of "All".
The MENU() function has an optional separator.
Variables
---------
New :
None.
Removed variables :
None.
Changed variables :
None.
Constants
---------
New constants :
%OK% A return value for functions such as :
REWIND(),FSEEK(),FLOCK() now use 0 and -1 as return values.
%ERR% already exists.
These allow functions to be checked for 0 or -1.
Changes :
None.
Maths operators
---------------
No change.
Symbols
-------
No change.
Macros
------
No new macros.
'cat' and 'dir' have been updated for Rev. 23.
Screen mode window.
-------------------
No change.
WHEN conditions
---------------
No change.
Menus
-----
The screen "Modes" menu has been widened for 22-026.
Keyboard
--------
No change.
Help.
-----
New entries for new functions.
Scripts
-------
No change.
Error codes
-----------
No change.
Bug fixes
---------
22-012 : alarm .flags being set to cached when not shared.
22-013 : stringexpr() LOGGER call was not using -> s.
22-014 : Default open dir mask changed to "All".
22-015 : Invalid or unavalable time is 0, rather than -1.
22-016 : Shared mem still deadlocks after crash.
22-017 : %alarms.shared% was incorrect. So was %alarms.cached%.
22-018 : FIND/LOC <NUL> inconsistent. F<NUL> now stops on empty line.
22-019 FCOPY () should use OPENED_FMODE for new files mode.
22-020 FCOPY () should return -3 for file size too big for return value.
22-021 FSIZE () should return -3 for file size too big for return value.
22-022 REWIND () should use -1/0 return value. Documentation wrong.
22-023 FSEEK () should use -1/0 return value.
22-024 FLOCK () should use -1/0 return value. flocknedfile () issue.
22-025 H Xn shrinks the history list.
22-026 menu Modes/Screen_return exits session.
22-027 STRCAT() clears target string.
22-029 Need an optional separator for MENU().
Open bugs
---------
22-018 WHICH double reports on "*" and same directory in PATH.
22-015 Shared mem still splits to different segments after crash.
22-028 errpro () Help file from syntax error not showing. Timer is huge.
When mode SHORTER with other combination.
22-030 let int# = "^J" is accepted as decimal 30.
22-031 winpick() needs an optional "title" for MENU().
Discussion :
If Open/ed crashes and is restarted, it may start a new shared memory segment for alarms.
The only way around this is to exit all of your Open/ed sessions and
remove the control file : %alarms.control.file%.
The WHICH command examines each directory in PATH.
If '*' is specified and the same directory is also specified, then the
WHICH command will double report if the command is found.
The integer value of a control character is ^X.
Quoted control codes needs a review.
Source code Stats
-----------------
Version : 23.01.01 Sun 01 Jan 2023 16:50:43
ned is 95096 lines, 3M bytes, averaging 41 bytes per line.
gstlib is 12742 lines, 445K bytes, averaging 34 bytes per line.
shmlib is 1160 lines, 37K bytes, averaging 32 bytes per line.
sortlist is 316 lines, 12K bytes, averaging 40 bytes per line.
curwin is 5840 lines, 220K bytes, averaging 37 bytes per line.
gpl is 11859 lines, 371K bytes, averaging 31 bytes per line.
include is 4664 lines, 211K bytes, averaging 45 bytes per line.
Open/ed is 131677 lines, 5M bytes, averaging 39 bytes per line.
3381 additional lines.
Other
-----
--------------------------------------------------------------------------------