⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 u_ijou.c

📁 ICCP Toolkit 是在 Tru64下开发Tase.2通信协议的开发包
💻 C
📖 第 1 页 / 共 5 页
字号:
DOMAIN_OBJS 	*pstDomObj;ST_CHAR 	*jrnlName;ST_BOOLEAN	bDone;int		numEntries, i, j;VAR_INFO	*viLocal, *viSend;int		startEntryNum, stopEntryNum, entryNum;ST_BOOLEAN	bHaveStartTime, bHaveStartEntry;ST_BOOLEAN	bHaveStopTime, bHaveStopEntry;ST_BOOLEAN	bHaveSaTime, bHaveSaEntry;ST_BOOLEAN	bSendNegResp = SD_FALSE, bSendVarTag;ST_CHAR 	**ppVarTags;  pstReqInfo = (JREAD_REQ_INFO *) req_info->req_info_ptr;  chan = req_info->chan;  /* find the requested journal						*/  if (pstReqInfo->jou_name.object_tag == AA_SPEC)    {    pstDomObj = mms_chan_info[chan].objs.aa_objs;    jrnlName = pstReqInfo->jou_name.obj_name.aa_spec;    }  else if (pstReqInfo->jou_name.object_tag == DOM_SPEC)    {    pstDomObj = ms_find_dom_objs (&pstReqInfo->jou_name, chan);    jrnlName = pstReqInfo->jou_name.obj_name.item_id;    }  else    {    pstDomObj = &m_vmd_select->vmd_wide;    jrnlName = pstReqInfo->jou_name.obj_name.vmd_spec;    }      pstJrnl = ms_find_journal (pstDomObj, jrnlName);  if (!pstJrnl)    {    mp_err_resp (req_info, 2, 1);    return;    }  /* read the journal							*/  /* If we can't read the journal we are assuming that the journal 	*/  /* exists but has no entry content written in the journal cfg file	*/  if (readJrnlFile (pstJrnl->usr) != SD_SUCCESS)    {    pstRespInfo = (JREAD_RESP_INFO *) dest_buffer;    pstRespInfo->num_of_jou_entry = 0;    pstRespInfo->more_follows = SD_FALSE;    mp_jread_resp (req_info, pstRespInfo);    freeLocalJrnl ();    return;    }  if (localJrnlLevel == 0)    /* nav testing */    startEntryNum = EMPTY_JOURNAL;  /* organize the filter criteria					*/  bHaveStartTime = SD_FALSE;  bHaveStartEntry = SD_FALSE;  bHaveStopTime = SD_FALSE;  bHaveStopEntry = SD_FALSE;  bHaveSaTime = SD_FALSE;  bHaveSaEntry =SD_FALSE;  if (pstReqInfo->range_start_pres)    {    if (pstReqInfo->start_tag == 0)      bHaveStartTime = SD_TRUE;    else if (pstReqInfo->start_tag == 1)      bHaveStartEntry = SD_TRUE;    }  if (pstReqInfo->range_stop_pres)    {    if (pstReqInfo->stop_tag == 0)      bHaveStopTime = SD_TRUE;    else if (pstReqInfo->stop_tag == 1)      bHaveStopEntry = SD_TRUE;    }  if (pstReqInfo->sa_entry_pres)    {    bHaveSaTime = SD_TRUE;    if (pstReqInfo->entry_spec_len >0)      bHaveSaEntry = SD_TRUE;    }  /* determine eligible journal entries using filter criteria		*/  /* a startEntryNum == -1 indicates an empty journal			*/  startEntryNum = (localJrnlLevel == 0) ? EMPTY_JOURNAL : 0;     stopEntryNum = localJrnlLevel-1;  /* consider start range filter					*/  if (bHaveStartTime)    {    if (!bHaveStopTime && !bHaveStopEntry)      startEntryNum = getFirstTS (&pstReqInfo->start_time, 0);    else if (bHaveStopTime)      {      if (compareMmsBtod (&pstReqInfo->end_time, &pstReqInfo->start_time) >=0)        startEntryNum = getFirstTS (&pstReqInfo->start_time, 0);      else        startEntryNum = getLastTS (&pstReqInfo->start_time);      }     else if (bHaveStopEntry)       {       if (pstReqInfo->num_of_entries > 0)         startEntryNum = getFirstTS (&pstReqInfo->start_time, 0);       else         startEntryNum = getLastTS (&pstReqInfo->start_time);       }    }  if (bHaveStartEntry)    {    i=0;    bDone = SD_FALSE;    while (i<localJrnlLevel && !bDone)      {      if ((pstLocalJrnl[i]->entry_id_len == pstReqInfo->start_entry_len) &&          (memcmp (pstLocalJrnl[i]->entry_id, pstReqInfo->start_entry,    	   	   pstReqInfo->start_entry_len) >= 0) )        bDone = SD_TRUE;      else        i++;      }    if (bDone)      startEntryNum = i;    }  /* find the stop entry using filters					*/  if (bHaveStopTime && startEntryNum != EMPTY_JOURNAL)      {    if (compareMmsBtod (&pstReqInfo->end_time,     			&pstLocalJrnl[startEntryNum]->ent_content.occur_time)			>= 0)      {      if (bHaveStartTime &&         (compareMmsBtod (&pstReqInfo->start_time, &pstReqInfo->end_time) > 0))	startEntryNum = EMPTY_JOURNAL;      else        stopEntryNum = getLastTS (&pstReqInfo->end_time);             }    else      {      if (bHaveStartTime &&         (compareMmsBtod (&pstReqInfo->start_time, &pstReqInfo->end_time) <= 0))	startEntryNum = EMPTY_JOURNAL;      else	stopEntryNum = getFirstTS (&pstReqInfo->end_time, 0);      }    }  if (bHaveStopEntry && startEntryNum != EMPTY_JOURNAL)    {    if (pstReqInfo->num_of_entries <0 )      stopEntryNum = startEntryNum +pstReqInfo->num_of_entries + 1;    else      stopEntryNum = startEntryNum + pstReqInfo->num_of_entries - 1;    stopEntryNum = max (stopEntryNum, 0);    stopEntryNum = min (stopEntryNum, localJrnlLevel);    }  if (bHaveSaTime && startEntryNum != EMPTY_JOURNAL)    {    if (startEntryNum <= stopEntryNum)	/* chronological return	*/      {      entryNum = getFirstTS (&pstReqInfo->time_spec, startEntryNum) +1 ;       startEntryNum = (entryNum <= stopEntryNum) ? entryNum : EMPTY_JOURNAL;      }    else      {      entryNum = getFirstTS (&pstReqInfo->time_spec, stopEntryNum) - 1;      startEntryNum = (entryNum > stopEntryNum) ? entryNum : EMPTY_JOURNAL;      }    }  if (bHaveSaEntry && (startEntryNum != EMPTY_JOURNAL))    {    i=startEntryNum;    bDone = SD_FALSE;    while (i<localJrnlLevel && !bDone)      {      if ((pstLocalJrnl[i]->entry_id_len == pstReqInfo->entry_spec_len) &&          (memcmp (pstLocalJrnl[i]->entry_id, pstReqInfo->entry_spec,    	   	   pstReqInfo->entry_spec_len) > 0) )        bDone = SD_TRUE;      else        i++;      }    if (bDone)      startEntryNum = i;    }  if (startEntryNum >= localJrnlLevel)     startEntryNum = EMPTY_JOURNAL;  /* check for resp err							*/  if (bSendNegResp)    {    mp_err_resp (req_info, 7, 2);    freeLocalJrnl ();    return;    }  /* check for empty journal						*/  if (startEntryNum == EMPTY_JOURNAL)    {    pstRespInfo = (JREAD_RESP_INFO *) dest_buffer;    pstRespInfo->num_of_jou_entry = 0;    pstRespInfo->more_follows = SD_FALSE;    mp_jread_resp (req_info, pstRespInfo);    freeLocalJrnl ();    return;    }  /* prepare the response using the list of eligible entries		*/  pstRespInfo = (JREAD_RESP_INFO *) dest_buffer;  pstRespInfo->more_follows = SD_FALSE;  pstJE   = (JOURNAL_ENTRY *) (pstRespInfo + 1);  ppVarTags = (ST_CHAR **) (pstReqInfo + 1);  numEntries = 0;  i = startEntryNum;  bDone = SD_FALSE;  while (!bDone)    {    pstLJE = pstLocalJrnl[i];    if (pstReqInfo->list_of_var_pres)      {      bSendVarTag = SD_FALSE;      if ((pstLJE->ent_content.entry_form_tag == 2)  &&           pstLJE->ent_content.ef.data.list_of_var_pres)        {        viLocal = (VAR_INFO *) (pstLJE + 1);        j=0;        while ((j < pstLJE->ent_content.ef.data.num_of_var) && !bSendVarTag)          {          bSendVarTag = findVarTag (viLocal->var_tag,           			    pstReqInfo->num_of_var,				    ppVarTags);          j++;          viLocal++;          }        }      }    else      bSendVarTag = SD_TRUE;    if (bSendVarTag)      {      numEntries++;      memcpy (pstJE, pstLJE, sizeof (JOURNAL_ENTRY));      if ((pstJE->ent_content.entry_form_tag == 2)  &&           pstJE->ent_content.ef.data.list_of_var_pres)        {        viSend = (VAR_INFO *) (pstJE + 1);        viLocal = (VAR_INFO *) (pstLJE + 1);        numVars=0;	          for (j=0; j<pstJE->ent_content.ef.data.num_of_var; j++, viLocal++)          {	  memcpy (viSend, viLocal, sizeof (VAR_INFO));	  viSend++;	  numVars++;	  }        pstJE->ent_content.ef.data.num_of_var = numVars;        if (numVars == 0)          pstJE->ent_content.ef.data.list_of_var_pres = SD_FALSE;        pstJE = (JOURNAL_ENTRY *) viSend;        }      else        pstJE++;      }    if (stopEntryNum < startEntryNum)      {      i--;      if (i < stopEntryNum)        bDone = SD_TRUE;      }    else      {      i++;      if (i > stopEntryNum)        bDone = SD_TRUE;      }    if (!bDone && (numEntries >= MAX_ENTRIES_PER_RESP))      {      bDone = SD_TRUE;      pstRespInfo->more_follows = SD_TRUE;      }    }  pstRespInfo->num_of_jou_entry = numEntries;  mp_jread_resp (req_info, pstRespInfo);  freeLocalJrnl ();  }/************************************************************************//* WRITE JOURNAL							*//************************************************************************/#if MMS_JWRITE_EN & RESP_ENST_VOID u_jwrite_ind (MMSREQ_IND *req_info)  {JWRITE_REQ_INFO *ptr;ENTRY_CONTENT   *ec_ptr;VAR_INFO        *vi_ptr;ST_INT ch, i, j;  if (mms_debug_sel & MMS_LOG_USR_IND)    {    indic_info_print (req_info,"Write Journal ");    ptr    = (JWRITE_REQ_INFO *) req_info->req_info_ptr;    ec_ptr = (ENTRY_CONTENT *) (ptr + 1);    if (ptr->num_of_jou_entry > 0)      {      printf ("\n\n Press return to continue");      ch = get_a_char ();      CLEARSCR;      printf ("\n Journal Name            : ");      print_objname (&(ptr->jou_name));      printf ("\n No. of Journal Entries  : %d ", ptr->num_of_jou_entry);      }    else      {      printf ("\n Journal Name            : ");      print_objname (&(ptr->jou_name));      printf ("\n No. of Journal Entries  : %d ", ptr->num_of_jou_entry);      }    for (i=0; i < ptr->num_of_jou_entry; i++)      {      printf ("\n\nEntry %3d)", i+1);      printf ("\nOccurrence Time  : ");      print_evt_tod (&ec_ptr->occur_time);      printf ("\nAdditional Detail: ");      if (ec_ptr->addl_detail_pres)	list_bytes (ec_ptr->addl_detail,ec_ptr->addl_detail_len);      else	printf ("Not Present");      printf ("\nEntry form tag   : %d, ", ec_ptr->entry_form_tag);      switch (ec_ptr->entry_form_tag)	{	case  2 :	  printf ("data");	  break;	case  3 :	  printf ("annotation");	  break;	}      if (ec_ptr->entry_form_tag == 3)		/* form = annotation	*/        {        printf ("\nAnnotation       : %s", ec_ptr->ef.annotation);        }      else					/* form == data		*/        {        if (ec_ptr->ef.data.event_pres)	  {	  printf ("\nEvent Condition Name  : ");	  print_objname (&(ec_ptr->ef.data.evcon_name));	  printf ("\nCurrent State         : %d - ",		  ec_ptr->ef.data.cur_state);	  switch (ec_ptr->ef.data.cur_state)	    {	    case  0 :	      printf ("disabled");	      break;	    case  1 :	      printf ("idle");	      break;	    case  2 :	      printf ("active");	      break;	    }          }        else          printf ("\nEvent                 : Not Present");        if (ec_ptr->ef.data.list_of_var_pres)	  {	  vi_ptr = (VAR_INFO *) (ec_ptr + 1);	  printf ("Number of Variables   : %d", ec_ptr->ef.data.num_of_var);	  for (j=0; j < ec_ptr->ef.data.num_of_var ; j++)	    {	    printf ("\nVariable Tag        : %s", vi_ptr->var_tag);	    printf ("\nValue Specification : ");	    list_bytes (vi_ptr->value_spec.data,vi_ptr->value_spec.len);	    }		/* end of variable list loop			*/          }		/* end of IF variable list present		*/        else          printf ("\nList of Variables     : Not Present");        }   		/* end of DATA form				*/      if ((i+1) < ptr->num_of_jou_entry)	printf ("\nPress return for next entry content, x to exit");      else	printf ("\nPress return to continue                      ");      ch = get_a_char ();      if (ch == 'x' || ch == 'X')	i = ptr->num_of_jou_entry;		/* exit selected	*/      else	{	vi_ptr	= (VAR_INFO *) (ec_ptr + 1);	vi_ptr += ec_ptr->ef.data.num_of_var;	ec_ptr	= (ENTRY_CONTENT *) vi_ptr;	}      }		/* End of Journal Entry Loop				*/    mp_jwrite_resp (req_info);			/* send the response	*/    }  else    sendJwriteResp (req_info);  indic_info_wait ();			/* allow user to see indic info */  }#endif/************************************************************************//* sendJwriteResp:  add JWrite data to the local journal		*//************************************************************************/static ST_VOID sendJwriteResp (MMSREQ_IND *req_info)  {JWRITE_REQ_INFO *pstReqInfo;ST_INT 		chan;DOMAIN_OBJS 	*pstDomObj;ST_CHAR 	*jrnlName;JOURNAL_ENTRY   *pstJE; JOURNAL		*pstJrnl;ENTRY_CONTENT   *pstEC;int 		i, j, numVars = 0, entrySize, len;ST_CHAR		buf[1024];ST_UCHAR	*temp, *tmp;  VAR_INFO	*viIn, *viOut;APP_REF		stAppRef;  pstReqInfo = (JWRITE_REQ_INFO *) req_info->req_info_ptr;  chan = req_info->chan;   /* find the requested journal						*/  if (pstReqInfo->jou_name.object_tag == AA_SPEC)    {    pstDomObj = mms_chan_info[chan].objs.aa_objs;    jrnlName = pstReqInfo->jou_name.obj_name.aa_spec;    }  else if (pstReqInfo->jou_name.object_tag == DOM_SPEC)    {    pstDomObj = ms_find_dom_objs (&pstReqInfo->jou_name, chan);    jrnlName = pstReqInfo->jou_name.obj_name.item_id;    }  else    {    pstDomObj = &m_vmd_select->vmd_wide;    jrnlName = pstReqInfo->jou_name.obj_name.vmd_spec;    }      pstJrnl = ms_find_journal (pstDomObj, jrnlName);  if (!pstJrnl)    {    mp_err_resp (req_info, 2, 1);    return;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -