home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / sun / volume1 / calctool / patch01 / patch
Encoding:
Text File  |  1989-07-12  |  6.8 KB  |  137 lines

  1. *** ops.c.orig    Tue Jul 11 10:56:04 1989
  2. --- ops.c    Tue Jul 11 11:07:49 1989
  3. ***************
  4. *** 36,53 ****
  5.   
  6.   #define        low_order(b, x)        ((((unsigned) 0xffffffff) >> (32 - (b))) & (x))
  7.   
  8.   PRIVATE    pop_op()
  9.   
  10.   {    int    i, temp;
  11.   
  12.       if (curr_mode != SCIENTIFIC && o_stack[o_top - 1]) {
  13. !        v_stack[v_top] = (double) low_order(curr_width[index_of(curr_base)], (unsigned int) v_stack[v_top]);
  14. !        v_stack[v_top - 1] = (double) low_order(curr_width[index_of(curr_base)], (unsigned int) v_stack[v_top - 1]);
  15.          }
  16.       switch (o_stack[--o_top]) {
  17.          case ADD_OP    : v_stack[v_top - 1] += v_stack[v_top];
  18.                          break;
  19. !        case AND_OP    : temp = ((unsigned int) v_stack[v_top - 1]) & ((unsigned int) v_stack[v_top]);
  20.                          v_stack[v_top - 1] = (double) temp;
  21.                          break;
  22.          case DIV_OP    : v_stack[v_top - 1] /= v_stack[v_top];
  23. --- 36,62 ----
  24.   
  25.   #define        low_order(b, x)        ((((unsigned) 0xffffffff) >> (32 - (b))) & (x))
  26.   
  27. + /************************************************************************/
  28. + /*    In the following code, the apparently extraneous assignments    */
  29. + /* to vt1 and vt2 are used to circumvent a bug in the 386i C compiler    */
  30. + /* which hangs when trying to compile code which casts a (double *) to    */
  31. + /* (unsigned int).  Sigh...                        */
  32. + /************************************************************************/
  33. + PRIVATE    double    vt1, vt2;
  34.   PRIVATE    pop_op()
  35.   
  36.   {    int    i, temp;
  37.   
  38.       if (curr_mode != SCIENTIFIC && o_stack[o_top - 1]) {
  39. !        v_stack[v_top] = (double) low_order(curr_width[index_of(curr_base)], (unsigned int) (vt1 = v_stack[v_top]));
  40. !        v_stack[v_top - 1] = (double) low_order(curr_width[index_of(curr_base)], (unsigned int) (vt2 = v_stack[v_top - 1]));
  41.          }
  42.       switch (o_stack[--o_top]) {
  43.          case ADD_OP    : v_stack[v_top - 1] += v_stack[v_top];
  44.                          break;
  45. !        case AND_OP    : temp = ((unsigned int) (vt1 = v_stack[v_top - 1])) & ((unsigned int) (vt2 = v_stack[v_top]));
  46.                          v_stack[v_top - 1] = (double) temp;
  47.                          break;
  48.          case DIV_OP    : v_stack[v_top - 1] /= v_stack[v_top];
  49. ***************
  50. *** 54,86 ****
  51.                          break;
  52.          case LPAREN_OP : return;
  53.                      break;
  54. !        case LSL_OP    : temp = ((unsigned int) v_stack[v_top - 1]) << ((unsigned int) v_stack[v_top]);
  55.                          v_stack[v_top - 1] = (double) temp;
  56.                          break;
  57.          case MUL_OP    : v_stack[v_top - 1] *= v_stack[v_top];
  58.                          break;
  59. !        case OR_OP     : temp = ((unsigned int) v_stack[v_top - 1]) | ((unsigned int) v_stack[v_top]);
  60.                          v_stack[v_top - 1] = (double) temp;
  61.                          break;
  62. !        case ROL_OP    : for (i = (unsigned int) v_stack[v_top], temp = (unsigned int) v_stack[v_top - 1]; i; i--)
  63.                         temp = (temp << 1) + ((((unsigned) temp) >> (curr_width[index_of(curr_base)] - 1)) & 1);
  64.                      v_stack[v_top - 1] = (double) low_order(curr_width[index_of(curr_base)], temp);
  65.                          break;
  66.          case ROOT_OP   : v_stack[v_top - 1] = pow(v_stack[v_top - 1], 1.0 / v_stack[v_top]);
  67.                          break;
  68. !        case ROR_OP    : for (i = (unsigned int) v_stack[v_top], temp = (unsigned int) v_stack[v_top - 1]; i; i--)
  69.                         temp = (((unsigned) temp) >> 1) + ((temp & 1) << (curr_width[index_of(curr_base)] - 1));
  70.                      v_stack[v_top - 1] = (double) low_order(curr_width[index_of(curr_base)], temp);
  71.                          break;
  72. !        case RSA_OP    : temp = ((unsigned int) v_stack[v_top - 1]) >> ((unsigned int) v_stack[v_top]);
  73.                          v_stack[v_top - 1] = (double) temp;
  74.                          break;
  75. !        case RSL_OP    : temp = ((unsigned int) ((unsigned int) v_stack[v_top - 1])) >> ((unsigned int) v_stack[v_top]);
  76.                          v_stack[v_top - 1] = (double) temp;
  77.                          break;
  78.          case SUB_OP    : v_stack[v_top - 1] -= v_stack[v_top];
  79.                          break;
  80. !        case XOR_OP    : temp = ((unsigned int) v_stack[v_top - 1]) ^ ((unsigned int) v_stack[v_top]);
  81.                          v_stack[v_top - 1] = (double) temp;
  82.                          break;
  83.          case Y2X_OP    : v_stack[v_top - 1] = pow(v_stack[v_top - 1], v_stack[v_top]);
  84. --- 63,95 ----
  85.                          break;
  86.          case LPAREN_OP : return;
  87.                      break;
  88. !        case LSL_OP    : temp = ((unsigned int) (vt1 = v_stack[v_top - 1])) << ((unsigned int) (vt2 = v_stack[v_top]));
  89.                          v_stack[v_top - 1] = (double) temp;
  90.                          break;
  91.          case MUL_OP    : v_stack[v_top - 1] *= v_stack[v_top];
  92.                          break;
  93. !        case OR_OP     : temp = ((unsigned int) (vt1 = v_stack[v_top - 1])) | ((unsigned int) (vt2 = v_stack[v_top]));
  94.                          v_stack[v_top - 1] = (double) temp;
  95.                          break;
  96. !        case ROL_OP    : for (i = (unsigned int) (vt1 = v_stack[v_top]), temp = (unsigned int) (vt2 = v_stack[v_top - 1]); i; i--)
  97.                         temp = (temp << 1) + ((((unsigned) temp) >> (curr_width[index_of(curr_base)] - 1)) & 1);
  98.                      v_stack[v_top - 1] = (double) low_order(curr_width[index_of(curr_base)], temp);
  99.                          break;
  100.          case ROOT_OP   : v_stack[v_top - 1] = pow(v_stack[v_top - 1], 1.0 / v_stack[v_top]);
  101.                          break;
  102. !        case ROR_OP    : for (i = (unsigned int) (vt1 = v_stack[v_top]), temp = (unsigned int) (vt2 = v_stack[v_top - 1]); i; i--)
  103.                         temp = (((unsigned) temp) >> 1) + ((temp & 1) << (curr_width[index_of(curr_base)] - 1));
  104.                      v_stack[v_top - 1] = (double) low_order(curr_width[index_of(curr_base)], temp);
  105.                          break;
  106. !        case RSA_OP    : temp = ((unsigned int) (vt1 = v_stack[v_top - 1])) >> ((unsigned int) (vt2 = v_stack[v_top]));
  107.                          v_stack[v_top - 1] = (double) temp;
  108.                          break;
  109. !        case RSL_OP    : temp = ((unsigned int) (vt1 = v_stack[v_top - 1])) >> ((unsigned int) (vt2 = v_stack[v_top]));
  110.                          v_stack[v_top - 1] = (double) temp;
  111.                          break;
  112.          case SUB_OP    : v_stack[v_top - 1] -= v_stack[v_top];
  113.                          break;
  114. !        case XOR_OP    : temp = ((unsigned int) (vt1 = v_stack[v_top - 1])) ^ ((unsigned int) (vt2 = v_stack[v_top]));
  115.                          v_stack[v_top - 1] = (double) temp;
  116.                          break;
  117.          case Y2X_OP    : v_stack[v_top - 1] = pow(v_stack[v_top - 1], v_stack[v_top]);
  118. ***************
  119. *** 199,205 ****
  120.                         break;
  121.          case LOG_OP    : v_stack[v_top] = log10(v_stack[v_top]);
  122.                         break;
  123. !        case NOT_OP    : v_stack[v_top] = (double) low_order(curr_width[index_of(curr_base)], (~ (unsigned int) v_stack[v_top]));
  124.                         break;
  125.          case OVER_OP   : v_stack[v_top] = 1.0 / v_stack[v_top];
  126.                         break;
  127. --- 208,214 ----
  128.                         break;
  129.          case LOG_OP    : v_stack[v_top] = log10(v_stack[v_top]);
  130.                         break;
  131. !        case NOT_OP    : v_stack[v_top] = (double) low_order(curr_width[index_of(curr_base)], (~ (unsigned int) (vt1 = v_stack[v_top])));
  132.                         break;
  133.          case OVER_OP   : v_stack[v_top] = 1.0 / v_stack[v_top];
  134.                         break;
  135.