]> git.sur5r.net Git - cc65/blobdiff - samples/tgidemo.c
Added '_' prefix to sin and cos.
[cc65] / samples / tgidemo.c
index 49d4c990510422b9dc367c7b238af4990416c448..de743314e6ac86b12abf7d6f8e8ff287b749ec74 100644 (file)
@@ -8,12 +8,16 @@
 
 
 
-#define COLOR_BACK     COLOR_BLACK
-#define COLOR_FORE     COLOR_WHITE
+#ifndef DYN_DRV
+#  define DYN_DRV       1
+#endif
+
+#define COLOR_BACK      TGI_COLOR_BLACK
+#define COLOR_FORE      TGI_COLOR_WHITE
 
 
 /*****************************************************************************/
-/*                                          Data                                    */
+/*                                   Data                                    */
 /*****************************************************************************/
 
 
 /* Driver stuff */
 static unsigned MaxX;
 static unsigned MaxY;
+static unsigned AspectRatio;
 
 
 
 /*****************************************************************************/
-/*                                          Code                                    */
+/*                                   Code                                    */
 /*****************************************************************************/
 
 
@@ -35,14 +40,18 @@ 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"
@@ -50,14 +59,15 @@ static void DoWarning (void)
     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_ORANGE };
+    static const unsigned char Palette[2] = { TGI_COLOR_WHITE, TGI_COLOR_ORANGE };
     unsigned char I;
     unsigned char Color = COLOR_FORE;
     unsigned X = MaxX / 2;
@@ -70,9 +80,9 @@ static void DoCircles (void)
         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 = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE;
+        Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE;
     }
 
     cgetc ();
@@ -83,7 +93,7 @@ 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;
 
@@ -94,16 +104,16 @@ static void DoCheckerboard (void)
             for (X = 0; X <= MaxX; X += 10) {
                 tgi_setcolor (Color);
                 tgi_bar (X, Y, X+9, Y+9);
-               Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE;
+                Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE;
                 if (kbhit ()) {
                     cgetc ();
                     tgi_clear ();
                     return;
                 }
             }
-           Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE;
+            Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE;
         }
-       Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE;
+        Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE;
     }
 }
 
@@ -111,7 +121,7 @@ static void DoCheckerboard (void)
 
 static void DoDiagram (void)
 {
-    static const unsigned char Palette[2] = { COLOR_WHITE, COLOR_BLACK };
+    static const unsigned char Palette[2] = { TGI_COLOR_WHITE, TGI_COLOR_BLACK };
     int XOrigin, YOrigin;
     int Amp;
     int X, Y;
@@ -141,7 +151,7 @@ static void DoDiagram (void)
 
         /* Calculate the next points */
         X = (int) (((long) (MaxX - 19) * I) / 360);
-        Y = (int) (((long) Amp * -cc65_sin (I)) / 256);
+        Y = (int) (((long) Amp * -_sin (I)) / 256);
 
         /* Draw the line */
         tgi_lineto (XOrigin + X, YOrigin + Y);
@@ -155,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 (COLOR_FORE);
 
-    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);
+    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 ();
@@ -178,12 +188,19 @@ 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_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 ();
@@ -191,6 +208,7 @@ int main (void)
     /* Get stuff from the driver */
     MaxX = tgi_getmaxx ();
     MaxY = tgi_getmaxy ();
+    AspectRatio = tgi_getaspectratio ();
 
     /* Set the palette, set the border color */
     Border = bordercolor (COLOR_BLACK);
@@ -201,8 +219,13 @@ int main (void)
     DoDiagram ();
     DoLines ();
 
+#if DYN_DRV
     /* Unload the driver */
     tgi_unload ();
+#else
+    /* Uninstall the driver */
+    tgi_uninstall ();
+#endif
 
     /* Reset the border */
     (void) bordercolor (Border);