; ; File: CommToolboxUtilities.a ; ; Contains: Assembly entry point for CommToolbox Utilities ; ; Written by: Byron Han and Jerry Godes ; ; Copyright: © 1988-1990 by Apple Computer, Inc., all rights reserved. ; ; Change History (most recent first): ; ; <4> 10/5/90 kaz Changing BRA table to offset table; Removed _CTBKeystrokeFilter. ; ; <3> 7/10/90 dba add __ to distinguish routines from glue ; <2> 3/15/90 BBH fixed constants and includes ; <1> 3/14/90 BBH first checked in to BBS ; ; To Do: ; ; Pre-BBS Modification History : ; ; 2/15/90 BBH Added CTBGetErrorString ; 7/25/89 CL Added spcifiedStr to CTBKeyStrokekFilter ; 7/4/89 JNG Fixed Byron's bug in NuLookup's entry code - he forgot a # infront of ; the nulookup ID constant ; 6/21/89 BBH Added CTBPChoose ; 6/2/89 JNG New Glue/Entry interface ; 5/5/89 BBH Moved CTBValidate to CTBCore.c ; Fixed bug in CTBValidate glue (do a Move.B instead of Move.W) ; 4/27/89 BBH Added CTBKeystrokeFilter to CTBUtilities.c ; 4/24/89 JNG Added CTBResume CTBEvent CTBMenu CTBAbort CTBActivate CTBIdle CTBReset ; to ctbcore ; 4/20/89 BBH Save different registers for CTBValidate. Was saving D0-D3/A0-A3. ; Now saving D0-D7/A1-A4. A0 is used for the internal dispatch record ; CTBGetVersion now takes mgrsel as a parameter ; 4/18/89 BBH Added entry for CTBSetupSetup, Cleanup, Preflight, Postflight, Item, Filter ; Added entry for CTBIntlToEnglish, EnglishToIntl, GetConfig, SetConfig ; Added entry for CTBGetProcID. ; 4/17/89 JNG Added CTBValidate. We can now use the macro from MPW sample ; app for debugger names. ; 4/11/89 JNG Took CMGetRefCon, CMSetRefCon, CMGetUserData, CMSetUserData, ; CMGetVersion and converted to CTB. ; 4/8/89 JNG Added CTBCore routines ; 8/1/88 BBH 1.0D1 ;------------------------------------------------------------------------------------ ; ; A0.L -> pointer to the routine selector record ; ; D0.L -> function result ; INCLUDE 'Traps.a' INCLUDE 'CommToolboxPriv.a' INCLUDE 'CTBUtilities.a' ENTRY CTBGetToolName, _CTBValidate, CTBIdle CTBEntry MAIN EXPORT IMPORT DITLEntry, __NuPLookup, __InitCTBUtilities, __InitManager, \ __CTBGetVersion, __CTBDefault, __CTBValidate, \ __CTBSetupPreflight, __CTBSetupSetup, __CTBSetupItem, __CTBSetupItem, \ __CTBSetupFilter, __CTBSetupPostflight, __CTBSetupCleanup, \ __CTBSetupXCleanup, \ __CTBGetConfig, __CTBSetConfig, \ __CTBEnglishToIntl, __CTBIntlToEnglish, __CTBChoose, __CTBGetProcID, \ __CTBResume, __CTBMenu, __CTBEvent, __CTBActivate, __CTBReset, \ __CTBAbort, __CTBPChoose, \ __CTBGetErrorString BRA.S RealEntry version DC.W curCTBUversion ; major version 1 RealEntry MOVE.W (A0), D1 ; routine selector ANDI.W #$FF, D1 ; bump the high byte SUB.W #1, D1 ; make it 0 based ADD.W D1, D1 ; 2 bytes per offset LEA CTBUStart, A1 ; point to offset table ADD.W 0(A1,D1.W), A1 ; add the offset JMP (A1) ; go there CTBUStart DC.W @InitCTBUtilities - CTBUStart ; minor selector 1 DC.W @AppendDITL - CTBUStart ; 2 DC.W @CountDITL - CTBUStart ; 3 DC.W @ShortenDITL - CTBUStart ; 4 DC.W @CTBGetCTBVersion - CTBUStart ; 5 DC.W @NuLookup - CTBUStart ; 6 DC.W @NuPLookup - CTBUStart ; 7 DC.W @None - CTBUStart ; 8 -- NOT USED DC.W @InitManager - CTBUStart ; 9 DC.W @CTBSetRefCon - CTBUStart ; A DC.W @CTBGetRefCon - CTBUStart ; B DC.W @CTBSetUserData - CTBUStart ; C DC.W @CTBGetUserData - CTBUStart ; D DC.W @CTBGetVersion - CTBUStart ; E DC.W CTBGetToolName - CTBUStart ; F DC.W @CTBValidate - CTBUStart ; 10 DC.W @CTBDefault - CTBUStart ; 11 DC.W @CTBSetupPreflight - CTBUStart ; 12 DC.W @CTBSetupSetup - CTBUStart ; 13 DC.W @CTBSetupItem - CTBUStart ; 14 DC.W @CTBSetupFilter - CTBUStart ; 15 DC.W @CTBSetupCleanup - CTBUStart ; 16 DC.W @CTBSetupPostflight - CTBUStart ; 17 DC.W @CTBGetConfig - CTBUStart ; 18 DC.W @CTBSetConfig - CTBUStart ; 19 DC.W @CTBIntlToEnglish - CTBUStart ; 1A DC.W @CTBEnglishToIntl - CTBUStart ; 1B DC.W @CTBChoose - CTBUStart ; 1C DC.W @CTBGetProcID - CTBUStart ; 1D DC.W @CTBResume - CTBUStart ; 1E DC.W @CTBMenu - CTBUStart ; 1F DC.W @CTBEvent - CTBUStart ; 20 DC.W @CTBActivate - CTBUStart ; 21 DC.W CTBIdle - CTBUStart ; 22 DC.W @CTBAbort - CTBUStart ; 23 DC.W @CTBReset - CTBUStart ; 24 DC.W @None - CTBUStart ; 25 -- was CTBKeystrokeFilter DC.W @CTBPChoose - CTBUStart ; 26 DC.W @CTBSetupXCleanup - CTBUStart ; 27 DC.W @CTBGetErrorString - CTBUStart ; 28 @None RTS @InitCTBUtilities ; 0x01 CLR.W -(SP) JSR __InitCTBUtilities MOVE.W (SP)+,D0 RTS @AppendDITL ; 0x04 CLR.L -(SP) ; place holder - All DITL routines go through the common ; entry DITLEntry, therefore, we need to fake some params MOVE.L 8(A0), -(SP) ; theDialog MOVE.L 4(A0), -(SP) ; theDITL MOVE.W 2(A0), -(SP) ; method CLR.W -(SP) ; place holder for numberItems MOVE.W #AppendMsg, -(SP) ; 01 = append msg JSR DITLEntry ADDA.L #4,SP ; remove place holder RTS @CountDITL ; 0x05 CLR.L -(SP) ; make room MOVE.L 2(A0), -(SP) ; theDialog CLR.L -(SP) ; place holder for DITL CLR.W -(SP) ; place holder for method CLR.W -(SP) ; place holder for numberItems MOVE.W #CountMsg, -(SP) ; 02 = count msg JSR DITLEntry MOVE.L (SP)+, D0 ; return value RTS @ShortenDITL ; 0x06 CLR.L -(SP) ; make room MOVE.L 4(A0), -(SP) ; theDialog CLR.L -(SP) ; place holder for DITL CLR.W -(SP) ; place holder for method MOVE.W 2(A0), -(SP) ; numberItems MOVE.W #ShortenMsg, -(SP) ; 03 = shorten msg JSR DITLEntry ADDA.L #4,SP ; remove place holder RTS @CTBGetCTBVersion LEA Version, A0 ; 0x07 MOVE.W (A0), D0 ; put version number RTS @NuLookup ; 0x08 CLR.W -(SP) MOVE.L 28(A0),-(SP) ; where MOVE.L 24(A0),-(SP) ; prompt MOVE.W 22(A0),-(SP) ; numTypes MOVE.L 18(A0),-(SP) ; typeList MOVE.L 14(A0),-(SP) ; objFilter MOVE.L 10(A0),-(SP) ; zoneFilter MOVE.L 6(A0),-(SP) ; hookProc CLR.L -(SP) ; userData MOVE.W #CTB_NulookupDLOGID,-(SP) ; dialogID (default one) CLR.L -(SP) ; filterProc MOVE.L 2(A0),-(SP) ; theReply JSR __NuPLookup MOVE.W (SP)+,D0 RTS @NuPLookup ; 0x08 CLR.W -(SP) MOVE.L 38(A0),-(SP) ; where MOVE.L 34(A0),-(SP) ; prompt MOVE.W 32(A0),-(SP) ; numTypes MOVE.L 28(A0),-(SP) ; typeList MOVE.L 24(A0),-(SP) ; objFilter MOVE.L 20(A0),-(SP) ; zoneFilter MOVE.L 16(A0),-(SP) ; hookProc MOVE.L 12(A0),-(SP) ; userData MOVE.W 10(A0),-(SP) ; dialogID MOVE.L 6(A0),-(SP) ; filterProc MOVE.L 2(A0),-(SP) ; theReply JSR __NuPLookup MOVE.W (SP)+,D0 RTS @InitManager ; 0x09 CLR.W -(SP) MOVE.W D0, -(SP) ; Manager Selector JSR __InitManager MOVE.W (SP)+,D0 RTS @CTBSetRefCon MOVE.L A1,-(SP) ; 0x0A MOVE.L 6(A0),A1 MOVE.L (A1),A1 MOVE.L 2(A0),CTBRefCon(A1) MOVE.L (SP)+,A1 RTS @CTBGetRefCon MOVE.L A1,-(SP) ; 0x0B MOVE.L 2(A0),A1 MOVE.L (A1),A1 MOVE.L CTBRefCon(A1),D0 MOVE.L (SP)+,A1 RTS @CTBSetUserData MOVE.L A1,-(SP) ; 0x0C MOVE.L 6(A0),A1 MOVE.L (A1),A1 MOVE.L 2(A0),CTBUserData(A1) MOVE.L (SP)+,A1 RTS @CTBGetUserData MOVE.L A1,-(SP) ; 0x0D MOVE.L 2(A0),A1 MOVE.L (A1),A1 MOVE.L CTBUserData(A1),D0 MOVE.L (SP)+,A1 RTS @CTBGetVersion CLR.L -(SP) ; 0x0E MOVE.L 2(A0), -(SP) ; hCore MOVE.W D0, -(SP) ; mgrsel JSR __CTBGetVersion MOVE.L (SP)+, D0 RTS @CTBSetupPreflight CLR.L -(SP) ; make room MOVE.W 6(A0), -(SP) ; procID MOVE.L 2(A0), -(SP) ; magicCookie (var) MOVE.W D0, -(SP) ; manager selector JSR __CTBSetupPreflight MOVE.L (SP)+, D0 ; function result RTS @CTBSetupSetup MOVE.W 16(A0), -(SP) ; procID MOVE.L 12(A0), -(SP) ; theConfig MOVE.W 10(A0), -(SP) ; count MOVE.L 6(A0), -(SP) ; theDialog MOVE.L 2(A0), -(SP) ; magicCookie (var) MOVE.W D0, -(SP) ; manager selector JSR __CTBSetupSetup RTS @CTBSetupFilter CLR.B -(SP) ; make room MOVE.W 24(A0), -(SP) ; procID MOVE.L 20(A0), -(SP) ; theConfig MOVE.W 18(A0), -(SP) ; count MOVE.L 14(A0), -(SP) ; theDialog MOVE.L 10(A0), -(SP) ; theEvent(var) MOVE.L 6(A0), -(SP) ; theItem(var) MOVE.L 2(A0), -(SP) ; magicCookie(var) MOVE.W D0, -(SP) ; manager selector JSR __CTBSetupFilter MOVE.B (SP)+, D0 ; function result RTS @CTBSetupItem MOVE.W 20(A0), -(SP) ; procID MOVE.L 16(A0), -(SP) ; theConfig MOVE.W 14(A0), -(SP) ; count MOVE.L 10(A0), -(SP) ; theDialog MOVE.L 6(A0), -(SP) ; theItem(var) MOVE.L 2(A0), -(SP) ; magicCookie(var) MOVE.W D0, -(SP) ; manager selector JSR __CTBSetupItem RTS @CTBSetupXCleanup MOVE.W 18(A0), -(SP) ; procID MOVE.L 14(A0), -(SP) ; theConfig MOVE.W 12(A0), -(SP) ; count MOVE.L 8(A0), -(SP) ; theDialog MOVE.W 6(A0), -(SP) ; OKed MOVE.L 2(A0), -(SP) ; magicCookie MOVE.W D0, -(SP) ; manager selector JSR __CTBSetupXCleanup RTS @CTBSetupCleanup MOVE.W 16(A0), -(SP) ; procID MOVE.L 12(A0), -(SP) ; theConfig MOVE.W 10(A0), -(SP) ; count MOVE.L 6(A0), -(SP) ; theDialog MOVE.L 2(A0), -(SP) ; magicCookie MOVE.W D0, -(SP) ; manager selector JSR __CTBSetupCleanup RTS @CTBSetupPostflight MOVE.W 2(A0),-(SP) ; procID MOVE.W D0, -(SP) ; manager selector JSR __CTBSetupPostflight RTS @CTBGetConfig CLR.L -(SP) ; make room MOVE.L 2(A0), -(SP) ; hCore MOVE.W D0, -(SP) ; manager selector JSR __CTBGetConfig MOVE.L (SP)+, D0 RTS @CTBSetConfig CLR.W -(SP) ; make room MOVE.L 6(A0), -(SP) ; hCore MOVE.L 2(A0), -(SP) ; thePtr MOVE.W D0, -(SP) ; manager selector JSR __CTBSetConfig MOVE.W (SP)+, D0 ; return value RTS @CTBIntlToEnglish CLR.W -(SP) ; make room MOVE.L 12(A0), -(SP) ; hCore MOVE.L 8(A0), -(SP) ; input ptr MOVE.L 4(A0), -(SP) ; output ptr MOVE.W 2(A0), -(SP) ; language MOVE.W D0, -(SP) ; manager selector JSR __CTBIntlToEnglish MOVE.W (SP)+, D0 RTS @CTBEnglishToIntl CLR.W -(SP) ; make room MOVE.L 12(A0), -(SP) ; hCore MOVE.L 8(A0), -(SP) ; input ptr MOVE.L 4(A0), -(SP) ; output ptr MOVE.W 2(A0), -(SP) ; language MOVE.W D0, -(SP) ; manager selector JSR __CTBEnglishToIntl MOVE.W (SP)+, D0 RTS @CTBChoose ; 292 CLR.W -(SP) ; make room MOVE.L 10(A0), -(SP) ; hCore MOVE.L 6(A0), -(SP) ; where MOVE.L 2(A0), -(SP) ; idleProc MOVE.W D0, -(SP) ; manager selector JSR __CTBChoose MOVE.W (SP)+, D0 ; return point RTS @CTBDefault MOVE.L 6(A0), -(SP) ; theConfig MOVE.W 4(A0), -(SP) ; procID MOVE.W 2(A0), -(SP) ; allocate MOVE.W D0,-(SP) ; MgrSel JSR __CTBDefault RTS @CTBValidate CLR.B -(SP) ; make room MOVE.L 2(A0), -(SP) ; hCore MOVE.W D0,-(SP) ; MgrSel JSR __CTBValidate MOVE.B (SP)+, D0 RTS @CTBGetProcID CLR.W -(SP) ; make room MOVE.L 2(A0), -(SP) ; name MOVE.W D0, -(SP) ; mgrsel JSR __CTBGetProcID MOVE.W (SP)+, D0 RTS @CTBResume MOVE.L 4(A0),-(SP) ; hCore MOVE.W 2(A0),-(SP) ; res JSR __CTBResume RTS @CTBMenu CLR.B -(SP) ; make room MOVE.L 6(A0), -(SP) ; hCore MOVE.W 4(A0), -(SP) ; menuID MOVE.W 2(A0), -(SP) ; item JSR __CTBMenu MOVE.B (SP)+, D0 RTS @CTBEvent MOVE.L 6(A0), -(SP) ; hCore MOVE.L 2(A0), -(SP) ; event record pointer JSR __CTBEvent RTS @CTBActivate ; 21 MOVE.L 4(A0), -(SP) ; hCore MOVE.W 2(A0), -(SP) ; act JSR __CTBActivate RTS @CTBAbort ; 23 CLR.W -(SP) ; make room MOVE.L 2(A0), -(SP) ; hCore JSR __CTBAbort MOVE.W (SP)+, D0 RTS @CTBReset ; 24 MOVE.L 2(A0), -(SP) ; hCore JSR __CTBReset RTS @CTBPChoose ; 26 CLR.W -(SP) ; make room MOVE.L 10(A0), -(SP) ; hCore MOVE.L 6(A0), -(SP) ; where MOVE.L 2(A0), -(SP) ; chooseRec MOVE.W D0, -(SP) ; manager selector JSR __CTBPChoose MOVE.W (SP)+, D0 ; return point RTS @CTBGetErrorString ; 28 MOVE.L 8(A0), -(SP) ; hCore MOVE.W 6(A0), -(SP) ; id MOVE.L 2(A0), -(SP) ; msg MOVE.W D0, -(SP) ; manager selector JSR __CTBGetErrorString RTS CTBGetToolName PROC IMPORT CRMParseRefNum; local EQU -2 ignored EQU -2 name EQU 2 procID EQU 6 LINK A6,#local MOVE.L A1,-(SP) MOVE.L name(A0),A1 MOVE.B #$0,(A1) SUB.L #$2,SP MOVE.W procID(A0),-(SP) MOVE.L A1,-(SP) PEA ignored(A6) JSR CRMParseRefNum TST.W (SP)+ MOVE.L (SP)+,A1 UNLK A6 RTS ENDP _CTBValidate FUNC ; ; Registers: ; A0 - Toolbox Record ; A1 - place to dereference hCore ; A2 - hCore ; A3 - procPtr for valproc ; D0 - (entry)Manager Selector used to index into table ; temp location for setting CCs after getting resource ; D3 - procID until we call the tool, result at end IMPORT CRMGetAResource, CRMToolPreflight, CRMToolPostflight, CRMReleaseResource local EQU -$C context EQU -$C hCore EQU 2 LINK A6,#local MOVEM.L D1-D7/A1-A4,-(SP) SUB.L #4,SP ; Make room for the return value ASL.W #2, D0 ; multiply by 4 MOVE.L ValTable(D0),-(SP) ; pull it from the table MOVE.L hCore(A0),A2 MOVE.L (A2),A1 MOVE.W CTBprocID(A1),D3 MOVE.W D3,-(SP) JSR CRMGetAResource ; Get the Val proc MOVE.L (A7)+,A0 MOVE.L A0,D0 ; Set the condition codes (MOVEA doesn't set them) BEQ.S @error _MoveHHi ; doesn't matter if this errors _HLock ; Lock it up MOVE.L A0,A3 ; Save off the proc handle MOVE.W D3,-(SP) ; Preflight the tool PEA context(A6) JSR CRMToolPreflight CLR.L -(SP) MOVE.L A2,-(SP) ; hCore MOVE.W #CTBValidateMsg,-(SP) ; msg CLR.L -(SP) ; p1 CLR.L -(SP) ; p2 CLR.L -(SP) ; p3 MOVE.L (A3),A0 ; Dereference procptr JSR (A0) MOVE.L (SP)+,D3 PEA context(A6) JSR CRMToolPostflight MOVE.L A3,-(SP) JSR CRMReleaseResource ; Get rid of it BRA.S @done @error MOVE.W 0,D3 @done CLR.L D0 TST.W D3 SEQ D0 NEG.B D0 MOVEM.L D1-D7/A1-A4,-(SP) UNLK A6 RTS DbgInfo.new _CTBValidate ; Let me see a name ValTable DC.L ('cval'), ('tval'), ('fval') ENDFUNC CTBIdle PROC IMPORT CRMToolPreflight, CRMToolPostflight local EQU -$C context EQU -$C hCore EQU 2 LINK A6,#Local MOVEM.L A1-A3,-(SP) MOVE.L hCore(A0),A2 ; Get the core handle MOVE.L (A2),A1 ; Dereference it MOVE.L CTBdefProc(A1),A3 ; Save off the DefProc MOVE.W CTBprocID(A1),-(A7) ; Get the procID PEA context(A6) JSR CRMToolPreflight ; Preflight the tool CLR.L -(SP) ; Call the defproc MOVE.L A2,-(SP) ; hCore MOVE.W #CTBIdleMsg,-(SP) ; msg CLR.L -(SP) ; p1 CLR.L -(SP) ; p2 CLR.L -(SP) ; p3 JSR (A3) TST.L (A7)+ ; Get rid of return value PEA context(A6) ; Postflight the tool JSR CRMToolPostflight MOVEM.L (SP)+,A1-A3 ; Restore the world UNLK A6 RTS DbgInfo.new CTBIdle ; Let me see a name ENDP END