IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Dec 16, 2007, 2:27:00 PM (19 years ago)
Author:
eugene
Message:

fixed cases of hard-wired line length; some api cleanup in stack_math

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/lib.shell/convert_to_RPN.c

    r7917 r15878  
    9797        /* pop previous, higher operators from OP stack to stack */
    9898        for (j = Nop_stack - 1; (j >= 0) && (op_stack[j].type > type); j--) {
    99           strcpy (stack[Nstack].name, op_stack[j].name);
    100           stack[Nstack].type = op_stack[j].type;
     99          move_stack (&stack[Nstack], &op_stack[j]);
    101100          Nstack ++;
    102101          Nop_stack --;
    103102        }
    104103        /* push operator on OP stack */
    105         strcpy (op_stack[Nop_stack].name, argv[i]);
    106         op_stack[Nop_stack].type = type;
     104        assign_stack (&op_stack[Nop_stack], argv[i], type);
    107105        Nop_stack ++;
    108106        break;
     
    115113        /* pop previous, higher or equal operators from OP stack to stack */
    116114        for (j = Nop_stack - 1; (j >= 0) && (op_stack[j].type >= type); j--) {
    117           strcpy (stack[Nstack].name, op_stack[j].name);
    118           stack[Nstack].type = op_stack[j].type;
     115          move_stack (&stack[Nstack], &op_stack[j]);
    119116          Nstack ++;
    120117          Nop_stack --;
    121118        }
    122119        /* push operator on OP stack */
    123         strcpy (op_stack[Nop_stack].name, argv[i]);
    124         op_stack[Nop_stack].type = type;
     120        assign_stack (&op_stack[Nop_stack], argv[i], type);
    125121        Nop_stack ++;
    126122        break;
    127123      case 2: 
    128124        /* push operator on OP stack */
    129         strcpy (op_stack[Nop_stack].name, argv[i]);
    130         op_stack[Nop_stack].type = type;
     125        assign_stack (&op_stack[Nop_stack], argv[i], type);
    131126        Nop_stack ++;
    132127        break;
     
    134129        /* pop rest of operators from OP stack to stack, looking for '(' */
    135130        for (j = Nop_stack - 1; (j >= 0) && (op_stack[j].type != 2); j--) {
    136           strcpy (stack[Nstack].name, op_stack[j].name);
    137           stack[Nstack].type = op_stack[j].type;
     131          move_stack (&stack[Nstack], &op_stack[j]);
    138132          Nstack ++;
    139133          Nop_stack --;
     
    149143        /* place the value (number or vector/matrix name) on stack */
    150144        /* value of 'X' is used as sentinel until we sort out values */
    151         strcpy (stack[Nstack].name, argv[i]);
    152         stack[Nstack].type = 'X';
     145        assign_stack (&stack[Nstack], argv[i], 'X');
    153146        Nstack ++;
    154147        break;
     
    163156      goto cleanup;
    164157    }
    165     strcpy (stack[Nstack].name, op_stack[j].name);
    166     stack[Nstack].type = op_stack[j].type;
     158    move_stack (&stack[Nstack],  &op_stack[j]);
    167159    Nstack ++;
    168160  }
     
    170162cleanup:
    171163  /*** free up unused stack space ***/
    172   clean_stack (op_stack, NSTACK);
     164
     165  // XXX there should not be any un-freed op_stacks at this point
     166  // clean_stack (op_stack, NSTACK);
    173167  free (op_stack);
    174   clean_stack (&stack[Nstack], NSTACK - Nstack);
     168
     169  // XXX there should not be any data on higher stack entries
     170  // clean_stack (&stack[Nstack], NSTACK - Nstack);
    175171  REALLOCATE (stack, StackVar, MAX (Nstack, 1));
    176172  *nstack = Nstack;
Note: See TracChangeset for help on using the changeset viewer.