collcmp.c (17556) | collcmp.c (17576) |
---|---|
1/* 2 * Copyright (C) 1996 by Andrey A. Chernov, Moscow, Russia. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 18 unchanged lines hidden (view full) --- 27#include <ctype.h> 28#include <string.h> 29#include <limits.h> 30#include <locale.h> 31 32int collate_range_cmp (c1, c2) 33 int c1, c2; 34{ | 1/* 2 * Copyright (C) 1996 by Andrey A. Chernov, Moscow, Russia. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 18 unchanged lines hidden (view full) --- 27#include <ctype.h> 28#include <string.h> 29#include <limits.h> 30#include <locale.h> 31 32int collate_range_cmp (c1, c2) 33 int c1, c2; 34{ |
35 int as1, as2, al1, al2; |
|
35 static char s1[2], s2[2]; 36 37 c1 &= UCHAR_MAX; 38 c2 &= UCHAR_MAX; 39 if (c1 == c2) 40 return (0); | 36 static char s1[2], s2[2]; 37 38 c1 &= UCHAR_MAX; 39 c2 &= UCHAR_MAX; 40 if (c1 == c2) 41 return (0); |
41 if ( (isascii(c1) && isascii(c2)) 42 || (!isalpha(c1) && !isalpha(c2)) 43 ) 44 return (c1 - c2); 45 if (isalpha(c1) && !isalpha(c2)) { 46 if (isupper(c1)) 47 return ('A' - c2); 48 else 49 return ('a' - c2); 50 } else if (isalpha(c2) && !isalpha(c1)) { 51 if (isupper(c2)) 52 return (c1 - 'A'); 53 else 54 return (c1 - 'a'); | 42 43 as1 = isascii(c1); 44 as2 = isascii(c2); 45 al1 = isalpha(c1); 46 al2 = isalpha(c2); 47 48 if (as1 || as2 || al1 || al2) { 49 if ((as1 && as2) || (!al1 && !al2)) 50 return (c1 - c2); 51 if (al1 && !al2) { 52 if (isupper(c1)) 53 return ('A' - c2); 54 else 55 return ('a' - c2); 56 } else if (al2 && !al1) { 57 if (isupper(c2)) 58 return (c1 - 'A'); 59 else 60 return (c1 - 'a'); 61 } |
55 } | 62 } |
56 if (isupper(c1) && islower(c2)) 57 return (-1); 58 else if (islower(c1) && isupper(c2)) 59 return (1); | 63 |
60 s1[0] = c1; 61 s2[0] = c2; 62 return strcoll(s1, s2); 63} | 64 s1[0] = c1; 65 s2[0] = c2; 66 return strcoll(s1, s2); 67} |