亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? realtag.c

?? 一個OPC服務器開發(fā)的源代碼。結構清晰
?? C
?? 第 1 頁 / 共 2 頁
字號:
/**************************************************************************
 *                                                                        *
 * Light OPC Server development library                                   *
 *                                                                        *
 *   Copyright (c) 2000  Timofei Bondarenko                               *
                                                                          *
 List of real tags
 **************************************************************************/

#include <math.h> /* fabs() */
#include <errno.h>
#include <stddef.h>
#include <opcerror.h>
#include "loserv.h"
#include "util.h"

/**************************************************************************/

static loTagId lo_find_tag(loService *se, const loWchar *itemid)
{
 lo_hash hash = loSTRHASH(se, itemid);
 lo_hash *tn = se->name_hash,
         *stop = &tn[se->lastnamed];
// static maxx, zoo; int ii = 0, zo0 = zoo;

 while(tn != stop)
   if (*(++tn) == hash)
     {
      loTagEntry *te = &se->tags[tn - se->name_hash];
// if (++ii > maxx) {maxx = ii;  UL_WARNING((LOGID, "MAXX %u", maxx));}

      if (te->attr.taName && !se->wstrcmp(te->attr.taName, itemid))
        return /*VT_EMPTY == V_VT(&te->attr.value)? 0:*/ tn - se->name_hash;
// zoo++;
     }
// if (zo0 != zoo) UL_WARNING((LOGID, "EX %u", zoo));

 return 0;
}

loTagId loFindItemID(loService *se, loCaller *cactx,
                     int locked,
                     const loWchar *itemid,
                     const loWchar *accpath,
                     int vartype,
                     int ai_goal,
                     void   **acpath,
		             HRESULT *ecode)
{
 void *acpa = 0;
 HRESULT hr = OPC_E_UNKNOWNITEMID;
 loTagId ti = 0;

 if (!loSERVICE_OK(se)) { hr = E_INVALIDARG; goto Return; }
 if (!itemid || !*itemid) { hr = OPC_E_INVALIDITEMID; goto Return; }
 if (accpath && !*accpath) accpath = 0;

 if (!se->driver.ldAskItemID ||
    (!accpath || (se->driver.ldFlags & loDF_IGNACCPATH)) &&
     !(se->driver.ldFlags & loDF_CHECKITEM))
   {
    if (!locked) lw_rw_rdlock(&se->lkMgmt);
      ti = lo_find_tag(se, itemid);
    if (!locked) lw_rw_unlock(&se->lkMgmt);
    if (ti && !(se->tags[ti].attr.taFlags & loTF_CHECKITEM))
      goto Return;
   }
 if (se->driver.ldAskItemID)
   {
    if (locked) lw_rw_unlock(&se->lkMgmt);
    hr = se->driver.ldAskItemID(cactx? cactx: &se->cactx,
                                &ti, &acpa,
                                itemid, accpath, vartype, ai_goal);
    if (locked) lw_rw_rdlock(&se->lkMgmt);
    if (S_OK != hr) ti = 0;
    else if (0 == ti)
      {
       if (!locked) lw_rw_rdlock(&se->lkMgmt);
         ti = lo_find_tag(se, itemid);
       if (!locked) lw_rw_unlock(&se->lkMgmt);
      }
   }
Return:
 if (acpath) *acpath = ti? acpa: 0;
 if (ecode) *ecode = ti? S_OK: (S_OK == hr? E_FAIL: hr);
/* if (rdwr) *rdwr = ti? se->tags[ti].attr.taRights: 0;*/

 UL_TRACE((LOGID, "loFindItemID(%ls)(%ls) = %u",
         	   loWnul(itemid), loWnul(accpath), ti));
 return ti;
}

/**************************************************************************/

static double loDecodeRange(VARIANT *tEUinfo)
{
    double rmin, rmax;
    long imin, imax;
    SAFEARRAY *sa;
    HRESULT hr;

#if ll_TRACE > USE_LOG
    if (!tEUinfo || V_VT(tEUinfo) != (VT_ARRAY|VT_R8) ||
        !(sa = V_ARRAY(tEUinfo)) ||
        1 != SafeArrayGetDim(sa) ||
        sizeof(double) != SafeArrayGetElemsize(sa) ||
        S_OK != (hr = SafeArrayGetLBound(sa, 1, &imin)) ||
        S_OK != (hr = SafeArrayGetUBound(sa, 1, &imax)) ||
        imin + 1 != imax ||
        S_OK != (hr = SafeArrayGetElement(sa, &imin, &rmin)) ||
        S_OK != (hr = SafeArrayGetElement(sa, &imax, &rmax))
       ) return -1.;
#else
    if (!tEUinfo || V_VT(tEUinfo) != (VT_ARRAY|VT_R8) ||
        !(sa = V_ARRAY(tEUinfo)))
      {
       UL_TRACE((LOGID, "loAddRealTag->EUinfo.vt = %#x (%p/%p)",
		         tEUinfo? V_VT(tEUinfo): 0, tEUinfo, sa));
       return -1.;
      }
    if (1 != SafeArrayGetDim(sa) ||
        sizeof(double) != SafeArrayGetElemsize(sa))
      {
       UL_TRACE((LOGID, "loAddRealTag->EUinfo.dim = %d .size = %d != %d",
               SafeArrayGetDim(sa),
               SafeArrayGetElemsize(sa), sizeof(double)));
       return -1.;
      }
    if (S_OK != (hr = SafeArrayGetLBound(sa, 1, &imin)) ||
        S_OK != (hr = SafeArrayGetUBound(sa, 1, &imax)) ||
        imin + 1 != imax)
      {
       UL_TRACE((LOGID, "loAddRealTag->EUinfo.bound = [%ld, %ld] %s",
                 imin, imax, loStrError(hr)));
       return -1.;
      }
    if (S_OK != (hr = SafeArrayGetElement(sa, &imin, &rmin)) ||
        S_OK != (hr = SafeArrayGetElement(sa, &imax, &rmax)))
      {
       UL_TRACE((LOGID, "loAddRealTag->EUinfo.element = %s",
               loStrError(hr)));
       return -1.;
      }
 UL_DEBUG((LOGID, "loAddRealTag->EUinfo.range = [%g ... %g]", rmax, rmin));
#endif

 return fabs(rmax - rmin) / 100.;
}

/**************************************************************************/

