home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / mitsch75.zip / scheme-7_5_17-src.zip / scheme-7.5.17 / src / compiler / documentation / test-c.c < prev    next >
C/C++ Source or Header  |  2000-03-20  |  3KB  |  116 lines

  1. /* -*- C -*- */
  2.  
  3. /* $Id: test-c.c,v 1.4 2000/03/21 04:29:53 cph Exp $ */
  4.  
  5. #include <stdio.h>
  6.  
  7. extern long external_long;
  8. extern long * external_pointer;
  9. extern long (* (procedure_table []))();
  10.  
  11. struct two_word_struct
  12. {
  13.   long foo;
  14.   long bar;
  15. };
  16.  
  17. struct two_word_struct
  18. reveal_structure_convention (x, y)
  19.      long x;
  20.      long y;
  21. {
  22.   struct two_word_struct result;
  23.  
  24.   result.foo = (x + y);
  25.   result.bar = (x - y);
  26.   return (result);
  27. }
  28.  
  29. long
  30. dummy_proc_1 (x, y)
  31.      long x;
  32.      long y;
  33. {
  34.   return (x + y);
  35. }
  36.  
  37. long
  38. dummy_proc_2 (x, y)
  39.      long x;
  40.      long y;
  41. {
  42.   return (x - y);
  43. }
  44.  
  45. long (* (procedure_table [])) () =
  46. {
  47.   dummy_proc_1,
  48.   dummy_proc_2,
  49.   dummy_proc_1,
  50.   dummy_proc_2,
  51.   dummy_proc_1,
  52.   dummy_proc_2
  53. };
  54.  
  55. long
  56. reveal_register_partition (x0, x1, x2, x3, x4, x5, x6, x7, x8, x9,
  57.                y0, y1, y2, y3, y4, y5, y6, y7, y8, y9,
  58.                z0, z1, z2, z3, z4, z5, z6, z7, z8, z9,
  59.                q0, q1)
  60.      long x0; long x1; long x2; long x3; long x4;
  61.      long x5; long x6; long x7; long x8; long x9;
  62.      long y0; long y1; long y2; long y3; long y4;
  63.      long y5; long y6; long y7; long y8; long y9;
  64.      long z0; long z1; long z2; long z3; long z4;
  65.      long z5; long z6; long z7; long z8; long z9;
  66.      long q0; long q1;
  67. {
  68.   return (  (x0 * y0) + (x1 * y1) + (x2 * y2) + (x3 * y3) + (x4 * y4)
  69.       + (x5 * y5) + (x6 * y6) + (x7 * y7) + (x8 * y8) + (x9 * y9)
  70.       + (y0 * z0) + (y1 * z1) + (y2 * z2) + (y3 * z3) + (y4 * z4)
  71.       + (y5 * z5) + (y6 * z6) + (y7 * z7) + (y8 * z8) + (y9 * z9)
  72.       + (z0 * q0) + (z1 * q1) + (z2 * x2) + (z3 * x3) + (z4 * x4)
  73.       + (z5 * x5) + (z6 * x6) + (z7 * x7) + (z8 * x8) + (z9 * x9)
  74.       + (q0 * x0) + (q1 * x1));
  75. }
  76.  
  77. long external_long, * external_pointer;
  78.  
  79. main (argc, argv)
  80.      int argc;
  81.      char **argv;
  82. {
  83.   extern int atoi ();
  84.   long values[33];
  85.   int count;
  86.   struct two_word_struct temp;
  87.  
  88.   if (argc != 33)
  89.   {
  90.     fprintf (stderr, "usage: Don't run this program!\n");
  91.     exit (1);
  92.   }
  93.   for (count = 1; count < argc; count++)
  94.     values[count] = ((long) (atoi (argv[count])));
  95.  
  96.   printf ("result = %ld",
  97.       (reveal_register_partition
  98.        (values[ 1], values[ 2], values[ 3], values[ 4], values[ 5],
  99.         values[ 6], values[ 7], values[ 8], values[ 9], values[10],
  100.         values[11], values[12], values[13], values[14], values[15],
  101.         values[16], values[17], values[18], values[19], values[20],
  102.         values[21], values[22], values[23], values[24], values[25],
  103.         values[26], values[27], values[28], values[29], values[30],
  104.         values[31], values[32])));
  105.  
  106.   temp = (reveal_structure_convention (values[31], values[32]));
  107.   printf ("temp = {foo = %ld, bar = %ld}\n", temp.foo, temp.bar);
  108.   external_long = 42;
  109.   external_pointer = &external_long;
  110.   printf ("*external_pointer = %ld; external_pointer = 0x%lx\n",
  111.       *external_pointer, external_pointer);
  112.   printf ("value = %ld\n",
  113.       ((* (procedure_table[((int) (values[1]))])) (values[2], values[3])));
  114.   exit (0);
  115. }
  116.