1 typedef struct descriptor_dimension
2 {
3   int stride;
4   int lbound;
5   int ubound;
6 } descriptor_dimension;
7 typedef struct {
8     int *data;
9     int dtype;
10     descriptor_dimension dim[7];
11 } gfc_array_i4;
12 
13 void
msum_i4(gfc_array_i4 * const retarray,gfc_array_i4 * const array,const int * const pdim)14 msum_i4 (gfc_array_i4 * const retarray,
15 	 gfc_array_i4 * const array,
16 	 const int * const pdim)
17 {
18   int count[7];
19   int extent[7];
20   int * dest;
21   const int * base;
22   int dim;
23   int n;
24   int len;
25 
26   dim = (*pdim) - 1;
27   len = array->dim[dim].ubound + 1 - array->dim[dim].lbound;
28 
29   for (n = 0; n < dim; n++)
30     {
31       extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound;
32       count[n] = 0;
33     }
34 
35   dest = retarray->data;
36   base = array->data;
37 
38   do
39     {
40       int result = 0;
41 
42       for (n = 0; n < len; n++, base++)
43 	result += *base;
44       *dest = result;
45 
46       count[0]++;
47       dest += 1;
48     }
49   while (count[0] != extent[0]);
50 }
51 
main()52 int main()
53 {
54   int rdata[3];
55   int adata[9];
56   gfc_array_i4 retarray = { rdata, 265, { { 1, 1, 3 } } };
57   gfc_array_i4 array = { adata, 266, { { 1, 1, 3 }, { 3, 1, 3 } } };
58   int dim = 2;
59   msum_i4 (&retarray, &array, &dim);
60   return 0;
61 }
62