TweetFollow Us on Twitter

GoodbyE Kiss
Volume Number:3
Issue Number:2
Column Tag:Tech Notes

GoodbyE Kiss

by Dan Weston

I'd like to inform the Mac community of a bug in the generic desk accessories that appear in my book, The Complete Book of Macintosh Assembly Language Programming, Vol I. Kirk Austin pointed out to me that the desk accessories crashed when receiving a goodbye kiss. The goodbye kiss is supposed to let your desk accessory clean up after itself if the application over which the accessory is running is terminated. For example, if your DA maintained open disk files or messed with low memory globals, you would normally close the files and reset the globals when a user closed the desk accessory. The goodbye kiss is provided by the Mac system software for those cases where the user quits an application without first closing the desk accessories. The underlying application doesn't need to be concerned with the goodbye kiss; it is handled totally by the Mac system software as it reinitializes the heap for the next program.

If you want your desk accessory to receive the goodbye kiss you must set bit #12 of the first word in the DA header. When an application terminates, the system software looks at each open desk accessory and sends a goodbye kiss if the appropriate bit is set in the DA header.

The goodbye kiss is a good idea. It prevents your desk accessory from being blown away without warning. The problem is that Inside Macintosh doesn't document how the goodbye kiss is implemented. In my book, I said that the goodbye kiss invoked the desk accessory's close routine. Now, after investigating a little further as a result of Kirk's letter, I find that the goodbye kiss doesn't invoke the close routine. Instead, the goodbye kiss is a control call with CSCode = -1. This causes big problems for my DA code because I use a jump table based on the belief that CSCode will ALWAYS be between 64 and 73. When the -1 CSCode hits the jump table it heads for ozone city; reach for the reset button.

The solution is to put a special case at the beginning of the control routine to watch for the goodbye control call and route it around the jump table (or just disable the goodbye call in the header, as Kirk did).

The modified code section follows:

;--------------------------------- 
; Control handles the control messages, which are the heart
; of the driver. Code values range from 64-73 (*** and -1
; for goodbye kiss ***) enter with pointer to DCE in A1 
; and pointer to Paramblock in A0 

Control 
 
 MOVEM.LA3-A4,-(SP); preserve A3 - A4  
 MOVE.L A1,A4    ; keep DCE ptr in A4 
 MOVE.L A0,A3    ; keep Pblock ptr in A3
 MOVE.W CSCode(A3),D0; get control opCode Pblock 
 ;******* 
 CMP.W  #-1,D0   ; is this the goodbye kiss? 
 BEQ    DoGoodbye; goodbye routine 
 ;******* 
 SUB.W  #64,D0   ; adjust range to 0-9 
 ADD.W  D0,D0    ; multiply by 2 for table 
 MOVE.W ControlTable(D0),D0 ; offset to routine 
 JMP    ControlTable(D0)  ; jump to it  

;---------- Offset table for Control routines --------- 
; **almost** all possible control messages that can be sent to
; a DA are here. All the routines mentioned here should 
; return by branching to CtlDone. 

ControlTable:
   
DC.W  DoEvent-ControlTable; an event (64) 
DC.W  DoPeriodic-ControlTable ; a periodic interupt (65) 
DC.W  DoCursor-ControlTable ; adjust cursor on DA wind (66) DC.W
 DoMenu-ControlTable ; menu selection (67) 
DC.W  DoUndo-ControlTable ; undo (68)  
DC.W  CtlDone-ControlTable; *** code 69 is not used *** DC.W   DoCut-ControlTable
 ; cut (70)
DC.W  DoCopy-ControlTable ; copy (71) 
DC.W  DoPaste-ControlTable; paste (72) 
DC.W  DoClear-ControlTable; clear (73)  

;--------------------------------------------   
CtlDone:  
 MOVE.L A4,A1    ; return DCE ptr to A1
 MOVE.L A3,A0    ; return PBlock ptr to A0
 MOVEM.L(SP)+,A3-A4; A3 - A4 restored 

 MOVE.W #0,D0    ; no error 
 RTS    ; go back to calling program 

;----------------------------------------------------   
DoGoodBye:
 MOVE.L A4,A1    ; return DCE ptr to A1
 MOVE.L A3,A0    ; return PBlock ptr to A0
 MOVEM.L(SP)+,A3-A4; A3 - A4 restored  
 MOVE.W #0,D0    ; no error
 MOVE.L JIODone,-(SP); return vector for asynch calls 
 RTS    ; go back to calling program 
 
 BRA.S  CtlDone  
;-------------------------------------------------------- 

