sys7.1-doc-wip/Internal/Asm/CommToolboxPriv.a

470 lines
15 KiB
Plaintext
Raw Normal View History

2020-03-22 08:44:21 +00:00
;
; 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
;
2019-07-27 14:37:48 +00:00
;
; 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;
2020-03-22 08:44:21 +00:00
; ex<SM2> <Sys7.1>
2019-07-27 14:37:48 +00:00
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