]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/modex/x_demo.c
16_ca needs huge amounts of work and I should remember what needs to be done soon...
[16.git] / src / lib / modex / x_demo.c
diff --git a/src/lib/modex/x_demo.c b/src/lib/modex/x_demo.c
deleted file mode 100755 (executable)
index dfe9a3e..0000000
+++ /dev/null
@@ -1,786 +0,0 @@
-/* X-DEMO.C - a Mode "X" Demo      */\r
-/* By Matt Pritchard, 14 Apr, 1993 */\r
-\r
-#include <stdlib.h>\r
-#include <stdio.h>\r
-\r
-#include "modex.h"\r
-#include "c_utils.h"\r
-\r
-#define MAX_SHAPES  32\r
-#define MAX_SPRITES 64\r
-\r
-       /* routines in this file */\r
-\r
-void demo_res (int, int, int);\r
-int  get_key (void);\r
-void error_out (char*);\r
-void load_shapes (void);\r
-int  int_sqrt (int, int);\r
-void page_demo (void);\r
-\r
-       /* Structures for Sprites */\r
-\r
-struct Shape\r
-{\r
-       unsigned char Image[512];\r
-       int           X_Width;\r
-       int                       Y_Width;\r
-}   Img [MAX_SHAPES];\r
-\r
-struct Sprite\r
-{\r
-       int     X_pos;\r
-       int     Y_pos;\r
-       int X_Dir;\r
-       int Y_Dir;\r
-       int     Shape;\r
-       int     Last_X [2];\r
-       int Last_Y [2];\r
-}   Obj [MAX_SPRITES];\r
-\r
-\r
-       /* MAIN */\r
-\r
-\r
-int main(int argc, char *argv[])\r
-{\r
-\r
-   /*  if (argc > 0)\r
-       {\r
-               while (argc > 0)\r
-               {\r
-                       dos_print ("Unknown Argument: ");\r
-                       dos_print (makefp argv[argc]);\r
-                       argc--;\r
-               }\r
-               return (0);\r
-\r
-       }\r
-        */\r
-\r
-       init_random ();\r
-\r
-       load_shapes ();\r
-\r
-       demo_res ( Mode_320x200, 320, 200 );\r
-       demo_res ( Mode_320x400, 320, 400 );\r
-\r
-       demo_res ( Mode_360x200, 360, 200 );\r
-       demo_res ( Mode_360x400, 360, 400 );\r
-\r
-       demo_res ( Mode_320x240, 320, 240 );\r
-       demo_res ( Mode_320x480, 320, 480 );\r
-\r
-       demo_res ( Mode_360x240, 360, 240 );\r
-       demo_res ( Mode_360x480, 360, 480 );\r
-\r
-       page_demo ();\r
-\r
-       set_video_mode (3);\r
-       dos_print ("This Mode X Demo is Finished");\r
-       return (0);\r
-\r
-}\r
-\r
-\r
-       /* Demonstrate a given resolution */\r
-\r
-\r
-void demo_res (int Screen_Mode, int X_max, int Y_max)\r
-{\r
-\r
-char   *Error1 = "Failure while calling SET_MODEX";\r
-char   *Error2 = "Failure during READ_PIXEL test";\r
-\r
-char   *Abort_Msg = "Demo aborted by User";\r
-\r
-char   *Demo_Msg = " This is a MODE X demo ";\r
-char   *Scrn_Msg = "Screen Resolution is     by    ";\r
-char   *Cont_Msg = "Press <ANY KEY> to Continue";\r
-\r
-char    *Line_Msg = "LINE TEST";\r
-char   *Fill_Msg = "FILL TEST";\r
-char   *Pixel_Msg = "PIXEL TEST";\r
-\r
-char   Text[10];\r
-\r
-int            x1, y1, x2, y2 = 0;\r
-int            x, y, z = 0;\r
-int            X_Center, gap = 0;\r
-\r
-\r
-       if (set_modex (Screen_Mode) == 0)\r
-       {\r
-               error_out (Error1);\r
-       }\r
-\r
-       X_Center = X_max / 2;\r
-\r
-       x1 = 10;\r
-       y1 = 10;\r
-       x2 = X_max - 1;\r
-       y2 = Y_max - 1;\r
-\r
-       for (z = 0; z <= 3; z++)\r
-       {\r
-               y = 31 - z -z;\r
-               draw_line (x1+z, y1+z, x2-z, y1+z, y);\r
-               draw_line (x1+z, y1+z, x1+z, y2-z, y);\r
-               draw_line (x1+z, y2-z, x2-z, y2-z, y);\r
-               draw_line (x2-z, y1+z, x2-z, y2-z, y);\r
-       }\r
-\r
-       for (x = 0; x < (X_max / 10); x++)\r
-       {\r
-               tgprintc (48 + ((x+1) % 10), x*10+1, 1, 9 + ((x/8) % 7) );\r
-               draw_line (x*10+9, 0, x*10+9, 3, c_bWHITE);\r
-       }\r
-\r
-       for (y = 0; y < (Y_max / 10); y++)\r
-       {\r
-               tgprintc (48 + ((y+1) % 10), 1, y*10+1, 9 + ((y/10) % 7) );\r
-               draw_line (0, y*10+9, 3, y*10+9, c_bWHITE);\r
-       }\r
-\r
-       for (x = 0; x <= 63; x++)\r
-       {\r
-               z = 15 + (x * 3 / 4);\r
-               set_dac_register (64+x, z, z, z);\r
-               set_dac_register (128+x, 0, z, z);\r
-\r
-               draw_line (103-x, 60, 40+x, 123, 64+x);\r
-               draw_line (40, 60+x, 103, 123-x, 128+x);\r
-\r
-       }\r
-\r
-       tprint_str (Line_Msg, 9, 37, 130, c_BLUE);\r
-\r
-       y = 60;\r
-       gap = 0;\r
-       for (x = 0; x <= 9; x++)\r
-       {\r
-               fill_block (120, y, 120+x, y+gap, 64+x);\r
-               fill_block (140 - (15-x), y, 150+x, y+gap, 230+x);\r
-               fill_block (170 - (15-x), y, 170, y+gap, 128+x);\r
-               y = y + gap + 2;\r
-               gap++;\r
-       }\r
-\r
-       tprint_str (Fill_Msg, 9, 110, 46, c_GREEN);\r
-\r
-       for (x = 190; x <= 250; x+=2)\r
-       {\r
-               for (y = 60; y <= 122; y+=2)\r
-               {\r
-                       z = (x+x+y+y) & 0xff;\r
-                       set_point (x, y, z);\r
-               }\r
-       }\r
-\r
-       tprint_str (Pixel_Msg, 10, 182, 130, c_RED);\r
-\r
-       for (x = 190; x <= 250; x+=2)\r
-       {\r
-               for (y = 60; y <= 122; y+=2)\r
-               {\r
-                       z = (x+x+y+y) & 0xff;\r
-                       if (read_point(x, y) != z)\r
-                       {\r
-                               error_out (Error2);\r
-                       }\r
-               }\r
-       }\r
-\r
-       print_str (Demo_Msg, 23, X_Center - 92, 20, c_bRED, c_BLUE);\r
-\r
-       x = X_Center - 124;\r
-       print_str (Scrn_Msg, 28, x, 30, c_bGREEN, c_BLACK);\r
-\r
-       sprintf (Text, "%3d", X_max);\r
-       print_str (Text, 3, x+168, 30, c_bPURPLE, c_BLACK);\r
-\r
-       sprintf (Text, "%3d", Y_max);\r
-       print_str (Text, 3, x + 224, 30, c_bWHITE, c_BLACK);\r
-\r
-       for (x = 0; x <= 15; x++)\r
-       {\r
-               set_dac_register (230+x, 63-x*4, 0, 15+x*3);\r
-               draw_line (30+x, Y_max-6-x, X_max-20-x, Y_max-6-x, 230+x);\r
-       }\r
-\r
-       tprint_str (Cont_Msg, 27, X_Center - 103, Y_max-18, c_YELLOW);\r
-\r
-       if (get_key () == Ky_ESC)\r
-       {\r
-               error_out (Abort_Msg);\r
-       }\r
-\r
-       return ;\r
-\r
-}\r
-\r
-\r
-       /* Wait for a Keystroke */\r
-\r
-\r
-int get_key(void)\r
-{\r
-\r
-int    c = 0;\r
-\r
-       while (c == 0)\r
-       {\r
-               c = scan_keyboard ();\r
-       }\r
-\r
-       return (c);\r
-\r
-}\r
-\r
-\r
-       /* Error Handling Routine */\r
-\r
-\r
-void error_out (char * text)\r
-{\r
-\r
-       set_video_mode (3);\r
-       dos_print (text);\r
-       exit (EXIT_SUCCESS);\r
-\r
-}\r
-\r
-\r
-       /* Routine to generate random sprites */\r
-\r
-\r
-void load_shapes ()\r
-{\r
-\r
-unsigned char  Grid[33][33];\r
-\r
-char   *Error1 = "Bad Shape Selected Error";\r
-\r
-int            Shape;\r
-int            x, y, z;\r
-int            Style, Color;\r
-int            X_Width, Y_Width, Center, S_Width;\r
-int            Hollow_X, Hollow_Y;\r
-\r
-       for (Shape = 0; Shape < MAX_SHAPES; Shape++)\r
-       {\r
-               for (y = 0; y <= 32; y++)\r
-               {\r
-                       for (x = 0; x <= 32; x++)\r
-                       {\r
-                               Grid[x][y] = c_BLACK;\r
-                       }\r
-               }\r
-\r
-               Style = random_int (6);\r
-               Color = 1 + random_int (15);\r
-\r
-               switch (Style)\r
-\r
-               {\r
-                               /* SOLID BOXES */\r
-\r
-                       case 0:\r
-\r
-                       {\r
-                               do\r
-                               {\r
-                                       X_Width = 3 + random_int(30);\r
-                                       Y_Width = 3 + random_int(30);\r
-\r
-                               } while ( (X_Width * Y_Width) >= 512);\r
-\r
-                               for (x = 1; x <= X_Width; x++)\r
-                               {\r
-                                       for (y = 1; y <= Y_Width; y++)\r
-                                       {\r
-                                          Grid[x][y] = Color;\r
-                                       }\r
-                               }\r
-\r
-                               break;\r
-\r
-                       }\r
-                               /* HOLLOW BOXES */\r
-\r
-                       case 1:\r
-\r
-                       {\r
-                               do {\r
-                                       X_Width = 6 + random_int(27);\r
-                                       Y_Width = 6 + random_int(27);\r
-                               } while ( (X_Width * Y_Width) >= 512);\r
-\r
-                               for (y = 1; y <= Y_Width; y++)\r
-                               {\r
-                                       for (x = 1; x <= X_Width; x++)\r
-                                       {\r
-                                               Grid[x][y] = Color;\r
-                                       }\r
-                               }\r
-\r
-                               Hollow_X = 1 + random_int ((X_Width / 2) -1);\r
-                               Hollow_Y = 1 + random_int ((Y_Width / 2) -1);\r
-\r
-                               for (y = Hollow_Y+1; y <= Y_Width-Hollow_Y; y++)\r
-                               {\r
-                                       for (x = Hollow_X+1; x <= X_Width-Hollow_X; x++)\r
-                                       {\r
-                                               Grid[x][y] = c_BLACK;\r
-                                       }\r
-                               }\r
-\r
-                               break;\r
-\r
-                       }\r
-\r
-                               /* SOLID DIAMOND */\r
-\r
-                       case 2:\r
-\r
-                       {\r
-\r
-                               X_Width = 3 + 2 * random_int(10);\r
-                               Y_Width = X_Width;\r
-                               Center = X_Width / 2;\r
-\r
-                               for (y = 0; y <= Center; y++)\r
-                               {\r
-                                       for (x = 0; x <= y; x++)\r
-                                       {\r
-                                               Grid [Center-x+1][y+1] = Color;\r
-                                               Grid [Center+x+1][y+1] = Color;\r
-                                               Grid [Center-x+1][Y_Width-y] = Color;\r
-                                               Grid [Center+x+1][Y_Width-y] = Color;\r
-                                       }\r
-                               }\r
-\r
-                               break;\r
-\r
-                       }\r
-\r
-                               /* HOLLOW DIAMOND */\r
-\r
-                       case 3:\r
-\r
-                       {\r
-\r
-                               X_Width = 3 + 2 * random_int(10);\r
-                               Y_Width = X_Width;\r
-                               Center = X_Width / 2;\r
-                               S_Width = random_int (Center);\r
-\r
-                               for (y = 0; y <= Center; y++)\r
-                               {\r
-                                       for (x = 0; x <= y; x++)\r
-                                       {\r
-                                               if ( x+(Center-y) >= S_Width )\r
-                                               {\r
-                                                       Grid [Center-x+1][y+1] = Color;\r
-                                                       Grid [Center+x+1][y+1] = Color;\r
-                                                       Grid [Center-x+1][Y_Width-y] = Color;\r
-                                                       Grid [Center+x+1][Y_Width-y] = Color;\r
-                                               }\r
-                                       }\r
-                               }\r
-\r
-                               break;\r
-\r
-                       }\r
-\r
-                               /* BALL */\r
-\r
-                       case 4:\r
-\r
-                       {\r
-\r
-                               X_Width = 7 + 2 * random_int (8);\r
-                               Y_Width = X_Width;\r
-                               Center  = 1 + X_Width / 2;\r
-\r
-                               for (y = 1; y <= Y_Width; y++)\r
-                               {\r
-                                       for (x = 1; x <= X_Width; x++)\r
-                                       {\r
-                                               z = int_sqrt(Center-x, Center-y);\r
-                                               if (z < Center)\r
-                                               {\r
-                                                       Grid[x][y] = 150 + Color * 2 + z * 3;\r
-                                               }\r
-                                       }\r
-                               }\r
-\r
-                               break;\r
-                       }\r
-\r
-                               /* HOLLOW BALLS */\r
-\r
-                       case 5:\r
-\r
-                       {\r
-                               X_Width = 7 + 2 * random_int (8);\r
-                               Y_Width = X_Width;\r
-                               Center  = 1 + X_Width / 2;\r
-                               S_Width = random_int (X_Width);\r
-\r
-                               for (y = 1; y <= Y_Width; y++)\r
-                               {\r
-                                       for (x = 1; x <= X_Width; x++)\r
-                                       {\r
-                                               z = int_sqrt(Center-x, Center-y);\r
-                                               if ( (z < Center) && (z >= S_Width) )\r
-                                               {\r
-                                                       Grid[x][y] = 150 + Color * 2 + z * 3;\r
-                                               }\r
-                                       }\r
-                               }\r
-\r
-\r
-                               break;\r
-                       }\r
-\r
-                       default:\r
-\r
-                       {\r
-                               error_out (Error1);\r
-                               break;\r
-\r
-                       }\r
-\r
-               }\r
-\r
-               z = 0;\r
-               for (y = 1; y <= Y_Width; y++)\r
-               {\r
-                       for (x = 1; x <= X_Width; x++)\r
-                       {\r
-                               Img[Shape].Image[z] = Grid[x][y];\r
-                               z++;\r
-                       }\r
-               }\r
-\r
-               Img[Shape].X_Width = X_Width;\r
-               Img[Shape].Y_Width = Y_Width;\r
-\r
-       }\r
-\r
-       return;\r
-}\r
-\r
-\r
-       /* Quickie Psuedo Integer Square Root Routine */\r
-\r
-\r
-int int_sqrt ( int x, int y )\r
-{\r
-\r
-int    Sqr_Table[12] = {1, 4, 9, 6, 25, 36, 49, 64, 81, 100, 121, 144};\r
-\r
-int    r, d;\r
-\r
-       d = (x * x) + (y * y);\r
-       r = 0;\r
-\r
-       while ( d >= Sqr_Table[r] )\r
-       {\r
-               r++;\r
-       }\r
-\r
-       return (r);\r
-\r
-}\r
-\r
-\r
-       /* The Bit Sprite Demo */\r
-\r
-\r
-void page_demo ()\r
-{\r
-\r
-char   *Error1 = "Failure during SET_VGA_MODEX (0, 320, 200, 2) call";\r
-\r
-int            Last_Objects[2], Visible_Objects;\r
-\r
-int            Screen_X = 384;\r
-int            Screen_Y = 224;\r
-\r
-int            x, y, z;\r
-int            c, dc;\r
-int            x1, y1, x2, y2;\r
-\r
-int            Sprite_X, Sprite_Y;\r
-int            Current_Page;\r
-int            New_X, New_Y;\r
-\r
-int            View_X, View_Y, View_Max, View_Cnt, View_XD, View_YD;\r
-int            Set_Color, Prev_Color, S_Dir, P_Dir;\r
-\r
-int            Demo_Running = True;\r
-int            redo, code;\r
-\r
-int pee;\r
-pee = set_vga_modex(Mode_320x200, Screen_X, Screen_Y, 3);\r
-       if ( pee > 0)\r
-       {\r
-               set_video_mode (3);\r
-               dos_print (Error1);\r
-               fprintf(stdout, "return value is %d\n", pee);\r
-               //error_out (Error1);\r
-               exit (EXIT_SUCCESS);\r
-       }\r
-\r
-       set_active_page (0);\r
-       clear_vga_screen (c_BLACK);\r
-\r
-       print_str ("This is a Test of the Following Functions:", 99, 10, 9, c_bWHITE, c_BLACK);\r
-\r
-       draw_line (10, 18, 350, 18, c_YELLOW);\r
-       print_str ("SET_ACTIVE_PAGE", 99, 10, 20, c_bBLUE, c_BLACK);\r
-       print_str ("SET_DISPLAY_PAGE", 99, 10, 30, c_GREEN, c_BLACK);\r
-       print_str ("SET_DAC_REGISTER", 99, 10, 40, c_RED, c_BLACK);\r
-       print_str ("CLEAR_VGA_SCREEN", 99, 10, 50, c_CYAN, c_BLACK);\r
-\r
-       print_str ("TDRAW_BITMAP", 99, 10, 60, c_PURPLE, c_BLACK);\r
-       print_str ("COPY_PAGE", 99, 10, 70, c_GREEN, c_BLACK);\r
-       print_str ("COPY_BITMAP", 99, 10, 80, c_CYAN, c_BLACK);\r
-\r
-       print_str ("GPRINTC", 99, 10, 90, c_BLUE, c_BLACK);\r
-       print_str ("TGPRINTC", 99, 10, 100, c_GREEN, c_BLACK);\r
-       print_str ("SET_WINDOW", 99, 10, 110, c_RED, c_BLACK);\r
-\r
-       print_str ("VIRTUAL SCREEN SIZES", 20, 190, 20, c_bBLUE, c_BLACK);\r
-       print_str ("    SMOOTH SCROLLING", 20, 190, 30, c_GREEN, c_BLACK);\r
-       print_str ("    SPRITE ANIMATION", 20, 190, 40, c_CYAN, c_BLACK);\r
-       print_str ("       PAGE FLIPPING", 20, 190, 50, c_RED, c_BLACK);\r
-       print_str ("       COLOR CYCLING", 20, 190, 60, c_PURPLE, c_BLACK);\r
-\r
-       for (x = 0; x <=60; x++)\r
-       {\r
-               set_dac_register (50 + x, 3 + x, 0, 60 - x);\r
-               set_dac_register (150 + x, 3 + x, 0, 60 - x);\r
-       }\r
-\r
-       c = 0;\r
-       dc = 1;\r
-       for (x = 0; x <= (Screen_X / 2); x++)\r
-       {\r
-               draw_line (Screen_X / 2 - 1, Screen_Y / 4, x, Screen_Y - 1, c + 50);\r
-               draw_line (Screen_X / 2, Screen_Y / 4, Screen_X - x - 1, Screen_Y - 1, c + 50);\r
-               c+= dc;\r
-               if ((c == 0) || (c == 60) ) { dc = -dc;}\r
-       }\r
-\r
-       tprint_str ("Press <ANY KEY> to Continue", 99, 72, 190, c_bWHITE);\r
-       tprint_str ("< > = Faster   < > = Slower", 99, 72, 204, c_bGREEN);\r
-       tprint_str ("< > = Fewer Shapes  < > = More Shapes", 99, 32, 218, c_bCYAN);\r
-\r
-       tgprintc (43, 80, 204, c_YELLOW);\r
-       tgprintc (45, 200, 204, c_YELLOW);\r
-\r
-       tgprintc (25, 40, 218, c_YELLOW);\r
-       tgprintc (24, 200, 218, c_YELLOW);\r
-\r
-       copy_page (0, 1);\r
-       copy_page (0, 2);\r
-\r
-       for (x = 0; x < MAX_SPRITES; x++)\r
-       {\r
-               do {\r
-                       Obj[x].X_Dir = random_int(7) - 3;\r
-                       Obj[x].Y_Dir = random_int(7) - 3;\r
-               } while ( (Obj[x].X_Dir == 0) && (Obj[x].Y_Dir == 0) );\r
-\r
-               Obj[x].Shape = x % MAX_SHAPES;\r
-\r
-               Sprite_X = Img[Obj[x].Shape].X_Width;\r
-               Sprite_Y = Img[Obj[x].Shape].Y_Width;\r
-\r
-               Obj[x].X_pos = 1 + random_int(Screen_X - Sprite_X - 2);\r
-               Obj[x].Y_pos = 1 + random_int(Screen_Y - Sprite_Y - 2);\r
-\r
-               Obj[x].Last_X[0] = Obj[x].X_pos;\r
-               Obj[x].Last_X[1] = Obj[x].X_pos;\r
-               Obj[x].Last_Y[0] = Obj[x].Y_pos;\r
-               Obj[x].Last_Y[1] = Obj[x].Y_pos;\r
-\r
-       }\r
-\r
-       Current_Page = 0;\r
-\r
-       View_X = 0;\r
-       View_Y = 0;\r
-       View_Max = 3;\r
-       View_Cnt = 0;\r
-       View_XD = 1;\r
-       View_YD = 1;\r
-\r
-       Set_Color = 3;\r
-       S_Dir = 1;\r
-       Prev_Color = 0;\r
-       P_Dir = 1;\r
-\r
-       Visible_Objects = MAX_SPRITES / 2;\r
-       Last_Objects[0] = 0;\r
-       Last_Objects[1] = 0;\r
-\r
-       while (Demo_Running)\r
-       {\r
-\r
-               set_active_page (Current_Page);\r
-\r
-                       /* Erase Old Images */\r
-\r
-               for (x = 0; x <= Last_Objects[Current_Page]; x++)\r
-               {\r
-                       z = 2;\r
-                       y = Obj[x].Shape;\r
-                       x1 = Obj[x].Last_X[Current_Page];\r
-                       y1 = Obj[x].Last_Y[Current_Page];\r
-                       x2 = x1 + Img[y].X_Width -1;\r
-                       y2 = y1 + Img[y].Y_Width -1;\r
-\r
-                       x1 = x1 & 0xfffc;\r
-                       x2 = x2 | 0x0003;\r
-\r
-                       copy_bitmap (z, x1, y1, x2, y2, Current_Page, x1, y1);\r
-               }\r
-\r
-                       /* Draw new images */\r
-\r
-               for (x = 0; x <= Visible_Objects; x++)\r
-               {\r
-                       Sprite_X = Img[Obj[x].Shape].X_Width;\r
-                       Sprite_Y = Img[Obj[x].Shape].Y_Width;\r
-\r
-                       /*  Move Sprite */\r
-\r
-                       do\r
-                       {\r
-                               redo = False;\r
-                               New_X = Obj[x].X_pos + Obj[x].X_Dir;\r
-\r
-                               if (( New_X < 0 ) || (New_X + Sprite_X > Screen_X) )\r
-                               {\r
-                                       Obj[x].X_Dir = -Obj[x].X_Dir;\r
-                                       if (random_int(20) == 1)\r
-                                       {\r
-                                               do\r
-                                               {\r
-                                                       Obj[x].X_Dir = random_int(7) - 3;\r
-                                                       Obj[x].Y_Dir = random_int(7) - 3;\r
-                                               } while ( (Obj[x].X_Dir == 0) && (Obj[x].Y_Dir == 0) );\r
-                                               redo = True;\r
-                                       }\r
-                               }\r
-                       } while (redo);\r
-                       Obj[x].X_pos = Obj[x].X_pos + Obj[x].X_Dir;\r
-\r
-\r
-                       do\r
-                       {\r
-                               redo = False;\r
-                               New_Y = Obj[x].Y_pos + Obj[x].Y_Dir;\r
-\r
-                               if ( (New_Y < 0) || (New_Y + Sprite_Y > Screen_Y) )\r
-                               {\r
-                                       Obj[x].Y_Dir = -Obj[x].Y_Dir;\r
-                                       if (random_int(20) == 1)\r
-                                       {\r
-                                               do\r
-                                               {\r
-                                                       Obj[x].X_Dir = random_int(7) - 3;\r
-                                                       Obj[x].Y_Dir = random_int(7) - 3;\r
-                                               } while ( (Obj[x].X_Dir == 0) && (Obj[x].Y_Dir == 0) );\r
-                                               redo = True;\r
-                                       }\r
-                               }\r
-                       } while (redo);\r
-\r
-                       Obj[x].Y_pos = Obj[x].Y_pos + Obj[x].Y_Dir;\r
-\r
-                       /* Draw Sprite */\r
-\r
-                       tdraw_bitmap ((char far*) &Img[Obj[x].Shape], Obj[x].X_pos, Obj[x].Y_pos, Sprite_X, Sprite_Y);\r
-\r
-                       Obj[x].Last_X[Current_Page] = Obj[x].X_pos;\r
-                       Obj[x].Last_Y[Current_Page] = Obj[x].Y_pos;\r
-\r
-               }\r
-\r
-               Last_Objects[Current_Page] = Visible_Objects;\r
-\r
-\r
-               /* Pan Screen Back & Forth */\r
-\r
-               View_Cnt++;\r
-               if (View_Cnt >= View_Max)\r
-               {\r
-                       View_X+= View_XD;\r
-                       if ( (View_X == 0) || (View_X == 39) ) {View_XD = -View_XD;}\r
-                       if (View_XD < 0)\r
-                       {\r
-                               View_Y+= View_YD;\r
-                               if ( (View_Y == 0) || (View_Y == 39) ) {View_YD = -View_YD;}\r
-                       }\r
-\r
-                       set_window (Current_Page, View_X, View_Y);\r
-\r
-                       View_Cnt = 0;\r
-               }\r
-               else\r
-               {\r
-                       set_display_page (Current_Page);\r
-               }\r
-\r
-               /* Cycle Colors */\r
-\r
-               set_dac_register (50 + Prev_Color, 3 + Prev_Color, 0, 60 - Prev_Color);\r
-               set_dac_register (50 + Set_Color, Set_Color, 10, 63 - Set_Color);\r
-\r
-               set_dac_register (150 + Prev_Color, 3 + Prev_Color, 0, 60 - Prev_Color);\r
-               set_dac_register (150 + Set_Color, 63, 63, Set_Color);\r
-\r
-               Set_Color+= S_Dir;\r
-               if ( (Set_Color == 60) || (Set_Color == 0) ) {S_Dir = -S_Dir;}\r
-\r
-               Prev_Color+= P_Dir;\r
-               if ( (Prev_Color == 60) || (Prev_Color == 0) ) {P_Dir = -P_Dir;}\r
-\r
-               /* Check for Keystroke */\r
-\r
-               Current_Page = Current_Page ^ 0x01;\r
-\r
-               code = scan_keyboard ();\r
-\r
-               if (code == Ky_ESC) {Demo_Running = False;}\r
-\r
-               if (code == Ky_Plus)\r
-               {\r
-                       if (View_Max < 12) {View_Max++;}\r
-               }\r
-\r
-               if (code == Ky_Minus)\r
-               {\r
-                       if (View_Max > 1) {View_Max--;}\r
-                       if (View_Cnt >= View_Max) {View_Cnt = 0;}\r
-               }\r
-\r
-               if (code == Ky_Up)\r
-               {\r
-                       if (Visible_Objects < MAX_SPRITES-1) {Visible_Objects++;}\r
-               }\r
-\r
-               if (code == Ky_Down)\r
-               {\r
-                       if (Visible_Objects > 0) {Visible_Objects--;}\r
-               }\r
-\r
-       }\r
-\r
-}\r