12eecfbacSAndrey A. Chernov /* 22eecfbacSAndrey A. Chernov * Copyright (C) 1996 by Andrey A. Chernov, Moscow, Russia. 32eecfbacSAndrey A. Chernov * All rights reserved. 42eecfbacSAndrey A. Chernov * 52eecfbacSAndrey A. Chernov * Redistribution and use in source and binary forms, with or without 62eecfbacSAndrey A. Chernov * modification, are permitted provided that the following conditions 72eecfbacSAndrey A. Chernov * are met: 82eecfbacSAndrey A. Chernov * 1. Redistributions of source code must retain the above copyright 92eecfbacSAndrey A. Chernov * notice, this list of conditions and the following disclaimer. 102eecfbacSAndrey A. Chernov * 2. Redistributions in binary form must reproduce the above copyright 112eecfbacSAndrey A. Chernov * notice, this list of conditions and the following disclaimer in the 122eecfbacSAndrey A. Chernov * documentation and/or other materials provided with the distribution. 132eecfbacSAndrey A. Chernov * 142eecfbacSAndrey A. Chernov * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND 152eecfbacSAndrey A. Chernov * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 162eecfbacSAndrey A. Chernov * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 172eecfbacSAndrey A. Chernov * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 182eecfbacSAndrey A. Chernov * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 192eecfbacSAndrey A. Chernov * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 202eecfbacSAndrey A. Chernov * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 212eecfbacSAndrey A. Chernov * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 222eecfbacSAndrey A. Chernov * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 232eecfbacSAndrey A. Chernov * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 242eecfbacSAndrey A. Chernov * SUCH DAMAGE. 252eecfbacSAndrey A. Chernov */ 262eecfbacSAndrey A. Chernov 272eecfbacSAndrey A. Chernov #include <ctype.h> 282eecfbacSAndrey A. Chernov #include <string.h> 29883a3266SAndrey A. Chernov #include <locale.h> 30883a3266SAndrey A. Chernov 31883a3266SAndrey A. Chernov /* will be removed ***************************/ 322eecfbacSAndrey A. Chernov #include "collate.h" 332eecfbacSAndrey A. Chernov 342eecfbacSAndrey A. Chernov int __collcmp (c1, c2) 35883a3266SAndrey A. Chernov unsigned char c1, c2; 36883a3266SAndrey A. Chernov { 37883a3266SAndrey A. Chernov return collate_range_cmp (c1, c2); 38883a3266SAndrey A. Chernov } 39883a3266SAndrey A. Chernov /* will be removed ***************************/ 40883a3266SAndrey A. Chernov 41883a3266SAndrey A. Chernov int collate_range_cmp (c1, c2) 42883a3266SAndrey A. Chernov int c1, c2; 432eecfbacSAndrey A. Chernov { 442eecfbacSAndrey A. Chernov static char s1[2], s2[2]; 452eecfbacSAndrey A. Chernov 46883a3266SAndrey A. Chernov c1 &= UCHAR_MAX; 47883a3266SAndrey A. Chernov c2 &= UCHAR_MAX; 482eecfbacSAndrey A. Chernov if (c1 == c2) 492eecfbacSAndrey A. Chernov return (0); 502eecfbacSAndrey A. Chernov if ( (isascii(c1) && isascii(c2)) 512eecfbacSAndrey A. Chernov || (!isalpha(c1) && !isalpha(c2)) 522eecfbacSAndrey A. Chernov ) 53883a3266SAndrey A. Chernov return (c1 - c2); 542eecfbacSAndrey A. Chernov if (isalpha(c1) && !isalpha(c2)) { 552eecfbacSAndrey A. Chernov if (isupper(c1)) 56883a3266SAndrey A. Chernov return ('A' - c2); 572eecfbacSAndrey A. Chernov else 58883a3266SAndrey A. Chernov return ('a' - c2); 592eecfbacSAndrey A. Chernov } else if (isalpha(c2) && !isalpha(c1)) { 602eecfbacSAndrey A. Chernov if (isupper(c2)) 61883a3266SAndrey A. Chernov return (c1 - 'A'); 622eecfbacSAndrey A. Chernov else 63883a3266SAndrey A. Chernov return (c1 - 'a'); 642eecfbacSAndrey A. Chernov } 652eecfbacSAndrey A. Chernov if (isupper(c1) && islower(c2)) 662eecfbacSAndrey A. Chernov return (-1); 672eecfbacSAndrey A. Chernov else if (islower(c1) && isupper(c2)) 682eecfbacSAndrey A. Chernov return (1); 69883a3266SAndrey A. Chernov s1[0] = c1; 70883a3266SAndrey A. Chernov s2[0] = c2; 712eecfbacSAndrey A. Chernov return strcoll(s1, s2); 722eecfbacSAndrey A. Chernov } 73