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

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

?? sclproc.c

?? scl解析文件,歡迎大家學(xué)習(xí)共享,解析算法值得學(xué)習(xí)
?? C
?? 第 1 頁 / 共 5 頁
字號:
  return (retcode);	/* NOTE: may have returned sooner on some errors*/
  }	/* end tdladd_go_or_gs	*/

/************************************************************************/
/*			tdladd_ms_or_us					*/
/* RETURNS:	SD_SUCCESS or error code				*/
/* Add the TDL for special FC=MS or FC=US at the current pointer	*/
/* (tdl_ctxt->tdlptr).							*/
/* Increase (tdl_ctxt->tdlptr) by the number of bytes added.		*/
/* Decrease (tdl_ctxt->len_avail) by the number of bytes added.		*/
/************************************************************************/
ST_CHAR *mscb_tdl = "{\
(SvEna)Bool,\
(MsvID)Vstring65,\
(DatSet)Vstring65,\
(ConfRev)Ulong,\
(SmpRate)Ushort,\
(OptFlds)BVstring3,\
(DstAddress){\
  (Addr)Ostring6,\
  (PRIORITY)Ubyte,\
  (VID)Ushort,\
  (APPID)Ushort,\
},\
},\n";	/* TDL for MsvCB (Sampled Value Control Block)	*/

ST_CHAR *uscb_tdl = "{\
(SvEna)Bool,\
(Resv)Bool,\
(UsvID)Vstring65,\
(DatSet)Vstring65,\
(ConfRev)Ulong,\
(SmpRate)Ushort,\
(OptFlds)BVstring3,\
},\n";	/* TDL for UsvCB (Sampled Value Control Block)	*/


static ST_RET tdladd_ms_or_us (
	TDLADD_CTXT *tdl_ctxt,
	SCL_INFO *scl_info,
	SCL_LNTYPE *scl_lntype,
	SCL_LN *scl_ln,
	ST_BOOLEAN multicast)	/* SD_TRUE to add GOOSE (FC=GO)		*/
				/* SD_FALSE to add GSSE (FC=GS)		*/
				/* CRITICAL: no other values allowed	*/
  {
SCL_SVCB *scl_svcb;
SCL_DATASET *scl_dataset;
ST_RET retcode = SD_SUCCESS;
ST_INT count = 0;

  for (scl_svcb = (SCL_SVCB *) list_find_last ((DBL_LNK *) scl_ln->svcbHead);
       scl_svcb != NULL;
       scl_svcb = (SCL_SVCB *) list_find_prev ((DBL_LNK *) scl_ln->svcbHead, (DBL_LNK *) scl_svcb))
  {
    /* If RCB doesn't match the kind we're looking for, ignore it.	*/
    if (scl_svcb->multicast != multicast)
      continue;
      /*Find dataset now.	*/
      scl_dataset = scl_find_dataset (scl_ln, scl_svcb->datSet);
      if (scl_dataset == NULL)
        {
        SXLOG_ERR1 ("tdladd_vs_or_us: datSet='%s' not found", scl_svcb->datSet);
        return (SD_FAILURE);
        }

    if (scl_svcb->multicast)
      {
      if (count==0)
        retcode = tdladd_string (tdl_ctxt, "(MS){\n(");	/* first one needs (GO)	*/
      else
        retcode = tdladd_string (tdl_ctxt, "(");
      }
    else
      {
      if (count==0)
        retcode = tdladd_string (tdl_ctxt, "(US){\n(");	/* first one needs (GS)	*/
      else
        retcode = tdladd_string (tdl_ctxt, "(");
      }

    if (retcode)		/* if error, stop	*/
      return (retcode);

    /* Add svcb name as component name.*/  
    if (tdladd_string (tdl_ctxt, scl_svcb->name)!=SD_SUCCESS)
      return (SD_FAILURE);	/* error (already logged)	*/

    if (tdladd_string (tdl_ctxt, ")")!=SD_SUCCESS)	/* add end of comp name	*/
      return (SD_FAILURE);	/* error (already logged)	*/

    /* NOTE: if NOT the type we're looking for, never get here (see 'continue' above)*/
    if (scl_svcb->multicast)	/* looking for MSV & this is MSV	*/
      retcode = tdladd_string (tdl_ctxt, mscb_tdl);
    else			/* looking for USV & this is USV	*/
      retcode = tdladd_string (tdl_ctxt, uscb_tdl);

    if (retcode)		/* if error, stop	*/
      return (retcode);	

    count++;	/* increment count of svcb	*/
    }	/* end loop	*/

  /* If any found, add ending text.	*/
  if (count>0)
    retcode = tdladd_string (tdl_ctxt, "},\n");

  return (retcode);	/* NOTE: may have returned sooner on some errors*/
  }	/* end tdladd_ms_or_us	*/

