/* 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 #include #include #include #include #include #include #include #include #include #include #include #include #include // #include // #include 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); }