Moved the SDL_Eyes test program for shaped windows into the Hg repository and got it building and linking as a test.
authorEli Gottlieb <eligottlieb@gmail.com>
Mon, 31 May 2010 21:23:06 -0400
changeset 4770cf7976fd3258
parent 4769 83f9b95da263
child 4771 c500594c4246
Moved the SDL_Eyes test program for shaped windows into the Hg repository and got it building and linking as a test.
Makefile.in
test/Makefile.in
test/README
test/testeyes
test/testeyes.c
test/testeyes_bitmap.h
test/testeyes_mask_bitmap.h
     1.1 --- a/Makefile.in	Thu May 27 16:44:35 2010 -0400
     1.2 +++ b/Makefile.in	Mon May 31 21:23:06 2010 -0400
     1.3 @@ -44,7 +44,7 @@
     1.4  
     1.5  DIST = acinclude autogen.sh Borland.html Borland.zip BUGS build-scripts configure configure.in COPYING CREDITS include INSTALL Makefile.minimal Makefile.in README* sdl-config.in sdl.m4 sdl.pc.in SDL.spec SDL.spec.in src test TODO VisualC.html VisualC VisualCE Watcom-Win32.zip WhatsNew Xcode Xcode-iPhoneOS
     1.6  
     1.7 -HDRS = SDL.h SDL_assert.h SDL_atomic.h SDL_audio.h SDL_compat.h SDL_cpuinfo.h SDL_endian.h SDL_error.h SDL_events.h SDL_haptic.h SDL_joystick.h SDL_keyboard.h SDL_keysym.h SDL_loadso.h SDL_main.h SDL_mouse.h SDL_mutex.h SDL_name.h SDL_opengl.h SDL_opengles.h SDL_pixels.h SDL_platform.h SDL_power.h SDL_quit.h SDL_rect.h SDL_revision.h SDL_rwops.h SDL_scancode.h SDL_stdinc.h SDL_surface.h SDL_syswm.h SDL_thread.h SDL_timer.h SDL_types.h SDL_version.h SDL_video.h begin_code.h close_code.h
     1.8 +HDRS = SDL.h SDL_assert.h SDL_atomic.h SDL_audio.h SDL_compat.h SDL_cpuinfo.h SDL_endian.h SDL_error.h SDL_events.h SDL_haptic.h SDL_joystick.h SDL_keyboard.h SDL_keysym.h SDL_loadso.h SDL_main.h SDL_mouse.h SDL_mutex.h SDL_name.h SDL_opengl.h SDL_opengles.h SDL_pixels.h SDL_platform.h SDL_power.h SDL_quit.h SDL_rect.h SDL_revision.h SDL_rwops.h SDL_scancode.h SDL_shape.h SDL_stdinc.h SDL_surface.h SDL_syswm.h SDL_thread.h SDL_timer.h SDL_types.h SDL_version.h SDL_video.h begin_code.h close_code.h
     1.9  
    1.10  LT_AGE      = @LT_AGE@
    1.11  LT_CURRENT  = @LT_CURRENT@
     2.1 --- a/test/Makefile.in	Thu May 27 16:44:35 2010 -0400
     2.2 +++ b/test/Makefile.in	Mon May 31 21:23:06 2010 -0400
     2.3 @@ -7,7 +7,7 @@
     2.4  CFLAGS  = @CFLAGS@
     2.5  LIBS	= @LIBS@
     2.6  
     2.7 -TARGETS = checkkeys$(EXE) graywin$(EXE) loopwave$(EXE) testalpha$(EXE) testatomic$(EXE) testaudioinfo$(EXE) testbitmap$(EXE) testblitspeed$(EXE) testcursor$(EXE) testdraw2$(EXE) testdyngles$(EXE) testdyngl$(EXE) testerror$(EXE) testfile$(EXE) testfill$(EXE) testgamma$(EXE) testgl2$(EXE) testgles$(EXE) testgl$(EXE) testhaptic$(EXE) testhread$(EXE) testiconv$(EXE) testime$(EXE) testintersections$(EXE) testjoystick$(EXE) testkeys$(EXE) testloadso$(EXE) testlock$(EXE) testmmousetablet$(EXE) testmultiaudio$(EXE) testoverlay2$(EXE) testoverlay$(EXE) testpalette$(EXE) testplatform$(EXE) testpower$(EXE) testresample$(EXE) testsem$(EXE) testsprite2$(EXE) testsprite$(EXE) testspriteminimal$(EXE) testtimer$(EXE) testver$(EXE) testvidinfo$(EXE) testwin$(EXE) testwm2$(EXE) testwm$(EXE) threadwin$(EXE) torturethread$(EXE)
     2.8 +TARGETS = checkkeys$(EXE) graywin$(EXE) loopwave$(EXE) testalpha$(EXE) testatomic$(EXE) testaudioinfo$(EXE) testbitmap$(EXE) testblitspeed$(EXE) testcursor$(EXE) testdraw2$(EXE) testdyngles$(EXE) testdyngl$(EXE) testerror$(EXE) testeyes$(EXE) testfile$(EXE) testfill$(EXE) testgamma$(EXE) testgl2$(EXE) testgles$(EXE) testgl$(EXE) testhaptic$(EXE) testhread$(EXE) testiconv$(EXE) testime$(EXE) testintersections$(EXE) testjoystick$(EXE) testkeys$(EXE) testloadso$(EXE) testlock$(EXE) testmmousetablet$(EXE) testmultiaudio$(EXE) testoverlay2$(EXE) testoverlay$(EXE) testpalette$(EXE) testplatform$(EXE) testpower$(EXE) testresample$(EXE) testsem$(EXE) testsprite2$(EXE) testsprite$(EXE) testspriteminimal$(EXE) testtimer$(EXE) testver$(EXE) testvidinfo$(EXE) testwin$(EXE) testwm2$(EXE) testwm$(EXE) threadwin$(EXE) torturethread$(EXE)
     2.9  
    2.10  all: Makefile $(TARGETS)
    2.11  
    2.12 @@ -62,6 +62,9 @@
    2.13  testerror$(EXE): $(srcdir)/testerror.c
    2.14  	$(CC) -o $@ $? $(CFLAGS) $(LIBS)
    2.15  
    2.16 +testeyes$(EXE): $(srcdir)/testeyes.c
    2.17 +	$(CC) -o $@ $? -std=c99 $(CFLAGS) $(LIBS)
    2.18 +
    2.19  testfile$(EXE): $(srcdir)/testfile.c
    2.20  	$(CC) -o $@ $? $(CFLAGS) $(LIBS)
    2.21  
     3.1 --- a/test/README	Thu May 27 16:44:35 2010 -0400
     3.2 +++ b/test/README	Mon May 31 21:23:06 2010 -0400
     3.3 @@ -12,6 +12,7 @@
     3.4  	testcursor	Tests custom mouse cursor
     3.5  	testdyngl	Tests dynamically loading OpenGL library
     3.6  	testerror	Tests multi-threaded error handling
     3.7 +	testeyes	Tests shaped windows
     3.8  	testfile	Tests RWops layer
     3.9  	testgamma	Tests video device gamma ramp
    3.10  	testgl		A very simple example of using OpenGL with SDL
     4.1 Binary file test/testeyes has changed
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/test/testeyes.c	Mon May 31 21:23:06 2010 -0400
     5.3 @@ -0,0 +1,208 @@
     5.4 +#include <stdlib.h>
     5.5 +#include <math.h>
     5.6 +#include <SDL_events.h>
     5.7 +#include <SDL_rect.h>
     5.8 +#include <SDL_pixels.h>
     5.9 +#include <SDL_video.h>
    5.10 +#include <SDL_shape.h>
    5.11 +#include "testeyes_bitmap.h"
    5.12 +#include "testeyes_mask_bitmap.h"
    5.13 +
    5.14 +/* The following code for the calculation of pupil positions has been taken and rewritten from the original xeyes.  The
    5.15 +   copyright notice is included as follows, and the code is now under the same license as the rest of this file. */
    5.16 +/*
    5.17 +
    5.18 +Copyright (c) 1991  X Consortium
    5.19 +
    5.20 +Permission is hereby granted, free of charge, to any person obtaining
    5.21 +a copy of this software and associated documentation files (the
    5.22 +"Software"), to deal in the Software without restriction, including
    5.23 +without limitation the rights to use, copy, modify, merge, publish,
    5.24 +distribute, sublicense, and/or sell copies of the Software, and to
    5.25 +permit persons to whom the Software is furnished to do so, subject to
    5.26 +the following conditions:
    5.27 +
    5.28 +The above copyright notice and this permission notice shall be included
    5.29 +in all copies or substantial portions of the Software.
    5.30 +
    5.31 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    5.32 +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    5.33 +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    5.34 +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR
    5.35 +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
    5.36 +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    5.37 +OTHER DEALINGS IN THE SOFTWARE.
    5.38 +
    5.39 +Except as contained in this notice, the name of the X Consortium shall
    5.40 +not be used in advertising or otherwise to promote the sale, use or
    5.41 +other dealings in this Software without prior written authorization
    5.42 +from the X Consortium.
    5.43 +
    5.44 +*/
    5.45 +# define NUM_EYES	2
    5.46 +# define EYE_X(n)	((n) * 2.0)
    5.47 +# define EYE_Y(n)	(0.0)
    5.48 +# define EYE_THICK	(0.175)	/* thickness of eye rim */
    5.49 +# define EYE_OFFSET	(0.1)	/* padding between eyes */
    5.50 +# define EYE_WIDTH	(2.0 - (EYE_THICK + EYE_OFFSET) * 2)
    5.51 +# define EYE_HEIGHT	EYE_WIDTH
    5.52 +# define EYE_HWIDTH	(EYE_WIDTH / 2.0)
    5.53 +# define EYE_HHEIGHT	(EYE_HEIGHT / 2.0)
    5.54 +# define BALL_WIDTH	(0.3)
    5.55 +# define BALL_HEIGHT	BALL_WIDTH
    5.56 +# define BALL_PAD	(0.05)
    5.57 +# define BALL_DIST	((EYE_WIDTH - BALL_WIDTH) / 2.0 - BALL_PAD)
    5.58 +
    5.59 +SDL_Point computePupil (int num,SDL_Point mouse) {
    5.60 +	double dx = mouse.x - EYE_X(num);
    5.61 +	double dy = mouse.y - EYE_Y(num);
    5.62 +	double cx = 0.0,cy = 0.0;
    5.63 +	if(dx == 0 && dy == 0) {
    5.64 +		cx = EYE_X(num);
    5.65 +		cy = EYE_Y(num);
    5.66 +	}
    5.67 +	else {
    5.68 +		double angle = atan2((double)dy,(double)dx);
    5.69 +		double cosa = cos(angle);
    5.70 +		double sina = sin(angle);
    5.71 +		double hypotenuse = hypot(EYE_HHEIGHT * cosa, EYE_HWIDTH * sina);
    5.72 +		double dist = BALL_DIST * hypot((EYE_HWIDTH * EYE_HHEIGHT) * cosa / hypotenuse,
    5.73 +					        (EYE_HWIDTH * EYE_HHEIGHT) * sina / hypotenuse);
    5.74 +		if(dist > hypot((double)dx,(double)dy)) {
    5.75 +			cx = dx + EYE_X(num);
    5.76 +			cy = dy + EYE_Y(num);
    5.77 +		}
    5.78 +		else {
    5.79 +			cx = dist * cosa + EYE_X(num);
    5.80 +			cy = dist * sina + EYE_Y(num);
    5.81 +		}
    5.82 +	}
    5.83 +	SDL_Point ret = {cx,cy};
    5.84 +	return ret;
    5.85 +}
    5.86 +
    5.87 +/* Here begins the code exclusively and entirely written by Eli Gottlieb in May 2010. */
    5.88 +typedef struct {
    5.89 +	SDL_Rect left;
    5.90 +	SDL_Rect right;
    5.91 +} Pupil_Pair;
    5.92 +typedef struct {
    5.93 +	SDL_Point left;
    5.94 +	SDL_Point right;
    5.95 +} Pupil_Points;
    5.96 +
    5.97 +Pupil_Pair compute_pupil_positions(SDL_Point target) {
    5.98 +	Pupil_Pair result;
    5.99 +	Pupil_Points points;
   5.100 +	points.left = computePupil(0,target);
   5.101 +	points.right = computePupil(1,target);
   5.102 +	result.left.x = points.left.x - BALL_WIDTH / 2.0;
   5.103 +	result.left.y = points.left.y - BALL_HEIGHT / 2.0;
   5.104 +	result.right.x = points.right.x - BALL_WIDTH / 2.0;
   5.105 +	result.right.y = points.right.y - BALL_HEIGHT / 2.0;
   5.106 +	result.left.w = result.right.w = BALL_WIDTH;
   5.107 +	result.left.h = result.left.w = BALL_HEIGHT;
   5.108 +	return result;
   5.109 +}
   5.110 +
   5.111 +void render_eyes(SDL_Window *window,SDL_Texture *eyes_texture,Pupil_Pair pupils) {
   5.112 +	SDL_SelectRenderer(window);
   5.113 +	
   5.114 +	//Clear render-target to blue.
   5.115 +	SDL_SetRenderDrawColor(0x00,0x00,0xff,0xff);
   5.116 +	SDL_RenderClear();
   5.117 +	
   5.118 +	//Render the whites of the eyes.
   5.119 +	SDL_Rect srcdestrect = {0,0,eyes_width,eyes_height};
   5.120 +	SDL_RenderCopy(eyes_texture,&srcdestrect,&srcdestrect);
   5.121 +	
   5.122 +	//Render the pupils.
   5.123 +	SDL_SetRenderDrawColor(0x00,0x00,0x00,0xff);
   5.124 +	const SDL_Rect eyes[2] = {pupils.left,pupils.right};
   5.125 +	SDL_RenderFillRects((const SDL_Rect**)&eyes,2);
   5.126 +	
   5.127 +	SDL_RenderPresent();
   5.128 +}
   5.129 +
   5.130 +int main(int argc,char** argv) {
   5.131 +	if(SDL_VideoInit(NULL,0) == -1) {
   5.132 +		printf("Could not initialize SDL video.\n");
   5.133 +		exit(-1);
   5.134 +	}
   5.135 +	
   5.136 +	SDL_Window *window = SDL_CreateShapedWindow("Big Brother is watching you.",eyes_x_hot,eyes_y_hot,eyes_width,eyes_height,SDL_WINDOW_RESIZABLE);
   5.137 +	if(window == NULL) {
   5.138 +		SDL_VideoQuit();
   5.139 +		printf("Could not create shaped window for eyes.\n");
   5.140 +		exit(-2);
   5.141 +	}
   5.142 +	if(SDL_CreateRenderer(window,-1,SDL_RENDERER_PRESENTFLIP2) == -1) {
   5.143 +		SDL_DestroyWindow(window);
   5.144 +		SDL_VideoQuit();
   5.145 +		printf("Could not create rendering context for SDL_Eyes window.\n");
   5.146 +		exit(-3);
   5.147 +	}
   5.148 +	
   5.149 +	SDL_Color bnw_palette[2] = {{0,0,0,0},{255,255,255,255}};
   5.150 +	SDL_Texture *eyes_texture = SDL_CreateTexture(SDL_PIXELFORMAT_INDEX1LSB,SDL_TEXTUREACCESS_STREAMING,eyes_width,eyes_height);
   5.151 +	if(eyes_texture == NULL) {
   5.152 +		SDL_DestroyRenderer(window);
   5.153 +		SDL_DestroyWindow(window);
   5.154 +		SDL_VideoQuit();
   5.155 +		printf("Could not create eyes texture.\n");
   5.156 +		exit(-4);
   5.157 +	}
   5.158 +	SDL_SetTexturePalette(eyes_texture,bnw_palette,0,2);
   5.159 +	
   5.160 +	void *pixels = NULL;
   5.161 +	int pitch = 0;
   5.162 +	SDL_Rect rect = {0,0,eyes_width,eyes_height};
   5.163 +	SDL_LockTexture(eyes_texture,&rect,1,&pixels,&pitch);
   5.164 +	for(int row = 0;row<eyes_height;row++)
   5.165 +		memcpy(pixels+pitch*row,eyes_bits+(eyes_width/8)*row,eyes_width/8);
   5.166 +	SDL_UnlockTexture(eyes_texture);
   5.167 +	
   5.168 +	SDL_Texture *mask_texture = SDL_CreateTexture(SDL_PIXELFORMAT_INDEX1LSB,SDL_TEXTUREACCESS_STREAMING,eyesmask_width,eyesmask_height);
   5.169 +	if(mask_texture == NULL) {
   5.170 +		SDL_DestroyTexture(eyes_texture);
   5.171 +		SDL_DestroyRenderer(window);
   5.172 +		SDL_DestroyWindow(window);
   5.173 +		SDL_VideoQuit();
   5.174 +		printf("Could not create shape mask texture.\n");
   5.175 +		exit(-5);
   5.176 +	}
   5.177 +	SDL_SetTexturePalette(mask_texture,bnw_palette,0,2);
   5.178 +	
   5.179 +	rect.x = rect.y = 0;
   5.180 +	rect.w = eyesmask_width;
   5.181 +	rect.h = eyesmask_height;
   5.182 +	SDL_LockTexture(mask_texture,&rect,1,&pixels,&pitch);
   5.183 +	for(int row = 0;row<eyesmask_height;row++)
   5.184 +		memcpy(pixels+pitch*row,eyesmask_bits+(eyesmask_width/8)*row,eyesmask_width/8);
   5.185 +	SDL_UnlockTexture(mask_texture);
   5.186 +	
   5.187 +	SDL_SelectShapeRenderer(window);
   5.188 +	SDL_RenderCopy(mask_texture,&rect,&rect);
   5.189 +	SDL_RenderPresent();
   5.190 +	
   5.191 +	SDL_Event event;
   5.192 +	int event_pending = 0;
   5.193 +	event_pending = SDL_PollEvent(&event);
   5.194 +	SDL_Point mouse_position;
   5.195 +	Pupil_Pair pupil_positions;
   5.196 +	SDL_SelectMouse(0);
   5.197 +	SDL_GetMouseState(&mouse_position.x,&mouse_position.y);
   5.198 +	pupil_positions = compute_pupil_positions(mouse_position);
   5.199 +	while(event.type != SDL_QUIT) {
   5.200 +		if(event.type == SDL_MOUSEMOTION) {
   5.201 +			mouse_position.x = event.motion.x;
   5.202 +			mouse_position.y = event.motion.y;
   5.203 +			pupil_positions = compute_pupil_positions(mouse_position);
   5.204 +		}
   5.205 +		render_eyes(window,eyes_texture,pupil_positions);
   5.206 +		event_pending = SDL_PollEvent(&event);
   5.207 +	}
   5.208 +	
   5.209 +	//Call SDL_VideoQuit() before quitting.
   5.210 +	SDL_VideoQuit();
   5.211 +}
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/test/testeyes_bitmap.h	Mon May 31 21:23:06 2010 -0400
     6.3 @@ -0,0 +1,21 @@
     6.4 +#define eyes_width 48
     6.5 +#define eyes_height 32
     6.6 +#define eyes_x_hot 0
     6.7 +#define eyes_y_hot 0
     6.8 +static unsigned char eyes_bits[] = {
     6.9 +   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    6.10 +   0x00, 0x78, 0x00, 0x00, 0x1e, 0x00, 0x00, 0xfe, 0x01, 0x80, 0x7f, 0x00,
    6.11 +   0x00, 0x87, 0x03, 0xc0, 0xe1, 0x00, 0x80, 0x01, 0x06, 0x60, 0x80, 0x01,
    6.12 +   0xc0, 0x00, 0x0c, 0x30, 0x00, 0x03, 0x60, 0x00, 0x18, 0x18, 0x00, 0x06,
    6.13 +   0x30, 0x00, 0x30, 0x0c, 0x00, 0x0c, 0x30, 0x00, 0x30, 0x0c, 0x00, 0x0c,
    6.14 +   0x10, 0x00, 0x20, 0x04, 0x00, 0x08, 0x18, 0x00, 0x60, 0x06, 0x00, 0x18,
    6.15 +   0x18, 0x00, 0x60, 0x06, 0x00, 0x18, 0x18, 0x00, 0x60, 0x06, 0x00, 0x18,
    6.16 +   0x18, 0x00, 0x60, 0x06, 0x00, 0x18, 0x18, 0x00, 0x60, 0x06, 0x00, 0x18,
    6.17 +   0x18, 0x00, 0x60, 0x06, 0x00, 0x18, 0x18, 0x80, 0x63, 0x06, 0x00, 0x18,
    6.18 +   0x18, 0x80, 0x63, 0x06, 0xe0, 0x18, 0x18, 0x80, 0x63, 0x06, 0xe0, 0x18,
    6.19 +   0x18, 0x00, 0x60, 0x06, 0xe0, 0x18, 0x18, 0x00, 0x20, 0x06, 0x00, 0x08,
    6.20 +   0x10, 0x00, 0x30, 0x04, 0x00, 0x0c, 0x10, 0x00, 0x10, 0x04, 0x00, 0x04,
    6.21 +   0x30, 0x00, 0x18, 0x0c, 0x00, 0x06, 0x60, 0x00, 0x08, 0x18, 0x00, 0x02,
    6.22 +   0x40, 0x00, 0x0c, 0x10, 0x00, 0x03, 0xc0, 0x00, 0x06, 0x30, 0x80, 0x01,
    6.23 +   0x80, 0x83, 0x03, 0xe0, 0xe0, 0x00, 0x00, 0xff, 0x01, 0xc0, 0x7f, 0x00,
    6.24 +   0x00, 0xfe, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/test/testeyes_mask_bitmap.h	Mon May 31 21:23:06 2010 -0400
     7.3 @@ -0,0 +1,21 @@
     7.4 +#define eyesmask_width 48
     7.5 +#define eyesmask_height 32
     7.6 +#define eyesmask_x_hot 0
     7.7 +#define eyesmask_y_hot 0
     7.8 +static unsigned char eyesmask_bits[] = {
     7.9 +   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    7.10 +   0x00, 0x78, 0x00, 0x00, 0x1e, 0x00, 0x00, 0xfe, 0x01, 0x80, 0x7f, 0x00,
    7.11 +   0x00, 0xff, 0x03, 0xc0, 0xff, 0x00, 0x80, 0xff, 0x07, 0xe0, 0xff, 0x01,
    7.12 +   0xc0, 0xff, 0x0f, 0xf0, 0xff, 0x03, 0xe0, 0xff, 0x1f, 0xf8, 0xff, 0x07,
    7.13 +   0xf0, 0xff, 0x3f, 0xfc, 0xff, 0x0f, 0xf0, 0xff, 0x3f, 0xfc, 0xff, 0x0f,
    7.14 +   0xf0, 0xff, 0x3f, 0xfc, 0xff, 0x0f, 0xf8, 0xff, 0x7f, 0xfe, 0xff, 0x1f,
    7.15 +   0xf8, 0xff, 0x7f, 0xfe, 0xff, 0x1f, 0xf8, 0xff, 0x7f, 0xfe, 0xff, 0x1f,
    7.16 +   0xf8, 0xff, 0x7f, 0xfe, 0xff, 0x1f, 0xf8, 0xff, 0x7f, 0xfe, 0xff, 0x1f,
    7.17 +   0xf8, 0xff, 0x7f, 0xfe, 0xff, 0x1f, 0xf8, 0xff, 0x7f, 0xfe, 0xff, 0x1f,
    7.18 +   0xf8, 0xff, 0x7f, 0xfe, 0xff, 0x1f, 0xf8, 0xff, 0x7f, 0xfe, 0xff, 0x1f,
    7.19 +   0xf8, 0xff, 0x7f, 0xfe, 0xff, 0x1f, 0xf8, 0xff, 0x3f, 0xfe, 0xff, 0x0f,
    7.20 +   0xf0, 0xff, 0x3f, 0xfc, 0xff, 0x0f, 0xf0, 0xff, 0x1f, 0xfc, 0xff, 0x07,
    7.21 +   0xf0, 0xff, 0x1f, 0xfc, 0xff, 0x07, 0xe0, 0xff, 0x0f, 0xf8, 0xff, 0x03,
    7.22 +   0xc0, 0xff, 0x0f, 0xf0, 0xff, 0x03, 0xc0, 0xff, 0x07, 0xf0, 0xff, 0x01,
    7.23 +   0x80, 0xff, 0x03, 0xe0, 0xff, 0x00, 0x00, 0xff, 0x01, 0xc0, 0x7f, 0x00,
    7.24 +   0x00, 0xfe, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};