Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: src/vm/sli.c
- Revision:
- 0:14e5e829dffe
diff -r 000000000000 -r 14e5e829dffe src/vm/sli.c
--- /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++;
+ }
+}