Sigrid Haflínudóttirfirst dirty version of the portd7ad0686 years agoHistory
5775 lines · 113.5 KB · C
RawDownload
/*	OSGLUMAC.c 	Copyright (C) 2009 Philip Cummins, Richard F. Bannister,		Paul C. Pratt 	You can redistribute this file and/or modify it under the terms	of version 2 of the GNU General Public License as published by	the Free Software Foundation.  You should have received a copy	of the license along with this file; see the file COPYING. 	This file is distributed in the hope that it will be useful,	but WITHOUT ANY WARRANTY; without even the implied warranty of	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the	license for more details.*/ /*	Operating System GLUe for MACintosh 	All operating system dependent code for the	Macintosh (pre OS X) platform should go here. 	This is also the "reference" implementation. General	comments about what the platform dependent code	does should go here, and not be repeated for each	platform. 	This code is descended from Richard F. Bannister's Macintosh	port of vMac, by Philip Cummins. 	The main entry point 'main' is at the end of this file.*/ #include "CNFGRAPI.h"#include "SYSDEPNS.h"#include "ENDIANAC.h" #include "MYOSGLUE.h" #include "STRCONST.h" #ifndef NavigationAvail#define NavigationAvail 1#endif #ifndef AppearanceAvail#define AppearanceAvail 1#endif #ifndef NewNamesAvail#define NewNamesAvail 1#endif #ifndef CALL_NOT_IN_CARBON#define CALL_NOT_IN_CARBON 1#endif /* !defined(CALL_NOT_IN_CARBON) */  /* --- information about the environment --- */ /*	code to determine characteristics	of the current run time environment.*/ #define TestBit(i, p) (((uimr)(i) & ((uimr)1 << (p))) != 0) #ifndef HaveCPUfamM68K#define HaveCPUfamM68K 0#endif #if HaveCPUfamM68K /* MACENVRN.i */ #ifndef Support64kROM#define Support64kROM 1#endif #define Have64kROM() (LMGetROM85() < 0) /* -- basic environment checking -- */ #ifndef DebugTrapAvailableChecks#define DebugTrapAvailableChecks 0#endif LOCALFUNC blnr LowToolTrapAvailable(short trap_num){#if DebugTrapAvailableChecks	if ((trap_num & 0x0800) == 0) {		DebugStr("\pOSTrap in LowToolTrapAvailable");		return falseblnr;	}	if ((trap_num & 0x07ff) >= 0x200) {		DebugStr("\pHiToolTrap in LowToolTrapAvailable");		return falseblnr;	}#endif	return GetToolTrapAddress(trap_num) !=		GetToolTrapAddress(_Unimplemented);} LOCALFUNC blnr HiToolTrapAvailable(short trap_num){#if DebugTrapAvailableChecks	if ((trap_num & 0x0800) == 0) {		DebugStr("\pOSTrap in HiToolTrapAvailable");		return falseblnr;	}	if (((trap_num & 0x07ff) < 0x200)		|| ((trap_num & 0x07ff) >= 0x400))	{		DebugStr("\pLowToolTrap in HiToolTrapAvailable");		return falseblnr;	}#endif	if (GetToolTrapAddress(_InitGraf)		== GetToolTrapAddress(0xAA6E))	{		return falseblnr;	} else {		return GetToolTrapAddress(trap_num) !=			GetToolTrapAddress(_Unimplemented);	}} LOCALFUNC blnr OSTrapAvailable(short trap_num){#if DebugTrapAvailableChecks	if ((trap_num & 0x0800) != 0) {		DebugStr("\pToolTrap in ToolTrapAvailable");		return falseblnr;	}#endif	return GetOSTrapAddress(trap_num) !=		GetToolTrapAddress(_Unimplemented);} LOCALVAR blnr MyEnvrAttrWaitNextEventAvail;LOCALVAR blnr HaveEnvrAttrWaitNextEventAvail = falseblnr; LOCALFUNC blnr HaveWaitNextEventAvail(void){	if (! HaveEnvrAttrWaitNextEventAvail) {		MyEnvrAttrWaitNextEventAvail =			LowToolTrapAvailable(_WaitNextEvent);		HaveEnvrAttrWaitNextEventAvail = trueblnr;	}	return MyEnvrAttrWaitNextEventAvail;} LOCALVAR blnr MyEnvrAttrGestaltAvail;LOCALVAR blnr HaveEnvrAttrGestaltAvail = falseblnr; LOCALFUNC blnr HaveGestaltAvail(void){	if (! HaveEnvrAttrGestaltAvail) {		MyEnvrAttrGestaltAvail =			(! Have64kROM()) &&			OSTrapAvailable(_Gestalt);			/*				contrary to all the documentation,				TrapAvailable check by itself doesn't				work on 64k ROM, because a tool box trap				has the same trap number, and both				GetOSTrapAddress and GetToolTrapAddress				are the same as GetTrapAddress on a 64k ROM.			*/		HaveEnvrAttrGestaltAvail = trueblnr;	}	return MyEnvrAttrGestaltAvail;} #else /* for PowerPC, assume always have these routines */ #define HaveWaitNextEventAvail() trueblnr#define HaveGestaltAvail() trueblnr #endif LOCALVAR blnr MyEnvrAttrAliasMgrAvail;LOCALVAR blnr HaveEnvrAttrAliasMgrAvail = falseblnr; LOCALFUNC blnr HaveAliasMgrAvail(void){	if (! HaveEnvrAttrAliasMgrAvail) {		long reply; 		MyEnvrAttrAliasMgrAvail =			HaveGestaltAvail()			&& (noErr == Gestalt(gestaltAliasMgrAttr, &reply))			&& TestBit(reply, gestaltAliasMgrPresent);		HaveEnvrAttrAliasMgrAvail = trueblnr;	}	return MyEnvrAttrAliasMgrAvail;} LOCALVAR blnr MyEnvrAttrAppleEvtMgrAvail;LOCALVAR blnr HaveEnvrAttrAppleEvtMgrAvail = falseblnr; LOCALFUNC blnr HaveAppleEvtMgrAvail(void){	if (! HaveEnvrAttrAppleEvtMgrAvail) {		long reply; 		MyEnvrAttrAppleEvtMgrAvail =			HaveGestaltAvail()			&& (noErr == Gestalt(gestaltAppleEventsAttr, &reply))			&& TestBit(reply, gestaltAppleEventsPresent);		HaveEnvrAttrAppleEvtMgrAvail = trueblnr;	}	return MyEnvrAttrAppleEvtMgrAvail;} #if EnableDragDrop LOCALVAR blnr MyEnvrAttrDragMgrAvail;LOCALVAR blnr HaveEnvrAttrDragMgrAvail = falseblnr; LOCALFUNC blnr HaveDragMgrAvail(void){	if (! HaveEnvrAttrDragMgrAvail) {		long reply; 		MyEnvrAttrDragMgrAvail =			HaveGestaltAvail()			&& (noErr == Gestalt(gestaltDragMgrAttr, &reply))			&& TestBit(reply, gestaltDragMgrPresent);		HaveEnvrAttrDragMgrAvail = trueblnr;	}	return MyEnvrAttrDragMgrAvail;} #endif #ifndef Windows85APIAvail#define Windows85APIAvail 1#endif #if Windows85APIAvailLOCALVAR blnr MyEnvrAttrHideShowMenuAvail;LOCALVAR blnr HaveEnvrAttrHideShowMenuAvail = falseblnr; LOCALFUNC blnr HaveHideShowMenuAvail(void){	if (! HaveEnvrAttrHideShowMenuAvail) {		long reply; 		MyEnvrAttrHideShowMenuAvail =			HaveGestaltAvail()			&& (noErr == Gestalt(gestaltMenuMgrAttr, &reply));		HaveEnvrAttrHideShowMenuAvail = trueblnr;	}	return MyEnvrAttrHideShowMenuAvail;}#endif #if AppearanceAvailLOCALVAR blnr MyEnvrAttrAppearanceAvail;LOCALVAR blnr HaveEnvrAttrAppearanceAvail = falseblnr; LOCALFUNC blnr HaveAppearanceAvail(void){	if (! HaveEnvrAttrAppearanceAvail) {		long reply; 		MyEnvrAttrAppearanceAvail =			HaveGestaltAvail()			&& (noErr == Gestalt(gestaltAppearanceAttr, &reply));		HaveEnvrAttrAppearanceAvail = trueblnr;	}	return MyEnvrAttrAppearanceAvail;}#endif #if HaveCPUfamM68KLOCALVAR blnr MyEnvrAttrSndMngrAvail;LOCALVAR blnr HaveEnvrAttrSndMngrAvail = falseblnr; LOCALFUNC blnr HaveSndMngrAvail(void){	if (! HaveEnvrAttrSndMngrAvail) {		MyEnvrAttrSndMngrAvail = LowToolTrapAvailable(_SndNewChannel);		HaveEnvrAttrSndMngrAvail = trueblnr;	}	return MyEnvrAttrSndMngrAvail;}#endif #if NavigationAvailLOCALVAR blnr MyEnvrAttrNavServicesAvail;LOCALVAR blnr HaveEnvrAttrNavServicesAvail = falseblnr; LOCALFUNC blnr HaveNavServicesAvail(void){	if (! HaveEnvrAttrNavServicesAvail) {		MyEnvrAttrNavServicesAvail = NavServicesAvailable();		HaveEnvrAttrNavServicesAvail = trueblnr;	}	return MyEnvrAttrNavServicesAvail;}#endif #if HaveCPUfamM68KLOCALVAR blnr MyEnvrAttrFSSpecCallsAvail;LOCALVAR blnr HaveEnvrAttrFSSpecCallsAvail = falseblnr; LOCALFUNC blnr HaveFSSpecCallsAvail(void){	if (! HaveEnvrAttrFSSpecCallsAvail) {		long reply; 		MyEnvrAttrFSSpecCallsAvail =			HaveGestaltAvail()			&& (noErr == Gestalt(gestaltFSAttr, &reply))			&& TestBit(reply, gestaltHasFSSpecCalls);		HaveEnvrAttrFSSpecCallsAvail = trueblnr;	}	return MyEnvrAttrFSSpecCallsAvail;}#endif #if Windows85APIAvailLOCALVAR blnr MyEnvrAttrNewWndMgrAvail;LOCALVAR blnr HaveEnvrAttrNewWndMgrAvail = falseblnr; LOCALFUNC blnr HaveNewWndMgrAvail(void){	if (! HaveEnvrAttrNewWndMgrAvail) {		long reply; 		MyEnvrAttrNewWndMgrAvail =			HaveGestaltAvail()			&& (noErr == Gestalt(gestaltWindowMgrAttr, &reply))			&& TestBit(reply, gestaltWindowMgrPresentBit);		HaveEnvrAttrNewWndMgrAvail = trueblnr;	}	return MyEnvrAttrNewWndMgrAvail;}#endif /* --- initial initialization --- */ #if defined(__SC__) || ((defined(powerc) || defined(__powerc)) \	&& ! defined(__MWERKS__)) /* GLOBALVAR */ QDGlobals qd;#endif LOCALFUNC blnr InitMacManagers(void){	MaxApplZone(); 	{		int i; 		for (i = 7; --i >= 0; ) {			MoreMasters();		}	} 	InitGraf(&qd.thePort);	InitFonts();	InitWindows();	InitMenus();	TEInit();	InitDialogs(NULL);	InitCursor();	return trueblnr;}  /* --- mac style errors --- */ #define CheckSavetMacErr(result) (mnvm_noErr == (err = (result)))	/*		where 'err' is a variable of type tMacErr in the function		this is used in	*/ #define To_tMacErr(result) ((tMacErr)(ui4b)(result)) #define CheckSaveMacErr(result) (CheckSavetMacErr(To_tMacErr(result)))  /*	define NotAfileRef to some value that is different	from any valid open file reference.*/#define NotAfileRef (-1) struct MyDir_R {	long DirId;	short VRefNum;};typedef struct MyDir_R MyDir_R; LOCALFUNC tMacErr OpenNamedFileInFolder(MyDir_R *d,	ps3p fileName, short *refnum){	tMacErr err; #if HaveCPUfamM68K	if (! HaveFSSpecCallsAvail()) {		err = To_tMacErr(FSOpen(fileName, d->VRefNum, refnum));	} else#endif	{		Boolean isFolder;		Boolean isAlias;		FSSpec spec; 		if (CheckSaveMacErr(			FSMakeFSSpec(d->VRefNum, d->DirId, fileName, &spec)))		if (CheckSaveMacErr(			ResolveAliasFile(&spec, trueblnr, &isFolder, &isAlias)))		if (CheckSaveMacErr(			FSpOpenDF(&spec, fsRdPerm, refnum)))		{		}	} 	return err;} /* --- sending debugging info to file --- */ #if dbglog_HAVE #define Support64kROM 0#define tMyErr tMacErr typedef unsigned char * MyPtr; LOCALFUNC tMyErr MyHGetDir_v2(MyDir_R *d){	tMyErr err;	WDPBRec r; 	r.ioCompletion = NULL;	r.ioNamePtr = NULL; #if Support64kROM	if (Have64kROM()) {		err = PBGetVolSync((ParamBlockRec *)&r);		d->VRefNum = r.ioVRefNum;		d->DirId = 0;	} else#endif	{		err = PBHGetVolSync(&r);		d->VRefNum = r.ioWDVRefNum;		d->DirId = r.ioWDDirID;	} 	return err;} LOCALFUNC tMyErr MyWriteBytes_v2(short refNum, MyPtr p, uimr L){	ParamBlockRec r; 	r.ioParam.ioCompletion = NULL;	r.ioParam.ioRefNum = refNum;	r.ioParam.ioBuffer = (Ptr)p;	r.ioParam.ioReqCount = L;	r.ioParam.ioPosMode = (short) fsFromMark;	r.ioParam.ioPosOffset = 0; 	return PBWriteSync(&r);} LOCALFUNC tMyErr MyCloseFile_v2(short refNum){	ParamBlockRec r; 	r.ioParam.ioCompletion = NULL;	r.ioParam.ioRefNum = refNum; 	return PBCloseSync(&r);#if 0	return (tMyErr)FSClose(refNum);#endif} #define NotAfileRef (-1) /*	Probably should use PBHOpenDF instead	of PBHOpen when it is available.	(System 7 according to Technical Note FL515)*/ LOCALFUNC tMyErr MyFileOpen_v2(MyDir_R *d, StringPtr s,	char Permssn, short *refnum){

Lines 1–500 of 5775.

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t