int csm_load_prev_shaders(struct allocator* alloc) { char cascadecnt[10]; enum gfx_hwver hwver = gfx_get_hwver(); gfx_shader_beginload(alloc, "shaders/fsq.vs", "shaders/csm-prev.ps", NULL, 1, "shaders/common.inc"); if (hwver == GFX_HWVER_D3D10_0 || hwver == GFX_HWVER_GL3_2 || hwver == GFX_HWVER_GL3_3) { g_csm->prev_shader = gfx_shader_add("csm-prev", 2, 2, GFX_INPUTELEMENT_ID_POSITION, "vsi_pos", 0, GFX_INPUTELEMENT_ID_TEXCOORD0, "vsi_coord", 0, "_CASCADE_CNT_", str_itos(cascadecnt, CSM_CASCADE_CNT), "_D3D10_", "1"); } else { g_csm->prev_shader = gfx_shader_add("csm-prev", 2, 1, GFX_INPUTELEMENT_ID_POSITION, "vsi_pos", 0, GFX_INPUTELEMENT_ID_TEXCOORD0, "vsi_coord", 0, "_CASCADE_CNT_", str_itos(cascadecnt, CSM_CASCADE_CNT)); } gfx_shader_endload(); if (g_csm->prev_shader == 0) return FALSE; return TRUE; }
string get_time_text(int t) { static letter pbuf[64]; letter tmb[32]; memset(pbuf, 0, sizeof(pbuf)); if(t > 3600) { str_itos(t / 3600, tmb, 10); str_cat(pbuf, tmb); str_cat(pbuf, uni(":")); t %= 3600; } if(t > 60) { str_itos(t / 60, tmb, 10); if(tmb[1] == uni('\0')) { tmb[1] = tmb[0]; tmb[0] = uni('0'); tmb[2] = uni('\0'); } str_cat(pbuf, tmb); str_cat(pbuf, uni(":")); t %= 60; }else{ str_cpy(pbuf, uni("00:")); } str_itos(t, tmb, 10); if(tmb[1] == uni('\0')) { tmb[1] = tmb[0]; tmb[0] = uni('0'); tmb[2] = uni('\0'); } str_cat(pbuf, tmb); return pbuf; }
result_t webserver_init(int port) { char port_str[32]; str_itos(port_str, port); struct mg_server* server = mg_create_server(NULL, webserver_request_handler); if (server == NULL) { log_printf(LOG_WARNING, "starting httpd server failed - service will not be available."); return RET_FAIL; } mg_set_option(server, "listening_port", port_str); g_prf.server = server; log_printf(LOG_TEXT, "httpd debug server started on port '%s'", port_str); return RET_OK; }
result_t csm_console_debugcsm(uint argc, const char** argv, void* param) { int enable = TRUE; if (argc == 1) enable = str_tobool(argv[0]); else if (argc > 1) return RET_INVALIDARG; g_csm->debug_csm = enable; for (int i = 0; i < CSM_CASCADE_CNT; i++) { char num[10]; char alias[32]; strcat(strcpy(alias, "CSM"), str_itos(num, i)); if (enable) hud_add_image(alias, g_csm->prev_tex[i], FALSE, CSM_PREV_SIZE, CSM_PREV_SIZE, alias); else hud_remove_image(alias); } return RET_OK; }
int csm_load_shaders(struct allocator* alloc) { int r; char max_instances_str[8]; char cascade_cnt_str[8]; char max_bones_str[8]; /* include all extra stuff in rpath flags (because csm-renderer can render them all) */ uint extra_rpath = GFX_RPATH_DIFFUSEMAP | GFX_RPATH_NORMALMAP | GFX_RPATH_ALPHAMAP | GFX_RPATH_REFLECTIONMAP | GFX_RPATH_EMISSIVEMAP | GFX_RPATH_GLOSSMAP | GFX_RPATH_RAW; str_itos(max_instances_str, GFX_INSTANCES_MAX); str_itos(cascade_cnt_str, CSM_CASCADE_CNT); str_itos(max_bones_str, GFX_SKIN_BONES_MAX); /* for normal csm, do not load pixel-shader */ gfx_shader_beginload(alloc, "shaders/csm.vs", NULL, "shaders/csm.gs", 1, "shaders/skin.inc"); r = csm_add_shader(gfx_shader_add("csm-raw", 2, 2, GFX_INPUTELEMENT_ID_POSITION, "vsi_pos", 0, GFX_INPUTELEMENT_ID_NORMAL, "vsi_norm", 0, "_MAX_INSTANCES_", max_instances_str, "_CASCADE_CNT_", cascade_cnt_str), GFX_RPATH_CSMSHADOW | extra_rpath); if (!r) return FALSE; r = csm_add_shader(gfx_shader_add("csm-skin", 4, 4, GFX_INPUTELEMENT_ID_POSITION, "vsi_pos", 0, GFX_INPUTELEMENT_ID_NORMAL, "vsi_norm", 0, GFX_INPUTELEMENT_ID_BLENDINDEX, "vsi_blendidxs", 1, GFX_INPUTELEMENT_ID_BLENDWEIGHT, "vsi_blendweights", 1, "_MAX_INSTANCES_", max_instances_str, "_CASCADE_CNT_", cascade_cnt_str, "_SKIN_", "1", "_MAX_BONES_", max_bones_str), GFX_RPATH_CSMSHADOW | GFX_RPATH_SKINNED | extra_rpath); if (!r) return FALSE; gfx_shader_endload(); /* for alpha-test shaders, load pixel-shader too */ gfx_shader_beginload(alloc, "shaders/csm.vs", "shaders/csm.ps", "shaders/csm.gs", 1, "shaders/skin.inc"); r = csm_add_shader(gfx_shader_add("csm-alpha", 3, 3, GFX_INPUTELEMENT_ID_POSITION, "vsi_pos", 0, GFX_INPUTELEMENT_ID_NORMAL, "vsi_norm", 0, GFX_INPUTELEMENT_ID_TEXCOORD0, "vsi_coord", 0, "_MAX_INSTANCES_", max_instances_str, "_CASCADE_CNT_", cascade_cnt_str, "_ALPHAMAP_", "1"), GFX_RPATH_CSMSHADOW | GFX_RPATH_ALPHAMAP | extra_rpath); if (!r) return FALSE; r = csm_add_shader(gfx_shader_add("csm-skin-alpha", 5, 5, GFX_INPUTELEMENT_ID_POSITION, "vsi_pos", 0, GFX_INPUTELEMENT_ID_NORMAL, "vsi_norm", 0, GFX_INPUTELEMENT_ID_TEXCOORD0, "vsi_coord", 0, GFX_INPUTELEMENT_ID_BLENDINDEX, "vsi_blendidxs", 1, GFX_INPUTELEMENT_ID_BLENDWEIGHT, "vsi_blendweights", 1, "_MAX_INSTANCES_", max_instances_str, "_CASCADE_CNT_", cascade_cnt_str, "_ALPHAMAP_", "1", "_SKIN_", "1", "_MAX_BONES_", max_bones_str), GFX_RPATH_CSMSHADOW | GFX_RPATH_SKINNED | GFX_RPATH_ALPHAMAP | extra_rpath); if (!r) return FALSE; gfx_shader_endload(); return TRUE; }
int fileassociation_set(const string ext, /* extension (w\o leading period) */ const string acname, /* action name */ const string lacname,/* long action name */ const string icpath, /* icon path */ const string accmd, /* action command */ const string dsc, /* type description */ int icidx) /* icon index */ { letter apext [256]; letter apcls [256]; letter kval [256]; letter icdat [256]; letter tmpbuf[128]; HKEY rkey, extkey, clskey, tmpkey, tmpkey2, tmpkey3; long vsize; const string cls_name = uni("fennec.player.file."); const string bkp_name = uni("fennec.player.backup"); if(!ext)return 0; if(!acname)return 0; if(!str_len(ext))return 0; if(!str_len(acname))return 0; if(icidx == -1)icidx = get_default_file_icon(ext); apext[0] = uni('.'); str_cpy(apext + 1, ext); /* create class name */ str_cpy(apcls, cls_name); str_cat(apcls, ext); /* i.e. "fennec.player.file.ogg" */ /* try opening keys */ if(RegOpenKey(HKEY_CLASSES_ROOT, 0, &rkey) != ERROR_SUCCESS)return 0; RegCreateKey(rkey, apext, &extkey); /* get current value */ memset(kval, 0, sizeof(kval)); vsize = sizeof(kval); RegQueryValue(extkey, 0 /* (default) */, kval, &vsize); if(str_icmp(apcls, kval)) { /* create a backup */ RegSetValueEx(extkey, bkp_name, 0, REG_SZ, (CONST BYTE*)kval, (unsigned long)str_size(kval)); } RegSetValue(extkey, 0, REG_SZ, apcls, (unsigned long)str_size(apcls)); RegCloseKey(extkey); /* create the class */ if(RegCreateKey(rkey, apcls, &clskey) != ERROR_SUCCESS) { RegCloseKey(rkey); return 0; } RegSetValue(clskey, 0, REG_SZ, dsc, (unsigned long)str_size(dsc)); /* <icon creation> */ RegCreateKey(clskey, uni("DefaultIcon"), &tmpkey); memset(tmpbuf, 0, sizeof(tmpbuf)); str_itos(icidx, tmpbuf, 10); str_cpy(icdat, icpath); str_cat(icdat, uni(",")); str_cat(icdat, tmpbuf); RegSetValue(tmpkey, 0, REG_SZ, icdat, (unsigned long)str_size(icdat)); RegCloseKey(tmpkey); /* </icon creation> */ /* <shell> */ RegCreateKey(clskey, uni("shell"), &tmpkey); RegSetValue(tmpkey, 0, REG_SZ, acname, (unsigned long)str_size(acname)); RegCreateKey(tmpkey, acname, &tmpkey2); RegSetValue(tmpkey2, 0, REG_SZ, lacname, (unsigned long)str_size(lacname)); RegCreateKey(tmpkey2, uni("command"), &tmpkey3); memset(kval, 0, sizeof(kval)); str_cpy(kval, uni("\"")); str_cat(kval, accmd); str_cat(kval, uni("\" \"%1\"")); /* "%1" */ RegSetValue(tmpkey3, 0, REG_SZ, kval, (unsigned long)str_size(kval)); RegCloseKey(tmpkey3); RegCloseKey(tmpkey2); RegCloseKey(tmpkey); RegCloseKey(clskey); RegCloseKey(rkey); str_cpy(apcls, uni("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\")); str_cat(apcls, apext); RegOpenKey(HKEY_CURRENT_USER, apcls, &rkey); RegDeleteValue(rkey, uni("Application")); RegDeleteValue(rkey, uni("ProgID")); RegCloseKey(rkey); /* </shell> */ return 1; }
unsigned long kb_action(unsigned short fkey, struct setting_key *kcol, int kcount) { unsigned short kp = keypurpose_null; int i; for(i=0; i<kcount; i++) { if(kcol[i].kcomb == fkey) { kp = kcol[i].kaction; break; }else if(kcol[i].kcomb == 0 && kcol[i].kaction == keypurpose_null){ return 0; } } if(kp == keypurpose_null)return 0; switch(kp) { case keypurpose_play: audio_play(); break; case keypurpose_pause: audio_pause(); break; case keypurpose_stop: audio_stop(); break; case keypurpose_load: GlobalFunction(Function_OpenFileDialog); break; case keypurpose_rewind: GlobalFunction(Function_Rewind); break; case keypurpose_forward: GlobalFunction(Function_Forward); break; case keypurpose_previous: audio_playlist_previous(); break; case keypurpose_next: audio_playlist_next(); break; case keypurpose_eject: if(settings.player.selected_drive) { if(audio_playlist_getsource(audio_playlist_getcurrentindex())[0] == settings.player.selected_drive)audio_stop(); audio_input_drive_eject((char)settings.player.selected_drive); } break; case keypurpose_select: if(settings.player.selected_drive) { int i, c = audio_input_drive_gettracks((char)settings.player.selected_drive); letter buf[128]; letter buf2[32]; if(c > 0) { audio_playlist_clear(); for(i=0; i<c; i++) { buf[0] = (letter)settings.player.selected_drive; str_cpy(buf + 1, uni(":\\Track")); memset(buf2, 0, sizeof(buf2)); str_itos(i + 1, buf2, 10); str_cat(buf, buf2); str_cat(buf, uni(".cda")); audio_playlist_add(buf, 0, 0); } fennec_refresh(fennec_v_refresh_force_high); } } break; case keypurpose_panelsw_main: GlobalFunction(Function_MainPanel); break; case keypurpose_panelsw_color: GlobalFunction(Function_SelectThemePanel); break; case keypurpose_panelsw_visualization: //Display_ShowPanel(PanelID_Visualization); break; case keypurpose_panelsw_equalizer: GlobalFunction(Function_EqualizerPanel); break; case keypurpose_panelsw_mediainfo: break; case keypurpose_panelsw_playlist: break; case keypurpose_panelnext: //Display_ShowPanel_Next(); break; case keypurpose_panelprevious: //Display_ShowPanel_Back(); break; case keypurpose_exit: fennec_power_set(fennec_power_mode_default); break; case keypurpose_sleep: fennec_power_sleep(); break; case keypurpose_minimize: ShowWindow(window_main,SW_MINIMIZE); break; case keypurpose_refresh: fennec_refresh(fennec_v_refresh_force_full); break; case keypurpose_conversion: basewindows_show_conversion(0); break; case keypurpose_ripping: basewindows_show_ripping(1); break; case keypurpose_joining: BaseWindows_ShowJoining(1); break; case keypurpose_visualization: break; case keypurpose_playlist: break; case keypurpose_volumeup: { double vl = 0.0f, vr = 0.0f; audio_getvolume(&vl, &vr); vl += 0.05; vr += 0.05; if(vl > 1.0f)vl = 1.0f; if(vr > 1.0f)vr = 1.0f; audio_setvolume(vl, vr); fennec_refresh(fennec_v_refresh_force_not); } break; case keypurpose_volumedown: { double vl = 0.0f, vr = 0.0f; audio_getvolume(&vl, &vr); vl -= 0.05; vr -= 0.05; if(vl < 0.0f)vl = 0.0f; if(vr < 0.0f)vr = 0.0f; audio_setvolume(vl, vr); fennec_refresh(fennec_v_refresh_force_not); } break; case keypurpose_volumeup_auto: Menu_MainProc(menu_vol_autoinc); break; case keypurpose_volumedown_auto: Menu_MainProc(menu_vol_autodec); break; case keypurpose_volumemin: audio_setvolume(0.0f, 0.0f); fennec_refresh(fennec_v_refresh_force_not); break; case keypurpose_volumemax: audio_setvolume(1.0f, 1.0f); fennec_refresh(fennec_v_refresh_force_not); break; case keypurpose_addfile: GlobalFunction(Function_AddFileDialog); break; case keypurpose_fast_load: break; case keypurpose_fast_addfile: break; case keypurpose_preferences: settings_ui_show(); break; case keypurpose_keyboardviewer: break; case keypurpose_currenttagging: basewindows_show_tagging(0, audio_playlist_getsource(audio_playlist_getcurrentindex())); break; case keypurpose_switch_main: SetFocus(window_main); break; case keypurpose_switch_playlist: if(GetFocus() != window_main) { SetFocus(window_main); }else{ HWND plwnd; skins_function_getdata(get_window_playlist, &plwnd, 0); if(plwnd) { SetFocus(plwnd); break; } } break; case keypurpose_playlist_autoswitching: settings.player.auto_switching ^= 1; break; case keypurpose_playlist_shuffle: if(settings.player.playlist_shuffle) audio_playlist_setshuffle(0, 1); else audio_playlist_setshuffle(1, 1); break; case keypurpose_playlist_information: /* [todo] wrong!! */ basewindows_show_tagging(0, audio_playlist_getsource(audio_playlist_getcurrentindex())); break; case keypurpose_playlist_repeatall: settings.player.playlist_repeat_list ^= 1; break; case keypurpose_playlist_repeatsingle: settings.player.playlist_repeat_single ^= 1; break; case keypurpose_playlist_insert: GlobalFunction(Function_AddFileDialog); fennec_refresh(fennec_v_refresh_force_high); break; case keypurpose_playlist_insertdir: { letter fpath[v_sys_maxpath]; BROWSEINFO bi; LPITEMIDLIST lpi; fpath[0] = 0; bi.hwndOwner = window_main; bi.lpszTitle = uni("Add to playlist."); bi.pszDisplayName = fpath; bi.lpfn = 0; bi.iImage = 0; bi.lParam = 0; bi.pidlRoot = 0; bi.ulFlags = BIF_RETURNONLYFSDIRS; lpi = SHBrowseForFolder(&bi); SHGetPathFromIDList(lpi, fpath); if(str_len(fpath)) { AddDirectory(fpath); } fennec_refresh(fennec_v_refresh_force_high); } break; case keypurpose_playlist_remove: break; } return 1; }