andyb@hasvcr.UUCP (Andy Babinszki) (08/01/89)
I want to fire up a particular desk accessory every time a programme is
launched. I have no trouble installing a patch to the launch trap,
however, I cannot isolate the name of the application to be launched ( needed
by the DA ). When I pass control to the original launch trap, everything
works as it should. According to Inside Macintosh V.II p. 60, A0 contains
all the launch parameters. 0(A0) is a pointer to a PASCAL string which is
the name of the file to be launched. ( ie. the string is preceeded by a
length byte ) If that is so then the following code should be able to
copy the app name into curAppName without problems, as far as I can see.
But the catch is that it doesn't. I'd appreciate it if anyone could tell
me what I'm doing wrong.
Note: I tried to LEA NoAppName,A0
instead of the actual (A0), and that worked as it should.
Thankyou,
Andy Babinszki
...!ubc-cs!van-bc!hasvcr!andyb
The actual patch code:
MOVEM.L D0-D7/A0-A6,-(SP) ; Save registers
Move.L 0(A0),-(SP) ; save pointer to app name
Pea -4(A5)
_InitGraf
_InitResources
_InitFonts
_InitWindows
_TEInit
Clr.L -(SP)
_InitDialogs
_InitCursor
Move.L (SP)+,A0 ; get pointer to app name
Clr.L D0
Move.B (A0),D0 ; get length byte
Add.L #1,D0
Cmp.B #64,D0 ; names > 64 chars are illegal
Bgt.S OutAHere ; if D0 - 64 > 0 => namelen > 64
LEA CurAppName, A1
_BlockMove
Clr.W -(SP)
Pea DAName
_OpenDeskAcc
Move.W (SP)+,D0 ; dump the return value
OutAHere:
MOVEM.L (SP)+,D0-D7/A0-A6 ; Restore registers
Move.L OldTrap,-(SP) ; the REAL _Launch trap
RTS
OldTrap DC.L 0
InstallFlag DC.W 0
DAName DC.B $C,00,'SomeDeskAcc'
grafPtr DC.L 0
CurAppName DCB.B 64,0
NoAppName DC.B $F,00,'No Application'
EndPatch DC.B 0
End