string.c

00001 /***************************************************************************
00002                           string.c  -  description
00003                              -------------------
00004     begin                : Sat Dec 13 2003
00005     copyright            : (C) 2003 by Dynacube Team
00006     email                : mdshah82@yahoo.com
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
00015  *                                                                         *
00016  ***************************************************************************/
00017  
00018 #include "common/ktypes.h"
00019 #include "core/ktime.h"
00020 #include "common/kconst.h"
00021  
00022 #include "common/string.h"
00023 
00024   
00025   DW strlen(const char *str)
00026   {
00027     DW len = 0;
00028 
00029           while(*str++ && len < MAX_BUFFER)
00030             len++;
00031 
00032         return len;           
00033   }
00034 
00035   SDB strcmp(const char *str1,const char *str2)
00036   {
00037     DW index = 0;
00038     DB ch1 = *(str1+index), ch2 = *(str2+index);
00039 
00040     while(ch1 && ch2)
00041     {
00042       if(ch1 != ch2)
00043       {
00044         if(ch1 > ch2)
00045                 return 1;
00046         else
00047                 return -1;
00048       }
00049       index++;
00050       ch1 = *(str1+index), ch2 = *(str2+index);
00051     }
00052 
00053     if( ch1 == '\0' && ch2 == '\0' )
00054     {
00055       return 0;
00056     }
00057     else if(ch1 == '\0')
00058     {
00059         return -1;
00060     }
00061     else
00062         return 1;
00063   }
00064 
00065   SDB stricmp(const char *str1,const char *str2)
00066   {
00067     DW index = 0;
00068     DB ch1 = *(str1+index), ch2 = *(str2+index);
00069 
00070     while(ch1 && ch2)
00071     {
00072       if(ch1 >=65 && ch1 <= 90)
00073        ch1 = ch1 +32;
00074       if(ch2 >=65 && ch2 <= 90)
00075        ch2 = ch2 +32;
00076       if(ch1 != ch2)
00077       {
00078         if(ch1 > ch2)
00079                 return 1;
00080         else
00081                 return -1;
00082       }
00083       index++;
00084       ch1 = *(str1+index), ch2 = *(str2+index);
00085     }
00086 
00087     if( ch1 == '\0' && ch2 == '\0' )
00088     {
00089       return 0;
00090     }
00091     else if(ch1 == '\0')
00092     {
00093         return -1;
00094     }
00095     else
00096         return 1;
00097   }
00098 
00099   void strcpy(void *dest,const void *src)
00100   {
00101     memcpy(dest,src,strlen(src));
00102   }
00103 
00104   void strcat(void *dest,const void *src)
00105   {
00106    memcpy(dest+strlen(dest),src,strlen(src));
00107   }
00108 
00109   void* memcpy(void *dest, const void *src, size_t n)
00110   {
00111    char *_dest = (char *)dest;
00112    const char *_src = (const char *)src;
00113 
00114    *_dest = *_src; //Just the first entry
00115 
00116    while(n)
00117    {
00118      *(_dest+n) = *(_src+n);
00119      n--;
00120    }
00121 
00122    return _dest;
00123   }
00124 
00125   void* kmemcpy(void *dest, const void *src, size_t n)
00126   {
00127    char *_dest = (char *)dest;
00128    const char *_src = (const char *)src;
00129 
00130    *_dest = *_src; //Just the first entry
00131 
00132    while(n)
00133    {
00134      *(_dest+n) = *(_src+n);
00135      n--;
00136    }
00137 
00138    return _dest;
00139   }
00140 
00141   void* strmncpy(void* dest,void *src,DD m, DD n)
00142   {
00143     DD i;
00144     i = m;
00145     if(m < strlen(src))
00146     {
00147      for(i = m; i < m + n ; i++)
00148       *(DB *)(dest + i - m) = *(DB *)(src + i);
00149     }
00150     *(DB *)(dest + i - m) = '\0';
00151     return dest;
00152   }
00153 
00154    void* strncpy(void* dest,void *src,DD n)
00155    {
00156     DD i;
00157     for(i = 0; i < n ; i++)
00158      *(DB *)(dest + i) = *(DB *)(src + i);
00159 
00160     *(DB *)(dest + i) = '\0';
00161     return dest;
00162          }
00163   
00164   void* memset(void *dest, DB val, DD times)
00165   {
00166     DD i;
00167     for(i = 0 ; i < times ; i++)
00168     {
00169       *(DB *)(dest+i) = val;
00170     }
00171 
00172     return dest;
00173   }
00174 
00175  unsigned char toupper(unsigned char s)
00176   {
00177   DW i;
00178   if(is_lower(s))
00179          {
00180                  return (s + 'A' - 'a');
00181          }
00182   return s;
00183   }
00184   
00185  unsigned char tolower(unsigned char s)
00186   {
00187   DW i;
00188   if(is_upper(s))
00189          {
00190                  return (s - ('A' - 'a'));
00191          }
00192   return s;
00193   }
00194   
00195   char is_lower(unsigned char s)
00196    {
00197     if(s >= 'a' && s <= 'z')
00198         return 1;
00199     return 0;
00200    }
00201    
00202   char is_upper(unsigned char s)
00203    {
00204     if(s >= 'A' && s <= 'Z')
00205         return 1;
00206     return 0;
00207    }
00208    
00209    char isnum(unsigned char c)
00210    {
00211          if(c >= '0' && c <= '9')
00212                  return 1;
00213          else
00214                 return 0;
00215    }
00216    
00217  unsigned char toggle_shift(unsigned char s)
00218  {
00219 
00220   char a[][2] =  {"1!","2@","3#","4$","5%","6^",
00221                 "7&","8*","9(","0)","-_","=+",
00222                 "\\|","[{","]}",";:","'\"",",<",
00223                 ".>","/?","`~"
00224                 };
00225   int i;
00226   for(i = 0; i < 21; i++)
00227    if(s == a[i][0])
00228     return a[i][1];
00229   if(is_lower(s))
00230    return toupper(s);
00231   if(is_upper(s))
00232    return tolower(s);
00233   return s;
00234  }

Generated on Thu Jul 27 23:52:27 2006 for Dynacube by  doxygen 1.4.7