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!"