xref: /inferno-os/doc/20011003.ms (revision 1ff17325e1e5b77e0ac131933127c676bf3b04fc)
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