Changeset 289

Show
Ignore:
Timestamp:
06/18/09 11:26:10 (15 years ago)
Author:
wrodgers
Message:

SML can now handle non-nested if statements in the format described by the XML. Nested conditionals and whiles soon to come

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • vtcross/trunk/src/service_management_layer/ServiceManagementLayer.cpp

    r288 r289  
    678678                    data.append((const char*) sqlite3_column_text(pStatement, 1));  
    679679                else { 
     680                    //TODO could do shell output here if not in DB 
    680681                    printf("data_DB:: Data not yet in DB.\n"); 
    681682                    rc=31337; 
     
    910911    char buffer[256]; 
    911912    char buffer1[256]; 
     913    char *token; 
    912914    int rc; 
    913915    char *errorMsg; 
     
    918920    LOG("ServiceManagementLayer:: Received PerformActiveMission command.\n"); 
    919921 
    920     int t = atoi(buffer); 
     922    int32_t t = atoi(buffer); 
    921923   // printf("****%d****\n", t); 
    922     for(int k = 0; k < t; k++) { 
     924    for(int32_t m = 0; m < t; m++) { 
    923925        //printf("data=%s\n", data_obsv.c_str()); 
    924926        memset(buffer1, 0, 256); 
     
    10011003   // printf("done\n"); 
    10021004    i=0; 
     1005    int32_t numstatements = 0; 
    10031006    data.clear(); 
    10041007    while(i < miss[activeMission].numServices) 
     
    10061009        if(miss[activeMission].services[i].name.compare("if")==0) 
    10071010        { 
    1008            // printf("L0:if detected\n"); 
     1011           //printf("L0:if detected\n"); 
    10091012            input.clear(); 
    10101013            check.clear(); 
    1011             if(!miss[activeMission].services[i].input[0].empty()){ 
    1012                 input=miss[activeMission].services[i].input[0]; 
    1013                 check = "1@true@"; 
     1014            int t; 
     1015            for(t = 0; t < 5; t++){ 
     1016                if(!miss[activeMission].services[i].output[t].empty()){ 
     1017                    //printf("i-numstmts = %d\n", i-numstatements-1); 
     1018                    input=miss[activeMission].services[i-numstatements-1].output[t]; 
     1019                    strcpy(_data_DB->command, "SELECT "); 
     1020                    strcat(_data_DB->command, _data_DB->tablename); 
     1021                    strcat(_data_DB->command, ".* from "); 
     1022                    strcat(_data_DB->command, _data_DB->tablename); 
     1023                    strcat(_data_DB->command, " where Tag=="); 
     1024                    sprintf(_data_DB->command, "%s'%s';", _data_DB->command, input.c_str()); 
     1025                    sqlite3_stmt * pStatement; 
     1026                    rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, -1, &pStatement, NULL); 
     1027                    if (rc == SQLITE_OK){  
     1028                        if (sqlite3_step(pStatement) == SQLITE_ROW) 
     1029                             data = (const char *) sqlite3_column_text(pStatement, 1);  
     1030                        else { 
     1031                                printf("1 data_DB:: Data not yet in DB.\n"); 
     1032                                rc=31337; 
     1033                        } 
     1034                    } else { 
     1035                        printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 
     1036                    } 
     1037                    sqlite3_finalize(pStatement); 
     1038                    //printf("data=%s\n", data.c_str()); 
     1039                    token = strtok((char *)data.c_str(), "@"); 
     1040                    token = strtok(NULL, "@"); 
     1041                    token = strtok(NULL, "@"); 
     1042                    //printf("data=%s\n", token); 
     1043                    break; 
     1044                } 
    10141045            } 
    1015             else{ 
    1016                 input=miss[activeMission].services[i].input[1]; 
    1017                 check = "1@false@"; 
     1046            //printf("L0:--- %s  %s---\n", miss[activeMission].services[i].output[t].c_str(), token); 
     1047            if(!miss[activeMission].services[i].output[t].compare(token)){ 
     1048                //printf("L0:if taken\n"); 
     1049                for(uint16_t k = i+1; k <= i+miss[activeMission].services[i].num_conds; k++){  
     1050                    //printf("transacting data for k=%d\n", k); 
     1051                    TransactData(k); 
     1052                } 
    10181053            } 
    1019             //printf("L0:input=%s\n", input.c_str()); 
    1020  
    1021             strcpy(_data_DB->command, "SELECT "); 
    1022             strcat(_data_DB->command, _data_DB->tablename); 
    1023             strcat(_data_DB->command, ".* from "); 
    1024             strcat(_data_DB->command, _data_DB->tablename); 
    1025             strcat(_data_DB->command, " where Tag=="); 
    1026             sprintf(_data_DB->command, "%s'%s';", _data_DB->command, input.c_str()); 
    1027             sqlite3_stmt * pStatement; 
    1028             rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, -1, &pStatement, NULL); 
    1029             if (rc == SQLITE_OK){  
    1030                 if (sqlite3_step(pStatement) == SQLITE_ROW) 
    1031                      data = (const char *) sqlite3_column_text(pStatement, 1);  
    1032                 else { 
    1033                         printf("1 data_DB:: Data not yet in DB. %d\n", i); 
    1034                         rc=31337; 
    1035                 } 
    1036             } else { 
    1037                 printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 
    1038             } 
    1039  
    1040             sqlite3_finalize(pStatement); 
    1041            // printf("L0:data=%s, check=%s\n", data.c_str(), check.c_str()); 
    1042            // printf("L0:--- %d  %d---\n", miss[activeMission].services[i].num_conds, i); 
    1043             if(data.compare(check)==0){ 
    1044                 //printf("L0:if taken\n"); 
    1045                  
    1046                 for(int k = i + 1; k <= i + miss[activeMission].services[i].num_conds; k++){ 
    1047                         //printf("k=%d\n", k); 
    1048                         if(miss[activeMission].services[k].name.compare("if")==0) 
    1049                         { 
    1050                             //printf("L1:if detected\n"); 
    1051                             input.clear(); 
    1052                             check.clear(); 
    1053                             if(!miss[activeMission].services[k].input[0].empty()){ 
    1054                                 input=miss[activeMission].services[k].input[0]; 
    1055                                 check = "1@true@"; 
    1056                             } 
    1057                             else{ 
    1058                                 input=miss[activeMission].services[k].input[1]; 
    1059                                 check = "1@false@"; 
    1060                             } 
    1061                             //printf("input=%s\n", input.c_str()); 
    1062  
     1054            numstatements +=miss[activeMission].services[i].num_conds+1; 
     1055            i+=miss[activeMission].services[i].num_conds; 
     1056            //printf("doneif %d, %d, %d\n", numstatements, miss[activeMission].services[i].num_conds, i); 
     1057        } 
     1058        else if(miss[activeMission].services[i].name.compare("while")==0) 
     1059        { 
     1060            numstatements=0; 
     1061            //printf("while detected\n"); 
     1062            while(true){ 
     1063                    data.clear(); 
     1064                    printf("L0:if detected\n"); 
     1065                    input.clear(); 
     1066                    check.clear(); 
     1067                    int t; 
     1068                    for(t = 0; t < 5; t++){ 
     1069                        if(!miss[activeMission].services[i].output[t].empty()){ 
     1070                            input=miss[activeMission].services[i-1].output[t]; 
    10631071                            strcpy(_data_DB->command, "SELECT "); 
    1064                             strcat(_data_DB->command, _data_DB->tablename); 
     1072                            strcat(_data_DB->command, _data_DB->tablename); 
    10651073                            strcat(_data_DB->command, ".* from "); 
    10661074                            strcat(_data_DB->command, _data_DB->tablename); 
    1067                             strcat(_data_DB->command, " where Tag=="); 
     1075                            strcat(_data_DB->command, " where Tag=="); 
    10681076                            sprintf(_data_DB->command, "%s'%s';", _data_DB->command, input.c_str()); 
    10691077                            sqlite3_stmt * pStatement; 
     
    10731081                                     data = (const char *) sqlite3_column_text(pStatement, 1);  
    10741082                                else { 
    1075                                         printf("1 data_DB:: Data not yet in DB. %d\n", k); 
     1083                                        printf("1 data_DB:: Data not yet in DB.\n"); 
    10761084                                        rc=31337; 
    10771085                                } 
     
    10791087                                printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 
    10801088                            } 
    1081  
    10821089                            sqlite3_finalize(pStatement); 
    1083                             //printf("L1:data=%s, check=%s\n", data.c_str(), check.c_str()); 
    1084                             //printf("L1:--- %d  %d---\n", miss[activeMission].services[i].num_conds, k); 
    1085                             if(data.compare(check)==0){ 
    1086                                 //printf("L1:if taken\n"); 
    1087                                 for(int j = k + 1; j <= k + miss[activeMission].services[k].num_conds; j++){ 
    1088                                    // printf("j=%d\n", k); 
    1089                                     //printf("name!!!! = %s\n", miss[activeMission].services[j].name.c_str()); 
    1090                                     if(miss[activeMission].services[j].name.compare("if")==0) 
    1091                                     { 
    1092                                            // printf("L2:if detected\n"); 
    1093                                             input.clear(); 
    1094                                             check.clear(); 
    1095                                             if(!miss[activeMission].services[j].input[0].empty()){ 
    1096                                                 input=miss[activeMission].services[j].input[0]; 
    1097                                                 check = "1@true@"; 
    1098                                             } 
    1099                                             else{ 
    1100                                                 input=miss[activeMission].services[j].input[1]; 
    1101                                                 check = "1@false@"; 
    1102                                             } 
    1103                                             //printf("L2:input=%s\n", input.c_str()); 
    1104  
    1105                                             strcpy(_data_DB->command, "SELECT "); 
    1106                                             strcat(_data_DB->command, _data_DB->tablename); 
    1107                                             strcat(_data_DB->command, ".* from "); 
    1108                                             strcat(_data_DB->command, _data_DB->tablename); 
    1109                                             strcat(_data_DB->command, " where Tag=="); 
    1110                                             sprintf(_data_DB->command, "%s'%s';", _data_DB->command, input.c_str()); 
    1111                                             sqlite3_stmt * pStatement; 
    1112                                             rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, -1, &pStatement, NULL); 
    1113                                             if (rc == SQLITE_OK){  
    1114                                                 if (sqlite3_step(pStatement) == SQLITE_ROW) 
    1115                                                      data = (const char *) sqlite3_column_text(pStatement, 1);  
    1116                                                 else { 
    1117                                                         printf("1 data_DB:: Data not yet in DB. %d\n", k); 
    1118                                                         rc=31337; 
    1119                                                 } 
    1120                                             } else { 
    1121                                                 printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 
    1122                                             } 
    1123  
    1124                                             sqlite3_finalize(pStatement); 
    1125                                            // printf("L2:data=%s, check=%s\n", data.c_str(), check.c_str()); 
    1126                                            // printf("L2:--- %d  %d---\n", miss[activeMission].services[i].num_conds, k); 
    1127                                             if(data.compare(check)==0){ 
    1128                                                 //printf("L2:if taken\n"); 
    1129                                                 for(int p = j + 1; p <= j + miss[activeMission].services[j].num_conds; p++) 
    1130                                                     TransactData(p); 
    1131                                             } 
    1132                                             else{ 
    1133                                                 //printf("L2:if not taken %d\n", miss[activeMission].services[j].num_conds); 
    1134                                             } 
    1135                                         j+=miss[activeMission].services[j].num_conds; 
    1136                                     } 
    1137  
    1138                                     else if(miss[activeMission].services[j].name.compare("while")==0) 
    1139                                     { 
    1140                                         //printf("while detected\n"); 
    1141                                         while(true){ 
    1142                                             data.clear(); 
    1143                                             input.clear(); 
    1144                                             check.clear(); 
    1145                                             if(!miss[activeMission].services[j].input[0].empty()){ 
    1146                                                 input=miss[activeMission].services[j].input[0]; 
    1147                                                 check = "1@true@"; 
    1148                                             } 
    1149                                             else{ 
    1150                                                 input=miss[activeMission].services[j].input[1]; 
    1151                                                 check = "1@false@"; 
    1152                                             } 
    1153                                             strcpy(_data_DB->command, "select "); 
    1154                                             strcat(_data_DB->command, _data_DB->tablename); 
    1155                                             strcat(_data_DB->command, ".* from "); 
    1156                                             strcat(_data_DB->command, _data_DB->tablename); 
    1157                                             strcat(_data_DB->command, " where Tag=="); 
    1158                                             sprintf(_data_DB->command, "%s'%s';", _data_DB->command, input.c_str()); 
    1159                                             sqlite3_stmt * pStatement; 
    1160                                             rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, -1, &pStatement, NULL); 
    1161                                             if (rc == SQLITE_OK){  
    1162                                                 if (sqlite3_step(pStatement) == SQLITE_ROW) 
    1163                                                     data = (const char *) sqlite3_column_text(pStatement, 1);  
    1164                                                 else  
    1165                                                     printf("1 data_DB:: Data not yet in DB. %d\n", i); 
    1166                                             }  
    1167                                             else { 
    1168                                                 printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 
    1169                                             } 
    1170  
    1171                                             sqlite3_finalize(pStatement); 
    1172                                             printf("data=%s, check=%s\n", data.c_str(), check.c_str()); 
    1173                                             if(data.compare(check)==0){ 
    1174                                                 printf("while taken\n"); 
    1175                                                 for(int p = j + 1; p <= j + miss[activeMission].services[j].num_conds; p++) 
    1176                                                     TransactData(p); 
    1177                                             } 
    1178                                             else{ 
    1179                                                 printf("while not taken %d\n", miss[activeMission].services[k].num_conds); 
    1180                                                  j+=miss[activeMission].services[j].num_conds; 
    1181                                                 break; 
    1182                                             } 
    1183                                         } 
    1184                                     } 
    1185                                     else{ 
    1186                                         printf("L2: nocond transact\n"); 
    1187                                         TransactData(j);} 
    1188                                     j++; 
    1189                                 } 
    1190                             } 
    1191                             else{ 
    1192                                 //printf("if not taken %d\n", miss[activeMission].services[k].num_conds); 
    1193                             } 
    1194                             k+=miss[activeMission].services[k].num_conds; 
     1090                            //printf("data=%s\n", data.c_str()); 
     1091                            token = strtok((char *)data.c_str(), "@"); 
     1092                            token = strtok(NULL, "@"); 
     1093                            token = strtok(NULL, "@"); 
     1094                            //printf("data=%s\n", token); 
     1095                            break; 
    11951096                        } 
    1196                         else if(miss[activeMission].services[k].name.compare("while")==0) 
    1197                         { 
    1198                             //printf("while detected\n"); 
    1199                             while(true){ 
    1200                                     data.clear(); 
    1201                                     input.clear(); 
    1202                                     check.clear(); 
    1203                                     if(!miss[activeMission].services[k].input[0].empty()){ 
    1204                                         input=miss[activeMission].services[k].input[0]; 
    1205                                         check = "1@true@"; 
    1206                                     } 
    1207                                     else{ 
    1208                                         input=miss[activeMission].services[k].input[1]; 
    1209                                         check = "1@false@"; 
    1210                                     } 
    1211                                     strcpy(_data_DB->command, "select "); 
    1212                                     strcat(_data_DB->command, _data_DB->tablename); 
    1213                                     strcat(_data_DB->command, ".* from "); 
    1214                                     strcat(_data_DB->command, _data_DB->tablename); 
    1215                                     strcat(_data_DB->command, " where Tag=="); 
    1216                                     sprintf(_data_DB->command, "%s'%s';", _data_DB->command, input.c_str()); 
    1217                                     sqlite3_stmt * pStatement; 
    1218                                     rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, -1, &pStatement, NULL); 
    1219                                     if (rc == SQLITE_OK){  
    1220                                         if (sqlite3_step(pStatement) == SQLITE_ROW) 
    1221                                             data = (const char *) sqlite3_column_text(pStatement, 1);  
    1222                                         else  
    1223                                             printf("1 data_DB:: Data not yet in DB. %d\n", i); 
    1224                                     }  
    1225                                     else { 
    1226                                         printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 
    1227                                     } 
    1228  
    1229                                     sqlite3_finalize(pStatement); 
    1230                                     printf("data=%s, check=%s\n", data.c_str(), check.c_str()); 
    1231                                     if(data.compare(check)==0){ 
    1232                                         printf("while taken\n"); 
    1233                                         for(int k = i + 1; k <= i + miss[activeMission].services[i].num_conds; k++) 
    1234                                             TransactData(k); 
    1235                                     } 
    1236                                     else{ 
    1237                                         printf("while not taken %d\n", miss[activeMission].services[k].num_conds); 
    1238                                         k+=miss[activeMission].services[k].num_conds; 
    1239                                         break; 
    1240                                     } 
    1241                             } 
     1097                    } 
     1098                    printf("L0:--- %s  %s---\n", miss[activeMission].services[i].output[t].c_str(), token); 
     1099                    if(!miss[activeMission].services[i].output[t].compare(token)){ 
     1100                        printf("L0:if taken\n"); 
     1101                        for(uint16_t k = i+i; k <= i+miss[activeMission].services[i].num_conds; k++){  
     1102                            TransactData(k); 
    12421103                        } 
    1243                         else{ 
    1244                             //printf("L1: nocond transact\n"); 
    1245                             TransactData(k);} 
    1246                         k++; 
    1247                 } 
     1104                    } 
     1105                    else 
     1106                        break; 
    12481107            } 
    1249             else{ 
    1250                 printf("La2 if not taken %d\n", miss[activeMission].services[i].num_conds); 
    1251             } 
    1252             //printf("i=%d\n", i); 
    12531108            i+=miss[activeMission].services[i].num_conds; 
    1254             //printf("i=%d\n", i); 
    1255         } 
    1256         else if(miss[activeMission].services[i].name.compare("while")==0) 
    1257         { 
    1258             //printf("while detected\n"); 
    1259             while(true){ 
    1260                     data.clear(); 
    1261                     input.clear(); 
    1262                     check.clear(); 
    1263                     if(!miss[activeMission].services[i].input[0].empty()){ 
    1264                         input=miss[activeMission].services[i].input[0]; 
    1265                         check = "1@true@"; 
    1266                     } 
    1267                     else{ 
    1268                         input=miss[activeMission].services[i].input[1]; 
    1269                         check = "1@false@"; 
    1270                     } 
    1271                     strcpy(_data_DB->command, "select "); 
    1272                     strcat(_data_DB->command, _data_DB->tablename); 
    1273                     strcat(_data_DB->command, ".* from "); 
    1274                     strcat(_data_DB->command, _data_DB->tablename); 
    1275                     strcat(_data_DB->command, " where Tag=="); 
    1276                     sprintf(_data_DB->command, "%s'%s';", _data_DB->command, input.c_str()); 
    1277                     sqlite3_stmt * pStatement; 
    1278                     rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, -1, &pStatement, NULL); 
    1279                     if (rc == SQLITE_OK){  
    1280                         if (sqlite3_step(pStatement) == SQLITE_ROW) 
    1281                             data = (const char *) sqlite3_column_text(pStatement, 1);  
    1282                         else  
    1283                             printf("1 data_DB:: Data not yet in DB. %d\n", i); 
    1284                     }  
    1285                     else { 
    1286                         printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 
    1287                     } 
    1288  
    1289                     sqlite3_finalize(pStatement); 
    1290                     //printf("data=%s, check=%s\n", data.c_str(), check.c_str()); 
    1291                     if(data.compare(check)==0){ 
    1292                         printf("while taken\n"); 
    1293                         for(int k = i + 1; k <= i + miss[activeMission].services[i].num_conds; k++) 
    1294                             TransactData(k); 
    1295                     } 
    1296                     else{ 
    1297                         printf("while not taken %d\n", miss[activeMission].services[i].num_conds); 
    1298                         i+=miss[activeMission].services[i].num_conds; 
    1299                         break; 
    1300                     } 
    1301             } 
     1109            //printf("doneif\n"); 
    13021110        } 
    13031111        else{ 
    1304            // printf("L0 nocond transact\n"); 
     1112            numstatements=0; 
     1113            //printf("L0 Neither if nor while\n"); 
    13051114            TransactData(i);} 
    13061115        i++; 
     
    14811290                            cond_array[2]++; 
    14821291                        } 
    1483                         if(!strcmp(pChild3->Value(), "shell")) { 
     1292                        if(!strcmp(pChild3->Value(), "shell") || conditional_2 != service_num) { 
    14841293                            mList[mission_num].services[conditional_2].name = pChild3->Value(); 
    1485                             mList[mission_num].services[conditional_2].output[0] = pChild3->Attribute("output1"); 
    1486                 //printf("2shell detected\n"); 
    1487                         } 
    1488                         else if(conditional_2 != service_num){ 
    1489                             mList[mission_num].services[conditional_2].name = pChild3->Value(); 
    1490                             if(pChild3->Attribute("input_t")) 
    1491                                 mList[mission_num].services[conditional_2].input[0] = pChild3->Attribute("input_t"); 
    1492                             if(pChild3->Attribute("input_f")) 
    1493                                 mList[mission_num].services[conditional_2].input[1] = pChild3->Attribute("input_f"); 
    14941294                        } 
    14951295                        else{ 
    14961296                            mList[mission_num].services[service_num].name = pChild3->Attribute("name"); 
     1297                        } 
    14971298                            if(pChild3->Attribute("input1")) 
    1498                                 mList[mission_num].services[service_num].input[0] = pChild3->Attribute("input1"); 
     1299                                mList[mission_num].services[conditional_2].input[0] = pChild3->Attribute("input1"); 
    14991300                            if(pChild3->Attribute("input2")) 
    1500                                 mList[mission_num].services[service_num].input[1] = pChild3->Attribute("input2"); 
     1301                                mList[mission_num].services[conditional_2].input[1] = pChild3->Attribute("input2"); 
    15011302                            if(pChild3->Attribute("input3")) 
    1502                                 mList[mission_num].services[service_num].input[2] = pChild3->Attribute("input3"); 
     1303                                mList[mission_num].services[conditional_2].input[2] = pChild3->Attribute("input3"); 
    15031304                            if(pChild3->Attribute("input4")) 
    1504                                 mList[mission_num].services[service_num].input[3] = pChild3->Attribute("input4"); 
     1305                                mList[mission_num].services[conditional_2].input[3] = pChild3->Attribute("input4"); 
    15051306                            if(pChild3->Attribute("input5")) 
    1506                                 mList[mission_num].services[service_num].input[4] = pChild3->Attribute("input5"); 
     1307                                mList[mission_num].services[conditional_2].input[4] = pChild3->Attribute("input5"); 
    15071308                            if(pChild3->Attribute("output1")) 
    1508                                 mList[mission_num].services[service_num].output[0] = pChild3->Attribute("output1"); 
     1309                                mList[mission_num].services[conditional_2].output[0] = pChild3->Attribute("output1"); 
    15091310                            if(pChild3->Attribute("output2")) 
    1510                                 mList[mission_num].services[service_num].output[1] = pChild3->Attribute("output2"); 
     1311                                mList[mission_num].services[conditional_2].output[1] = pChild3->Attribute("output2"); 
    15111312                            if(pChild3->Attribute("output3")) 
    1512                                 mList[mission_num].services[service_num].output[2] = pChild3->Attribute("output3"); 
     1313                                mList[mission_num].services[conditional_2].output[2] = pChild3->Attribute("output3"); 
    15131314                            if(pChild3->Attribute("output4")) 
    1514                                 mList[mission_num].services[service_num].output[3] = pChild3->Attribute("output4"); 
     1315                                mList[mission_num].services[conditional_2].output[3] = pChild3->Attribute("output4"); 
    15151316                            if(pChild3->Attribute("output5")) 
    1516                                 mList[mission_num].services[service_num].output[4] = pChild3->Attribute("output5"); 
    1517                         } 
     1317                                mList[mission_num].services[conditional_2].output[4] = pChild3->Attribute("output5"); 
    15181318                        mList[mission_num].services[conditional_2].num_conds = cond_array[2]; 
    15191319                        cond_array[1]+=cond_array[2]+1; 
     
    15241324                } 
    15251325                //printf("here\n"); 
    1526                 if(!strcmp(pChild2->Value(), "shell")) { 
     1326                if(!strcmp(pChild2->Value(), "shell") || conditional_1 != service_num) { 
    15271327                    mList[mission_num].services[conditional_1].name = pChild2->Value(); 
    1528                     mList[mission_num].services[conditional_1].output[0] = pChild2->Attribute("output1"); 
    1529                 //printf("1shell detected\n"); 
    1530                 } 
    1531                 else if(conditional_1 != service_num){ 
    1532                     mList[mission_num].services[conditional_1].name = pChild2->Value(); 
    1533                     if(pChild2->Attribute("input_t")) 
    1534                         mList[mission_num].services[conditional_1].input[0] = pChild2->Attribute("input_t"); 
    1535                     if(pChild2->Attribute("input_f")) 
    1536                         mList[mission_num].services[conditional_1].input[1] = pChild2->Attribute("input_f"); 
    15371328                } 
    15381329                else{ 
    15391330                    mList[mission_num].services[service_num].name = pChild2->Attribute("name"); 
    1540                     if(pChild2->Attribute("input1")) 
    1541                         mList[mission_num].services[service_num].input[0] = pChild2->Attribute("input1"); 
    1542                     if(pChild2->Attribute("input2")) 
    1543                         mList[mission_num].services[service_num].input[1] = pChild2->Attribute("input2"); 
     1331                } 
     1332                if(pChild2->Attribute("input1")) 
     1333                    mList[mission_num].services[conditional_1].input[0] = pChild2->Attribute("input1"); 
     1334                if(pChild2->Attribute("input2")) 
     1335                    mList[mission_num].services[conditional_1].input[1] = pChild2->Attribute("input2"); 
    15441336                    if(pChild2->Attribute("input3")) 
    1545                         mList[mission_num].services[service_num].input[2] = pChild2->Attribute("input3"); 
     1337                        mList[mission_num].services[conditional_1].input[2] = pChild2->Attribute("input3"); 
    15461338                    if(pChild2->Attribute("input4")) 
    1547                         mList[mission_num].services[service_num].input[3] = pChild2->Attribute("input4"); 
     1339                        mList[mission_num].services[conditional_1].input[3] = pChild2->Attribute("input4"); 
    15481340                    if(pChild2->Attribute("input5")) 
    1549                         mList[mission_num].services[service_num].input[4] = pChild2->Attribute("input5"); 
     1341                        mList[mission_num].services[conditional_1].input[4] = pChild2->Attribute("input5"); 
    15501342                    if(pChild2->Attribute("output1")) 
    1551                         mList[mission_num].services[service_num].output[0] = pChild2->Attribute("output1"); 
     1343                        mList[mission_num].services[conditional_1].output[0] = pChild2->Attribute("output1"); 
    15521344                    if(pChild2->Attribute("output2")) 
    1553                         mList[mission_num].services[service_num].output[1] = pChild2->Attribute("output2"); 
     1345                        mList[mission_num].services[conditional_1].output[1] = pChild2->Attribute("output2"); 
    15541346                    if(pChild2->Attribute("output3")) 
    1555                         mList[mission_num].services[service_num].output[2] = pChild2->Attribute("output3"); 
     1347                        mList[mission_num].services[conditional_1].output[2] = pChild2->Attribute("output3"); 
    15561348                    if(pChild2->Attribute("output4")) 
    1557                         mList[mission_num].services[service_num].output[3] = pChild2->Attribute("output4"); 
     1349                        mList[mission_num].services[conditional_1].output[3] = pChild2->Attribute("output4"); 
    15581350                    if(pChild2->Attribute("output5")) 
    1559                         mList[mission_num].services[service_num].output[4] = pChild2->Attribute("output5"); 
    1560                 } 
     1351                        mList[mission_num].services[conditional_1].output[4] = pChild2->Attribute("output5"); 
     1352            //printf("2%s %s\n", mList[mission_num].services[conditional_1].output[0].c_str(), mList[mission_num].services[conditional_1].output[1].c_str()); 
    15611353 
    15621354                mList[mission_num].services[conditional_1].num_conds = cond_array[1]; 
     
    15661358            } 
    15671359             
    1568             if(!strcmp(pChild1->Value(), "shell")) { 
    1569                 //printf("shell detected\n"); 
     1360            if(!strcmp(pChild1->Value(), "shell") || conditional_0 != service_num) { 
    15701361                mList[mission_num].services[conditional_0].name = pChild1->Value(); 
    1571                 mList[mission_num].services[conditional_0].output[0] = pChild1->Attribute("output1"); 
    1572             } 
    1573             else if(conditional_0 != service_num){ 
    1574                 mList[mission_num].services[conditional_0].name = pChild1->Value(); 
    1575                     if(pChild1->Attribute("input_t")) 
    1576                         mList[mission_num].services[conditional_0].input[0] = pChild1->Attribute("input_t"); 
    1577                     if(pChild1->Attribute("input_f")) 
    1578                         mList[mission_num].services[conditional_0].input[1] = pChild1->Attribute("input_f"); 
    1579                 //printf("---input_t=%s\n", mList[mission_num].services[conditional_0].input[0].c_str()); 
    15801362            } 
    15811363            else{ 
    15821364                mList[mission_num].services[conditional_0].name = pChild1->Attribute("name"); 
     1365            } 
    15831366                //printf("name=%s\n", mList[mission_num].services[conditional_0].name.c_str()); 
    15841367                if(pChild1->Attribute("input1")) 
    1585                     mList[mission_num].services[service_num].input[0] = pChild1->Attribute("input1"); 
     1368                    mList[mission_num].services[conditional_0].input[0] = pChild1->Attribute("input1"); 
    15861369                if(pChild1->Attribute("input2")) 
    1587                     mList[mission_num].services[service_num].input[1] = pChild1->Attribute("input2"); 
     1370                    mList[mission_num].services[conditional_0].input[1] = pChild1->Attribute("input2"); 
    15881371                if(pChild1->Attribute("input3")) 
    1589                     mList[mission_num].services[service_num].input[2] = pChild1->Attribute("input3"); 
     1372                    mList[mission_num].services[conditional_0].input[2] = pChild1->Attribute("input3"); 
    15901373                if(pChild1->Attribute("input4")) 
    1591                     mList[mission_num].services[service_num].input[3] = pChild1->Attribute("input4"); 
     1374                    mList[mission_num].services[conditional_0].input[3] = pChild1->Attribute("input4"); 
    15921375                if(pChild1->Attribute("input5")) 
    1593                     mList[mission_num].services[service_num].input[4] = pChild1->Attribute("input5"); 
     1376                    mList[mission_num].services[conditional_0].input[4] = pChild1->Attribute("input5"); 
    15941377                if(pChild1->Attribute("output1")) 
    1595                     mList[mission_num].services[service_num].output[0] = pChild1->Attribute("output1"); 
     1378                    mList[mission_num].services[conditional_0].output[0] = pChild1->Attribute("output1"); 
    15961379                if(pChild1->Attribute("output2")) 
    1597                     mList[mission_num].services[service_num].output[1] = pChild1->Attribute("output2"); 
     1380                    mList[mission_num].services[conditional_0].output[1] = pChild1->Attribute("output2"); 
    15981381                if(pChild1->Attribute("output3")) 
    1599                     mList[mission_num].services[service_num].output[2] = pChild1->Attribute("output3"); 
     1382                    mList[mission_num].services[conditional_0].output[2] = pChild1->Attribute("output3"); 
    16001383                if(pChild1->Attribute("output4")) 
    1601                     mList[mission_num].services[service_num].output[3] = pChild1->Attribute("output4"); 
     1384                    mList[mission_num].services[conditional_0].output[3] = pChild1->Attribute("output4"); 
    16021385                if(pChild1->Attribute("output5")) 
    16031386                    mList[mission_num].services[service_num].output[4] = pChild1->Attribute("output4"); 
    1604             } 
    1605  
     1387            //printf("1%s %s\n", mList[mission_num].services[conditional_0].output[0].c_str(), mList[mission_num].services[conditional_0].output[1].c_str()); 
    16061388            mList[mission_num].services[conditional_0].num_conds = cond_array[0]; 
    16071389            cond_array[0] = 0;