TweetFollow Us on Twitter

ShiftMod
Volume Number:3
Issue Number:9
Column Tag:Technical Note

ShiftMod Patch

By Mike Scanlin, San Diego, CA

Last week we were talking with an IBM freak about the differences between our Macs and his footrest, that is, PC. One of his complaints about the Mac was that you get upper case letters when both the shift key and caps lock key are down at the same time. He wanted to be able to type a lower case letter if the caps lock key was down by pressing the shift key. Then he could type sentences like “i WISH i HAD A mACINTOSH” without having to hold down the shift key the whole time. Well, Mac fans, fear not. Now the Mac can do this too. Say hello to Mr. ShiftMod.

All that is really needed is a tail patch to _GetNextEvent that checks if a keyDown or autoKey event occured while the caps lock and shift keys were held down. The only problem with implementing it is that because _GetNextEvent is a stack based trap (it gets its parameters from the stack) the patch requires a bit of self modifying code to get it to set things up correctly. While this example is trivial, the technique used here can be used to patch any stack based trap routine.

A tail patch is something that first calls the original trap and then does some post-processing before returning to the caller. If the original trap is not stack based, we can do a JSR OriginalTrap at the beginning of our patch, do our post-processing, and end with an RTS. However, if the original trap is stack based it will expect the stack to look a certain way when it gets called. By doing a JSR to it, we put a return address on top of the existing stack which, in effect, shifts all of the parameters by 4 bytes (relative to the top of the stack). The routine being called does not know about the extra return address and will use the wrong bytes as parameters.

The code listed here is an application, but it can be easily (via ResEdit) be made into an INIT resource and pasted into your system file. It installs itself in the system heap and hangs around as long as you don’t turn your Mac off. This code is useful if you want to install any event processing stuff that is global for all applications. For instance, you could call _Eject every time you detect a diskEvt and count how many times someone tries to insert a disk in a minute. Or you could do something semi-useful like adding a keyclick after keyDowns (how about a mouseclick on mouseDowns?) for debugging.

Now how about an IBM hacker writing a routine to make his machine return upper case letters when both the shift key and caps lock key are down? Is it even possible?

/* shiftMod.c    2 July 1987
 * 
 * by Mike Scanlin and Andy Voelker
 *
 * This program installs a tail patch on _GetNextEvent so
 * that the shift key toggles between upper and lower case
 * letters if the caps lock key is down.
 *
 * No toggle is done if the option and/or command key was
 * held down.
 */
 
#include“Asm.h”
#include“EventMgr.h”

#define whatOFFSET(EventRecord,what)
#define message  OFFSET(EventRecord,message)
#define modifiersOFFSET(EventRecord,modifiers)

#define GetNextEvent 0xA970
#define JMP 0x4EF9
#define memFullErr -108

main()
{
 asm  {
 move.l D3,-(SP)
 
/* set up the JMP instruction at the end of the patch */
 lea    @patchExit,A0
 move #JMP,(A0)

/* get the old trap address */
 move #GetNextEvent,D0
 _GetTrapAddress
 
/* set up the JMP instruction that calls the original trap */
 lea    @origTrap,A1
 move #JMP,(A1)+
 move.l A0,(A1)

/* get some space in the system heap */
 lea    @last,A0
 lea    @first,A1
 suba.l A1,A0
 move.l A0,D0
 move.l D0,D3  /* save for _BlockMove */
 _NewPtrSYS
 cmpi #memFullErr,D0
 beq.s  @noPatch
 move.l A0,-(SP) /* save for _BlockMove */

/* set the trap address to the space we just got in the
 * system heap
 */
 move #GetNextEvent,D0
 _SetTrapAddress
 
/* now move it into place */
 lea    @first,A0
 move.l (SP)+,A1
 move.l D3,D0
 _BlockMove
 
@noPatchmove.l (SP)+,D3
 rts

/* Here’s the new _GetNextEvent.  It calls the existing
 * _GetNextEvent and then checks if a keyDown or autoKey
 * event is being reported.
 */

 /* save original return address */
@first  lea @exitAddress,A0
 move.l (SP)+,(A0)

 /* save ptr to event record */
 lea    @eventPtr,A0
 move.l (SP),(A0)

 /* return to our routine */
 pea    @tailPatch

@origTrap nop    /* JMP to original trap */
 nop
 nop
 
@tailPatchlea    @eventPtr,A0
 move.l (A0),A0

 /* Is it a keyDown or autoKey? */
 move what(A0),D0
 cmpi #keyDown,D0
 beq.s  @isKeyDown
 cmpi #autoKey,D0
 bne.s  @patchExit

@isKeyDownmove modifiers(A0),D0
 andi   #shiftKey+alphaLock+optionKey
 +cmdKey,D0
 eori   #shiftKey+alphaLock,D0
 bne.s  @patchExit

 move.l message(A0),D0
 cmpi.b #’A’,D0
 bmi.s  @patchExit
 cmpi.b #’Z’,D0
 bgt.s  @patchExit
 addi.b #’a’-’A’,D0
 move.l D0,message(A0)

 /* return to original caller via long JMP */
@patchExitnop
@exitAddressnop
 nop


@eventPtr dc.l 0 /* storage for event record ptr */

@last
 }
}
 
