diff options
| author | James Brown | 2002-04-11 17:19:16 +0000 | 
|---|---|---|
| committer | James Brown | 2002-04-11 17:19:16 +0000 | 
| commit | 7696081c54a6cac8152a227bd9d0bcc41999f261 (patch) | |
| tree | 70859cf2d6be5ad77d7e7c41ed01c20837a0b2d0 /sdl.cpp | |
| parent | 34747b792a42e8129af60371541e9b7321d4d55f (diff) | |
| download | scummvm-rg350-7696081c54a6cac8152a227bd9d0bcc41999f261.tar.gz scummvm-rg350-7696081c54a6cac8152a227bd9d0bcc41999f261.tar.bz2 scummvm-rg350-7696081c54a6cac8152a227bd9d0bcc41999f261.zip | |
Large pointless reindentation of all the code. Also fixed a few mistakes
in the object flags code cleanup.
Flags used:
indent *.cpp -br -bap -nbc -lp -ce -cdw -brs -nbad -nbc -npsl -nip
-ts2 -ncs -nbs -npcs -nbap -Tbyte -Tuint32 -Tuint8 -Tuint16 -TArrayHeader
-TMemBlkHeader -TVerbSlot -TObjectData -Tvoid -TImageHeader -TRoomHeader
-TCodeHeader -TResHdr -TBompHeader -TMidiChannelAdl -TGui -TScumm
-TSoundEngine -TPart -TPlayer
svn-id: r3908
Diffstat (limited to 'sdl.cpp')
| -rw-r--r-- | sdl.cpp | 2508 | 
1 files changed, 1226 insertions, 1282 deletions
| @@ -43,136 +43,144 @@ SoundEngine sound;  SOUND_DRIVER_TYPE snd_driv;  static SDL_Surface *screen; -static SDL_CD      *cdrom; +static SDL_CD *cdrom;  /* For 2xSAI */  static SDL_Surface *sdl_hwscreen;  static SDL_Surface *sdl_tmpscreen; -int Init_2xSaI (uint32 BitFormat);	 -void _2xSaI (uint8 *srcPtr, uint32 srcPitch, uint8 *deltaPtr, uint8 *dstPtr, uint32 dstPitch, int width, int height); -void Super2xSaI (uint8 *srcPtr, uint32 srcPitch, uint8 *deltaPtr, uint8 *dstPtr, uint32 dstPitch, int width, int height); -void SuperEagle(uint8 *srcPtr, uint32 srcPitch, uint8 *deltaPtr, uint8 *dstPtr, uint32 dstPitch, int width, int height); +int Init_2xSaI(uint32 BitFormat); +void _2xSaI(uint8 *srcPtr, uint32 srcPitch, uint8 *deltaPtr, uint8 *dstPtr, +						uint32 dstPitch, int width, int height); +void Super2xSaI(uint8 *srcPtr, uint32 srcPitch, uint8 *deltaPtr, +								uint8 *dstPtr, uint32 dstPitch, int width, int height); +void SuperEagle(uint8 *srcPtr, uint32 srcPitch, uint8 *deltaPtr, +								uint8 *dstPtr, uint32 dstPitch, int width, int height);  static int current_shake_pos; -void resetCursor(void) { +void resetCursor(void) +{  	SDL_ShowCursor(SDL_ENABLE);  }  void updateScreen(Scumm *s); -void updatePalette(Scumm *s) { +void updatePalette(Scumm *s) +{  	SDL_Color colors[256];  	int first = s->_palDirtyMin;  	int num = s->_palDirtyMax - first + 1;  	int i;  	byte *data = s->_currentPalette; -	 -	data += first*3; -	for (i=0; i<num; i++,data+=3) { + +	data += first * 3; +	for (i = 0; i < num; i++, data += 3) {  		colors[i].r = data[0];  		colors[i].g = data[1];  		colors[i].b = data[2];  		colors[i].unused = 0;  	} -	 +  	SDL_SetColors(screen, colors, first, num); -	 +  	s->_palDirtyMax = -1;  	s->_palDirtyMin = 0x3E8;  } -int mapKey(int key, byte mod) { -	if (key>=SDLK_F1 && key<=SDLK_F9) { +int mapKey(int key, byte mod) +{ +	if (key >= SDLK_F1 && key <= SDLK_F9) {  		return key - SDLK_F1 + 315; -	} else if (key>='a' && key<='z' && mod&KMOD_SHIFT) { -		key&=~0x20; -	} else if (key>=SDLK_NUMLOCK && key<=SDLK_EURO) +	} else if (key >= 'a' && key <= 'z' && mod & KMOD_SHIFT) { +		key &= ~0x20; +	} else if (key >= SDLK_NUMLOCK && key <= SDLK_EURO)  		return 0;  	return key;  } -void waitForTimer(Scumm *s, int msec_delay) { +void waitForTimer(Scumm *s, int msec_delay) +{  	SDL_Event event;  	uint32 start_time; -	if (s->_fastMode&2) +	if (s->_fastMode & 2)  		msec_delay = 0; -	else if (s->_fastMode&1) +	else if (s->_fastMode & 1)  		msec_delay = 10;  	start_time = SDL_GetTicks();  	do {  		while (SDL_PollEvent(&event)) { -			switch(event.type) { +			switch (event.type) {  			case SDL_KEYDOWN:  				s->_keyPressed = mapKey(event.key.keysym.sym, event.key.keysym.mod); -				if (event.key.keysym.sym >= '0' && event.key.keysym.sym<='9') { +				if (event.key.keysym.sym >= '0' && event.key.keysym.sym <= '9') {  					s->_saveLoadSlot = event.key.keysym.sym - '0'; -					if (event.key.keysym.mod&KMOD_SHIFT) { +					if (event.key.keysym.mod & KMOD_SHIFT) {  						sprintf(s->_saveLoadName, "Quicksave %d", s->_saveLoadSlot);  						s->_saveLoadFlag = 1; -					} else if (event.key.keysym.mod&KMOD_CTRL) +					} else if (event.key.keysym.mod & KMOD_CTRL)  						s->_saveLoadFlag = 2;  					s->_saveLoadCompatible = false; -				} else if (event.key.keysym.sym=='z' && event.key.keysym.mod&KMOD_CTRL) { +				} else if (event.key.keysym.sym == 'z' +									 && event.key.keysym.mod & KMOD_CTRL) {  					exit(1); -				} else if (event.key.keysym.sym=='f' && event.key.keysym.mod&KMOD_CTRL) { +				} else if (event.key.keysym.sym == 'f' +									 && event.key.keysym.mod & KMOD_CTRL) {  					s->_fastMode ^= 1; -				} else if (event.key.keysym.sym=='g' && event.key.keysym.mod&KMOD_CTRL) { +				} else if (event.key.keysym.sym == 'g' +									 && event.key.keysym.mod & KMOD_CTRL) {  					s->_fastMode ^= 2; -				} else if (event.key.keysym.sym=='d' && event.key.keysym.mod&KMOD_CTRL) { +				} else if (event.key.keysym.sym == 'd' +									 && event.key.keysym.mod & KMOD_CTRL) {  					debugger.attach(s); -				} else if (event.key.keysym.sym=='s' && event.key.keysym.mod&KMOD_CTRL) { +				} else if (event.key.keysym.sym == 's' +									 && event.key.keysym.mod & KMOD_CTRL) {  					s->resourceStats(); -				} else if (event.key.keysym.sym==SDLK_RETURN && event.key.keysym.mod&KMOD_ALT) { -					if(!SDL_WM_ToggleFullScreen(screen)) +				} else if (event.key.keysym.sym == SDLK_RETURN +									 && event.key.keysym.mod & KMOD_ALT) { +					if (!SDL_WM_ToggleFullScreen(screen))  						warning("Full screen failed");  				} - -	#if defined(__APPLE__) || defined(MACOS) -				if (event.key.keysym.sym=='q' && event.key.keysym.mod&KMOD_LMETA) { +#if defined(__APPLE__) || defined(MACOS) +				if (event.key.keysym.sym == 'q' && event.key.keysym.mod & KMOD_LMETA) {  					exit(1); -				}  -	#endif -				break; -			case SDL_MOUSEMOTION: { -				int newx,newy; -	if (scale == 3) -	{ -				newx = event.motion.x/3; -				newy = event.motion.y/3; -	} else -	if (scale == 2) -	{ -				newx = event.motion.x>>1; -				newy = event.motion.y>>1; -	} else -	{ -				newx = event.motion.x; -				newy = event.motion.y; -	} - -				if (newx != s->mouse.x || newy != s->mouse.y) { -					s->mouse.x = newx; -					s->mouse.y = newy; -					s->drawMouse(); -					updateScreen(s);  				} +#endif  				break; +			case SDL_MOUSEMOTION:{ +					int newx, newy; +					if (scale == 3) { +						newx = event.motion.x / 3; +						newy = event.motion.y / 3; +					} else if (scale == 2) { +						newx = event.motion.x >> 1; +						newy = event.motion.y >> 1; +					} else { +						newx = event.motion.x; +						newy = event.motion.y; +					} + +					if (newx != s->mouse.x || newy != s->mouse.y) { +						s->mouse.x = newx; +						s->mouse.y = newy; +						s->drawMouse(); +						updateScreen(s); +					} +					break;  				}  			case SDL_MOUSEBUTTONDOWN: -				if (event.button.button==SDL_BUTTON_LEFT) -					s->_leftBtnPressed |= msClicked|msDown; -				else if (event.button.button==SDL_BUTTON_RIGHT) -					s->_rightBtnPressed |= msClicked|msDown; +				if (event.button.button == SDL_BUTTON_LEFT) +					s->_leftBtnPressed |= msClicked | msDown; +				else if (event.button.button == SDL_BUTTON_RIGHT) +					s->_rightBtnPressed |= msClicked | msDown;  				break;  			case SDL_MOUSEBUTTONUP: -				if (event.button.button==SDL_BUTTON_LEFT) +				if (event.button.button == SDL_BUTTON_LEFT)  					s->_leftBtnPressed &= ~msDown; -				else if (event.button.button==SDL_BUTTON_RIGHT) +				else if (event.button.button == SDL_BUTTON_RIGHT)  					s->_rightBtnPressed &= ~msDown;  				break; @@ -182,7 +190,7 @@ void waitForTimer(Scumm *s, int msec_delay) {  			}  		} -		cd_music_loop(); // Loop CD Music if necessary +		cd_music_loop();						// Loop CD Music if necessary  		if (SDL_GetTicks() >= start_time + msec_delay)  			break; @@ -197,55 +205,62 @@ bool fullRedraw;  int old_mouse_x, old_mouse_y;  int old_mouse_h, old_mouse_w; -bool has_mouse,hide_mouse; +bool has_mouse, hide_mouse;  #define BAK_WIDTH 40  #define BAK_HEIGHT 40 -byte old_backup[BAK_WIDTH*BAK_HEIGHT*2]; +byte old_backup[BAK_WIDTH * BAK_HEIGHT * 2]; -void addDirtyRect(int x, int y, int w, int h) { +void addDirtyRect(int x, int y, int w, int h) +{  	SDL_Rect *r; -	if (numDirtyRects==MAX_DIRTY_RECTS) +	if (numDirtyRects == MAX_DIRTY_RECTS)  		fullRedraw = true;  	else if (!fullRedraw) {  		r = &dirtyRects[numDirtyRects++]; -	if (scale == 3) -	{ -		r->x = x*3; -		r->y = y*3; -		r->w = w*3; -		r->h = h*3; -	} else -	if (scale == 2) -	{ -		r->x = x*2; -		r->y = y*2; -		r->w = w*2; -		r->h = h*2; -	} else -	{ -		r->x = x; -		r->y = y; -		r->w = w; -		r->h = h; -	} +		if (scale == 3) { +			r->x = x * 3; +			r->y = y * 3; +			r->w = w * 3; +			r->h = h * 3; +		} else if (scale == 2) { +			r->x = x * 2; +			r->y = y * 2; +			r->w = w * 2; +			r->h = h * 2; +		} else { +			r->x = x; +			r->y = y; +			r->w = w; +			r->h = h; +		}  	}  } -void addDirtyRectClipped(int x, int y, int w, int h) { -	if (x<0) { w += x; x=0; } -	if (y<0) { h += y; y=0; } -	if (w >= 320-x) w = 320-x; -	if (h >= 200-y) h = 200-y; -	if (w>0 && h>0) -		addDirtyRect(x,y,w,h); +void addDirtyRectClipped(int x, int y, int w, int h) +{ +	if (x < 0) { +		w += x; +		x = 0; +	} +	if (y < 0) { +		h += y; +		y = 0; +	} +	if (w >= 320 - x) +		w = 320 - x; +	if (h >= 200 - y) +		h = 200 - y; +	if (w > 0 && h > 0) +		addDirtyRect(x, y, w, h);  }  #define MAX(a,b) (((a)<(b)) ? (b) : (a))  #define MIN(a,b) (((a)>(b)) ? (b) : (a)) -void setShakePos(Scumm *s, int shake_pos) { +void setShakePos(Scumm *s, int shake_pos) +{  	int old_shake_pos = current_shake_pos;  	int dirty_height, dirty_blackheight;  	int dirty_top, dirty_blacktop; @@ -253,28 +268,24 @@ void setShakePos(Scumm *s, int shake_pos) {  	if (shake_pos != old_shake_pos) {  		current_shake_pos = shake_pos;  		fullRedraw = true; -		 +  		/* Old shake pos was current_shake_pos, new is shake_pos.  		 * Move the screen up or down to account for the change.  		 */ -	if (scale == 3) -	{ -		SDL_Rect dstr = {0,shake_pos*3,960,600}; -		SDL_Rect srcr = {0,old_shake_pos*3,960,600}; -		SDL_BlitSurface(screen, &srcr, screen, &dstr); -	} else -	if (scale == 2) -	{ -		SDL_Rect dstr = {0,shake_pos*2,640,400}; -		SDL_Rect srcr = {0,old_shake_pos*2,640,400}; -		SDL_BlitSurface(screen, &srcr, screen, &dstr); -	} else -	{ -		SDL_Rect dstr = {0,shake_pos,320,200}; -		SDL_Rect srcr = {0,old_shake_pos,320,200}; -		SDL_BlitSurface(screen, &srcr, screen, &dstr); -	} -		 +		if (scale == 3) { +			SDL_Rect dstr = { 0, shake_pos * 3, 960, 600 }; +			SDL_Rect srcr = { 0, old_shake_pos * 3, 960, 600 }; +			SDL_BlitSurface(screen, &srcr, screen, &dstr); +		} else if (scale == 2) { +			SDL_Rect dstr = { 0, shake_pos * 2, 640, 400 }; +			SDL_Rect srcr = { 0, old_shake_pos * 2, 640, 400 }; +			SDL_BlitSurface(screen, &srcr, screen, &dstr); +		} else { +			SDL_Rect dstr = { 0, shake_pos, 320, 200 }; +			SDL_Rect srcr = { 0, old_shake_pos, 320, 200 }; +			SDL_BlitSurface(screen, &srcr, screen, &dstr); +		} +  		/* Also adjust the mouse pointer backup Y coordinate.  		 * There is a minor mouse glitch when the mouse is moved  		 * at the blackness of the shake area, but it's hardly noticable */ @@ -283,33 +294,31 @@ void setShakePos(Scumm *s, int shake_pos) {  		/* Refresh either the upper part of the screen,  		 * or the lower part */  		if (shake_pos > old_shake_pos) { -			dirty_height = MIN(shake_pos, 0) - MIN(old_shake_pos,0); -			dirty_top = -MIN(shake_pos,0); -			dirty_blackheight = MAX(shake_pos,0) - MAX(old_shake_pos,0); -			dirty_blacktop = MAX(old_shake_pos,0); +			dirty_height = MIN(shake_pos, 0) - MIN(old_shake_pos, 0); +			dirty_top = -MIN(shake_pos, 0); +			dirty_blackheight = MAX(shake_pos, 0) - MAX(old_shake_pos, 0); +			dirty_blacktop = MAX(old_shake_pos, 0);  		} else { -			dirty_height = MAX(old_shake_pos,0) - MAX(shake_pos, 0); -			dirty_top = 200 - MAX(old_shake_pos,0); -			dirty_blackheight = MIN(old_shake_pos,0) - MIN(shake_pos,0); -			dirty_blacktop = 200 + MIN(shake_pos,0); +			dirty_height = MAX(old_shake_pos, 0) - MAX(shake_pos, 0); +			dirty_top = 200 - MAX(old_shake_pos, 0); +			dirty_blackheight = MIN(old_shake_pos, 0) - MIN(shake_pos, 0); +			dirty_blacktop = 200 + MIN(shake_pos, 0);  		}  		/* Fill the dirty area with blackness or the scumm image */  		{ -		if (scale == 3) -		{ -			SDL_Rect blackrect = {0, dirty_blacktop*3, 960, dirty_blackheight*3}; -			SDL_FillRect(screen, &blackrect, 0); -		} else -		if (scale == 2) -		{ -			SDL_Rect blackrect = {0, dirty_blacktop*2, 640, dirty_blackheight*2}; -			SDL_FillRect(screen, &blackrect, 0); -		} else -		{ -			SDL_Rect blackrect = {0, dirty_blacktop, 320, dirty_blackheight}; -			SDL_FillRect(screen, &blackrect, 0); -		} +			if (scale == 3) { +				SDL_Rect blackrect = +					{ 0, dirty_blacktop * 3, 960, dirty_blackheight * 3 }; +				SDL_FillRect(screen, &blackrect, 0); +			} else if (scale == 2) { +				SDL_Rect blackrect = +					{ 0, dirty_blacktop * 2, 640, dirty_blackheight * 2 }; +				SDL_FillRect(screen, &blackrect, 0); +			} else { +				SDL_Rect blackrect = { 0, dirty_blacktop, 320, dirty_blackheight }; +				SDL_FillRect(screen, &blackrect, 0); +			}  			s->redrawLines(dirty_top, dirty_top + dirty_height);  		} @@ -317,7 +326,8 @@ void setShakePos(Scumm *s, int shake_pos) {  }  /* Copy part of bitmap */ -void blitToScreen(Scumm *s, byte *src,int x, int y, int w, int h) { +void blitToScreen(Scumm *s, byte *src, int x, int y, int w, int h) +{  	byte *dst;  	int i; @@ -328,122 +338,130 @@ void blitToScreen(Scumm *s, byte *src,int x, int y, int w, int h) {  	/* Account for the shaking and do Y clipping */  	y += current_shake_pos; -	if (y < 0 ) {	h += y; src -= y*320; y = 0; } -	if (h > 200 - y) { h = 200 - y; } -	if (h<=0)	return; +	if (y < 0) { +		h += y; +		src -= y * 320; +		y = 0; +	} +	if (h > 200 - y) { +		h = 200 - y; +	} +	if (h <= 0) +		return; -	if (SDL_LockSurface(screen)==-1) +	if (SDL_LockSurface(screen) == -1)  		error("SDL_LockSurface failed: %s.\n", SDL_GetError()); -	if (scale == 3) -	{ -	dst = (byte*)screen->pixels + y*960*3 + x*3; -	addDirtyRect(x,y,w,h); +	if (scale == 3) { +		dst = (byte *)screen->pixels + y * 960 * 3 + x * 3; +		addDirtyRect(x, y, w, h);  #ifdef DEBUG_CODE -	byte black = GetAsyncKeyState(VK_SHIFT)<0 ? 0 : 0xFF; -	do { -		i=0; +		byte black = GetAsyncKeyState(VK_SHIFT) < 0 ? 0 : 0xFF;  		do { -			dst[i*3] = dst[i*3+1] = dst[i*3+2] = src[i] & black; -		} while (++i!=w); -		memcpy(dst+960, dst, w*3); -		memcpy(dst+960+960, dst, w*3); -		dst += 960*3; -		src += 320; -	} while (--h); +			i = 0; +			do { +				dst[i * 3] = dst[i * 3 + 1] = dst[i * 3 + 2] = src[i] & black; +			} while (++i != w); +			memcpy(dst + 960, dst, w * 3); +			memcpy(dst + 960 + 960, dst, w * 3); +			dst += 960 * 3; +			src += 320; +		} while (--h);  #else -	do { -		i=0;  		do { -			dst[i*3] = dst[i*3+1] = dst[i*3+2] = src[i]; -		} while (++i!=w); -		memcpy(dst+960, dst, w*3); -		memcpy(dst+960+960, dst, w*3); -		dst += 960*3; -		src += 320; -	} while (--h); +			i = 0; +			do { +				dst[i * 3] = dst[i * 3 + 1] = dst[i * 3 + 2] = src[i]; +			} while (++i != w); +			memcpy(dst + 960, dst, w * 3); +			memcpy(dst + 960 + 960, dst, w * 3); +			dst += 960 * 3; +			src += 320; +		} while (--h);  #endif -	} else -	if (scale == 2) -	{ -	dst = (byte*)screen->pixels + y*640*2 + x*2; -	addDirtyRect(x,y,w,h);		 +	} else if (scale == 2) { +		dst = (byte *)screen->pixels + y * 640 * 2 + x * 2; +		addDirtyRect(x, y, w, h);  #ifdef DEBUG_CODE -	byte black = GetAsyncKeyState(VK_SHIFT)<0 ? 0 : 0xFF; -	do { -		i=0; +		byte black = GetAsyncKeyState(VK_SHIFT) < 0 ? 0 : 0xFF;  		do { -			dst[i*2] = dst[i*2+1] = src[i] & black; -		} while (++i!=w); -		memcpy(dst+640, dst, w*2); -		dst += 640*2; -		src += 320; -	} while (--h); +			i = 0; +			do { +				dst[i * 2] = dst[i * 2 + 1] = src[i] & black; +			} while (++i != w); +			memcpy(dst + 640, dst, w * 2); +			dst += 640 * 2; +			src += 320; +		} while (--h);  #else -	do { -		i=0;  		do { -			dst[i*2] = dst[i*2+1] = src[i]; -		} while (++i!=w); -		memcpy(dst+640, dst, w*2); -		dst += 640*2; -		src += 320; -	} while (--h); +			i = 0; +			do { +				dst[i * 2] = dst[i * 2 + 1] = src[i]; +			} while (++i != w); +			memcpy(dst + 640, dst, w * 2); +			dst += 640 * 2; +			src += 320; +		} while (--h);  #endif -	} else -	{ -	dst = (byte*)screen->pixels + y*320 + x; -	addDirtyRect(x,y,w,h); -	do { -		memcpy(dst, src, w); -		dst += 320; -		src += 320; -	} while (--h); +	} else { +		dst = (byte *)screen->pixels + y * 320 + x; +		addDirtyRect(x, y, w, h); +		do { +			memcpy(dst, src, w); +			dst += 320; +			src += 320; +		} while (--h);  	}  	SDL_UnlockSurface(screen);  } -void Draw2xSaI(SDL_Rect *r, int vidmode) { +void Draw2xSaI(SDL_Rect * r, int vidmode) +{  	if (SDL_BlitSurface(screen, r, sdl_tmpscreen, r) != 0)  		error("SDL_BlitSurface failed");  	SDL_LockSurface(sdl_tmpscreen);  	SDL_LockSurface(sdl_hwscreen); -	switch(vidmode) { -		case VIDEO_2XSAI: -				_2xSaI((byte*)sdl_tmpscreen->pixels + r->x*2 + r->y*640, 640, NULL,  -						(byte*)sdl_hwscreen->pixels + r->x*4 + r->y*640*4, 640*2, r->w, r->h); -				break; -		case VIDEO_SUPERSAI: -				Super2xSaI((byte*)sdl_tmpscreen->pixels + r->x*2 + r->y*640, 640, NULL,  -						(byte*)sdl_hwscreen->pixels + r->x*4 + r->y*640*4, 640*2, r->w, r->h); -				break; -		case VIDEO_SUPEREAGLE: -				SuperEagle((byte*)sdl_tmpscreen->pixels + r->x*2 + r->y*640, 640, NULL,  -						(byte*)sdl_hwscreen->pixels + r->x*4 + r->y*640*4, 640*2, r->w, r->h); -				break; -		default: -				error("Unknown graphics mode %d", vidmode); -				break; +	switch (vidmode) { +	case VIDEO_2XSAI: +		_2xSaI((byte *)sdl_tmpscreen->pixels + r->x * 2 + r->y * 640, 640, NULL, +					 (byte *)sdl_hwscreen->pixels + r->x * 4 + r->y * 640 * 4, 640 * 2, +					 r->w, r->h); +		break; +	case VIDEO_SUPERSAI: +		Super2xSaI((byte *)sdl_tmpscreen->pixels + r->x * 2 + r->y * 640, 640, +							 NULL, (byte *)sdl_hwscreen->pixels + r->x * 4 + r->y * 640 * 4, +							 640 * 2, r->w, r->h); +		break; +	case VIDEO_SUPEREAGLE: +		SuperEagle((byte *)sdl_tmpscreen->pixels + r->x * 2 + r->y * 640, 640, +							 NULL, (byte *)sdl_hwscreen->pixels + r->x * 4 + r->y * 640 * 4, +							 640 * 2, r->w, r->h); +		break; +	default: +		error("Unknown graphics mode %d", vidmode); +		break;  	} -	 +  	/* scale the rect to fit in SDL_UpdateRects */  	r->x <<= 1;  	r->y <<= 1;  	r->w <<= 1;  	r->h <<= 1; -	 +  	SDL_UnlockSurface(sdl_tmpscreen);  	SDL_UnlockSurface(sdl_hwscreen);  	SDL_UpdateRect(sdl_hwscreen, r->x, r->y, r->w, r->h);  } -void updateScreen2xSaI(Scumm *s) { +void updateScreen2xSaI(Scumm *s) +{  	SDL_Rect r; -	if (s->_fastMode&2) +	if (s->_fastMode & 2)  		return;  	if (hide_mouse) { @@ -451,9 +469,9 @@ void updateScreen2xSaI(Scumm *s) {  		s->drawMouse();  	} -	if(s->_palDirtyMax != -1) +	if (s->_palDirtyMax != -1)  		updatePalette(s); -	 +  	if (fullRedraw) {  		r.x = 0;  		r.y = 0; @@ -466,7 +484,7 @@ void updateScreen2xSaI(Scumm *s) {  	} else if (numDirtyRects) {  		SDL_Rect *dr;  		int i; -		 +  		for (i = 0; i <= numDirtyRects; i++) {  			dr = &dirtyRects[i];  			Draw2xSaI(dr, s->_videoMode); @@ -477,19 +495,21 @@ void updateScreen2xSaI(Scumm *s) {  } -void updateScreenScale(Scumm *s) { +void updateScreenScale(Scumm *s) +{  	if (fullRedraw) { -		SDL_UpdateRect(screen, 0,0,0,0); +		SDL_UpdateRect(screen, 0, 0, 0, 0);  		fullRedraw = false;  	} else if (numDirtyRects) { -		SDL_UpdateRects(screen, numDirtyRects, dirtyRects);	 +		SDL_UpdateRects(screen, numDirtyRects, dirtyRects);  	}  	numDirtyRects = 0;  } -void updateScreen(Scumm *s) { -	if (s->_fastMode&2) +void updateScreen(Scumm *s) +{ +	if (s->_fastMode & 2)  		return;  	if (hide_mouse) { @@ -497,157 +517,158 @@ void updateScreen(Scumm *s) {  		s->drawMouse();  	} -	if(s->_palDirtyMax != -1) { +	if (s->_palDirtyMax != -1) {  		updatePalette(s);  	}  	if (s->_videoMode == VIDEO_SCALE)  		updateScreenScale(s);  	else -		updateScreen2xSaI(s);	 +		updateScreen2xSaI(s);  } -void drawMouse(Scumm *s, int xdraw, int ydraw, int w, int h, byte *buf, bool visible) { -	int x,y; -	byte *dst,*bak; +void drawMouse(Scumm *s, int xdraw, int ydraw, int w, int h, byte *buf, +							 bool visible) +{ +	int x, y; +	byte *dst, *bak;  	byte color;  	if (hide_mouse)  		visible = false; -	assert(w<=BAK_WIDTH && h<=BAK_HEIGHT); +	assert(w <= BAK_WIDTH && h <= BAK_HEIGHT); -	if (SDL_LockSurface(screen)==-1) +	if (SDL_LockSurface(screen) == -1)  		error("SDL_LockSurface failed: %s.\n", SDL_GetError()); -	if (scale == 3) -	{ - -	if (has_mouse) { -		dst = (byte*)screen->pixels + old_mouse_y*960*3 + old_mouse_x*3; -		bak = old_backup; - -		for (y=0; y<old_mouse_h; y++,bak+=BAK_WIDTH*3,dst+=960*3) { -			if ( (uint)(old_mouse_y + y) < 200) { -				for (x=0; x<old_mouse_w; x++) { -					if ((uint)(old_mouse_x + x) < 320) { -						dst[x*3+960] = dst[x*3+960+960] = dst[x*3] = bak[x*3]; -						dst[x*3+960+1] = dst[x*3+960+960+1] = dst[x*3+1] = bak[x*3+1]; -						dst[x*3+960+2] = dst[x*3+960+960+2] = dst[x*3+2] = bak[x*3+2]; +	if (scale == 3) { + +		if (has_mouse) { +			dst = (byte *)screen->pixels + old_mouse_y * 960 * 3 + old_mouse_x * 3; +			bak = old_backup; + +			for (y = 0; y < old_mouse_h; y++, bak += BAK_WIDTH * 3, dst += 960 * 3) { +				if ((uint) (old_mouse_y + y) < 200) { +					for (x = 0; x < old_mouse_w; x++) { +						if ((uint) (old_mouse_x + x) < 320) { +							dst[x * 3 + 960] = dst[x * 3 + 960 + 960] = dst[x * 3] = +								bak[x * 3]; +							dst[x * 3 + 960 + 1] = dst[x * 3 + 960 + 960 + 1] = +								dst[x * 3 + 1] = bak[x * 3 + 1]; +							dst[x * 3 + 960 + 2] = dst[x * 3 + 960 + 960 + 2] = +								dst[x * 3 + 2] = bak[x * 3 + 2]; +						}  					}  				}  			}  		} -	} -	if (visible) { -		ydraw += current_shake_pos; - -		dst = (byte*)screen->pixels + ydraw*960*3 + xdraw*3; -		bak = old_backup; - -		for (y=0; y<h; y++,dst+=960*3,bak+=BAK_WIDTH*3,buf+=w) { -			if ((uint)(ydraw+y)<200) { -				for (x=0; x<w; x++) { -					if ((uint)(xdraw+x)<320) { -						bak[x*3] = dst[x*3]; -						bak[x*3+1] = dst[x*3+1]; -						bak[x*3+2] = dst[x*3+2]; -						if ((color=buf[x])!=0xFF) { -							dst[x*3] = color; -							dst[x*3+1] = color; -							dst[x*3+2] = color; -							dst[x*3+960] = color; -							dst[x*3+1+960] = color; -							dst[x*3+2+960] = color; -							dst[x*3+960+960] = color; -							dst[x*3+1+960+960] = color; -							dst[x*3+2+960+960] = color; +		if (visible) { +			ydraw += current_shake_pos; + +			dst = (byte *)screen->pixels + ydraw * 960 * 3 + xdraw * 3; +			bak = old_backup; + +			for (y = 0; y < h; y++, dst += 960 * 3, bak += BAK_WIDTH * 3, buf += w) { +				if ((uint) (ydraw + y) < 200) { +					for (x = 0; x < w; x++) { +						if ((uint) (xdraw + x) < 320) { +							bak[x * 3] = dst[x * 3]; +							bak[x * 3 + 1] = dst[x * 3 + 1]; +							bak[x * 3 + 2] = dst[x * 3 + 2]; +							if ((color = buf[x]) != 0xFF) { +								dst[x * 3] = color; +								dst[x * 3 + 1] = color; +								dst[x * 3 + 2] = color; +								dst[x * 3 + 960] = color; +								dst[x * 3 + 1 + 960] = color; +								dst[x * 3 + 2 + 960] = color; +								dst[x * 3 + 960 + 960] = color; +								dst[x * 3 + 1 + 960 + 960] = color; +								dst[x * 3 + 2 + 960 + 960] = color; +							}  						}  					}  				}  			}  		} -	} -	} else -	if (scale == 2) -	{ - -	if (has_mouse) { -		dst = (byte*)screen->pixels + old_mouse_y*640*2 + old_mouse_x*2; -		bak = old_backup; - -		for (y=0; y<old_mouse_h; y++,bak+=BAK_WIDTH*2,dst+=640*2) { -			if ( (uint)(old_mouse_y + y) < 200) { -				for (x=0; x<old_mouse_w; x++) { -					if ((uint)(old_mouse_x + x) < 320) { -						dst[x*2+640] = dst[x*2] = bak[x*2]; -						dst[x*2+640+1] = dst[x*2+1] = bak[x*2+1]; +	} else if (scale == 2) { + +		if (has_mouse) { +			dst = (byte *)screen->pixels + old_mouse_y * 640 * 2 + old_mouse_x * 2; +			bak = old_backup; + +			for (y = 0; y < old_mouse_h; y++, bak += BAK_WIDTH * 2, dst += 640 * 2) { +				if ((uint) (old_mouse_y + y) < 200) { +					for (x = 0; x < old_mouse_w; x++) { +						if ((uint) (old_mouse_x + x) < 320) { +							dst[x * 2 + 640] = dst[x * 2] = bak[x * 2]; +							dst[x * 2 + 640 + 1] = dst[x * 2 + 1] = bak[x * 2 + 1]; +						}  					}  				}  			}  		} -	} -	if (visible) { -		ydraw += current_shake_pos; -		 -		dst = (byte*)screen->pixels + ydraw*640*2 + xdraw*2; -		bak = old_backup; - -		for (y=0; y<h; y++,dst+=640*2,bak+=BAK_WIDTH*2,buf+=w) { -			if ((uint)(ydraw+y)<200) { -				for (x=0; x<w; x++) { -					if ((uint)(xdraw+x)<320) { -						bak[x*2] = dst[x*2]; -						bak[x*2+1] = dst[x*2+1]; -						if ((color=buf[x])!=0xFF) { -							dst[x*2] = color; -							dst[x*2+1] = color; -							dst[x*2+640] = color; -							dst[x*2+1+640] = color; +		if (visible) { +			ydraw += current_shake_pos; + +			dst = (byte *)screen->pixels + ydraw * 640 * 2 + xdraw * 2; +			bak = old_backup; + +			for (y = 0; y < h; y++, dst += 640 * 2, bak += BAK_WIDTH * 2, buf += w) { +				if ((uint) (ydraw + y) < 200) { +					for (x = 0; x < w; x++) { +						if ((uint) (xdraw + x) < 320) { +							bak[x * 2] = dst[x * 2]; +							bak[x * 2 + 1] = dst[x * 2 + 1]; +							if ((color = buf[x]) != 0xFF) { +								dst[x * 2] = color; +								dst[x * 2 + 1] = color; +								dst[x * 2 + 640] = color; +								dst[x * 2 + 1 + 640] = color; +							}  						}  					}  				}  			}  		} -	} -	} else -	{ -	if (has_mouse) { -		dst = (byte*)screen->pixels + old_mouse_y*320 + old_mouse_x; -		bak = old_backup; - -		for (y=0; y<old_mouse_h; y++,bak+=BAK_WIDTH,dst+=320) { -			if ( (uint)(old_mouse_y + y) < 200) { -				for (x=0; x<old_mouse_w; x++) { -					if ((uint)(old_mouse_x + x) < 320) { -						dst[x] = bak[x]; +	} else { +		if (has_mouse) { +			dst = (byte *)screen->pixels + old_mouse_y * 320 + old_mouse_x; +			bak = old_backup; + +			for (y = 0; y < old_mouse_h; y++, bak += BAK_WIDTH, dst += 320) { +				if ((uint) (old_mouse_y + y) < 200) { +					for (x = 0; x < old_mouse_w; x++) { +						if ((uint) (old_mouse_x + x) < 320) { +							dst[x] = bak[x]; +						}  					}  				}  			}  		} -	} -	if (visible) { -		ydraw += current_shake_pos; -		 -		dst = (byte*)screen->pixels + ydraw*320 + xdraw; -		bak = old_backup; - -		for (y=0; y<h; y++,dst+=320,bak+=BAK_WIDTH,buf+=w) { -			if ((uint)(ydraw+y)<200) { -				for (x=0; x<w; x++) { -					if ((uint)(xdraw+x)<320) { -						bak[x] = dst[x]; -						if ((color=buf[x])!=0xFF) { -							dst[x] = color; +		if (visible) { +			ydraw += current_shake_pos; + +			dst = (byte *)screen->pixels + ydraw * 320 + xdraw; +			bak = old_backup; + +			for (y = 0; y < h; y++, dst += 320, bak += BAK_WIDTH, buf += w) { +				if ((uint) (ydraw + y) < 200) { +					for (x = 0; x < w; x++) { +						if ((uint) (xdraw + x) < 320) { +							bak[x] = dst[x]; +							if ((color = buf[x]) != 0xFF) { +								dst[x] = color; +							}  						}  					}  				}  			}  		}  	} -	}  	SDL_UnlockSurface(screen); @@ -666,8 +687,9 @@ void drawMouse(Scumm *s, int xdraw, int ydraw, int w, int h, byte *buf, bool vis  	}  } -void fill_sound(void *userdata, Uint8 *stream, int len) { -	scumm->mixWaves((int16*)stream, len>>1); +void fill_sound(void *userdata, Uint8 * stream, int len) +{ +	scumm->mixWaves((int16 *) stream, len >> 1);  }  static int cd_track, cd_num_loops = 0, cd_start_frame, cd_end_frame; @@ -677,7 +699,9 @@ static int cd_track, cd_num_loops = 0, cd_start_frame, cd_end_frame;  // time the track is expected to be finished.  static Uint32 cd_end_time, cd_stop_time, cd_next_second; -void cd_play(Scumm *s, int track, int num_loops, int start_frame, int end_frame) { +void cd_play(Scumm *s, int track, int num_loops, int start_frame, +						 int end_frame) +{  	scumm->_vars[14] = 0; @@ -692,120 +716,130 @@ void cd_play(Scumm *s, int track, int num_loops, int start_frame, int end_frame)  #endif  	// warning("cd_play(%d,%d,%d,%d)", track, num_loops, start_frame, end_frame); -	if (!cdrom) return; +	if (!cdrom) +		return;  	cd_track = track;  	cd_num_loops = num_loops;  	cd_start_frame = start_frame; -	 +  	SDL_CDStatus(cdrom);  	SDL_CDPlayTracks(cdrom, track, start_frame, 0, end_frame);  	cd_end_frame = end_frame;  	cd_stop_time = 0; -	cd_end_time = SDL_GetTicks() + -		cdrom->track[track].length * 1000 / CD_FPS; +	cd_end_time = SDL_GetTicks() + cdrom->track[track].length * 1000 / CD_FPS;  }  // Schedule the music to be stopped after 1/10 sec, unless another  // track is started in the meantime.  (On my machine, stopping and  // then restarting the CD takes a few seconds.) -void cd_stop() { +void cd_stop() +{  	cd_stop_time = SDL_GetTicks() + 100;  	cd_num_loops = 0;  } -int cd_is_running() { -	if (!cdrom) return 0; +int cd_is_running() +{ +	if (!cdrom) +		return 0;  	return (cd_num_loops != 0 && (SDL_GetTicks() < cd_end_time || -				      SDL_CDStatus(cdrom) != CD_STOPPED)); +																SDL_CDStatus(cdrom) != CD_STOPPED));  } -static void cd_shutdown() { -	if (!cdrom) return; +static void cd_shutdown() +{ +	if (!cdrom) +		return;  	if (cd_num_loops != 0)  		SDL_CDStop(cdrom);  } -void cd_music_loop() { -	if (!cdrom) return; +void cd_music_loop() +{ +	if (!cdrom) +		return;  /*	if (SDL_GetTicks() >= cd_next_second) {  	/	printf("%d started at %d, fps\n", scumm._vars[14], cd_start_frame, CD_FPS);  		//scumm._vars[14]++; //varmusicflag		  		cd_next_second = SDL_GetTicks() + 1;  	} */ -	 +  	if (cd_stop_time != 0 && SDL_GetTicks() >= cd_stop_time) {  		SDL_CDStop(cdrom);  		cd_num_loops = 0;  		cd_stop_time = 0;  		return;  	} -	 +  	if (cd_num_loops == 0 || SDL_GetTicks() < cd_end_time)  		return; -	 +  	if (cd_num_loops != 1 && SDL_CDStatus(cdrom) != CD_STOPPED) {  		// Wait another second for it to be done  		cd_end_time += 1000;  		return;  	} -	 +  	if (cd_num_loops > 0)  		cd_num_loops--;  	if (cd_num_loops != 0) {  		SDL_CDPlayTracks(cdrom, cd_track, cd_start_frame, 0, cd_end_frame); -		cd_end_time = SDL_GetTicks() + cdrom->track[cd_track].length * 1000 / CD_FPS; +		cd_end_time = +			SDL_GetTicks() + cdrom->track[cd_track].length * 1000 / CD_FPS;  	}  } -int music_thread(Scumm *s) { +int music_thread(Scumm *s) +{  	int old_time, cur_time;  	old_time = SDL_GetTicks();  	do {  		SDL_Delay(10); -		 +  		cur_time = SDL_GetTicks();  		while (old_time < cur_time) {  			old_time += 10; -			sound.on_timer();	 +			sound.on_timer();  		}  	} while (1); -	 +  	return 0;  } -void initGraphics(Scumm *s, bool fullScreen, unsigned int scaleFactor) { +void initGraphics(Scumm *s, bool fullScreen, unsigned int scaleFactor) +{  	SDL_AudioSpec desired;  	scale = scaleFactor; -	if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO)==-1) { +	if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) == -1) {  		error("Could not initialize SDL: %s.\n", SDL_GetError()); -	    exit(1); +		exit(1);  	} -    if (SDL_InitSubSystem(SDL_INIT_CDROM) == -1) -        cdrom = NULL; -    else { -        cdrom = SDL_CDOpen(s->_cdrom); +	if (SDL_InitSubSystem(SDL_INIT_CDROM) == -1) +		cdrom = NULL; +	else { +		cdrom = SDL_CDOpen(s->_cdrom);  		/* Did if open? Check if cdrom is NULL */ -		if(!cdrom){ +		if (!cdrom) {  			warning("Couldn't open drive: %s\n", SDL_GetError());  		}  	}  	/* Clean up on exit */ - 	atexit(SDL_Quit); +	atexit(SDL_Quit);  	atexit(cd_shutdown);  	atexit(resetCursor);  	char buf[512], *gameName; -	 +  	sprintf(buf, "ScummVM - %s", gameName = detector.getGameName());  	free(gameName); @@ -817,7 +851,7 @@ void initGraphics(Scumm *s, bool fullScreen, unsigned int scaleFactor) {  	SDL_OpenAudio(&desired, NULL);  	SDL_PauseAudio(0); -	SDL_WM_SetCaption(buf,buf); +	SDL_WM_SetCaption(buf, buf);  	SDL_ShowCursor(SDL_DISABLE);  	if (!snd_driv.wave_based()) { @@ -826,51 +860,59 @@ void initGraphics(Scumm *s, bool fullScreen, unsigned int scaleFactor) {  	}  	if (s->_videoMode == VIDEO_SCALE) { -				screen = SDL_SetVideoMode(320 * scale, 200 * scale, 8, fullScreen ? (SDL_SWSURFACE | SDL_FULLSCREEN) : (SDL_SWSURFACE | SDL_DOUBLEBUF)); +		screen = +			SDL_SetVideoMode(320 * scale, 200 * scale, 8, +											 fullScreen ? (SDL_SWSURFACE | SDL_FULLSCREEN) +											 : (SDL_SWSURFACE | SDL_DOUBLEBUF));  	} else { -		uint16 *tmp_screen = (uint16*)calloc(320*202 + 8,sizeof(uint16)); +		uint16 *tmp_screen = (uint16 *)calloc(320 * 202 + 8, sizeof(uint16));  		Init_2xSaI(565);  		screen = SDL_CreateRGBSurface(SDL_SWSURFACE, 320, 200, 8, 0, 0, 0, 0); -		sdl_hwscreen = SDL_SetVideoMode(640, 400, 16, fullScreen ? (SDL_SWSURFACE | SDL_FULLSCREEN) : (SDL_SWSURFACE | SDL_DOUBLEBUF)); -		sdl_tmpscreen = SDL_CreateRGBSurfaceFrom(tmp_screen + 320 + 4, 320, 200, 16, 320*2, 0,0,0,0); +		sdl_hwscreen = +			SDL_SetVideoMode(640, 400, 16, +											 fullScreen ? (SDL_SWSURFACE | SDL_FULLSCREEN) +											 : (SDL_SWSURFACE | SDL_DOUBLEBUF)); +		sdl_tmpscreen = +			SDL_CreateRGBSurfaceFrom(tmp_screen + 320 + 4, 320, 200, 16, 320 * 2, 0, +															 0, 0, 0);  		if (sdl_tmpscreen == NULL)  			error("sdl_tmpscreen failed");  		scale = 1;  	} -// SDL_SWSURFACE 	0x00000000	/* Surface is in system memory */ -// SDL_HWSURFACE 	0x00000001	/* Surface is in video memory */ -// SDL_ASYNCBLIT 	0x00000004	/* Use asynchronous blits if possible */ -// SDL_ANYFORMAT 	0x10000000	/* Allow any video depth/pixel-format */ -// SDL_HWPALETTE 	0x20000000	/* Surface has exclusive palette */ -// SDL_DOUBLEBUF 	0x40000000	/* Set up double-buffered video mode */ -// SDL_FULLSCREEN	0x80000000	/* Surface is a full screen display */ -// SDL_OPENGL    	0x00000002	/* Create an OpenGL rendering context */ -// SDL_OPENGLBLIT	0x0000000A	/* Create an OpenGL rendering context and use it for blitting */ -// SDL_RESIZABLE 	0x00000010	/* This video mode may be resized */ -// SDL_NOFRAME   	0x00000020	/* No window caption or edge frame */ - - - -	printf("%d %d, %d %d, %d %d %d, %d %d %d %d %d\n",  -		sizeof(int8), sizeof(uint8), -		sizeof(int16), sizeof(uint16), -		sizeof(int32), sizeof(uint32), -		sizeof(void*), -		sizeof(Box), sizeof(MouseCursor),sizeof(CodeHeader), -		sizeof(ImageHeader), -		sizeof(Scumm) -	); +// SDL_SWSURFACE  0x00000000  /* Surface is in system memory */ +// SDL_HWSURFACE  0x00000001  /* Surface is in video memory */ +// SDL_ASYNCBLIT  0x00000004  /* Use asynchronous blits if possible */ +// SDL_ANYFORMAT  0x10000000  /* Allow any video depth/pixel-format */ +// SDL_HWPALETTE  0x20000000  /* Surface has exclusive palette */ +// SDL_DOUBLEBUF  0x40000000  /* Set up double-buffered video mode */ +// SDL_FULLSCREEN 0x80000000  /* Surface is a full screen display */ +// SDL_OPENGL     0x00000002  /* Create an OpenGL rendering context */ +// SDL_OPENGLBLIT 0x0000000A  /* Create an OpenGL rendering context and use it for blitting */ +// SDL_RESIZABLE  0x00000010  /* This video mode may be resized */ +// SDL_NOFRAME    0x00000020  /* No window caption or edge frame */ + + + +	printf("%d %d, %d %d, %d %d %d, %d %d %d %d %d\n", +				 sizeof(int8), sizeof(uint8), +				 sizeof(int16), sizeof(uint16), +				 sizeof(int32), sizeof(uint32), +				 sizeof(void *), +				 sizeof(Box), sizeof(MouseCursor), sizeof(CodeHeader), +				 sizeof(ImageHeader), sizeof(Scumm) +		);  } -void setWindowName(Scumm *s) { -  char buf[512], *gameName; -   -  sprintf(buf, "ScummVM - %s", gameName = detector.getGameName()); -  free(gameName); -  SDL_WM_SetCaption(buf,buf); +void setWindowName(Scumm *s) +{ +	char buf[512], *gameName; + +	sprintf(buf, "ScummVM - %s", gameName = detector.getGameName()); +	free(gameName); +	SDL_WM_SetCaption(buf, buf);  }  #if !defined(__APPLE__) @@ -878,7 +920,8 @@ void setWindowName(Scumm *s) {  #endif -void launcherLoop() { +void launcherLoop() +{  	int last_time, new_time;  	int delta = 0;  	last_time = SDL_GetTicks(); @@ -896,59 +939,57 @@ void launcherLoop() {  			delta = 5;  		} else  			error("gui closed!"); -	} while(1); +	} while (1);  }; -int main(int argc, char* argv[]) { -#if defined(MACOS)  +int main(int argc, char *argv[]) +{ +#if defined(MACOS)  	/* support for config file on macos */ -	 +  	char *argitem;  	char *argstr;  	FILE *argf; -	 -	if (( argf = fopen("configuration.macos", "r")) == NULL) { + +	if ((argf = fopen("configuration.macos", "r")) == NULL) {  		error("Can't open configuration file.\n");  		exit(1);  	} -	 -	argc=0; -	argstr = (char *) malloc(64); + +	argc = 0; +	argstr = (char *)malloc(64);  	argstr = fgets(argstr, 64, argf); -	if ((argitem = strchr(argstr, '\n'))!=NULL) +	if ((argitem = strchr(argstr, '\n')) != NULL)  		*argitem = '\0'; -	 +  	argitem = strtok(argstr, " "); -	 -	while (argitem!=NULL) { -		argv = (char**) realloc(argv, (argc+1)*8); -		argv[argc] = (char *) malloc(64); + +	while (argitem != NULL) { +		argv = (char **)realloc(argv, (argc + 1) * 8); +		argv[argc] = (char *)malloc(64);  		strcpy(argv[argc], argitem); -		argc++;	 -		 +		argc++; +  		argitem = strtok(NULL, " ");  	} -	 +  	free(argstr);  	fclose(argf); -	 +  #endif -	if(detector.detectMain(argc, argv)) -		return(-1); +	if (detector.detectMain(argc, argv)) +		return (-1); -	if(detector._features & GF_OLD256) +	if (detector._features & GF_OLD256)  		scumm = new Scumm_v3; -	else -	if(detector._features & GF_SMALL_HEADER) // this force loomCD as v4 +	else if (detector._features & GF_SMALL_HEADER)	// this force loomCD as v4  		scumm = new Scumm_v4; -	else -	if(detector._features & GF_AFTER_V7) +	else if (detector._features & GF_AFTER_V7)  		scumm = new Scumm_v7; -	else -	if(detector._features & GF_AFTER_V6) // this force SamnmaxCD as v6 +	else if (detector._features & GF_AFTER_V6)	// this force SamnmaxCD as v6  		scumm = new Scumm_v6;  	else  		scumm = new Scumm_v5; @@ -970,7 +1011,7 @@ int main(int argc, char* argv[]) {  	scumm->_midi_driver = detector._midi_driver;  	scumm->_cdrom = detector._cdrom; -	scumm->delta=6; +	scumm->delta = 6;  	if (detector._restore) {  		scumm->_saveLoadSlot = 0;  		scumm->_saveLoadFlag = 2; @@ -978,135 +1019,144 @@ int main(int argc, char* argv[]) {  	}  	scumm->_gui = &gui; -//	gui.init(scumm); +//  gui.init(scumm);  	sound.initialize(scumm, &snd_driv); -     -	scumm->delta=0; + +	scumm->delta = 0;  	scumm->_system = &_system; -	_system.last_time=0; +	_system.last_time = 0;  	scumm->launch(); -//	scumm->runScript(1,0,0,&scumm->_bootParam); -	 -//	scumm->scummMain(argc, argv); // Todo: need to change that as well -	 -	gui.init(scumm);	/* Reinit GUI after loading a game */ +//  scumm->runScript(1,0,0,&scumm->_bootParam); + +//  scumm->scummMain(argc, argv); // Todo: need to change that as well + +	gui.init(scumm);							/* Reinit GUI after loading a game */  	scumm->mainRun();  	return 0;  }  /************ ENDER: Temporary debug code for boxen **************/ -int hlineColor (SDL_Surface *dst, Sint16 x1, Sint16 x2, Sint16 y, Uint32 color) { - Sint16 left,right,top,bottom; - Uint8 *pixel,*pixellast; - int dx; - int pixx, pixy; - Sint16 w; - Sint16 xtmp; - int result=-1; - Uint8 *colorptr; -  - /* Get clipping boundary */ - left = dst->clip_rect.x; - right = dst->clip_rect.x+dst->clip_rect.w-1; - top = dst->clip_rect.y; - bottom = dst->clip_rect.y+dst->clip_rect.h-1; - - /* Swap x1, x2 if required */ - if (x1>x2) { -  xtmp=x1; x1=x2; x2=xtmp; - } - - /* Visible */ - if ((x1>right) || (x2<left) || (y<top) || (y>bottom)) { -  return(0); - } -  - /* Clip x */ - if (x1<left) {  -  x1=left; - }  - if (x2>right) { -  x2=right; - } -   - /* Calculate width */ - w=x2-x1; -  - /* Sanity check on width */ - if (w<0) { -  return(0); - } - -  /* Setup color */ -  colorptr=(Uint8 *)&color; -  if (SDL_BYTEORDER == SDL_BIG_ENDIAN) { -   color=SDL_MapRGBA(dst->format, colorptr[0], colorptr[1], colorptr[2], colorptr[3]); -  } else { -   color=SDL_MapRGBA(dst->format, colorptr[3], colorptr[2], colorptr[1], colorptr[0]); -  } -   -  /* Lock surface */ -  SDL_LockSurface(dst); - -  /* More variable setup */ -  dx=w; -  pixx = dst->format->BytesPerPixel; -  pixy = dst->pitch; -  pixel = ((Uint8*)dst->pixels) + pixx * (int)x1 + pixy * (int)y; -   -  /* Draw */ -  switch(dst->format->BytesPerPixel) { -   case 1: -    memset (pixel, color, dx); -    break; -   case 2: -    pixellast = pixel + dx + dx; -    for (; pixel<=pixellast; pixel += pixx) { -     *(Uint16*)pixel = color; -    } -    break; -   case 3: -    pixellast = pixel + dx + dx + dx; -    for (; pixel<=pixellast; pixel += pixx) { -     if (SDL_BYTEORDER == SDL_BIG_ENDIAN) { -      pixel[0] = (color >> 16) & 0xff; -      pixel[1] = (color >> 8) & 0xff; -      pixel[2] = color & 0xff; -     } else { -      pixel[0] = color & 0xff; -      pixel[1] = (color >> 8) & 0xff; -      pixel[2] = (color >> 16) & 0xff; -     } -    } -    break; -   default: /* case 4*/ -    dx = dx + dx; -    pixellast = pixel + dx + dx; -    for (; pixel<=pixellast; pixel += pixx) { -     *(Uint32*)pixel = color; -    } -    break; -  } - -  /* Unlock surface */ -  SDL_UnlockSurface(dst); - -  /* Set result code */ -  result=0; - - return(result); +int hlineColor(SDL_Surface * dst, Sint16 x1, Sint16 x2, Sint16 y, +							 Uint32 color) +{ +	Sint16 left, right, top, bottom; +	Uint8 *pixel, *pixellast; +	int dx; +	int pixx, pixy; +	Sint16 w; +	Sint16 xtmp; +	int result = -1; +	Uint8 *colorptr; + +	/* Get clipping boundary */ +	left = dst->clip_rect.x; +	right = dst->clip_rect.x + dst->clip_rect.w - 1; +	top = dst->clip_rect.y; +	bottom = dst->clip_rect.y + dst->clip_rect.h - 1; + +	/* Swap x1, x2 if required */ +	if (x1 > x2) { +		xtmp = x1; +		x1 = x2; +		x2 = xtmp; +	} + +	/* Visible */ +	if ((x1 > right) || (x2 < left) || (y < top) || (y > bottom)) { +		return (0); +	} + +	/* Clip x */ +	if (x1 < left) { +		x1 = left; +	} +	if (x2 > right) { +		x2 = right; +	} + +	/* Calculate width */ +	w = x2 - x1; + +	/* Sanity check on width */ +	if (w < 0) { +		return (0); +	} + +	/* Setup color */ +	colorptr = (Uint8 *) & color; +	if (SDL_BYTEORDER == SDL_BIG_ENDIAN) { +		color = +			SDL_MapRGBA(dst->format, colorptr[0], colorptr[1], colorptr[2], +									colorptr[3]); +	} else { +		color = +			SDL_MapRGBA(dst->format, colorptr[3], colorptr[2], colorptr[1], +									colorptr[0]); +	} + +	/* Lock surface */ +	SDL_LockSurface(dst); + +	/* More variable setup */ +	dx = w; +	pixx = dst->format->BytesPerPixel; +	pixy = dst->pitch; +	pixel = ((Uint8 *) dst->pixels) + pixx * (int)x1 + pixy * (int)y; + +	/* Draw */ +	switch (dst->format->BytesPerPixel) { +	case 1: +		memset(pixel, color, dx); +		break; +	case 2: +		pixellast = pixel + dx + dx; +		for (; pixel <= pixellast; pixel += pixx) { +			*(Uint16 *) pixel = color; +		} +		break; +	case 3: +		pixellast = pixel + dx + dx + dx; +		for (; pixel <= pixellast; pixel += pixx) { +			if (SDL_BYTEORDER == SDL_BIG_ENDIAN) { +				pixel[0] = (color >> 16) & 0xff; +				pixel[1] = (color >> 8) & 0xff; +				pixel[2] = color & 0xff; +			} else { +				pixel[0] = color & 0xff; +				pixel[1] = (color >> 8) & 0xff; +				pixel[2] = (color >> 16) & 0xff; +			} +		} +		break; +	default:											/* case 4 */ +		dx = dx + dx; +		pixellast = pixel + dx + dx; +		for (; pixel <= pixellast; pixel += pixx) { +			*(Uint32 *) pixel = color; +		} +		break; +	} + +	/* Unlock surface */ +	SDL_UnlockSurface(dst); + +	/* Set result code */ +	result = 0; + +	return (result);  }  int gfxPrimitivesCompareInt(const void *a, const void *b); -static int *gfxPrimitivesPolyInts=NULL; -static int gfxPrimitivesPolyAllocated=0; +static int *gfxPrimitivesPolyInts = NULL; +static int gfxPrimitivesPolyAllocated = 0; -int filledPolygonColor (SDL_Surface *dst, Sint16 *vx, Sint16 *vy, int n, int color) +int filledPolygonColor(SDL_Surface * dst, Sint16 * vx, Sint16 * vy, int n, +											 int color)  {  	int result;  	int i; @@ -1116,44 +1166,45 @@ int filledPolygonColor (SDL_Surface *dst, Sint16 *vx, Sint16 *vy, int n, int col  	int x2, y2;  	int ind1, ind2;  	int ints; -	 +  	/* Sanity check */ -	if (n<3) { -	 return -1; +	if (n < 3) { +		return -1;  	} -	 +  	/* Allocate temp array, only grow array */  	if (!gfxPrimitivesPolyAllocated) { -	 gfxPrimitivesPolyInts = (int *) malloc(sizeof(int) * n); -	 gfxPrimitivesPolyAllocated = n; +		gfxPrimitivesPolyInts = (int *)malloc(sizeof(int) * n); +		gfxPrimitivesPolyAllocated = n;  	} else { -	 if (gfxPrimitivesPolyAllocated<n) { - 	  gfxPrimitivesPolyInts = (int *) realloc(gfxPrimitivesPolyInts, sizeof(int) * n); -	  gfxPrimitivesPolyAllocated = n; -	 } -	}		 +		if (gfxPrimitivesPolyAllocated < n) { +			gfxPrimitivesPolyInts = +				(int *)realloc(gfxPrimitivesPolyInts, sizeof(int) * n); +			gfxPrimitivesPolyAllocated = n; +		} +	}  	/* Determine Y maxima */  	miny = vy[0];  	maxy = vy[0]; -	for (i=1; (i < n); i++) { +	for (i = 1; (i < n); i++) {  		if (vy[i] < miny) { -		 miny = vy[i]; +			miny = vy[i];  		} else if (vy[i] > maxy) { -		 maxy = vy[i]; +			maxy = vy[i];  		}  	} -	 +  	/* Draw, scanning y */ -	result=0; -	for (y=miny; (y <= maxy); y++) { +	result = 0; +	for (y = miny; (y <= maxy); y++) {  		ints = 0; -		for (i=0; (i < n); i++) { +		for (i = 0; (i < n); i++) {  			if (!i) { -				ind1 = n-1; +				ind1 = n - 1;  				ind2 = 0;  			} else { -				ind1 = i-1; +				ind1 = i - 1;  				ind2 = i;  			}  			y1 = vy[ind1]; @@ -1170,39 +1221,46 @@ int filledPolygonColor (SDL_Surface *dst, Sint16 *vx, Sint16 *vy, int n, int col  				continue;  			}  			if ((y >= y1) && (y < y2)) { -				gfxPrimitivesPolyInts[ints++] = (y-y1) * (x2-x1) / (y2-y1) + x1; +				gfxPrimitivesPolyInts[ints++] = (y - y1) * (x2 - x1) / (y2 - y1) + x1;  			} else if ((y == maxy) && (y > y1) && (y <= y2)) { -				gfxPrimitivesPolyInts[ints++] = (y-y1) * (x2-x1) / (y2-y1) + x1; +				gfxPrimitivesPolyInts[ints++] = (y - y1) * (x2 - x1) / (y2 - y1) + x1;  			}  		}  		qsort(gfxPrimitivesPolyInts, ints, sizeof(int), gfxPrimitivesCompareInt); -		for (i=0; (i<ints); i+=2) { -			result |= hlineColor(dst, gfxPrimitivesPolyInts[i], gfxPrimitivesPolyInts[i+1], y, color); +		for (i = 0; (i < ints); i += 2) { +			result |= +				hlineColor(dst, gfxPrimitivesPolyInts[i], +									 gfxPrimitivesPolyInts[i + 1], y, color);  		}  	} -	 - return (result); + +	return (result);  }  int gfxPrimitivesCompareInt(const void *a, const void *b)  { - return (*(const int *)a) - (*(const int *)b); +	return (*(const int *)a) - (*(const int *)b);  } -void BoxTest(int num) { +void BoxTest(int num) +{  	BoxCoords box;  	Sint16 rx1[4], ry1[4]; -	 -	scumm->getBoxCoordinates(num,  &box); -	rx1[0] = box.ul.x*2; ry1[0] = box.ul.y*2+32; -	rx1[1] = box.ur.x*2; ry1[1] = box.ur.y*2+32; -	rx1[2] = box.ll.x*2; ry1[2] = box.ll.y*2+32; -	rx1[3] = box.lr.x*2; ry1[3] = box.lr.y*2+32; -	 + +	scumm->getBoxCoordinates(num, &box); +	rx1[0] = box.ul.x * 2; +	ry1[0] = box.ul.y * 2 + 32; +	rx1[1] = box.ur.x * 2; +	ry1[1] = box.ur.y * 2 + 32; +	rx1[2] = box.ll.x * 2; +	ry1[2] = box.ll.y * 2 + 32; +	rx1[3] = box.lr.x * 2; +	ry1[3] = box.lr.y * 2 + 32; +  	filledPolygonColor(screen, &rx1[0], &ry1[0], 4, 255); -	SDL_UpdateRect(screen, 0,0,0,0); -	 +	SDL_UpdateRect(screen, 0, 0, 0, 0); +  } @@ -1216,120 +1274,113 @@ static uint32 qlowpixelMask = 0x18631863;  static uint32 redblueMask = 0xF81F;  static uint32 greenMask = 0x7E0; -int Init_2xSaI (uint32 BitFormat) +int Init_2xSaI(uint32 BitFormat)  { -    if (BitFormat == 565) -    { -	colorMask = 0xF7DEF7DE; -	lowPixelMask = 0x08210821; -	qcolorMask = 0xE79CE79C; -	qlowpixelMask = 0x18631863; -	redblueMask = 0xF81F; -	greenMask = 0x7E0; -    } -    else if (BitFormat == 555) -    { -	colorMask = 0x7BDE7BDE; -	lowPixelMask = 0x04210421; -	qcolorMask = 0x739C739C; -	qlowpixelMask = 0x0C630C63; -	redblueMask = 0x7C1F; -	greenMask = 0x3E0; -    } -    else -    { -	return 0; -    } +	if (BitFormat == 565) { +		colorMask = 0xF7DEF7DE; +		lowPixelMask = 0x08210821; +		qcolorMask = 0xE79CE79C; +		qlowpixelMask = 0x18631863; +		redblueMask = 0xF81F; +		greenMask = 0x7E0; +	} else if (BitFormat == 555) { +		colorMask = 0x7BDE7BDE; +		lowPixelMask = 0x04210421; +		qcolorMask = 0x739C739C; +		qlowpixelMask = 0x0C630C63; +		redblueMask = 0x7C1F; +		greenMask = 0x3E0; +	} else { +		return 0; +	} -    return 1; +	return 1;  } -static inline int GetResult1 (uint32 A, uint32 B, uint32 C, uint32 D, -			      uint32 /* E */) +static inline int GetResult1(uint32 A, uint32 B, uint32 C, uint32 D, +														 uint32 /* E */ )  { -    int x = 0; -    int y = 0; -    int r = 0; - -    if (A == C) -	x += 1; -    else if (B == C) -	y += 1; -    if (A == D) -	x += 1; -    else if (B == D) -	y += 1; -    if (x <= 1) -	r += 1; -    if (y <= 1) -	r -= 1; -    return r; +	int x = 0; +	int y = 0; +	int r = 0; + +	if (A == C) +		x += 1; +	else if (B == C) +		y += 1; +	if (A == D) +		x += 1; +	else if (B == D) +		y += 1; +	if (x <= 1) +		r += 1; +	if (y <= 1) +		r -= 1; +	return r;  } -static inline int GetResult2 (uint32 A, uint32 B, uint32 C, uint32 D, -			      uint32 /* E */) +static inline int GetResult2(uint32 A, uint32 B, uint32 C, uint32 D, +														 uint32 /* E */ )  { -    int x = 0; -    int y = 0; -    int r = 0; - -    if (A == C) -	x += 1; -    else if (B == C) -	y += 1; -    if (A == D) -	x += 1; -    else if (B == D) -	y += 1; -    if (x <= 1) -	r -= 1; -    if (y <= 1) -	r += 1; -    return r; +	int x = 0; +	int y = 0; +	int r = 0; + +	if (A == C) +		x += 1; +	else if (B == C) +		y += 1; +	if (A == D) +		x += 1; +	else if (B == D) +		y += 1; +	if (x <= 1) +		r -= 1; +	if (y <= 1) +		r += 1; +	return r;  } -static inline int GetResult (uint32 A, uint32 B, uint32 C, uint32 D) +static inline int GetResult(uint32 A, uint32 B, uint32 C, uint32 D)  { -    int x = 0; -    int y = 0; -    int r = 0; - -    if (A == C) -	x += 1; -    else if (B == C) -	y += 1; -    if (A == D) -	x += 1; -    else if (B == D) -	y += 1; -    if (x <= 1) -	r += 1; -    if (y <= 1) -	r -= 1; -    return r; +	int x = 0; +	int y = 0; +	int r = 0; + +	if (A == C) +		x += 1; +	else if (B == C) +		y += 1; +	if (A == D) +		x += 1; +	else if (B == D) +		y += 1; +	if (x <= 1) +		r += 1; +	if (y <= 1) +		r -= 1; +	return r;  } -static inline uint32 INTERPOLATE (uint32 A, uint32 B) +static inline uint32 INTERPOLATE(uint32 A, uint32 B)  { -    if (A != B) -    { -	return (((A & colorMask) >> 1) + ((B & colorMask) >> 1) + -		(A & B & lowPixelMask)); -    } -    else -	return A; +	if (A != B) { +		return (((A & colorMask) >> 1) + ((B & colorMask) >> 1) + +						(A & B & lowPixelMask)); +	} else +		return A;  } -static inline uint32 Q_INTERPOLATE (uint32 A, uint32 B, uint32 C, uint32 D) +static inline uint32 Q_INTERPOLATE(uint32 A, uint32 B, uint32 C, uint32 D)  { -    register uint32 x = ((A & qcolorMask) >> 2) + -	((B & qcolorMask) >> 2) + -	((C & qcolorMask) >> 2) + ((D & qcolorMask) >> 2); -    register uint32 y = (A & qlowpixelMask) + -	(B & qlowpixelMask) + (C & qlowpixelMask) + (D & qlowpixelMask); - -    y = (y >> 2) & qlowpixelMask; -    return x + y; +	register uint32 x = ((A & qcolorMask) >> 2) + +		((B & qcolorMask) >> 2) + +		((C & qcolorMask) >> 2) + ((D & qcolorMask) >> 2); +	register uint32 y = (A & qlowpixelMask) + +		(B & qlowpixelMask) + (C & qlowpixelMask) + (D & qlowpixelMask); + +	y = (y >> 2) & qlowpixelMask; +	return x + y;  }  #define BLUE_MASK565 0x001F001F @@ -1340,676 +1391,569 @@ static inline uint32 Q_INTERPOLATE (uint32 A, uint32 B, uint32 C, uint32 D)  #define RED_MASK555 0x7C007C00  #define GREEN_MASK555 0x03E003E0 -void Super2xSaI (uint8 *srcPtr, uint32 srcPitch, -		 uint8 *deltaPtr, uint8 *dstPtr, uint32 dstPitch, -		 int width, int height) +void Super2xSaI(uint8 *srcPtr, uint32 srcPitch, +								uint8 *deltaPtr, uint8 *dstPtr, uint32 dstPitch, +								int width, int height)  { -    uint16 *bP; -    uint8  *dP; -    uint32 inc_bP; +	uint16 *bP; +	uint8 *dP; +	uint32 inc_bP; -    { -        uint32 Nextline = srcPitch >> 1; -	inc_bP = 1; - -	while (height--)  	{ -	    bP = (uint16 *) srcPtr; -	    dP = (uint8 *) dstPtr; +		uint32 Nextline = srcPitch >> 1; +		inc_bP = 1; + +		while (height--) { +			bP = (uint16 *)srcPtr; +			dP = (uint8 *)dstPtr; -	    for (uint32 finish = width; finish; finish -= inc_bP) -	    { -		uint32 color4, color5, color6; -		uint32 color1, color2, color3; -		uint32 colorA0, colorA1, colorA2, colorA3, -		    colorB0, colorB1, colorB2, colorB3, colorS1, colorS2; -		uint32 product1a, product1b, product2a, product2b; +			for (uint32 finish = width; finish; finish -= inc_bP) { +				uint32 color4, color5, color6; +				uint32 color1, color2, color3; +				uint32 colorA0, colorA1, colorA2, colorA3, +					colorB0, colorB1, colorB2, colorB3, colorS1, colorS2; +				uint32 product1a, product1b, product2a, product2b;  //---------------------------------------    B1 B2  //                                         4  5  6 S2  //                                         1  2  3 S1  //                                           A1 A2 -		colorB0 = *(bP - Nextline - 1); -		colorB1 = *(bP - Nextline); -		colorB2 = *(bP - Nextline + 1); -		colorB3 = *(bP - Nextline + 2); +				colorB0 = *(bP - Nextline - 1); +				colorB1 = *(bP - Nextline); +				colorB2 = *(bP - Nextline + 1); +				colorB3 = *(bP - Nextline + 2); -		color4 = *(bP - 1); -		color5 = *(bP); -		color6 = *(bP + 1); -		colorS2 = *(bP + 2); +				color4 = *(bP - 1); +				color5 = *(bP); +				color6 = *(bP + 1); +				colorS2 = *(bP + 2); -		color1 = *(bP + Nextline - 1); -		color2 = *(bP + Nextline); -		color3 = *(bP + Nextline + 1); -		colorS1 = *(bP + Nextline + 2); +				color1 = *(bP + Nextline - 1); +				color2 = *(bP + Nextline); +				color3 = *(bP + Nextline + 1); +				colorS1 = *(bP + Nextline + 2); -		colorA0 = *(bP + Nextline + Nextline - 1); -		colorA1 = *(bP + Nextline + Nextline); -		colorA2 = *(bP + Nextline + Nextline + 1); -		colorA3 = *(bP + Nextline + Nextline + 2); +				colorA0 = *(bP + Nextline + Nextline - 1); +				colorA1 = *(bP + Nextline + Nextline); +				colorA2 = *(bP + Nextline + Nextline + 1); +				colorA3 = *(bP + Nextline + Nextline + 2);  //-------------------------------------- -		if (color2 == color6 && color5 != color3) -		{ -		    product2b = product1b = color2; -		} -		else if (color5 == color3 && color2 != color6) -		{ -		    product2b = product1b = color5; -		} -		else if (color5 == color3 && color2 == color6) -		{ -		    register int r = 0; - -		    r += GetResult (color6, color5, color1, colorA1); -		    r += GetResult (color6, color5, color4, colorB1); -		    r += GetResult (color6, color5, colorA2, colorS1); -		    r += GetResult (color6, color5, colorB2, colorS2); - -		    if (r > 0) -			product2b = product1b = color6; -		    else if (r < 0) -			product2b = product1b = color5; -		    else -		    { -			product2b = product1b = INTERPOLATE (color5, color6); -		    } -		} -		else -		{ -		    if (color6 == color3 && color3 == colorA1 -			    && color2 != colorA2 && color3 != colorA0) -			product2b = -			    Q_INTERPOLATE (color3, color3, color3, color2); -		    else if (color5 == color2 && color2 == colorA2 -			     && colorA1 != color3 && color2 != colorA3) -			product2b = -			    Q_INTERPOLATE (color2, color2, color2, color3); -		    else -			product2b = INTERPOLATE (color2, color3); - -		    if (color6 == color3 && color6 == colorB1 -			    && color5 != colorB2 && color6 != colorB0) -			product1b = -			    Q_INTERPOLATE (color6, color6, color6, color5); -		    else if (color5 == color2 && color5 == colorB2 -			     && colorB1 != color6 && color5 != colorB3) -			product1b = -			    Q_INTERPOLATE (color6, color5, color5, color5); -		    else -			product1b = INTERPOLATE (color5, color6); -		} +				if (color2 == color6 && color5 != color3) { +					product2b = product1b = color2; +				} else if (color5 == color3 && color2 != color6) { +					product2b = product1b = color5; +				} else if (color5 == color3 && color2 == color6) { +					register int r = 0; + +					r += GetResult(color6, color5, color1, colorA1); +					r += GetResult(color6, color5, color4, colorB1); +					r += GetResult(color6, color5, colorA2, colorS1); +					r += GetResult(color6, color5, colorB2, colorS2); + +					if (r > 0) +						product2b = product1b = color6; +					else if (r < 0) +						product2b = product1b = color5; +					else { +						product2b = product1b = INTERPOLATE(color5, color6); +					} +				} else { +					if (color6 == color3 && color3 == colorA1 +							&& color2 != colorA2 && color3 != colorA0) +						product2b = Q_INTERPOLATE(color3, color3, color3, color2); +					else if (color5 == color2 && color2 == colorA2 +									 && colorA1 != color3 && color2 != colorA3) +						product2b = Q_INTERPOLATE(color2, color2, color2, color3); +					else +						product2b = INTERPOLATE(color2, color3); + +					if (color6 == color3 && color6 == colorB1 +							&& color5 != colorB2 && color6 != colorB0) +						product1b = Q_INTERPOLATE(color6, color6, color6, color5); +					else if (color5 == color2 && color5 == colorB2 +									 && colorB1 != color6 && color5 != colorB3) +						product1b = Q_INTERPOLATE(color6, color5, color5, color5); +					else +						product1b = INTERPOLATE(color5, color6); +				} -		if (color5 == color3 && color2 != color6 && color4 == color5 -			&& color5 != colorA2) -		    product2a = INTERPOLATE (color2, color5); -		else -		    if (color5 == color1 && color6 == color5 -			&& color4 != color2 && color5 != colorA0) -		    product2a = INTERPOLATE (color2, color5); -		else -		    product2a = color2; - -		if (color2 == color6 && color5 != color3 && color1 == color2 -			&& color2 != colorB2) -		    product1a = INTERPOLATE (color2, color5); -		else -		    if (color4 == color2 && color3 == color2 -			&& color1 != color5 && color2 != colorB0) -		    product1a = INTERPOLATE (color2, color5); -		else -		    product1a = color5; - -		product1a = product1a | (product1b << 16); -		product2a = product2a | (product2b << 16); - -		*((uint32 *) dP) = product1a; -		*((uint32 *) (dP + dstPitch)) = product2a; - -		bP += inc_bP; -		dP += sizeof (uint32); -	    }			// end of for ( finish= width etc..) - -	    srcPtr   += srcPitch; -	    dstPtr   += dstPitch * 2; -	    deltaPtr += srcPitch; -	}			// while (height--) -    } +				if (color5 == color3 && color2 != color6 && color4 == color5 +						&& color5 != colorA2) +					product2a = INTERPOLATE(color2, color5); +				else +					if (color5 == color1 && color6 == color5 +							&& color4 != color2 && color5 != colorA0) +					product2a = INTERPOLATE(color2, color5); +				else +					product2a = color2; + +				if (color2 == color6 && color5 != color3 && color1 == color2 +						&& color2 != colorB2) +					product1a = INTERPOLATE(color2, color5); +				else +					if (color4 == color2 && color3 == color2 +							&& color1 != color5 && color2 != colorB0) +					product1a = INTERPOLATE(color2, color5); +				else +					product1a = color5; + +				product1a = product1a | (product1b << 16); +				product2a = product2a | (product2b << 16); + +				*((uint32 *)dP) = product1a; +				*((uint32 *)(dP + dstPitch)) = product2a; + +				bP += inc_bP; +				dP += sizeof(uint32); +			}													// end of for ( finish= width etc..) + +			srcPtr += srcPitch; +			dstPtr += dstPitch * 2; +			deltaPtr += srcPitch; +		}														// while (height--) +	}  } -void SuperEagle (uint8 *srcPtr, uint32 srcPitch, uint8 *deltaPtr,  -		 uint8 *dstPtr, uint32 dstPitch, int width, int height) +void SuperEagle(uint8 *srcPtr, uint32 srcPitch, uint8 *deltaPtr, +								uint8 *dstPtr, uint32 dstPitch, int width, int height)  { -    uint8  *dP; -    uint16 *bP; -    uint32 inc_bP; +	uint8 *dP; +	uint16 *bP; +	uint32 inc_bP; -    { -	inc_bP = 1; +	{ +		inc_bP = 1; + +		uint32 Nextline = srcPitch >> 1; + +		while (height--) { +			bP = (uint16 *)srcPtr; +			dP = dstPtr; +			for (uint32 finish = width; finish; finish -= inc_bP) { +				uint32 color4, color5, color6; +				uint32 color1, color2, color3; +				uint32 colorA1, colorA2, colorB1, colorB2, colorS1, colorS2; +				uint32 product1a, product1b, product2a, product2b; + +				colorB1 = *(bP - Nextline); +				colorB2 = *(bP - Nextline + 1); + +				color4 = *(bP - 1); +				color5 = *(bP); +				color6 = *(bP + 1); +				colorS2 = *(bP + 2); + +				color1 = *(bP + Nextline - 1); +				color2 = *(bP + Nextline); +				color3 = *(bP + Nextline + 1); +				colorS1 = *(bP + Nextline + 2); + +				colorA1 = *(bP + Nextline + Nextline); +				colorA2 = *(bP + Nextline + Nextline + 1); + +				// -------------------------------------- +				if (color2 == color6 && color5 != color3) { +					product1b = product2a = color2; +					if ((color1 == color2) || (color6 == colorB2)) { +						product1a = INTERPOLATE(color2, color5); +						product1a = INTERPOLATE(color2, product1a); +					} else { +						product1a = INTERPOLATE(color5, color6); +					} -	uint32 Nextline = srcPitch >> 1; +					if ((color6 == colorS2) || (color2 == colorA1)) { +						product2b = INTERPOLATE(color2, color3); +						product2b = INTERPOLATE(color2, product2b); +					} else { +						product2b = INTERPOLATE(color2, color3); +					} +				} else if (color5 == color3 && color2 != color6) { +					product2b = product1a = color5; + +					if ((colorB1 == color5) || (color3 == colorS1)) { +						product1b = INTERPOLATE(color5, color6); +						product1b = INTERPOLATE(color5, product1b); +					} else { +						product1b = INTERPOLATE(color5, color6); +					} -	while (height--) -	{ -	    bP = (uint16 *) srcPtr; -	    dP = dstPtr; -	    for (uint32 finish = width; finish; finish -= inc_bP) -	    { -		uint32 color4, color5, color6; -		uint32 color1, color2, color3; -		uint32 colorA1, colorA2, colorB1, colorB2, colorS1, colorS2; -		uint32 product1a, product1b, product2a, product2b; - -		colorB1 = *(bP - Nextline); -		colorB2 = *(bP - Nextline + 1); - -		color4 = *(bP - 1); -		color5 = *(bP); -		color6 = *(bP + 1); -		colorS2 = *(bP + 2); - -		color1 = *(bP + Nextline - 1); -		color2 = *(bP + Nextline); -		color3 = *(bP + Nextline + 1); -		colorS1 = *(bP + Nextline + 2); - -		colorA1 = *(bP + Nextline + Nextline); -		colorA2 = *(bP + Nextline + Nextline + 1); - -		// -------------------------------------- -		if (color2 == color6 && color5 != color3) -		{ -		    product1b = product2a = color2; -		    if ((color1 == color2) || (color6 == colorB2)) -		    { -			product1a = INTERPOLATE (color2, color5); -			product1a = INTERPOLATE (color2, product1a); -		    } -		    else -		    { -			product1a = INTERPOLATE (color5, color6); -		    } - -		    if ((color6 == colorS2) || (color2 == colorA1)) -		    { -			product2b = INTERPOLATE (color2, color3); -			product2b = INTERPOLATE (color2, product2b); -		    } -		    else -		    { -			product2b = INTERPOLATE (color2, color3); -		    } -		} -		else if (color5 == color3 && color2 != color6) -		{ -		    product2b = product1a = color5; - -		    if ((colorB1 == color5) || (color3 == colorS1)) -		    { -			product1b = INTERPOLATE (color5, color6); -			product1b = INTERPOLATE (color5, product1b); -		    } -		    else -		    { -			product1b = INTERPOLATE (color5, color6); -		    } - -		    if ((color3 == colorA2) || (color4 == color5)) -		    { -			product2a = INTERPOLATE (color5, color2); -			product2a = INTERPOLATE (color5, product2a); -		    } -		    else -		    { -			product2a = INTERPOLATE (color2, color3); -		    } +					if ((color3 == colorA2) || (color4 == color5)) { +						product2a = INTERPOLATE(color5, color2); +						product2a = INTERPOLATE(color5, product2a); +					} else { +						product2a = INTERPOLATE(color2, color3); +					} -		} -		else if (color5 == color3 && color2 == color6) -		{ -		    register int r = 0; - -		    r += GetResult (color6, color5, color1, colorA1); -		    r += GetResult (color6, color5, color4, colorB1); -		    r += GetResult (color6, color5, colorA2, colorS1); -		    r += GetResult (color6, color5, colorB2, colorS2); - -		    if (r > 0) -		    { -			product1b = product2a = color2; -			product1a = product2b = INTERPOLATE (color5, color6); -		    } -		    else if (r < 0) -		    { -			product2b = product1a = color5; -			product1b = product2a = INTERPOLATE (color5, color6); -		    } -		    else -		    { -			product2b = product1a = color5; -			product1b = product2a = color2; -		    } -		} -		else -		{ -		    product2b = product1a = INTERPOLATE (color2, color6); -		    product2b = -			Q_INTERPOLATE (color3, color3, color3, product2b); -		    product1a = -			Q_INTERPOLATE (color5, color5, color5, product1a); - -		    product2a = product1b = INTERPOLATE (color5, color3); -		    product2a = Q_INTERPOLATE (color2, color2, color2, product2a); -		    product1b = Q_INTERPOLATE (color6, color6, color6, product1b); -		} -		product1a = product1a | (product1b << 16); -		product2a = product2a | (product2b << 16); +				} else if (color5 == color3 && color2 == color6) { +					register int r = 0; + +					r += GetResult(color6, color5, color1, colorA1); +					r += GetResult(color6, color5, color4, colorB1); +					r += GetResult(color6, color5, colorA2, colorS1); +					r += GetResult(color6, color5, colorB2, colorS2); + +					if (r > 0) { +						product1b = product2a = color2; +						product1a = product2b = INTERPOLATE(color5, color6); +					} else if (r < 0) { +						product2b = product1a = color5; +						product1b = product2a = INTERPOLATE(color5, color6); +					} else { +						product2b = product1a = color5; +						product1b = product2a = color2; +					} +				} else { +					product2b = product1a = INTERPOLATE(color2, color6); +					product2b = Q_INTERPOLATE(color3, color3, color3, product2b); +					product1a = Q_INTERPOLATE(color5, color5, color5, product1a); + +					product2a = product1b = INTERPOLATE(color5, color3); +					product2a = Q_INTERPOLATE(color2, color2, color2, product2a); +					product1b = Q_INTERPOLATE(color6, color6, color6, product1b); +				} +				product1a = product1a | (product1b << 16); +				product2a = product2a | (product2b << 16); -		*((uint32 *) dP) = product1a; -		*((uint32 *) (dP + dstPitch)) = product2a; +				*((uint32 *)dP) = product1a; +				*((uint32 *)(dP + dstPitch)) = product2a; -		bP += inc_bP; -		dP += sizeof (uint32); -	    }			// end of for ( finish= width etc..) +				bP += inc_bP; +				dP += sizeof(uint32); +			}													// end of for ( finish= width etc..) -	    srcPtr += srcPitch; -	    dstPtr += dstPitch * 2; -	    deltaPtr += srcPitch; -	}			// endof: while (height--) -    } +			srcPtr += srcPitch; +			dstPtr += dstPitch * 2; +			deltaPtr += srcPitch; +		}														// endof: while (height--) +	}  } -void _2xSaI (uint8 *srcPtr, uint32 srcPitch, uint8 *deltaPtr, -	     uint8 *dstPtr, uint32 dstPitch, int width, int height) +void _2xSaI(uint8 *srcPtr, uint32 srcPitch, uint8 *deltaPtr, +						uint8 *dstPtr, uint32 dstPitch, int width, int height)  { -    uint8  *dP; -    uint16 *bP; -    uint32 inc_bP; +	uint8 *dP; +	uint16 *bP; +	uint32 inc_bP; -    { -	inc_bP = 1; - -	uint32 Nextline = srcPitch >> 1; - -	while (height--)  	{ -	    bP = (uint16 *) srcPtr; -	    dP = dstPtr; +		inc_bP = 1; + +		uint32 Nextline = srcPitch >> 1; -	    for (uint32 finish = width; finish; finish -= inc_bP) -	    { +		while (height--) { +			bP = (uint16 *)srcPtr; +			dP = dstPtr; -		register uint32 colorA, colorB; -		uint32 colorC, colorD, -		    colorE, colorF, colorG, colorH, -		    colorI, colorJ, colorK, colorL, +			for (uint32 finish = width; finish; finish -= inc_bP) { -		    colorM, colorN, colorO, colorP; -		uint32 product, product1, product2; +				register uint32 colorA, colorB; +				uint32 colorC, colorD, +					colorE, colorF, colorG, colorH, +					colorI, colorJ, colorK, colorL, colorM, colorN, colorO, colorP; +				uint32 product, product1, product2;  //---------------------------------------  // Map of the pixels:                    I|E F|J  //                                       G|A B|K  //                                       H|C D|L  //                                       M|N O|P -		colorI = *(bP - Nextline - 1); -		colorE = *(bP - Nextline); -		colorF = *(bP - Nextline + 1); -		colorJ = *(bP - Nextline + 2); - -		colorG = *(bP - 1); -		colorA = *(bP); -		colorB = *(bP + 1); -		colorK = *(bP + 2); - -		colorH = *(bP + Nextline - 1); -		colorC = *(bP + Nextline); -		colorD = *(bP + Nextline + 1); -		colorL = *(bP + Nextline + 2); - -		colorM = *(bP + Nextline + Nextline - 1); -		colorN = *(bP + Nextline + Nextline); -		colorO = *(bP + Nextline + Nextline + 1); -		colorP = *(bP + Nextline + Nextline + 2); - -		if ((colorA == colorD) && (colorB != colorC)) -		{ -		    if (((colorA == colorE) && (colorB == colorL)) || -			    ((colorA == colorC) && (colorA == colorF) -			     && (colorB != colorE) && (colorB == colorJ))) -		    { -			product = colorA; -		    } -		    else -		    { -			product = INTERPOLATE (colorA, colorB); -		    } - -		    if (((colorA == colorG) && (colorC == colorO)) || -			    ((colorA == colorB) && (colorA == colorH) -			     && (colorG != colorC) && (colorC == colorM))) -		    { -			product1 = colorA; -		    } -		    else -		    { -			product1 = INTERPOLATE (colorA, colorC); -		    } -		    product2 = colorA; -		} -		else if ((colorB == colorC) && (colorA != colorD)) -		{ -		    if (((colorB == colorF) && (colorA == colorH)) || -			    ((colorB == colorE) && (colorB == colorD) -			     && (colorA != colorF) && (colorA == colorI))) -		    { -			product = colorB; -		    } -		    else -		    { -			product = INTERPOLATE (colorA, colorB); -		    } - -		    if (((colorC == colorH) && (colorA == colorF)) || -			    ((colorC == colorG) && (colorC == colorD) -			     && (colorA != colorH) && (colorA == colorI))) -		    { -			product1 = colorC; -		    } -		    else -		    { -			product1 = INTERPOLATE (colorA, colorC); -		    } -		    product2 = colorB; -		} -		else if ((colorA == colorD) && (colorB == colorC)) -		{ -		    if (colorA == colorB) -		    { -			product = colorA; -			product1 = colorA; -			product2 = colorA; -		    } -		    else -		    { -			register int r = 0; - -			product1 = INTERPOLATE (colorA, colorC); -			product = INTERPOLATE (colorA, colorB); - -			r += -                            GetResult1 (colorA, colorB, colorG, colorE, -					colorI); -			r += -			    GetResult2 (colorB, colorA, colorK, colorF, -					colorJ); -			r += -			    GetResult2 (colorB, colorA, colorH, colorN, -					colorM); -			r += -			    GetResult1 (colorA, colorB, colorL, colorO, -					colorP); - -			if (r > 0) -			    product2 = colorA; -			else if (r < 0) -			    product2 = colorB; -			else -			{ -			    product2 = -				Q_INTERPOLATE (colorA, colorB, colorC, -					       colorD); -			} -		    } -		} -		else -		{ -		    product2 = Q_INTERPOLATE (colorA, colorB, colorC, colorD); - -		    if ((colorA == colorC) && (colorA == colorF) -			    && (colorB != colorE) && (colorB == colorJ)) -		    { -			product = colorA; -		    } -		    else -			if ((colorB == colorE) && (colorB == colorD) -			    && (colorA != colorF) && (colorA == colorI)) -		    { -			product = colorB; -		    } -		    else -		    { -			product = INTERPOLATE (colorA, colorB); -		    } - -		    if ((colorA == colorB) && (colorA == colorH) -			    && (colorG != colorC) && (colorC == colorM)) -		    { -			product1 = colorA; -		    } -		    else -			if ((colorC == colorG) && (colorC == colorD) -			    && (colorA != colorH) && (colorA == colorI)) -		    { -			product1 = colorC; -		    } -		    else -		    { -			product1 = INTERPOLATE (colorA, colorC); -		    } -		} +				colorI = *(bP - Nextline - 1); +				colorE = *(bP - Nextline); +				colorF = *(bP - Nextline + 1); +				colorJ = *(bP - Nextline + 2); + +				colorG = *(bP - 1); +				colorA = *(bP); +				colorB = *(bP + 1); +				colorK = *(bP + 2); + +				colorH = *(bP + Nextline - 1); +				colorC = *(bP + Nextline); +				colorD = *(bP + Nextline + 1); +				colorL = *(bP + Nextline + 2); + +				colorM = *(bP + Nextline + Nextline - 1); +				colorN = *(bP + Nextline + Nextline); +				colorO = *(bP + Nextline + Nextline + 1); +				colorP = *(bP + Nextline + Nextline + 2); + +				if ((colorA == colorD) && (colorB != colorC)) { +					if (((colorA == colorE) && (colorB == colorL)) || +							((colorA == colorC) && (colorA == colorF) +							 && (colorB != colorE) && (colorB == colorJ))) { +						product = colorA; +					} else { +						product = INTERPOLATE(colorA, colorB); +					} -		product = colorA | (product << 16); -		product1 = product1 | (product2 << 16); -		*((int32 *) dP) = product; -		*((uint32 *) (dP + dstPitch)) = product1; +					if (((colorA == colorG) && (colorC == colorO)) || +							((colorA == colorB) && (colorA == colorH) +							 && (colorG != colorC) && (colorC == colorM))) { +						product1 = colorA; +					} else { +						product1 = INTERPOLATE(colorA, colorC); +					} +					product2 = colorA; +				} else if ((colorB == colorC) && (colorA != colorD)) { +					if (((colorB == colorF) && (colorA == colorH)) || +							((colorB == colorE) && (colorB == colorD) +							 && (colorA != colorF) && (colorA == colorI))) { +						product = colorB; +					} else { +						product = INTERPOLATE(colorA, colorB); +					} -		bP += inc_bP; -		dP += sizeof (uint32); -	    }			// end of for ( finish= width etc..) +					if (((colorC == colorH) && (colorA == colorF)) || +							((colorC == colorG) && (colorC == colorD) +							 && (colorA != colorH) && (colorA == colorI))) { +						product1 = colorC; +					} else { +						product1 = INTERPOLATE(colorA, colorC); +					} +					product2 = colorB; +				} else if ((colorA == colorD) && (colorB == colorC)) { +					if (colorA == colorB) { +						product = colorA; +						product1 = colorA; +						product2 = colorA; +					} else { +						register int r = 0; + +						product1 = INTERPOLATE(colorA, colorC); +						product = INTERPOLATE(colorA, colorB); + +						r += GetResult1(colorA, colorB, colorG, colorE, colorI); +						r += GetResult2(colorB, colorA, colorK, colorF, colorJ); +						r += GetResult2(colorB, colorA, colorH, colorN, colorM); +						r += GetResult1(colorA, colorB, colorL, colorO, colorP); + +						if (r > 0) +							product2 = colorA; +						else if (r < 0) +							product2 = colorB; +						else { +							product2 = Q_INTERPOLATE(colorA, colorB, colorC, colorD); +						} +					} +				} else { +					product2 = Q_INTERPOLATE(colorA, colorB, colorC, colorD); + +					if ((colorA == colorC) && (colorA == colorF) +							&& (colorB != colorE) && (colorB == colorJ)) { +						product = colorA; +					} else if ((colorB == colorE) && (colorB == colorD) +										 && (colorA != colorF) && (colorA == colorI)) { +						product = colorB; +					} else { +						product = INTERPOLATE(colorA, colorB); +					} + +					if ((colorA == colorB) && (colorA == colorH) +							&& (colorG != colorC) && (colorC == colorM)) { +						product1 = colorA; +					} else if ((colorC == colorG) && (colorC == colorD) +										 && (colorA != colorH) && (colorA == colorI)) { +						product1 = colorC; +					} else { +						product1 = INTERPOLATE(colorA, colorC); +					} +				} -	    srcPtr += srcPitch; -	    dstPtr += dstPitch * 2; -	    deltaPtr += srcPitch; -	}			// endof: while (height--) -    } +				product = colorA | (product << 16); +				product1 = product1 | (product2 << 16); +				*((int32 *) dP) = product; +				*((uint32 *)(dP + dstPitch)) = product1; + +				bP += inc_bP; +				dP += sizeof(uint32); +			}													// end of for ( finish= width etc..) + +			srcPtr += srcPitch; +			dstPtr += dstPitch * 2; +			deltaPtr += srcPitch; +		}														// endof: while (height--) +	}  } -static uint32 Bilinear (uint32 A, uint32 B, uint32 x) +static uint32 Bilinear(uint32 A, uint32 B, uint32 x)  { -    unsigned long areaA, areaB; -    unsigned long result; +	unsigned long areaA, areaB; +	unsigned long result; -    if (A == B) -	return A; +	if (A == B) +		return A; -    areaB = (x >> 11) & 0x1f;	// reduce 16 bit fraction to 5 bits -    areaA = 0x20 - areaB; +	areaB = (x >> 11) & 0x1f;			// reduce 16 bit fraction to 5 bits +	areaA = 0x20 - areaB; -    A = (A & redblueMask) | ((A & greenMask) << 16); -    B = (B & redblueMask) | ((B & greenMask) << 16); +	A = (A & redblueMask) | ((A & greenMask) << 16); +	B = (B & redblueMask) | ((B & greenMask) << 16); -    result = ((areaA * A) + (areaB * B)) >> 5; +	result = ((areaA * A) + (areaB * B)) >> 5; -    return (result & redblueMask) | ((result >> 16) & greenMask); +	return (result & redblueMask) | ((result >> 16) & greenMask);  } -static uint32 Bilinear4 (uint32 A, uint32 B, uint32 C, uint32 D, uint32 x, -			 uint32 y) +static uint32 Bilinear4(uint32 A, uint32 B, uint32 C, uint32 D, uint32 x, +												uint32 y)  { -    unsigned long areaA, areaB, areaC, areaD; -    unsigned long result, xy; +	unsigned long areaA, areaB, areaC, areaD; +	unsigned long result, xy; -    x = (x >> 11) & 0x1f; -    y = (y >> 11) & 0x1f; -    xy = (x * y) >> 5; +	x = (x >> 11) & 0x1f; +	y = (y >> 11) & 0x1f; +	xy = (x * y) >> 5; -    A = (A & redblueMask) | ((A & greenMask) << 16); -    B = (B & redblueMask) | ((B & greenMask) << 16); -    C = (C & redblueMask) | ((C & greenMask) << 16); -    D = (D & redblueMask) | ((D & greenMask) << 16); +	A = (A & redblueMask) | ((A & greenMask) << 16); +	B = (B & redblueMask) | ((B & greenMask) << 16); +	C = (C & redblueMask) | ((C & greenMask) << 16); +	D = (D & redblueMask) | ((D & greenMask) << 16); -    areaA = 0x20 + xy - x - y; -    areaB = x - xy; -    areaC = y - xy; -    areaD = xy; +	areaA = 0x20 + xy - x - y; +	areaB = x - xy; +	areaC = y - xy; +	areaD = xy; -    result = ((areaA * A) + (areaB * B) + (areaC * C) + (areaD * D)) >> 5; +	result = ((areaA * A) + (areaB * B) + (areaC * C) + (areaD * D)) >> 5; -    return (result & redblueMask) | ((result >> 16) & greenMask); +	return (result & redblueMask) | ((result >> 16) & greenMask);  } -void Scale_2xSaI (uint8 *srcPtr, uint32 srcPitch, uint8 * /* deltaPtr */, -		  uint8 *dstPtr, uint32 dstPitch,  -		  uint32 dstWidth, uint32 dstHeight, int width, int height) +void Scale_2xSaI(uint8 *srcPtr, uint32 srcPitch, uint8 * /* deltaPtr */ , +								 uint8 *dstPtr, uint32 dstPitch, +								 uint32 dstWidth, uint32 dstHeight, int width, int height)  { -    uint8  *dP; -    uint16 *bP; - -    uint32 w; -    uint32 h; -    uint32 dw; -    uint32 dh; -    uint32 hfinish; -    uint32 wfinish; +	uint8 *dP; +	uint16 *bP; -    uint32 Nextline = srcPitch >> 1; +	uint32 w; +	uint32 h; +	uint32 dw; +	uint32 dh; +	uint32 hfinish; +	uint32 wfinish; -    wfinish = (width - 1) << 16;	// convert to fixed point -    dw = wfinish / (dstWidth - 1); -    hfinish = (height - 1) << 16;	// convert to fixed point -    dh = hfinish / (dstHeight - 1); - -    for (h = 0; h < hfinish; h += dh) -    { -	uint32 y1, y2; - -	y1 = h & 0xffff;	// fraction part of fixed point -	bP = (uint16 *) (srcPtr + ((h >> 16) * srcPitch)); -	dP = dstPtr; -	y2 = 0x10000 - y1; - -	w = 0; +	uint32 Nextline = srcPitch >> 1; -	for (; w < wfinish;) -	{ -	    uint32 A, B, C, D; -	    uint32 E, F, G, H; -	    uint32 I, J, K, L; -	    uint32 x1, x2, a1, f1, f2; -	    uint32 position, product1; - -	    position = w >> 16; -	    A = bP[position];	// current pixel -	    B = bP[position + 1];	// next pixel -	    C = bP[position + Nextline]; -	    D = bP[position + Nextline + 1]; -	    E = bP[position - Nextline]; -	    F = bP[position - Nextline + 1]; -	    G = bP[position - 1]; -	    H = bP[position + Nextline - 1]; -	    I = bP[position + 2]; -	    J = bP[position + Nextline + 2]; -	    K = bP[position + Nextline + Nextline]; -	    L = bP[position + Nextline + Nextline + 1]; - -	    x1 = w & 0xffff;	// fraction part of fixed point -	    x2 = 0x10000 - x1; - -	    /*0*/  -	    if (A == B && C == D && A == C) -		product1 = A; -	    else -	    /*1*/  -	    if (A == D && B != C) -	    { -		f1 = (x1 >> 1) + (0x10000 >> 2); -		f2 = (y1 >> 1) + (0x10000 >> 2); -		if (y1 <= f1 && A == J && A != E)	// close to B -		{ -		    a1 = f1 - y1; -		    product1 = Bilinear (A, B, a1); -		} -		else if (y1 >= f1 && A == G && A != L)	// close to C -		{ -		    a1 = y1 - f1; -		    product1 = Bilinear (A, C, a1); -		} -		else if (x1 >= f2 && A == E && A != J)	// close to B -		{ -		    a1 = x1 - f2; -		    product1 = Bilinear (A, B, a1); -		} -		else if (x1 <= f2 && A == L && A != G)	// close to C -		{ -		    a1 = f2 - x1; -		    product1 = Bilinear (A, C, a1); -		} -		else if (y1 >= x1)	// close to C -		{ -		    a1 = y1 - x1; -		    product1 = Bilinear (A, C, a1); -		} -		else if (y1 <= x1)	// close to B -		{ -		    a1 = x1 - y1; -		    product1 = Bilinear (A, B, a1); -		} -	    } -	    else -	    /*2*/  -	    if (B == C && A != D) -	    { -		f1 = (x1 >> 1) + (0x10000 >> 2); -		f2 = (y1 >> 1) + (0x10000 >> 2); -		if (y2 >= f1 && B == H && B != F)	// close to A -		{ -		    a1 = y2 - f1; -		    product1 = Bilinear (B, A, a1); -		} -		else if (y2 <= f1 && B == I && B != K)	// close to D -		{ -		    a1 = f1 - y2; -		    product1 = Bilinear (B, D, a1); -		} -		else if (x2 >= f2 && B == F && B != H)	// close to A -		{ -		    a1 = x2 - f2; -		    product1 = Bilinear (B, A, a1); -		} -		else if (x2 <= f2 && B == K && B != I)	// close to D -		{ -		    a1 = f2 - x2; -		    product1 = Bilinear (B, D, a1); -		} -		else if (y2 >= x1)	// close to A -		{ -		    a1 = y2 - x1; -		    product1 = Bilinear (B, A, a1); -		} -		else if (y2 <= x1)	// close to D -		{ -		    a1 = x1 - y2; -		    product1 = Bilinear (B, D, a1); -		} -	    } -	    /*3*/ -	    else -	    { -		product1 = Bilinear4 (A, B, C, D, x1, y1); -	    } +	wfinish = (width - 1) << 16;	// convert to fixed point +	dw = wfinish / (dstWidth - 1); +	hfinish = (height - 1) << 16;	// convert to fixed point +	dh = hfinish / (dstHeight - 1); + +	for (h = 0; h < hfinish; h += dh) { +		uint32 y1, y2; + +		y1 = h & 0xffff;						// fraction part of fixed point +		bP = (uint16 *)(srcPtr + ((h >> 16) * srcPitch)); +		dP = dstPtr; +		y2 = 0x10000 - y1; + +		w = 0; + +		for (; w < wfinish;) { +			uint32 A, B, C, D; +			uint32 E, F, G, H; +			uint32 I, J, K, L; +			uint32 x1, x2, a1, f1, f2; +			uint32 position, product1; + +			position = w >> 16; +			A = bP[position];					// current pixel +			B = bP[position + 1];			// next pixel +			C = bP[position + Nextline]; +			D = bP[position + Nextline + 1]; +			E = bP[position - Nextline]; +			F = bP[position - Nextline + 1]; +			G = bP[position - 1]; +			H = bP[position + Nextline - 1]; +			I = bP[position + 2]; +			J = bP[position + Nextline + 2]; +			K = bP[position + Nextline + Nextline]; +			L = bP[position + Nextline + Nextline + 1]; + +			x1 = w & 0xffff;					// fraction part of fixed point +			x2 = 0x10000 - x1; + +			/*0 */ +			if (A == B && C == D && A == C) +				product1 = A; +			else +				/*1 */ +			if (A == D && B != C) { +				f1 = (x1 >> 1) + (0x10000 >> 2); +				f2 = (y1 >> 1) + (0x10000 >> 2); +				if (y1 <= f1 && A == J && A != E)	// close to B +				{ +					a1 = f1 - y1; +					product1 = Bilinear(A, B, a1); +				} else if (y1 >= f1 && A == G && A != L)	// close to C +				{ +					a1 = y1 - f1; +					product1 = Bilinear(A, C, a1); +				} else if (x1 >= f2 && A == E && A != J)	// close to B +				{ +					a1 = x1 - f2; +					product1 = Bilinear(A, B, a1); +				} else if (x1 <= f2 && A == L && A != G)	// close to C +				{ +					a1 = f2 - x1; +					product1 = Bilinear(A, C, a1); +				} else if (y1 >= x1)		// close to C +				{ +					a1 = y1 - x1; +					product1 = Bilinear(A, C, a1); +				} else if (y1 <= x1)		// close to B +				{ +					a1 = x1 - y1; +					product1 = Bilinear(A, B, a1); +				} +			} else +				/*2 */ +			if (B == C && A != D) { +				f1 = (x1 >> 1) + (0x10000 >> 2); +				f2 = (y1 >> 1) + (0x10000 >> 2); +				if (y2 >= f1 && B == H && B != F)	// close to A +				{ +					a1 = y2 - f1; +					product1 = Bilinear(B, A, a1); +				} else if (y2 <= f1 && B == I && B != K)	// close to D +				{ +					a1 = f1 - y2; +					product1 = Bilinear(B, D, a1); +				} else if (x2 >= f2 && B == F && B != H)	// close to A +				{ +					a1 = x2 - f2; +					product1 = Bilinear(B, A, a1); +				} else if (x2 <= f2 && B == K && B != I)	// close to D +				{ +					a1 = f2 - x2; +					product1 = Bilinear(B, D, a1); +				} else if (y2 >= x1)		// close to A +				{ +					a1 = y2 - x1; +					product1 = Bilinear(B, A, a1); +				} else if (y2 <= x1)		// close to D +				{ +					a1 = x1 - y2; +					product1 = Bilinear(B, D, a1); +				} +			} +			/*3 */ +			else { +				product1 = Bilinear4(A, B, C, D, x1, y1); +			}  //end First Pixel -	    *(uint32 *) dP = product1; -	    dP += 2; -	    w += dw; +			*(uint32 *)dP = product1; +			dP += 2; +			w += dw; +		} +		dstPtr += dstPitch;  	} -	dstPtr += dstPitch; -    }  } @@ -2017,21 +1961,21 @@ void Scale_2xSaI (uint8 *srcPtr, uint32 srcPitch, uint8 * /* deltaPtr */,  int OSystem::waitTick(int delta)  { -	do -	{ +	do {  		updateScreen(scumm);  		new_time = SDL_GetTicks();  		waitForTimer(scumm, delta * 15 + last_time - new_time);  		last_time = SDL_GetTicks(); -		if (gui._active) {  +		if (gui._active) {  			gui.loop(scumm);  			delta = 5;  		} -	}while(gui._active); +	} while (gui._active); -	return(delta); +	return (delta);  } -OSystem::OSystem(){ +OSystem::OSystem() +{  	last_time = SDL_GetTicks();  } | 
