void initial_lang() { if (strcasecmp(LANG, "BIG5") == 0) { lang_init(Big5Locale); } else if (strcasecmp(LANG, "GB") == 0) { lang_init(GBLocale); } else if (strcasecmp(LANG, "ENGLISH") == 0) { lang_init(EnglishLocale); } }
static int lang_action(int tok, int val) { int r = 1; struct lang_desc *desc; audio_play(AUD_MENU, 1.0f); switch (tok) { case GUI_BACK: goto_state(lang_back); lang_back = NULL; break; case GUI_PREV: first -= LANG_STEP; goto_state(&st_lang); break; case GUI_NEXT: first += LANG_STEP; goto_state(&st_lang); break; case LANG_DEFAULT: /* HACK: Reload resources to load the localized font. */ goto_state(&st_null); config_set_s(CONFIG_LANGUAGE, ""); lang_init("neverball", ""); goto_state(&st_lang); break; case LANG_SELECT: desc = LANG_GET(langs, val); goto_state(&st_null); config_set_s(CONFIG_LANGUAGE, desc->code); lang_init("neverball", desc->code); goto_state(&st_lang); break; } return r; }
int main(int argc, char** argv) { lang_t lang; article_t article; status_t status; int opt; literal_t file_name = NULL; float ratio = 0.0; while(-1 != (opt = getopt(argc, argv, "i:r:h"))) { switch(opt) { case 'i': file_name = optarg; break; case 'r': ratio = atof(optarg)/100; break; case 'h': usage(argv[0]); return(0); default: usage(argv[0]); return(1); } } if(NULL == file_name) { fprintf(stderr, "No input file specified\n"); usage(argv[0]); return(1); } if(0.0 == ratio) { fprintf(stderr, "Ratio cannot be 0.0\n"); usage(argv[0]); return(1); } status = init_globals() || lang_init(&lang) || parse_lang_xml(DICTIONARY_DIR"/en.xml", &lang) || article_init(&article) || parse_article(file_name, &lang, &article) || grade_article(&article, &lang, ratio); print_summary(&article); article_destroy(&article); lang_destroy(&lang); return(SMRZR_OK == status ? 0 : 1); }
int main(int argc, char *argv[]) { SDL_Joystick *joy = NULL; int t1, t0, uniform; if (!fs_init(argv[0])) { fprintf(stderr, "Failure to initialize virtual file system: %s\n", fs_error()); return 1; } lang_init("neverball"); parse_args(argc, argv); config_paths(data_path); make_dirs_and_migrate(); /* Initialize SDL system and subsystems */ if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK) == -1) { fprintf(stderr, "%s\n", SDL_GetError()); return 1; } /* Intitialize the configuration */ config_init(); config_load(); /* Initialize the joystick. */ if (config_get_d(CONFIG_JOYSTICK) && SDL_NumJoysticks() > 0) { joy = SDL_JoystickOpen(config_get_d(CONFIG_JOYSTICK_DEVICE)); if (joy) SDL_JoystickEventState(SDL_ENABLE); } /* Initialize the audio. */ audio_init(); tilt_init(); /* Initialize the video. */ if (!video_init(TITLE, ICON)) return 1; init_state(&st_null); /* Initialise demo playback. */ if (demo_path && fs_add_path(dir_name(demo_path)) && progress_replay(base_name(demo_path, NULL))) { demo_play_goto(1); goto_state(&st_demo_play); } else goto_state(&st_title); /* Run the main game loop. */ uniform = config_get_d(CONFIG_UNIFORM); t0 = SDL_GetTicks(); while (loop()) { t1 = SDL_GetTicks(); if (uniform) { /* Step the game uniformly, as configured. */ int u; for (u = 0; u < abs(uniform); ++u) { st_timer(DT); t0 += (int) (DT * 1000); } } else { /* Step the game state at least up to the current time. */ while (t1 > t0) { st_timer(DT); t0 += (int) (DT * 1000); } } /* Render. */ st_paint(0.001f * t0); video_swap(); if (uniform < 0) shot(); if (config_get_d(CONFIG_NICE)) SDL_Delay(1); } /* Gracefully close the game */ if (joy) SDL_JoystickClose(joy); tilt_free(); SDL_Quit(); config_save(); return 0; }
int main (int argc, char **argv) { char *emulation; long start_time = get_run_time (); #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES) setlocale (LC_MESSAGES, ""); #endif #if defined (HAVE_SETLOCALE) setlocale (LC_CTYPE, ""); #endif bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); program_name = argv[0]; xmalloc_set_program_name (program_name); START_PROGRESS (program_name, 0); expandargv (&argc, &argv); bfd_init (); bfd_set_error_program_name (program_name); xatexit (ld_cleanup); /* Set up the sysroot directory. */ ld_sysroot = get_sysroot (argc, argv); if (*ld_sysroot) { if (*TARGET_SYSTEM_ROOT == 0) { einfo ("%P%F: this linker was not configured to use sysroots\n"); ld_sysroot = ""; } else ld_canon_sysroot = lrealpath (ld_sysroot); } if (ld_canon_sysroot) ld_canon_sysroot_len = strlen (ld_canon_sysroot); else ld_canon_sysroot_len = -1; /* Set the default BFD target based on the configured target. Doing this permits the linker to be configured for a particular target, and linked against a shared BFD library which was configured for a different target. The macro TARGET is defined by Makefile. */ if (! bfd_set_default_target (TARGET)) { einfo (_("%X%P: can't set BFD default target to `%s': %E\n"), TARGET); xexit (1); } #if YYDEBUG { extern int yydebug; yydebug = 1; } #endif config.build_constructors = TRUE; config.rpath_separator = ':'; config.split_by_reloc = (unsigned) -1; config.split_by_file = (bfd_size_type) -1; config.make_executable = TRUE; config.magic_demand_paged = TRUE; config.text_read_only = TRUE; command_line.warn_mismatch = TRUE; command_line.warn_search_mismatch = TRUE; command_line.check_section_addresses = -1; command_line.disable_target_specific_optimizations = -1; /* We initialize DEMANGLING based on the environment variable COLLECT_NO_DEMANGLE. The gcc collect2 program will demangle the output of the linker, unless COLLECT_NO_DEMANGLE is set in the environment. Acting the same way here lets us provide the same interface by default. */ demangling = getenv ("COLLECT_NO_DEMANGLE") == NULL; link_info.allow_undefined_version = TRUE; link_info.keep_memory = TRUE; link_info.combreloc = TRUE; link_info.strip_discarded = TRUE; link_info.emit_hash = TRUE; link_info.callbacks = &link_callbacks; link_info.input_bfds_tail = &link_info.input_bfds; /* SVR4 linkers seem to set DT_INIT and DT_FINI based on magic _init and _fini symbols. We are compatible. */ link_info.init_function = "_init"; link_info.fini_function = "_fini"; link_info.relax_pass = 1; link_info.pei386_auto_import = -1; link_info.spare_dynamic_tags = 5; link_info.path_separator = ':'; ldfile_add_arch (""); emulation = get_emulation (argc, argv); ldemul_choose_mode (emulation); default_target = ldemul_choose_target (argc, argv); config.maxpagesize = bfd_emul_get_maxpagesize (default_target); config.commonpagesize = bfd_emul_get_commonpagesize (default_target); lang_init (); ldemul_before_parse (); lang_has_input_file = FALSE; parse_args (argc, argv); if (config.hash_table_size != 0) bfd_hash_set_default_size (config.hash_table_size); ldemul_set_symbols (); if (link_info.relocatable) { if (command_line.check_section_addresses < 0) command_line.check_section_addresses = 0; if (link_info.shared) einfo (_("%P%F: -r and -shared may not be used together\n")); } /* We may have -Bsymbolic, -Bsymbolic-functions, --dynamic-list-data, --dynamic-list-cpp-new, --dynamic-list-cpp-typeinfo and --dynamic-list FILE. -Bsymbolic and -Bsymbolic-functions are for shared libraries. -Bsymbolic overrides all others and vice versa. */ switch (command_line.symbolic) { case symbolic_unset: break; case symbolic: /* -Bsymbolic is for shared library only. */ if (link_info.shared) { link_info.symbolic = TRUE; /* Should we free the unused memory? */ link_info.dynamic_list = NULL; command_line.dynamic_list = dynamic_list_unset; } break; case symbolic_functions: /* -Bsymbolic-functions is for shared library only. */ if (link_info.shared) command_line.dynamic_list = dynamic_list_data; break; } switch (command_line.dynamic_list) { case dynamic_list_unset: break; case dynamic_list_data: link_info.dynamic_data = TRUE; case dynamic_list: link_info.dynamic = TRUE; break; } if (! link_info.shared) { if (command_line.filter_shlib) einfo (_("%P%F: -F may not be used without -shared\n")); if (command_line.auxiliary_filters) einfo (_("%P%F: -f may not be used without -shared\n")); } if (! link_info.shared || link_info.pie) link_info.executable = TRUE; /* Treat ld -r -s as ld -r -S -x (i.e., strip all local symbols). I don't see how else this can be handled, since in this case we must preserve all externally visible symbols. */ if (link_info.relocatable && link_info.strip == strip_all) { link_info.strip = strip_debugger; if (link_info.discard == discard_sec_merge) link_info.discard = discard_all; } /* If we have not already opened and parsed a linker script, try the default script from command line first. */ if (saved_script_handle == NULL && command_line.default_script != NULL) { ldfile_open_command_file (command_line.default_script); parser_input = input_script; yyparse (); } /* If we have not already opened and parsed a linker script read the emulation's appropriate default script. */ if (saved_script_handle == NULL) { int isfile; char *s = ldemul_get_script (&isfile); if (isfile) ldfile_open_default_command_file (s); else { lex_string = s; lex_redirect (s); } parser_input = input_script; yyparse (); lex_string = NULL; } if (trace_file_tries) { if (saved_script_handle) info_msg (_("using external linker script:")); else info_msg (_("using internal linker script:")); info_msg ("\n==================================================\n"); if (saved_script_handle) { static const int ld_bufsz = 8193; size_t n; char *buf = (char *) xmalloc (ld_bufsz); rewind (saved_script_handle); while ((n = fread (buf, 1, ld_bufsz - 1, saved_script_handle)) > 0) { buf[n] = 0; info_msg (buf); } rewind (saved_script_handle); free (buf); } else { int isfile; info_msg (ldemul_get_script (&isfile)); } info_msg ("\n==================================================\n"); } lang_final (); if (!lang_has_input_file) { if (version_printed) xexit (0); einfo (_("%P%F: no input files\n")); } if (trace_files) info_msg (_("%P: mode %s\n"), emulation); ldemul_after_parse (); if (config.map_filename) { if (strcmp (config.map_filename, "-") == 0) { config.map_file = stdout; } else { config.map_file = fopen (config.map_filename, FOPEN_WT); if (config.map_file == (FILE *) NULL) { bfd_set_error (bfd_error_system_call); einfo (_("%P%F: cannot open map file %s: %E\n"), config.map_filename); } } } lang_process (); /* Print error messages for any missing symbols, for any warning symbols, and possibly multiple definitions. */ if (link_info.relocatable) link_info.output_bfd->flags &= ~EXEC_P; else link_info.output_bfd->flags |= EXEC_P; ldwrite (); if (config.map_file != NULL) lang_map (); if (command_line.cref) output_cref (config.map_file != NULL ? config.map_file : stdout); if (nocrossref_list != NULL) check_nocrossrefs (); lang_finish (); /* Even if we're producing relocatable output, some non-fatal errors should be reported in the exit status. (What non-fatal errors, if any, do we want to ignore for relocatable output?) */ if (!config.make_executable && !force_make_executable) { if (trace_files) einfo (_("%P: link errors found, deleting executable `%s'\n"), output_filename); /* The file will be removed by remove_output. */ xexit (1); } else { if (! bfd_close (link_info.output_bfd)) einfo (_("%F%B: final close failed: %E\n"), link_info.output_bfd); /* If the --force-exe-suffix is enabled, and we're making an executable file and it doesn't end in .exe, copy it to one which does. */ if (! link_info.relocatable && command_line.force_exe_suffix) { int len = strlen (output_filename); if (len < 4 || (strcasecmp (output_filename + len - 4, ".exe") != 0 && strcasecmp (output_filename + len - 4, ".dll") != 0)) { FILE *src; FILE *dst; const int bsize = 4096; char *buf = (char *) xmalloc (bsize); int l; char *dst_name = (char *) xmalloc (len + 5); strcpy (dst_name, output_filename); strcat (dst_name, ".exe"); src = fopen (output_filename, FOPEN_RB); dst = fopen (dst_name, FOPEN_WB); if (!src) einfo (_("%X%P: unable to open for source of copy `%s'\n"), output_filename); if (!dst) einfo (_("%X%P: unable to open for destination of copy `%s'\n"), dst_name); while ((l = fread (buf, 1, bsize, src)) > 0) { int done = fwrite (buf, 1, l, dst); if (done != l) einfo (_("%P: Error writing file `%s'\n"), dst_name); } fclose (src); if (fclose (dst) == EOF) einfo (_("%P: Error closing file `%s'\n"), dst_name); free (dst_name); free (buf); } } } END_PROGRESS (program_name); if (config.stats) { #ifdef HAVE_SBRK char *lim = (char *) sbrk (0); #endif long run_time = get_run_time () - start_time; fflush (stdout); fprintf (stderr, _("%s: total time in link: %ld.%06ld\n"), program_name, run_time / 1000000, run_time % 1000000); #ifdef HAVE_SBRK fprintf (stderr, _("%s: data size %ld\n"), program_name, (long) (lim - (char *) &environ)); #endif fflush (stderr); } /* Prevent remove_output from doing anything, after a successful link. */ output_filename = NULL; xexit (0); return 0; }
int init(int ac, char **av) { int i; int openlog_failed = 0, openlog_errno = 0; int started_from_term = isatty(0) && isatty(1) && isatty(2); /* Imported from main.c */ extern void sighandler(int signum); /* Set file creation mask and group ID. */ #if defined(DEFUMASK) && HAVE_UMASK umask(DEFUMASK); #endif if (set_group() < 0) return -1; /* Parse command line for -dir option. */ parse_dir_options(ac, av); /* Chdir to Services data directory. */ if (chdir(services_dir) < 0) { fprintf(stderr, "chdir(%s): %s\n", services_dir, strerror(errno)); return -1; } /* Open logfile, and complain if we didn't. */ if (open_log() < 0) { openlog_errno = errno; if (started_from_term) { fprintf(stderr, "ATENCION: No puedo abrir el archivo de log %s: %s\n", log_filename, strerror(errno)); } else { openlog_failed = 1; } } /* Read configuration file; exit if there are problems. */ if (!read_config()) return -1; /* Parse all remaining command-line options. */ parse_options(ac, av); /* Detach ourselves if requested. */ if (!nofork) { if ((i = fork()) < 0) { perror("fork()"); return -1; } else if (i != 0) { exit(0); } if (started_from_term) { close(0); close(1); close(2); } if (setpgid(0, 0) < 0) { perror("setpgid()"); return -1; } } /* Write our PID to the PID file. */ write_pidfile(); /* Announce ourselves to the logfile. */ if (debug || readonly || skeleton) { log("euskalirc-services-bdd %s (compilados para %s) iniciados (opciones:%s%s%s)", version_number, version_protocol, debug ? " debug" : "", readonly ? " readonly" : "", skeleton ? " skeleton" : ""); } else { log("euskalirc-services-bdd %s (compilados para %s) iniciados.", version_number, version_protocol); } start_time = time(NULL); /* If in read-only mode, close the logfile again. */ if (readonly) close_log(); /* Set signal handlers. Catch certain signals to let us do things or * panic as necessary, and ignore all others. */ #ifdef NSIG for (i = 1; i <= NSIG; i++) #else for (i = 1; i <= 32; i++) #endif signal(i, SIG_IGN); signal(SIGINT, sighandler); signal(SIGTERM, sighandler); signal(SIGQUIT, sighandler); signal(SIGSEGV, sighandler); signal(SIGBUS, sighandler); signal(SIGQUIT, sighandler); signal(SIGHUP, sighandler); signal(SIGILL, sighandler); signal(SIGTRAP, sighandler); #ifdef SIGIOT signal(SIGIOT, sighandler); #endif signal(SIGFPE, sighandler); signal(SIGUSR1, sighandler); /* This is our "out-of-memory" panic switch */ /* Initialize multi-language support */ lang_init(); if (debug) log("debug: Cargando lenguajes"); /* Initialiize subservices */ ns_init(); cs_init(); #ifdef CREGSERV cr_init(); #endif ms_init(); os_init(); load_spam(); load_ipv(); /*leyendo datos de frases*/ /* Load up databases */ if (!skeleton) { load_ns_dbase(); if (debug) log("debug: Cargando la DB de %s (1/7)", s_NickServ); load_cs_dbase(); if (debug) log("debug: Cargando la DB de %s (2/7)", s_ChanServ); load_cr_dbase(); if (debug) log("debug: Cargando la DB de %s (3/7)", s_CregServ); } load_os_dbase(); if (debug) log("debug: Cargando la DB de %s (4/7)", s_OperServ); load_akill(); if (debug) log("debug: Cargando la DB de GLINES (5/7)"); load_news(); if (debug) log("debug: Cargando la DB de NOTICIAS (6/7)"); if (debug) log("debug: Cargando la DB de SPAM (7/7)"); load_cr_dbase(); load_ipv(); log("Cargadas las bases de datos"); /* Connect to the remote server */ servsock = conn(RemoteServer, RemotePort, LocalHost, LocalPort); if (servsock < 0) fatal_perror("No puedo conectar al servidor"); send_cmd(NULL, "PASS :%s", RemotePassword); #ifdef IRC_UNDERNET_P09 send_cmd(NULL, "SERVER %s 1 %lu %lu P09 :%s", ServerName, start_time, start_time, ServerDesc); #else /* IRC_UNDERNET_P10 */ send_cmd(NULL, "SERVER %s %d 0 %ld J10 %cD] :%s", ServerName, 2, start_time, convert2y[ServerNumerico], ServerDesc); #endif sgets2(inbuf, sizeof(inbuf), servsock); if (strnicmp(inbuf, "ERROR", 5) == 0) { /* Close server socket first to stop wallops, since the other * server doesn't want to listen to us anyway */ disconn(servsock); servsock = -1; fatal("El servidor ha devuelto: %s", inbuf); } /* Announce a logfile error if there was one */ if (openlog_failed) { canalopers(NULL, "4ATENCION: No puedo abrir el fichero de log: 12%s", strerror(openlog_errno)); } /* Bring in our pseudo-clients */ introduce_user(NULL); send_cmd(ServerName, "SETTIME %lu", time(NULL)); #if HAVE_ALLWILD_NOTICE send_cmd(s_OperServ, "NOTICE $*.%s :Establecidos los servicios de la RED.", NETWORK_DOMAIN); #else # ifdef NETWORK_DOMAIN send_cmd(s_OperServ, "NOTICE $*.%s :Establecidos los servicios de la RED.", NETWORK_DOMAIN); # else Go through all common top-level domains. If you have others, * add them here. send_cmd(s_OperServ, "NOTICE $*.es :Establecidos los servicios de la RED."); send_cmd(s_OperServ, "NOTICE $*.com :Establecidos los servicios de la RED."); send_cmd(s_OperServ, "NOTICE $*.net :Establecidos los servicios de la RED."); send_cmd(s_OperServ, "NOTICE $*.org :Establecidos los servicios de la RED."); send_cmd(s_OperServ, "NOTICE $*.edu :Establecidos los servicios de la RED."); send_cmd(s_OperServ, "NOTICE $*.tk :Establecidos los servicios de la RED."); # endif #endif join_chanserv(); /* Success! */ return 0; }
int main(int argc, char *argv[]) { int camera = 0; SDL_Joystick *joy = NULL; if (!fs_init(argv[0])) { fprintf(stderr, "Failure to initialize virtual file system: %s\n", fs_error()); return 1; } srand((int) time(NULL)); lang_init("neverball"); opt_parse(argc, argv); config_paths(opt_data); fs_mkdir("Screenshots"); if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK) == 0) { config_init(); config_load(); /* Cache Neverball's camera setting. */ camera = config_get_d(CONFIG_CAMERA); /* Initialize the joystick. */ if (config_get_d(CONFIG_JOYSTICK) && SDL_NumJoysticks() > 0) { joy = SDL_JoystickOpen(config_get_d(CONFIG_JOYSTICK_DEVICE)); if (joy) { SDL_JoystickEventState(SDL_ENABLE); set_joystick(joy); } } /* Initialize the audio. */ audio_init(); /* Initialize the video. */ if (video_init(TITLE, ICON)) { int t1, t0 = SDL_GetTicks(); /* Run the main game loop. */ init_state(&st_null); if (opt_hole) { const char *path = fs_resolve(opt_hole); int loaded = 0; if (path) { hole_init(NULL); if (hole_load(0, path) && hole_load(1, path) && hole_goto(1, 1)) { goto_state(&st_next); loaded = 1; } } if (!loaded) goto_state(&st_title); } else goto_state(&st_title); while (loop()) if ((t1 = SDL_GetTicks()) > t0) { st_timer((t1 - t0) / 1000.f); st_paint(0.001f * t1); shot_take(); SDL_GL_SwapWindow(video_get_window()); t0 = t1; if (config_get_d(CONFIG_NICE)) SDL_Delay(1); } } /* Restore Neverball's camera setting. */ config_set_d(CONFIG_CAMERA, camera); config_save(); SDL_Quit(); } else fprintf(stderr, "%s: %s\n", argv[0], SDL_GetError()); return 0; }
/* * Reload all the language files. */ static void do_loadlangs(User *u) { lang_init(); notice_lang(s_OperServ, u, OPER_LOADLANGS_RELOADED); wallops(s_OperServ, "%s used LOADLANGS", u->nick); }
int main (int argc, char **argv) { char *emulation; long start_time = get_run_time (); #ifdef HAVE_SBRK char *start_sbrk = (char *) sbrk (0); #endif #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES) setlocale (LC_MESSAGES, ""); #endif #if defined (HAVE_SETLOCALE) setlocale (LC_CTYPE, ""); #endif bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); program_name = argv[0]; xmalloc_set_program_name (program_name); START_PROGRESS (program_name, 0); expandargv (&argc, &argv); bfd_init (); bfd_set_error_program_name (program_name); /* We want to notice and fail on those nasty BFD assertions which are likely to signal incorrect output being generated but otherwise may leave no trace. */ default_bfd_assert_handler = bfd_set_assert_handler (ld_bfd_assert_handler); xatexit (ld_cleanup); /* Set up the sysroot directory. */ ld_sysroot = get_sysroot (argc, argv); if (*ld_sysroot) ld_canon_sysroot = lrealpath (ld_sysroot); if (ld_canon_sysroot) ld_canon_sysroot_len = strlen (ld_canon_sysroot); else ld_canon_sysroot_len = -1; /* Set the default BFD target based on the configured target. Doing this permits the linker to be configured for a particular target, and linked against a shared BFD library which was configured for a different target. The macro TARGET is defined by Makefile. */ if (! bfd_set_default_target (TARGET)) { einfo (_("%X%P: can't set BFD default target to `%s': %E\n"), TARGET); xexit (1); } #if YYDEBUG { extern int yydebug; yydebug = 1; } #endif config.build_constructors = TRUE; config.rpath_separator = ':'; config.split_by_reloc = (unsigned) -1; config.split_by_file = (bfd_size_type) -1; config.make_executable = TRUE; config.magic_demand_paged = TRUE; config.text_read_only = TRUE; link_info.disable_target_specific_optimizations = -1; command_line.warn_mismatch = TRUE; command_line.warn_search_mismatch = TRUE; command_line.check_section_addresses = -1; /* We initialize DEMANGLING based on the environment variable COLLECT_NO_DEMANGLE. The gcc collect2 program will demangle the output of the linker, unless COLLECT_NO_DEMANGLE is set in the environment. Acting the same way here lets us provide the same interface by default. */ demangling = getenv ("COLLECT_NO_DEMANGLE") == NULL; link_info.allow_undefined_version = TRUE; link_info.keep_memory = TRUE; link_info.combreloc = TRUE; link_info.strip_discarded = TRUE; link_info.emit_hash = TRUE; link_info.callbacks = &link_callbacks; link_info.input_bfds_tail = &link_info.input_bfds; /* SVR4 linkers seem to set DT_INIT and DT_FINI based on magic _init and _fini symbols. We are compatible. */ link_info.init_function = "_init"; link_info.fini_function = "_fini"; link_info.relax_pass = 1; link_info.extern_protected_data = -1; link_info.dynamic_undefined_weak = -1; link_info.pei386_auto_import = -1; link_info.spare_dynamic_tags = 5; link_info.path_separator = ':'; #ifdef DEFAULT_FLAG_COMPRESS_DEBUG link_info.compress_debug = COMPRESS_DEBUG_GABI_ZLIB; #endif ldfile_add_arch (""); emulation = get_emulation (argc, argv); ldemul_choose_mode (emulation); default_target = ldemul_choose_target (argc, argv); config.maxpagesize = bfd_emul_get_maxpagesize (default_target); config.commonpagesize = bfd_emul_get_commonpagesize (default_target); lang_init (); ldexp_init (); ldemul_before_parse (); lang_has_input_file = FALSE; parse_args (argc, argv); if (config.hash_table_size != 0) bfd_hash_set_default_size (config.hash_table_size); #ifdef ENABLE_PLUGINS /* Now all the plugin arguments have been gathered, we can load them. */ plugin_load_plugins (); #endif /* ENABLE_PLUGINS */ ldemul_set_symbols (); /* If we have not already opened and parsed a linker script, try the default script from command line first. */ if (saved_script_handle == NULL && command_line.default_script != NULL) { ldfile_open_command_file (command_line.default_script); parser_input = input_script; yyparse (); } /* If we have not already opened and parsed a linker script read the emulation's appropriate default script. */ if (saved_script_handle == NULL) { int isfile; char *s = ldemul_get_script (&isfile); if (isfile) ldfile_open_default_command_file (s); else { lex_string = s; lex_redirect (s, _("built in linker script"), 1); } parser_input = input_script; yyparse (); lex_string = NULL; } if (verbose) { if (saved_script_handle) info_msg (_("using external linker script:")); else info_msg (_("using internal linker script:")); info_msg ("\n==================================================\n"); if (saved_script_handle) { static const int ld_bufsz = 8193; size_t n; char *buf = (char *) xmalloc (ld_bufsz); rewind (saved_script_handle); while ((n = fread (buf, 1, ld_bufsz - 1, saved_script_handle)) > 0) { buf[n] = 0; info_msg (buf); } rewind (saved_script_handle); free (buf); } else { int isfile; info_msg (ldemul_get_script (&isfile)); } info_msg ("\n==================================================\n"); } if (command_line.print_output_format) info_msg ("%s\n", lang_get_output_target ()); lang_final (); /* If the only command line argument has been -v or --version or --verbose then ignore any input files provided by linker scripts and exit now. We do not want to create an output file when the linker is just invoked to provide version information. */ if (argc == 2 && version_printed) xexit (0); if (!lang_has_input_file) { if (version_printed || command_line.print_output_format) xexit (0); einfo (_("%P%F: no input files\n")); } if (trace_files) info_msg (_("%P: mode %s\n"), emulation); ldemul_after_parse (); if (config.map_filename) { if (strcmp (config.map_filename, "-") == 0) { config.map_file = stdout; } else { config.map_file = fopen (config.map_filename, FOPEN_WT); if (config.map_file == (FILE *) NULL) { bfd_set_error (bfd_error_system_call); einfo (_("%P%F: cannot open map file %s: %E\n"), config.map_filename); } } } lang_process (); /* Print error messages for any missing symbols, for any warning symbols, and possibly multiple definitions. */ if (bfd_link_relocatable (&link_info)) link_info.output_bfd->flags &= ~EXEC_P; else link_info.output_bfd->flags |= EXEC_P; if ((link_info.compress_debug & COMPRESS_DEBUG)) { link_info.output_bfd->flags |= BFD_COMPRESS; if (link_info.compress_debug == COMPRESS_DEBUG_GABI_ZLIB) link_info.output_bfd->flags |= BFD_COMPRESS_GABI; } ldwrite (); if (config.map_file != NULL) lang_map (); if (command_line.cref) output_cref (config.map_file != NULL ? config.map_file : stdout); if (nocrossref_list != NULL) check_nocrossrefs (); if (command_line.print_memory_usage) lang_print_memory_usage (); #if 0 { struct bfd_link_hash_entry * h; h = bfd_link_hash_lookup (link_info.hash, "__image_base__", 0,0,1); fprintf (stderr, "lookup = %p val %lx\n", h, h ? h->u.def.value : 1); } #endif ldexp_finish (); lang_finish (); /* Even if we're producing relocatable output, some non-fatal errors should be reported in the exit status. (What non-fatal errors, if any, do we want to ignore for relocatable output?) */ if (!config.make_executable && !force_make_executable) { if (trace_files) einfo (_("%P: link errors found, deleting executable `%s'\n"), output_filename); /* The file will be removed by ld_cleanup. */ xexit (1); } else { if (! bfd_close (link_info.output_bfd)) einfo (_("%F%B: final close failed: %E\n"), link_info.output_bfd); /* If the --force-exe-suffix is enabled, and we're making an executable file and it doesn't end in .exe, copy it to one which does. */ if (!bfd_link_relocatable (&link_info) && command_line.force_exe_suffix) { int len = strlen (output_filename); if (len < 4 || (strcasecmp (output_filename + len - 4, ".exe") != 0 && strcasecmp (output_filename + len - 4, ".dll") != 0)) { FILE *src; FILE *dst; const int bsize = 4096; char *buf = (char *) xmalloc (bsize); int l; char *dst_name = (char *) xmalloc (len + 5); strcpy (dst_name, output_filename); strcat (dst_name, ".exe"); src = fopen (output_filename, FOPEN_RB); dst = fopen (dst_name, FOPEN_WB); if (!src) einfo (_("%P%F: unable to open for source of copy `%s'\n"), output_filename); if (!dst) einfo (_("%P%F: unable to open for destination of copy `%s'\n"), dst_name); while ((l = fread (buf, 1, bsize, src)) > 0) { int done = fwrite (buf, 1, l, dst); if (done != l) einfo (_("%P: Error writing file `%s'\n"), dst_name); } fclose (src); if (fclose (dst) == EOF) einfo (_("%P: Error closing file `%s'\n"), dst_name); free (dst_name); free (buf); } } } END_PROGRESS (program_name); if (config.stats) { #ifdef HAVE_SBRK char *lim = (char *) sbrk (0); #endif long run_time = get_run_time () - start_time; fflush (stdout); fprintf (stderr, _("%s: total time in link: %ld.%06ld\n"), program_name, run_time / 1000000, run_time % 1000000); #ifdef HAVE_SBRK fprintf (stderr, _("%s: data size %ld\n"), program_name, (long) (lim - start_sbrk)); #endif fflush (stderr); } /* Prevent ld_cleanup from doing anything, after a successful link. */ output_filename = NULL; xexit (0); return 0; }
static void init(void) { int rc; bool mounted = false; #if CONFIG_CHARGING && (CONFIG_CPU == SH7034) /* if nobody initialized ATA before, I consider this a cold start */ bool coldstart = (PACR2 & 0x4000) != 0; /* starting from Flash */ #endif system_init(); kernel_init(); #ifdef HAVE_ADJUSTABLE_CPU_FREQ set_cpu_frequency(CPUFREQ_NORMAL); #ifdef CPU_COLDFIRE coldfire_set_pllcr_audio_bits(DEFAULT_PLLCR_AUDIO_BITS); #endif cpu_boost(true); #endif buffer_init(); settings_reset(); i2c_init(); power_init(); enable_irq(); #ifdef CPU_ARM enable_fiq(); #endif /* current_tick should be ticking by now */ CHART("ticking"); lcd_init(); #ifdef HAVE_REMOTE_LCD lcd_remote_init(); #endif font_init(); CHART(">show_logo"); show_logo(); CHART("<show_logo"); lang_init(core_language_builtin, language_strings, LANG_LAST_INDEX_IN_ARRAY); #ifdef DEBUG debug_init(); #else #ifdef HAVE_SERIAL serial_setup(); #endif #endif #if CONFIG_RTC rtc_init(); #endif #ifdef HAVE_RTC_RAM CHART(">settings_load(RTC)"); settings_load(SETTINGS_RTC); /* early load parts of global_settings */ CHART("<settings_load(RTC)"); #endif adc_init(); usb_init(); #if CONFIG_USBOTG == USBOTG_ISP1362 isp1362_init(); #elif CONFIG_USBOTG == USBOTG_M5636 m5636_init(); #endif backlight_init(); button_init(); powermgmt_init(); #if CONFIG_TUNER radio_init(); #endif /* Keep the order of this 3 (viewportmanager handles statusbars) * Must be done before any code uses the multi-screen API */ CHART(">gui_syncstatusbar_init"); gui_syncstatusbar_init(&statusbars); CHART("<gui_syncstatusbar_init"); CHART(">sb_skin_init"); sb_skin_init(); CHART("<sb_skin_init"); CHART(">gui_sync_wps_init"); gui_sync_wps_init(); CHART("<gui_sync_wps_init"); CHART(">viewportmanager_init"); viewportmanager_init(); CHART("<viewportmanager_init"); #if CONFIG_CHARGING && (CONFIG_CPU == SH7034) /* charger_inserted() can't be used here because power_thread() hasn't checked power_input_status() yet */ if (coldstart && (power_input_status() & POWER_INPUT_MAIN_CHARGER) && !global_settings.car_adapter_mode #ifdef ATA_POWER_PLAYERSTYLE && !ide_powered() /* relies on probing result from bootloader */ #endif ) { rc = charging_screen(); /* display a "charging" screen */ if (rc == 1) /* charger removed */ power_off(); /* "On" pressed or USB connected: proceed */ show_logo(); /* again, to provide better visual feedback */ } #endif CHART(">storage_init"); rc = storage_init(); CHART("<storage_init"); if(rc) { #ifdef HAVE_LCD_BITMAP lcd_clear_display(); lcd_putsf(0, 1, "ATA error: %d", rc); lcd_puts(0, 3, "Press ON to debug"); lcd_update(); while(!(button_get(true) & BUTTON_REL)); /*DO NOT CHANGE TO ACTION SYSTEM */ dbg_ports(); #endif panicf("ata: %d", rc); } #ifdef HAVE_EEPROM_SETTINGS CHART(">eeprom_settings_init"); eeprom_settings_init(); CHART("<eeprom_settings_init"); #endif #ifndef HAVE_USBSTACK usb_start_monitoring(); while (usb_detect() == USB_INSERTED) { #ifdef HAVE_EEPROM_SETTINGS firmware_settings.disk_clean = false; #endif /* enter USB mode early, before trying to mount */ if (button_get_w_tmo(HZ/10) == SYS_USB_CONNECTED) #if (CONFIG_STORAGE & STORAGE_MMC) if (!mmc_touched() || (mmc_remove_request() == SYS_HOTSWAP_EXTRACTED)) #endif { gui_usb_screen_run(); mounted = true; /* mounting done @ end of USB mode */ } #ifdef HAVE_USB_POWER if (usb_powered()) /* avoid deadlock */ break; #endif } #endif if (!mounted) { CHART(">disk_mount_all"); rc = disk_mount_all(); CHART("<disk_mount_all"); if (rc<=0) { lcd_clear_display(); lcd_puts(0, 0, "No partition"); lcd_puts(0, 1, "found."); #ifdef HAVE_LCD_BITMAP lcd_puts(0, 2, "Insert USB cable"); lcd_puts(0, 3, "and fix it."); #endif lcd_update(); while(button_get(true) != SYS_USB_CONNECTED) {}; gui_usb_screen_run(); system_reboot(); } } #if defined(SETTINGS_RESET) || (CONFIG_KEYPAD == IPOD_4G_PAD) || \ (CONFIG_KEYPAD == IRIVER_H10_PAD) #ifdef SETTINGS_RESET /* Reset settings if holding the reset button. (Rec on Archos, A on Gigabeat) */ if ((button_status() & SETTINGS_RESET) == SETTINGS_RESET) #else /* Reset settings if the hold button is turned on */ if (button_hold()) #endif { splash(HZ*2, str(LANG_RESET_DONE_CLEAR)); settings_reset(); } else #endif { CHART(">settings_load(ALL)"); settings_load(SETTINGS_ALL); CHART("<settings_load(ALL)"); } CHART(">init_dircache(true)"); rc = init_dircache(true); CHART("<init_dircache(true)"); if (rc < 0) { #ifdef HAVE_TAGCACHE remove(TAGCACHE_STATEFILE); #endif } CHART(">settings_apply(true)"); settings_apply(true); CHART("<settings_apply(true)"); CHART(">init_dircache(false)"); init_dircache(false); CHART("<init_dircache(false)"); #ifdef HAVE_TAGCACHE CHART(">init_tagcache"); init_tagcache(); CHART("<init_tagcache"); #endif #ifdef HAVE_EEPROM_SETTINGS if (firmware_settings.initialized) { /* In case we crash. */ firmware_settings.disk_clean = false; CHART(">eeprom_settings_store"); eeprom_settings_store(); CHART("<eeprom_settings_store"); } #endif playlist_init(); tree_mem_init(); filetype_init(); scrobbler_init(); #if CONFIG_CODEC == SWCODEC tdspeed_init(); #endif /* CONFIG_CODEC == SWCODEC */ #if CONFIG_CODEC != SWCODEC /* No buffer allocation (see buffer.c) may take place after the call to audio_init() since the mpeg thread takes the rest of the buffer space */ mp3_init( global_settings.volume, global_settings.bass, global_settings.treble, global_settings.balance, global_settings.loudness, global_settings.avc, global_settings.channel_config, global_settings.stereo_width, global_settings.mdb_strength, global_settings.mdb_harmonics, global_settings.mdb_center, global_settings.mdb_shape, global_settings.mdb_enable, global_settings.superbass); /* audio_init must to know the size of voice buffer so init voice first */ talk_init(); #endif /* CONFIG_CODEC != SWCODEC */ CHART(">audio_init"); audio_init(); CHART("<audio_init"); #if (CONFIG_CODEC == SWCODEC) && defined(HAVE_RECORDING) && !defined(SIMULATOR) pcm_rec_init(); #endif /* runtime database has to be initialized after audio_init() */ cpu_boost(false); #if CONFIG_CHARGING car_adapter_mode_init(); #endif #ifdef IPOD_ACCESSORY_PROTOCOL iap_setup(global_settings.serial_bitrate); #endif #ifdef HAVE_ACCESSORY_SUPPLY accessory_supply_set(global_settings.accessory_supply); #endif #ifdef HAVE_LINEOUT_POWEROFF lineout_set(global_settings.lineout_active); #endif #ifdef HAVE_HOTSWAP_STORAGE_AS_MAIN CHART("<check_bootfile(false)"); check_bootfile(false); /* remember write time and filesize */ CHART(">check_bootfile(false)"); #endif CHART("<settings_apply_skins"); settings_apply_skins(); CHART(">settings_apply_skins"); }
int lang_load(const char *filename, const unsigned char *builtin, unsigned char **dest, unsigned char *buffer, unsigned int user_num, int max_lang_size, unsigned int max_id) { int lang_size; int fd = open(filename, O_RDONLY); int retcode=0; unsigned char lang_header[HEADER_SIZE]; unsigned char sub_header[SUBHEADER_SIZE]; unsigned int id, num_strings, foffset; if(fd < 0) return 1; read(fd, lang_header, HEADER_SIZE); if((lang_header[0] == LANGUAGE_COOKIE) && (lang_header[1] == LANGUAGE_VERSION) && (lang_header[2] == TARGET_ID)) { /* jump to the proper entry in the table of subheaders */ lseek(fd, user_num * SUBHEADER_SIZE, SEEK_CUR); read(fd, sub_header, SUBHEADER_SIZE); /* read in information about the requested lang */ num_strings = (sub_header[0]<<8) | sub_header[1]; lang_size = (sub_header[2]<<8) | sub_header[3]; foffset = (sub_header[4]<<8) | sub_header[5]; if(lang_size <= max_lang_size) { /* initialize with builtin */ lang_init(builtin, dest, num_strings); lseek(fd, foffset, SEEK_SET); read(fd, buffer, lang_size); while(lang_size>3) { id = ((buffer[0]<<8) | buffer[1]); /* get two-byte id */ buffer += 2; /* pass the id */ if(id < max_id) { #if 0 DEBUGF("%2x New: %30s ", id, buffer); DEBUGF("Replaces: %s\n", dest[id]); #endif dest[id] = buffer; /* point to this string */ } while(*buffer) { /* pass the string */ lang_size--; buffer++; } lang_size-=3; /* the id and the terminating zero */ buffer++; /* pass the terminating zero-byte */ } } else { DEBUGF("Language %s too large: %d\n", filename, lang_size); retcode = 2; } } else { DEBUGF("Illegal language file\n"); retcode = 3; } close(fd); lang_options = retcode ? 0 : lang_header[3]; return retcode; }
static void init(void) { kernel_init(); buffer_init(); enable_irq(); lcd_init(); #ifdef HAVE_REMOTE_LCD lcd_remote_init(); #endif font_init(); show_logo(); button_init(); backlight_init(); sim_tasks_init(); lang_init(core_language_builtin, language_strings, LANG_LAST_INDEX_IN_ARRAY); #ifdef DEBUG debug_init(); #endif /* Keep the order of this 3 (viewportmanager handles statusbars) * Must be done before any code uses the multi-screen API */ gui_syncstatusbar_init(&statusbars); gui_sync_wps_init(); sb_skin_init(); viewportmanager_init(); storage_init(); settings_reset(); settings_load(SETTINGS_ALL); settings_apply(true); init_dircache(true); init_dircache(false); #ifdef HAVE_TAGCACHE init_tagcache(); #endif sleep(HZ/2); tree_mem_init(); filetype_init(); playlist_init(); #if CONFIG_CODEC != SWCODEC mp3_init( global_settings.volume, global_settings.bass, global_settings.treble, global_settings.balance, global_settings.loudness, global_settings.avc, global_settings.channel_config, global_settings.stereo_width, global_settings.mdb_strength, global_settings.mdb_harmonics, global_settings.mdb_center, global_settings.mdb_shape, global_settings.mdb_enable, global_settings.superbass); /* audio_init must to know the size of voice buffer so init voice first */ talk_init(); #endif /* CONFIG_CODEC != SWCODEC */ scrobbler_init(); #if CONFIG_CODEC == SWCODEC tdspeed_init(); #endif /* CONFIG_CODEC == SWCODEC */ audio_init(); button_clear_queue(); /* Empty the keyboard buffer */ settings_apply_skins(); }
int main(int argc, char *argv[]) { SDL_Joystick *joy = NULL; int t1, t0; if (!fs_init(argv[0])) { fprintf(stderr, "Failure to initialize virtual file system (%s)\n", fs_error()); return 1; } opt_parse(argc, argv); config_paths(opt_data); log_init("Neverball", "neverball.log"); make_dirs_and_migrate(); /* Initialize SDL. */ if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK) == -1) { log_printf("Failure to initialize SDL (%s)\n", SDL_GetError()); return 1; } /* Intitialize configuration. */ config_init(); config_load(); /* Initialize localization. */ lang_init(); /* Initialize joystick. */ if (config_get_d(CONFIG_JOYSTICK) && SDL_NumJoysticks() > 0) { joy = SDL_JoystickOpen(config_get_d(CONFIG_JOYSTICK_DEVICE)); if (joy) SDL_JoystickEventState(SDL_ENABLE); } /* Initialize audio. */ audio_init(); tilt_init(); /* Initialize video. */ if (!video_init()) return 1; /* Material system. */ mtrl_init(); /* Screen states. */ init_state(&st_null); /* Initialize demo playback or load the level. */ if (opt_replay && fs_add_path(dir_name(opt_replay)) && progress_replay(base_name(opt_replay))) { demo_play_goto(1); goto_state(&st_demo_play); } else if (opt_level) { const char *path = fs_resolve(opt_level); int loaded = 0; if (path) { /* HACK: must be around for the duration of the game. */ static struct level level; if (level_load(path, &level)) { progress_init(MODE_STANDALONE); if (progress_play(&level)) { goto_state(&st_level); loaded = 1; } } } else log_printf("File %s is not in game path\n", opt_level); if (!loaded) goto_state(&st_title); } else goto_state(&st_title); /* Run the main game loop. */ t0 = SDL_GetTicks(); while (loop()) { if ((t1 = SDL_GetTicks()) > t0) { /* Step the game state. */ st_timer(0.001f * (t1 - t0)); t0 = t1; /* Render. */ hmd_step(); st_paint(0.001f * t0); video_swap(); if (config_get_d(CONFIG_NICE)) SDL_Delay(1); } } config_save(); mtrl_quit(); if (joy) SDL_JoystickClose(joy); tilt_free(); hmd_free(); SDL_Quit(); return 0; }
int main(int argc, char **argv) { printf("\33[0;40;33m\n"); printf(" FemtoForth Copyright (C) 2014 Victor Yurkovsky\n"); printf(" This program comes with ABSOLUTELY NO WARRANTY'.\n"); printf(" This is free software, and you are welcome to redistribute it\n"); printf(" under certain conditions; type 'license' for details.\n\n"); color(COLOR_RESET);color(FORE_WHITE); //--------------------------------------------------------------------- // Data segment. Houses var at the bottom... // // memmap data segment U8* data_base = mmap((void*)0x04000000, CODE_SIZE, PROT_READ+PROT_WRITE+PROT_EXEC, MAP_ANONYMOUS|MAP_PRIVATE|MAP_FIXED, 0,0); //var structure is placed into bottom RESERVED (512) bytes of data! lay = (sMemLayout*)data_base; // HOST_RESERVED bytes var = (sVar*)(data_base+HOST_RESERVED); // SYS_RESERVED bytes // install system var structure at bottom lay->data_bottom = data_base; lay->data_top = data_base + CODE_SIZE; // var->data_ptr = lay->data_bottom + HOST_RESERVED + SYS_RESERVED; printf("data at %p->%p ",lay->data_bottom,lay->data_top); //--------------------------------------------------------------------- // Table - runtime // lay->table_bottom = mmap((U8**)(CODE_ADDRESS/4), sizeof(TINDEX)*TABLE_SIZE, PROT_READ+PROT_WRITE+PROT_EXEC, MAP_ANONYMOUS|MAP_SHARED|MAP_FIXED, 0,0); printf("TABLE at %p ",lay->table_bottom); lay->table_top = (U8*)lay->table_bottom + sizeof(TINDEX)*TABLE_SIZE; // var->table_ptr = (U8**)var->table_bottom; // *var->table_ptr++ = 0 ; //first table entry is always 0 ! //--------------------------------------------------------------------- // DSP // // lay->dsp_bottom = (U8*)malloc(DSP_SIZE); lay->dsp_top = lay->dsp_bottom + DSP_SIZE; printf("DSP at %p ",lay->dsp_top); //--------------------------------------------------------------------- // RSP lay->rsp_bottom = (U8*)malloc(RSP_SIZE); lay->rsp_top = lay->rsp_bottom + RSP_SIZE; var->sp_meow = (sRegsMM*)lay->rsp_top; printf("RSP at %p ",lay->rsp_top); //--------------------------------------------------------------------- // HEAD lay->head_bottom = (U8*)malloc(HEAD_SIZE); lay->head_top = lay->head_bottom + HEAD_SIZE; var->head_ptr = lay->head_bottom; printf("HEAD at %p \n",lay->head_bottom); //--------------------------------------------------------------------- // SRC lay->src_bottom = (char*)malloc(256); src_reset(); head_build(); // printf("data pointer is now at %p\n",var->data_ptr); kernel_load(); // printf("data pointer is now at %p\n",var->data_ptr); cmd_init(); lang_init(); // int i; //for(i=0;i<20;i++) // U32 qqq = xxx(0x3456,0x1234); // printf("bindings returns %x\n",1); interpret_init(); // src_error("ass"); // call_meow(); while(1) interpret_outer(); // line(); // int z = armFunction(99); // printf("assembly returnst %d\n",z); exit(0); }
int main(int argc, char *argv[]) { int camera = 0; SDL_Joystick *joy = NULL; if (!fs_init(argv[0])) { fprintf(stderr, "Failure to initialize virtual file system (%s)\n", fs_error()); return 1; } srand((int) time(NULL)); opt_parse(argc, argv); config_paths(opt_data); log_init("Neverputt", "neverputt.log"); fs_mkdir("Screenshots"); /* Request backlight stay on (ubuntu touch) */ int dispreq = -1; DBusError err; dbus_error_init(&err); DBusConnection *conn = dbus_bus_get_private(DBUS_BUS_SYSTEM, &err); if (dbus_error_is_set(&err)) { log_printf("Failed to get system bus\n"); dbus_error_free(&err); if (conn) { dbus_connection_unref(conn); conn = NULL; } } else { dbus_connection_set_exit_on_disconnect(conn, 0); DBusMessage *msg = dbus_message_new_method_call("com.canonical.Unity.Screen", "/com/canonical/Unity/Screen", "com.canonical.Unity.Screen", "keepDisplayOn"); if (msg != NULL) { DBusMessage *reply = dbus_connection_send_with_reply_and_block(conn, msg, 300, NULL); if (reply) { if (!dbus_message_get_args(reply, NULL, DBUS_TYPE_INT32, &dispreq, DBUS_TYPE_INVALID)) dispreq = -1; dbus_message_unref(reply); } dbus_message_unref(msg); } if (dispreq == -1) log_printf("Failed to request backlight stay on\n"); } if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK) == 0) { config_init(); config_load(); /* Initialize localization. */ lang_init(); /* Cache Neverball's camera setting. */ camera = config_get_d(CONFIG_CAMERA); /* Initialize the joystick. */ if (config_get_d(CONFIG_JOYSTICK) && SDL_NumJoysticks() > 0) { joy = SDL_JoystickOpen(config_get_d(CONFIG_JOYSTICK_DEVICE)); if (joy) { SDL_JoystickEventState(SDL_ENABLE); set_joystick(joy); } } /* Initialize the audio. */ audio_init(); /* Initialize the video. */ if (video_init()) { int t1, t0 = SDL_GetTicks(); /* Material system. */ mtrl_init(); /* Run the main game loop. */ init_state(&st_null); if (opt_hole) { const char *path = fs_resolve(opt_hole); int loaded = 0; if (path) { hole_init(NULL); if (hole_load(0, path) && hole_load(1, path) && hole_goto(1, 1)) { goto_state(&st_next); loaded = 1; } } if (!loaded) goto_state(&st_title); } else goto_state(&st_title); while (loop()) if ((t1 = SDL_GetTicks()) > t0) { st_timer((t1 - t0) / 1000.f); hmd_step(); st_paint(0.001f * t1); video_swap(); t0 = t1; if (config_get_d(CONFIG_NICE)) SDL_Delay(1); } mtrl_quit(); } /* Restore Neverball's camera setting. */ config_set_d(CONFIG_CAMERA, camera); config_save(); /* Remove backlight request (ubuntu touch) */ if (conn) { if (dispreq != -1) { DBusMessage *msg = dbus_message_new_method_call("com.canonical.Unity.Screen", "/com/canonical/Unity/Screen", "com.canonical.Unity.Screen", "removeDisplayOnRequest"); dbus_message_append_args(msg, DBUS_TYPE_INT32, &dispreq, DBUS_TYPE_INVALID); if (msg != NULL) { if (dbus_connection_send(conn, msg, NULL)) dbus_connection_flush(conn); dbus_message_unref(msg); } } dbus_connection_close(conn); dbus_connection_unref(conn); dbus_shutdown(); } SDL_Quit(); } else log_printf("Failure to initialize SDL (%s)\n", SDL_GetError()); return 0; }
int init(int ac, char **av) { /* temporary ChannelInfo *ci; NickInfo *ni; */ int i; int openlog_failed = 0, openlog_errno = 0; int started_from_term = isatty(0) && isatty(1) && isatty(2); /* Initialize pseudo-random number generator. */ srand(time(NULL) ^ getppid() ^ getpid()<<16); /* Set file creation mask and group ID. */ #if defined(DEFUMASK) && HAVE_UMASK umask(DEFUMASK); #endif if (set_group() < 0) return -1; /* Parse command-line options; exit if an error occurs. */ if (parse_options(ac, av) < 0) return -1; /* Chdir to Services data directory. */ if (chdir(services_dir) < 0) { fprintf(stderr, "chdir(%s): %s\n", services_dir, strerror(errno)); return -1; } /* Open logfile, and complain if we didn't. */ if (open_log() < 0) { openlog_errno = errno; if (started_from_term) { fprintf(stderr, "Warning: unable to open log file %s: %s\n", log_filename, strerror(errno)); } else { openlog_failed = 1; } } /* Read configuration file; exit if there are problems. */ if (!read_config()) return -1; /* Re-parse command-line options (to override configuration file). */ parse_options(ac, av); /* Detach ourselves if requested. */ if (!nofork) { if ((i = fork()) < 0) { perror("fork()"); return -1; } else if (i != 0) { exit(0); } if (started_from_term) { close(0); close(1); close(2); } if (setpgid(0, 0) < 0) { perror("setpgid()"); return -1; } } #ifdef MEMCHECKS /* Account for runtime memory. Do this after forking to avoid a bogus * "XXX bytes leaked on exit" message when the parent exits. */ init_memory(); #endif /* Write our PID to the PID file. */ write_pidfile(); /* Announce ourselves to the logfile. */ if (debug || readonly || skeleton || noexpire) { log("Services %s (compiled for %s) starting up (options:%s%s%s%s)", version_number, version_protocol, debug ? " debug" : "", readonly ? " readonly" : "", skeleton ? " skeleton" : "", noexpire ? " noexpire" : ""); } else { log("Services %s (compiled for %s) starting up", version_number, version_protocol); } start_time = time(NULL); /* If in read-only mode, close the logfile again. */ if (readonly) close_log(); /* Set signal handlers. Catch certain signals to let us do things or * panic as necessary, and ignore all others. */ #ifdef NSIG for (i = 1; i <= NSIG; i++) { #else for (i = 1; i <= 32; i++) { #endif if (i != SIGPROF) signal(i, SIG_IGN); } signal(SIGINT, weirdsig_handler); signal(SIGTERM, weirdsig_handler); signal(SIGQUIT, weirdsig_handler); #ifndef DUMPCORE signal(SIGSEGV, weirdsig_handler); #endif signal(SIGBUS, weirdsig_handler); signal(SIGQUIT, weirdsig_handler); signal(SIGHUP, weirdsig_handler); signal(SIGILL, weirdsig_handler); signal(SIGTRAP, weirdsig_handler); signal(SIGFPE, weirdsig_handler); #ifdef SIGIOT signal(SIGIOT, weirdsig_handler); #endif /* This is our "out-of-memory" panic switch */ signal(SIGUSR1, weirdsig_handler); /* Initialize multi-language support */ lang_init(); if (debug) log("debug: Loaded languages"); /* Initialiize subservices */ ns_init(); cs_init(); #ifdef USE_MYSQL if(!db_connect(1)) fatal("could not connect to mysql database"); #endif /* Load up databases */ if (!skeleton) { db_load_ns(); //load_ns_dbase(); if (debug) log("debug: Loaded %s database (1/7)", s_NickServ); db_load_cs(); //load_cs_dbase(); if (debug) log("debug: Loaded %s database (2/7)", s_ChanServ); /* start: temporary code */ /* for (ni = firstnick(); ni; ni = nextnick()) { genpass(ni->pass); email_pass(ni->email ? ni->email : "invalid", ni->pass, ni->nick); log("debug: genpass for [%s]", ni->nick); #ifdef USE_ENCRYPTION encrypt_in_place(ni->pass, PASSMAX - 1); #endif db_nick_set(ni, "pass", ni->pass); } for(ci = cs_firstchan(); ci; ci = cs_nextchan()) { genpass(ci->founderpass); email_pass(ci->email ? ci->email : "invalid", ci->founderpass, ci->name); log("debug: genpass for [%s]", ci->name); #ifdef USE_ENCRYPTION encrypt_in_place(ci->founderpass, PASSMAX - 1); #endif db_chan_set(ci, "founderpass", ci->founderpass); } exit(0); */ /* for (ni = firstnick(); ni; ni = nextnick()) { if(db_add_nick(ni) == -1) log("dberror: while adding nicks. continuing"); } for(ci = cs_firstchan(); ci; ci = cs_nextchan()) { if(db_add_channel(ci) == -1) log("dberror: while adding channels. continuing"); } exit(1); */ /* end: temporary code */ } log("Databases loaded"); /* Connect to the remote server */ servsock = conn(RemoteServer, RemotePort, LocalHost, LocalPort); if (servsock < 0) fatal_perror("Can't connect to server"); send_server(); sgets2(inbuf, sizeof(inbuf), servsock); if (strnicmp(inbuf, "ERROR", 5) == 0) { /* Close server socket first to stop wallops, since the other * server doesn't want to listen to us anyway */ disconn(servsock); servsock = -1; fatal("Remote server returned: %s", inbuf); } /* Announce a logfile error if there was one */ if (openlog_failed) { wallops(NULL, "Warning: couldn't open logfile: %s", strerror(openlog_errno)); } /* Bring in our pseudo-clients */ introduce_user(NULL); /* Success! */ return 0; }