X-Git-Url: http://deadsoftware.ru/gitweb?p=dsw-obn.git;a=blobdiff_plain;f=test.c;h=1780bafa8ad900781c4af6e7f6b77868710a5119;hp=1f440779e411b51f514c9409fddf97b033019685;hb=ea5cf056abf2bf42e9f328b9c1f2d94ee96bcc4c;hpb=12ae486a18746b042fcc4ebbefc5449d4d3464af diff --git a/test.c b/test.c index 1f44077..1780baf 100644 --- a/test.c +++ b/test.c @@ -8,6 +8,8 @@ static char source_test[] = "(* Main module *)" "MODULE Test;" "IMPORT Out;" + "CONST" + " real = 0.1E3;" "" "VAR" " nx- : INTEGER;" @@ -28,6 +30,8 @@ static char source_test[] = " ChParam(nx);" " Out.Int(nx, 0);" " Out.Ln;" + " Out.Real(real / 3.0, 0);" + " Out.Ln;" "END Test." ; @@ -40,7 +44,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." @@ -77,7 +81,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++) { @@ -99,6 +117,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; }