describes bug fixes and enhancements present in Mac OS 9.0.4.
Mac OS 9.0.4 provides support for new Apple hardware
platforms released since Mac OS 9. As such, during development some
interim versions of the software were released on some
hardware platforms. Where relevant, the particular release
where a feature was introduced is mentioned. Version numbers
for these releases include Mac OS 9.0.2, Mac OS 9.0.3,
and Mac OS 9.0.4. Mac OS 9.0.4 includes all of
the features and enhancements that were present in Mac OS 9.0.2
and Mac OS 9.0.3. There was no public release of Mac OS 9.0.1.
All developers interested in creating products compatible
with Mac OS and being aware of issues relevant to creating products
for use with the Mac OS will want to review this document.
Updated: [Mar 31 2000]
Mac OS 9.0.4 can be installed on any Macintosh that
originally shipped with a PowerPC processor that has at
least 32 megabytes of physical RAM and a minimum of 40
megabytes of logical RAM (virtual memory is set to 64 by
default if there is less than 64 megabytes of physical
Mac OS 9.0.4 has been tested and qualified by Apple to run
on Apple PowerPC-based Mac OS computers (Mac OS 9.0.4 has
not been tested or qualified by Apple for use on Mac OS-compatible
Mac OS 9 must be installed before the Mac OS 9.0.4
update can be installed.
Back to top
Inside the System File
The System file contains code and resources for
running the computer. This section describes changes
and bug fixes in the System file. The functionality
provided by the System file is always present under
Mac OS 9.0.4, even when the shift key is held
down at system startup.
- The German keyboard layout shipped inside of the US release of
Mac OS 8.6 and Mac OS 9.0 was incorrect. It has been corrected
so that Shift-# (key code $2A) in the German keyboard layout maps
to a single quote character instead of a dead key.
The Alias Manager is the part of the operating system that
communicates with the File Manager to maintain alias records
used to store references to file and folder locations. The
Alias Manager does not create Finder alias files; the Finder
creates these files and stores alias records created by the
Alias Manager in them.
- Creating and resolving aliases to volumes
using path names was not working correctly in Mac OS 9.
If an alias was created to a volume using the
NewAliasMinimalFromFullPath routine and
the original volume could not be found when the alias
record was being resolved, then the Alias Manager would
return a reference to the default volume rather than
return an error. This problem was corrected in Mac OS 9.0.2
The Alias Manager online documentation.
Back to top
ATSUI (Apple Type Services for Unicode Imaging)
Unicode is a character set that encodes the
characters of many languages in a flat 16-bit number
space. ATSUI extends the QuickDraw API and makes it
possible for Mac OS applications to draw Unicode text.
ATSUI provides both low level services for drawing
Unicode text,as well as much of the high-end
typographical control previously provided by QuickDraw
- A problem where ATSUI's Unicode synthesizer would fail to
convert some characters correctly when converting from
Chinese text in naked-CID format has been corrected. This correction
is present in Mac OS 9.0.3 and later.
- A problem affecting the printing performance of certain applications
running in the Japanese version of Mac OS 9 has been corrected. This
correction is present in Mac OS 9.0.2 and later.
The Apple Type Services for Unicode Imaging (ATSUI) online documentation.
The ATSUI SDK.
Back to top
Date & Time Utilities
The date and time utilities provide facilities
for date and time conversion.
- A problem was found in Mac OS 9 where the
routine would add the current millennium read from the system clock to the year
when translating strings containing four-digit year fields between and including
the years 1000 through 1903. Here, the current millennium was
being read from the system clock and added to the year in the date being translated.
For example, if the time on the system clock was "March 1, 2000" and
StringToDate was asked to translate the string "March 24, 1901"
into a date, then the millennium from the system clock (2000) would be added to
the year resulting in the date March 24th, 3901. This behavior was
correct in the 1900's, but now that the century is 2000 as the date should have been translated as March 24th, 1901.
The implementation of
StringToDate has been corrected so that such
dates are converted correctly. This problem was only present in the new PowerPC
native version of the Date & Time Utilities introduced in Mac OS 9
and has been corrected in Mac OS 9.0.4.
Inside Macintosh:Text p. 5-32 contains the statement
regarding the behavior of
"If the value of the input year is between 100 and 1000, then 1000
is added to it. Thus the dates 1/9/87, 1/9/987, and 1/9/1987 are
The actual behavior of
StringToDate at the time when this
statement was made was to add the century from the system clock to
two-digit year values and to add the millennium from the system clock to
three-digit year values when they were being converted. Hence, back
in 1993, this sentence was true (1000, taken from the system clock, would
have been added to three-digit dates and 1900 would have been added
to two-digit dates when they were being converted).
But now that the century has changed to 2000, this sentence is no longer
true for two- and three-digit dates as
StringToDate always adds
the century from the system clock to two digit year values and the
millennium from the system clock to three digit year values when they
are being converted. The statement should be changed to read as follows:
"If the value of the input year is between 100 and 1000, then the
current millennium from the system clock is added to it. Hence,
the dates returned by
StringToDate for the strings
1/9/87, 1/9/987, and 1/9/1987 will vary according to the date
retrieved from the system clock when
The Date, Time, and Measurement Utilities online documentation.
The Converting Formatted Date and Time Strings Into Internal Numeric Representations section of Inside Macintosh:Text.
Back to top
File System Manager
The File System Manager provides a general means
by which foreign file systems can be installed,
identified, and interfaced to the operating system.
- The following new File System Manager routines that were
introduced in Mac OS 9 are now exported from
The File System Manager SDK.
Back to top
Mac OS USB 1.4.2
Mac OS USB is built into the Mac OS ROM file,
and enables USB support for those Macintosh systems that
have USB built-in.
- The OHCI UIM has been modified so that the root hub simulation is
interrupt based instead of polled. Other changes were made to the drivers
for the USB keyboard and pointing devices that allow them to be used in MacsBug.
- Added API call
USBSetPipePolicy that allows for changing pipe
characteristics as follows:
- The maximum number of bytes per frame can be adjusted. This allows Isoc
devices to use less bandwidth than specified in the endpoint.
- The maximum data per. IRP. This allows the clients to set the maximum
value allowed for
usbReqCount (currently unimplemented).
- The maximum service interval can be adjusted. For interrupt endpoints,
this sets the polling interval.
- USB Audio support is now provided for 16-bit mono USB Audio input
- A feature was added that allows a
USBShim to be registered
as a shared library. To take advantage of this feature, a
must export the symbol
ShimDescription that references a structure
USBShimDescription. In the
USBShimLoadingOptions field must have both the
kUSBRegisterShimAsSharedLibrary bit set and the
libraryName field set to the CFM shared library name.
- A new Expert Options Control Panel has been added to allow control over
(a) the default Expert Status level, (b) the size of the Expert Status
message buffer, and (c) and the assignment of fixed addresses to USB devices.
This latter option means that if the USB topology remains unchanged across
reboots, then each device will be assigned the same USB address.
- The Power Class driver has been added to the USB Device Support driver file.
- A buffer overrun condition was corrected in the USB Audio class driver that
could result in heap corruption. A common symptom of this problem was
sound input stopping after using a USB microphone for some time.
Mac OS USB web page.
The Latest USB DDK.
Back to top
The Memory Manager is the part of the operating
system responsible for managing memory allocation
- The Memory Manager routines
BlockMoveData have been enhanced to use the Velocity
Engine for faster memory copies on machines where it is available.
This enhancement appears in Mac OS 9.0.2 and later.
The Memory Manager online documentation.
The Multitasking/Multiprocessing Library allows
applications to perform pre-emptive multiprocessing
operations on PowerPC computers equipped with more than
one processor. The library also allows for preemptive
multitasking on machines equipped with only one
- A system crash could occur in the
routine when it was called with a timeout value other than
kDurationForever. This problem was corrected in
Mac OS 9.0.3.
- A memory leak that could occur when an application that used
Multiprocessing Services quit has been corrected. This problem was corrected
in Mac OS 9.0.3.
The Multiprocessing Services online documentation.
The Multiprocessing Services SDK.
Back to top
Power Manager 2.0.1
The Power Manager provides facilities for controlling power
to the internal hardware devices in capable Apple computer models.
- Support for UPS power supply notification has been added. There
is a new Power Manager feature bit that is turned on in machines
that support UPS notification. The new feature bit
Power.h is used to indicate the availability of this
- The Server Mode APIs discussed in Technote 1190, "Power Manager 2.0"
have been implemented on newer models where server mode is supported. The
new feature bit
supportsServerModeAPIs defined in
Power.h is used to
indicate the availability of this facility.
- A problem where a machine would not reboot automatically
when "server mode" was enabled by way of the check box in the
Energy Saver control panel has been corrected. This problem
would occur when the machine was using a UPS as a power source
and the UPS ran out of power.
- The Battery Monitor Control Strip Module has been corrected
so that it shows a more accurate Battery Time Remaining when a second
battery is installed.
- A problem where sound output would be unavailable after
waking from sleep on some G3 models has been corrected.
Technote 1190, "Power Manager 2.0"
The Universal Interfaces 3.3.1.
Back to top
The Program-to-Program Communications Toolbox
provides process-to-process communications facilities
both for processes running on the same machine and for
processes running on different computers connected by
either an AppleTalk network or a TCP/IP network.
IPCKillListPorts was introduced in
Mac OS 9, there is no entry point exported from
InterfaceLib with that name. However, this
routine is available through the trap dispatching mechanism.
For information about calling routines from PowerPC code
using their trap dispatch table entry see Technote 1127,
"In Search of......Missing Links*".
IPCKillListPorts has been changed so that it has
no effect for AppleTalk connections. AppleTalk connections are now
aborted based on the older time out mechanism rather than
The PPC Toolbox online documentation.
Technote 1127, "In Search of......Missing Links*"
Back to top
The Resource Manager provides a data file format for storing
and retrieving information used during application and operating
system run time.
- Performance of the Resource Manager's
routine has been improved by reducing the number of calls it makes
to the File Manager while a resource file is being created.
This improvement should be most noticeable when calling
CreateResFile to create resource files on AppleShare
or NFS-mounted volumes.
The Resource Manager online documentation.
Back to top
The Script Manager provides functions for controlling, modifying, and accessing the features of both Roman and non-Roman script systems.
- In Mac OS 8.6 and Mac OS 9,
was interpreting the string
"<>" incorrectly and returning
tokenGreat instead of
tokenLessGreat as it should have. This problem
was corrected in Mac OS 9.0.3.
IntlTokenize was not interpreting eight-bit characters
(characters with values greater than 127) correctly in Mac OS 9. This problem
has been corrected.
The Script Manager online documentation.
Back to top
The SCSI Manager is the part of the operating system responsible
for communications with connected SCSI devices.
- In Mac OS 9, the native SCSI Manager was not being installed
at system startup. As a result, whatever version of the
SCSI Manager that was stored in ROM was being used instead.
This problem has been corrected.
The SCSI Manager online documentation.
Back to top
The Time Manager provides millisecond and microsecond timing
facilities for Mac OS computers.
New Time Manager routines have been introduced to
that return result codes of type
OSErr. These routines do not
replace the older routines; however, going forward, their use is recommended
over the use of the older Time Manager routines. The new routines and their
older equivalents are listed in Table 1. The older routines have always
returned an error in register DO; however, in the past the high- level APIs
provided no way to access this error. These new calls allow callers to determine
the result code.
Table 1. New Timer Manager tasks that return result
codes and their older equivalents.
New Routine Name
Old Routine Name
Developers should be aware that under some circumstances the Time
Manager tasks may fail and return a result code describing the failure.
For example, when Virtual Memory is turned on, circumstances may
arise where it is not possible for the Time Manager to successfully
complete a call to
InstallTimeTask. Because of this
possibility, developers should begin using the new routines and
checking the result codes returned by the Time Manager.
- In the PowerPC version of the Time Manager present in Mac OS 9
a problem was found where, under certain conditions, the high bit in
qType field of a Time Manager
was not being cleared immediately after a timer elapsed. Normally, this
bit is cleared immediately when a timer elapses. This problem was corrected
in Mac OS 9.0.2.
One case where this problem occurred was in the delay timer used by
the PowerPC version of HyperCard when drawing its transitional visual
effects. Here, visual effects such as "visual effect dissolve fast"
would take much longer than expected to execute.
The Time Manager online documentation.
Back to top
System extensions are located in the Extensions
folder inside the System Folder.
For a system extension to be active, it must be located
in the Extensions folder
when the system starts up. Extensions are not loaded if
the Shift key is held down while the system is starting
AppleScript is a component of the operating
system that provides a scripting interface for users to
automate actions that would normally require use of the
menus and keyboard. Even more importantly, it allows
users to access functionality of applications which would
be difficult or impossible to access by hand.
- In AppleScript 1.4 in Mac OS 9.0, compiling AppleScripts
simultaneously in two separate component connections could cause a crash.
This is fixed in AppleScript extension version 1.4 and later.
- In Standard Additions 1.4 in Mac OS 9, the
scripting addition was not updated to accommodate the change in AFP client behavior
in Mac OS 9 regarding NAM negotiation. The result is that the
mount volume command would not work with secure logins to
certain servers, such as Mac OS X Server and Windows NT. This
has been fixed in Standard Additions 1.4.2 and later.
CarbonLib 1.0.2, which is not part of Mac OS 9.0.4 but is installed with
AppleWorks 6, introduces a change to the way the Event Manager handles
idleProcs. The result is that using Script Editor 1.4.1 with
CarbonLib 1.0.2 will result in substantial delays in Apple event processing.
Script Editor 1.4.3 and later fixes this problem.
The AppleScript Web Site online documentation.
The AppleScript SDK.
Back to top
Open Transport 2.6.1
Open Transport is the networking technology for
Mac OS 9.0.4. Open Transport 2.6.1 is similar
to the Open Transport that was included in Mac OS 9
(version 2.5.2) with minor changes to improve performance
and reliability. Specific changes include:
- Open Transport TCP/IP now uses the same path MTU discovery
algorithm as versions prior to OT 2.5, which closes a loophole that could be
used by certain denial of services attacks.
- Corrected a situation that could cause excessive network traffic
(an "ARP storm") if two machines on the same network are assigned the
same IP address.
- Fixed a crashing bug when receiving empty packets on UDP port
49152. The DNR module was incorrectly handling empty packets.
- The DHCP client now runs asynchronously, so the system continues to
respond to user events while Open Transport DHCP is negotiating or
renewing a DHCP lease.
- DHCP leases with a renewal interval greater that one hour are now
- Fixed OT's interpretation of the DHCP static route option.
- The TCP/IP preferences now correctly reflects the state of a DHCP
- Improved DHCP compatibility with certain third-party ISDN routers.
- Improved memory usage when DHCP lease is renewed.
- The maximum options size (TEndpointInfo.options) for "rawip"
endpoints is now 256. Open Transport 2.5.x incorrectly reported this
value as 233.
- The kernel-logging routine "strlog" now correctly handles its
formatting string arguments. This was broken in Open Transport
- TCP/IP networking now supports the router self-assignment
configuration method implemented by some router manufacturers (for
example, Nortel and Cabletron).
- "Tuned" the TCP algorithms for better performance in common
- Changes to support the AirPort base station.
The Open Transport online documentation.
Back to top
Worldscript provides language specific text services for
the Mac OS.
- With MacsBug's
ebbe (even better bus error) command
turned on during system startup, WorldScript I will break into MacsBug
twice. This is a known problem in WorldScript I. Developers can safely
pass over this error using the "g" (go) command without any problems.
The WorldScript I online documentation.
Back to top
Acrobat version of this Note (76K).
Back to top