AAPL
$100.75
Apple Inc.
+0.64
MSFT
$46.36
Microsoft Corpora
-0.08
GOOG
$577.36
Google Inc.
+1.00

MacTech Search:
Community Search:

Software Updates via MacUpdate

QuickBooks 2015 16.0.0.1352 R1 - Financi...
QuickBooks 2015 helps you manage your business easily and efficiently. Organize your finances all in one place, track money going in and out of your business, and spot areas where you can save.... Read more
Mac DVDRipper Pro 5.0.1 - Copy, backup,...
Mac DVDRipper Pro is the DVD backup solution that lets you protect your DVDs from scratches, save your batteries by reading your movies from your hard disk, manage your collection with just a few... Read more
Apple OS X bash Update 1.0 - Fix for sec...
The OS X bash Update fixes a security flaw in the bash UNIX shell on OS X 10.9.5 (also on OS X 10.8 and 10.7 [see Related Links below]). OS X 10.9.5 or later Downloads for OS X 10.8 and OS X 10.7 in... Read more
SyncTwoFolders 2.0.5 - Syncs two user-sp...
SyncTwoFolders simply synchronizes two folders. It supports synchronization across mounted network drives and it is a possibility to run a simulation showing in a log what will be done. Please visit... Read more
FinderPop 2.5.7 - Classic Mac utility, n...
FinderPop is a Universal preference pane that extends OS X's contextual menus using a FinderPop Items folder much as the Apple Menu Items folder used to do for the Apple menu. It has other features... Read more
VueScan 9.4.45 - Scanner software with a...
VueScan is a scanning program that works with most high-quality flatbed and film scanners to produce scans that have excellent color fidelity and color balance. VueScan is easy to use, and has... Read more
LibreOffice 4.3.2.2 - Free Open Source o...
LibreOffice is an office suite (word processor, spreadsheet, presentations, drawing tool) compatible with other major office suites. The Document Foundation is coordinating development and... Read more
calibre 2.4 - Complete e-library managem...
Calibre is a complete e-book library manager. Organize your collection, convert your books to multiple formats, and sync with all of your devices. Let Calibre be your multi-tasking digital... Read more
Default Folder X 4.6.9b1 - Enhances Open...
Default Folder X attaches a toolbar to the right side of the Open and Save dialogs in any OS X-native application. The toolbar gives you fast access to various folders and commands. You just click... Read more
Beamer 2.0.4 - Stream any movie file fro...
Beamer streams to your Apple TV.... Plays any movie file - Just like the popular desktop movie players, Beamer accepts all common formats, codecs and resolutions. AVI, MKV, MOV, MP4, WMV, FLV. To... Read more

Latest Forum Discussions

See All

