void w32g_initialize(void) { char buffer[MAXPATH + 1024]; char *p; hInst = GetModuleHandle(0); IniFile = S_IniFile; ConfigFile = S_ConfigFile; PlaylistFile = S_PlaylistFile; PlaylistHistoryFile = S_PlaylistHistoryFile; MidiFileOpenDir = S_MidiFileOpenDir; ConfigFileOpenDir = S_ConfigFileOpenDir; PlaylistFileOpenDir = S_PlaylistFileOpenDir; DocFileExt = S_DocFileExt; OutputName = S_OutputName; IniFile[0] = '\0'; ConfigFile[0] = '\0'; PlaylistFile[0] = '\0'; PlaylistHistoryFile[0] = '\0'; MidiFileOpenDir[0] = '\0'; ConfigFileOpenDir[0] = '\0'; PlaylistFileOpenDir[0] = '\0'; OutputName[0] = '\0'; strcpy(DocFileExt,DEFAULT_DOCFILEEXT); strcpy(SystemFont,"MS 明朝"); strcpy(PlayerFont,"MS 明朝"); strcpy(WrdFont,"MS 明朝"); strcpy(DocFont,"MS 明朝"); strcpy(ListFont,"MS 明朝"); strcpy(TracerFont,"MS 明朝"); if(GetModuleFileName(hInst, buffer, MAXPATH)) { if((p = pathsep_strrchr(buffer)) != NULL) { p++; *p = '\0'; } else { buffer[0] = '.'; buffer[1] = PATH_SEP; buffer[2] = '\0'; } } else { buffer[0] = '.'; buffer[1] = PATH_SEP; buffer[2] = '\0'; } strncpy(IniFile, buffer, MAXPATH); IniFile[MAXPATH] = '\0'; strcat(IniFile,"timpp32g.ini"); timidity_window_inifile = S_timidity_window_inifile; strncpy(timidity_window_inifile, buffer, 200); timidity_window_inifile[200] = '\0'; strcat(timidity_window_inifile,"timidity_window.ini"); st_default = (SETTING_TIMIDITY *)safe_malloc(sizeof(SETTING_TIMIDITY)); sp_default = (SETTING_PLAYER *)safe_malloc(sizeof(SETTING_PLAYER)); st_current = (SETTING_TIMIDITY *)safe_malloc(sizeof(SETTING_TIMIDITY)); sp_current = (SETTING_PLAYER *)safe_malloc(sizeof(SETTING_PLAYER)); st_temp = (SETTING_TIMIDITY *)safe_malloc(sizeof(SETTING_TIMIDITY)); sp_temp = (SETTING_PLAYER *)safe_malloc(sizeof(SETTING_PLAYER)); 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)); w32g_i_init(); }
/******************************************************************************* 函数名称: IniWriteString 功能说明: 将值写入ini文件的指定字段 输入参数: v_pszFileName : 要写入的ini文件名 v_pszSection : 要写入的section的名字 v_pszKey : 要写入的key的名字 v_pszValue : 要写入的value值 输出参数: 无 返 回 值: >=0: 成功 < 0: 错误代码 说 明: 无 *******************************************************************************/ int IniWriteString( const char *v_pszFileName, const char *v_pszSection, const char *v_pszKey, const char *v_pszValue) { char *pszWrBuf = NULL; char *pszBuf = NULL; int iFileSize = 0; int iRet = 0; int iSecStart = UNKNOW_POS; int iSecEnd = 0; int iKeyStart= 0; int iKeyEnd = 0; int iValueStart = 0; int iValueEnd = 0; int iValueSize = (int)strlen(v_pszValue); /* 检查参数 */ if ((NULL == v_pszFileName) || (0 == strlen(v_pszFileName))) { return -INI_ERR_NO_FILE_NAME; } if ((NULL == v_pszSection) || (0 == strlen(v_pszSection))) { return -INI_ERR_NO_SECTION; } if ((NULL == v_pszKey) || (0 == strlen(v_pszKey))) { return -INI_ERR_NO_KEY; } if (NULL == v_pszValue) { return -INI_ERR_NO_VALUE; } /* 分配内存 */ pszBuf = malloc(INI_MAX_FILE_SIZE); if (NULL == pszBuf) { return -INI_ERR_MALLOC; } /* 分配内存 */ pszWrBuf = malloc(INI_MAX_FILE_SIZE); if (NULL == pszWrBuf) { free(pszBuf); return -INI_ERR_MALLOC; } memset(pszWrBuf, 0, INI_MAX_FILE_SIZE); /* 载入文件 */ if (0 == LoadIniFile(v_pszFileName, pszBuf, &iFileSize)) { /* 载入成功 */ ParseFile(pszBuf, v_pszSection, v_pszKey, &iSecStart, &iSecEnd, &iKeyStart, &iKeyEnd, &iValueStart, &iValueEnd); } if (UNKNOW_POS == iSecStart) { /* section位置未初始化 */ if (0 == iFileSize) { /* 无文件 */ sprintf(pszWrBuf + iFileSize, "[%s]\n%s=%s\n", v_pszSection, v_pszKey, v_pszValue); } else { /* 无指定的section */ memcpy(pszWrBuf,pszBuf,iFileSize); sprintf(pszWrBuf + iFileSize, "\n[%s]\n%s=%s\n", v_pszSection, v_pszKey, v_pszValue); } } else if (UNKNOW_POS == iKeyStart) { /* 有指定的section,但是没有指定的key */ memcpy(pszWrBuf, pszBuf, iSecEnd); sprintf(pszWrBuf + iSecEnd, "%s=%s\n", v_pszKey, v_pszValue); memcpy(pszWrBuf + iSecEnd + strlen(v_pszKey) + iValueSize + 2, pszBuf + iSecEnd, iFileSize - iSecEnd); } else { /* 有指定的section,也有指定的key */ memcpy(pszWrBuf, pszBuf, iValueStart); memcpy(pszWrBuf + iValueStart, v_pszValue, iValueSize); memcpy(pszWrBuf + iValueStart + iValueSize, pszBuf + iValueEnd, iFileSize - iValueEnd); } iRet = SaveIniFile(v_pszFileName, pszWrBuf); free(pszWrBuf); free(pszBuf); return iRet; }