📄 w32g_utl.c
字号:
#ifdef AU_GOGO gogo_ConfigDialogInfoLoadINI();#endif#ifdef AU_VORBIS vorbis_ConfigDialogInfoLoadINI();#endif } } SaveSettingPlayer(sp_current); SaveSettingTiMidity(st_current); if(IniVersionCheck()) { LoadIniFile(sp_current, st_current); ApplySettingPlayer(sp_current); ApplySettingTiMidity(st_current); w32g_has_ini_file = 1; } else { sprintf(buffer,"Ini file is not found, or old format is found.\n""Do you want to initialize the ini file?\n\n""Ini file path: %s", IniFile); if(MessageBox(0, buffer, "TiMidity Notice", MB_YESNO) == IDYES) { SaveIniFile(sp_current, st_current); w32g_has_ini_file = 1; } else { w32g_has_ini_file = 0; } } memcpy(sp_default, sp_current, sizeof(SETTING_PLAYER)); memcpy(st_default, st_current, sizeof(SETTING_TIMIDITY)); memcpy(sp_temp, sp_current, sizeof(SETTING_PLAYER)); memcpy(st_temp, st_current, sizeof(SETTING_TIMIDITY)); wrdt=wrdt_list[0];#ifndef IA_W32G_SYN w32g_i_init();#endif}int IniVersionCheck(void){ char version[INI_MAXLEN]; if(IniGetKeyStringN(INI_SEC_PLAYER,"IniVersion",version,sizeof(version)-1) == 0 && strcmp(version, IniVersion) == 0) return 1; // UnChanged return 0;}void BitBltRect(HDC dst, HDC src, RECT *rc){ BitBlt(dst, rc->left, rc->top, rc->right - rc->left, rc->bottom - rc->top, src, rc->left, rc->top, SRCCOPY);}#if 0/* * TmColor */TmColors tm_colors[TMCC_SIZE];static COLORREF WeakHalfColor(COLORREF fc, COLORREF bc){ return fc*1/3 + bc*2/3;}static COLORREF HalfColor(COLORREF fc, COLORREF bc){ return fc*1/6 + bc*5/6;}void TmInitColor(void){ int i; tm_colors[TMCC_BLACK].color = TMCCC_BLACK; tm_colors[TMCC_WHITE].color = TMCCC_WHITE; tm_colors[TMCC_RED].color = TMCCC_RED; tm_colors[TMCC_BACK].color = TMCCC_BACK; tm_colors[TMCC_LOW].color = TMCCC_LOW; tm_colors[TMCC_MIDDLE].color= TMCCC_MIDDLE; tm_colors[TMCC_HIGH].color = TMCCC_HIGH; tm_colors[TMCC_FORE_HALF].color = HalfColor(TMCCC_FORE,TMCCC_BACK); tm_colors[TMCC_FORE_WEAKHALF].color = WeakHalfColor(TMCCC_FORE,TMCCC_BACK); tm_colors[TMCC_LOW_HALF].color = HalfColor(TMCCC_LOW,TMCCC_BACK); tm_colors[TMCC_MIDDLE_HALF].color = HalfColor(TMCCC_MIDDLE,TMCCC_BACK); tm_colors[TMCC_HIGH_HALF].color = HalfColor(TMCCC_HIGH,TMCCC_BACK); for(i = 0; i < TMCC_SIZE; i++) { tm_colors[i].pen = CreatePen(PS_SOLID, 1, tm_colors[i].color); tm_colors[i].brush = CreateSolidBrush(tm_colors[i].color); }}void TmFreeColor(void){ int i; for(i = 0; i < TMCC_SIZE; i++) { if(tm_colors[i].pen != NULL) { DeleteObject(tm_colors[i].pen); DeleteObject(tm_colors[i].brush); tm_colors[i].pen = NULL; } }}void TmFillRect(HDC hdc, RECT *rc, int color){ HPEN hPen = tm_colors[color].pen; HBRUSH hBrush = tm_colors[color].brush; HGDIOBJ hgdiobj_hpen, hgdiobj_hbrush; hgdiobj_hpen = SelectObject(hdc, hPen); hgdiobj_hbrush = SelectObject(hdc, hBrush); Rectangle(hdc, rc->left, rc->top, rc->right, rc->bottom); SelectObject(hdc, hgdiobj_hpen); SelectObject(hdc, hgdiobj_hbrush);}#endif#ifndef S_ISDIR#define S_ISDIR(mode) (((mode)&0xF000) == 0x4000)#endif /* S_ISDIR */int is_directory(char *path){ struct stat st; if(*path == '@') /* special identifire for playlist file */ return 0; if(stat(path, &st) != -1) return S_ISDIR(st.st_mode); return GetFileAttributes(path) == FILE_ATTRIBUTE_DIRECTORY;}/* Return: 0: - not modified * 1: - modified */int directory_form(char *buffer){ int len; len = strlen(buffer); if(len == 0 || buffer[len - 1] == PATH_SEP) return 0; if(IS_PATH_SEP(buffer[len - 1])) len--; buffer[len++] = PATH_SEP; buffer[len] = '\0'; return 1;}/* Return: 0: - not modified * 1: - modified */int nodirectory_form(char *buffer){ char *lastp = buffer + strlen(buffer); char *p = lastp; while(p > buffer && IS_PATH_SEP(*(p - 1))) p--; if(p == lastp) return 0; *p = '\0'; return 1;}void SettingCtlFlag(SETTING_TIMIDITY *st, int c, int onoff){ int n; char *opt; opt = st->opt_ctl + 1; n = strlen(opt); if(onoff) { if(strchr(opt, c) != NULL) return; /* Already set */ opt[n++] = c; opt[n] = '\0'; } else { char *p; if((p = strchr(opt, c)) == NULL) return; /* Already removed */ while(*(p + 1)) { *p = *(p + 1); p++; } *p = '\0'; }}int IsAvailableFilename(char *filename){ char *p = strrchr(filename,'.'); if(p == NULL) return 0; if( strcasecmp(p,".lzh")==0 || strcasecmp(p,".zip")==0 || strcasecmp(p,".gz")==0 || strcasecmp(p,".mid")==0 || strcasecmp(p,".rcp")==0 || strcasecmp(p,".r36")==0 || strcasecmp(p,".g18")==0 || strcasecmp(p,".g36")==0 || strcasecmp(p,".mod")==0 ||// strcasecmp(p,".hqx")==0 || strcasecmp(p,".tar")==0 || strcasecmp(p,".tgz")==0 || strcasecmp(p,".lha")==0 || strcasecmp(p,".mime")==0 || strcasecmp(p,".smf")==0) return 1;// if(url_check_type(filename)!=-1)// return 1; return 0;}/* ScanDirectoryFiles() works like UNIX find. */#define SCANDIR_MAX_DEPTH 32void ScanDirectoryFiles(char *basedir, int (* file_proc)(char *pathname, /* (const) */ void *user_val), void *user_val){ char baselen; URL dir; static int depth = 0; static int stop_flag; /* Stop scanning if true */ static int error_disp; /* Whether error is displayed or not */ static char pathbuf[MAXPATH]; /* pathname buffer */ if(depth == 0) /* Initialize variables at first recursive */ { stop_flag = 0; error_disp = 0; strcpy(pathbuf, basedir); } else if(depth > SCANDIR_MAX_DEPTH) /* Avoid infinite recursive */ { if(!error_disp) { /* Display this message at once */ ctl->cmsg(CMSG_WARNING, VERB_NORMAL, "%s: Directory is too deep", basedir); error_disp = 1; } return; /* Skip scanning this directory */ } directory_form(pathbuf); baselen = strlen(pathbuf); if(baselen > sizeof(pathbuf) - 16) { /* Ignore too long file name */ return; } if((dir = url_dir_open(pathbuf)) == NULL) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: Can't open directory", pathbuf); return; } if(file_proc(pathbuf, user_val)) { stop_flag = 1; /* Terminate */ return; } while(!stop_flag && url_gets(dir, pathbuf + baselen, sizeof(pathbuf) - baselen - 1)) { if(strcmp(pathbuf + baselen, ".") == 0 || strcmp(pathbuf + baselen, "..") == 0) continue; if(file_proc(pathbuf, user_val)) { stop_flag = 1; /* Terminate */ break; } if(is_directory(pathbuf)) { /* into subdirectory */ depth++; ScanDirectoryFiles(pathbuf, file_proc, user_val); depth--; } } url_close(dir);}#define EXPANDDIR_MAX_SIZE 100000 /* Limit of total bytes of the file names */static int expand_dir_proc(char *filename, void *v){ void **user_val = (void **)v; StringTable *st = (StringTable *)user_val[0]; int *total_size = (int *)user_val[1]; char *startdir = (char *)user_val[2]; if(IsAvailableFilename(filename)) { if(*total_size > EXPANDDIR_MAX_SIZE) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: There are too many files.", startdir); return 1; /* Terminate */ } put_string_table(st, filename, strlen(filename)); *total_size += strlen(filename); } return 0;}char **FilesExpandDir(int *p_nfiles, char **files){ StringTable st; int i; init_string_table(&st); for(i = 0; i < *p_nfiles; i++) { void *user_val[3]; int total_size; total_size = 0; user_val[0] = &st; user_val[1] = &total_size; user_val[2] = files[i]; if(is_directory(files[i])) ScanDirectoryFiles(files[i], expand_dir_proc, user_val); else { int len = strlen(files[i]); put_string_table(&st, files[i], len); } } *p_nfiles = st.nstring; return make_string_array(&st);}#ifndef IA_W32G_SYNint w32gLoadDefaultPlaylist(void){ if(AutoloadPlaylist) { w32g_lock_open_file = 1; w32g_send_rc(RC_EXT_LOAD_PLAYLIST, (int32)DefaultPlaylistPath); } return 0;}int w32gSaveDefaultPlaylist(void){ if(AutosavePlaylist) { w32g_lock_open_file = 1; w32g_send_rc(RC_EXT_SAVE_PLAYLIST, (int32)DefaultPlaylistPath); } return 0;}#endif#ifndef WIN32GCCstatic char *get_filename(char *src, char *dest){ char *p = src; char *start = NULL; int quot_flag = 0; if(p == NULL) return NULL; for(;;){ if(*p != ' ' && *p != '\0' && start == NULL) start = p; if(*p == '\'' || *p == '\"'){ if(quot_flag){ if(p - start != 0) strncpy(dest, start, p - start); dest[p-start] = '\0'; p++; return p; } else { quot_flag = !quot_flag; p++; start = p; continue; } } if(*p == '\0' || (*p == ' ' && !quot_flag)){ if(start == NULL) return NULL; if(p - start != 0) strncpy(dest, start, p - start); dest[p-start] = '\0'; if(*p != '\0') p++; return p; } p++; }}void CmdLineToArgv(LPSTR lpCmdLine, int *pArgc, CHAR ***pArgv){ LPSTR p = lpCmdLine , buffer, lpsRes; int i, max = -1, inc = 16; int buffer_size; *pArgv = NULL; buffer_size = strlen(lpCmdLine) + 1024;// buffer = safe_malloc(sizeof(CHAR) * buffer_size + 1); buffer = (LPSTR)malloc(sizeof(CHAR) * buffer_size + 1); strcpy(buffer, lpCmdLine); for(i=0;;i++) { if(i > max){ max += inc;// *pArgv = (CHAR **)safe_realloc(*pArgv, sizeof(CHAR *) * (max + 1)); *pArgv = (CHAR **)realloc(*pArgv, sizeof(CHAR *) * (max + 2)); } if(i==0){ GetModuleFileName(NULL,buffer,buffer_size); lpsRes = p; } else lpsRes = get_filename(p,buffer); if(lpsRes != NULL){// (*pArgv)[i] = (CHAR *)safe_malloc(sizeof(CHAR) * strlen(buffer) + 1); (*pArgv)[i] = (CHAR *)malloc(sizeof(CHAR) * strlen(buffer) + 1); strcpy((*pArgv)[i],buffer); p = lpsRes; } else { *pArgc = i; free(buffer); return; } }}#endif /* !WIN32GCC */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -