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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sclproc.c

?? scl解析文件,歡迎大家學(xué)習(xí)共享,解析算法值得學(xué)習(xí)
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
ST_INT type_id;
MVL_VAR_ASSOC *var_assoc;
OBJECT_NAME object_name;
ST_VOID *data;		/* buffer to store logical node data. Allocated here.*/
MVL_TYPE_CTRL *type_ctrl;
ST_RET retcode;
ST_CHAR type_name[MAX_IDENT_LEN+2];	/* one extra byte for NULL, another to catch if limit exceeded*/

  retcode = SD_FAILURE;	/* assume failure	*/

  /* Generate type_name.	*/
  /*if (scl_ln->rcbHead )*/
  if (scl_ln->rcbHead || scl_ln->lcbHead || scl_ln->gcbHead || scl_ln->sgcbHead || scl_ln->svcbHead)
  {	/* If LN contains control blocks, use custom type.	*/
    unique_type_name (scl_ld, scl_ln, type_name, sizeof (type_name));  
  }
  else
    strcpy (type_name, scl_ln->lnType);	/* no RCBs. Use LNType "id".*/

  /* Get typeid from type name	*/
  type_id = mvl_typename_to_typeid (type_name);
  if (type_id < 0)
    SXLOG_ERR2 ("Cannot find type='%s' for logical node='%s'", scl_ln->lnType, scl_ln->varName);
  else
    {
    /* CRITICAL: alloc buffer to store "data". All data for this LN stored here.*/
    /* This data buffer constitutes the "Data Cache" described in Design Doc.	*/
    /* NOTE: type_ctrl->data_size==type_ctrl->rt_ctrl->rt_first->offset_to_last*/
    type_ctrl = mvl_type_ctrl_find (type_id);
    data = chk_calloc (1, type_ctrl->data_size);

    /* Construct object name from LD & LN info.		*/
    object_name.object_tag = DOM_SPEC;	/* ALWAYS Domain specific	*/
    object_name.domain_id = scl_ld->domName;
    object_name.obj_name.vmd_spec = scl_ln->varName;

    /* Create the MMS variable (Logical Node).	*/
    var_assoc = mvl_var_add (&object_name,
                    NULL,	/* MVL_NET_INFO *	*/
                    type_id,
                    data, 
                    NULL,	/* MVL_VAR_PROC *	*/
                    SD_TRUE);	/* ALWAYS copy name to var_assoc	*/
    if (var_assoc == NULL)
      SXLOG_ERR2 ("Cannot create LN='%s' in LD='%s'", scl_ln->varName, scl_ld->domName);
    else
      {
      var_assoc->flags = MVL_VAR_FLAG_UCA;	/* CRITICAL: must make it a UCA variable*/
      /* NOTE: var_assoc->use_static_data flag is automatically set	*/
      /*       by mvl_var_add because data is never NULL.		*/
      scl_ln->mvl_var_assoc = var_assoc;	/* save var_assoc for later*/
      retcode = SD_SUCCESS;
      }
    }
  return (retcode);
  }
/************************************************************************/
/*			scl2_dataset_create				*/
/* Create one DataSet (SCL_DATASET) for this Logical Node (SCL_LN).	*/
/* A DataSet maps to a MMS NamedVariableList (NVL).			*/
/* The MMS NVL name follows the form "LogicalNodeName$DataSetName".	*/
/* RETURNS:	SD_SUCCESS or error code				*/
/************************************************************************/
static ST_RET scl2_dataset_create (
	SCL_LD *scl_ld,
	SCL_LN *scl_ln,
	SCL_DATASET *scl_dataset)
  {
OBJECT_NAME nvl_obj;
MVL_NVLIST_CTRL *nvlist_ctrl;
OBJECT_NAME *var_obj;	/* array of var names	*/
SCL_FCDA *scl_fcda;
ST_RET ret;
/* allow extra char in var_name so strncat can go beyond limit. If it does, return error.*/
ST_CHAR *var_name_buf;	/* one buf allocated to hold all var names	*/
ST_CHAR *var_name;	/* ptr to current name being constructed	*/
ST_CHAR *dot_ptr;			/* ptr to '.' within var_name	*/
ST_CHAR nvl_name [MAX_IDENT_LEN+1];	/* one extra byte for NULL	*/
ST_INT num_var = 0;

  ret = SD_SUCCESS;	/* assume success	*/

  /* Construct NVL object name from LD, LN, and DataSet info.		*/
  if (strlen (scl_ln->prefix) + strlen (scl_ln->lnClass) + strlen (scl_ln->inst)
      + strlen (scl_dataset->name) + 1 > MAX_IDENT_LEN)
    {
    SXLOG_ERR1 ("Constructed NVL name would be too long for dataset '%s'.", scl_dataset->name);
    return (SD_FAILURE);
    }
  sprintf (nvl_name, "%s%s%s$%s", scl_ln->prefix, scl_ln->lnClass, scl_ln->inst, scl_dataset->name);
  nvl_obj.object_tag = DOM_SPEC;	/* ALWAYS Domain specific	*/
  nvl_obj.domain_id = scl_ld->domName;
  nvl_obj.obj_name.vmd_spec = nvl_name;	/* use constructed NVL name	*/ 

  /* Go through list once just to count number of variables.		*/
  for (scl_fcda = (SCL_FCDA *) list_find_last ((DBL_LNK *) scl_dataset->fcdaHead);
       scl_fcda != NULL;
       scl_fcda = (SCL_FCDA *) list_find_prev ((DBL_LNK *) scl_dataset->fcdaHead, (DBL_LNK *) scl_fcda))
    {
    num_var++;
    }
  /* Allocate var_obj array.	*/
  var_obj = chk_calloc (num_var, sizeof (OBJECT_NAME));

  /* NOTE: this is a bit tricky. OBJECT_NAME struct contains only a ptr
   *     to name, no storage. Need to allocate storage for names. Here we
   *     allocate one big buffer for all names. In the loop below,
   *     we use part of this buffer for each name.
   */
  var_name_buf = chk_calloc (num_var, MAX_IDENT_LEN+2);	/* Note +2 for NULL plus extra char*/

  /* Go through list again to fill in var_obj array.	*/
  num_var = 0;
  for (scl_fcda = (SCL_FCDA *) list_find_last ((DBL_LNK *) scl_dataset->fcdaHead);
       scl_fcda != NULL;
       scl_fcda = (SCL_FCDA *) list_find_prev ((DBL_LNK *) scl_dataset->fcdaHead, (DBL_LNK *) scl_fcda))
    {
    /* Set "var_name" pointing to proper section of big buffer.	*/
    var_name = var_name_buf + num_var*(MAX_IDENT_LEN+2);
    /* Fill in "var_name".	*/
    strncpy (var_name, scl_fcda->prefix, MAX_IDENT_LEN+1);
    strncat (var_name, scl_fcda->lnClass, MAX_IDENT_LEN+1-strlen(var_name));
    strncat (var_name, scl_fcda->lnInst,  MAX_IDENT_LEN+1-strlen(var_name));
    strncat (var_name, "$",               MAX_IDENT_LEN+1-strlen(var_name));
    strncat (var_name, scl_fcda->fc,      MAX_IDENT_LEN+1-strlen(var_name));
    if (strlen (scl_fcda->doName))
      {
      strncat (var_name, "$",              MAX_IDENT_LEN+1-strlen(var_name));
      strncat (var_name, scl_fcda->doName, MAX_IDENT_LEN+1-strlen(var_name));
      }
    if (strlen (scl_fcda->daName))
      {
      strncat (var_name, "$",              MAX_IDENT_LEN+1-strlen(var_name));
      strncat (var_name, scl_fcda->daName, MAX_IDENT_LEN+1-strlen(var_name));
      }
    /* doName or daName may contain '.'. Each '.' must be replaced with '$'.*/
    dot_ptr = var_name;
    while ((dot_ptr = strchr (dot_ptr, '.')) != NULL)
      *dot_ptr++ = '$';
    if (strlen (var_name) > MAX_IDENT_LEN)
      {
      SXLOG_ERR1 ("Variable name generated from FCDA info too long '%s'", var_name);
      ret = SD_FAILURE;
      break;	/* stop looping	*/
      }

    /* var_name generated, now fill in this "var_obj".	*/
    var_obj[num_var].object_tag = DOM_SPEC;	/* ALWAYS Domain specific	*/
    var_obj[num_var].domain_id = scl_fcda->domName;
    var_obj[num_var].obj_name.vmd_spec = var_name;
    num_var++;
    }

  if (ret == SD_SUCCESS)
    {
    nvlist_ctrl = mvl_nvl_add (&nvl_obj, NULL, num_var, var_obj, SD_TRUE);
    if (nvlist_ctrl)
      ret = SD_SUCCESS;
    else
      ret = SD_FAILURE;
    }
  /* NOTE: can free these now because mvl_nvl_add copied this info.*/
  chk_free (var_obj);
  chk_free (var_name_buf);
  return (ret);
  }
/************************************************************************/
/*			scl2_dataset_create_all				*/
/* Create all DataSets (SCL_DATASET) for this Logical Node (SCL_LN).	*/
/* RETURNS:	SD_SUCCESS or error code				*/
/************************************************************************/
static ST_RET scl2_dataset_create_all (
	SCL_LD *scl_ld,
	SCL_LN *scl_ln)
  {
SCL_DATASET *scl_dataset;
ST_RET ret;

  ret = SD_SUCCESS;	/* assume success	*/

  /* NOTE: linked list is in reverse order from data in SCL file,	*/
  /*       so get off list in reverse order.				*/
  for (scl_dataset = (SCL_DATASET *) list_find_last ((DBL_LNK *) scl_ln->datasetHead);
       scl_dataset != NULL;
       scl_dataset = (SCL_DATASET *) list_find_prev ((DBL_LNK *) scl_ln->datasetHead, (DBL_LNK *) scl_dataset))
    {
    ret = scl2_dataset_create (scl_ld, scl_ln, scl_dataset);
    if (ret)
      {
      SXLOG_ERR3 ("scl2_dataset_create FAILED for '%s' (LD=%s LN=%s)",
                  scl_dataset->name, scl_ld->domName, scl_ln->varName);
      break;	/* if one fails, stop processing	*/
      }
    else
      {
      SXLOG_FLOW3 ("scl2_dataset_create DONE for '%s' (LD=%s LN=%s)",
                  scl_dataset->name, scl_ld->domName, scl_ln->varName);
      }
    }
  return (ret);
  }
