A scripting environment used to define precise output/input temporal relationships.
Dependencies: SMARTWAV mbed HelloWorld
Dependents: perturbRoom_legacy
Fork of HelloWorld by
Diff: behave.cpp
- Revision:
- 3:ae33b7f5a7c1
- Parent:
- 2:298679fff37c
- Child:
- 4:34aca2142df9
diff -r 298679fff37c -r ae33b7f5a7c1 behave.cpp --- a/behave.cpp Tue Jul 08 21:51:16 2014 +0000 +++ b/behave.cpp Sat Jul 19 03:03:36 2014 +0000 @@ -770,6 +770,7 @@ } void intOperation::set(int* intVarInput, const char* cmpString, int cmpValInput) { + intVal = intVarInput; cmpVal = new int(cmpValInput); randHigh = -1; @@ -810,6 +811,7 @@ } void intOperation::set(int* intVarInput, intOperation* operationInput) { + intVal = intVarInput; cmpVal = NULL; randHigh = -1; @@ -841,11 +843,14 @@ int intOperation::execute() { + return (this->*executePtr)(); + } int intOperation::add() { + if (intVal != NULL) { return (*intVal + *cmpVal); } @@ -900,6 +905,7 @@ *intVal = *cmpVal; return *intVal; } else if ((intVal != NULL) && (opPtr != NULL)) { + *intVal = opPtr->execute(); return *intVal; } else if (cmpVal != NULL){ @@ -2870,8 +2876,9 @@ action* tmpAction = evaluateAssignmentForAction(tmpString); - if (tmpAction != NULL) { + if (tmpAction != NULL) { tmpAction->execute(); + //delete tmpAction; tmpAction->release(); } else { @@ -3043,9 +3050,9 @@ } else { //tmpMessage->setMessage(portVector[portnum],1,-1); if (tmpVar == NULL) { //a constant port number was given - tmpMessage->setMessage(NULL,portnum,portVal); + tmpMessage->setMessage(NULL,portnum,-1); } else { - tmpMessage->setMessage(tmpVar,0,portVal); + tmpMessage->setMessage(tmpVar,0,-1); } } tmpAction->set(tmpMessage); @@ -3126,27 +3133,37 @@ tmpOp->set(tmpVar, multiplier.data(), atoi(afterEqual.substr(stringInd2+1,std::string::npos).data())); } tmpAction->set(tmpOp); - //pcPtr->printf("Action: change variable by constant amount\r\n"); + pcPtr->printf("Action: change variable by constant amount\r\n"); } else { - //tmpOp2 = new intOperation(tmpVar2,multiplier.data(), atoi(afterEqual.substr(stringInd2+1,std::string::npos).data())); - //tmpOp = new intOperation(tmpVar, tmpOp2); - tmpOp = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); + tmpOp2 = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); - if ((tmpOp == NULL)||(tmpOp2 == NULL)) { + if (tmpOp2 == NULL) { pcPtr->printf("Error: no memory slots available.\r\n"); tmpAction->release(); return NULL; } else { + tmpOp2->set(tmpVar2,multiplier.data(), atoi(afterEqual.substr(stringInd2+1,std::string::npos).data())); + //tmpOp->set(tmpVar, tmpOp2); + } + + tmpOp = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); + if (tmpOp == NULL) { + pcPtr->printf("Error: no memory slots available.\r\n"); + tmpOp2->release(); + tmpAction->release(); + return NULL; + } else { tmpOp->set(tmpVar, tmpOp2); - } + } + tmpAction->set(tmpOp); //pcPtr->printf("Action: variable equals expression\r\n"); } } else if ((tmpVar3 != NULL) && isNumber(afterEqual.substr(0,stringInd2))) { //number +/- variable if (tmpVar3 == tmpVar) { - multiplier.append("="); + multiplier.append("="); //makes "+=" or "-=" //tmpOp = new intOperation(tmpVar, multiplier.data(), atoi(afterEqual.substr(0,stringInd2).data())); tmpOp = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); if (tmpOp == NULL) { @@ -3159,16 +3176,23 @@ tmpAction->set(tmpOp); //pcPtr->printf("Action: change variable by constant amount\r\n"); } else { - //tmpOp2 = new intOperation(tmpVar3, multiplier.data(), atoi(afterEqual.substr(0, stringInd2).data())); - //tmpOp = new intOperation(tmpVar, tmpOp2); - tmpOp = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); + tmpOp2 = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); - if ((tmpOp == NULL)||(tmpOp2 == NULL)) { + if (tmpOp2 == NULL) { pcPtr->printf("Error: no memory slots available.\r\n"); tmpAction->release(); return NULL; } else { - tmpOp2->set(tmpVar3, multiplier.data(), atoi(afterEqual.substr(0, stringInd2).data())); + tmpOp2->set(tmpVar3, multiplier.data(), atoi(afterEqual.substr(0, stringInd2).data())); + } + tmpOp = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); + + if (tmpOp == NULL) { + pcPtr->printf("Error: no memory slots available.\r\n"); + tmpOp2->release(); + tmpAction->release(); + return NULL; + } else { tmpOp->set(tmpVar, tmpOp2); } tmpAction->set(tmpOp); @@ -3176,16 +3200,24 @@ } } else if ((tmpVar2 != NULL) && (tmpVar3 != NULL)) { //variable +/- variable - //tmpOp2 = new intOperation(tmpVar2, multiplier.data(), tmpVar3); - //tmpOp = new intOperation(tmpVar, tmpOp2); - tmpOp = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); + tmpOp2 = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); - if ((tmpOp == NULL)||(tmpOp2 == NULL)) { + if (tmpOp2 == NULL) { pcPtr->printf("Error: no memory slots available.\r\n"); tmpAction->release(); return NULL; } else { - tmpOp2->set(tmpVar2, multiplier.data(), tmpVar3); + tmpOp2->set(tmpVar2, multiplier.data(), tmpVar3); + } + tmpOp = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); + + if (tmpOp == NULL) { + pcPtr->printf("Error: no memory slots available.\r\n"); + tmpOp2->release(); + tmpAction->release(); + return NULL; + } else { + tmpOp->set(tmpVar, tmpOp2); } tmpAction->set(tmpOp); @@ -3208,16 +3240,24 @@ int highVal = getRandomParam(afterEqual.substr(0,stringInd2)); if (highVal > 0) { - //tmpOp2 = new intOperation(highVal, multiplier.data(), atoi(afterEqual.substr(stringInd2+1,std::string::npos).data())); - //tmpOp = new intOperation(tmpVar, tmpOp2); - tmpOp = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); + + tmpOp2 = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); - if ((tmpOp == NULL)||(tmpOp2 == NULL)) { + if (tmpOp2 == NULL) { pcPtr->printf("Error: no memory slots available.\r\n"); tmpAction->release(); return NULL; } else { - tmpOp2->set(highVal, multiplier.data(), atoi(afterEqual.substr(stringInd2+1,std::string::npos).data())); + tmpOp2->set(highVal, multiplier.data(), atoi(afterEqual.substr(stringInd2+1,std::string::npos).data())); + } + tmpOp = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); + + if (tmpOp == NULL) { + pcPtr->printf("Error: no memory slots available.\r\n"); + tmpOp2->release(); + tmpAction->release(); + return NULL; + } else { tmpOp->set(tmpVar, tmpOp2); } tmpAction->set(tmpOp); @@ -3231,16 +3271,23 @@ int highVal = getRandomParam(afterEqual.substr(0,stringInd2)); if (highVal > 0) { - //tmpOp2 = new intOperation(highVal, multiplier.data(), tmpVar3); - //tmpOp = new intOperation(tmpVar, tmpOp2); - tmpOp = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); + + tmpOp2 = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); - if ((tmpOp == NULL)||(tmpOp2 == NULL)) { + if (tmpOp2 == NULL) { pcPtr->printf("Error: no memory slots available.\r\n"); tmpAction->release(); return NULL; } else { - tmpOp2->set(highVal, multiplier.data(), tmpVar3); + tmpOp2->set(highVal, multiplier.data(), tmpVar3); + } + tmpOp = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); + if (tmpOp == NULL) { + pcPtr->printf("Error: no memory slots available.\r\n"); + tmpOp2->release(); + tmpAction->release(); + return NULL; + } else { tmpOp->set(tmpVar, tmpOp2); } tmpAction->set(tmpOp); @@ -3256,16 +3303,23 @@ int highVal = getRandomParam(afterEqual.substr(stringInd2+1,std::string::npos)); if (highVal > 0) { - //tmpOp2 = new intOperation(highVal, multiplier.data(), atoi(afterEqual.substr(0, stringInd2).data())); - //tmpOp = new intOperation(tmpVar, tmpOp2); - tmpOp = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); + + tmpOp2 = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); - if ((tmpOp == NULL)||(tmpOp2 == NULL)) { + if (tmpOp2 == NULL) { pcPtr->printf("Error: no memory slots available.\r\n"); tmpAction->release(); return NULL; } else { - tmpOp2->set(highVal, multiplier.data(), atoi(afterEqual.substr(0, stringInd2).data())); + tmpOp2->set(highVal, multiplier.data(), atoi(afterEqual.substr(0, stringInd2).data())); + } + tmpOp = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); + if (tmpOp == NULL) { + pcPtr->printf("Error: no memory slots available.\r\n"); + tmpOp2->release(); + tmpAction->release(); + return NULL; + } else { tmpOp->set(tmpVar, tmpOp2); } tmpAction->set(tmpOp); @@ -3279,16 +3333,23 @@ int highVal = getRandomParam(afterEqual.substr(stringInd2+1,std::string::npos)); if (highVal > 0) { - //tmpOp2 = new intOperation(highVal, multiplier.data(), tmpVar2); - //tmpOp = new intOperation(tmpVar, tmpOp2); - tmpOp = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); + + tmpOp2 = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); - if ((tmpOp == NULL)||(tmpOp2 == NULL)) { + if (tmpOp2 == NULL) { pcPtr->printf("Error: no memory slots available.\r\n"); tmpAction->release(); return NULL; } else { - tmpOp2->set(highVal, multiplier.data(), tmpVar2); + tmpOp2->set(highVal, multiplier.data(), tmpVar2); + } + tmpOp = findFirstUnUsed(intOperationBlock, NUMINTOPERATIONS); + if (tmpOp == NULL) { + pcPtr->printf("Error: no memory slots available.\r\n"); + tmpOp2->release(); + tmpAction->release(); + return NULL; + } else { tmpOp->set(tmpVar, tmpOp2); } tmpAction->set(tmpOp);