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
 }
}
 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Vivaldi 1.9.818.44 - An advanced browser...
Vivaldi is a browser for our friends. In 1994, two programmers started working on a web browser. Our idea was to make a really fast browser, capable of running on limited hardware, keeping in mind... Read more
Skim 1.4.29 - PDF reader and note-taker...
Skim is a PDF reader and note-taker for OS X. It is designed to help you read and annotate scientific papers in PDF, but is also great for viewing any PDF file. Skim includes many features and has a... Read more
1Password 6.7.1 - Powerful password mana...
1Password is a password manager that uniquely brings you both security and convenience. It is the only program that provides anti-phishing protection and goes beyond password management by adding Web... Read more
FontExplorer X Pro 6.0.2 - Font manageme...
FontExplorer X Pro is optimized for professional use; it's the solution that gives you the power you need to manage all your fonts. Now you can more easily manage, activate and organize your... Read more
VOX 2.8.24 - Music player that supports...
VOX just sounds better! The beauty is in its simplicity, yet behind the minimal exterior lies a powerful music player with a ton of features and support for all audio formats you should ever need.... Read more
OmniPlan 3.7.1 - Robust project manageme...
With OmniPlan, you can create logical, manageable project plans with Gantt charts, schedules, summaries, milestones, and critical paths. Break down the tasks needed to make your project a success,... Read more
Dropbox 24.4.17 - Cloud backup and synch...
Dropbox is an application that creates a special Finder folder that automatically syncs online and between your computers. It allows you to both backup files and keep them up-to-date between systems... Read more
WhatsApp 0.2.4238 - Desktop client for W...
WhatsApp is the desktop client for WhatsApp Messenger, a cross-platform mobile messaging app which allows you to exchange messages without having to pay for SMS. WhatsApp Messenger is available for... Read more
SteerMouse 5.1 - Powerful third-party mo...
SteerMouse is an advanced driver for USB and Bluetooth mice. It also supports Apple Mighty Mouse very well. SteerMouse can assign various functions to buttons that Apple's software does not allow,... Read more
OmniPlan Pro 3.7.1 - Professional-grade...
With OmniPlan Pro, you can create logical, manageable project plans with Gantt charts, schedules, summaries, milestones, and critical paths. Break down the tasks needed to make your project a success... Read more

Latest Forum Discussions

See All

Olli by Tinrocket (Photography)
Olli by Tinrocket 1.0 Device: iOS iPhone Category: Photography Price: $2.99, Version: 1.0 (iTunes) Description: Get drawn in with Olli by TinrocketOlli instantly turns your everyday moments into hand-drawn art and animations. • Watch... | Read more »
Penarium (Games)
Penarium 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: | Read more »
Fire Emblem Heroes is way more profitabl...
Profits for Nintendo's mobile game Fire Emblem Heroes are apparently impressive enough to beat out other Nintendo titles likeSuper Mario Run, despite having 10 times fewer downloads. [Read more] | Read more »
Classic series Robot Unicorn Attack 3 no...
The classic Adult Swim browser game, Robot Unicorn Attack, branched off into a series of popular mobile games. Now, the latest entry into the series, Robot Unicorn Attack 3, is available for iOS and Android mobile devices. [Read more] | Read more »
Sudoku Sweeper (Games)
Sudoku Sweeper 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: A minimalist mashup of Minesweeper and Sudoku. Logic puzzle perfection. Every row, column and zone contains a bomb and one of... | Read more »
Under Leaves (Games)
Under Leaves 1.0.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0.0 (iTunes) Description: Journey into the forest, the jungle or the depths of the deep blue sea. Find chestnuts for the pigs, a caterpillar for the... | Read more »
Ninja Pizza Girl (Games)
Ninja Pizza Girl 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: In the not-so-distant future, rampart traffic congestion has resulted in only one way to deliver pizzas across town in thirty... | Read more »
SCRAP (Games)
SCRAP 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: That day, for no apparent reason, SCRAP decided to wake up and run. He had to, because his activation was a mistake the "Factory" could... | Read more »
The Bunker (Games)
The Bunker 1.1 Device: iOS Universal Category: Games Price: $3.99, Version: 1.1 (iTunes) Description: The critically acclaimed console hit "The Bunker" comes to iOS, The groundbreaking live-action thriller adventure set in a real... | Read more »
Die With Glory (Games)
Die With Glory 1.2.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.2.0 (iTunes) Description: Die with Glory is an epic adventure game where your goal is to die in glorious fashion. You must help Sigurd, a brave old... | Read more »

