2003/12/28 09:45:29
authorbrian <brian@xwt.org>
Fri, 30 Jan 2004 07:43:25 +0000 (07:43 +0000)
committerbrian <brian@xwt.org>
Fri, 30 Jan 2004 07:43:25 +0000 (07:43 +0000)
darcs-hash:20040130074325-aa32f-ecbc729503b38c03a935535730d06f6449f5bccc.gz

Makefile
src/org/xwt/translators/Freetype.c
src/org/xwt/translators/Freetype.java
src/org/xwt/translators/MSPack.c
src/org/xwt/translators/MSPack.java
src/org/xwt/translators/main.c [new file with mode: 0644]

index 8cd4135..b1ddc2c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -50,16 +50,16 @@ include Makefile.upstream
 
 # figure out what stuff in org.xwt.plat.* this platform requires (its superclasses)
 java_sources      := $(patsubst src/%.java,     build/java/%.java, $(shell find src -name '*.java' \! -path 'src/org/xwt/mips/*'))
-java_sources      += build/java/org/xwt/translators/FreetypeVM.java
+java_sources      += build/java/org/xwt/translators/MIPSApps.java
 all_java_sources  := $(java_sources)
 
 nonplat_java_sources      := $(filter-out build/java/org/xwt/plat/%, $(java_sources))
 plat_java_sources         := $(filter build/java/org/xwt/plat/%, $(java_sources))
 
-build/java/org/xwt/translators/FreetypeVM.java: build/res/freetype.mips build/class/org/xwt/mips/Compiler.class
+build/java/org/xwt/translators/MIPSApps.java: build/mips/mipsapps.mips build/class/org/xwt/mips/Compiler.class
        mkdir -p build/java/org/xwt/translators
        (echo -e 'package org.xwt.translators;\nimport org.xwt.mips.*;\n'; \
-        java -Xint -cp build/class org.xwt.mips.Compiler FreetypeVM build/res/freetype.mips)\
+        java -Xint -cp build/class org.xwt.mips.Compiler MIPSApps build/mips/mipsapps.mips)\
         > $@
 
 build/java/org/xwt/%.java: src/org/xwt/%.java
@@ -159,7 +159,7 @@ build/res/fonts/vera: .download_vera-1.10
        cd build/res/fonts/vera; ln -s ../../../../upstream/vera-1.10/ttf-bitstream-vera-1.10/Vera.ttf
        cd build/res/fonts/vera; ln -s ../../../../upstream/vera-1.10/ttf-bitstream-vera-1.10/VeraMono.ttf
        cd build/res/fonts/vera; ln -s ../../../../upstream/vera-1.10/ttf-bitstream-vera-1.10/VeraSe.ttf
-build/res/builtin.jar: $(builtin_src:src/%=build/res/%) build/res/freetype.mips build/res/libmspack.mips build/res/fonts/vera
+build/res/builtin.jar: $(builtin_src:src/%=build/res/%) build/res/fonts/vera
        @echo -e "\n\033[1mzipping            res/* -> .jar: builtin.jar\033[0m"
        cd build/res; $(jar) cf builtin.jar $(^:build/res/%=%)
 
@@ -199,8 +199,9 @@ build/mips/%.c.o: src/%.c
                -Iupstream/libmspack-20030726/src/mspack \
                -c -o $@ $<
 
-build/res/freetype.mips: build/mips/org/xwt/translators/Freetype.c.o build/mips/org/xwt/mips/crt0.c.o build/mips/org/xwt/mips/syscalls.c.o
+build/mips/mipsapps.mips: build/mips/org/xwt/translators/Freetype.c.o build/mips/org/xwt/translators/MSPack.c.o build/mips/org/xwt/translators/main.c.o build/mips/org/xwt/mips/crt0.c.o build/mips/org/xwt/mips/syscalls.c.o
        make .install_freetype-2.1.4_mips-unknown-elf target=mips-unknown-elf
+       make .install_libmspack-20030726_mips-unknown-elf target=mips-unknown-elf
        @echo -e "\n\033[1mlinking               .o -> .mips:  $@\033[0m"
        mkdir -p build/mips build/res
        upstream/install/bin/mips-unknown-elf-gcc \
@@ -210,26 +211,10 @@ build/res/freetype.mips: build/mips/org/xwt/translators/Freetype.c.o build/mips/
                -T src/org/xwt/mips/linker.ld \
                -Lbuild/mips \
                -Lupstream/freetype-2.1.4/src/objs \
+               -Lupstream//libmspack-20030726/build-mips-unknown-elf/ \
                -o $@ \
                $^ \
