From 89882c943fee708706a302f0679d8a041190576d Mon Sep 17 00:00:00 2001 From: Marrub Date: Mon, 21 Nov 2016 01:03:52 -0500 Subject: [PATCH] stdlib: Add Lth_ceilk and Lth_fractk stdlib: Change memcpy calls to memmove calls stdlib: Optimize Lth_PrintString with hacks --- lithos_c/inc/Lth_stdlib.h | 5 +++++ lithos_c/src/stdlib.c | 33 ++++++++++++++++++++++++++++----- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/lithos_c/inc/Lth_stdlib.h b/lithos_c/inc/Lth_stdlib.h index 8681b35..232a891 100644 --- a/lithos_c/inc/Lth_stdlib.h +++ b/lithos_c/inc/Lth_stdlib.h @@ -16,6 +16,7 @@ #define Lth_isidenti(c) \ (isalnum(c) || c == '_' || c == '$' || c == '\'' || c > 0x80) +#define Lth_integk(n) ((int_k_t)(n)) // Extern Functions ----------------------------------------------------------| @@ -40,6 +41,10 @@ wchar_t *Lth_wcsdupstr(char const *s); // mbs size_t Lth_mbslen(char const *s); +// accum +int Lth_ceilk(_Accum n); +_Accum Lth_fractk(_Accum n); + // Print void Lth_PrintString(char const *s); diff --git a/lithos_c/src/stdlib.c b/lithos_c/src/stdlib.c index 8c61559..a5469ec 100644 --- a/lithos_c/src/stdlib.c +++ b/lithos_c/src/stdlib.c @@ -17,6 +17,7 @@ #include #include #include +#include "Lth_stdfix.h" #define GenStrHash() \ if(s == NULL) return 0; \ @@ -50,7 +51,7 @@ char *Lth_strdup(char const *s) { size_t len = strlen(s); char *ret = malloc(len + 1); - memcpy(ret, s, len); + memmove(ret, s, len); ret[len] = '\0'; return ret; } @@ -101,7 +102,7 @@ char *Lth_strealoc(char *p, char const *s) { size_t len = strlen(s); p = realloc(p, len + 1); - memcpy(p, s, len); + memmove(p, s, len); p[len] = '\0'; return p; } @@ -150,7 +151,7 @@ wchar_t *Lth_wcsdup(wchar_t const *s) { size_t len = wcslen(s); wchar_t *ret = malloc(sizeof(wchar_t) * (len + 1)); - wmemcpy(ret, s, len); + wmemmove(ret, s, len); ret[len] = '\0'; return ret; } @@ -182,9 +183,32 @@ size_t Lth_mbslen(char const *s) return ret; s += next; } + return ret; } +// +// Lth_ceilk +// +int Lth_ceilk(_Accum n) +{ + union { int_k_t i; _Accum a; } u = { .a = n }; + if(u.i & 0xFFF1) + return u.i &= 0xFFFF0000, u.a + 1; + else + return (int)u.a; +} + +// +// Lth_fractk +// +_Accum Lth_fractk(_Accum n) +{ + union { int_k_t i; _Accum a; } u = { .a = n }; + u.i &= 0xFFFF; + return u.a; +} + // // Lth_PrintString // @@ -192,8 +216,7 @@ size_t Lth_mbslen(char const *s) // void Lth_PrintString(char const *s) { - if(s == NULL) return; - for(char const *p = s; *p;) ACS_PrintChar(*p++); + ACS_PrintGlobalCharArray((int)s, __GDCC__Sta); } //