]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/ColdFire_MCF51CN128_CodeWarrior/Sources/stdlib.c
Add FreeRTOS-Plus directory.
[freertos] / FreeRTOS / Demo / ColdFire_MCF51CN128_CodeWarrior / Sources / stdlib.c
diff --git a/FreeRTOS/Demo/ColdFire_MCF51CN128_CodeWarrior/Sources/stdlib.c b/FreeRTOS/Demo/ColdFire_MCF51CN128_CodeWarrior/Sources/stdlib.c
new file mode 100644 (file)
index 0000000..8fd7de6
--- /dev/null
@@ -0,0 +1,497 @@
+/* FILENAME: stdlib.c\r
+ *\r
+ * Functions normally found in a standard C lib.\r
+ *\r
+ * 12/28/2005 - added memcmp and memmove\r
+ *\r
+ * Notes: These functions support ASCII only!!!\r
+ */\r
+\r
+//#include "m51cn128evb.h"\r
+#include "stdlib.h"\r
+\r
+#define TRUE 1\r
+#define FALSE 0\r
+#define NULL 0\r
+\r
+/****************************************************************/\r
+int\r
+isspace (int ch)\r
+{\r
+       if ((ch == ' ') || (ch == '\t'))        /* \n ??? */\r
+               return TRUE;\r
+       else\r
+               return FALSE;\r
+}\r
+\r
+/****************************************************************/\r
+int\r
+isalnum (int ch)\r
+{\r
+       /* ASCII only */\r
+       if (((ch >= '0') && (ch <= '9')) ||\r
+               ((ch >= 'A') && (ch <= 'Z')) ||\r
+               ((ch >= 'a') && (ch <= 'z')))\r
+               return TRUE;\r
+       else\r
+               return FALSE;\r
+}\r
+\r
+/****************************************************************/\r
+int\r
+isdigit (int ch)\r
+{\r
+       /* ASCII only */\r
+       if ((ch >= '0') && (ch <= '9'))\r
+               return TRUE;\r
+       else\r
+               return FALSE;\r
+}\r
+\r
+/****************************************************************/\r
+int\r
+isupper (int ch)\r
+{\r
+       /* ASCII only */\r
+       if ((ch >= 'A') && (ch <= 'Z'))\r
+               return TRUE;\r
+       else\r
+               return FALSE;\r
+}\r
+\r
+/****************************************************************/\r
+int\r
+strcasecmp (const char *s1, const char *s2)\r
+{\r
+       char    c1, c2;\r
+       int             result = 0;\r
+\r
+       while (result == 0)\r
+       {\r
+               c1 = *s1++;\r
+               c2 = *s2++;\r
+               if ((c1 >= 'a') && (c1 <= 'z'))\r
+                       c1 = (char)(c1 - ' ');\r
+               if ((c2 >= 'a') && (c2 <= 'z'))\r
+                       c2 = (char)(c2 - ' ');\r
+               if ((result = (c1 - c2)) != 0)\r
+                       break;\r
+               if ((c1 == 0) || (c2 == 0))\r
+                       break;\r
+       }\r
+       return result;\r
+}\r
+\r
+\r
+/****************************************************************/\r
+int\r
+stricmp (const char *s1, const char *s2)\r
+{\r
+   return (strcasecmp(s1, s2));\r
+}\r
+\r
+/****************************************************************/\r
+int\r
+strncasecmp (const char *s1, const char *s2, int n)\r
+{\r
+       char    c1, c2;\r
+       int             k = 0;\r
+       int             result = 0;\r
+\r
+       while ( k++ < n )\r
+       {\r
+               c1 = *s1++;\r
+               c2 = *s2++;\r
+               if ((c1 >= 'a') && (c1 <= 'z'))\r
+                       c1 = (char)(c1 - ' ');\r
+               if ((c2 >= 'a') && (c2 <= 'z'))\r
+                       c2 = (char)(c2 - ' ');\r
+               if ((result = (c1 - c2)) != 0)\r
+                       break;\r
+               if ((c1 == 0) || (c2 == 0))\r
+                       break;\r
+       }\r
+       return result;\r
+}\r
+\r
+/****************************************************************/\r
+int\r
+strnicmp (const char *s1, const char *s2, int n)\r
+{\r
+   return (strncasecmp(s1, s2, n));\r
+}\r
+\r
+/****************************************************************/\r
+unsigned long\r
+strtoul (char *str, char **ptr, int base)\r
+{\r
+   unsigned long rvalue = 0;\r
+   int neg = 0;\r
+   int c;\r
+\r
+   /* Validate parameters */\r
+   if ((str != NULL) && (base >= 0) && (base <= 36))\r
+   {\r
+      /* Skip leading white spaces */\r
+      while (isspace(*str))\r
+      {\r
+         ++str;\r
+       }\r
+\r
+       /* Check for notations */\r
+       switch (str[0])\r
+       {\r
+               case '0':\r
+          if (base == 0)\r
+          {\r
+             if ((str[1] == 'x') || (str[1] == 'X'))\r
+                               {\r
+                                       base = 16;\r
+                str += 2;\r
+             }\r
+             else\r
+             {\r
+                base = 8;\r
+                str++;\r
+                               }\r
+                       }\r
+                       break;\r
+    \r
+               case '-':\r
+                       neg = 1;\r
+          str++;\r
+          break;\r
+\r
+       case '+':\r
+          str++;\r
+                       break;\r
+\r
+               default:\r
+                       break;\r
+       }\r
+\r
+       if (base == 0)\r
+               base = 10;\r
+\r
+      /* Valid "digits" are 0..9, A..Z, a..z */\r
+      while (isalnum(c = *str))\r
+      {\r
+               /* Convert char to num in 0..36 */\r
+         if ((c -= ('a' - 10)) < 10)         /* 'a'..'z' */\r
+         {\r
+            if ((c += ('a' - 'A')) < 10)     /* 'A'..'Z' */\r
+            {\r
+               c += ('A' - '0' - 10);        /* '0'..'9' */\r
+                       }\r
+               }\r
+\r
+               /* check c against base */\r
+               if (c >= base)\r
+               {\r
+                       break;\r
+               }\r
+\r
+               if (neg)\r
+               {\r
+                       rvalue = (rvalue * base) - c;\r
+               }\r
+               else\r
+               {\r
+                       rvalue = (rvalue * base) + c;\r
+         }\r
+\r
+         ++str;\r
+               }\r
+       }\r
+\r
+   /* Upon exit, 'str' points to the character at which valid info */\r
+   /* STOPS.  No chars including and beyond 'str' are used.        */\r
+\r
+       if (ptr != NULL)\r
+                       *ptr = str;\r
+               \r
+               return rvalue;\r
+       }\r
+\r
+/****************************************************************/\r
+int\r
+atoi (const char *str)\r
+{\r
+   char *s = (char *)str;\r
+   \r
+   return ((int)strtoul(s, NULL, 10));\r
+}\r
+\r
+/****************************************************************/\r
+int\r
+strlen (const char *str)\r
+{\r
+       char *s = (char *)str;\r
+       int len = 0;\r
+\r
+       if (s == NULL)\r
+               return 0;\r
+\r
+       while (*s++ != '\0')\r
+               ++len;\r
+\r
+       return len;\r
+}\r
+\r
+/****************************************************************/\r
+char *\r
+strcat (char *dest, const char *src)\r
+{\r
+       char *dp;\r
+       char *sp = (char *)src;\r
+\r
+       if ((dest != NULL) && (src != NULL))\r
+       {\r
+               dp = &dest[strlen(dest)];\r
+\r
+               while (*sp != '\0')\r
+               {\r
+                       *dp++ = *sp++;\r
+               }\r
+               *dp = '\0';\r
+       }\r
+       return dest;\r
+}\r
+\r
+/****************************************************************/\r
+char *\r
+strncat (char *dest, const char *src, int n)\r
+{\r
+       char *dp;\r
+       char *sp = (char *)src;\r
+\r
+       if ((dest != NULL) && (src != NULL) && (n > 0))\r
+       {\r
+               dp = &dest[strlen(dest)];\r
+\r
+               while ((*sp != '\0') && (n-- > 0))\r
+               {\r
+                       *dp++ = *sp++;\r
+               }\r
+               *dp = '\0';\r
+       }\r
+       return dest;\r
+}\r
+\r
+/****************************************************************/\r
+char *\r
+strcpy (char *dest, const char *src)\r
+{\r
+       char *dp = (char *)dest;\r
+       char *sp = (char *)src;\r
+\r
+       if ((dest != NULL) && (src != NULL))\r
+       {\r
+               while (*sp != '\0')\r
+               {\r
+                       *dp++ = *sp++;\r
+               }\r
+               *dp = '\0';\r
+       }\r
+       return dest;\r
+}\r
+\r
+/****************************************************************/\r
+char *\r
+strncpy (char *dest, const char *src, int n)\r
+{\r
+       char *dp = (char *)dest;\r
+       char *sp = (char *)src;\r
+\r
+       if ((dest != NULL) && (src != NULL) && (n > 0))\r
+       {\r
+               while ((*sp != '\0') && (n-- > 0))\r
+               {\r
+                       *dp++ = *sp++;\r
+               }\r
+               *dp = '\0';\r
+       }\r
+       return dest;\r
+}\r
+\r
+/****************************************************************/\r
+int\r
+strcmp (const char *s1, const char *s2)\r
+{\r
+       /* No checks for NULL */\r
+       char *s1p = (char *)s1;\r
+       char *s2p = (char *)s2;\r
+\r
+       while (*s2p != '\0')\r
+       {\r
+               if (*s1p != *s2p)\r
+                       break;\r
+\r
+               ++s1p;\r
+               ++s2p;\r
+       }\r
+       return (*s1p - *s2p);\r
+}\r
+\r
+/****************************************************************/\r
+int\r
+strncmp (const char *s1, const char *s2, int n)\r
+{\r
+       /* No checks for NULL */\r
+       char *s1p = (char *)s1;\r
+       char *s2p = (char *)s2;\r
+\r
+       if (n <= 0)\r
+               return 0;\r
+\r
+       while (*s2p != '\0')\r
+       {\r
+               if (*s1p != *s2p)\r
+                       break;\r
+\r
+               if (--n == 0)\r
+                       break;\r
+\r
+               ++s1p;\r
+               ++s2p;\r
+       }\r
+       return (*s1p - *s2p);\r
+}\r
+\r
+/****************************************************************/\r
+char *\r
+strstr(const char *s1, const char *s2)\r
+{\r
+   char *sp = (char *)s1;\r
+   int  len1 = strlen(s1);\r
+   int  len2 = strlen(s2);\r
+\r
+   while (len1 >= len2) \r
+   {\r
+      if (strncmp(sp, s2, len2) == 0)\r
+      {\r
+         return (sp);\r
+      }\r
+      ++sp;\r
+      --len1;\r
+   }\r
+\r
+   return (NULL);\r
+}\r
+\r
+/****************************************************************/\r
+char *\r
+strchr(const char *str, int c)\r
+{\r
+   char *sp = (char *)str;\r
+   char  ch = (char)(c & 0xff);\r
+\r
+   while (*sp != '\0')\r
+   {\r
+      if (*sp == ch)\r
+      {\r
+         return (sp);\r
+      }\r
+      ++sp;\r
+   }\r
+\r
+   return (NULL);\r
+}\r
+\r
+/****************************************************************/\r
+void *\r
+memcpy (void *dest, const void *src, unsigned n)\r
+{\r
+       unsigned char *dbp = (unsigned char *)dest;\r
+       unsigned char *sbp = (unsigned char *)src;\r
+\r
+       if ((dest != NULL) && (src != NULL) && (n > 0))\r
+       {\r
+      while (n--)\r
+                       *dbp++ = *sbp++;\r
+       }\r
+       return dest;\r
+}\r
+\r
+/****************************************************************/\r
+void *\r
+memset (void *s, int c, unsigned n)\r
+{\r
+       /* Not optimized, but very portable */\r
+       unsigned char *sp = (unsigned char *)s;\r
+\r
+       if ((s != NULL) && (n > 0))\r
+       {\r
+               while (n--)\r
+               {\r
+                       *sp++ = (unsigned char)c;\r
+               }\r
+       }\r
+       return s;\r
+}\r
+\r
+/****************************************************************/\r
+int\r
+memcmp (const void *s1, const void *s2, unsigned n)\r
+{\r
+   unsigned char *s1p, *s2p;\r
+\r
+   if (s1 && s2 && (n > 0))\r
+   {\r
+      s1p = (unsigned char *)s1;\r
+      s2p = (unsigned char *)s2;\r
+\r
+      while ((--n >= 0) && (*s1p == *s2p))\r
+      {\r
+         if (*s1p != *s2p)\r
+            return (*s1p - *s2p);\r
+         ++s1p;\r
+         ++s2p;\r
+      }\r
+   }\r
+\r
+   return (0);\r
+}\r
+\r
+/****************************************************************/\r
+void *\r
+memmove (void *dest, const void *src, unsigned n)\r
+{\r
+   unsigned char *dbp = (unsigned char *)dest;\r
+   unsigned char *sbp = (unsigned char *)src;\r
+   unsigned char *dend = dbp + n;\r
+   unsigned char *send = sbp + n;\r
+\r
+   if ((dest != NULL) && (src != NULL) && (n > 0))\r
+   {\r
+      /* see if a memcpy would overwrite source buffer */\r
+      if ((sbp < dbp) && (dbp < send))\r
+      {\r
+         while (n--)\r
+            *(--dend) = *(--send);\r
+      }\r
+      else\r
+      {\r
+         while (n--)\r
+            *dbp++ = *sbp++;\r
+      }\r
+   }\r
+\r
+   return dest;\r
+}\r
+\r
+/****************************************************************/\r
+\r
+char *\r
+strrchr(const char *s, int c)\r
+{\r
+    const char *last = NULL;\r
+    if (c == '\0')\r
+        return strchr(s, c);\r
+    while ((s = strchr(s, c)) != NULL) {\r
+        last = s;\r
+        s++;\r
+    }\r
+    return (char *) last;\r
+}\r
+\r