DEADSOFTWARE

Добавлены открытые массивы
[dsw-obn.git] / test.c
diff --git a/test.c b/test.c
index 1f440779e411b51f514c9409fddf97b033019685..6175148f461c4c0db1ff690997928e56f560544f 100644 (file)
--- a/test.c
+++ b/test.c
@@ -8,26 +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 RECORD i, j, k : INTEGER END;"
-       "  q : POINTER TO RECORD x, y, z : INTEGER END;"
-       ""
-       "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[2].k := 1;"
-       "  NEW(q);"
-       "  "
+       "  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."
 ;
 
@@ -40,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."
@@ -77,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++)
        {
@@ -99,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;
 }