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.
src/vm/sli.c@0:14e5e829dffe, 2010-07-21 (annotated)
- Committer:
- dadaista
- Date:
- Wed Jul 21 12:50:41 2010 +0000
- Revision:
- 0:14e5e829dffe
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dadaista | 0:14e5e829dffe | 1 | /* |
dadaista | 0:14e5e829dffe | 2 | # This file is Copyright 2003, 2006, 2007, 2009 Dean Hall. |
dadaista | 0:14e5e829dffe | 3 | # |
dadaista | 0:14e5e829dffe | 4 | # This file is part of the PyMite VM. |
dadaista | 0:14e5e829dffe | 5 | # The PyMite VM is free software: you can redistribute it and/or modify |
dadaista | 0:14e5e829dffe | 6 | # it under the terms of the GNU GENERAL PUBLIC LICENSE Version 2. |
dadaista | 0:14e5e829dffe | 7 | # |
dadaista | 0:14e5e829dffe | 8 | # The PyMite VM is distributed in the hope that it will be useful, |
dadaista | 0:14e5e829dffe | 9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
dadaista | 0:14e5e829dffe | 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
dadaista | 0:14e5e829dffe | 11 | # A copy of the GNU GENERAL PUBLIC LICENSE Version 2 |
dadaista | 0:14e5e829dffe | 12 | # is seen in the file COPYING in this directory. |
dadaista | 0:14e5e829dffe | 13 | */ |
dadaista | 0:14e5e829dffe | 14 | |
dadaista | 0:14e5e829dffe | 15 | |
dadaista | 0:14e5e829dffe | 16 | #undef __FILE_ID__ |
dadaista | 0:14e5e829dffe | 17 | #define __FILE_ID__ 0x11 |
dadaista | 0:14e5e829dffe | 18 | |
dadaista | 0:14e5e829dffe | 19 | |
dadaista | 0:14e5e829dffe | 20 | /** |
dadaista | 0:14e5e829dffe | 21 | * \file |
dadaista | 0:14e5e829dffe | 22 | * \brief Standard Library Interface |
dadaista | 0:14e5e829dffe | 23 | * |
dadaista | 0:14e5e829dffe | 24 | * PyMite requires a few functions from a few different |
dadaista | 0:14e5e829dffe | 25 | * standard C libraries (memory, string, etc). |
dadaista | 0:14e5e829dffe | 26 | */ |
dadaista | 0:14e5e829dffe | 27 | |
dadaista | 0:14e5e829dffe | 28 | |
dadaista | 0:14e5e829dffe | 29 | #include "pm.h" |
dadaista | 0:14e5e829dffe | 30 | |
dadaista | 0:14e5e829dffe | 31 | |
dadaista | 0:14e5e829dffe | 32 | /** use Duff's Device or simple for-loop for memcpy. */ |
dadaista | 0:14e5e829dffe | 33 | #define USE_DUFFS_DEVICE 0 |
dadaista | 0:14e5e829dffe | 34 | |
dadaista | 0:14e5e829dffe | 35 | |
dadaista | 0:14e5e829dffe | 36 | #if !HAVE_STRING_H |
dadaista | 0:14e5e829dffe | 37 | |
dadaista | 0:14e5e829dffe | 38 | void * |
dadaista | 0:14e5e829dffe | 39 | sli_memcpy(unsigned char *to, unsigned char const *from, unsigned int n) |
dadaista | 0:14e5e829dffe | 40 | { |
dadaista | 0:14e5e829dffe | 41 | unsigned char *tobak; |
dadaista | 0:14e5e829dffe | 42 | |
dadaista | 0:14e5e829dffe | 43 | /* Store init value of to */ |
dadaista | 0:14e5e829dffe | 44 | tobak = to; |
dadaista | 0:14e5e829dffe | 45 | |
dadaista | 0:14e5e829dffe | 46 | #if USE_DUFFS_DEVICE |
dadaista | 0:14e5e829dffe | 47 | if (n > 0) |
dadaista | 0:14e5e829dffe | 48 | { |
dadaista | 0:14e5e829dffe | 49 | switch (n & 0x7) |
dadaista | 0:14e5e829dffe | 50 | do |
dadaista | 0:14e5e829dffe | 51 | { |
dadaista | 0:14e5e829dffe | 52 | case 0: |
dadaista | 0:14e5e829dffe | 53 | *to++ = *from++; |
dadaista | 0:14e5e829dffe | 54 | case 7: |
dadaista | 0:14e5e829dffe | 55 | *to++ = *from++; |
dadaista | 0:14e5e829dffe | 56 | case 6: |
dadaista | 0:14e5e829dffe | 57 | *to++ = *from++; |
dadaista | 0:14e5e829dffe | 58 | case 5: |
dadaista | 0:14e5e829dffe | 59 | *to++ = *from++; |
dadaista | 0:14e5e829dffe | 60 | case 4: |
dadaista | 0:14e5e829dffe | 61 | *to++ = *from++; |
dadaista | 0:14e5e829dffe | 62 | case 3: |
dadaista | 0:14e5e829dffe | 63 | *to++ = *from++; |
dadaista | 0:14e5e829dffe | 64 | case 2: |
dadaista | 0:14e5e829dffe | 65 | *to++ = *from++; |
dadaista | 0:14e5e829dffe | 66 | case 1: |
dadaista | 0:14e5e829dffe | 67 | *to++ = *from++; |
dadaista | 0:14e5e829dffe | 68 | } |
dadaista | 0:14e5e829dffe | 69 | while ((n -= 8) > 0); |
dadaista | 0:14e5e829dffe | 70 | } |
dadaista | 0:14e5e829dffe | 71 | #else |
dadaista | 0:14e5e829dffe | 72 | for (; n > 0; n--) |
dadaista | 0:14e5e829dffe | 73 | { |
dadaista | 0:14e5e829dffe | 74 | *to = *from; |
dadaista | 0:14e5e829dffe | 75 | from++; |
dadaista | 0:14e5e829dffe | 76 | to++; |
dadaista | 0:14e5e829dffe | 77 | } |
dadaista | 0:14e5e829dffe | 78 | #endif /* USE_DUFFS_DEVICE */ |
dadaista | 0:14e5e829dffe | 79 | return tobak; |
dadaista | 0:14e5e829dffe | 80 | } |
dadaista | 0:14e5e829dffe | 81 | |
dadaista | 0:14e5e829dffe | 82 | |
dadaista | 0:14e5e829dffe | 83 | int |
dadaista | 0:14e5e829dffe | 84 | sli_strlen(char const *s) |
dadaista | 0:14e5e829dffe | 85 | { |
dadaista | 0:14e5e829dffe | 86 | char const *si = s; |
dadaista | 0:14e5e829dffe | 87 | int len = 0; |
dadaista | 0:14e5e829dffe | 88 | |
dadaista | 0:14e5e829dffe | 89 | while (*si++) |
dadaista | 0:14e5e829dffe | 90 | { |
dadaista | 0:14e5e829dffe | 91 | len++; |
dadaista | 0:14e5e829dffe | 92 | } |
dadaista | 0:14e5e829dffe | 93 | return len; |
dadaista | 0:14e5e829dffe | 94 | } |
dadaista | 0:14e5e829dffe | 95 | |
dadaista | 0:14e5e829dffe | 96 | |
dadaista | 0:14e5e829dffe | 97 | int |
dadaista | 0:14e5e829dffe | 98 | sli_strcmp(char const *s1, char const *s2) |
dadaista | 0:14e5e829dffe | 99 | { |
dadaista | 0:14e5e829dffe | 100 | /* While not at either strings' end and they're same */ |
dadaista | 0:14e5e829dffe | 101 | while ((*s1 != C_NULL) && (*s2 != C_NULL) && (*s1 == *s2)) |
dadaista | 0:14e5e829dffe | 102 | { |
dadaista | 0:14e5e829dffe | 103 | s1++; |
dadaista | 0:14e5e829dffe | 104 | s2++; |
dadaista | 0:14e5e829dffe | 105 | } |
dadaista | 0:14e5e829dffe | 106 | |
dadaista | 0:14e5e829dffe | 107 | /* Return string difference */ |
dadaista | 0:14e5e829dffe | 108 | return *s1 - *s2; |
dadaista | 0:14e5e829dffe | 109 | } |
dadaista | 0:14e5e829dffe | 110 | |
dadaista | 0:14e5e829dffe | 111 | |
dadaista | 0:14e5e829dffe | 112 | int |
dadaista | 0:14e5e829dffe | 113 | sli_strncmp(char const *s1, char const *s2, unsigned int n) |
dadaista | 0:14e5e829dffe | 114 | { |
dadaista | 0:14e5e829dffe | 115 | unsigned int i = 0; |
dadaista | 0:14e5e829dffe | 116 | |
dadaista | 0:14e5e829dffe | 117 | if (n == 0) |
dadaista | 0:14e5e829dffe | 118 | { |
dadaista | 0:14e5e829dffe | 119 | return 0; |
dadaista | 0:14e5e829dffe | 120 | } |
dadaista | 0:14e5e829dffe | 121 | |
dadaista | 0:14e5e829dffe | 122 | /* Scan n bytes in string */ |
dadaista | 0:14e5e829dffe | 123 | for (i = 0; i < n; i++) |
dadaista | 0:14e5e829dffe | 124 | { |
dadaista | 0:14e5e829dffe | 125 | /* If bytes differ, return difference */ |
dadaista | 0:14e5e829dffe | 126 | if (s1[i] != s2[i]) |
dadaista | 0:14e5e829dffe | 127 | { |
dadaista | 0:14e5e829dffe | 128 | return s1[i] - s2[i]; |
dadaista | 0:14e5e829dffe | 129 | } |
dadaista | 0:14e5e829dffe | 130 | } |
dadaista | 0:14e5e829dffe | 131 | return 0; |
dadaista | 0:14e5e829dffe | 132 | } |
dadaista | 0:14e5e829dffe | 133 | |
dadaista | 0:14e5e829dffe | 134 | #endif /* HAVE_STRING_H */ |
dadaista | 0:14e5e829dffe | 135 | |
dadaista | 0:14e5e829dffe | 136 | |
dadaista | 0:14e5e829dffe | 137 | /* |
dadaista | 0:14e5e829dffe | 138 | * This function is moved outside of HAVE_STRING_H because the one in string.h |
dadaista | 0:14e5e829dffe | 139 | * will not accept a null value for the second arg |
dadaista | 0:14e5e829dffe | 140 | */ |
dadaista | 0:14e5e829dffe | 141 | void |
dadaista | 0:14e5e829dffe | 142 | sli_memset(unsigned char *dest, char const val, unsigned int n) |
dadaista | 0:14e5e829dffe | 143 | { |
dadaista | 0:14e5e829dffe | 144 | unsigned int i; |
dadaista | 0:14e5e829dffe | 145 | |
dadaista | 0:14e5e829dffe | 146 | for (i = 0; i < n; i++) |
dadaista | 0:14e5e829dffe | 147 | { |
dadaista | 0:14e5e829dffe | 148 | *dest = (unsigned char)val; |
dadaista | 0:14e5e829dffe | 149 | dest++; |
dadaista | 0:14e5e829dffe | 150 | } |
dadaista | 0:14e5e829dffe | 151 | } |