⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 w32g_utl.c

📁 MIDI解码程序(用VC编写)
💻 C
📖 第 1 页 / 共 3 页
字号:
#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 + -