X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=samples%2Ftgidemo.c;h=1d76fee2e3974d6815e6f2fb60542127d6e7bef2;hb=60e40c854cc6d7d8d181a66714b8f7b8bfb58e0e;hp=2a603dd1d9bb70823ec35355372ba268ed4c1032;hpb=f174cda3d006142fdb1b39cf89b108fc2ca01e6a;p=cc65 diff --git a/samples/tgidemo.c b/samples/tgidemo.c index 2a603dd1d..1d76fee2e 100644 --- a/samples/tgidemo.c +++ b/samples/tgidemo.c @@ -1,62 +1,36 @@ #include #include +#include #include +#include #include #include +#ifndef DYN_DRV +# define DYN_DRV 1 +#endif + +#define COLOR_BACK TGI_COLOR_BLACK +#define COLOR_FORE TGI_COLOR_WHITE /*****************************************************************************/ -/* Data */ +/* Data */ /*****************************************************************************/ -static const unsigned char SinusTable[] = { - 0x64,0x63,0x61,0x5F,0x5D,0x5B,0x59,0x57,0x55,0x54, - 0x52,0x50,0x4E,0x4C,0x4A,0x49,0x47,0x45,0x43,0x42, - 0x40,0x3E,0x3C,0x3B,0x39,0x38,0x36,0x34,0x33,0x31, - 0x30,0x2E,0x2D,0x2B,0x2A,0x28,0x27,0x26,0x24,0x23, - 0x22,0x20,0x1F,0x1E,0x1D,0x1C,0x1B,0x1A,0x19,0x18, - 0x17,0x16,0x15,0x14,0x13,0x12,0x12,0x11,0x10,0x10, - 0x0F,0x0E,0x0E,0x0D,0x0D,0x0C,0x0C,0x0C,0x0B,0x0B, - 0x0B,0x0B,0x0B,0x0B,0x0B,0x0A,0x0B,0x0B,0x0B,0x0B, - 0x0B,0x0B,0x0B,0x0C,0x0C,0x0C,0x0D,0x0D,0x0E,0x0E, - 0x0F,0x10,0x10,0x11,0x12,0x12,0x13,0x14,0x15,0x16, - 0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20, - 0x22,0x23,0x24,0x26,0x27,0x28,0x2A,0x2B,0x2D,0x2E, - 0x30,0x31,0x33,0x34,0x36,0x38,0x39,0x3B,0x3C,0x3E, - 0x40,0x42,0x43,0x45,0x47,0x49,0x4A,0x4C,0x4E,0x50, - 0x52,0x54,0x55,0x57,0x59,0x5B,0x5D,0x5F,0x61,0x63, - 0x64,0x65,0x67,0x69,0x6B,0x6D,0x6F,0x71,0x73,0x74, - 0x76,0x78,0x7A,0x7C,0x7E,0x7F,0x81,0x83,0x85,0x86, - 0x88,0x8A,0x8C,0x8D,0x8F,0x91,0x92,0x94,0x95,0x97, - 0x98,0x9A,0x9B,0x9D,0x9E,0xA0,0xA1,0xA2,0xA4,0xA5, - 0xA6,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0, - 0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB6,0xB7,0xB8,0xB8, - 0xB9,0xBA,0xBA,0xBB,0xBB,0xBC,0xBC,0xBC,0xBD,0xBD, - 0xBD,0xBD,0xBD,0xBD,0xBD,0xBE,0xBD,0xBD,0xBD,0xBD, - 0xBD,0xBD,0xBD,0xBC,0xBC,0xBC,0xBB,0xBB,0xBA,0xBA, - 0xB9,0xB8,0xB8,0xB7,0xB6,0xB6,0xB5,0xB4,0xB3,0xB2, - 0xB1,0xB0,0xAF,0xAE,0xAD,0xAC,0xAB,0xAA,0xA9,0xA8, - 0xA6,0xA5,0xA4,0xA2,0xA1,0xA0,0x9E,0x9D,0x9B,0x9A, - 0x98,0x97,0x95,0x94,0x92,0x91,0x8F,0x8D,0x8C,0x8A, - 0x88,0x86,0x85,0x83,0x81,0x7F,0x7E,0x7C,0x7A,0x78, - 0x76,0x74,0x73,0x71,0x6F,0x6D,0x6B,0x69,0x67,0x65 -}; - - - /* Driver stuff */ -static unsigned XRes; -static unsigned YRes; +static unsigned MaxX; +static unsigned MaxY; +static unsigned AspectRatio; /*****************************************************************************/ -/* Code */ +/* Code */ /*****************************************************************************/ @@ -66,43 +40,49 @@ static void CheckError (const char* S) unsigned char Error = tgi_geterror (); if (Error != TGI_ERR_OK) { printf ("%s: %d\n", S, Error); + if (doesclrscrafterexit ()) { + cgetc (); + } exit (EXIT_FAILURE); } } + +#if DYN_DRV static void DoWarning (void) -/* Warn the user that the TGI driver is needed for this program */ +/* Warn the user that the dynamic TGI driver is needed for this program */ { printf ("Warning: This program needs the TGI\n" "driver on disk! Press 'y' if you have\n" "it - any other key exits.\n"); - if (cgetc () != 'y') { + if (tolower (cgetc ()) != 'y') { exit (EXIT_SUCCESS); } - printf ("Ok. Please wait patiently...\n"); + printf ("OK. Please wait patiently...\n"); } +#endif static void DoCircles (void) { - static const unsigned char Palette[2] = { COLOR_WHITE, COLOR_LIGHTRED }; + static const unsigned char Palette[2] = { TGI_COLOR_WHITE, TGI_COLOR_ORANGE }; unsigned char I; - unsigned char Color = 1; - unsigned X = XRes / 2; - unsigned Y = YRes / 2; + unsigned char Color = COLOR_FORE; + unsigned X = MaxX / 2; + unsigned Y = MaxY / 2; tgi_setpalette (Palette); while (!kbhit ()) { - tgi_setcolor (1); - tgi_line (0, 0, XRes-1, YRes-1); - tgi_line (0, YRes-1, XRes-1, 0); + tgi_setcolor (COLOR_FORE); + tgi_line (0, 0, MaxX, MaxY); + tgi_line (0, MaxY, MaxX, 0); tgi_setcolor (Color); for (I = 10; I < 240; I += 10) { - tgi_circle (X, Y, I); + tgi_ellipse (X, Y, I, tgi_imulround (I, AspectRatio)); } - Color ^= 0x01; + Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE; } cgetc (); @@ -113,27 +93,27 @@ static void DoCircles (void) static void DoCheckerboard (void) { - static const unsigned char Palette[2] = { COLOR_WHITE, COLOR_BLACK }; + static const unsigned char Palette[2] = { TGI_COLOR_WHITE, TGI_COLOR_BLACK }; unsigned X, Y; unsigned char Color; tgi_setpalette (Palette); - Color = 0; + Color = COLOR_BACK; while (1) { - for (Y = 0; Y < YRes; Y += 10) { - for (X = 0; X < XRes; X += 10) { + for (Y = 0; Y <= MaxY; Y += 10) { + for (X = 0; X <= MaxX; X += 10) { tgi_setcolor (Color); tgi_bar (X, Y, X+9, Y+9); - Color ^= 0x01; + Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE; if (kbhit ()) { cgetc (); tgi_clear (); return; } } - Color ^= 0x01; + Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE; } - Color ^= 0x01; + Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE; } } @@ -141,22 +121,40 @@ static void DoCheckerboard (void) static void DoDiagram (void) { - static const unsigned char Palette[2] = { COLOR_WHITE, COLOR_BLACK }; - unsigned X, I; + static const unsigned char Palette[2] = { TGI_COLOR_WHITE, TGI_COLOR_BLACK }; + int XOrigin, YOrigin; + int Amp; + int X, Y; + unsigned I; tgi_setpalette (Palette); - tgi_setcolor (1); - tgi_line (10, 10, 10, YRes-10); - tgi_lineto (XRes-10, YRes-10); - tgi_line (8, 12, 10, 10); - tgi_lineto (12, 12); - tgi_line (XRes-12, YRes-12, XRes-10, YRes-10); - tgi_lineto (XRes-12, YRes-8); - for (I = 0, X = 10; X < XRes-10; ++X) { - tgi_setpixel (X, SinusTable[I]); - if (++I >= sizeof (SinusTable)) { - I = 0; - } + tgi_setcolor (COLOR_FORE); + + /* Determine zero and aplitude */ + YOrigin = MaxY / 2; + XOrigin = 10; + Amp = (MaxY - 19) / 2; + + /* Y axis */ + tgi_line (XOrigin, 10, XOrigin, MaxY-10); + tgi_line (XOrigin-2, 12, XOrigin, 10); + tgi_lineto (XOrigin+2, 12); + + /* X axis */ + tgi_line (XOrigin, YOrigin, MaxX-10, YOrigin); + tgi_line (MaxX-12, YOrigin-2, MaxX-10, YOrigin); + tgi_lineto (MaxX-12, YOrigin+2); + + /* Sine */ + tgi_gotoxy (XOrigin, YOrigin); + for (I = 0; I <= 360; I += 5) { + + /* Calculate the next points */ + X = (int) (((long) (MaxX - 19) * I) / 360); + Y = (int) (((long) Amp * -sin (I)) / 256); + + /* Draw the line */ + tgi_lineto (XOrigin + X, YOrigin + Y); } cgetc (); @@ -167,17 +165,17 @@ static void DoDiagram (void) static void DoLines (void) { - static const unsigned char Palette[2] = { COLOR_WHITE, COLOR_BLACK }; + static const unsigned char Palette[2] = { TGI_COLOR_WHITE, TGI_COLOR_BLACK }; unsigned X; tgi_setpalette (Palette); - tgi_setcolor (1); + tgi_setcolor (COLOR_FORE); - for (X = 0; X < YRes; X+=10) { - tgi_line (0, 0, YRes, X); - tgi_line (0, 0, X, YRes); - tgi_line (YRes, YRes, 0, YRes-X); - tgi_line (YRes, YRes, YRes-X, 0); + for (X = 0; X <= MaxY; X += 10) { + tgi_line (0, 0, MaxY, X); + tgi_line (0, 0, X, MaxY); + tgi_line (MaxY, MaxY, 0, MaxY-X); + tgi_line (MaxY, MaxY, MaxY-X, 0); } cgetc (); @@ -190,18 +188,27 @@ int main (void) { unsigned char Border; +#if DYN_DRV /* Warn the user that the tgi driver is needed */ DoWarning (); /* Load and initialize the driver */ - tgi_load (TGI_MODE_320_200_2); - CheckError ("tgi_load"); + tgi_load_driver (tgi_stddrv); + CheckError ("tgi_load_driver"); +#else + /* Install the driver */ + tgi_install (tgi_static_stddrv); + CheckError ("tgi_install"); +#endif + tgi_init (); CheckError ("tgi_init"); + tgi_clear (); /* Get stuff from the driver */ - XRes = tgi_getxres (); - YRes = tgi_getyres (); + MaxX = tgi_getmaxx (); + MaxY = tgi_getmaxy (); + AspectRatio = tgi_getaspectratio (); /* Set the palette, set the border color */ Border = bordercolor (COLOR_BLACK); @@ -212,15 +219,18 @@ int main (void) DoDiagram (); DoLines (); +#if DYN_DRV /* Unload the driver */ tgi_unload (); +#else + /* Uninstall the driver */ + tgi_uninstall (); +#endif /* Reset the border */ - bordercolor (Border); + (void) bordercolor (Border); /* Done */ printf ("Done\n"); return EXIT_SUCCESS; } - -