/************************************************************************/
/*			scl2_rcb_create					*/
/* RETURNS:	SD_SUCCESS or error code				*/
/************************************************************************/
static ST_RET scl2_rcb_create (
	SCL_INFO *scl_info,
	SCL_LD *scl_ld,
	SCL_LN *scl_ln,
	SCL_RCB *scl_rcb,
	SCL_RCB_COUNTERS *scl_rcb_counters,
	ST_UINT reportScanRate)	/* report scan rate (millisec)	*/
  {
ST_RET ret;
MVLU_RPT_CTRL *rpt_ctrl;
ST_CHAR basrcb_var_name [MAX_IDENT_LEN + 1];
ST_CHAR basrcb_type_name [MAX_IDENT_LEN + 1];	/* for setting leaf functions*/
ST_CHAR leaf_name [MAX_IDENT_LEN + 1];
MVL_VAR_ASSOC *base_va;
ST_INT rcb_type;
ST_INT buftim_action;
OBJECT_NAME base_var_oname;
OBJECT_NAME nvl_oname;
MVL_NVLIST_CTRL *nvl;
SCL_DATASET *scl_dataset;
ST_INT set_flags;	/* flags for mvlu_set_leaf_param_name	*/
ST_CHAR nvl_name [MAX_IDENT_LEN+1];

  /* Initialize basrcb_type_name. Add $BR.. or $RP.. later.	*/
  unique_type_name (scl_ld, scl_ln, basrcb_type_name, sizeof (basrcb_type_name));  

  scl_dataset = scl_find_dataset (scl_ln, scl_rcb->datSet);
  if (scl_dataset == NULL)
    {
    SXLOG_ERR1 ("scl2_rcb_create: datSet='%s' not found", scl_rcb->datSet);
    return (SD_FAILURE);
    }

  if (scl_rcb->buffered)
    rcb_type = RCB_TYPE_IEC_BRCB;
  else
    rcb_type = RCB_TYPE_IEC_URCB;

  /* Generate basrcb_var_name from SCL info. The code below should generate a unique
   * basrcb_var_name for every RCB in this LN.
   */
  strcpy (basrcb_var_name, scl_ln->varName);	/* never too long	*/
  if (scl_rcb->buffered)
    {
    strncat_safe (basrcb_var_name,  "$BR$", MAX_IDENT_LEN-strlen(basrcb_var_name));
    strncat_safe (basrcb_type_name, "$BR$", MAX_IDENT_LEN-strlen(basrcb_type_name));
    }
  else
    {
    strncat_safe (basrcb_var_name,  "$RP$", MAX_IDENT_LEN-strlen(basrcb_var_name));
    strncat_safe (basrcb_type_name, "$RP$", MAX_IDENT_LEN-strlen(basrcb_type_name));
    }
  /* Add RCB name (read from SCL file).	*/
  strncat_safe (basrcb_var_name,  scl_rcb->name, MAX_IDENT_LEN-strlen(basrcb_var_name));
  strncat_safe (basrcb_type_name, scl_rcb->name, MAX_IDENT_LEN-strlen(basrcb_type_name));

  /* Make sure there's room for longest suffix	*/
  if (strlen (basrcb_var_name) > (MAX_IDENT_LEN-sizeof("$TimeOfEntry")))
    {
    SXLOG_ERR1 ("BasRCB variable name '%s' too long", basrcb_var_name);
    return (SD_FAILURE);
    }
  if (strlen (basrcb_type_name) > (MAX_IDENT_LEN-sizeof("$TimeOfEntry")))
    {
    SXLOG_ERR1 ("BasRCB type name '%s' too long", basrcb_type_name);
    return (SD_FAILURE);
    }

  /* Find the "base_va". Needed as arg to mvlu_create_rpt_ctrl.	*/
  base_var_oname.object_tag = DOM_SPEC;
  base_var_oname.domain_id = scl_ld->domName;

  base_var_oname.obj_name.item_id = scl_ln->varName;
  base_va = mvl_find_va (&base_var_oname);
  if (base_va == NULL)
    {
    SXLOG_ERR1 ("Cannot find base variable='%s' for RCB", scl_ln->varName);
    return (SD_FAILURE);
    }

  /* Construct NVL object name from LD, LN, and DataSet info.		*/
  if (strlen (scl_ln->prefix) + strlen (scl_ln->lnClass) + strlen (scl_ln->inst)
      + strlen (scl_rcb->datSet) + 1 > MAX_IDENT_LEN)
    {
    SXLOG_ERR1 ("Constructed NVL name would be too long for dataset '%s'.", scl_rcb->datSet);
    return (SD_FAILURE);
    }
  sprintf (nvl_name, "%s%s%s$%s", scl_ln->prefix, scl_ln->lnClass, scl_ln->inst, scl_rcb->datSet);
  nvl_oname.object_tag = DOM_SPEC;
  nvl_oname.domain_id = scl_ld->domName;	/* domain name	*/
  nvl_oname.obj_name.item_id = nvl_name;	/* use constructed NVL name	*/ 
  nvl = mvl_find_nvl (&nvl_oname);
  if (nvl == NULL)
    {
    SXLOG_ERR3 ("Cannot find NVL '%s' in domain '%s' to create RCB '%s'", 
         nvl_oname.obj_name.item_id,
         nvl_oname.domain_id,
         basrcb_var_name);
    return (SD_FAILURE);
    }

  /* DEBUG: nothing in SCL to set buftim_action. Is there another way to get this info?	*/
  buftim_action = MVLU_RPT_BUFTIM_SEND_NOW;

  /* Set all leaf functions required to implement RCB.
   * NOTE: these leaf functions replace the default leaf functions
   *       set by "u_set_all_leaf_functions" when the datatype was created.
   */

  /* Use same flags for all leafs	*/
  set_flags = MVLU_SET_RD_FUN | MVLU_SET_WR_FUN | MVLU_SET_REF;

  /* Start with good return value & OR all returns together. If ANY call
   * to mvlu_set_leaf_param_name fails, this function will fail.
   */
  ret = SD_SUCCESS;
  /* CRITICAL: len of basrcb_type_name chked above, so none of these "sprintf"s
   * will cause leaf_name to be exceeded.
   */
  sprintf (leaf_name, "%s$RptID", basrcb_type_name);
  ret |= mvlu_set_leaf_param_name (set_flags,
          leaf_name,
          "mvlu_rptid_rd_ind_fun",
          "mvlu_rptid_wr_ind_fun",
          "");
  sprintf (leaf_name, "%s$RptEna", basrcb_type_name);
  ret |= mvlu_set_leaf_param_name (set_flags,
          leaf_name,
          "mvlu_rptena_rd_ind_fun",
          "mvlu_rptena_wr_ind_fun",
          "");
  if (!scl_rcb->buffered)	/* "Resv" only for Unbuffered	*/
    {
    sprintf (leaf_n

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区人人喊爽| 亚洲激情图片一区| 日韩午夜激情视频| 欧美女孩性生活视频| 欧美专区在线观看一区| 一本到不卡免费一区二区| 91污在线观看| 色哟哟在线观看一区二区三区| av亚洲精华国产精华| 99国产精品久| 欧洲国内综合视频| 欧美丝袜自拍制服另类| 欧美日韩国产综合一区二区| 欧美日韩国产精品自在自线| 欧美乱妇23p| 7777精品伊人久久久大香线蕉| 91精品欧美综合在线观看最新| 欧美一二三在线| 欧美成人精品二区三区99精品| 精品国产伦一区二区三区观看方式 | 亚洲最色的网站| 亚洲小少妇裸体bbw| 日韩激情在线观看| 狠狠色丁香久久婷婷综合_中| 国产一区二区美女诱惑| 成人精品电影在线观看| 91浏览器打开| 6080午夜不卡| 国产亚洲自拍一区| 18成人在线观看| 亚洲18影院在线观看| 蜜臀av国产精品久久久久| 国产精选一区二区三区| 一本大道久久a久久精品综合| 欧美日韩情趣电影| 精品国产不卡一区二区三区| 国产精品久久一级| 亚洲成人1区2区| 国产麻豆91精品| 色综合天天天天做夜夜夜夜做| 欧美日韩激情一区| 国产午夜精品理论片a级大结局 | 喷白浆一区二区| 国产成人免费高清| 在线亚洲一区二区| 精品国产sm最大网站免费看| 亚洲图片你懂的| 免费观看一级特黄欧美大片| 国产69精品久久久久毛片| 在线亚洲高清视频| 久久久久久一二三区| 久久99久久久久| 91女神在线视频| 日韩欧美视频在线| 亚洲免费观看高清完整版在线观看熊| 天天影视涩香欲综合网 | 91精品国产综合久久精品性色 | 亚洲综合丝袜美腿| 国产在线视频不卡二| 在线国产电影不卡| 久久久久久久久久久久久夜| 亚洲综合久久av| 国产成人精品免费在线| 欧美日本在线一区| 国产精品日韩成人| 六月丁香综合在线视频| 91成人免费在线| 日本一区二区高清| 美女久久久精品| 欧美伊人久久久久久久久影院 | 亚洲国产精品高清| 奇米色一区二区三区四区| 97精品国产露脸对白| www国产成人| 五月婷婷激情综合| 91浏览器打开| 国产日韩精品视频一区| 美女脱光内衣内裤视频久久网站| 91麻豆国产香蕉久久精品| 久久婷婷成人综合色| 天堂一区二区在线免费观看| 一本一本大道香蕉久在线精品| 国产丝袜欧美中文另类| 久久国产福利国产秒拍| 欧美美女直播网站| 亚洲综合在线视频| 91在线精品一区二区三区| 久久精品男人天堂av| 看片的网站亚洲| 91精品国产91久久久久久最新毛片| 一区二区三区在线视频免费观看 | 欧美成人精品3d动漫h| 婷婷综合久久一区二区三区| 欧美亚洲一区三区| 亚洲精品乱码久久久久久黑人 | 色综合久久六月婷婷中文字幕| 久久久噜噜噜久噜久久综合| 麻豆91在线播放免费| 日韩小视频在线观看专区| 日韩影院免费视频| 在线播放欧美女士性生活| 亚洲一二三四久久| 欧美色图天堂网| 亚洲h在线观看| 欧美三级在线看| 亚洲国产精品自拍| 欧美日韩一区二区欧美激情| 亚洲第四色夜色| 欧美日韩视频专区在线播放| 亚洲第一综合色| 欧美精品久久一区| 日日欢夜夜爽一区| 欧美一区二区三区免费视频| 美女在线观看视频一区二区| 日韩一区二区视频| 精品在线亚洲视频| 久久久久久久久一| 成人免费看视频| √…a在线天堂一区| 日本乱人伦一区| 午夜电影久久久| 日韩精品一区二区三区三区免费| 精品无人码麻豆乱码1区2区| 久久久久久黄色| 97久久超碰国产精品| 午夜伦理一区二区| 日韩欧美成人午夜| 成人丝袜18视频在线观看| 亚洲另类春色校园小说| 精品视频1区2区3区| 麻豆精品在线播放| 欧美激情一区二区在线| 91色乱码一区二区三区| 亚洲成人tv网| 2022国产精品视频| 99热99精品| 婷婷久久综合九色综合绿巨人| 日韩欧美亚洲国产另类| 成人福利视频在线| 亚洲国产欧美一区二区三区丁香婷 | 日韩三级精品电影久久久| 国产精品一区二区三区网站| 亚洲欧美福利一区二区| 91精品国产综合久久久久久漫画| 国产毛片精品一区| 亚洲精品日韩一| 精品国免费一区二区三区| 99精品视频在线免费观看| 丝袜诱惑制服诱惑色一区在线观看| 欧美精品一区二区三区四区| 色综合中文字幕| 精品一区二区免费| 亚洲免费av高清| 欧美成人video| 色综合色狠狠天天综合色| 久久99久久久久久久久久久| 亚洲美女一区二区三区| 日韩欧美精品在线| 91麻豆福利精品推荐| 免费av成人在线| 亚洲美女在线一区| 久久久久久久久久久久电影| 欧美日韩综合一区| 国产jizzjizz一区二区| 日本最新不卡在线| 日韩理论片一区二区| 久久综合久久综合亚洲| 欧美日韩精品三区| 99久久伊人久久99| 精品一区二区三区日韩| 亚洲mv在线观看| 亚洲美女视频在线| 国产日产精品一区| 在线综合亚洲欧美在线视频| 97se亚洲国产综合在线| 国产高清一区日本| 美女视频一区二区| 亚洲成人动漫精品| 樱桃国产成人精品视频| 国产日韩欧美精品综合| 日韩美女视频一区二区在线观看| 在线亚洲一区观看| 99久久精品免费看国产免费软件| 国产专区综合网| 蜜臀久久99精品久久久画质超高清| 樱桃视频在线观看一区| 亚洲欧洲日韩综合一区二区| 久久综合久久鬼色中文字| 制服丝袜在线91| 欧美日韩免费在线视频| 色视频成人在线观看免| jlzzjlzz欧美大全| 成人黄色小视频| 国产电影一区在线| 国产一区二区三区在线观看免费视频| 奇米影视一区二区三区小说| 偷窥少妇高潮呻吟av久久免费| 亚洲国产视频直播| 亚洲成av人片www| 亚洲午夜一二三区视频|