亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? wildmidi_lib.c

?? WildMidi Midi Library and Player
?? C
?? 第 1 頁 / 共 5 頁
字號:
			while (patch[i] != NULL) {				if (patch[i]->filename != NULL) {					if (patch[i]->first_sample != NULL) {						while (patch[i]->first_sample != NULL) {							tmp_sample = patch[i]->first_sample->next;							if (patch[i]->first_sample->data != NULL)								free (patch[i]->first_sample->data);							free (patch[i]->first_sample);							patch[i]->first_sample = tmp_sample;						}					}					free (patch[i]->filename);				}				tmp_patch = patch[i]->next;				free(patch[i]);				patch[i] = tmp_patch;			}		}	}	WM_Unlock(&patch_lock);}intWM_LoadConfig (const char *config_file) {	unsigned long int config_size = 0;	unsigned char *config_buffer =  NULL;	char * dir_end =  NULL;	char * config_dir =  NULL;	unsigned long int config_ptr = 0;	unsigned long int line_start_ptr = 0;	char * line_buffer = NULL;	unsigned long int line_ptr = 0;	char * chr_ptr = NULL;	unsigned short int patchid = 0;	char * new_config = NULL;	struct _patch * tmp_patch;	if ((config_buffer = WM_BufferFile(config_file, &config_size)) == NULL) {		return -1;	}	if (config_buffer == NULL) {		WM_FreePatches();		return -1;	}		dir_end = strrchr(config_file,'/');	if (dir_end != NULL) {		config_dir = malloc((dir_end - config_file + 2));		if (config_dir == NULL) {			WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_MEM, "to parse config", errno);			WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_LOAD, config_file, 0);			WM_FreePatches();			free (config_buffer);			return -1;		}		strncpy(config_dir, config_file, (dir_end - config_file + 1));		config_dir[dir_end - config_file + 1] = '\0';	}	config_ptr = 0;	line_start_ptr = 0;	while (config_ptr < config_size) {		// find end of line		if (config_buffer[config_ptr] != '\n') {			// remove unwanted crud			if (config_buffer[config_ptr] == '\t') {				config_buffer[config_ptr] = ' ';			} else if (config_buffer[config_ptr] == '\r') {				config_buffer[config_ptr] = ' ';			}			if ((config_buffer[config_ptr] == ' ') && (config_ptr == line_start_ptr)) {				line_start_ptr++;			}			config_ptr++;			continue;		}		config_buffer[config_ptr] = '\0';		if (config_ptr == line_start_ptr) {			config_ptr++;			line_start_ptr++;			continue;		}		if (config_buffer[line_start_ptr] == '#') {			config_ptr++;			line_start_ptr = config_ptr;			continue;		}					// copy line into a workable buffer		line_buffer = realloc(line_buffer, (config_ptr - line_start_ptr + 1));		if (line_buffer == NULL) {			WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_MEM, "to parse config", errno);			WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_LOAD, config_file, 0);			WM_FreePatches();			if (config_dir != NULL)				free(config_dir);			free (config_buffer);			return -1;		}		strcpy(line_buffer, &config_buffer[line_start_ptr]);		config_ptr++;		line_start_ptr = config_ptr;		// remove unwnted crud from line for easier parsing		if ((chr_ptr = strstr(line_buffer,"  ")) != NULL) {			while ((chr_ptr = strstr(line_buffer,"  ")) != NULL) {				memmove(chr_ptr, &chr_ptr[1], strlen(chr_ptr));			}		}		if ((chr_ptr = strchr(line_buffer, '#')) != NULL) {			*chr_ptr = '\0';		}		if (line_buffer[strlen(line_buffer) -1] == ' ') {			while (line_buffer[strlen(line_buffer) -1] == ' ') {				line_buffer[strlen(line_buffer) -1] = '\0';			}		}		// now parse line		if (strncasecmp(line_buffer, "dir ", 4) == 0) {			if (line_buffer[strlen(line_buffer) - 1] == '/') {				config_dir = realloc(config_dir, strlen(&line_buffer[4]) + 1);				if (config_dir == NULL) {					WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_MEM, "to parse config", errno);					WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_LOAD, config_file, 0);					WM_FreePatches();					free (line_buffer);					free (config_buffer);					return -1;				}				strcpy(config_dir, &line_buffer[4]);			} else {				config_dir = realloc(config_dir, strlen(&line_buffer[4]) + 2);				if (config_dir == NULL) {					WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_MEM, "to parse config", errno);					WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_LOAD, config_file, 0);					WM_FreePatches();					free (line_buffer);					free (config_buffer);					return -1;				}				strcpy(config_dir, &line_buffer[4]);				strcat(config_dir,"/");			}			continue;		} else if (strncasecmp(line_buffer, "source ", 7) == 0) {			if (config_dir != NULL) {				new_config = malloc(strlen(config_dir) + strlen(&line_buffer[7]) + 1);				if (new_config == NULL) {					WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_MEM, "to parse config", errno);					WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_LOAD, config_file, 0);					WM_FreePatches();					free (config_dir);						free (line_buffer);					free (config_buffer);					return -1;				}				strcpy(new_config,config_dir);				strcpy(&new_config[strlen(config_dir)], &line_buffer[7]);			} else {				new_config = malloc(strlen(&line_buffer[7]) + 1);				if (new_config == NULL) {					WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_MEM, "to parse config", errno);					WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_LOAD, config_file, 0);					WM_FreePatches();					free (line_buffer);					free (config_buffer);					return -1;				}				strcpy(new_config, &line_buffer[7]);			}			if (WM_LoadConfig(new_config) == -1) {				free (new_config);				free (line_buffer);				free (config_buffer);				if (config_dir != NULL)					free (config_dir);				return -1;			}			free (new_config);			continue;		} else if (strncasecmp(line_buffer, "bank ", 5) == 0) {			if (!isdigit(line_buffer[5])) {				WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_INVALID, "(syntax error in bank line)", 0);				WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_LOAD, config_file, 0);				WM_FreePatches();				if (config_dir != NULL)					free (config_dir);				free (line_buffer);				free (config_buffer);				return -1;			}			patchid = (atoi(&line_buffer[5]) & 0xFF ) << 8;			continue;		} else if (strncasecmp(line_buffer, "drumset ", 8) == 0) {			if (!isdigit(line_buffer[8])) {				WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_INVALID, "(syntax error in drumset line)", 0);				WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_LOAD, config_file, 0);				WM_FreePatches();				if (config_dir != NULL)					free (config_dir);				free (line_buffer);				free (config_buffer);				return -1;			}			patchid = ((atoi(&line_buffer[8]) & 0xFF ) << 8) | 0x80;			continue;		} else if (isdigit(line_buffer[0])) {			patchid = (patchid & 0xFF80) | (atoi(line_buffer) & 0x7F);			if (patch[(patchid & 0x7F)] == NULL) {				patch[(patchid & 0x7F)] = malloc (sizeof(struct _patch));				if (patch[(patchid & 0x7F)] == NULL) {					WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_MEM, NULL, errno);					WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_LOAD, config_file, 0);					WM_FreePatches();					if (config_dir != NULL)						free (config_dir);						free (line_buffer);					free (config_buffer);					return -1;				}				tmp_patch = patch[(patchid & 0x7F)];				tmp_patch->patchid = patchid;				tmp_patch->filename = NULL;				tmp_patch->amp = 1024;				tmp_patch->note = 0;				tmp_patch->next = NULL;				tmp_patch->first_sample = NULL;				tmp_patch->loaded = 0;				tmp_patch->inuse_count = 0;			} else {				tmp_patch = patch[(patchid & 0x7F)];				if (tmp_patch->patchid == patchid) {					free (tmp_patch->filename);					tmp_patch->filename = NULL;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀av性久久久久蜜臀aⅴ流畅| 久久婷婷国产综合国色天香| 午夜精品aaa| 欧美三级日本三级少妇99| 丝袜亚洲另类欧美| 欧美xxxxx牲另类人与| av亚洲产国偷v产偷v自拍| 国产精品久久久久久久岛一牛影视| 91网上在线视频| 午夜在线电影亚洲一区| 日韩一区二区免费在线观看| 国产精品一区在线观看乱码 | 精品美女被调教视频大全网站| 国内成人免费视频| 专区另类欧美日韩| 3atv在线一区二区三区| 国产在线国偷精品免费看| 亚洲视频网在线直播| 欧美乱妇15p| 国产精品综合二区| 亚洲与欧洲av电影| 久久噜噜亚洲综合| 欧洲生活片亚洲生活在线观看| 青青青爽久久午夜综合久久午夜 | 欧美一区二区三区在线观看| 国产精品一区二区91| 亚洲欧美日韩国产综合| 日韩一级片网站| 北条麻妃一区二区三区| 免费视频最近日韩| 1000部国产精品成人观看| 91麻豆精品国产自产在线观看一区 | 亚洲777理论| 国产区在线观看成人精品| 在线观看免费一区| 国产久卡久卡久卡久卡视频精品| 亚洲一区二区欧美| 国产精品视频你懂的| 欧美一区二区国产| 欧洲一区在线电影| 成人av综合在线| 三级在线观看一区二区| 综合欧美亚洲日本| 国产日韩欧美电影| 日韩三级av在线播放| 欧美三级三级三级| 99久久er热在这里只有精品66| 蜜桃视频第一区免费观看| 亚洲激情五月婷婷| 中文字幕在线观看一区二区| xfplay精品久久| 91色porny| 成人黄色在线网站| 韩国理伦片一区二区三区在线播放 | 国产呦萝稀缺另类资源| 天天影视网天天综合色在线播放| 亚洲视频香蕉人妖| 中文字幕免费观看一区| xfplay精品久久| 欧美一级生活片| 91精品在线观看入口| 欧美日韩久久不卡| 欧美伊人久久久久久久久影院 | 亚洲国产成人av网| 亚洲精品高清在线| 亚洲三级在线免费| 综合av第一页| 综合久久久久综合| 亚洲人成在线观看一区二区| 国产精品久久久久久久久免费丝袜| 国产午夜精品在线观看| 久久久精品日韩欧美| 精品99一区二区| 久久蜜臀精品av| 中文字幕欧美日本乱码一线二线 | 一区二区三区在线不卡| 亚洲欧洲制服丝袜| 亚洲少妇中出一区| 亚洲影视在线播放| 亚洲午夜精品网| 亚洲国产成人va在线观看天堂| 亚洲成av人片| 日本视频在线一区| 精品一区二区三区在线播放| 国产在线国偷精品产拍免费yy| 国产伦精品一区二区三区免费 | 7777精品伊人久久久大香线蕉| 欧美精品九九99久久| 5566中文字幕一区二区电影| 精品日韩一区二区三区免费视频| 日韩免费视频一区| 国产欧美一区二区精品性色超碰| 欧美激情一区二区三区全黄| 亚洲欧洲制服丝袜| 肉色丝袜一区二区| 国产精品一二一区| 91久久精品一区二区三| 欧美日韩国产综合视频在线观看| 欧美一区二区三区成人| 久久久久久免费网| 亚洲精品免费在线播放| 免费看精品久久片| 波多野结衣亚洲一区| 欧美写真视频网站| 久久婷婷久久一区二区三区| 亚洲天堂精品在线观看| 三级久久三级久久| 成人高清免费观看| 欧美精品一级二级三级| 久久免费视频色| 亚洲精品高清在线观看| 久久精品国产**网站演员| 成人免费毛片a| 欧美日韩视频在线第一区 | 99re这里都是精品| 91麻豆精品91久久久久同性| 欧美国产一区在线| 丝袜亚洲另类丝袜在线| 成人av电影在线网| 日韩精品一区二区三区中文不卡 | 欧美一级搡bbbb搡bbbb| 国产精品麻豆欧美日韩ww| 日韩高清中文字幕一区| k8久久久一区二区三区| 日韩欧美在线1卡| 亚洲毛片av在线| 美女任你摸久久 | 久久99精品久久久久久动态图| 成人av网址在线| 欧美电视剧在线看免费| 亚洲伊人色欲综合网| 国产一区在线观看麻豆| 精品视频在线免费观看| 亚洲国产精品精华液2区45| 麻豆精品国产传媒mv男同| 色av成人天堂桃色av| 欧美激情中文不卡| 国模娜娜一区二区三区| 欧美日韩一区二区三区在线| 综合久久久久久| 成人视屏免费看| 久久综合久久综合九色| 免费观看日韩电影| 欧美精品777| 亚洲亚洲精品在线观看| 91色九色蝌蚪| 亚洲欧洲性图库| jvid福利写真一区二区三区| 国产欧美一二三区| 国产乱一区二区| 欧美精品一区二区三区蜜桃| 日韩成人免费电影| 欧美区在线观看| 亚洲午夜精品17c| 欧美午夜在线观看| 亚洲女同一区二区| 色偷偷一区二区三区| 亚洲免费在线看| 99精品视频一区二区| 国产精品乱码久久久久久| 丁香婷婷综合五月| 久久久久高清精品| 国产白丝网站精品污在线入口| 久久午夜电影网| 国产福利精品导航| 欧美国产激情二区三区| 大白屁股一区二区视频| 国产欧美精品国产国产专区| 国产九色sp调教91| 国产精品人成在线观看免费| 不卡的av在线| 亚洲三级在线播放| 精品视频一区二区三区免费| 亚洲第一成人在线| 日韩一级视频免费观看在线| 精品一区二区三区在线播放| 久久久亚洲精品一区二区三区| 国产成人精品亚洲日本在线桃色| 欧美国产日韩a欧美在线观看| 成人99免费视频| 一区二区三区在线视频免费 | 久久国产精品72免费观看| 久久品道一品道久久精品| 成人18精品视频| 夜夜夜精品看看| 欧美美女网站色| 精品亚洲国内自在自线福利| 国产欧美视频一区二区| 91亚洲午夜精品久久久久久| 亚洲国产综合91精品麻豆| 欧美一区二区三区四区在线观看| 久久99九九99精品| 中文字幕五月欧美| 欧美日韩aaaaa| 国产精品一区不卡| 亚洲国产综合91精品麻豆| 精品美女在线播放| 99久久精品免费看国产| 婷婷综合久久一区二区三区| 久久影音资源网|