Price Scanner via MacPrices.net

13-inch 2.9GHz/256GB Space Gray Touch Bar Mac...
B&H Photo has the 13″ 2.9GHz/256GB Space Gray Touch Bar MacBook Pro in stock today and on sale for $150 off MSRP including free shipping plus NY & NJ sales tax only: - 13″ 2.9GHz/256GB Touch... Read more
21-inch iMacs on sale for up to $151 off MSRP
B&H Photo has 21″ iMacs on sale for up to $151 off MSRP, each including free shipping plus NY sales tax only: - 21″ 3.1GHz iMac 4K: $1348 $151 off MSRP - 21″ 2.8GHz iMac: $1199.99 $100 off MSRP... Read more
Weekend deal: Up to $420 off new MacBook Pros...
Apple has Certified Refurbished 2016 15″ and 13″ MacBook Pros available for $230 to $420 off original MSRP. An Apple one-year warranty is included with each model, and shipping is free: - 15″ 2.6GHz... Read more
Price drop: 15-inch 2.2GHz Retina MacBook Pro...
Amazon has dropped their price on 15″ 2.2GHz Retina MacBook Pros (MJLQ2LL/A) to $1709.99 including free shipping. Their price is $290 off MSRP for this model. Note that stock may sell out quickly at... Read more
2.8GHz Mac mini on sale for $899, save $100
B&H Photo has the 2.8GHz Mac mini (model number MGEQ2LL/A) on sale for $899 including free shipping plus NY & NJ sales tax only. Their price is $100 off MSRP. Read more
Check Apple prices on any device with the iTr...
MacPrices is proud to offer readers a free iOS app (iPhones, iPads, & iPod touch) and Android app (Google Play and Amazon App Store) called iTracx, which allows you to glance at today’s lowest... Read more
New System Clock for macOS by B-Eng Now Avail...
Fehraltorf, Switzerland based B-Eng has announced the release and immediate availability of System Clock, the company’s new system monitor and information app developed exclusively for macOS. System... Read more
DEVONtechnologies Celebrates 15th Anniversary...
DEVONtechnologies celebrates its 15th company anniversary with a 30% discount on all its software products from May 1st through 5th, 2017. In spring 2002, DEVONtechnologies opened its website and... Read more
WaterField Designs Invites Customers to Help...
San Francisco based WaterField Designs invites customers and air travelers to participate in developing the next generation in-flight travel case, the Air Porter. Frustrated with limited legroom,... Read more
Save up to $260 with Apple refurbished 12-inc...
Apple has Certified Refurbished 2016 12″ Retina MacBooks available for $200-$260 off MSRP. Apple will include a standard one-year warranty with each MacBook, and shipping is free. The following... Read more

Jobs Board

*Apple* Mobile Master - Best Buy (United Sta...
**501505BR** **Job Title:** Apple Mobile Master **Location Number:** 000849-Gurnee-Store **Job Description:** **What does a Best Buy Apple Mobile Master do?** At Read more
Best Buy *Apple* Computing Master - Best Bu...
**498428BR** **Job Title:** Best Buy Apple Computing Master **Location Number:** 000293-Rockville-Store **Job Description:** **What does a Best Buy Apple Read more
*Apple* Mac Computer Technician - GeekHampto...
…complex computer issues over the phone and in person? GeekHampton, Long Island's Apple Premium Service Provider, is looking for you! Come work with our crew Read more
*Apple* Retail - Multiple Positions- Chicago...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Systems Engineer - California Polyte...
Cal Poly, San Luis Obispo Apple Systems Engineer Department: ITS - Customer & Tech Support (134900) College/Division: Academic Affairs Salary Range: Position Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.