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