static int intAddRealTag(loService     *se, /* actual service context */
                         loTagId       *ti, /* returned TagId */
                         loRealTag      rt, /* != 0 */
                         const char    *sName,
                         const loWchar *wName,
                         int            tFlag,
                         unsigned       tRight, /* OPC_READABLE|OPC_WRITEABLE */
                         VARIANT       *tValue,  /* Canonical VARTYPE & default valid value */
                         /*OPCEUTYPE*/int tEUtype,
                         VARIANT       *tEUinfo, /* optional, if tdEUtype is 0*/
                         loTagId        tBase)
{
 int rv = 0;
 double rangecent = 0.0;
 lo_hash ent_hash = 0;
 loTagEntry ent;
 loTagEntry_init(&ent, 1);
 ent.attr.taFlags = 0;
 ent.attr.taRights = 0;
#if 0 == LO_RANGECENT_DETAIL
 ent.attr.taRangecent = 0.;
#endif

// UL_DEBUG((LOGID, "loAddTag(%s)...", loSnul(tName)));
 if (ti) *ti = 0;
 if (!loSERVICE_OK(se)) { rv = EBADF; goto Exit; }
 if (/*!(tRight & (OPC_READABLE|OPC_WRITEABLE)) ||*/
     tEUtype && !tEUinfo)
   { rv = EINVAL; goto Exit; }

 if (tEUtype == OPC_ANALOG &&
     0 > (rangecent = loDecodeRange(tEUinfo)))
   {
    UL_INFO((LOGID, "loAddRealTag->EUinfo.range = %g", rangecent));
    rv = EINVAL; goto Exit;
   }

 if (wName && *wName &&
     !(ent.attr.taName = loWstrdup(wName))) { rv = ENOMEM; goto Exit; }
 if (!ent.attr.taName && sName && *sName &&
     !(ent.attr.taName = loMWstrdup(sName))) { rv = ENOMEM; goto Exit; }

 ent.attr.taName_addlevel = 0;
 if (ent.attr.taName)
   {
    unsigned len;
    len = wcslen(ent.attr.taName);
    while(len && ent.attr.taName[len - 1] == se->branch_sep)
      {
       ent.attr.taName_addlevel++,
       ent.attr.taName[--len] = 0;
      }
    if (len == 0)
      {
       freeX(ent.attr.taName),
       ent.attr.taName = 0,
       ent.attr.taName_addlevel = 0;
      }
    else if (ent.attr.taName_addlevel && !tValue && !tEUinfo)
      preallocX((void**)&ent.attr.taName,
                 (wcslen(ent.attr.taName) + 1) * sizeof(loWchar));
   }

 if (tEUinfo || tValue)
   {
    if (tBase)
      {
       UL_INFO((LOGID, "loAddRealTag-> tBase + tEUinfo + tValue"));
       rv = EINVAL; goto Exit;
      }

    ent.attr.taDetail = (loTagDetail*)
        lo_string_to_struct(ent.attr.taName,
                            offsetof(loTagDetail, tdName),
                            ent.attr.taName);

    if (!ent.attr.taDetail) { rv = ENOMEM; goto Exit; }
    ent.attr.taFlags = loTt_DETAILS;

    if (ent.attr.taName) ent.attr.taName = ent.attr.taDetail->tdName;
    loTagDetail_init(ent.attr.taDetail);
    ent.attr.taRangecent = rangecent;

    if (!tValue || VT_EMPTY == V_VT(tValue)) tFlag |= loTF_EMPTY;
    else if (S_OK != (V_ISBYREF(tValue)?
                   VariantCopyInd(&ent.attr.taValue, tValue)
                 : VariantCopy(&ent.attr.taValue, tValue)) ||
          S_OK != VariantCopy(&ent.primValue, &ent.attr.taValue))
      { rv = EFAULT; goto Exit; }

    if ((ent.attr.taEUtype = (OPCEUTYPE)tEUtype) != 0 &&
        S_OK != VariantCopy(&ent.attr.taEUinfo, tEUinfo))
      { rv = EFAULT; goto Exit; }
   }
 else
   {
    if (!tBase) tFlag |= loTF_EMPTY;
   }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩免费观看高清完整版| 91麻豆文化传媒在线观看| 国产精品美女久久久久久久网站| 欧美日韩成人一区| 97se狠狠狠综合亚洲狠狠| 国产一区二区成人久久免费影院 | 奇米精品一区二区三区在线观看一| 国产精品视频一二三区| 日韩电影在线看| 久久精品国内一区二区三区| 偷拍一区二区三区| 青青草成人在线观看| 91网址在线看| 中文字幕欧美三区| 18欧美亚洲精品| 亚洲人成人一区二区在线观看 | 欧美成人官网二区| 精品国产91亚洲一区二区三区婷婷| 欧美一区二区网站| 色素色在线综合| 色天使色偷偷av一区二区| 久久久精品综合| 亚洲色大成网站www久久九九| 亚洲一区在线看| 美女视频网站久久| 懂色中文一区二区在线播放| 99久久婷婷国产| 国产精品美女久久久久aⅴ| 国产成人在线电影| 欧美人伦禁忌dvd放荡欲情| 亚洲尤物视频在线| 在线亚洲精品福利网址导航| 91精品国产91久久久久久一区二区| 一区二区三区欧美在线观看| 另类成人小视频在线| 6080亚洲精品一区二区| 国产精品女主播在线观看| 国产乱子伦一区二区三区国色天香| 国产电影一区在线| 久久精品网站免费观看| 日韩av电影免费观看高清完整版在线观看| 欧美最猛性xxxxx直播| 亚洲自拍偷拍九九九| 欧美日韩国产一二三| 男女激情视频一区| 久久婷婷综合激情| 日韩精品色哟哟| 99r精品视频| 一区二区三区鲁丝不卡| 欧美人牲a欧美精品| 国产在线播放一区| 亚洲天堂精品在线观看| 欧洲生活片亚洲生活在线观看| 午夜国产不卡在线观看视频| 日韩色视频在线观看| 日韩激情视频在线观看| 久久综合狠狠综合| 国产精品一区二区在线观看网站| 国产精品久久看| 奇米色一区二区三区四区| 久久久久久久网| 欧美视频一区二区三区四区| 亚洲欧美激情插| 欧美一级搡bbbb搡bbbb| 风间由美一区二区三区在线观看 | 国产精品亚洲视频| 一区二区三区中文字幕在线观看| 91麻豆精品秘密| 偷拍与自拍一区| 国产免费久久精品| 亚洲国产成人av网| 91亚洲精品久久久蜜桃网站 | 91麻豆精品秘密| 日本美女一区二区三区视频| 国产日韩欧美不卡| 91精品国产免费久久综合| 国产盗摄精品一区二区三区在线 | 日韩欧美在线影院| 99国产精品久久久久| 精品在线一区二区| 欧美一区二区三区免费在线看| 国产成人日日夜夜| 久久国产婷婷国产香蕉| 一区二区欧美在线观看| 一区二区三区在线视频播放| 欧美大度的电影原声| 91国产精品成人| 一区二区三区日本| 国产人成亚洲第一网站在线播放 | 美女视频黄a大片欧美| 一色屋精品亚洲香蕉网站| 欧美sm极限捆绑bd| 欧美日本精品一区二区三区| 91在线观看美女| 丁香另类激情小说| 亚洲免费在线电影| 国产欧美精品一区二区色综合| 欧美一级日韩不卡播放免费| 欧美日韩一区二区在线观看 | 欧美变态凌虐bdsm| 欧美性xxxxxx少妇| 色天使久久综合网天天| 99re视频精品| va亚洲va日韩不卡在线观看| 亚洲国产精品久久人人爱蜜臀| 亚洲欧洲成人自拍| 国产精品久久久久9999吃药| 国产无遮挡一区二区三区毛片日本| 欧美va在线播放| 日韩三级在线观看| 日韩欧美中文一区| 日韩精品一区二区三区中文精品| 91精品国产品国语在线不卡| 欧美精品精品一区| 大白屁股一区二区视频| 国产成人亚洲综合a∨婷婷| 国产在线国偷精品免费看| 蜜臀久久久99精品久久久久久| 日韩精品五月天| 久久aⅴ国产欧美74aaa| 久久99蜜桃精品| 国产精品一区二区在线播放| 国产精品99久久久久久似苏梦涵| 国产中文一区二区三区| 亚洲一区二区三区精品在线| 亚洲成人777| 最新国产成人在线观看| 亚洲视频一二区| 一区二区三区 在线观看视频| 亚洲综合成人网| 视频一区二区三区中文字幕| 美脚の诱脚舐め脚责91| 国产风韵犹存在线视精品| 99精品国产一区二区三区不卡| 色婷婷久久综合| 日韩一区二区免费电影| 日本一区二区三区电影| 亚洲激情校园春色| 国产精品乱人伦中文| 亚洲午夜免费电影| 精品一区二区三区久久久| 成人一区二区三区视频在线观看| 色域天天综合网| 日韩网站在线看片你懂的| 国产精品美女www爽爽爽| 午夜精品成人在线| 福利视频网站一区二区三区| 欧美视频精品在线| 久久综合色之久久综合| 亚洲图片另类小说| 毛片不卡一区二区| 99麻豆久久久国产精品免费| 欧美日本韩国一区| 中文字幕av资源一区| 香蕉乱码成人久久天堂爱免费| 国产永久精品大片wwwapp| 一本到不卡精品视频在线观看| 91精品国产麻豆| 17c精品麻豆一区二区免费| 日本不卡一二三区黄网| 91首页免费视频| 久久夜色精品一区| 视频一区二区中文字幕| 91女神在线视频| 久久伊人中文字幕| 天堂在线亚洲视频| 99精品久久99久久久久| 久久亚洲一区二区三区四区| 亚洲国产欧美在线人成| av毛片久久久久**hd| 精品精品国产高清a毛片牛牛| 亚洲一区在线看| 91亚洲精品久久久蜜桃网站| 国产拍欧美日韩视频二区| 麻豆91精品91久久久的内涵| 欧美日韩国产综合久久| 亚洲男人天堂av网| 不卡影院免费观看| 欧美中文字幕一区| 亚洲欧美在线高清| 精品一区免费av| 91精品国产91久久综合桃花 | 日韩午夜在线观看| 午夜欧美视频在线观看| 欧美午夜精品久久久久久超碰| 国产精品无码永久免费888| 国产精品一二三在| www久久久久| 黄页网站大全一区二区| 欧美一二区视频| 麻豆国产精品官网| 日韩欧美久久一区| 奇米影视一区二区三区| 日韩精品资源二区在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 在线综合亚洲欧美在线视频| 肉色丝袜一区二区| 69精品人人人人| 久久精品国内一区二区三区| 精品久久久久久综合日本欧美|