Beispiel #1
0
/* VIManager_SList_addArc: add arc */
static void VIManager_SList_addArc(VIManager_SList *l, int index_s1, int index_s2, char *isymbol, char *osymbol)
{
   int i, idx;
   VIManager_State *s1, *s2;
   VIManager_Arc *a1, *a2;
   VIManager_AList *arc_list;

   char type[MMDAGENT_MAXBUFLEN];
   char **args = NULL;
   int argc = 0;
   char otype[MMDAGENT_MAXBUFLEN];
   char oargs[MMDAGENT_MAXBUFLEN];

   s1 = VIManager_SList_searchState(l, index_s1);
   s2 = VIManager_SList_searchState(l, index_s2);
   arc_list = &s1->arc_list;

   /* analysis input symbol */
   idx = 0;
   i = getArgFromString(isymbol, &idx, type);
   if (i <= 0)
      return;
   getArgs(&isymbol[idx], &args, &argc);

   /* analysis output symbol */
   idx = 0;
   i = getArgFromString(osymbol, &idx, otype);
   if (i <= 0)
      return;
   getTokenFromString(osymbol, &idx, oargs);

   /* create */
   a1 = (VIManager_Arc *) calloc(1, sizeof(VIManager_Arc));
   VIManager_Arc_initialize(a1, type, args, argc, otype, oargs, s2);

   /* set */
   if (arc_list->head == NULL) {
      arc_list->head = a1;
   } else {
      for (a2 = arc_list->head; a2->next != NULL; a2 = a2->next);
      a2->next = a1;
   }

   /* free buffer */
   if (argc > 0) {
      for (i = 0; i < argc; i++)
         free(args[i]);
      free(args);
   }
}
Beispiel #2
0
/* VIManager_SList_addArc: add arc */
static void VIManager_SList_addArc(VIManager_SList *l, int index_s1, int index_s2, char *isymbol, char *osymbol)
{
   int i, idx;
   VIManager_State *s1, *s2;
   VIManager_Arc *a1, *a2;
   VIManager_AList *arc_list;

   char itype[MMDAGENT_MAXBUFLEN];
   char iargs[MMDAGENT_MAXBUFLEN];
   char otype[MMDAGENT_MAXBUFLEN];
   char oargs[MMDAGENT_MAXBUFLEN];

   s1 = VIManager_SList_searchState(l, index_s1);
   s2 = VIManager_SList_searchState(l, index_s2);
   arc_list = &s1->arc_list;

   /* analysis input symbol */
   idx = 0;
   i = getArgFromString(isymbol, &idx, itype, VIMANAGER_SEPARATOR1);
   if (i <= 0)
      return;
   getTokenFromString(isymbol, &idx, iargs);

   /* analysis output symbol */
   idx = 0;
   i = getArgFromString(osymbol, &idx, otype, VIMANAGER_SEPARATOR1);
   if (i <= 0)
      return;
   getTokenFromString(osymbol, &idx, oargs);

   /* create */
   a1 = (VIManager_Arc *) malloc(sizeof(VIManager_Arc));
   VIManager_Arc_initialize(a1, itype, iargs, otype, oargs, s2);

   /* set */
   if (arc_list->head == NULL) {
      arc_list->head = a1;
   } else {
      for (a2 = arc_list->head; a2->next != NULL; a2 = a2->next);
      a2->next = a1;
   }
}
Beispiel #3
0
/* InputArguments_initialize: initialize input arguments */
void InputArguments_initialize(InputArguments *ia, const char *str)
{
   int i, j, idx1, idx2;
   char buff1[MMDAGENT_MAXBUFLEN];
   char buff2[MMDAGENT_MAXBUFLEN];

   /* get number of arguments */
   ia->size = countArgs(str, VIMANAGER_SEPARATOR1);
   if(ia->size <= 0) {
      ia->size = 0;
      ia->args = NULL;
      ia->argc = NULL;
      return;
   }

   ia->argc = (int *) malloc(ia->size * sizeof(int));
   ia->args = (char ***) malloc(ia->size * sizeof(char **));

   /* get event arguments */
   idx1 = 0;
   for(i = 0; i < ia->size; i++) {
      getArgFromString(str, &idx1, buff1, VIMANAGER_SEPARATOR1);

      ia->argc[i] = countArgs(buff1, VIMANAGER_SEPARATOR2);
      if(ia->argc[i] <= 0) {
         ia->args[i] = NULL;
      } else {
         ia->args[i] = (char **) malloc(ia->argc[i] * sizeof(char *));
         idx2 = 0;
         for(j = 0; j < ia->argc[i]; j++) {
            getArgFromString(buff1, &idx2, buff2, VIMANAGER_SEPARATOR2);
            ia->args[i][j] = MMDAgent_strdup(buff2);
         }
      }
   }
}
Beispiel #4
0
/* getArgs: get event arguments */
static int getArgs(const char *str, char ***args, int *argc)
{
   int i, j, len, idx = 0;
   char buff[MMDAGENT_MAXBUFLEN];

   if (str == NULL) {
      (*argc) = 0;
      (*args) = NULL;
      return 0;
   }

   len = MMDAgent_strlen(str);
   if (len <= 0) {
      (*argc) = 0;
      (*args) = NULL;
      return 0;
   }

   /* get number of separator */
   (*argc) = 1;
   for (i = 0; i < len; i++)
      if (str[i] == VIMANAGER_SEPARATOR1 || str[i] == VIMANAGER_SEPARATOR2)
         (*argc)++;
   (*args) = (char **) calloc((*argc), sizeof(char *));
   for (i = 0; i < (*argc); i++)
      (*args)[i] = NULL;

   /* get event arguments */
   for (i = 0; i < (*argc); i++) {
      j = getArgFromString(str, &idx, buff);
      (*args)[i] = (char *) calloc(j + 1, sizeof(char));
      strcpy((*args)[i], buff);
   }

   return 1;
}