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