X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2Ftranslators%2FMSPack.java;fp=src%2Forg%2Fxwt%2Ftranslators%2FMSPack.java;h=00316de30f6d1cfa3dac99fc2171e06d79c4bd02;hb=a071a56b6d9c9d38b85d23cc3eb287435322d0cc;hp=0000000000000000000000000000000000000000;hpb=067fcf0556752492c6396bc01dff0bf266199651;p=org.ibex.core.git diff --git a/src/org/xwt/translators/MSPack.java b/src/org/xwt/translators/MSPack.java new file mode 100644 index 0000000..00316de --- /dev/null +++ b/src/org/xwt/translators/MSPack.java @@ -0,0 +1,40 @@ +package org.xwt.translators; +import org.xwt.*; +import org.xwt.util.*; +import java.io.*; +import java.util.zip.*; + +public class MSPack { + + MSPack() { } + + private static org.xwt.mips.Interpreter vm = null; + + public static synchronized void unpack(InputStream theCabFile) { + try { + if (vm == null) { + InputStream bis = Platform.getBuiltinInputStream(); + ZipInputStream zis = new ZipInputStream(bis); + for(ZipEntry ze = zis.getNextEntry(); ze != null && !ze.getName().equals("libmspack.mips"); ze = zis.getNextEntry()) { } + byte[] image = InputStreamToByteArray.convert(zis); + vm = new org.xwt.mips.Interpreter(image); + vm.start(new String[]{ "libmspack.mips" }); + vm.execute(); + } + + int CAB_RESERVED = 256*1024; + int baseAddr = vm.sbrk(CAB_RESERVED); + + byte[] cabstream = InputStreamToByteArray.convert(theCabFile); + vm.copyout(cabstream, baseAddr, cabstream.length); + vm.setUserInfo(0, baseAddr); + vm.setUserInfo(1, cabstream.length); + + vm.execute(); + // FIXME: do more stuff here + + } catch (Exception e) { + Log.log(MSPack.class, e); + } + } +}