mlibc: Cleanup.
[mes.git] / scaffold / tests / 7n-struct-struct-array.c
1 /* -*-comment-start: "//";comment-end:""-*-
2  * Mes --- Maxwell Equations of Software
3  * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
4  *
5  * This file is part of Mes.
6  *
7  * Mes is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3 of the License, or (at
10  * your option) any later version.
11  *
12  * Mes is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with Mes.  If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #include "30-test.i"
22
23 #include <libmes.h>
24 #include <stdlib.h>
25 #include <stdio.h>
26 #include <string.h>
27
28 typedef struct file {
29   char name[10];
30 } file_struct;
31
32 #define STACK_SIZE 2
33 struct state {
34   int bla;
35   file_struct *stack[STACK_SIZE];
36   char buf[100];
37   file_struct **stack_ptr;
38   char buf1[100];
39 };
40
41 int
42 test ()
43 {
44   struct state s;
45   struct state *ps;
46   ps = &s;
47   eputs ("0\n");
48
49   s.stack_ptr = s.stack;
50   ps->stack_ptr = ps->stack;
51   eputs ("ps->stack="); eputs (itoa (ps->stack)); eputs ("\n");
52
53   eputs ("1\n");
54   if (ps->stack_ptr >= ps->stack + STACK_SIZE) return 1;
55   eputs ("2\n");
56
57   struct file f = {"first.h"};
58 #if 0 //__MESC__
59   strcpy (f.name, "first.h");
60 #endif
61   eputs (f.name); eputs ("\n");
62
63   *ps->stack_ptr = &f;
64
65   eputs ("3\n");
66   ++ps->stack_ptr;
67   eputs ("s.stack_ptr -stack ="); eputs (itoa (ps->stack_ptr - ps->stack)); eputs ("\n");
68   eputs ("4\n");
69
70   for (file_struct **p = ps->stack; p < ps->stack_ptr; p++)
71     {
72       eputs ((*p)->name); eputs ("\n");
73     }
74
75   eputs ("5\n");
76
77   int i;
78   i = ps->stack_ptr - ps->stack + STACK_SIZE;
79   eputs ("i="); eputs (itoa (i)); eputs ("\n");
80
81   if (ps->stack_ptr >= ps->stack + STACK_SIZE) return 2;
82
83   eputs ("6\n");
84   struct file f2 = {"second.h"};
85 #if 0//__MESC__
86   strcpy (f2.name, "second.h");
87 #endif
88
89   *ps->stack_ptr = &f2;
90   eputs ("7\n");
91   ++ps->stack_ptr;
92   eputs ("s.stack_ptr -stack ="); eputs (itoa (ps->stack_ptr - ps->stack)); eputs ("\n");
93
94   for (file_struct **p = ps->stack; p < ps->stack_ptr; p++)
95     {
96       eputs ((*p)->name); eputs ("\n");
97     }
98
99   if (ps->stack_ptr >= ps->stack + STACK_SIZE) return 0;
100   struct file f3 = {"third.h"};
101   *ps->stack_ptr = &f3;
102   ++ps->stack_ptr;
103   return 3;
104 }