int main(int argc,char **argv) { CONF_CREATER *conf; //需要的数据结构 //初始化数据结构 //出错则返回NULL if((conf=conf_creater_new("newrc")) == NULL) return -1; //写配置 //条二个参数为键 //第三个参数为参数,这里注意格式 //第四个参数为注释 //成功时返回0,出错时返回错误代码 //使用conf_error函数可打印错误代码的信息 conf_insert(conf,NULL,NULL,"这是一个测试文件\n"); conf_insert(conf,"arg1","abc","单个参数"); conf_insert(conf,"arg2","abc,def","多个参数"); conf_insert(conf,"arg3","\'abc def\'","空白符"); conf_insert(conf,"arg4","\"abc \' def\"","特殊符号"); conf_insert(conf,"arg5","\"abc,def\",\"#this is value\",hello\n","多参数,特殊符号"); conf_insert(conf,NULL,NULL,"文件结束"); //保存配置文件 conf_save(conf); //释放内存 conf_creater_free(conf); return 0; }
static int luaCB_set_autostart( lua_State* L ) { int to; to = luaL_checknumber( L, 1 ); if ( to >= 0 && to <= 2 ) conf.script_startup = to; conf_save(); return 0; }
void conf_save_as_default() { log_info("CONF_SAVE", "Default settings saved"); /* Generate checksum */ config.checksum = chksum_crc32((unsigned char *) &config, sizeof(config) - sizeof(uint32_t)); /* Save to default file */ conf_save("/boot/default.cnf"); }
void site_savecfg(char *timefile) { int i; lion_t *save_file = NULL; // Assigning last_check for (i = 0; i < num_sites; i++) { if (sites[i]->num_files) { // Save last check for autoq sites[i]->last_check_autoq = sites[i]->last_check; sites[i]->last_check = sites[i]->files[0]->date; debugf("'%s' new last_check %lu\n", sites[i]->name, sites[i]->last_check); } } // Saving info if (conf_do_save) { char *tmpname, *r; if (!timefile) { tmpname = misc_strjoin(conf_file_name, "timestamp"); if ((r = strrchr(tmpname, '/'))) *r = '.'; printf("Attempting to save '%s'\n", tmpname); save_file = lion_open(tmpname, O_WRONLY|O_TRUNC|O_CREAT, 0600, LION_FLAG_NONE, NULL); SAFE_FREE(tmpname); } else { printf("Attempting to save '%s'\n", timefile); save_file = lion_open(timefile, O_WRONLY|O_TRUNC|O_CREAT, 0600, LION_FLAG_NONE, NULL); } if (save_file) { lion_disable_read(save_file); debugf("saving conf...\n"); conf_save(save_file); lion_close(save_file); } } }
static int syscfg_commit(void) { int ret; if (confsvc.save_ack == confsvc.save_req) { return 0; } DBG(DBG_TRACE, "commiting changes ..."); if ((ret = conf_save(confsvc.path, conf_root)) < 0) { DBG(DBG_WARNING, "conf_save() failed!"); } confsvc.save_ack = confsvc.save_req; return ret; }
static void conf(struct menu *menu) { struct menu *submenu; const char *prompt = menu_get_prompt(menu); struct symbol *sym; struct menu *active_menu = NULL; int res; int s_scroll = 0; while (1) { item_reset(); current_menu = menu; build_conf(menu); if (!child_count) break; if (menu == &rootmenu) { item_make("--- "); item_set_tag(':'); item_make(_(" Load an Alternate Configuration File")); item_set_tag('L'); item_make(_(" Save an Alternate Configuration File")); item_set_tag('S'); } dialog_clear(); res = dialog_menu(prompt ? _(prompt) : _("Main Menu"), _(menu_instructions), active_menu, &s_scroll); if (res == 1 || res == KEY_ESC || res == -ERRDISPLAYTOOSMALL) break; if (!item_activate_selected()) continue; if (!item_tag()) continue; submenu = item_data(); active_menu = item_data(); if (submenu) sym = submenu->sym; else sym = NULL; switch (res) { case 0: switch (item_tag()) { case 'm': if (single_menu_mode) submenu->data = (void *) (long) !submenu->data; else conf(submenu); break; case 't': if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes) conf_choice(submenu); else if (submenu->prompt->type == P_MENU) conf(submenu); break; case 's': conf_string(submenu); break; case 'L': conf_load(); break; case 'S': conf_save(); break; } break; case 2: if (sym) show_help(submenu); else show_helptext(_("README"), _(mconf_readme)); break; case 3: if (item_is_tag('t')) { if (sym_set_tristate_value(sym, yes)) break; if (sym_set_tristate_value(sym, mod)) show_textbox(NULL, setmod_text, 6, 74); } break; case 4: if (item_is_tag('t')) sym_set_tristate_value(sym, no); break; case 5: if (item_is_tag('t')) sym_set_tristate_value(sym, mod); break; case 6: if (item_is_tag('t')) sym_toggle_tristate_value(sym); else if (item_is_tag('m')) conf(submenu); break; case 7: search_conf(); break; } } }
void core_spytask() { int cnt = 1; int i=0; // Init camera_info bits that can't be done statically camera_info_init(); spytask_can_start=0; #ifdef OPT_EXMEM_MALLOC extern void exmem_malloc_init(void); exmem_malloc_init(); #endif #ifdef CAM_CHDK_PTP extern void init_chdk_ptp_task(); init_chdk_ptp_task(); #endif while((i++<400) && !spytask_can_start) msleep(10); started(); msleep(50); finished(); #if !CAM_DRYOS drv_self_unhide(); #endif conf_restore(); extern void gui_init(); gui_init(); #if CAM_CONSOLE_LOG_ENABLED extern void cam_console_init(); cam_console_init(); #endif mkdir("A/CHDK"); mkdir("A/CHDK/FONTS"); mkdir("A/CHDK/SYMBOLS"); mkdir("A/CHDK/SCRIPTS"); mkdir("A/CHDK/LANG"); mkdir("A/CHDK/BOOKS"); mkdir("A/CHDK/MODULES"); mkdir("A/CHDK/MODULES/CFG"); mkdir("A/CHDK/GRIDS"); mkdir("A/CHDK/CURVES"); mkdir("A/CHDK/DATA"); mkdir("A/CHDK/LOGS"); mkdir("A/CHDK/EDGE"); // Calculate the value of get_tick_count() when the clock ticks over to the next second // Used to calculate the SubSecondTime value when saving DNG files. long t1, t2; t2 = time(0); do { t1 = t2; camera_info.tick_count_offset = get_tick_count(); t2 = time(0); msleep(10); } while (t1 != t2); camera_info.tick_count_offset = camera_info.tick_count_offset % 1000; // remote autostart if (conf.script_startup==1) { script_autostart(); } else if (conf.script_startup==2) { conf.script_startup=0; conf_save(); script_autostart(); } shooting_init(); while (1) { if ( memdmptick && (get_tick_count() >= memdmptick) ) { memdmptick = 0; dump_memory(); } // Change ALT mode if the KBD task has flagged a state change gui_activate_alt_mode(); #ifdef CAM_LOAD_CUSTOM_COLORS // Color palette function extern void load_chdk_palette(); load_chdk_palette(); #endif if (raw_data_available) { raw_process(); extern void hook_raw_save_complete(); hook_raw_save_complete(); raw_data_available = 0; #ifdef CAM_HAS_GPS if( (int)conf.gps_waypoint_save == 1 ) wegpunkt(); #endif continue; } if ((camera_info.state.state_shooting_progress != SHOOTING_PROGRESS_PROCESSING) || recreview_hold) { if (((cnt++) & 3) == 0) gui_redraw(); } if (camera_info.state.state_shooting_progress != SHOOTING_PROGRESS_PROCESSING) { if (conf.show_histo) histogram_process(); #ifdef OPT_EDGEOVERLAY if(((gui_get_mode()==GUI_MODE_NONE) || (gui_get_mode()==GUI_MODE_ALT)) && conf.edge_overlay_thresh && conf.edge_overlay_enable) { // We need to skip first tick because stability static int skip_counter=1; if (skip_counter>0) { skip_counter--; } else { libedgeovr->edge_overlay(); } } #endif } if ((camera_info.state.state_shooting_progress == SHOOTING_PROGRESS_PROCESSING) && (!shooting_in_progress())) { camera_info.state.state_shooting_progress = SHOOTING_PROGRESS_DONE; } i = 0; #ifdef DEBUG_PRINT_TO_LCD sprintf(osd_buf, "%d", cnt ); // modify cnt to what you want to display draw_txt_string(1, i++, osd_buf, conf.osd_color); #endif if (camera_info.perf.md_af_tuning) { sprintf(osd_buf, "MD last %-4d min %-4d max %-4d avg %-4d", camera_info.perf.af_led.last, camera_info.perf.af_led.min, camera_info.perf.af_led.max, (camera_info.perf.af_led.count>0)?camera_info.perf.af_led.sum/camera_info.perf.af_led.count:0); draw_txt_string(1, i++, osd_buf, conf.osd_color); } // Process async module unload requests module_tick_unloader(); msleep(20); chdk_started_flag=1; } }
static void conf(struct menu *menu) { struct dialog_list_item *active_item = NULL; struct menu *submenu; const char *prompt = menu_get_prompt(menu); struct symbol *sym; char active_entry[40]; int stat, type; unlink("lxdialog.scrltmp"); active_entry[0] = 0; while (1) { indent = 0; child_count = 0; current_menu = menu; cdone(); cinit(); build_conf(menu); if (!child_count) break; if (menu == &rootmenu) { cmake(); cprint_tag(":"); cprint_name("--- "); cmake(); cprint_tag("L"); cprint_name("Load an Alternate Configuration File"); cmake(); cprint_tag("S"); cprint_name("Save Configuration to an Alternate File"); } dialog_clear(); stat = dialog_menu(prompt ? prompt : "Main Menu", menu_instructions, rows, cols, rows - 10, active_entry, item_no, items); if (stat < 0) return; if (stat == 1 || stat == 255) break; active_item = first_sel_item(item_no, items); if (!active_item) continue; active_item->selected = 0; strncpy(active_entry, active_item->tag, sizeof(active_entry)); active_entry[sizeof(active_entry)-1] = 0; type = active_entry[0]; if (!type) continue; sym = NULL; submenu = NULL; if (sscanf(active_entry + 1, "%p", &submenu) == 1) sym = submenu->sym; switch (stat) { case 0: switch (type) { case 'm': if (single_menu_mode) submenu->data = (void *) (long) !submenu->data; else conf(submenu); break; case 't': if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes) conf_choice(submenu); else if (submenu->prompt->type == P_MENU) conf(submenu); break; case 's': conf_string(submenu); break; case 'L': conf_load(); break; case 'S': conf_save(); break; } break; case 2: if (sym) show_help(submenu); else show_helptext("README", mconf_readme); break; case 3: if (type == 't') { if (sym_set_tristate_value(sym, yes)) break; if (sym_set_tristate_value(sym, mod)) show_textbox(NULL, setmod_text, 6, 74); } break; case 4: if (type == 't') sym_set_tristate_value(sym, no); break; case 5: if (type == 't') sym_set_tristate_value(sym, mod); break; case 6: if (type == 't') sym_toggle_tristate_value(sym); else if (type == 'm') conf(submenu); break; case 7: search_conf(); break; } } }
static void conf(struct menu *menu) { struct menu *submenu; const char *prompt = menu_get_prompt(menu); struct symbol *sym; char active_entry[40]; int stat, type, i; unlink("lxdialog.scrltmp"); active_entry[0] = 0; while (1) { cprint_init(); cprint("--title"); cprint("%s", prompt ? prompt : "Main Menu"); cprint("--menu"); cprint(menu_instructions); cprint("%d", rows); cprint("%d", cols); cprint("%d", rows - 10); cprint("%s", active_entry); current_menu = menu; build_conf(menu); if (!child_count) break; if (menu == &rootmenu) { cprint(":"); cprint("--- "); cprint("L"); cprint(" Load an Alternate Configuration File"); cprint("S"); cprint(" Save Configuration to an Alternate File"); } stat = exec_conf(); if (stat < 0) continue; if (stat == 1 || stat == 255) break; type = input_buf[0]; if (!type) continue; for (i = 0; input_buf[i] && !isspace(input_buf[i]); i++) ; if (i >= sizeof(active_entry)) i = sizeof(active_entry) - 1; input_buf[i] = 0; strcpy(active_entry, input_buf); sym = NULL; submenu = NULL; if (sscanf(input_buf + 1, "%p", &submenu) == 1) sym = submenu->sym; switch (stat) { case 0: switch (type) { case 'm': if (single_menu_mode) submenu->data = (void *) (long) !submenu->data; else conf(submenu); break; case 't': if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes) conf_choice(submenu); else if (submenu->prompt->type == P_MENU) conf(submenu); break; case 's': conf_string(submenu); break; case 'L': conf_load(); break; case 'S': conf_save(); break; } break; case 2: if (sym) show_help(submenu); else show_readme(); break; case 3: if (type == 't') { if (sym_set_tristate_value(sym, yes)) break; if (sym_set_tristate_value(sym, mod)) show_textbox(NULL, setmod_text, 6, 74); } break; case 4: if (type == 't') sym_set_tristate_value(sym, no); break; case 5: if (type == 't') sym_set_tristate_value(sym, mod); break; case 6: if (type == 't') sym_toggle_tristate_value(sym); else if (type == 'm') conf(submenu); break; } } }
void core_spytask() { int cnt = 1; int i=0; #ifdef CAM_HAS_GPS int gps_delay_timer = 200 ; int gps_state = -1 ; #endif #if (OPT_DISABLE_CAM_ERROR) extern void DisableCamError(); int dce_cnt=0; int dce_prevmode=0; int dce_nowmode; #endif parse_version(&chdk_version, BUILD_NUMBER, BUILD_SVNREV); // Init camera_info bits that can't be done statically camera_info_init(); spytask_can_start=0; extern void aram_malloc_init(void); aram_malloc_init(); extern void exmem_malloc_init(void); exmem_malloc_init(); #ifdef CAM_CHDK_PTP extern void init_chdk_ptp_task(); init_chdk_ptp_task(); #endif while((i++<400) && !spytask_can_start) msleep(10); started(); msleep(50); finished(); #if !CAM_DRYOS drv_self_unhide(); #endif conf_restore(); extern void gui_init(); gui_init(); #if CAM_CONSOLE_LOG_ENABLED extern void cam_console_init(); cam_console_init(); #endif static char *chdk_dirs[] = { "A/CHDK", "A/CHDK/FONTS", "A/CHDK/SYMBOLS", "A/CHDK/SCRIPTS", "A/CHDK/LANG", "A/CHDK/BOOKS", "A/CHDK/MODULES", "A/CHDK/MODULES/CFG", "A/CHDK/GRIDS", "A/CHDK/CURVES", "A/CHDK/DATA", "A/CHDK/LOGS", "A/CHDK/EDGE", }; for (i = 0; i < sizeof(chdk_dirs) / sizeof(char*); i++) mkdir_if_not_exist(chdk_dirs[i]); no_modules_flag = stat("A/CHDK/MODULES/FSELECT.FLT",0) ? 1 : 0 ; // Calculate the value of get_tick_count() when the clock ticks over to the next second // Used to calculate the SubSecondTime value when saving DNG files. long t1, t2; t2 = time(0); do { t1 = t2; camera_info.tick_count_offset = get_tick_count(); t2 = time(0); msleep(10); } while (t1 != t2); camera_info.tick_count_offset = camera_info.tick_count_offset % 1000; // remote autostart if (conf.script_startup==SCRIPT_AUTOSTART_ALWAYS) { script_autostart(); } else if (conf.script_startup==SCRIPT_AUTOSTART_ONCE) { conf.script_startup=SCRIPT_AUTOSTART_NONE; conf_save(); script_autostart(); } shooting_init(); while (1) { // Set up camera mode & state variables mode_get(); // update HDMI power override based on mode and remote settings #ifdef CAM_REMOTE_HDMI_POWER_OVERRIDE extern void update_hdmi_power_override(void); update_hdmi_power_override(); #endif extern void set_palette(); set_palette(); #if (OPT_DISABLE_CAM_ERROR) dce_nowmode = camera_info.state.mode_play; if (dce_prevmode==dce_nowmode) { //no mode change dce_cnt++; // overflow is not a concern here } else { //mode has changed dce_cnt=0; } if (dce_cnt==100) { // 1..2s past play <-> rec mode change DisableCamError(); } dce_prevmode=dce_nowmode; #endif if ( memdmptick && (get_tick_count() >= memdmptick) ) { memdmptick = 0; dump_memory(); } #ifdef CAM_HAS_GPS if ( --gps_delay_timer == 0 ) { gps_delay_timer = 50 ; if ( gps_state != (int)conf.gps_on_off ) { gps_state = (int)conf.gps_on_off ; init_gps_startup(!gps_state) ; } } #endif // Change ALT mode if the KBD task has flagged a state change gui_activate_alt_mode(); #ifdef CAM_LOAD_CUSTOM_COLORS // Color palette function extern void load_chdk_palette(); load_chdk_palette(); #endif if (raw_data_available) { raw_process(); extern void hook_raw_save_complete(); hook_raw_save_complete(); raw_data_available = 0; #ifdef CAM_HAS_GPS if (((int)conf.gps_on_off == 1) && ((int)conf.gps_waypoint_save == 1)) gps_waypoint(); #endif #if defined(CAM_CALC_BLACK_LEVEL) // Reset to default in case used by non-RAW process code (e.g. raw merge) camera_sensor.black_level = CAM_BLACK_LEVEL; #endif continue; } if ((camera_info.state.state_shooting_progress != SHOOTING_PROGRESS_PROCESSING) || recreview_hold) { if (((cnt++) & 3) == 0) gui_redraw(); } if (camera_info.state.state_shooting_progress != SHOOTING_PROGRESS_PROCESSING) { if (conf.show_histo) libhisto->histogram_process(); if ((camera_info.state.gui_mode_none || camera_info.state.gui_mode_alt) && conf.edge_overlay_thresh && conf.edge_overlay_enable) { // We need to skip first tick because stability if (chdk_started_flag) { libedgeovr->edge_overlay(); } } } if ((camera_info.state.state_shooting_progress == SHOOTING_PROGRESS_PROCESSING) && (!shooting_in_progress())) { camera_info.state.state_shooting_progress = SHOOTING_PROGRESS_DONE; } i = 0; #ifdef DEBUG_PRINT_TO_LCD sprintf(osd_buf, "%d", cnt ); // modify cnt to what you want to display draw_txt_string(1, i++, osd_buf, user_color(conf.osd_color)); #endif #if defined(OPT_FILEIO_STATS) sprintf(osd_buf, "%3d %3d %3d %3d %3d %3d %3d %4d", camera_info.fileio_stats.fileio_semaphore_errors, camera_info.fileio_stats.close_badfile_count, camera_info.fileio_stats.write_badfile_count, camera_info.fileio_stats.open_count, camera_info.fileio_stats.close_count, camera_info.fileio_stats.open_fail_count, camera_info.fileio_stats.close_fail_count, camera_info.fileio_stats.max_semaphore_timeout); draw_txt_string(1, i++, osd_buf,user_color( conf.osd_color)); #endif if (camera_info.perf.md_af_tuning) { sprintf(osd_buf, "MD last %-4d min %-4d max %-4d avg %-4d", camera_info.perf.af_led.last, camera_info.perf.af_led.min, camera_info.perf.af_led.max, (camera_info.perf.af_led.count>0)?camera_info.perf.af_led.sum/camera_info.perf.af_led.count:0); draw_txt_string(1, i++, osd_buf, user_color(conf.osd_color)); } // Process async module unload requests module_tick_unloader(); msleep(20); chdk_started_flag=1; } }
int os_main(int argc, char* argv[]) { adv_crtc_container selected; adv_crtc_container_iterator i; const char* opt_rc; adv_bool opt_log; adv_bool opt_logsync; int j; adv_error res; char* section_map[1]; char buffer[1024]; opt_rc = 0; opt_log = 0; opt_logsync = 0; the_advance = advance_mame; the_sound_flag = 1; the_config = conf_init(); if (os_init(the_config)!=0) { target_err("Error initializing the OS support.\n"); goto err_conf; } video_reg(the_config, 1); monitor_register(the_config); crtc_container_register(the_config); generate_interpolate_register(the_config); gtf_register(the_config); inputb_reg(the_config, 1); inputb_reg_driver_all(the_config); /* MSDOS requires a special driver sub set */ #ifndef __MSDOS__ video_reg_driver_all(the_config); #endif if (conf_input_args_load(the_config, 1, "", &argc, argv, error_callback, 0) != 0) goto err_os; for(j=1;j<argc;++j) { if (target_option_compare(argv[j], "rc") && j+1<argc) { opt_rc = argv[++j]; } else if (target_option_compare(argv[j], "log")) { opt_log = 1; } else if (target_option_compare(argv[j], "logsync")) { opt_logsync = 1; } else if (target_option_compare(argv[j], "nosound")) { the_sound_flag = 0; } else if (target_option_compare(argv[j], "advmamev")) { the_advance = advance_mame; } else if (target_option_compare(argv[j], "advmessv")) { the_advance = advance_mess; } else if (target_option_compare(argv[j], "advpacv")) { the_advance = advance_pac; } else if (target_option_compare(argv[j], "advmenuv")) { the_advance = advance_menu; #ifdef __MSDOS__ } else if (target_option_compare(argv[j], "vgav")) { the_advance = advance_vga; } else if (target_option_compare(argv[j], "vbev")) { the_advance = advance_vbe; #endif #ifdef __WIN32__ } else if (target_option_compare(argv[j], "videowv")) { the_advance = advance_videow; #endif } else { target_err("Unknown option %s\n", argv[j]); goto err; } } #ifdef __MSDOS__ /* WARNING the MSDOS drivers are registered after the command line management. */ /* It implyes that you cannot specify any driver options on the command line */ msdos_rut(); if (the_advance == advance_vga) { if (the_advance_vga_active) { target_err("The AdvanceVGA utility is active. Disable it before running vgav.\n"); goto err; } video_reg_driver(the_config, &video_vgaline_driver); } else if (the_advance == advance_vbe) { if (the_advance_vbe_active) { target_err("The AdvanceVBE utility is active. Disable it before running vbev.\n"); goto err; } video_reg_driver(the_config, &video_vbeline_driver); video_reg_driver(the_config, &video_vgaline_driver); /* for the text modes */ } else { video_reg_driver_all(the_config); } #endif if (!opt_rc) { switch (the_advance) { case advance_vbe : opt_rc = "vbe.rc"; break; case advance_vga : opt_rc = "vga.rc"; break; case advance_menu : opt_rc = file_config_file_home("advmenu.rc"); break; case advance_mame : opt_rc = file_config_file_home("advmame.rc"); break; case advance_mess : opt_rc = file_config_file_home("advmess.rc"); break; case advance_pac : opt_rc = file_config_file_home("advpac.rc"); break; case advance_videow : opt_rc = file_config_file_home("videow.rc"); break; default : opt_rc = "advv.rc"; break; } } if (access(opt_rc, R_OK)!=0) { target_err("Configuration file %s not found.\n", opt_rc); goto err_os; } if (conf_input_file_load_adv(the_config, 0, opt_rc, opt_rc, 1, 1, STANDARD, sizeof(STANDARD)/sizeof(STANDARD[0]), error_callback, 0) != 0) goto err_os; if (opt_log || opt_logsync) { const char* log = "advv.log"; remove(log); log_init(log, opt_logsync); } log_std(("v: %s %s\n", __DATE__, __TIME__)); section_map[0] = ""; conf_section_set(the_config, section_map, 1); if (video_load(the_config, "") != 0) { target_err("Error loading the video options from the configuration file %s.\n", opt_rc); target_err("%s\n", error_get()); goto err_os; } if (inputb_load(the_config) != 0) { target_err("%s\n", error_get()); goto err_os; } /* NOTE: After this command all the target_err() string must */ /* have \n\r at the end to ensure correct newline in graphics mode. */ if (os_inner_init("AdvanceVIDEO") != 0) { goto err_os; } if (adv_video_init() != 0) { target_err("%s\n\r", error_get()); troubleshotting(); goto err_os_inner; } if (video_blit_init() != 0) { target_err("%s\n\r", error_get()); goto err_video; } if (the_advance != advance_vbe && the_advance != advance_vga) { if ((video_mode_generate_driver_flags(VIDEO_DRIVER_FLAGS_MODE_GRAPH_MASK, 0) & VIDEO_DRIVER_FLAGS_PROGRAMMABLE_CLOCK) == 0) { target_err("No active video driver is able to program your video board.\n\r"); troubleshotting(); goto err_blit; } } if (inputb_init() != 0) { target_err("%s\n\r", error_get()); goto err_blit; } if (monitor_load(the_config, &the_monitor) != 0) { target_err("Error loading the clock options from the configuration file %s.\n\r", opt_rc); target_err("%s\n\r", error_get()); goto err_input; } monitor_print(buffer, sizeof(buffer), &the_monitor); log_std(("v: clock %s\n", buffer)); /* load generate_linear config */ res = generate_interpolate_load(the_config, &the_interpolate); if (res<0) { target_err("Error loading the format options from the configuration file %s.\n\r", opt_rc); target_err("%s\n\r", error_get()); goto err_input; } if (res>0) { generate_default_vga(&the_interpolate.map[0].gen); the_interpolate.map[0].hclock = 31500; the_interpolate.mac = 1; } /* load generate_linear config */ res = gtf_load(the_config, &the_gtf); if (res<0) { target_err("Error loading the gtf options from the configuration file %s.\n\r", opt_rc); target_err("%s\n\r", error_get()); goto err_input; } if (res>0) { gtf_default_vga(&the_gtf); } /* all mode */ crtc_container_init(&selected); /* insert modes */ crtc_container_insert_default_all(&selected); /* sort */ crtc_container_init(&the_modes); for(crtc_container_iterator_begin(&i, &selected);!crtc_container_iterator_is_end(&i);crtc_container_iterator_next(&i)) { adv_crtc* crtc = crtc_container_iterator_get(&i); crtc_container_insert_sort(&the_modes, crtc, crtc_compare); } crtc_container_done(&selected); /* load selected */ crtc_container_init(&selected); if (crtc_container_load(the_config, &selected) != 0) { target_err("%s\n\r", error_get()); goto err_input; } /* union set */ for(crtc_container_iterator_begin(&i, &selected);!crtc_container_iterator_is_end(&i);crtc_container_iterator_next(&i)) { adv_crtc* crtc = crtc_container_iterator_get(&i); adv_bool has = crtc_container_has(&the_modes, crtc, crtc_compare) != 0; if (has) crtc_container_remove(&the_modes, crtc_select_by_compare, crtc); crtc->user_flags |= MODE_FLAGS_USER_BIT0; crtc_container_insert_sort(&the_modes, crtc, crtc_compare); } crtc_container_done(&selected); the_modes_modified = 0; if (text_init(&the_modes, &the_monitor) != 0) { goto err_input; } if (inputb_enable(0) != 0) { goto err_text; } sound_signal(); menu_run(); log_std(("v: shutdown\n")); inputb_disable(); text_done(); crtc_container_done(&the_modes); inputb_done(); video_blit_done(); adv_video_done(); os_inner_done(); log_std(("v: the end\n")); if (opt_log || opt_logsync) { log_done(); } os_done(); conf_save(the_config, 0, 0, error_callback, 0); conf_done(the_config); return EXIT_SUCCESS; err_text: text_done(); err_input: inputb_done(); err_blit: video_blit_done(); err_video: adv_video_done(); err_os_inner: os_inner_done(); err_os: if (opt_log || opt_logsync) { log_done(); } os_done(); err_conf: conf_done(the_config); err: return EXIT_FAILURE; }
int main (int argc, char *argv[]) { int portable = 0; #if STATICLINK int staticlink = 1; #else int staticlink = 0; #endif #if PORTABLE portable = 1; if (!realpath (argv[0], dbinstalldir)) { strcpy (dbinstalldir, argv[0]); } char *e = strrchr (dbinstalldir, '/'); if (e) { *e = 0; } else { fprintf (stderr, "couldn't determine install folder from path %s\n", argv[0]); exit (-1); } #else if (!realpath (argv[0], dbinstalldir)) { strcpy (dbinstalldir, argv[0]); } char *e = strrchr (dbinstalldir, '/'); if (e) { *e = 0; struct stat st; char checkpath[PATH_MAX]; snprintf (checkpath, sizeof (checkpath), "%s/.ddb_portable", dbinstalldir); if (!stat (checkpath, &st)) { if (S_ISREG (st.st_mode)) { portable = 1; } } } if (!portable) { strcpy (dbinstalldir, PREFIX); } #endif #ifdef __GLIBC__ signal (SIGSEGV, sigsegv_handler); #endif setlocale (LC_ALL, ""); setlocale (LC_NUMERIC, "C"); #ifdef ENABLE_NLS // fprintf (stderr, "enabling gettext support: package=" PACKAGE ", dir=" LOCALEDIR "...\n"); if (portable) { char localedir[PATH_MAX]; snprintf (localedir, sizeof (localedir), "%s/locale", dbinstalldir); bindtextdomain (PACKAGE, localedir); } else { bindtextdomain (PACKAGE, LOCALEDIR); } bind_textdomain_codeset (PACKAGE, "UTF-8"); textdomain (PACKAGE); #endif fprintf (stderr, "starting deadbeef " VERSION "%s%s\n", staticlink ? " [static]" : "", portable ? " [portable]" : ""); srand (time (NULL)); #ifdef __linux__ prctl (PR_SET_NAME, "deadbeef-main", 0, 0, 0, 0); #endif #if PORTABLE_FULL if (snprintf (confdir, sizeof (confdir), "%s/config", dbinstalldir) > sizeof (confdir)) { fprintf (stderr, "fatal: too long install path %s\n", dbinstalldir); return -1; } strcpy (dbconfdir, confdir); #else char *homedir = getenv ("HOME"); if (!homedir) { fprintf (stderr, "unable to find home directory. stopping.\n"); return -1; } char *xdg_conf_dir = getenv ("XDG_CONFIG_HOME"); if (xdg_conf_dir) { if (snprintf (confdir, sizeof (confdir), "%s", xdg_conf_dir) > sizeof (confdir)) { fprintf (stderr, "fatal: XDG_CONFIG_HOME value is too long: %s\n", xdg_conf_dir); return -1; } } else { if (snprintf (confdir, sizeof (confdir), "%s/.config", homedir) > sizeof (confdir)) { fprintf (stderr, "fatal: HOME value is too long: %s\n", homedir); return -1; } } if (snprintf (dbconfdir, sizeof (dbconfdir), "%s/deadbeef", confdir) > sizeof (dbconfdir)) { fprintf (stderr, "fatal: out of memory while configuring\n"); return -1; } mkdir (confdir, 0755); #endif if (portable) { if (snprintf (dbdocdir, sizeof (dbdocdir), "%s/doc", dbinstalldir) > sizeof (dbdocdir)) { fprintf (stderr, "fatal: too long install path %s\n", dbinstalldir); return -1; } #ifdef HAVE_COCOAUI char respath[PATH_MAX]; cocoautil_get_resources_path (respath, sizeof (respath)); if (snprintf (dbplugindir, sizeof (dbplugindir), "%s", respath) > sizeof (dbplugindir)) { fprintf (stderr, "fatal: too long install path %s\n", dbinstalldir); return -1; } #else if (snprintf (dbplugindir, sizeof (dbplugindir), "%s/plugins", dbinstalldir) > sizeof (dbplugindir)) { fprintf (stderr, "fatal: too long install path %s\n", dbinstalldir); return -1; } #endif if (snprintf (dbpixmapdir, sizeof (dbpixmapdir), "%s/pixmaps", dbinstalldir) > sizeof (dbpixmapdir)) { fprintf (stderr, "fatal: too long install path %s\n", dbinstalldir); return -1; } mkdir (dbplugindir, 0755); } else { if (snprintf (dbdocdir, sizeof (dbdocdir), "%s", DOCDIR) > sizeof (dbdocdir)) { fprintf (stderr, "fatal: too long install path %s\n", dbinstalldir); return -1; } if (snprintf (dbplugindir, sizeof (dbplugindir), "%s/deadbeef", LIBDIR) > sizeof (dbplugindir)) { fprintf (stderr, "fatal: too long install path %s\n", dbinstalldir); return -1; } if (snprintf (dbpixmapdir, sizeof (dbpixmapdir), "%s/share/deadbeef/pixmaps", PREFIX) > sizeof (dbpixmapdir)) { fprintf (stderr, "fatal: too long install path %s\n", dbinstalldir); return -1; } } for (int i = 1; i < argc; i++) { // help, version and nowplaying are executed with any filter if (!strcmp (argv[i], "--help") || !strcmp (argv[i], "-h")) { print_help (); return 0; } else if (!strcmp (argv[i], "--version")) { fprintf (stderr, "DeaDBeeF " VERSION " Copyright © 2009-2013 Alexey Yakovenko\n"); return 0; } else if (!strcmp (argv[i], "--gui")) { if (i == argc-1) { break; } i++; strncpy (use_gui_plugin, argv[i], sizeof(use_gui_plugin) - 1); use_gui_plugin[sizeof(use_gui_plugin) - 1] = 0; } } trace ("installdir: %s\n", dbinstalldir); trace ("confdir: %s\n", confdir); trace ("docdir: %s\n", dbdocdir); trace ("plugindir: %s\n", dbplugindir); trace ("pixmapdir: %s\n", dbpixmapdir); mkdir (dbconfdir, 0755); int size = 0; char *cmdline = prepare_command_line (argc, argv, &size); // try to connect to remote player int s, len; struct sockaddr_un remote; if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } memset (&remote, 0, sizeof (remote)); remote.sun_family = AF_UNIX; #if USE_ABSTRACT_SOCKET_NAME memcpy (remote.sun_path, server_id, sizeof (server_id)); len = offsetof(struct sockaddr_un, sun_path) + sizeof (server_id)-1; #else char *socketdirenv = getenv ("DDB_SOCKET_DIR"); snprintf (remote.sun_path, sizeof (remote.sun_path), "%s/socket", socketdirenv ? socketdirenv : dbconfdir); len = offsetof(struct sockaddr_un, sun_path) + strlen (remote.sun_path); #endif if (connect(s, (struct sockaddr *)&remote, len) == 0) { // pass args to remote and exit if (send(s, cmdline, size, 0) == -1) { perror ("send"); exit (-1); } // end of message shutdown(s, SHUT_WR); int sz = -1; char *out = read_entire_message(s, &sz); if (sz == -1) { fprintf (stderr, "failed to pass args to remote!\n"); exit (-1); } else { // check if that's nowplaying response const char np[] = "nowplaying "; const char err[] = "error "; if (!strncmp (out, np, sizeof (np)-1)) { const char *prn = &out[sizeof (np)-1]; fwrite (prn, 1, strlen (prn), stdout); } else if (!strncmp (out, err, sizeof (err)-1)) { const char *prn = &out[sizeof (err)-1]; fwrite (prn, 1, strlen (prn), stderr); } else if (sz > 0 && out[0]) { fprintf (stderr, "%s\n", out); } } if (out) { free (out); } close (s); exit (0); } // else { // perror ("INFO: failed to connect to existing session:"); // } close(s); // become a server if (server_start () < 0) { exit (-1); } // hack: report nowplaying if (!strcmp (cmdline, "--nowplaying")) { char nothing[] = "nothing"; fwrite (nothing, 1, sizeof (nothing)-1, stdout); return 0; } pl_init (); conf_init (); conf_load (); // required by some plugins at startup if (use_gui_plugin[0]) { conf_set_str ("gui_plugin", use_gui_plugin); } conf_set_str ("deadbeef_version", VERSION); volume_set_db (conf_get_float ("playback.volume", 0)); // volume need to be initialized before plugins start messagepump_init (); // required to push messages while handling commandline if (plug_load_all ()) { // required to add files to playlist from commandline exit (-1); } pl_load_all (); plt_set_curr_idx (conf_get_int ("playlist.current", 0)); // execute server commands in local context int noloadpl = 0; if (argc > 1) { int res = server_exec_command_line (cmdline, size, NULL, 0); // some of the server commands ran on 1st instance should terminate it if (res == 2) { noloadpl = 1; } else if (res > 0) { exit (0); } else if (res < 0) { exit (-1); } } free (cmdline); #if 0 signal (SIGTERM, sigterm_handler); atexit (atexit_handler); // helps to save in simple cases #endif streamer_init (); plug_connect_all (); messagepump_push (DB_EV_PLUGINSLOADED, 0, 0, 0); if (!noloadpl) { restore_resume_state (); } server_tid = thread_start (server_loop, NULL); mainloop_tid = thread_start (mainloop_thread, NULL); DB_plugin_t *gui = plug_get_gui (); if (gui) { gui->start (); } fprintf (stderr, "gui plugin has quit; waiting for mainloop thread to finish\n"); thread_join (mainloop_tid); // terminate server and wait for completion if (server_tid) { server_terminate = 1; thread_join (server_tid); server_tid = 0; } // save config pl_save_all (); conf_save (); // delete legacy session file { char sessfile[1024]; // $HOME/.config/deadbeef/session if (snprintf (sessfile, sizeof (sessfile), "%s/deadbeef/session", confdir) < sizeof (sessfile)) { unlink (sessfile); } } // stop receiving messages from outside server_close (); // plugins might still hold references to playitems, // and query configuration in background // so unload everything 1st before final cleanup plug_disconnect_all (); plug_unload_all (); // at this point we can simply do exit(0), but let's clean up for debugging pl_free (); // may access conf_* conf_free (); fprintf (stderr, "messagepump_free\n"); messagepump_free (); fprintf (stderr, "plug_cleanup\n"); plug_cleanup (); fprintf (stderr, "hej-hej!\n"); return 0; }
void player_mainloop (void) { for (;;) { uint32_t msg; uintptr_t ctx; uint32_t p1; uint32_t p2; int term = 0; while (messagepump_pop(&msg, &ctx, &p1, &p2) != -1) { // broadcast to all plugins DB_plugin_t **plugs = plug_get_list (); for (int n = 0; plugs[n]; n++) { if (plugs[n]->message) { plugs[n]->message (msg, ctx, p1, p2); } } if (!term) { DB_output_t *output = plug_get_output (); switch (msg) { case DB_EV_REINIT_SOUND: plug_reinit_sound (); streamer_reset (1); conf_save (); break; case DB_EV_TERMINATE: { save_resume_state (); pl_playqueue_clear (); // stop streaming and playback before unloading plugins DB_output_t *output = plug_get_output (); output->stop (); streamer_free (); output->free (); term = 1; } break; case DB_EV_PLAY_CURRENT: streamer_play_current_track (); break; case DB_EV_PLAY_NUM: pl_playqueue_clear (); streamer_set_nextsong (p1, 4); break; case DB_EV_STOP: streamer_set_nextsong (-2, 0); break; case DB_EV_NEXT: streamer_move_to_nextsong (1); break; case DB_EV_PREV: streamer_move_to_prevsong (1); break; case DB_EV_PAUSE: if (output->state () != OUTPUT_STATE_PAUSED) { output->pause (); messagepump_push (DB_EV_PAUSED, 0, 1, 0); } break; case DB_EV_TOGGLE_PAUSE: if (output->state () == OUTPUT_STATE_PAUSED) { streamer_play_current_track (); } else { output->pause (); messagepump_push (DB_EV_PAUSED, 0, 1, 0); } break; case DB_EV_PLAY_RANDOM: streamer_move_to_randomsong (1); break; case DB_EV_PLAYLIST_REFRESH: pl_save_current (); messagepump_push (DB_EV_PLAYLISTCHANGED, 0, 0, 0); break; case DB_EV_CONFIGCHANGED: conf_save (); streamer_configchanged (); junk_configchanged (); break; case DB_EV_SEEK: streamer_set_seek (p1 / 1000.f); break; } } if (msg >= DB_EV_FIRST && ctx) { messagepump_event_free ((ddb_event_t *)ctx); } } if (term) { return; } messagepump_wait (); } }
void core_spytask() { int cnt = 1; int i=0; raw_need_postprocess = 0; spytask_can_start=0; while((i++<400) && !spytask_can_start) msleep(10); started(); msleep(50); finished(); drv_self_unhide(); conf_restore(); gui_init(); #if CAM_CONSOLE_LOG_ENABLED console_init(); #endif mkdir("A/CHDK"); mkdir("A/CHDK/FONTS"); mkdir("A/CHDK/SYMBOLS"); mkdir("A/CHDK/SCRIPTS"); mkdir("A/CHDK/LANG"); mkdir("A/CHDK/BOOKS"); mkdir("A/CHDK/GRIDS"); #ifdef OPT_CURVES mkdir("A/CHDK/CURVES"); #endif mkdir("A/CHDK/DATA"); mkdir("A/CHDK/LOGS"); #ifdef OPT_EDGEOVERLAY mkdir("A/CHDK/EDGE"); #endif auto_started = 0; if (conf.script_startup==1) script_autostart(); // remote autostart if (conf.script_startup==2) { conf.script_startup=0; conf_save(); script_autostart(); } while (1) { if (raw_data_available) { raw_need_postprocess = raw_savefile(); hook_raw_save_complete(); raw_data_available = 0; continue; } if (state_shooting_progress != SHOOTING_PROGRESS_PROCESSING) { if (((cnt++) & 3) == 0) gui_redraw(); histogram_process(); #ifdef OPT_EDGEOVERLAY if(conf.edge_overlay_thresh && conf.edge_overlay_enable) edge_overlay(); #endif } if ((state_shooting_progress == SHOOTING_PROGRESS_PROCESSING) && (!shooting_in_progress())) { state_shooting_progress = SHOOTING_PROGRESS_DONE; if (raw_need_postprocess) raw_postprocess(); } msleep(20); } }