gdb/riscv: Add command to switch between numeric & abi register names
[binutils-gdb.git] / gdb / testsuite / gdb.base / call-ar-st.c
blob4eac3f4d4cbfcf1e93fbfb945b1f064dbe422814
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
6 #include "unbuffer_output.c"
8 /**************************************************************************
9 * TESTS :
10 * -- function arguments that are enumerated types
11 * -- small structure arguments ( <= 64 bits )
12 * -- stored in registers
13 * -- stored on the stack
14 * -- large structure arguments ( > 64 bits )
15 * -- stored in registers
16 * -- stored on the stack
17 * -- array arguments
18 * -- caller is a leaf routine :
19 * -- use the call command from within an init routine (i.e.
20 * init_bit_flags, init_bit_flags_combo, init_array_rep)
21 * -- caller doesn't have enough space for all the function arguments :
22 * -- call print_long_arg_list from inside print_small_structs
23 ***************************************************************************/
25 /* Some enumerated types -- used to test that the structural data type is
26 * retrieved for function arguments with typedef data types.
28 typedef int id_int;
30 typedef enum {
31 BLACK,
32 BLUE,
33 BROWN,
34 ECRUE,
35 GOLD,
36 GRAY,
37 GREEN,
38 IVORY,
39 MAUVE,
40 ORANGE,
41 PINK,
42 PURPLE,
43 RED,
44 SILVER,
45 TAN,
46 VIOLET,
47 WHITE,
48 YELLOW} colors;
50 /* A large structure (> 64 bits) used to test passing large structures as
51 * parameters
54 struct array_rep_info_t {
55 int next_index[10];
56 int values[10];
57 int head;
60 /*****************************************************************************
61 * Small structures ( <= 64 bits). These are used to test passing small
62 * structures as parameters and test argument size promotion.
63 *****************************************************************************/
65 /* 64 bits
67 struct small_rep_info_t {
68 int value;
69 int head;
72 /* 6 bits : really fits in 8 bits and is promoted to 32 bits
74 struct bit_flags_t {
75 unsigned alpha :1;
76 unsigned beta :1;
77 unsigned gamma :1;
78 unsigned delta :1;
79 unsigned epsilon :1;
80 unsigned omega :1;
83 /* 22 bits : really fits in 40 bits and is promoted to 64 bits
85 struct bit_flags_combo_t {
86 unsigned alpha :1;
87 unsigned beta :1;
88 char ch1;
89 unsigned gamma :1;
90 unsigned delta :1;
91 char ch2;
92 unsigned epsilon :1;
93 unsigned omega :1;
96 /* 64 bits
98 struct one_double_t {
99 double double1;
102 /* 64 bits
104 struct two_floats_t {
105 float float1;
106 float float2;
109 /* 16 bits : promoted to 32 bits
111 struct two_char_t {
112 char ch1;
113 char ch2;
116 /* 24 bits : promoted to 32 bits
118 struct three_char_t {
119 char ch1;
120 char ch2;
121 char ch3;
124 /* 40 bits : promoted to 64 bits
126 struct five_char_t {
127 char ch1;
128 char ch2;
129 char ch3;
130 char ch4;
131 char ch5;
134 /* 40 bits : promoted to 64 bits
136 struct int_char_combo_t {
137 int int1;
138 char ch1;
141 /*****************************************************************
142 * PRINT_STUDENT_ID_SHIRT_COLOR :
143 * IN id_int student -- enumerated type
144 * IN colors shirt -- enumerated type
145 *****************************************************************/
146 void print_student_id_shirt_color (id_int student, colors shirt)
149 printf("student id : %d\t", student);
150 printf("shirt color : ");
151 switch (shirt) {
152 case BLACK : printf("BLACK\n");
153 break;
154 case BLUE : printf("BLUE\n");
155 break;
156 case BROWN : printf("BROWN\n");
157 break;
158 case ECRUE : printf("ECRUE\n");
159 break;
160 case GOLD : printf("GOLD\n");
161 break;
162 case GRAY : printf("GRAY\n");
163 break;
164 case GREEN : printf("GREEN\n");
165 break;
166 case IVORY : printf("IVORY\n");
167 break;
168 case MAUVE : printf("MAUVE\n");
169 break;
170 case ORANGE : printf("ORANGE\n");
171 break;
172 case PINK : printf("PINK\n");
173 break;
174 case PURPLE : printf("PURPLE\n");
175 break;
176 case RED : printf("RED\n");
177 break;
178 case SILVER : printf("SILVER\n");
179 break;
180 case TAN : printf("TAN\n");
181 break;
182 case VIOLET : printf("VIOLET\n");
183 break;
184 case WHITE : printf("WHITE\n");
185 break;
186 case YELLOW : printf("YELLOW\n");
187 break;
191 /*****************************************************************
192 * PRINT_CHAR_ARRAY :
193 * IN char array_c[] -- character array
194 *****************************************************************/
195 void print_char_array (char array_c[])
198 int index;
200 printf("array_c :\n");
201 printf("=========\n\n");
202 for (index = 0; index < 120; index++) {
203 printf("%1c", array_c[index]);
204 if ((index%50) == 0) printf("\n");
206 printf("\n\n");
209 /*****************************************************************
210 * PRINT_DOUBLE_ARRAY :
211 * IN double array_d[] -- array of doubles
212 *****************************************************************/
213 void print_double_array (double array_d[])
216 int index;
218 printf("array_d :\n");
219 printf("=========\n\n");
220 for (index = 0; index < 9; index++) {
221 printf("%f ", array_d[index]);
222 if ((index%8) == 0) printf("\n");
224 printf("\n\n");
227 /*****************************************************************
228 * PRINT_FLOAT_ARRAY:
229 * IN float array_f[] -- array of floats
230 *****************************************************************/
231 void print_float_array (float array_f[])
234 int index;
236 printf("array_f :\n");
237 printf("=========\n\n");
238 for (index = 0; index < 15; index++) {
239 printf("%f ", array_f[index]);
240 if ((index%8) == 0) printf("\n");
243 printf("\n\n");
246 /*****************************************************************
247 * PRINT_INT_ARRAY:
248 * IN int array_i[] -- array of integers
249 *****************************************************************/
250 void print_int_array (int array_i[])
253 int index;
255 printf("array_i :\n");
256 printf("=========\n\n");
257 for (index = 0; index < 50; index++) {
258 printf("%d ", array_i[index]);
259 if ((index%8) == 0) printf("\n");
261 printf("\n\n");
265 /*****************************************************************
266 * PRINT_ALL_ARRAYS:
267 * IN int array_i[] -- array of integers
268 * IN char array_c[] -- array of characters
269 * IN float array_f[] -- array of floats
270 * IN double array_d[] -- array of doubles
271 *****************************************************************/
272 void print_all_arrays(int array_i[], char array_c[], float array_f[], double array_d[])
274 print_int_array(array_i); /* -step1- */
275 print_char_array(array_c); /* -next1- */
276 print_float_array(array_f);
277 print_double_array(array_d);
280 /*****************************************************************
281 * LOOP_COUNT :
282 * A do nothing function. Used to provide a point at which calls can be made.
283 *****************************************************************/
284 void loop_count () {
286 int index;
288 for (index=0; index<4; index++);
291 /*****************************************************************
292 * COMPUTE_WITH_SMALL_STRUCTS :
293 * A do nothing function. Used to provide a point at which calls can be made.
294 * IN int seed
295 *****************************************************************/
296 void compute_with_small_structs (int seed)
299 struct small_rep_info_t array[4];
300 int index;
302 for (index = 0; index < 4; index++) {
303 array[index].value = index*seed;
304 array[index].head = (index+1)*seed;
307 for (index = 1; index < 4; index++) {
308 array[index].value = array[index].value + array[index-1].value;
309 array[index].head = array[index].head + array[index-1].head;
313 /*****************************************************************
314 * INIT_BIT_FLAGS :
315 * Initializes a bit_flags_t structure. Can call this function see
316 * the call command behavior when integer arguments do not fit into
317 * registers and must be placed on the stack.
318 * OUT struct bit_flags_t *bit_flags -- structure to be filled
319 * IN unsigned a -- 0 or 1
320 * IN unsigned b -- 0 or 1
321 * IN unsigned g -- 0 or 1
322 * IN unsigned d -- 0 or 1
323 * IN unsigned e -- 0 or 1
324 * IN unsigned o -- 0 or 1
325 *****************************************************************/
326 void init_bit_flags (struct bit_flags_t *bit_flags, unsigned a, unsigned b, unsigned g, unsigned d, unsigned e, unsigned o)
329 bit_flags->alpha = a;
330 bit_flags->beta = b;
331 bit_flags->gamma = g;
332 bit_flags->delta = d;
333 bit_flags->epsilon = e;
334 bit_flags->omega = o;
337 /*****************************************************************
338 * INIT_BIT_FLAGS_COMBO :
339 * Initializes a bit_flags_combo_t structure. Can call this function
340 * to see the call command behavior when integer and character arguments
341 * do not fit into registers and must be placed on the stack.
342 * OUT struct bit_flags_combo_t *bit_flags_combo -- structure to fill
343 * IN unsigned a -- 0 or 1
344 * IN unsigned b -- 0 or 1
345 * IN char ch1
346 * IN unsigned g -- 0 or 1
347 * IN unsigned d -- 0 or 1
348 * IN char ch2
349 * IN unsigned e -- 0 or 1
350 * IN unsigned o -- 0 or 1
351 *****************************************************************/
352 void 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)
355 bit_flags_combo->alpha = a; /* -step3- */
356 bit_flags_combo->beta = b;
357 bit_flags_combo->ch1 = ch1;
358 bit_flags_combo->gamma = g;
359 bit_flags_combo->delta = d;
360 bit_flags_combo->ch2 = ch2;
361 bit_flags_combo->epsilon = e;
362 bit_flags_combo->omega = o;
366 /*****************************************************************
367 * INIT_ONE_DOUBLE :
368 * OUT struct one_double_t *one_double -- structure to fill
369 * IN double init_val
370 *****************************************************************/
371 void init_one_double (struct one_double_t *one_double, double init_val)
374 one_double->double1 = init_val;
377 /*****************************************************************
378 * INIT_TWO_FLOATS :
379 * OUT struct two_floats_t *two_floats -- structure to be filled
380 * IN float init_val1
381 * IN float init_val2
382 *****************************************************************/
383 void init_two_floats (struct two_floats_t *two_floats, float init_val1, float init_val2)
385 two_floats->float1 = init_val1;
386 two_floats->float2 = init_val2;
389 /*****************************************************************
390 * INIT_TWO_CHARS :
391 * OUT struct two_char_t *two_char -- structure to be filled
392 * IN char init_val1
393 * IN char init_val2
394 *****************************************************************/
395 void init_two_chars (struct two_char_t *two_char, char init_val1, char init_val2)
398 two_char->ch1 = init_val1;
399 two_char->ch2 = init_val2;
402 /*****************************************************************
403 * INIT_THREE_CHARS :
404 * OUT struct three_char_t *three_char -- structure to be filled
405 * IN char init_val1
406 * IN char init_val2
407 * IN char init_val3
408 *****************************************************************/
409 void init_three_chars (struct three_char_t *three_char, char init_val1, char init_val2, char init_val3)
412 three_char->ch1 = init_val1;
413 three_char->ch2 = init_val2;
414 three_char->ch3 = init_val3;
417 /*****************************************************************
418 * INIT_FIVE_CHARS :
419 * OUT struct five_char_t *five_char -- structure to be filled
420 * IN char init_val1
421 * IN char init_val2
422 * IN char init_val3
423 * IN char init_val4
424 * IN char init_val5
425 *****************************************************************/
426 void init_five_chars (struct five_char_t *five_char, char init_val1, char init_val2, char init_val3, char init_val4, char init_val5)
428 five_char->ch1 = init_val1;
429 five_char->ch2 = init_val2;
430 five_char->ch3 = init_val3;
431 five_char->ch4 = init_val4;
432 five_char->ch5 = init_val5;
435 /*****************************************************************
436 * INIT_INT_CHAR_COMBO :
437 * OUT struct int_char_combo_t *combo -- structure to be filled
438 * IN int init_val1
439 * IN char init_val2
440 *****************************************************************/
441 void init_int_char_combo (struct int_char_combo_t *combo, int init_val1, char init_val2)
444 combo->int1 = init_val1;
445 combo->ch1 = init_val2;
448 /*****************************************************************
449 * INIT_STRUCT_REP :
450 * OUT struct small_rep_into_t *small_struct -- structure to be filled
451 * IN int seed
452 *****************************************************************/
453 void init_struct_rep(struct small_rep_info_t *small_struct, int seed)
456 small_struct->value = 2 + (seed*2);
457 small_struct->head = 0;
460 /*****************************************************************
461 * INIT_SMALL_STRUCTS :
462 * Takes all the small structures as input and calls the appropriate
463 * initialization routine for each structure
464 *****************************************************************/
465 void init_small_structs (
466 struct small_rep_info_t *struct1,
467 struct small_rep_info_t *struct2,
468 struct small_rep_info_t *struct3,
469 struct small_rep_info_t *struct4,
470 struct bit_flags_t *flags,
471 struct bit_flags_combo_t *flags_combo,
472 struct three_char_t *three_char,
473 struct five_char_t *five_char,
474 struct int_char_combo_t *int_char_combo,
475 struct one_double_t *d1,
476 struct one_double_t *d2,
477 struct one_double_t *d3,
478 struct two_floats_t *f1,
479 struct two_floats_t *f2,
480 struct two_floats_t *f3)
483 init_bit_flags(flags, (unsigned)1, (unsigned)0, (unsigned)1,
484 (unsigned)0, (unsigned)1, (unsigned)0 );
485 init_bit_flags_combo(flags_combo, (unsigned)1, (unsigned)0, 'y',
486 (unsigned)1, (unsigned)0, 'n',
487 (unsigned)1, (unsigned)0 );
488 init_three_chars(three_char, 'a', 'b', 'c');
489 init_five_chars(five_char, 'l', 'm', 'n', 'o', 'p');
490 init_int_char_combo(int_char_combo, 123, 'z');
491 init_struct_rep(struct1, 2);
492 init_struct_rep(struct2, 4);
493 init_struct_rep(struct3, 5);
494 init_struct_rep(struct4, 6);
495 init_one_double ( d1, 10.5);
496 init_one_double ( d2, -3.375);
497 init_one_double ( d3, 675.09375);
498 init_two_floats ( f1, 45.234, 43.6);
499 init_two_floats ( f2, 78.01, 122.10);
500 init_two_floats ( f3, -1232.345, -199.21);
503 /*****************************************************************
504 * PRINT_TEN_DOUBLES :
505 * ?????????????????????????????
506 ****************************************************************/
507 void print_ten_doubles (
508 double d1,
509 double d2,
510 double d3,
511 double d4,
512 double d5,
513 double d6,
514 double d7,
515 double d8,
516 double d9,
517 double d10)
520 printf("Two Doubles : %f\t%f\n", d1, d2);
521 printf("Two Doubles : %f\t%f\n", d3, d4);
522 printf("Two Doubles : %f\t%f\n", d5, d6);
523 printf("Two Doubles : %f\t%f\n", d7, d8);
524 printf("Two Doubles : %f\t%f\n", d9, d10);
527 /*****************************************************************
528 * PRINT_BIT_FLAGS :
529 * IN struct bit_flags_t bit_flags
530 ****************************************************************/
531 void print_bit_flags (struct bit_flags_t bit_flags)
534 if (bit_flags.alpha) printf("alpha\n");
535 if (bit_flags.beta) printf("beta\n");
536 if (bit_flags.gamma) printf("gamma\n");
537 if (bit_flags.delta) printf("delta\n");
538 if (bit_flags.epsilon) printf("epsilon\n");
539 if (bit_flags.omega) printf("omega\n");
542 /*****************************************************************
543 * PRINT_BIT_FLAGS_COMBO :
544 * IN struct bit_flags_combo_t bit_flags_combo
545 ****************************************************************/
546 void print_bit_flags_combo (struct bit_flags_combo_t bit_flags_combo)
549 if (bit_flags_combo.alpha) printf("alpha\n");
550 if (bit_flags_combo.beta) printf("beta\n");
551 if (bit_flags_combo.gamma) printf("gamma\n");
552 if (bit_flags_combo.delta) printf("delta\n");
553 if (bit_flags_combo.epsilon) printf("epsilon\n");
554 if (bit_flags_combo.omega) printf("omega\n");
555 printf("ch1: %c\tch2: %c\n", bit_flags_combo.ch1, bit_flags_combo.ch2);
558 /*****************************************************************
559 * PRINT_ONE_DOUBLE :
560 * IN struct one_double_t one_double
561 ****************************************************************/
562 void print_one_double (struct one_double_t one_double)
565 printf("Contents of one_double_t: \n\n");
566 printf("%f\n", one_double.double1);
569 /*****************************************************************
570 * PRINT_TWO_FLOATS :
571 * IN struct two_floats_t two_floats
572 ****************************************************************/
573 void print_two_floats (struct two_floats_t two_floats)
576 printf("Contents of two_floats_t: \n\n");
577 printf("%f\t%f\n", two_floats.float1, two_floats.float2);
580 /*****************************************************************
581 * PRINT_TWO_CHARS :
582 * IN struct two_char_t two_char
583 ****************************************************************/
584 void print_two_chars (struct two_char_t two_char)
587 printf("Contents of two_char_t: \n\n");
588 printf("%c\t%c\n", two_char.ch1, two_char.ch2);
591 /*****************************************************************
592 * PRINT_THREE_CHARS :
593 * IN struct three_char_t three_char
594 ****************************************************************/
595 void print_three_chars (struct three_char_t three_char)
598 printf("Contents of three_char_t: \n\n");
599 printf("%c\t%c\t%c\n", three_char.ch1, three_char.ch2, three_char.ch3);
602 /*****************************************************************
603 * PRINT_FIVE_CHARS :
604 * IN struct five_char_t five_char
605 ****************************************************************/
606 void print_five_chars (struct five_char_t five_char)
609 printf("Contents of five_char_t: \n\n");
610 printf("%c\t%c\t%c\t%c\t%c\n", five_char.ch1, five_char.ch2,
611 five_char.ch3, five_char.ch4,
612 five_char.ch5);
615 /*****************************************************************
616 * PRINT_INT_CHAR_COMBO :
617 * IN struct int_char_combo_t int_char_combo
618 ****************************************************************/
619 void print_int_char_combo (struct int_char_combo_t int_char_combo)
622 printf("Contents of int_char_combo_t: \n\n");
623 printf("%d\t%c\n", int_char_combo.int1, int_char_combo.ch1);
626 /*****************************************************************
627 * PRINT_STRUCT_REP :
628 * The last parameter must go onto the stack rather than into a register.
629 * This is a good function to call to test small structures.
630 * IN struct small_rep_info_t struct1
631 * IN struct small_rep_info_t struct2
632 * IN struct small_rep_info_t struct3
633 ****************************************************************/
634 void print_struct_rep(
635 struct small_rep_info_t struct1,
636 struct small_rep_info_t struct2,
637 struct small_rep_info_t struct3)
641 printf("Contents of struct1: \n\n");
642 printf("%10d%10d\n", struct1.value, struct1.head);
643 printf("Contents of struct2: \n\n");
644 printf("%10d%10d\n", struct2.value, struct2.head);
645 printf("Contents of struct3: \n\n");
646 printf("%10d%10d\n", struct3.value, struct3.head);
650 /*****************************************************************
651 * SUM_STRUCT_PRINT :
652 * The last two parameters must go onto the stack rather than into a register.
653 * This is a good function to call to test small structures.
654 * IN struct small_rep_info_t struct1
655 * IN struct small_rep_info_t struct2
656 * IN struct small_rep_info_t struct3
657 * IN struct small_rep_info_t struct4
658 ****************************************************************/
659 void sum_struct_print (
660 int seed,
661 struct small_rep_info_t struct1,
662 struct small_rep_info_t struct2,
663 struct small_rep_info_t struct3,
664 struct small_rep_info_t struct4)
666 int sum;
668 printf("Sum of the 4 struct values and seed : \n\n");
669 sum = seed + struct1.value + struct2.value + struct3.value + struct4.value;
670 printf("%10d\n", sum);
673 /*****************************************************************
674 * PRINT_SMALL_STRUCTS :
675 * This is a good function to call to test small structures.
676 * All of the small structures of odd sizes (40 bits, 8bits, etc.)
677 * are pushed onto the stack.
678 ****************************************************************/
679 void print_small_structs (
680 struct small_rep_info_t struct1,
681 struct small_rep_info_t struct2,
682 struct small_rep_info_t struct3,
683 struct small_rep_info_t struct4,
684 struct bit_flags_t flags,
685 struct bit_flags_combo_t flags_combo,
686 struct three_char_t three_char,
687 struct five_char_t five_char,
688 struct int_char_combo_t int_char_combo,
689 struct one_double_t d1,
690 struct one_double_t d2,
691 struct one_double_t d3,
692 struct two_floats_t f1,
693 struct two_floats_t f2,
694 struct two_floats_t f3)
696 print_bit_flags(flags);
697 print_bit_flags_combo(flags_combo);
698 print_three_chars(three_char);
699 print_five_chars(five_char);
700 print_int_char_combo(int_char_combo);
701 sum_struct_print(10, struct1, struct2, struct3, struct4);
702 print_struct_rep(struct1, struct2, struct3);
703 print_one_double(d1);
704 print_one_double(d2);
705 print_one_double(d3);
706 print_two_floats(f1);
707 print_two_floats(f2);
708 print_two_floats(f3);
711 /*****************************************************************
712 * PRINT_LONG_ARG_LIST :
713 * This is a good function to call to test small structures.
714 * The first two parameters ( the doubles ) go into registers. The
715 * remaining arguments are pushed onto the stack. Depending on where
716 * print_long_arg_list is called from, the size of the argument list
717 * may force more space to be pushed onto the stack as part of the callers
718 * frame.
719 ****************************************************************/
720 void print_long_arg_list (
721 double a,
722 double b,
723 int c,
724 int d,
725 int e,
726 int f,
727 struct small_rep_info_t struct1,
728 struct small_rep_info_t struct2,
729 struct small_rep_info_t struct3,
730 struct small_rep_info_t struct4,
731 struct bit_flags_t flags,
732 struct bit_flags_combo_t flags_combo,
733 struct three_char_t three_char,
734 struct five_char_t five_char,
735 struct int_char_combo_t int_char_combo,
736 struct one_double_t d1,
737 struct one_double_t d2,
738 struct one_double_t d3,
739 struct two_floats_t f1,
740 struct two_floats_t f2,
741 struct two_floats_t f3)
743 printf("double : %f\n", a); /* -step2- */
744 printf("double : %f\n", b);
745 printf("int : %d\n", c);
746 printf("int : %d\n", d);
747 printf("int : %d\n", e);
748 printf("int : %d\n", f);
749 print_small_structs( struct1, struct2, struct3, struct4, flags, flags_combo,
750 three_char, five_char, int_char_combo, d1, d2, d3,
751 f1, f2, f3);
755 void print_one_large_struct (struct array_rep_info_t linked_list1)
758 /* printf("Contents of linked list1: \n\n");
759 printf("Element Value | Index of Next Element\n");
760 printf("-------------------------------------\n");
761 printf(" | \n");*/
762 /*for (index = 0; index < 10; index++) {*/
764 printf("%10d%10d\n", linked_list1.values[0],
765 linked_list1.next_index[0]);
766 /*}*/
769 /*****************************************************************
770 * PRINT_ARRAY_REP :
771 * The three structure parameters should fit into registers.
772 * IN struct array_rep_info_t linked_list1
773 * IN struct array_rep_info_t linked_list2
774 * IN struct array_rep_info_t linked_list3
775 ****************************************************************/
776 void print_array_rep(
777 struct array_rep_info_t linked_list1,
778 struct array_rep_info_t linked_list2,
779 struct array_rep_info_t linked_list3)
782 int index;
784 printf("Contents of linked list1: \n\n");
785 printf("Element Value | Index of Next Element\n");
786 printf("-------------------------------------\n");
787 printf(" | \n");
788 for (index = 0; index < 10; index++) {
790 printf("%10d%10d\n", linked_list1.values[index],
791 linked_list1.next_index[index]);
794 printf("Contents of linked list2: \n\n");
795 printf("Element Value | Index of Next Element\n");
796 printf("-------------------------------------\n");
797 printf(" | \n");
798 for (index = 0; index < 10; index++) {
800 printf("%10d%10d\n", linked_list2.values[index],
801 linked_list2.next_index[index]);
804 printf("Contents of linked list3: \n\n");
805 printf("Element Value | Index of Next Element\n");
806 printf("-------------------------------------\n");
807 printf(" | \n");
808 for (index = 0; index < 10; index++) {
810 printf("%10d%10d\n", linked_list3.values[index],
811 linked_list3.next_index[index]);
816 /*****************************************************************
817 * SUM_ARRAY_PRINT :
818 * The last structure parameter must be pushed onto the stack
819 * IN int seed
820 * IN struct array_rep_info_t linked_list1
821 * IN struct array_rep_info_t linked_list2
822 * IN struct array_rep_info_t linked_list3
823 * IN struct array_rep_info_t linked_list4
824 ****************************************************************/
825 void sum_array_print (
826 int seed,
827 struct array_rep_info_t linked_list1,
828 struct array_rep_info_t linked_list2,
829 struct array_rep_info_t linked_list3,
830 struct array_rep_info_t linked_list4)
832 int index;
833 int sum;
835 printf("Sum of 4 arrays, by element (add in seed as well): \n\n");
836 printf("Seed: %d\n", seed);
837 printf("Element Index | Sum \n");
838 printf("-------------------------\n");
839 printf(" | \n");
841 for (index = 0; index < 10; index++) {
843 sum = seed + linked_list1.values[index] + linked_list2.values[index] +
844 linked_list3.values[index] + linked_list4.values[index];
845 printf("%10d%10d\n", index, sum);
849 /*****************************************************************
850 * INIT_ARRAY_REP :
851 * IN struct array_rep_info_t *linked_list
852 * IN int seed
853 ****************************************************************/
854 void init_array_rep(
855 struct array_rep_info_t *linked_list,
856 int seed)
859 int index;
861 for (index = 0; index < 10; index++) {
863 linked_list->values[index] = (2*index) + (seed*2);
864 linked_list->next_index[index] = index + 1;
866 linked_list->head = 0;
870 int main () {
872 /* variables for array and enumerated type testing
874 static char char_array[121];
875 static double double_array[9];
876 static float float_array[15];
877 static int integer_array[50];
878 static int index;
879 static id_int student_id = 23;
880 static colors my_shirt = YELLOW;
882 /* variables for large structure testing
884 static int number = 10;
885 static struct array_rep_info_t *list1;
886 static struct array_rep_info_t *list2;
887 static struct array_rep_info_t *list3;
888 static struct array_rep_info_t *list4;
890 /* variables for testing a very long argument list
892 static double a;
893 static double b;
894 static int c;
895 static int d;
896 static int e;
897 static int f;
899 /* variables for testing a small structures and a very long argument list
901 static struct small_rep_info_t *struct1;
902 static struct small_rep_info_t *struct2;
903 static struct small_rep_info_t *struct3;
904 static struct small_rep_info_t *struct4;
905 static struct bit_flags_t *flags;
906 static struct bit_flags_combo_t *flags_combo;
907 static struct three_char_t *three_char;
908 static struct five_char_t *five_char;
909 static struct int_char_combo_t *int_char_combo;
910 static struct one_double_t *d1;
911 static struct one_double_t *d2;
912 static struct one_double_t *d3;
913 static struct two_floats_t *f1;
914 static struct two_floats_t *f2;
915 static struct two_floats_t *f3;
917 gdb_unbuffer_output ();
919 /* Initialize arrays
921 for (index = 0; index < 120; index++) {
922 if ((index%2) == 0) char_array[index] = 'Z';
923 else char_array[index] = 'a';
925 char_array[120] = '\0';
927 for (index = 0; index < 9; index++) {
928 double_array[index] = index*23.4567;
931 for (index = 0; index < 15; index++) {
932 float_array[index] = index/7.02;
935 for (index = 0; index < 50; index++) { /* -tbreak1- */
936 integer_array[index] = -index;
939 /* Print arrays
941 print_char_array(char_array);
942 print_double_array(double_array); /* -tbreak2- */
943 print_float_array(float_array);
944 print_student_id_shirt_color(student_id, my_shirt);
945 print_int_array(integer_array);
946 print_all_arrays(integer_array, char_array, float_array, double_array); /* -tbreak3- */
948 /* Allocate space for large structures
950 list1 = (struct array_rep_info_t *)malloc(sizeof(struct array_rep_info_t));
951 list2 = (struct array_rep_info_t *)malloc(sizeof(struct array_rep_info_t));
952 list3 = (struct array_rep_info_t *)malloc(sizeof(struct array_rep_info_t));
953 list4 = (struct array_rep_info_t *)malloc(sizeof(struct array_rep_info_t));
955 /* Initialize large structures
957 init_array_rep(list1, 2);
958 init_array_rep(list2, 4);
959 init_array_rep(list3, 5);
960 init_array_rep(list4, 10);
961 printf("HELLO WORLD\n");
962 printf("BYE BYE FOR NOW\n"); /* -tbreak4- */
963 printf("VERY GREEN GRASS\n"); /* -next2- */
965 /* Print large structures
967 sum_array_print(10, *list1, *list2, *list3, *list4); /* -tbreak5- */
968 print_array_rep(*list1, *list2, *list3);
969 print_one_large_struct(*list1);
971 /* Allocate space for small structures
973 struct1 = (struct small_rep_info_t *)malloc(sizeof(struct small_rep_info_t));
974 struct2 = (struct small_rep_info_t *)malloc(sizeof(struct small_rep_info_t));
975 struct3 = (struct small_rep_info_t *)malloc(sizeof(struct small_rep_info_t));
976 struct4 = (struct small_rep_info_t *)malloc(sizeof(struct small_rep_info_t));
977 flags = (struct bit_flags_t *)malloc(sizeof(struct bit_flags_t));
978 flags_combo = (struct bit_flags_combo_t *)malloc(sizeof(struct bit_flags_combo_t));
979 three_char = (struct three_char_t *)malloc(sizeof(struct three_char_t));
980 five_char = (struct five_char_t *)malloc(sizeof(struct five_char_t));
981 int_char_combo = (struct int_char_combo_t *)malloc(sizeof(struct int_char_combo_t));
983 d1 = (struct one_double_t *)malloc(sizeof(struct one_double_t));
984 d2 = (struct one_double_t *)malloc(sizeof(struct one_double_t));
985 d3 = (struct one_double_t *)malloc(sizeof(struct one_double_t));
987 f1 = (struct two_floats_t *)malloc(sizeof(struct two_floats_t));
988 f2 = (struct two_floats_t *)malloc(sizeof(struct two_floats_t));
989 f3 = (struct two_floats_t *)malloc(sizeof(struct two_floats_t));
991 /* Initialize small structures
993 init_small_structs ( struct1, struct2, struct3, struct4, flags,
994 flags_combo, three_char, five_char, int_char_combo,
995 d1, d2, d3, f1, f2, f3);
997 /* Print small structures
999 print_small_structs ( *struct1, *struct2, *struct3, *struct4, *flags,
1000 *flags_combo, *three_char, *five_char, *int_char_combo,
1001 *d1, *d2, *d3, *f1, *f2, *f3);
1003 /* Print a very long arg list
1005 a = 22.25;
1006 b = 33.375;
1007 c = 0; /* -tbreak6- */
1008 d = -25;
1009 e = 100;
1010 f = 2345;
1012 print_long_arg_list ( a, b, c, d, e, f, *struct1, *struct2, *struct3, *struct4, /* -tbreak7- */
1013 *flags, *flags_combo, *three_char, *five_char, *int_char_combo,
1014 *d1, *d2, *d3, *f1, *f2, *f3);
1016 /* Initialize small structures
1018 init_one_double ( d1, 1.11111);
1019 init_one_double ( d2, -345.34);
1020 init_one_double ( d3, 546464.2);
1021 init_two_floats ( f1, 0.234, 453.1);
1022 init_two_floats ( f2, 78.345, 23.09);
1023 init_two_floats ( f3, -2.345, 1.0);
1024 init_bit_flags(flags, (unsigned)1, (unsigned)0, (unsigned)1,
1025 (unsigned)0, (unsigned)1, (unsigned)0 );
1026 init_bit_flags_combo(flags_combo, (unsigned)1, (unsigned)0, 'y', /* -tbreak8- */
1027 (unsigned)1, (unsigned)0, 'n',
1028 (unsigned)1, (unsigned)0 );
1029 init_three_chars(three_char, 'x', 'y', 'z');
1030 init_five_chars(five_char, 'h', 'e', 'l', 'l', 'o');
1031 init_int_char_combo(int_char_combo, 13, '!'); /* -tbreak9- */
1032 init_struct_rep(struct1, 10);
1033 init_struct_rep(struct2, 20);
1034 init_struct_rep(struct3, 30);
1035 init_struct_rep(struct4, 40);
1037 compute_with_small_structs(35); /* -tbreak10- */
1038 loop_count();
1039 printf("HELLO WORLD\n");
1040 printf("BYE BYE FOR NOW\n");
1041 printf("VERY GREEN GRASS\n");
1043 /* Print small structures
1045 print_one_double(*d1);
1046 print_one_double(*d2);
1047 print_one_double(*d3);
1048 print_two_floats(*f1);
1049 print_two_floats(*f2);
1050 print_two_floats(*f3);
1051 print_bit_flags(*flags);
1052 print_bit_flags_combo(*flags_combo);
1053 print_three_chars(*three_char);
1054 print_five_chars(*five_char);
1055 print_int_char_combo(*int_char_combo);
1056 sum_struct_print(10, *struct1, *struct2, *struct3, *struct4);
1057 print_struct_rep(*struct1, *struct2, *struct3);
1059 return 0;