BOOL TInifile::WriteIni() { Lock(); BOOL ret = FALSE; HANDLE hFile = ::CreateFileW(iniFile, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); if (hFile != INVALID_HANDLE_VALUE) { #define MIN_INI_ALLOC (64 * 1024) #define MAX_INI_ALLOC (10 * 1024 * 1024) #define MIN_LINE_SIZE (2 * 1024) VBuf vbuf(MIN_INI_ALLOC, MAX_INI_ALLOC); char *p = (char *)vbuf.Buf(); for (TIniSection *sec = TopObj(); sec && p; sec = NextObj(sec)) { TIniKey *key = sec->TopObj(); int len = 0; if (key) { if (sec->Name()) { len = sprintf(p, "[%s]\r\n", sec->Name()); p = NextBuf(&vbuf, len, MIN_LINE_SIZE, MIN_INI_ALLOC); } while (key) { if (key->Key()) { len = sprintf(p, "%s=\"%s\"\r\n", key->Key(), key->Val()); p = NextBuf(&vbuf, len, MIN_LINE_SIZE, MIN_INI_ALLOC); } else { len = sprintf(p, "%s\r\n", key->Val()); p = NextBuf(&vbuf, len, MIN_LINE_SIZE, MIN_INI_ALLOC); } key = sec->NextObj(key); } } } DWORD size; ret = ::WriteFile(hFile, vbuf.Buf(), (DWORD)vbuf.UsedSize(), &size, 0); ::CloseHandle(hFile); } UnLock(); return ret; }
//--------------------------------------------------------------------------- void __fastcall CComm::Execute() { m_Execute = 1; int BitLen = pMod->m_BitLen; //---- スレッドのコードをここに記述 ---- // Priority = tpLower; while(1){ _try:; if( Terminated == TRUE ){ return; } if( m_Command == COMM_CLOSE ){ m_Command = 0; return; } if( m_CreateON == TRUE ){ if( !m_TxEnb ){ ::Sleep(10); } else if( !TxBusy() ){ if( m_FirstGaurd ){ // 最初のガード時間の確保 m_FirstGaurd = 0; ::Sleep(250); if( m_DisDiddle == -1 ) m_DisDiddle = 0; } else if( m_txcnt && (FSKDeff <= DEFFSOUND) ){ // 送信データあり m_DisDiddle = pMod->m_DisDiddle; m_Data = m_txbuf[m_txrp]; if( m_figout && (m_fig == 0x1b) && (m_Data != 0x1f) ){ m_Data = 0x1b; } else { switch(m_Data){ case 0xff: // Mark ::Sleep((pMod->m_ReCount * 3 * 1000) / SampFreq); NextBuf(); goto _try; case 0xfe: // キャリア断続 NextBuf(); goto _try; case 0xfd: // disable diddle m_DisDiddle = 0; NextBuf(); goto _try; case 0xfc: // enable diddle m_DisDiddle = 1; NextBuf(); goto _try; case 0x1b: case 0x1f: m_fig = m_Data; break; } NextBuf(); } m_figout = 0; if( !pMod->m_CharWaitDiddle ){ WaitTXD(pMod->m_CharWait); } m_WaitTimerCount = 4; OutData(m_Data); } else if( (BitLen < 6) && ((FSKDeff > DEFFSOUND) || (pMod->m_diddle && !m_DisDiddle)) ){ if( FSKDeff > DEFFSOUND ){ WaitTXD(pMod->m_CharWait); } else if( (sys.m_LWait == 2) || !pMod->m_WaitTimer || m_WaitTimerCount ){ if( !pMod->m_CharWaitDiddle ){ if( sys.m_LWait == 2 ){ WaitTXD(pMod->m_CharWait); } else if( pMod->m_DiddleWait ){ WaitTXD(pMod->m_DiddleWait); } } } m_idle = 1; switch(pMod->m_diddle){ case 1: // BLK if( pMod->m_RandomDiddle && !(rand() & 3) ){ m_Data = 0x1f; if( pMod->m_BitLen <= 6 ) m_figout = 1; } else { m_Data = 0x00; } break; default: // LTR if( pMod->m_RandomDiddle && !(rand() & 3) ){ m_Data = 0x00; } else { m_Data = 0x1f; if( pMod->m_BitLen <= 6 ) m_figout = 1; } break; } if( m_WaitTimerCount ) m_WaitTimerCount--; OutData(m_Data); } else { if( !m_idle ){ ::Sleep((pMod->m_ReCount * pMod->m_BitLen)*1000/SampFreq); } m_idle = 1; } ::Sleep(10); } else { ::Sleep(1); } } else { ::Sleep(10); } } }