/************************************************************************/
/*			scl2_datatype_create				*/
/* Create MMS Data type for one Logical Node Type (LNodeType)		*/
/* defined in SCL.							*/
/* This function needs a user buffer for constructing TDL strings.	*/
/* TDL is generated by calling "tdladd_*" functions. A ptr to a		*/
/* TDLADD_CTXT structure is passed to each "tdladd_*" function.		*/
/* The structure is used to keep track of the current ptr in the TDL	*/
/* buffer and the space remaining in the buffer.			*/
/* RETURNS:	SD_SUCCESS or error code				*/
/************************************************************************/
static ST_RET scl2_datatype_create (
	SCL_INFO *scl_info,	/* main struct where all SCL info stored*/
	SCL_LNTYPE *scl_lntype,	/* info for this LNType			*/
	ST_CHAR *tdlbuf,	/* buffer to use for constructing TDL	*/
				/* reused for each LNType in list	*/
	size_t tdlbuflen,	/* len of tdlbuf buffer in bytes	*/
	SCL_LD *scl_ld_special,	/* LD containing LN with "special stuff"*/
				/* (i.e. ReportControl, LogControl, etc)*/
				/* NULL if nothing special in LN.	*/
	SCL_LN *scl_ln_special)	/* LN with "special stuff"		*/
				/* NULL if nothing special in LN.	*/
  {
ST_RET retcode;
ST_INT type_id;
TDLADD_CTXT tdl_ctxt;
MVL_TYPE_CTRL *type_ctrl;
ST_CHAR type_name[MAX_IDENT_LEN+2];	/* one extra byte for NULL, another to catch if limit exceeded*/

  /* Generate type_name.	*/
  if (scl_ln_special)
    {	/* Create unique type name for this LN.	*/
    unique_type_name (scl_ld_special, scl_ln_special, type_name, sizeof(type_name));
    }
  else
    strcpy (type_name, scl_lntype->id);	/* no RCBs. Use LNType "id".*/

/* Go through all linked lists and create COMPLETE TDL.	*/
/* NOTE: order of FC specified in 61850-8-1 (section 6.1.3).	*/

  /* Initialize tdl_ctxt struct.	*/
  tdl_ctxt.tdlptr = tdlbuf;
  tdl_ctxt.len_avail = tdlbuflen;
  tdl_ctxt.errflag = SD_FALSE;

  /* NOTE: SCL only allows "ST" "MX" "CO" "SG" "SE" "SV" "CF" "DC" "EX".*/
  /*       "RP", "LG", "GO", "GS", "SP", and "BR" are special cases.			*/
  do
    {	/* "do-while" loop: only needed so we can break on first error.	*/
    /* if any tdladd_* call fails, break and return error.	*/
    if ((retcode = tdladd_string (&tdl_ctxt, "{\n")) != SD_SUCCESS)
      break;
    if ((retcode = tdladd_fc (&tdl_ctxt, "MX", scl_info, scl_lntype)) != SD_SUCCESS)
      break;
    if ((retcode = tdladd_fc (&tdl_ctxt, "ST", scl_info, scl_lntype)) != SD_SUCCESS)
      break;
    if ((retcode = tdladd_fc (&tdl_ctxt, "CO", scl_info, scl_lntype)) != SD_SUCCESS)
      break;
    if ((retcode = tdladd_fc (&tdl_ctxt, "CF", scl_info, scl_lntype)) != SD_SUCCESS)
      break;
    if ((retcode = tdladd_fc (&tdl_ctxt, "DC", scl_info, scl_lntype)) != SD_SUCCESS)
      break;
    if (scl_ln_special)
      {
      /* FC=SP is special case. Call special function (last arg SD_TRUE).	*/ 
      if ((retcode = tdladd_sp (&tdl_ctxt, scl_info, scl_lntype, scl_ln_special)) != SD_SUCCESS)
        break;
      }
    if ((retcode = tdladd_fc (&tdl_ctxt, "SG", scl_info, scl_lntype)) != SD_SUCCESS)
      break;
  
    /* FC=RP is special case. Call special function.	*/
    if (scl_ln_special)
      {		/* special type for LN containing RCBs	*/
      if ((retcode = tdladd_rp_or_br (&tdl_ctxt, scl_info, scl_lntype, scl_ln_special, SD_FALSE)) != SD_SUCCESS)
        break;
      }

    /* FC=LG is special case. Call special function.	*/
    if (scl_ln_special)
      {
      if ((retcode = tdladd_lg (&tdl_ctxt, scl_info, scl_lntype, scl_ln_special)) != SD_SUCCESS)
        break;
      }

    /* FC=BR is special case. Call special function.	*/
    if (scl_ln_special)
      {		/* special type for LN containing RCBs	*/
      if ((retcode = tdladd_rp_or_br (&tdl_ctxt, scl_info, scl_lntype, scl_ln_special, SD_TRUE)) != SD_SUCCESS)
        break;
      }

    if (scl_ln_special)
      {
      /* FC=GO is special case. Call special function (last arg SD_TRUE).	*/ 
      if ((retcode = tdladd_go_or_gs (&tdl_ctxt, scl_info, scl_lntype, scl_ln_special, SD_TRUE)) != SD_SUCCESS)
        break;
      /* FC=GS is special case. Call special function (last arg SD_FALSE).	*/ 
      if ((retcode = tdladd_go_or_gs (&tdl_ctxt, scl_info, scl_lntype, scl_ln_special, SD_FALSE)) != SD_SUCCESS)
        break;
      }

    if ((retcode = tdladd_fc (&tdl_ctxt, "SV", scl_info, scl_lntype)) != SD_SUCCESS)
      break;
    if ((retcode = tdladd_fc (&tdl_ctxt, "SE", scl_info, scl_lntype)) != SD_SUCCESS)
      break;

    if (scl_ln_special)
      {
      /* FC=MS is special case. Call special function (last arg SD_TRUE).	*/ 
      if ((retcode = tdladd_ms_or_us (&tdl_ctxt, scl_info, scl_lntype, scl_ln_special, SD_TRUE)) != SD_SUCCESS)
        break;
       }
    /* DEBUG: add something here for "SC" someday.*/

    if (scl_ln_special)
      {
      /* FC=US is special case. Call special function (last arg SD_TRUE).	*/ 
      if ((retcode = tdladd_ms_or_us (&tdl_ctxt, scl_info, scl_lntype, scl_ln_special, SD_FALSE)) != SD_SUCCESS)
        break;
       }

    if ((retcode = tdladd_fc (&tdl_ctxt, "EX", scl_info, scl_lntype)) != SD_SUCCESS)
      break;
    if ((retcode = tdladd_string (&tdl_ctxt, "}")) != SD_SUCCESS)
      break;
    } while (0);	/* end of "do-while" loop: only needed so we can break on first error.	*/

  assert (tdlbuf + strlen(tdlbuf) == tdl_ctxt.tdlptr);
  assert (strlen(tdlbuf) < tdlbuflen);	/* memory already corrupted	*/
  assert (strlen(tdlbuf) + tdl_ctxt.len_avail == tdlbuflen);

  /* If retcode==SD_SUCCESS, ALL "tdladd_fc" calls were successful, so create type here	*/
  if (retcode == SD_SUCCESS)
    {
    /* NOTE: if generated type_name is > MAX_IDENT_LEN, this will fail.	*/
    type_id = mvl_type_id_create_from_tdl (type_name, tdlbuf);
    if (type_id < 0)
      retcode = SD_FAILURE;
    else
      {
      type_ctrl = mvl_type_ctrl_find (type_id);

      /* CRITICAL: we want the same leaf function for every leaf, so	*/
      /* set leaf functions now in every RUNTIME_TYPE element.		*/
      /* NOTE: leaf functions never used for RT_STR_START, RT_ARR_START,*/
      /*       etc. but they're set anyway because it's easier to set all.*/
      /* NOTE: this function may be customized for each application.	*/
      /*       It should be placed in a "user" module.			*/

      retcode = u_set_all_leaf_functions (type_ctrl->rt_ctrl,scl_lntype->lnClass,scl_lntype->id);
      }
    }

  /* NOTE: these may not log entire TDL unless default "sl_max_msg_size" is increased.*/
  if (retcode)
    SXLOG_ERR3 ("scl2_datatype_create FAILED for type_name=%s\nTDL len=%u\nTDL=%s",
                 type_name, strlen(tdlbuf), tdlbuf);
  else
    SXLOG_FLOW3 ("scl2_datatype_create SUCCESSFUL for type_name=%s\nTDL len=%u\nTDL=%s",
                 type_name, strlen(tdlbuf), tdlbuf);

  /* Don't need to save or return type_id. Use "mvl_typename_to_typeid" later to find it.*/
  return (retcode);
  }


