X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;ds=sidebyside;f=test.c;h=6175148f461c4c0db1ff690997928e56f560544f;hb=e763da864f7330c2b53029782c6b0d85543eb4d2;hp=fc0033339d03fff36dbd6f52ba6989c3df777c0c;hpb=c4d4a265b71124ad0e8588601cfc1d66aca84b96;p=dsw-obn.git diff --git a/test.c b/test.c index fc00333..6175148 100644 --- a/test.c +++ b/test.c @@ -8,24 +8,24 @@ static char source_test[] = "(* Main module *)" "MODULE Test;" "IMPORT Out;" + "TYPE Ar = ARRAY OF ARRAY OF INTEGER;" + "VAR a : POINTER TO Ar;" "" - "VAR" - " nx- : INTEGER;" - " p : POINTER TO ARRAY 3 OF INTEGER;" - "" - "PROCEDURE ChParam(VAR i : INTEGER);" + "PROCEDURE Ax(VAR x : POINTER TO Ar);" "BEGIN" - " i := 1234;" - "END ChParam;" + " x[0, 0] := 777;" + "END Ax;" "" "BEGIN;" - " NEW(p);" - " p[0] := 1;" - " " + " NEW(a, 2, 2);" + " a[0, 0] := 666;" " Out.Open;" - " ChParam(nx);" - " Out.Int(nx, 0);" + " Out.Int(a[0, 0], 0);" " Out.Ln;" + "" + " Ax(a);" +// " Out.Int(a[0, 0], 0);" +// " Out.Ln;" "END Test." ; @@ -38,7 +38,7 @@ static char source_out[] = // " String- : PROCEDURE(str : ARRAY OF CHAR)" // " Int- : PROCEDURE(i, n : LONGINT);" " Int- : PROCEDURE(i, n : INTEGER);" -// " Real- : PROCEDURE(x : REAL; n : INTEGER);" + " Real- : PROCEDURE(x : REAL; n : INTEGER);" // " LongReal- : PROCEDURE(x : LONGREAL; n : INTEGER);" " Ln- : PROCEDURE;" "END Out." @@ -75,7 +75,21 @@ static TOutInt * OutIntPtr; void ImplOutInt(int i, int n) { char number[22]; - snprintf(number, 22, "%i", i); + snprintf(number, 22, "%d", i); + int len = strlen(number); + for(int i = 0; i < n - len; i++) + { + putchar(' '); + } + printf("%s", number); +} + +typedef void (*TOutReal)(float, int); +static TOutReal * OutRealPtr; +void ImplOutReal(float i, int n) +{ + char number[32]; + snprintf(number, 32, "%F", i); int len = strlen(number); for(int i = 0; i < n - len; i++) { @@ -97,6 +111,8 @@ void init_system_modules() *OutOpenPtr = ImplOutOpen; OutIntPtr = oberon_generator_get_var(ctx, "Out_Int"); *OutIntPtr = ImplOutInt; + OutRealPtr = oberon_generator_get_var(ctx, "Out_Real"); + *OutRealPtr = ImplOutReal; OutLnPtr = oberon_generator_get_var(ctx, "Out_Ln"); *OutLnPtr = ImplOutLn; }