Advertisement
asqapro

RobotCgen - main

Jul 10th, 2013
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.33 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <sstream>
  5. #include <vector>
  6. #include <map>
  7. #include <algorithm>
  8. #include <wx/msgdlg.h>
  9. #include "RobotCGenMain.h"
  10. #include "RobotCGenApp.h"
  11.  
  12. using namespace std;
  13.  
  14. void joystick(string input, string motor, string spec, string power);
  15. void button(string input, string motor, string spec, string power);
  16. void makeMotor(string motor);
  17.  
  18. int taskTabs;
  19. int loopTabs;
  20.  
  21. string tab(string which){
  22.     string tabString = "";
  23.     if(which == "task"){
  24.         for(int x = 0; x < taskTabs; x++){
  25.             tabString += "\t";
  26.         }
  27.     }
  28.     else{
  29.         for(int x = 0; x < taskTabs + loopTabs; x++){
  30.             tabString += "\t";
  31.         }
  32.     }
  33.     return tabString;
  34. }
  35.  
  36. vector<string> mainTask;
  37. vector<string> mainLoop;
  38. vector<string>::iterator mT, mL;
  39.  
  40. ofstream program;
  41.  
  42. map<string, string> controllerBtns;
  43. map<string, string> controllerJSticks;
  44. map<string, string>::iterator it1, it2;
  45.  
  46. vector<string> specKeyWords;
  47.  
  48. vector<string> motors;
  49. vector<string>::iterator mot;
  50.  
  51. bool process(wxString wxInput, wxString wxMotor, wxString wxSpecial, wxString wxPower){
  52.     string input = string(wxInput.mb_str());
  53.     string motor = string(wxMotor.mb_str());
  54.     string special = string(wxSpecial.mb_str());
  55.     string power = string(wxPower.mb_str());
  56.  
  57.     if(motor != ""){
  58.         motor += "Motor";
  59.         if(find(motors.begin(), motors.end(), motor) == motors.end()){
  60.             motors.push_back(motor);
  61.         }
  62.     }
  63.     it1 = controllerBtns.find(input);
  64.     it2 = controllerJSticks.find(input);
  65.     if(it1 != controllerBtns.end()){
  66.         button(input, motor, special, power);
  67.         return false;
  68.     }
  69.     else if(it2 != controllerJSticks.end()){;
  70.         joystick(input, motor, special, power);
  71.         return false;
  72.     }
  73.     else{
  74.         for(mT = mainTask.begin(); mT != mainTask.end(); ++mT){
  75.             program << *mT;
  76.         }
  77.         for(mL = mainLoop.begin(); mL != mainLoop.end(); ++mL){
  78.             program << *mL;
  79.         }
  80.         loopTabs -= 1;
  81.         program << tab("loop") + "}\n";
  82.         program << "}";
  83.         program.close();
  84.  
  85.         for(mot = motors.begin(); mot != motors.end(); ++mot){
  86.             makeMotor(*mot);
  87.         }
  88.         return true;
  89.     }
  90. }
  91.  
  92. vector<string> splitString(string sentence){
  93.     string buf; // Have a buffer string
  94.     stringstream ss(sentence); // Insert the string into a stream
  95.  
  96.     vector<string> tokens; // Create vector to hold our words
  97.  
  98.     while (ss >> buf)
  99.         tokens.push_back(buf);
  100.  
  101.     return tokens;
  102. }
  103.  
  104. void setup(){
  105.     controllerJSticks["Ch1"] = "vexRT[Ch1]";
  106.     controllerJSticks["Ch2"] = "vexRT[Ch2]";
  107.     controllerJSticks["Ch3"] = "vexRT[Ch3]";
  108.     controllerJSticks["Ch4"] = "vexRT[Ch4]";
  109.     controllerBtns["5U"] = "vexRT[5U]";
  110.     controllerBtns["5D"] = "vexRT[5D]";
  111.     controllerBtns["6U"] = "vexRT[6U]";
  112.     controllerBtns["6D"] = "vexRT[6D]";
  113.     controllerBtns["7U"] = "vexRT[7U]";
  114.     controllerBtns["7D"] = "vexRT[7D]";
  115.     controllerBtns["7L"] = "vexRT[7L]";
  116.     controllerBtns["7R"] = "vexRT[7R]";
  117.     controllerBtns["8U"] = "vexRT[8U]";
  118.     controllerBtns["8D"] = "vexRT[8D]";
  119.     controllerBtns["8L"] = "vexRT[8L]";
  120.     controllerBtns["8R"] = "vexRT[8R]";
  121.  
  122.     specKeyWords.push_back("const");
  123.  
  124.     program.open("robotCode.c");
  125.     mainTask.push_back("task main(){\n");
  126.     taskTabs += 1;
  127.     mainLoop.push_back(tab("task") + "while(true){\n");
  128.     loopTabs += 1;
  129. }
  130.  
  131. void joystick(string input, string motor, string spec, string power){
  132.     mainLoop.push_back(tab("loop") + motor + " = vexRT[" + input + "];\n");
  133. }
  134.  
  135. void button(string input, string motor, string spec, string power){
  136.     if(power == ""){
  137.         power = "127";
  138.     }
  139.     string buttonState = "toggle" + input;
  140.     if(spec != ""){
  141.         if(spec == "const"){
  142.             string nonConst = "";
  143.             for(mL = mainLoop.begin(); mL != mainLoop.end();){
  144.                 string item = *mL;
  145.                 if(item.find(motor) != string::npos){
  146.                     nonConst = item;
  147.                     mainLoop.erase(mL);
  148.                     break;
  149.                 }
  150.                 else{
  151.                     ++mL;
  152.                 }
  153.             }
  154.             if(nonConst == ""){
  155.                 string msg = "You have not assigned what controls this motor normally.";
  156.                 wxString wxMsg(msg.c_str(), wxConvUTF8);
  157.                 wxMessageBox(wxMsg, _("Error"));
  158.             }
  159.             else{
  160.                 mainTask.push_back(tab("task") + "bool " + buttonState + " = false;\n");
  161.                 mainLoop.push_back(tab("loop") + "if (vexRT[" + input + "]){\n");
  162.                 loopTabs += 1;
  163.                 mainLoop.push_back(tab("loop") + "if(" + buttonState + "){\n");
  164.                 loopTabs += 1;
  165.                 mainLoop.push_back(tab("loop") + buttonState + " = false;\n");
  166.                 loopTabs -= 1;
  167.                 mainLoop.push_back(tab("loop") + "}\n");
  168.                 mainLoop.push_back(tab("loop") + "else{\n");
  169.                 loopTabs += 1;
  170.                 mainLoop.push_back(tab("loop") + buttonState + " = true;\n");
  171.                 loopTabs -= 1;
  172.                 mainLoop.push_back(tab("loop") + "}\n");
  173.                 loopTabs -= 1;
  174.                 mainLoop.push_back(tab("loop") + "}\n");
  175.                 mainLoop.push_back(tab("loop") + "if(" + buttonState + "){\n");
  176.                 loopTabs += 1;
  177.                 mainLoop.push_back(tab("loop") + motor + " = " + power + ";\n");
  178.                 loopTabs -= 1;
  179.                 mainLoop.push_back(tab("loop") + "}\n");
  180.                 mainLoop.push_back(tab("loop") + "else{\n");
  181.                 loopTabs += 1;
  182.                 mainLoop.push_back(tab("loop") + nonConst);
  183.                 loopTabs -= 1;
  184.                 mainLoop.push_back(tab("loop") + "}\n");
  185.                 loopTabs -= 1;
  186.             }
  187.         }
  188.     }
  189.     else{
  190.         mainTask.push_back(tab("task") + "bool " + buttonState + " = false;\n");
  191.         mainLoop.push_back(tab("loop") + "if (vexRT[" + input + "]){\n");
  192.         loopTabs += 1;
  193.         mainLoop.push_back(tab("loop") + "if(" + buttonState + "){\n");
  194.         loopTabs += 1;
  195.         mainLoop.push_back(tab("loop") + buttonState + " = false;\n");
  196.         mainLoop.push_back(tab("loop") + motor + " = 0;\n");
  197.         loopTabs -= 1;
  198.         mainLoop.push_back(tab("loop") + "}\n");
  199.         mainLoop.push_back(tab("loop") + "else{\n");
  200.         loopTabs += 1;
  201.         mainLoop.push_back(tab("loop") + buttonState + " = true;\n");
  202.         mainLoop.push_back(tab("loop") + motor + " = " + power + ";\n");
  203.         loopTabs -= 1;
  204.         mainLoop.push_back(tab("loop") + "}\n");
  205.         loopTabs -= 1;
  206.         mainLoop.push_back(tab("loop") + "}\n");
  207.     }
  208. }
  209.  
  210. int portNum = 1;
  211. void makeMotor(string motor){
  212.     ifstream original;
  213.     original.open("robotCode.c");
  214.     string data;
  215.     original.seekg(0, ios::end);
  216.     data.resize(original.tellg());
  217.     original.seekg(0, ios::beg);
  218.     original.read(&data[0], data.size());
  219.     original.close();
  220.  
  221.     ofstream modified;
  222.     modified.open("robotCode.c");
  223.     string portNumStr;
  224.     ostringstream convert;
  225.     convert << portNum;
  226.     portNumStr = convert.str();
  227.     string toWrite = motor + " = [port" + portNumStr + "]\n" + data;
  228.     modified << toWrite;
  229.     modified.close();
  230.     portNum++;
  231. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement