davide carboni / Mbed 2 deprecated pymite_http_get

Dependencies:   mbed

Revision:
0:14e5e829dffe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/vm/sli.c	Wed Jul 21 12:50:41 2010 +0000
@@ -0,0 +1,151 @@
+/*
+# This file is Copyright 2003, 2006, 2007, 2009 Dean Hall.
+#
+# This file is part of the PyMite VM.
+# The PyMite VM is free software: you can redistribute it and/or modify
+# it under the terms of the GNU GENERAL PUBLIC LICENSE Version 2.
+#
+# The PyMite VM is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# A copy of the GNU GENERAL PUBLIC LICENSE Version 2
+# is seen in the file COPYING in this directory.
+*/
+
+
+#undef __FILE_ID__
+#define __FILE_ID__ 0x11
+
+
+/**
+ * \file
+ * \brief Standard Library Interface
+ *
+ * PyMite requires a few functions from a few different
+ * standard C libraries (memory, string, etc).
+ */
+
+
+#include "pm.h"
+
+
+/** use Duff's Device or simple for-loop for memcpy. */
+#define USE_DUFFS_DEVICE    0
+
+
+#if !HAVE_STRING_H
+
+void *
+sli_memcpy(unsigned char *to, unsigned char const *from, unsigned int n)
+{
+    unsigned char *tobak;
+
+    /* Store init value of to */
+    tobak = to;
+
+#if USE_DUFFS_DEVICE
+    if (n > 0)
+    {
+        switch (n & 0x7)
+            do
+            {
+            case 0:
+                *to++ = *from++;
+            case 7:
+                *to++ = *from++;
+            case 6:
+                *to++ = *from++;
+            case 5:
+                *to++ = *from++;
+            case 4:
+                *to++ = *from++;
+            case 3:
+                *to++ = *from++;
+            case 2:
+                *to++ = *from++;
+            case 1:
+                *to++ = *from++;
+            }
+            while ((n -= 8) > 0);
+    }
+#else
+    for (; n > 0; n--)
+    {
+        *to = *from;
+        from++;
+        to++;
+    }
+#endif /* USE_DUFFS_DEVICE */
+    return tobak;
+}
+
+
+int
+sli_strlen(char const *s)
+{
+    char const *si = s;
+    int len = 0;
+
+    while (*si++)
+    {
+        len++;
+    }
+    return len;
+}
+
+
+int
+sli_strcmp(char const *s1, char const *s2)
+{
+    /* While not at either strings' end and they're same */
+    while ((*s1 != C_NULL) && (*s2 != C_NULL) && (*s1 == *s2))
+    {
+        s1++;
+        s2++;
+    }
+
+    /* Return string difference */
+    return *s1 - *s2;
+}
+
+
+int
+sli_strncmp(char const *s1, char const *s2, unsigned int n)
+{
+    unsigned int i = 0;
+
+    if (n == 0)
+    {
+        return 0;
+    }
+
+    /* Scan n bytes in string */
+    for (i = 0; i < n; i++)
+    {
+        /* If bytes differ, return difference */
+        if (s1[i] != s2[i])
+        {
+            return s1[i] - s2[i];
+        }
+    }
+    return 0;
+}
+
+#endif /* HAVE_STRING_H */
+
+
+/*
+ * This function is moved outside of HAVE_STRING_H because the one in string.h
+ * will not accept a null value for the second arg
+ */
+void
+sli_memset(unsigned char *dest, char const val, unsigned int n)
+{
+    unsigned int i;
+
+    for (i = 0; i < n; i++)
+    {
+        *dest = (unsigned char)val;
+        dest++;
+    }
+}