mikeoro@hubcap.clemson.edu (Michael K O'Rourke) (09/29/89)
I am trying to get a dialog to display in an init and having loads of
troubles. My init loads a driver i wrote and i want a dialog displayed
in case of an error when tring to load the driver.
Is there something special that has to be done? Can someone take a look at
the code below and offer suggestions (possibly as to my stupidity) or could
someone send me example code?
The following init dies when it hits the DisposDialog. Macsbug says it
dies in the PaintOne routine, if that helps at all.
Michael O'Rourke
Clemson Unversity
***************************************************************
#include "Color.h"
#include "Appletalk.h"
#include "nAppletalk.h"
#include "SetUpA4.h"
main()
{
int installed;
int refNum;
RememberA0();
SetUpA4();
InitGraf(&thePort);
InitFonts();
InitWindows();
InitMenus();
TEInit();
InitDialogs(0L);
installed = OpenDriver("\p.LABtools",&refNum);
installed = -98;
if (installed != 0) {
switch (installed) {
case -1 :
case -98 :
Error("\pLABtools needs AppleTalk to run.");
break;
case -2 :
Error("\pNot enough memory");
}
RestoreA4();
}
Error(s)
Str255 s;
{
#define ErrorID 0
DialogPtr Dptr;
int itemhit;
ParamText(s,"\p","\p","\p");
Dptr = GetNewDialog(ErrorID,0L,(Ptr) -1);
itemhit = 0;
while (itemhit != 1)
ModalDialog(0L,&itemhit);
DisposDialog(Dptr);
}lsr@Apple.COM (Larry Rosenstein) (09/30/89)
There's a low memory hook that paints the desktop (DeskHook=$A6C). Tech
Note 247 says you have to clear this on machines before the Macintosh II.
Larry Rosenstein, Apple Computer, Inc.
Object Specialist
Internet: lsr@Apple.com UUCP: {nsc, sun}!apple!lsr
AppleLink: Rosenstein1kingman@tci.bell-atl.com (Matt Kingman) (10/03/89)
mikeoro@hubcap.clemson.edu (Michael K O'Rourke) writes: >I am trying to get a dialog to display in an init and having loads of >troubles. My init loads a driver i wrote and i want a dialog displayed >in case of an error when tring to load the driver. I noticed a couple of problems with your code. First you're initializing QuickDraw by using 'thePort'. You can't do this in an INIT because 'thePort' hasn't been set-up yet. On entry, A5 points to the end of the QuickDraw globals. Since 'thePort' is the last one you can use the following code (THINK C) to initialize QuickDraw: asm { PEA -4(A5) ;Get address of 'thePort' _InitGraf ;Initialize QuickDraw } Second, you should lock down your code resource. On entry, A0 is a pointer to your code resource. You should call RecoverHandle to get the handle to your code resource and then lock it. Unlock it before exiting. The following code is an example of how to do what I have described. Good Luck /Matt ****************** #include <SetUpA4.h> main() { Handle myHdl; /* be 100% sure we're locked down. See LSC 3.0 manual p.86 */ RememberA0(); SetUpA4(); asm { _RecoverHandle ;A0 is pointer to our code resource move.l a0, myHdl ;save A0 in 'myHdl' } HLock(ourHdl); /* Initialize QuickDraw */ asm { PEA -4(A5) _InitGraf } InitFonts(); InitWindows(); InitCursor(); InitMenus(); InitDialogs(0L); TEInit(); /* ** Do your stuff in here */ HUnlock(myHdl); RestoreA4(); } -- Matt Kingman Technology Concepts Inc. Sudbury, MA. (508)443-7311 ...!uunet!tci!kingman kingman@tci.bell-atl.com TCI is not responsible for my opinions, nor I for theirs...