ScriptMgr Release Notes
First created on: 3/16/92 8:45:54 PM

----------------------------------------------------------•----------------------------------------------------------

3/16/92 8:46:07 PM

File: ScriptMgrROMPatch.a,22
Owner: Chris Derossi     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrUtilDate.a,13
Owner: Chris Derossi     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1017570

> Release notes for this change:

InitDateCache calls _MoveHHi on the ‘itlx’ resources before locking them, causing fragmentation of the system heap. I removed the _MoveHHi calls.

> What was tested:

I wrote a test program to call InitDateCache. InitDateCache worked, and the ‘itlx’ resources were not moved high before being locked.

----------------------------------------------------------•----------------------------------------------------------
3/30/92 8:25:48 PM

File: ScriptEqu.a,47
Owner: Peter Edberg     
Project: MainProj∫Interfaces∫AIncludes∫

File: SysTypes.r,25
Owner: Peter Edberg     
Project: MainProj∫Interfaces∫RIncludes∫

File: International.r,19
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1022875

> Release notes for this change:

(note that some files that are part of this change - Script.h, Script.p, ScriptMgrKeyGetSet.a - are being changed by other people, so this change will appear in several places in the release notes)

The KSWP resource specifies key combinations that result in a call to KeyScript with particular verbs. If the KeyScript call with a particular verb does something useful, then the corresponding key combination is stripped from the event queue. The Cmd-rightArrow key combination is supposed to set the keyboard to Roman; this is not really useful on a Roman-only system. However, the KeyScript verb used with this key combination was smRoman; unfortunately, this verb is also used to update to the current Roman keyboard, and so it cannot be ignored by KeyScript even on a Roman-only system.Thus, Cmd-rightArrow was being stripped on a Roman-only system even when it did nothing useful. This prevented the use of this key combination for its Finder function.

To solve this problem, I added another KeyScript verb, smKeyRoman. This verb also sets the keyboard to Roman, but it is ignored on a Roman-only system. Then I updated the KSWP resource to use this value instead of smRoman with the Cmd-rightArrow key combination.

Changes:
1. Added smKeyRoman to interface files: ScriptEqu.a, Script.h, Script.p.
2. Updated KSWP template in SysTypes.r to include RomanIfOthers action for KSWP (corresponds to smKeyRoman).
3. Modified KeyScript (file ScriptMgrKeyGetSet.a) to support this new verb.
4. Updated the KSWP data for the U.S. system (file International.r)


> What was tested:

Since the KeyScript change is being done by someone else, all I was able to do was build the System file with the other changes and use ResEdit to verify that the KSWP data was updated as described. Note that KeyScript will handle unimplemented verbs by doing nothing, so nothing bad will happen even if the KeyScript change does not get in.

----------------------------------------------------------•----------------------------------------------------------
4/1/92 3:35:45 PM

File: InternationalPACK.a,36
Owner: Dean Yu     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1025710

> Release notes for this change:

Make IUDatePString and IUTimePString check for nil handles passed in intlParam.  If nil is passed, 
use the default ‘itl2’ resource.

> What was tested:

Made calls to IUDatePString and IUTimePString, passing nil in intlParam, and watched the default
‘itl2’ get loaded.  When a handle is passed in intlParam, the default ‘itl2’ is not loaded.


----------------------------------------------------------•----------------------------------------------------------
4/2/92 6:04:21 PM

File: InternationalPACK.a,37
Owner: Dean Yu     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1015311

> Release notes for this change:

Teach IUGetIntl about ‘itl5’.  Change IntlMaxID to 5 so that the GetIntl routine will not bail out too
soon.


> What was tested:

Called IUGetIntl with 5 as a parameter and it successfully returned a handle to the ‘itl5’ resource.


----------------------------------------------------------•----------------------------------------------------------
4/2/92 10:10:55 PM

File: ScriptMgrExtTail.a,50
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1025998

> Release notes for this change:

This is part of a fix for some problems that showed up in TextEdit with the one-byte extension: bugs #1025998, #1025364, #1025998, #1024837

The Roman GetScript and SetScript routines are only called to handle private verbs that are not handled by the Script Manager. Since there are no private verbs for Roman, all these routines need to do is clean up the stack and return the appropriate value (0 for GetScript, smBadVerb for SetScript). They used to do this by calling the unimplemented routine handler, which assumed the Script Mgr selector was on the stack (this implementation also resulted in SetScript returning noErr instead of smBadVerb for these bad verbs).

These routines can now get called from the one-byte extension; when this happens, the one-byte extension has replaced the selector on the stack with a ScriptRecord pointer. So, the Roman implementations of these routines have been changed so that they do not depend on having the selector on the stack; a byproduct is that SetScript will return the correct error code for bad verbs.


> What was tested:

Pasted the updated ptch 27 containing this fix into Cube 36++, ran the GetSetTest program for SetScript and GetScript. Used MacsBug to step through SetScript and GetScript for a negative (invalid) verb to make sure they handled it correctly, returned the correct values, and that the stack was balanced.

----------------------------------------------------------•----------------------------------------------------------
4/6/92 12:07:37 PM

File: ScriptMgrKbdMenu.a,34
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1024274

> Release notes for this change:

General cleanup & review of code to clean up potential bugs. I believe a number of the 
bugs that I could not reproduce have gone away as a result of this cleanup. Removed 
hardcoding of “About Keyboards…” added in <33> when the resource isn’t available. 
Now getting “About Keyboards…” using GetIndString (really my local version of it 
that creates a pString); removed unnecessary code. Stack frame template item “oldJIMCount”
was added in <32> but is used simply for a test rather than for a count, so now setting
a bit “HaveOldJapanIMbit” in CJKcount instead. No longer testing for existance of 
component mgr (it exists). Fixed bug in AddMenuItem where old-style IM itemRsrcID was 
getting written to script word instead of language word of scriptLangRec. In AddMenuItem,  
need to call SetScript with secret script flag ‘kUsingOldInputMethodVerb’ when
old-style IM becomes the default (after call to InformTSM). In RebuildKeybdMenu,
the equ for frame size was above the local variable menuH, so the link 
instruction wasn’t actually grabbing enough stack space. Fixed now; 
been around since the routines inception. (also, probably the writing to 0 bug: 1024274).

> What was tested:

The keyboard menu should be initialized correctly with all KCHRs and input methods in the system for all enabled script systems.  It is important to test this with different configurations that include WorldScript1, WorldScript2, old-style Japanese input methods, TSM-style input methods (for Japanese AND (Korean or Chinese)), and KCHRs.  Different combinations of these items should be tested for correctness.  Also, it’s important to test the menu when input methods are not available for an enabled 2-byte script system; in this case, the KCHRs should show in the menu.  The keyboard menu should be rebuilt correctly with all KCHRs and input methods in the system for all enabled script systems when it gets rebuilt after a keyboard layout is removed from the system file.  It’s also useful to compare the keyboard menu items to the items in the keyboard control panel.

----------------------------------------------------------•----------------------------------------------------------
4/6/92 12:49:41 PM

File: ScriptMgrKeyGetSet.a,32
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1024484

> Release notes for this change:

General cleanup & review of code to clean up potential bugs. I believe a number of the 
bugs that I could not reproduce have gone away as a result of this cleanup. These include 
#1022196 & #1024484. (If you’d like an exhaustive list of bugs I couldn’t reproduce that may have been affected by this code please call me.)  Fixed change <28> the right way: must get 
the system script’s default menu item # from the script record; can’t assume it’s #3 since
this is guaranteed to be in the system script if the About Keyboards… menu item exists but
isn’t necessarily the default. This fix takes care of the case that the About Keyboards 
menu item might not exist! Made routine UpdateInputMethods into a proc that’s exported so
that ptchSystemMenu in ScriptMgrSysMenuPatch.a can use it. Also needed to generalize it a bit so 
that it applies when switching from either KCHRs or IMs to IMs (used to be IM -> IM only).

Also added a new KeyScript verb, smKeyRoman, that sets the keyboard script to Roman only 
if multiple scripts are installed; otherwise, it does nothing, and the corresponding KSWP
key combination is not stripped from the event queue.




> What was tested:

