bool CBuffPacket::WriteStream(const char* szData, uint32 u4Len) { //ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadLock); if(u4Len + m_u4PacketLen >= MAX_PACKET_SIZE) { OUR_DEBUG((LM_ERROR, "[CBuffPacket::WriteStream] nSize = [%d] m_u4PacketLen = [%d] is more than MAX_PACKET_SIZE.\n", u4Len, m_u4PacketLen)); sprintf_safe(m_szError, MAX_BUFF_500, "[CBuffPacket::WriteStream] nSize = [%d] m_u4PacketLen = [%d] is more than MAX_PACKET_SIZE.\n", u4Len, m_u4PacketLen); return false; } if(m_u4WritePtr + u4Len > m_u4PacketLen) { if(false == AddBuff(u4Len)) { OUR_DEBUG((LM_ERROR, "[CBuffPacket::WriteStream] nSize = [%d] m_u4PacketLen = [%d] AddBuff false.\n", u4Len, m_u4PacketLen)); return false; } //写入文本内容 ACE_OS::memcpy(WritePtr(), szData, u4Len); WritePtr(u4Len); return true; } else { //写入文本内容 ACE_OS::memcpy(WritePtr(), szData, u4Len); WritePtr(u4Len); return true; } }
void GetStartupSearchOptions (bool* official, bool* beta, unsigned int* lastTime) { char tmp[256]; GetPrivateProfileString("SWS", STARTUP_VERSION_KEY, "", tmp, sizeof(tmp), get_ini_file()); LineParser lp(false); lp.parse(tmp); WritePtr(official, (lp.getnumtokens() > 0) ? !!lp.gettoken_int(0) : true); WritePtr(beta, (lp.getnumtokens() > 1) ? !!lp.gettoken_int(1) : false); WritePtr(lastTime, lp.gettoken_uint(2)); }
double GetMidiSourceLengthPPQ (MediaItem_Take* take, bool accountPlayrateIfIgnoringProjTempo, bool* isMidiSource /*=NULL*/) { bool isMidi = false; double length = 0; if (take && IsMidi(take)) { MediaItem* item = GetMediaItemTake_Item(take); double itemStart = GetMediaItemInfo_Value(item, "D_POSITION"); double takeOffset = GetMediaItemTakeInfo_Value(take, "D_STARTOFFS"); double sourceLength = GetMediaItemTake_Source(take)->GetLength(); double startPPQ = MIDI_GetPPQPosFromProjTime(take, itemStart - takeOffset); double endPPQ = MIDI_GetPPQPosFromProjTime(take, itemStart - takeOffset + sourceLength); isMidi = true; length = endPPQ - startPPQ; if (accountPlayrateIfIgnoringProjTempo) { bool ignoreProjTempo; if (GetMidiTakeTempoInfo(take, &ignoreProjTempo, NULL, NULL, NULL) && ignoreProjTempo) length /= GetMediaItemTakeInfo_Value(take, "D_PLAYRATE"); } } WritePtr(isMidiSource, isMidi); return length; }
void CDead6800::Write(u32 addr,u8 data) { if(addr >= 0x10000) { message("write invalid memory address '$%X', cycle %ld, PC = $%04X\n",addr,Cycle,PC); addr &= 0xFFFF; } if(WritePages[addr >> ADDR_SHIFT]) WritePages[addr >> ADDR_SHIFT][addr & ADDR_MASK] = data; WritePtr(User,addr,data); }
bool IsMidi (MediaItem_Take* take, bool* inProject /*= NULL*/) { if (PCM_source* source = GetMediaItemTake_Source(take)) { const char* type = source->GetType(); if (!strcmp(type, "MIDI") || !strcmp(type, "MIDIPOOL")) { if (inProject) { const char* fileName = source->GetFileName(); *inProject = (fileName && !strcmp(fileName, "")); } return true; } } WritePtr(inProject, false); return false; }
int GetEnvelopeOverlapState(TrackEnvelope* envelope, int* laneCount, int* envCount) { bool lane, visible; visible = EnvVis(envelope, &lane); if (!visible || lane) return -1; int visEnvCount = CountVisibleTrackEnvelopesInTrackLane(GetEnvParent(envelope)); int overlapMinHeight = *(int*)GetConfigVar("env_ol_minh"); if (overlapMinHeight < 0) return (WritePtr(laneCount, visEnvCount), WritePtr(envCount, visEnvCount), 0); if (GetTrackEnvHeight(envelope, NULL, false) < overlapMinHeight) return (WritePtr(laneCount, 1), WritePtr(envCount, visEnvCount), (visEnvCount > 1) ? 2 : 1); return (WritePtr(laneCount, (visEnvCount > 1) ? visEnvCount : 1), WritePtr(envCount, (visEnvCount > 1) ? visEnvCount : 1), (visEnvCount > 1) ? 4 : 3); }
void CBuffPacket::WriteBuffPtr(uint32 u4Size) { //ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadLock); WritePtr(u4Size); }
void VM::Execute() { while (m_running) { ByteCode code = m_functions[m_frames.back().FunctionID()].GetByteCode(m_frames.back().NextInstruction()); switch (code.GetInstruction()) { case Instruction::NOP: break; case Instruction::STOP: m_running = false; break; case Instruction::ADD: Add(m_frames.back()); break; case Instruction::SUB: Sub(m_frames.back()); break; case Instruction::MUL: Mul(m_frames.back()); break; case Instruction::DIV: Div(m_frames.back()); break; case Instruction::PRINT: Print(m_frames.back()); break; case Instruction::PRINTLINE: PrintLine(m_frames.back()); break; case Instruction::COMPARE: Compare(m_frames.back()); break; case Instruction::COMPARE_NULL: CompareNull(m_frames.back()); break; case Instruction::JUMP_IF_TRUE: JumpIfTrue(m_frames.back(), code.GetObject()); break; case Instruction::JUMP_IF_FALSE: JumpIfFalse(m_frames.back(), code.GetObject()); break; case Instruction::JUMP: Jump(m_frames.back(), code.GetObject()); break; case Instruction::CALLFUNCTION: CallFunction(this, m_frames.back()); break; case Instruction::RETURN: Return(this, m_frames.back()); break; case Instruction::PUSH: Push(m_frames.back(), code.GetObject()); break; case Instruction::POP: Pop(m_frames.back()); break; case Instruction::LOAD_VARIABLE: LoadVariable(m_frames.back(), code.GetObject()); break; case Instruction::STORE_VARIABLE: StoreVariable(m_frames.back(), code.GetObject()); break; case Instruction::ALLOCATE_PTR: AllocatePtr(m_frames.back(), m_memory_manager); break; case Instruction::WRITE_PTR: WritePtr(m_frames.back(), m_memory_manager); break; case Instruction::READ_PTR: ReadPtr(m_frames.back(), m_memory_manager); break; case Instruction::SWAP: Swap(m_frames.back()); break; default: throw UndefinedInstructionError(std::string("Instruction ") + std::to_string(static_cast<int>(code.GetInstruction())) + " was not recognized by the virtual machine"); } } }
double GetOriginalPpqPos (MediaItem_Take* take, double ppqPos, bool* loopedItem, double* posVisInsertStartPpq, double* posVisInsertEndPpq) { double returnPos = 0; MediaItem* item = GetMediaItemTake_Item(take); if (!take || !item || !IsMidi(take, NULL)) { WritePtr(loopedItem, false); WritePtr(posVisInsertStartPpq, 0.0); WritePtr(posVisInsertEndPpq, 0.0); } else { double itemStart = GetMediaItemInfo_Value(item, "D_POSITION"); double itemEnd = itemStart + GetMediaItemInfo_Value(item, "D_LENGTH"); if (GetMediaItemInfo_Value(item, "B_LOOPSRC") == 0) { WritePtr(loopedItem, false); WritePtr(posVisInsertStartPpq, MIDI_GetPPQPosFromProjTime(take, itemStart)); WritePtr(posVisInsertEndPpq, MIDI_GetPPQPosFromProjTime(take, itemEnd)); returnPos = ppqPos; } else { WritePtr(loopedItem, true); double visibleItemStartPpq = MIDI_GetPPQPosFromProjTime(take, itemStart); double visibleItemEndPpq = MIDI_GetPPQPosFromProjTime(take, itemEnd); double sourceLenPpq = GetMidiSourceLengthPPQ(take, true); // Deduct take offset to get correct current loop iteration double itemStartPpq = MIDI_GetPPQPosFromProjTime(take, itemStart - GetMediaItemTakeInfo_Value(take, "D_STARTOFFS")); int currentLoop; int loopCount = GetLoopCount(take, MIDI_GetProjTimeFromPPQPos(take, ppqPos), ¤tLoop); returnPos = (ppqPos >= visibleItemStartPpq) ? (ppqPos - (currentLoop * sourceLenPpq)) : ppqPos; if (ppqPos > visibleItemEndPpq) // position after item end { WritePtr(posVisInsertStartPpq, 0.0); WritePtr(posVisInsertEndPpq, 0.0); } else if (ppqPos < visibleItemStartPpq || currentLoop == 0) // position in first loop iteration or before it { WritePtr(posVisInsertStartPpq, visibleItemStartPpq); WritePtr(posVisInsertEndPpq, (visibleItemEndPpq - visibleItemStartPpq >= sourceLenPpq) ? itemStartPpq + sourceLenPpq : visibleItemEndPpq); } else if (currentLoop == loopCount) // position in last loop iteration { WritePtr(posVisInsertStartPpq, itemStartPpq); WritePtr(posVisInsertEndPpq, itemStartPpq + (visibleItemEndPpq - (currentLoop * sourceLenPpq))); } else // position in other loop iterations { WritePtr(posVisInsertStartPpq, itemStartPpq); WritePtr(posVisInsertEndPpq, itemStartPpq + sourceLenPpq); } } } return returnPos; }