/* 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); } }
/* 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; } }
/* 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); } } } }
/* 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; }