-               -lfreetype
-
-.install_libmspack-20030726:
-       make .install_libmspack-20030726_mips-unknown-elf target=mips-unknown-elf && touch .install_libmspack-20030726
-build/mips/org/xwt/translators/MSPack.c.o: .install_libmspack-20030726
-build/res/libmspack.mips: build/mips/org/xwt/translators/MSPack.c.o build/mips/org/xwt/mips/crt0.c.o build/mips/org/xwt/mips/syscalls.c.o
-       @echo -e "\n\033[1mlinking               .o -> .mips:  $@\033[0m"
-       mkdir -p build/mips build/res
-       upstream/install/bin/mips-unknown-elf-gcc \
-               -nostdlib \
-               --static \
-               -march=mips1 \
-               -T src/org/xwt/mips/linker.ld \
-               -Lbuild/mips \
-               -Lupstream/libmspack-20030726/src/mspack \
-               -Lupstream/libmspack-20030726/build-mips-unknown-elf \
-               -o $@ \
-               $^ \
+               -lfreetype \
                -lmspack
 
 
index f1b4f50..50fe6fd 100644 (file)
 
 */
 
+#if 0
+/* Use this when org.xwt.mips is updated to the latest org.xwt.mips cvs */
+extern char *user_info[1024];
+#else
 extern char **_user_info;
