static void test_parse_make_temp(CuTest *tc) { char cmd[32]; order *ord; struct locale * lang; test_cleanup(); lang = get_or_create_locale("en"); locale_setstring(lang, keyword(K_MAKE), "MAKE"); locale_setstring(lang, keyword(K_MAKETEMP), "MAKETEMP"); locale_setstring(lang, "TEMP", "TEMP"); init_locale(lang); ord = parse_order("M T herp", lang); CuAssertPtrNotNull(tc, ord); CuAssertIntEquals(tc, K_MAKETEMP, getkeyword(ord)); CuAssertStrEquals(tc, "MAKETEMP herp", get_command(ord, cmd, sizeof(cmd))); CuAssertIntEquals(tc, K_MAKETEMP, init_order(ord)); CuAssertStrEquals(tc, "herp", getstrtoken()); free_order(ord); test_cleanup(); }
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { TRACE("(0x%p, %d, %p)\n", hinstDLL, fdwReason, lpvReserved); switch (fdwReason) { case DLL_PROCESS_ATTACH: init_cxx_funcs(); init_lockit(); init_exception(hinstDLL); init_locale(hinstDLL); init_io(hinstDLL); break; case DLL_PROCESS_DETACH: if (lpvReserved) break; free_io(); free_locale(); free_lockit(); break; } return TRUE; }
static void revoke_privileges(ProxyContext * const proxy_context) { (void) proxy_context; init_locale(); init_tz(); (void) strerror(ENOENT); #ifndef DEBUG salsa20_random_stir(); # ifndef _WIN32 if (proxy_context->user_dir != NULL) { if (chdir(proxy_context->user_dir) != 0 || chroot(proxy_context->user_dir) != 0 || chdir("/") != 0) { logger(proxy_context, LOG_ERR, "Unable to chroot to [%s]", proxy_context->user_dir); exit(1); } } if (sandboxes_app() != 0) { logger_noformat(proxy_context, LOG_ERR, "Unable to sandbox the main process"); exit(1); } if (proxy_context->user_id != (uid_t) 0) { if (setgid(proxy_context->user_group) != 0 || setegid(proxy_context->user_group) != 0 || setuid(proxy_context->user_id) != 0 || seteuid(proxy_context->user_id) != 0) { logger(proxy_context, LOG_ERR, "Unable to switch to user id [%lu]", (unsigned long) proxy_context->user_id); exit(1); } } # endif #endif }
int main(int argc, char *argv[]) { char buffer[512]; struct node* head = NULL; struct dlb_node* dlbHead = NULL; SDL_Surface *screen; struct sprite* letters = NULL; /* buffer sounds */ int audio_rate = MIX_DEFAULT_FREQUENCY; Uint16 audio_format = MIX_DEFAULT_FORMAT;//AUDIO_S16 int audio_channels = 2;//1 int audio_buffers = 512;//256 /* seed the random generator */ srand((unsigned int)time(NULL)); /* identify the resource locale */ init_locale(argc, argv); if (language[strlen(language)-1] != '/') strcat(language, "/"); /* create dictionary */ strcpy(txt, language); if (!dlb_create(&dlbHead, strcat(txt, "wordlist.txt"))) { Error("failed to open word list file"); exit(1); } #ifdef demo /*read in demo info*/ sprintf(buffer,"globaldata/agdemo.cfg"); if(!loadCFG(buffer,&conf)) { //fprintf(stderr,"config file location %s\n",buffer); fprintf(stderr,"unable to read configuration, using defaults\n"); //exit(1); } #endif /* read hi-scores */ #ifdef demo sprintf(buffer,"/media/internal/appdata/com.cribme.aghddemo/ag-hiscore"); #else sprintf(buffer,"/media/internal/appdata/com.cribme.aghd/ag-hiscore"); #endif if(!loadScore(buffer,hiscore)){ fprintf(stderr,"unable to read hi-scores, using defaults\n"); } if (SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER) < 0){ Error("Unable to init SDL: %s", SDL_GetError()); exit(1); } atexit(SDL_Quit); screen = SDL_SetVideoMode(800, 600, 16, 0);//(800, 600, 16, SDL_HWSURFACE|SDL_DOUBLEBUF) if (screen == NULL) { Error("Unable to set 800x600 video: %s", SDL_GetError()); exit(1); } SDL_WM_SetCaption("Anagramarama", "ANAGRAMARAMA"); if (Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers)) { Error("unable to open audio!"); exit(1); } bufferSounds(&soundCache); /* cache in-game graphics */ strcpy(txt, language); letterBank = SDL_LoadBMP(strcat(txt,"images/letterBank.bmp")); strcpy(txt, language); smallLetterBank = SDL_LoadBMP(strcat(txt,"images/smallLetterBank.bmp")); strcpy(txt, language); numberBank = SDL_LoadBMP(strcat(txt,"images/numberBank.bmp")); /* load locale specific configuration */ strcpy(txt, language); loadConfig(strcat(txt, "config.ini")); newGame(&head, dlbHead, screen, &letters); gameLoop(&head, dlbHead, screen, &letters); /* tidy up and exit */ Mix_CloseAudio(); clearSoundBuffer(&soundCache); dlb_free(dlbHead); destroyLetters(&letters); destroyAnswers(&head); SDL_FreeSurface(screen); SDL_FreeSurface(letterBank); SDL_FreeSurface(smallLetterBank); SDL_FreeSurface(numberBank); /*SDL_Quit(); */ return 0; }
int main(int argc, char **argv) #endif { int i; #ifdef LINUXVGA LINUX_setup(); /* setup VGA before dropping privilege DBT 4/5/99 */ drop_privilege(); #endif /* make sure that we really have revoked root access, this might happen if gnuplot is compiled without vga support but is installed suid by mistake */ #ifdef __linux__ setuid(getuid()); #endif #if defined(MSDOS) && !defined(_Windows) && !defined(__GNUC__) PC_setup(); #endif /* MSDOS !Windows */ /* HBB: Seems this isn't needed any more for DJGPP V2? */ /* HBB: disable all floating point exceptions, just keep running... */ #if defined(DJGPP) && (DJGPP!=2) _control87(MCW_EM, MCW_EM); #endif #if defined(OS2) int rc; #ifdef OS2_IPC char semInputReadyName[40]; sprintf( semInputReadyName, "\\SEM32\\GP%i_Input_Ready", getpid() ); rc = DosCreateEventSem(semInputReadyName,&semInputReady,0,0); if (rc != 0) fputs("DosCreateEventSem error\n",stderr); #endif rc = RexxRegisterSubcomExe("GNUPLOT", (PFN) RexxInterface, NULL); #endif /* malloc large blocks, otherwise problems with fragmented mem */ #ifdef MALLOCDEBUG malloc_debug(7); #endif /* get helpfile from home directory */ #ifdef __DJGPP__ { char *s; strcpy(HelpFile, argv[0]); for (s = HelpFile; *s; s++) if (*s == DIRSEP1) *s = DIRSEP2; /* '\\' to '/' */ strcpy(strrchr(HelpFile, DIRSEP2), "/gnuplot.gih"); } /* Add also some "paranoid" tests for '\\': AP */ #endif /* DJGPP */ #ifdef VMS unsigned int status[2] = { 1, 0 }; #endif #if defined(HAVE_LIBEDITLINE) rl_getc_function = getc_wrapper; #endif #if defined(HAVE_LIBREADLINE) || defined(HAVE_LIBEDITLINE) /* T.Walter 1999-06-24: 'rl_readline_name' must be this fix name. * It is used to parse a 'gnuplot' specific section in '~/.inputrc' * or gnuplot specific commands in '.editrc' (when using editline * instead of readline) */ rl_readline_name = "Gnuplot"; rl_terminal_name = getenv("TERM"); using_history(); #endif #if defined(HAVE_LIBREADLINE) && !defined(MISSING_RL_TILDE_EXPANSION) rl_complete_with_tilde_expansion = 1; #endif for (i = 1; i < argc; i++) { if (!argv[i]) continue; if (!strcmp(argv[i], "-V") || !strcmp(argv[i], "--version")) { printf("gnuplot %s patchlevel %s\n", gnuplot_version, gnuplot_patchlevel); return 0; } else if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) { printf( "Usage: gnuplot [OPTION]... [FILE]\n" #ifdef X11 "for X11 options see 'help X11->command-line-options'\n" #endif " -V, --version\n" " -h, --help\n" " -p --persist\n" " -e \"command1; command2; ...\"\n" "gnuplot %s patchlevel %s\n" #ifdef DIST_CONTACT "Report bugs to "DIST_CONTACT"\n" " or %s\n", #else "Report bugs to %s\n", #endif gnuplot_version, gnuplot_patchlevel, bug_email); return 0; } else if (!strncmp(argv[i], "-persist", 2) || !strcmp(argv[i], "--persist")) { persist_cl = TRUE; } } #ifdef X11 /* the X11 terminal removes tokens that it recognizes from argv. */ { int n = X11_args(argc, argv); argv += n; argc -= n; } #endif setbuf(stderr, (char *) NULL); #ifdef HAVE_SETVBUF /* this was once setlinebuf(). Docs say this is * identical to setvbuf(,NULL,_IOLBF,0), but MS C * faults this (size out of range), so we try with * size of 1024 instead. [SAS/C does that, too. -lh] * Failing this, I propose we just make the call and * ignore the return : its probably not a big deal */ if (setvbuf(stdout, (char *) NULL, _IOLBF, (size_t) 1024) != 0) (void) fputs("Could not linebuffer stdout\n", stderr); #ifdef X11 /* This call used to be in x11.trm, with the following comment: * Multi-character inputs like escape sequences but also mouse-pasted * text got buffered and therefore didn't trigger the select() function * in X11_waitforinput(). Switching to unbuffered input solved this. * 23 Jan 2002 (joze) * But switching to unbuffered mode causes all characters in the input * buffer to be lost. So the only safe time to do it is on program entry. * The #ifdef X11 is probably unnecessary, but makes the change minimal. * Do any non-X platforms suffer from the same problem? * EAM - Jan 2004. */ setvbuf(stdin, (char *) NULL, _IONBF, 0); #endif #endif gpoutfile = stdout; /* Initialize pre-loaded user variables */ (void) Gcomplex(&udv_pi.udv_value, M_PI, 0.0); udv_NaN = add_udv_by_name("NaN"); (void) Gcomplex(&(udv_NaN->udv_value), not_a_number(), 0.0); udv_NaN->udv_undef = FALSE; init_memory(); interactive = FALSE; init_terminal(); /* can set term type if it likes */ push_terminal(0); /* remember the default terminal */ /* reset the terminal when exiting */ /* this is done through gp_atexit so that other terminal functions * can be registered to be executed before the terminal is reset. */ GP_ATEXIT(term_reset); # if defined(_Windows) && ! defined(WGP_CONSOLE) interactive = TRUE; # else interactive = isatty(fileno(stdin)); # endif if (argc > 1) interactive = noinputfiles = FALSE; else noinputfiles = TRUE; /* Need this before show_version is called for the first time */ #ifdef HAVE_SYS_UTSNAME_H { struct utsname uts; /* something is fundamentally wrong if this fails ... */ if (uname(&uts) > -1) { # ifdef _AIX strcpy(os_name, uts.sysname); sprintf(os_name, "%s.%s", uts.version, uts.release); # elif defined(SCO) strcpy(os_name, "SCO"); strcpy(os_rel, uts.release); # elif defined(DJGPP) if (!strncmp(uts.sysname, "??Un", 4)) /* don't print ??Unknow" */ strcpy(os_name, "Unknown"); else { strcpy(os_name, uts.sysname); strcpy(os_rel, uts.release); } # else strcpy(os_name, uts.sysname); strcpy(os_rel, uts.release); # ifdef OS2 if (!strchr(os_rel,'.')) /* write either "2.40" or "4.0", or empty -- don't print "OS/2 1" */ strcpy(os_rel, ""); # endif # endif } } #else /* ! HAVE_SYS_UTSNAME_H */ strcpy(os_name, OS); strcpy(os_rel, ""); #endif /* HAVE_SYS_UTSNAME_H */ if (interactive) show_version(stderr); else show_version(NULL); /* Only load GPVAL_COMPILE_OPTIONS */ #ifdef WGP_CONSOLE #ifdef CONSOLE_SWITCH_CP if (cp_changed && interactive) { fprintf(stderr, "\ngnuplot changed the codepage of this console from %i to %i to\n" \ "match the graph window. Some characters might only display correctly\n" \ "if you change the font to a non-raster type.\n", cp_input, GetConsoleCP()); } #else if ((GetConsoleCP() != GetACP()) && interactive) { fprintf(stderr, "\nWarning: The codepage of the graph window (%i) and that of the\n" \ "console (%i) differ. Use `set encoding` or `!chcp` if extended\n" \ "characters don't display correctly.\n", GetACP(), GetConsoleCP()); } #endif #endif update_gpval_variables(3); /* update GPVAL_ variables available to user */ #ifdef VMS /* initialise screen management routines for command recall */ if (status[1] = smg$create_virtual_keyboard(&vms_vkid) != SS$_NORMAL) done(status[1]); if (status[1] = smg$create_key_table(&vms_ktid) != SS$_NORMAL) done(status[1]); #endif /* VMS */ if (!SETJMP(command_line_env, 1)) { /* first time */ interrupt_setup(); /* should move this stuff another initialisation routine, * something like init_set() maybe */ get_user_env(); init_loadpath(); init_locale(); /* HBB: make sure all variables start in the same mode 'reset' * would set them to. Since the axis variables aren't in * initialized arrays any more, this is now necessary... */ reset_command(); init_color(); /* Initialization of color */ load_rcfile(); init_fit(); /* Initialization of fitting module */ if (interactive && term != 0) { /* not unknown */ #ifdef GNUPLOT_HISTORY FPRINTF((stderr, "Before read_history\n")); #if defined(HAVE_LIBREADLINE) || defined(HAVE_LIBEDITLINE) expanded_history_filename = tilde_expand(GNUPLOT_HISTORY_FILE); #else expanded_history_filename = gp_strdup(GNUPLOT_HISTORY_FILE); gp_expand_tilde(&expanded_history_filename); #endif FPRINTF((stderr, "expanded_history_filename = %s\n", expanded_history_filename)); read_history(expanded_history_filename); { /* BEGIN: Go local to get environment variable */ const char *temp_env = getenv ("GNUPLOT_HISTORY_SIZE"); if (temp_env) gnuplot_history_size = strtol (temp_env, (char **) NULL, 10); } /* END: Go local to get environment variable */ /* * It is safe to ignore the return values of 'atexit()' and * 'on_exit()'. In the worst case, there is no history of your * currrent session and you have to type all again in your next * session. * This is the default behaviour (traditional reasons), too. * In case you don't have one of these functions, or you don't * want to use them, 'write_history()' is called directly. */ GP_ATEXIT(wrapper_for_write_history); #endif /* GNUPLOT_HISTORY */ fprintf(stderr, "\nTerminal type set to '%s'\n", term->name); } /* if (interactive && term != 0) */ } else { /* come back here from int_error() */ if (interactive == FALSE) exit_status = EXIT_FAILURE; #ifdef HAVE_READLINE_RESET else { /* reset properly readline after a SIGINT+longjmp */ rl_reset_after_signal (); } #endif load_file_error(); /* if we were in load_file(), cleanup */ SET_CURSOR_ARROW; #ifdef VMS /* after catching interrupt */ /* VAX stuffs up stdout on SIGINT while writing to stdout, so reopen stdout. */ if (gpoutfile == stdout) { if ((stdout = freopen("SYS$OUTPUT", "w", stdout)) == NULL) { /* couldn't reopen it so try opening it instead */ if ((stdout = fopen("SYS$OUTPUT", "w")) == NULL) { /* don't use int_error here - causes infinite loop! */ fputs("Error opening SYS$OUTPUT as stdout\n", stderr); } } gpoutfile = stdout; } #endif /* VMS */ if (!interactive && !noinputfiles) { term_reset(); exit(EXIT_FAILURE); /* exit on non-interactive error */ } } if (argc > 1) { #ifdef _Windows TBOOLEAN noend = persist_cl; #endif /* load filenames given as arguments */ while (--argc > 0) { ++argv; c_token = 0; #ifdef _Windows if (stricmp(*argv, "-noend") == 0 || stricmp(*argv, "/noend") == 0 || stricmp(*argv, "-persist") == 0) noend = TRUE; else #endif if (!strncmp(*argv, "-persist", 2) || !strcmp(*argv, "--persist")) { FPRINTF((stderr,"'persist' command line option recognized\n")); } else if (strcmp(*argv, "-") == 0) { interactive = TRUE; while (!com_line()); interactive = FALSE; } else if (strcmp(*argv, "-e") == 0) { --argc; ++argv; if (argc <= 0) { fprintf(stderr, "syntax: gnuplot -e \"commands\"\n"); return 0; } do_string(*argv); } else { load_file(loadpath_fopen(*argv, "r"), gp_strdup(*argv), FALSE); } } #ifdef _Windows if (noend) { interactive = TRUE; while (!com_line()); } #endif } else { /* take commands from stdin */ while (!com_line()); } #if (defined(HAVE_LIBREADLINE) || defined(HAVE_LIBEDITLINE)) && defined(GNUPLOT_HISTORY) #if !defined(HAVE_ATEXIT) && !defined(HAVE_ON_EXIT) /* You should be here if you neither have 'atexit()' nor 'on_exit()' */ wrapper_for_write_history(); #endif /* !HAVE_ATEXIT && !HAVE_ON_EXIT */ #endif /* (HAVE_LIBREADLINE || HAVE_LIBEDITLINE) && GNUPLOT_HISTORY */ #ifdef OS2 RexxDeregisterSubcom("GNUPLOT", NULL); #endif /* HBB 20040223: Not all compilers like exit() to end main() */ /* exit(exit_status); */ return exit_status; }
int main(int argc, char *argv[]) { //GtkWidget *window, *ok_but, *fix_but, *diag, *list, *scroll; //GtkAdjustment *adj; product_component_t *component; product_option_t *option; product_file_t *file; int removed = 0, modified = 0; char productname[1024]; Res = carbon_LoadCarbonRes(OnCommandEvent, OnKeyboardEvent); // If running from an APP bundle in Carbon, it passed -p*** as the first argument // This code effectively cuts out argv[1] as though it wasn't specified if(argc > 1 && argv[1][0] == '-' && argv[1][1] == 'p') { // Move the first argument to overwite the second argv[1] = argv[0]; // Set our arguments starting point to the second argumement argv++; argv[1] = productname; //argc--; carbon_Prompt(Res, PromptType_OK, "Please enter product name you wish to check: ", productname, 1024); fprintf(stderr, "product = '%s'\n", productname); fprintf(stderr, "argv[0] = '%s'\n", argv[0]); fprintf(stderr, "argv[1] = '%s'\n", argv[1]); } goto_installpath(argv[0]); // Set the locale init_locale(); if ( argc < 2 ) { fprintf(stderr, _("Usage: %s product\n"), argv[0]); return 1; } //gtk_init(&argc,&argv); // Load resource data // Show the uninstall screen carbon_ShowInstallScreen(Res, CHECK_PAGE); argv0 = argv[0]; product = loki_openproduct(argv[1]); if ( ! product ) { carbon_Prompt(Res, PromptType_OK, _("Impossible to locate the product information.\nMaybe another user installed it?"), NULL, 0); return 1; } info = loki_getinfo_product(product); carbon_SetLabelText(Res, CHECK_STATUS_LABEL_ID, ""); carbon_DisableControl(Res, CHECK_RESCUE_BUTTON_ID); // Iterate through the components for ( component = loki_getfirst_component(product); component; component = loki_getnext_component(component) ) { add_message(_("---> Checking component '%s'..."), loki_getname_component(component)); for ( option = loki_getfirst_option(component); option; option = loki_getnext_option(option) ) { add_message(_("-> Checking option '%s'..."), loki_getname_option(option)); for ( file = loki_getfirst_file(option); file; file = loki_getnext_file(file) ) { carbon_HandlePendingEvents(Res); switch ( loki_check_file(file) ) { case LOKI_REMOVED: add_message(_("%s was REMOVED"), loki_getpath_file(file)); removed ++; add_corrupt_file(product, loki_getpath_file(file), loki_getname_option(option)); break; case LOKI_CHANGED: add_message(_("%s was MODIFIED"), loki_getpath_file(file)); modified ++; add_corrupt_file(product, loki_getpath_file(file), loki_getname_option(option)); break; case LOKI_OK: add_message(_("%s is OK"), loki_getpath_file(file)); break; } } } } if ( removed || modified ) { char status[200]; snprintf(status, sizeof(status), _("Changes detected: %d files removed, %d files modified."), removed, modified); carbon_SetLabelText(Res, CHECK_STATUS_LABEL_ID, status); carbon_EnableControl(Res, CHECK_RESCUE_BUTTON_ID); } else { carbon_SetLabelText(Res, CHECK_STATUS_LABEL_ID, _("No problems were found.")); } // Wait for user input carbon_IterateForState(Res, &AppDone); return 0; }
/** * Setups the game environment and enters * the titlescreen or game loops. */ static int do_gameloop(const std::vector<std::string>& args) { srand(time(nullptr)); commandline_options cmdline_opts = commandline_options(args); game_config::wesnoth_program_dir = filesystem::directory_name(args[0]); int finished = process_command_args(cmdline_opts); if(finished != -1) { return finished; } boost::scoped_ptr<game_launcher> game( new game_launcher(cmdline_opts,args[0].c_str())); const int start_ticks = SDL_GetTicks(); init_locale(); bool res; // do initialize fonts before reading the game config, to have game // config error messages displayed. fonts will be re-initialized later // when the language is read from the game config. res = font::load_font_config(); if(res == false) { std::cerr << "could not initialize fonts\n"; // The most common symptom of a bogus data dir path -- warn the user. warn_early_init_failure(); return 1; } res = game->init_language(); if(res == false) { std::cerr << "could not initialize the language\n"; return 1; } res = game->init_video(); if(res == false) { std::cerr << "could not initialize display\n"; return 1; } res = image::update_from_preferences(); if(res == false) { std::cerr << "could not initialize image preferences\n"; return 1; } if(preferences::joystick_support_enabled()) { res = game->init_joystick(); if(res == false) { std::cerr << "could not initialize joystick\n"; } } check_fpu(); const cursor::manager cursor_manager; cursor::set(cursor::WAIT); #if (defined(_X11) && !defined(__APPLE__)) || defined(_WIN32) SDL_EventState(SDL_SYSWMEVENT, SDL_ENABLE); #endif gui2::init(); const gui2::event::tmanager gui_event_manager; game_config_manager config_manager(cmdline_opts, game->video(), game->jump_to_editor()); gui2::tloadscreen::display(game->video(), [&res, &config_manager]() { gui2::tloadscreen::progress("load config"); res = config_manager.init_game_config(game_config_manager::NO_FORCE_RELOAD); if(res == false) { std::cerr << "could not initialize game config\n"; return; } gui2::tloadscreen::progress("init fonts"); res = font::load_font_config(); if(res == false) { std::cerr << "could not re-initialize fonts for the current language\n"; return; } gui2::tloadscreen::progress("refresh addons"); refresh_addon_version_info_cache(); }); if(res == false) { return 1; } config tips_of_day; LOG_CONFIG << "time elapsed: "<< (SDL_GetTicks() - start_ticks) << " ms\n"; plugins_manager plugins_man(new application_lua_kernel(&game->video())); plugins_context::Reg const callbacks[] = { { "play_multiplayer", std::bind(&game_launcher::play_multiplayer, game.get())}, }; plugins_context::aReg const accessors[] = { { "command_line", std::bind(&commandline_options::to_config, &cmdline_opts)}, }; plugins_context plugins("titlescreen", callbacks, accessors); plugins.set_callback("exit", std::bind(&safe_exit, std::bind(get_int, std::placeholders::_1, "code", 0)), false); for (;;) { // reset the TC, since a game can modify it, and it may be used // by images in add-ons or campaigns dialogs image::set_team_colors(); statistics::fresh_stats(); if (!game->is_loading()) { const config &cfg = config_manager.game_config().child("titlescreen_music"); if (cfg) { sound::play_music_repeatedly(game_config::title_music); for (const config &i : cfg.child_range("music")) { sound::play_music_config(i); } sound::commit_music_changes(); } else { sound::empty_playlist(); sound::stop_music(); } } handle_lua_script_args(&*game,cmdline_opts); plugins.play_slice(); plugins.play_slice(); if(cmdline_opts.unit_test) { if(cmdline_opts.timeout) { std::cerr << "The wesnoth built-in timeout feature has been removed.\n" << std::endl; std::cerr << "Please use a platform-specific script which will kill the overtime process instead.\n" << std::endl; std::cerr << "For examples in bash, or in windows cmd, see the forums, or the wesnoth repository." << std::endl; std::cerr << "The bash script is called `run_wml_tests`, the windows script is part of the VC project.\n" << std::endl; } int worker_result = game->unit_test(); std::cerr << ((worker_result == 0) ? "PASS TEST " : "FAIL TEST ") << ((worker_result == 3) ? "(INVALID REPLAY)" : "") << ((worker_result == 4) ? "(ERRORED REPLAY)" : "") << ": "<<*cmdline_opts.unit_test << std::endl; return worker_result; } if(game->play_test() == false) { return 0; } if(game->play_screenshot_mode() == false) { return 0; } if(game->play_render_image_mode() == false) { return 0; } //Start directly a campaign if(game->goto_campaign() == false){ if (game->jump_to_campaign_id().empty()) continue; //Go to main menu else return 1; //we got an error starting the campaign from command line } //Start directly a multiplayer //Eventually with a specified server if(game->goto_multiplayer() == false){ continue; //Go to main menu } //Start directly a commandline multiplayer game if(game->play_multiplayer_commandline() == false) { return 0; } if (game->goto_editor() == false) { return 0; } gui2::ttitle_screen::tresult res = game->is_loading() ? gui2::ttitle_screen::LOAD_GAME : gui2::ttitle_screen::NOTHING; preferences::load_hotkeys(); const font::floating_label_context label_manager; cursor::set(cursor::NORMAL); if(res == gui2::ttitle_screen::NOTHING) { gui2::ttitle_screen dlg; dlg.show(game->video()); res = static_cast<gui2::ttitle_screen::tresult>(dlg.get_retval()); } game_launcher::RELOAD_GAME_DATA should_reload = game_launcher::RELOAD_DATA; if(res == gui2::ttitle_screen::QUIT_GAME) { LOG_GENERAL << "quitting game...\n"; return 0; } else if(res == gui2::ttitle_screen::LOAD_GAME) { if(game->load_game() == false) { game->clear_loaded_game(); res = gui2::ttitle_screen::NOTHING; continue; } should_reload = game_launcher::NO_RELOAD_DATA; } else if(res == gui2::ttitle_screen::TUTORIAL) { game->set_tutorial(); } else if(res == gui2::ttitle_screen::NEW_CAMPAIGN) { if(game->new_campaign() == false) { continue; } should_reload = game_launcher::NO_RELOAD_DATA; } else if(res == gui2::ttitle_screen::MULTIPLAYER) { game_config::debug = game_config::mp_debug; if(game->play_multiplayer() == false) { continue; } } else if(res == gui2::ttitle_screen::CHANGE_LANGUAGE) { try { if (game->change_language()) { tips_of_day.clear(); t_string::reset_translations(); image::flush_cache(); } } catch ( std::runtime_error & e ) { gui2::show_error_message(game->video(), e.what()); } continue; } else if(res == gui2::ttitle_screen::EDIT_PREFERENCES) { game->show_preferences(); continue; } else if(res == gui2::ttitle_screen::SHOW_ABOUT) { about::show_about(game->video()); continue; } else if(res == gui2::ttitle_screen::SHOW_HELP) { help::help_manager help_manager(&config_manager.game_config()); help::show_help(game->video()); continue; } else if(res == gui2::ttitle_screen::GET_ADDONS) { // NOTE: we need the help_manager to get access to the Add-ons // section in the game help! help::help_manager help_manager(&config_manager.game_config()); if(manage_addons(game->video())) { config_manager.reload_changed_game_config(); } continue; } else if(res == gui2::ttitle_screen::CORES) { int current = 0; std::vector<config> cores; for (const config& core : game_config_manager::get()->game_config().child_range("core")) { cores.push_back(core); if (core["id"] == preferences::core_id()) current = cores.size() -1; } gui2::tcore_selection core_dlg(cores, current); if (core_dlg.show(game->video())) { int core_index = core_dlg.get_choice(); const std::string& core_id = cores[core_index]["id"]; preferences::set_core_id(core_id); config_manager.reload_changed_game_config(); } continue; } else if(res == gui2::ttitle_screen::RELOAD_GAME_DATA) { gui2::tloadscreen::display(game->video(), [&config_manager]() { config_manager.reload_changed_game_config(); image::flush_cache(); }); continue; } else if(res == gui2::ttitle_screen::START_MAP_EDITOR) { game->start_editor(); continue; } game->launch_game(should_reload); } }
int main (int argc, char *argv[]) { #ifdef HAVE_ICONV char *locale_charset; #endif int status = OK; program_name = base_name (argv[0]); if (STREQ (program_name, APROPOS_NAME)) { am_apropos = 1; argp_program_version = "apropos " PACKAGE_VERSION; } else { struct argp_option *optionp; am_apropos = 0; argp_program_version = "whatis " PACKAGE_VERSION; for (optionp = (struct argp_option *) whatis_argp.options; optionp->name || optionp->key || optionp->arg || optionp->flags || optionp->doc || optionp->group; ++optionp) { if (!optionp->name) continue; if (STREQ (optionp->name, "exact") || STREQ (optionp->name, "and")) optionp->flags |= OPTION_HIDDEN; } } init_debug (); pipeline_install_post_fork (pop_all_cleanups); init_locale (); internal_locale = setlocale (LC_MESSAGES, NULL); /* Use LANGUAGE only when LC_MESSAGES locale category is * neither "C" nor "POSIX". */ if (internal_locale && strcmp (internal_locale, "C") && strcmp (internal_locale, "POSIX")) multiple_locale = getenv ("LANGUAGE"); internal_locale = xstrdup (internal_locale ? internal_locale : "C"); if (argp_parse (am_apropos ? &apropos_argp : &whatis_argp, argc, argv, 0, 0, 0)) exit (FAIL); read_config_file (user_config_file != NULL); /* close this locale and reinitialise if a new locale was issued as an argument or in $MANOPT */ if (locale) { free (internal_locale); internal_locale = setlocale (LC_ALL, locale); if (internal_locale) internal_locale = xstrdup (internal_locale); else internal_locale = xstrdup (locale); debug ("main(): locale = %s, internal_locale = %s\n", locale, internal_locale); if (internal_locale) { setenv ("LANGUAGE", internal_locale, 1); locale_changed (); multiple_locale = NULL; } } /* sort out the internal manpath */ if (manp == NULL) manp = locale_manpath (get_manpath (alt_systems)); else free (get_manpath (NULL)); create_pathlist (manp, manpathlist); display_seen = hashtable_create (&null_hashtable_free); #ifdef HAVE_ICONV locale_charset = xasprintf ("%s//IGNORE", get_locale_charset ()); conv_to_locale = iconv_open (locale_charset, "UTF-8"); free (locale_charset); #endif /* HAVE_ICONV */ if (regex_opt) { int i; preg = XNMALLOC (num_keywords, regex_t); for (i = 0; i < num_keywords; ++i) xregcomp (&preg[i], keywords[i], REG_EXTENDED | REG_NOSUB | REG_ICASE); } if (!search ((const char **) keywords, num_keywords)) status = NOT_FOUND; if (regex_opt) { int i; for (i = 0; i < num_keywords; ++i) regfree (&preg[i]); free (preg); } #ifdef HAVE_ICONV if (conv_to_locale != (iconv_t) -1) iconv_close (conv_to_locale); #endif /* HAVE_ICONV */ hashtable_free (display_seen); free_pathlist (manpathlist); free (manp); free (internal_locale); free (program_name); exit (status); }
int main(int argc, char *argv[]) { GtkWidget *window, *ok_but, *fix_but, *diag, *list, *scroll; GtkAdjustment *adj; product_component_t *component; product_option_t *option; product_file_t *file; int removed = 0, modified = 0; goto_installpath(argv[0]); /* Set the locale */ init_locale(); if ( argc < 2 ) { fprintf(stderr, _("Usage: %s product\n"), argv[0]); return 1; } gtk_init(&argc,&argv); argv0 = argv[0]; /* Initialize Glade */ glade_init(); check_glade = glade_xml_new("check.glade", "check_dialog"); /* Add all signal handlers defined in glade file */ glade_xml_signal_autoconnect(check_glade); window = glade_xml_get_widget(check_glade, "check_dialog"); gtk_widget_realize(window); while( gtk_events_pending() ) { gtk_main_iteration(); } diag = glade_xml_get_widget(check_glade, "diagnostic_label"); ok_but = glade_xml_get_widget(check_glade, "dismiss_button"); fix_but = glade_xml_get_widget(check_glade, "rescue_button"); list = glade_xml_get_widget(check_glade, "main_list"); scroll = glade_xml_get_widget(check_glade, "scrolledwindow"); product = loki_openproduct(argv[1]); if ( ! product ) { message_dialog(_("Impossible to locate the product information.\nMaybe another user installed it?"), _("Error")); return 1; } info = loki_getinfo_product(product); gtk_label_set_text(GTK_LABEL(diag), ""); gtk_widget_set_sensitive(fix_but, FALSE); adj = GTK_ADJUSTMENT(gtk_adjustment_new(100.0, 1.0, 100.0, 1.0, 10.0, 10.0)); gtk_scrolled_window_set_vadjustment(GTK_SCROLLED_WINDOW(scroll), adj); /* Iterate through the components */ for ( component = loki_getfirst_component(product); component; component = loki_getnext_component(component) ) { add_message(list, _("---> Checking component '%s'..."), loki_getname_component(component)); for ( option = loki_getfirst_option(component); option; option = loki_getnext_option(option) ) { add_message(list, _("-> Checking option '%s'..."), loki_getname_option(option)); for ( file = loki_getfirst_file(option); file; file = loki_getnext_file(file) ) { gtk_main_iteration(); switch ( loki_check_file(file) ) { case LOKI_REMOVED: add_message(list, _("%s was REMOVED"), loki_getpath_file(file)); removed ++; add_corrupt_file(product, loki_getpath_file(file), loki_getname_option(option)); break; case LOKI_CHANGED: add_message(list, _("%s was MODIFIED"), loki_getpath_file(file)); modified ++; add_corrupt_file(product, loki_getpath_file(file), loki_getname_option(option)); break; case LOKI_OK: add_message(list, _("%s is OK"), loki_getpath_file(file)); break; } } } } if ( removed || modified ) { char status[200]; snprintf(status, sizeof(status), _("Changes detected: %d files removed, %d files modified."), removed, modified); gtk_label_set_text(GTK_LABEL(diag), status); gtk_widget_set_sensitive(fix_but, TRUE); } else { gtk_label_set_text(GTK_LABEL(diag), _("No problems were found.")); } /* Run the UI.. */ gtk_main(); return 0; }
/** * Setups the game environment and enters * the titlescreen or game loops. */ static int do_gameloop(const std::vector<std::string>& args) { srand(time(nullptr)); commandline_options cmdline_opts = commandline_options(args); game_config::wesnoth_program_dir = filesystem::directory_name(args[0]); int finished = process_command_args(cmdline_opts); if(finished != -1) { #ifdef _WIN32 if(lg::using_own_console()) { std::cerr << "Press enter to continue..." << std::endl; std::cin.get(); } #endif return finished; } const std::unique_ptr<game_launcher> game(new game_launcher(cmdline_opts, args[0].c_str())); const int start_ticks = SDL_GetTicks(); init_locale(); bool res; // Do initialize fonts before reading the game config, to have game // config error messages displayed. fonts will be re-initialized later // when the language is read from the game config. res = font::load_font_config(); if(res == false) { std::cerr << "could not initialize fonts\n"; // The most common symptom of a bogus data dir path -- warn the user. warn_early_init_failure(); return 1; } res = game->init_language(); if(res == false) { std::cerr << "could not initialize the language\n"; return 1; } res = game->init_video(); if(res == false) { std::cerr << "could not initialize display\n"; return 1; } res = image::update_from_preferences(); if(res == false) { std::cerr << "could not initialize image preferences\n"; return 1; } if(preferences::joystick_support_enabled()) { res = game->init_joystick(); if(res == false) { std::cerr << "could not initialize joystick\n"; } } check_fpu(); const cursor::manager cursor_manager; cursor::set(cursor::WAIT); #if(defined(_X11) && !defined(__APPLE__)) || defined(_WIN32) SDL_EventState(SDL_SYSWMEVENT, SDL_ENABLE); #endif gui2::init(); const gui2::event::manager gui_event_manager; game_config_manager config_manager(cmdline_opts, game->jump_to_editor()); gui2::dialogs::loading_screen::display([&res, &config_manager]() { gui2::dialogs::loading_screen::progress(loading_stage::load_config); res = config_manager.init_game_config(game_config_manager::NO_FORCE_RELOAD); if(res == false) { std::cerr << "could not initialize game config\n"; return; } gui2::dialogs::loading_screen::progress(loading_stage::init_fonts); res = font::load_font_config(); if(res == false) { std::cerr << "could not re-initialize fonts for the current language\n"; return; } gui2::dialogs::loading_screen::progress(loading_stage::refresh_addons); refresh_addon_version_info_cache(); }); if(res == false) { return 1; } LOG_CONFIG << "time elapsed: " << (SDL_GetTicks() - start_ticks) << " ms\n"; plugins_manager plugins_man(new application_lua_kernel); plugins_context::Reg const callbacks[] { {"play_multiplayer", std::bind(&game_launcher::play_multiplayer, game.get(), game_launcher::MP_CONNECT)}, }; plugins_context::aReg const accessors[] { {"command_line", std::bind(&commandline_options::to_config, &cmdline_opts)}, }; plugins_context plugins("titlescreen", callbacks, accessors); plugins.set_callback("exit", [](const config& cfg) { safe_exit(cfg["code"].to_int(0)); }, false); for(;;) { // reset the TC, since a game can modify it, and it may be used // by images in add-ons or campaigns dialogs image::set_team_colors(); statistics::fresh_stats(); if(!game->is_loading()) { const config& cfg = config_manager.game_config().child("titlescreen_music"); if(cfg) { sound::play_music_repeatedly(game_config::title_music); for(const config& i : cfg.child_range("music")) { sound::play_music_config(i); } sound::commit_music_changes(); } else { sound::empty_playlist(); sound::stop_music(); } } handle_lua_script_args(&*game, cmdline_opts); plugins.play_slice(); plugins.play_slice(); if(cmdline_opts.unit_test) { if(cmdline_opts.timeout) { std::cerr << "The wesnoth built-in timeout feature has been removed.\n" << std::endl; std::cerr << "Please use a platform-specific script which will kill the overtime process instead.\n" << std::endl; std::cerr << "For examples in bash, or in windows cmd, see the forums, or the wesnoth repository." << std::endl; std::cerr << "The bash script is called `run_wml_tests`, the windows script is part of the VC project.\n" << std::endl; } int worker_result = game->unit_test(); std::cerr << ((worker_result == 0) ? "PASS TEST " : "FAIL TEST ") << ((worker_result == 3) ? "(INVALID REPLAY)" : "") << ((worker_result == 4) ? "(ERRORED REPLAY)" : "") << ": " << *cmdline_opts.unit_test << std::endl; return worker_result; } if(game->play_test() == false) { return 0; } if(game->play_screenshot_mode() == false) { return 0; } if(game->play_render_image_mode() == false) { return 0; } // Start directly a campaign if(game->goto_campaign() == false) { if(game->jump_to_campaign_id().empty()) continue; // Go to main menu else return 1; // we got an error starting the campaign from command line } // Start directly a multiplayer // Eventually with a specified server if(game->goto_multiplayer() == false) { continue; // Go to main menu } // Start directly a commandline multiplayer game if(game->play_multiplayer_commandline() == false) { return 0; } if(game->goto_editor() == false) { return 0; } preferences::load_hotkeys(); const font::floating_label_context label_manager; cursor::set(cursor::NORMAL); game_launcher::RELOAD_GAME_DATA should_reload = game_launcher::RELOAD_DATA; // If loading a game, skip the titlescreen entirely if(game->is_loading()) { if(!game->load_game()) { game->clear_loaded_game(); } game->launch_game(should_reload); continue; } gui2::dialogs::title_screen dlg(*game); /* * Quick explanation of the titlscreen loop: * * The dialog's redraw_background_ flag is initialized as true in the constructor, so the dialog will always * display at least once when this loop is executed. Each time it's opened, the aforementioned flag is set to * false, and any selection that results in leaving the dialog simply sets the window's retval and proceeds to * the appropriate action. * * Certain actions (such as window resizing) set the flag to true, which allows the dialog to reopen with any * layout changes such as those dictated by window resolution. */ while(dlg.get_retval() == gui2::dialogs::title_screen::REDRAW_BACKGROUND) { dlg.show(); } switch(dlg.get_retval()) { case gui2::dialogs::title_screen::QUIT_GAME: LOG_GENERAL << "quitting game...\n"; return 0; case gui2::dialogs::title_screen::MP_CONNECT: game_config::debug = game_config::mp_debug; if(!game->play_multiplayer(game_launcher::MP_CONNECT)) { continue; } break; case gui2::dialogs::title_screen::MP_HOST: game_config::debug = game_config::mp_debug; if(!game->play_multiplayer(game_launcher::MP_HOST)) { continue; } break; case gui2::dialogs::title_screen::MP_LOCAL: game_config::debug = game_config::mp_debug; if(!game->play_multiplayer(game_launcher::MP_LOCAL)) { continue; } break; case gui2::dialogs::title_screen::RELOAD_GAME_DATA: gui2::dialogs::loading_screen::display([&config_manager]() { config_manager.reload_changed_game_config(); image::flush_cache(); }); break; case gui2::dialogs::title_screen::MAP_EDITOR: game->start_editor(); break; case gui2::dialogs::title_screen::SHOW_ABOUT: gui2::dialogs::end_credits::display(); break; case gui2::dialogs::title_screen::LAUNCH_GAME: game->launch_game(should_reload); break; case gui2::dialogs::title_screen::REDRAW_BACKGROUND: break; } } }
int main(int argc, char **argv) { init_locale(); mpw_path(); fs::path self = fs::path(argv[0]).filename(); if (self == "mpw-make") return make(argc, argv); if (self == "mpw-shell" && argc > 1 && !strcmp(argv[1],"make")) { argv[1] = (char *)"mpw-make"; return make(argc - 1, argv + 1); } Environment e; init(e); const char *cflag = nullptr; bool fflag = false; int c; while ((c = getopt(argc, argv, "c:D:vhf")) != -1) { switch (c) { case 'c': // -c command cflag = optarg; break; case 'D': // -Dname or -Dname=value define(e, optarg); break; case 'v': // -v verbose e.set("echo", "1"); break; case 'f': fflag = true; break; case 'h': help(); exit(0); default: help(); exit(EX_USAGE); } } if (!cflag) fprintf(stdout, "MPW Shell " VERSION "\n"); if (!fflag) { fs::path startup = root() / "Startup"; e.startup(true); mpw_parser p(e); try { read_file(e, startup); } catch (const std::system_error &ex) { fprintf(stderr, "### %s: %s\n", startup.c_str(), ex.what()); } catch (const quit_command_t &) { } e.startup(false); } try { int rv = 0; if (cflag) { rv = read_string(e, cflag); exit(rv); } if (isatty(STDIN_FILENO)) rv = interactive(e); else rv = read_fd(e, STDIN_FILENO); exit(rv); } catch (const quit_command_t &) { exit(0); } }
int main(int argc_orig, char **argv) #endif { int i; /* We want the current value of argc to persist across a LONGJMP from int_error(). * Without this the compiler may put it on the stack, which LONGJMP clobbers. * Here we try make it a volatile variable that optimization will not affect. * Why do we not have to do the same for argv? I don't know. * But the test cases that broke with generic argc seem fine with generic argv. */ static volatile int argc; argc = argc_orig; #ifdef LINUXVGA LINUX_setup(); /* setup VGA before dropping privilege DBT 4/5/99 */ drop_privilege(); #endif /* make sure that we really have revoked root access, this might happen if gnuplot is compiled without vga support but is installed suid by mistake */ #ifdef __linux__ if (setuid(getuid()) != 0) { fprintf(stderr,"gnuplot: refusing to run at elevated privilege\n"); exit(EXIT_FAILURE); } #endif /* HBB: Seems this isn't needed any more for DJGPP V2? */ /* HBB: disable all floating point exceptions, just keep running... */ #if defined(DJGPP) && (DJGPP!=2) _control87(MCW_EM, MCW_EM); #endif #if defined(OS2) { int rc; #ifdef OS2_IPC char semInputReadyName[40]; sprintf(semInputReadyName, "\\SEM32\\GP%i_Input_Ready", getpid()); rc = DosCreateEventSem(semInputReadyName, &semInputReady, 0, 0); if (rc != 0) fputs("DosCreateEventSem error\n", stderr); #endif rc = RexxRegisterSubcomExe("GNUPLOT", (PFN) RexxInterface, NULL); } #endif /* malloc large blocks, otherwise problems with fragmented mem */ #ifdef MALLOCDEBUG malloc_debug(7); #endif /* init progpath and get helpfile from executable directory */ #if defined(MSDOS) || defined(OS2) { char *s; #ifdef __EMX__ _execname(progpath, sizeof(progpath)); #else safe_strncpy(progpath, argv[0], sizeof(progpath)); #endif /* convert '/' to '\\' */ for (s = progpath; *s != NUL; s++) if (*s == DIRSEP2) *s = DIRSEP1; /* cut program name */ s = strrchr(progpath, DIRSEP1); if (s != NULL) s++; else s = progpath; *s = NUL; /* init HelpFile */ strcpy(HelpFile, progpath); strcat(HelpFile, "gnuplot.gih"); /* remove trailing "bin/" from progpath */ if ((s != NULL) && (s - progpath >= 4)) { s -= 4; if (strncasecmp(s, "bin", 3) == 0) *s = NUL; } } #endif /* DJGPP */ #if (defined(PIPE_IPC) || defined(_WIN32)) && (defined(HAVE_LIBREADLINE) || (defined(HAVE_LIBEDITLINE) && defined(X11))) /* Editline needs this to be set before the very first call to readline(). */ /* Support for rl_getc_function is broken for utf-8 in editline. Since it is only really required for X11, disable this section when building without X11. */ rl_getc_function = getc_wrapper; #endif #if defined(HAVE_LIBREADLINE) || defined(HAVE_LIBEDITLINE) /* T.Walter 1999-06-24: 'rl_readline_name' must be this fix name. * It is used to parse a 'gnuplot' specific section in '~/.inputrc' * or gnuplot specific commands in '.editrc' (when using editline * instead of readline) */ rl_readline_name = "Gnuplot"; rl_terminal_name = getenv("TERM"); #if defined(HAVE_LIBREADLINE) using_history(); #else history_init(); #endif #endif #if defined(HAVE_LIBREADLINE) && !defined(MISSING_RL_TILDE_EXPANSION) rl_complete_with_tilde_expansion = 1; #endif for (i = 1; i < argc; i++) { if (!argv[i]) continue; if (!strcmp(argv[i], "-V") || !strcmp(argv[i], "--version")) { printf("gnuplot %s patchlevel %s\n", gnuplot_version, gnuplot_patchlevel); return 0; } else if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) { printf( "Usage: gnuplot [OPTION] ... [FILE]\n" #ifdef X11 "for X11 options see 'help X11->command-line-options'\n" #endif " -V, --version\n" " -h, --help\n" " -p --persist\n" " -s --slow\n" " -d --default-settings\n" " -c scriptfile ARG1 ARG2 ... \n" " -e \"command1; command2; ...\"\n" "gnuplot %s patchlevel %s\n", gnuplot_version, gnuplot_patchlevel); #ifdef DEVELOPMENT_VERSION printf( #ifdef DIST_CONTACT "Report bugs to "DIST_CONTACT"\n" " or %s\n", #else "Report bugs to %s\n", #endif bug_email); #endif return 0; } else if (!strncmp(argv[i], "-persist", 2) || !strcmp(argv[i], "--persist") #ifdef _WIN32 || !stricmp(argv[i], "-noend") || !stricmp(argv[i], "/noend") #endif ) { persist_cl = TRUE; } else if (!strncmp(argv[i], "-slow", 2) || !strcmp(argv[i], "--slow")) { slow_font_startup = TRUE; } else if (!strncmp(argv[i], "-d", 2) || !strcmp(argv[i], "--default-settings")) { /* Skip local customization read from ~/.gnuplot */ skip_gnuplotrc = TRUE; } } #ifdef X11 /* the X11 terminal removes tokens that it recognizes from argv. */ { int n = X11_args(argc, argv); argv += n; argc -= n; } #endif setbuf(stderr, (char *) NULL); #ifdef HAVE_SETVBUF /* This was once setlinebuf(). Docs say this is * identical to setvbuf(,NULL,_IOLBF,0), but MS C * faults this (size out of range), so we try with * size of 1024 instead. [SAS/C does that, too. -lh] */ if (setvbuf(stdout, (char *) NULL, _IOLBF, (size_t) 1024) != 0) (void) fputs("Could not linebuffer stdout\n", stderr); /* Switching to unbuffered mode causes all characters in the input * buffer to be lost. So the only safe time to do it is on program entry. * Do any non-X platforms suffer from this problem? * EAM - Jan 2013 YES. */ setvbuf(stdin, (char *) NULL, _IONBF, 0); #endif gpoutfile = stdout; /* Initialize pre-loaded user variables */ /* "pi" is hard-wired as the first variable */ (void) add_udv_by_name("GNUTERM"); (void) add_udv_by_name("NaN"); init_constants(); udv_user_head = &(udv_NaN->next_udv); init_memory(); interactive = FALSE; /* April 2017: We used to call init_terminal() here, but now */ /* We defer initialization until error handling has been set up. */ # if defined(_WIN32) && !defined(WGP_CONSOLE) interactive = TRUE; # else interactive = isatty(fileno(stdin)); # endif /* Note: we want to know whether this is an interactive session so that we can * decide whether or not to write status information to stderr. The old test * for this was to see if (argc > 1) but the addition of optional command line * switches broke this. What we really wanted to know was whether any of the * command line arguments are file names or an explicit in-line "-e command". */ for (i = 1; i < argc; i++) { # ifdef _WIN32 if (!stricmp(argv[i], "/noend")) continue; # endif if ((argv[i][0] != '-') || (argv[i][1] == 'e') || (argv[i][1] == 'c') ) { interactive = FALSE; break; } } /* Need this before show_version is called for the first time */ if (interactive) show_version(stderr); else show_version(NULL); /* Only load GPVAL_COMPILE_OPTIONS */ update_gpval_variables(3); /* update GPVAL_ variables available to user */ #ifdef VMS /* initialise screen management routines for command recall */ { unsigned int ierror; if (ierror = smg$create_virtual_keyboard(&vms_vkid) != SS$_NORMAL) done(ierror); if (ierror = smg$create_key_table(&vms_ktid) != SS$_NORMAL) done(ierror); } #endif /* VMS */ if (!SETJMP(command_line_env, 1)) { /* first time */ interrupt_setup(); get_user_env(); init_loadpath(); init_locale(); memset(&sm_palette, 0, sizeof(sm_palette)); init_fit(); /* Initialization of fitting module */ #ifdef READLINE /* When using the built-in readline, we set the initial encoding according to the locale as this is required to properly handle keyboard input. */ init_encoding(); #endif init_gadgets(); /* April 2017: Now that error handling is in place, it is safe parse * GNUTERM during terminal initialization. * atexit processing is done in reverse order. We want * the generic terminal shutdown in term_reset to be executed before * any terminal specific cleanup requested by individual terminals. */ init_terminal(); push_terminal(0); /* remember the initial terminal */ gp_atexit(term_reset); /* Execute commands in ~/.gnuplot */ init_session(); if (interactive && term != 0) { /* not unknown */ #ifdef GNUPLOT_HISTORY #if (defined(HAVE_LIBREADLINE) || defined(HAVE_LIBEDITLINE)) && !defined(_WIN32) expanded_history_filename = tilde_expand(GNUPLOT_HISTORY_FILE); #else expanded_history_filename = gp_strdup(GNUPLOT_HISTORY_FILE); gp_expand_tilde(&expanded_history_filename); #endif read_history(expanded_history_filename); /* * It is safe to ignore the return values of 'atexit()' and * 'on_exit()'. In the worst case, there is no history of your * currrent session and you have to type all again in your next * session. */ gp_atexit(wrapper_for_write_history); #endif /* GNUPLOT_HISTORY */ #if defined(READLINE) && defined(WGP_CONSOLE) fprintf(stderr, "Encoding set to '%s'.\n", encoding_names[encoding]); #endif } /* if (interactive && term != 0) */ } else { /* come back here from int_error() */ if (!successful_initialization) { /* Only print the warning once */ successful_initialization = TRUE; fprintf(stderr,"WARNING: Error during initialization\n\n"); } if (interactive == FALSE) exit_status = EXIT_FAILURE; #ifdef HAVE_READLINE_RESET else { /* reset properly readline after a SIGINT+longjmp */ rl_reset_after_signal (); } #endif load_file_error(); /* if we were in load_file(), cleanup */ SET_CURSOR_ARROW; #ifdef VMS /* after catching interrupt */ /* VAX stuffs up stdout on SIGINT while writing to stdout, so reopen stdout. */ if (gpoutfile == stdout) { if ((stdout = freopen("SYS$OUTPUT", "w", stdout)) == NULL) { /* couldn't reopen it so try opening it instead */ if ((stdout = fopen("SYS$OUTPUT", "w")) == NULL) { /* don't use int_error here - causes infinite loop! */ fputs("Error opening SYS$OUTPUT as stdout\n", stderr); } } gpoutfile = stdout; } #endif /* VMS */ /* Why a goto? Because we exited the loop below via int_error */ /* using LONGJMP. The compiler was not expecting this, and */ /* "optimized" the handling of argc and argv such that simply */ /* entering the loop again from the top finds them messed up. */ /* If we reenter the loop via a goto then there is some hope */ /* that code reordering does not hurt us. */ if (reading_from_dash && interactive) goto RECOVER_FROM_ERROR_IN_DASH; reading_from_dash = FALSE; if (!interactive && !noinputfiles) { term_reset(); gp_exit(EXIT_FAILURE); /* exit on non-interactive error */ } } /* load filenames given as arguments */ while (--argc > 0) { ++argv; c_token = 0; if (!strncmp(*argv, "-persist", 2) || !strcmp(*argv, "--persist") #ifdef _WIN32 || !stricmp(*argv, "-noend") || !stricmp(*argv, "/noend") #endif ) { FPRINTF((stderr,"'persist' command line option recognized\n")); } else if (strcmp(*argv, "-") == 0) { #if defined(_WIN32) && !defined(WGP_CONSOLE) TextShow(&textwin); interactive = TRUE; #else interactive = isatty(fileno(stdin)); #endif RECOVER_FROM_ERROR_IN_DASH: reading_from_dash = TRUE; while (!com_line()); reading_from_dash = FALSE; interactive = FALSE; noinputfiles = FALSE; } else if (strcmp(*argv, "-e") == 0) { int save_state = interactive; --argc; ++argv; if (argc <= 0) { fprintf(stderr, "syntax: gnuplot -e \"commands\"\n"); return 0; } interactive = FALSE; noinputfiles = FALSE; do_string(*argv); interactive = save_state; } else if (!strncmp(*argv, "-slow", 2) || !strcmp(*argv, "--slow")) { slow_font_startup = TRUE; } else if (!strncmp(*argv, "-d", 2) || !strcmp(*argv, "--default-settings")) { /* Ignore this; it already had its effect */ FPRINTF((stderr, "ignoring -d\n")); } else if (strcmp(*argv, "-c") == 0) { /* Pass command line arguments to the gnuplot script in the next * argument. This consumes the remainder of the command line */ interactive = FALSE; noinputfiles = FALSE; --argc; ++argv; if (argc <= 0) { fprintf(stderr, "syntax: gnuplot -c scriptname args\n"); gp_exit(EXIT_FAILURE); } call_argc = GPMIN(9, argc - 1); for (i=0; i<=call_argc; i++) { /* Need to stash argv[i] somewhere visible to load_file() */ call_args[i] = gp_strdup(argv[i+1]); } load_file(loadpath_fopen(*argv, "r"), gp_strdup(*argv), 5); gp_exit(EXIT_SUCCESS); } else if (*argv[0] == '-') { fprintf(stderr, "unrecognized option %s\n", *argv); } else { interactive = FALSE; noinputfiles = FALSE; load_file(loadpath_fopen(*argv, "r"), gp_strdup(*argv), 4); } } /* take commands from stdin */ if (noinputfiles) { while (!com_line()) ctrlc_flag = FALSE; /* reset asynchronous Ctrl-C flag */ } #ifdef _WIN32 /* On Windows, handle 'persist' by keeping the main input loop running (windows/wxt), */ /* but only if there are any windows open. Note that qt handles this properly. */ if (persist_cl) { if (WinAnyWindowOpen()) { #ifdef WGP_CONSOLE if (!interactive) { /* no further input from pipe */ while (WinAnyWindowOpen()) win_sleep(100); } else #endif { interactive = TRUE; while (!com_line()) ctrlc_flag = FALSE; /* reset asynchronous Ctrl-C flag */ interactive = FALSE; } } } #endif #if (defined(HAVE_LIBREADLINE) || defined(HAVE_LIBEDITLINE)) && defined(GNUPLOT_HISTORY) #if !defined(HAVE_ATEXIT) && !defined(HAVE_ON_EXIT) /* You should be here if you neither have 'atexit()' nor 'on_exit()' */ wrapper_for_write_history(); #endif /* !HAVE_ATEXIT && !HAVE_ON_EXIT */ #endif /* (HAVE_LIBREADLINE || HAVE_LIBEDITLINE) && GNUPLOT_HISTORY */ #ifdef OS2 RexxDeregisterSubcom("GNUPLOT", NULL); #endif /* HBB 20040223: Not all compilers like exit() to end main() */ /* exit(exit_status); */ #if ! defined(_WIN32) /* Windows does the cleanup later */ gp_exit_cleanup(); #endif return exit_status; }
/* * Any Postgres server process begins execution here. */ int main(int argc, char *argv[]) { bool do_check_root = true; progname = get_progname(argv[0]); /* * Platform-specific startup hacks */ startup_hacks(progname); /* * Remember the physical location of the initially given argv[] array for * possible use by ps display. On some platforms, the argv[] storage must * be overwritten in order to set the process title for ps. In such cases * save_ps_display_args makes and returns a new copy of the argv[] array. * * save_ps_display_args may also move the environment strings to make * extra room. Therefore this should be done as early as possible during * startup, to avoid entanglements with code that might save a getenv() * result pointer. */ argv = save_ps_display_args(argc, argv); /* * If supported on the current platform, set up a handler to be called if * the backend/postmaster crashes with a fatal signal or exception. */ #if defined(WIN32) && defined(HAVE_MINIDUMP_TYPE) pgwin32_install_crashdump_handler(); #endif /* * Fire up essential subsystems: error and memory management * * Code after this point is allowed to use elog/ereport, though * localization of messages may not work right away, and messages won't go * anywhere but stderr until GUC settings get loaded. */ MemoryContextInit(); /* * Set up locale information from environment. Note that LC_CTYPE and * LC_COLLATE will be overridden later from pg_control if we are in an * already-initialized database. We set them here so that they will be * available to fill pg_control during initdb. LC_MESSAGES will get set * later during GUC option processing, but we set it here to allow startup * error messages to be localized. */ set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("postgres")); #ifdef WIN32 /* * Windows uses codepages rather than the environment, so we work around * that by querying the environment explicitly first for LC_COLLATE and * LC_CTYPE. We have to do this because initdb passes those values in the * environment. If there is nothing there we fall back on the codepage. */ { char *env_locale; if ((env_locale = getenv("LC_COLLATE")) != NULL) init_locale("LC_COLLATE", LC_COLLATE, env_locale); else init_locale("LC_COLLATE", LC_COLLATE, ""); if ((env_locale = getenv("LC_CTYPE")) != NULL) init_locale("LC_CTYPE", LC_CTYPE, env_locale); else init_locale("LC_CTYPE", LC_CTYPE, ""); } #else init_locale("LC_COLLATE", LC_COLLATE, ""); init_locale("LC_CTYPE", LC_CTYPE, ""); #endif #ifdef LC_MESSAGES init_locale("LC_MESSAGES", LC_MESSAGES, ""); #endif /* * We keep these set to "C" always, except transiently in pg_locale.c; see * that file for explanations. */ init_locale("LC_MONETARY", LC_MONETARY, "C"); init_locale("LC_NUMERIC", LC_NUMERIC, "C"); init_locale("LC_TIME", LC_TIME, "C"); /* * Now that we have absorbed as much as we wish to from the locale * environment, remove any LC_ALL setting, so that the environment * variables installed by pg_perm_setlocale have force. */ unsetenv("LC_ALL"); check_strxfrm_bug(); /* * Catch standard options before doing much else, in particular before we * insist on not being root. */ if (argc > 1) { if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-?") == 0) { help(progname); exit(0); } if (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-V") == 0) { puts("postgres (PostgreSQL) " PG_VERSION); exit(0); } /* * In addition to the above, we allow "--describe-config" and "-C var" * to be called by root. This is reasonably safe since these are * read-only activities. The -C case is important because pg_ctl may * try to invoke it while still holding administrator privileges on * Windows. Note that while -C can normally be in any argv position, * if you want to bypass the root check you must put it first. This * reduces the risk that we might misinterpret some other mode's -C * switch as being the postmaster/postgres one. */ if (strcmp(argv[1], "--describe-config") == 0) do_check_root = false; else if (argc > 2 && strcmp(argv[1], "-C") == 0) do_check_root = false; } /* * Make sure we are not running as root, unless it's safe for the selected * option. */ if (do_check_root) check_root(progname); /* * Dispatch to one of various subprograms depending on first argument. */ #ifdef EXEC_BACKEND if (argc > 1 && strncmp(argv[1], "--fork", 6) == 0) SubPostmasterMain(argc, argv); /* does not return */ #endif #ifdef WIN32 /* * Start our win32 signal implementation * * SubPostmasterMain() will do this for itself, but the remaining modes * need it here */ pgwin32_signal_initialize(); #endif if (argc > 1 && strcmp(argv[1], "--boot") == 0) AuxiliaryProcessMain(argc, argv); /* does not return */ else if (argc > 1 && strcmp(argv[1], "--describe-config") == 0) GucInfoMain(); /* does not return */ else if (argc > 1 && strcmp(argv[1], "--single") == 0) PostgresMain(argc, argv, NULL, /* no dbname */ strdup(get_user_name_or_exit(progname))); /* does not return */ else PostmasterMain(argc, argv); /* does not return */ abort(); /* should not get here */ }
int main(int ac, char **av) { int c; int ch; int i; int count_items; char **items; int shortcut[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 0}; int shortcut_len = sizeof shortcut / sizeof(int); int l_num; int mode = 0; if (ac == 1) usage(); init_locale(); f_result = stderr; l.f_out = stdout; i = get_options(ac, av); items = av + i; count_items = ac - i; if (count_items == 0) return (1); if (nb_items_per_page <= 0 || nb_items_per_page >= shortcut_len) return 1; tcgetattr( STDIN_FILENO, &oldt ); newt = oldt; newt.c_lflag &= ~( ICANON | ECHO ); tcsetattr( STDIN_FILENO, TCSANOW, &newt); terminit(); l.prefix = shortcut; l.upstr = upstr; l.dcstr = dcstr; l.bottom_msg[0] = '\0'; l.bottom_msg_col_s = 0; l.y = 0; l.cursor_y = 0; l.item_top_page = 0; set_items_per_page(&l, nb_items_per_page); set_items(&l, items, count_items); signal(SIGWINCH, sigwinch); ioctl(STDOUT_FILENO, TIOCGWINSZ, &winsz); l.col_width = winsz.ws_col; calibre_width(&l); draw_items(&l); fflush(l.f_out); while ((c = getchar()) != 'q') { if (c == -1) { if (errno == EINTR) continue; exit(1); } switch (c) { case '/': tcsetattr( STDIN_FILENO, TCSANOW, &oldt); search(); l.cur_page = 0; l.cursor_y = 0; draw_items(&l); tcsetattr( STDIN_FILENO, TCSANOW, &newt); break; case 'n' /*|| ' ' || 'j' */: page_seek(&l, RELATIVE, 1); break; case 'p' /*|| 'k'*/: page_seek(&l, RELATIVE, -1); break; case 'j': cursor_seek(&l, 1, 1); break; case 'k': cursor_seek(&l, 1, -1); break; case ' ': select_item(&l, l.cursor_y); cursor_seek(&l, RELATIVE, 1); break; case '\n': enter_selected_items(); cleanup_exit(0); break; default: if ((l_num = has_c(c, shortcut)) >= 0) { enter_result(l_num + l.item_top_page); cleanup_exit(0); } break; } fflush(l.f_out); } cleanup_exit(0); return 0; }
int main(int argc, char *argv[]) { struct sockaddr_in serv; struct sockaddr_in client; // struct in_addr *aux; short port = 4000; // char *host = "193.136.19.131"; char buf[1024]; wchar_t wbuf[1024]; size_t n; unsigned int size = sizeof(client); int zbr = 1; FILE *f = NULL; init_locale(); if (argc != 2) { printf("Usage: nat-server <config-file>\n"); return 0; } CORPORA = g_hash_table_new(g_int_hash, g_int_equal); /* CONFIGURATION FILE */ LOG("Loading configuration file"); f = fopen(argv[1], "rb"); if (f) { CorpusInfo *tmp_corpus; while(!feof(f)) { fgets(buf, 1024, f); if (!feof(f)) { if (buf[0] == '\n' || buf[0] == '#' || buf[0] == ' ') continue; // strip newline if there is one while (buf[strlen(buf) - 1] == ' ' || buf[strlen(buf) - 1] == '\n' || buf[strlen(buf) - 1] == '/' || buf[strlen(buf) - 1] == '\t') buf[strlen(buf) - 1] = '\0'; LOG("Loading corpus from %s [%d]", buf, ++LAST_CORPORA); tmp_corpus = corpus_info_new(buf); g_hash_table_insert(CORPORA, int_ptr(LAST_CORPORA), tmp_corpus); } } fclose(f); } else { report_error("Can't find '%s'", argv[1]); } /* SERVER CODE */ /*-------------*/ signal(SIGALRM, handle_sigalrm); signal(SIGINT, handle_sigint); signal(SIGPIPE, handle_sigpipe); memset(&serv, 0, sizeof(serv)); serv.sin_family = AF_INET; serv.sin_port = htons(port); serv.sin_addr.s_addr = htonl(INADDR_ANY); if (( sockfd = socket(AF_INET, SOCK_STREAM, 0) ) < 0 ) { LOG("couldn't create socket!"); return -1; } else { LOG("socket created!"); } setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &zbr, sizeof zbr); if ((bind(sockfd, (struct sockaddr *) &serv, sizeof(serv))) <0 ) { LOG("couldn't bind!"); return -1; } else { LOG("bind!"); } if (listen(sockfd,5) < 0 ) { LOG("couldn't listen"); return -1; } else{ LOG("listen done"); } for(;;) { if ((fd = accept(sockfd, (struct sockaddr *) &client, &size)) < 0 ) { LOG("couln't accept connection!"); return(-1); } else { #if DEBUG LOG("accept connection (from: %s:%d) (fd: %d)", inet_ntoa((struct in_addr)client.sin_addr), ntohs(client.sin_port), fd); #endif alarm(50); n = read(fd, buf, 1024); if ( n > 0 ) { // buf to wchar_t ? swprintf(wbuf, 1024, L"%s", buf); parse(fd, wbuf, argv[1]); wbuf[0] = L'\0'; n = 0; } alarm(0); close(fd); } } }
int main(int argc, char **argv) { /* * The + on the front tells GNU getopt not to rearrange argv. */ const char *optlist = "+F:f:v:W;m:bcCd::D::e:E:gh:i:l:L:nNo::Op::MPrStVY"; bool stopped_early = false; int old_optind; int i; int c; char *scan, *src; char *extra_stack; int have_srcfile = 0; SRCFILE *s; /* do these checks early */ if (getenv("TIDYMEM") != NULL) do_flags |= DO_TIDY_MEM; #ifdef HAVE_MCHECK_H #ifdef HAVE_MTRACE if (do_tidy_mem) mtrace(); #endif /* HAVE_MTRACE */ #endif /* HAVE_MCHECK_H */ #if defined(LC_CTYPE) setlocale(LC_CTYPE, ""); #endif #if defined(LC_COLLATE) setlocale(LC_COLLATE, ""); #endif #if defined(LC_MESSAGES) setlocale(LC_MESSAGES, ""); #endif #if defined(LC_NUMERIC) && defined(HAVE_LOCALE_H) /* * Force the issue here. According to POSIX 2001, decimal * point is used for parsing source code and for command-line * assignments and the locale value for processing input, * number to string conversion, and printing output. * * 10/2005 --- see below also; we now only use the locale's * decimal point if do_posix in effect. * * 9/2007: * This is a mess. We need to get the locale's numeric info for * the thousands separator for the %'d flag. */ setlocale(LC_NUMERIC, ""); init_locale(& loc); setlocale(LC_NUMERIC, "C"); #endif #if defined(LC_TIME) setlocale(LC_TIME, ""); #endif #if MBS_SUPPORT /* * In glibc, MB_CUR_MAX is actually a function. This value is * tested *a lot* in many speed-critical places in gawk. Caching * this value once makes a speed difference. */ gawk_mb_cur_max = MB_CUR_MAX; /* Without MBS_SUPPORT, gawk_mb_cur_max is 1. */ /* init the cache for checking bytes if they're characters */ init_btowc_cache(); #endif (void) bindtextdomain(PACKAGE, LOCALEDIR); (void) textdomain(PACKAGE); (void) signal(SIGFPE, catchsig); #ifdef SIGBUS (void) signal(SIGBUS, catchsig); #endif (void) sigsegv_install_handler(catchsegv); #define STACK_SIZE (16*1024) emalloc(extra_stack, char *, STACK_SIZE, "main"); (void) stackoverflow_install_handler(catchstackoverflow, extra_stack, STACK_SIZE); #undef STACK_SIZE myname = gawk_name(argv[0]); os_arg_fixup(&argc, &argv); /* emulate redirection, expand wildcards */ if (argc < 2) usage(EXIT_FAILURE, stderr); /* initialize the null string */ Nnull_string = make_string("", 0); /* Robustness: check that file descriptors 0, 1, 2 are open */ init_fds(); /* init array handling. */ array_init(); /* init the symbol tables */ init_symbol_table(); output_fp = stdout; /* we do error messages ourselves on invalid options */ opterr = false; /* copy argv before getopt gets to it; used to restart the debugger */ save_argv(argc, argv); /* initialize global (main) execution context */ push_context(new_context()); /* option processing. ready, set, go! */ for (optopt = 0, old_optind = 1; (c = getopt_long(argc, argv, optlist, optab, NULL)) != EOF; optopt = 0, old_optind = optind) { if (do_posix) opterr = true; switch (c) { case 'F': add_preassign(PRE_ASSIGN_FS, optarg); break; case 'E': disallow_var_assigns = true; /* fall through */ case 'f': /* * Allow multiple -f options. * This makes function libraries real easy. * Most of the magic is in the scanner. * * The following is to allow for whitespace at the end * of a #! /bin/gawk line in an executable file */ scan = optarg; if (argv[optind-1] != optarg) while (isspace((unsigned char) *scan)) scan++; src = (*scan == '\0' ? argv[optind++] : optarg); (void) add_srcfile((src && src[0] == '-' && src[1] == '\0') ? SRC_STDIN : SRC_FILE, src, srcfiles, NULL, NULL); break; case 'v': add_preassign(PRE_ASSIGN, optarg); break; case 'm': /* * BWK awk extension. * -mf nnn set # fields, gawk ignores * -mr nnn set record length, ditto * * As of at least 10/2007, BWK awk also ignores it. */ if (do_lint) lintwarn(_("`-m[fr]' option irrelevant in gawk")); if (optarg[0] != 'r' && optarg[0] != 'f') warning(_("-m option usage: `-m[fr] nnn'")); break; case 'b': do_binary = true; break; case 'c': do_flags |= DO_TRADITIONAL; break; case 'C': copyleft(); break; case 'd': do_flags |= DO_DUMP_VARS; if (optarg != NULL && optarg[0] != '\0') varfile = optarg; break; case 'D': do_flags |= DO_DEBUG; if (optarg != NULL && optarg[0] != '\0') command_file = optarg; break; case 'e': if (optarg[0] == '\0') warning(_("empty argument to `-e/--source' ignored")); else (void) add_srcfile(SRC_CMDLINE, optarg, srcfiles, NULL, NULL); break; case 'g': do_flags |= DO_INTL; break; case 'h': /* write usage to stdout, per GNU coding stds */ usage(EXIT_SUCCESS, stdout); break; case 'i': (void) add_srcfile(SRC_INC, optarg, srcfiles, NULL, NULL); break; case 'l': (void) add_srcfile(SRC_EXTLIB, optarg, srcfiles, NULL, NULL); break; case 'L': #ifndef NO_LINT do_flags |= DO_LINT_ALL; if (optarg != NULL) { if (strcmp(optarg, "fatal") == 0) lintfunc = r_fatal; else if (strcmp(optarg, "invalid") == 0) { do_flags &= ~DO_LINT_ALL; do_flags |= DO_LINT_INVALID; } } break; case 't': do_flags |= DO_LINT_OLD; break; #else case 'L': case 't': break; #endif case 'n': do_flags |= DO_NON_DEC_DATA; break; case 'N': use_lc_numeric = true; break; case 'O': do_optimize++; break; case 'p': do_flags |= DO_PROFILE; /* fall through */ case 'o': do_flags |= DO_PRETTY_PRINT; if (optarg != NULL) set_prof_file(optarg); else set_prof_file(DEFAULT_PROFILE); break; case 'M': #ifdef HAVE_MPFR do_flags |= DO_MPFR; #endif break; case 'P': do_flags |= DO_POSIX; break; case 'r': do_flags |= DO_INTERVALS; break; case 'S': do_flags |= DO_SANDBOX; break; case 'V': do_version = true; break; case 'W': /* gawk specific options - now in getopt_long */ fprintf(stderr, _("%s: option `-W %s' unrecognized, ignored\n"), argv[0], optarg); break; case 0: /* * getopt_long found an option that sets a variable * instead of returning a letter. Do nothing, just * cycle around for the next one. */ break; case 'Y': #if defined(YYDEBUG) || defined(GAWKDEBUG) if (c == 'Y') { yydebug = 2; break; } #endif /* if not debugging, fall through */ case '?': default: /* * If not posix, an unrecognized option stops argument * processing so that it can go into ARGV for the awk * program to see. This makes use of ``#! /bin/gawk -f'' * easier. * * However, it's never simple. If optopt is set, * an option that requires an argument didn't get the * argument. We care because if opterr is 0, then * getopt_long won't print the error message for us. */ if (! do_posix && (optopt == '\0' || strchr(optlist, optopt) == NULL)) { /* * can't just do optind--. In case of an * option with >= 2 letters, getopt_long * won't have incremented optind. */ optind = old_optind; stopped_early = true; goto out; } else if (optopt != '\0') { /* Use POSIX required message format */ fprintf(stderr, _("%s: option requires an argument -- %c\n"), myname, optopt); usage(EXIT_FAILURE, stderr); } /* else let getopt print error message for us */ break; } if (c == 'E') /* --exec ends option processing */ break; } out: if (do_nostalgia) nostalgia(); /* check for POSIXLY_CORRECT environment variable */ if (! do_posix && getenv("POSIXLY_CORRECT") != NULL) { do_flags |= DO_POSIX; if (do_lint) lintwarn( _("environment variable `POSIXLY_CORRECT' set: turning on `--posix'")); } if (do_posix) { use_lc_numeric = true; if (do_traditional) /* both on command line */ warning(_("`--posix' overrides `--traditional'")); else do_flags |= DO_TRADITIONAL; /* * POSIX compliance also implies * no GNU extensions either. */ } if (do_traditional && do_non_decimal_data) { do_flags &= ~DO_NON_DEC_DATA; warning(_("`--posix'/`--traditional' overrides `--non-decimal-data'")); } if (do_lint && os_is_setuid()) warning(_("running %s setuid root may be a security problem"), myname); #if MBS_SUPPORT if (do_binary) { if (do_posix) warning(_("`--posix' overrides `--characters-as-bytes'")); else gawk_mb_cur_max = 1; /* hands off my data! */ #if defined(LC_ALL) setlocale(LC_ALL, "C"); #endif } #endif if (do_debug) /* Need to register the debugger pre-exec hook before any other */ init_debug(); #ifdef HAVE_MPFR /* Set up MPFR defaults, and register pre-exec hook to process arithmetic opcodes */ if (do_mpfr) init_mpfr(DEFAULT_PREC, DEFAULT_ROUNDMODE); #endif /* load group set */ init_groupset(); #ifdef HAVE_MPFR if (do_mpfr) { mpz_init(Nnull_string->mpg_i); Nnull_string->flags = (MALLOC|STRCUR|STRING|MPZN|NUMCUR|NUMBER); } else #endif { Nnull_string->numbr = 0.0; Nnull_string->flags = (MALLOC|STRCUR|STRING|NUMCUR|NUMBER); } /* * Tell the regex routines how they should work. * Do this before initializing variables, since * they could want to do a regexp compile. */ resetup(); /* Set up the special variables */ init_vars(); /* Set up the field variables */ init_fields(); /* Now process the pre-assignments */ for (i = 0; i <= numassigns; i++) { if (preassigns[i].type == PRE_ASSIGN) (void) arg_assign(preassigns[i].val, true); else /* PRE_ASSIGN_FS */ cmdline_fs(preassigns[i].val); efree(preassigns[i].val); } if (preassigns != NULL) efree(preassigns); if ((BINMODE & 1) != 0) if (os_setbinmode(fileno(stdin), O_BINARY) == -1) fatal(_("can't set binary mode on stdin (%s)"), strerror(errno)); if ((BINMODE & 2) != 0) { if (os_setbinmode(fileno(stdout), O_BINARY) == -1) fatal(_("can't set binary mode on stdout (%s)"), strerror(errno)); if (os_setbinmode(fileno(stderr), O_BINARY) == -1) fatal(_("can't set binary mode on stderr (%s)"), strerror(errno)); } #ifdef GAWKDEBUG setbuf(stdout, (char *) NULL); /* make debugging easier */ #endif if (os_isatty(fileno(stdout))) output_is_tty = true; /* initialize API before loading extension libraries */ init_ext_api(); /* load extension libs */ for (s = srcfiles->next; s != srcfiles; s = s->next) { if (s->stype == SRC_EXTLIB) load_ext(s->fullpath); else if (s->stype != SRC_INC) have_srcfile++; } /* do version check after extensions are loaded to get extension info */ if (do_version) version(); /* No -f or --source options, use next arg */ if (! have_srcfile) { if (optind > argc - 1 || stopped_early) /* no args left or no program */ usage(EXIT_FAILURE, stderr); (void) add_srcfile(SRC_CMDLINE, argv[optind], srcfiles, NULL, NULL); optind++; } /* Select the interpreter routine */ init_interpret(); init_args(optind, argc, do_posix ? argv[0] : myname, argv); #if defined(LC_NUMERIC) /* * FRAGILE! CAREFUL! * Pre-initing the variables with arg_assign() can change the * locale. Force it to C before parsing the program. */ setlocale(LC_NUMERIC, "C"); #endif /* Read in the program */ if (parse_program(& code_block) != 0) exit(EXIT_FAILURE); if (do_intl) exit(EXIT_SUCCESS); if (do_lint) shadow_funcs(); if (do_lint && code_block->nexti->opcode == Op_atexit) lintwarn(_("no program text at all!")); load_symbols(); if (do_profile) init_profiling_signals(); #if defined(LC_NUMERIC) /* * See comment above about using locale's decimal point. * * 10/2005: * Bitter experience teaches us that most people the world over * use period as the decimal point, not whatever their locale * uses. Thus, only use the locale's decimal point if being * posixly anal-retentive. * * 7/2007: * Be a little bit kinder. Allow the --use-lc-numeric option * to also use the local decimal point. This avoids the draconian * strictness of POSIX mode if someone just wants to parse their * data using the local decimal point. */ if (use_lc_numeric) setlocale(LC_NUMERIC, ""); #endif init_io(); output_fp = stdout; if (do_debug) debug_prog(code_block); else interpret(code_block); if (do_pretty_print) { dump_prog(code_block); dump_funcs(); } if (do_dump_vars) dump_vars(varfile); if (do_tidy_mem) release_all_vars(); /* keep valgrind happier */ if (extra_stack) efree(extra_stack); final_exit(exit_val); return exit_val; /* to suppress warnings */ }
char * _clic_ngettext(const char *msg, const char *nmsg, int n) { char *sp = 0; int l = 0; if (!lp && !inited) { inited = 1; lp = init_locale("clip"); } if (!lp) goto ret; #ifdef PO_COMPAT { int l1, l2; char *buf; l1 = strlen(msg); l2 = strlen(nmsg); #ifdef OS_MINGW buf = malloc(l1 + l2 + 2); #else buf = alloca(l1 + l2 + 2); #endif memcpy(buf, msg, l1); memcpy(buf + l1 + 1, nmsg, l2); buf[l1] = PO_COMPAT_CHAR; buf[l1 + l2 + 1] = 0; sp = find_msg(lp, buf, &l); #ifdef OS_MINGW free(buf); #endif } #endif if (!sp) sp = find_msg(lp, msg, &l); if (sp) { int i; unsigned long int nn; char *ep; if (!lp->pd) { if (n == 1) return tr_charset(lp, sp); sp = find_msg(lp, nmsg, &l); if (sp) return tr_charset(lp, sp); else return (char *) nmsg; } nn = plural_eval(lp->pd, n); ep = sp + l; for (i = 0; i < lp->nplural && sp < ep; i++) { char *p; #ifdef PO_COMPAT p = strchr(sp, PO_COMPAT_CHAR); if (!p) { l = strlen(sp); break; } else { l = p - sp; p++; } #else p = sp + strlen(sp) + 1; #endif if (p >= ep || i >= nn) break; sp = p; } #ifdef PO_COMPAT { /* this is a memleak!!! but... */ char *rp; rp = (char *) malloc(l + 1); memcpy(rp, sp, l); rp[l] = 0; return tr_charset(lp, rp); } #else return tr_charset(lp, sp); #endif } ret: return n > 1 ? (char *) nmsg : (char *) msg; }