/*! UTF-8 → Unicode 実装 @param[in] bCESU8Mode CESU-8 を処理する場合 true */ int CUtf8::Utf8ToUni( const char* pSrc, const int nSrcLen, wchar_t* pDst, bool bCESU8Mode ) { const unsigned char *pr, *pr_end; unsigned short *pw; int nclen; ECharSet echarset; if( nSrcLen < 1 ){ return 0; } pr = reinterpret_cast<const unsigned char*>(pSrc); pr_end = reinterpret_cast<const unsigned char*>(pSrc+nSrcLen); pw = reinterpret_cast<unsigned short*>(pDst); for( ; ; ){ // 文字をチェック if( bCESU8Mode != true ){ nclen = CheckUtf8Char( reinterpret_cast<const char*>(pr), pr_end-pr, &echarset, true, 0 ); }else{ nclen = CheckCesu8Char( reinterpret_cast<const char*>(pr), pr_end-pr, &echarset, 0 ); } if( nclen < 1 ){ break; } // 変換 if( echarset != CHARSET_BINARY ){ pw += _Utf8ToUni_char( pr, nclen, pw, bCESU8Mode ); pr += nclen; }else{ if( nclen != 1 ){ // 保護コード nclen = 1; } pw += BinToText( pr, 1, pw ); ++pr; } } return pw - reinterpret_cast<unsigned short*>(pDst); }
/*! EUCJP → Unicode 変換関数 */ int CEuc::EucjpToUni( const char* pSrc, const int nSrcLen, wchar_t* pDst, bool* pbError ) { const unsigned char *pr, *pr_end; unsigned short *pw; int nclen; ECharSet echarset; bool berror_tmp, berror=false; if( nSrcLen < 1 ){ if( pbError ){ *pbError = false; } return 0; } pr = reinterpret_cast<const unsigned char*>(pSrc); pr_end = reinterpret_cast<const unsigned char*>(pSrc + nSrcLen); pw = reinterpret_cast<unsigned short*>(pDst); for( ; (nclen = CheckEucjpChar(reinterpret_cast<const char*>(pr), pr_end-pr, &echarset)) != 0; pr += nclen ){ switch( echarset ){ case CHARSET_ASCII7: // 保護コード if( nclen != 1 ){ nclen = 1; } // 7-bit ASCII の変換 *pw = *pr; ++pw; break; case CHARSET_JIS_HANKATA: case CHARSET_JIS_ZENKAKU: // 保護コード if( echarset == CHARSET_JIS_HANKATA && nclen != 2 ){ nclen = 2; } if( echarset == CHARSET_JIS_ZENKAKU && nclen != 2 ){ nclen = 2; } // 全角文字・半角カタカナ文字の変換 pw += _EucjpToUni_char( pr, pw, echarset, &berror_tmp ); if( berror_tmp == true ){ berror = true; } break; default:// case CHARSET_BINARY: // 保護コード if( nclen != 1 ){ nclen = 1; } // 読み込みエラーになった文字を PUA に対応づける pw += BinToText( pr, nclen, pw ); } } if( pbError ){ *pbError = berror; } return pw - reinterpret_cast<unsigned short*>(pDst); }
static BOOL CheckKeyUseTime(AVP_dword* keynumber, AVP_dword life, SYSTEMTIME& st, AVP_dword* PLPIfTrial) { tm tm_cur; time_t tt_cur; time_t tt_first; time(&tt_cur); if(NULL==gmtime(&tt_cur)) return TRUE; tm_cur=*gmtime(&tt_cur); tt_first = tt_cur; // DWORD disp; // HKEY hKey; // if(ERROR_SUCCESS==RegCreateKeyEx(HKEY_CLASSES_ROOT,"LK.Auto",0,REG_NONE,REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,NULL,&hKey,&disp)) { char res[0x200]; res[BinToText(keynumber,3*sizeof(AVP_dword),res,0x200)]=0; // DWORD type=REG_BINARY; DWORD size=sizeof(time_t); // if(ERROR_SUCCESS!=RegQueryValueEx(hKey,res,NULL,&type,(LPBYTE)&tt_first,&size)) // RegSetValueEx(hKey,res,NULL,type,(LPBYTE)&tt_first,size); if(PLPIfTrial) { res[BinToText(PLPIfTrial,sizeof(AVP_dword),res,0x200)]=0; // type=REG_BINARY; size=sizeof(time_t); // if(ERROR_SUCCESS!=RegQueryValueEx(hKey,res,NULL,&type,(LPBYTE)&tt_first,&size)) // RegSetValueEx(hKey,res,NULL,type,(LPBYTE)&tt_first,size); } // RegCloseKey(hKey); } tt_first+=life*60*60*24; if(gmtime(&tt_first)) { tm tm_first=*gmtime(&tt_first); tm_first.tm_year+=1900; tm_first.tm_mon+=1; if(st.wYear>tm_first.tm_year) { st.wYear=(unsigned short)tm_first.tm_year; st.wMonth=(unsigned char)tm_first.tm_mon; st.wDay=(unsigned char)tm_first.tm_mday; } else if(st.wYear==tm_first.tm_year) { if(st.wMonth>tm_first.tm_mon) { st.wMonth=(unsigned char)tm_first.tm_mon; st.wDay=(unsigned char)tm_first.tm_mday; } else if(st.wMonth==tm_first.tm_mon) { if(st.wDay>tm_first.tm_mday) st.wDay=(unsigned char)tm_first.tm_mday; } } } if(difftime(tt_cur,tt_first)>0) return FALSE; return TRUE; }