Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <sstream>
- #include <vector>
- #include <map>
- #include <algorithm>
- #include <wx/msgdlg.h>
- #include "RobotCGenMain.h"
- #include "RobotCGenApp.h"
- using namespace std;
- void joystick(string input, string motor, string spec, string power);
- void button(string input, string motor, string spec, string power);
- void makeMotor(string motor);
- int taskTabs;
- int loopTabs;
- string tab(string which){
- string tabString = "";
- if(which == "task"){
- for(int x = 0; x < taskTabs; x++){
- tabString += "\t";
- }
- }
- else{
- for(int x = 0; x < taskTabs + loopTabs; x++){
- tabString += "\t";
- }
- }
- return tabString;
- }
- vector<string> mainTask;
- vector<string> mainLoop;
- vector<string>::iterator mT, mL;
- ofstream program;
- map<string, string> controllerBtns;
- map<string, string> controllerJSticks;
- map<string, string>::iterator it1, it2;
- vector<string> specKeyWords;
- vector<string> motors;
- vector<string>::iterator mot;
- bool process(wxString wxInput, wxString wxMotor, wxString wxSpecial, wxString wxPower){
- string input = string(wxInput.mb_str());
- string motor = string(wxMotor.mb_str());
- string special = string(wxSpecial.mb_str());
- string power = string(wxPower.mb_str());
- if(motor != ""){
- motor += "Motor";
- if(find(motors.begin(), motors.end(), motor) == motors.end()){
- motors.push_back(motor);
- }
- }
- it1 = controllerBtns.find(input);
- it2 = controllerJSticks.find(input);
- if(it1 != controllerBtns.end()){
- button(input, motor, special, power);
- return false;
- }
- else if(it2 != controllerJSticks.end()){;
- joystick(input, motor, special, power);
- return false;
- }
- else{
- for(mT = mainTask.begin(); mT != mainTask.end(); ++mT){
- program << *mT;
- }
- for(mL = mainLoop.begin(); mL != mainLoop.end(); ++mL){
- program << *mL;
- }
- loopTabs -= 1;
- program << tab("loop") + "}\n";
- program << "}";
- program.close();
- for(mot = motors.begin(); mot != motors.end(); ++mot){
- makeMotor(*mot);
- }
- return true;
- }
- }
- vector<string> splitString(string sentence){
- string buf; // Have a buffer string
- stringstream ss(sentence); // Insert the string into a stream
- vector<string> tokens; // Create vector to hold our words
- while (ss >> buf)
- tokens.push_back(buf);
- return tokens;
- }
- void setup(){
- controllerJSticks["Ch1"] = "vexRT[Ch1]";
- controllerJSticks["Ch2"] = "vexRT[Ch2]";
- controllerJSticks["Ch3"] = "vexRT[Ch3]";
- controllerJSticks["Ch4"] = "vexRT[Ch4]";
- controllerBtns["5U"] = "vexRT[5U]";
- controllerBtns["5D"] = "vexRT[5D]";
- controllerBtns["6U"] = "vexRT[6U]";
- controllerBtns["6D"] = "vexRT[6D]";
- controllerBtns["7U"] = "vexRT[7U]";
- controllerBtns["7D"] = "vexRT[7D]";
- controllerBtns["7L"] = "vexRT[7L]";
- controllerBtns["7R"] = "vexRT[7R]";
- controllerBtns["8U"] = "vexRT[8U]";
- controllerBtns["8D"] = "vexRT[8D]";
- controllerBtns["8L"] = "vexRT[8L]";
- controllerBtns["8R"] = "vexRT[8R]";
- specKeyWords.push_back("const");
- program.open("robotCode.c");
- mainTask.push_back("task main(){\n");
- taskTabs += 1;
- mainLoop.push_back(tab("task") + "while(true){\n");
- loopTabs += 1;
- }
- void joystick(string input, string motor, string spec, string power){
- mainLoop.push_back(tab("loop") + motor + " = vexRT[" + input + "];\n");
- }
- void button(string input, string motor, string spec, string power){
- if(power == ""){
- power = "127";
- }
- string buttonState = "toggle" + input;
- if(spec != ""){
- if(spec == "const"){
- string nonConst = "";
- for(mL = mainLoop.begin(); mL != mainLoop.end();){
- string item = *mL;
- if(item.find(motor) != string::npos){
- nonConst = item;
- mainLoop.erase(mL);
- break;
- }
- else{
- ++mL;
- }
- }
- if(nonConst == ""){
- string msg = "You have not assigned what controls this motor normally.";
- wxString wxMsg(msg.c_str(), wxConvUTF8);
- wxMessageBox(wxMsg, _("Error"));
- }
- else{
- mainTask.push_back(tab("task") + "bool " + buttonState + " = false;\n");
- mainLoop.push_back(tab("loop") + "if (vexRT[" + input + "]){\n");
- loopTabs += 1;
- mainLoop.push_back(tab("loop") + "if(" + buttonState + "){\n");
- loopTabs += 1;
- mainLoop.push_back(tab("loop") + buttonState + " = false;\n");
- loopTabs -= 1;
- mainLoop.push_back(tab("loop") + "}\n");
- mainLoop.push_back(tab("loop") + "else{\n");
- loopTabs += 1;
- mainLoop.push_back(tab("loop") + buttonState + " = true;\n");
- loopTabs -= 1;
- mainLoop.push_back(tab("loop") + "}\n");
- loopTabs -= 1;
- mainLoop.push_back(tab("loop") + "}\n");
- mainLoop.push_back(tab("loop") + "if(" + buttonState + "){\n");
- loopTabs += 1;
- mainLoop.push_back(tab("loop") + motor + " = " + power + ";\n");
- loopTabs -= 1;
- mainLoop.push_back(tab("loop") + "}\n");
- mainLoop.push_back(tab("loop") + "else{\n");
- loopTabs += 1;
- mainLoop.push_back(tab("loop") + nonConst);
- loopTabs -= 1;
- mainLoop.push_back(tab("loop") + "}\n");
- loopTabs -= 1;
- }
- }
- }
- else{
- mainTask.push_back(tab("task") + "bool " + buttonState + " = false;\n");
- mainLoop.push_back(tab("loop") + "if (vexRT[" + input + "]){\n");
- loopTabs += 1;
- mainLoop.push_back(tab("loop") + "if(" + buttonState + "){\n");
- loopTabs += 1;
- mainLoop.push_back(tab("loop") + buttonState + " = false;\n");
- mainLoop.push_back(tab("loop") + motor + " = 0;\n");
- loopTabs -= 1;
- mainLoop.push_back(tab("loop") + "}\n");
- mainLoop.push_back(tab("loop") + "else{\n");
- loopTabs += 1;
- mainLoop.push_back(tab("loop") + buttonState + " = true;\n");
- mainLoop.push_back(tab("loop") + motor + " = " + power + ";\n");
- loopTabs -= 1;
- mainLoop.push_back(tab("loop") + "}\n");
- loopTabs -= 1;
- mainLoop.push_back(tab("loop") + "}\n");
- }
- }
- int portNum = 1;
- void makeMotor(string motor){
- ifstream original;
- original.open("robotCode.c");
- string data;
- original.seekg(0, ios::end);
- data.resize(original.tellg());
- original.seekg(0, ios::beg);
- original.read(&data[0], data.size());
- original.close();
- ofstream modified;
- modified.open("robotCode.c");
- string portNumStr;
- ostringstream convert;
- convert << portNum;
- portNumStr = convert.str();
- string toWrite = motor + " = [port" + portNumStr + "]\n" + data;
- modified << toWrite;
- modified.close();
- portNum++;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement