1*b725ae77Skettenis #include <stdio.h>
2*b725ae77Skettenis #include <stdlib.h>
3*b725ae77Skettenis #include <string.h>
4*b725ae77Skettenis
5*b725ae77Skettenis /**************************************************************************
6*b725ae77Skettenis * TESTS :
7*b725ae77Skettenis * function returning large structures, which go on the stack
8*b725ae77Skettenis * functions returning varied sized structs which go on in the registers.
9*b725ae77Skettenis ***************************************************************************/
10*b725ae77Skettenis
11*b725ae77Skettenis
12*b725ae77Skettenis /* A large structure (> 64 bits) used to test passing large structures as
13*b725ae77Skettenis * parameters
14*b725ae77Skettenis */
15*b725ae77Skettenis
16*b725ae77Skettenis struct array_rep_info_t {
17*b725ae77Skettenis int next_index[10];
18*b725ae77Skettenis int values[10];
19*b725ae77Skettenis int head;
20*b725ae77Skettenis };
21*b725ae77Skettenis
22*b725ae77Skettenis /*****************************************************************************
23*b725ae77Skettenis * Small structures ( <= 64 bits). These are used to test passing small
24*b725ae77Skettenis * structures as parameters and test argument size promotion.
25*b725ae77Skettenis *****************************************************************************/
26*b725ae77Skettenis
27*b725ae77Skettenis /* 64 bits
28*b725ae77Skettenis */
29*b725ae77Skettenis struct small_rep_info_t {
30*b725ae77Skettenis int value;
31*b725ae77Skettenis int head;
32*b725ae77Skettenis };
33*b725ae77Skettenis
34*b725ae77Skettenis /* 6 bits : really fits in 8 bits and is promoted to 8 bits
35*b725ae77Skettenis */
36*b725ae77Skettenis struct bit_flags_char_t {
37*b725ae77Skettenis unsigned char alpha :1;
38*b725ae77Skettenis unsigned char beta :1;
39*b725ae77Skettenis unsigned char gamma :1;
40*b725ae77Skettenis unsigned char delta :1;
41*b725ae77Skettenis unsigned char epsilon :1;
42*b725ae77Skettenis unsigned char omega :1;
43*b725ae77Skettenis };
44*b725ae77Skettenis
45*b725ae77Skettenis /* 6 bits : really fits in 8 bits and is promoted to 16 bits
46*b725ae77Skettenis */
47*b725ae77Skettenis struct bit_flags_short_t {
48*b725ae77Skettenis unsigned short alpha :1;
49*b725ae77Skettenis unsigned short beta :1;
50*b725ae77Skettenis unsigned short gamma :1;
51*b725ae77Skettenis unsigned short delta :1;
52*b725ae77Skettenis unsigned short epsilon :1;
53*b725ae77Skettenis unsigned short omega :1;
54*b725ae77Skettenis };
55*b725ae77Skettenis
56*b725ae77Skettenis /* 6 bits : really fits in 8 bits and is promoted to 32 bits
57*b725ae77Skettenis */
58*b725ae77Skettenis struct bit_flags_t {
59*b725ae77Skettenis unsigned alpha :1;
60*b725ae77Skettenis unsigned beta :1;
61*b725ae77Skettenis unsigned gamma :1;
62*b725ae77Skettenis unsigned delta :1;
63*b725ae77Skettenis unsigned epsilon :1;
64*b725ae77Skettenis unsigned omega :1;
65*b725ae77Skettenis };
66*b725ae77Skettenis
67*b725ae77Skettenis /* 22 bits : really fits in 40 bits and is promoted to 64 bits
68*b725ae77Skettenis */
69*b725ae77Skettenis struct bit_flags_combo_t {
70*b725ae77Skettenis unsigned alpha :1;
71*b725ae77Skettenis unsigned beta :1;
72*b725ae77Skettenis char ch1;
73*b725ae77Skettenis unsigned gamma :1;
74*b725ae77Skettenis unsigned delta :1;
75*b725ae77Skettenis char ch2;
76*b725ae77Skettenis unsigned epsilon :1;
77*b725ae77Skettenis unsigned omega :1;
78*b725ae77Skettenis };
79*b725ae77Skettenis
80*b725ae77Skettenis /* 64 bits
81*b725ae77Skettenis */
82*b725ae77Skettenis struct one_double_t {
83*b725ae77Skettenis double double1;
84*b725ae77Skettenis };
85*b725ae77Skettenis
86*b725ae77Skettenis /* 64 bits
87*b725ae77Skettenis */
88*b725ae77Skettenis struct two_floats_t {
89*b725ae77Skettenis float float1;
90*b725ae77Skettenis float float2;
91*b725ae77Skettenis };
92*b725ae77Skettenis
93*b725ae77Skettenis
94*b725ae77Skettenis /* 24 bits : promoted to 32 bits
95*b725ae77Skettenis */
96*b725ae77Skettenis struct three_char_t {
97*b725ae77Skettenis char ch1;
98*b725ae77Skettenis char ch2;
99*b725ae77Skettenis char ch3;
100*b725ae77Skettenis };
101*b725ae77Skettenis
102*b725ae77Skettenis /* 40 bits : promoted to 64 bits
103*b725ae77Skettenis */
104*b725ae77Skettenis struct five_char_t {
105*b725ae77Skettenis char ch1;
106*b725ae77Skettenis char ch2;
107*b725ae77Skettenis char ch3;
108*b725ae77Skettenis char ch4;
109*b725ae77Skettenis char ch5;
110*b725ae77Skettenis };
111*b725ae77Skettenis
112*b725ae77Skettenis /* 40 bits : promoted to 64 bits
113*b725ae77Skettenis */
114*b725ae77Skettenis struct int_char_combo_t {
115*b725ae77Skettenis int int1;
116*b725ae77Skettenis char ch1;
117*b725ae77Skettenis };
118*b725ae77Skettenis
119*b725ae77Skettenis
120*b725ae77Skettenis /*****************************************************************
121*b725ae77Skettenis * LOOP_COUNT :
122*b725ae77Skettenis * A do nothing function. Used to provide a point at which calls can be made.
123*b725ae77Skettenis *****************************************************************/
loop_count()124*b725ae77Skettenis void loop_count () {
125*b725ae77Skettenis
126*b725ae77Skettenis int index;
127*b725ae77Skettenis
128*b725ae77Skettenis for (index=0; index<4; index++);
129*b725ae77Skettenis }
130*b725ae77Skettenis
131*b725ae77Skettenis /*****************************************************************
132*b725ae77Skettenis * INIT_BIT_FLAGS_CHAR :
133*b725ae77Skettenis * Initializes a bit_flags_char_t structure. Can call this function see
134*b725ae77Skettenis * the call command behavior when integer arguments do not fit into
135*b725ae77Skettenis * registers and must be placed on the stack.
136*b725ae77Skettenis * OUT struct bit_flags_char_t *bit_flags -- structure to be filled
137*b725ae77Skettenis * IN unsigned a -- 0 or 1
138*b725ae77Skettenis * IN unsigned b -- 0 or 1
139*b725ae77Skettenis * IN unsigned g -- 0 or 1
140*b725ae77Skettenis * IN unsigned d -- 0 or 1
141*b725ae77Skettenis * IN unsigned e -- 0 or 1
142*b725ae77Skettenis * IN unsigned o -- 0 or 1
143*b725ae77Skettenis *****************************************************************/
144*b725ae77Skettenis #ifdef PROTOTYPES
init_bit_flags_char(struct bit_flags_char_t * bit_flags,unsigned a,unsigned b,unsigned g,unsigned d,unsigned e,unsigned o)145*b725ae77Skettenis void init_bit_flags_char (
146*b725ae77Skettenis struct bit_flags_char_t *bit_flags,
147*b725ae77Skettenis unsigned a,
148*b725ae77Skettenis unsigned b,
149*b725ae77Skettenis unsigned g,
150*b725ae77Skettenis unsigned d,
151*b725ae77Skettenis unsigned e,
152*b725ae77Skettenis unsigned o)
153*b725ae77Skettenis #else
154*b725ae77Skettenis void init_bit_flags_char (bit_flags,a,b,g,d,e,o)
155*b725ae77Skettenis struct bit_flags_char_t *bit_flags;
156*b725ae77Skettenis unsigned a;
157*b725ae77Skettenis unsigned b;
158*b725ae77Skettenis unsigned g;
159*b725ae77Skettenis unsigned d;
160*b725ae77Skettenis unsigned e;
161*b725ae77Skettenis unsigned o;
162*b725ae77Skettenis #endif
163*b725ae77Skettenis {
164*b725ae77Skettenis
165*b725ae77Skettenis bit_flags->alpha = a;
166*b725ae77Skettenis bit_flags->beta = b;
167*b725ae77Skettenis bit_flags->gamma = g;
168*b725ae77Skettenis bit_flags->delta = d;
169*b725ae77Skettenis bit_flags->epsilon = e;
170*b725ae77Skettenis bit_flags->omega = o;
171*b725ae77Skettenis }
172*b725ae77Skettenis
173*b725ae77Skettenis /*****************************************************************
174*b725ae77Skettenis * INIT_BIT_FLAGS_SHORT :
175*b725ae77Skettenis * Initializes a bit_flags_short_t structure. Can call this function see
176*b725ae77Skettenis * the call command behavior when integer arguments do not fit into
177*b725ae77Skettenis * registers and must be placed on the stack.
178*b725ae77Skettenis * OUT struct bit_flags_short_t *bit_flags -- structure to be filled
179*b725ae77Skettenis * IN unsigned a -- 0 or 1
180*b725ae77Skettenis * IN unsigned b -- 0 or 1
181*b725ae77Skettenis * IN unsigned g -- 0 or 1
182*b725ae77Skettenis * IN unsigned d -- 0 or 1
183*b725ae77Skettenis * IN unsigned e -- 0 or 1
184*b725ae77Skettenis * IN unsigned o -- 0 or 1
185*b725ae77Skettenis *****************************************************************/
186*b725ae77Skettenis #ifdef PROTOTYPES
init_bit_flags_short(struct bit_flags_short_t * bit_flags,unsigned a,unsigned b,unsigned g,unsigned d,unsigned e,unsigned o)187*b725ae77Skettenis void init_bit_flags_short (
188*b725ae77Skettenis struct bit_flags_short_t *bit_flags,
189*b725ae77Skettenis unsigned a,
190*b725ae77Skettenis unsigned b,
191*b725ae77Skettenis unsigned g,
192*b725ae77Skettenis unsigned d,
193*b725ae77Skettenis unsigned e,
194*b725ae77Skettenis unsigned o)
195*b725ae77Skettenis #else
196*b725ae77Skettenis void init_bit_flags_short (bit_flags,a,b,g,d,e,o)
197*b725ae77Skettenis struct bit_flags_short_t *bit_flags;
198*b725ae77Skettenis unsigned a;
199*b725ae77Skettenis unsigned b;
200*b725ae77Skettenis unsigned g;
201*b725ae77Skettenis unsigned d;
202*b725ae77Skettenis unsigned e;
203*b725ae77Skettenis unsigned o;
204*b725ae77Skettenis #endif
205*b725ae77Skettenis {
206*b725ae77Skettenis
207*b725ae77Skettenis bit_flags->alpha = a;
208*b725ae77Skettenis bit_flags->beta = b;
209*b725ae77Skettenis bit_flags->gamma = g;
210*b725ae77Skettenis bit_flags->delta = d;
211*b725ae77Skettenis bit_flags->epsilon = e;
212*b725ae77Skettenis bit_flags->omega = o;
213*b725ae77Skettenis }
214*b725ae77Skettenis
215*b725ae77Skettenis /*****************************************************************
216*b725ae77Skettenis * INIT_BIT_FLAGS :
217*b725ae77Skettenis * Initializes a bit_flags_t structure. Can call this function see
218*b725ae77Skettenis * the call command behavior when integer arguments do not fit into
219*b725ae77Skettenis * registers and must be placed on the stack.
220*b725ae77Skettenis * OUT struct bit_flags_t *bit_flags -- structure to be filled
221*b725ae77Skettenis * IN unsigned a -- 0 or 1
222*b725ae77Skettenis * IN unsigned b -- 0 or 1
223*b725ae77Skettenis * IN unsigned g -- 0 or 1
224*b725ae77Skettenis * IN unsigned d -- 0 or 1
225*b725ae77Skettenis * IN unsigned e -- 0 or 1
226*b725ae77Skettenis * IN unsigned o -- 0 or 1
227*b725ae77Skettenis *****************************************************************/
228*b725ae77Skettenis #ifdef PROTOTYPES
init_bit_flags(struct bit_flags_t * bit_flags,unsigned a,unsigned b,unsigned g,unsigned d,unsigned e,unsigned o)229*b725ae77Skettenis void init_bit_flags (
230*b725ae77Skettenis struct bit_flags_t *bit_flags,
231*b725ae77Skettenis unsigned a,
232*b725ae77Skettenis unsigned b,
233*b725ae77Skettenis unsigned g,
234*b725ae77Skettenis unsigned d,
235*b725ae77Skettenis unsigned e,
236*b725ae77Skettenis unsigned o)
237*b725ae77Skettenis #else
238*b725ae77Skettenis void init_bit_flags (bit_flags,a,b,g,d,e,o)
239*b725ae77Skettenis struct bit_flags_t *bit_flags;
240*b725ae77Skettenis unsigned a;
241*b725ae77Skettenis unsigned b;
242*b725ae77Skettenis unsigned g;
243*b725ae77Skettenis unsigned d;
244*b725ae77Skettenis unsigned e;
245*b725ae77Skettenis unsigned o;
246*b725ae77Skettenis #endif
247*b725ae77Skettenis {
248*b725ae77Skettenis
249*b725ae77Skettenis bit_flags->alpha = a;
250*b725ae77Skettenis bit_flags->beta = b;
251*b725ae77Skettenis bit_flags->gamma = g;
252*b725ae77Skettenis bit_flags->delta = d;
253*b725ae77Skettenis bit_flags->epsilon = e;
254*b725ae77Skettenis bit_flags->omega = o;
255*b725ae77Skettenis }
256*b725ae77Skettenis
257*b725ae77Skettenis /*****************************************************************
258*b725ae77Skettenis * INIT_BIT_FLAGS_COMBO :
259*b725ae77Skettenis * Initializes a bit_flags_combo_t structure. Can call this function
260*b725ae77Skettenis * to see the call command behavior when integer and character arguments
261*b725ae77Skettenis * do not fit into registers and must be placed on the stack.
262*b725ae77Skettenis * OUT struct bit_flags_combo_t *bit_flags_combo -- structure to fill
263*b725ae77Skettenis * IN unsigned a -- 0 or 1
264*b725ae77Skettenis * IN unsigned b -- 0 or 1
265*b725ae77Skettenis * IN char ch1
266*b725ae77Skettenis * IN unsigned g -- 0 or 1
267*b725ae77Skettenis * IN unsigned d -- 0 or 1
268*b725ae77Skettenis * IN char ch2
269*b725ae77Skettenis * IN unsigned e -- 0 or 1
270*b725ae77Skettenis * IN unsigned o -- 0 or 1
271*b725ae77Skettenis *****************************************************************/
272*b725ae77Skettenis #ifdef PROTOTYPES
init_bit_flags_combo(struct bit_flags_combo_t * bit_flags_combo,unsigned a,unsigned b,char ch1,unsigned g,unsigned d,char ch2,unsigned e,unsigned o)273*b725ae77Skettenis void init_bit_flags_combo (
274*b725ae77Skettenis struct bit_flags_combo_t *bit_flags_combo,
275*b725ae77Skettenis unsigned a,
276*b725ae77Skettenis unsigned b,
277*b725ae77Skettenis char ch1,
278*b725ae77Skettenis unsigned g,
279*b725ae77Skettenis unsigned d,
280*b725ae77Skettenis char ch2,
281*b725ae77Skettenis unsigned e,
282*b725ae77Skettenis unsigned o)
283*b725ae77Skettenis #else
284*b725ae77Skettenis void init_bit_flags_combo (bit_flags_combo, a, b, ch1, g, d, ch2, e, o)
285*b725ae77Skettenis struct bit_flags_combo_t *bit_flags_combo;
286*b725ae77Skettenis unsigned a;
287*b725ae77Skettenis unsigned b;
288*b725ae77Skettenis char ch1;
289*b725ae77Skettenis unsigned g;
290*b725ae77Skettenis unsigned d;
291*b725ae77Skettenis char ch2;
292*b725ae77Skettenis unsigned e;
293*b725ae77Skettenis unsigned o;
294*b725ae77Skettenis #endif
295*b725ae77Skettenis {
296*b725ae77Skettenis
297*b725ae77Skettenis bit_flags_combo->alpha = a;
298*b725ae77Skettenis bit_flags_combo->beta = b;
299*b725ae77Skettenis bit_flags_combo->ch1 = ch1;
300*b725ae77Skettenis bit_flags_combo->gamma = g;
301*b725ae77Skettenis bit_flags_combo->delta = d;
302*b725ae77Skettenis bit_flags_combo->ch2 = ch2;
303*b725ae77Skettenis bit_flags_combo->epsilon = e;
304*b725ae77Skettenis bit_flags_combo->omega = o;
305*b725ae77Skettenis }
306*b725ae77Skettenis
307*b725ae77Skettenis
308*b725ae77Skettenis /*****************************************************************
309*b725ae77Skettenis * INIT_ONE_DOUBLE :
310*b725ae77Skettenis * OUT struct one_double_t *one_double -- structure to fill
311*b725ae77Skettenis * IN double init_val
312*b725ae77Skettenis *****************************************************************/
313*b725ae77Skettenis #ifdef PROTOTYPES
init_one_double(struct one_double_t * one_double,double init_val)314*b725ae77Skettenis void init_one_double ( struct one_double_t *one_double, double init_val)
315*b725ae77Skettenis #else
316*b725ae77Skettenis void init_one_double (one_double, init_val)
317*b725ae77Skettenis struct one_double_t *one_double;
318*b725ae77Skettenis double init_val;
319*b725ae77Skettenis #endif
320*b725ae77Skettenis {
321*b725ae77Skettenis
322*b725ae77Skettenis one_double->double1 = init_val;
323*b725ae77Skettenis }
324*b725ae77Skettenis
325*b725ae77Skettenis /*****************************************************************
326*b725ae77Skettenis * INIT_TWO_FLOATS :
327*b725ae77Skettenis * OUT struct two_floats_t *two_floats -- structure to be filled
328*b725ae77Skettenis * IN float init_val1
329*b725ae77Skettenis * IN float init_val2
330*b725ae77Skettenis *****************************************************************/
331*b725ae77Skettenis #ifdef PROTOTYPES
init_two_floats(struct two_floats_t * two_floats,float init_val1,float init_val2)332*b725ae77Skettenis void init_two_floats (
333*b725ae77Skettenis struct two_floats_t *two_floats,
334*b725ae77Skettenis float init_val1,
335*b725ae77Skettenis float init_val2)
336*b725ae77Skettenis #else
337*b725ae77Skettenis void init_two_floats (two_floats, init_val1, init_val2)
338*b725ae77Skettenis struct two_floats_t *two_floats;
339*b725ae77Skettenis float init_val1;
340*b725ae77Skettenis float init_val2;
341*b725ae77Skettenis #endif
342*b725ae77Skettenis {
343*b725ae77Skettenis
344*b725ae77Skettenis two_floats->float1 = init_val1;
345*b725ae77Skettenis two_floats->float2 = init_val2;
346*b725ae77Skettenis }
347*b725ae77Skettenis
348*b725ae77Skettenis /*****************************************************************
349*b725ae77Skettenis * INIT_THREE_CHARS :
350*b725ae77Skettenis * OUT struct three_char_t *three_char -- structure to be filled
351*b725ae77Skettenis * IN char init_val1
352*b725ae77Skettenis * IN char init_val2
353*b725ae77Skettenis * IN char init_val3
354*b725ae77Skettenis *****************************************************************/
355*b725ae77Skettenis #ifdef PROTOTYPES
init_three_chars(struct three_char_t * three_char,char init_val1,char init_val2,char init_val3)356*b725ae77Skettenis void init_three_chars (
357*b725ae77Skettenis struct three_char_t *three_char,
358*b725ae77Skettenis char init_val1,
359*b725ae77Skettenis char init_val2,
360*b725ae77Skettenis char init_val3)
361*b725ae77Skettenis #else
362*b725ae77Skettenis void init_three_chars ( three_char, init_val1, init_val2, init_val3)
363*b725ae77Skettenis struct three_char_t *three_char;
364*b725ae77Skettenis char init_val1;
365*b725ae77Skettenis char init_val2;
366*b725ae77Skettenis char init_val3;
367*b725ae77Skettenis #endif
368*b725ae77Skettenis {
369*b725ae77Skettenis
370*b725ae77Skettenis three_char->ch1 = init_val1;
371*b725ae77Skettenis three_char->ch2 = init_val2;
372*b725ae77Skettenis three_char->ch3 = init_val3;
373*b725ae77Skettenis }
374*b725ae77Skettenis
375*b725ae77Skettenis /*****************************************************************
376*b725ae77Skettenis * INIT_FIVE_CHARS :
377*b725ae77Skettenis * OUT struct five_char_t *five_char -- structure to be filled
378*b725ae77Skettenis * IN char init_val1
379*b725ae77Skettenis * IN char init_val2
380*b725ae77Skettenis * IN char init_val3
381*b725ae77Skettenis * IN char init_val4
382*b725ae77Skettenis * IN char init_val5
383*b725ae77Skettenis *****************************************************************/
384*b725ae77Skettenis #ifdef PROTOTYPES
init_five_chars(struct five_char_t * five_char,char init_val1,char init_val2,char init_val3,char init_val4,char init_val5)385*b725ae77Skettenis void init_five_chars (
386*b725ae77Skettenis struct five_char_t *five_char,
387*b725ae77Skettenis char init_val1,
388*b725ae77Skettenis char init_val2,
389*b725ae77Skettenis char init_val3,
390*b725ae77Skettenis char init_val4,
391*b725ae77Skettenis char init_val5)
392*b725ae77Skettenis #else
393*b725ae77Skettenis void init_five_chars ( five_char, init_val1, init_val2, init_val3, init_val4, init_val5)
394*b725ae77Skettenis struct five_char_t *five_char;
395*b725ae77Skettenis char init_val1;
396*b725ae77Skettenis char init_val2;
397*b725ae77Skettenis char init_val3;
398*b725ae77Skettenis char init_val4;
399*b725ae77Skettenis char init_val5;
400*b725ae77Skettenis #endif
401*b725ae77Skettenis {
402*b725ae77Skettenis
403*b725ae77Skettenis five_char->ch1 = init_val1;
404*b725ae77Skettenis five_char->ch2 = init_val2;
405*b725ae77Skettenis five_char->ch3 = init_val3;
406*b725ae77Skettenis five_char->ch4 = init_val4;
407*b725ae77Skettenis five_char->ch5 = init_val5;
408*b725ae77Skettenis }
409*b725ae77Skettenis
410*b725ae77Skettenis /*****************************************************************
411*b725ae77Skettenis * INIT_INT_CHAR_COMBO :
412*b725ae77Skettenis * OUT struct int_char_combo_t *combo -- structure to be filled
413*b725ae77Skettenis * IN int init_val1
414*b725ae77Skettenis * IN char init_val2
415*b725ae77Skettenis *****************************************************************/
416*b725ae77Skettenis #ifdef PROTOTYPES
init_int_char_combo(struct int_char_combo_t * combo,int init_val1,char init_val2)417*b725ae77Skettenis void init_int_char_combo (
418*b725ae77Skettenis struct int_char_combo_t *combo,
419*b725ae77Skettenis int init_val1,
420*b725ae77Skettenis char init_val2)
421*b725ae77Skettenis #else
422*b725ae77Skettenis void init_int_char_combo ( combo, init_val1, init_val2)
423*b725ae77Skettenis struct int_char_combo_t *combo;
424*b725ae77Skettenis int init_val1;
425*b725ae77Skettenis char init_val2;
426*b725ae77Skettenis #endif
427*b725ae77Skettenis {
428*b725ae77Skettenis
429*b725ae77Skettenis combo->int1 = init_val1;
430*b725ae77Skettenis combo->ch1 = init_val2;
431*b725ae77Skettenis }
432*b725ae77Skettenis
433*b725ae77Skettenis /*****************************************************************
434*b725ae77Skettenis * INIT_STRUCT_REP :
435*b725ae77Skettenis * OUT struct small_rep_into_t *small_struct -- structure to be filled
436*b725ae77Skettenis * IN int seed
437*b725ae77Skettenis *****************************************************************/
438*b725ae77Skettenis #ifdef PROTOTYPES
init_struct_rep(struct small_rep_info_t * small_struct,int seed)439*b725ae77Skettenis void init_struct_rep(
440*b725ae77Skettenis struct small_rep_info_t *small_struct,
441*b725ae77Skettenis int seed)
442*b725ae77Skettenis #else
443*b725ae77Skettenis void init_struct_rep( small_struct, seed)
444*b725ae77Skettenis struct small_rep_info_t *small_struct;
445*b725ae77Skettenis int seed;
446*b725ae77Skettenis #endif
447*b725ae77Skettenis {
448*b725ae77Skettenis
449*b725ae77Skettenis small_struct->value = 2 + (seed*2);
450*b725ae77Skettenis small_struct->head = 0;
451*b725ae77Skettenis }
452*b725ae77Skettenis
453*b725ae77Skettenis /*****************************************************************
454*b725ae77Skettenis * PRINT_BIT_FLAGS_CHAR :
455*b725ae77Skettenis * IN struct bit_flags_char_t bit_flags
456*b725ae77Skettenis ****************************************************************/
457*b725ae77Skettenis #ifdef PROTOTYPES
print_bit_flags_char(struct bit_flags_char_t bit_flags)458*b725ae77Skettenis struct bit_flags_char_t print_bit_flags_char (struct bit_flags_char_t bit_flags)
459*b725ae77Skettenis #else
460*b725ae77Skettenis struct bit_flags_char_t print_bit_flags_char ( bit_flags)
461*b725ae77Skettenis struct bit_flags_char_t bit_flags;
462*b725ae77Skettenis #endif
463*b725ae77Skettenis {
464*b725ae77Skettenis
465*b725ae77Skettenis if (bit_flags.alpha) printf("alpha\n");
466*b725ae77Skettenis if (bit_flags.beta) printf("beta\n");
467*b725ae77Skettenis if (bit_flags.gamma) printf("gamma\n");
468*b725ae77Skettenis if (bit_flags.delta) printf("delta\n");
469*b725ae77Skettenis if (bit_flags.epsilon) printf("epsilon\n");
470*b725ae77Skettenis if (bit_flags.omega) printf("omega\n");
471*b725ae77Skettenis return bit_flags;
472*b725ae77Skettenis
473*b725ae77Skettenis }
474*b725ae77Skettenis
475*b725ae77Skettenis /*****************************************************************
476*b725ae77Skettenis * PRINT_BIT_FLAGS_SHORT :
477*b725ae77Skettenis * IN struct bit_flags_short_t bit_flags
478*b725ae77Skettenis ****************************************************************/
479*b725ae77Skettenis #ifdef PROTOTYPES
print_bit_flags_short(struct bit_flags_short_t bit_flags)480*b725ae77Skettenis struct bit_flags_short_t print_bit_flags_short (struct bit_flags_short_t bit_flags)
481*b725ae77Skettenis #else
482*b725ae77Skettenis struct bit_flags_short_t print_bit_flags_short ( bit_flags)
483*b725ae77Skettenis struct bit_flags_short_t bit_flags;
484*b725ae77Skettenis #endif
485*b725ae77Skettenis {
486*b725ae77Skettenis
487*b725ae77Skettenis if (bit_flags.alpha) printf("alpha\n");
488*b725ae77Skettenis if (bit_flags.beta) printf("beta\n");
489*b725ae77Skettenis if (bit_flags.gamma) printf("gamma\n");
490*b725ae77Skettenis if (bit_flags.delta) printf("delta\n");
491*b725ae77Skettenis if (bit_flags.epsilon) printf("epsilon\n");
492*b725ae77Skettenis if (bit_flags.omega) printf("omega\n");
493*b725ae77Skettenis return bit_flags;
494*b725ae77Skettenis
495*b725ae77Skettenis }
496*b725ae77Skettenis
497*b725ae77Skettenis /*****************************************************************
498*b725ae77Skettenis * PRINT_BIT_FLAGS :
499*b725ae77Skettenis * IN struct bit_flags_t bit_flags
500*b725ae77Skettenis ****************************************************************/
501*b725ae77Skettenis #ifdef PROTOTYPES
print_bit_flags(struct bit_flags_t bit_flags)502*b725ae77Skettenis struct bit_flags_t print_bit_flags (struct bit_flags_t bit_flags)
503*b725ae77Skettenis #else
504*b725ae77Skettenis struct bit_flags_t print_bit_flags ( bit_flags)
505*b725ae77Skettenis struct bit_flags_t bit_flags;
506*b725ae77Skettenis #endif
507*b725ae77Skettenis {
508*b725ae77Skettenis
509*b725ae77Skettenis if (bit_flags.alpha) printf("alpha\n");
510*b725ae77Skettenis if (bit_flags.beta) printf("beta\n");
511*b725ae77Skettenis if (bit_flags.gamma) printf("gamma\n");
512*b725ae77Skettenis if (bit_flags.delta) printf("delta\n");
513*b725ae77Skettenis if (bit_flags.epsilon) printf("epsilon\n");
514*b725ae77Skettenis if (bit_flags.omega) printf("omega\n");
515*b725ae77Skettenis return bit_flags;
516*b725ae77Skettenis
517*b725ae77Skettenis }
518*b725ae77Skettenis
519*b725ae77Skettenis /*****************************************************************
520*b725ae77Skettenis * PRINT_BIT_FLAGS_COMBO :
521*b725ae77Skettenis * IN struct bit_flags_combo_t bit_flags_combo
522*b725ae77Skettenis ****************************************************************/
523*b725ae77Skettenis #ifdef PROTOTYPES
print_bit_flags_combo(struct bit_flags_combo_t bit_flags_combo)524*b725ae77Skettenis struct bit_flags_combo_t print_bit_flags_combo (struct bit_flags_combo_t bit_flags_combo)
525*b725ae77Skettenis #else
526*b725ae77Skettenis struct bit_flags_combo_t print_bit_flags_combo ( bit_flags_combo )
527*b725ae77Skettenis struct bit_flags_combo_t bit_flags_combo;
528*b725ae77Skettenis #endif
529*b725ae77Skettenis {
530*b725ae77Skettenis
531*b725ae77Skettenis if (bit_flags_combo.alpha) printf("alpha\n");
532*b725ae77Skettenis if (bit_flags_combo.beta) printf("beta\n");
533*b725ae77Skettenis if (bit_flags_combo.gamma) printf("gamma\n");
534*b725ae77Skettenis if (bit_flags_combo.delta) printf("delta\n");
535*b725ae77Skettenis if (bit_flags_combo.epsilon) printf("epsilon\n");
536*b725ae77Skettenis if (bit_flags_combo.omega) printf("omega\n");
537*b725ae77Skettenis printf("ch1: %c\tch2: %c\n", bit_flags_combo.ch1, bit_flags_combo.ch2);
538*b725ae77Skettenis return bit_flags_combo;
539*b725ae77Skettenis
540*b725ae77Skettenis }
541*b725ae77Skettenis
542*b725ae77Skettenis /*****************************************************************
543*b725ae77Skettenis * PRINT_ONE_DOUBLE :
544*b725ae77Skettenis * IN struct one_double_t one_double
545*b725ae77Skettenis ****************************************************************/
546*b725ae77Skettenis #ifdef PROTOTYPES
print_one_double(struct one_double_t one_double)547*b725ae77Skettenis struct one_double_t print_one_double (struct one_double_t one_double)
548*b725ae77Skettenis #else
549*b725ae77Skettenis struct one_double_t print_one_double ( one_double )
550*b725ae77Skettenis struct one_double_t one_double;
551*b725ae77Skettenis #endif
552*b725ae77Skettenis {
553*b725ae77Skettenis
554*b725ae77Skettenis printf("Contents of one_double_t: \n\n");
555*b725ae77Skettenis printf("%f\n", one_double.double1);
556*b725ae77Skettenis return one_double;
557*b725ae77Skettenis
558*b725ae77Skettenis }
559*b725ae77Skettenis
560*b725ae77Skettenis /*****************************************************************
561*b725ae77Skettenis * PRINT_TWO_FLOATS :
562*b725ae77Skettenis * IN struct two_floats_t two_floats
563*b725ae77Skettenis ****************************************************************/
564*b725ae77Skettenis #ifdef PROTOTYPES
print_two_floats(struct two_floats_t two_floats)565*b725ae77Skettenis struct two_floats_t print_two_floats (struct two_floats_t two_floats)
566*b725ae77Skettenis #else
567*b725ae77Skettenis struct two_floats_t print_two_floats ( two_floats )
568*b725ae77Skettenis struct two_floats_t two_floats;
569*b725ae77Skettenis #endif
570*b725ae77Skettenis {
571*b725ae77Skettenis
572*b725ae77Skettenis printf("Contents of two_floats_t: \n\n");
573*b725ae77Skettenis printf("%f\t%f\n", two_floats.float1, two_floats.float2);
574*b725ae77Skettenis return two_floats;
575*b725ae77Skettenis
576*b725ae77Skettenis }
577*b725ae77Skettenis
578*b725ae77Skettenis /*****************************************************************
579*b725ae77Skettenis * PRINT_THREE_CHARS :
580*b725ae77Skettenis * IN struct three_char_t three_char
581*b725ae77Skettenis ****************************************************************/
582*b725ae77Skettenis #ifdef PROTOTYPES
print_three_chars(struct three_char_t three_char)583*b725ae77Skettenis struct three_char_t print_three_chars (struct three_char_t three_char)
584*b725ae77Skettenis #else
585*b725ae77Skettenis struct three_char_t print_three_chars ( three_char )
586*b725ae77Skettenis struct three_char_t three_char;
587*b725ae77Skettenis #endif
588*b725ae77Skettenis {
589*b725ae77Skettenis
590*b725ae77Skettenis printf("Contents of three_char_t: \n\n");
591*b725ae77Skettenis printf("%c\t%c\t%c\n", three_char.ch1, three_char.ch2, three_char.ch3);
592*b725ae77Skettenis return three_char;
593*b725ae77Skettenis
594*b725ae77Skettenis }
595*b725ae77Skettenis
596*b725ae77Skettenis /*****************************************************************
597*b725ae77Skettenis * PRINT_FIVE_CHARS :
598*b725ae77Skettenis * IN struct five_char_t five_char
599*b725ae77Skettenis ****************************************************************/
600*b725ae77Skettenis #ifdef PROTOTYPES
print_five_chars(struct five_char_t five_char)601*b725ae77Skettenis struct five_char_t print_five_chars (struct five_char_t five_char)
602*b725ae77Skettenis #else
603*b725ae77Skettenis struct five_char_t print_five_chars ( five_char )
604*b725ae77Skettenis struct five_char_t five_char;
605*b725ae77Skettenis #endif
606*b725ae77Skettenis {
607*b725ae77Skettenis
608*b725ae77Skettenis printf("Contents of five_char_t: \n\n");
609*b725ae77Skettenis printf("%c\t%c\t%c\t%c\t%c\n", five_char.ch1, five_char.ch2,
610*b725ae77Skettenis five_char.ch3, five_char.ch4,
611*b725ae77Skettenis five_char.ch5);
612*b725ae77Skettenis return five_char;
613*b725ae77Skettenis
614*b725ae77Skettenis }
615*b725ae77Skettenis
616*b725ae77Skettenis /*****************************************************************
617*b725ae77Skettenis * PRINT_INT_CHAR_COMBO :
618*b725ae77Skettenis * IN struct int_char_combo_t int_char_combo
619*b725ae77Skettenis ****************************************************************/
620*b725ae77Skettenis #ifdef PROTOTYPES
print_int_char_combo(struct int_char_combo_t int_char_combo)621*b725ae77Skettenis struct int_char_combo_t print_int_char_combo (struct int_char_combo_t int_char_combo)
622*b725ae77Skettenis #else
623*b725ae77Skettenis struct int_char_combo_t print_int_char_combo ( int_char_combo )
624*b725ae77Skettenis struct int_char_combo_t int_char_combo;
625*b725ae77Skettenis #endif
626*b725ae77Skettenis {
627*b725ae77Skettenis
628*b725ae77Skettenis printf("Contents of int_char_combo_t: \n\n");
629*b725ae77Skettenis printf("%d\t%c\n", int_char_combo.int1, int_char_combo.ch1);
630*b725ae77Skettenis return int_char_combo;
631*b725ae77Skettenis
632*b725ae77Skettenis }
633*b725ae77Skettenis
634*b725ae77Skettenis /*****************************************************************
635*b725ae77Skettenis * PRINT_STRUCT_REP :
636*b725ae77Skettenis ****************************************************************/
637*b725ae77Skettenis #ifdef PROTOTYPES
print_struct_rep(struct small_rep_info_t struct1)638*b725ae77Skettenis struct small_rep_info_t print_struct_rep(struct small_rep_info_t struct1)
639*b725ae77Skettenis #else
640*b725ae77Skettenis struct small_rep_info_t print_struct_rep( struct1 )
641*b725ae77Skettenis struct small_rep_info_t struct1;
642*b725ae77Skettenis #endif
643*b725ae77Skettenis {
644*b725ae77Skettenis
645*b725ae77Skettenis printf("Contents of struct1: \n\n");
646*b725ae77Skettenis printf("%10d%10d\n", struct1.value, struct1.head);
647*b725ae77Skettenis struct1.value =+5;
648*b725ae77Skettenis
649*b725ae77Skettenis return struct1;
650*b725ae77Skettenis
651*b725ae77Skettenis
652*b725ae77Skettenis }
653*b725ae77Skettenis
654*b725ae77Skettenis
655*b725ae77Skettenis #ifdef PROTOTYPES
print_one_large_struct(struct array_rep_info_t linked_list1)656*b725ae77Skettenis struct array_rep_info_t print_one_large_struct(struct array_rep_info_t linked_list1)
657*b725ae77Skettenis #else
658*b725ae77Skettenis struct array_rep_info_t print_one_large_struct( linked_list1 )
659*b725ae77Skettenis struct array_rep_info_t linked_list1;
660*b725ae77Skettenis #endif
661*b725ae77Skettenis {
662*b725ae77Skettenis
663*b725ae77Skettenis
664*b725ae77Skettenis printf("%10d%10d\n", linked_list1.values[0],
665*b725ae77Skettenis linked_list1.next_index[0]);
666*b725ae77Skettenis
667*b725ae77Skettenis return linked_list1;
668*b725ae77Skettenis
669*b725ae77Skettenis }
670*b725ae77Skettenis
671*b725ae77Skettenis /*****************************************************************
672*b725ae77Skettenis * INIT_ARRAY_REP :
673*b725ae77Skettenis * IN struct array_rep_info_t *linked_list
674*b725ae77Skettenis * IN int seed
675*b725ae77Skettenis ****************************************************************/
676*b725ae77Skettenis #ifdef PROTOTYPES
init_array_rep(struct array_rep_info_t * linked_list,int seed)677*b725ae77Skettenis void init_array_rep(struct array_rep_info_t *linked_list, int seed)
678*b725ae77Skettenis #else
679*b725ae77Skettenis void init_array_rep( linked_list, seed )
680*b725ae77Skettenis struct array_rep_info_t *linked_list;
681*b725ae77Skettenis int seed;
682*b725ae77Skettenis #endif
683*b725ae77Skettenis {
684*b725ae77Skettenis
685*b725ae77Skettenis int index;
686*b725ae77Skettenis
687*b725ae77Skettenis for (index = 0; index < 10; index++) {
688*b725ae77Skettenis
689*b725ae77Skettenis linked_list->values[index] = (2*index) + (seed*2);
690*b725ae77Skettenis linked_list->next_index[index] = index + 1;
691*b725ae77Skettenis }
692*b725ae77Skettenis linked_list->head = 0;
693*b725ae77Skettenis }
694*b725ae77Skettenis
695*b725ae77Skettenis
main()696*b725ae77Skettenis int main () {
697*b725ae77Skettenis
698*b725ae77Skettenis /* variables for large structure testing
699*b725ae77Skettenis */
700*b725ae77Skettenis int number = 10;
701*b725ae77Skettenis struct array_rep_info_t *list1;
702*b725ae77Skettenis
703*b725ae77Skettenis /* variables for testing a small structures and a very long argument list
704*b725ae77Skettenis */
705*b725ae77Skettenis struct small_rep_info_t *struct1;
706*b725ae77Skettenis struct bit_flags_char_t *cflags;
707*b725ae77Skettenis struct bit_flags_short_t *sflags;
708*b725ae77Skettenis struct bit_flags_t *flags;
709*b725ae77Skettenis struct bit_flags_combo_t *flags_combo;
710*b725ae77Skettenis struct three_char_t *three_char;
711*b725ae77Skettenis struct five_char_t *five_char;
712*b725ae77Skettenis struct int_char_combo_t *int_char_combo;
713*b725ae77Skettenis struct one_double_t *d1;
714*b725ae77Skettenis struct two_floats_t *f3;
715*b725ae77Skettenis
716*b725ae77Skettenis
717*b725ae77Skettenis /* Allocate space for large structures
718*b725ae77Skettenis */
719*b725ae77Skettenis list1 = (struct array_rep_info_t *)malloc(sizeof(struct array_rep_info_t));
720*b725ae77Skettenis
721*b725ae77Skettenis /* Initialize large structures
722*b725ae77Skettenis */
723*b725ae77Skettenis init_array_rep(list1, 2);
724*b725ae77Skettenis
725*b725ae77Skettenis /* Print large structures
726*b725ae77Skettenis */
727*b725ae77Skettenis print_one_large_struct(*list1);
728*b725ae77Skettenis
729*b725ae77Skettenis /* Allocate space for small structures
730*b725ae77Skettenis */
731*b725ae77Skettenis struct1 = (struct small_rep_info_t *)malloc(sizeof(struct small_rep_info_t));
732*b725ae77Skettenis cflags = (struct bit_flags_char_t *)malloc(sizeof(struct bit_flags_char_t));
733*b725ae77Skettenis sflags = (struct bit_flags_short_t *)malloc(sizeof(struct bit_flags_short_t));
734*b725ae77Skettenis flags = (struct bit_flags_t *)malloc(sizeof(struct bit_flags_t));
735*b725ae77Skettenis flags_combo = (struct bit_flags_combo_t *)malloc(sizeof(struct bit_flags_combo_t));
736*b725ae77Skettenis three_char = (struct three_char_t *)malloc(sizeof(struct three_char_t));
737*b725ae77Skettenis five_char = (struct five_char_t *)malloc(sizeof(struct five_char_t));
738*b725ae77Skettenis int_char_combo = (struct int_char_combo_t *)malloc(sizeof(struct int_char_combo_t));
739*b725ae77Skettenis
740*b725ae77Skettenis d1 = (struct one_double_t *)malloc(sizeof(struct one_double_t));
741*b725ae77Skettenis f3 = (struct two_floats_t *)malloc(sizeof(struct two_floats_t));
742*b725ae77Skettenis
743*b725ae77Skettenis /* Initialize small structures
744*b725ae77Skettenis */
745*b725ae77Skettenis init_one_double ( d1, 1.11111);
746*b725ae77Skettenis init_two_floats ( f3, -2.345, 1.0);
747*b725ae77Skettenis init_bit_flags_char(cflags, (unsigned)1, (unsigned)0, (unsigned)1,
748*b725ae77Skettenis (unsigned)0, (unsigned)1, (unsigned)0 );
749*b725ae77Skettenis init_bit_flags_short(sflags, (unsigned)1, (unsigned)0, (unsigned)1,
750*b725ae77Skettenis (unsigned)0, (unsigned)1, (unsigned)0 );
751*b725ae77Skettenis init_bit_flags(flags, (unsigned)1, (unsigned)0, (unsigned)1,
752*b725ae77Skettenis (unsigned)0, (unsigned)1, (unsigned)0 );
753*b725ae77Skettenis init_bit_flags_combo(flags_combo, (unsigned)1, (unsigned)0, 'y',
754*b725ae77Skettenis (unsigned)1, (unsigned)0, 'n',
755*b725ae77Skettenis (unsigned)1, (unsigned)0 );
756*b725ae77Skettenis init_three_chars(three_char, 'x', 'y', 'z');
757*b725ae77Skettenis init_five_chars(five_char, 'h', 'e', 'l', 'l', 'o');
758*b725ae77Skettenis init_int_char_combo(int_char_combo, 13, '!');
759*b725ae77Skettenis init_struct_rep(struct1, 10);
760*b725ae77Skettenis
761*b725ae77Skettenis
762*b725ae77Skettenis /* Print small structures
763*b725ae77Skettenis */
764*b725ae77Skettenis print_one_double(*d1);
765*b725ae77Skettenis print_two_floats(*f3);
766*b725ae77Skettenis print_bit_flags_char(*cflags);
767*b725ae77Skettenis print_bit_flags_short(*sflags);
768*b725ae77Skettenis print_bit_flags(*flags);
769*b725ae77Skettenis print_bit_flags_combo(*flags_combo);
770*b725ae77Skettenis print_three_chars(*three_char);
771*b725ae77Skettenis print_five_chars(*five_char);
772*b725ae77Skettenis print_int_char_combo(*int_char_combo);
773*b725ae77Skettenis print_struct_rep(*struct1);
774*b725ae77Skettenis
775*b725ae77Skettenis loop_count();
776*b725ae77Skettenis
777*b725ae77Skettenis return 0;
778*b725ae77Skettenis }
779*b725ae77Skettenis
780*b725ae77Skettenis
781*b725ae77Skettenis
782*b725ae77Skettenis
783*b725ae77Skettenis
784*b725ae77Skettenis
785*b725ae77Skettenis
786*b725ae77Skettenis
787*b725ae77Skettenis
788*b725ae77Skettenis
789*b725ae77Skettenis
790*b725ae77Skettenis
791*b725ae77Skettenis
792*b725ae77Skettenis
793*b725ae77Skettenis
794