Switching between KCHRs and both old-style and TSM-style input methods should be thoroughly
tested in different system configurations that include WorldScript1, WorldScript2, 
old-style Japanese input methods, TSM-style input methods (for Japanese AND (Korean or 
Chinese)), and KCHRs. Different combinations of these items should be tested for 
correctness. It’s also useful to compare the keyboard menu to the keyboard control panel whenever switching between scripts and items within scripts. The command-key equivalents for switching between scripts (command-space bar) and switching between input items within a script 
(command-option-space bar) should update the menu and the menu bar correctly. 
Now when there’s a problem getting the default input method for a 2-byte script system 
(this would occur if the keyboard menu initialization code was unable to set a default ID
in the script record, though this should be a rare occurance) or there’s a problem getting 
the default keyboard layout for any other script (actually, this scenario should never 
occur), the keyboard menu should correctly select the default menu item for the primary 
script. Before now, it always selected menu item #3 which would be the first menu item of
the primary script which may not be the default item. This problem could appear while 
switching among scripts using command-key equivalents or if an application made an 
explicit script switch (by calling KeyScript with a specific script code). Its also 
important to test the new KeyScript verb (smKeyRoman) by using the command-key equivalents
command-right arrow and command-left arrow to be sure the right thing happens. If multiple
scripts are installed, command-right arrow should set the keyboard script to Roman (command-
left arrow set the keyboard script to the system script). In the case of a Roman-only system,
the current application will get the event.

----------------------------------------------------------•----------------------------------------------------------
4/6/92 12:57:25 PM

File: ScriptMgrSysMenuPatch.a,24
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1022196

> Release notes for this change:

General cleanup & review of code to clean up potential bugs. I believe a number of the bugs that I could not reproduce have gone away as a result of this cleanup. These include #1022196 & #1024484. (If you’d like an exhaustive list of bugs I couldn’t reproduce that may have been affected by this code please call me.)  In ptchSystemMenu, fixed branch from old-style IMs code so that they didn’t write the FEP ID into the itlbKeys field.  Instead they branch to @UpdateKbdDriver. Had to also move call to utSetTextServiceLanguage below @UpdateKbdDriver so that it would still be called. Replaced a huge chunk of code that was duplicated here from ScriptMgrKeyGetSet.a with a call to UpdateInputMethods which is now imported. It has been generalized to handle the case when a user switches from a keyboard layout to an input method (used to only support switching from IM -> IM).

> What was tested:

Switching between KCHRs and both old-style and TSM-style input methods should be thoroughly
tested in different system configurations that include WorldScript1, WorldScript2, 
old-style Japanese input methods, TSM-style input methods (for Japanese AND (Korean or 
Chinese)), and KCHRs. Different combinations of these items should be tested for 
correctness. It’s also useful to compare the keyboard menu to the keyboard control panel whenever switching between scripts and items within scripts. Using the mouse (versus keyboard equivalents) to select the desired input mechanism (either a KCHR or input method) should update the menu and the menu bar correctly. 


----------------------------------------------------------•----------------------------------------------------------
4/8/92 12:27:41 PM

File: Sys.r,303
Owner: Peter Edberg     
Project: MainProj∫Make∫

File: Kbd.r,16
Owner: Peter Edberg     
Project: MainProj∫OS∫Keyboard∫

File: International.r,20
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1026586

> Release notes for this change:

We made some changes in the standard U.S. KCHR from System 6.0.7 to System 7 to allow entry of more characters and improve consistency in some option-shift key handling (we made similar changes from 6.0.3 to 6.0.4). However, some specialized fonts (and occasionally some apps) had some dependencies on the old System 6.0.7 keyboard layout. This is really their problem (they should NEVER depend on a particular key layout; if they do, they should supply their own). However, we are getting slammed for it from time to time in various articles and bulletin boards.

We can solve most of the problem by just adding the old layout as another choice for U.S. users; then makers of these fonts could tell their users to select the old layout in the Keyboard Control Panel (some vendors are already supplying the old layout as a keyboard icon to drag in). The old layout has been added with the name “U.S. - System 6.0.7” and an icon tentatively consisting of the U.S. flag with a boxed ‘6’ in the lower right side. The KCHR adds 1422 bytes to the system file, and the icons add 192 bytes, but the KCHR will not take additional system heap space (since only one KCHR is resident at a time).

Installer note: Need to install KCHR (16383), kcs# (16383), kcs4 (16383). These are NOT needed for Disk Tools or any other minimum system.

User interface note: Need design input for keyboard icon.


> What was tested:

Full build. Pasted new KCHR and icons into Cube-E 36++ System file and rebooted. Verified that icon displays correctly in monochrome and 4bit/8bit color settings, in both Keyboard menu and Keyboard Control Panel. Verified that old keyboard could be selected in both. Compared new KCHR 16383 with KCHR 0 from System 6.0.7 to verify byte-for-byte identity.

----------------------------------------------------------•----------------------------------------------------------
4/8/92 12:35:17 PM

File: ScriptMgrKeyGetSet.a,34
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1026741

> Release notes for this change:

We changed the Script Mgr dispatcher so that it puts the ScriptRecord pointer in a0 when dispatching to a script; the one-byte extension now depends on this for Cube-E. Unfortunately, we missed one place: The Script Mgr GetScript and SetScript routines can also jump directly to a script, but they did not set up a0; this was causing a crash when GetScript or SetScript were called with private (negative) verbs for scripts handled by the one-byte extension. The Script Mgr GetScript and SetScript routines now set up a0 when dispatching to the script version of these routines.

> What was tested:

Full build. Pasted relevant ‘ptch’ files into Cube-E 36++ and rebooted. Used MacsBug to step through code for GetScript/SetScript calls with negative verbs, verified that a0 was set up correctly.

----------------------------------------------------------•----------------------------------------------------------
4/8/92 12:43:06 PM

File: ScriptMgrExtTail.a,51
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1025369

> Release notes for this change:

Holding down Opt-e disables all non-Roman scripts. Holding down Shift disables all Extensions, including most scripts. However, scripts that were supported by the Script Mgr directly (as simple scripts) were not disabled by Shift (since they were not extensions); this was confusing. Examples include Greek (before the d10 version), which is what this bug was reported against, and Cyrilliuc (d10 and beyond).

The Script Mgr has now been modified to not load simple scripts if Shift is down. This should be tested with d10 Cyrillic (which is now a simple script), not Greek (which is now handled by the one-byte extension).

> What was tested:

Full build. Pasted relevant ptch resources into a Cube-E 36++ system with many scripts, including d10 Cyrillic. Before this change, Shift disabled all but Cyrillic; after the change, Shift disabled Cyrillic too.

----------------------------------------------------------•----------------------------------------------------------
4/8/92 4:29:29 PM

File: RomanUtil.a,16
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrROMPatch.a,23
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1026515

> Release notes for this change:

FindWord can use default tables in the itl2 resource, or developers can pass in a pointer to their own routine. In the latter case, FindWord will not handle the developer tables (it will bail) if the itl2 resource has an older format, even though the itl2 format is not relevant if a developer passes their own tables. Note that developers can provide their own itl2 resources as well which may be in an old format. This is more important to fix now because the one-byte extension will call the Roman FindWord routine to handle all developer tables (even for non-Roman systems), and in the non-Roman world it is more likely developer itl2s will be in an old format.

Fixing this basically just involved moving a few lines to an earlier part of the code. Fixing this for the IIci and Portable ROMs involved splitting an older patch for FindWord and CharType into two separate patches.


> What was tested:

Full build; paste relevant ptch files into Cube-E 36++ and reboot. Use FindTest and CharTest test programs to test Roman CharType and FindWord, using MacsBug to step through code and verify correct operation, stack balance, etc. For FindWord, called it with a pointer to an old-style itl2 table and followed the code path.

----------------------------------------------------------•----------------------------------------------------------
4/8/92 4:56:40 PM

File: ScriptMgrKbdMenu.a,35
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1026904

> Release notes for this change:

The keyboard menu would sometimes not display the About Keyboards… menu item and would instead load the first keyboard layout or input method for the primary script in its place.  However, when using the mouse to select this menu item you still get the About Keyboards… dialog.  The problem is that the resource that contains this menu item string is getting purged so no About menu item could be displayed.  There’s also another problem in that the dialog should not display in this case.  (This will be addressed in another bug report).  A quick solution is to guarantee that this resource is loaded by setting ResLoad to true around the call to localGetIndString which fetches the ‘About Keyboards…’ string.  I also changed the localGetIndString code to test the dereferenced handle and to do a LoadResource if the handle was empty (for correctness). This removes the dependency on ResLoad being true.

> What was tested:

I set ResLoad to true and this solved the problem.  To test the LoadResource code, I added a call to _MaxMem (for debugging only) at the beginning of the localGetIndString routine to force all purgeable resources in the System to be purged.  This caused _GetResource to return an empty string; since I now test for this scenario, I do a _LoadResource call to get the data I need, and complete the fetching of the sting.  All worked correctly.

----------------------------------------------------------•----------------------------------------------------------
4/10/92 7:08:43 PM

File: ScriptMgrExtTail.a,52
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1026778

> Release notes for this change:

