void Draw (SDL_Surface *screen, int start)
{
	SDL_Surface *picture, *picture_again;
	char *bmpfile;

	/* --------- 8 bit test -------- */

	start=0;

	if (start<=6) {

		/* Message */
		fprintf(stderr,"Loading 8bit image\n");

		/* Load the image into a surface */
		bmpfile = "sample8.bmp";
		fprintf(stderr, "Loading picture: %s\n", bmpfile);
		picture = SDL_LoadBMP(bmpfile);
		if ( picture == NULL ) {
			fprintf(stderr, "Couldn't load %s: %s\n", bmpfile, SDL_GetError());
			return;
		}

		sprintf(messageText, "1.  rotozoom: Rotating and zooming");
		RotatePicture(screen,picture,ROTATE_ON,FLIP_OFF,SMOOTHING_OFF);

		sprintf(messageText, "2.  rotozoom: Just zooming (angle=0)");
		RotatePicture(screen,picture,ROTATE_OFF,FLIP_OFF,SMOOTHING_OFF);

		sprintf(messageText, "3.  zoom: Just zooming\n");
		ZoomPicture(screen,picture,SMOOTHING_OFF);

		sprintf(messageText, "4.  rotozoom: Rotating and zooming, interpolation on but unused");
		RotatePicture(screen,picture,ROTATE_ON,FLIP_OFF,SMOOTHING_ON);

		sprintf(messageText, "5.  rotozoom: Just zooming (angle=0), interpolation on but unused");
		RotatePicture(screen,picture,ROTATE_OFF,FLIP_OFF,SMOOTHING_ON);

		sprintf(messageText, "6.  zoom: Just zooming, interpolation on but unused");
		ZoomPicture(screen,picture,SMOOTHING_ON);

		/* Free the picture */
		SDL_FreeSurface(picture);

	}

	/* -------- 24 bit test --------- */


	if (start<=12) {

		/* Message */
		fprintf(stderr,"Loading 24bit image\n");

		/* Load the image into a surface */
		bmpfile = "sample24.bmp";
		fprintf(stderr, "Loading picture: %s\n", bmpfile);
		picture = SDL_LoadBMP(bmpfile);
		if ( picture == NULL ) {
			fprintf(stderr, "Couldn't load %s: %s\n", bmpfile, SDL_GetError());
			return;
		}

		sprintf(messageText, "7.  rotozoom: Rotating and zooming, no interpolation");
		RotatePicture(screen,picture,ROTATE_ON,FLIP_OFF,SMOOTHING_OFF);

		sprintf(messageText, "8.  rotozoom: Just zooming (angle=0), no interpolation");
		RotatePicture(screen,picture,ROTATE_ON,FLIP_OFF,SMOOTHING_OFF);

		sprintf(messageText, "9.  zoom: Just zooming, no interpolation");
		ZoomPicture(screen,picture,SMOOTHING_OFF);


		sprintf(messageText, "10. rotozoom: Rotating and zooming, with interpolation");
		RotatePicture(screen,picture,ROTATE_ON,FLIP_OFF,SMOOTHING_ON);

		sprintf(messageText, "11. rotozoom: Just zooming (angle=0), with interpolation\n");
		RotatePicture(screen,picture,ROTATE_OFF,FLIP_OFF,SMOOTHING_ON);

		sprintf(messageText, "12. zoom: Just zooming, with interpolation");
		ZoomPicture(screen,picture,SMOOTHING_ON);

		/* Free the picture */
		SDL_FreeSurface(picture);

	}

	/* -------- 32 bit test --------- */

	if (start<=16) {

		/* Message */
		fprintf(stderr,"Loading 24bit image\n");

		/* Load the image into a surface */
		bmpfile = "sample24.bmp";
		fprintf(stderr, "Loading picture: %s\n", bmpfile);
		picture = SDL_LoadBMP(bmpfile);
		if ( picture == NULL ) {
			fprintf(stderr, "Couldn't load %s: %s\n", bmpfile, SDL_GetError());
			return;
		}

		/* New source surface is 32bit with defined RGBA ordering */
		/* Much faster to do this once rather than the routine on the fly */
		fprintf(stderr,"Converting 24bit image into 32bit RGBA surface ...\n");
		picture_again = SDL_CreateRGBSurface(SDL_SWSURFACE, picture->w, picture->h, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000);
		SDL_BlitSurface(picture,NULL,picture_again,NULL);

		/* Message */
		sprintf(messageText, "13. Rotating and zooming, with interpolation");
		RotatePicture(screen,picture_again,ROTATE_ON,FLIP_OFF,SMOOTHING_ON);

		/* Message */
		sprintf(messageText, "14. Just zooming (angle=0), with interpolation");
		RotatePicture(screen,picture_again,ROTATE_OFF,FLIP_OFF,SMOOTHING_ON);

		SDL_FreeSurface(picture_again);

		/* New source surface is 32bit with defined ABGR ordering */
		/* Much faster to do this once rather than the routine on the fly */
		fprintf(stderr,"Converting 24bit image into 32bit ABGR surface ...\n");
		picture_again = SDL_CreateRGBSurface(SDL_SWSURFACE, picture->w, picture->h, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000);
		SDL_BlitSurface(picture,NULL,picture_again,NULL);

		/* Message */
		sprintf(messageText, "15. Rotating and zooming, with interpolation");
		RotatePicture(screen,picture_again,ROTATE_ON,FLIP_OFF,SMOOTHING_ON);

		/* Message */
		sprintf(messageText, "16. Just zooming (angle=0), with interpolation");
		RotatePicture(screen,picture_again,ROTATE_OFF,FLIP_OFF,SMOOTHING_ON);

		SDL_FreeSurface(picture_again);

		/* Free the picture */
		SDL_FreeSurface(picture);

	}

	/* -------- 32 bit flip test --------- */

	if (start<=22) {

		/* Message */
		fprintf(stderr,"Loading 24bit image\n");

		/* Load the image into a surface */
		bmpfile = "sample24.bmp";
		fprintf(stderr, "Loading picture: %s\n", bmpfile);
		picture = SDL_LoadBMP(bmpfile);
		if ( picture == NULL ) {
			fprintf(stderr, "Couldn't load %s: %s\n", bmpfile, SDL_GetError());
			return;
		}

		/* Excercise flipping functions on 32bit RGBA */
		fprintf(stderr,"Converting 24bit image into 32bit RGBA surface ...\n");
		picture_again = SDL_CreateRGBSurface(SDL_SWSURFACE, picture->w, picture->h, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000);
		SDL_BlitSurface(picture,NULL,picture_again,NULL);

		/* Message */
		sprintf(messageText, "17. Rotating with x-flip, no interpolation");
		RotatePicture(screen,picture_again,ROTATE_ON,FLIP_X,SMOOTHING_OFF);

		/* Message */
		sprintf(messageText, "18. Rotating with y-flip, no interpolation");
		RotatePicture(screen,picture_again,ROTATE_ON,FLIP_Y,SMOOTHING_OFF);

		/* Message */
		sprintf(messageText, "19. Rotating with xy-flip, no interpolation");
		RotatePicture(screen,picture_again,ROTATE_ON,FLIP_XY,SMOOTHING_OFF);

		/* Message */
		sprintf(messageText, "20. Rotating with x-flip, with interpolation");
		RotatePicture(screen,picture_again,ROTATE_ON,FLIP_X,SMOOTHING_ON);

		/* Message */
		sprintf(messageText, "21. Rotating with y-flip, with interpolation");
		RotatePicture(screen,picture_again,ROTATE_ON,FLIP_Y,SMOOTHING_ON);

		/* Message */
		sprintf(messageText, "22. Rotating with xy-flip, with interpolation");
		RotatePicture(screen,picture_again,ROTATE_ON,FLIP_XY,SMOOTHING_ON);

		/* Free the pictures */
		SDL_FreeSurface(picture);
		SDL_FreeSurface(picture_again);
	}

	if (start<=24) {

		/* Message */
		fprintf(stderr,"Loading 24bit image\n");

		/* Load the image into a surface */
		bmpfile = "sample24.bmp";
		fprintf(stderr, "Loading picture: %s\n", bmpfile);
		picture = SDL_LoadBMP(bmpfile);
		if ( picture == NULL ) {
			fprintf(stderr, "Couldn't load %s: %s\n", bmpfile, SDL_GetError());
			return;
		}

		/* Excercise flipping functions on 32bit RGBA */
		fprintf(stderr,"Converting 24bit image into 32bit RGBA surface ...\n");
		picture_again = SDL_CreateRGBSurface(SDL_SWSURFACE, picture->w, picture->h, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000);
		SDL_BlitSurface(picture,NULL,picture_again,NULL);

		sprintf(messageText, "23. CustomTest, values from commandline (32bit)");
		CustomTest(screen, picture_again, custom_angle, custom_fx, custom_fy, custom_smooth);

		SDL_FreeSurface(picture_again);

		/* Free the picture */
		SDL_FreeSurface(picture);

		/* Message */
		fprintf(stderr,"Loading 8bit image\n");

		/* Load the image into a surface */
		bmpfile = "sample8.bmp";
		fprintf(stderr, "Loading picture: %s\n", bmpfile);
		picture = SDL_LoadBMP(bmpfile);
		if ( picture == NULL ) {
			fprintf(stderr, "Couldn't load %s: %s\n", bmpfile, SDL_GetError());
			return;
		}

		sprintf(messageText, "24. CustomTest, values from commandline (8bit)");
		CustomTest(screen, picture, custom_angle, custom_fx, custom_fy, custom_smooth);

		/* Free the picture */
		SDL_FreeSurface(picture);

	}

	if (start<=25) {

		/* Message */
		fprintf(stderr,"Loading 24bit image\n");

		/* Load the image into a surface */
		bmpfile = "sample24.bmp";
		fprintf(stderr, "Loading picture: %s\n", bmpfile);
		picture = SDL_LoadBMP(bmpfile);
		if ( picture == NULL ) {
			fprintf(stderr, "Couldn't load %s: %s\n", bmpfile, SDL_GetError());
			return;
		}

		/* New source surface is 32bit with defined RGBA ordering */
		fprintf(stderr,"Converting 24bit image into 32bit RGBA surface ...\n");
		picture_again = SDL_CreateRGBSurface(SDL_SWSURFACE, picture->w, picture->h, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000);
		SDL_BlitSurface(picture,NULL,picture_again,NULL);

		/* Excercise rotate90 function on 32bit RGBA */
		sprintf(messageText, "25.  rotate90: Rotate 90 degrees clockwise (32bit)");
		RotatePicture90Degrees(screen, picture_again);

		/* Free the pictures */
		SDL_FreeSurface(picture);
		SDL_FreeSurface(picture_again);
	}

	return;
}
void Draw (SDL_Surface *screen, int start, int end)
{
	SDL_Surface *picture, *picture_again;
	char *bmpfile;

	/* Define masking bytes */
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
	Uint32 rmask = 0xff000000; 
	Uint32 gmask = 0x00ff0000;
	Uint32 bmask = 0x0000ff00; 
	Uint32 amask = 0x000000ff;
#else
	Uint32 amask = 0xff000000; 
	Uint32 bmask = 0x00ff0000;
	Uint32 gmask = 0x0000ff00; 
	Uint32 rmask = 0x000000ff;
#endif

	/* --------- 8 bit tests -------- */

	if (start<=6) {

		/* Message */
		printf("8 bit tests ...\n");

		/* Load the image into a surface */
		bmpfile = "sample8.bmp";
		printf("Loading picture: %s\n", bmpfile);
		picture = SDL_LoadBMP(bmpfile);
		if ( picture == NULL ) {
			fprintf(stderr, "Couldn't load %s: %s\n", bmpfile, SDL_GetError());
			return;
		}
		
		/* Add white frame */
		rectangleColor(picture, 0, 0, picture->w-1, picture->h-1, 0xffffffff);

                if (start <= 1) {
			sprintf(messageText, "1.  rotozoom: Rotating and zooming");
			RotatePicture(screen,picture,ROTATE_ON,FLIP_OFF,SMOOTHING_OFF,POSITION_CENTER);
		}
		if (end == 1) goto done8bit;

                if (start <= 2) {
			sprintf(messageText, "2.  rotozoom: Just zooming (angle=0)");
			RotatePicture(screen,picture,ROTATE_OFF,FLIP_OFF,SMOOTHING_OFF,POSITION_CENTER);
			RotatePicture(screen,picture,ROTATE_OFF,FLIP_OFF,SMOOTHING_OFF,POSITION_BOTTOMRIGHT);
		}
		if (end == 2) goto done8bit;

                if (start <= 3) {
			sprintf(messageText, "3.  zoom: Just zooming");
			ZoomPicture(screen,picture,SMOOTHING_OFF);
		}
		if (end == 3) goto done8bit;

                if (start <= 4) {
			sprintf(messageText, "4.  rotozoom: Rotating and zooming, interpolation on but unused");
			RotatePicture(screen,picture,ROTATE_ON,FLIP_OFF,SMOOTHING_ON,POSITION_CENTER);
		}
		if (end == 4) goto done8bit;

                if (start <= 5) {
			sprintf(messageText, "5.  rotozoom: Just zooming (angle=0), interpolation on but unused");
			RotatePicture(screen,picture,ROTATE_OFF,FLIP_OFF,SMOOTHING_ON,POSITION_CENTER);
			RotatePicture(screen,picture,ROTATE_OFF,FLIP_OFF,SMOOTHING_ON,POSITION_BOTTOMRIGHT);
		}
		if (end == 5) goto done8bit;

                if (start <= 6) {
			sprintf(messageText, "6.  zoom: Just zooming, interpolation on but unused");
			ZoomPicture(screen,picture,SMOOTHING_ON);
		}
		if (end == 6) goto done8bit;

		done8bit:
		
		/* Free the picture */
		SDL_FreeSurface(picture);
		
		if (end <= 6) return;
	}

	/* -------- 24 bit test --------- */

	if (start<=12) {

		/* Message */
		printf("24 bit tests ...\n");

		/* Load the image into a surface */
		bmpfile = "sample24.bmp";
		printf("Loading picture: %s\n", bmpfile);
		picture = SDL_LoadBMP(bmpfile);
		if ( picture == NULL ) {
			fprintf(stderr, "Couldn't load %s: %s\n", bmpfile, SDL_GetError());
			return;
		}
		
		/* Add white frame */
		rectangleColor(picture, 0, 0, picture->w-1, picture->h-1, 0xffffffff);

                if (start <= 7) {
			sprintf(messageText, "7.  rotozoom: Rotating and zooming, no interpolation");
		  	RotatePicture(screen,picture,ROTATE_ON,FLIP_OFF,SMOOTHING_OFF,POSITION_CENTER);
		}
		if (end == 7) goto done24bit;

                if (start <= 8) {
			sprintf(messageText, "8a.  rotozoom: Just zooming (angle=0), no interpolation, centered");
			RotatePicture(screen,picture,ROTATE_OFF,FLIP_OFF,SMOOTHING_OFF,POSITION_CENTER);
			sprintf(messageText, "8b.  rotozoom: Just zooming (angle=0), no interpolation, corner");
			RotatePicture(screen,picture,ROTATE_OFF,FLIP_OFF,SMOOTHING_OFF,POSITION_BOTTOMRIGHT);
			sprintf(messageText, "8c.  rotozoom: Just zooming (angle=0), X flip, no interpolation, centered");
			RotatePicture(screen,picture,ROTATE_OFF,FLIP_X,SMOOTHING_OFF,POSITION_CENTER);
			sprintf(messageText, "8d.  rotozoom: Just zooming (angle=0), Y flip, no interpolation, centered");
			RotatePicture(screen,picture,ROTATE_OFF,FLIP_Y,SMOOTHING_OFF,POSITION_CENTER);
			sprintf(messageText, "8e.  rotozoom: Just zooming (angle=0), XY flip, no interpolation, centered");
			RotatePicture(screen,picture,ROTATE_OFF,FLIP_XY,SMOOTHING_OFF,POSITION_CENTER);
		}
		if (end == 8) goto done24bit;

                if (start <= 9) {
  			sprintf(messageText, "9.  zoom: Just zooming, no interpolation");
  			ZoomPicture(screen,picture,SMOOTHING_OFF);
		}
		if (end == 9) goto done24bit;

                if (start <= 10) {
			sprintf(messageText, "10. rotozoom: Rotating and zooming, with interpolation");
			RotatePicture(screen,picture,ROTATE_ON,FLIP_OFF,SMOOTHING_ON,POSITION_CENTER);
		}
		if (end == 10) goto done24bit;

                if (start <= 11) {
			sprintf(messageText, "11a. rotozoom: Just zooming (angle=0), with interpolation, centered");
			RotatePicture(screen,picture,ROTATE_OFF,FLIP_OFF,SMOOTHING_ON,POSITION_CENTER);
			sprintf(messageText, "11b. rotozoom: Just zooming (angle=0), with interpolation, corner");
			RotatePicture(screen,picture,ROTATE_OFF,FLIP_OFF,SMOOTHING_ON,POSITION_BOTTOMRIGHT);
			sprintf(messageText, "11c. rotozoom: Just zooming (angle=0), X flip, with interpolation, corner");
			RotatePicture(screen,picture,ROTATE_OFF,FLIP_X,SMOOTHING_ON,POSITION_CENTER);
			sprintf(messageText, "11d. rotozoom: Just zooming (angle=0), Y flip, with interpolation, corner");
			RotatePicture(screen,picture,ROTATE_OFF,FLIP_Y,SMOOTHING_ON,POSITION_CENTER);
			sprintf(messageText, "11e. rotozoom: Just zooming (angle=0), XY flip, with interpolation, corner");
			RotatePicture(screen,picture,ROTATE_OFF,FLIP_XY,SMOOTHING_ON,POSITION_CENTER);
		}
		if (end == 11) goto done24bit;

                if (start <= 12) {
			sprintf(messageText, "12. zoom: Just zooming, with interpolation");
			ZoomPicture(screen,picture,SMOOTHING_ON);
		}
		if (end == 12) goto done24bit;
		
		done24bit:

		/* Free the picture */
		SDL_FreeSurface(picture);
		
		if (end <= 12) return;
	}

	/* -------- 32 bit test --------- */

	if (start<=16) {

		/* Message */
		printf("32 bit tests ...\n");

		/* Load the image into a surface */
		bmpfile = "sample24.bmp";
		printf("Loading picture: %s\n", bmpfile);
		picture = SDL_LoadBMP(bmpfile);
		if ( picture == NULL ) {
			fprintf(stderr, "Couldn't load %s: %s\n", bmpfile, SDL_GetError());
			return;
		}

		/* Add white frame */
		rectangleColor(picture, 0, 0, picture->w-1, picture->h-1, 0xffffffff);

		/* New source surface is 32bit with defined RGBA ordering */
		/* Much faster to do this once rather than the routine on the fly */
		fprintf(stderr,"Converting 24bit image into 32bit RGBA surface ...\n");
		picture_again = SDL_CreateRGBSurface(SDL_SWSURFACE, picture->w, picture->h, 32, rmask, gmask, bmask, amask);
		if (picture_again == NULL) goto done32bit;		
		SDL_BlitSurface(picture,NULL,picture_again,NULL);

                if (start <= 13) {
			sprintf(messageText, "13. Rotating and zooming, with interpolation (RGBA source)");
			RotatePicture(screen,picture_again,ROTATE_ON,FLIP_OFF,SMOOTHING_ON,POSITION_CENTER);
		}
		if (end == 13) goto done32bit;

                if (start <= 14) {
			sprintf(messageText, "14. Just zooming (angle=0), with interpolation (RGBA source)");
			RotatePicture(screen,picture_again,ROTATE_OFF,FLIP_OFF,SMOOTHING_ON,POSITION_CENTER);
			RotatePicture(screen,picture_again,ROTATE_OFF,FLIP_OFF,SMOOTHING_ON,POSITION_BOTTOMRIGHT);
		}
		if (end == 14) goto done32bit;

		SDL_FreeSurface(picture_again);
		picture_again=NULL;

		/* New source surface is 32bit with defined ABGR ordering */
		/* Much faster to do this once rather than the routine on the fly */
		fprintf(stderr,"Converting 24bit image into 32bit ABGR surface ...\n");
		picture_again = SDL_CreateRGBSurface(SDL_SWSURFACE, picture->w, picture->h, 32, amask, bmask, gmask, rmask);
		if (picture_again == NULL) goto done32bit;		
		SDL_BlitSurface(picture,NULL,picture_again,NULL);

                if (start <= 14) {
			sprintf(messageText, "15. Rotating and zooming, with interpolation (ABGR source)");
			RotatePicture(screen,picture_again,ROTATE_ON,FLIP_OFF,SMOOTHING_ON,POSITION_CENTER);
		}
		if (end == 14) goto done32bit;

                if (start <= 14) {
			sprintf(messageText, "16. Just zooming (angle=0), with interpolation (ABGR source)");
			RotatePicture(screen,picture_again,ROTATE_OFF,FLIP_OFF,SMOOTHING_ON,POSITION_CENTER);
			RotatePicture(screen,picture_again,ROTATE_OFF,FLIP_OFF,SMOOTHING_ON,POSITION_BOTTOMRIGHT);
		}
		if (end == 14) goto done32bit;


		done32bit:
		
		/* Free the picture */
		SDL_FreeSurface(picture);
		if (picture_again) SDL_FreeSurface(picture_again);
		
		if (end <= 16) return;
	}

	/* -------- 32 bit flip test --------- */

	if (start<=22) {

		/* Message */
		printf("32 bit flip tests ...\n");

		/* Load the image into a surface */
		bmpfile = "sample24.bmp";
		printf("Loading picture: %s\n", bmpfile);
		picture = SDL_LoadBMP(bmpfile);
		if ( picture == NULL ) {
			fprintf(stderr, "Couldn't load %s: %s\n", bmpfile, SDL_GetError());
			return;
		}

		/* Add white frame */
		rectangleColor(picture, 0, 0, picture->w-1, picture->h-1, 0xffffffff);

		/* Excercise flipping functions on 32bit RGBA */
		printf("Converting 24bit image into 32bit RGBA surface ...\n");
		picture_again = SDL_CreateRGBSurface(SDL_SWSURFACE, picture->w, picture->h, 32, rmask, gmask, bmask, amask);
		if (picture_again == NULL) goto doneflip;
		SDL_BlitSurface(picture,NULL,picture_again,NULL);
			
                if (start <= 17) {
			sprintf(messageText, "17. Rotating with x-flip, no interpolation (RGBA source)");
			RotatePicture(screen,picture_again,ROTATE_ON,FLIP_X,SMOOTHING_OFF,POSITION_CENTER);
		}
		if (end == 17) goto doneflip;

                if (start <= 18) {
			sprintf(messageText, "18. Rotating with y-flip, no interpolation");
			RotatePicture(screen,picture_again,ROTATE_ON,FLIP_Y,SMOOTHING_OFF,POSITION_CENTER);
		}
		if (end == 18) goto doneflip;

                if (start <= 19) {
			sprintf(messageText, "19. Rotating with xy-flip, no interpolation");
			RotatePicture(screen,picture_again,ROTATE_ON,FLIP_XY,SMOOTHING_OFF,POSITION_CENTER);
		}
		if (end == 19) goto doneflip;

                if (start <= 20) {
			sprintf(messageText, "20. Rotating with x-flip, with interpolation");
			RotatePicture(screen,picture_again,ROTATE_ON,FLIP_X,SMOOTHING_ON,POSITION_CENTER);
		}
		if (end == 20) goto doneflip;

                if (start <= 21) {
			sprintf(messageText, "21. Rotating with y-flip, with interpolation");
			RotatePicture(screen,picture_again,ROTATE_ON,FLIP_Y,SMOOTHING_ON,POSITION_CENTER);
		}
		if (end == 21) goto doneflip;

                if (start <= 22) {
			sprintf(messageText, "22. Rotating with xy-flip, with interpolation");
			RotatePicture(screen,picture_again,ROTATE_ON,FLIP_XY,SMOOTHING_ON,POSITION_CENTER);
		}
		if (end == 22) goto doneflip;

		doneflip:
		
		/* Free the pictures */
		SDL_FreeSurface(picture);
		if (picture_again) SDL_FreeSurface(picture_again);
		
		if (end <= 22) return;
	}

	if (start<=24) {

		/* Message */
		printf("Loading 24bit image\n");

		/* Load the image into a surface */
		bmpfile = "sample24.bmp";
		printf("Loading picture: %s\n", bmpfile);
		picture = SDL_LoadBMP(bmpfile);
		if ( picture == NULL ) {
			fprintf(stderr, "Couldn't load %s: %s\n", bmpfile, SDL_GetError());
			return;
		}

		/* Add white frame */
		rectangleColor(picture, 0, 0, picture->w-1, picture->h-1, 0xffffffff);

		/* Excercise flipping functions on 32bit RGBA */
		fprintf(stderr,"Converting 24bit image into 32bit RGBA surface ...\n");
		picture_again = SDL_CreateRGBSurface(SDL_SWSURFACE, picture->w, picture->h, 32, rmask, gmask, bmask, amask);
		SDL_BlitSurface(picture,NULL,picture_again,NULL);

		sprintf(messageText, "23. CustomTest, values from commandline (32bit)");
		CustomTest(screen, picture_again, custom_angle, custom_fx, custom_fy, custom_smooth);

		SDL_FreeSurface(picture_again);

		/* Free the picture */
		SDL_FreeSurface(picture);

		/* Message */
		printf("Loading 8bit image\n");

		/* Load the image into a surface */
		bmpfile = "sample8.bmp";
		printf("Loading picture: %s\n", bmpfile);
		picture = SDL_LoadBMP(bmpfile);
		if ( picture == NULL ) {
			fprintf(stderr, "Couldn't load %s: %s\n", bmpfile, SDL_GetError());
			return;
		}

		sprintf(messageText, "24. CustomTest, values from commandline (8bit)");
		CustomTest(screen, picture, custom_angle, custom_fx, custom_fy, custom_smooth);

		/* Free the picture */
		SDL_FreeSurface(picture);
		
		if (end <= 24) return;
	}

	if (start<=25) {

		/* Message */
		printf("Loading 24bit image\n");

		/* Load the image into a surface */
		bmpfile = "sample24.bmp";
		printf("Loading picture: %s\n", bmpfile);
		picture = SDL_LoadBMP(bmpfile);
		if ( picture == NULL ) {
			fprintf(stderr, "Couldn't load %s: %s\n", bmpfile, SDL_GetError());
			return;
		}

		/* Add white frame */
		rectangleColor(picture, 0, 0, picture->w-1, picture->h-1, 0xffffffff);

		/* New source surface is 32bit with defined RGBA ordering */
		printf("Converting 24bit image into 32bit RGBA surface ...\n");
		picture_again = SDL_CreateRGBSurface(SDL_SWSURFACE, picture->w, picture->h, 32, rmask, gmask, bmask, amask);
		if (picture_again == NULL) goto donerotate90;
		SDL_BlitSurface(picture,NULL,picture_again,NULL);

		/* Excercise rotate90 function on 32bit RGBA */
		sprintf(messageText, "25.  rotate90: Rotate 90 degrees clockwise (32bit)");
		RotatePicture90Degrees(screen, picture_again);

		donerotate90:
		
		/* Free the pictures */
		SDL_FreeSurface(picture);
		if (picture_again) SDL_FreeSurface(picture_again);

		if (end <= 25) return;
	}

	if (start<=26) {
		/* Run accuracy test */
		sprintf(messageText, "26.  accuracy: zoom by factor of 2");
		AccuracyTest1(screen);

		if (end <= 26) return;
	}

	if (start <= 27) {
		/* Load the image into a surface */
		bmpfile = "sample2x2.bmp";
		printf("Loading picture: %s\n", bmpfile);
		picture = SDL_LoadBMP(bmpfile);
		if ( picture == NULL ) {
			fprintf(stderr, "Couldn't load %s: %s\n", bmpfile, SDL_GetError());
			return;
		}

		sprintf(messageText, "27a.  zoom accuracy: zoom 2x2 bitmap");		
		AccuracyTest2(screen, picture);

		/* Free the pictures */
		SDL_FreeSurface(picture);

		/* Load the image into a surface */
		bmpfile = "sample3x3.bmp";
		printf("Loading picture: %s\n", bmpfile);
		picture = SDL_LoadBMP(bmpfile);
		if ( picture == NULL ) {
			fprintf(stderr, "Couldn't load %s: %s\n", bmpfile, SDL_GetError());
			return;
		}		
		
		sprintf(messageText, "27b.  zoom accuracy: zoom 3x3 bitmap");		
		AccuracyTest2(screen, picture);

		/* Free the pictures */
		SDL_FreeSurface(picture);

		/* Load the image into a surface */
		bmpfile = "sample16x16.bmp";
		printf("Loading picture: %s\n", bmpfile);
		picture = SDL_LoadBMP(bmpfile);
		if ( picture == NULL ) {
			fprintf(stderr, "Couldn't load %s: %s\n", bmpfile, SDL_GetError());
			return;
		}		
		
		sprintf(messageText, "27c.  zoom accuracy: zoom 16x16 bitmap");		
		AccuracyTest2(screen, picture);

		/* Free the pictures */
		SDL_FreeSurface(picture);
	
		if (end <= 27) return;
	}
	
	return;
}