X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=mjc2wsl.git;a=blobdiff_plain;f=src%2Fmjc2wsl.java;h=d52dcfeea0f4a9274d739ef3b0caabe29b37fe1d;hp=d5827844496350ebc4d0bf248b819bccc2236f2f;hb=877ef369343b37d3d8ac7d60339ac922407c63fc;hpb=2563c4889961a70616ec701fcacddca365b3cbb8 diff --git a/src/mjc2wsl.java b/src/mjc2wsl.java index d582784..d52dcfe 100644 --- a/src/mjc2wsl.java +++ b/src/mjc2wsl.java @@ -38,6 +38,8 @@ public class mjc2wsl{ private boolean genPopPush=false; + private boolean genInlinePrint=false; + /** Constant used for marking a regular comment from the original file */ public static final char C_REG = ' '; /** @@ -222,18 +224,20 @@ public class mjc2wsl{ ret.append("\t@List_To_String(< num >)\n"); ret.append("END\n"); - ret.append("\nPROC Print_MJ(val, format VAR)==\n"); - ret.append(createComment("print spacing", C_SPEC)); - ret.append("\n\tIF format>1 THEN\n\t\tFOR i:=2 TO "); - ret.append("format STEP 1 DO PRINFLUSH(\" \") OD\n"); - ret.append("\tFI;\n\tPRINFLUSH(val)\nEND\n"); - - ret.append("\nPROC Print_MJ_CHAR(val, format VAR)==\n"); - ret.append(createComment("print spacing", C_SPEC)); - ret.append("\n\tIF format>1 THEN\n\t\tFOR i:=2 TO "); - ret.append("format STEP 1 DO PRINFLUSH(\" \") OD\n"); - ret.append("\tFI;\n\tPRINFLUSH(CHR(val))\n"); - ret.append("END\n"); + if (!genInlinePrint) { + ret.append("\nPROC Print_MJ(val, format VAR)==\n"); + ret.append(createComment("print spacing", C_SPEC)); + ret.append("\n\tIF format>1 THEN\n\t\tFOR i:=2 TO "); + ret.append("format STEP 1 DO PRINFLUSH(\" \") OD\n"); + ret.append("\tFI;\n\tPRINFLUSH(val)\nEND\n"); + + ret.append("\nPROC Print_MJ_CHAR(val, format VAR)==\n"); + ret.append(createComment("print spacing", C_SPEC)); + ret.append("\n\tIF format>1 THEN\n\t\tFOR i:=2 TO "); + ret.append("format STEP 1 DO PRINFLUSH(\" \") OD\n"); + ret.append("\tFI;\n\tPRINFLUSH(CHR(val))\n"); + ret.append("END\n"); + } ret.append("\nEND"); return ret.toString(); @@ -436,17 +440,18 @@ public class mjc2wsl{ case getfield: { int f = get2(); + prl(createStartVar("tempa")); prl(createTopEStack()); prl(createToEStack(createObject("tempa") + "[" + (f + 1) + "]")); + prl(createEndVar()); break; } case putfield: { int f = get2(); - // we need to use a temparray as a pointer, WSL - // otherwise tries to access it as a list of lists and fails - prl(createTopTwoEStack()); - prl("VAR < tempArray := " + createObject("tempb") + " > :"); - prl("tempArray[" + (f + 1) + "]:=tempa ENDVAR;"); + prl(createStartVar("tempa", "tempb")); + prl(createTopTwoEStack()); + prl(createObject("tempb") + "[" + (f + 1) + "]:=tempa;"); + prl(createEndVar()); break; } @@ -687,7 +692,11 @@ public class mjc2wsl{ case bprint: { prl(createStartVar("tempa", "tempb")); prl(createTopTwoEStack()); - prl("Print_MJ_CHAR(tempb,tempa);"); + if (genInlinePrint){ + prl(createComment("print spacing and transformation",C_SPEC)); + prl("PRINFLUSH(SUBSTR(\" \", 0, MIN(10, tempa - 1)), @List_To_String(< tempb >));"); + } else + prl("Print_MJ_CHAR(tempb,tempa);"); prl(createEndVar()); break; } @@ -696,7 +705,12 @@ public class mjc2wsl{ prl(createStartVar("tempa", "tempb")); prl(createTopTwoEStack()); - prl("Print_MJ(tempb,tempa);"); + if (genInlinePrint){ + prl(createComment("print spacing",C_SPEC)); + prl("PRINFLUSH(SUBSTR(\" \", 0, MIN(10, tempa - 1)), tempb);"); + } + else + prl("Print_MJ(tempb,tempa);"); prl(createEndVar()); break; } @@ -845,6 +859,8 @@ public class mjc2wsl{ genPauseAfterEachAddress = true; } else if (args[i].compareToIgnoreCase("--genPopPush") == 0) { genPopPush = true; + } else if (args[i].compareToIgnoreCase("--genInlinePrint") == 0) { + genInlinePrint = true; } i++; }