package devices;
import icecaptools.IcecapCompileMe;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import javax.realtime.AbsoluteTime;
import vm.Address;
import vm.Address32Bit;
import vm.HardwareObject;
import vm.RealtimeClock;
public class System {
public static void delay(int i) {
while (i > 0) {
i--;
}
}
public static native void blink();
public static native void snapshot();
public static native void lockROM();
public static native void resetMemory();
private static class DevicePrintStream extends PrintStream {
@Override
public void println(String msg) {
devices.Console.println(msg);
}
@Override
public void print(String msg) {
devices.Console.print(msg);
}
@Override
public void print(int i) {
devices.Console.print(i);
}
@Override
public void println() {
devices.Console.println("");
}
@Override
public void print(boolean b) {
devices.Console.println("print boolean b unimplemented");
}
@Override
public void print(char c) {
devices.Console.print(c + "");
}
@Override
public void print(long l) {
devices.Console.println("print long l unimplemented");
}
@Override
public void print(float f) {
devices.Console.println("print float f unimplemented");
}
@Override
public void print(double d) {
devices.Console.println("print double d unimplemented");
}
@Override
public void print(char[] s) {
devices.Console.println("print char[] s unimplemented");
}
@Override
public void print(Object obj) {
devices.Console.println("print Object obj unimplemented");
}
private static class DummyOutputStream extends OutputStream {
@Override
public void write(int b) throws IOException {
throw new IOException();
}
}
public DevicePrintStream() {
super(new DummyOutputStream(), true);
}
}
public static void initializeSystemClass() {
java.lang.System.setOut(new DevicePrintStream());
}
private static class DummyHWObject extends HardwareObject
{
@SuppressWarnings("unused")
public int dummyField;
public DummyHWObject(Address address) {
super(address);
}
}
public static void includeHWObjectSupport()
{
DummyHWObject dummy = new DummyHWObject(new Address32Bit(0));
dummy.dummyField = 42;
}
static AbsoluteTime now;
@IcecapCompileMe
public static long currentTimeMillis()
{
RealtimeClock clock = vm.RealtimeClock.getRealtimeClock();
if (now == null)
{
now = new AbsoluteTime();
}
clock.getCurrentTime(now);
return now.getMilliseconds();
}
@IcecapCompileMe
public static String getProperty(String key)
{
if (key.equals("line.separator"))
{
return "\n";
}
else if (key.equals("org.jmlspecs.openjml.racexceptions"))
{
return "true";
}
else if (key.equals("org.jmlspecs.openjml.racjavaassert"))
{
return "true";
}
else
{
return null;
}
}
}