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.
Fork of libMiMic by
core/NyLPC_stdlib.c@57:bc4330dfa62f, 2013-09-13 (annotated)
- Committer:
- nyatla
- Date:
- Fri Sep 13 06:38:16 2013 +0000
- Revision:
- 57:bc4330dfa62f
- Parent:
- 49:d4334acc3ec3
update mimic core r329;
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| nyatla | 0:142ee8b12fef | 1 | /********************************************************************************* | 
| nyatla | 0:142ee8b12fef | 2 | * PROJECT: MiMic | 
| nyatla | 0:142ee8b12fef | 3 | * -------------------------------------------------------------------------------- | 
| nyatla | 0:142ee8b12fef | 4 | * | 
| nyatla | 0:142ee8b12fef | 5 | * This file is part of MiMic | 
| nyatla | 0:142ee8b12fef | 6 | * Copyright (C)2011 Ryo Iizuka | 
| nyatla | 0:142ee8b12fef | 7 | * | 
| nyatla | 0:142ee8b12fef | 8 | * MiMic is free software: you can redistribute it and/or modify | 
| nyatla | 0:142ee8b12fef | 9 | * it under the terms of the GNU Lesser General Public License as published | 
| nyatla | 0:142ee8b12fef | 10 | * by the Free Software Foundation, either version 3 of the License, or | 
| nyatla | 0:142ee8b12fef | 11 | * (at your option) any later version. | 
| nyatla | 0:142ee8b12fef | 12 | * | 
| nyatla | 0:142ee8b12fef | 13 | * This program is distributed in the hope that it will be useful, | 
| nyatla | 0:142ee8b12fef | 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| nyatla | 0:142ee8b12fef | 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| nyatla | 0:142ee8b12fef | 16 | * GNU General Public License for more details. | 
| nyatla | 0:142ee8b12fef | 17 | * | 
| nyatla | 0:142ee8b12fef | 18 | * You should have received a copy of the GNU Lesser General Public License | 
| nyatla | 0:142ee8b12fef | 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 
| nyatla | 0:142ee8b12fef | 20 | * | 
| nyatla | 0:142ee8b12fef | 21 | * For further information please contact. | 
| nyatla | 0:142ee8b12fef | 22 | * http://nyatla.jp/ | 
| nyatla | 0:142ee8b12fef | 23 | * <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp> | 
| nyatla | 0:142ee8b12fef | 24 | * | 
| nyatla | 0:142ee8b12fef | 25 | *********************************************************************************/ | 
| nyatla | 0:142ee8b12fef | 26 | #include "NyLPC_stdlib.h" | 
| nyatla | 11:c82a7b2899b0 | 27 | |
| nyatla | 0:142ee8b12fef | 28 | NyLPC_TUInt32 NyLPC_TUInt32_bswap(NyLPC_TUInt32 n) | 
| nyatla | 0:142ee8b12fef | 29 | { | 
| nyatla | 0:142ee8b12fef | 30 | return( | 
| nyatla | 0:142ee8b12fef | 31 | ((((NyLPC_TUInt32)(n))<<24)&0xff000000)| | 
| nyatla | 0:142ee8b12fef | 32 | ((((NyLPC_TUInt32)(n))<< 8)&0x00ff0000)| | 
| nyatla | 0:142ee8b12fef | 33 | ((((NyLPC_TUInt32)(n))>> 8)&0x0000ff00)| | 
| nyatla | 0:142ee8b12fef | 34 | ((((NyLPC_TUInt32)(n))>>24)&0x000000ff)); | 
| nyatla | 0:142ee8b12fef | 35 | } | 
| nyatla | 0:142ee8b12fef | 36 | NyLPC_TUInt16 NyLPC_TUInt16_bswap(NyLPC_TUInt16 n) | 
| nyatla | 0:142ee8b12fef | 37 | { | 
| nyatla | 0:142ee8b12fef | 38 | return NyLPC_TUInt16_BSWAP(n); | 
| nyatla | 0:142ee8b12fef | 39 | } | 
| nyatla | 0:142ee8b12fef | 40 | |
| nyatla | 0:142ee8b12fef | 41 | static int _line_log_l; | 
| nyatla | 0:142ee8b12fef | 42 | static const char* _line_log_m; | 
| nyatla | 0:142ee8b12fef | 43 | unsigned int NyLPC_assert_counter=0; | 
| nyatla | 0:142ee8b12fef | 44 | unsigned int NyLPC_abort_counter=0; | 
| nyatla | 0:142ee8b12fef | 45 | unsigned int NyLPC_debug_counter=0; | 
| nyatla | 0:142ee8b12fef | 46 | |
| nyatla | 0:142ee8b12fef | 47 | void NyLPC_assertHook(const char* m,int l) | 
| nyatla | 0:142ee8b12fef | 48 | { | 
| nyatla | 0:142ee8b12fef | 49 | _line_log_l=l; | 
| nyatla | 0:142ee8b12fef | 50 | _line_log_m=m; | 
| nyatla | 0:142ee8b12fef | 51 | NyLPC_assert_counter++; | 
| nyatla | 0:142ee8b12fef | 52 | return; | 
| nyatla | 0:142ee8b12fef | 53 | } | 
| nyatla | 0:142ee8b12fef | 54 | void NyLPC_abortHook(const char* m,int l) | 
| nyatla | 0:142ee8b12fef | 55 | { | 
| nyatla | 0:142ee8b12fef | 56 | _line_log_l=l; | 
| nyatla | 0:142ee8b12fef | 57 | _line_log_m=m; | 
| nyatla | 0:142ee8b12fef | 58 | NyLPC_abort_counter++; | 
| nyatla | 0:142ee8b12fef | 59 | } | 
| nyatla | 0:142ee8b12fef | 60 | void NyLPC_debugHook(const char* m,int l) | 
| nyatla | 0:142ee8b12fef | 61 | { | 
| nyatla | 0:142ee8b12fef | 62 | _line_log_l=l; | 
| nyatla | 0:142ee8b12fef | 63 | _line_log_m=m; | 
| nyatla | 0:142ee8b12fef | 64 | NyLPC_debug_counter++; | 
| nyatla | 0:142ee8b12fef | 65 | return; | 
| nyatla | 0:142ee8b12fef | 66 | } | 
| nyatla | 0:142ee8b12fef | 67 | |
| nyatla | 0:142ee8b12fef | 68 | NyLPC_TBool NyLPC_TCharArrayPtr_seek(struct NyLPC_TCharArrayPtr* i_struct,NyLPC_TUInt16 i_seek) | 
| nyatla | 0:142ee8b12fef | 69 | { | 
| nyatla | 0:142ee8b12fef | 70 | if(i_struct->len<i_seek){ | 
| nyatla | 0:142ee8b12fef | 71 | return NyLPC_TBool_FALSE; | 
| nyatla | 0:142ee8b12fef | 72 | } | 
| nyatla | 0:142ee8b12fef | 73 | i_struct->ptr+=i_seek; | 
| nyatla | 0:142ee8b12fef | 74 | i_struct->len-=i_seek; | 
| nyatla | 0:142ee8b12fef | 75 | return NyLPC_TBool_TRUE; | 
| nyatla | 0:142ee8b12fef | 76 | } | 
| nyatla | 0:142ee8b12fef | 77 | |
| nyatla | 0:142ee8b12fef | 78 | NyLPC_TBool NyLPC_TUInt32ArrayPtr_seek(struct NyLPC_TUInt32ArrayPtr* i_struct,NyLPC_TUInt16 i_seek) | 
| nyatla | 0:142ee8b12fef | 79 | { | 
| nyatla | 0:142ee8b12fef | 80 | if(i_struct->len<i_seek){ | 
| nyatla | 0:142ee8b12fef | 81 | return NyLPC_TBool_FALSE; | 
| nyatla | 0:142ee8b12fef | 82 | } | 
| nyatla | 0:142ee8b12fef | 83 | i_struct->ptr+=i_seek; | 
| nyatla | 0:142ee8b12fef | 84 | i_struct->len-=i_seek; | 
| nyatla | 0:142ee8b12fef | 85 | return NyLPC_TBool_TRUE; | 
| nyatla | 0:142ee8b12fef | 86 | } | 
| nyatla | 0:142ee8b12fef | 87 | void NyLPC_TUInt32ArrayPtr_setBuf(struct NyLPC_TUInt32ArrayPtr* i_struct,NyLPC_TUInt32* i_ptr,NyLPC_TUInt16 i_len) | 
| nyatla | 0:142ee8b12fef | 88 | { | 
| nyatla | 0:142ee8b12fef | 89 | i_struct->ptr=i_ptr; | 
| nyatla | 0:142ee8b12fef | 90 | i_struct->len=i_len; | 
| nyatla | 0:142ee8b12fef | 91 | } | 
| nyatla | 0:142ee8b12fef | 92 | |
| nyatla | 2:b96c1e90d120 | 93 | |
| nyatla | 2:b96c1e90d120 | 94 | /** ---------- | 
| nyatla | 2:b96c1e90d120 | 95 | * NyLPC_TTextIdTbl | 
| nyatla | 2:b96c1e90d120 | 96 | ---------- */ | 
| nyatla | 2:b96c1e90d120 | 97 | |
| nyatla | 2:b96c1e90d120 | 98 | /** | 
| nyatla | 2:b96c1e90d120 | 99 | * IDテーブル | 
| nyatla | 2:b96c1e90d120 | 100 | */ | 
| nyatla | 2:b96c1e90d120 | 101 | |
| nyatla | 2:b96c1e90d120 | 102 | NyLPC_TUInt8 NyLPC_TTextIdTbl_getMatchId(const NyLPC_TChar* i_str,const struct NyLPC_TTextIdTbl i_tbl[]) | 
| nyatla | 2:b96c1e90d120 | 103 | { | 
| nyatla | 2:b96c1e90d120 | 104 | int i; | 
| nyatla | 2:b96c1e90d120 | 105 | for(i=0;i_tbl[i].n!=NULL;i++){ | 
| nyatla | 2:b96c1e90d120 | 106 | if(strcmp(i_str,i_tbl[i].n)==0){ | 
| nyatla | 2:b96c1e90d120 | 107 | break; | 
| nyatla | 2:b96c1e90d120 | 108 | } | 
| nyatla | 2:b96c1e90d120 | 109 | } | 
| nyatla | 2:b96c1e90d120 | 110 | return i_tbl[i].id; | 
| nyatla | 2:b96c1e90d120 | 111 | } | 
| nyatla | 48:00d211aac2ec | 112 | NyLPC_TUInt8 NyLPC_TTextIdTbl_getMatchIdIgnoreCase(const NyLPC_TChar* i_str,const struct NyLPC_TTextIdTbl i_tbl[]) | 
| nyatla | 48:00d211aac2ec | 113 | { | 
| nyatla | 48:00d211aac2ec | 114 | int i; | 
| nyatla | 48:00d211aac2ec | 115 | for(i=0;i_tbl[i].n!=NULL;i++){ | 
| nyatla | 48:00d211aac2ec | 116 | if(NyLPC_stricmp(i_str,i_tbl[i].n)==0){ | 
| nyatla | 48:00d211aac2ec | 117 | break; | 
| nyatla | 48:00d211aac2ec | 118 | } | 
| nyatla | 48:00d211aac2ec | 119 | } | 
| nyatla | 48:00d211aac2ec | 120 | return i_tbl[i].id; | 
| nyatla | 48:00d211aac2ec | 121 | } | 
| nyatla | 48:00d211aac2ec | 122 | const NyLPC_TChar* NyLPC_TTextIdTbl_getTextById(NyLPC_TUInt8 i_id,const struct NyLPC_TTextIdTbl i_tbl[]) | 
| nyatla | 48:00d211aac2ec | 123 | { | 
| nyatla | 48:00d211aac2ec | 124 | int i; | 
| nyatla | 48:00d211aac2ec | 125 | for(i=0;i_tbl[i].n!=NULL;i++){ | 
| nyatla | 48:00d211aac2ec | 126 | if(i_id==i_tbl[i].id){ | 
| nyatla | 48:00d211aac2ec | 127 | return i_tbl[i].n; | 
| nyatla | 48:00d211aac2ec | 128 | } | 
| nyatla | 48:00d211aac2ec | 129 | } | 
| nyatla | 48:00d211aac2ec | 130 | return NULL; | 
| nyatla | 48:00d211aac2ec | 131 | } | 
| nyatla | 2:b96c1e90d120 | 132 | |
| nyatla | 2:b96c1e90d120 | 133 | |
| nyatla | 2:b96c1e90d120 | 134 | |
| nyatla | 2:b96c1e90d120 | 135 | |
| nyatla | 2:b96c1e90d120 | 136 | /** ---------- | 
| nyatla | 11:c82a7b2899b0 | 137 | * Standard functions | 
| nyatla | 2:b96c1e90d120 | 138 | ---------- */ | 
| nyatla | 2:b96c1e90d120 | 139 | |
| nyatla | 2:b96c1e90d120 | 140 | |
| nyatla | 2:b96c1e90d120 | 141 | |
| nyatla | 49:d4334acc3ec3 | 142 | NyLPC_TInt8 NyLPC_itoa(int i_n,char* o_out,NyLPC_TInt8 i_base) | 
| nyatla | 0:142ee8b12fef | 143 | { | 
| nyatla | 49:d4334acc3ec3 | 144 | NyLPC_TInt8 i,v; | 
| nyatla | 49:d4334acc3ec3 | 145 | int sign; | 
| nyatla | 0:142ee8b12fef | 146 | if ((sign = i_n) < 0){ | 
| nyatla | 0:142ee8b12fef | 147 | i_n = -i_n; | 
| nyatla | 0:142ee8b12fef | 148 | } | 
| nyatla | 0:142ee8b12fef | 149 | i = 0; | 
| nyatla | 0:142ee8b12fef | 150 | do{ | 
| nyatla | 49:d4334acc3ec3 | 151 | v=(NyLPC_TInt8)(i_n % i_base); | 
| nyatla | 57:bc4330dfa62f | 152 | o_out[i++] = (v<10)?(v+'0'):(v+'a'-10); | 
| nyatla | 48:00d211aac2ec | 153 | }while ((i_n /= i_base) > 0); | 
| nyatla | 0:142ee8b12fef | 154 | if (sign < 0){ | 
| nyatla | 0:142ee8b12fef | 155 | o_out[i++] = '-'; | 
| nyatla | 0:142ee8b12fef | 156 | } | 
| nyatla | 0:142ee8b12fef | 157 | o_out[i] = '\0'; | 
| nyatla | 0:142ee8b12fef | 158 | NyLPC_reverse(o_out); | 
| nyatla | 48:00d211aac2ec | 159 | return i; | 
| nyatla | 0:142ee8b12fef | 160 | } | 
| nyatla | 49:d4334acc3ec3 | 161 | NyLPC_TInt8 NyLPC_uitoa(unsigned int i_n,char* o_out,NyLPC_TInt8 i_base) | 
| nyatla | 13:a71705c5e6fd | 162 | { | 
| nyatla | 49:d4334acc3ec3 | 163 | NyLPC_TInt8 i = 0; | 
| nyatla | 49:d4334acc3ec3 | 164 | NyLPC_TInt8 v; | 
| nyatla | 13:a71705c5e6fd | 165 | do{ | 
| nyatla | 49:d4334acc3ec3 | 166 | v=(NyLPC_TInt8)(i_n % i_base); | 
| nyatla | 57:bc4330dfa62f | 167 | o_out[i++] = (v<10)?(v+'0'):(v+'a'-10); | 
| nyatla | 48:00d211aac2ec | 168 | }while ((i_n /= i_base) > 0); | 
| nyatla | 13:a71705c5e6fd | 169 | o_out[i] = '\0'; | 
| nyatla | 13:a71705c5e6fd | 170 | NyLPC_reverse(o_out); | 
| nyatla | 48:00d211aac2ec | 171 | return i; | 
| nyatla | 48:00d211aac2ec | 172 | } | 
| nyatla | 48:00d211aac2ec | 173 | |
| nyatla | 48:00d211aac2ec | 174 | /** | 
| nyatla | 48:00d211aac2ec | 175 | * 桁数の指定できるuitoaです。 | 
| nyatla | 48:00d211aac2ec | 176 | */ | 
| nyatla | 49:d4334acc3ec3 | 177 | NyLPC_TInt8 NyLPC_uitoa2(unsigned int i_n,char* o_out,NyLPC_TInt8 i_base,NyLPC_TInt8 i_digit) | 
| nyatla | 48:00d211aac2ec | 178 | { | 
| nyatla | 49:d4334acc3ec3 | 179 | NyLPC_TInt8 i = 0; | 
| nyatla | 49:d4334acc3ec3 | 180 | NyLPC_TInt8 v; | 
| nyatla | 48:00d211aac2ec | 181 | do{ | 
| nyatla | 49:d4334acc3ec3 | 182 | v=(NyLPC_TInt8)(i_n % i_base); | 
| nyatla | 57:bc4330dfa62f | 183 | o_out[i++] = (v<10)?(v+'0'):(v+'a'-10); | 
| nyatla | 48:00d211aac2ec | 184 | }while ((i_n /= i_base) > 0); | 
| nyatla | 48:00d211aac2ec | 185 | while(i<i_digit){ | 
| nyatla | 48:00d211aac2ec | 186 | o_out[i++] = '0'; | 
| nyatla | 48:00d211aac2ec | 187 | } | 
| nyatla | 48:00d211aac2ec | 188 | o_out[i] = '\0'; | 
| nyatla | 48:00d211aac2ec | 189 | NyLPC_reverse(o_out); | 
| nyatla | 48:00d211aac2ec | 190 | return i; | 
| nyatla | 13:a71705c5e6fd | 191 | } | 
| nyatla | 0:142ee8b12fef | 192 | |
| nyatla | 0:142ee8b12fef | 193 | void NyLPC_reverse(char* s) | 
| nyatla | 0:142ee8b12fef | 194 | { | 
| nyatla | 0:142ee8b12fef | 195 | char *j; | 
| nyatla | 0:142ee8b12fef | 196 | char c; | 
| nyatla | 0:142ee8b12fef | 197 | j = s + strlen(s) - 1; | 
| nyatla | 0:142ee8b12fef | 198 | while(s < j){ | 
| nyatla | 0:142ee8b12fef | 199 | c = *s; | 
| nyatla | 0:142ee8b12fef | 200 | *s++ = *j; | 
| nyatla | 0:142ee8b12fef | 201 | *j-- = c; | 
| nyatla | 0:142ee8b12fef | 202 | } | 
| nyatla | 11:c82a7b2899b0 | 203 | } | 
| nyatla | 11:c82a7b2899b0 | 204 | |
| nyatla | 11:c82a7b2899b0 | 205 | |
| nyatla | 11:c82a7b2899b0 | 206 | int NyLPC_stricmp(const char *i_s1, const char *i_s2) | 
| nyatla | 11:c82a7b2899b0 | 207 | { | 
| nyatla | 48:00d211aac2ec | 208 | const char* s1 =i_s1; | 
| nyatla | 48:00d211aac2ec | 209 | const char* s2 =i_s2; | 
| nyatla | 48:00d211aac2ec | 210 | for (;*s1 != '\0';s1++, s2++) | 
| nyatla | 48:00d211aac2ec | 211 | { | 
| nyatla | 48:00d211aac2ec | 212 | if(*s1!=*s2){ | 
| nyatla | 48:00d211aac2ec | 213 | if(NyLPC_tolower(*s1) != NyLPC_tolower(*s2)){ | 
| nyatla | 48:00d211aac2ec | 214 | break; | 
| nyatla | 48:00d211aac2ec | 215 | } | 
| nyatla | 48:00d211aac2ec | 216 | } | 
| nyatla | 48:00d211aac2ec | 217 | } | 
| nyatla | 48:00d211aac2ec | 218 | return (int)((unsigned char)*s1) - (int)((unsigned char)(*s2)); | 
| nyatla | 11:c82a7b2899b0 | 219 | } | 
| nyatla | 11:c82a7b2899b0 | 220 | |
| nyatla | 11:c82a7b2899b0 | 221 | int NyLPC_strnicmp(const char *i_s1, const char *i_s2,int n) | 
| nyatla | 11:c82a7b2899b0 | 222 | { | 
| nyatla | 11:c82a7b2899b0 | 223 | char c; | 
| nyatla | 11:c82a7b2899b0 | 224 | int n2=n; | 
| nyatla | 48:00d211aac2ec | 225 | for(;n2>0;n2--,i_s1++,i_s2++) | 
| nyatla | 11:c82a7b2899b0 | 226 | { | 
| nyatla | 48:00d211aac2ec | 227 | if(*i_s1!=*i_s2){ | 
| nyatla | 48:00d211aac2ec | 228 | c=(int)((unsigned char)NyLPC_tolower(*i_s1)) - (int)((unsigned char)NyLPC_tolower(*i_s2)); | 
| nyatla | 48:00d211aac2ec | 229 | if(c!=0){ | 
| nyatla | 48:00d211aac2ec | 230 | return c; | 
| nyatla | 48:00d211aac2ec | 231 | } | 
| nyatla | 11:c82a7b2899b0 | 232 | } | 
| nyatla | 11:c82a7b2899b0 | 233 | } | 
| nyatla | 11:c82a7b2899b0 | 234 | return 0; | 
| nyatla | 11:c82a7b2899b0 | 235 | } | 
| nyatla | 11:c82a7b2899b0 | 236 | |
| nyatla | 11:c82a7b2899b0 | 237 | |
| nyatla | 11:c82a7b2899b0 | 238 | int NyLPC_ctoi(char i) | 
| nyatla | 11:c82a7b2899b0 | 239 | { | 
| nyatla | 11:c82a7b2899b0 | 240 | if('0'<=i && i<='9') return (i-'0'); | 
| nyatla | 11:c82a7b2899b0 | 241 | return 0; | 
| nyatla | 11:c82a7b2899b0 | 242 | } | 
| nyatla | 11:c82a7b2899b0 | 243 | int NyLPC_ctox(char i) | 
| nyatla | 11:c82a7b2899b0 | 244 | { | 
| nyatla | 11:c82a7b2899b0 | 245 | if('0'<=i && i<='9') return (i-'0'); | 
| nyatla | 11:c82a7b2899b0 | 246 | if('a'<=i && i<='f') return (i-'a'+10); | 
| nyatla | 11:c82a7b2899b0 | 247 | if('A'<=i && i<='F') return (i-'A'+10); | 
| nyatla | 11:c82a7b2899b0 | 248 | return 0; | 
| nyatla | 11:c82a7b2899b0 | 249 | } | 
| nyatla | 11:c82a7b2899b0 | 250 | |
| nyatla | 11:c82a7b2899b0 | 251 | |
| nyatla | 11:c82a7b2899b0 | 252 | |
| nyatla | 11:c82a7b2899b0 | 253 | |
| nyatla | 11:c82a7b2899b0 | 254 | 
