keith@Apple.COM (Keith Rollin) (09/14/88)
Considering the number of requests that I have recieved and seen here on the
net, I have obtained the release notes for System Disk 3.2. They look kind of
ugly, as they were formatted in MS-Word, but they should be legible. The
formatting is all munged up, and the picture/figures are missing, but there
is a lot of useful information. If you need a clearer set of documenation,
order a set from APDA.
Also, there are some references to other documents, such as ERS's for Sound
Tools and Custom Windows. I don't have those, so can't upload them. However,
they are also available from APDA.
Keith Rollin amdahl\
Developer Technical Support pyramid!sun !apple!keith
Apple Computer decwrl/
"You can do what you want to me, but leave my computer alone!"
=============================================================================
Apple IIgs System Disk 3.2
Release Notes
Contents
Operating System 2
Setup Files 3
Toolbox 3
Drivers 27
Utilities 31
Finder 31
Launcher 32
Start 32
System Utilities 32
AppleTalk Utilities 32
Chooser 32
Namer 32
Operating System
BASIC.SYSTEM v1.2
(The ProDOS AppleSoft Command Interpreter)
Bug fixes:
There were discrepancies between TOTENT, the word specifying
the number of entries in the ProDOS directory, and the actual
number of entries. This has been fixed by making the following
changes:
CATALOG in <CMDS2>, B076 changed from BEQ ENDCAT to NOP/NOP
B07C changed from BCS CCATERR to BCC
B0A1 changed from BPL to BCC
Control S on a CATALOG prematurely terminated if a subsequent
<space> was pressed. This has been fixed.
ProDOS 8 v1.6 (P8)
Bug fixes:
Previously, on occasion, the mliactiv flag was left on after
finishing an mli call. To correct this problem, and 'asl' has
been changed to an 'lsr'.
ProDOS 8 now returns "#POSNERR" if the 32 MB limit is exceeded.
"ESC" cleared from the keyboard strobe when booting on a IIc.
Interrupts are turned off during a status call.
ProDOS 16 v1.6 (ProDOS)
A number of pieces of code have been added to ProDOS 16, making
it possible to boot over an AppleTalk network.
SetUp files and DeskAccs will not be loaded if bit 15 of their
AUX_TYPE is set.
ProDOS 16 v1.6 (P16)
Get_Dir_Entry will refresh its directory buffer if it is
preceded by any other P16 call.
A call to FORMAT will now cause a switch to emulation mode
before calling the SCSI driver. Previously a call to FORMAT
caused the system to hang.
In order to be more descriptive, Get_Dir_Entry now returns End-
of-File errors ($4C) instead of End-of-Directory ($61).
If CREATE is called with an invalid pathname, it now returns
Path-Not-Found instead of File-Not-Found.
System Loader v1.6
Bug fixes:
There were several bugs which interfered with proper operation
of the Loader. These include:
% A problem in the buffering scheme which made it impossible
to load some files with large segments
% Improper alignment of a load segment with an align of
exactly $10000
% Inability to load a segment of exactly one byte
% Incorrect returns from LoaderShutDown, LoaderVersion, and
LoaderStatus (carry bit clear, accumulator non-zero)
% Subroutine Dispatcher wrote two bytes into random memory
% Loader's buffers moved during Restart without informing
the Loader
Setup Files
AppleTalk INITs v1.0
There are eight AppleTalk INIT files with System Disk 3.2. These
are:
ATINIT Contains user configuration information
ATPATCH Implements the RPM, PAP, EP, and ZIP
AppleTalk protocols. Also contains the
code needed to patch the bugs in ROM. A
list of patches in this version follows.
SPLoad Implements ASP, which allows up to eight
open network sessions at once
PFILoad Implements the ProDOS Filing Interface,
which allows ProDOS calls to be made
transparently over the network
ATStart Starts AppleTalk
ATSetup Determines if AppleTalk is active, and
loads appropriate files
ATROM Contains new code replacing ROM AppleTalk
ATResponder Registers user-name on the AppleTalk
network
Tool.Setup v2.3
The current version of Tool.Setup is actually three files,
while on previous releases it was only one. The three files are
TOOL.SETUP, TS1, and TS2. TOOL.SETUP examines the version of
the ROM to determine which of the other setup files to load. It
loads TS1 with the original ROM, and TS2 with the newer ROM.
If it finds a ROM that is not one of the first two versions, it
will load neither file. This change saves between 8 and 10
seconds of boot time.
TS1 and TS2 also contain patches to the SysBeep routine so that
if the control panel volume is zero, a SysBeep will flash the
screen border.
Toolbox
Audio Compression and Expansion Tool Set
The A.C.E. Tool Set provides a fast, reliable set of routines
for compressing and decompressing digitized sounds. For
detailed information on how to use the A.C.E. Tools, see the
A.C.E. Tools ERS which accompanies these release notes.
Control Manager v2.5
JControls are now drawn in the port of the window in which they
appear. This undoes a change introduced in version 2.1 of the
control manager.
This rule has always been true, but needs to be clarified:
Controls are drawn in the grafPort of the window that owns the
controls. This means that the appearance of the controls is
determined by the state of the window's grafPort.For example,
if the grafPort's font is changed to something other than the
system font, then text in controls will be drawn in the
window's font, not in the system font.
This also means that the grafPort cannot be left in any old
state, because the state of the grafPort will determine how
controls are drawn. For instance, if the pen mask is changed,
then controls will be drawn using the new mask. Thus, if you
are drawing in a window which has controls, make sure the
grafPort is left in the state in which you want your controls
drawn
Controls which are created by TaskMaster are drawn in the
Window Manager's port, not in a window's. Therefore, the state
of a window's grafPort will not affect controls drawn by
TaskMaster.
The font ID is saved and restored when switching to and from the
icon font.
Colors in control tables now use all four color bits in both
modes; they formerly used only bits 0 and 1 in 640 mode. There
shouldn't be any applications using color controls in 640 mode,
but for any that do the effect will be that controls will be a
different color.This change was made so that dithered colors can
be used with controls.
The barArrowBack entry in the scroll bar table was never
implemented as first intended, and is now no longer used. It was
intended to allow the arrow to be drawn with three colors: the
interior of the arrow, the arrow's outline, and the surrounding
color. Since arrows are drawn as text characters, only two
colors are possible.
The high word of the parameter passed to the draw command is now
set to zero in some cases, to help some code that did not
conform to documented requirements.
The Control Manager will preserve the current port across calls
to the Control Manager, including those that are passed through
other tools, such as the Dialog Manager.
The Control Manager now calls PenNormal before drawing controls
in a window. This may affect the state of the window's grafPort.
The Control Manager now saves and restores text mode across
calls to the Control Manager which affect standard controls.
Custom controls may still change text modes without a save and
restore.
From now on the Control Manager will not change the following
fields in the port of a window that contains controls:
bkPat background pattern
pnLoc pen location
pnSize pen size
pnMode pen mode
pnPat pen pattern
pnMask pen mask
pnVis pen visibility
fontHandle handle of current font
fontID ID of current font
fontFlags font flags
txSize text size
txFace text face
txMode text mode
spExtra value of space extra
chExtra value of char extra
fgColor foreground color
bgColor background color
When a the enclosing RECTs of radio button and check-boxes were
larger than the icons, the controls' titles were not vertically
centered. This has been fixed.
EraseControl expands the bounds RECT of certain controls before
erasing. This is because a simple button has a surrounding
border when it is drawn bold (when it is the default button),
and may have a drop shadow. These characteristics are drawn
outside the bounds RECT of the control, so EraseControl expands
the bounds RECT to erase them correctly. Formerly, EraseControl
was expanding the bounds RECT in cases where it was not
necessary. This has been fixed.
The Control Manager will now use the state of the window port to
compute the size of control bounds RECTs when creating a
control. Previously some of the state information was saved from
startup time.
The SpecialRect call was added to QD Aux to replace calls to
FrameRect and FillRect. The Control Manager now calls
SpecialRect if it is available, instead of making separate calls
to FrameRect and FillRect.
TrackControl now pushes an extra word on the stack before
calling the action procedure. This word is provided only because
some action procedures return a value where none is expected,
and should not be used by an application.
When drawing simple buttons and when drawing page regions in
scroll bars, the Control Manager was not using the outline color
from the controls' color tables. This has been fixed.
If a radio button was turned on, but was hidden, the Control
Manager would erroneously redraw it if another button in the
family was turned on. This has been fixed so that the hidden
button remains hidden instead of being redrawn as it is turned
off.
When the Control Manager called application code, such as a
custom control defProc, the call would not work if the code was
located at the first byte of a bank. This has been fixed.
Bug fixes:
TestControl will now return a zero if an invisible or inactive
control is selected.
MoveControl no longer makes invisible controls visible when
moving them.
DisposeControl returned an incorrect error code. This has been
fixed.
SetCtlTitle did not redraw the titles of radio buttons and
check-boxes. This has been fixed.
The icons for radio buttons, check-boxes, and arrows in scroll
bars were not drawn correctly if the item was not as high as the
icon to be drawn. This has been fixed.
CtlStatus, CtlVersion, and CtlBootInit now return zero in the A
register.They formerly returned non-zero values with the carry
bit clear.
HiliteControl formerly returned an incorrect error code if it
was called with a control was hilight flag was already set to
the given value. This has been fixed.
GetCtlRefCon and SetCtlRefCon formerly returned an incorrect
error code if a null handle was passed. This has been fixed.
HideControl, EraseControl and ShowControl formerly returned an
incorrect error code if the specified control was already
visible. This has been fixed.
DrawControl formerly returned an incorrect error code if the
window was visible. This has been fixed.
The grow box control now has its own color table. Formerly this
control shared the simple button default color table, which had
the effect that a hilighted size box was drawn as a single black
box. The hilighted grow box now appears as a white icon in a
black box.
Previous grow box default color table:
$0000 Black outline for box
$00F0 Not hilighted: black outline in white interior
$0000 Hilighted: black outline in black interior
New grow box default color table:
$0000 Black outline for box
$00F0 Not hilighted: black outline in white interior
$000F Hilighted: white outline in black interior
The color table for the size box control in the Apple
IIgsToolbox Reference is incorrect. The correct table follows,
with information that was omitted from the reference in
boldface:
growOutline WORD Color of size box's outline:
Bits 8-15 = zero
Bits 4-7 = outline color
Bits 0-3 = zero
growNorBack WORD Color of interior when not hilighted
Bits 8-15 = zero
Bits 4-7 = background color
Bits 0-3 = icon color
growSelBack WORD Color of interior when hilighted
Bits 8-15 = zero
Bits 4-7 = background color
Bits 0-3 = icon color
Desk Manager v2.4
Bug fixes:
SystemTask used CLI instead of SEI to access certain data with
interrupts off.
The GetNumNDAs now works correctly.
The SystemEvent call now allows CDAs to be activated while an
NDA window is active on-screen.
Dialog Manager v2.2
Bug fixes:
GetItext formerly always stored at least 3 bytes of data into
the resultPtr passed to it. This was a problem if the editline
item was only one character, because there should only be two
bytes stored: one for the length, and one for the character
itself. This has been fixed.
GetNewModalDialog no longer crashes when passed a non-zero
refcon value.
IsDialogEvent now correctly claims all window control events.
HideDITem, ShowDItem, GetDItemValue, EnableDItem and
DisableDItem no longer crash with invalid item IDs.
There was a minor problem with paramtext characters (^0 through
^3). When they were used at the end of a line, garbage
characters were appended. They will now work correctly.
Several Dialog Manager calls failed if given invalid item IDs.
This has been fixed. The calls affected are:
SetDItemValue
GetDItemType
SetDItemType
DialogStatus formerly returned a value of 'active' after the
Dialog Manager had been shut down. This has been fixed.
Certain Dialog Manager and LineEdit calls assumed that
foreground and background colors in the applicable grafPort
were correctly set. This is actually only true if other color
controls have previously been drawn. This problem has been
fixed. The affected calls are:
StatText
LongStatText
LineEdit drawing routines.
Font Manager v2.3
The current version of the Font Manager incorporates several
changes. In previous versions, FMStartUp opened each font file
in the FONTS folder, and constructed lists of information for
all available fonts. These lists contained font IDs, font
names, and so forth for every font in every file in the FONTS
folder.
The present version of the Font Manager does this same work the
first time it starts up, but caches all the information it
compiles in a file called FONT.LISTS in the FONTS folder. The
next time the Font Manager starts up, it checks all the font
files' creation and modification dates and times against the
information in FONT.LISTS. Only if it finds new font files or
other evidence of change will it compile new FONT.LISTS
information. Otherwise, it simply starts up with the
information stored in the LISTS file. In most cases, since it
doesn't have to open every font file, the Font Manager can
start up much more quickly.
New call:
$1C1B InstallWithStats
returns: none Input parameters:
desiredID: LONG
scaleWord:WORD
ResultPtr: LONG
Installs a font and returns information about that font. When
an application requests the installation of a font, the Font
Manager attempts to install the requested font, but it may not
be available. In such cases, the Font Manager will install the
closest match it can find to the requested font.
InstallWithStats installs a font just as if the application had
called InstallFont, but it returns a FontStatRec in the buffer
pointed to by ResultPtr. This record contains the ID of the
installed font, which may be different from the font requested.
It also contains the purge status the font had before it was
installed. Since purge status can be changed by installation,
this information can make it easier to restore a font's purge
status. The font's purge status may not be the same after
installation. If you need to know an installed font's purge
status, use FindFontStats.
Bug fixes:
A handle to the parameter block was not locked down at the
correct point during the call to FixFontMenu. As a result,
memory compaction caused the parameter block to move, and
invalidated the handle to the parameter block. This has been
fixed.
Handles were not being locked down during scaling routines.
This has been fixed.
Line Edit v2.1
Bug fixes:
LETextBox2 now locks its handles to prevent the allocated
blocks from being moved during the call's execution.
List Manager v2.3
The IIgs Toolbox Reference incorrectly states that a disabled
item of a list cannot be selected. In fact, a disabled item can
be selected, it simply may not be hilighted. The List Manager
provides the ability to selected disabled (un-hilighted) items
so that it is possible, for instance, to allow a user to select
a disabled menu choice as part of a help dialog. There may be
other reasons to allow a user to select a disabled item, as
well, so the List Manager will allow it.
Further clarification:
List manager definitions:
disabled: Bit 6 of the list-item's memFlag field is
set. Disabled items appear dimmed and cannot
be hilighted.
enabled: Bit 6 of the list-item's memFlagfield is
clear. Enabled items appear normal and can be
hilighted.
selected Bit 7 of the item's memFlag field is set.
This bit is set when a user clicks on the
list-item, or the item is within a range of
selected items. A selected item will only
appear hilighted if it is also enabled.
hilighted A member of a list will only appear hilighted
when it is both selected and enabled. This
means that bit 7 of the memFlag field is 1
and bit 6 is 0. A hilighted member is drawn
using the highlight colors.
Bug fixes:
The List Manager uses a custom control defProc. The Control
Manager passes a handle to this defProc for the 'record size'
operation. The List Manager was locking the passed handle, but
not checking to ensure that it was valid before using it. As a
result, changes were being written to unknown locations in
memory. This has been fixed.
The List Manager now correctly handles member record arrays
larger than 64K.
The List Manager was updating lists incorrectly when the thumb
was dragged. The number of members scrolled times the height of
the members was greater than 64K pixels. This has been fixed.
Member text is now drawn in 16 colors in both 320 and 640 mode.
MemList sometimes updated the list scroll bar incorrectly. This
has been fixed.
Memory Manager v2.1
New Call:
$2F02 RealFreeMem returns: Long
No inputs
Returns the number of bytes in memory that are free, plus the
number that could be made free by purging. FreeMem only returns
the number of bytes which are actually free, ignoring memory
which is occupied by unlocked purgeable blocks, so RealFreeMem
provides a more accurate picture of available memory.
Bug fix:
During the call SetHandleSize, if memory was compacted while
its handle was resized, and the original handle moved before
the new memory was found, and if another handle was moved into
the original handle's old location, then the data in the
resized handle was incorrect. In order to correct this problem,
the Memory Manager now dereferences the original handle after
compaction.
Menu Manager v2.1
The NewMenuBar call will now automatically set bit 31 of the
CtlOwner field in the menu bar record, if the designated
menubar is a window menu bar, and the value passed for the
window is not zero.
The menu manager's justification procedures now adjust for menu
bars in windows. Menus will be moved to the left if they would
otherwise appear to the right of the menu bar's right end.
The default menu bar has the following coordinates: top = 0;
left = 0; height = 13; width = the width of the screen.
The Menu Manager now locks menu and menu bar handles during any
call that accesses those records. This prevents the records
from being moved during accesses.
Empty menus are now drawn with the QD Aux call SpecialRect,
unless it is unavailable. In this case, the calls FillRect and
FrameRect are used.
Some Menu Manager calls to an application did not work if the
routine being called was located at the first byte of a bank.
This has been fixed.
MenuShutDown no longer returns an error if the Menu Manager has
already been shut down.
The call CalcMenuSize uses the parameters newWidth and
newHeight to compute the menu's size. These parameters may
contain the width and height of the menu, or may contain the
values $0000 or $FFFF. A value of $0000 tells CalcMenuSize to
calculate the parameter automatically. A value of $FFFF tells
it to calculate the parameter only if the current setting is
zero.
The effect of all three uses:
1) Pass the new value: The value passed will become the
menu's size. Use this method when a
specific menu size is needed.
2) Pass $0000 The size value will be automatically
computed. This is useful if menu items are
added or deleted, rendering the menu's
size incorrect. The Menu's height and
width can be automatically adjusted by
calling CalcMenuSize with newWidth and
newHeight equal to $0000.
3) Pass FFFF The width and height of a menu is zero
when it is created. FixMenuBar calls
CalcMenuSize with newWidth and newHeight
equal to $FFFF to calculate the sizes of
those menus with heights and widths of
zero.
Using SetMenuBar to change the menu bar color now changes the
dynamic default menu color table and leaves the static menu
color table unchanged. If SetMenuBar is called to change the
color of a menu which uses the default color table, then the
colors of all menu bars which use the default color table will
be changed. To change the color of a single menu bar without
affecting other menu bars, set the menu bar's CtlColor field to
a new color table.
Menu Caching
This version of the Menu Manager introduces new Menu Caching
features. Menu caching is designed to provide faster display of
menus under certain circumstances. When a menu is drawn on the
screen, the area of the screen that it covers is copied into a
buffer. Then, when the menu goes away, the contents of the
buffer is simply copied back to the screen.
In the current version of the Menu Manager, when the saved
screen image is copied back to the screen, the menu that goes
away is copied into the buffer. In other words, the Menu
Manager swaps the menu image with the screen image. That way,
the next time that menu is pulled down, the Menu Manager can
copy it from the buffer instead of drawing a new image.
Of course, if the menu image changes, for example, if an item
is disabled, or the items on the menu change, then the cached
image is inaccurate, and the Menu Manager must redraw the menu.
Nevertheless, in those cases when a menu image does not change,
the menubar will respond to the user more quickly.
Table 1
Calls that can change a menu image
CalcMenuSize CheckMItem DeleteMItem DisableMItem
EnableMItem FixMenuBar InsertMItem MenuNewRes
SetBarColors SetMenuFlag SetMItem SetMItemFlag
SetMItemMark SetMItemName SetMItemStyle
Menu caching should not increase memory requirements, since menu
images are purgeable when not displayed on the screen.
This menu caching scheme should work properly with all existing
standard menus. Custom menus, however, will have to be altered
to work correctly with menu caching. Custom menus will still
function normally, as long as they do not change the menu record
directly, they just will not be able to take advantage of the
menu caching scheme to speed up display.
Caching does not work with menus in windows, so the InsertMenu
call automatically disables caching for such menus.
Caching with custom menus
Bit 3 of the MenuFlag field in a menu record indicates whether a
menu's definition procedure knows about caching. A value of 1
indicates that the menu in question works correctly with
caching. A custom menu which uses caching must define a menu
record which sets this flag, and allocates an extra field, a
handle to the cache in which the menu image will be stored. (See
Table 2)
Table 2
Fields in a cacheable menu record
MenuID WORD
MenuWidth WORD
MenuHeight WORD
MenuProc LONG
MenuFlag BYTE ; Bit 3 = 1 to enable caching
MenuRes BYTE
FirstItem BYTE
NumOfItems BYTE
TitleWidth WORD
TitleName LONG
MenuCache LONG ; New field in cacheable menu
records
; Handle to cache
The FixMenuBar call will automatically allocate a cache for the
defined menu if the caching flag is set.
Bug fixes:
CalcMenuSize has been modified so that it takes text styles into
account when calculating the width of a menu.
Display of menu titles has been corrected so they will be
arranged properly relative to the left side of the menu bar
RECT.
The CtlOwner flag of a menu inside a window must be negative
(bit 31 must be set). This has always been true, but has been
undocumented. NewMenuBar now sets that flag if the value passed
for the window is not zero, and the menu bar is a window menu
bar.
Menus in windows can now display the Apple character (ASCII
$14).
Menus now use their outline color for lines which separate menu
items.
MIDI Tool Set
The MIDI Tool Set is a set of utilities for use with the
Musical Instrument Digital Interface data transfer protocols.
With a MIDI interface and the correct driver, the MIDI Tools
enable a developer to write applications which can control
MIDI-compatible synthesizers. For a detailed explanation of how
to use the MIDI Tools, see the MIDI Tools ERS which accompanies
these release notes.
Known bugs:
If you use the Note Sequencer with the CARD6850.MIDI driver,
either the Note Sequencer or the driver will crash, because
they step on each other's memory. This problem will be fixed
with a patch to the driver which is available from Developer
Tech Support.
Miscellaneous Tools v2.1
Bug fixes:
The SetHeartBeat call sometimes allowed heartbeat interrupts to
accidentally clear the quarter second timer interrupt.
SetHeartBeat has been patched to install a different heartbeat
interrupt routine, which should prevent this problem.
Note Sequencer v1.1
The Note Sequencer Tool Set provides numerous routines for
controlling MIDI -compatible sequencing in the Apple IIgs. For
detailed information on how to use the Note Sequencer, see the
Note Sequencer ERS which accompanies these release notes.
Known bugs:
If the Note Sequencer was not started up and Note Sequencer
calls are made, no error is returned.
If the MIDI Tools were not started up and a program calls
StartSeq specifying that it wants to use the MIDI Tools, no
error is returned, and the carry bit is not set. StartSeq will
quit, but no error is posted to explain why.
The same problem occurs if StartSeq is called specifying that
MIDI is to be used, but no output buffer has been allocated for
it. Once again, StartSeq quits, but does not return an error or
set the carry bit.
An update which fixes these bugs is available from Developer
Tech Support.
Note Synthesizer v1.2
The Note Synthesizer is a set of routines which control the
generation of musical notes and sounds on the Apple IIgs.For
detailed information on how to use the Note Synthesizer, see
the Note Synthesizer ERS which accompanies these release notes.
Print Manager v2.1
The call PrChooser has been completely redesigned. It now has a
new user interface, and supports printing over AppleTalk
zones.
Printer.Setup now saves separate settings for direct and
network connections to printers, and saves the User Name for
use on a network. Old version of the Printer.Setup file are
incompatible with these changes, so the Print Manager will
delete such files and create a new one in the correct format.
Unfortunately, the old settings and default settings are lost,
and the default settings are used to create the new setup file.
If the System disk is locked, the Print Manager will not be
able to save changes in Chooser settings, and will display a
dialog to warn the user of this fact. It will, however, save
any changes to the Chooser settings in RAM, so the new settings
will remain in effect until the current application quits.
If the Print Manager attempts to load a driver and finds that
it is missing, it will pass control to a routine that
determines what call was being made to the driver, pops the
parameters off the stack, and returns a Missing Driver error.
It will also display an alert asking the user to make sure a
printer and port driver are selected.
PMStartup no longer loads any drivers into memory. It does not
require that the Drivers folder be present, and if it is
present, does not require that there be any drivers in it.
PMStartup checks to see whether the List Manager has been
loaded. Since PrChooser uses List Manager calls, PMStartup will
load the List Manager if it has not already been loaded.
New calls:
$3413 PMUnloadDriver returns:none parameters:driver:WORD
Unloads the current port driver, printer driver, or both,
depending on the input parameter.The current driver is
determined from the settings in the Printer.Setup file. Legal
values for the driver parameter:
0 = unload both drivers
1 = unload printer driver
2= unload port driver.
The a register is zero if the call was successful. If an
illegal input parameter is passed then the error code BadParam
($1308) is returned. Any other value is an error returned by
the Loader call UserShutDown.
$3513 PMLoadDriver returns: none parameters:
driver:WORD
Loads the current printer driver, port driver, or both,
depending on the input parameter. The current driver is
determined by the settings saved in the Printer.Setup file.
Legal values for the driver parameter: 0 = load both drivers
1 = load printer driver
2= load port driver.
The a register is zero if the call was successful.If an illegal
input parameter is passed then the error code BadParam ($1308)
is returned. Any other value is an error returned by the Loader
call InitialLoad.
Bug fixes:
The Chooser will now correctly display more than twelve driver
files.
Alert messages now appear properly in 320 mode.
QuickDraw Auxiliary v2.3
New Call
$0C12 SpecialRect returns: none parameters: rectPtr
: LONG
FrameColor: WORD
FillColor: WORD
SpecialRect frames and fills a rectangle in a single call,
making separate calls to FrameRect and FillRect unnecessary.
The single call to SpecialRect is considerably faster than
separate calls to FrameRect and FillRect.
Bug fixes:
DrawPicture was formerly initializing the pen size incorrectly
when the specified picture was scaled. This has been fixed.
When a picture that contained text was recorded, the recording
feature did not work correctly, and the Font Manager was not
used to install the font. This has been fixed.
When stretching and shrinking images, CopyPixels formerly
initialized an internal error term incorrectly, causing the
left side of the image to be adjusted incorrectly, and the
right side to the image to contain garbage. This has been
fixed.
Formerly, if the source bounds RECT in PPToPort's LocInfo
parameter was smaller than the SourceRect parameter, then too
many bytes would be stored in the picture, and redrawing it
could cause a crash. This has been fixed.
The QD Aux call DrawPicture assumed that the Font Manager was
available, but the Finder calls DrawPicture without using the
Font Manager. To make this work, the font manager calls must
all look for dispatcher errors, and keep the stack clean.
SetPurgeStat failed to do this required maintenance. This has
been fixed.
QuickDraw II v2.3
Bug fix:
InsetRgn failed to create a valid region when joining two
points into one. This has been fixed.
Scrap Manager v1.3
The Scrap Manager has been updated, and will now run from ROM.
Sound Tools v2.3
The current version of the Sound Tools is required to support
the MIDI Tools, Note Synthesizer, and Note Sequencer.
The Sound Tools now return the same version number and behave
identically whether running with old or new versions of the
Apple IIgs ROM.
Further information on the Sound Tools is provided in the Sound
Tools ERS which accompanies these release notes. This ERS adds
information which was not included in the IIgs Toolbox
Reference.
A patch to FFStopSound, which was in its own file, has been
incorporated in TS2,the patch file for ROM 2.
The Sound Tools' BootInit call to initialize the RMidiInitPollS
vector ($E11DD89) has been changed to an RTL.
Bug fix:
The Sound Tools set up the data bank register incorrectly,
which caused it to write garbage into bank $00 memory. The
offending code has been removed.
The call StopSound was not switching off the sound generators.
This has been fixed.
Standard File v2.2
Standard File now uses the GetDirEntry call instead of reading
directories itself.
Bug fixes:
A common exit routine was calling DisposeHandle with a random
value, which can occasionally crash the system. This has been
fixed.
Tool Locator v2.2
The Tool Locator uses a new algorithm to load tools from disk.
It will only load tools from disk if a tool in ROM does not
have a high enough version number. The Tool Locator makes no
assumptions about what tools are in ROM and what are on the
System disk.
For every tool that is to be loaded, the Locator makes a
version call. If the version call returns an error because the
tool is not present, or the resulting version number is too
low, then the tool is loaded form the System disk.
The Tool Locator no longer unloads all RAM-based tools every
time TLShutDown is called. Instead, it returns the system to a
default state, set by a new call in the Tool
Locator,SetDefaultTPT. This call can make any collection of RAM
and ROM tools the default state. The system returns to the
default state when TLShutdown is called.
New call:
$1601 SetDefaultTPT
Sets the default Tool Pointer Table to the current TPT. Used to
permanently install a tool patch.An application should not make
this call.
Window Manager v2.2
There are numerous significant changes to the Window Manager,
notably in the definition of a Window Record. For a complete
explanation of the Window Manager's new support for custom
windows, see the Designing Your Own Windows documentation which
accompanies these release notes.
There is one known bug in Window Manager v2.2:
CloseWindow will leave the top visible window unhilighted if
an invisible window is in front of two or more visible windows
in the window list. When CloseWindow closes the top visible
window it leaves the next visible window unhilighted because
it thinks that the invisible window is the next visible
window. The problem apparently only occurs if you use
invisible windows and SendBehind.
This bug will be fixed in the future. In the meantime,here is
a work-around that will also work after the bug is fixed:
After CloseWindow, execute the following code:
pea 1 Pass TRUE to hilight
pha Space for result from FrontWindow
pha
_FrontWindow Pass front visible window to HiliteWindow
_HiliteWindow Make sure front window is hilighted.
Because HiliteWindow does nothing if a window is already
hilighted, this will work after this bug has been fixed.
If you discover other situations in which the front visible
window remains un-hilighted, this work-around should work with
them as well.
TaskMaster now brings a window to the front after dragging is
complete. TaskMaster previously brought windows to the front
before dragging.
Standard windows will now draw their titles in sixteen colors
regardless of mode.
The Grid parameter has been renamed to DragFlag. Its new
definition is detailed in Fig.1.
Figure 1
It is no longer possible to specify Grid values of 256 or 512.
Alert Windows
The new call AlertWindow (see below) can be used to create
Alerts for presenting the user with important messages. The
call does all the work of creating and displaying the window
and contents for the Alert, and returns the ID of the button
that the user chooses.
AlertWindow accepts a pointer to a string which contains its
message, and a pointer to an array of substitution strings. The
substitution strings can be any of seven standard strings (such
as "OK", "Continue", and so on) or can be specified by the
application and stored in the buffer to which the substitution-
string pointer refers.
Format of Alert String
Size Character
Character 1 is the size of the alert window. The character can
be 0-9 where:
Character Approximate max number of characters.
0 (Character followed by 4 integers that are size and
position.)
1 30
2 60
3 110
4 175
5 110
6 150
7 200
8 250
9 300
Since AlertWindow provides a limited number of standard sizes,
it is possible to create alerts which will display properly
whether the Apple IIgs is in 320 or 640 mode. It is necessary,
however, to design the text and buttons carefully in order to
make this work.
The following table shows the dimensions of the standard alert
windows. This is to give an idea of the size of each window.
Application code should not rely on the exact widths, heights,
or position of standard windows.
Character Height 320 Width 320 Height 640 Width 640
1 46 152 46 200
2 62 176 54 228
3 62 252 62 300
4 90 252 72 352
5 54 252 46 400
6 62 300 54 452
7 80 300 62 500
8 108 300 72 552
9 134 300 80 600
Icon Number
Next character is the icon number. The icon number can be 0-9
where:
0 No icon.
1 custom icon, followed by:
LONG Pointer to image data.
WORD Number of bytes image data is wide.
WORD Number of scan lines image data is high.
2 Stop icon.
3 Note icon.
4 Caution icon.
5 Disk icon.
6 Disk swap icon.
7-9 are reserved - DON'T USE THEM.
Separator Character
The next character is a separator character. The separator
can be any character you would like and cannot appear in the
message text or button strings. The separator is used to
separate the message from the first button string and each
button string from each other. For purposes of standardization
the / character might be a good choice.
Message Text
Following the separator character comes the message text. Any
characters allowed by LETextBox2 are allowed in the message
text. See "Special Characters" for additional functions of
message text. The total size of message text, after
substitution of strings is limited to 1000 characters.
Button Strings
The first character after the message termination character is
the beginning of the first button's title. The title can then
be followed with either another message termination character
and button title, or a string termination character (zero) to
end the alert string. A total of three button titles may be
included at the end of the alert string. These buttons will be
evenly spaced and centered at the bottom of the alert window.
The width of each button will be the same size and be set
according to the widest button title. The total size of
button text, after substitution of strings is limited to 80
characters.
Termination of Alert String
After the last button title is a zero (0) to end the alert
string.
Special Characters
The following special characters can be embedded in the message
text and button strings of an alert. In order to have a
special character appear in the text of a button or message,
enter it twice in the string. For example, if you want '^' to
appear in an Alert message, you must enter it in the message
string as '^^'.
^ If ^ is the first character in a button string the button
will be considered the default button. The default button is
the the button selected if the user presses the return key on
the keyboard. This button will also appear bold on the screen.
Only one button can be the default button. After the ^
character the button title must follow as in any other button.
Other special characters may also appear after the '^'. A
single ^ character in message text has no affect and is deleted
from the message.
# Substitute standard string. The # character must be
followed by an ASCII decimal number. Numbers 0-6 can be
used . 7-9 are reserved and should not be used. The standard
substitution strings are:
#0 OK
#1 Cancel
#2 Yes
#3 No
#4 Try Again
#5 Quit
#6 Continue
* Substitute given string. The * character followed by an
ASCII decimal number from 0 through 9 denotes a substitution
string to be inserted at that point. The * character and the
following number will be replaced by the corresponding string
in the specified substitution array. A pointer to the
substitution array is passed to AlertWindow. The substitution
array is defined as an array of LONG pointers where:
LONG[0] Pointer to string that will substitute for *0.
LONG[1] Pointer to string that will substitute for *1.
LONG[2] Pointer to string that will substitute for *2.
LONG[3] Pointer to string that will substitute for *3.
LONG[4] Pointer to string that will substitute for *4.
LONG[5] Pointer to string that will substitute for *5.
LONG[6] Pointer to string that will substitute for *6.
LONG[7] Pointer to string that will substitute for *7.
LONG[8] Pointer to string that will substitute for *8.
LONG[9] Pointer to string that will substitute for *9.
Substitution strings can be a C type, Pascal type, or RETURN
terminated. C type and RETURN terminated strings are selected
by passing 0 to AlertWindow as the string flag. Pascal strings
are selected by passing 1.
Elements do not need to be defined if they are not referenced
in the alert.
Here are some examples of alert strings that can be passed to
AlertWindow in APW 65816 assembler syntax.
A more complex alert string:
Window Records
The Window Record data structure has been redefined. The new
definition is illustrated below.
The wReserved field is a new data field reserved by Apple for
future expansion.
The wFrame field is illustrated below. The shaded bits in the
diagram are for use by window defProcs. The values named in the
diagram are those used by the standard document window defProc.
Unshaded bits are reserved by the Window Manager and are the
same for all windows.
Bug fixes:
GetFrameColor now works as documented.
SetDataSize was using incorrect minimum values. This has been
fixed.
Some call the Window Manager made to application code did not
work if the code was located at the first byte of a bank. For
example, the window content-drawing routine would not work in
this situation. This has been fixed.
Calling BringToFront and SelectWindow with an invisible window
no longer erases the contents of windows under the invisible
one.
The width of vertical lines in alert window frames has been
changed. The vertical lines are now 2 pixels wide instead of 3,
so that their dithered color will be the same as the content.
The manual's description of SetZoomRect is incorrect. The
correct description is:
SetZoomRect sets the fZoomed bit of the window's wFrame record
to zero. The RECT passed to SetZoomRect then becomes the
window's zoom RECT. The window's size and position when
SetZoomRect is called becomes the window's unzoomed size and
position, regardless of what the unzoomed characteristics were
before SetZoomRect was called.
The standard document window positioned the info bar one pixel
too high when created without a title bar. This has been fixed.
Correction to the Toolbox Reference:
Apple IIgs Toolbox Reference page 25-126, third line:
If wmTaskMask bit tmInfo (bit 15) = 1
should read:
If wmTaskMask bit tmInfo (bit 15) = 0
GetFirstWindow returned a pointer to the first window's Window
Record, and not to its grafPort as documented. This has been
changed so that the call now behaves as documented.
The calls FromDesk, ToDesk, and SetDeskTop have been fixed so
that they will now recompute the visRgn of every window.
When used with a window which does not have scroll bars, the
call WindNewRes will call the window's defproc to recompute
window regions. A call to SizeWindow is no longer necessary
under these circumstances.
DragRect has been fixed so that when TaskMaster calls DragWindow
(and thus, DragRect) in 640 mode, the x position will remain on
the specified Grid.
The Window Manager had some problems displaying close-boxes and
Titles, which have been fixed. Specifically, a long title
sometimes conflicted with the close box when a window was
resized to a narrow shape, and the close box was not correctly
clipped by the menubar.
New Calls:
$580E GetWindowMgrGlobals returns: LONG parameters:
none
Returns a pointer to the Window Manager global data
area.
$5A0E StartFrameDrawing returns: none parameters:
windowPtr: LONG
Sets up to draw a window frame. Should only be called
by window definition procedures. Must be balanced by a
call to EndFrameDrawing when drawing is completed.
$5B0E EndFrameDrawing returns: none parameters: none
Restores Window Manager variables after a call to
StartFrameDrawing.
$5C0E ResizeWindow returns: none parameters:
hiddenFlag: WORD
rectPtr: LONG
grafPortPtr: LONG
Moves, re-sizes, and draws the window specified by
grafPortPtr. rectPtr is a pointer to the window's
content region. hiddenFlag is a Boolean parameter. A
TRUE value specifies that portions of the window
which are covered should not be drawn. If the value is
FALSE, the entire content of the window is drawn.
$550E DrawInfoBar returns: none parameters:
grafPortPtr: LONG
Redraws the info bar of the window specified by
grafPortPtr. The method used to redraw the info bar 's
interior is the routine specified by the wInfoDefProc
field of the paramList passed to NewWindow when the
window is created. The Window Manager will
automatically clip info bar drawing to the dimensions
of the info bar , and to the visible region of the
window.
$590E AlertWindow returns: Word parameters:
stringType: Word
subStrPtr: Long
alertStrPtr: Long
Creates an alert window which displays a message pointed to by
alertStrPtr. The message can be either a C or Pascal string, as
specified by stringType. A value of 0 signifies that the
message is a C string, and a value of 1 that it is a Pascal
string. subStrPtr points to an array of substitution strings
for use with substitution characters. See the Window Manager
section "Alert Windows" for a more detailed description of the
use of Alert Windows.
Drivers
ImageWriter LQ Driver
This is a new file in System Disk 3.2. It is not a special
driver for the ImageWriter LQ, but simply allows the Apple IIgs
to find the ImageWriter LQ on an Apple Talk network. It does
not support the ImageWriter LQ's special features.
ImageWriter Driver v2.1
The ImageWriter driver has been completely re-written. It
contains faster imaging routines, determines more quickly when
no image is to be printed, and will not clear buffers which
have already been cleared. Low level routines have been
modified, restructured, and eliminated. Low level routines that
were undocumented have been removed.
The new driver incorporates faster imaging routines and faster
determination of when no image is to be printed, and does not
clear buffers which have already been cleared.
iVres now supports vertical condensed printing.
The procedure PrintCheck and its corresponding routines have
been commented out. None of the code was being used, and it
caused problems when printing to a spooler.PrintCheck sent a
query on AppleTalk to determine the configuration to the
ImageWriter it was printing to. The code then never made a PAP
read to retrieve this information (whether the printer had a
color ribbon, the printer's ID, and so forth). A spooler would
then wait for the imagewriter to do a PAP read so that it could
do a PAP write of the information form the initial query.
Bug fixes:
320 mode landscape printing was imaging too high on the page,
This has been fixed.
Insertion point and editing now work correctly in the job
dialog's FROM LineEdit box.
The driver did not update choices selected in the style dialog
and the print dialog due to internal version number
inconsistencies. This has been fixed.
The printer intermittently skipped print lines when the 'Best
Text' quality was selected. This has been fixed.
The portRect of the grafPort is now the page RECT.
Landscape mode with gaps between pages did not work correctly
with version 2.0 of the driver. This has been fixed.
The driver startup routine now initializes the serial port.
This fixes a problem in which the first control code was lost
when printing in draft mode.
The driver now has added filtering for the c cedilla character
in LLDText. This allows it to be printed in draft mode.
The driver formerly crashed if you attempted to print when the
printer was off-line or the cable was disconnected. This has
been fixed.
LaserWriter
No prep file is necessary, making this driver compatible with
all Macintosh LaserWriter drivers.
Insertion point and editing now work correctly in the job
dialog's FROM LineEdit box.
Command-F (Open-Apple-F) redirects PostScript printing to a
disk file. The resulting file contains the PostScript text for
the redirected print job. The file will be named POSTSCRIPT.GS,
and is created in the */SYSTEM/DRIVERS folder.The current
version of the LaserWriter file can print LaserWriter Plus
fonts, and supports downloading bitmap fonts. The driver now
supports printing with the following LaserWriter Plus fonts:
Font IDs (all values are decimal)
Zapf Dingbats 13
Bookman 14
Helvetica Narrow 15
Palatino 16
Zapf Chancery 18
Avant Garde 33
New Century Schoolbook 34
The LaserWriter driver can process the following PostScript
picComments:
Name Kind Size Handle
PostScriptBegin 190 0 NIL
PostScriptEnd 191 0 NIL
PostScriptHandle 192 - PSData
PostScriptFile 193 - FileName
TextIsPostScript 194 0 NIL
picComments allow a program to send PostScript commands
directly to a LaserWriter. This ability gives applications
access to the advanced capabilities of PostScript, and allows
them to create needed effects without using more general
QuickDraw II routines. A picComment must begin with
PostScriptBegin and end with PostScriptEnd.
There are three different ways to send PostScript commands to a
LaserWriter.
1) The application may pass a PostScriptHandle to the
LaserWriter. This handle identifies a buffer containing
PostScript commands in the form of ASCII data.
2) The application can pass a FileName, which points to
the pathname of a file containing PostScript commands.
3) The application can use the TextIsPostScript command
to send PostScript in the form of QuickDraw StdText calls.
The size fields of the PostScriptHandle and PostScriptFile
commands must contain the size of the data to be read.
picComments do not take the place of normal Print Manager
calls. From the point of view of the Print Manager, a
picComment is simply data sent to the printer, just like any
other data. An application should make all the Print Manager
calls normally whether it uses picComments or not.
A few rules for the use of PostScript picComments:
The LaserWriter driver does not check for PostScript errors,
so the data sent to the LaserWriter must be correct.
Always terminate PostScript text with a return character.
The transformation that the driver uses will flip text and
print it upside down on the page. Applications should set up
their own transformation matrices to serve their needs.
Never nest PostScript Begins and Ends.
Never use the LaserWriter's userdict. Instead, define a
local dictionary for you application's use.
See chapter 3 of the LaserWriter Reference Manual for examples
of how to use picComments.
The following PostScript commands can alter certain conditions
that the driver sets up for the print job. Applications should
therefore not use these calls:
exitserver
initgraphics
grestoreall
erasepage
showpage
Bug fixes:
The driver now consistently reports error conditions returned
by the printer, such as 'out of paper', or 'font not found'.
Safeguards are now provided against pixel maps whose width is
not on a byte boundary.
Printer Port Driver v1.1
Color selection escape code 5 caused problems with the
ImageWriter I. This has been fixed.
Modem Port Driver v1.2
Some files could not be printed without initializing the
printer. Code has been added to DevOpen to fix this problem.
Color selection escape code 5 caused problems with the
ImageWriter I. This has been fixed.
AppleTalk Port Driver v2.0
The AppleTalk port driver now supports printing over zones.
DevPrChanged has been modified. It now just checks whether the
AppleTalk Port has been selected in the Control Panel. If not,
it displays an alert box with the message RAppleTalk is not
selected in the Control PanelS.
DevStartup formerly accepted one parameter, which had to be a
correctly formed network name for a printer on the AppleTalk
network. The call now accepts three parameters:
% pointer to a printer name
% device name
% zone name
The call concatenates these names, leaving out any unnecessary
characters at the end of each one, to form the correct network
name.
Strings, printer names, device names, and zone names may now be
up to 31 characters long.
The auxiliary file type of the AppleTalk Port driver has been
changed from 2 to 3.
AppleTalk IWEM v1.2.1
The IWEM file has been reduced in size by removing comments and
white space.
There was a bug which occurred in graphic printing in the
ImageWriter Emulator .1.1.2 on LaserWriters with ROM versions
3.0 or higher. This has been fixed.
Line wrapping has been added to allow for long strings of data.
The ESC-S command, which is the equivalent of an ESC-G command,
did not generate graphics properly in IWEM v1.2. This has been
fixed.
AppleMIDI (drivers) v1.0
This system disk includes MIDI device drivers for the MIDI Tool
Set, the Apple MIDI Interface, and the Passport MIDI interface
card (card6850.MIDI).
Utilities
Finder 1.1
Bug Fixes:
The Finder has been altered so that its handle remains fixed
while another application is running. Formerly the Finder could
be moved during memory compaction, causing crashes.
Program Launcher v2.2
Four new tools have been added to the list of versions
retrieved.
029 Audio Compression and Expansion tools (A.C.E.)
030 Reserved for future use
031 Reserved for future use
032 MIDI Tools
Start
Start will not run the Finder unless it finds at least 375K of
free memory.
System Utilities v3.1
Numerous bugs have been fixed.
AppleTalk Utilities
Chooser v1.2
A number of bugs have been fixed.
Namer v1.2
A number of bugs have been fixed.
Bug fixes:
The device type window and the names window no longer scroll
simultaneously.
Keith Rollin amdahl\
Developer Technical Support pyramid!sun !apple!keith
Apple Computer decwrl/
"You can do what you want to me, but leave my computer alone!"