void CShortcut::FormatKeyLabel(VirtualKeyName* pVirtualKeyNames,BYTE bKey,BYTE bModifiers,BOOL bScancode,CStringW& str) { if (bKey==0) { str.LoadString(IDS_SHORTCUTNONE); return; } // Formatting modifiers if (bModifiers&MOD_WIN) str.LoadString(IDS_SHORTCUTMODEXT); else str.Empty(); if (bModifiers&MOD_CONTROL) str.AddString(IDS_SHORTCUTMODCTRL); if (bModifiers&MOD_ALT) str.AddString(IDS_SHORTCUTMODALT); if (bModifiers&MOD_SHIFT) str.AddString(IDS_SHORTCUTMODSHIFT); if (bScancode) { CStringW str2; str2.Format(IDS_SHORTCUTSCANCODE,(int)bKey); str << str2; return; } int i; for (i=0;pVirtualKeyNames[i].bKey!=0 && pVirtualKeyNames[i].bKey!=bKey;i++); if (pVirtualKeyNames[i].iFriendlyNameId!=0) { str.AddString(pVirtualKeyNames[i].iFriendlyNameId); return; } BYTE pKeyState[256]; ZeroMemory(pKeyState,256); WORD wChar; int nRet=ToAscii(bKey,0,pKeyState,&wChar,0); if (nRet==1) { MakeUpper((LPSTR)&wChar,1); str << char(wChar); } else if (nRet==2) { MakeUpper((LPSTR)&wChar,2); str << (LPSTR(&wChar))[0] << (LPSTR(&wChar))[0]; } else if (pVirtualKeyNames[i].pName!=NULL) str << pVirtualKeyNames[i].pName; else str << (int) bKey; }
BOOL CALLBACK UpdateProc(DWORD_PTR dwParam,CallingReason crReason,UpdateError ueCode,CDatabaseUpdater* pUpdater) { switch (crReason) { case StartedDatabase: if (!nQuiet) { CStringW msg; msg.Format(IDS_UPDATEDB32UPDATINGDATABASE,pUpdater->GetCurrentDatabaseName(),pUpdater->GetCurrentDatabaseFile()); if (pUpdater->IsIncrementUpdate()) msg.AddString(IDS_UPDATEDB32INCREMENTALUPDATE); _putws(msg); } break; case RootChanged: if (!nQuiet) { if (pUpdater->GetCurrentRoot()!=NULL) wprintf(ID2W(IDS_UPDATEDB32SCANNING),(LPCWSTR)pUpdater->GetCurrentRoot()->m_Path); else wprintf(L"%s %s\n",(LPCWSTR)ID2W(IDS_UPDATEDB32WRITINGDB),pUpdater->GetCurrentDatabaseName()); } break; case ErrorOccured: if (!nQuiet) { switch (ueCode) { case ueAlloc: fwprintf(stderr,ID2W(IDS_UPDATEDB32ALLOCATEMEM)); break; case ueOpen: case ueCreate: fwprintf(stderr,ID2W(IDS_UPDATEDB32CANNOTCREATEFILE),(LPCSTR)pUpdater->GetCurrentDatabaseFile()); break; case ueWrite: fwprintf(stderr,ID2W(IDS_UPDATEDB32CANNOTWRITE),(LPCSTR)pUpdater->GetCurrentDatabaseFile()); break; case ueUnknown: fwprintf(stderr,ID2W(IDS_UPDATEDB32ALLOCATEMEM)); break; case ueFolderUnavailable: fwprintf(stderr,ID2W(IDS_UPDATEDB32ROOTUNAVAILABLE), pUpdater->GetCurrentRootPath()!=NULL?pUpdater->GetCurrentRootPath():L"(NULL)"); break; case ueWrongCharset: { int ch; do { fwprintf(stderr,ID2W(IDS_UPDATEDB32WRONGCHARSETINDB),pUpdater->GetCurrentDatabaseFile()); ch=getc(stdin); } while (ch!='Y' && ch!='y' && ch!='N' && ch!='n'); if (ch!='Y' && ch!='y') return FALSE; return TRUE; } case ueCannotIncrement: { int ch; do { fwprintf(stderr,ID2W(IDS_UPDATEDB32CANNOTUPDATEINCREMENTALLY),pUpdater->GetCurrentDatabaseFile()); ch=getc(stdin); } while (ch!='Y' && ch!='y' && ch!='N' && ch!='n'); if (ch!='Y' && ch!='y') return FALSE; return TRUE; } break; } } if (ueCode==ueSuccess) return 0; break; case ClassShouldDelete: { DWORD dwRunning=0; if (ppUpdaters==NULL) return TRUE; // One thread mode for (int i=0;ppUpdaters[i]!=NULL;i++) { if (ppUpdaters[i]==pUpdater) ppUpdaters[i]=UPDATER_EXITED(ueCode); else if (!IS_UPDATER_EXITED(ppUpdaters[i])) dwRunning++; } delete pUpdater; if (dwRunning==0) { delete[] ppUpdaters; ppUpdaters=NULL; } break; } } return TRUE; }