int waitAnswer(int sock, uint32_t *pValue) { char str[128]; waitFrame(sock, str, 128); sscanf(str,"%u", pValue); return 0; }
int remoteLCM(int sock, uint32_t n, uint32_t m, uint32_t *pResult) { char str[32]; sprintf(str,"lcm %u %u$",n,m); send(sock,str,strlen(str),0); waitFrame(sock, str, 32); sscanf(str, "%u", pResult); return 0; }
int waitMessage(int sock, PMESSAGE pMessage) { char str[128], strMessage[16]; if(waitFrame(sock, str, 128)==-1) return -1; sscanf(str,"%s%u%u",strMessage, &(pMessage->param1), &(pMessage->param2)); if(strcmp(strMessage,"lcm")==0) pMessage->type=LCM; else pMessage->type=GCD; return 0; }
bool VDXPlayer::playFrameInternal() { byte currRes = 0x80; Common::ReadStream *vdxData = 0; while (currRes == 0x80) { currRes = _file->readByte(); // Skip unknown data: 1 byte, ref Edward byte tmp = _file->readByte(); uint32 compSize = _file->readUint32LE(); uint8 lengthmask = _file->readByte(); uint8 lengthbits = _file->readByte(); if (_file->eos()) break; debugC(5, kGroovieDebugVideo | kGroovieDebugUnknown | kGroovieDebugAll, "Groovie::VDX: Edward = 0x%04X", tmp); // Read the chunk data and decompress if needed if (compSize) vdxData = _file->readStream(compSize); if (lengthmask && lengthbits) { Common::ReadStream *decompData = new LzssReadStream(vdxData, lengthmask, lengthbits); delete vdxData; vdxData = decompData; } // Use the current chunk switch (currRes) { case 0x00: debugC(6, kGroovieDebugVideo | kGroovieDebugAll, "Groovie::VDX: Replay frame"); break; case 0x20: debugC(5, kGroovieDebugVideo | kGroovieDebugAll, "Groovie::VDX: Still frame"); getStill(vdxData); break; case 0x25: debugC(5, kGroovieDebugVideo | kGroovieDebugAll, "Groovie::VDX: Animation frame"); getDelta(vdxData); break; case 0x80: debugC(5, kGroovieDebugVideo | kGroovieDebugAll, "Groovie::VDX: Sound resource"); chunkSound(vdxData); break; default: error("Groovie::VDX: Invalid resource type: %d", currRes); } delete vdxData; vdxData = 0; } // Wait until the current frame can be shown if (!DebugMan.isDebugChannelEnabled(kGroovieDebugFast)) { waitFrame(); } // TODO: Move it to a better place // Update the screen if (currRes == 0x25) { //if (_flagSeven) { //_vm->_graphicsMan->mergeFgAndBg(); //} _vm->_graphicsMan->updateScreen(_bg); } // Report the end of the video if we reached the end of the file or if we // just wanted to play one frame. if (_file->eos() || _flagFirstFrame) { _origX = _origY = 0; return 1; } else { return 0; } }