static int ChannelInput(ClientData instance, char *buffer, int toRead, int *errorCodePtr) { Channel *instPtr = instance; DWORD cbRead = 0; FT_STATUS fts = FT_OK; if (instPtr->flags & FTD2XX_ASYNC) { /* * Non-blocking: only read data that is available */ DWORD rx = 0, tx = 0, ev = 0; if ((fts = procs.FT_GetStatus(instPtr->handle, &rx, &tx, &ev)) == FT_OK) { if ((int)rx < toRead) { toRead = rx; } } else { TRACE(ConvertError(fts)); } } if (procs.FT_Read(instPtr->handle, buffer, toRead, &cbRead) != FT_OK) { TRACE("ChannelInput error: %s", ConvertError(fts)); switch (fts) { case FT_DEVICE_NOT_FOUND: *errorCodePtr = ENODEV; break; default: *errorCodePtr = EINVAL; break; } cbRead = -1; } return (int)cbRead; }
static int ChannelClose(ClientData instance, Tcl_Interp *interp) { Channel *instPtr = instance; Package *pkgPtr = instPtr->pkgPtr; Channel **tmpPtrPtr; int r = TCL_OK; FT_STATUS fts; TRACE("ChannelClose\n"); CloseHandle(instPtr->event); if ((fts = procs.FT_Purge(instPtr->handle, FT_PURGE_RX | FT_PURGE_TX)) != FT_OK) { TRACE("ChannelClose error: %s", ConvertError(fts)); } fts = procs.FT_Close(instPtr->handle); if (fts != FT_OK) { if (interp != NULL) { Tcl_AppendResult(interp, "error closing \"", Tcl_GetChannelName(instPtr->channel), "\": ", ConvertError(fts), NULL); } r = TCL_ERROR; } /* remove this channel from the package list */ tmpPtrPtr = &pkgPtr->headPtr; while (*tmpPtrPtr && *tmpPtrPtr != instPtr) { tmpPtrPtr = &(*tmpPtrPtr)->nextPtr; } *tmpPtrPtr = instPtr->nextPtr; --pkgPtr->count; ckfree((char *)instPtr); return r; }
std::vector<PolygonalObject> Convert(IPObjectStruct* iritObjects) { std::vector<PolygonalObject> res; if (iritObjects == NULL) { return std::vector<PolygonalObject>(); } if (IP_IS_OLST_OBJ(iritObjects)) { std::vector<PolygonalObject> res; res.reserve(iritObjects->U.Lst.ListMaxLen); IPObjectStruct** currObject = iritObjects->U.Lst.PObjList; while ((*currObject) != NULL) { std::vector<PolygonalObject> currRes = Convert(*currObject); res.insert(res.end(), currRes.begin(), currRes.end()); ++currObject; } return res; } else if (IP_IS_POLYGON_OBJ(iritObjects)) { std::vector<PolygonalObject> res; res.push_back(ConvertSingleObject(iritObjects)); return res; } else { throw ConvertError(); } }
PolygonalObject ConvertSingleObject(IPObjectStruct* iritObjects) { if (!IP_IS_POLYGON_OBJ(iritObjects)) { throw ConvertError(); } std::vector<Polygon3D> currPolys; IPPolygonStruct* currPoly = iritObjects->U.Pl; while (currPoly != NULL) { currPolys.push_back(ConvertPolygon(currPoly)); currPoly = currPoly->Pnext; } double transp; bool transpValid = CGSkelGetObjectTransp(iritObjects, &transp); IPAttributeStruct* attrRGB = AttrFindAttribute(iritObjects->Attr, "rgb"); if (attrRGB != NULL) { int r, g, b; sscanf_s(attrRGB->U.Str, "%d,%d,%d", &r, &g, &b); if (transpValid) return PolygonalObject(currPolys, RGB(r, g, b), 1 - transp); else return PolygonalObject(currPolys, RGB(r, g, b)); } { if (transpValid) return PolygonalObject(currPolys, 1 - transp); else return PolygonalObject(currPolys); } }
int CLZMA::CompressReal() { try { HRESULT hResult = _encoder->WriteCoderProperties(this); if (hResult == S_OK) { while (true) { UINT64 inSize, outSize; INT32 finished; hResult = _encoder->CodeOneBlock(&inSize, &outSize, &finished); if (hResult != S_OK && res == C_OK) res = ConvertError(hResult); if (res != C_OK) break; if (finished) { res = C_OK; break; } } } else { if (res == C_OK) res = ConvertError(hResult); } } catch (...) { if (res == C_OK) res = LZMA_IO_ERROR; } compressor_finished = TRUE; SetEvent(hNeedIOEvent); return C_OK; }
static int ChannelOutput(ClientData instance, const char *buffer, int toWrite, int *errorCodePtr) { Channel *instPtr = instance; FT_STATUS fts = FT_OK; DWORD cbWrote = 0; DWORD dwStart = GetTickCount(); if ((fts = procs.FT_Write(instPtr->handle, (void *)buffer, toWrite, &cbWrote)) != FT_OK) { TRACE("ChannelOutput error: %s", ConvertError(fts)); switch (fts) { case FT_DEVICE_NOT_FOUND: *errorCodePtr = ENODEV; break; default: *errorCodePtr = EINVAL; break; } cbWrote = -1; } TRACE("ChannelOutput %lu bytes in %ld ms\n", cbWrote, GetTickCount()-dwStart); return (int)cbWrote; }