One other detail that is important to note is that the goodbye kiss is an asynchronous control call. All other calls to desk accessories are synchronous, which means that they can return with a simple RTS. Asynchronous calls, on the other hand, must return via the JIODone routine. The low memery global JIODone, holds a pointer to this system routine, which clears the request from the I/O queue. We move this pointer onto the stack and then RTS. This routes our return through the JIODone routine.

Thanks to Kirk for bringing this to my attention. If anyone else has bugs to report from the book I'd love to hear about them. As best I can, I'll fix the bugs and post the information here in Mactutor.

 
AAPL
$431.77
Apple Inc.
+0.00
MSFT
$34.98
Microsoft Corpora
+0.00
GOOG
$900.62
Google Inc.
+14.37

MacTech Search:
Community Search:

Software Updates via MacUpdate

EarthDesk 6.2 - Striking animated image...
EarthDesk replaces your static desktop picture with a rendered image of Earth showing correct sun, moon and city illumination. With an Internet connection, EarthDesk displays near real-time global... Read more
Apple Configurator 1.3 - Configure and d...
Apple Configurator makes it easy for anyone to mass configure and deploy iPhone, iPad, and iPod touch in a school, business, or institution. Three simple workflows let you prepare new iOS devices... Read more
Apple Java for Mac OS X 10.6 Update 16 -...
Apple Java for Mac OS X 10.6 Update 16 delivers improved security, reliability, and compatibility by updating Java SE 6 to 1.6.0_51.Version Update 16: See http://support.apple.com/kb/HT5744 for more... Read more
Neat 4.0.3 - Digital filing system for r...
Neat (formerly NeatWorks) is a powerful scanning and digital filing system that enables you to scan and organize receipts, business cards, and documents. Unlike other scanning software, NeatWorks... Read more
Adobe Muse CC 5.0 - Design and publish H...
Adobe Muse enables designers to create websites as easily as creating a layout for print. Design and publish original HTML pages using the latest Web standards, and without writing code. Now in beta... Read more
Adobe Creative Cloud 1.0 - Everything ne...
Adobe Creative Cloud costs $49.99/month (or less if you're a previous Creative Suite customer). Creative Suite 6 is still available for purchase (without a monthly plan) if you prefer. Introducing... Read more
Adobe Flash Professional CC 13.0.0.759 -...
Flash Professional CC is available as part of Adobe Creative Cloud for as little as $19.99/month (or $9.99/month if you're a previous Flash Professional customer). Flash Professional CS6 is still... Read more
Adobe InCopy CC 9.0 - Create streamlined...
InCopy CC is available as part of Adobe Creative Cloud for as little as $19.99/month (or $9.99/month if you're a previous InCopy customer). InCopy CS6 is still available for purchase (without a... Read more
Adobe After Effects CC 12.0 - Create pro...
After Effects CC is available as part of Adobe Creative Cloud for as little as $19.99/month (or $9.99/month if you're a previous After Effects customer). After Effects CS6 is still available for... Read more
Adobe Premiere Pro CC 7.0 - Digital vide...
Premiere Pro CC is available as part of Adobe Creative Cloud for as little as $19.99/month (or $9.99/month if you're a previous Premiere Pro customer). Premiere Pro CS6 is still available for... Read more

Latest Forum Discussions

See All

World War Z Game Drops Its Price To A Bu...
World War Z Game Drops Its Price To A Buck For The Movie’s Release Posted by Andrew Stevens on June 18th, 2013 [ permalink ] | Read more »
Runaway: A Road Adventure Review
Runaway: A Road Adventure Review By Campbell Bird on June 18th, 2013 Our Rating: :: COMBINE ITEMS TO WINUniversal App - Designed for iPhone and iPad Runaway is a classic, old-school adventure experience, for better and for worse.   | Read more »
Pinball Rocks HD Review
Pinball Rocks HD Review By Blake Grundman on June 18th, 2013 Our Rating: :: QUARTER MUNCHERUniversal App - Designed for iPhone and iPad When players have the chance to buy free balls at the end of a game, that speaks volumes about... | Read more »
Minecraft Realms Server Slots Are Beginn...
Minecraft Realms Server Slots Are Beginning To Open, But Slowly Posted by Andrew Stevens on June 18th, 2013 [ permalink ] | Read more »
Videon Review
Videon Review By Jennifer Allen on June 18th, 2013 Our Rating: :: GREAT ALL-ROUNDERiPhone App - Designed for the iPhone, compatible with the iPad Offering mostly everything one could want from a video recording app, Videon is quite... | Read more »
The Portable Podcast, Episode 190
Flatter than ever! In This Episode: Carter and co-host Brett Nolan talk about the big announcements from WWDC, including iOS 7. Will it be a huge change to iOS? As well, the announcement of MFi gamepad support in iOS is discussed – will it herald... | Read more »
Apple Approved Game Controllers Only Mak...
I’m all for game controllers for iOS devices, for what it’s worth. I’ve got a few of them, and they are all gathering dust. The issue with controllers for mobile devices is that they never get used. Not even for the games that are better when played... | Read more »
CIA: Operation Ajax Gives Readers Free A...
CIA: Operation Ajax Gives Readers Free Access To The Interactive Comic Posted by Andrew Stevens on June 18th, 2013 [ permalink ] | Read more »
Youda Survivor Drops Its Price For A Mag...
Youda Survivor Drops Its Price For A Magical, Limited Time Only Posted by Andrew Stevens on June 18th, 2013 [ permalink ] iPad Only App - Designed for the iPad | Read more »
Galaxy At War Online Review
Galaxy At War Online Review By Rob Rich on June 18th, 2013 Our Rating: :: THE FAMILIAR FRONTIERUniversal App - Designed for iPhone and iPad Galaxy At War Online has all the familiar trappings of many compelling freemium games. The... | Read more »

Price Scanner via MacPrices.net

iFixIt Tears Down mid-2013 11.6-inch MacBook Air
iFixIt Chief Information Architect Miroslav Djuric says: The epic week of disassembly continues: Today, the MacBook Air 11″ found its way onto our teardown table and was soon just another Apple in... Read more
Mature Consumers Know When They Need a PC
Tech.Pinions’ Ben Bajarin sensibly observes that one of the fundamental characteristics of a mature market is mature consumers – mature in the sense that they know what they want and more importantly... Read more
Windows 8 Continues Ascension in User Popularity R...
Softpedia’s Bogdan Popa notes that Windows 8 is now the fourth most popular operating system in the world, and according to some new statistics, it continues to gain new users every day. Popa cites... Read more
Apple iOS and OS X Updates Put Bluetooth Smart Rea...
From its Worldwide Developers Conference last week, Apple announced unprecedented integration of Bluetooth technology into its operating systems – a move that sets the bar for Bluetooth integration... Read more
Buy a 13″ MacBook Pro, get AppleCare for as little...
Adorama has 13″ MacBook Pros bundled with 3-year AppleCare Protection Plans for as little as $40 extra (AppleCare has an MSRP of $249 for 13-inch MacBook Pros). Shipping is free, and Adorama charges... Read more
Updated MacBook Price Trackers
We’ve updated our MacBook Price Trackers with the latest information on prices, bundles, and availability on MacBook Airs, MacBook Pros, and the MacBook Pros with Retina Displays from Apple’s... Read more
Save $140 on the 15″ 2.3GHz MacBook Pro
B&H Photo has the 15″ 2.3GHz MacBook Pro on sale for $1659 including free shipping. Their price is $140 off MSRP. B&H will include free copies of Parallels Desktop, Bento Database, and LoJack... Read more
15-inch Retina MacBook Pros on sale for $200 off M...
 B&H Photo has 15″ Retina MacBook Pros on sale for $200 off MSRP including free shipping. B&H will also include free copies of Parallels Desktop, Bento Database, and LoJack for Laptops... Read more
Apple refurbished iMacs available for up to $330 o...
Apple has Apple Certified Refurbished 2012 iMacs in stock today for up to $330 off MSRP – 15% off. Each iMac comes with an Apple one-year warranty, and shipping is free: - 21″ 2.7GHz iMac: $1099 $100... Read more
Save up to $200 on MacBook Pros with Apple Educati...
Purchase a new MacBook Pro at The Apple Store for Education, and take up to $200 off MSRP. All teachers, students, and staff of any educational institution qualify for the discount. Shipping is free... Read more

Jobs Board

*Apple* At-Home Team Manager - Apple (U...
Changing the world is all in a day's work at Apple . If you love innovation, here's your chance to make a career of it. You'll work hard. But the job comes with more than Read more
*Apple* Retail - Manager - Apple (Unite...
Job SummaryKeeping an Apple Store thriving requires a diverse set of leadership skills, and as a Manager, youre a master of them all. In the stores fast-paced, dynamic Read more
*Apple* - Solution Architect - CompuCom...
Job Location: US-TX-Dallas Posted Date: 4/18/2013 Overview: The Apple Solution Architect (SA) will be responsible for supporting pre-sales and post-sales solutions in Read more
*Apple* Support Technician; Mid-level -...
A Kforce client in Washington, DC area is seeking an Apple Support Technician. This contractor will have the following types of responsibilities including, but not Read more
Systems Engineer - *Apple* TV - Apple...
Job Summary The Apple TV team is looking for an experienced engineer with a passion for delivering first in class home entertainment solutions. The individual must be Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.