Sigrid Haflínudóttirfirst dirty version of the portd7ad0686 years agoHistory
161 lines · 3.3 KB · C
RawDownload
/*	SCRNTRNS.h 	Copyright (C) 2012 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.*/ /*	SCReeN TRaNSlater*/ /* required arguments for this template */ #ifndef ScrnTrns_DoTrans /* procedure to be created by this template */#error "ScrnTrns_DoTrans not defined"#endif#ifndef ScrnTrns_Src#error "ScrnTrns_Src not defined"#endif#ifndef ScrnTrns_Dst#error "ScrnTrns_Dst not defined"#endif#ifndef ScrnTrns_SrcDepth#error "ScrnTrns_SrcDepth not defined"#endif#ifndef ScrnTrns_DstDepth#error "ScrnTrns_DstDepth not defined"#endif /* optional argument for this template */ #ifndef ScrnTrns_Scale#define ScrnTrns_Scale 1#endif #ifndef ScrnTrns_DstZLo#define ScrnTrns_DstZLo 0#endif /* check of parameters */ #if (ScrnTrns_SrcDepth < 4)#error "bad ScrnTrns_SrcDepth"#endif #if (ScrnTrns_DstDepth < 4)#error "bad ScrnTrns_Dst"#endif /* now define the procedure */ LOCALPROC ScrnTrns_DoTrans(si4b top, si4b left,	si4b bottom, si4b right){	int i;	int j;	ui5b t0;	ui5b t1;	ui4r jn = right - left;	ui4r SrcSkip = vMacScreenByteWidth		- (jn << (ScrnTrns_SrcDepth - 3));	ui3b *pSrc = ((ui3b *)ScrnTrns_Src)		+ (left << (ScrnTrns_SrcDepth - 3))		+ vMacScreenByteWidth * (ui5r)top;	ui5b *pDst = ((ui5b *)ScrnTrns_Dst)		+ left * ScrnTrns_Scale		+ (ui5r)vMacScreenWidth * ScrnTrns_Scale * ScrnTrns_Scale * top;	ui4r DstSkip = (vMacScreenWidth - jn) * ScrnTrns_Scale;#if ScrnTrns_Scale > 1	int k;	ui5b *p3;	ui5b *p4;#endif 	for (i = bottom - top; --i >= 0; ) {#if ScrnTrns_Scale > 1		p3 = pDst;#endif 		for (j = jn; --j >= 0; ) {#if 4 == ScrnTrns_SrcDepth			t0 = do_get_mem_word(pSrc);			pSrc += 2;			t1 =#if ScrnTrns_DstZLo				((t0 & 0x7C00) << 17) |				((t0 & 0x7000) << 12) |				((t0 & 0x03E0) << 14) |				((t0 & 0x0380) << 9) |				((t0 & 0x001F) << 11) |				((t0 & 0x001C) << 6);#else				((t0 & 0x7C00) << 9) |				((t0 & 0x7000) << 4) |				((t0 & 0x03E0) << 6) |				((t0 & 0x0380) << 1) |				((t0 & 0x001F) << 3) |				((t0 & 0x001C) >> 2);#endif#if 0				((t0 & 0x7C00) << 1) |				((t0 & 0x7000) >> 4) |				((t0 & 0x03E0) << 14) |				((t0 & 0x0380) << 9) |				((t0 & 0x001F) << 27) |				((t0 & 0x001C) << 22);#endif #elif 5 == ScrnTrns_SrcDepth			t0 = do_get_mem_long(pSrc);			pSrc += 4;#if ScrnTrns_DstZLo			t1 = t0 << 8;#else			t1 = t0;#endif#endif #if ScrnTrns_Scale > 1			for (k = ScrnTrns_Scale; --k >= 0; )#endif			{				*pDst++ = t1;			}		}		pSrc += SrcSkip;		pDst += DstSkip; #if ScrnTrns_Scale > 1#if ScrnTrns_Scale > 2		for (k = ScrnTrns_Scale - 1; --k >= 0; )#endif		{			p4 = p3;			for (j = ScrnTrns_Scale * jn; --j >= 0; ) {				*pDst++ = *p4++;			}			pDst += DstSkip;		}#endif /* ScrnTrns_Scale > 1 */	}} /* undefine template locals and parameters */ #undef ScrnTrns_DoTrans#undef ScrnTrns_Src#undef ScrnTrns_Dst#undef ScrnTrns_SrcDepth#undef ScrnTrns_DstDepth#undef ScrnTrns_Scale#undef ScrnTrns_DstZLo

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