/* ; *************** Function spindac(direction, rstep) ******************** ; Rotate the MCGA/VGA DAC in the (plus or minus) "direction" ; in "rstep" increments - or, if "direction" is 0, just replace it. */ void spindac(int dir, int inc) { unsigned char tmp[3]; unsigned char *dacbot; if (colors < 16) return; if (g_is_true_color && truemode) return; if (dir != 0 && rotate_lo < colors && rotate_lo < rotate_hi) { int top = rotate_hi > colors ? colors - 1 : rotate_hi; dacbot = (unsigned char *) g_dac_box + 3 * rotate_lo; int len = (top - rotate_lo) * 3 * sizeof(unsigned char); if (dir > 0) { for (int i = 0; i < inc; i++) { memcpy(tmp, dacbot, 3 * sizeof(unsigned char)); memcpy(dacbot, dacbot + 3 * sizeof(unsigned char), len); memcpy(dacbot + len, tmp, 3 * sizeof(unsigned char)); } } else { for (int i = 0; i < inc; i++) { memcpy(tmp, dacbot + len, 3 * sizeof(unsigned char)); memcpy(dacbot + 3 * sizeof(unsigned char), dacbot, len); memcpy(dacbot, tmp, 3 * sizeof(unsigned char)); } } } driver_write_palette(); driver_delay(colors - g_dac_count - 1); }
/* ; *************** Function spindac(direction, rstep) ******************** ; Rotate the MCGA/VGA DAC in the (plus or minus) "direction" ; in "rstep" increments - or, if "direction" is 0, just replace it. */ void spindac(int dir, int inc) { unsigned char tmp[3]; unsigned char *dacbot; if (g_colors < 16) return; if (g_is_true_color && g_true_mode != true_color_mode::default_color) return; if (dir != 0 && g_color_cycle_range_lo < g_colors && g_color_cycle_range_lo < g_color_cycle_range_hi) { int top = g_color_cycle_range_hi > g_colors ? g_colors - 1 : g_color_cycle_range_hi; dacbot = (unsigned char *) g_dac_box + 3 * g_color_cycle_range_lo; int len = (top - g_color_cycle_range_lo) * 3 * sizeof(unsigned char); if (dir > 0) { for (int i = 0; i < inc; i++) { std::memcpy(tmp, dacbot, 3*sizeof(unsigned char)); std::memcpy(dacbot, dacbot + 3*sizeof(unsigned char), len); std::memcpy(dacbot + len, tmp, 3*sizeof(unsigned char)); } } else { for (int i = 0; i < inc; i++) { std::memcpy(tmp, dacbot + len, 3*sizeof(unsigned char)); std::memcpy(dacbot + 3*sizeof(unsigned char), dacbot, len); std::memcpy(dacbot, tmp, 3*sizeof(unsigned char)); } } } writevideopalette(); driver_delay(g_colors - g_dac_count - 1); }
void intro() { // following overlayed data safe if "putstrings" are resident static char PRESS_ENTER[] = {"Press ENTER for main menu, F1 for help."}; int toprow, botrow, delaymax; char oldchar; std::vector<int> authors; char credits[32768] = { 0 }; char screen_text[32768]; int old_look_at_mouse; g_timer_start -= std::clock(); // "time out" during help old_look_at_mouse = g_look_at_mouse; help_labels const old_help_mode = g_help_mode; g_look_at_mouse = 0; // de-activate full mouse checking int i = 32767 + read_help_topic(help_labels::INTRO_AUTHORS, 0, 32767, screen_text); screen_text[i] = '\0'; i = 32767 + read_help_topic(help_labels::INTRO_CREDITS, 0, 32767, credits); credits[i] = '\0'; int j = 0; authors.push_back(0); // find the start of each credit-line for (i = 0; credits[i] != 0; i++) { if (credits[i] == '\n') { authors.push_back(i+1); } } authors.push_back(i); helptitle(); #define END_MAIN_AUTHOR 5 toprow = END_MAIN_AUTHOR+1; botrow = 21; putstringcenter(1, 0, 80, C_TITLE, PRESS_ENTER); driver_put_string(2, 0, C_CONTRIB, screen_text); driver_set_attr(2, 0, C_AUTHDIV1, 80); driver_set_attr(END_MAIN_AUTHOR, 0, C_AUTHDIV1, 80); driver_set_attr(22, 0, C_AUTHDIV2, 80); driver_set_attr(3, 0, C_PRIMARY, 80*(END_MAIN_AUTHOR-3)); driver_set_attr(23, 0, C_TITLE_LOW, 160); for (int i = 3; i < END_MAIN_AUTHOR; ++i) { driver_set_attr(i, 21, C_CONTRIB, 58); } driver_set_attr(toprow, 0, C_CONTRIB, (21-END_MAIN_AUTHOR)*80); srand((unsigned int)std::clock()); j = rand()%(j-(botrow-toprow)); // first to use i = j+botrow-toprow; // last to use oldchar = credits[authors.at(i+1)]; credits[authors.at(i+1)] = 0; driver_put_string(toprow, 0, C_CONTRIB, credits+authors.at(j)); credits[authors.at(i+1)] = oldchar; delaymax = 10; driver_hide_text_cursor(); g_help_mode = help_labels::HELPMENU; while (! driver_key_pressed()) { if (slowdisplay) { delaymax *= 15; } for (j = 0; j < delaymax && !(driver_key_pressed()); j++) { driver_delay(100); } if (driver_key_pressed() == FIK_SPACE) { // spacebar pauses driver_get_key(); driver_wait_key_pressed(0); if (driver_key_pressed() == FIK_SPACE) { driver_get_key(); } } delaymax = 15; driver_scroll_up(toprow, botrow); i++; if (credits[authors.at(i)] == 0) { i = 0; } oldchar = credits[authors.at(i+1)]; credits[authors.at(i+1)] = 0; driver_put_string(botrow, 0, C_CONTRIB, &credits[authors.at(i)]); driver_set_attr(botrow, 0, C_CONTRIB, 80); credits[authors.at(i+1)] = oldchar; driver_hide_text_cursor(); // turn it off } g_look_at_mouse = old_look_at_mouse; // restore the mouse-checking g_help_mode = old_help_mode; }
void intro() { // following overlayed data safe if "putstrings" are resident #ifdef XFRACT static char PRESS_ENTER[] = {"Press ENTER for main menu, Shift-1 for help."}; #else static char PRESS_ENTER[] = {"Press ENTER for main menu, F1 for help."}; #endif int toprow, botrow, delaymax; char oldchar; std::vector<int> authors; char credits[32768] = { 0 }; char screen_text[32768]; int oldlookatmouse; int oldhelpmode; timer_start -= clock_ticks(); // "time out" during help oldlookatmouse = lookatmouse; oldhelpmode = helpmode; lookatmouse = 0; // de-activate full mouse checking int i = 32767 + read_help_topic(INTRO_AUTHORS, 0, 32767, screen_text); screen_text[i++] = '\0'; i = 32767 + read_help_topic(INTRO_CREDITS, 0, 32767, credits); credits[i++] = '\0'; int j = 0; authors.push_back(0); // find the start of each credit-line for (i = 0; credits[i] != 0; i++) if (credits[i] == 10) authors.push_back(i+1); authors.push_back(i); helptitle(); #define END_MAIN_AUTHOR 5 toprow = END_MAIN_AUTHOR+1; #ifndef XFRACT botrow = 21; #else botrow = 20; putstringcenter(21, 0, 80, C_TITLE, "Unix/X port of fractint by Ken Shirriff"); #endif putstringcenter(1, 0, 80, C_TITLE, PRESS_ENTER); driver_put_string(2, 0, C_CONTRIB, screen_text); driver_set_attr(2, 0, C_AUTHDIV1, 80); driver_set_attr(END_MAIN_AUTHOR, 0, C_AUTHDIV1, 80); driver_set_attr(22, 0, C_AUTHDIV2, 80); driver_set_attr(3, 0, C_PRIMARY, 80*(END_MAIN_AUTHOR-3)); driver_set_attr(23, 0, C_TITLE_LOW, 160); for (int i = 3; i < END_MAIN_AUTHOR; ++i) driver_set_attr(i, 21, C_CONTRIB, 58); driver_set_attr(toprow, 0, C_CONTRIB, (21-END_MAIN_AUTHOR)*80); srand((unsigned int)clock_ticks()); j = rand()%(j-(botrow-toprow)); // first to use i = j+botrow-toprow; // last to use oldchar = credits[authors.at(i+1)]; credits[authors.at(i+1)] = 0; driver_put_string(toprow, 0, C_CONTRIB, credits+authors.at(j)); credits[authors.at(i+1)] = oldchar; delaymax = 10; driver_hide_text_cursor(); helpmode = HELPMENU; while (! driver_key_pressed()) { #ifdef XFRACT if (slowdisplay) delaymax *= 15; #endif for (j = 0; j < delaymax && !(driver_key_pressed()); j++) driver_delay(100); if (driver_key_pressed() == FIK_SPACE) { // spacebar pauses driver_get_key(); driver_wait_key_pressed(0); if (driver_key_pressed() == FIK_SPACE) driver_get_key(); } delaymax = 15; driver_scroll_up(toprow, botrow); i++; if (credits[authors.at(i)] == 0) i = 0; oldchar = credits[authors.at(i+1)]; credits[authors.at(i+1)] = 0; driver_put_string(botrow, 0, C_CONTRIB, &credits[authors.at(i)]); driver_set_attr(botrow, 0, C_CONTRIB, 80); credits[authors.at(i+1)] = oldchar; driver_hide_text_cursor(); // turn it off } lookatmouse = oldlookatmouse; // restore the mouse-checking helpmode = oldhelpmode; return; }