/* * The Rubik's cube. * * Sed - april 1999 / december 2003. * * This program is in the public domain. *-------------------- * The main file. */ #include #include #include #include #include #include #include "messages.h" #include "screen.h" #include "cube.h" #include "event.h" #include "device.h" #include "version.h" device d; char *the_screen; double EDGE; char *FONT; int HELP_X; int HELP_Y; int FORMAT = 0; int SCREEN_X; int SCREEN_Y; double CUBE_SIZE; double PERSPECTIVE; /* J.-P. Demailly's coloring way... */ char *palette[11] = { "grey50", /* face X (empty) */ "green", /* face A */ "red", /* face B */ "royalblue1", /* face C */ "yellow", /* face D */ "orange", /* face E */ "ivory", /* face F */ "grey24", /* internal faces */ "red4", /* cross & letters color */ "white", /* foreground color */ "black", /* background color */ }; char *formats[] = { "position", "numeric", "generators"}; void usage() { int i; fprintf(stderr, "\n"); for (i=0; ihelp_maxlen) help_maxlen = i; i = 0; } ++ptr; ++i; } the_screen=&screen.buffer[0]; d.buffer=screen.buffer; screen.buffer = NULL; screen.im = 0; for (i=1; i0.5) EDGE = 0.5; continue; } if (i2) FORMAT = 2; continue; } if (i1600) SCREEN_X = 1600; continue; } if (i1200) SCREEN_Y = 1200; continue; } if (i=0 && j<=10) palette[j] = argv[++i]; continue; } fprintf(stderr, "unknown option %s\n", argv[i]); usage(); return 1; } set_cube_size(); if (init_screen(&screen)==-1) { fprintf(stderr, "Error with initing the screen.\n"); return -1; } reset_cube(&cube); if (filename) init_cube(&cube, filename, 0); else init_cube(&cube, NULL, rand); realize_colors(&screen); screen.pause = 1; grab_pointer(&screen, 0); display_cube(&cube, &screen); while(1) { int d=wait_event(&screen, &cube); if (!(d&SCREEN_EVENT)) { if (cube.anim) display_cube(&cube, &screen); } else { if (screen_event(&screen, &cube)==-1) break; } } close_screen(&screen); return 0; }