Configure Window
Volume Number: | | 7
|
Issue Number: | | 1
|
Column Tag: | | Pascal Procedures
|
Related Info: Window Manager
Project X: Configurable Window
By Rod Magnuson, Lincoln, NE
Note: Source code files accompanying article are located on MacTech CD-ROM or source code disks.
[Rod Magnuson: Has been programming the Macintosh for 2 1/2 years. Founded MindVision software with Steve Kiene in early 1988. Co-author of Elaborate!, a HyperCard XCMD that adds extensive reporting abilities to HyperCard. Worked on the development team of Chroma-32, a scanning application that allows color scans to be scanned on a grey-scale scanner. Currently working with Steve Kiene on Power Pack Vol. #1, a forth coming INIT package.]
WHAT IS IT?
Project X is a small, quick and dirty application that illustrates an idea for Macintosh windows. The window in the application is user configurable; that is: the user can move the go-away box, title bar, zoom box, content area, scrollbars, and grow box by holding down the command key and dragging it where the user wants. The window part will then move when the window is dragged in the same corresponding position to the rest of the window parts. The idea belongs to Scott Boyd; I am not sure that he imagined what I have come up with, but he did originally think of a customizable window definition. Sorry Scott, it is not a WDEF, but it does illustrate the idea.
The code is not important and most-likely has bugs, it was written as quickly as my mind could think and my fingers could type; it was one of those applications that you really could not justify spending large amounts of time on because you couldnt get anything out of it, and, therefore, you wrote it as quickly as possible. What is important about this application is the idea!
Original window
Customized window
UTOPIA?
I will not say that this idea is perfect. It is not. It needs to be worked on and possibly trashed altogether. It is, however, a new idea that could make the Macintosh user interface more customizable.
MindVision Software
1721 Benton Street.
Lincoln, NE 68512
(402)477-3269
{--------------------------------------------------------------}
Program ProjectX;
USES
Types, { Nothing }
Errors,{ Nothing }
Memory,{ Types }
OSUtils, { Types }
QuickDraw, { Types }
Resources, { Types }
SegLoad, { Types }
Controls,{ QuickDraw }
Events,{ QuickDraw }
Fonts, { QuickDraw }
Menus, { QuickDraw }
TextEdit,{ QuickDraw }
ToolUtils, { QuickDraw }
OSEvents,{ Types, Events, OSUtils }
Desk, { Types, QuickDraw, Events }
Windows, { Events, Controls }
Dialogs, { Windows, TextEdit }
Devices, { OSUtils, Files, QuickDraw }
Lists, { Controls }
Packages,{ Dialogs, Files }
Script;{ Packages }
(*
The following lines will rez, compile, link, and execute ProjectX
Rez Types.r SysTypes.r Pict.r ProjectX.rsrc -rd -a -o ProjectX
Pascal ProjectX.p
Link ProjectX.p.o {PLibraries}PasLib.o {Libraries}Interface.o {Libraries}Runtime.o
-o ProjectX
ProjectX
*)
CONST
TitleBarHeight = 19;
ScrollBarWidth = 16;
Lastmenu = 4;
appleMenu= 1;
AboutItem= 1;
fileMenu = 2;
QuitItem = 1;
editMenu = 3;
windowMenu = 4;
ReAdjustItem = 1;
projXwindowKind = 2000;
MainWindowType = 10;
TitleWindowType = 11;
GoAwayWindowType= 12;
ZoomBoxWindowType = 13;
GrowBoxWindowType = 14;
VScrollWindowType = 15;
HScrollWindowType = 16;
VAR
theEvent : EventRecord;
theChar: Char;
tempWindow : WindowPtr;
Doneflag : Boolean;
theScreen: Rect;
theItem: Integer;
theMenu: Integer;
ItemHit: Integer;
myMenus: Array[1..Lastmenu] of MenuHandle;
itype : Integer;
item : Handle;
box : Rect;
GrowReturn : Longint;
WNEExists: Boolean;
{ * Window vars * }
theMainWindow : WindowPtr;
theTitleWindow : WindowPtr;
theGoAwayWindow : WindowPtr;
theZoomWindow : WindowPtr;
theGrowWindow : WindowPtr;
theVScrollWindow: WindowPtr;
theHScrollWindow: WindowPtr;
MainWindowRect : Rect;
GoAwayBoxWidth : Integer;
ZoomBoxWidth : Integer;
function MyGetNextEvent(evtMask:Integer):Boolean; forward;
{--------------------------------------------------------------}
Function Str(i:longInt):str255;
var
myStr : Str255;
begin
NumToString(i,myStr);
Str:=myStr;
end;
{--------------------------------------------------------------}
Function Val(s:str255):Longint;
var
myVal : Longint;
begin
StringToNum(s,myVal);
Val:=myVal;
end;
{--------------------------------------------------------------}
function GetScreenBits:Rect;
type
IntPtr = ^Integer;
var
WMGRPort : GrafPtr;
begin
If IntPtr($28E)^=$3FFF then
GetScreenBits:=GetGDevice^^.gdRect
else
begin
GetWMGRPort(WMGRPort);
GetScreenBits:=WMGRPort^.portRect;
end;
end;
{--------------------------------------------------------------}
Procedure SetUpMenus;
var
i : Integer;
begin
InitMenus;
{ * Get and insert menus * }
for i:=1 to Lastmenu do
begin
MyMenus[i]:=GetMenu(i);
InsertMenu(myMenus[i],0);
end;
AddResMenu(MyMenus[appleMenu],DRVR);
DrawMenuBar;
end;
{--------------------------------------------------------------}
Procedure DoMyUpdate;
var
TitleOffSet: Integer;
savePort : GrafPtr;
thePICT: PicHandle;
eRect : Rect;
begin
tempWindow:=WindowPtr(theEvent.message);
GetPort(savePort);
SetPort(tempWindow);
BeginUpdate(tempWindow);
with windowPeek(tempWindow)^ do
If windowKind=projXwindowKind then
begin
EraseRect(port.portRect);
If dataHandle=handle(TitleWindowType) then
begin
with port.portRect do
begin
MoveTo(left,top+3);
LineTo(right,top+3);
MoveTo(left,top+5);
LineTo(right,top+5);
MoveTo(left,top+7);
LineTo(right,top+7);
MoveTo(left,top+9);
LineTo(right,top+9);
MoveTo(left,top+11);
LineTo(right,top+11);
MoveTo(left,top+13);
LineTo(right,top+13);
TitleOffSet:=Right Div 2-TitleWidth Div 2;
SetRect(eRect,left+TitleOffSet-3,top,left+TitleOffSet+titleWidth+3,bottom);
EraseRect(eRect);
MoveTo(left+TitleOffSet,13);
HLock(handle(titleHandle));
DrawString(titleHandle^^);
HunLock(handle(titleHandle));
end;
end
else if (dataHandle=handle(VScrollWindowType)) OR (dataHandle=handle(HScrollWindowType))
then
DrawControls(tempWindow);
end;
EndUpdate(tempWindow);
SetPort(savePort);
end;
{--------------------------------------------------------------}
Procedure DoAbout;
var
SavePort : GrafPtr;
Dialog : DialogPtr;
begin
GetPort(SavePort);
Dialog:=GetNewDialog(1,Nil,Pointer(-1));
DrawDialog(Dialog);
Repeat Until MyGetNextEvent(mDownMask+keyDownMask+autoKeyMask);
SetPort(SavePort);
DisposDialog(Dialog);
end;
{--------------------------------------------------------------}
procedure SizeTheWindow;
begin
MainWindowRect:=windowPeek(theMainWindow)^.strucRgn^^.RgnBBox;
with MainWindowRect do
begin
MoveWindow(theGoAwayWindow,left+1,top-TitleBarHeight+2,false);
MoveWindow(theTitleWindow,left+GoAwayBoxWidth+1,top-TitleBarHeight+2,false);
MoveWindow(theZoomWindow,right+ScrollBarWidth-2-ZoomBoxWidth,top-TitleBarHeight+2,false);
MoveWindow(theVScrollWindow,right,top+1,false);
MoveWindow(theGrowWindow,right,bottom,false);
MoveWindow(theHScrollWindow,left+1,bottom,false);
end;
end;
{--------------------------------------------------------------}
procedure CreateNewWindow;
var
savePort : GrafPtr;
thePict: PicHandle;
bounds : Rect;
theCTRL: ControlHandle;
begin
GetPort(savePort);
{ * Set up main window * }
with theScreen do
SetRect(bounds,left+40,top+50,right-40,bottom-40);
theMainWindow:=NewWindow(Nil,bounds,,true,plainDBox,pointer(-1),false,0);
with windowPeek(theMainWindow)^ do
begin
windowKind:=projXwindowKind;
dataHandle:=handle(MainWindowType);
end;
{ * Make global copy * }
MainWindowRect:=windowPeek(theMainWindow)^.strucRgn^^.RgnBBox;
{ * Set up go away box * }
thePict:=PicHandle(GetResource(PICT,1002));
with thePict^^.picFrame do
SetRect(bounds,0,0,right-left,bottom-top);
theGoAwayWindow:=NewWindow(Nil,bounds,,true,plainDBox,pointer(-1),false,0);
SetWindowPic(theGoAwayWindow,thePict);
with windowPeek(theGoAwayWindow)^ do
begin
windowKind:=projXwindowKind;
dataHandle:=handle(GoAwayWindowType);
end;
with theGoAwayWindow^.portRect do
GoAwayBoxWidth:=(right-left);
{ * Set up zoom box * }
thePict:=PicHandle(GetResource(PICT,1000));
with thePict^^.picFrame do
SetRect(bounds,0,0,right-left,bottom-top);
theZoomWindow:=NewWindow(Nil,bounds,,true,plainDBox,pointer(-1),false,0);
SetWindowPic(theZoomWindow,thePict);
with windowPeek(theZoomWindow)^ do
begin
windowKind:=projXwindowKind;
dataHandle:=handle(ZoomBoxWindowType);
end;
with theZoomWindow^.portRect do
ZoomBoxWidth:=(right-left);
{ * Set up the title window * }
with MainWindowRect do
SetRect(bounds,left+GoAwayBoxWidth+1,top-TitleBarHeight+1,right-ZoomBoxWidth+ScrollBarWidth-1,top-1);
theTitleWindow:=NewWindow(Nil,bounds,Untitled,true,plainDBox,pointer(-1),false,0);
with windowPeek(theTitleWindow)^ do
begin
windowKind:=projXwindowKind;
dataHandle:=handle(TitleWindowType);
end;
SetPort(theTitleWindow);
TextFont(SystemFont);
{ * Set up grow box * }
thePict:=PicHandle(GetResource(PICT,1001));
with thePict^^.picFrame do
SetRect(bounds,0,0,right-left,bottom-top);
theGrowWindow:=NewWindow(Nil,bounds,,true,plainDBox,pointer(-1),false,0);
SetWindowPic(theGrowWindow,thePict);
with windowPeek(theGrowWindow)^ do
begin
windowKind:=projXwindowKind;
dataHandle:=handle(GrowBoxWindowType);
end;
{ * Set up the vertical scrollbar window * }
with MainWindowRect do
SetRect(bounds,right,top+1,right+ScrollBarWidth-2,bottom-1);
theVScrollWindow:=NewWindow(Nil,bounds,,true,plainDBox,pointer(-1),false,0);
with windowPeek(theVScrollWindow)^ do
begin
windowKind:=projXwindowKind;
dataHandle:=handle(VScrollWindowType);
end;
SetPort(theVScrollWindow);
ValidRect(theVScrollWindow^.portRect);
bounds:=theVScrollWindow^.portRect;
InsetRect(bounds,-1,-1);
theCTRL:=NewControl(theVScrollWindow,bounds,,true,1,1,255,scrollBarProc,0);
{ * Set up the horizontal scrollbar window * }
with MainWindowRect do
SetRect(bounds,left+1,bottom,right-1,bottom+ScrollBarWidth-2);
theHScrollWindow:=NewWindow(Nil,bounds,,true,plainDBox,pointer(-1),false,0);
with windowPeek(theHScrollWindow)^ do
begin
windowKind:=projXwindowKind;
dataHandle:=handle(HScrollWindowType);
end;
SetPort(theHScrollWindow);
ValidRect(theHScrollWindow^.portRect);
bounds:=theHScrollWindow^.portRect;
InsetRect(bounds,-1,-1);
theCTRL:=NewControl(theHScrollWindow,bounds,,true,1,1,255,scrollBarProc,0);
{ * Hilite the title window * }
HiliteWindow(theTitleWindow,true);
SizeTheWindow;
SetPort(savePort);
end;
{--------------------------------------------------------------}
Procedure DoCommand(mResult:longint);
var
DArefNum : Integer;
DAname : Str255;
begin
theMenu:=HiWrd(mResult);
theItem:=LoWrd(mResult);
case theMenu of
appleMenu:
If theItem=AboutItem then
DoAbout
else
begin
GetItem(myMenus[appleMenu],theItem,DAname);
DArefNum:=OpenDeskAcc(DAname);
end;
fileMenu:
If theItem=QuitItem then
DoneFlag:=true;
windowMenu:
Case theItem of
ReAdjustItem:
SizeTheWindow;
end;
end;{case}
HiliteMenu(0);
end;
{--------------------------------------------------------------}
procedure DragMyWindow(startingPt:Point);
var
AllWindowsRgn : RgnHandle;
moveMent : Longint;
dx,dy : Integer;
begin
AllWindowsRgn:=NewRgn;
OpenRgn;
FrameRgn(windowPeek(theMainWindow)^.strucRGN);
FrameRgn(windowPeek(theTitleWindow)^.strucRGN);
FrameRgn(windowPeek(theGoAwayWindow)^.strucRGN);
FrameRgn(windowPeek(theZoomWindow)^.strucRGN);
FrameRgn(windowPeek(theGrowWindow)^.strucRGN);
FrameRgn(windowPeek(theVScrollWindow)^.strucRGN);
FrameRgn(windowPeek(theHScrollWindow)^.strucRGN);
CloseRgn(AllWindowsRgn);
moveMent:=DragGrayRgn(AllWindowsRgn,startingPt,theScreen,theScreen,noConstraint,NIL);
If Point(moveMent).h=$8000 then
dx:=0
else
dx:=Point(moveMent).h;
If Point(moveMent).v=$8000 then
dy:=0
else
dy:=Point(moveMent).v;
If (dx<>0) OR (dy<>0) then
begin
with windowPeek(theMainWindow)^.strucRGN^^.RgnBBox do
MoveWindow(theMainWindow,left+dx,top+dy,false);
with windowPeek(theGoAwayWindow)^.strucRGN^^.RgnBBox do
MoveWindow(theGoAwayWindow,left+dx,top+dy,false);
with windowPeek(theTitleWindow)^.strucRGN^^.RgnBBox do
MoveWindow(theTitleWindow,left+dx,top+dy,false);
with windowPeek(theZoomWindow)^.strucRGN^^.RgnBBox do
MoveWindow(theZoomWindow,left+dx,top+dy,false);
with windowPeek(theVScrollWindow)^.strucRGN^^.RgnBBox do
MoveWindow(theVScrollWindow,left+dx,top+dy,false);
with windowPeek(theGrowWindow)^.strucRGN^^.RgnBBox do
MoveWindow(theGrowWindow,left+dx,top+dy,false);
with windowPeek(theHScrollWindow)^.strucRGN^^.RgnBBox do
MoveWindow(theHScrollWindow,left+dx,top+dy,false);
end;
DisposeRgn(AllWindowsRgn);
end;
{--------------------------------------------------------------}
function CurrentWindowHit(theWindow:WindowPtr):Boolean;
begin
CurrentWindowHit:=((theWindow<>theMainWindow) | (theWindow<>theTitleWindow)
| (theWindow<>theGoAwayWindow) | (theWindow<>theZoomWindow)
| (theWindow<>theGrowWindow) | (theWindow<>theVScrollWindow)
| (theWindow<>theHScrollWindow));
end;
{--------------------------------------------------------------}
Procedure InitGlob;
const
UnImplTrapNum = $9F; { * Unimplemented trap * }
WaitNextEventTrapWord = $60;
var
theWorld : SysEnvRec;
begin
{ * Get the world, so to speak * }
If SysEnvirons(1,theWorld)<>envNotPresent then
WNEExists:=(theWorld.machineType>=0) & (NGetTrapAddress( WaitNextEventTrapWord,ToolTrap)<>NGetTrapAddress(UnImplTrapNum,ToolTrap))
else
WNEExists:=false;
theScreen:=GetScreenBits;
CreateNewWindow;
end;
{--------------------------------------------------------------}
function MyGetNextEvent(evtMask:Integer):Boolean;
begin
If WNEExists then
MyGetNextEvent:=WaitNextEvent(evtMask,theEvent,6,Nil)
else
begin
SystemTask;
MyGetNextEvent:=GetNextEvent(evtMask,theEvent);
end;
end;
{--------------------------------------------------------------}
procedure _DataInit;EXTERNAL;
begin
{ * Get rid of MPWs init code * }
UnloadSeg(@_DataInit);
FlushEvents(EveryEvent,0);
InitGraf(@thePort);
InitFonts;
TEInit;
InitWindows;
InitDialogs(Nil);
SetUpMenus;
InitGlob;
Repeat
InitCursor;
If MyGetNextEvent(everyEvent) then
with theEvent do
case what of
mouseDown:
case FindWindow(where,tempWindow) of
inMenuBar:
DoCommand(MenuSelect(where));
InSysWindow:
SystemClick(theEvent,tempWindow);
inContent:
If NOT CurrentWindowHit(tempWindow) then
SelectWindow(tempWindow)
else if BAnd(modifiers,cmdKey)<>0 then
DragWindow(tempWindow,where,GetGrayRGN^^.RGNBBox)
else if tempWindow=theTitleWindow then
DragMyWindow(where)
else if tempWindow=theGrowWindow then
begin
GrowReturn:=GrowWindow(theMainWindow,where,GetGrayRGN^^.RGNBBox);
SizeWindow(theMainWindow,LoWrd(GrowReturn),HiWrd(GrowReturn),true);
end
else if tempWindow=theGoAwayWindow then
begin
end
else if tempWindow=theZoomWindow then
begin
end;
inDrag:
If NOT CurrentWindowHit(tempWindow) then
SelectWindow(tempWindow)
else If BAnd(modifiers,cmdKey)<>0 then
DragWindow(tempWindow,where,GetGrayRGN^^.RGNBBox);
end;{case}
keyDown,autoKey:
begin
theChar:=chr(BitAnd(message,255));
If BitAnd(modifiers,CmdKey)<>0 then
DoCommand(MenuKey(theChar))
end;
updateEvt:
DoMyUpdate;
end;
Until Doneflag;
SetCursor(GetCursor(WatchCursor)^^);
end.
{--------------------------------------------------------------}
resource MENU (1, preload) {
1,
textMenuProc,
0x7FFFFFFD,
enabled,
apple,
{ /* array: 2 elements */
/* [1] */
About projectX , noIcon, noKey, noMark, plain,
/* [2] */
-, noIcon, noKey, noMark, plain
}
};
resource MENU (2, preload) {
2,
textMenuProc,
0x7FFFFFFB,
enabled,
File,
{ /* array: 1 elements */
/* [1] */
Quit, noIcon, Q, noMark, plain
}
};
resource MENU (3, preload) {
3,
textMenuProc,
0x7FFFFFBC,
enabled,
Edit,
{ /* array: 8 elements */
/* [1] */
Undo, noIcon, Z, noMark, plain,
/* [2] */
-, noIcon, noKey, noMark, plain,
/* [3] */
Cut, noIcon, X, noMark, plain,
/* [4] */
Copy, noIcon, C, noMark, plain,
/* [5] */
Paste, noIcon, V, noMark, plain,
/* [6] */
Clear, noIcon, noKey, noMark, plain,
/* [7] */
-, noIcon, noKey, noMark, plain,
/* [8] */
Select All, noIcon, A, noMark, plain
}
};
resource MENU (4, preload) {
4,
textMenuProc,
allEnabled,
enabled,
Window,
{ /* array: 1 elements */
/* [1] */
ReAdjust Window, noIcon, 1, noMark, plain
}
};
resource SIZE (-1) {
dontSaveScreen,
acceptSuspendResumeEvents,
enableOptionSwitch,
cannotBackground,
multiFinderAware,
backgroundAndForeground,
dontGetFrontClicks,
ignoreChildDiedEvents,
not32BitCompatible,
reserved,
reserved,
reserved,
reserved,
reserved,
reserved,
reserved,
307200,
307200
};
resource SIZE (0) {
dontSaveScreen,
acceptSuspendResumeEvents,
enableOptionSwitch,
cannotBackground,
multiFinderAware,
backgroundAndForeground,
dontGetFrontClicks,
ignoreChildDiedEvents,
not32BitCompatible,
reserved,
reserved,
reserved,
reserved,
reserved,
reserved,
reserved,
307200,
307200
};
resource vers (1, purgeable) {
0x1,
0x3,
release,
0x0,
verUs,
projectX,
projectX
};
resource vers (2, purgeable) {
0x1,
0x3,
release,
0x0,
verUs,
projectX,
projectX
};
resource PICT (1001) {
{0, 0, 14, 14},
VersionOne {
{ /* array OpCodes: 6 elements */
/* [1] */
shortComment {
130
},
/* [2] */
shortComment {
142
},
/* [3] */
clipRgn {
{0, 0, 752, 576},
$
},
/* [4] */
bitsRect {
2,
{0, 0, 14, 16},
{0, 0, 14, 14},
{0, 0, 14, 14},
srcOr,
$00 00 00 00 3F 80 20 80 20 F8 20 88 20 88 20 88"
$3F 88 08 08 08 08 08 08 0F F8 00 00"
},
/* [5] */
shortComment {
143
},
/* [6] */
shortComment {
131
}
}
}
};
resource PICT (1000) {
{0, 0, 17, 29},
VersionOne {
{ /* array OpCodes: 6 elements */
/* [1] */
shortComment {
130
},
/* [2] */
shortComment {
142
},
/* [3] */
clipRgn {
{0, 0, 752, 576},
$
},
/* [4] */
bitsRect {
4,
{0, 0, 17, 32},
{0, 0, 17, 29},
{0, 0, 17, 29},
srcOr,
$00 00 00 00 00 00 00 00 00 00 00 00 FF BF FB F0"
$00 20 88 00 FF A0 8B F0 00 20 88 00 FF A0 8B F0"
$00 20 88 00 FF BF 8B F0 00 20 08 00 FF A0 0B F0"
$00 20 08 00 FF BF FB F0 00 00 00 00 00 00 00 00"
$00 00 00 00"
},
/* [5] */
shortComment {
143
},
/* [6] */
shortComment {
131
}
}
}
};
resource PICT (1002) {
{0, 0, 17, 31},
VersionOne {
{ /* array OpCodes: 6 elements */
/* [1] */
shortComment {
130
},
/* [2] */
shortComment {
142
},
/* [3] */
clipRgn {
{0, 0, 752, 576},
$
},
/* [4] */
bitsRect {
4,
{0, 0, 17, 32},
{0, 0, 17, 31},
{0, 0, 17, 31},
srcOr,
$00 00 00 00 00 00 00 00 00 00 00 00 7E FF EF FE
$00 80 20 00 7E 80 2F FE 00 80 20 00 7E 80 2F FE
$00 80 20 00 7E 80 2F FE 00 80 20 00 7E 80 2F FE
$00 80 20 00 7E FF EF FE 00 00 00 00 00 00 00 00"
$00 00 00 00"
},
/* [5] */
shortComment {
143
},
/* [6] */
shortComment {
131
}
}
}
};
resource PICT (100) {
{0, 4, 52, 209},
VersionOne {
{ /* array OpCodes: 7 elements */
/* [1] */
shortComment {
130
},
/* [2] */
shortComment {
12345
},
/* [3] */
shortComment {
142
},
/* [4] */
clipRgn {
{0, 0, 752, 576},
$
},
/* [5] */
packBitsRect {
28,
{0, 0, 52, 216},
{0, 4, 52, 209},
{0, 4, 52, 209},
srcOr,
$0B ED 00 01 3F C0 FE 00 02 FF 00 00 0B ED 00 07"
$1F E0 00 00 01 FE 00 00 0B ED 00 07 0F F0 00 00"
$03 FC 00 00 0B ED 00 07 07 F0 00 00 03 F8 00 00"
$0B ED 00 07 07 F8 00 00 07 F8 00 00 0B ED 00 07"
$03 FC 00 00 0F F0 00 00 0B ED 00 07 01 FE 00 00"
$1F E0 00 00 0A EC 00 06 FE 00 00 1F C0 00 00 0A
$EC 00 06 FF 00 00 3F C0 00 00 0A EC 00 06 7F 80"
$00 7F 80 00 00 09 EC 00 03 3F C0 00 FF FE 00 09"
$EC 00 03 1F C0 00 FE FE 00 09 EC 00 03 1F E0 01"
$FE FE 00 09 EC 00 03 0F F0 03 FC FE 00 09 EC 00"
$03 07 F8 07 F8 FE 00 1C 18 0F FF C0 1F FF E0 00"
$1F E0 00 00 70 3F FF F0 00 FF 80 FF FF F8 03 F8"
$07 F0 FE 00 1C 18 0F FF F0 1F FF F8 00 7F F8 00"
$00 70 3F FF F0 03 FF E0 FF FF F8 03 FC 0F F0 FE
$00 1C 18 0F FF F8 1F FF FC 01 FF FE 00 00 70 3F
$FF F0 0F FF F0 FF FF F8 01 FE 1F E0 FE 00 1C 18"
$0E 00 7C 1C 00 7C 03 F0 3F 00 00 70 38 00 00 1F
$80 F8 00 70 00 00 FF 3F C0 FE 00 1C 18 0E 00 1C
$1C 00 1E 07 C0 0F 80 00 70 38 00 00 3E 00 3C 00"
$70 00 00 7F 3F 80 FE 00 1C 18 0E 00 1E 1C 00 1E
$07 80 07 80 00 70 38 00 00 3C 00 1C 00 70 00 00"
$7F FF 80 FE 00 1B 17 0E 00 0E 1C 00 0E 0F 00 03"
$C0 00 70 38 00 00 78 00 1E 00 70 00 00 3F FF FD
$00 1B 17 0E 00 0E 1C 00 0E 0E 00 01 C0 00 70 38"
$00 00 70 00 0E 00 70 00 00 1F FE FD 00 1B 17 0E
$00 0E 1C 00 0E 0E 00 01 C0 00 70 38 00 00 70 00"
$0E 00 70 00 00 0F FC FD 00 1B 0F 0E 00 1E 1C 00"
$1E 1E 00 01 E0 00 70 38 00 00 F0 FE 00 04 70 00"
$00 07 F8 FD 00 1B 0F 0E 00 1C 1C 00 1C 1C 00 00"
$E0 00 70 38 00 00 E0 FE 00 04 70 00 00 07 F8 FD
$00 1B 0F 0E 00 7C 1C 00 7C 1C 00 00 E0 00 70 3F
$FF C0 E0 FE 00 04 70 00 00 0F FC FD 00 1B 0F 0F
$FF F8 1F FF F8 1C 00 00 E0 00 70 3F FF C0 E0 FE
$00 04 70 00 00 1F FE FD 00 1B 0F 0F FF F0 1F FF
$E0 1C 00 00 E0 00 70 3F FF C0 E0 FE 00 04 70 00"
$00 1F FE FD 00 1B 0F 0F FF C0 1F FF F8 1C 00 00"
$E0 00 70 38 00 00 E0 FE 00 04 70 00 00 3F FF FD
$00 1C 0F 0E 00 00 1C 00 3C 1C 00 00 E0 00 70 38"
$00 00 E0 FE 00 05 70 00 00 7F FF 80 FE 00 1C 0F
$0E 00 00 1C 00 1C 1E 00 01 E0 00 70 38 00 00 F0"
$FE 00 05 70 00 00 FF 3F C0 FE 00 1C 18 0E 00 00"
$1C 00 1E 0E 00 01 C0 00 70 38 00 00 70 00 0E 00"
$70 00 00 FF 3F C0 FE 00 1C 18 0E 00 00 1C 00 0E
$0E 00 01 C3 80 70 38 00 00 70 00 0E 00 70 00 01"
$FE 1F E0 FE 00 1C 18 0E 00 00 1C 00 0E 0F 00 03"
$C3 80 70 38 00 00 78 00 1E 00 70 00 03 FC 0F F0"
$FE 00 1C 18 0E 00 00 1C 00 0E 07 80 07 83 80 F0"
$38 00 00 3C 00 1C 00 70 00 07 F8 07 F8 FE 00 1C
$18 0E 00 00 1C 00 0E 07 C0 0F 83 C0 F0 38 00 00"
$3E 00 7C 00 70 00 07 F8 07 F8 FE 00 1C 18 0E 00"
$00 1C 00 0E 03 F0 3F 01 E1 E0 38 00 00 1F 81 F8"
$00 70 00 0F F0 03 FC FE 00 1C 18 0E 00 00 1C 00"
$0E 01 FF FE 01 FF E0 3F FF F0 0F FF F0 00 70 00"
$1F E0 01 FE FE 00 1C 18 0E 00 00 1C 00 0F 00 7F
$F8 00 FF C0 3F FF F0 03 FF C0 00 70 00 3F C0 00"
$FF FE 00 1C 18 0E 00 00 1C 00 07 00 1F E0 00 3F
$00 3F FF F0 00 FF 00 00 70 00 3F C0 00 FF FE 00"
$0A EC 00 06 7F 80 00 7F 80 00 00 0A EC 00 04 FF
$00 00 3F C0 FF 00 0B ED 00 05 01 FE 00 00 1F E0"
$FF 00 0B ED 00 05 01 FE 00 00 1F E0 FF 00 0B ED
$00 07 03 FC 00 00 0F F0 00 00 0B ED 00 07 07 F8"
$00 00 07 F8 00 00 0B ED 00 07 0F F0 00 00 03 FC
$00 00 0B ED 00 07 0F F0 00 00 03 FC 00 00 0B ED
$00 07 1F E0 00 00 01 FE 00 00 0B ED 00 01 3F C0"
$FE 00 00 FF FF 00 0B ED 00 01 7F 80 FE 00 02 7F
$80 00"
},
/* [6] */
shortComment {
143
},
/* [7] */
shortComment {
131
}
}
}
};
resource DLOG (1) {
{104, 166, 228, 392},
dBoxProc,
visible,
noGoAway,
0x0,
1,
};
resource DITL (1) {
{ /* array DITLarray: 2 elements */
/* [1] */
{6, 9, 58, 214},
Picture {
enabled,
100
},
/* [2] */
{63, 26, 116, 217},
StaticText {
disabled,
By Rod Magnuson\nFor MacTutor Magazine\nBa
sed on idea of Scott Boyd
}
}
};