Lower.c

Go to the documentation of this file.
00001 /* $Xorg: Lower.c,v 1.4 2001/02/09 02:03:53 xorgcvs Exp $ */
00002 
00003 /* 
00004  
00005 Copyright 1988, 1998  The Open Group
00006 
00007 Permission to use, copy, modify, distribute, and sell this software and its
00008 documentation for any purpose is hereby granted without fee, provided that
00009 the above copyright notice appear in all copies and that both that
00010 copyright notice and this permission notice appear in supporting
00011 documentation.
00012 
00013 The above copyright notice and this permission notice shall be included in
00014 all copies or substantial portions of the Software.
00015 
00016 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00017 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00018 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
00019 OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
00020 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
00021 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
00022 
00023 Except as contained in this notice, the name of The Open Group shall not be
00024 used in advertising or otherwise to promote the sale, use or other dealings
00025 in this Software without prior written authorization from The Open Group.
00026 
00027 */
00028 
00029 /* $XFree86: xc/lib/Xmu/Lower.c,v 1.11 2001/07/25 15:04:50 dawes Exp $ */
00030 
00031 #define  XK_LATIN1
00032 #include <X11/keysymdef.h>
00033 #include <X11/Xmu/CharSet.h>
00034 #include <X11/Xmu/SysUtil.h>
00035 
00036 #include <stdio.h>
00037 
00038 /*
00039   #ifndef HAS_SNPRINTF
00040   #undef SCOPE
00041   #define SCOPE static
00042   #include "snprintf.c"
00043   #endif
00044 */
00045 
00046 #include <stdarg.h>
00047 
00048 /*
00049  * ISO Latin-1 case conversion routine
00050  */
00051 #define XmuTolower(c)                                                    \
00052 ((c) >= XK_a && (c) <= XK_z ?                                            \
00053  (c) : (c) >= XK_A && (c) <= XK_Z ?                                      \
00054  (c) + (XK_a - XK_A) : (c) >= XK_Agrave && (c) <= XK_Odiaeresis ?        \
00055  (c) + (XK_agrave - XK_Agrave) : (c) >= XK_Ooblique && (c) <= XK_Thorn ? \
00056  (c) + (XK_oslash - XK_Ooblique) :                                       \
00057  (c))
00058 
00059 #define XmuToupper(c)                                                    \
00060 ((c) >= XK_A && (c) <= XK_Z ?                                            \
00061  (c) : (c) >= XK_a && (c) <= XK_z ?                                      \
00062  (c) - (XK_a - XK_A) : (c) >= XK_agrave && (c) <= XK_odiaeresis ?        \
00063  (c) - (XK_agrave - XK_Agrave) : (c) >= XK_oslash && (c) <= XK_thorn ?   \
00064  (c) - (XK_oslash - XK_Ooblique) :                                       \
00065  (c))
00066 
00067 /*
00068  * Implementation
00069  */
00070 void
00071 XmuCopyISOLatin1Lowered(char *dst, _Xconst char *src)
00072 {
00073   register unsigned char *dest, *source;
00074 
00075   for (dest = (unsigned char *)dst, source = (unsigned char *)src;
00076        *source;
00077        source++, dest++)
00078     *dest = XmuTolower(*source);
00079   *dest = '\0';
00080 }
00081 
00082 void
00083 XmuCopyISOLatin1Uppered(char *dst, _Xconst char *src)
00084 {
00085   register unsigned char *dest, *source;
00086 
00087   for (dest = (unsigned char *)dst, source = (unsigned char *)src;
00088        *source;
00089        source++, dest++)
00090     *dest = XmuToupper(*source);
00091   *dest = '\0';
00092 }
00093 
00094 int
00095 XmuCompareISOLatin1(_Xconst char *first, _Xconst char *second)
00096 {
00097   register unsigned char *ap, *bp;
00098 
00099   for (ap = (unsigned char *)first, bp = (unsigned char *)second;
00100        *ap && *bp && XmuTolower(*ap) == XmuTolower(*bp);
00101        ap++, bp++)
00102     ;
00103 
00104   return ((int)XmuTolower(*ap) - (int)XmuTolower(*bp));
00105 }
00106 
00107 void
00108 XmuNCopyISOLatin1Lowered(char *dst, _Xconst char *src, register int size)
00109 {
00110   register unsigned char *dest, *source;
00111 
00112   if (size > 0)
00113     {
00114       for (dest = (unsigned char *)dst, source = (unsigned char *)src;
00115            *source && size > 1;
00116            source++, dest++, size--)
00117         *dest = XmuTolower(*source);
00118       *dest = '\0';
00119     }
00120 }
00121 
00122 void
00123 XmuNCopyISOLatin1Uppered(char *dst, _Xconst char *src, register int size)
00124 {
00125   register unsigned char *dest, *source;
00126 
00127   if (size > 0)
00128     {
00129       for (dest = (unsigned char *)dst, source = (unsigned char *)src;
00130            *source && size > 1;
00131            source++, dest++, size--)
00132         *dest = XmuToupper(*source);
00133       *dest = '\0';
00134     }
00135 }
00136 
00137 int
00138 XmuSnprintf(char *str, int size, _Xconst char *fmt, ...)
00139 {
00140   va_list ap;
00141   int retval;
00142 
00143   if (size <= 0)
00144     return (size);
00145 
00146   va_start(ap, fmt);
00147 
00148 #if 1
00149   retval = vsprintf(str, fmt, ap);
00150   if (retval >= size)
00151     {
00152       fprintf(stderr, "WARNING: buffer overflow detected!\n");
00153       fflush(stderr);
00154       abort();
00155     }
00156 #else
00157   retval = vsnprintf(str, size, fmt, ap);
00158 #endif
00159 
00160   va_end(ap);
00161 
00162   return (retval);
00163 }

Generated on Sun Mar 4 15:03:56 2007 for Scilab [trunk] by  doxygen 1.5.1