/************************************************************************/
/*			scl2_datatype_create_all			*/
/* Create MMS Data types for all Logical Node Types (LNodeType)		*/
/* defined in SCL.							*/
/* This function needs a user buffer for constructing TDL strings.	*/
/* RETURNS:	SD_SUCCESS or error code				*/
/************************************************************************/
ST_RET scl2_datatype_create_all (
	SCL_INFO *scl_info,	/* main struct where all SCL info stored*/
	ST_CHAR *tdlbuf,	/* buffer to use for constructing TDL	*/
				/* reused for each LNType in list	*/
	size_t tdlbuflen)	/* len of tdlbuf buffer in bytes	*/
  {
ST_RET retcode;
SCL_LNTYPE *scl_lntype;
SCL_LD *scl_ld;
SCL_LN *scl_ln;

  /* NOTE: linked list is in reverse order from data in SCL file,	*/
  /*     so get off list in reverse order.				*/
  for (scl_lntype = (SCL_LNTYPE *) list_find_last ((DBL_LNK *) scl_info->lnTypeHead);
       scl_lntype != NULL;
       scl_lntype = (SCL_LNTYPE *) list_find_prev ((DBL_LNK *) scl_info->lnTypeHead, (DBL_LNK *) scl_lntype))
    {
    retcode = scl2_datatype_create (scl_info, scl_lntype, tdlbuf, tdlbuflen, NULL, NULL);
    if (retcode)	/* error (already logged)	*/
      break;	/* if one fails, stop processing	*/
    /* Find all Logical Nodes that use this type. For each one that
     * contains "special stuff" (i.e. ReportControl, LogControl, GSEControl),
     * create a special type that includes the "special stuff".
     * Must check all Logical Nodes (scl_ln) in all Logical Devices (scl_ld).
     */ 
    for (scl_ld = (SCL_LD *) list_find_last ((DBL_LNK *) scl_info->ldHead);
         scl_ld != NULL;
         scl_ld = (SCL_LD *) list_find_prev ((DBL_LNK *) scl_info->ldHead, (DBL_LNK *) scl_ld))
      {
      for (scl_ln = (SCL_LN *) list_find_last ((DBL_LNK *) scl_ld->lnHead);
           scl_ln != NULL;
           scl_ln = (SCL_LN *) list_find_prev ((DBL_LNK *) scl_ld->lnHead, (DBL_LNK *) scl_ln))
        {
        /* If rcbHead!=NULL, this LN contains ReportControl.		*/
        /* If lcbHead!=NULL, this LN contains LogControl.		*/
        /* If gcbHead!=NULL, this LN contains GSEControl.		*/
        /* If sgcbHead!=NULL, this LN contains SGControl.		*/
        /* NOTE: do nothing if it fails. Detected later when rcb created.*/
        if ((scl_ln->rcbHead || scl_ln->lcbHead || scl_ln->gcbHead || scl_ln->sgcbHead || scl_ln->svcbHead) &&
            strcmp (scl_ln->lnType, scl_lntype->id) == 0)
          {
          /* Last 2 args point to LD & LN containing special info (rcb, gcb, etc.).*/
          scl2_datatype_create (scl_info, scl_lntype, tdlbuf, tdlbuflen, scl_ld, scl_ln);
          }
        }
      }
    }
  return (retcode);
  }