FindWord can now be called from the Roman script dispatcher (normal case) or directly
from the one-byte extension (to handle old-format break tables). In the former case, d2
contains a script code, and FindWord has depended on this to get the correct itl2
resource. In the latter case (new with Cube-E), however, d2 will NOT contain a script
code. So, we must change FindWord to get script code information a different way. When
FindWord is called from the one-byte extension, the ScriptRecord pointer WILL be on the
stack (in place of the old selector). So, we can make three changes that will solve this
problem:
1. Put the script code into the ScriptRecord at boot time (this change).
2. Change the Roman dispatcher to put the ScriptRecord pointer on the stack in place of
the selector (like the one-byte extension does).
3. Change FindWord to get its script code from the field in the ScriptRecord instead of
from d2.

This file change implements only change #1; I have to check it in now because Sue needs
the file. Changes #2 and #2 will be checked in later (with the same bug number).

> What was tested:

Build System with this change. Paste ScriptMgr ptch resources from this new System into
Cube-E 36++ (on IIci and SE). Verify (with MacsBug) that script code is placed in correct
place in ScriptRecord at boot.
----------------------------------------------------------•----------------------------------------------------------
4/10/92 8:33:33 PM

File: ScriptPriv.a,64
Owner: Susan M. Bartalo     
Project: MainProj∫Internal∫Asm∫

File: ScriptMgrExtTail.a,53
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrKeyGetSet.a,35
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrSysMenuPatch.a,25
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1026551

> Release notes for this change:

Added a patch to DrawMenuBar to disable the keyboard appropriately for the state of the current application’s scriptDisableKybds flag.  Also modified KeyScript for disabling/enabling the keyboard menu items to now use the byte information in the application-specific
globals instead of the script manager record. 

#1026911:  Fixed the bug that assumed item #1 was always the About Keyboards… item and hence displayed the dialog. Not a good thing if it was actually a KCHR or input method.  Now if an iconSuiteH does not exist for item #1 then I know it’s About Keyboards.  Also, for KeyScript calls to enable/disable the About Keyboards menu item, must be sure item #1 is this menu item.


> What was tested:

Tested the patch to DrawMenuBar with the new Finder, the new Map cdev (both for CubeE 40) and an application that’s unaware of the application-specific globals.  The default state of the scriptDisableKybds flag in the globals is “enable”, so any application that doesn’t explicitly disable the keyboard menu will have all enabled scripts’ keyboard layouts available for use.  This prevents us from breaking multi-script applications that do the right thing already and it means that other applications are not any worse off than before: when they enter text from a keyboard not in the System or Roman script, they will just see garbage characters.

The Finder now only makes a KeyScript call to disable the keyboard menu items not in the System script or Roman at init time and then brackets control panel activate/deactivate events with KeyScript enable/disable keyboard menu item calls.  Also, Map cdev makes a KeyScript disable call.  So, I tried switching between the Finder, the Map cdev, and the application (in different order permutations) and the keyboard menu is now correctly updated to  represent the desired state for each process.

----------------------------------------------------------•----------------------------------------------------------
4/14/92 11:56:25 AM

File: RomanNewJust.a,22
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: RomanUtil.a,17
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrROMPatch.a,24
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1026778

> Release notes for this change:

The Roman script routines can actually be used for other scripts as well, when simple
scripts are being handled by the Script Manager’s auto-initialization process. Some of
these routines need to know what script they are handling, in order to get the correct
itl2 resource. In Bruges, this was done by having the Script Mgr dispatcher pass a script
code in the high word of d2, which was used by these routines.

In Cube-E, the one-byte extension can also call certain Roman routines directly. However,
it does not have the scriupt code in d2; instead, it has a ScriptRecord pointer on the
stack in place of the selector.

To accomodate this, several changes were made:
1. A scriptID field was defined in the ScriptRecord for keeping the script code of the
script (file ScriptPriv.a, already checked in, and ScriptPriv.h, to be checked in later
since it is not immediately necessary)
2. The InitScripts routine was modified to set this field (file ScriptMgrExtTail.a,
already checked in)
3. The Roman dispatcher was changed to put the ScriptRecord pointer passed in a0 (by the
ScriptMgr dispatcher) on the stack inplace of the selector, which is no longer needed at
this point.
4. The stack frames of the Roman routines were changed to refer to the ScriptRecord
pointer instead of the selector (this is just documentation, since none of the routines
used the selector), and the stack rearrangement code for PortionText, DrawJust,
Char2Pixel, Pixel2Char, and MeasureJust was updated to preserve the selector.
5. The Roman FindWord, CharType and Transliterate routines were changed to get the script
code for itl2 from the scriptID field of the ScriptRecord whose pointer is on the stack,
instead of getting this script code from d2.

> What was tested:

Paste ScriptMgr ptch files with these changes into CubeE 41, restart. Using test programs
CaseTest (for Transliterate), FindTest (FindWord), and CharTest(CharType), step through
code in MacsBug to make sure it is doing the right thing. Do this on both a IIci and an
SE. Also step through stack rearrangement code for PortionText, DrawJust, MeasureJust,
Char2Pixel, Pixel2Char to make sure it is working correctly.
----------------------------------------------------------•----------------------------------------------------------
4/15/92 1:22:07 PM

File: InternationalPACK.a,39
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1023781

> Release notes for this change:

