gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
mjc2wsl - printing numbers now takes into consideration how long the number is
[mjc2wsl.git] / src / mjc2wsl.java
index 3d36b10..dec76fe 100644 (file)
@@ -28,8 +28,11 @@ import java.util.*;
  * @author Doni Pracner, http://perun.dmi.rs/pracner http://quemaster.com
  */
 public class mjc2wsl{
  * @author Doni Pracner, http://perun.dmi.rs/pracner http://quemaster.com
  */
 public class mjc2wsl{
-       public static String versionN = "0.1.7";
+       //default version name, used if the file is not found
+       private static String versionN = "0.1.x";
 
 
+       private String versionFile = "version.properties";
+       
        private TransMessages messages = new TransMessages();
 
        private boolean genPauseAfterEachAddress=false, 
        private TransMessages messages = new TransMessages();
 
        private boolean genPauseAfterEachAddress=false, 
@@ -138,6 +141,24 @@ public class mjc2wsl{
                return opMap;
        }
        
                return opMap;
        }
        
+       private Properties versionData;
+
+       private String getVersion() {
+               if (versionData == null) {
+                       versionData = new Properties();
+                       try {
+                               versionData.load(getClass().getResourceAsStream(versionFile));
+                       } catch (IOException e) {
+                               e.printStackTrace();
+                       }
+               }
+               String ver = versionData.getProperty("version");
+               if (ver != null)
+                       return ver;
+               else
+                       return versionN;
+       }
+       
        public String getOpString(int op) {
                return getOpMap().get(op);
        }
        public String getOpString(int op) {
                return getOpMap().get(op);
        }
@@ -194,7 +215,7 @@ public class mjc2wsl{
        public String createStandardStart(int numWords){
                StringBuilder ret = new StringBuilder(
                        "C:\" This file automatically converted from microjava bytecode\";\n"
        public String createStandardStart(int numWords){
                StringBuilder ret = new StringBuilder(
                        "C:\" This file automatically converted from microjava bytecode\";\n"
-                       +"C:\" with mjc2wsl v "+versionN+"\";\n");
+                       +"C:\" with mjc2wsl v "+getVersion()+"\";\n");
 
                ret.append("\nBEGIN");
                ret.append("\nVAR <\n\t");
 
                ret.append("\nBEGIN");
                ret.append("\nVAR <\n\t");
@@ -707,7 +728,7 @@ public class mjc2wsl{
                                prl(createTopTwoEStack());
                                if (genInlinePrint){
                                        prl(createComment("print spacing",C_SPEC));
                                prl(createTopTwoEStack());
                                if (genInlinePrint){
                                        prl(createComment("print spacing",C_SPEC));
-                                       prl("PRINFLUSH(SUBSTR(\"          \", 0, MIN(10, MAX(0, tempa-1))), tempb);");
+                                       prl("PRINFLUSH(SUBSTR(\"          \", 0, MIN(10, MAX(0, tempa-SLENGTH(@String(tempb))))), tempb);");
                                }
                                else
                                        prl("Print_MJ(tempb,tempa);");
                                }
                                else
                                        prl("Print_MJ(tempb,tempa);");
@@ -787,6 +808,10 @@ public class mjc2wsl{
        public void printHelpDirectives(){
                System.out.println("Alternatives for code generation:");
                System.out.println("  --genPopPush generate POP/PUSH instead of TAIL/HEAD");
        public void printHelpDirectives(){
                System.out.println("Alternatives for code generation:");
                System.out.println("  --genPopPush generate POP/PUSH instead of TAIL/HEAD");
+               System.out.println("  --genHeadTail generate TAIL/HEAD instead of POP/PUSH ");
+               System.out.println();
+               System.out.println("  --genInlinePrint generate prints directly instead of procedure calls");
+               System.out.println("  --genProcedurePrint generate prints as custom procedure calls");
        }
 
        public void printHelpHelp() {
        }
 
        public void printHelpHelp() {
@@ -801,7 +826,7 @@ public class mjc2wsl{
        }
 
        public void printVersion() {
        }
 
        public void printVersion() {
-               System.out.println("MicroJava bytecode to WSL converter. v " + versionN
+               System.out.println("MicroJava bytecode to WSL converter. v " + getVersion()
                                + ", by Doni Pracner");
        }
        
                                + ", by Doni Pracner");
        }
        
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner