|
|
1.1 ! root 1: #include "../h/rt.h" ! 2: ! 3: /* ! 4: * numcmp - compare two numbers. Returns -1, 0, 1 for arg1 <, =, > arg2. ! 5: * arg0 is made into a descriptor for the return value. ! 6: */ ! 7: ! 8: numcmp(arg1, arg2, arg0) ! 9: struct descrip *arg1, *arg2, *arg0; ! 10: { ! 11: register int result; ! 12: union numeric n1, n2; ! 13: int t1, t2; ! 14: /* ! 15: * Be sure that both arg1 and arg2 are numeric. ! 16: */ ! 17: ! 18: if ((t1 = cvnum(arg1, &n1)) == NULL) ! 19: runerr(102, arg1); ! 20: if ((t2 = cvnum(arg2, &n2)) == NULL) ! 21: runerr(102, arg2); ! 22: ! 23: if (t1 == T_LONGINT && t2 == T_LONGINT) { ! 24: /* ! 25: * arg1 and arg2 are both integers, compare them and ! 26: * create an integer descriptor in arg0 ! 27: */ ! 28: ! 29: result = 0; ! 30: if (n1.integer < n2.integer) result = -1; ! 31: else if (n1.integer != n2.integer) result = 1; ! 32: mkint(n2.integer, arg0); ! 33: } ! 34: else { ! 35: ! 36: /* ! 37: * Either arg1 or arg2 is real. Convert the other to a real, ! 38: * compare them and create a real descriptor in arg0. ! 39: */ ! 40: ! 41: if (t1 == T_LONGINT) ! 42: n1.real = n1.integer; ! 43: if (t2 == T_LONGINT) ! 44: n2.real = n2.integer; ! 45: result = 0; ! 46: if (n1.real < n2.real) result = -1; ! 47: else if (n1.real != n2.real) result = 1; ! 48: mkreal(n2.real, arg0); ! 49: } ! 50: ! 51: return (result); /* return result in r0 */ ! 52: } ! 53:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.