-
-FT_Library  library;   /* handle to library     */
-FT_Face     face;      /* handle to face object */
+#define user_info _user_info
+#define _pause emu_pause
+#endif
 
 #define FT_Check(expr) do { \
     if((expr) != 0) { \
@@ -48,33 +52,35 @@ FT_Face     face;      /* handle to face object */
 #define max(a, b) ((a) > (b) ? (a) : (b))
 #define min(a, b) ((a) < (b) ? (a) : (b))
 
-extern void emu_pause();
+extern void _pause();
 
-int main(int argc, char** argv) {
+int freetype_main() {
     char *fontdata;
     int glyph_index;
     short charcode;
-    
+    FT_Library  library;   /* handle to library     */
+    FT_Face     face;      /* handle to face object */
+
     FT_Check(FT_Init_FreeType(&library));
-    FT_Check(FT_New_Memory_Face(library, _user_info[0], (int)_user_info[1], 0, &face));
+    FT_Check(FT_New_Memory_Face(library, user_info[0], (int)user_info[1], 0, &face));
 
     for(;;) {
       
-        emu_pause();
-        FT_Check(FT_Set_Char_Size(face, 0, ((int)_user_info[4]) * 64, 72, 72));
-        for(charcode = (int)_user_info[2]; charcode <= (int)_user_info[3]; charcode++) {
+        _pause();
+        FT_Check(FT_Set_Char_Size(face, 0, ((int)user_info[4]) * 64, 72, 72));
+        for(charcode = (int)user_info[2]; charcode <= (int)user_info[3]; charcode++) {
 
             glyph_index = FT_Get_Char_Index(face, charcode);
             FT_Check(FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT | FT_LOAD_FORCE_AUTOHINT));
             FT_Check(FT_Render_Glyph(face->glyph, FT_RENDER_MODE_NORMAL));
 
-            _user_info[5]  = (char*)face->glyph->bitmap.buffer;
-            _user_info[6]  = (char*)face->glyph->bitmap.width;
-            _user_info[7]  = (char*)face->glyph->bitmap.rows;
-            _user_info[8]  = (char*)(face->size->metrics.ascender >> 6);
-            _user_info[9]  = (char*)((-1 * face->size->metrics.descender) >> 6);
-            _user_info[10] = (char*)(face->glyph->metrics.horiBearingY >> 6);
-            _user_info[11] = (char*)(face->glyph->advance.x >> 6);
+            user_info[5]  = (char*)face->glyph->bitmap.buffer;
+            user_info[6]  = (char*)face->glyph->bitmap.width;
+            user_info[7]  = (char*)face->glyph->bitmap.rows;
+            user_info[8]  = (char*)(face->size->metrics.ascender >> 6);
+            user_info[9]  = (char*)((-1 * face->size->metrics.descender) >> 6);
+            user_info[10] = (char*)(face->glyph->metrics.horiBearingY >> 6);
+            user_info[11] = (char*)(face->glyph->advance.x >> 6);
 
         }
     }
index 55dbf68..d9c6904 100644 (file)
@@ -6,16 +6,16 @@ import java.util.zip.*;
 import java.util.*;
 import org.bouncycastle.util.encoders.Base64;
 
+import org.xwt.mips.Runtime;
+
 // FEATURE: use streams, not memoryfont's
 // FEATURE: kerning pairs
 public class Freetype {
 
     public Freetype() { }
 
-    private static byte[] image = null;
-
     private int mem_allocated = 0;
-    private org.xwt.mips.Runtime vm = null;
+    private Runtime vm = null;
 
     private Res loadedStream = null;
 
@@ -25,15 +25,14 @@ public class Freetype {
             loadedStream = res;
             InputStream is = res.getInputStream();
             byte[] fontstream = InputStreamToByteArray.convert(is);
-            if (image == null) image = InputStreamToByteArray.convert(Main.builtin.getInputStream("freetype.mips"));
-            //vm = new org.xwt.mips.Interpreter(image);
-            vm = new FreetypeVM();
+            vm = new MIPSApps();
             int baseAddr = vm.sbrk(fontstream.length);
             vm.copyout(fontstream, baseAddr, fontstream.length);
             vm.setUserInfo(0, baseAddr);
             vm.setUserInfo(1, fontstream.length);
-            vm.start(new String[]{ "freetype.mips" });
+            vm.start(new String[]{ "freetype" });
             vm.execute();
+            if(vm.getState() == Runtime.DONE) throw new Error("Freetype VM exited: " + vm.exitStatus());
         } catch (Exception e) {
             Log.log(this, e);
         }
index 2937dcc..fd5ebe5 100644 (file)
@@ -161,22 +161,29 @@ static struct mspack_system my_system =  {
     NULL
 };
 
+#if 0
+/* Use this when org.xwt.mips is updated to the latest org.xwt.mips cvs */
+extern char *user_info[1024];
+#else
 extern char **_user_info;
+#define user_info _user_info
+#define _pause emu_pause
+#endif
 
-int main(int argc, char **argv) {
+int mspack_main() {
     struct mscab_decompressor *decomp;
     struct mscabd_cabinet *cab;
     struct mscabd_file *file;
-        mem_buf_t mem_buf;
-        size_t size = (size_t)_user_info[1];
-        int i;
-        
-        mem_buf.addr = _user_info[0];
-        mem_buf.pos = mem_buf.writable = 0;
-        mem_buf.length = -1;
-        mem_buf.size = size;
-        
-        cab_mem_buf = &mem_buf;
+    mem_buf_t mem_buf;
+    size_t size = (size_t)user_info[1];
+    int i;
+    
+    mem_buf.addr = user_info[0];
+    mem_buf.pos = mem_buf.writable = 0;
+    mem_buf.length = -1;
+    mem_buf.size = size;
+    
+    cab_mem_buf = &mem_buf;
                 
     decomp = mspack_create_cab_decompressor(&my_system);
     if(!decomp) exit(1);
@@ -196,7 +203,7 @@ int main(int argc, char **argv) {
         output_table[i].length = write_buf_table[i].buf.size;
     }
     
-    _user_info[2] = (char*) output_table;
+    user_info[2] = (char*) output_table;
     
     return 0;
 }
index 3275bb9..c15aff4 100644 (file)
@@ -5,6 +5,8 @@ import org.xwt.util.*;
 import org.xwt.mips.*;
 import java.io.*;
 
+import org.xwt.mips.Runtime;
+
 public class MSPack {
     private static byte[] image;
     
@@ -13,27 +15,20 @@ public class MSPack {
     private byte[][] data;
         
     public static class MSPackException extends IOException { public MSPackException(String s) { super(s); } }
-    
-    private static synchronized byte[] getImage() throws IOException {
-        if (image == null)
-            image = InputStreamToByteArray.convert(Main.builtin.getInputStream("libmspack.mips"));
-        return image;
-    }
-    
-    public MSPack(InputStream cabIS) throws IOException {
-        byte[] cab = InputStreamToByteArray.convert(cabIS);
-        Interpreter vm = new Interpreter(getImage());
-        
-        int cabAddr = vm.sbrk(cab.length);
-        if(cabAddr < 0) throw new MSPackException("sbrk failed");
         
+    public MSPack(InputStream cabIS) throws IOException {
         try {
+            Runtime vm = new MIPSApps();
+            byte[] cab = InputStreamToByteArray.convert(cabIS);
+            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"} );
+            int status = vm.run(new String[]{ "mspack"} );
             if(status != 0) throw new MSPackException("mspack.mips failed (" + status + ")");
             
             /*static struct {
@@ -58,7 +53,7 @@ public class MSPack {
                 System.out.println("" + fileNames[i]);
                 vm.copyin(vm.memRead(addr+4),data[i],length);
             }
-        } catch(Exception e) {
+        } catch(Runtime.ExecutionException e) {
             e.printStackTrace();
             throw new MSPackException("mspack.mips crashed");
         }
diff --git a/src/org/xwt/translators/main.c b/src/org/xwt/translators/main.c
new file mode 100644 (file)
index 0000000..4eca1e2
--- /dev/null
@@ -0,0 +1,12 @@
+
+char *user_info[1024];
+
+extern int mspack_main();
+extern int freetype_main();
+
+int main(int argc, char **argv) {
+    if(argc < 1) return 1;
+    if(strcmp(argv[0],"mspack")==0) return mspack_main();
+    if(strcmp(argv[0],"freetype")==0) return freetype_main();
+    return 1;
+}