|
|
1.1 ! root 1: # include <useful.h> ! 2: # include <sccs.h> ! 3: ! 4: SCCSID(@(#)scompare.c 8.3 1/17/85) ! 5: ! 6: /* ! 7: ** STRING COMPARE ! 8: ** ! 9: ** The strings 'a_ptr' and 'b_ptr' are compared. Blanks are ! 10: ** ignored. The first string may be no longer than 'a_len' ! 11: ** bytes, and the second string may be no longer than 'b_len' ! 12: ** bytes. If either length is zero, it is taken to be very ! 13: ** long. A null byte also terminates the scan. ! 14: ** ! 15: ** Compares are based on the ascii ordering. ! 16: ** ! 17: ** Shorter strings are less than longer strings. ! 18: ** ! 19: ** Return value is positive one for a > b, minus one for a < b, ! 20: ** and zero for a == b. ! 21: ** ! 22: ** Examples: ! 23: ** "abc" > "ab" ! 24: ** " a bc " == "ab c" ! 25: ** "abc" < "abd" ! 26: */ ! 27: ! 28: scompare(a_ptr, a_len, b_ptr, b_len) ! 29: char *a_ptr; ! 30: int a_len; ! 31: char *b_ptr; ! 32: int b_len; ! 33: { ! 34: char *ap; ! 35: char *bp; ! 36: register char a; ! 37: char b; ! 38: register int al; ! 39: register int bl; ! 40: ! 41: ap = a_ptr; ! 42: bp = b_ptr; ! 43: al = a_len; ! 44: if (al == 0) ! 45: al = MAXI4; ! 46: bl = b_len; ! 47: if (bl == 0) ! 48: bl = MAXI4; ! 49: ! 50: while (1) ! 51: { ! 52: ! 53: /* supress blanks in both strings */ ! 54: while ((a = *ap) == ' ' && al > 0) ! 55: { ! 56: al--; ! 57: ap++; ! 58: } ! 59: if (al == 0) ! 60: a = 0; ! 61: while (*bp == ' ' && bl > 0) ! 62: { ! 63: bl--; ! 64: bp++; ! 65: } ! 66: if (bl == 0) ! 67: b = 0; ! 68: else ! 69: b = *bp; ! 70: ! 71: /* do inequality tests */ ! 72: if (a < b) ! 73: return (-1); ! 74: if (a > b) ! 75: return (1); ! 76: if (a == 0) ! 77: return (0); ! 78: ! 79: /* go on to the next character */ ! 80: ap++; ! 81: al--; ! 82: bp++; ! 83: bl--; ! 84: } ! 85: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.