X-Git-Url: http://git.megacz.com/?p=nestedvm.git;a=blobdiff_plain;f=src%2Ftests%2FMSPack.java;fp=src%2Ftests%2FMSPack.java;h=198b7aaa29f2e857aff290221e30d99f15bf7afa;hp=0000000000000000000000000000000000000000;hb=3eb15f58ca0911489d7d9bdc0ac2c575d27a68d8;hpb=a6ee28ca37621098ed040e6d1c4ae103934c3e97 diff --git a/src/tests/MSPack.java b/src/tests/MSPack.java new file mode 100644 index 0000000..198b7aa --- /dev/null +++ b/src/tests/MSPack.java @@ -0,0 +1,106 @@ +package tests; + +import org.xwt.mips.Runtime; +import java.io.*; + +public class MSPack { + private String[] fileNames; + private int[] lengths; + private byte[][] data; + + public static class MSPackException extends IOException { public MSPackException(String s) { super(s); } } + + public MSPack(InputStream cabIS) throws IOException { + byte[] cab = InputStreamToByteArray.convert(cabIS); + try { + //Interpreter vm = new Interpreter("mspack.mips"); + MSPackHelper vm = new MSPackHelper(); + + int cabAddr = vm.sbrk(cab.length); + if(cabAddr < 0) throw new MSPackException("sbrk failed"); + + vm.copyout(cab,cabAddr,cab.length); + + vm.setUserInfo(0,cabAddr); + vm.setUserInfo(1,cab.length); + + int status = vm.run(new String[]{ "mspack.mips"} ); + if(status != 0) throw new MSPackException("mspack.mips failed (" + status + ")"); + + /*static struct { + char *filename; + char *data; + int length; + } output_table[MAX_MEMBERS+1]; */ + + int filesTable = vm.getUserInfo(2); + int count=0; + while(vm.memRead(filesTable+count*12) != 0) count++; + + fileNames = new String[count]; + data = new byte[count][]; + lengths = new int[count]; + + for(int i=0,addr=filesTable;i