package Compiler; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.util.List; public class ExecuteC { public void compileAndExecuteC(List code){ writeProgram(code); if (!compileC()){ String output = runProgram(); System.out.println(output); } else{ Language.displayError("Runtime Error"); } } public void writeProgram(List codeLines){ BufferedWriter output = null; try { File file = new File("main.c"); output = new BufferedWriter(new FileWriter(file)); for(String line:codeLines){ output.write(line+"\n"); } output.close(); } catch ( IOException e ) { e.printStackTrace(); } } public Boolean compileC(){ try{ String s= null; Process p = Runtime.getRuntime().exec("cmd /C gcc main.c -o main.exe"); BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); boolean error=false; while ((s = stdError.readLine()) != null) { error=true; } return error; } catch (IOException e){ e.printStackTrace(); } return false; } public String runProgram(){ try{ String[] command = {"cmd", "/C", "main.exe"}; ProcessBuilder probuilder = new ProcessBuilder(command); Process p = probuilder.start(); BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); String s = null; String output=""; while ((s = stdInput.readLine()) != null) { output+=s; } return output; } catch (IOException e){ e.printStackTrace(); } return null; } }