home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / oxcc1433.zip / SRC / TEST108.C < prev    next >
C/C++ Source or Header  |  1995-07-09  |  3KB  |  96 lines

  1. /* test108.c == bitfield, struct pass/ret, compound expr, nested func, setjmp */
  2.  
  3. #include <setjmp.h>
  4. int printf(const char *fmt, ...);
  5. jmp_buf jb;
  6.  
  7. typedef struct _xx {
  8.     float f;
  9.     unsigned b1 : 7;
  10.     unsigned b2 : 4;
  11.     signed    b3 : 9;
  12.     unsigned b4 : 5;
  13.     signed b5 : 24;
  14.     unsigned b6 : 8;
  15.     int i;
  16.     struct {
  17.         unsigned char b1 : 2;
  18.         unsigned char b2 : 4;
  19.     } s;
  20.     int j;
  21. } XX, *PXX;
  22. XX xx = {2.537, 33, 11, -234, 21, -99876, 111, 99999,{1,7},'w'};
  23.  
  24. int func2(int (*pfunc)())
  25. {
  26.     return pfunc();
  27. }
  28. short func1(int x)
  29. {
  30. int y = x - 1;
  31. int nfunc()
  32. {
  33.     return ({int ss; ss = ( x < 2) ? x+100 : (y <= 2) ? x+200 : x+300; ss;});
  34. }
  35. int z = 0;
  36.     switch(x)
  37.     {
  38.         case 1:
  39.             z = nfunc();
  40.             break;
  41.         case 2:
  42.             z = func1(y);
  43.             break;
  44.         case 3:
  45.             z = func1(nfunc());
  46.             break;
  47.         case 4:
  48.             z = func1(func1(nfunc()));
  49.             break;
  50.         case 5:
  51.             longjmp(jb, 1);
  52.     }
  53.     return printf("%d:%d ", x, z) + func2(nfunc);
  54. }
  55. XX func(int x, char c, XX xx, XX yy, PXX pxx)
  56. {
  57.     printf("f=%8.4f b1=%d b2=%d b3=%d b4=%d b5=%d b6=%d i=%d bb1=%d bb2=%d j=%d\n",
  58.         xx.f, xx.b1, xx.b2, xx.b3, xx.b4, xx.b5, xx.b6, xx.i, xx.s.b1, xx.s.b2, xx.j);
  59.     printf("f=%8.4f b1=%d b2=%d b3=%d b4=%d b5=%d b6=%d i=%d bb1=%d bb2=%d j=%d\n",
  60.         yy.f, yy.b1, yy.b2, yy.b3, yy.b4, yy.b5, yy.b6, yy.i, yy.s.b1,yy.s.b2,yy.j);
  61.     printf("f=%8.4f b1=%d b2=%d b3=%d b4=%d b5=%d b6=%d i=%d bb1=%d bb2=%d j=%d\n",
  62.         pxx->f, pxx->b1, pxx->b2, pxx->b3, pxx->b4, pxx->b5, pxx->b6, pxx->i, pxx->s.b1, pxx->s.b2, pxx->j);
  63.     printf("x=%d c=%c\n", x, c);
  64.     return *pxx;
  65. }
  66. int main()
  67. {
  68. char padit[8] = {0,0,'w',0,0,0,0,0};
  69. XX yy = {2.537, 33, 11, -234, 21, -99876, 111, 99999,{1,7}, padit[2]};
  70. PXX pxx = &xx;
  71. XX zz;
  72.  
  73.     if(setjmp(jb))
  74.     {/* print expected values */
  75.         printf("\n1:101 1:101 2:107 203:0 3:509 304:0 610:0 4:916\n");
  76.         printf("SETJMP CALLED\n");
  77.         return 0;
  78.     }
  79.     padit[1] = padit[2];
  80.     zz  = func(-1, padit[1], xx, yy, pxx);
  81.     printf("f=%8.4f b1=%d b2=%d b3=%d b4=%d b5=%d b6=%d i=%d bb1=%d bb2=%d j=%d\n",
  82.         xx.f, xx.b1, xx.b2, xx.b3, xx.b4, xx.b5, xx.b6, xx.i, xx.s.b1, xx.s.b2,xx.j);
  83.     printf("f=%8.4f b1=%d b2=%d b3=%d b4=%d b5=%d b6=%d i=%d bb1=%d bb2=%d j=%d\n",
  84.         yy.f, yy.b1, yy.b2, yy.b3, yy.b4, yy.b5, yy.b6, yy.i, yy.s.b1, yy.s.b2, yy.j);
  85.     printf("f=%8.4f b1=%d b2=%d b3=%d b4=%d b5=%d b6=%d i=%d bb1=%d bb2=%d j=%d\n",
  86.         pxx->f, pxx->b1, pxx->b2, pxx->b3, pxx->b4, pxx->b5, pxx->b6, pxx->i, pxx->s.b1, pxx->s.b2, pxx->j);
  87.     printf("f=%8.4f b1=%d b2=%d b3=%d b4=%d b5=%d b6=%d i=%d bb1=%d bb2=%d j=%d\n",
  88.         zz.f, zz.b1, zz.b2, zz.b3, zz.b4, zz.b5, zz.b6, zz.i, zz.s.b1, zz.s.b2,zz.j);
  89.     func1(1);
  90.     func1(2);
  91.     func1(3);
  92.     func1(4);
  93.     func1(5);
  94.     return 0;
  95. }
  96.