'Changes Made' Log File ----------------------- v1.5.33 9 January 1999 - No longer abort if the clock offset is greater than 100 seconds - Convert to use the modified UCL tcl/tk libraries v1.5.32 22 September 1998 - Fix Irix compilation problems v1.5.31 21 September 1998 - Fix encryption on Linux - Fix use of the debug() function - Run all the C files through indent - Move to static Tcl/Tk (from our cvs tree) for unix versions - Fix prototypes v1.5.30 27th August 1998 j.knowler@cs.ucl.ac.uk Encryption - is now working on all versions of NTE. This was fixed by using the _intel_ symbol in the qfDES project makefile. Modifier field - is now working in the user interface. This had been incorrectly set up to use the originator's name instead. Participant's list name doubling - this problem is now gone. It did not cause any problems but looked stupid. k.hasler@cs.ucl.ac.uk - - changes to let win32 version get user name from registry. - Changed 'diff' back to unsigned long in 'queue_packet_for_sending'. - '-s' flag to make NTE sleep for 9 seconds before creating it's window - this is a hack for relate - Made the canvas size smaller on windows (32 lines instead of 40) - this is another hack for the relate interface because "-goemetry" doesn't work with application embedding on windows. - Loopback fix, so that it checks against local port as well as address. v1.5.30 26th August 1998 j.knowler@cs.ucl.ac.uk CURRENT STATUS OF nte with new win makefile changes Current Bugs 1. paranoia check - probably a field overrun somewhere - PC/UNIX 2. Encryption - doesn't work on pc 1.5.30 at all, works on unix with other hosts running current version of unix or previous version of pc. Could be to do with new win makefile.. I'll leave this one for someone else - PC * NOTE - have tested two PC's running new 1.5.30 with encryption and they are ok talking to each other. 3. Current Site - Sliding Key System - I have found that one or more sites will try to take the key if they have the same 'time'. They will all try to send their keys while still using the others PC/UNIX 4. Participant's list - our own name is doubled in the list occasionally - PC. ** NEW STUFF ** Checksum on/off - The checksum algorithm is taking up a lot of processor time and could cause some machines to crash. I think that it is sensible to include an on/off switch (under the file menu in the user interface) so that individual users can make their own choice. OTHER EVENTS THAT TAKE UP LOADS OF PROCESSOR TIME - Turning on NTE when there is an existing session - NTE tries to load everything straight away. - Pasting large blocks repeatedly - lots of changes in a short time demand a lot of data transfer. - Undeleting large blocks - undeleting a block involves copying every line in the block( necessary for multicasting deletion changes )which takes considerable time. - WIN Makefile - Win makefile was using the dynamic link libraries 'tcl80vc.lib' and 'tk80vc.lib' which were preventing important string indexing commands defined in canvas_ext.c from working (due to a clash with the TextItem struct I think). This has been replaced with the static link library tclg.lib (for release, debug.lib for debugging). Win Makefile didn't include tk.res, this file is needed for the windows version to include the correct checkboxes on the user interface. A lot of the changes made to fix the signed/unsigned warnings that plagued the windows compiler output were causing more trouble than they were worth, such as preventing transmission of any line or block data. I have had to remove the type casts that I could find, although I suspect that another change is responsible for the paranoia check errors (perhaps a signed variable that takes up more space than an unsigned variable is overrunning the space of a field in the block struct somewhere..) v1.5.30 19th August 1998 j.knowler@cs.ucl.ac.uk Updates to delete/undelete block history. Now supports up to 40 blocks. The maximum history length has now been localised to a single constant variable 'MAX_DELETED_BLOCKS' in ui_fns.c . Increase/decrease this variable to change history length. Ideally the array currently being used could be replaced by a vector storage unit (as in c++ STL) . Block lengths - the -bl tag in the command line is now used by tcl. I have found that the maximum value should be around 200. Anything bigger than that can cause nte to crash quite consistently. Therefore the default is 200 and users can specify any value. I have added code to the insert_cr function so that it can only insert a new line if the current number of lines is smaller than the maximum specified by the user. Although users can specify values bigger than 200, NTE will crash consistently once you start using values of 300+ (You can use slightly larger values on unix machines up to about 500). v1.5.30 18th August 1998 j.knowler@cs.ucl.ac.uk Updates to Undelete and copy block functions so that when they copy the original block they ignore deleted lines, which are not needed. This should help to save time and memory space. Addition of Cut,Copy and Paste commands - need to add them to the help files at some point. Copy and paste work as you would assume. Cut will copy a block to the clipboard so that you can paste multiple copies of it and delete it as well. You can undelete a 'cut' block using the undelete function as normal. Cleaned up a lot of code, getting rid of some of the commented code that exists from previous versions, that is completely irrelevant to the current version. I have left in some commented code from previous versions, but only if it would be needed when debugging the new code. v1.5.30 17th Auguat 1998 c.perkins@cs.ucl.ac.uk Fixes to tcl/tk initialisation v1.5a29 14th August 1998 J.Knowler@cs.ucl.ac.uk Command Line - Fixes to command line so that multicast addresses of more than 15 characters can be used. Limits for all of the string command line things are now at 254 characters (max str length). I have also added code to prevent it from bombing if you exceed the character limit. Block->no_of_lines - this field in the 'block' data struct is being updated incorrectly. I have checked all references to the field and have found that it is not used for any real purpose, other than for debug messages telling us how many lines we have. I have therefore stopped the function parse_block from using the received block's no_of_lines field when receiving a modified block. We are instead going to keep our own version of the field, updated by using the 'count_lines(block b)' function. This should remove some problems and some worrying debug messages. Checksum Algorithm - Mods. I have further reduced the number of packets needed (possibly as much as by half) by replacing all of the "request_block_info" packets, where one is sent for each line, by a single packet requesting the sending of block_info packets for all of the blocks that the current site has. This assumes that the current site has all of the blocks in the current page and that the other site does not have any extra blocks. This should help to force retransmission of blocks that are missing from other sites. Block checksums now ignore deleted lines when they calculate their values because I have no control over deleted line orders - it only depends on the order in which they are deleted. ******* NOT COMPLETE YET: Page Checksum - order blocks uniformly from site to site so that page checksums can be the same at sites where blocks are received and stored in different orders.Don't actually change the order in which blocks are stored (that would upset the hashing algorithm) but change the order in which they are added by the checksum algorithm. Checksum Algorithm - MODIFICATIONS I have just the checksum version number to 2 in this version. This removes compatibility with the v1.5a27 but I think that it is a worthwhile change. The change in version number should not cause anything to crash, I have written the checksum routines to ignore different versions. I have improved the timing of checksums. It is now tied in to the sliding key mechanism so that after receiving a checksum, we are only able to compare it to ours, etc, when we match the sliding key being transmitted by the current site. I have also added a random timer of 5 +/- 3 seconds so that we don't calculate the sliding key straight away. I found that this has helped to reduce collisions, but let's see what happens in the real world. I have also reduced the number of retransmissions considerably. The current site can only send a block_info packet or retransmit an entire block once, per block, per checksum. These block_info and block_data packets are multicast so all of the sites receive them and should only be sent once. ***** Further additions are required so that sites listen to block_info/data requests from other sites and don't request a block info/data if another site has already done so during this checksum sequence, because it'll just get ignored by the current site. BUG FOUND - found the main bug that causes NTE to fall over. It is due to the no_of_lines field in the block structure being incorrectly updated. It manages to fall to 0 lines, probably due to line deletions being received before the newer versions of lines are received. When another line is deleted this is taken to -1 which when stored as an unsigned int is 65355. I have placed an extra line of code in delete_line to make sure that if the line count is already 0, that it does not reduce the line count further.. Redisplay block - have added an extra piece of code -piggy backed on to the send_session_message function in protocol.c . It checks that every block in the current page has been updated on screen. This occurs regularly, once every 10 seconds so it should keep the screen updated fairly accurately without causing any problems. - Attempt to prevent Tcl/Tk searching for the built-in libraries in the filesystem, and complaining when they don't find them. v1.5a28 7th august 1998 J.Knowler@cs.ucl.ac.uk VERSION - changed version number for unix and PC versions to v1.5a28 TK.res - added back into the windows makefile after being accidentaly removed, Windows version now has checkboxes. CTRL-K - edited the method in which the 'delete until the end of line' command works so that it only transmits the line when all edits are completed. Redisplay block - I have re-instated code in the function 'delayed_redisplay_block'. I had removed it originally because it did not always redisplay blocks when they had been re-received (especially with the new un-delete function) but without it update is slow, nte locks out frequently (especially on PC) and problems occur with editing blocks quickly. MD5 - replaced the command MD5_memset with the conventional memset command. Does exactly the same job but makes bounds checker happier. BUG - Every now and again, the Unix version of NTE crashes. Don't know whether this is a program bug or something to do with the Microimages X Server I am using to run it on my PC. The final debug message is not consistent so I don't think it is linked to a single procedure at the receiving end - this may be fixed by the re-instatement of the Redisplay block function. Key Bindings - I have included key bindings for all file and edit menu commands and have also added a 'raise block' command which does exactly the opposite of lower block. Help Files - I've added explainations of the extra features including block undelete. I also tarted them up (made them more presentable). BUG - Have found that cursor position in a block is relative to the number of characters in the block. Thus when a multiline block is being edited by two different users, the user with the later cursor (beneath and/or to the right of the other cursor) will find that their cursor moves right for every deletion made by the other user and to the left for every insertion made by the other user. Change made so that cursor stays at same graphical co-ords whenever the text is changed. I have not been able to include a special case for insertion/deletion of lines so strange things have happened in those situations - although not perfect it's better than it was though. FIX - Have fixed a possible string bug in the creation of new lines. The modifier field was not being set and my debug messages were displaying garbage in the modifier field. I have made changes to always set the modifier field. This may explain why strange things were appearing in the modifier field (such as "s\command.com") in structured text saves that I checked out. v1.5a27 31 July 1998 1.5a26 31st july 1998 - J.Knowler@cs.ucl.ac.uk BUG fix - I found that in both the line and block parsing mechanisms, if 2 updates are transmitted one after another, the second update would usually be ignored as it had the same time as the first update. I changed the protocol to reject only those lines with times before the last update - this is a temporary fix but not ideal (i.e. if the lines were received in the wrong order then problems could occur). Checksum - I have done a preliminary version of a checksum algorithm which works thus: 1. The current site after reaching it's slowest update rate calculates it's page's checksum and transmits a page info to all other sites. 2. All sites receiving the page info calculate their own page checksums and compare them. 3. If the checksums are different then the receiving site send a request for block information for all of it's blocks. 4. The current site responds to these requests and sends information 5. The receiving site compares the received block checksums with it's own and if they are different requests the retransmission of the block and all of it's lines from the controlling-current site. Checksums are calculated whenever a page checksum is requested. A page checksum requests the calculation of all the block checksums, a block checksum requests the calculation of all the line checksums. The checksum needs further work in the areas of 1. Re-receiving blocks - We may need to remove our version of the block before requesting re-transmission. This is because our internal version of the block could interfere with the newly received version. This would mean removing it from our linked list data store as well as from the hash table set up in hsearch.c . 2. line and block orders - the ordering of the internal store of lines and blocks is important to the calculation of our checksum (we are using MD5 to do so). Blocks are certainly ordered in a first come first stored method which could cause problems as checksum's for different orders are different but there is no way to find out that the checksums are different because of the different orders. Line ordering could be fixed by leaving deleted lines in place (at present they are moved to the end of blocks). This would probably mean changing protocols all over the place,etc. 3. Missing blocks - there is no way yet of checking if we are missing blocks , this could perhaps be included in the page info message, or in a separate message as a complete list of all blocks. 4. Random timeout - There may be considerable packet loss when the current site gets bombarded with several dozen re-requests for the same block info/inforequest/. I have used the queuing system that already operates for sending block and line data which should help but perhaps there should be a block info/info requestlist similar to the recent list to help efficiency in the retransmission protocol. Other important points 1. checksums are calculated fully to 18+ characters, I have truncated the checksums when I compare them to 16 characters since unix and windows versions add different characters to the end of the checksums which can have undesired effects on the checksum protocol. 2. I have tested the checksum algorithm on multiple lines, multiple blocks, line deletions, block deletions, block undeletions 3. I have also tested the algorithm with edits on hosts running at the same time and on hosts started up after edits were made on the current site. v1.5a26 20 Jul 1998 - J.knowler@cs.ucl.ac.uk 14th July 1998 - J.Knowler@cs.ucl.ac.uk TCL interface code - some tidying up done so that when you have deleted a block and have no currently selected block, you don't get errors when you mistakenly try to change colour, change font, edit the text of a non-existent block. The information display is also updated correctly when a block is deleted (all in nt.tcl). UNDELETE - further to storing undeleted blocks in an 'undeleted' state, you can now join a conference already underway and be able to un-delete any blocks that other members deleted before you joined the conference 13th July 1998 - J.knowler@cs.ucl.ac.uk Further fix to undelete function so that it undeletes blocks correctly, and stores the hidden undeleted block as 'undeleted' as well as the new copy of the block. This means we can store undelete events on the recent list to recover from net partitions etc. Changes to parse_packet.c to make it accept packets time stamped later than or at the same time as our local copy of the data. BUG - Found that dynamic block length calculation gets screwed if you create a block of a dozen lines or so, each more than a couple of characters long, move to the end of the last line and just hold down delete. Receiving hosts seem to think lines are missing in that block. Bug seems to be fixed by the changes above to parse_packet.c v1.5ish 10th Jul 1998 - J.knowler@cs.ucl.ac.uk Have fixed more unix compiler warnings, plus all of the fixable windows ones. Have fixed a small bug only in the move block/bulldozer transmission system meaning that the bulldozer is always placed correctly, next to the text. Have added feature to retransmission feature so that if a terminal neither makes or receives a retransmission-sliding-key for more than 10 seconds, it starts up it's own rtx system. I have included a random timing feature of +/- 3 seconds so that we don't get the situation where every terminal in conference transmits at same time. Fixed string lengths and pointers dealing with participants list. All participants are displayed correctly now and there are no segmentation faults anymore. Fixed Undelete Function - So that it attempts to prevent multiple people from deleting the same block by telling other sites to remove the block being undeleted from their 'deleted block' lists. v1.5-ish 8th Jul 1998 - J.Knowler@cs.ucl.ac.uk Fixes made to : Save Plain Text : It wasn't saving the last line, and was getting confused when trying to read in the last line, resulting in doubling of the bottom most line of page Ok now. Re-Transmission protocol generally - Some code which I think was meant to speed up re-displaying text by waiting for input queue to be emptied wasn't working properly meaning that whole blocks weren't displayed. Fixed so that blocks are always displayed, but a little slower. Original protocol is commented out for possible later fix ( this code has now been put back in with additions) Removed the fixes that I tried out to retransmit lines/blocks received in a recent list that we have later versions of because it wasn't doing anything useful. Shared-Pointers : Ensured that all shared-pointers in cross-platform communications are positioned similarly on source and destination. They are also drawn with the correct pointer style. Participants list : Fixed so that the local host's name, os platform and nte version are displayed correctly. This not only looks better but fixes a problem with some non-null terminated strings. Delete block : fixed so that once you delete a block, nte can't be asked to try to delete it again, which used to result in a phantom eraser on all screens in the conference. Null pointers to first lines : Problem when creating new blocks which you don't type anything in to, only the block was transmitted resulting in all of the other hosts in a conference holding blocks with null pointers to non-existent lines. Fixed so that the line of the block is transmitted and so that the block knows the id of the line to request rtx of it if it is lost. Additions made : Undelete block - Can now 'un-delete' a block after you delete it. I have also included an undelete history so that the last 20 blocks can be undeleted - last deleted, first resurected. Have also made it so that any host can undelete a block deleted by another host. This prevents someone entering a conference, deleting all the blocks and leaving the rest of the conference with no way of retrieving the block. CTRL K (delete to the end of the line) - added the emacs CTRL-K command so that you can now delete a line from the cursor to the end of the line with one key press. Cleanup a lot of compiler warnings. Rename canvas_ext_v8 to canvas_ext and font_ext_v8 to font_ext, since we're now using tcl/tk 8.0 on unix too. Fixed 'line doubling' bug in textpane.c line 184 - deleted lines are moved to the end of their blocks and given the line number 'LINE_DELETED'. Care must be taken to ensure that the line number of a deleted line is not overwritten when the lines of a block are renumbered as this will result in it being displayed again. Fixed save structured text bug - code was checking the line->status field to see if a line has been deleted, this has been changed to the line->linenum field to obtain consistency in code. Fixed changing colour bug. Host now sends a single session message straight away to signal it's colour changing, but leaves the normal session message sending sequence unaffected. Trying out some re-transmission code, where if we receive a line/block and we have a later version of it, we send out our version of the line/block immediately - perhaps this should be made into some form of 'send' list - changes made to function parse_recent_list() in file parse_packet.c . PC version committed to CVS v1.5a25 17 Mar 98 - k.hasler@cs.ucl.ac.uk Fixed byte order (little endian) bug for linenum in Protocol.c->send_line Ported to TCL/TK 8.0 and 8.1 Files for TCL/TK 8.0: canvas_ext_v8 replaces canvas_ext font_ext_v8 Files for TCL/TK 8.1: canvas_ext_v81 replaces canvas_ext font_ext_v81 PC fixes: Fixed the middle mouse button binding problem. Now uses Ctrl rather than Shift. Fixed font size. Text and Pointers are correctly shown on all machines. Problems with NTE crashing were caused by TCL/TK not being able to create temp. bitmaps in Tk_Get_Pixmap. The wtk canvas speedup patches for TCL/TK8 seem to solve this problem: ftp://ftp.bj-ig.de/pub/tcltk/src80s01.tar.gz http://www.bj-ig.de/tclttk/ v1.5a25 12 Mar 98 - c.perkins@cs.ucl.ac.uk Examine NTE_MAX_BLOCK_LEN environment variable for the maximum block size. This value can still be overridden with the -bl command line flag. Change name of the executable to "nte" v1.5a24 29 Jan 98 - c.perkins@cs.ucl.ac.uk Added ability to set the character set as a command line option. Note that the new value is NOT communicated to the other sites, so care has to be taken that everyone is using the same character set. [This is for the PIPVIC Polish language teaching trials, with ISO-Latin-2 characters]. This doesn't work on windows because TCL/TK ignores the encoding field. It can be manally set in TKWinFont.c (K.Hasler@cs.ucl.ac.uk) v1.5a23 31 Oct 96 - mhandley V1.5a22 14 Oct 96 - mhandley Added check to prevent coredump when NTE fails to find the address of the machine it's running on. Replaced broken code to find the domainname with code that works. Thanks to Jim Jackson for helping diagnose this. V1.5a21 4 August 96 - mhandley Ported NTE to Windows95 (with the exception that the fonts are incorrect and the replacement for the middle button bindings doens't work properly). Many minor changes, including moving most includes to a new header file "nt.h" to centralise incompatibilities with windows, and the inclusion of two new modules iohandler.c and win32.c (which came from LBL/John Brezak) to deal with the major incompatibilities, and the Linux source for the knuth hash functions in search.c for systems where these aren't standard. Incorporated minor fixes from John Hawkinson for building nte on NetBSD. V1.5a20 15 August 96 - mhandley Extra checks added, plus extra code to maintain conistency of line numbers to remove a few bugs all causing sdr to think it had missing lines when it didn't. Session messages extended to contain NTE version number and OS type. User interface code added so that clicking on a participant in the participants list shows this information. The necessitated re-writing the code to highlight participants. V1.5a19 - mhandley DES encryption added. V1.5a18 - 22 May 96 - 30 July 96 - mhandley Event logging enable for experiments at CRC Tk initialisation bug fixed Attempt to get domainname manually when gethostname doesn't do the right thing Fixed bug in parse_pointer that caused crash under linux Linux port done. Now uses released versions of tk4.1/tcl7.5 V1.5a17 - 16 May 96 mhandley Bug in setting main window title which prevented the use of Xresources fixed. V1.5a16 - 8 May 96 - mhandley Lots of event trace code added for experiments at CRC Otawa Bug in setting the name in session messages fixed. V1.5a15 - 24 Apr 96 - mhandley Rate limiter changed to 8Kbps Built in hard max block length increased to 10000 lines (but this isn't recommended). -N flag now specifies username -C flag now specifies conferencename Bug in setting username fixed V1.5a14 - 1 Mar 96 - mhandley Command line parsing had got broken with the port to tk4.1b1 - fixed again. V1.5a13 - 29 Feb 96 - mhandley Shared pointer bug which messed up canvas scrollbar fixed. V1.5a12 - 28 Feb 96 - mhandley Load structured text and save structured text options added. Bug in load plain text where modifier data is incorrect fixed. V1.5a11 - 11 Feb 96 - mhandley Mini-web-browser from sdr integrated into nt as a help system. A start made at adding help pages. V1.5a10 - 9 Feb 96 - mhandley Keep Participants button added to UI so that a complete record of the sessions participants can be kept. Save participants button added to save interface so the participants list is automatically added to the saved record of a meeting - idea suggested by Ulf Bilting V1.5a9 - 8 Feb 96 - mhandley Ported nt to tcl7.5, tk4.1 -assorted changes to the file handler mechanism and init code Ported nt to HPUX (note - tk won't build properly with gcc versions up to 2.7.1 on HPUX) Better command line parsing. Bug in clock sync code fixed. Other minor bug fixes. V1.5a8 - 7 Feb 96 - mhandley Saving to a file without the correct permission used to crash nt. Cursor keys bindings added for moving around the main window. Backspace now deletes in addition to Delete in the nt main window. When loading a file longer than the line limit, a warning is now produced. - the block line limit can be specified with the flag: -bl - note Tk imposes it's own block length limit. moving up and down off the screen now scrolls the screen. CR at end of screen now doesn't cause errors. Possible infinite loop bug introduced in 1.5a7 fixed. Bug in block length code fixed - no more spurious "**" at end of blocks. V1.5a7 - 31 Jan 96 - mhandley Bug fix: Lines were getting positioned slightly incorrectly when a file load was performed across a lossy net. V1.5a6 - 24 Jan 96 - mhandley Participants window is no longer editable. Garbage on end of particpants names no longer appears. TK4.0 porting bug fixed: new users now get participants coloured correctly. -N now sets the name to be used in session messages. V1.5a5 - 24 Jan 96 - mhandley Fixed memory corruption bug when receiving a recent-list. V1.5a4 CHANGED protocol version number to attempt to eliminate old out of date versions of nt. Old versions should get lots of warning messages if they try to talk to 1.5a4 or later. Scrollbar bug fixed - windows used to grow slowly whenever any action happened. Spurious error message when double-clicking a load-file fixed. Tearoffs removed from menus V1.5a3 Lost some changes entries here unfortunately :-( V1.5 Significant bug in clock sync code fixed - all previous versions must be scrapped! Ported nt to Tcl7.4/TK4.0. Many many small changes to fix incompatibilities in Tk versions. V1.4a4 Changes to parse block so we no longer try to keep global ordering on blocks V1.4a3 Saving no longer saves deleted blocks! V1.4a2 TK and TCL initalisation code now built in so no need to set TCL_LIBRARY and TK_LIBRARY environment variables. V1.4 Resize bahaviour changed so that participants window doesn't grow, allowing more usable screen area. Default screen width increased from 80 chars to 90 chars to allow more space on the right hand side of 80 char wide documents for annotations. 90 char right margin added, with visible margin marker and dumb line wrap algorithm. If users start typing to the right of the margin, they can do, but no line wrap will occur, and they should check that others can see it. Load and Save window behaviour changed to be more logical. V1.3 Fixed bug in clock sync code when network delay was less than a clock tick. Clocks should no longer spuriously increment due to Sun's broken timer code. Cache inviolation problem in recent list fixed - should prevent unecessary repeated requests for retransmission. V1.2 Improved command line checking. Extra checking that block id given by TCL is still valid. This is just a precaution. Scrollbars added to load and save windows "lower block" added to edit menu - this only has local effect - with command binding ^L. Allows you to get at blocks hidden behind others. Adding new text off the bottom of the window now scrolls the window. moving the cursor up or down out of the window now scrolls the window. Extra code added so one nt can tell another that it hasn't seen a line or block that was just requested. The requester then stops requesting this particular line or block until it sees someone else reference it. Prevously it would carry on requesting it indefinitely. A new hashing table replaces the old linear search for the correct line or block when you receive a specific retransmission request. Should reduce the CPU requirements of sending retransmissions by a significant amount. Bug in retransmission requests fixed. Previously if a line arrived where the previous line was known and the next line was unknown, nt would demand a retransmission of block t0000000000000000 instead of the correct line.