home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HyperLib 1997 Winter - Disc 1
/
HYPERLIB-1997-Winter-CD1.ISO.7z
/
HYPERLIB-1997-Winter-CD1.ISO
/
オンラインウェア
/
PRG
/
AESample.sit
/
AESample
/
sources
/
sample.main.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-06-22
|
6KB
|
239 lines
/*
*--------------------------------------------------------------
* sample.main.c
*--------------------------------------------------------------
*/
#include "sample.h"
#include "sample.AE.h"
#include "sample.subs.h"
#include "sample.menu.h"
#include "sample.dlog.h"
#include "sample.alrt.h"
#include "sample.drag.h"
#include "EmbossDraw.h"
/* static functions only used in this source */
static void InitToolBox(void);
static Boolean SetupMyGoodies(void);
static Boolean DoStartUp(void);
static void MainEventLoop(void);
static void DoMouseDown(EventRecord *);
static void DoKeyDown(EventRecord *);
static void DoRepeatKey(EventRecord *);
static void DoIdlelTask(void);
static void GoodByeKiss(void);
/* global variables */
Boolean gForever;
Boolean gNowBackGround;
/*
*--------------------------------------------------------------
* main
*--------------------------------------------------------------
*/
void main(void)
{
InitToolBox();
if (GestaltChecks()
&& SetUpPreferences()
&& SetupMyGoodies()) {
gForever = DoStartUp();
MainEventLoop();
}
GoodByeKiss();
}
/*
*--------------------------------------------------------------
* InitToolBox
*--------------------------------------------------------------
* standard intialization
*--------------------------------------------------------------
*/
static void InitToolBox(void)
{
int i;
/* heap setup */
MaxApplZone();
for (i = 0; i < 20; ++i) MoreMasters();
/* Toolbox intialization */
InitGraf(&qd.thePort);
InitFonts();
InitWindows();
InitMenus();
TEInit();
InitDialogs(0);
InitCursor();
FlushEvents(everyEvent, 0);
}
/*
*--------------------------------------------------------------
* SetupMyGoodies
*--------------------------------------------------------------
* set my equipments
*--------------------------------------------------------------
*/
static Boolean SetupMyGoodies(void)
{
if (InitEmbossDraw() == false
|| SetUpMyCursors() == false
|| SetUpMyMenus() == false
|| SetUpMyWindows() == false
|| SetUpMyDialogs() == false
|| SetUpMyAppleEvent() == false
) {
FatalErrorAlert();
return (false);
}
return (true);
}
/*
*--------------------------------------------------------------
* DoStartUp
*--------------------------------------------------------------
* handle the first apple events on startup
*--------------------------------------------------------------
*/
static Boolean DoStartUp(void)
{
EventRecord myEvent;
while (!gAEDoubleClicked && !gAEDragAndDropped) {
if (WaitNextEvent(highLevelEventMask, &myEvent, -1, nil)
&& myEvent.what == kHighLevelEvent)
AEProcessAppleEvent(&myEvent);
}
if (gAEDragAndDropped) {
return (false);
}
ShowWindow(gMainWindow);
return (true);
}
/*
*--------------------------------------------------------------
* MainEventLoop
*--------------------------------------------------------------
* infinite event loop
*--------------------------------------------------------------
*/
static void MainEventLoop(void)
{
EventRecord myEvent;
do {
long sleepTicks = (gNowBackGround) ? -1 : 60;
if (WaitNextEvent(everyEvent, &myEvent, sleepTicks, nil)) {
if (IsDialogEvent(&myEvent)) {
DoDialogs(&myEvent);
}
else switch (myEvent.what) {
case mouseDown: DoMouseDown(&myEvent); break;
case keyDown: DoKeyDown(&myEvent); break;
case autoKey: DoRepeatKey(&myEvent); break;
case updateEvt: DoUpdate(&myEvent); break;
case activateEvt: DoActivate(&myEvent); break;
case osEvt: DoOSEvent(&myEvent); break;
case diskEvt: DoMountDisk(&myEvent); break;
case kHighLevelEvent: AEProcessAppleEvent(&myEvent); break;
}
} else {
DoIdlelTask();
}
} while (gForever);
}
/*
*--------------------------------------------------------------
* DoMouseDown
*--------------------------------------------------------------
* mouse event handler
*--------------------------------------------------------------
*/
static void DoMouseDown(EventRecord * theEvent)
{
WindowRef aWindow;
short windowPart = FindWindow(theEvent->where, &aWindow);
switch (windowPart) {
case inMenuBar: DoMenus(MenuSelect(theEvent->where)); break;
case inSysWindow: SystemClick(theEvent, aWindow); break;
case inContent: DoContent(aWindow, theEvent->where); break;
case inGrow: DoGrow(aWindow, theEvent->where); break;
case inDrag: DoDrag(aWindow, theEvent->where); break;
case inGoAway: DoGoAway(aWindow, theEvent->where); break;
case inZoomIn:
case inZoomOut: DoZoom(aWindow, theEvent->where, windowPart); break;
}
}
/*
*--------------------------------------------------------------
* DoKeyDown
*--------------------------------------------------------------
* handle keyboard event
*--------------------------------------------------------------
*/
static void DoKeyDown(EventRecord *theEvent)
{
char charCode;
if (theEvent->modifiers & cmdKey) {
charCode = theEvent->message & charCodeMask;
DoMenus(MenuKey(charCode));
}
else
{
/*
handle TextEdit or something
*/
}
}
/*
*--------------------------------------------------------------
* DoRepeatKey
*--------------------------------------------------------------
* handle auto-repeat keyboard event
*--------------------------------------------------------------
*/
static void DoRepeatKey(EventRecord * theEvent)
{
char charCode = theEvent->message & charCodeMask;
/*
handle repeat key
*/
}
/*
*--------------------------------------------------------------
* DoIdlelTask
*--------------------------------------------------------------
* idle task procedures
*--------------------------------------------------------------
*/
void DoIdlelTask(void)
{
if (gNowBackGround == false) {
/* regular house keepings */
AdjustMyMenus();
AdjustMyCursor();
/* check if some error has occurred in background */
CheckMyErrors();
}
/*
other idle tasks
*/
}
/*
*--------------------------------------------------------------
* GoodByeKiss
*--------------------------------------------------------------
*/
static void GoodByeKiss(void)
{
RemoveMyAppleEvent();
RemoveMyDragAndDrop();
SaveMyPreferences();
}