summaryrefslogtreecommitdiff
path: root/ExternalInterpreter.java
blob: 04776a851d3e6ef85aee7220700a271a5f2069a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// because writing java violates human rights

import java.lang.Runtime;

class ExternalInterpreter extends AbstractInterpreter {
    ExternalInterpreter(String cmdName) {
	this.cmdName = cmdName;
    }

    public String eval(String code, String param) {
	java.lang.StringBuilder res = new java.lang.StringBuilder();
	try {
	    // exec program capturing its standart output
	    String[] cmd = {"timeout", "-s", "9", "1", cmdName, code, param};
	    Process p = java.lang.Runtime.getRuntime().exec(cmd);
	    java.io.InputStream s = p.getInputStream();
	    int c;
	    // read stdout
	    while (((c = s.read()) >= 0) && (res.length() < code.length())) {
		switch (c) {
		case '1': res.append("1"); break;
		default:  res.append("0");
		}
	    }
	    // pad string
	    while (res.length() < code.length())
		res.append("0");
	} catch (java.io.IOException e) {}
	return res.toString();
    }    

    String cmdName;
}
contact: Jan Huwald // Impressum