mac-rom/Internal/Asm/TSMPrivate.a
Elliot Nunn 4325cdcc78 Bring in CubeE sources
Resource forks are included only for .rsrc files. These are DeRezzed into their data fork. 'ckid' resources, from the Projector VCS, are not included.

The Tools directory, containing mostly junk, is also excluded.
2017-12-26 09:52:23 +08:00

394 lines
16 KiB
Plaintext

;
; File: TSMPrivate.a
;
; Contains: TSM private definitions.
;
; Written by: Kenny SC. Tung
;
; Copyright: © 1991-1992 by Apple Computer, Inc., all rights reserved.
;
; Change History (most recent first):
;
; <32> 8/4/92 DCL Moved InformTSM out of the public eye and into TSMPrivate.
; <31> 7/28/92 DCL Moving applicationFloatKind & systemFloatKind constants out of
; the public eye and into the private Layers header file. At the
; request of TechPubs, and with assistance from Dean, Greg and
; Kenny.
; <30> 7/16/92 KST #1034952 <Kda>: Added one new patchMask bit constant --
; kTSMEventBeenCalled.
; <29> 6/26/92 KST Just added a line of comment.
; <28> 6/26/92 KST #1033450,1033456,1031316 <JH>: Added a new mask bit
; 'kInTSMPopUpMenuSelectCall" for tsmPatchFlag to fix the drawing
; Balloon over floating window bug.
; <27> 6/18/92 KST <JH>: applicationFloatKind and systemFloatKind are defined in
; Windows.h but is not defined in any ainlude files. So I define
; them in here.
; <26> 6/17/92 KST #1030843 <JH>: Added one field in TSM global for
; __PopupMenuSelect patch.
; <25> 6/16/92 KST <JH>: Added one new patchMask bit constant and a new field in
; TSM document record.
; <24> 6/10/92 KST #1031142,1030881 <JH>: Added global tsmUseInputWindowDocID and a
; new bit for our patch flag -- kInTSMEventCallBit.
; <23> 6/2/92 JH <KST>: Added global tsmRealSystemMenuID.
; <22> 5/14/92 KST #1025797,<JH>: Added one new message selector 'kMsgHelpHELPMgr'
; to InformTSM.
; <21> 5/1/92 KST #1027482,<JH>: Added a constant -- kSWMJustSetCursor.
; <20> 5/1/92 KST #1028301,<JH>: JH,#1028301: kMaxTSMSelector has changed because
; SetTSMDialogState, RestoreTSMDialogState.. etc has been removed.
; <19> 5/1/92 JH Added a byte field to globals that is used to set bit flags that
; our SetCursor patch will use. Also a mask for testing the low
; bit.
; <18> 4/9/92 KST KST,Adding a control parameterblock for communicating with the
; swmdrvr. Adding 2 selectors for InformTSM.
; <17> 3/30/92 KST JH, 1025008, 1025009. First attempt to solve the pallete/menu
; bar flickering problem. Also, we synchronize the keyboard menu
; with the script of the TSM document.
; <16> 3/23/92 KST Code changed according to the comments from the code review.
; <15> 3/12/92 KST We store a refcon in each document record. Added refcon mapping
; cache in TSM globals.
; <14> 3/6/92 KST Added a new constant "kLog2PSNEntrySize".
; <13> 3/4/92 KST Added new fields "tsmSetCursorProc", and "tsmSavedCursorState"
; in TSM globals.
; <12> 3/3/92 KST kMaxTSMSelector is now 28.
; <11> 3/2/92 KST Moved kMaxTSMSelector to TSMPrivate.h, and added a new private
; trap selector "NewTSMDocument4SWM".
; <10> 2/28/92 KST Added a new field "tsmSavedLayer" in TSM globals.
; <9> 2/27/92 KST Add a signature in TSM aware PSN table for error detection.
; Added a field tsmKillApplicationP in TSM globals.
; <8> 2/11/92 DCL Changed the name of TSMEqu.[aph] to TextServices.[aph] for
; better read-ability.
; <7> 2/10/92 KST Moved TSM message selectors to TSMPrivate. 'inpm' resource now
; stores FEP ID for the old input method.
; <6> 2/3/92 KST TSM needs a flag to tell if we are using the old Japanese Input
; Method when JIM is changed.
; <5> 2/1/92 KST We don't have a global flag in TSM globals to indicate using
; bottom window. Change the byte to indicate the number of active
; text services for ease of debugging.
; <4> 1/29/92 KST We open one input method for each document. Each document
; contains a table of 4 opened input method instances for CCJK
; scripts.
; <3> 1/11/92 KST TSM globals now has an input method table to store the open
; default input methods for CJK scripts.
; <2> 1/9/92 KST If idocID == 0, it affects only one (¥¥ current ¥¥)
; application.
; <5> 12/31/91 KST Moved TSMPrivate.a from TextServiceMgr to Internal:ASM: folder.
; <4> 12/31/91 KST Added document table in PSN table to record open documents.
; <3> 12/20/91 KST Making progress toward Alpha. Changed "inline" to "TSM", and
; added new calls.
; <2> 12/10/91 KST Check in the first time.
;
;
; **********************************************************************************************
; File: "TSMPrivate.a"
;
; Written by Kenny SC. Tung
;
; Modification History:
; 10Dec91 KSCT New today.
;
; In the TSM globals, we record all the application's process serial number which claims itself
; as TSM aware. For each application, we also keep a table to record the document IDs it creates.
; The document keep track of all the open text services. When application terminates or crashes,
; we can use these tables to clean up the world. Initially, the table contains 10 slots, but will
; grow as needed.
; ***********************************************************************************************
IF &TYPE('__TSMAPrivate__') = 'UNDEFINED' THEN
__TSMAPrivate__ SET 1
INCLUDE 'TextServices.a'
INCLUDE 'Components.a'
TSMVersion EQU 1 ; version 1
swmdrvrRecordMenuIsDown EQU 0 ; from swmdrvr.h
;; messages to TSM ...
kMsgNoOP EQU 0 ; no op
kMsgBkgAppsPSN EQU 1 ; background application's PSN
kMsgKillTSMApp EQU 2 ; kill TSM aware application
kMsgChangeToOldJIM EQU 3 ; change to OLD Japanese Input Method
kMsgSuspendApp EQU 4 ; a non-TSM aware app got suspended
kMsgResumeApp EQU 5 ; RESUME a non-TSM aware app
kMsgHelpHELPMgr EQU 6 ; open Component's resource file for Help Mgr
kMaxMsgNumber EQU kMsgHelpHELPMgr
; (3) parameter for kMsgChangeToOldJIM -- record of 2 words:
sidScript EQU 0 ; script of this old input method
sidFEPID EQU 2 ; FEP ID
; (6) parameter for kMsgHelpHELPMgr -- record of 6 bytes:
tsmHelpRefnum EQU 0 ; > 0 if we opened IM's resource file
tsmHelpWindowPtr EQU 2 ; nil if no floating window
tsmHelpSavedLayer EQU 6 ; saved current layer (temp free storage)
tsmHelpRecSize EQU tsmHelpSavedLayer+4
kTSMSuspend EQU 0 ; suspend the app
kTSMResume EQU $FFFF ; resume the app
;; Private TSM traps ...
;; The last selector is kFindServiceWindow = 23 as defined in TextServices.h ...
kInformTSM equ 22 ; inform TSM with some messages
kNewTSMDocument4SWM equ 24 ; create new TSM aware document but don't activate input method <#11> <#12>
kTSMEventFromSWM equ 25 ; TSM event called by SWM <#24>
kMaxTSMSelector equ kTSMEventFromSWM
macro
_InformTSM
move.w #kInformTSM,d0
_TSMDispatch
endm
;;-------------------------------------------------------------------------;;
kSavedIMCount EQU 4 ; save 4 input methods (CCJK)
; default IM's Component and menu
ComponentMenuRec RECORD 0
gComponent ds.l 1 ;component instance
gMenu ds.l 1 ;input method menu if any
ComponentMenuSize equ * ;size of the beast
ENDR
; TSM globals ... (if you change something in here, be sure to change TSMPrivate.h too !)
; bits constant for tsmPatchFlags field ...
kIMJustSetCursorBit EQU 0 ; bit to test in SetCursor Patch
kSWMJustSetCursorBit EQU 1 ; bit to test in SetCursor Patch
kInTSMEventCallBit EQU 2 ; bit set when inside of TSMEvent call <#24>
kInTSMPopUpMenuSelectCall EQU 3 ; bit set when inside of PopUpMenuSelect call
kTSMEventBeenCalledBit EQU 4 ; set by _ModalDialogPatch in SWM, reset in TSMEvent
TSMVarsRec RECORD 0
tsmRecSize ds.w 1 ; size of this record
tsmIAPSNTablePtr ds.l 1 ; ptr to table of Inline aware application process serial numbers
tsmCurrentSLRec ds.b ScriptLanguageRec ; current text service language
tsmPreviousDocID ds.l 1 ; previous deactivated doc ID, which pallete has not been removed <#17>
tsmPreviousScript ds.w 1 ; the script which is running when we deactivate the ID above <#17>
tsmActiveDocID ds.l 1 ; the current active inline document if non-nil
tsmUseInputWindowDocID ds.l 1 ; the current document which is using the input window <#24>
tsmActiveTSCount ds.b 1 ; number of active text services for ease of debugging. <#5>
tsmPMgrActiveP ds.b 1 ; set if Process Manager is active
tsmUseOldJInputMethodP ds.b 1 ; true if we are using the old Japanese Input Method <#6>
tsmKillApplicationP ds.b 1 ; true if we are killing the TSM aware application (set by InformTSM) <#9>
tsmSWMHighPSN ds.l 1 ; background app's (SWM's) high PSN ID
tsmSWMLowPSN ds.l 1 ; background app's (SWM's) low PSN ID
tsmCurrentAppHighPSN ds.l 1 ; current app's high PSN ID
tsmCurrentAppLowPSN ds.l 1 ; current app's low PSN ID
tsmDefIMInfoTable ds.l kSavedIMCount*2 ; 4 components in SC, J, TC, K order (hard coded based on script code !!!!!!!)
; each one has a Component and a menu handle
tsmCacheInstance ds.l 1 ; this instance map ... <#15>
tsmCacheRefcon ds.l 1 ; ... to this refcon <#15>
tsmSWMDrvrRefNum ds.w 1 ; driver refnum
tsmSendAEProc ds.l 1 ; driver AppleEvent callback
doCloseSWMWindowCallBack ds.l 1 ; driver CloseWindow callback
tsmPatchFlags ds.b 1 ; flags for the helpmgr patch and the setcursor patch
tsmFiller ds.b 1 ; word align this
tsmRealSystemMenuID ds.w 1 ; original inputmethod ID
tsmUserProc ds.l 1 ; user proc for modal dialog patch
tsmPopUpReturnAddr ds.l 1 ; save return address <#26>
;tsmCalledUseInputWindow ds.b 1 ; true if TSM called UseInputWindow when there is no ducument <#26>
;tsmUseInputWindowState ds.b 1 ; the state before TSM called UseInputWindow <#26>
tsmMajorVersion ds.b 1 ; major version number <#24>
tsmMinorVersion ds.b 1 ; minor version number <#24>
tsmDebugSignature ds.l 1 ; signature for debugging
TSMVarsRecSize equ *
ENDR
kDefTableEntryN EQU 8 ; begin with 8 entries and increment by 8 every time
;;-------------------------------------------------------------------------;;
;; The structure of the table to record TSM aware application's
;; process serial numbers, stored in tsmIAPSNTablePtr of TSM globals.
;; Accessed thru Assembler only ....
iaAppCount EQU 0 ; (word) number of Inline aware application registered
iaTotalPSNEntryN EQU 2 ; (word) total number of entries (size) of the table
iaPSNStart EQU 4 ; start of PSN table array
;; Each entry in the array has a PSN, a flag, and a linked list of open documents ...
;; The entry is filled up when application calls InitTSMAwareApplication.
;; 07Jan91 Design changes:
;; If idocID == 0, it affects only one (¥¥ current ¥¥) application.
;; If idocID == valid doc ID, it applies to that document only.
PSNRecord RECORD 0 ; one record for each TSM aware application
psnHighID ds.l 1 ; long (OH! How I hated to use 64 bits PSN)
psnLowID ds.l 1 ; long
;; ¥¥ Note: the following 4 bytes has to be contiguous, because it is cleared as CLR.L psnAppUseInputWindowP(A1) in TSMDispatch.a ....
psnAppUseInputWindowP ds.b 1 ; byte, set if app should use floating input window
psnDocUseInputWindowP ds.b 1 ; byte, set if current document is using floating input window
psnTSMCalledUseIWP ds.b 1 ; byte, true if TSM called UseInputWindow when there is no ducument <#26>
psnUseInputWindowState ds.b 1 ; byte, the state before TSM called UseInputWindow <#26>
psnDocsTablePtr ds.l 1 ; long, open documents table pointer (could be nil)
kPSNEntrySize EQU * ; each PSN record is 16 bytes
ENDR
kLog2PSNEntrySize EQU 4 ; log2(PSN record entry size) = 4
psnDoWeReallyUseIW EQU PSNRecord.psnAppUseInputWindowP
; word, test both flags to see if we are using input window
; psnAppUseInputWindowP and psnDocUseInputWindowP
;; the total table size is:
kPSNTableDefSize EQU kDefTableEntryN * PSNRecord.kPSNEntrySize + iaPSNStart
;;-------------------------------------------------------------------------;;
;; The structure of the table to record document IDs, stored in "psnDocsTablePtr".
docIDCount EQU 0 ; (word) number of IDs recorded (excluding input methods)
docTableEntryN EQU 2 ; (word) total number of entries (size) of the table
docIDStart EQU 4 ; (long) start of doc IDs
;; Each entry has a long word for the ID
kDocEntrySize EQU 4 ; each ID is 4 bytes (= document ID)
kLog2DocEntrySize EQU 2 ; log2(document entry size) = 2
kDocTableDefSize EQU kDefTableEntryN * kDocEntrySize + docIDStart ; the table size
;;-------------------------------------------------------------------------;;
CIListRec RECORD 0
ciNextCIListRec ds.l 1 ; next CIListRecord
ciTheComponent; ds.l 1 ; a saved component
ciTS ds.l 1 ; a component instance
ciSLRecord; ds.l 1 ; the primary script.w/language.w
ciTakeActiveInputP ds.b 1 ; takes active input boolean
ciMenuVisibleP ds.b 1 ; true if the menu is visible
ciServiceMenu ds.l 1 ; an associated menu or nil
CIListRec equ * ; size
ENDR
;; TSM document record, this handle is used as TSM document ID
;; If you change something in here, be sure to change TSMPrivate.[hP] too !
TSMDocumentRecord RECORD 0 ; one record for each TSM document
iDocSignature ds.l 1 ; (long) signature for verifying the ID
iDocOpenTextServiceN ds.w 1 ; (word) number of open text services
iDocCIHead ds.l 1 ; (long) list of open text service Component Instances
iDocPSNID1 ds.l 1 ; (long) PSN ID 1
iDocPSNID2 ds.l 1 ; (long) PSN ID 2
iDocActiveP ds.b 1 ; (byte) true if active
iDocUseInputWindowP ds.b 1 ; (byte) true if using Input Window
iDocRefcon ds.l 1 ; (long) refcon <#15>
iDocUseThisScript ds.w 1 ; (word) the script used by this document <#17>
iDocGhostSignature ds.l 1 ; for TSM aware app. that has no document <#25>
iDocDefIMInstanceArray ds.l 16 ; local copy of the IM instances for CCJK scripts
; defined in TSMPrivate.h, each script uses 4 longs
iDocInterfaceN ds.w 1 ; (word) number of supported interface types
iDocOSTypeArray ds.l 1 ; (long) more than 1 record might follow
ENDR
;;-------------------------------------------------------------------------;;
;; default input method information resource ...
;; resource type for default input method saved in System file.
;; (if you change something in here, be sure to change TSMPrivate.a too !)
kTSMDefInputMethodType EQU kInputMethodService
kTSMDefInputMethodID EQU -8192
kINPMresourceSig EQU 'tsmr' ; $74736d72 saved default IM resource signature in "defRsrcSignature"
; one record for each script -- CCJK
IMInfoRecord RECORD 0 ; info about the default input method
imValidP ds.b 1 ; true if record contains valid info
imUseOldInputMethodP ds.b 1 ; true if user wants to use old input method as the default
imOldInputMethodFEPID ds.w 1 ; if imUseOldInputMethodP is true, then this is its FEP ID
imLanguage ds.w 1 ; language
imCDRec ds ComponentDescription; component description (just description, no component saved)
imRecSize EQU *
ENDR
DefIMRecord RECORD 0
defRsrcSignature DS.L 1 ; TSM resource signature
defUseFloatWindow DS.B 1 ; global falg - set if use input window (not used (should be 0))
defReserved DS.B 1 ; not used (should be 0)
defIMCount DS.W 1 ; number of input methods saved = 4
defSChineseIM DS IMInfoRecord ; simplified Chinese
defJapaneseIM DS IMInfoRecord ; Japanese
defTChineseIM DS IMInfoRecord ; traditional Chinese
defKoreanIM DS IMInfoRecord ; Korean
ENDR
kTSMSystemMenuID EQU 16500
;;-------------------------------------------------------------------------;;
WindowRecord RECORD 0
port DS.B $6C ; GrafPort
windowKind DS.W 1
visible DS.B 1
hilited DS.B 1
goAwayFlag DS.B 1
spareFlag DS.B 1
strucRgn DS.L 1
contRgn DS.L 1
updateRgn DS.L 1
windowDefProc DS.L 1
dataHandle DS.L 1
titleHandle DS.L 1
titleWidth DS.W 1
controlList DS.L 1
nextWindow DS.L 1
windowPic DS.L 1
refCon DS.L 1
ENDR
ENDIF ; ...already included