readseq/macinit.c
2023-04-16 07:33:28 +08:00

293 lines
6.5 KiB
C

/*
macinit.c
-- Macintosh initializations, then call real main
Note: compile this segment as Main for generic 68000 processor, so it won't
fail on generic mac
*/
#pragma segment Main
#include <Events.h>
#include <Memory.h>
#include <OSUtils.h>
#include <Palettes.h>
#include <Quickdraw.h>
#include <StandardFile.h>
#include <StdLib.h>
#include <ToolUtils.h>
#include <Types.h>
#include <Windows.h>
#include <ctype.h>
#include <dialogs.h>
#include <stdio.h>
#include <string.h>
// #include <Menus.h>
// #include <Fonts.h>
Boolean StopKey()
{
EventRecord ev;
if (EventAvail(keyDownMask + autoKeyMask, &ev)) {
if ((ev.modifiers & cmdKey) &&
((char)(ev.message & charCodeMask) == '.')) {
SysBeep(1);
(void)GetNextEvent(keyDownMask + autoKeyMask, &ev);
return true;
}
}
return false;
}
Boolean cmdKeyIsDown()
{
KeyMap kmap;
GetKeys(&kmap);
return BitTst(kmap, (sizeof(KeyMap) * 8) - 55);
}
Boolean shiftKeyIsDown()
{
KeyMap kmap;
GetKeys(&kmap);
return BitTst(kmap, (sizeof(KeyMap) * 8) - 56);
}
Boolean capsLockIsDown()
{
KeyMap kmap;
GetKeys(&kmap);
return BitTst(kmap, (sizeof(KeyMap) * 8) - 57);
}
Boolean optionKeyIsDown()
{
KeyMap kmap;
GetKeys(&kmap);
return BitTst(kmap, (sizeof(KeyMap) * 8) - 58);
}
Boolean MouseButton() { return Button(); }
Boolean Keypress()
{
EventRecord ev;
return EventAvail(keyDownMask + keyUpMask + autoKeyMask, &ev);
}
char *StdGetFile(char *prompt, OSType fileTypes[], int nFileTypes)
{
Point wher; /*where to display dialog*/
SFReply reply; /*reply record*/
short len;
static char filename[80] = "\0";
wher.h = 80;
wher.v = 90;
if (optionKeyIsDown()) nFileTypes = 0;
SFGetFile(wher, prompt, nil, nFileTypes, fileTypes, nil, &reply);
if (reply.good) {
len = SetVol(nil, reply.vRefNum);
len = reply.fName[0];
strncpy(filename, (char *)(&reply.fName[1]), len);
filename[len] = '\0';
return filename;
}
else
return NULL;
}
int readCmdOptions(FILE *cl, char *progname, char ***argv)
/* command line reader for Mac/MPW -- dgg */
{
#define MAXS 255
#define addarg(sptr) \
if (strlen(sptr) > 0) { \
targv = (char **)realloc(targv, (argc + 1) * sizeof(char *)); \
targv[argc] = (char *)malloc(1 + strlen(sptr) * sizeof(char)); \
strcpy(targv[argc], sptr); \
argc++; \
}
char *pword, st[MAXS];
int argc = 0;
char **targv;
targv = (char **)malloc(1);
if (progname == NULL) progname = "program";
addarg(progname);
fgets(st, MAXS, cl);
if (!feof(cl) && st != NULL && *st != 0) {
pword = strtok(st, "\ \n");
while (pword != NULL) {
addarg(pword);
pword = strtok(NULL, "\ \n");
}
}
*argv = targv;
return argc;
}
int ccommand(char ***argv)
{
int argc;
char **targv;
argc = readCmdOptions(stdin, *argv[0], &targv);
*argv = targv;
return argc;
}
extern _DataInit();
// #define VERSION curSysEnvVers
#define nocolorID 130
#define no68020 133
#define no68881 132
#define no256 134
#define nosys6 135
void MacInit()
{
SysEnvRec theWorld;
OSErr OSys;
DialogPtr crashDia;
long tick;
UnloadSeg(_DataInit);
InitGraf((Ptr)&qd.thePort);
// InitFonts();
InitWindows();
// InitMenus();
// TEInit();
InitDialogs(nil);
InitCursor();
/*______________________________________________________*/
/* If not right Machine then stop */
/*______________________________________________________*/
OSys = SysEnvirons(curSysEnvVers, &theWorld);
/*if(!theWorld.hasColorQD) {
crashDia = GetNewDialog (nocolorID, nil, (WindowPtr) -1);
DrawDialog (crashDia);
Delay (300, &tick);
ExitToShell();
}*/
/*if(theWorld.processor < env68020) {
crashDia = GetNewDialog (no68020, nil, (WindowPtr) -1);
DrawDialog (crashDia);
Delay (300, &tick);
ExitToShell();
}*/
/*if(!theWorld.hasFPU) {
crashDia = GetNewDialog (no68881, nil, (WindowPtr) -1);
DrawDialog (crashDia);
Delay (300, &tick);
ExitToShell();
}
if(theWorld.systemVersion < 0x0600) {
crashDia = GetNewDialog (nosys6, nil, (WindowPtr) -1);
DrawDialog (crashDia);
Delay (300, &tick);
ExitToShell();
}*/
#ifdef UnDeFineD
/*______________________________________________________*/
/* Set Rects */
/*______________________________________________________*/
screenRect = qd.screenBits.bounds;
offLeft = 0;
offTop = 0;
offRight = screenRect.right;
offBottom = screenRect.bottom;
SetRect(&BaseRect, 40, 60, 472, 282);
tempRgn = GetGrayRgn();
HLock((Handle)tempRgn);
TotalRect = (**tempRgn).rgnBBox;
SetRect(&minRect, 80, 80, (**tempRgn).rgnBBox.right - 40,
(**tempRgn).rgnBBox.bottom - 40);
HUnlock((Handle)tempRgn);
/*______________________________________________________*/
/* Open Window & set Palette & Picture */
/*______________________________________________________*/
theGDevice = GetMainDevice();
HLock((Handle)theGDevice);
mycolors = (**(**theGDevice).gdPMap).pmTable;
numcolor = (**(**theGDevice).gdPMap).pixelSize;
HUnlock((Handle)theGDevice);
switch (numcolor) {
case 1:
numcolor = 2;
break;
case 2:
numcolor = 4;
break;
case 4:
numcolor = 16;
break;
case 8:
numcolor = 256;
break;
}
myWindow = NewCWindow(nil, &BaseRect, "", true, zoomDocProc,
(WindowPtr)-1, true, 150);
SetPort((WindowPtr)myWindow);
DrawGrowIcon(myWindow);
srcPalette = NewPalette(numcolor, mycolors, pmCourteous, 0);
SetPalette((WindowPtr)myWindow, srcPalette, true);
/*______________________________________________________*/
/* Set menus */
/*______________________________________________________*/
mymenu0 = GetMenu(appleID);
AddResMenu(mymenu0, 'DRVR');
InsertMenu(mymenu0, 0);
mymenu1 = newmenu(129, "File");
appendmenu(mymenu1, "Start;Quit");
InsertMenu(mymenu1, 0);
mymenu2 = newmenu(130, "Edit");
InsertMenu(mymenu2, 0);
DrawMenuBar();
/*______________________________________________________*/
/* Init variables */
/*______________________________________________________*/
DoneFlag = false;
yieldTime = 0;
return;
#endif
}
main(int argc, char *argv[])
{
Boolean loop = true;
char **myargv;
int myargc;
/* MacInit(); -- SIOW library handles this */
do {
fprintf(stderr, "\nEnter command line for %s [cmd-Q to quit]\n",
argv[0]);
fprintf(stderr, "-> %s ", argv[0]);
myargv = argv;
myargc = ccommand(&myargv);
siow_main(myargc, myargv);
fflush(stdout);
} while (true);
exit(0);
}