void Touch_Tests(void)
{
	int firstx ;
	int firsty ;
	int x ;
	int y ;
	int state ;
	gfx_Cls() ;
	putstr("Touch Tests\n") ;
	printf("Touch Tests.\n") ;
	putstr("Please ensure Touch is only\ndetected in the Blue area") ;
	printf("Detecting touch in Region\n") ;
	touch_Set(TOUCH_ENABLE) ;
	touch_DetectRegion(100,100, 200, 200) ;
	gfx_RectangleFilled(100,100, 200, 200, BLUE) ;
	do {} while (touch_Get(TOUCH_STATUS) != TOUCH_PRESSED);
	touch_Set(TOUCH_REGIONDEFAULT) ;
	gfx_Cls() ;
	putstr("Draw.. Drawing stops\nwhen touch released\n") ;
	printf("Drawing\n") ;

	while(touch_Get(TOUCH_STATUS) != TOUCH_PRESSED)
	{      // we"ll wait for a touch
	}
	firstx = touch_Get(TOUCH_GETX);                          // so we can get the first point
	firsty = touch_Get(TOUCH_GETY);
	while(state != TOUCH_RELEASED)
	{
		state = touch_Get(TOUCH_STATUS);                       // look for any touch activity
		x = touch_Get(TOUCH_GETX);                             // grab the x
		y = touch_Get(TOUCH_GETY);                             // and the y coordinates of the touch
		if (state == TOUCH_PRESSED)                               // if there"s a press
		{
			firstx = x;
			firsty = y;
		}

		if (state == TOUCH_MOVING)                                // if there"s movement
		{
			gfx_Line(firstx, firsty, x, y, BLUE);                 // but lines are much better
			firstx = x;
			firsty = y;
		}
	}
	putstr("Done!\n") ;
	touch_Set(TOUCH_DISABLE) ;
}
void Goldelox_Serial_4DLib::reset()
{
	digitalWrite(_resetPin, LOW);
	delay(1);
	digitalWrite(_resetPin, HIGH);
	delay(2600);
	gfx_Cls();
}
void Media_Tests(void)
{
	int i ;
	int j ;
	int k ;
	int l ;
	int m , handle ;
	unsigned char sector[512] ;
	gfx_Cls() ;
	putstr("Media Tests") ;
	printf("Media Tests\n") ;
	file_Unmount() ;    // just to test this and media_Init
	i = media_Init() ;
	if (i == 0)
	{
		printf("Please insert the uSD card") ;
		while (i = 0)
		{
			printf(".") ;
			i = media_Init() ;
		}
	}

	printf("First RAW sector=%d\n", rawbase) ;
	trymount() ;

	handle = file_Open("gfx2demo.gci", 'r') ;
	file_Seek(handle, 0x49, 0x5800) ;   // location of large unicorn file
	i = 128 * 128 * 13 * 2 + 8 ;     // size of large unicorn file
	l = (i / 512) + 1 ;
	// we assume here that the raw partition is big enough to write this, could
	k = rawbase ;
	m = 1 ;
	while (i != 0)
	{
		printf("Copying sector %d of %d\r", m, l) ;
		j = min(512, i) ;
		file_Read(sector, j, handle) ;
		media_SetSector(k >> 16, k & 0xFFFF) ;
		k++ ;
		media_WrSector(sector) ;
		i -= j ;
		m++ ;
	}
	file_Close(handle) ;
	media_SetSector(rawbase >> 16, rawbase & 0xFFFF) ;
	media_Image(0,0) ;
	media_SetSector(rawbase >> 16, rawbase & 0xFFFF) ;
	media_Video(0,128) ;

	media_SetSector(rawbase >> 16, rawbase & 0xFFFF) ;
	media_WriteByte(0x11) ;
	media_WriteWord(0x2233) ;
	media_Flush() ;            // should write 0xFF over the rest of the sector
	media_SetSector(rawbase >> 16, rawbase & 0xFFFF) ;
	printf("\n%2.2x %4.4x %4.4x\n",media_ReadByte(), media_ReadWord(), media_ReadWord());
}
void gfx_Part1(void)
{
	int i ;
	gfx_BGcolour(LIGHTGOLD) ;           // to check CLS works with different bg color
	gfx_Cls() ;
	txt_BGcolour(LIGHTGOLD) ;           // to ensure text goesn look odd
	txt_FGcolour(RED) ;
	putstr("gfx_A to gfx_L") ;
	printf("gfx_A to gfx_L\n") ;
	txt_FGcolour(LIME) ;            // reset
	gfx_BevelShadow(1) ;                // make it really dark
	gfx_BevelWidth(6) ;                 // make the button bigger by increasing the bevel size
	for (i = 1; i <= 10; i++)
	{
		gfx_Button(ON, 120,50, YELLOW, PURPLE, FONT3, 1, 1, "Test Button") ;
		sleep(100) ;
		gfx_Button(OFF, 120,50, YELLOW, PURPLE, FONT3, 1, 1, "Test Button") ;
		sleep(100) ;
	}
	gfx_BevelShadow(3) ; // back to default
	gfx_ChangeColour(LIME, WHITE) ;
	gfx_Circle(30,30,10,BLUE) ;
	gfx_CircleFilled(130,30,10,BLUE) ;
	gfx_Rectangle(60,60,100,100,RED) ;  // draw a rectange to show where we are clipping
	gfx_ClipWindow(60,60,100,100) ;
	gfx_Clipping(ON) ;                  // turn clipping on but just use it for text
	gfx_MoveTo(40,80) ;
	putstr("1234567890asdfghjkl") ;     // this is clipped
	gfx_Clipping(OFF) ;
	sleep(1000) ;
	printf("Display off\n") ;
	gfx_Contrast(0) ;
	sleep(1000) ;
	gfx_Contrast(1) ;
	printf("Display on\n") ;
	gfx_Ellipse(100,230, 50,30,RED) ;
	gfx_EllipseFilled(100,300, 50,30,AQUA) ;
	gfx_FrameDelay(6) ;
	printf("X Res= %d  Y Res= %d\n",gfx_Get(X_MAX)+1, gfx_Get(Y_MAX)+1) ;
	printf("Pixel at 0,30 is %4.4x\n", gfx_GetPixel(0, 30)) ;
	gfx_Line(0,0,100,200,BLUE) ;
	gfx_LinePattern(0x00aa) ;
	gfx_Set(OBJECT_COLOUR, WHITE);
	gfx_LineTo(239,319) ;
	gfx_LinePattern(0) ;            // reser
	gfx_BGcolour(BLACK) ;           // reset
	txt_BGcolour(BLACK) ;           // reset
}
void Sound_Tests(void)
{
	int i ;
	int j ;
	gfx_Cls() ;
	printf("Sound Tests\n") ;
	putstr("Sound Tests") ;
	snd_Volume(127) ;
	snd_BufSize(2) ;
	printf("Playing\n") ;
	file_PlayWAV(soundtest) ;
	sleep(10000) ;
	printf("Pausing\n") ;
	snd_Pause() ;
	sleep(5000) ;
	printf("Continuing\n") ;
	snd_Continue() ;
	sleep(5000) ;
	printf("Playing with pitch\n") ;
	i = snd_Pitch(0xFFFF) ;
	printf("Original Pitch=%d\n",i) ;
	sleep(5000) ;
	snd_Pitch(trunc(i*2 /*one octave, 1.0594631 one semitone*/)) ;
	sleep(5000) ;
	snd_Pitch(trunc(i/2)) ;
	sleep(5000) ;
	snd_Pitch(i) ;
	sleep(5000) ;
	for (j = 1; j <= 5; j++)
	{
		i = snd_Playing() ;
		printf("Blocks remaining=%d\r ",i) ;
		sleep(2000) ;
	}
	printf("\n") ;
	for (i = 127; i >= 8; i--)
	{
		snd_Volume(i) ; // 8 to 127 ;
		printf("Volume=%d\r ",i) ;
		sleep(100) ;
	}
	printf("\nStopping\n") ;
	snd_Stop() ;
}
void text_Tests(void)
{
	gfx_Cls() ;
	printf("Text Tests\n") ;
	putstr("Text Tests") ;

	txt_Attributes(BOLD + INVERSE + ITALIC + UNDERLINED) ;
	txt_Xgap(3) ;
	txt_Ygap(3) ;
	txt_BGcolour(YELLOW) ;
	txt_FGcolour(WHITE) ;
	txt_FontID(FONT3) ;
	txt_MoveCursor(5, 0) ;
	putstr("Hello There") ;

	txt_MoveCursor(6, 2) ;
	txt_Height(2) ;
	txt_Width(2) ;
	txt_Inverse(OFF) ;
	txt_Italic(OFF) ;
	txt_Opacity(TRANSPARENT) ;
	txt_Set(TEXT_COLOUR, LIME) ;
	txt_Underline(ON) ;
	txt_Bold(OFF) ;
	txt_Wrap(88) ;
	putstr("Hello There") ;
	txt_Height(1) ;
	txt_Width(1) ;
	putCH('z') ;
	txt_Wrap(0) ;              // reset
	printf("Char height= %d Width= %d\n", charheight('w'), charwidth('w') ) ;
	txt_BGcolour(BLACK) ;
	txt_FGcolour(LIME) ;
	txt_FontID(FONT3) ;
	txt_MoveCursor(0,0) ;      // reset
}
int main(int argc,char *argv[])
{
	int comspeed ;
	int i, rc ;
	char comport[20] ;
	char wks[20] ;
	TimeLimit4D   = 2000 ; // 2 second timeout on all commands
	Callback4D = Callback ; // NULL ;
 //	Error_Abort4D = TRUE ; // abort on detected 4D Serial error
	if (argc == 1) {
		/* If no arguments we call the Usage routine and exit */
		Usage(argv[0]);
		return 1;
	}
    strcpy(comport, argv[1] ) ;
    strupr(comport) ;
	if (argc <= 2)
		comspeed = BAUD_9600 ;
	else
	{
		for (i = 0; i < maxrates; i++)
		{
			itoa(baudrates[i], wks, 10) ;
			if (!strcmp(wks,argv[2]))
				break ;
		}
		if (i == maxrates)
		{
			printf("Invalid baud rate %s",argv[2]) ;
			return 1;
		}
	    comspeed = i ;
	}
//	printf("%s %d\n", comport, comspeed) ;
	rc = OpenComm(comport, comspeed) ;
 	if (rc != 0)
  	{
    	printf("Error %d Opening %s", /*syserrormessage(*/rc/*)*/, comport) ;
    	return 2 ;
	}

	gfx_Cls() ;
	fFATtests   = trymount() ;
	fmediatests = FALSE ;
	fimgtests   = FALSE ;
	ftouchtests = FALSE ;
	floadtests  = FALSE ;
	fsoundtests = FALSE ;
	sys_GetModel(wks) ; // length is also returned, but we don't need that here
	printf("Display model: %s\n", wks) ;
	putstr("Display model: ") ;
    putstr(wks) ;
	i = strlen(wks) ;
	if (   (wks[i] == 'T')
	    || (wks[i-1] == 'T') )
		ftouchtests = TRUE ;
	printf("SPE2 Version: %4.4x\n", sys_GetVersion()) ;
	printf("PmmC Version: %4.4x\n", sys_GetPmmC()) ;
	if (fFATtests)
	{
		if (RAWPartitionbase(&rawbase))
			fmediatests = TRUE ;
		if (   (file_Exists(gfx2demodat) != 0)
		    && (file_Exists(gfx2demogci) != 0) )
			fimgtests = TRUE ;
		if (   (file_Exists(functest) != 0)
		    && (file_Exists(functestg) != 0)
		    && (file_Exists(functestd) != 0) )
			floadtests = TRUE ;
		if (file_Exists(soundtest))
			fsoundtests = TRUE ;
	}
	if (fFATtests)
	{
		printf("FAT Tests will be done\n") ;
		if (fmediatests)
		{
			if (file_Exists(gfx2demogci))
		  		printf("Media tests will be done\n") ;
		  	else
			{
		    printf("Media tests cannot be done, missing %s\n", gfx2demogci) ;
		    fmediatests = FALSE ;
		    }
		}
		else
		   printf("Media tests cannot be done, no RAW Partition\n") ;
		if (fimgtests)
			printf("Image tests will be done\n") ;
		else
			printf("Image tests will not be done, missing %s or %s\n", gfx2demogci, gfx2demodat) ;
		if (floadtests)
			printf("Load tests will be done\n") ;
		else
			printf("Load tests will not be done, missing %s or %s or %s",functest, functestg, functestd) ;
		if (fsoundtests)
			printf("Sound tests will be done\n") ;
		else
		    printf("Sound tests will not be done, missing %s\n", soundtest) ;
	}
	else
	{
		printf("FAT Tests cannot be done, either no uSD card or no FAT partition\n") ;
		printf("Neither will Media, Image, Load or Sound Tests\n") ;
	}
	if (ftouchtests)
		printf("Touch Tests will be done\n") ;
	else
		printf("Touch Tests will not be done, display doesn't appear capable\n") ;

	sleep(5000) ;

	gfx_Part1() ; // GFX Part 1 tests
	sleep(5000) ;

	gfx_Part2() ; // GFX Part 2 tests
	sleep(5000) ;

	text_Tests() ; // text tests
	sleep(5000) ;

	if (fFATtests)
	{
		FAT_Tests() ;
		sleep(5000) ;
	}

	if (fimgtests)
	{
		IMG_Tests() ;
		sleep(5000) ;
	}

	if (fmediatests)
	{
		Media_Tests() ;
		sleep(5000) ;
	}

	if (floadtests)
	{
		Function_Tests() ;
		sleep(5000) ;
	}

	if (ftouchtests)
	{
		Touch_Tests() ;
		sleep(5000) ;
	}

	if (fsoundtests)
	{
		Sound_Tests() ;
		sleep(5000) ;
	}

	setbaudWait(BAUD_115200) ;
	putstr("Hello at 115200\n") ;
	setbaudWait(BAUD_9600) ;
	putstr("Back to 9600\n") ;

	return 0;
}
void IMG_Tests(void)
{
	WORD handle ;
	int i ;
	int j ;
	int k ;
	gfx_Cls() ;
	txt_MoveCursor(0, 5) ;
	putstr("IMG Tests") ;
	printf("IMG Tests") ;
	handle = file_LoadImageControl("gfx2demo.dat", "gfx2demo.gci", 1) ;
	printf("%d\n", handle) ;
	for (i = 0; i <= 4; i++)  // 4 is "default", same as no dark/light ening
	{
		gfx_BevelShadow(i) ;
		img_Darken(handle, 0) ; // bug, darkens atm
		img_Show(handle, 0) ;
		sleep(250) ;
	}
	for (i = 3; i >= 0; i--)
	{
		gfx_BevelShadow(i) ;
		img_Lighten(handle, 0) ;
		img_Show(handle, 0) ;
		sleep(250) ;
	}
	gfx_BevelShadow(3) ; // back to default

	img_SetPosition(handle, 0, 0, 50) ; // move to a different position
	img_Show(handle, 0) ;

	j = img_GetWord(handle, 0, IMAGE_FRAMES) ;
	for (i = 0; i < j; i++)
	{
		img_SetWord(handle, 0, IMAGE_INDEX, i) ;
		img_Show(handle, 0) ;
		sleep(500) ;
	}

	img_Disable(handle, ALL) ;
	j = 0 ;
	k = 0 ;
	for (i = 36; i <= 39; i++)
	{
		img_SetPosition(handle, i, j, k) ; // move to a different position
		if (j == 119)
		{
			k = 149 ;
			j = 0 ;
		}
		else
			j = 119 ;
		img_Enable(handle, i) ;
	}
	img_Show(handle,ALL) ;
	//  img_ClearAttributes(handle, index, value) ;
	//  img_SetAttributes(handle, index, value) ;
	if (ftouchtests)
	{
		touch_Set(TOUCH_ENABLE) ;
		printf("Please Touch an Image\n") ;
		i = -1 ;
		do
		{
			j = touch_Get(TOUCH_STATUS) ;
			if (j == TOUCH_PRESSED)
				i = img_Touched(handle, ALL) ;
		} while (i == -1) ;
		printf("You touched Image Index %d\n", i) ;
	}
	mem_Free(handle) ;
}
void FAT_Tests(void)
{
	int i ;
	int j ;
	int k , handle;
	WORD w1, w2 ;
	unsigned char wks[255] ;
	unsigned char bytes[20] ;
	datar data ;
	gfx_Cls() ;
	printf("FAT Tests\n") ;
	putstr("FAT Tests\n") ;
	printf("File Error= %d\n", file_Error()) ;
	printf("uSD has %d Files\n", file_Count("*.*")) ;
	file_Dir("*.dat") ;     // should this get returned!? FindFirst and next certainly should, both need to be manual as they need "to(buffer)"

	if (file_Exists(testdat))
		file_Erase(testdat) ;
	handle = file_Open(testdat, 'w') ;
	printf("Handle= %d\n",handle) ;
	// write some stuff to uSD
	file_PutC('a', handle) ;
	file_PutW(1234, handle) ;
	file_PutS("This is a Test", handle) ;
	file_Close(handle) ;

	handle = file_Open(testdat, 'r') ;
	printf("Handle= %d\n",handle) ;
	// read it back and dump to screen
	printf("%c\n",file_GetC(handle)) ;
	printf("%d\n",file_GetW(handle)) ;
	i = file_GetS(wks, 100, handle) ;
	printf("Length=%d, String=""%s""\n", i, wks) ;

	file_Rewind(handle) ;
	i = file_Read(bytes, 10, handle) ;
	printf("Bytes read= %d Data=", i) ;
	for (j = 0; j <= i-1; j++)
		printf("%2.2x ", bytes[j]) ;
	i = file_Tell(handle, &w1, &w2) ;
	printf("\nFile pointer= %d\n", (w1 << 16) + w2) ;
	i = file_Size(handle, &w1, &w2) ;
	printf("File size=%d\n", (w1 << 16) + w2) ;

	file_Close(handle) ;
	file_Erase(testdat) ;

	handle = file_Open(testdat, 'w') ;
	printf("Handle=%d\n",handle) ;
	for(i = 1; i <= 50; i++)
	{
		data.recnum = i ;
		k = i % 20 ;
		for (j = 0; j <= 4; j++)
		{
			data.values[j] = atoz[k+j] ;
			data.idx = atoz[rand() % 27] ;
		}
		file_Write(sizeof(data), &data, handle) ;
	}
	file_Close(handle) ;
	handle = file_Open(testdat, 'r') ;
	file_Index(handle, sizeof(data) >> 16, sizeof(data) & 0xFFFF, 5) ;
	i = file_Read(&data, sizeof(data), handle) ;
	printf("%d %c %c %c %c %c %c\n", data.recnum, data.values[0],data.values[1],data.values[2],data.values[3],data.values[4], data.idx) ;
	file_Seek(handle, 0, 10*sizeof(data)) ;
	i = file_Read(&data, sizeof(data), handle) ;
	printf("%d %c %c %c %c %c %c\n", data.recnum, data.values[0],data.values[1],data.values[2],data.values[3],data.values[4], data.idx) ;
	file_Close(handle) ;
	file_Erase(testdat) ;


	file_FindFirstRet("*.dat", wks) ;
	printf(wks) ;
	printf("\n") ;
	file_FindNextRet(wks) ;
	printf(wks) ;
	printf("\n") ;

	handle = file_Open(testdat, 'w') ;
	printf("Handle=%d\n",handle) ;
	i = sizeof(Image) ;
	k = 0 ;
	while (i != 0)
	{
		j = min(512, i) ;
		file_Write(j, &Image[k], handle) ;
		i -= j ;
		k += j ;
	}
	file_Close(handle) ;
	gfx_Cls() ;
	handle = file_Open(testdat, 'r') ;
	file_Image(0,0,handle) ;
	file_Close(handle) ;
	gfx_MoveTo(40,10) ;
	putstr("4D Logo") ;

	file_Erase(testdat) ;
	handle = file_Open(testdat, 'w') ;
	printf("Handle=%d", handle) ;
	file_ScreenCapture(0,0,100,32, handle) ;
	file_Close(handle) ;

	handle = file_Open(testdat, 'r') ;
	file_Image(0,40,handle) ;
	file_Rewind(handle) ;
	file_Image(0,80,handle) ;
	file_Rewind(handle) ;
	file_Image(0,120,handle) ;
	file_Close(handle) ;
	file_Erase(testdat) ;
}
Example #10
0
void gfx_Part2(void)
{
	int i ;
	int k ;
	int l ;
	WORD orbitx ;
	WORD orbity ;
	WORD vx[20] ;    // : array[0..19] of word ;
	WORD vy[20] ; //     : array[0..19] of word ;
	gfx_Cls() ;
	putstr("gfx_M to gfx_T") ;
	printf("gfx_M to gfx_T") ;
	k = 180 ;
	l = 80 ;
	gfx_MoveTo(k, l);
	gfx_CircleFilled(k,l,5,BLUE) ;
	i = -90;   // 12 o'clock position
	while (i<270)
	{
		gfx_Orbit(i, 30, &orbitx, &orbity);
		k = 3;
		if ((i % 90) == 0 )
			k = 5;
		gfx_Circle(orbitx , orbity, k, BLUE);
		i += 30;   // each 30 degreees
	}

	gfx_OutlineColour(YELLOW) ;
	gfx_Panel(PANEL_RAISED,140,0,190,20, LIME) ;
	gfx_OutlineColour(0) ;                    // turn outline off

	vx[0] = 36;   vy[0] = 110;
	vx[1] = 36;   vy[1] = 80;
	vx[2] = 50;   vy[2] = 80;
	vx[3] = 50;   vy[3] = 110;
	vx[4] = 76;   vy[4] = 104;
	vx[5] = 85;   vy[5] = 80;
	vx[6] = 94;   vy[6] = 104;
	vx[7] = 76;   vy[7] = 70;
	vx[8] = 85;   vy[8] = 76;
	vx[9] = 94;   vy[9] = 70;
	vx[10] = 110; vy[10] = 66;
	vx[11] = 110; vy[11] = 80;
	vx[12] = 100; vy[12] = 90;
	vx[13] = 120; vy[13] = 90;
	vx[14] = 110; vy[14] = 80;
	vx[15] = 101; vy[15] = 70;
	vx[16] = 110; vy[16] = 76;
	vx[17] = 119; vy[17] = 70;
	// house
	gfx_Rectangle(6,50,66,110,RED);             // frame
	gfx_Triangle(6,50,36,9,66,50,YELLOW);       // roof
	gfx_Polyline(4, vx, vy, CYAN);            // door
	// man
	gfx_Circle(85, 56, 10, BLUE);               // head
	gfx_Line(85, 66, 85, 80, BLUE);             // body
	gfx_Polyline(3, &vx[4], &vy[4], CYAN);      // legs
	gfx_Polyline(3, &vx[7], &vy[7], BLUE);      // arms
	// woman
	gfx_Circle(110, 56, 10, PINK);              // head
	gfx_Polyline(5, &vx[10], &vy[10], BROWN);   // dress
	gfx_Line(104, 104, 106, 90, PINK);          // left arm
	gfx_Line(112, 90, 116, 104, PINK);          // right arm
	gfx_Polyline(3, &vx[15], &vy[15], SALMON);  // dress

	vx[0] = 10; vy[0] = 130;
	vx[1] = 35; vy[1] = 125;
	vx[2] = 80; vy[2] = 130;
	vx[3] = 60; vy[3] = 145;
	vx[4] = 80; vy[4] = 160;
	vx[5] = 35; vy[5] = 170;
	vx[6] = 10; vy[6] = 160;
	gfx_Polygon(7, vx, vy, RED);

	vx[0] = 110; vy[0] = 130;
	vx[1] = 135; vy[1] = 125;
	vx[2] = 180; vy[2] = 130;
	vx[3] = 160; vy[3] = 145;
	vx[4] = 180; vy[4] = 160;
	vx[5] = 135; vy[5] = 170;
	vx[6] = 110; vy[6] = 160;
	gfx_PolygonFilled(7, vx, vy, RED);

	gfx_PutPixel(40, 94, LIME) ;          // door knob
	gfx_Rectangle(0,180, 10,200, AQUA) ;
	gfx_RectangleFilled(20,180, 40,200, ORANGE) ;
	gfx_ScreenCopyPaste(0,0, 0,280, 40,40) ;
	gfx_ScreenMode(LANDSCAPE) ;
	//gfx_Set(CLIPPING, ON) ;
	//gfx_SetClipRegion() ;
	gfx_Slider(SLIDER_RAISED, 210, 100, 250,10, BLUE, 100, 50) ; // coordinates are different because we are in landscape mode
	gfx_ScreenMode(PORTRAIT) ;
	gfx_Transparency(ON) ;
	gfx_TransparentColour(YELLOW) ;  // how do we 'test' this?
	gfx_Triangle(6,250, 36,209, 66,250,YELLOW);
	gfx_TriangleFilled(110,210, 130,210, 120,230,CYAN);
}
Example #11
0
void Function_Tests (void)
{
	int i, j ;
	int k ;
	int l ;
	int m ;
	WORD handle, h1, h2 ;
	WORD parms[20];
	unsigned char wks1[255] ;
	unsigned char wks2[255] ;
	unsigned char wks3[255] ;
	gfx_Cls() ;
	putstr("file_Run, file_Exec and\nfile_LoadFunction Tests") ;
	printf("file_Run, file_Exec and file_LoadFunction Tests\n") ;
	j = mem_Heap() ;
	handle = file_LoadFunction(functest) ;
	h1 = writeString(0,  "Please enter your name") ;   // prompts string
	h2 = writeString(h1, "") ;                         // result string, must be max length if following strings are to be 'kept'
	printf("String Handles %d %d\n", h1, h2) ;
	parms[0] = h1 ;                  // prompt string
	parms[1] = h2 ;                  // result string
	parms[2] = 20 ;
	parms[3] = 1 ;                   // 1 = save screen, 0 = don't save screen
	TimeLimit4D = 5000000 ;
	i = file_CallFunction(handle, 4, parms) ;         // calls a function
	printf("You typed %d characters", i) ;
	readString(h2, wks1) ;                              // read string immediately as it will be overwritten 'soon'
	printf(">%s<\n", wks1) ;
	k = mem_Heap() ;
	mem_Free(handle) ;
	l = mem_Heap() ;
	sleep(5000) ;                                       // give time to read the 'restored' screen

	h1 = writeString(0,  "Please type anything") ;     // prompts string
	h2 = writeString(h1, "") ;                         // result string, must be max length if following strings are to be 'kept'
	parms[0] = h1 ;                  // prompt string
	parms[1] = h2 ;                  // result string
	parms[2] = 20 ;
	parms[3] = 0 ;                   // 1 = save screen, 0 = don't save screen
	i = file_Exec(functest, 4, parms) ;
	readString(h2, wks2) ;                              // read string immediately as it will be overwritten 'soon'
	gfx_Cls() ;

	h1 = writeString(0,  "Please some more") ;         // prompts string
	h2 = writeString(h1, "") ;                         // result string, must be max length if following strings are to be 'kept'
	parms[0] = h1 ;                  // prompt string
	parms[1] = h2 ;                  // result string
	parms[2] = 20 ;
	parms[3] = 0 ;                   // 1 = save screen, 0 = don't save screen
	i = file_Run(functest, 4, parms) ;
	readString(h2, wks3) ;                              // read string immediately as it will be overwritten 'soon'
	gfx_Cls() ;
	m = mem_Heap() ;
	printf("Memfree before loadfunction = %d\n", j) ;
	printf("Memfree after loadfunction = %d\n", k) ;
	printf("Memfree after free = %d\n", l) ;
	printf("Memfree at end = %d\n", m) ;
	printf("You typed\n") ;
	printf(wks1) ;
	printf("\n") ;
	printf(wks2) ;
	printf("\n") ;
	printf(wks3) ;
	printf("\n") ;
	TimeLimit4D = 2000 ;
}
int main() 
{
    int rc;
    int firstx ;
    int firsty ;
    int x ;
    int y ;
    int state ;
    
    TimeLimit4D = 2000;
    Callback4D = errCallback;
    // abort on detected 4D Serial error
    Error_Abort4D = 1 ;
    comspeed = 9600;
    //WORD *x = 0x001A;
    //char *s = sys_GetModel(&x);
    //x  = &0x001A;
    rc = OpenComm(SERIALPORT, comspeed);
    if (rc != 0)
    {
        printf("Error %d Opening: %s - %s\n", errno, SERIALPORT, strerror(errno));
        exit(EXIT_FAILURE);
    }

	gfx_Cls() ;
	putStr("Touch Tests\n") ;
	printf("Touch Tests.\n") ;
	putStr("Please ensure Touch is only\ndetected in the Blue area") ;
	printf("Detecting touch in Region\n") ;
	touch_Set(TOUCH_ENABLE) ;
	touch_DetectRegion(100,100, 200, 200) ;
	gfx_RectangleFilled(100,100, 200, 200, BLUE) ;
	do {} while (touch_Get(TOUCH_STATUS) != TOUCH_PRESSED);
	touch_Set(TOUCH_REGIONDEFAULT) ;
	gfx_Cls() ;
	putStr("Draw.. Drawing stops\nwhen touch released\n") ;
	printf("Drawing\n") ;

	while(touch_Get(TOUCH_STATUS) != TOUCH_PRESSED)
	{      // we"ll wait for a touch
	}
	firstx = touch_Get(TOUCH_GETX);                          // so we can get the first point
	firsty = touch_Get(TOUCH_GETY);
	while(state != TOUCH_RELEASED)
	{
		state = touch_Get(TOUCH_STATUS);                       // look for any touch activity
		x = touch_Get(TOUCH_GETX);                             // grab the x
		y = touch_Get(TOUCH_GETY);                             // and the y coordinates of the touch
		if (state == TOUCH_PRESSED)                               // if there"s a press
		{
			firstx = x;
			firsty = y;
		}
		if (state == TOUCH_MOVING)                                // if there"s movement
		{
			gfx_Line(firstx, firsty, x, y, BLUE);                 // but lines are much better
			firstx = x;
			firsty = y;
		}
	}
	putStr("Done!\n") ;
	touch_Set(TOUCH_DISABLE);
    	
    return (EXIT_SUCCESS);
}