apeFilter (Music)
apeFilter 1.0 Device: iOS Universal Category: Music Price: $6.99, Version: 1.0 (iTunes) Description: | Read more »
Shred It! Review
Shred It! Review By Jennifer Allen on September 30th, 2014 Our Rating: :: GORGEOUS BUT BASICUniversal App - Designed for iPhone and iPad It might look lovely, but Shred It! is a pretty shallow endless runner/snowboarding game.   | Read more »
It Came From Canada: Angry Birds: Transf...
Anyone afraid that throwing Transformers into the Angry Birds mix would result in a Michael Bay-level of childhood pillaging can rest easy. While Rovio’s famous fowls may be a 21st century staple, Angry Birds: Transformers wears its affection for... | Read more »
Galaxy Trucker Review
Galaxy Trucker Review By Rob Thomas on September 30th, 2014 Our Rating: :: IN FOR THE LONG HAULiPad Only App - Designed for the iPad We got a great big convoy, rockin’ through the night… the endless night of outer space, that is.... | Read more »
Moon and Sun – children’s book Review
Moon and Sun – children’s book Review By Amy Solomon on September 30th, 2014 Our Rating: Moon and Sun is a fable-like children’s book with lush illustrations.   Developer: Marcio Monteiro Price: $3.99 Version: 1.0 App Reviewed on... | Read more »
Kairosoft Finally Brings The Pyraplex to...
Kairosoft Finally Brings The Pyraplex to iOS Posted by Jessica Fisher on September 30th, 2014 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
Yeti’s Parole Officer Review
Yeti’s Parole Officer Review By Jennifer Allen on September 30th, 2014 Our Rating: Universal App - Designed for iPhone and iPad Yeti’s Parole Officer proves that looks aren’t everything in this entertaining, if plain, piece of... | Read more »
Record Keeper and World Wide Words – Two...
Record Keeper and World Wide Words – Two New Final Fantasy Games Arrive on iOS in Japan Posted by Ellis Spice on September 30th, 2014 [ permalink ] | Read more »
iPollute Review
iPollute Review By Nadia Oxford on September 30th, 2014 Our Rating: :: iPOLLUTE, uPOLLUTEUniversal App - Designed for iPhone and iPad iPollute is a delightful-looking pollution simulator, though it’s a bit light on “game” content... | Read more »
This Week at 148Apps: September 22-26, 2...
Your Source For The Latest App Reviews   | Read more »

Price Scanner via MacPrices.net

MacBook Airs on sale for $100 off MSRP, start...
Best Buy has the new 2014 MacBook Airs on sale for $100 off MSRP on their online store. Choose free home shipping or free local store pickup (if available). Prices valid for online orders only, in-... Read more
Apple Releases OS X Mavericks bash Update 1.0...
Apple has released a patch update for OS X Mavericks users to address the recently-detected “Shellshock” security bug in BSD UNIX’s bash shell. Apple says only a few Mac users who had manually... Read more
Pivotal Payments Ready for Apple Pay – FlexPo...
Pivotal Payments, a provider of merchant services and global payment processing solutions, has announced its proprietary FlexPoint platform will support credit and debit transactions through Apple’s... Read more
iStabilizer Announces Tabarm — First Friction...
iStabilizer, a specialist in universal lightweight compact tripods, steady cams, dollies, mounts, and remotes for smartphones, tablets, and cameras, announced today the iStabilizer tabArm, the first... Read more
IStabilizer Flex Smartphone Tripod Wins Usa T...
iStabilizer, a specialist in universal lightweight compact tripods, steady cams, and other products for smartphones, tablets, and cameras, has announced today that its iStabilizer Flex smartphone... Read more
13-inch 2.8GHz Retina MacBook Pro on sale for...
B&H Photo has the new 2014 13″ 2.8GHz Retina MacBook Pro on sale for $1699.99 including free shipping plus NY sales tax only. They’ll also include free copies of Parallels Desktop and LoJack for... Read more
15-inch Retina MacBook Pros on sale for up to...
B&H Photo has the new 2014 15″ Retina MacBook Pros on sale for up to $150 off MSRP. Shipping is free, and B&H charges NY sales tax only. They’ll also include free copies of Parallels Desktop... Read more
Get Down to Business On Your iPad With Free N...
Utah based Poem LLC has introduced Nexticy 1.0, a full-featured, affordable (Free) forms application for iPad. Nexticy makes it ‘way easy’ to create, store, retrieve and analyze paper-like forms of... Read more
13-inch Retina MacBook Pros on sale for $100...
Best Buy has 13-inch 2.6GHz Retina MacBook Pros on sale for $100 off MSRP on their online store. Choose free shipping or free local store pickup (if available). Prices are for online orders only, in-... Read more
Reports Outline Claimed 12-Inch Macbook Air D...
Blogger Jack March says that according to information he’s received from an anonymous “source familiar with Apple’s plans,” the next-generation MacBook Air will launch in mid-2015 and be available... Read more

Jobs Board

*Apple* Retail - Multiple Positions (US) - A...
Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, you're also the Read more
*Apple* Retail - Multiple Positions (US) - A...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Senior Event Manager, *Apple* Retail Market...
…This senior level position is responsible for leading and imagining the Apple Retail Team's global event strategy. Delivering an overarching brand story; in-store, Read more
*Apple* Solutions Consultant (ASC) - Apple (...
**Job Summary** The ASC is an Apple employee who serves as an Apple brand ambassador and influencer in a Reseller's store. The ASC's role is to grow Apple Read more
Project Manager / Business Analyst, WW *Appl...
…a senior project manager / business analyst to work within our Worldwide Apple Fulfillment Operations and the Business Process Re-engineering team. This role will work Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.