Title Banner


Technotes


Download

Acrobat file (116K)
Download

ClarisWorks 4 file (36K)
Download Technotes 1001-1012

QuickView file (473K)

T E C H N O T E : A Technique for Figuring Out a Resource's Base Value



Technote 1006 OCTOBER 1995



By Matthew Xavier Mora
Apple Developer Technical Support (DTS)



In the chapter on the Resource Manager in Inside Macintosh: More Macintosh Toolbox, owned resources are explained, but the chapter does not include a sample of how to actually figure out the resource's base value. This Technnote includes a shortcut in C, Pascal and ASM to accomplish this task.

This Technote is specifically aimed at those developers who need to know about a resource's ownership, such as developers working on Desk Accessories or Control Panels.

Contents


A Shortcut for Figuring Out a Resource's Base Value

The function GetResBase takes the driver number and returns the ID of the first resource owned by that driver. This is according to the private resource numbering convention documented in the Resource Manager chapter on page 1-48 of Inside Macintosh: More Macintosh Toolbox.

In C, you can use this macro:

#define GetResBase(id) (0xC000 | (((-(id)) - 1) << 5))
and in Pascal, you can use this function:

function GetResBase(resID: integer):integer;

begin
    GetResBase := BOR($C000, BSL(longint(((-resID)-1)),5));
end;
and for those who still program in 68k asm, you can use this function:

   ;FUNCTION GetResBase(driverNumber: INTEGER): INTEGER;
;

GetResBase FUNC

MOVE.L (SP)+,A0 ; Get return address
MOVE.W (SP)+,D0 ; Get driver number
NOT.W D0 ; Change to unit number
ASL.W #5,D0 ; Move it over in the word
ORI.W #$C000,D0 ; Add the magic bits
MOVE.W D0,(SP) ; Return function result
JMP (A0) ; and return
END

Further Reference

Change History

This Note was originally written by Bryan Stearns (DTS Emeritus), in May, 1986. Since then, it has been rewritten to include Pascal and C versions of the shortcut.



Technotes
Previous Technote | Contents | Next Technote