DEADSOFTWARE

Добавлен тип REAL
[dsw-obn.git] / test.c
diff --git a/test.c b/test.c
index 1f440779e411b51f514c9409fddf97b033019685..1780bafa8ad900781c4af6e7f6b77868710a5119 100644 (file)
--- 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;
 }