Sigrid Haflínudóttirswitch Control with Command58d2d216 years agoHistory
1885 lines · 36.0 KB · C
RawDownload
#include <u.h>#include <libc.h>#include <stdio.h>#include <draw.h>#include <mouse.h>#include <cursor.h>#include <keyboard.h>#include <thread.h>#include <plumb.h>#define Uint8 u8int#define Uint16 u16int#define Uint32 u32int#include "CNFGRAPI.h"#include "SYSDEPNS.h"#include "ENDIANAC.h"#include "MYOSGLUE.h"#include "STRCONST.h" GLOBALOSGLUPROC MyMoveBytes(anyp srcPtr, anyp destPtr, si5b byteCount){	memmove(destPtr, srcPtr, byteCount);} #define NeedCell2PlainAsciiMap 1#include "INTLCHAR.h" #if dbglog_HAVE #define dbglog_ToStdErr 0 #if ! dbglog_ToStdErrLOCALVAR FILE *dbglog_File = NULL;#endif LOCALFUNC blnr dbglog_open0(void){#if dbglog_ToStdErr	return trueblnr;#else	dbglog_File = fopen("dbglog.txt", "w");	return (NULL != dbglog_File);#endif} LOCALPROC dbglog_write0(char *s, uimr L){#if dbglog_ToStdErr	(void) fwrite(s, 1, L, stderr);#else	if (dbglog_File != NULL) {		(void) fwrite(s, 1, L, dbglog_File);	}#endif} LOCALPROC dbglog_close0(void){#if ! dbglog_ToStdErr	if (dbglog_File != NULL) {		fclose(dbglog_File);		dbglog_File = NULL;	}#endif} #endif /* --- information about the environment --- */ #define WantColorTransValid 0 #include "COMOSGLU.h" #include "PBUFSTDC.h" #include "CONTROLM.h" /* --- text translation --- */ LOCALPROC NativeStrFromCStr(char *r, char *s){	ui3b ps[ClStrMaxLength];	int i;	int L; 	ClStrFromSubstCStr(&L, ps, s); 	for (i = 0; i < L; ++i) {		r[i] = Cell2PlainAsciiMap[ps[i]];	} 	r[L] = 0;} /* --- drives --- */ #define NotAfileRef NULL LOCALVAR FILE *Drives[NumDrives]; /* open disk image files */ LOCALPROC InitDrives(void){	/*		This isn't really needed, Drives[i] and DriveNames[i]		need not have valid values when not vSonyIsInserted[i].	*/	tDrive i; 	for (i = 0; i < NumDrives; ++i) {		Drives[i] = NotAfileRef;	}} GLOBALOSGLUFUNC tMacErr vSonyTransfer(blnr IsWrite, ui3p Buffer,	tDrive Drive_No, ui5r Sony_Start, ui5r Sony_Count,	ui5r *Sony_ActCount){	tMacErr err = mnvm_miscErr;	FILE *refnum = Drives[Drive_No];	ui5r NewSony_Count = 0; 	if (0 == fseek(refnum, Sony_Start, SEEK_SET)) {		if (IsWrite) {			NewSony_Count = fwrite(Buffer, 1, Sony_Count, refnum);		} else {			NewSony_Count = fread(Buffer, 1, Sony_Count, refnum);		} 		if (NewSony_Count == Sony_Count) {			err = mnvm_noErr;		}	} 	if (nullpr != Sony_ActCount) {		*Sony_ActCount = NewSony_Count;	} 	return err; /*& figure out what really to return &*/} GLOBALOSGLUFUNC tMacErr vSonyGetSize(tDrive Drive_No, ui5r *Sony_Count){	tMacErr err = mnvm_miscErr;	FILE *refnum = Drives[Drive_No];	long v; 	if (0 == fseek(refnum, 0, SEEK_END)) {		v = ftell(refnum);		if (v >= 0) {			*Sony_Count = v;			err = mnvm_noErr;		}	} 	return err; /*& figure out what really to return &*/} LOCALFUNC tMacErr vSonyEject0(tDrive Drive_No, blnr deleteit){	FILE *refnum = Drives[Drive_No]; 	DiskEjectedNotify(Drive_No); 	fclose(refnum);	Drives[Drive_No] = NotAfileRef; /* not really needed */ 	return mnvm_noErr;} GLOBALOSGLUFUNC tMacErr vSonyEject(tDrive Drive_No){	return vSonyEject0(Drive_No, falseblnr);} #if IncludeSonyNewGLOBALOSGLUFUNC tMacErr vSonyEjectDelete(tDrive Drive_No){	return vSonyEject0(Drive_No, trueblnr);}#endif #if IncludeSonyGetNameGLOBALOSGLUFUNC tMacErr vSonyGetName(tDrive Drive_No, tPbuf *r){	r[0] = 0;	return mnvm_noErr;}#endif LOCALPROC UnInitDrives(void){	tDrive i; 	for (i = 0; i < NumDrives; ++i) {		if (vSonyIsInserted(i)) {			(void) vSonyEject(i);		}	}} LOCALFUNC blnr Sony_Insert0(FILE *refnum, blnr locked,	char *drivepath){	tDrive Drive_No;	blnr IsOk = falseblnr; 	if (! FirstFreeDisk(&Drive_No)) {		MacMsg(kStrTooManyImagesTitle, kStrTooManyImagesMessage,			falseblnr);	} else {		/* printf("Sony_Insert0 %d\n", (int)Drive_No); */ 		{			Drives[Drive_No] = refnum;			DiskInsertNotify(Drive_No, locked); 			IsOk = trueblnr;		}	} 	if (! IsOk) {		fclose(refnum);	} 	return IsOk;} LOCALFUNC blnr Sony_Insert1(char *drivepath, blnr silentfail){	blnr locked = falseblnr;	/* printf("Sony_Insert1 %s\n", drivepath); */	FILE *refnum = fopen(drivepath, "rb+");	if (NULL == refnum) {		locked = trueblnr;		refnum = fopen(drivepath, "rb");	}	if (NULL == refnum) {		if (! silentfail) {			MacMsg(kStrOpenFailTitle, kStrOpenFailMessage, falseblnr);		}	} else {		return Sony_Insert0(refnum, locked, drivepath);	}	return falseblnr;} LOCALFUNC tMacErr LoadMacRomFrom(char *path){	tMacErr err;	FILE *ROM_File;	int File_Size; 	ROM_File = fopen(path, "rb");	if (NULL == ROM_File) {		err = mnvm_fnfErr;	} else {		File_Size = fread(ROM, 1, kROM_Size, ROM_File);		if (File_Size != kROM_Size) {			if (feof(ROM_File)) {				MacMsgOverride(kStrShortROMTitle,					kStrShortROMMessage);				err = mnvm_eofErr;			} else {				MacMsgOverride(kStrNoReadROMTitle,					kStrNoReadROMMessage);				err = mnvm_miscErr;			}		} else {			err = ROM_IsValid();		}		fclose(ROM_File);	} 	return err;} LOCALFUNC blnr Sony_Insert1a(char *drivepath, blnr silentfail){	blnr v; 	if (! ROM_loaded) {		v = (mnvm_noErr == LoadMacRomFrom(drivepath));	} else {		v = Sony_Insert1(drivepath, silentfail);	} 	return v;} static voidplumbproc(void *){	int f;	Plumbmsg *m;	char tmp[1024]; 	threadsetname("plumb");	if ((f = plumbopen("minivmac", OREAD)) >= 0) {		while ((m = plumbrecv(f)) != nil) {			snprint(tmp, sizeof(tmp), "%s/%s", m->wdir, m->data);			Sony_Insert1a(tmp, 0);			plumbfree(m);		}	} 	threadexits(nil);} LOCALFUNC blnr Sony_Insert2(char *s){	return Sony_Insert1(s, trueblnr);} LOCALFUNC blnr Sony_InsertIth(int i){	blnr v; 	if ((i > 9) || ! FirstFreeDisk(nullpr)) {		v = falseblnr;	} else {		char s[] = "disk?.dsk"; 		s[4] = '0' + i; 		v = Sony_Insert2(s);	} 	return v;} LOCALFUNC blnr LoadInitialImages(void){	if (! AnyDiskInserted()) {		int i; 		for (i = 1; Sony_InsertIth(i); ++i) {			/* stop on first error (including file not found) */		}	} 	proccreate(plumbproc, nil, mainstacksize); 	return trueblnr;} /* --- ROM --- */ LOCALVAR char *rom_path = NULL; LOCALFUNC blnr LoadMacRom(void){	tMacErr err; 	if ((NULL == rom_path)		|| (mnvm_fnfErr == (err = LoadMacRomFrom(rom_path))))	if (mnvm_fnfErr == (err = LoadMacRomFrom(RomFileName)))	{	} 	return trueblnr; /* keep launching Mini vMac, regardless */} /* --- video out --- */ #if VarFullScreenLOCALVAR blnr UseFullScreen = (WantInitFullScreen != 0);#endif #if EnableMagnifyLOCALVAR blnr UseMagnify = (WantInitMagnify != 0);#endif LOCALVAR blnr gBackgroundFlag = falseblnr;LOCALVAR blnr gTrueBackgroundFlag = falseblnr;LOCALVAR blnr CurSpeedStopped = falseblnr; #if EnableMagnify#define MaxScale MyWindowScale#else#define MaxScale 1#endif  LOCALVAR Image *my_surface = nullpr;LOCALVAR u8int *pixels; LOCALVAR ui3p ScalingBuff = nullpr; LOCALVAR ui3p CLUT_final; #define CLUT_finalsz (256 * 8 * 4 * MaxScale)	/*		256 possible values of one byte		8 pixels per byte maximum (when black and white)		4 bytes per destination pixel maximum			multiplied by MyWindowScale if EnableMagnify	*/ #define ScrnMapr_DoMap UpdateBWDepth3Copy#define ScrnMapr_Src GetCurDrawBuff()#define ScrnMapr_Dst ScalingBuff#define ScrnMapr_SrcDepth 0#define ScrnMapr_DstDepth 3#define ScrnMapr_Map CLUT_final #include "SCRNMAPR.h" #define ScrnMapr_DoMap UpdateBWDepth4Copy#define ScrnMapr_Src GetCurDrawBuff()#define ScrnMapr_Dst ScalingBuff#define ScrnMapr_SrcDepth 0#define ScrnMapr_DstDepth 4#define ScrnMapr_Map CLUT_final #include "SCRNMAPR.h" #define ScrnMapr_DoMap UpdateBWDepth5Copy#define ScrnMapr_Src GetCurDrawBuff()#define ScrnMapr_Dst ScalingBuff#define ScrnMapr_SrcDepth 0#define ScrnMapr_DstDepth 5#define ScrnMapr_Map CLUT_final #include "SCRNMAPR.h" #define ScrnMapr_DoMap UpdateBWDepth3ScaledCopy#define ScrnMapr_Src GetCurDrawBuff()#define ScrnMapr_Dst ScalingBuff#define ScrnMapr_SrcDepth 0#define ScrnMapr_DstDepth 3#define ScrnMapr_Map CLUT_final#define ScrnMapr_Scale MyWindowScale #include "SCRNMAPR.h" #define ScrnMapr_DoMap UpdateBWDepth4ScaledCopy#define ScrnMapr_Src GetCurDrawBuff()#define ScrnMapr_Dst ScalingBuff#define ScrnMapr_SrcDepth 0#define ScrnMapr_DstDepth 4#define ScrnMapr_Map CLUT_final#define ScrnMapr_Scale MyWindowScale #include "SCRNMAPR.h" #define ScrnMapr_DoMap UpdateBWDepth5ScaledCopy#define ScrnMapr_Src GetCurDrawBuff()#define ScrnMapr_Dst ScalingBuff#define ScrnMapr_SrcDepth 0#define ScrnMapr_DstDepth 5#define ScrnMapr_Map CLUT_final#define ScrnMapr_Scale MyWindowScale #include "SCRNMAPR.h"  #if (0 != vMacScreenDepth) && (vMacScreenDepth < 4) #define ScrnMapr_DoMap UpdateColorDepth3Copy#define ScrnMapr_Src GetCurDrawBuff()#define ScrnMapr_Dst ScalingBuff#define ScrnMapr_SrcDepth vMacScreenDepth#define ScrnMapr_DstDepth 3#define ScrnMapr_Map CLUT_final #include "SCRNMAPR.h" #define ScrnMapr_DoMap UpdateColorDepth4Copy#define ScrnMapr_Src GetCurDrawBuff()#define ScrnMapr_Dst ScalingBuff#define ScrnMapr_SrcDepth vMacScreenDepth#define ScrnMapr_DstDepth 4#define ScrnMapr_Map CLUT_final #include "SCRNMAPR.h" #define ScrnMapr_DoMap UpdateColorDepth5Copy#define ScrnMapr_Src GetCurDrawBuff()#define ScrnMapr_Dst ScalingBuff#define ScrnMapr_SrcDepth vMacScreenDepth#define ScrnMapr_DstDepth 5#define ScrnMapr_Map CLUT_final #include "SCRNMAPR.h" #define ScrnMapr_DoMap UpdateColorDepth3ScaledCopy#define ScrnMapr_Src GetCurDrawBuff()#define ScrnMapr_Dst ScalingBuff#define ScrnMapr_SrcDepth vMacScreenDepth#define ScrnMapr_DstDepth 3#define ScrnMapr_Map CLUT_final#define ScrnMapr_Scale MyWindowScale #include "SCRNMAPR.h" #define ScrnMapr_DoMap UpdateColorDepth4ScaledCopy#define ScrnMapr_Src GetCurDrawBuff()#define ScrnMapr_Dst ScalingBuff#define ScrnMapr_SrcDepth vMacScreenDepth#define ScrnMapr_DstDepth 4

Lines 1–500 of 1885.

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