MIR_CORE_DLL(void) ReloadLangpack(TCHAR *pszStr) { if (pszStr == NULL) pszStr = NEWTSTR_ALLOCA(langPack.tszFileName); UnloadLangPackModule(); LoadLangPack(pszStr); Langpack_SortDuplicates(); NotifyEventHooks(hevChanged, 0, 0); }
MIR_CORE_DLL(void) UnloadCoreModule(void) { DestroyWindow(hAPCWindow); CloseHandle(hStackMutex); CloseHandle(hThreadQueueEmpty); TlsFree(mir_tls); UninitProtocols(); DestroyModularEngine(); UninitLogs(); UnloadLangPackModule(); }
MIR_CORE_DLL(int) LoadLangPack(const TCHAR *ptszLangPack) { if (ptszLangPack == NULL || !mir_tstrcmpi(ptszLangPack, _T(""))) return 1; // ensure that a lang's name is a full file name TCHAR tszFullPath[MAX_PATH]; if (!PathIsAbsoluteT(ptszLangPack)) mir_sntprintf(tszFullPath, _T("%s\\%s"), g_tszRoot, ptszLangPack); else _tcsncpy_s(tszFullPath, ptszLangPack, _TRUNCATE); // this lang is already loaded? nothing to do then if (!mir_tstrcmp(tszFullPath, langPack.tszFullPath)) return 0; // ok... loading a new langpack. remove the old one if needed if (g_entryCount) UnloadLangPackModule(); // exists & not a directory? DWORD dwAttrib = GetFileAttributes(tszFullPath); if (dwAttrib == INVALID_FILE_ATTRIBUTES || (dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) return 3; // copy the full file name and extract a file name from it _tcsncpy_s(langPack.tszFullPath, tszFullPath, _TRUNCATE); TCHAR *p = _tcsrchr(langPack.tszFullPath, '\\'); _tcsncpy_s(langPack.tszFileName, (p == NULL) ? tszFullPath : p + 1, _TRUNCATE); CharLower(langPack.tszFileName); FILE *fp = _tfopen(tszFullPath, _T("rt")); if (fp == NULL) return 1; char line[LANGPACK_BUF_SIZE] = ""; int startOfLine = 0; if (LoadLangDescr(langPack, fp, line, startOfLine)) { fclose(fp); return 1; } // body fseek(fp, startOfLine, SEEK_SET); LoadLangPackFile(fp, line); fclose(fp); pCurrentMuuid = NULL; qsort(g_pEntries, g_entryCount, sizeof(LangPackEntry), (int(*)(const void*, const void*))SortLangPackHashesProc); return 0; }
INT_PTR CALLBACK WizardDlgProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM lParam) { static HWND hdlgPage; switch(message) { case WM_INITDIALOG: SendMessage(hdlg,WM_SETICON,ICON_SMALL,(LPARAM)LoadIcon(hInst,MAKEINTRESOURCE(IDI_DBTOOL))); hdlgPage=NULL; SendMessage(hdlg,WZM_GOTOPAGE,IDD_WELCOME,(LPARAM)WelcomeDlgProc); TranslateDialog(hdlg); return TRUE; case WZM_GOTOPAGE: if(hdlgPage!=NULL) DestroyWindow(hdlgPage); EnableWindow(GetDlgItem(hdlg,IDC_BACK),TRUE); EnableWindow(GetDlgItem(hdlg,IDOK),TRUE); EnableWindow(GetDlgItem(hdlg,IDCANCEL),TRUE); SetDlgItemText(hdlg,IDCANCEL,TranslateT("Cancel")); hdlgPage=CreateDialog(hInst,MAKEINTRESOURCE(wParam),hdlg,(DLGPROC)lParam); TranslateDialog(hdlgPage); SetWindowPos(hdlgPage,0,0,0,0,0,SWP_NOZORDER|SWP_NOSIZE); ShowWindow(hdlgPage,SW_SHOW); break; case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_BACK: case IDOK: SendMessage(hdlgPage,WZN_PAGECHANGING,wParam,0); SendMessage(hdlgPage,message,wParam,lParam); break; case IDCANCEL: if(SendMessage(hdlgPage,WZN_CANCELCLICKED,0,0)) break; EndDialog(hdlg,0); break; } break; case WM_DESTROY: if (opts.hFile) CloseHandle(opts.hFile); if (opts.hOutFile) CloseHandle(opts.hOutFile); DestroyWindow(hdlgPage); UnloadLangPackModule(); if(hBoldFont!=NULL) DeleteObject(hBoldFont); if(hEmfHeaderLogo!=NULL) DeleteEnhMetaFile(hEmfHeaderLogo); break; } return FALSE; }