/** * interface_check_uart: Check UART (this is run in a loop) for * new data. We need to investigate making this faster in future. */ void interface_check_uart() { char *ptr, nullread; int i = 0; if(DMA5CONbits.CHEN == 0) { con_puts("Got data", 0); if(DMACS1bits.PPST5 == 0) ptr = uart_buffA; else ptr = uart_buffB; // Copy the data. for(i = 0; i < UART_BUFFSZ; i++) uart_buff_done[i] = ptr[i]; // Handle the data. For now, we just print it on the console. con_puts(uart_buff_done, 0); // Force 1 transfer. //DMA5REQbits.FORCE = 1; // Enable the channel again. DMA5CONbits.CHEN = 1; // Clear the OERR bit. U1STAbits.OERR = 0; } else { //con_puts("No data", 0); } }
/************************************************************************ Set style. ************************************************************************/ void con_set_style(bool i) { console_rfcstyle = i; if (console_rfcstyle) { con_puts(C_OK, _("Ok. RFC-style set.")); } else { con_puts(C_OK, _("Ok. Standard style set.")); } }
/************************************************************************ Initialize prompt; display initial message. ************************************************************************/ void con_prompt_init(void) { static bool first = TRUE; if (first) { con_puts(C_COMMENT, ""); con_puts(C_COMMENT, _("For introductory help, type 'help'.")); first = FALSE; } }
int con_full_box( int x, int y, const char *title, VArray *va, ConMenuInfo *menu_info ) { ScrollPos scroll; scroll.wrap = 0; scroll.set_min_max( 0, va->count()-1 ); scroll.set_pagesize( con_max_y() - 3 ); /* one title and two status */ scroll.go( 0 ); char pos_str[32]; con_xy( 1, 1 ); con_puts( title, menu_info->ti ); con_ce( menu_info->ti ); while(4) { VString str; int z; for( z = 0; z < scroll.pagesize(); z++ ) { if ( scroll.page() + z < va->count() ) str = va->get( scroll.page() + z ); else str = "~"; str = str_dot_reduce( str, con_max_x()-1 ); con_xy( 1, z + 2 ); int c = ( scroll.page() + z == scroll.pos() ) ? menu_info->ch : menu_info->cn; con_puts( str, c ); con_ce( c ); } sprintf( pos_str, " %5d of %5d", scroll.pos()+1, scroll.max()+1 ); con_out( con_max_x() - 15, 1, pos_str, menu_info->ti ); int ch; switch( (ch = con_getch()) ) { case 27 : menu_info->ec = 27; return -1; break; case 8 : menu_info->ec = 8; return -1; break; case KEY_BACKSPACE : menu_info->ec = KEY_BACKSPACE; return -1; break; case 13 : menu_info->ec = 13; return scroll.pos(); break; case KEY_UP : scroll.up(); break; case KEY_DOWN : scroll.down(); break; case KEY_NPAGE : scroll.npage(); break; case KEY_PPAGE : scroll.ppage(); break; case KEY_HOME : scroll.home(); break; case KEY_END : scroll.end(); break; default: if ( tolower(ch) == tolower(menu_info->ac) ) { menu_info->ec = menu_info->ac; return -2; } break; } } }
static void err_puts(PHYSFS_File *f, const char *str, size_t len) #define err_puts(A1,S,...) (err_puts(A1,S, _dxx_call_puts_parameter2(1, ## __VA_ARGS__, strlen(S)))) { con_puts(CON_CRITICAL, str, len); PHYSFSX_puts(f, str); Errors_in_mine++; }
void con_puts( const char *s, int attr ) { int ta = __ta; con_ta( attr ); con_puts( s ); con_ta( ta ); }
void con_out( int x, int y, const char *s, int attr ) { int ta = __ta; con_ta( attr ); con_xy( x, y ); con_puts( s ); con_ta( ta ); }
void cprintf(char *fmt, ...) { char buf[256]; va_list pvar; va_start(pvar,fmt); va_snprintf(buf,256,fmt,pvar); va_end(pver); con_puts(buf); }
void ogl_extensions_init() { const auto version_str = reinterpret_cast<const char *>(glGetString(GL_VERSION)); if (!version_str) { con_puts(CON_URGENT, "DXX-Rebirth: no valid OpenGL context when querying GL extensions!"); return; } const auto version = parse_version_str(version_str); const auto extension_str = reinterpret_cast<const char *>(glGetString(GL_EXTENSIONS)); #if DXX_USE_OGLES #define DXX_OGL_STRING " ES" #else #define DXX_OGL_STRING "" #endif con_printf(CON_VERBOSE, "DXX-Rebirth: OpenGL" DXX_OGL_STRING ": version %ld.%ld (%s)", version[0], version[1], version_str); #undef DXX_OGL_STRING /* GL_EXT_texture_filter_anisotropic */ if (is_supported(extension_str, version, "GL_EXT_texture_filter_anisotropic", -1, -1, -1, -1)) { glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &ogl_maxanisotropy); con_printf(CON_VERBOSE, "DXX-Rebirth: OpenGL: GL_EXT_texture_filter_anisotropic available, max anisotropy: %f", ogl_maxanisotropy); } else { ogl_maxanisotropy=0.0f; con_puts(CON_VERBOSE, "DXX-Rebirth: OpenGL: GL_EXT_texture_filter_anisotropic not available"); } /* GL_ARB_sync */ if (is_supported(extension_str, version, "GL_ARB_sync", 3, 2, 3, 0)) { glFenceSyncFunc = reinterpret_cast<PFNGLFENCESYNCPROC>(SDL_GL_GetProcAddress("glFenceSync")); glDeleteSyncFunc = reinterpret_cast<PFNGLDELETESYNCPROC>(SDL_GL_GetProcAddress("glDeleteSync")); glClientWaitSyncFunc = reinterpret_cast<PFNGLCLIENTWAITSYNCPROC>(SDL_GL_GetProcAddress("glClientWaitSync")); } const char *s; if (glFenceSyncFunc && glDeleteSyncFunc && glClientWaitSyncFunc) { ogl_have_ARB_sync=true; s = "DXX-Rebirth: OpenGL: GL_ARB_sync available"; } else { s = "DXX-Rebirth: OpenGL: GL_ARB_sync not available"; } con_puts(CON_VERBOSE, s); }
/************************************************************************ Write to console and add line-break, and show prompt if required. ************************************************************************/ void con_write(enum rfc_status rfc_status, const char *message, ...) { /* First buffer contains featured text tags */ static char buf1[(MAX_LEN_CONSOLE_LINE * 3) / 2]; static char buf2[MAX_LEN_CONSOLE_LINE]; va_list args; va_start(args, message); my_vsnprintf(buf1, sizeof(buf1), message, args); va_end(args); /* remove all format tags */ featured_text_to_plain_text(buf1, buf2, sizeof(buf2), NULL); con_puts(rfc_status, buf2); }
vms_vector evaluate_curve(vms_equation *coeffs, int degree, fix t) { fix t2, t3; vms_vector coord; if (degree != 3) con_puts(CON_CRITICAL," for Hermite Curves degree must be 3"); t2 = fixmul(t,t); t3 = fixmul(t2,t); coord.x = fixmul(coeffs->n.x3,t3) + fixmul(coeffs->n.x2,t2) + fixmul(coeffs->n.x1,t) + coeffs->n.x0; coord.y = fixmul(coeffs->n.y3,t3) + fixmul(coeffs->n.y2,t2) + fixmul(coeffs->n.y1,t) + coeffs->n.y0; coord.z = fixmul(coeffs->n.z3,t3) + fixmul(coeffs->n.z2,t2) + fixmul(coeffs->n.z1,t) + coeffs->n.z0; return coord; }
fix curve_dist(vms_equation *coeffs, int degree, fix t0, const vms_vector &p0, fix dist) { vms_vector coord; fix t, diff; if (degree != 3) con_puts(CON_CRITICAL," for Hermite Curves degree must be 3"); for (t=t0;t<1*F1_0;t+=0.001*F1_0) { coord = evaluate_curve(coeffs, 3, t); diff = dist - vm_vec_dist(coord, p0); if (diff<ACCURACY) //&&(diff>-ACCURACY)) return t; } return -1*F1_0; }
/** * panic: fatal error routine. Panic displays the message * on the screen, then waits 2 seconds before restarting * the processor. * * @param message to print */ void panic(char *msg) { long int d = 5000000; // Initialize console, print message. con_init(); con_puts("PANIC ON OSD DSP !!"); con_puts("Super OSD's on screen display processor encountered a fatal error condition."); con_puts(""); con_puts(msg); con_puts(""); con_puts("Resetting soon."); // Reset after timer expires. while(d--); asm("reset"); }
void tree_draw_page( ScrollPos &scroll ) { VString str = " "; str_mul( str, con_max_x() ); str = " SiZE DiRECTORY" + str; str_sleft( str, con_max_x()-16 ); con_out(1,3, str, cHEADER ); int z = 0; for(z = 0; z < scroll.pagesize(); z++) { if (scroll.page() + z <= scroll.max()) { tree_draw_item( scroll.page(), z ); } else { con_xy( 1, 3+1+z ); con_puts( "~", cCYAN ); con_ce( cCYAN ); } } }
static void warning_puts(PHYSFS_File *f, const char *str, size_t len) #define warning_puts(A1,S,...) (warning_puts(A1,S, _dxx_call_puts_parameter2(1, ## __VA_ARGS__, strlen(S)))) { con_puts(CON_URGENT, str, len); PHYSFSX_puts(f, str); }
static int main(int argc, char *argv[]) { if (!PHYSFSX_init(argc, argv)) return 1; con_init(); // Initialise the console setbuf(stdout, NULL); // unbuffered output via printf #ifdef _WIN32 freopen( "CON", "w", stdout ); freopen( "CON", "w", stderr ); #endif if (CGameArg.SysShowCmdHelp) { print_commandline_help(); return(0); } printf("\nType '%s -help' for a list of command-line options.\n\n", PROGNAME); PHYSFSX_listSearchPathContent(); if (!PHYSFSX_checkSupportedArchiveTypes()) return(0); #if defined(DXX_BUILD_DESCENT_I) if (! PHYSFSX_contfile_init("descent.hog", 1)) #define DXX_NAME_NUMBER "1" #define DXX_HOGFILE_NAMES "descent.hog" #elif defined(DXX_BUILD_DESCENT_II) if (! PHYSFSX_contfile_init("descent2.hog", 1) && ! PHYSFSX_contfile_init("d2demo.hog", 1)) #define DXX_NAME_NUMBER "2" #define DXX_HOGFILE_NAMES "descent2.hog or d2demo.hog" #endif { #if defined(__unix__) && !defined(__APPLE__) #define DXX_HOGFILE_PROGRAM_DATA_DIRECTORY \ "\t$HOME/.d" DXX_NAME_NUMBER "x-rebirth\n" \ "\t" SHAREPATH "\n" #else #define DXX_HOGFILE_PROGRAM_DATA_DIRECTORY \ "\tDirectory containing D" DXX_NAME_NUMBER "X\n" #endif #if (defined(__APPLE__) && defined(__MACH__)) || defined(macintosh) #define DXX_HOGFILE_APPLICATION_BUNDLE \ "\tIn 'Resources' inside the application bundle\n" #else #define DXX_HOGFILE_APPLICATION_BUNDLE "" #endif #define DXX_MISSING_HOGFILE_ERROR_TEXT \ "Could not find a valid hog file (" DXX_HOGFILE_NAMES ")\nPossible locations are:\n" \ DXX_HOGFILE_PROGRAM_DATA_DIRECTORY \ "\tIn a subdirectory called 'Data'\n" \ DXX_HOGFILE_APPLICATION_BUNDLE \ "Or use the -hogdir option to specify an alternate location." UserError(DXX_MISSING_HOGFILE_ERROR_TEXT); } #if defined(DXX_BUILD_DESCENT_I) switch (PHYSFSX_fsize("descent.hog")) { case D1_MAC_SHARE_MISSION_HOGSIZE: case D1_MAC_MISSION_HOGSIZE: MacHog = 1; // used for fonts and the Automap break; } #endif load_text(); //print out the banner title #if defined(DXX_BUILD_DESCENT_I) con_printf(CON_NORMAL, "%s %s", DESCENT_VERSION, g_descent_build_datetime); // D1X version con_printf(CON_NORMAL, "This is a MODIFIED version of Descent, based on %s.", BASED_VERSION); con_printf(CON_NORMAL, "%s\n%s",TXT_COPYRIGHT,TXT_TRADEMARK); con_printf(CON_NORMAL, "Copyright (C) 2005-2013 Christian Beckhaeuser"); #elif defined(DXX_BUILD_DESCENT_II) con_printf(CON_NORMAL, "%s%s %s", DESCENT_VERSION, PHYSFSX_exists(MISSION_DIR "d2x.hog",1) ? " Vertigo Enhanced" : "", g_descent_build_datetime); // D2X version con_printf(CON_NORMAL, "This is a MODIFIED version of Descent 2, based on %s.", BASED_VERSION); con_printf(CON_NORMAL, "%s\n%s",TXT_COPYRIGHT,TXT_TRADEMARK); con_printf(CON_NORMAL, "Copyright (C) 1999 Peter Hawkins, 2002 Bradley Bell, 2005-2013 Christian Beckhaeuser"); #endif if (CGameArg.DbgVerbose) con_puts(CON_VERBOSE, TXT_VERBOSE_1); ReadConfigFile(); PHYSFSX_addArchiveContent(); arch_init(); select_tmap(CGameArg.DbgTexMap); #if defined(DXX_BUILD_DESCENT_II) Lighting_on = 1; #endif con_printf(CON_VERBOSE, "Going into graphics mode..."); gr_set_mode(Game_screen_mode); // Load the palette stuff. Returns non-zero if error. con_printf(CON_DEBUG, "Initializing palette system..." ); #if defined(DXX_BUILD_DESCENT_I) gr_use_palette_table( "PALETTE.256" ); #elif defined(DXX_BUILD_DESCENT_II) gr_use_palette_table(D2_DEFAULT_PALETTE ); #endif con_printf(CON_DEBUG, "Initializing font system..." ); gamefont_init(); // must load after palette data loaded. #if defined(DXX_BUILD_DESCENT_II) con_printf( CON_DEBUG, "Initializing movie libraries..." ); init_movies(); //init movie libraries #endif show_titles(); set_screen_mode(SCREEN_MENU); #ifdef DEBUG_MEMORY_ALLOCATIONS /* Memdebug runs before global destructors, so it incorrectly * reports as leaked any allocations that would be freed by a global * destructor. This local will force the newmenu globals to be * reset before memdebug scans, which prevents memdebug falsely * reporting them as leaked. * * External tools, such as Valgrind, know to run global destructors * before checking for leaks, so this hack is only necessary when * memdebug is used. */ struct hack_free_global_backgrounds { ~hack_free_global_backgrounds() { newmenu_free_background(); } }; hack_free_global_backgrounds hack_free_global_background; #endif con_printf( CON_DEBUG, "\nDoing gamedata_init..." ); gamedata_init(); #if defined(DXX_BUILD_DESCENT_II) #if DXX_USE_EDITOR if (GameArg.EdiSaveHoardData) { save_hoard_data(); exit(1); } #endif #endif if (CGameArg.DbgNoRun) return(0); con_printf( CON_DEBUG, "\nInitializing texture caching system..." ); texmerge_init(); // 10 cache bitmaps #if defined(DXX_BUILD_DESCENT_II) piggy_init_pigfile("groupa.pig"); //get correct pigfile #endif con_printf( CON_DEBUG, "\nRunning game..." ); init_game(); get_local_player().callsign = {}; #if defined(DXX_BUILD_DESCENT_I) key_flush(); #elif defined(DXX_BUILD_DESCENT_II) // If built with editor, option to auto-load a level and quit game // to write certain data. #ifdef EDITOR if (!GameArg.EdiAutoLoad.empty()) { Players[0].callsign = "dummy"; } else #endif #endif { if (!CGameArg.SysPilot.empty()) { char filename[sizeof(PLAYER_DIRECTORY_TEXT) + CALLSIGN_LEN + 4]; /* Step over the literal PLAYER_DIRECTORY_TEXT when it is * present. Point at &filename[0] when * PLAYER_DIRECTORY_TEXT is absent. */ const auto b = &filename[-CGameArg.SysUsePlayersDir]; snprintf(filename, sizeof(filename), PLAYER_DIRECTORY_STRING("%.12s"), CGameArg.SysPilot.c_str()); /* The pilot name is never used after this. Clear it to * free the allocated memory, if any. */ CGameArg.SysPilot.clear(); auto p = b; for (const auto &facet = std::use_facet<std::ctype<char>>(std::locale::classic()); char &c = *p; ++p) { c = facet.tolower(static_cast<uint8_t>(c)); } auto j = p - filename; if (j < sizeof(filename) - 4 && (j <= 4 || strcmp(&filename[j - 4], ".plr"))) // if player hasn't specified .plr extension in argument, add it { strcpy(&filename[j], ".plr"); j += 4; } if(PHYSFSX_exists(filename,0)) { get_local_player().callsign.copy(b, std::distance(b, &filename[j - 4])); read_player_file(); WriteConfigFile(); } } } #if defined(DXX_BUILD_DESCENT_II) #if DXX_USE_EDITOR if (!GameArg.EdiAutoLoad.empty()) { /* Any number >= FILENAME_LEN works */ Level_names[0].copy_if(GameArg.EdiAutoLoad.c_str(), GameArg.EdiAutoLoad.size()); LoadLevel(1, 1); } else #endif #endif { Game_mode = GM_GAME_OVER; DoMenu(); } while (window_get_front()) // Send events to windows and the default handler event_process(); // Tidy up - avoids a crash on exit { window *wind; show_menus(); while ((wind = window_get_front())) window_close(wind); } WriteConfigFile(); show_order_form(); con_printf( CON_DEBUG, "\nCleanup..." ); close_game(); texmerge_close(); gamedata_close(); gamefont_close(); Current_mission.reset(); PHYSFSX_removeArchiveContent(); return(0); //presumably successful exit }
void netmon1_update() { progress++ ; progress %= sizeof( progress_info ) - 1 ; int progress2 = progress ; // sample (thread safe) progress2 %= sizeof( progress_info ) - 1 ; char c = progress_info[progress2]; //int dst = g_dst ; con_clrscr(); con_printf("%c|%02d|%2d|%2d|%4d\n", c, md380_f_4225_operatingmode & 0x7F, gui_opmode2, *mode3, *cntr2 ); #ifdef FW_D13_020 { uint8_t *chan = (uint8_t *)0x2001e8c1 ; con_printf("ch: %d ", *chan ); } { // current zone name. wchar_t *p = (void*)0x2001cddc ; con_puts("zn:"); con_putsw(p); con_nl(); } { // current channel name. wchar_t *p = (void*)0x2001e1f4 ; con_puts("cn:"); con_putsw(p); con_nl(); } #endif { char *str = "?" ; switch( last_radio_event ) { case 0x1 : str = "nosig" ; break ; case 0x2 : str = "tx denied" ; break ; case 0x3 : str = "FM" ; break ; case 0x4 : str = "Out_Of_SYNC" ; // TS 102 361-2 clause p 5.2.1.3.2 break ; case 0x5 : str = "num5" ; break ; case 0x7 : str = "data_idle/csbk_rx" ; break ; case 0x8 : str = "Other_Call" ; // TS 102 361-2 clause p 5.2.1.3.2 break ; case 0x9 : str = "My_Call" ; // TS 102 361-2 clause p 5.2.1.3.2 break ; case 0xa : str = "rx silence" ; break ; case 0xd : str = "num13 0xd" ; break ; case 0xe : str = "Wait_TX_Resp" ; break ; } con_printf("radio: %s\n", str); } { con_printf("re:%02x be:%02x e3:%02x e4:%02x\ne5:%02x ", last_radio_event, last_event2, last_event3, last_event4, last_event5 ); } print_smeter(); { uint8_t *p = (void*)0x2001e5f0 ; con_printf("st: %2x %2x %2x %2x\n", p[0], p[1], p[2], p[3]); } #ifdef FW_D13_020 { // only valid when transmitting or receiving. uint32_t *recv = (void*)0x2001e5e4 ; con_printf("%d\n", *recv); } #endif }
void show_titles(void) { #if defined(DXX_BUILD_DESCENT_I) songs_play_song(SONG_TITLE, 1); #endif if (CGameArg.SysNoTitles) return; #if defined(DXX_BUILD_DESCENT_I) show_first_found_title_screen( "macplay.pcx", // Mac Shareware "mplaycd.pcx", // Mac Registered "iplogo1.pcx" // PC. Only down here because it's lowres ;-) ); const bool resolution_at_least_640_480 = (SWIDTH >= 640 && SHEIGHT >= 480); auto &logo_hires_pcx = "logoh.pcx"; auto &descent_hires_pcx = "descenth.pcx"; show_title_screen((resolution_at_least_640_480 && PHYSFSX_exists(logo_hires_pcx, 1)) ? logo_hires_pcx : "logo.pcx", 1, 1); show_title_screen((resolution_at_least_640_480 && PHYSFSX_exists(descent_hires_pcx, 1)) ? descent_hires_pcx : "descent.pcx", 1, 1); #elif defined(DXX_BUILD_DESCENT_II) int played=MOVIE_NOT_PLAYED; //default is not played int song_playing = 0; #define MOVIE_REQUIRED 1 //(!is_D2_OEM && !is_SHAREWARE && !is_MAC_SHARE) // causes segfault const auto hiresmode = HIRESMODE; { //show bundler screens played=MOVIE_NOT_PLAYED; //default is not played played = PlayMovie(NULL, "pre_i.mve",0); if (!played) { char filename[12]; strcpy(filename, hiresmode ? "pre_i1b.pcx" : "pre_i1.pcx"); while (PHYSFSX_exists(filename,0)) { show_title_screen( filename, 1, 0 ); filename[5]++; } } } played = PlayMovie("intro.tex", "intro.mve",MOVIE_REQUIRED); if (played != MOVIE_NOT_PLAYED) intro_played = 1; else { //didn't get intro movie, try titles played = PlayMovie(NULL, "titles.mve",MOVIE_REQUIRED); if (played == MOVIE_NOT_PLAYED) { con_puts(CON_DEBUG, "Playing title song..."); songs_play_song( SONG_TITLE, 1); song_playing = 1; con_puts(CON_DEBUG, "Showing logo screens..."); show_first_found_title_screen( hiresmode ? "iplogo1b.pcx" : "iplogo1.pcx", // OEM "iplogo1.pcx", // SHAREWARE "mplogo.pcx" // MAC SHAREWARE ); show_first_found_title_screen( hiresmode ? "logob.pcx" : "logo.pcx", // OEM "logo.pcx", // SHAREWARE "plogo.pcx" // MAC SHAREWARE ); } } { //show bundler movie or screens played=MOVIE_NOT_PLAYED; //default is not played //check if OEM movie exists, so we don't stop the music if it doesn't if (RAIIPHYSFS_File{PHYSFS_openRead("oem.mve")}) { played = PlayMovie(NULL, "oem.mve",0); song_playing = 0; //movie will kill sound } if (!played) { char filename[12]; strcpy(filename, hiresmode ? "oem1b.pcx" : "oem1.pcx"); while (PHYSFSX_exists(filename,0)) { show_title_screen( filename, 1, 0 ); filename[3]++; } } } if (!song_playing) { con_puts(CON_DEBUG, "Playing title song..."); songs_play_song( SONG_TITLE, 1); } con_puts(CON_DEBUG, "Showing logo screen..."); const auto filename = hiresmode ? "descentb.pcx" : "descent.pcx"; if (PHYSFSX_exists(filename,1)) show_title_screen(filename, 1, 1); #endif }
void tree_draw_item( int page, int index, int hilite ) { if ( page + index >= dir_tree.count() ) return; VString s1 = dir_tree[page+index]; str_trim_right(s1,1); VString s2 = s1; int j = str_rfind( s1,'/'); str_trim_right(s1,str_len(s2)-j-1); str_trim_left(s2,j+1); for(j = 0; j < str_len(s1); j++) { if (s1[j] == '/') str_set_ch(s1,j, '|'); else if (s1[j] == '\\') str_set_ch(s1,j, '\\'); else str_set_ch(s1,j, '+'); } if (opt.tree_compact) { str_replace(s1,"+", ""); str_replace(s1,"|", "| "); str_replace(s1,"\\"," "); str_trim_right(s1,2); s1 += "--"; } else { str_replace(s1,"+", " "); str_replace(s1,"\\", " "); s1 += "--"; } VString str = dir_tree[page+index]; str_tr( str,"\\", "/" ); VString sz; sz.fi( size_cache_get( str ) ); if ( sz == "-1" ) sz = "n/a"; else str_comma( sz ); str_pad( sz, 14 ); s1 = sz + " " + s1; int m = con_max_x() - 1; /* doesn't speed the code... :) */ if ( str_len( s1 ) > m ) { str_sleft( s1, m ); s2 = ""; } else if ( str_len( s1 ) + str_len( s2 ) > m ) { str_sleft( s2, m - str_len( s1 ) ); } con_xy(1,3+1+index); if (hilite) { con_puts( s1, cBAR ); con_puts( s2, cBAR ); con_ce( cBAR ); } else { con_puts( s1, cSTATUS ); con_puts( s2, cMESSAGE ); con_ce( cSTATUS ); } }
int load_exit_models() { int start_num; bm_free_extra_models(); bm_free_extra_objbitmaps(); start_num = N_ObjBitmaps; if (!bm_load_extra_objbitmap("steel1.bbm") || !bm_load_extra_objbitmap("rbot061.bbm") || !bm_load_extra_objbitmap("rbot062.bbm") || !bm_load_extra_objbitmap("steel1.bbm") || !bm_load_extra_objbitmap("rbot061.bbm") || !bm_load_extra_objbitmap("rbot063.bbm")) { con_puts(CON_NORMAL, "Can't load exit models!"); return 0; } if (auto exit_hamfile = PHYSFSX_openReadBuffered("exit.ham")) { exit_modelnum = N_polygon_models++; destroyed_exit_modelnum = N_polygon_models++; polymodel_read(&Polygon_models[exit_modelnum], exit_hamfile); polymodel_read(&Polygon_models[destroyed_exit_modelnum], exit_hamfile); Polygon_models[exit_modelnum].first_texture = start_num; Polygon_models[destroyed_exit_modelnum].first_texture = start_num+3; polygon_model_data_read(&Polygon_models[exit_modelnum], exit_hamfile); polygon_model_data_read(&Polygon_models[destroyed_exit_modelnum], exit_hamfile); } else if (PHYSFSX_exists("exit01.pof",1) && PHYSFSX_exists("exit01d.pof",1)) { exit_modelnum = load_polygon_model("exit01.pof", 3, start_num, NULL); destroyed_exit_modelnum = load_polygon_model("exit01d.pof", 3, start_num + 3, NULL); #if DXX_USE_OGL ogl_cache_polymodel_textures(exit_modelnum); ogl_cache_polymodel_textures(destroyed_exit_modelnum); #endif } else if ((exit_hamfile = PHYSFSX_openReadBuffered(D1_PIGFILE))) { int offset, offset2; int hamsize; hamsize = PHYSFS_fileLength(exit_hamfile); switch (hamsize) { //total hack for loading models case D1_PIGSIZE: offset = 91848; /* and 92582 */ offset2 = 383390; /* and 394022 */ break; default: case D1_SHARE_BIG_PIGSIZE: case D1_SHARE_10_PIGSIZE: case D1_SHARE_PIGSIZE: case D1_10_BIG_PIGSIZE: case D1_10_PIGSIZE: Int3(); /* exit models should be in .pofs */ /*-fallthrough*/ case D1_OEM_PIGSIZE: case D1_MAC_PIGSIZE: case D1_MAC_SHARE_PIGSIZE: con_puts(CON_NORMAL, "Can't load exit models!"); return 0; } PHYSFSX_fseek(exit_hamfile, offset, SEEK_SET); exit_modelnum = N_polygon_models++; destroyed_exit_modelnum = N_polygon_models++; polymodel_read(&Polygon_models[exit_modelnum], exit_hamfile); polymodel_read(&Polygon_models[destroyed_exit_modelnum], exit_hamfile); Polygon_models[exit_modelnum].first_texture = start_num; Polygon_models[destroyed_exit_modelnum].first_texture = start_num+3; PHYSFSX_fseek(exit_hamfile, offset2, SEEK_SET); polygon_model_data_read(&Polygon_models[exit_modelnum], exit_hamfile); polygon_model_data_read(&Polygon_models[destroyed_exit_modelnum], exit_hamfile); } else { con_puts(CON_NORMAL, "Can't load exit models!"); return 0; } return 1; }
int main() { long int delay; int brg; // Call the various initialization functions. init_osd(); setup_pll(); setup_io(); setup_int(); init_gfx(1); // Turn on doze, with a 1:1 ratio. CLKDIVbits.DOZEN = 0; CLKDIVbits.DOZE = 0b000; // Start in console mode. Print startup messages. con_init(); con_rolling = 0; con_puts("Super OSD v3.2-lite", 0); con_puts("dsPIC33F side", 0); con_puts("Copr. 2010 Tom O.", 0); ; con_puts("COMPILED FOR: ENGLISH", 0); con_puts("", 0); con_puts("Booting kernel [ OK ]", 0); con_puts("Verify 24F [ OK ]", 0); con_puts("Verify 33F [ OK ]", 0); con_puts("Switch to hi res [ OK ]", 0); init_gfx(0); if(mem_test_full()) { con_puts("VRAM test [ OK ]", 0); } else { con_puts("VRAM test [FAIL]", 0); con_puts("Check memory soon! ", 0); // Show warning for some time delay = 2000000; while(delay--); } // Clear graphics buffers of any memory test data remaining. init_gfx(0); con_puts("Init UART [ OK ]", 0); // BUG: occasionally resets processor on start up //interface_init_uart(); //brg = interface_set_baudrate(1843200); //sprintf(temp, "BRG=%d", brg); //con_puts(temp, 0); /* con_puts("PC detect... [FAIL]", 0); con_puts("GPS detect... [ OK ]", 0); con_puts("SPI initialized [ OK ]", 0); con_puts("Found flash mem [ OK ]", 0); con_puts(" Size: 2048 KB [ OK ]", 0); con_puts("USB not supported [SKIP]", 0); con_puts("Init GPS [ OK ]", 0); con_puts("Test I2C [ OK ]", 0); con_puts(" Xbee Adap. 2.0 [ OK ]", 0); con_puts(" LSM303 acc [ OK ]", 0); con_puts(" LSM303 mag [ OK ]", 0); con_puts(" ITG3200 gyro [FAIL]", 0); con_puts("Loading settings [ OK ]", 0); con_puts("Init splash [ OK ]", 0); */ // Demo HUD. //buffer_mode(0); con_puts("Launching hud_demo", 0); delayhowlong = 10000; hud_demo(); }
/* Loads music file names from a given directory or M3U playlist */ void jukebox_load() { jukebox_unload(); // Check if it's an M3U file auto &cfgpath = CGameCfg.CMLevelMusicPath; size_t musiclen = strlen(cfgpath.data()); if (musiclen > 4 && !d_stricmp(&cfgpath[musiclen - 4], ".m3u")) read_m3u(); else // a directory { class PHYSFS_path_deleter { public: void operator()(const char *const p) const noexcept { PHYSFS_removeFromSearchPath(p); } }; std::unique_ptr<const char, PHYSFS_path_deleter> new_path; const char *sep = PHYSFS_getDirSeparator(); size_t seplen = strlen(sep); // stick a separator on the end if necessary. if (musiclen >= seplen) { auto p = &cfgpath[musiclen - seplen]; if (strcmp(p, sep)) cfgpath.copy_if(musiclen, sep, seplen); } const auto p = cfgpath.data(); // Read directory using PhysicsFS if (PHYSFS_isDirectory(p)) // find files in relative directory JukeboxSongs.list.reset(PHYSFSX_findFiles(p, jukebox_exts)); else { if (PHYSFSX_isNewPath(p)) new_path.reset(p); PHYSFS_addToSearchPath(p, 0); // as mountpoints are no option (yet), make sure only files originating from GameCfg.CMLevelMusicPath are aded to the list. JukeboxSongs.list.reset(PHYSFSX_findabsoluteFiles("", p, jukebox_exts)); } if (!JukeboxSongs.list) { return; } JukeboxSongs.num_songs = std::distance(JukeboxSongs.list.begin(), JukeboxSongs.list.end()); } if (JukeboxSongs.num_songs) { con_printf(CON_DEBUG,"Jukebox: %d music file(s) found in %s", JukeboxSongs.num_songs, cfgpath.data()); if (CGameCfg.CMLevelMusicTrack[1] != JukeboxSongs.num_songs) { CGameCfg.CMLevelMusicTrack[1] = JukeboxSongs.num_songs; CGameCfg.CMLevelMusicTrack[0] = 0; // number of songs changed so start from beginning. } } else { CGameCfg.CMLevelMusicTrack[0] = -1; CGameCfg.CMLevelMusicTrack[1] = -1; con_puts(CON_DEBUG,"Jukebox music could not be found!"); } }
static void commandList(void) { unsigned short nOfSys = 0, nOfCmd = 0, pageSys = 0, i, j, page = 0, row, column; int cmd; while( strcmp(function[nOfCmd].cmdName, "NOCOMMAND") ) nOfCmd++; while( 1 ) { clrscr(); con_puts(" --- Demonstration of use of CAEN HV Wrapper Library --- "); gotoxy(1, 3); for(i=page*20;(i<(page*20+20))&&(strcmp(function[i].cmdName,"NOCOMMAND"));i++) { row = 3 + (i - page * 20)%10; column = ((i - page * 20) > 9 ? 30 : 1); gotoxy(column, row); con_printf("[%c] %s", alpha[i], function[i].cmdName); } for( j = pageSys*10; (j<pageSys*10+10)&&(System[j].ID!=-1); j++ ) { row = 3+(j-pageSys*10)%10; gotoxy(60,row); con_printf("System[%d]: %d", j, System[j].Handle); } gotoxy(1, 14); con_printf("[r] Loop = %s",loop ? "Yes" : "No"); gotoxy(1, 15); con_printf("[x] Exit \n\n"); switch(cmd = tolower(con_getch())) { // Handle future next page command // case "next page" // if( nOfCmd > page*20 + 20 ) // page++; // else // page = 0; // break; // Handle future next system command // case "next system" // while( System[nOfSys].ID != -1 ) // nOfSys++; // if( nOfSys > pageSys*10+10 ) // pageSys++; // else // pageSys = 0; // break; case 'r': loop = (loop ? 0 : 1); break; case 'x': quitProgram(); break; default: if( cmd >= 'a' && cmd < 'a' + nOfCmd ) (*function[cmd-'a'].pFun)(); break; } } }