/************************************************************************/
/*			scl2_ln_create			*/
/* RETURNS:	SD_SUCCESS or error code				*/
/************************************************************************/
static ST_RET scl2_ln_create (
	SCL_INFO *scl_info,	/* main struct where all SCL info stored*/
	SCL_LD *scl_ld,
	SCL_LN *scl_ln)
  {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久久久久免费看 | 69久久99精品久久久久婷婷| 国产精品少妇自拍| 成人97人人超碰人人99| 日韩毛片高清在线播放| 色综合久久综合中文综合网| 亚洲国产精品人人做人人爽| 欧美精选一区二区| 欧美日韩成人一区二区| 亚洲成人黄色小说| 精品欧美一区二区久久| 国产成人精品一区二| 中文字幕一区免费在线观看| 日本国产一区二区| 麻豆精品一区二区三区| 久久久久久夜精品精品免费| 99精品一区二区| 午夜精品一区二区三区免费视频 | 日本不卡中文字幕| 精品sm在线观看| 成人av网在线| 亚洲午夜久久久久久久久电影网| 欧美一区欧美二区| 国产成人精品三级| 亚洲在线成人精品| 精品美女被调教视频大全网站| 国产成人精品亚洲777人妖 | 亚洲国产精品久久不卡毛片 | 欧美日韩精品系列| 国产大陆a不卡| 亚洲伊人色欲综合网| 欧美va亚洲va香蕉在线| 成人app在线观看| 亚洲不卡av一区二区三区| 国产视频一区在线播放| 91九色最新地址| 国产精品一区二区91| 亚洲第一激情av| 久久免费看少妇高潮| 欧洲av在线精品| 国产精品538一区二区在线| 亚洲午夜久久久久久久久电影网| 精品国产精品一区二区夜夜嗨| 91视频国产观看| 国精产品一区一区三区mba视频| 一区二区三区在线不卡| 久久精品视频在线看| 欧美日韩精品欧美日韩精品| 不卡在线视频中文字幕| 久久精品国产一区二区| 亚洲图片自拍偷拍| 综合久久综合久久| 国产欧美日韩综合| 精品久久久久久久久久久久久久久久久| 成人一区在线看| 国产一区欧美二区| 奇米在线7777在线精品 | 91精品国产乱码久久蜜臀| 99riav久久精品riav| 国产精品456露脸| 蜜芽一区二区三区| 91精品国产色综合久久| 亚洲午夜电影在线| 日日嗨av一区二区三区四区| www.亚洲激情.com| 日韩一区中文字幕| 欧美日韩在线精品一区二区三区激情 | 亚洲激情图片qvod| 日韩午夜精品视频| 麻豆精品视频在线观看| 国产精品久久久久久久久搜平片 | 欧美日韩精品系列| 国产精品久久久久桃色tv| 538prom精品视频线放| 在线这里只有精品| 91偷拍与自偷拍精品| jiyouzz国产精品久久| 成人午夜视频福利| 国产成人免费高清| 成人伦理片在线| 成人精品国产免费网站| 成人av在线播放网站| av电影在线不卡| 91麻豆精品视频| 在线观看视频一区二区欧美日韩| 色国产综合视频| 91福利区一区二区三区| 欧美私人免费视频| 欧美日韩情趣电影| 欧美日韩国产另类不卡| 91麻豆精品国产91久久久资源速度 | 日韩情涩欧美日韩视频| 日韩欧美中文字幕制服| 精品国产乱码久久久久久久久| 久久蜜臀精品av| 国产精品网站在线| 亚洲老妇xxxxxx| 五月天一区二区| 韩国中文字幕2020精品| 成人精品免费视频| 欧美天堂一区二区三区| 日韩一级二级三级精品视频| 精品国产乱码久久久久久1区2区 | 91一区二区在线观看| 欧美日韩中文字幕一区| 欧美一区二区黄| 国产欧美日韩精品一区| 一区二区三区日韩| 蜜桃av噜噜一区| 成人动漫一区二区在线| 欧美四级电影网| 久久久久国产精品免费免费搜索| 国产精品毛片久久久久久| 亚洲一区av在线| 韩国女主播一区| 国产精品你懂的在线| 亚洲午夜电影在线观看| 国产主播一区二区三区| 一本一道久久a久久精品综合蜜臀| 欧美性猛交xxxxxx富婆| 久久精品亚洲精品国产欧美kt∨| 国产精品国产三级国产a| 日本中文字幕一区二区视频| 成人午夜电影网站| 777欧美精品| 日韩码欧中文字| 久久电影网站中文字幕| 色噜噜狠狠一区二区三区果冻| 欧美一级二级三级蜜桃| 国产精品成人免费精品自在线观看 | 国产在线精品不卡| 欧美在线啊v一区| 国产欧美日韩综合精品一区二区 | 亚洲视频一二三区| 精品在线你懂的| 欧美日韩一区二区电影| 成人免费视频在线观看| 麻豆专区一区二区三区四区五区| 成人黄色软件下载| 精品电影一区二区三区| 亚洲高清不卡在线观看| 99久久精品免费| 久久久亚洲精品一区二区三区| 亚洲成人激情自拍| 成人avav影音| 欧美激情中文字幕一区二区| www久久久久| 色欧美乱欧美15图片| 亚洲777理论| 国产福利精品一区二区| 91精品蜜臀在线一区尤物| 亚洲欧洲一区二区三区| 国产精品正在播放| 欧美va亚洲va| 日韩高清一区在线| 69p69国产精品| 亚洲成人一二三| 欧美在线小视频| 一区二区三区成人| 一本到一区二区三区| 国产精品福利电影一区二区三区四区 | 日韩欧美国产高清| 日韩精品久久理论片| 欧美视频在线一区二区三区 | 久久久久久久免费视频了| 青青草91视频| 精品国产人成亚洲区| 另类小说一区二区三区| 日韩精品影音先锋| 国产在线视频一区二区三区| 精品国产乱码久久久久久浪潮 | 欧美日本在线视频| 香蕉成人伊视频在线观看| 欧美高清视频一二三区| 日韩电影网1区2区| 日韩午夜在线观看| 国产一区视频在线看| 国产精品色呦呦| 91美女视频网站| 亚洲va韩国va欧美va| 欧美一区2区视频在线观看| 久久精品国产亚洲5555| 亚洲精品一区二区三区影院| 国产精品性做久久久久久| 亚洲国产精品av| 色吊一区二区三区| 欧美色窝79yyyycom| 免费观看30秒视频久久| 久久久九九九九| aa级大片欧美| 五月婷婷另类国产| 欧美精品一区二区三区视频| 国产成人亚洲综合a∨婷婷图片| 中文字幕一区二区在线播放| 色激情天天射综合网| 蜜臀av性久久久久蜜臀av麻豆| 久久影院视频免费| 91丨九色丨蝌蚪丨老版| 日本中文一区二区三区| 国产亚洲一本大道中文在线|