ext/rqr/QR_Encode.cpp in z-rqr-0.2.3 vs ext/rqr/QR_Encode.cpp in z-rqr-0.2.4

- old
+ new

@@ -1,6 +1,6 @@ -//// QR_Encode.cpp : CQR_Encode クラス インプリメンテーション ファイル +//// QR_Encode.cpp : CQR_Encode NX Cve[V t@C //// Date 2006/05/17 Ver. 1.12 [Class Ver.1.21] Psytec Inc. // //#include "stdafx.h" #include "QR_Encode.h" @@ -9,12 +9,12 @@ //#undef THIS_FILE //static char THIS_FILE[] = __FILE__; //#endif ///////////////////////////////////////////////////////////////////////////// -// QRコードバージョン(型番)情報 -static QR_VERSIONINFO QR_VersonInfo[] = {{0}, // (ダミー:Ver.0) +// QRR[ho[W(^) +static QR_VERSIONINFO QR_VersonInfo[] = {{0}, // (_~[:Ver.0) { 1, // Ver.1 26, 19, 16, 13, 9, 0, 0, 0, 0, 0, 0, 0, 1, 26, 19, 1, 26, 16, @@ -455,11 +455,11 @@ 61, 46, 16} }; ///////////////////////////////////////////////////////////////////////////// -// GF(2^8)α指数→整数変換テーブル +// GF(2^8)wϊe[u static BYTE byExpToInt[] = { 1, 2, 4, 8, 16, 32, 64, 128, 29, 58, 116, 232, 205, 135, 19, 38, 76, 152, 45, 90, 180, 117, 234, 201, 143, 3, 6, 12, 24, 48, 96, 192, 157, 39, 78, 156, 37, 74, 148, 53, 106, 212, 181, 119, 238, 193, 159, 35, 70, 140, 5, 10, 20, 40, 80, 160, 93, 186, 105, 210, 185, 111, 222, 161, 95, 190, 97, 194, 153, 47, 94, 188, 101, 202, 137, 15, 30, 60, 120, 240, @@ -475,11 +475,11 @@ 18, 36, 72, 144, 61, 122, 244, 245, 247, 243, 251, 235, 203, 139, 11, 22, 44, 88, 176, 125, 250, 233, 207, 131, 27, 54, 108, 216, 173, 71, 142, 1}; ///////////////////////////////////////////////////////////////////////////// -// GF(2^8)α整数→指数変換テーブル +// GF(2^8)wϊe[u static BYTE byIntToExp[] = { 0, 0, 1, 25, 2, 50, 26, 198, 3, 223, 51, 238, 27, 104, 199, 75, 4, 100, 224, 14, 52, 141, 239, 129, 28, 193, 105, 248, 200, 8, 76, 113, 5, 138, 101, 47, 225, 36, 15, 33, 53, 147, 142, 218, 240, 18, 130, 69, 29, 181, 194, 125, 106, 39, 249, 185, 201, 154, 9, 120, 77, 228, 114, 166, 6, 191, 139, 98, 102, 221, 48, 253, 226, 152, 37, 179, 16, 145, 34, 136, @@ -495,11 +495,11 @@ 203, 89, 95, 176, 156, 169, 160, 81, 11, 245, 22, 235, 122, 117, 44, 215, 79, 174, 213, 233, 230, 231, 173, 232, 116, 214, 244, 234, 168, 80, 88, 175}; ///////////////////////////////////////////////////////////////////////////// -// 誤り訂正生成多項式α係数 +// W static BYTE byRSExp7[] = {87, 229, 146, 149, 238, 102, 21}; static BYTE byRSExp10[] = {251, 67, 46, 61, 118, 70, 64, 94, 32, 45}; static BYTE byRSExp13[] = { 74, 152, 176, 100, 86, 100, 106, 104, 130, 218, 206, 140, 78}; static BYTE byRSExp15[] = { 8, 183, 61, 91, 202, 37, 51, 58, 58, 237, 140, 124, 5, 99, 105}; static BYTE byRSExp16[] = {120, 104, 107, 109, 102, 161, 76, 3, 91, 191, 147, 169, 182, 194, 225, 120}; @@ -579,19 +579,19 @@ byRSExp30, NULL, byRSExp32, NULL, byRSExp34, NULL, byRSExp36, NULL, byRSExp38, NULL, byRSExp40, NULL, byRSExp42, NULL, byRSExp44, NULL, byRSExp46, NULL, byRSExp48, NULL, byRSExp50, NULL, byRSExp52, NULL, byRSExp54, NULL, byRSExp56, NULL, byRSExp58, NULL, byRSExp60, NULL, byRSExp62, NULL, byRSExp64, NULL, byRSExp66, NULL, byRSExp68}; -// 文字数インジケータビット長(バージョングループ別, {S, M, L}) +// CWP[^rbg(o[WO[v, {S, M, L}) static int nIndicatorLenNumeral[] = {10, 12, 14}; static int nIndicatorLenAlphabet[] = { 9, 11, 13}; static int nIndicatorLen8Bit[] = { 8, 16, 16}; static int nIndicatorLenKanji[] = { 8, 10, 12}; ///////////////////////////////////////////////////////////////////////////// -// QR_Encode クラスの構築/消滅 +// QR_Encode NX̍\z/ CQR_Encode::CQR_Encode() { } @@ -600,36 +600,36 @@ } ///////////////////////////////////////////////////////////////////////////// // CQR_Encode::EncodeData -// 用 途:データエンコード -// 引 数:誤り訂正レベル、型番(0=自動)、型番自動拡張フラグ、マスキング番号(-1=自動)、エンコードデータ、エンコードデータ長 -// 戻り値:エンコード成功時=TRUE、データなし、または容量オーバー時=FALSE +// p rFf[^GR[h +// FxA^(0=)A^ԎgtOA}XLOԍ(-1=)AGR[hf[^AGR[hf[^ +// ߂lFGR[h=TRUEAf[^ȂA܂͗eʃI[o[=FALSE BOOL CQR_Encode::EncodeData(int nLevel, int nVersion, BOOL bAutoExtent, int nMaskingNo, LPCSTR lpsSource, int ncSource) { int i, j; m_nLevel = nLevel; m_nMaskingNo = nMaskingNo; - // データ長が指定されていない場合は lstrlen によって取得 + // f[^w肳ĂȂꍇ lstrlen ɂĎ擾 int ncLength = ncSource > 0 ? ncSource : lstrlen(lpsSource); if (ncLength == 0) - return FALSE; // データなし + return FALSE; // f[^Ȃ - // バージョン(型番)チェック + // o[W(^)`FbN int nEncodeVersion = GetEncodeVersion(nVersion, lpsSource, ncLength); if (nEncodeVersion == 0) - return FALSE; // 容量オーバー + return FALSE; // eʃI[o[ if (nVersion == 0) { - // 型番自動 + // ^Ԏ m_nVersion = nEncodeVersion; } else { if (nEncodeVersion <= nVersion) @@ -637,52 +637,52 @@ m_nVersion = nVersion; } else { if (bAutoExtent) - m_nVersion = nEncodeVersion; // バージョン(型番)自動拡張 + m_nVersion = nEncodeVersion; // o[W(^)g else - return FALSE; // 容量オーバー + return FALSE; // eʃI[o[ } } - // ターミネータコード"0000"付加 + // ^[~l[^R[h"0000"t int ncDataCodeWord = QR_VersonInfo[m_nVersion].ncDataCodeWord[nLevel]; int ncTerminater = min(4, (ncDataCodeWord * 8) - m_ncDataCodeWordBit); if (ncTerminater > 0) m_ncDataCodeWordBit = SetBitStream(m_ncDataCodeWordBit, 0, ncTerminater); - // パディングコード"11101100, 00010001"付加 + // pfBOR[h"11101100, 00010001"t BYTE byPaddingCode = 0xec; for (i = (m_ncDataCodeWordBit + 7) / 8; i < ncDataCodeWord; ++i) { m_byDataCodeWord[i] = byPaddingCode; byPaddingCode = (BYTE)(byPaddingCode == 0xec ? 0x11 : 0xec); } - // 総コードワード算出エリアクリア + // R[h[hZoGANA m_ncAllCodeWord = QR_VersonInfo[m_nVersion].ncAllCodeWord; ZeroMemory(m_byAllCodeWord, m_ncAllCodeWord); - int nDataCwIndex = 0; // データコードワード処理位置 + int nDataCwIndex = 0; // f[^R[h[hʒu - // データブロック分割数 + // f[^ubN int ncBlock1 = QR_VersonInfo[m_nVersion].RS_BlockInfo1[nLevel].ncRSBlock; int ncBlock2 = QR_VersonInfo[m_nVersion].RS_BlockInfo2[nLevel].ncRSBlock; int ncBlockSum = ncBlock1 + ncBlock2; - int nBlockNo = 0; // 処理中ブロック番号 + int nBlockNo = 0; // ubNԍ - // ブロック別データコードワード数 + // ubNʃf[^R[h[h int ncDataCw1 = QR_VersonInfo[m_nVersion].RS_BlockInfo1[nLevel].ncDataCodeWord; int ncDataCw2 = QR_VersonInfo[m_nVersion].RS_BlockInfo2[nLevel].ncDataCodeWord; - // データコードワードインターリーブ配置 + // f[^R[h[hC^[[uzu for (i = 0; i < ncBlock1; ++i) { for (j = 0; j < ncDataCw1; ++j) { m_byAllCodeWord[(ncBlockSum * j) + nBlockNo] = m_byDataCodeWord[nDataCwIndex++]; @@ -699,24 +699,24 @@ { m_byAllCodeWord[(ncBlockSum * j) + nBlockNo] = m_byDataCodeWord[nDataCwIndex++]; } else { - // 2種目ブロック端数分配置 + // QڃubN[zu m_byAllCodeWord[(ncBlockSum * ncDataCw1) + i] = m_byDataCodeWord[nDataCwIndex++]; } } ++nBlockNo; } - // ブロック別RSコードワード数(※現状では同数) + // ubNʂqrR[h[h(ł͓) int ncRSCw1 = QR_VersonInfo[m_nVersion].RS_BlockInfo1[nLevel].ncAllCodeWord - ncDataCw1; int ncRSCw2 = QR_VersonInfo[m_nVersion].RS_BlockInfo2[nLevel].ncAllCodeWord - ncDataCw2; ///////////////////////////////////////////////////////////////////////// - // RSコードワード算出 + // qrR[h[hZo nDataCwIndex = 0; nBlockNo = 0; for (i = 0; i < ncBlock1; ++i) @@ -725,11 +725,11 @@ memmove(m_byRSWork, m_byDataCodeWord + nDataCwIndex, ncDataCw1); GetRSCodeWord(m_byRSWork, ncDataCw1, ncRSCw1); - // RSコードワード配置 + // qrR[h[hzu for (j = 0; j < ncRSCw1; ++j) { m_byAllCodeWord[ncDataCodeWord + (ncBlockSum * j) + nBlockNo] = m_byRSWork[j]; } @@ -743,11 +743,11 @@ memmove(m_byRSWork, m_byDataCodeWord + nDataCwIndex, ncDataCw2); GetRSCodeWord(m_byRSWork, ncDataCw2, ncRSCw2); - // RSコードワード配置 + // qrR[h[hzu for (j = 0; j < ncRSCw2; ++j) { m_byAllCodeWord[ncDataCodeWord + (ncBlockSum * j) + nBlockNo] = m_byRSWork[j]; } @@ -755,22 +755,22 @@ ++nBlockNo; } m_nSymbleSize = m_nVersion * 4 + 17; - // モジュール配置 + // W[zu FormatModule(); return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CQR_Encode::GetEncodeVersion -// 用 途:エンコード時バージョン(型番)取得 -// 引 数:調査開始バージョン、エンコードデータ、エンコードデータ長 -// 戻り値:バージョン番号(容量オーバー時=0) +// p rFGR[ho[W(^)擾 +// FJno[WAGR[hf[^AGR[hf[^ +// ߂lFo[WԍieʃI[o[=0j int CQR_Encode::GetEncodeVersion(int nVersion, LPCSTR lpsSource, int ncLength) { int nVerGroup = nVersion >= 27 ? QR_VRESION_L : (nVersion >= 10 ? QR_VRESION_M : QR_VRESION_S); int i, j; @@ -810,21 +810,21 @@ } ///////////////////////////////////////////////////////////////////////////// // CQR_Encode::EncodeSourceData -// 用 途:入力データエンコード -// 引 数:入力データ、入力データ長、バージョン(型番)グループ -// 戻り値:エンコード成功時=TRUE +// p rF̓f[^GR[h +// F̓f[^A̓f[^Ao[W(^)O[v +// ߂lFGR[h=TRUE BOOL CQR_Encode::EncodeSourceData(LPCSTR lpsSource, int ncLength, int nVerGroup) { ZeroMemory(m_nBlockLength, sizeof(m_nBlockLength)); int i, j; - // どのモードが何文字(バイト)継続しているかを調査 + // ǂ̃[h(oCg)pĂ邩𒲍 for (m_ncDataBlock = i = 0; i < ncLength; ++i) { BYTE byMode; if (i < ncLength - 1 && IsKanjiData(lpsSource[i], lpsSource[i + 1])) @@ -844,85 +844,85 @@ ++m_nBlockLength[m_ncDataBlock]; if (byMode == QR_MODE_KANJI) { - // 漢字は文字数ではなく 数で記録 + // ͕ł͂Ȃ ŋL^ ++m_nBlockLength[m_ncDataBlock]; ++i; } } ++m_ncDataBlock; ///////////////////////////////////////////////////////////////////////// - // 隣接する英数字モードブロックと数字モードブロックの並びをを条件により結合 + // אڂp[hubNƐ[hubN̕тɂ茋 - int ncSrcBits, ncDstBits; // 元のビット長と単一の英数字モードブロック化した場合のビット長 + int ncSrcBits, ncDstBits; // ̃rbgƒP̉p[hubNꍇ̃rbg int nBlock = 0; while (nBlock < m_ncDataBlock - 1) { - int ncJoinFront, ncJoinBehind; // 前後8ビットバイトモードブロックと結合した場合のビット長 - int nJoinPosition = 0; // 8ビットバイトモードブロックとの結合:-1=前と結合、0=結合しない、1=後ろと結合 + int ncJoinFront, ncJoinBehind; // OWrbgoCg[hubNƌꍇ̃rbg + int nJoinPosition = 0; // WrbgoCg[hubNƂ̌F-1=OƌA0=ȂA1=ƌ - // 「数字−英数字」または「英数字−数字」の並び + // u|pv܂́up|v̕ if ((m_byBlockMode[nBlock] == QR_MODE_NUMERAL && m_byBlockMode[nBlock + 1] == QR_MODE_ALPHABET) || (m_byBlockMode[nBlock] == QR_MODE_ALPHABET && m_byBlockMode[nBlock + 1] == QR_MODE_NUMERAL)) { - // 元のビット長と単一の英数字モードブロック化した場合のビット長を比較 + // ̃rbgƒP̉p[hubNꍇ̃rbgr ncSrcBits = GetBitLength(m_byBlockMode[nBlock], m_nBlockLength[nBlock], nVerGroup) + GetBitLength(m_byBlockMode[nBlock + 1], m_nBlockLength[nBlock + 1], nVerGroup); ncDstBits = GetBitLength(QR_MODE_ALPHABET, m_nBlockLength[nBlock] + m_nBlockLength[nBlock + 1], nVerGroup); if (ncSrcBits > ncDstBits) { - // 前後に8ビットバイトモードブロックがある場合、それらとの結合が有利かどうかをチェック + // OɂWrbgoCg[hubNꍇAƂ̌Lǂ`FbN if (nBlock >= 1 && m_byBlockMode[nBlock - 1] == QR_MODE_8BIT) { - // 前に8ビットバイトモードブロックあり + // OɂWrbgoCg[hubN ncJoinFront = GetBitLength(QR_MODE_8BIT, m_nBlockLength[nBlock - 1] + m_nBlockLength[nBlock], nVerGroup) + GetBitLength(m_byBlockMode[nBlock + 1], m_nBlockLength[nBlock + 1], nVerGroup); if (ncJoinFront > ncDstBits + GetBitLength(QR_MODE_8BIT, m_nBlockLength[nBlock - 1], nVerGroup)) - ncJoinFront = 0; // 8ビットバイトモードブロックとは結合しない + ncJoinFront = 0; // WrbgoCg[hubNƂ͌Ȃ } else ncJoinFront = 0; if (nBlock < m_ncDataBlock - 2 && m_byBlockMode[nBlock + 2] == QR_MODE_8BIT) { - // 後ろに8ビットバイトモードブロックあり + // ɂWrbgoCg[hubN ncJoinBehind = GetBitLength(m_byBlockMode[nBlock], m_nBlockLength[nBlock], nVerGroup) + GetBitLength(QR_MODE_8BIT, m_nBlockLength[nBlock + 1] + m_nBlockLength[nBlock + 2], nVerGroup); if (ncJoinBehind > ncDstBits + GetBitLength(QR_MODE_8BIT, m_nBlockLength[nBlock + 2], nVerGroup)) - ncJoinBehind = 0; // 8ビットバイトモードブロックとは結合しない + ncJoinBehind = 0; // WrbgoCg[hubNƂ͌Ȃ } else ncJoinBehind = 0; if (ncJoinFront != 0 && ncJoinBehind != 0) { - // 前後両方に8ビットバイトモードブロックがある場合はデータ長が短くなる方を優先 + // O㗼ɂWrbgoCg[hubNꍇ̓f[^ZȂD nJoinPosition = (ncJoinFront < ncJoinBehind) ? -1 : 1; } else { nJoinPosition = (ncJoinFront != 0) ? -1 : ((ncJoinBehind != 0) ? 1 : 0); } if (nJoinPosition != 0) { - // 8ビットバイトモードブロックとの結合 + // WrbgoCg[hubNƂ̌ if (nJoinPosition == -1) { m_nBlockLength[nBlock - 1] += m_nBlockLength[nBlock]; - // 後続をシフト + // 㑱Vtg for (i = nBlock; i < m_ncDataBlock - 1; ++i) { m_byBlockMode[i] = m_byBlockMode[i + 1]; m_nBlockLength[i] = m_nBlockLength[i + 1]; } @@ -930,11 +930,11 @@ else { m_byBlockMode[nBlock + 1] = QR_MODE_8BIT; m_nBlockLength[nBlock + 1] += m_nBlockLength[nBlock + 2]; - // 後続をシフト + // 㑱Vtg for (i = nBlock + 2; i < m_ncDataBlock - 1; ++i) { m_byBlockMode[i] = m_byBlockMode[i + 1]; m_nBlockLength[i] = m_nBlockLength[i + 1]; } @@ -942,18 +942,18 @@ --m_ncDataBlock; } else { - // 英数字と数字の並びを単一の英数字モードブロックに統合 + // pƐ̕тP̉p[hubNɓ if (nBlock < m_ncDataBlock - 2 && m_byBlockMode[nBlock + 2] == QR_MODE_ALPHABET) { - // 結合しようとするブロックの後ろに続く英数字モードブロックを結合 + // 悤ƂubŇɑp[hubN m_nBlockLength[nBlock + 1] += m_nBlockLength[nBlock + 2]; - // 後続をシフト + // 㑱Vtg for (i = nBlock + 2; i < m_ncDataBlock - 1; ++i) { m_byBlockMode[i] = m_byBlockMode[i + 1]; m_nBlockLength[i] = m_nBlockLength[i + 1]; } @@ -962,70 +962,70 @@ } m_byBlockMode[nBlock] = QR_MODE_ALPHABET; m_nBlockLength[nBlock] += m_nBlockLength[nBlock + 1]; - // 後続をシフト + // 㑱Vtg for (i = nBlock + 1; i < m_ncDataBlock - 1; ++i) { m_byBlockMode[i] = m_byBlockMode[i + 1]; m_nBlockLength[i] = m_nBlockLength[i + 1]; } --m_ncDataBlock; if (nBlock >= 1 && m_byBlockMode[nBlock - 1] == QR_MODE_ALPHABET) { - // 結合したブロックの前の英数字モードブロックを結合 + // ubN̑Ỏp[hubN m_nBlockLength[nBlock - 1] += m_nBlockLength[nBlock]; - // 後続をシフト + // 㑱Vtg for (i = nBlock; i < m_ncDataBlock - 1; ++i) { m_byBlockMode[i] = m_byBlockMode[i + 1]; m_nBlockLength[i] = m_nBlockLength[i + 1]; } --m_ncDataBlock; } } - continue; // 現在位置のブロックを再調査 + continue; // ݈ʒũubNĒ } } - ++nBlock; // 次ブロックを調査 + ++nBlock; // ubN𒲍 } ///////////////////////////////////////////////////////////////////////// - // 連続する短いモードブロックを8ビットバイトモードブロック化 + // AZ[hubNWrbgoCg[hubN nBlock = 0; while (nBlock < m_ncDataBlock - 1) { ncSrcBits = GetBitLength(m_byBlockMode[nBlock], m_nBlockLength[nBlock], nVerGroup) + GetBitLength(m_byBlockMode[nBlock + 1], m_nBlockLength[nBlock + 1], nVerGroup); ncDstBits = GetBitLength(QR_MODE_8BIT, m_nBlockLength[nBlock] + m_nBlockLength[nBlock + 1], nVerGroup); - // 前に8ビットバイトモードブロックがある場合、重複するインジケータ分を減算 + // OɂWrbgoCg[hubNꍇAdCWP[^Z if (nBlock >= 1 && m_byBlockMode[nBlock - 1] == QR_MODE_8BIT) ncDstBits -= (4 + nIndicatorLen8Bit[nVerGroup]); - // 後ろに8ビットバイトモードブロックがある場合、重複するインジケータ分を減算 + // ɂWrbgoCg[hubNꍇAdCWP[^Z if (nBlock < m_ncDataBlock - 2 && m_byBlockMode[nBlock + 2] == QR_MODE_8BIT) ncDstBits -= (4 + nIndicatorLen8Bit[nVerGroup]); if (ncSrcBits > ncDstBits) { if (nBlock >= 1 && m_byBlockMode[nBlock - 1] == QR_MODE_8BIT) { - // 結合するブロックの前にある8ビットバイトモードブロックを結合 + // ubN̑OɂWrbgoCg[hubN m_nBlockLength[nBlock - 1] += m_nBlockLength[nBlock]; - // 後続をシフト + // 㑱Vtg for (i = nBlock; i < m_ncDataBlock - 1; ++i) { m_byBlockMode[i] = m_byBlockMode[i + 1]; m_nBlockLength[i] = m_nBlockLength[i + 1]; } @@ -1034,14 +1034,14 @@ --nBlock; } if (nBlock < m_ncDataBlock - 2 && m_byBlockMode[nBlock + 2] == QR_MODE_8BIT) { - // 結合するブロックの後ろにある8ビットバイトモードブロックを結合 + // ubŇɂWrbgoCg[hubN m_nBlockLength[nBlock + 1] += m_nBlockLength[nBlock + 2]; - // 後続をシフト + // 㑱Vtg for (i = nBlock + 2; i < m_ncDataBlock - 1; ++i) { m_byBlockMode[i] = m_byBlockMode[i + 1]; m_nBlockLength[i] = m_nBlockLength[i + 1]; } @@ -1050,52 +1050,52 @@ } m_byBlockMode[nBlock] = QR_MODE_8BIT; m_nBlockLength[nBlock] += m_nBlockLength[nBlock + 1]; - // 後続をシフト + // 㑱Vtg for (i = nBlock + 1; i < m_ncDataBlock - 1; ++i) { m_byBlockMode[i] = m_byBlockMode[i + 1]; m_nBlockLength[i] = m_nBlockLength[i + 1]; } --m_ncDataBlock; - // 結合したブロックの前から再調査 + // ubN̑OĒ if (nBlock >= 1) --nBlock; continue; } - ++nBlock; // 次ブロックを調査 + ++nBlock; // ubN𒲍 } ///////////////////////////////////////////////////////////////////////// - // ビット配列化 - int ncComplete = 0; // 処理済データカウンタ + // rbgz + int ncComplete = 0; // σf[^JE^ WORD wBinCode; - m_ncDataCodeWordBit = 0; // ビット単位処理カウンタ + m_ncDataCodeWordBit = 0; // rbgPʏJE^ ZeroMemory(m_byDataCodeWord, MAX_DATACODEWORD); for (i = 0; i < m_ncDataBlock && m_ncDataCodeWordBit != -1; ++i) { if (m_byBlockMode[i] == QR_MODE_NUMERAL) { ///////////////////////////////////////////////////////////////// - // 数字モード + // [h - // インジケータ(0001b) + // CWP[^(0001b) m_ncDataCodeWordBit = SetBitStream(m_ncDataCodeWordBit, 1, 4); - // 文字数セット + // Zbg m_ncDataCodeWordBit = SetBitStream(m_ncDataCodeWordBit, (WORD)m_nBlockLength[i], nIndicatorLenNumeral[nVerGroup]); - // ビット列保存 + // rbgۑ for (j = 0; j < m_nBlockLength[i]; j += 3) { if (j < m_nBlockLength[i] - 2) { wBinCode = (WORD)(((lpsSource[ncComplete + j] - '0') * 100) + @@ -1104,19 +1104,19 @@ m_ncDataCodeWordBit = SetBitStream(m_ncDataCodeWordBit, wBinCode, 10); } else if (j == m_nBlockLength[i] - 2) { - // 端数2バイト + // [QoCg wBinCode = (WORD)(((lpsSource[ncComplete + j] - '0') * 10) + (lpsSource[ncComplete + j + 1] - '0')); m_ncDataCodeWordBit = SetBitStream(m_ncDataCodeWordBit, wBinCode, 7); } else if (j == m_nBlockLength[i] - 1) { - // 端数1バイト + // [PoCg wBinCode = (WORD)(lpsSource[ncComplete + j] - '0'); m_ncDataCodeWordBit = SetBitStream(m_ncDataCodeWordBit, wBinCode, 4); } } @@ -1125,19 +1125,19 @@ } else if (m_byBlockMode[i] == QR_MODE_ALPHABET) { ///////////////////////////////////////////////////////////////// - // 英数字モード + // p[h - // モードインジケータ(0010b) + // [hCWP[^(0010b) m_ncDataCodeWordBit = SetBitStream(m_ncDataCodeWordBit, 2, 4); - // 文字数セット + // Zbg m_ncDataCodeWordBit = SetBitStream(m_ncDataCodeWordBit, (WORD)m_nBlockLength[i], nIndicatorLenAlphabet[nVerGroup]); - // ビット列保存 + // rbgۑ for (j = 0; j < m_nBlockLength[i]; j += 2) { if (j < m_nBlockLength[i] - 1) { wBinCode = (WORD)((AlphabetToBinaly(lpsSource[ncComplete + j]) * 45) + @@ -1145,11 +1145,11 @@ m_ncDataCodeWordBit = SetBitStream(m_ncDataCodeWordBit, wBinCode, 11); } else { - // 端数1バイト + // [PoCg wBinCode = (WORD)AlphabetToBinaly(lpsSource[ncComplete + j]); m_ncDataCodeWordBit = SetBitStream(m_ncDataCodeWordBit, wBinCode, 6); } } @@ -1158,38 +1158,38 @@ } else if (m_byBlockMode[i] == QR_MODE_8BIT) { ///////////////////////////////////////////////////////////////// - // 8ビットバイトモード + // WrbgoCg[h - // モードインジケータ(0100b) + // [hCWP[^(0100b) m_ncDataCodeWordBit = SetBitStream(m_ncDataCodeWordBit, 4, 4); - // 文字数セット + // Zbg m_ncDataCodeWordBit = SetBitStream(m_ncDataCodeWordBit, (WORD)m_nBlockLength[i], nIndicatorLen8Bit[nVerGroup]); - // ビット列保存 + // rbgۑ for (j = 0; j < m_nBlockLength[i]; ++j) { m_ncDataCodeWordBit = SetBitStream(m_ncDataCodeWordBit, (WORD)lpsSource[ncComplete + j], 8); } ncComplete += m_nBlockLength[i]; } else // m_byBlockMode[i] == QR_MODE_KANJI { ///////////////////////////////////////////////////////////////// - // 漢字モード + // [h - // モードインジケータ(1000b) + // [hCWP[^(1000b) m_ncDataCodeWordBit = SetBitStream(m_ncDataCodeWordBit, 8, 4); - // 文字数セット + // Zbg m_ncDataCodeWordBit = SetBitStream(m_ncDataCodeWordBit, (WORD)(m_nBlockLength[i] / 2), nIndicatorLenKanji[nVerGroup]); - // 漢字モードでビット列保存 + // [hŃrbgۑ for (j = 0; j < m_nBlockLength[i] / 2; ++j) { WORD wBinCode = KanjiToBinaly((WORD)(((BYTE)lpsSource[ncComplete + (j * 2)] << 8) + (BYTE)lpsSource[ncComplete + (j * 2) + 1])); m_ncDataCodeWordBit = SetBitStream(m_ncDataCodeWordBit, wBinCode, 13); @@ -1203,14 +1203,14 @@ } ///////////////////////////////////////////////////////////////////////////// // CQR_Encode::GetBitLength -// 用 途:ビット長取得 -// 引 数:データモード種別、データ長、バージョン(型番)グループ -// 戻り値:データビット長 -// 備 考:漢字モードでのデータ長引数は文字数ではなくバイト数 +// p rFrbg擾 +// Ff[^[hʁAf[^Ao[W(^)O[v +// ߂lFf[^rbg +// lF[hł̃f[^͕ł͂ȂoCg int CQR_Encode::GetBitLength(BYTE nMode, int ncData, int nVerGroup) { int ncBits = 0; @@ -1249,14 +1249,14 @@ } ///////////////////////////////////////////////////////////////////////////// // CQR_Encode::SetBitStream -// 用 途:ビットセット -// 引 数:挿入位置、ビット配列データ、データビット長(最大16) -// 戻り値:次回挿入位置(バッファオーバー時=-1) -// 備 考:m_byDataCodeWord に結果をセット(要ゼロ初期化) +// p rFrbgZbg +// F}ʒuArbgzf[^Af[^rbg(ő16) +// ߂lF}ʒu(obt@I[o[=-1) +// lFm_byDataCodeWord ɌʂZbg(v[) int CQR_Encode::SetBitStream(int nIndex, WORD wData, int ncData) { int i; @@ -1275,13 +1275,13 @@ } ///////////////////////////////////////////////////////////////////////////// // CQR_Encode::IsNumeralData -// 用 途:数字モード該当チェック -// 引 数:調査文字 -// 戻り値:該当時=TRUE +// p rF[hY`FbN +// F +// ߂lFY=TRUE BOOL CQR_Encode::IsNumeralData(unsigned char c) { if (c >= '0' && c <= '9') return TRUE; @@ -1290,13 +1290,13 @@ } ///////////////////////////////////////////////////////////////////////////// // CQR_Encode::IsAlphabetData -// 用 途:英数字モード該当チェック -// 引 数:調査文字 -// 戻り値:該当時=TRUE +// p rFp[hY`FbN +// F +// ߂lFY=TRUE BOOL CQR_Encode::IsAlphabetData(unsigned char c) { if (c >= '0' && c <= '9') return TRUE; @@ -1311,14 +1311,14 @@ } ///////////////////////////////////////////////////////////////////////////// // CQR_Encode::IsKanjiData -// 用 途:漢字モード該当チェック -// 引 数:調査文字(16ビット文字) -// 戻り値:該当時=TRUE -// 備 考:EBBFh 以降の S-JIS は対象外 +// p rF[hY`FbN +// Fi16rbgj +// ߂lFY=TRUE +// lFEBBFh ȍ~ S-JIS ͑ΏۊO BOOL CQR_Encode::IsKanjiData(unsigned char c1, unsigned char c2) { if (((c1 >= 0x81 && c1 <= 0x9f) || (c1 >= 0xe0 && c1 <= 0xeb)) && (c2 >= 0x40)) { @@ -1332,13 +1332,13 @@ } ///////////////////////////////////////////////////////////////////////////// // CQR_Encode::AlphabetToBinaly -// 用 途:英数字モード文字のバイナリ化 -// 引 数:対象文字 -// 戻り値:バイナリ値 +// p rFp[h̃oCi +// FΏە +// ߂lFoCil BYTE CQR_Encode::AlphabetToBinaly(unsigned char c) { if (c >= '0' && c <= '9') return (unsigned char)(c - '0'); @@ -1364,13 +1364,13 @@ } ///////////////////////////////////////////////////////////////////////////// // CQR_Encode::KanjiToBinaly -// 用 途:漢字モード文字のバイナリ化 -// 引 数:対象文字 -// 戻り値:バイナリ値 +// p rF[h̃oCi +// FΏە +// ߂lFoCil WORD CQR_Encode::KanjiToBinaly(WORD wc) { if (wc >= 0x8140 && wc <= 0x9ffc) wc -= 0x8140; @@ -1381,78 +1381,78 @@ } ///////////////////////////////////////////////////////////////////////////// // CQR_Encode::GetRSCodeWord -// 用 途:RS誤り訂正コードワード取得 -// 引 数:データコードワードアドレス、データコードワード長、RSコードワード長 -// 備 考:総コードワード分のエリアを確保してから呼び出し +// p rFqrR[h[h擾 +// Ff[^R[h[hAhXAf[^R[h[hAqrR[h[h +// lFR[h[h̃GAmۂĂĂяo void CQR_Encode::GetRSCodeWord(LPBYTE lpbyRSWork, int ncDataCodeWord, int ncRSCodeWord) { int i, j; for (i = 0; i < ncDataCodeWord ; ++i) { if (lpbyRSWork[0] != 0) { - BYTE nExpFirst = byIntToExp[lpbyRSWork[0]]; // 初項係数より乗数算出 + BYTE nExpFirst = byIntToExp[lpbyRSWork[0]]; // W搔Zo for (j = 0; j < ncRSCodeWord; ++j) { - // 各項乗数に初項乗数を加算(% 255 → α^255 = 1) + // e搔ɏ搔Zi% 255 ^255 = 1j BYTE nExpElement = (BYTE)(((int)(byRSExp[ncRSCodeWord][j] + nExpFirst)) % 255); - // 排他論理和による剰余算出 + // r_aɂ]Zo lpbyRSWork[j] = (BYTE)(lpbyRSWork[j + 1] ^ byExpToInt[nExpElement]); } - // 残り桁をシフト + // c茅Vtg for (j = ncRSCodeWord; j < ncDataCodeWord + ncRSCodeWord - 1; ++j) lpbyRSWork[j] = lpbyRSWork[j + 1]; } else { - // 残り桁をシフト + // c茅Vtg for (j = 0; j < ncDataCodeWord + ncRSCodeWord - 1; ++j) lpbyRSWork[j] = lpbyRSWork[j + 1]; } } } ///////////////////////////////////////////////////////////////////////////// // CQR_Encode::FormatModule -// 用 途:モジュールへのデータ配置 -// 戻り値:一辺のモジュール数 +// p rFW[ւ̃f[^zu +// ߂lFӂ̃W[ void CQR_Encode::FormatModule() { int i, j; ZeroMemory(m_byModuleData, sizeof(m_byModuleData)); - // 機能モジュール配置 + // @\W[zu SetFunctionModule(); - // データパターン配置 + // f[^p^[zu SetCodeWordPattern(); if (m_nMaskingNo == -1) { - // 最適マスキングパターン選択 + // œK}XLOp^[I m_nMaskingNo = 0; - SetMaskingPattern(m_nMaskingNo); // マスキング - SetFormatInfoPattern(m_nMaskingNo); // フォーマット情報パターン配置 + SetMaskingPattern(m_nMaskingNo); // }XLO + SetFormatInfoPattern(m_nMaskingNo); // tH[}bgp^[zu int nMinPenalty = CountPenalty(); for (i = 1; i <= 7; ++i) { - SetMaskingPattern(i); // マスキング - SetFormatInfoPattern(i); // フォーマット情報パターン配置 + SetMaskingPattern(i); // }XLO + SetFormatInfoPattern(i); // tH[}bgp^[zu int nPenalty = CountPenalty(); if (nPenalty < nMinPenalty) { @@ -1460,14 +1460,14 @@ m_nMaskingNo = i; } } } - SetMaskingPattern(m_nMaskingNo); // マスキング - SetFormatInfoPattern(m_nMaskingNo); // フォーマット情報パターン配置 + SetMaskingPattern(m_nMaskingNo); // }XLO + SetFormatInfoPattern(m_nMaskingNo); // tH[}bgp^[zu - // モジュールパターンをブール値に変換 + // W[p^[u[lɕϊ for (i = 0; i < m_nSymbleSize; ++i) { for (j = 0; j < m_nSymbleSize; ++j) { m_byModuleData[i][j] = (BYTE)((m_byModuleData[i][j] & 0x11) != 0); @@ -1476,45 +1476,45 @@ } ///////////////////////////////////////////////////////////////////////////// // CQR_Encode::SetFunctionModule -// 用 途:機能モジュール配置 -// 備 考:フォーマット情報は機能モジュール登録のみ(実データは空白) +// p rF@\W[zu +// lFtH[}bg͋@\W[o^̂(f[^͋) void CQR_Encode::SetFunctionModule() { int i, j; - // 位置検出パターン + // ʒuop^[ SetFinderPattern(0, 0); SetFinderPattern(m_nSymbleSize - 7, 0); SetFinderPattern(0, m_nSymbleSize - 7); - // 位置検出パターンセパレータ + // ʒuop^[Zp[^ for (i = 0; i < 8; ++i) { m_byModuleData[i][7] = m_byModuleData[7][i] = '\x20'; m_byModuleData[m_nSymbleSize - 8][i] = m_byModuleData[m_nSymbleSize - 8 + i][7] = '\x20'; m_byModuleData[i][m_nSymbleSize - 8] = m_byModuleData[7][m_nSymbleSize - 8 + i] = '\x20'; } - // フォーマット情報記述位置を機能モジュール部として登録 + // tH[}bgLqʒu@\W[Ƃēo^ for (i = 0; i < 9; ++i) { m_byModuleData[i][8] = m_byModuleData[8][i] = '\x20'; } for (i = 0; i < 8; ++i) { m_byModuleData[m_nSymbleSize - 8 + i][8] = m_byModuleData[8][m_nSymbleSize - 8 + i] = '\x20'; } - // バージョン情報パターン + // o[Wp^[ SetVersionPattern(); - // 位置合わせパターン + // ʒu킹p^[ for (i = 0; i < QR_VersonInfo[m_nVersion].ncAlignPoint; ++i) { SetAlignmentPattern(QR_VersonInfo[m_nVersion].nAlignPoint[i], 6); SetAlignmentPattern(6, QR_VersonInfo[m_nVersion].nAlignPoint[i]); @@ -1522,23 +1522,23 @@ { SetAlignmentPattern(QR_VersonInfo[m_nVersion].nAlignPoint[i], QR_VersonInfo[m_nVersion].nAlignPoint[j]); } } - // タイミングパターン + // ^C~Op^[ for (i = 8; i <= m_nSymbleSize - 9; ++i) { m_byModuleData[i][6] = (i % 2) == 0 ? '\x30' : '\x20'; m_byModuleData[6][i] = (i % 2) == 0 ? '\x30' : '\x20'; } } ///////////////////////////////////////////////////////////////////////////// // CQR_Encode::SetFinderPattern -// 用 途:位置検出パターン配置 -// 引 数:配置左上座標 +// p rFʒuop^[zu +// FzuW void CQR_Encode::SetFinderPattern(int x, int y) { static BYTE byPattern[] = {0x7f, // 1111111b 0x41, // 1000001b @@ -1559,12 +1559,12 @@ } ///////////////////////////////////////////////////////////////////////////// // CQR_Encode::SetAlignmentPattern -// 用 途:位置合わせパターン配置 -// 引 数:配置中央座標 +// p rFʒu킹p^[zu +// FzuW void CQR_Encode::SetAlignmentPattern(int x, int y) { static BYTE byPattern[] = {0x1f, // 11111b 0x11, // 10001b @@ -1572,13 +1572,13 @@ 0x11, // 10001b 0x1f}; // 11111b int i, j; if (m_byModuleData[x][y] & 0x20) - return; // 機能モジュールと重複するため除外 + return; // @\W[Əd邽ߏO - x -= 2; y -= 2; // 左上隅座標に変換 + x -= 2; y -= 2; // Wɕϊ for (i = 0; i < 5; ++i) { for (j = 0; j < 5; ++j) { @@ -1588,23 +1588,23 @@ } ///////////////////////////////////////////////////////////////////////////// // CQR_Encode::SetVersionPattern -// 用 途:バージョン(型番)情報パターン配置 -// 備 考:拡張BCH(18,6)符号を誤り訂正として使用 +// p rFo[W(^)p^[zu +// lFgabg(18,6)ƂĎgp void CQR_Encode::SetVersionPattern() { int i, j; if (m_nVersion <= 6) return; int nVerData = m_nVersion << 12; - // 剰余ビット算出 + // ]rbgZo for (i = 0; i < 6; ++i) { if (nVerData & (1 << (17 - i))) { nVerData ^= (0x1f25 << (5 - i)); @@ -1624,19 +1624,19 @@ } ///////////////////////////////////////////////////////////////////////////// // CQR_Encode::SetCodeWordPattern -// 用 途:データパターン配置 +// p rFf[^p^[zu void CQR_Encode::SetCodeWordPattern() { int x = m_nSymbleSize; int y = m_nSymbleSize - 1; - int nCoef_x = 1; // x軸配置向き - int nCoef_y = 1; // y軸配置向き + int nCoef_x = 1; // zu + int nCoef_y = 1; // zu int i, j; for (i = 0; i < m_ncAllCodeWord; ++i) { @@ -1656,37 +1656,37 @@ y = (y < 0) ? 0 : m_nSymbleSize - 1; nCoef_y *= -1; x -= 2; - if (x == 6) // タイミングパターン + if (x == 6) // ^C~Op^[ --x; } } } - while (m_byModuleData[x][y] & 0x20); // 機能モジュールを除外 + while (m_byModuleData[x][y] & 0x20); // @\W[O m_byModuleData[x][y] = (m_byAllCodeWord[i] & (1 << (7 - j))) ? '\x02' : '\x00'; } } } ///////////////////////////////////////////////////////////////////////////// // CQR_Encode::SetMaskingPattern -// 用 途:マスキングパターン配置 -// 引 数:マスキングパターン番号 +// p rF}XLOp^[zu +// F}XLOp^[ԍ void CQR_Encode::SetMaskingPattern(int nPatternNo) { int i, j; for (i = 0; i < m_nSymbleSize; ++i) { for (j = 0; j < m_nSymbleSize; ++j) { - if (! (m_byModuleData[j][i] & 0x20)) // 機能モジュールを除外 + if (! (m_byModuleData[j][i] & 0x20)) // @\W[O { BOOL bMask; switch (nPatternNo) { @@ -1730,12 +1730,12 @@ } ///////////////////////////////////////////////////////////////////////////// // CQR_Encode::SetFormatInfoPattern -// 用 途:フォーマット情報配置 -// 引 数:マスキングパターン番号 +// p rFtH[}bgzu +// F}XLOp^[ԍ void CQR_Encode::SetFormatInfoPattern(int nPatternNo) { int nFormatInfo; int i; @@ -1761,57 +1761,57 @@ nFormatInfo += nPatternNo; int nFormatData = nFormatInfo << 10; - // 剰余ビット算出 + // ]rbgZo for (i = 0; i < 5; ++i) { if (nFormatData & (1 << (14 - i))) { nFormatData ^= (0x0537 << (4 - i)); // 10100110111b } } nFormatData += nFormatInfo << 10; - // マスキング + // }XLO nFormatData ^= 0x5412; // 101010000010010b - // 左上位置検出パターン周り配置 + // ʒuop^[zu for (i = 0; i <= 5; ++i) m_byModuleData[8][i] = (nFormatData & (1 << i)) ? '\x30' : '\x20'; m_byModuleData[8][7] = (nFormatData & (1 << 6)) ? '\x30' : '\x20'; m_byModuleData[8][8] = (nFormatData & (1 << 7)) ? '\x30' : '\x20'; m_byModuleData[7][8] = (nFormatData & (1 << 8)) ? '\x30' : '\x20'; for (i = 9; i <= 14; ++i) m_byModuleData[14 - i][8] = (nFormatData & (1 << i)) ? '\x30' : '\x20'; - // 右上位置検出パターン下配置 + // Eʒuop^[zu for (i = 0; i <= 7; ++i) m_byModuleData[m_nSymbleSize - 1 - i][8] = (nFormatData & (1 << i)) ? '\x30' : '\x20'; - // 左下位置検出パターン右配置 - m_byModuleData[8][m_nSymbleSize - 8] = '\x30'; // 固定暗モジュール + // ʒuop^[Ezu + m_byModuleData[8][m_nSymbleSize - 8] = '\x30'; // ŒÃW[ for (i = 8; i <= 14; ++i) m_byModuleData[8][m_nSymbleSize - 15 + i] = (nFormatData & (1 << i)) ? '\x30' : '\x20'; } ///////////////////////////////////////////////////////////////////////////// // CQR_Encode::CountPenalty -// 用 途:マスク後ペナルティスコア算出 +// p rF}XNyieBXRAZo int CQR_Encode::CountPenalty() { int nPenalty = 0; int i, j, k; - // 同色の列の隣接モジュール + // F̗̗אڃW[ for (i = 0; i < m_nSymbleSize; ++i) { for (j = 0; j < m_nSymbleSize - 4; ++j) { int nCount = 1; @@ -1831,11 +1831,11 @@ j = k - 1; } } - // 同色の行の隣接モジュール + // F̍s̗אڃW[ for (i = 0; i < m_nSymbleSize; ++i) { for (j = 0; j < m_nSymbleSize - 4; ++j) { int nCount = 1; @@ -1855,11 +1855,11 @@ j = k - 1; } } - // 同色のモジュールブロック(2×2) + // F̃W[ubNiQ~Qj for (i = 0; i < m_nSymbleSize - 1; ++i) { for (j = 0; j < m_nSymbleSize - 1; ++j) { if ((((m_byModuleData[i][j] & 0x11) == 0) == ((m_byModuleData[i + 1][j] & 0x11) == 0)) && @@ -1869,26 +1869,26 @@ nPenalty += 3; } } } - // 同一列における 1:1:3:1:1 比率(暗:明:暗:明:暗)のパターン + // ɂ 1:1:3:1:1 䗦i::::Áj̃p^[ for (i = 0; i < m_nSymbleSize; ++i) { for (j = 0; j < m_nSymbleSize - 6; ++j) { - if (((j == 0) || (! (m_byModuleData[i][j - 1] & 0x11))) && // 明 または シンボル外 - ( m_byModuleData[i][j] & 0x11) && // 暗 - 1 - (! (m_byModuleData[i][j + 1] & 0x11)) && // 明 - 1 - ( m_byModuleData[i][j + 2] & 0x11) && // 暗 ┐ - ( m_byModuleData[i][j + 3] & 0x11) && // 暗 │3 - ( m_byModuleData[i][j + 4] & 0x11) && // 暗 ┘ - (! (m_byModuleData[i][j + 5] & 0x11)) && // 明 - 1 - ( m_byModuleData[i][j + 6] & 0x11) && // 暗 - 1 - ((j == m_nSymbleSize - 7) || (! (m_byModuleData[i][j + 7] & 0x11)))) // 明 または シンボル外 + if (((j == 0) || (! (m_byModuleData[i][j - 1] & 0x11))) && // ܂ V{O + ( m_byModuleData[i][j] & 0x11) && // - 1 + (! (m_byModuleData[i][j + 1] & 0x11)) && // - 1 + ( m_byModuleData[i][j + 2] & 0x11) && // + ( m_byModuleData[i][j + 3] & 0x11) && // 3 + ( m_byModuleData[i][j + 4] & 0x11) && // + (! (m_byModuleData[i][j + 5] & 0x11)) && // - 1 + ( m_byModuleData[i][j + 6] & 0x11) && // - 1 + ((j == m_nSymbleSize - 7) || (! (m_byModuleData[i][j + 7] & 0x11)))) // ܂ V{O { - // 前または後に4以上の明パターン + // O܂͌4ȏ̖p^[ if (((j < 2 || ! (m_byModuleData[i][j - 2] & 0x11)) && (j < 3 || ! (m_byModuleData[i][j - 3] & 0x11)) && (j < 4 || ! (m_byModuleData[i][j - 4] & 0x11))) || ((j >= m_nSymbleSize - 8 || ! (m_byModuleData[i][j + 8] & 0x11)) && (j >= m_nSymbleSize - 9 || ! (m_byModuleData[i][j + 9] & 0x11)) && @@ -1898,26 +1898,26 @@ } } } } - // 同一行における 1:1:3:1:1 比率(暗:明:暗:明:暗)のパターン + // sɂ 1:1:3:1:1 䗦i::::Áj̃p^[ for (i = 0; i < m_nSymbleSize; ++i) { for (j = 0; j < m_nSymbleSize - 6; ++j) { - if (((j == 0) || (! (m_byModuleData[j - 1][i] & 0x11))) && // 明 または シンボル外 - ( m_byModuleData[j] [i] & 0x11) && // 暗 - 1 - (! (m_byModuleData[j + 1][i] & 0x11)) && // 明 - 1 - ( m_byModuleData[j + 2][i] & 0x11) && // 暗 ┐ - ( m_byModuleData[j + 3][i] & 0x11) && // 暗 │3 - ( m_byModuleData[j + 4][i] & 0x11) && // 暗 ┘ - (! (m_byModuleData[j + 5][i] & 0x11)) && // 明 - 1 - ( m_byModuleData[j + 6][i] & 0x11) && // 暗 - 1 - ((j == m_nSymbleSize - 7) || (! (m_byModuleData[j + 7][i] & 0x11)))) // 明 または シンボル外 + if (((j == 0) || (! (m_byModuleData[j - 1][i] & 0x11))) && // ܂ V{O + ( m_byModuleData[j] [i] & 0x11) && // - 1 + (! (m_byModuleData[j + 1][i] & 0x11)) && // - 1 + ( m_byModuleData[j + 2][i] & 0x11) && // + ( m_byModuleData[j + 3][i] & 0x11) && // 3 + ( m_byModuleData[j + 4][i] & 0x11) && // + (! (m_byModuleData[j + 5][i] & 0x11)) && // - 1 + ( m_byModuleData[j + 6][i] & 0x11) && // - 1 + ((j == m_nSymbleSize - 7) || (! (m_byModuleData[j + 7][i] & 0x11)))) // ܂ V{O { - // 前または後に4以上の明パターン + // O܂͌4ȏ̖p^[ if (((j < 2 || ! (m_byModuleData[j - 2][i] & 0x11)) && (j < 3 || ! (m_byModuleData[j - 3][i] & 0x11)) && (j < 4 || ! (m_byModuleData[j - 4][i] & 0x11))) || ((j >= m_nSymbleSize - 8 || ! (m_byModuleData[j + 8][i] & 0x11)) && (j >= m_nSymbleSize - 9 || ! (m_byModuleData[j + 9][i] & 0x11)) && @@ -1927,10 +1927,10 @@ } } } } - // 全体に対する暗モジュールの占める割合 + // Ŝɑ΂ÃW[̐߂銄 int nCount = 0; for (i = 0; i < m_nSymbleSize; ++i) { for (j = 0; j < m_nSymbleSize; ++j)