A previous change (#1025710) attempted to fix the problem that IUDatePString and
IUTimePString would crash if intlParam was NIL. In the case of NIL intlParam, the fix
attempted to obtain a handle to the default resource. However, it obtained the handle to
the wrong type of resource! It used itl2 (which has nothing to do with date or time
formatsd), instead of itl0 or itl1 as appropriate. The code is now fixed to supply the
handle to the correct resource. It now also calls LoadResource if intlParam contains a
handle to an unloaded resource.


> What was tested:

Full build; paste updated PACK 6 into Cube-E 41 abd reboot. Wrote and ran a test program
to call IUDatePString and IUTimePString with NIL intlParam values; stepped through code
with MacsBug to verify correct operation. Tested on IIci and SE.

----------------------------------------------------------•----------------------------------------------------------
4/15/92 7:37:24 PM

File: Sys.r,306
Owner: Peter Edberg     
Project: MainProj∫Make∫

File: International.r,21
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1026910

> Release notes for this change:

If the kcs8 resources contain the same colors as the kcs4 resources, there is no reason
to have them; if a kcs8 resource is not present, a kcs4 resource will be used for screen
depths of 4-bit and above. So, I deleted the two kcs8 resources in the System file,
saving 512 bytes.

Note: Affects installer script.

> What was tested:

Full system build, verified that kcs8 resource were gone. Deleted kcs8 resources in
Cube-E 41, verified that keyboard icons still display properly.
----------------------------------------------------------•----------------------------------------------------------
4/17/92 5:04:14 PM

File: SysPrivateEqu.a,56
Owner: Peter Edberg     
Project: MainProj∫Internal∫Asm∫

File: ExpandMemPriv.h,34
Owner: Peter Edberg     
Project: MainProj∫Internal∫C∫

File: InternationalPACK.a,40
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1027387

> Release notes for this change:

Routines in the International Utilities Package - PACK 6 - sometimes call traps that move
memory. Before they do this, they are supposed to call the internal LockIt routine; if
they PACK is not already locked, this routine locks it and sets the Boolean
emItlNeedUnlock to indicate this. All routines that call LockIt are supposed to exit
through the internal routine UnlockIt, which unlocks the PACK if emItlNeedUnlock is true.

This gets tricky when one PACK 6 routine does a JSR to another. When the second routine
exits to the first routine, it would call UnlockIt, thus prematurely unlocking the
package. Before System 7, there was only one PACK 6 routine - IUGetIntl - which could be
called internally as well as externally. The unlocking problem was handled by having
separate internal and external entry points; the external entry point set a Boolean
emDirectGetIntl, and if this Boolean was not true, IUGetIntl would skip the call to
UnlockIt at exit.

System 7 changes to PACK 6 resulted in:
(1) Multiple levels of internal calls between routines (especially for Type Select), so
that keeping track of the desired lock state got hopelessly muddled, and there were
premature unlocks resulting from internal calls that unlocked PACK 6 before returning to
another PACK 6 routine.
(2) Some sorting routines not calling LockIt before calling a trap that moved memory.
(3) Some sorting routines not calling UnlockIt before exiting in certain situations.

(1) and (2) resulted in crashes. (3) resulted in PACK 6 becoming locked and staying
locked. This was the problem that the 7up fix tried to address. Unfortunately, the 7up
fixed removed the test for emDirectGetIntl at the end of IUGetIntl, which resulted in
PACK 6 becoming prematurely unlocked when GetIntl was called internally from another PACK
6 routine.

The use of emDirectGetIntl was not a good way to keep track of desired lock state anyway.
I have revamped the locking mechanism. emDirectGetIntl is renamed to emDontUnlockYet, and
is a count. This value is incremented before one PACK 6 routine makes a call to another,
and is decremented afterward. UnlockIt only unlocks the PACK if emDontUnlockYet is 0.

I also fixed the missing LockIt and UnlockIt calls.

These changes fix
- crashes resulting from PACK 6 being unlocked when calling a trap that moves memory
- problems with PACK 6 becoming locked.
It is still possible for an app to lock PACK 6; in this case PACK 6 will remain locked
until the app unlocks it. This is necessary behavior, so that apps can call PACK 6 at
interrupt time.


> What was tested:

Full build, then pasted new PACK 6 into Cube-E 41 and rebooted. Checked that PACK 6 no
longer got locked in places where it used to. Stepped through TypeSelect code (most
heavily nested internal calls) to verify proper increment/decrement of
emItlDontUnlockYet, and to verify proper lock/unlock. Wrote a test program to lock PACK
6, call some PACK 6 routines, unlock it, then call some more; verified that it was locked
when it should be and unlocked when it should be. Tried on both IIci and SE.
----------------------------------------------------------•----------------------------------------------------------
4/22/92 12:12:26 AM

File: RomanUtil.a,18
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrExtTail.a,54
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrInit.a,26
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrROMPatch.a,25
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1027368

> Release notes for this change:

Currently the Roman CharType uses a standard table format in the itl2 resource. The
one-byte extension uses a special format; it needs to be converted to use the standard
format. However, by making the Roman CharType handle the character direction bit in the
bidirectional script itl2 CharType tables, we can avoid rewriting the One-byte CharType
routine and instead just have the one-byte extension use the Roman CharType (less coding
for one-byte extension).

If the script is not bidirectional, the Roman CharType code continues to use 3 bits in
the itl2 CharType table value for the character sub-type; otherwise, it uses 2 bits and
the extra bit is for direction (same format currently used in the bidi script CharType
tables).

> What was tested:

Pasted updated Script Mgr ptch resources into Cube-E 41 & rebooted. Ran a CharType test
program, stepped through CharType with MacsBug, faked various values from CharType table
and verified correct code behavior. Tried on both IIci and SE.
----------------------------------------------------------•----------------------------------------------------------
4/22/92 3:19:42 AM

File: InternationalPACK.a,41
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrExtTail.a,55
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1026767

> Release notes for this change:

In System 7 and earlier versions of Cube-E, the Script Mgr was caching handles to the
itl2 and itl4 resources for each enabled script. There is a system cache, and each
application has its own cache which is initialized from the system cache when the app is
launched. An app can flush the cache, change the default itl2/4 ID for a script, and then
any further operations by that app requiring an itl2 or itl4 will use the ID that it
specified (or use an itl2 or itl4 resource in the application itself). Because each app
has its own cache, whatever it does will not affect other apps.

Caching handles to itl2 and itl4 resources is a problem if we allow removal of scripts,
or if we allow replacement of script resources by moving in a script bundle that replaces
an existing one. When this happens, existing handles to itl2 and itl4 resources may
become invalid.

So, with these changes we stop caching the handles. However, now we make sure to cache
the IDs and make use of the cached IDs, so that we can still keep applications from
affecting one another with a SetScript call to change the default itl2 or itl4 ID for a
script. What they need to do to use their own itl2/4 is still exactly as documented in
Inside Mac VI, just the implmentation is different.
The fact that the Script Mgr caches handles to itl2 and itl4 resources causes problems
when updating scripts by moving script bundles into the System Folder that replace
existing script bundles. The replaced itl2 and itl4 resources will be moved out, so that
cached handles to them are no longer valid. Could cause crashes, etc. Script Mgr should
stoip caching these handles.

Apr 22 1992 12:22AM Peter Edberg:
However, we need to continue caching IDs to keep applications in

> What was tested:

Pasted updated PACK 6 into CubeE 41, reboot. Use MacsBug to step through cache
initialization code at boot to verify proper operation. After boot, call sorting test
programs and step through code with MacsBug to verify propoer operation. Check running
system periodically to make sure that cache contents are as expected. Do this on Mac IIci
and SE.
----------------------------------------------------------•----------------------------------------------------------
4/22/92 12:03:45 PM

File: ScriptMgrKeyGetSet.a,36
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1027747

> Release notes for this change:

The Script Manager calls KeyScript during boot (after all scripts are initialized) to force the keyboard to the system script’s default keyboard. However, this is before there is a keyboard menu and before application globals are initialized, so one of the changes in a6 to use the application globals for determining the state of the keyboard menu (disabled/enabled) broke this.  Since the system script’s ‘KCHR’ resource is never installed, ‘KCHR’ (0) was being used instead.  So, the keyboard menu was built correctly and the icon of the primary script’s default ‘KCHR’ or input method was correct in the menu bar and was selected (checked) in the menu, however, the actual mapping of this layout was the ‘KCHR’ (0).

A manifestation of this bug, as an example, was that option-clear no longer worked correctly for the Korean input method.  If Korean was the primary script and the system had just been booted and no keyboard menu update occured (ie - the menu was not pulled down nor were command keys used to select a different keyboard layout), the characters in the input window were not cleared.   The Korean KCHR generates a special character for option-clear.  However, in this case, after booting with Korean as primary, the default keyboard is U.S., not Korean, so this character does not get generated. Switching keyboards in the menu fixes this by setting keyboards properly.

A similar bug is written up against this (1027747) and this re-introduced bug #1022196.

The fix in the code (in CheckKbd) involves branching to a different place (SetKybd) if the application globals aren’t initialized rather than exiting.  This ensures that the system script’s default KCHR is  
loaded at boot and thereby overwriting KCHR (0) as the default.


> What was tested:

I installed the Script Manager patch in my system and verified that option-clear now works correctly for the Korean system.  I also verified that the keyboard layout was correct in KeyCaps for different primary scripts.

----------------------------------------------------------•----------------------------------------------------------
4/23/92 3:12:32 AM

File: ScriptMgrKeyGetSet.a,37
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1025355

> Release notes for this change:

The code was not needed to do one more check when searching for the menu item that corresponded to the default input type for the script.  It needed to compare the menu item’s type to the script’s default input type and if they were the same, THEN test if the ID was the same.  If the ID matched, this was the item that should be selected in the menu.

> What was tested:

I stepped through the code when both an old-style input method and a TSM-style input method were selected as the current input for Japanese.  I also used the Keyboard Cdev and Keyboard menu to verify that the right thing was happening (see the bug report for an example of something to test).

----------------------------------------------------------•----------------------------------------------------------
5/8/92 8:26:58 PM

File: ScriptPriv.h,24
Owner: Peter Edberg     
Project: MainProj∫Internal∫C∫

File: ScriptMgrExtensions.a,3
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrFindWord.c,5
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1029395

> Release notes for this change:

The Roman FindScriptRun routine also handles other simple scripts such as Cyrillic. To do
this, FindScriptRun needs to figure out which characters are part of a Roman run or a
script run. The simple-minded table that it uses to figure this out did not work
correctly for “shared” characters like punctuation, spaces, etc. That is, a run of
Cyrillic letters and spaces should all be considered a Cyrillic run, while a run of Roman
letters and spaces should all be considered a Roman run; the old table forced spaces to
always be considered as only Cyrillic or only Roman.

This affects apps that use this call to separate Roman from other scripts when pasting
text from an “unstyled” window (like Teach Text or Key Caps) into a styled document like
a word processor.

To fix this, the Roman system will use a more sophisticated version of FindScriptRun that
uses a state table. It will still handle the old format as well. The state table can
handle both one-byte and two-byte characters, so it can be called from other non-simple
scripts. This will permit fixing of FindScriptRun problems in both the one-byte and
two-byte systems (see bugs #1025880, #1028131).


> What was tested:

Run pkeFindScriptTest program to call FindScriptRun for Roman font, Cyrillic font using
old-format table, and Cyrillic font using new-format state table. Step through with
MacsBug to verify expected sequence of operations, check stack balancing and register
saving. Try sequences of Cyrillic, space, and Roman to verify that space is associated
with surrounding context. Do this on both IIci and SE.
----------------------------------------------------------•----------------------------------------------------------
5/10/92 10:43:26 PM

File: ScriptPriv.a,66
Owner: Susan M. Bartalo     
Project: MainProj∫Internal∫Asm∫

File: ScriptMgrExtTail.a,59
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrKeyGetSet.a,40
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrSysMenuPatch.a,27
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1026551

> Release notes for this change:

Added support for new private verb, smKeySynchKbdMenuState: the code to support it, SynchKbdMenuState, disables the keyboard menu appropriately for the state of the current application’s smgrAppDisableKybds flag. It is currently only called from Menu Mgr’s DrawMenuBar routine (the SE/Plus patch version (!) and the ROM version of the code).

This code was added in a8 as a patch to DrawMenuBar but it wasn’t working on an SE/Plus machines.  (This was evident because when an application was the current process the keyboard menu should be completely enabled but instead, only the keyboard layouts or input methods in the System script or Roman script were available.)  The problem was that since SMgr is installed
before link patches and MenuMgr is a linked patch for the SE/Plus, our patch was
getting overwritten when MenuMgr was installed.  So, I added the private KeyScript verb and now Menu Mgr calls KeyScript with this verb.
 
Removed patch to DrawMenuBar from ScriptMgrSysMenuPatch.a and ScriptMgrExtTail.a (the installation code)

> What was tested:

We tested this with an Init of the Menu Mgr and a new ‘ptch’ (27) (Script Manager).  Now when an application is the current process the keyboard menu is completely enabled on an SE and Plus.  Switching between the Finder, control panels, and applications always leaves the keyboard menu in the appropriate state for each of these processes

----------------------------------------------------------•----------------------------------------------------------
5/12/92 12:42:38 AM

File: ScriptMgrKbdMenu.a,36
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1026017

> Release notes for this change:

#1026017 Removed code that error exited if ‘kcs4’ is not available. If ‘kcs4’ icon is not available will simply use ‘kcs#’ icon. Also, added the default input method icon to the system file and updated the System 6 U.S. keyboard icons to reflect Paula Z.’s updates to the icons.  Also removed the ‘…’ from the About Keyboards strings (the name of the first menu item in the Keyboard Menu and in the dialog that displays when selecting this menu item).

#1029051, 1029243, 1024274  Also, fixed stupid code in RebuildKeybdMenu that causes rebuilding of menu d.s. to crash when a menu isn’t available. Had moved some code into the routine in change <20> that used a menuH but this doesn’t exist when the menu isn’t available!


> What was tested:

Tested to see that the correct icon is used when a ‘kcs8’ or ‘kcs4’ icon is not available for a keyboard layout or input method for an enabled script.  Also, tested to see that the correct default input method or keyboard layout icon was used when these ‘kcs8’ or ‘kcs4’ icons are not available.

Tested that the RebuildKeybdMenu code now does the correct thing (doesn’t crash!) when the Finder moves a keyboard layout or script bundle into or out of the System file for a system that does and does not have a Keyboard menu.

----------------------------------------------------------•----------------------------------------------------------
5/14/92 1:10:12 PM

File: ScriptMgrFindWord.c,6
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1015333

> Release notes for this change:

Size optimization for itl2 FindWord/FindScriptRun tables for two-byte scripts. Until now,
there was no way to say that all of the characters with high-byte x were class m, while
all the characters with high-byte y were class n; it was only possible to specify one
type of class for all rows that did not use subtables. For Korean, this required using
separate 256-byte subtables for jamo and Hangul rows, leading to lots of wasted space.

This change permits specification of multiple classes based on high-byte only. If the
field that used to specify the class for all rows without subtables is negative (cannot
be a class!), it is negated and used as an offset to another table of class values based
on first byte only. A flag of -1 in the first-byte table specifies the first entry into
this table, -3 specifies the second, etc. (even values were already used to specify
subtables).


> What was tested:

Create Korean itl2 table in this new optimized format, and test it using word selection
with new FindWord code.
----------------------------------------------------------•----------------------------------------------------------
5/14/92 1:39:03 PM

File: ScriptPriv.a,67
Owner: Peter Edberg     
Project: MainProj∫Internal∫Asm∫

File: ScriptMgrDispatch.a,16
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrExtensions.a,4
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1029395

> Release notes for this change:

This is a continuation of changes related to bug fix #1029395. In the first version of
those changes, we made the Roman version of FindScriptRun able to handle spaces and
punctuation correctly (e.g. contextually) by using a slightly modified version of
FindWord to process a new state table format. This version was also intended to be usable
by WorldScript 1 and WorldScript 2. However, handling the new-format FindScriptRun in the
Roman system was awkward and would have lead to duplication of code in Roman and the
WorldScripts.

Instead, we have moved the check for new-format FindScriptRun tables into the Script
Manager dispatcher. If such a table exists, the Script Manager will handle it directly
withouth dispatching to the script (this is also consistent with teh way FindWord works).
Otherwise, it will dispatch to the script, which need not worry about handling new-format
tables.

> What was tested:

Patched code into Cube-E a8, tried  with Roman and new Cyrillic tables on IIci (ROM
Script Mgr & 68030) and SE (68000, RAM Script Mgr) using pkeFindScriptTest test program
and walking through with MacsBug.
----------------------------------------------------------•----------------------------------------------------------
5/14/92 1:49:49 PM

File: InternationalPACK.a,43
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1028868

> Release notes for this change:

Some routines in the International Utilities are called to get resources explicitly:
IUGetIntl, IUGetItlTable. Others get resources implicitly: IUMagString, IUTextOrder, etc.
For the latter routines, a caller might not realize that setting ResLoad false could
cause problems. In fact, setting ResLoad false and then calling IUMagString (for example)
causes a crash.

To fix this, I have done the following: For calls that implicitly load resources, PACK 6
will save the current value of ResLoad, set it to true in order to load the resource, and
then restore it to its original value at exit.

If ResLoad is false when IUGetIntl is called, I presume that the caller must not have
intended to load the resource; this is like setting ResLoad false and calling
GetResource. So in this case, GetIntl will NOT load the resource, even if it returns a
valid handle.

If ResLoad is false when IUGetItlTable is called, I also do not load the resource.
However, in this case we cannot get the necessary offsets and lengths without loading the
resource, so it returns a nil handle and 0 for offset and length (at least it does not
crash).

> What was tested:

Paste updated PACK 6 into Cube-E a8 on Mac IIci and SE, test resource loading.
----------------------------------------------------------•----------------------------------------------------------
5/14/92 4:53:45 PM

File: ScriptPriv.a,68
Owner: Peter Edberg     
Project: MainProj∫Internal∫Asm∫

File: ScriptPriv.h,25
Owner: Peter Edberg     
Project: MainProj∫Internal∫C∫

File: ScriptMgrDispatch.a,17
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrExtTail.a,60
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrInit.a,28
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1027061

> Release notes for this change:

Added private ScriptToRange routine that returns the resource ID range for a script. The
interfaces are in ScriptPriv.a and ScriptPriv.h.

struct ScriptRange {
    short min;
    short max;
};
typedef struct ScriptRange ScriptRange;

pascal ScriptRange ScriptToRange(ScriptCode script);

Given a ScriptCode, this returns a structure containing the min and max ID range. For
Roman, this is 0 and 16383; for Japanese it is 16384 and 16895. This is needed because
several parts of the system need to know this range (e.g. Mover). Currently they
hard-code the formula that defines this range. This works for existing scripts, but for
future scripts we may not be able to continue using the same mapping formula, so these
components need to call a function that returns the range instead.


> What was tested:

Paste update ptch resources into Cube-E a8 on IIci and SE. Call this routine for Roman
and several other scripts. Verify correct results, stack balance, etc.
----------------------------------------------------------•----------------------------------------------------------
5/18/92 6:09:02 PM

File: ScriptMgrExtensions.a,5
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1028382

> Release notes for this change:

Before, if a script had no fonts but did have an itlb resource (e.g. user drags in script
bundle but no fonts), we would enable the script, but it would not work properly. Now, if
a script has no fonts, it will not be enabled. In addition, if the script’s specified
system font is not present but it does have other fonts, we will do the following: if its
application font is present, use that; else search for the first FOND in the script’s
range, and use that as its system font.

> What was tested:

Patched change into Cube-E 47 on IIci and SE. Installed several scripts. Removed Cyrillic
system and app fonts, leaving only another font. Booted, walked through code with MacsBug
to verify proper operation.
----------------------------------------------------------•----------------------------------------------------------
5/19/92 9:54:50 AM

File: ScriptPriv.a,69
Owner: Peter Edberg     
Project: MainProj∫Internal∫Asm∫

File: ScriptPriv.h,26
Owner: Peter Edberg     
Project: MainProj∫Internal∫C∫

File: ScriptMgrDispatch.a,18
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrExtTail.a,61
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrInit.a,29
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1030321

> Release notes for this change:

Need for Cube-E: The new ScriptMgr FindScriptRun code is normally invoked automatically
if new-format tables are present in a script’s itl2 resource. However, the one-byte
extension FindScriptRun also needs to make a direct call to the Script Manager’s new
FindScriptRun code. To do this, we need to add another private selector, and private
interfaces in ScriptPriv.a and ScriptPriv.h for the NFindScriptRun routine, which has the
same interface as FindScriptRun with an additional parameter which is a pointer to a
new-format FindScriptTable.

> What was tested:

Paste updated Script Mgr resources into Cube-E 47 (on IIci and SE). Use FindScriptRun
test program with Cyrillic primary; use MacsBug to alter parameters on stack to simulate
NFindScriptRun call and verify proper operation. Run a few other Script Mgr test programs
to verify that dispatch table is still correct for other routines.
----------------------------------------------------------•----------------------------------------------------------
5/20/92 10:55:07 PM

File: ScriptMgrKeyGetSet.a,41
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1019369

> Release notes for this change:

Update handling of the GetEnvirons smKeyDisableState verb to use the new lock state
maintained in the application script globals (smgrAppDisableKybds field), instead of the
value in the obsolete smgrDisableKybds field of the SMgrRecord.

There is a byte field that maintains the state of keyboard locking (all keyboards enabled
as in KeyCaps, or only Roman & system script enabled as in Finder). Originally, this was
a global value kept in the smgrDisableKybds field of the SMgrRecord. To solve some
problems in application interaction, we added a smKeyDisableState verb for
GetEnvirons/SetEnvirons to access this field (orig bug #1019369). This mechanism was
insufficient, so in Cube-E a6 we began keeping the lock state on an application-specific
basis in the smgrAppDisableKybds field of the application script globals. However, we
never updated the handling of the GetEnvirons verb to get the state from this new
location. This caused problems with Standard File in applications that had keyboards
locked: Standard FIle would call GetEnvirons to get the lock state; GetEnvirons would
incorrectly return that keyboards were unlocked; so when exiting, Standard File would
call KeyScript to enable all keyboards, thinking that it was restoring the original
state.

The handling of this verb is now fixed so GetEnvirons gets the correct value. SetEnvirons
is not changed, since we don’t really want it to change the lock state; this should only
be done using KeyScript. Calling SetEnvirons with the smKeyDisableState verb just writes
a harmless value into a now-ignored field in the SMgrRecord.


> What was tested:

Paste updated ScriptMgr resources into Cube-E 47 on IIci and SE (68030 and 68000, Script
Mgr in ROM and RAM). Call Standard File in TeachText and use MacsBug to walk through
GetEnvirons call with smKeyDisableState verb to verify correct operation. Modify
TeachText by calling KeyScript(smKeyDisableKybds) before DrawMenuBar to disable
non-system keyboards, then using Standard File and verifying that keyboards are still
disabled afterwards (before the fix, all keyboards would be enabled after the Standard
File call).
----------------------------------------------------------•----------------------------------------------------------
6/1/92 1:08:01 AM

File: InternationalPACK.a,44
Owner: Dean Yu     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1028868

> Release notes for this change:

The previous change only turns on ResLoad (if it’s false) for calls to GetIntl made
internally.  This isn’t enough.  There are some cases where an external call to GetIntl
will fail and crash because ResLoad is false, and it’s not turned on before getting an
‘itlx’ resource.  Get rid of the check to see if the call to GetIntl is made from an
internal call, and always turn on ResLoad before getting an ‘itlx’ resource.


> What was tested:

Launching MoviePlayer with a full system heap (QuickTime, script systems, other random
extensions, etc.) will crash inside of ‘PACK’ 6 in the GetIntl routine after a call to
LoadResource because it assumed that the ‘itl2’ resource loaded successfully, which is
not the case, since ResLoad is off.  This change always turns on ResLoad, so that the
‘itlx’ resource will always loaded, fulfulling the code’s assumption about the state of
the world, so the crash doesn’t occur.
----------------------------------------------------------•----------------------------------------------------------
6/2/92 10:01:40 AM

File: InternationalPACK.a,45
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1028868

> Release notes for this change:

IUGetIntl *should* be sensitive to ResLoad if it is called directly (by analogy to
GetResource). However, when it saves, tests, sets, and restores ResLoad, it should do it
as a byte value.

For an internal (e.g. from MagString) or external call, it should return a NIL handle if
ResErr is set after the GetResource or LoadResource. This will prevent crashes in low
memory situations.



> What was tested:

Paste into Cube-E a10 on IIci and SE. TEst with Sound Cdev (previously crashing); walk
through code with MacsBug, etc.
----------------------------------------------------------•----------------------------------------------------------
6/4/92 6:16:50 PM

File: ScriptMgrSysMenuPatch.a,28
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1031618

> Release notes for this change:

DrawMenuBar uncovered an old bug when I added the private KeyScript verb (smKeySynchKbdMenuState) in the last checkin.  Register d4 was getting trashed because it was saved on the stack and then it got romped on. When it got restored it was trashed.  In DisableKeyboardItems, I was stomping on a word of the stack (which was where I was saving d4) by using the stack address for a VAR parameter. Fixed this bugger by correctly pushing some stack space for the VAR parameter before passing the address. 

> What was tested:

I added a breakpoint to the code and stepped through the troubled area and all is well with the code now.

----------------------------------------------------------•----------------------------------------------------------
6/5/92 8:13:55 PM

File: ScriptMgrExtensions.a,7
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1031797

> Release notes for this change:

There must be a user-documented way to remove secondary scripts once they have been added
to a system. We considered making a Finder change that would permit this, but the BRB
decided this was too risky. So, we have added a new startup key combination that prevents
the enabling of all secondary scripts other than Roman. This key combination is
Option+Space with no other modifier keys down (except that Caps Lock is ignored).

If this key combination is used at startup, script systems can still initialize
themselves and put a ScriptRecord pointer in the smgrEntry field of the SMgrRecord, but
the script will not be enabled - just as if its itlb resource was missing.

> What was tested:

Pasted updated Script Mgr ptch 27 resource into Cube-E a10 on IIci, SE, Mac Plus. Tried
booting with Option-Space with both Roman primary and a non-Roman script primary, with
multiple auxiliary scripts in both cases. Option-Space always disabled all scripts except
Roman and the primary script, and then the other scripts could be removed with Mover.

A special test case was the midget (128K/512K) keyboard on the Mac Plus. The ISO version
of this keyboard has a special keycode for space. If this keyboard is used, then the user
specifies that it is the “international” Mac Plus keyboard using the keyboard control
panel.
----------------------------------------------------------•----------------------------------------------------------
6/5/92 9:50:35 PM

File: ScriptMgrKeyGetSet.a,42
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrSysMenuPatch.a,29
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1029675

> Release notes for this change:

If a user selected VJE input method, its floating input window would appear.  Then when a user selected a Roman keyboard layout, the floating window remained visible although it should have disappeared.  Then if a user selected Akiko input method, its floating window would appear as expected but now two input windows were visible at the same time.  This bug was fixed in the Keyboard Menu code.  An existing routine, UpdateInputMethods, will now be called for a new scenario: when switching from an old-style input method to a keyboard layout (KCHR).  This will correctly deactivate the old-style input method which will then remove the input window from the screen.  This call will be made whenever a user changes the keyboard whether it’s done using command key equivalents (via the _KeyScript routine) or by selecting a new menu item in the menu  (via the _SystemMenu routine).

> What was tested:

Using both command key equivalents and the mouse to change the keyboard, I tested to be sure that the input method’s input windows were appropriately deactivated, activated and behaved correctly.  I used VJE, SJip, and Akiko for my input methods. I switched from keyboard layouts to input methods and vice versa, and I tested all permutations of switching between old-style input methods, TSM-style input methods, and keyboard layouts.  All works correctly!

----------------------------------------------------------•----------------------------------------------------------
6/17/92 11:28:53 AM

File: RomanITL2.a,14
Owner: Hani Abdelazim     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1020127

> Release notes for this change:

Changed the character “¢” to be mapped to a postNum class, it used to be mapped to a preNum class. So now, clicking on a numeric run followed by ¢, would select the whole run as one word. This will affect applications that call the script manager’s N/FindWord routines. This chanage affects only the Roman itl2 resource.

> What was tested:

Clicking on a document by TeachText containing numeric run followed by ¢ in different orders.

----------------------------------------------------------•----------------------------------------------------------
6/17/92 12:55:59 PM

File: ScriptPriv.a,71
Owner: Susan M. Bartalo     
Project: MainProj∫Internal∫Asm∫

File: Sys.r,319
Owner: Susan M. Bartalo     
Project: MainProj∫Make∫

File: International.r,25
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrSysMenuPatch.a,30
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1024950

> Release notes for this change:

Updated the About Keyboards dialog to mention input methods (as well as keyboard layouts) when a 2-byte script is installed.  Am now using my routine localGetIndString (exported from ScriptMgrKbdMenu.a) and ParamText to fetch and display the strings for the dialog.  Replaced NameString stack frame variable with kbdMenuString1and kbdMenuString2 in order to more easily localize the About Keyboards dialog strings (and to use localGetIndString).

Some minor changes to International.r include:
Since now using ParamText for About Keyboards dialog items, I added new STR# resources for each of the DITLs. Added a new DITL for the About Keyboards dialog to mention input methods (as well as keyboard layouts) when a 2-byte script is installed.  Updated all About Keyboards dialog items with Instructional Products suggestions.

Added different default input method icons (again), a different default keyboard layout icon that is smaller and more rounded in appearance than the previous icon, and updated the US-System 6 keyboard icons as well.   

> What was tested:

Verified that the correct About Keyboards dialog appeared in different system configurations.  There are three different dialogs: a short one that appears for a Roman-only system configuration, a two paragraph dialog that appears for a multi-script configuration that includes a double-byte script, and a two paragraph dialog that appears for a multi-script configuration that only includes one-byte scripts.

Also verified that the correct icons are displaying per the above changes:
• a different default IM icon is used (this one has an arrow through the keyboard and the arrow is on the diagonal pointing from the lower left corner of the icon to the upper left corner),
• a smaller and more rounded default keyboard layout icon (it still looks like a keyboard), and
• a slightly modified US-System 6 keyboard icon

I will try to create a data base (after this deadline) of our changed icons so the icons can be verified as the current icons.

----------------------------------------------------------•----------------------------------------------------------
6/17/92 1:00:43 PM

File: ScriptMgrExtensions.a,8
Owner: Hani Abdelazim     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrExtTail.a,62
Owner: Hani Abdelazim     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrInit.a,32
Owner: Hani Abdelazim     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrUtilText.a,10
Owner: Hani Abdelazim     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1029756

> Release notes for this change:

Fixed StyledLineBreak to do things in the right order which is, finding the CR first and then pass the possiblly smaller buffer to NPixel2Char, to find how much of the text buffer would fit in the line Pixel width. Also removed some obsolete code, and we don’t need to call TextWidth to get the remaining width ( in case the whole buffer fits in the line pix width) since NPixel2Char is doing this for us. This required a lot of shuffling between four files. The routine was originally in ScriptMgrUtilText.a (ptch 4) and now it is in ScriptMgrExtensions.a (ptch 27). I needed to make changes in ScriptMgrInit.a (ptch 4) so this file will stuff a dummy entry for StyledLineBreak and I changed ScriptMgrExtTail.a to stuff the real vector of StyledLineBreak.

for bug #1032724 : <YS> a register D1 was not initialized properly in CharType routine (ScriptMagrExtensions.a) and was causing the routine to return wrong results when the offset to the character is > 256.

> What was tested:

Script manager test tools for bug #1029756. For #1932724 we made sure that CharType is returning consisten results.

----------------------------------------------------------•----------------------------------------------------------
6/17/92 1:57:51 PM

File: ScriptMgrKbdMenu.a,38
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1030826

> Release notes for this change:

Check if an old-style input method is “ready” before installing it.  If it’s not ready, I am updating the IM count and total input method count appropriately.  I also made a change (per John Harvey) to use the name of the old-style input method stored in the resource (intfName variable) rather than the name of the file that contained the input method (intfFile).  This will display the JIM in Japanese rather than Roman text.


> What was tested:

Tested this with an old-style input method whose “ready” bit was 0.  I verified it by seeing that the input method was not included in the keyboard menu.  I also verified that the correct name of a JIM is now being used in the keyboard menu by noting that SJip no longer is named “SJip” in the menu but, instead, displays as 2.1xxxx where xxxx are Japanese characters that can’t display in this document! 

----------------------------------------------------------•----------------------------------------------------------
6/17/92 2:22:27 PM

File: ScriptMgrKeyGetSet.a,44
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1006394

> Release notes for this change:

Per technote #160, a developer may call SetScript (once with smScriptKeys and once with smScriptIcon) and KeyScript to change the default keyboard layout.  (This assumes s/he had
already added the KCHR and icon resources to the System file.)  Calling SetScript to update the ‘itlb’ to point to this new KCHR still works but calling KeyScript w/ the KCHR’s script no longer sets the KCHR as the active KCHR since the keyboard menu doesn’t include it yet. (this broke in System 7)  The problem is that the keyboard menu needs to be rebuilt to incorporate this keyboard layout that was added to the system and which is now desired by the application.  We have a private ScriptUtilcall to do this, _RebuildKeybdMenu, which currently is only called by the Mover. 
It is now called in KeyScript when the verb is smKeyRoman, smKeySysScript, 
smKeySwapScript, or when an explicit script code is specified.  Once the menu is rebuild, we re-search the menu for the desired KCHR.  If the keyboard layout is not found, the menu will default to the system script’s current keyboard layout rather than display a trashed icon. 

• #1031491:  When switching from an application using an old-style IM to the Finder using a keyboard layout, we will now correctly deactivate the old-style IM before making the keyboard layout active. I initially attempted to fix this for B2 or B3, but I have now added a specific test for this scenario (switching from old-style IM to a KCHR) in CheckKybd in order for the code changes to be utilized.  I believe that this fix will also take care of bug #1032630 where multiple check marks will show up in the keyboard menu, but I have not been able to easily reproduce this bug so that I can verify it.


> What was tested:

For the first bug (1006394), I added a mocked-up KCHR and kcs icon suite (ID 500) to the active system file and modified the Roman ‘itlb’ to use this ID for the script’s default KCHR ID and icon suite ID (all of this done using that sensitive tool, ResEdit). I then used the command-key sequence Cmd-Right arrow to generate a KeyScript call (to force the keyscript to Roman).  I changed the verb received (”-18”) to be “0” for Roman script, stepped through the initial code to be sure the correct branching occured as a result of this change, then let it run through the rebuilding code.  The result of all of this is that the keyboard menu was rebuilt to include my mocked-up KCHR and it was displaying in the menu bar as the current keyboard layout.  Voilá!  (This could be done more easily by following TechNote #160 and adding the SetScript and KeyScript calls to a DTS sample program such as TESample, but when I tried to do this my system crashed during the make so I decided not to waste more time trying to write an application when I could trace the sources!)

For the second bug, I followed the steps in the bug to switch from using an old-style input method to using a keyboard layout and my code changes correctly deactivated the old-style input method.  When this is followed with the use of Akiko, the user will no longer have both input methods’ input windows open.

----------------------------------------------------------•----------------------------------------------------------
6/18/92 3:03:11 PM

File: ScriptMgrKbdMenu.a,39     
Owner: Chris Derossi     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1030826

> Release notes for this change:

The previous change to see if an IM is ready before installing it would break if there
were no input methods. This was due to the fact that register d5 was getting initialized
AFTER the check for input methods.

I moved the initialization of d5 to the beginning of the procedure.

> What was tested:

None. Submitted immediately to SCM for the build.
----------------------------------------------------------•----------------------------------------------------------
6/22/92 8:12:10 PM

File: ScriptMgrExtensions.a,9     
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1032408

> Release notes for this change:

Fix the setting of the Script Mgr smgrBidirect and smgrDoubleByte globals.

Early in the boot-time InitScripts routine, the Script Mgr was checking the scriptRedraw
field of each script’s ScriptRecord and setting the smgrBidirect and smgrDoubleByte
globals based on the scriptRedraw values. However, to fix some other problems,
WorldScript I was recently changed so that it does not set the scriptRedraw field for its
scripts until late in InitScripts, when its ScriptAvail vector is called. Thus, the
smgrBidirect global was not getting set even though bidirectional scripts were installed.
One consequence of this was that the Text Control Panel would not display the panels with
settings for line direction and force font even when Arabic or Hebrew were installed.

The solution was to move the code that checks scriptRedraw and sets smgrBidirect to be
near the end of InitScripts, after WorldScript I sets up scriptRedraw.

> What was tested:

Paste updated Script Mgr resources into Cube-E b6 + WorldScript I a12 on SE. Use MacsBug
to ste through boot code and verify proper operation. Verify that Text Control Panel
displays correct panels when Arabic is present.
----------------------------------------------------------•----------------------------------------------------------
6/23/92 1:44:56 PM

File: ScriptEqu.a,52
Owner: Susan M. Bartalo     
Project: MainProj∫Interfaces∫AIncludes∫

File: International.r,26
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: TextEdit.a,45
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫TextEdit∫

File: TextEditPatchIIciROM.a,46
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫TextEdit∫

Radar bug: #1029263

> Release notes for this change:

<csd> Now determining whether to synchronize the font and keyboard for unstyled text by
checking the script’s ‘itlb’ flags word. A new bit has been defined ‘smsfSynchUnstyledTE’; the 
default is 0 which means do not synchronize and 1 (obviously) means synchronize.  This allows
each script system to determine when they want to synchronize their keyboard and font, and it 
removes the special casing script knowledge from TextEdit.

The script systems that currently want to synchronize include:
Roman, Cyrillic, Arabic, Hebrew

The script systems that currently do NOT want to synchronize include:
Eastern European (Hungarian, Czechoslovakia, Poland), Thai, Japanese, Korean, Chinese, Korean


> What was tested:

Using TeachText and MacDraw 1.9.5, I tested if the keyboard synchronized to the font.  I modified 
the Roman and Hebrew ‘itlb’ to be set correctly (for synchronization) and then I tested on a system 
that included Roman, Hebrew, Thai and Japanese.  I made each of these the system script using 
ScriptSwitcher and the expected synchronization behavior was exhibited.


----------------------------------------------------------•----------------------------------------------------------
6/26/92 2:36:05 PM

File: ScriptPriv.a,72
Owner: Susan M. Bartalo     
Project: MainProj∫Internal∫Asm∫

File: ScriptMgrKbdMenu.a,40
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1033660

> Release notes for this change:

Actually there are two problems here: no Simplified Chinese input methods should have appeared in 
the menu since the component flags value for Simplified Chinese IMs was incorrectly set.  The fact 
that one appeared is a result of some other code that did not take into account that there might be 
TSM-style IMs installed for scripts that are not enabled and/or that the compiled count of IMs (done
on a script basis) may not account for these additional IMs.  Besides fixing the first problem (which 
will alleviate this bug) by changing the value of the equate, I have added code that now counts all of 
the TSM components installed and then, if this number is larger than the compiled total count, it 
uses this grand total instead and other existing code discriminates on what should be in the menu  
based on which scripts are enabled.


> What was tested:

All installed TSM-style input methods now appear in the keyboard menu including Simplified Chinese input methods. Also, if a script is removed but its TSM-style input methods remain in the Extensions folder, the correct input methods appear in the menu for the enabled scripts.

----------------------------------------------------------•----------------------------------------------------------
6/30/92 8:26:34 PM

File: ScriptMgrKeyGetSet.a,45     
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrSysMenuPatch.a,31     
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: ##1033475, #1030903

> Release notes for this change:

Changed the input method updating model per different specifications by TSM. The most
important part of this change was to no longer deactivate an old-style input method when
switching to a KCHR or a TSM-style input method in another script. This guarantees that
if the old-style IM was the default IM for Japanese, then it would still be activated
when a user switched back to the Japanese script for input.  However, when activating a
TSM-style IM, must now check if the default is currently set to old-style and deactivate
this one before activating the TSM-style IM.  All switching between TSM-style input
methods, old-style Japanese input methods and keyboard layouts should leave the menu in a
correct state and the current input method or keyboard layout should be the only active
one available to the user.

There was also a problem in TSM that showed up whenever you switched from any old-style
IM (not just SJIP) to Akiko and then back again. When the keyboard menu code made a
SetDefaultInputMethod call to tell TSM that the IM had changed from an old-style JIM to a
TSM-style JIM, TSM needed to make it’s secret SetScript call that said it was no longer
using an old-style JIM.  TSM does this now.


> What was tested:

Tested different switching configurations: there is a 3x3 matrix that should be tested to
guarantee correct behavior:  switching KCHR => KCHR, TSM-style IM => KCHR, old-style JIM
=> KCHR, old-style JIM => old-style JIM, KCHR => old-style JIM, TSM-style IM => old-style
JIM, TSM-style IM => TSM-style IM, KCHR => TSM-style IM and, finally, old-style JIM =>
TSM-style IM!  It’s also important to test this matrix using different scripts and same
scripts when switching amongst the different types of inputs.

----------------------------------------------------------•----------------------------------------------------------
7/6/92 11:55:49 AM

File: ScriptMgrExtensions.a,10     
Owner: Hani Abdelazim     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: ##1034403

> Release notes for this change:

Fixed a bug in StyledLineBreak that was introduced with my last modification to this
routine. The bug was causing a line to break incorrectly, if it has more than one format
run and the line ends with carriage return. Under these conditions StyledLineBreak was
returing an offset from StartEnd and not from the begining of the text buffer. Now I made
sure to return the offset from the begining of the text buffer passed to styledLineBreak.

> What was tested:

Tested the documents where the problem happens, also used applications that use
StyledText Edit.
----------------------------------------------------------•----------------------------------------------------------
7/8/92 6:38:07 PM

File: RomanNewJust.a,24     
Owner: Hani Abdelazim     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1035313

> Release notes for this change:

Fixed (N)Char2Pixel to return consistent results with N(MeasureJust). The problem is
that, C2P uses StdTxMeas to measure which returns only a integer value, but MJ was
walking through the width tables directly, so, if fractenable is on, they would measure
differently. The fix: when we call StdTxMeas we get the fixed value from fontAdj field
form QD globals, this fixed the problem.

> What was tested:

Used Script Manager testing tools and TTT tool.
----------------------------------------------------------•----------------------------------------------------------
7/15/92 7:39:14 PM

File: ScriptMgrKeyGetSet.a,47     
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: ##1035923, #1033475 (revisitied)

> Release notes for this change:

Wasn’t correctly deactivating old-style Japanese IM before going to a TSM-style Japanese
IM.  The old-style JIM was left activated when the user switched to another script.  When
the user then switched back to Japanese and selected a TSM-style IM, the code must
deactivate the old-style JIM before activating the TSM-style JIM.  Herein lies the
problem: instead of passing the ID of this old-style JIM to deactivate it, I was using
the ID of the current input which in this case is a KCHR ID since the user actually
switched from a Roman KCHR to a TSM-style IM (deactivating the old-style JIM is a
necessary secondary action that occurs). Now I get the ID of the old-style JIM from the
component ptr returned from _GetDefaultInputMethod and pass this to deactivate it.


> What was tested:

Verified that given the user steps the old-style JIM is deactivated appropriately.
----------------------------------------------------------•----------------------------------------------------------
7/30/92 12:49:28 PM

File: ScriptMgrKeyGetSet.a,49     
Owner: Susan M. Bartalo     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1037480

> Release notes for this change:

Akiko may not be useable in low-memory conditions, so if a user picks it from the
keyboard menu, the current keyboard layout or input method will remain active.  Once the
KeyScript code has detected that Akiko can’t be loaded, it tries to restore the current
menu item number as the active item but in doing so the byte identifying the item number
was being pushed onto the stack in the wrong position. This has been fixed.

This will be included in the f2c1 build that will probably occur early in the week during
the first week of August.

> What was tested:

Tested under low memory conditions and the same bug cannot be reproduced.
----------------------------------------------------------•----------------------------------------------------------
8/4/92 3:10:57 PM

File: ScriptMgrKeyGetSet.a,50     
Owner: Kenny S. Tung     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: TSMInternalUtils.c,45     
Owner: Kenny S. Tung     
Project: MainProj∫Toolbox∫TextServicesMgr∫

File: TSMUtility.c,59     
Owner: Kenny S. Tung     
Project: MainProj∫Toolbox∫TextServicesMgr∫

Radar bug: #1038311

> Release notes for this change:

<Hani A.>: Undo the previous fix and now set up application’s a5 in KeyScript() routine.
Also clear the menu handle kept in TSM global when the last instance is closed.

> What was tested:

The previous fix does not call FixTSMDocument(), now it does. You can see it with a TSM
aware application. Also TSMChat does not crash with this fix.
----------------------------------------------------------•----------------------------------------------------------
8/14/92 8:06:34 PM

File: ScriptMgrKeyGetSet.a,52     
Owner: John Harvey     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: #1039719,1039768

> Release notes for this change:

AppleShare log on dialogs were crashing when the user tried to type a password at boot
time.  The problem was that we had put code in to get the front application’s A5 before
calling SetTextServiceLanguage, and this code included calls to OSDispatch.  When
OSDispatch was called before the process manager was around of course the system crashed.

The fix was to check for the process manager in before calling OSDispatch.  If the
process manager isn’t around we skip the A5 saving stuff since there won’t be any
applications running if there isn’t any process manager.

> What was tested:

Build a new ptch 27 (where keyscript lives) replaced the ptch 27 that Rubiks a17 had.
Ran rubiks with a fileshare volume that was supposed to mount on boot, and required a
password.  When the password came up I typed it in successfully.
----------------------------------------------------------•----------------------------------------------------------
11/17/92 8:58:15 PM

File: ScriptPriv.a,74     
Owner: Peter Edberg     
Project: MainProj∫Internal∫Asm∫

File: ROMObj.Make,126     
Owner: Peter Edberg     
Project: MainProj∫Make∫

File: SysObj.Make,488     
Owner: Peter Edberg     
Project: MainProj∫Make∫

File: itl4Roman.a,12     
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: RomanITL2.a,15     
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

File: ScriptMgrUtilText.a,11     
Owner: Peter Edberg     
Project: MainProj∫Toolbox∫ScriptMgr∫

Radar bug: 

> Release notes for this change:

Create a new file IntlResourcespriv.a, which can be given to localizers and script
developers (along with RomanItl2.a and itl4Roman.a) to build itl2 and itl4 resources.
Move the macros for building itl2 from the itl2 source into IntlResourcespriv.a to avoid
unnecessary duplication in each itl2. Move the equates used for IntlTokenize code in
ScriptMgrUtilText.a and itl4Roman.a from ScriptPriv.a into IntlResourcespriv.a; these are
separated out from ScriptPriv.a because the other stuff in ScriptPriv.a should not be
distributed and is not neeeded in order to build itl4 resources.

> What was tested:

Build, then do resequal on before and after System files.
----------------------------------------------------------•----------------------------------------------------------
