sys7.1-doc-wip/Internal/Asm/CommToolboxPriv.a
2020-04-26 16:46:44 +08:00

470 lines
15 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;
; Hacks to match MacOS (most recent first):
;
; <Sys7.1> 8/3/92 Reverted <SM2>, slimming CTBBlock back down
; 9/2/94 SuperMario ROM source dump (header preserved below)
;
; Clean diff against SuperMario
;
;
; File: CommToolboxPriv.a
;
; Contains: Assembly Privates for CTB
;
; Written by: Byron Han
;
; Copyright: © 1988-1992 by Apple Computer, Inc., all rights reserved.
;
; Change History (most recent first):
;
; <SM3> 7/7/92 CSS Roll-in from Reality.
; <20> 2/7/92 BH ResourceMapRecord removed, use ResourceMgrPriv.a instead
; <SM2> 7/6/92 PN Add CommToolBoxTable into CTBBlock
; <19> 8/21/91 JSM Clean up header.
; <18> 1/30/91 gbm sab, #38: Change the already including this file variable to
; all uppercase (for security reasons)
; <17> 1/14/91 CP Moved gestalt EQU's to GestaltPrivateEqu.a <BBH>
; <16> 1/9/91 kaz <jng> Changing ModemStringType and PrinterStringType to STR# to
; include driver names. Changing ChooseIDStrID from -32512 to
; -32510.
; <15> 12/10/90 kaz Fixing Gestalt typo <jng>
; <14> 11/1/90 fjs add equates for color icon types
; <13> 10/2/90 kaz Adding CRMAppRec to keep track of the processes that init the
; Term, FT, or Conn Mgrs; renamed reserved to appList to CTBBlock;
; added bitfields for initialized mgrs. <jng>
; <12> 9/10/90 JNG Have ResFileRec contain canonical form of file name; Add in new
; resources for choose
; <11> 8/6/90 BBH add back gestalt constants that are now private
; <9> 4/11/90 BBH added CTBBlockSize to determine size of the CTBBlock data
; structure
; <8> 3/17/90 BBH changed gestaltVersion to funcVersion to avoid duplicate symbol
; conflict with gestaltEqu.a
; <7> 3/17/90 BBH added gestalt function header for better stuffing of the version
; into the gestalt function resource
; <6> 3/16/90 BBH removed CTB_SysHeapType and replaced it with CTB_VersionType
; <5> 3/15/90 BBH fix typo
; <4> 3/14/90 BBH add constants for DITL entry
; <3> 3/14/90 BBH fix case for CTB_sysHeapMinID
; <2> 3/14/90 BBH added resource for minimum system heap size and merge in
; CommResourcesPriv.a, CTBPrivate.a, and CTBCoreIntf.a
; <1> 3/14/90 BBH first checked in
;
IF &TYPE('__INCLUDINGCOMMTOOLBOXPRIV__') = 'UNDEFINED' THEN
__INCLUDINGCOMMTOOLBOXPRIV__ SET 1
INCLUDE 'FSEqu.a'
;
;===============================================================================
;NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
;
;Any changes made here MUST be reflected also in
; CommToolboxPriv.p
; CommToolboxPriv.a
; CommToolboxPriv.h
; CommToolboxPriv.r
;NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
;===============================================================================
;
; This file contains the resource types and resource ID's to be used by the CommToolbox
; the following 7 resources are temporary to be merged into ptch code
CTB_InstallType EQU 'INIT'
CTB_InstallID EQU 29
CTB_DispatcherType EQU 'proc' ; this used to be ctbd -32512
CTB_DispatcherID EQU -32509
CTB_GestaltProcType EQU 'proc' ; this used to be ctbg -32510
CTB_GestaltProcID EQU -32508
CTB_PatchType EQU 'ctbp' ; this used to be type ctb∂
CTB_Patch1 EQU -32512 ; allocate low memory
CTB_Patch2 EQU -32511 ; register builtin ports
CTB_Patch3 EQU -32510 ; perform gestalt installation
; end temporary
CTB_ConnectionMgrType EQU 'cmtb'
CTB_FileTransferMgrType EQU 'cmtb'
CTB_TerminalMgrType EQU 'cmtb'
CTB_CTBUtilitiesType EQU 'cmtb'
CTB_CommResourceMgrType EQU 'cmtb'
CTB_ConnectionMgrID EQU -32512
CTB_FileTransferMgrID EQU -32511
CTB_TerminalMgrID EQU -32510
CTB_CTBUtilitiesID EQU -32509
CTB_CommResourceMgrID EQU -32508
CTB_VersionType EQU 'ctb ' ; used to be ctbv -32512
CTB_VersionID EQU -32512
CTB_KeyclickType EQU 'snd ' ; this used to be ctb$ -32511
CTB_KeyclickID EQU -32512
CTB_ChooseType EQU 'proc' ; this used to be choo -32512
CTB_ChooseID EQU -32512
CTB_DITLPackType EQU 'proc' ; this used to be ditl -32512
CTB_DITLPackID EQU -32511
CTB_NuLookupType EQU 'proc' ; this used to be nlup -32510
CTB_NuLookupID EQU -32510
CTB_NuLookupParmsType EQU 'flst' ; this used to be parm -32510
CTB_NuLookupParmsID EQU -32510
CTB_ModemIconType EQU 'ICN#' ; this used to be ctbi -32512
CTB_Modem4ColorIconType EQU 'icl4'
CTB_Modem8ColorIconType EQU 'icl8'
CTB_ModemIconID EQU -32512
CTB_PrinterIconType EQU 'ICN#' ; this used to be ctbi -32511
CTB_Printer4ColorIconType EQU 'icl4'
CTB_Printer8ColorIconType EQU 'icl8'
CTB_PrinterIconID EQU -32511
CTB_ModemStringType EQU 'STR#' ; this used to be ctbs -32512
CTB_ModemStringID EQU -32512
CTB_PrinterStringType EQU 'STR#' ; this used to be ctbs -32511
CTB_PrinterStringID EQU -32511
CTB_CommFolderNameType EQU 'STR ' ; this used to be ctbs -32510
CTB_CommFolderNameID EQU -32510
CTB_MarkerType EQU 'ctb ' ; lets CTB6 installer scripts know CTB7 is installed
CTB_CTB6MarkerID EQU 0
CTB_CTB7MarkerID EQU 1
CTB_ChooseDLOGID EQU -32512
CTB_ChoosehdlgID EQU -32512
CTB_ChoosedctbID EQU -32512
CTB_ChooseDITLID EQU -32512
CTB_ChooseSTRsID EQU -32510
CTB_ChooseLDEFID EQU -32512
CTB_ChoosehmnuID EQU -32512
CTB_ChoosefinfID EQU -32512
CTB_ChooseflstID EQU -32512 ; preferred over finf
CTB_ChooseCNTLID EQU -32512
CTB_ChooseMENUID EQU -32512
CTB_ChooseConfirmDLOGID EQU -32511
CTB_ChooseConfirmDITLID EQU -32511
CTB_ChooseUnavailableDLOGID EQU -32509
CTB_ChooseUnavailableDITLID EQU -32509
CTB_NulookuphdlgID EQU -32510
CTB_NulookupDLOGID EQU -32510
CTB_NulookupdctbID EQU -32510
CTB_NulookupDITLID EQU -32510
CTB_NulookupSTRsID EQU -32510
CTB_NulookupLDEFID EQU -32510
CTB_PopupCDEFType EQU 'CDEF'
CTB_PopupCDEFID EQU 63
; added since CTB6
CTB_PopupTriangleType EQU 'PICT'
CTB_PopupTriangleID EQU -8224 ; owned by cdef 63
CTB_PopupExpandType EQU 'proc' ; this expands menuwidth
CTB_PopupExpandID EQU -8224 ; owned by cdef 63
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;; Begin CommToolboxUtilites privates
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
AppendMsg EQU 1
CountMsg EQU 2
ShortenMsg EQU 3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;; Begin Installer privates
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; partial resource map description
dispatchBranch EQU 0
dispatchTable EQU 2
dispatchRefnum EQU 78
dispatchBig EQU 80
; gestalt function description header
funcBranch EQU 0
funcType EQU 2
funcVersion EQU 6
funcID EQU 8
funcCTBV EQU 10
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;; Begin CommResourceMgr privates
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; removed in <20> - use ResourceMgrPriv.a
;
; partial resource map description
;ResourceMapRecord RECORD 0
;theHeader DS.L 4
;next DS.L 1
;refNum DS.W 1
; ENDR
; description of CommResourceMgr structures for resource map manipulation
CRMToolContext RECORD 0 ; NOTE::: If you change anything here, make sure CRMToolPreflight
; tool postflight get changed as well.
oldProcID DS.W 1
oldHidden DS.L 1
toolProcID DS.W 1
wasBelow DS.B 1
ENDR
; CommResourceMgr structures for resource file management
ResFileRec RECORD 0
theName DS FSSpec ; Canonical File name
refNum DS.W 1 ; resource file reference number
resMap DS.L 1 ; handle to master resource map
pZone DS.L 1 ; zone where resource map resides
useCount DS.L 1 ; use count in the current heap
special DS CRMToolContext ; context saved for setup
reserved DS.L 1
next DS.L 1 ; next in the chain
size EQU *
ENDR
; CRMResourceCount to track individual resources
CRMResourceCount RECORD 0
next DS.L 1 ; next in the chain
theHandle DS.L 1 ; the resource to track
useCount DS.L 1 ; use count for this resource
refnum DS.W 1 ; god only knows
ENDR
; CRM App bits values for the cmtbFlags below
cmInUse EQU 1
tmInUse EQU 2
ftInUse EQU 4
; CRMAppRec to track processes that have called InitTM, InitFT, and InitCM
CRMAppRec RECORD 0
aProcess DS.L 2 ; unique id for each process (not in Processes.a)
cmtbFlags DS.W 1 ; bit field for InitXX calls
reserved DS.L 1 ;
next DS.L 1 ; next in chain
ENDR
; CommToolbox globals
CTBBlockVersion EQU 1
CTBBlock RECORD 0
version DS.W 1 ; CTBBlockVersion
CRMQueue DS.L 1 ; QHdrPtr;
resList DS.L 1 ; LONGINT;
private DS.W 1 ; INTEGER;
appList DS.L 1 ; CRMAppRecPtr;
resFiles DS.L 1 ; ResFileRecHdl;
toolResChain DS.L 1 ; ResourceMapHandle;
; ex<SM2> <Sys7.1>
secret DS.L 16 ; LONGINT
CTBBlockSize EQU *
ENDR
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Core routines
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; manager selectors
CMSel EQU 0
TMSel EQU 1
FTSel EQU 2
; common error codes
CTBNoTools EQU 8
; Common Tool Messages
CTBInitMsg EQU 0
CTBDisposeMsg EQU 1
CTBSuspendMsg EQU 2
CTBResumeMsg EQU 3
CTBMenuMsg EQU 4
CTBEventMsg EQU 5
CTBActivateMsg EQU 6
CTBDeactivateMsg EQU 7
CTBGetErrorStringMsg EQU 8 ; except for connection manager since I BBH f*cked up
CTBIdleMsg EQU 50
CTBResetMsg EQU 51
CTBAbortMsg EQU 52
CTBValidateMsg EQU 0
CTBDefaultMsg EQU 1
CTBPreflightMsg EQU 0
CTBSetupMsg EQU 1
CTBItemMsg EQU 2
CTBFilterMsg EQU 3
CTBCleanupMsg EQU 4
CTBGetMsg EQU 0
CTBSetMsg EQU 1
CTB2EnglishMsg EQU 0
CTB2IntlMsg EQU 1
; core data structures
CTBProcID EQU 0 ;INTEGER;
CTBFlags EQU CTBProcID+2 ;LONGINT;
CTBerrCode EQU CTBFlags+4 ;OSErr;
CTBRefCon EQU CTBerrCode+2 ;LONGINT
CTBUserData EQU CTBRefCon+4 ;LONGINT;
CTBDefProc EQU CTBUserData+4 ;ProcPtr;
CTBConfig EQU CTBDefProc+4 ;Ptr;
CTBOldConfig EQU CTBConfig+4 ;Ptr;
CTBReserved0 EQU CTBOldConfig+4 ;LONGINT;
CTBReserved1 EQU CTBReserved0+4 ;LONGINT;
CTBReserved2 EQU CTBReserved1+4 ;LONGINT;
; macros for invoking managers from assembler
; macros for including macsbug symbols
MACRO
_CTBTrap &selector
MOVE.L (SP)+,D0 ; Get the return address
MOVE.W &selector,-(SP) ; Push the selector
MOVE.L SP,A0 ; Save off the record flag
MOVE.L D0,-(SP) ; Put RA back onto stack
_CommToolboxDispatch ; Trap
ENDM
; macro for invoking core routines
; note that this differs from ExternalCore macros in that there is an
; additional manager selector field to be passed
;
MACRO
_RealExternalCore &selector,&mgrsel
MOVE.W &mgrsel,D0 ; Set the MgrSelector
MOVE.W (A0),-(SP) ; Save the selector
MOVE.W &selector,(A0) ; Replace with new selector
_CommToolboxDispatch ; Trap
MOVE.W (SP)+,(A0)
RTS
ENDM
Macro
EndCTBTrap &parmsize,&returnsize=0
MOVE.L (SP)+,A0 ; Get RA
ADDA.W &parmsize,SP ; Clear parameters
If (&UC(&returnsize) = 'W') Then
MOVE.w D0,(SP) ; Stuff Return value
ElseIf (&UC(&returnsize) = 'B') Then
MOVE.B D0,(SP)
ElseIf (&UC(&returnsize) = 'L') Then
Move.L D0,(SP)
Endif
JMP (A0) ; Return to caller
ENDM
* ----------- DEBUGGING INFORMATION -------------
* This is used as a global switch to turn off the generation of debugging information.
* The MACRO "DbgInfo" will generate this debugging information if set to 1.
IF (&TYPE('DebuggerInfo') = 'UNDEFINED') THEN
IF (&TYPE('RAID') = 'UNDEFINED') THEN
RAID EQU 0
ENDIF
IF RAID THEN
DebuggerInfo EQU 1
ELSE
DebuggerInfo EQU 0
ENDIF
ENDIF
* ------------- GENERATE DEBUGGER SYMBOL INFORMATION -------------
* This Macro will generate information for the debugger to read and display
* as its module name. This aids in debugging Asm code while looking at it
* in the debugger. This macro can only work if called at the end of stack
* frame. The appearance of the Macro statement in the source code must occur
* immediately after the final "JMP (A0)" or "RTS" instruction following the UNLINK.
* Spaces may be included in the name, but no quotes are allowed.
* {Form #1} DbgInfo ModName
* {Form #2} DbgInfo.New Really Long Module Name For MacsBug 6.0
* There are now two naming conventions used in MacsBug, Form #1 is the older MacsBug,
* or TMON, and Form #2 is the newer MacsBug 6.0. The older method would only
* allow for a fixed length of eight characters. If a shorter name is passed to
* this Macro, it will extend the length to 8 chars with trailing spaces.
* MacsBug 6.0 will now allow for a variable length C type string. This Macro will
* create the proper DC statements and takes into account word alignment issues.
MACRO
DbgInfo.&Opt &ModName# ; the name to be used in the Debugger
PRINT Push,NoMDir ; Only list generated code
LCLC &DbgName# ; name to generate for MacsBug
LCLC &DbgTemp ; temporary name variable
LCLC &New ; variable used to test old vs. new
LCLC &S ; variable used to save PRINT state
IF DebuggerInfo THEN ; do we want debugging info?
IF &ModName# ≠ '' THEN ; did we get a module name?
&New: SETC &UpCase(&Opt) ; make option all upper case
IF (&New = 'NEW') THEN ; do we want new style?
.* Create the new MacsBug naming convention
* -----------------------------------------------
&DbgTemp: SETC &ModName# ; generate new type symbols
IF &Len(&ModName#) < 32 THEN ; if module name < 32 chars
IF &Len(&ModName#) // 2 = 0 THEN ; add space if even so that...
&DbgTemp: SETC &Concat(&ModName#,' ') ; string length plus length byte...
ENDIF ; will align to word boundary
&DbgName#: SETC &Concat(&Chr($80 + &Len(&ModName#)), &DbgTemp)
ELSE ; Length > 32 characters
IF &Len(&ModName#) // 2 = 1 THEN ; add space if length is odd
&DbgTemp: SETC &Concat(&ModName#,' ')
ENDIF
&DbgName#: SETC &Concat(&Chr($80), &Chr(&Len(&ModName#)), &DbgTemp)
ENDIF
ELSE ; make it the older style
.* Create the older MacsBug naming convention
* -----------------------------------------------
IF &Len(&ModName#) < 8 THEN ; if module name < 8 chars
&DbgName#: SETC &Concat(&ModName#,' ') ; add at least 7 spaces
&DbgName#: SETC &Concat(&Chr($80 + &ORD(&SubStr(&DbgName#,1,1))), &SubStr(&DbgName#,2,7))
ELSE ; there are at least 8 chars
&DbgName#: SETC &Concat(&Chr($80 + &ORD(&SubStr(&ModName#,1,1))), &SubStr(&ModName#,2,7))
ENDIF
ENDIF
.* Create the DC.B with the debugger name, and include the NULs if new MacsBug option
* -----------------------------------------------
&S: SETC &Setting('STRING') ; preserve STRING status
IF &S ≠ 'ASIS' THEN ; only change it if not already ASIS
STRING ASIS
DC.B '&DbgName#'
IF (&New = 'NEW') THEN
DC.W 0 ; fake literal size for new MacsBug
ENDIF
STRING &S
ELSE
DC.B '&DbgName#'
IF (&New = 'NEW') THEN
DC.W 0 ; fake literal size for new MacsBug
ENDIF
ENDIF
ENDIF
ENDIF
PRINT Pop ; restore original print status
ENDM
ENDIF ; ...already included