Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
	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();
		}
	}
Ejemplo n.º 4
0
	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);
		}
	}
Ejemplo n.º 5
0
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;
}
Ejemplo n.º 6
0
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;
}