1.TL 2Inferno 3rd Edition \- 3 October 2001 Update 3.br 4Release Notes 5.AI 6Vita Nuova 7support@vitanuova.com 8.br 93 October 2001 10.SP 4 11.NH 1 12Contents 13.LP 14This set of updates applies to the 18 June 2001 base. 15The installed software must therefore be that of 18 June 2001, whether installed directly, 16or the result of updating the original July 2000 release with update packages. 17.LP 18This update offers the following, compared to the June 2001 release. 19.SH 20.I "Repairs and changes" 21.IP \(bu 22Various minor bug fixes and improvements appear here and there. 23They include corrected usage messages, status returned to the shell on error, 24diagnosing failures to load library modules, 25and use of the 26.CW %r 27format to improve diagnostics. 28Many 29.I wm 30applications adjust their display to suit small screens (eg, on the Compaq iPAQ); 31currently the applications do some of the work themselves but it will soon be automatic. 32Other changes are listed below. 33.IP \(bu 34.I Date (1) 35takes the options 36.CW -u 37(show UTC/GMT) 38and 39.CW -n 40(print time as a number). 41If given a number of seconds as its argument, 42.I date 43takes that as the time to convert. 44.IP \(bu 45.I Format (8) 46supports tiny partitions. 47.IP \(bu 48.CW /appl/env.b 49uses 50.I env (2) 51to access environment variables. 52.IP \(bu 53For packages created after Saturday 8 September 2001, 54.CW install/create 55converts the leading 56.CW 10 57to the letter 58.CW A 59so that the names of update files remain in sorted order. 60.IP \(bu 61.CW install/inst 62takes a 63.CW -c 64option to cause it to carry on even if some files or directories cannot be made or updated. 65(This option is intended for special applications and should not generally be used when applying system updates.) 66.IP \(bu 67.CW install/install 68takes a 69.CW -P 70option that lists the packages to install. 71The 72.CW -g 73option causes 74.CW install 75to install all available packages. 76.IP \(bu 77The installation software regards files that have had carriage returns inserted 78before newlines as identical to the original files when deciding when files 79have been modified locally. 80.IP \(bu 81The 82.CW wm 83applications now check the whole string received on the window 84control channel returned by 85.I wmlib (2)'s 86.CW titlebar, 87not just an initial letter; 88in particular, they check for 89.CW "exit" 90not just 91.CW 'e' . 92.IP \(bu 93.I Wm (1) 94takes the option 95.CW -s 96to suppress the start menu. 97.IP \(bu 98.I Keyring-gensk (2) 99and 100.I createsignerkey (8) 101provide experimental support for the RSA algorithm for signatures instead 102of the default El-Gamal algorithm; 103.CW /keyring/rsaalg.c 104is new. 105.IP \(bu 106.CW /keyring/egalg.c 107uses the correct structure for Public keys. 108.IP \(bu 109.I Listen (1) 110has a new option 111.CW -i 112that takes a shell command for each listener to run to set up appropriate 113context (eg, name space) before listening for incoming calls. 114.IP \(bu 115.I man (1) 116allows non-numerics in section names. 117.IP \(bu 118.CW /appl/cmd/mkfile 119now includes 120.CW /mkfiles/mksubdirs 121and has acquired the list of 122.CW cmd 123subdirectories from 124.CW /appl/mkfile . 125.IP \(bu 126.I Puttar 127gives warnings not fatal errors when files or directories cannot be found. 128.IP \(bu 129.I sh-expr (1) 130implements the 131.CW != 132operator. 133.IP \(bu 134.I Tail (1) 135no longer gives an array bound error when a binary file does not end with a newline. 136.IP \(bu 137.CW tiny/sh 138does not break when 139.I filepat (2) 140is not available. 141.IP \(bu 142.I Webgrab (1) 143has several repairs to its HTTP protocol implementation, making it work with multi-homed servers. 144.IP \(bu 145.CW wm/sendmail 146no longer fails to save messages when requested(!). 147.IP \(bu 148.I Arg (2) 149allows re-use by ensuring that its globals are reinitialised by its 150.CW init 151function. 152.IP \(bu 153.I Bufio (2) 154correctly implements relative seek. 155.IP \(bu 156.I Convcs (2) 157provides several more character sets. 158.IP \(bu 159.I Cs (8) 160does not complain if it is already running, suppressing a previously confusing diagnostic. 161.IP \(bu 162.CW lib/deflate 163no longer fails on the output of some PC versions of 164.I gzip . 165.IP \(bu 166.I Wmlib (2) 167adapts a little better to different font and screen sizes (though more remains to be done); 168on small screens, defined as those less than 480 pixels wide, 169.I wm (1) 170puts all windows at the screen origin by default. 171.SH 172.I "Interface changes and extensions" 173.IP \(bu 174.I Wm-deb (1) 175has got a 176.CW stack 177button to bring up the stack window if it has previously been dismissed. 178It also allows breakpoints to be set in modules that have not yet been loaded. 179.IP \(bu 180.CW wm/memory 's 181display has been redesigned to be more informative. 182.IP \(bu 183.CW wm/tetris 184allows the use of a stylus (or mouse) to guide the placement of pieces. 185.IP \(bu 186.CW wm/view 187supports PNG format 188.IP \(bu 189.CW wm/view 190has a new option 191.CW -i 192for use in 193.I plumbing (6) 194files, to cause it to listen for messages from the 195.I plumber (8). 196Existing plumbing files that invoke 197.CW wm/view 198will typically need to change to add that option for image viewing 199using the plumber to work as expected. 200.IP \(bu 201.I Newns (2) 202provides more general option parsing by using 203.I arg (2), 204and does error checking unless the 205.CW -i 206option is given to the 207.I namespace (6) 208commands. 209Its internal 210.CW mount 211commandalso accepts the new options 212.CW -k 213.I keyfile 214to select the source of the authentication key, and 215.CW -C 216.I alg 217to select the encryption algorithm. 218.IP \(bu 219.I Plumber (8) 220takes a 221.CW -v 222option to cause it to log the contents of messages (for debugging plumbing applications), and 223also the option 224.CW -c 225.I wmchan 226to select an alternative window manager channel instead of 227.CW /chan/wm 228when the 229.CW -w 230option is used. 231.SH 232.I "Tk changes and extensions" 233.LP 234Many of the Tk changes enforce rules and do more error-checking than before, 235but there are several extensions and interface changes as well. 236.IP \(bu 237Tk applications must create the parent widget before its children. 238Currently the check to enforce this rule has been suppressed, but it will be enabled in future. 239.IP \(bu 240Widget names are now checked for well-formedness: neither trailing dot nor double dot are allowed. 241.IP \(bu 242When text in a text widget is deleted, embedded windows in 243that text are only deleted if they are descendents of the text 244widget. 245.IP \(bu 246Text widget now redisplays correctly when an embedded window 247is destroyed. 248.IP \(bu 249Text widget now checks for embedded windows in the text that have been destroyed since they were added to the text. 250.IP \(bu 251Widgets packed under a destroyed widget that are not 252descendents of that widget are now removed correctly 253from the packing hierarchy. 254.IP \(bu 255.CW -activebackground 256now changes the border appropriately, same as 257.CW -background . 258.IP \(bu 259.CW scrollbar 260now returns currently activated part when 261.CW activate 262is called 263with no arguments. 264.IP \(bu 265Only one part of a scrollbar may be active at any one time. 266.IP \(bu 267Tk can now distinguish between a null argument 268.CW {} 269and a missing argument. 270.IP 271Creating an embedded window in a text widget at index 1.0 272no longer causes the packer to go into an infinite loop. 273.IP \(bu 274Changing the options on an embedded window in a text 275widget caused an uninitialised pointer access. 276.IP \(bu 277Changing the window associated with an embedded window item 278in text and canvas widgets previously did not disassociate the old window correctly. 279.IP \(bu 280Changing the window associated with an embedded window item 281in a text widget did not set the widget's size appropriately. 282.IP \(bu 283The 284.CW -baseline 285alignment option for embedded windows in text widgets previously 286did not calculate the line height correctly. 287.IP \(bu 288The 289.CW -relief 290setting for buttons is now restored after enter/leave or selection. 291.IP \(bu 292Buttons 4, 5 and 6 have been added (for the iPAQ). 293.IP \(bu 294Tk no longer crashes if the `grab' changes during the processing of a mouse event. 295.IP \(bu 296A new event 297.CW <Destroy> 298can be bound to a widget to receive notification when it is destroyed (eg, by the destruction of 299a parent widget). 300The 301.CW <Configure> 302event is propagated to slaves as well as the configured master. 303These two changes make it easier to implement pseudo-widgets such as 304.I dividers (2). 305.IP \(bu 306.CW -anchor 307has been implemented for labels; 308.CW -justify 309should be implemented as documented. 310.IP \(bu 311Submenus are unmapped correctly. 312.IP \(bu 313Tk detects command loops (by limiting recursion depth). 314.IP \(bu 315.CW canvas 316has a new boolean option 317.CW -buffered 318that controls whether the whole canvas, or just the visible region, is allocated an off-screen buffer image. 319It defaults to just the visible area only. 320.IP \(bu 321.CW canvas 322has new operations 323.CW screenx 324and 325.CW screeny 326to map canvas coordinates to screen coordinates. 327.SH 328.I "New commands and modules" 329.IP \(bu 330A collection of small and tiny playing card images have been added, in 331.CW /icons/smallcards 332and 333.CW /icons/tinycards . 334.IP \(bu 335.CW install/wfind 336lists the versions of a given file in a set of installation packages. 337.IP \(bu 338.I Touchcal (8) 339provides touch-screen calibration; it runs both inside and outside the window 340manager 341.I wm (1). 342Both internal and external interfaces are completely different from previous versions. 343.IP \(bu 344.I Wm-keyboard (1) 345describes new commands 346.CW wm/keyboard 347and 348.CW wm/pen 349that provide soft keyboard and single-stroke gesture recognition for touch screen devices. 350.IP \(bu 351.I Gamesrv (4) 352provides a file system interface for multi-player networked games; 353.I gamesrv (2) 354provides the interface for the game-specific engines loaded on demand by the game server. 355.IP \(bu 356.CW utils/awk 357is a new directory containing the source for a version of 358.I awk 359for use in doing Inferno ports for systems that lack it (or a sufficiently recent version), including Windows. 360It is not currently made automatically for any system. 361It is covered by its own licence; see the 362.CW README 363and 364.CW NOTICE 365files in that directory. 366.SH 367.I "Limbo compiler" 368.IP \(bu 369The compiler now adds a source file name (relative to the Inferno root) to each Dis 370file, to allow 371.I debug (2) 372and thus the debugger 373.CW wm/deb 374and other commands such as 375.I profile (1) 376and 377.I stack (1) 378to find source 379and 380.CW .sbl 381files without prompting. 382.IP \(bu 383The initialisation of large arrays avoids deep recursion, preventing a trap on Nt 384and a large stack on other platforms. 385.IP \(bu 386Overflow is avoided when sorting integers for case statements. 387.SH 388.I "Compilers and architectures" 389.IP \(bu 390The linker 391.CW 5l 392has a critical bug fix in 393.CW utils/5l/span.c 394that fixes a bug in the flushing of literal pools. 395.IP \(bu 396.CW 5coff 397has a small change to make the output conform to actual practice 398not COFF documentation. 399.SH 400.I "Hosted and Native Inferno" 401.IP \(bu 402.I Emu 403has the following fixes and improvements: 404.RS 405.IP \(bu 406Trap handling on Windows now (we hope) does all that is required 407to work on many versions, variants, updates and releases. 408.IP \(bu 409The cursor appears correctly under Windows 2000. 410.IP \(bu 411Windows 412.I emu 413passes page up, down scroll, pause, insert, delete and print 414characters through to 415.CW /dev/keyboard . 416.IP \(bu 417.CW styx.c 418prevents bad Styx messages from causing trouble. 419.IP \(bu 420.CW devenv.c 421returns 422.CW "file exists" 423if an attempt is made to create an existing name; 424it implements 425.CW ORCLOSE . 426.IP \(bu 427.CW devroot.c 428makes directories mode 555 not 777. 429.RE 430.IP \(bu 431For the native kernels only: 432.RS 433.IP \(bu 434.I Env (3) 435is now provided for native kernels. 436To add it to a kernel, change the kernel configuration file as follows: 437.RS 438.IP 1. 439Include the device driver 440.CW env 441in the 442.CW dev 443section. 444.IP 2. 445Include the support file 446.CW env 447in the 448.CW port 449section. 450.IP 3. 451Include the name 452.CW /env 453in the 454.CW root 455section. 456.LP 457To exclude it from a kernel, include the support file 458.CW noenv 459in the 460.CW port 461section. 462You should only do this if you are trying to make a small highly specialised kernel; 463general applications are likely to make more use of 464.CW /env 465now that it is there, 466eventually to replace 467.CW sysenv 468and to select locales. 469.RE 470.IP \(bu 471Common floating-point emulator code has moved from platform-specific directories to 472.CW /os/port/fpi.c 473and 474.CW /os/port/fpimem.c , 475with corresponding changes to configuration files and 476.CW mkfiles . 477.IP \(bu 478The scheduling code in 479.CW /os/port/proc.c 480has changed to support wait-for-interrupt. 481If no process can be scheduled, the platform-specific function 482.CW "void idlehands(void)" 483is called, with interrupts 484.I off 485(unlike the function of the same name in Plan 9). 486On most platforms, it currently is an empty function defined by 487.CW #define 488in 489.CW fns.h , 490and the scheduler effectively spins waiting for an interrupt to make a kernel process ready, 491but on the iPAQ and a few other platforms it uses the hardware-specific 492``wait for interrupt'' function, for power saving. 493.IP \(bu 494A new package 495.CW ipaq 496is available that populates 497.CW /os/ipaq 498with the preliminary Inferno port to the Compaq iPAQ. 499.IP \(bu 500.CW /os/ip 501has incorporated bug fixes and improvements from Plan 9 to 502keep the source code up to date: 503.RS 504.IP \- 505.CW /net/ndb 506has been added, to allow for future changes in IP configuration code 507.IP \- 508permissions are checked more carefully; 509.CW wstat 510is implemented 511.IP \- 512.CW Conv 513structures are now unlocked on 514.CW close 515by 516.CW devip.c 517not by each protocol's implementation; 518the 519.CW car 520lock for connect/announce no longer exists, because the conversation itself is locked 521.IP \- 522some missing 523.CW waserror 524calls have been added 525.IP \- 526ensure local port is unique across existing conversations 527.IP \- 528.CW tos 529can be set for a converstation by a 530.CW tos 531control message, and is retained during routing 532.IP \- 533.CW qdiscard 534in 535.CW qio.c 536returns the number of bytes discarded 537.IP \- 538protocol handlers 539.CW esp.c , 540.CW gre.c , 541.CW icmp.c , 542.CW ip.c , 543.CW ipifc.c , 544.CW ipmux.c , 545.CW rudp.c 546and 547.CW tcp.c 548have consequentially changed; 549the TCP/IP implementation most extensively; 550.CW il.c 551and 552.CW udp.c 553have not yet been realigned with Plan 9 554.IP \- 555medium drivers use the structure-member initialisation extension of Plan 9 C, 556to insulate driver source text from changes in the layout of the 557.CW Medium 558structure 559.RE 560.IP \(bu 561The SA1100 UART driver now correctly pushes input up the stack when the FIFO empties. 562.RE 563.LP 564The remaining points are common to both hosted and native Inferno: 565.IP \(bu 566.I Cons (3) 567implements the file 568.CW kprint 569to capture Inferno console messages; and a file 570.CW jit 571that can be used to set the compile-on-the-fly option dynamically or read its current state. 572.IP \(bu 573There is a new kernel function: 574.RS 575.DS 576.ft 5 577char* seprint(char *buf, char *ebuf, char *fmt, ...); 578.ft P 579.DE 580which puts a formatted result into 581.CW buf 582never writing beyond 583.CW ebuf-1 584(including the trailing null byte). 585It returns the address of the next available byte in 586.I buf . 587.RE 588.IP \(bu 589.CW kfs 's 590.CW Eexist 591error has become 592.CW Eexists 593to remove a clash with the new 594.CW Eexist 595name in 596.CW error.h 597.IP \(bu 598.CW exportfs.c 599maintains offsets in exported directories correctly. 600.IP \(bu 601The undocumented 602.CW devaudit.c 603has been removed. 604.IP \(bu 605Some Limbo profiler bugs have been fixed. 606.IP \(bu 607A race for the use of a shared semaphore has been fixed in 608.CW devprog.c . 609.IP \(bu 610.CW devprog.c 611has a new debugging event: 612.CW load 613.I filename 614corresponds to the execution of a Dis 615.CW load 616instruction. 617.IP \(bu 618.CW devdraw.c 619implements 620.CW readpixels 621from a window 622.NH 1 623Updating the software 624.LP 625You should install the updates as the host operating system user who owns the Inferno files and directories 626on your system. 627You might like to take a backup copy of the existing tree, just in case. 628Do the following to update the installation. 629.IP 1. 630Fetch the update archives required, namely 631.CW inferno.tgz , 632.CW src.tgz , 633.CW utils.tgz 634and any platform-specific packages required for your installation. 635If you are running Windows, for instance, you will need 636.CW Nt.tgz ; 637if running Plan 9, you will need 638.CW Plan9.tgz . 639These are gzip'd tar files containing files starting with the directory 640name 641.CW updates/20011003 . 642Unpack each in your Inferno root directory. 643For instance, you can unpack 644.CW inferno.tgz 645using the Inferno commands: 646.RS 647.P1 648cd / 649gunzip <inferno.tgz | gettar 650.P2 651The following instructions assume they are visible in the Inferno hierarchy. 652Make sure there is sufficient space in the file system holding that hierarchy. 653Each archive can be removed after unpacking, and the 654.CW updates 655directory can be removed after installation. 656.RE 657.IP 2. 658After unpacking the archives, 659(re)start 660the existing Inferno 661.I emu ; 662it will be quicker if you use the 663.CW -c1 664option to force compiled mode. 665It is best to use only the Inferno console; do not start the window system, since 666the updates will change files in the running system. 667On the other hand, it is a good idea to make the window in the host 668operating system a scrolling one, so that you can scroll back to 669see any errors. 670All following commands are run in the Inferno environment. 671.IP 3. 672Change to the directory containing the updates: 673.RS 674.P1 675cd /updates/20011003 676.P2 677.RE 678.NE 1i 679.IP 4. 680Updated installation software was included in 681.CW inferno.tgz . 682You must first unpack that installation software, as follows: 683.RS 684.P1 685sh ./unpacktools 686.P2 687.RE 688.NE 1i 689.IP 5. 690Update the installed Inferno, source and utility source directories 691using the script 692.CW applybase : 693.RS 694.P1 695sh ./applybase 696.P2 697.LP 698That script updates the 699.CW inferno , 700.CW src 701and 702.CW utils 703packages. 704You might see warnings if you have modified any non-configuration files from the original release. 705.RE 706.IP 6. 707Update one or more platform specific files for your platform(s). 708The directories are named after the platforms: 709.CW Solaris 710for Solaris, 711.CW Plan9 712for Plan 9, 713.CW Nt 714for all Windows systems, 715and so on. 716For each 717.I platform 718that you run, do: 719.RS 720.P1 721sh ./applyplat \fIplatform\fP 722.P2 723For instance, if you use Windows, run 724.P1 725sh ./applyplat Nt 726.P2 727The iPAQ distribution is installed the same way (it is just another platform): 728.P1 729sh ./applyplat ipaq 730.P2 731which populates 732.CW /os/ipaq 733in the Inferno tree. 734.RE 735.IP 6. 736Quit 737.I emu . 738The new version of 739.I emu 740will be called 741.CW emu.new 742in the platform-specific directory 743(eg, 744.CW Solaris/sparc/bin/emu.new ). 745Rename the old 746.CW emu 747file as 748.CW emu.old , 749then rename the new 750.CW emu.new 751as 752.CW emu 753on Plan 9 and Unix systems, 754or 755.CW emu.exe 756on Windows. 757When run, it should announce itself as 758``Inferno Third Edition (3 October 2001)''. 759