From eb9ae4316f6003e7f9bddcf34582e3f0c31c7df0 Mon Sep 17 00:00:00 2001 From: madrocketsci Date: Mon, 2 Jun 2025 09:10:50 -0400 Subject: [PATCH] copypaste --- build_linux64/libamsstring4.linux64.a | Bin 1168 -> 285026 bytes build_linux64/objstore/amsstring4_class.o | Bin 0 -> 208592 bytes .../objstore/amsstring4_portability.o | Bin 0 -> 4840 bytes build_linux64/objstore/amsstring4_tests1.o | Bin 0 -> 41824 bytes build_linux64/tests | Bin 785360 -> 787048 bytes include/amsstring4/amsstring4.hpp | 152 ++ .../amsstring4/amsstring4_bintextencoding.hpp | 28 + include/amsstring4/amsstring4_tests.hpp | 27 + include/amsstring4/amsstring4_unicode.hpp | 22 + src/amsstring4/amsstring4_bintextencoding.cpp | 565 ++++++ src/amsstring4/amsstring4_class.cpp | 1692 +++++++++++++++++ src/amsstring4/amsstring4_portability.cpp | 177 ++ src/amsstring4/amsstring4_tests1.cpp | 475 +++++ src/amsstring4/amsstring4_unicode.cpp | 638 +++++++ src/main.cpp | 1 + 15 files changed, 3777 insertions(+) create mode 100644 build_linux64/objstore/amsstring4_class.o create mode 100644 build_linux64/objstore/amsstring4_portability.o create mode 100644 build_linux64/objstore/amsstring4_tests1.o create mode 100644 include/amsstring4/amsstring4_bintextencoding.hpp create mode 100644 include/amsstring4/amsstring4_tests.hpp create mode 100644 include/amsstring4/amsstring4_unicode.hpp create mode 100644 src/amsstring4/amsstring4_bintextencoding.cpp create mode 100644 src/amsstring4/amsstring4_class.cpp create mode 100644 src/amsstring4/amsstring4_portability.cpp create mode 100644 src/amsstring4/amsstring4_tests1.cpp create mode 100644 src/amsstring4/amsstring4_unicode.cpp diff --git a/build_linux64/libamsstring4.linux64.a b/build_linux64/libamsstring4.linux64.a index 19c13f7252005d6a73404c9782468d966d55f792..f187fb161f20955fdd9c520fb788c95abb277e4a 100644 GIT binary patch literal 285026 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 delta 45 scmaE~NpJ$^1PdV(1sF)+VgLet{mFv)+N?l9Ba_K?`HGtt=6_`d0QL9_S^xk5 diff --git a/build_linux64/objstore/amsstring4_class.o b/build_linux64/objstore/amsstring4_class.o new file mode 100644 index 0000000000000000000000000000000000000000..cf6642cf7588cd137bb9ad28e0ce165b1cac01a3 GIT binary patch literal 208592 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%0AB9{(=)*cLA|f6NW=dpUlg{JGWewf0-8 z_=?cNXB6pwh2d-duTuPvaw{eLdNzqUyKp9%QCUh)5G z#s59a_4q9)Qopm|Yw>IEHsm;dT%+hW1oWSB`hSlHF88>Z_j+tVzr^V;b@noTU8m@; z4Cv4MsU;T5|7QdGtCjj+ujrRo=<$D|Nc|%XznyV)h$)-LMn(TdMgN|F{^}z2?+oa7 zl$(Xj!S=sN(ck)5z5ZVmslU15YxVD;=>JgB9~aQ?GT%nCQ2UPw=nql!Z&CDr7tlYn zNd3nG`qhg5t&09$-_he=U8MeQhOfnclA`}(MSpTYf2z|jG=Kdzz@Opxhj{~r_cFC4 z;QtKg|3F8O@nf#y{{fYH{C?+d+~{W0DD&6X?{4^7{FZKM#LU6|bC;rjML_@cBK0o` z=&w@r=PCLt1NvLvYpYzS{?7*V*DLz>DEeK8>hV9INc}E`uf@N;TTnCp^A-K^0sZ5O z)Ncsrmni!8D*6uv^v4&ezc8RbP|;tY=>I#Qe_fIKZv^y5D*6v7`X$5k_J7dn7aG6! zFnq238x;M8ivH+;{W(O<0SUmegtrAYlN0{W{J{YMo26#@No zi`0KQpubVkU!v%D8m`CxR;OR6|7~yhTKqe1ZN$vM@%J%Be^fyK*G|9C`eAN>|8$Z3 z6#@RsMe+yTHNdAxjf3pR){}rnLB?10UMe-jE@b@i}|E~alK#}|%M(FVyS|tDU z0ROv1@@EG4VW*g1?o#y!MGl+fSzkb^Awf@sX=|4{^{b!TYkN0_FxfxEs zXAHQanXw>-hd-!n@sa(o|;c`?4T;csnT*xnwasnlY}FUdmDGr#@^JAI$O%JF9% zlv{w$?_u~+{Bq4wLtOki?qlDO_5TVbeo`M_TNn+iEU)r7`}n*ul55$qemt&iW8U7v jn&kXlxQ~t0#jQE8e>p$3Lx4Y0ZWcAi5vG1T{P_PLSzCJ? literal 0 HcmV?d00001 diff --git a/build_linux64/objstore/amsstring4_portability.o b/build_linux64/objstore/amsstring4_portability.o new file mode 100644 index 0000000000000000000000000000000000000000..3a5600b545849bf35c44deb2412477e9d66d6120 GIT binary patch literal 4840 zcmbW5U1%It6oBt0{ju71(i)`FqOnlv+IHF9tg+RqEA7|`ZbN7qv0|N0c4w2(-Pv`1 zLK2#GZH#1G7y6)3MZ^b%f|M4);!7d4(6le52tq&~6eC8Ghp1qqM&mhm?%kc-Zm4=- z=G^<8zxzAg^rW16wjmTETteh2QtNR_$l3L^c9J%eWCLlUzN?_W8lGRJ2ma_*ydM;A zc-nKP6t8=7LY_zG33&n4RrwZCMuw+}D}mwf#l^+4Jpa>qumGL(DL_i!tA))dWqCnK z-vl+Oglmj(na~!Si^|C5Gu=4Bh#Th^1|_R zP`y(lQ^nw)D$E9%orWAI+mBPbw8Kt~p z+jd+PZ&ZPp*!aZgPS8Ne#Ap;+n`kQmtth%xHF-5W_^Xa!}wkGYVcth;*+ z*_O+a5EY8x1@#W>+xK|O_U<0nbljF$Yos+2-PPvOZu~?%5s4VWo_kb~TdljruvyF=)J_Ty*-8O9g4H#mL)WOW2ntspHo+ zc4;Iylcj>=3I({o8-zT`IPY`)GUGfG=cgE73mS#CR?@Y9Ts3H%Dp1%K|^b_}c<6Fjo)_l4el z@c9b(#=!lecOLl9jPpLd>%b*A0Q`)z5>(y441WYT=3itBOuq>bv2PiFqUCMdu?({} zp%x34qxBd$!x@aEi$$Wo*wG5+R6GXnyyo<|j**K$s@iTkt=qP|tV32aa;~KZ91=@2 zA(WrG=i$*rkGc_~NGt7W3kzHa;WS3am_NSgXbU>~J zx9#sb_)IEQ1F^P#Jq;sMGrFU~5OcYp4Mwe5mNt0%vc%e|w)!i=;$YeNWR0QPswFJV z%%t{YidJh}%@;D&qP`&(V-`2(#6(-vw`rM-Xu^DLiRJR4Wx0G{Taqso!*ijg`!q{U zTh$Q+aW1e60dJ?LuD9t>+~w?6ajD@DwMJFdFde;Dw^XM`WJ6(jsDR-ug&garqTO9VzF2cokvQ^^{ z>9h~q!Y;#*i8SK|2J2Lt95{@BKHrymwbB0=yC5x0OTh5{i1BNH)my3(bL?XA;6_DUKfJs3;^*1;KV@-T HiShpcBhI8t literal 0 HcmV?d00001 diff --git a/build_linux64/objstore/amsstring4_tests1.o b/build_linux64/objstore/amsstring4_tests1.o new file mode 100644 index 0000000000000000000000000000000000000000..c3a559c2059e0477ba681778f7ead53e8479d828 GIT binary patch literal 41824 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 V=I>0RdC5=NY|D=_)}N;Q{{f()WOx7o literal 0 HcmV?d00001 diff --git a/build_linux64/tests b/build_linux64/tests index 64aebfbac9e8c887c1ee91838d01f5f6a3f34eb0..d6fec7bc113ed152d4ee192a2ed5104b29de348a 100644 GIT binary patch delta 90439 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 delta 88847 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 z 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 diff --git a/include/amsstring4/amsstring4.hpp b/include/amsstring4/amsstring4.hpp index dfddd1a..d695a60 100644 --- a/include/amsstring4/amsstring4.hpp +++ b/include/amsstring4/amsstring4.hpp @@ -4,11 +4,163 @@ #include #include #include +#include +#include +#include +#include +#include +#include + +#include namespace ams { +//wraps the functions strcpy_s and strncpy in a portable manner +//between linux and microsoft standard C libraries. +int amsstrcpy_s(char *dest, int size, const char *src); + +//wraps the functions sprintf_s and snprintf in a portable manner +//between linux and microsoft standard C libraries. +int amssprintf_s(char *s, int n, const char *format, ...); + +//Using the C library's sscanf function is more robust +//than atod or atof. It returns valid numbers for infs and nans +//Returns nan for any uninterpretable string +double amsstrtonum(const char *str); + +typedef char ams_chartype; +static const ams_chartype ams_char_cr = (ams_chartype) '\r'; //carriage return +static const ams_chartype ams_char_lf = (ams_chartype) '\n'; //newline +static const ams_chartype ams_char_tb = (ams_chartype) '\t'; //tab +static const ams_chartype ams_char_nt = (ams_chartype) '\0'; //null terminator + +class amsstring +{ +public: + + ams_chartype blank; // null terminator returned for accessing index out of bounds + ams_chartype *cstring; + int length; + //length will be set to the length of the cstring not including the null terminating char + + //Basic functions + amsstring(); + ~amsstring(); + + amsstring(amsstring &other); + amsstring& operator=(amsstring &other); + amsstring(const amsstring &other); + const amsstring& operator=(const amsstring &other); + + amsstring(ams_chartype *other); + amsstring(const ams_chartype *other); + + amsstring& operator=(ams_chartype *other); + const amsstring& operator=(const ams_chartype *other); //assign string constant to amsstring + //const amsstring& operator=(const ams_chartype *other) const; //assign string constant to amsstring + //const is a disease! + + // + //amsstring(int length); + //amsstring(int length, const ams_chartype initchar); + + int resize(const int newlen); + int size() const; + + ams_chartype& operator[](const int ind); + const ams_chartype& operator[](const int ind) const; + ams_chartype& at(const int ind); + const ams_chartype& at(const int ind) const; + + void clear(); + void setall(const ams_chartype val, const int newlen); + void shrinktofit(); + + //string comparisons + bool operator==(const amsstring &other) const; + bool operator==(const char *other) const; + bool operator!=(const amsstring &other) const; + bool operator!=(const char *other) const; + + //string ordering comparison + //alphebetizes strings by ASCII character + //longer strings compare larger than shorter ones + bool operator<(const amsstring &other) const; + bool operator>(const amsstring &other) const; + bool operator<(const ams_chartype *other) const; + bool operator>(const ams_chartype *other) const; + + //Insert, Remove, and Substring + void insert(const int ind, const amsstring other); + void insert(const int ind, const ams_chartype *other); + void remove(const int ind); + void remove(const int ind1, const int ind2); + void substring(const int ind1, const int ind2, amsstring *sout) const; + + //Append + void append(const amsstring &other); + void append(const ams_chartype *other); + void append(const ams_chartype other); + + amsstring operator+(const amsstring &other); + const amsstring operator+(const amsstring &other) const; + amsstring operator+(const ams_chartype *other); + const amsstring operator+(const ams_chartype *other) const; + amsstring operator+(const ams_chartype other); + const amsstring operator+(const ams_chartype other) const; + + //Find + int find(const amsstring findstr, const int indstart=0, const bool casesens=1) const; + int find(const ams_chartype *findstr, const int indstart=0, const bool casesens=1) const; + int find(const ams_chartype c, const int indstart=0, const bool casesens=1) const; + + //formatted input + int sprintf(int bufflen, const ams_chartype *formatstring, ...); + + void tolower(); + void toupper(); + + bool isvalidnumber(); + double strtonum(); }; +//needs work +void splitlines(amsstring *s, std::vector *lns); +void splitlines(amsstring *s, ams::amsarray *lns); + +void split(amsstring *s, const ams_chartype delimitchar, std::vector *lns); +void split(amsstring *s, const ams_chartype delimitchar, ams::amsarray *lns); + +void split(amsstring *s, const ams_chartype *delimitstr, std::vector *lns); +void split(amsstring *s, const ams_chartype *delimitstr, ams::amsarray *lns); + +void split(amsstring *s, amsstring *delimitstr, std::vector *lns); +void split(amsstring *s, amsstring *delimitstr, ams::amsarray *lns); + +//splits a string, not counting whitespaces between non-whitespace characters +void splitwhitespace(amsstring *s, std::vector *lns); +void splitwhitespace(amsstring *s, ams::amsarray *lns); + +//removes all whitespace characters '\t','\r','\n' included +//to the left and right of the string (but not in the middle) +void stripwhitespace(amsstring *s); + +//completely removes all whitespace entirely +void stripallwhitespace(amsstring *s); + +void freadline(FILE *fp, amsstring *s); +void freadlines(FILE *fp, std::vector *lines); +void fwritelines(FILE *fp, amsstring *s); +void fwritelines(FILE *fp, std::vector *lines); +void freadtxtfile(FILE *fp, amsstring *s); + +}; //end namespace ams + +#include +#include +#include + + #endif \ No newline at end of file diff --git a/include/amsstring4/amsstring4_bintextencoding.hpp b/include/amsstring4/amsstring4_bintextencoding.hpp new file mode 100644 index 0000000..4d748df --- /dev/null +++ b/include/amsstring4/amsstring4_bintextencoding.hpp @@ -0,0 +1,28 @@ +#ifndef __AMSSTRING4_BINTEXTENCODING_HPP__ +#define __AMSSTRING4_BINTEXTENCODING_HPP__ + +namespace ams +{ + +//Only processes strings of length divisible by 4, with +//expected 0,1,2 padding chars at the end of the string, +//and no non-coding characters. +void base64encode(ams::amsarray *bytes, amsstring *str); + + + +int base64decode(amsstring *str, ams::amsarray *bytes, bool bstrict); + +//decodes, ignoring (as in MIME spec) all characters that are not +//valid b64 alphabet chars, and all padding until the end of the string +int base64decode_liberal(amsstring *str, ams::amsarray *bytes); + +int base64decode_strict(amsstring *str, ams::amsarray *bytes); + +void test_base64encode(); +void test_base64encode_fuzztest(); + +}; + +#endif + diff --git a/include/amsstring4/amsstring4_tests.hpp b/include/amsstring4/amsstring4_tests.hpp new file mode 100644 index 0000000..f064da7 --- /dev/null +++ b/include/amsstring4/amsstring4_tests.hpp @@ -0,0 +1,27 @@ +#ifndef __AMSSTRING4_TESTS_HPP__ +#define __AMSSTRING4_TESTS_HPP__ + +namespace ams +{ + + void amsstring3_basic_string_test1(); + void amsstring3_sscanf_test1(); + void amsstring3_basic_string_test2(); + void amsstring3_memoryleakcheck1(); + void amsstring3_memoryleakcheck2(); + void amsstring3_stringtests2(); + void amsstring3_test_find(); + + void amsstring3_test_splitlines(); + void amsstring3_test_split(); + void amsstring3_test_strip(); + void amsstring3_test_freadwrite(); + + void amsstring3_test_concatenation_operators(); + + + +}; + +#endif + diff --git a/include/amsstring4/amsstring4_unicode.hpp b/include/amsstring4/amsstring4_unicode.hpp new file mode 100644 index 0000000..d446359 --- /dev/null +++ b/include/amsstring4/amsstring4_unicode.hpp @@ -0,0 +1,22 @@ +#ifndef __AMSSTRING4_UNICODE_HPP__ +#define __AMSSTRING4_UNICODE_HPP__ + +namespace ams +{ + +int string_to_uccodepoints(const amsstring &str, amsarray &codepoints); +int string_to_uccodepoints(const amsstring *str, amsarray *codepoints); + +void uccodepoints_to_string(const amsarray &codepoints, amsstring &str); +void uccodepoints_to_string(const amsarray *codepoints, amsstring *str); + +void test_unicode_ascii_int_conv(); +void test_unicode_conv1(); + +void test_unicode_conv2(); + + +}; + +#endif + diff --git a/src/amsstring4/amsstring4_bintextencoding.cpp b/src/amsstring4/amsstring4_bintextencoding.cpp new file mode 100644 index 0000000..2340d5b --- /dev/null +++ b/src/amsstring4/amsstring4_bintextencoding.cpp @@ -0,0 +1,565 @@ +#include + +namespace ams +{ + +//PGP / GPG text armor, binary encoding scheme: +// + +//HTML embedded image file binary encoding scheme: +//example: +// Embedded Image +// ref: https://stackoverflow.com/questions/11474346/how-to-encode-images-within-html +// Embed other stuff! +// Data URIs can potentially store any type of data, not just images! Try these examples on for size: (X)HTML CSS Embedding Example +// +// (X)HTML Javascript Embedding Example +// + +//I think these are both base-64 encodings of a binary blob +//ref: https://security.stackexchange.com/questions/142043/how-are-pgp-messages-constructed + +//also widely used for email attachments + +//Base64: 3 bytes (24-bits) 11111111 22222222 33333333 +// converted to 4 base-64 digits +// 111111 112222 222233 333333 +// subtleties on termination of a string of bytes that doesn't divide by 3 + +//real reference: +// https://datatracker.ietf.org/doc/html/rfc4648#section-4 + + + // Table 1: The Base 64 Alphabet + + // Value Encoding Value Encoding Value Encoding Value Encoding + // 0 A 17 R 34 i 51 z + // 1 B 18 S 35 j 52 0 + // 2 C 19 T 36 k 53 1 + // 3 D 20 U 37 l 54 2 + // 4 E 21 V 38 m 55 3 + // 5 F 22 W 39 n 56 4 + // 6 G 23 X 40 o 57 5 + // 7 H 24 Y 41 p 58 6 + // 8 I 25 Z 42 q 59 7 + // 9 J 26 a 43 r 60 8 + // 10 K 27 b 44 s 61 9 + // 11 L 28 c 45 t 62 + + // 12 M 29 d 46 u 63 / + // 13 N 30 e 47 v + // 14 O 31 f 48 w (pad) = + // 15 P 32 g 49 x + // 16 Q 33 h 50 y + + +//ord is 0-63, 64 for '=' +ams_chartype base64_char(int8_t ord) +{ + ams_chartype ret; + if(ord==64) + { + ret = '='; + } + else if(ord>=0&&ord<26) + { + ret = (ams_chartype)(ord+65); + } + else if(ord>=26&&ord<52) + { + ret = (ams_chartype)((ord-26)+97); + } + else if(ord>=52&&ord<62) + { + ret = (ams_chartype)((ord-52)+48); + } + else if(ord==62) + ret = '+'; + else if(ord==63) + ret = '/'; + else + ret = '\0'; //NULL character is for an out of range ord + return ret; +} + +int8_t base64_ord(ams_chartype ch) +{ + uint8_t ret; + uint8_t ucval = (unsigned char) ch; + if(ucval>=65 && ucval<91) + { + ret = ucval-65; + } + else if(ucval>=97 && ucval<123) + { + ret = ucval-97+26; + } + else if(ucval>=48 && ucval<58) + { + ret = ucval-48+52; + } + else if(ch=='+') + { + ret = 62; + } + else if(ch=='/') + { + ret = 63; + } + else if(ch=='=') + { + ret = 64; + } + else + { + ret = -1; + } + + return ret; +} + +static void b64_encode_3byteblock(uint8_t *bytes, ams_chartype *chars) +{ + uint8_t o1,o2,o3,o4; + + o1 = ((bytes[0] & 0b11111100)>>2); + o2 = (((bytes[0] & 0b00000011)<<4) + ((bytes[1] & 0b11110000)>>4)); + o3 = (((bytes[1] & 0b00001111)<<2) + ((bytes[2] & 0b11000000)>>6)); + o4 = ((bytes[2] & 0b00111111)); + + chars[0] = base64_char(o1); + chars[1] = base64_char(o2); + chars[2] = base64_char(o3); + chars[3] = base64_char(o4); + + return; +} + +static void b64_encode_2byteblock(uint8_t *bytes, ams_chartype *chars) +{ + uint8_t o1,o2,o3; + + o1 = ((bytes[0] & 0b11111100)>>2); + o2 = (((bytes[0] & 0b00000011)<<4) + ((bytes[1] & 0b11110000)>>4)); + o3 = (((bytes[1] & 0b00001111)<<2)); + + chars[0] = base64_char(o1); + chars[1] = base64_char(o2); + chars[2] = base64_char(o3); + chars[3] = '='; + + return; +} + +static void b64_encode_1byteblock(uint8_t *bytes, ams_chartype *chars) +{ + uint8_t o1,o2; + + o1 = ((bytes[0] & 0b11111100)>>2); + o2 = (((bytes[0] & 0b00000011)<<4)); + + chars[0] = base64_char(o1); + chars[1] = base64_char(o2); + chars[2] = '='; + chars[3] = '='; + + return; +} + +static int decode_4charblock(ams_chartype *chars, uint8_t *bytes) +{ + int ret = 1; + + uint8_t o1,o2,o3,o4,b1,b2,b3; + int len; + + o1 = base64_ord(chars[0]); + o2 = base64_ord(chars[1]); + o3 = base64_ord(chars[2]); + o4 = base64_ord(chars[3]); + + len = 3; + if(chars[3]=='=') {len--; o4 = 0;} + if(chars[2]=='=') {len--; o3 = 0;} + if(chars[1]=='=') {len--; o2 = 0;} + + if(len>0) + { + //111111 222222 333333 444444 + //11111122 22223333 33444444 + + b1 = ((o1<<2)+((o2 & 0b00110000)>>4)); + b2 = (((o2 & 0b00001111)<<4) + ((o3 & 0b00111100)>>2)); + b3 = (((o3 & 0b00000011)<<6) + (o4 & 0b00111111)); + if(len>=1) bytes[0] = b1; + if(len>=2) bytes[1] = b2; + if(len>=3) bytes[2] = b3; + } + + return ret; +} + +void base64encode(ams::amsarray *bytes, amsstring *str) +{ + long I,J; + + //str->resize((bytes->length*4)/3+2); + if( bytes->length % 3 == 0) + { + str->resize((bytes->length/3)*4); + } + else + { + str->resize((bytes->length/3+1)*4); + } + + I = 0; J = 0; + while(Ilength) + { + if(bytes->length-I>=3) + { + //printf("debug3: %c%c%c\n",bytes->data[I],bytes->data[I+1],bytes->data[I+2]); + b64_encode_3byteblock(&(bytes->data[I]),&(str->cstring[J])); + I = I + 3; + J = J + 4; + } + else if(bytes->length-I==2) + { + //printf("debug2: %c%c\n",bytes->data[I],bytes->data[I+1]); + b64_encode_2byteblock(&(bytes->data[I]),&(str->cstring[J])); + I = I + 2; + J = J + 4; + } + else if(bytes->length-I==1) + { + //printf("debug1: %c\n",bytes->data[I]); + b64_encode_1byteblock(&(bytes->data[I]),&(str->cstring[J])); + I = I + 1; + J = J + 4; + } + else + { + break; + } + } + + //str->shrinktofit(); + str->cstring[str->length] = '\0'; + + return; +} + +static long __intl_localstrlen(amsstring *str) +{ + long ret = 0; + long I; + for(I=0;Ilength;I++) + { + if(str->cstring[I]=='\0') + { + ret = I; + break; + } + } + return ret; +} + + +//Only processes strings of length divisible by 4, with +//expected 0,1,2 padding chars at the end of the string, +//and no non-coding characters. +int base64decode_strict(amsstring *str, ams::amsarray *bytes) +{ + int ret = 1; + int fail = 0; + long len; + long I,J; + uint8_t v; + int bp; + + if(str->length == 0) + { + bytes->resize(0); + ret = 1; + return ret; + } + + if(str->length % 4 !=0) + { + ret = -1; //invalid length + bytes->resize(0); + return ret; + } + + //resize bytes to indicated size + + + len = (str->length/4)*3; + + if(str->cstring[str->length-1]=='=') len--; + if(str->cstring[str->length-2]=='=') len--; + if(str->cstring[str->length-3]=='=') + { + ret = -2; //unexpected number of padding chars + bytes->resize(0); + return ret; + } + + bytes->resize(len); + + fail = 0; + I = 0; J = 0; + //for(I=0;Ilength && fail==0;I++) + while(Ilength && fail==0) + { + for(bp=0;bp<4;bp++) + { + v = base64_ord(str->cstring[I+bp]); + //printf("debug: %d %d %c %d\n",I,I+bp,str->cstring[I+bp],v); + if(v<0 || (v>=64 && (I+bp)length-2) || v>=65) + { + //printf("dbg: fail!\n"); + fail = 1; + break; + } + } + decode_4charblock(&(str->cstring[I]),&(bytes->data[J])); + + // for(bp=0;bp<3;bp++) + // { + // printf("debug: %d %d %c\n",J+bp,bytes->data[J+bp],bytes->data[J+bp]); + // } + + I = I + 4; + J = J + 3; + } + if(fail==1) + { + ret = -3; //invalid char encountered + bytes->resize(0); + } + + //fail on any non-coding chars while parsing + + return ret; +} + +//decodes, ignoring (as in MIME spec) all characters that are not +//valid b64 alphabet chars, and all padding until the end of the string +int base64decode_liberal(amsstring *str, ams::amsarray *bytes) +{ + int ret = 1; + long I,J; + amsstring str2; + ams_chartype ch; + + int64_t v; + + str2.resize(str->length+4); + + //filter chars in str to remove all non-coding chars + J = 0; + for(I=0;Ilength;I++) + { + ch = str->cstring[I]; + if(ch=='\0') + break; + + v = base64_ord(ch); + if(v>=0 && v<64) + { + str2.cstring[J] = ch; + J = J + 1; + } + } + + if(J%4==0) + { + str2.resize(J); + str2.cstring[str2.length] = '\0'; + } + if(J%4==1) + { + ret = 0; //this isn't really valid + str2.cstring[J] = '='; J++; + str2.cstring[J] = '='; J++; + str2.cstring[J] = '='; J++; + str2.resize(J); + str2.cstring[str2.length] = '\0'; + } + if(J%4==2) + { + str2.cstring[J] = '='; J++; + str2.cstring[J] = '='; J++; + str2.resize(J); + str2.cstring[str2.length] = '\0'; + } + if(J%4==3) + { + str2.cstring[J] = '='; J++; + str2.resize(J); + str2.cstring[str2.length] = '\0'; + } + + str2.shrinktofit(); + + ret = base64decode_strict(&str2,bytes); + + return ret; +} + +static void _intl_convsb(amsstring *s, amsarray *b) +{ + long I; + b->resize(s->length); + for(I=0;Ilength;I++) + { + b->at(I) = (unsigned char) s->cstring[I]; + } + return; +} + +static void _intl_convbs(amsarray *b,amsstring *s) +{ + long I; + s->resize(b->length); + for(I=0;Ilength;I++) + { + s->cstring[I] = b->data[I]; + } + s->cstring[s->length] = '\0'; + return; +} + +void test_base64encode1() +{ + int I; + int8_t o1,o2; + ams_chartype c1,c2; + + for(I=-5;I<70;I++) + { + o1 = I; + c1 = base64_char(o1); + o2 = base64_ord(c1); + c2 = base64_char(o2); + + printf("%d %d %c %d %c\n",(int)I,(int)o1,c1,(int)o2,c2); + } + return; +} + +//segmentation faults in decode_liberal + +void test_base64encode() +{ + printf("Tests of base64 encoding/deconding.\n"); + + amsstring s1,s1e,s2; + amsarray b1,b2; + int ret = 0; + bool bstrict = 1; + + s1 = "light work."; + _intl_convsb(&s1,&b1); + base64encode(&b1,&s1e); + ret = base64decode(&s1e,&b2,bstrict); + _intl_convbs(&b2,&s2); + + // for(I=0;I bytes,bytes2; + amsstring str,str2; + + int passed = 0; + int failed = 0; + + for(I=0;I<100;I++) + { + printf("Test %d\n",(int)I); + bytes.resize(I); + for(J=0;J *bytes, bool bstrict=0) +{ + int ret = 0; + if(bstrict==1) + { + ret = base64decode_strict(str,bytes); + } + else + { + ret = base64decode_liberal(str,bytes); + } + return ret; +} + + +}; \ No newline at end of file diff --git a/src/amsstring4/amsstring4_class.cpp b/src/amsstring4/amsstring4_class.cpp new file mode 100644 index 0000000..22b553e --- /dev/null +++ b/src/amsstring4/amsstring4_class.cpp @@ -0,0 +1,1692 @@ +#include + +namespace ams +{ + + ams_chartype tolower(ams_chartype c) + { + unsigned char c2 = (unsigned char) c; + ams_chartype ret; + if(c2>=65&&c2<=90) + { + ret = (ams_chartype) (c2+(97-65)); + } + else + { + ret = c; + } + return ret; + } + + ams_chartype toupper(ams_chartype c) + { + unsigned char c2 = (unsigned char) c; + ams_chartype ret; + if(c2>=97&&c2<=122) + { + ret = (ams_chartype) (c2-(97-65)); + } + else + { + ret = c; + } + return ret; + } + + static int localstrlen(const ams_chartype *c) + { + int I; + if(c!=NULL) + { + I = 0; + while(c[I]!='\0') + { + I++; + } + return I; + //return strlen((const char*) c); + } + + else + return 0; + } + + bool amsstrneq(const ams_chartype *s1, const ams_chartype *s2, const bool casesens=1) + { + bool ret = 0; + int N1 = localstrlen(s1); + int N2 = localstrlen(s2); + bool b1,b2; + + if(N1==N2) + { + int I; + bool q = 1; + for(I=0;Iblank = (ams_chartype) '\0'; + str->cstring = NULL; + str->cstring = new(std::nothrow) ams_chartype[1]; + str->cstring[0] = (ams_chartype) '\0'; + str->length = 0; + return; + } + + amsstring::amsstring() + { + //amsstring_init(this); + + blank = (ams_chartype) '\0'; + cstring = NULL; + cstring = new(std::nothrow) ams_chartype[1]; + cstring[0] = (ams_chartype) '\0'; + length = 0; + + return; + } + + amsstring::~amsstring() + { + if(cstring!=NULL) + { + delete[] cstring; + cstring = NULL; + } + length = 0; + blank = '\0'; + + return; + } + + int amsstring::size() const + { + return length; + } + + //Rewrite amsstring::resize() - valgrind is still complaining! + int amsstring::resize(const int newlen) + { + int ret = 0; + int I = 0; + ams_chartype *newbuff = NULL; + + if(newlen == length) + { + //sizes are the same, do nothing + ret = 1; + return ret; + } + + if(newlen<=0) //if new length <0 + { + newbuff = new(std::nothrow) ams_chartype[1]; + if(newbuff==NULL) + { + ret = -1; + return ret; + } + newbuff[0] = '\0'; + + if(cstring!=NULL) {delete[] cstring; cstring = NULL;} + cstring = newbuff; + length = 0; + ret = 1; + return ret; + } + + newbuff = new(std::nothrow) ams_chartype[newlen+1]; + if(newbuff==NULL) + { + ret = -1; + return ret; + } + + //Copy old data + for(I=0;I=0) + // { + // newbuf = new(std::nothrow) ams_chartype[newlen+1]; + + // if(newbuf==NULL) + // { + // ret = -1; //new buffer would not allocate + // } + // else + // { + // for(I=0;I=0) + // { + // ret = this->resize(0); + // } + + // //printf("DEBUG: ret = %d\n",ret); + // return ret; + // } + + amsstring::amsstring(const amsstring &other) + { + //amsstring_init(this); + blank = (ams_chartype) '\0'; + cstring = NULL; + cstring = new(std::nothrow) ams_chartype[1]; + cstring[0] = (ams_chartype) '\0'; + length = 0; + + + if(this!=&other) + { + *this=other; + } + return; + } + + amsstring::amsstring(amsstring &other) + { + //amsstring_init(this); + + blank = (ams_chartype) '\0'; + cstring = NULL; + cstring = new(std::nothrow) ams_chartype[1]; + cstring[0] = (ams_chartype) '\0'; + length = 0; + + if(this!=&other) + { + *this=other; + } + return; + } + + const amsstring& amsstring::operator=(const amsstring &other) + { + if(this!=&other) + { + this->resize(other.length); + amsstrcpy_s(cstring,length+1,other.cstring); + cstring[length] = (ams_chartype) '\0'; + shrinktofit(); //shrinks if the other cstring was corrupted with internal null terminators + + // N = strlen(cstring); //if string is actually shorter (contains null terminating character elsewhere than at the end) + // //then resize to string's size + // if(Nresize(N); + // } + } + return *this; + } + + amsstring& amsstring::operator=(amsstring &other) + { + if(this!=&other) + { + this->resize(other.length); + amsstrcpy_s(cstring,length+1,other.cstring); + cstring[length] = (ams_chartype) '\0'; + shrinktofit(); //shrinks if the other cstring was corrupted with internal null terminators + + // N = strlen(cstring); //if string is actually shorter (contains null terminating character elsewhere than at the end) + // //then resize to string's size + // if(Nresize(N); + // } + } + return *this; + } + + amsstring::amsstring(ams_chartype *other) + { + //amsstring_init(this); + blank = (ams_chartype) '\0'; + cstring = NULL; + cstring = new(std::nothrow) ams_chartype[1]; + cstring[0] = (ams_chartype) '\0'; + length = 0; + + *this = other; + + return; + } + + amsstring::amsstring(const ams_chartype *other) + { + //amsstring_init(this); + blank = (ams_chartype) '\0'; + cstring = NULL; + cstring = new(std::nothrow) ams_chartype[1]; + cstring[0] = (ams_chartype) '\0'; + length = 0; + + *this = other; + + return; + } + + const amsstring& amsstring::operator=(const ams_chartype *other) + { + //amsstring_init(this); <-- init only on a constructor, otherwise memory leak + + int nl,q; + nl = localstrlen(other); + if(nl>=0) + { + q = this->resize(nl); + if(q>=0) + { + //printf("DEBUG: q=%d, length=%d",q,length); + amsstrcpy_s(cstring,length+1,other); + cstring[length] = (ams_chartype) '\0'; + } + else + { + this->resize(0); + } + } + else + { + //already of zero size + } + + return *this; + } + + amsstring& amsstring::operator=(ams_chartype *other) + { + //amsstring_init(this); <-- init only on a constructor, otherwise memory leak + + int nl,q; + nl = localstrlen(other); + if(nl>=0) + { + q = this->resize(nl); + if(q>=0) + { + //printf("DEBUG: q=%d, length=%d",q,length); + amsstrcpy_s(cstring,length+1,other); + cstring[length] = (ams_chartype) '\0'; + } + else + { + this->resize(0); + } + } + else + { + //already of zero size + } + + return *this; + } + + // const amsstring& amsstring::operator=(const ams_chartype *other) const + // { + // amsstring_init(this); + + // int nl,q; + // nl = strlen(other); + // if(nl>=0) + // { + // q = this->resize(nl); + // if(q>=0) + // { + // printf("DEBUG: q=%d, length=%d",q,length); + // amsstrcpy_s(cstring,length+1,other); + // cstring[length] = (ams_chartype) '\0'; + // } + // else + // { + // this->resize(0); + // } + // } + // else + // { + // //already of zero size + // } + + // return *this; + // } + + ams_chartype& amsstring::operator[](const int ind) + { + // if(ind<0 || ind>length-1) + // { + // blank = (ams_chartype) '\0'; + // return blank; + // } + // else + // { + // return cstring[ind]; + // } + + if(ind<0 || ind>=(length+1)) + { + blank = (ams_chartype) '\0'; + return blank; + } + else + { + return cstring[ind]; //cstring buffer is of length length+1 + } + + } + + const ams_chartype& amsstring::operator[](const int ind) const + { + if(ind<0 || ind>=(length+1)) + { + //blank = (ams_chartype) '\0'; + return blank; + } + else + { + return cstring[ind]; //cstring buffer is of length length+1 + } + } + + ams_chartype& amsstring::at(const int ind) + { + if(ind<0 || ind>=length+1) + { + blank = (ams_chartype) '\0'; + return blank; + } + else + { + return cstring[ind]; + } + } + + const ams_chartype& amsstring::at(const int ind) const + { + if(ind<0 || ind>=length+1) + { + //blank = (ams_chartype) '\0'; + return blank; + } + else + { + return cstring[ind]; + } + } + + void amsstring::clear() + { + this->resize(0); + return; + } + + void amsstring::setall(const ams_chartype val, const int newlen) + { + int I; + this->resize(newlen); + for(I=0;Iresize(N); + return; + } + + bool amsstring::operator==(const amsstring &other) const + { + bool ret = 0; + if(this!=&other) + { + ret = amsstrneq(this->cstring,other.cstring); + } + else + { + ret = 1; + } + return ret; + } + + bool amsstring::operator!=(const amsstring &other) const + { + return !((*this)==other); + } + + bool amsstring::operator==(const char *other) const + { + bool ret = 0; + ret = amsstrneq(this->cstring,other); + return ret; + } + + bool amsstring::operator!=(const char *other) const + { + return !((*this)==other); + } + + static int _local_charcompare(const ams_chartype c1, const ams_chartype c2) + { + int ret = 0; + //-1 - c1 < c2 + //0 - c1 == c2 + //1 c1 > c2 + unsigned char cc1 = (unsigned char) c1; + unsigned char cc2 = (unsigned char) c2; + if(cc1cc2) ret = 1; + return ret; + } + + bool amsstring::operator<(const amsstring &other) const + { + bool ret = 0; + bool gt = 0; + int I; + for(I=0;Ilength&&Icstring[I],other.cstring[I]) == -1) + { + ret = 1; + break; + } + if(_local_charcompare(this->cstring[I],other.cstring[I]) == 1) + { + ret = 0; + gt = 1; + break; + } + } + if(ret==0&>==0) + { + if(this->length>other.length) + { + ret = 0; + } + else if(this->length(const amsstring &other) const + { + bool ret = 0; + bool lt = 0; + int I; + for(I=0;Ilength&&Icstring[I],other.cstring[I]) == -1) + { + ret = 0; + lt = 1; + break; + } + if(_local_charcompare(this->cstring[I],other.cstring[I]) == 1) + { + ret = 1; + break; + } + } + if(ret==0&<==0) + { + if(this->length>other.length) + { + ret = 1; + } + else if(this->length(const ams_chartype *other) const + { + amsstring q = other; + return (*this)>q; + } + + //inserts a string into the current string at a specified location index + //ind: [0,length] where + // 0 inserts the string before the first element + // length inserts the string after the last element [length-1] + // all other locations fail + void amsstring::insert(const int ind, const amsstring other) + { + int I,l1,l2; + l1 = this->length; + l2 = other.length; + + I = 0; + if(cstring==NULL) l1 = 0; + if(other.cstring==NULL) l2 = 0; + + ams_chartype *newbuf=NULL; + + if(ind>=0 && ind<=this->length) + { + newbuf = new(std::nothrow) ams_chartype[l1+l2+1]; + if(newbuf==NULL) + { + //something went wrong with the resize + return; + } + + for(I=0;Ishrinktofit(); + } + + return; + } + + void amsstring::insert(const int ind, const ams_chartype *other) + { + amsstring q = other; + insert(ind,q); + return; + } + + void amsstring::remove(const int ind) + { + if(ind>=0 && ind(0,ind1); + I2 = ams::min(length,ind2); + N = length-(I2-I1); + ams_chartype *newbuf = NULL; + if(N>0) + { + newbuf = new ams_chartype[N+1]; + for(I=0;I(0,ind1); + I2 = ams::min(ind2,length); + N = (I2-I1); + if(N>0) + { + q.resize(N); + for(I=I1;Iresize(0); + } + } + else + { + I1 = ams::max(0,ind1); + I2 = ams::min(ind2,length); + N = (I2-I1); + if(N>0) + { + sout->resize(N); + for(I=I1;Icstring[I-I1] = cstring[I]; + } + sout->cstring[N] = '\0'; + } + else + { + sout->resize(0); + } + } + sout->cstring[sout->length] = '\0'; + + return; + } + + void amsstring::append(const amsstring &other) + { + this->insert(this->length,other); + return; + } + + void amsstring::append(const ams_chartype *other) + { + this->insert(this->length,other); + return; + } + + void amsstring::append(const ams_chartype other) + { + amsstring q; + q.resize(1); + q.cstring[0] = other; + this->insert(this->length,q); + return; + } + + int amsstring::find(const ams_chartype c, const int indstart, const bool casesens) const + { + int I; + int ret = -1; + bool b1,b2; + for(I=indstart;I=N) + { + ret = I-N+1; + qf = 1; + break; + } + + if(cs) + { + I = I + 1; + } + } + + return ret; + } + + void amsstring::tolower() + { + std::locale loc; + + int I; + for(I=0;Icstring,"%lf",&d); + if(q==0) + { + ret = 0; + } + else + { + ret = 1; + } + } + catch(int e) + { + ret = 0; + } + return ret; + } + + double amsstring::strtonum() + { + return amsstrtonum(this->cstring); + } + + + void splitlines(amsstring *s, std::vector *lns) + { + int I,I1,I2; + amsstring q; + int mode; + ams_chartype c; + + lns->resize(0); + + I1 = 0; + I = 0; + mode = 0; + while(Isize()) + { + c = s->at(I); + if(mode==0 && c==ams_char_cr) + { + mode=1; + I2 = I; + } + else if(mode==0 && c==ams_char_lf) + { + mode = 0; + I2 = I; + s->substring(I1,I2,&q); + lns->push_back(q); + I1 = I+1; + } + else if(mode==1 && c==ams_char_lf) + { + mode = 0; + s->substring(I1,I2,&q); + lns->push_back(q); + I1 = I+1; + } + else if(mode==1) + { + mode = 0; + } + + I = I + 1; + } + s->substring(I1,s->length,&q); + lns->push_back(q); + + return; + } + + void splitlines(amsstring *s, ams::amsarray *lns) + { + int I,I1,I2; + amsstring q; + int mode; + ams_chartype c; + + lns->resize(0); + + I1 = 0; + I = 0; + mode = 0; + while(Isize()) + { + c = s->at(I); + if(mode==0 && c==ams_char_cr) + { + mode=1; + I2 = I; + } + else if(mode==0 && c==ams_char_lf) + { + mode = 0; + I2 = I; + s->substring(I1,I2,&q); + lns->push_back(q); + I1 = I+1; + } + else if(mode==1 && c==ams_char_lf) + { + mode = 0; + s->substring(I1,I2,&q); + lns->push_back(q); + I1 = I+1; + } + else if(mode==1) + { + mode = 0; + } + + I = I + 1; + } + s->substring(I1,s->length,&q); + lns->push_back(q); + + return; + } + + /* + void splitlines(amsstring *s, std::vector *lns) + { + //windows uses \r\n, linux uses \n as a line delimiter + int I; + amsstring q; + lns->resize(0); + int ind1 = 0; + int ind2 = 0; + int mode = 0; + int cs; + I = 0; + ams_chartype c; + + + while(Ilength) + { + c = s->cstring[I]; + cs = 0; //has the character been 'consumed' by the state machine? + if(c=='\n'&&mode==0&&cs==0) + { + + cs = 1; + ind2 = I-1; + ind2 = ams::max(0,ind2); + s->substring(ind1,ind2+1,&q); + lns->push_back(q); + ind1 = I+1; + ind2 = I+1; + ind1 = ams::min(s->length,ind1); + ind2 = ams::min(s->length,ind2); + } + if(c=='\r'&&mode==0&&cs==0) + { + cs = 1; + mode = 1; + } + if(c=='\n'&&mode==1&&cs==0) + { + cs = 1; + ind2 = I-2; + ind2 = ams::max(0,ind2); + s->substring(ind1,ind2+1,&q); + lns->push_back(q); + ind1 = I+1; + ind2 = I+1; + ind1 = ams::min(s->length,ind1); + ind2 = ams::min(s->length,ind2); + mode = 0; + } + I = I + 1; + } + if(ind1length) + { + s->substring(ind1,s->length+1,&q); + lns->push_back(q); + } + + return; + } + */ + + void split(amsstring *s, const ams_chartype delimitchar, std::vector *lns) + { + amsstring q; + lns->resize(0); + + + int I = 0; + int ind1; + int ind2; + //int cs; + ind1 = 0; + ams_chartype c; + while(Ilength) + { + c = s->cstring[I]; + //cs = 0; + if(c==delimitchar) + { + ind2 = I; + ind2 = max(0,ind2); + s->substring(ind1,ind2,&q); + lns->push_back(q); + ind1 = I+1; + ind2 = I+1; + ind1 = min(s->length,ind1); + ind2 = min(s->length,ind2); + } + + I = I + 1; + } + if(ind1length&&s->cstring[ind1]!=delimitchar) + { + s->substring(ind1,s->length,&q); + lns->push_back(q); + } + + return; + } + + void split(amsstring *s, const ams_chartype delimitchar, ams::amsarray *lns) + { + amsstring q; + lns->resize(0); + + + int I = 0; + int ind1; + int ind2; + //int cs; + ind1 = 0; + ams_chartype c; + while(Ilength) + { + c = s->cstring[I]; + //cs = 0; + if(c==delimitchar) + { + ind2 = I; + ind2 = max(0,ind2); + s->substring(ind1,ind2,&q); + lns->push_back(q); + ind1 = I+1; + ind2 = I+1; + ind1 = min(s->length,ind1); + ind2 = min(s->length,ind2); + } + + I = I + 1; + } + if(ind1length&&s->cstring[ind1]!=delimitchar) + { + s->substring(ind1,s->length,&q); + lns->push_back(q); + } + + return; + } + + void split(amsstring *s, const ams_chartype *delimitstr, std::vector *lns) + { + amsstring q; + int I; + int ind1,ind2; + int cs; + int cnt; + ams_chartype c; + int N = localstrlen(delimitstr); + + if(lns!=NULL && delimitstr!=NULL) + { + if(N>0) + { + lns->resize(0); + + ind1 = 0; + I = 0; + cs = 0; + cnt = 0; + while(Isize()) + { + c = s->at(I); + if(cs==0 && c==delimitstr[cnt]) + { + cs=1; + ind2 = I; + cnt = cnt+1; + } + else if(cs==1 && c==delimitstr[cnt]) + { + cs=1; + cnt = cnt+1; + } + else if(cs==1 && c!=delimitstr[cnt]) + { + cs = 0; + ind2 = ind1; + cnt = 0; + I = I - 1; //step back so you can evaluate this char again + } + + if(cnt>=N) + { + //cut string from (ind1,ind2) + cs = 0; + + ind1 = min(ind1,s->size()); + ind1 = max(ind1,0); + ind2 = min(ind2,s->size()); + ind2 = max(ind2,0); + ind2 = max(ind2,ind1); + + s->substring(ind1,ind2,&q); + lns->push_back(q); + + ind1 = I + 1; + ind2 = I + 1; + cnt = 0; + } + I = I + 1; + } + + if(ind1size()) + { + s->substring(ind1,s->size(),&q); + lns->push_back(q); + } + } //N>0 + else + { + lns->push_back(*s); + } + } //lns!=NULL + + return; + } + + void split(amsstring *s, const ams_chartype *delimitstr, ams::amsarray *lns) + { + amsstring q; + int I; + int ind1,ind2; + int cs; + int cnt; + ams_chartype c; + int N = localstrlen(delimitstr); + + if(lns!=NULL && delimitstr!=NULL) + { + if(N>0) + { + lns->resize(0); + + ind1 = 0; + I = 0; + cs = 0; + cnt = 0; + while(Isize()) + { + c = s->at(I); + if(cs==0 && c==delimitstr[cnt]) + { + cs=1; + ind2 = I; + cnt = cnt+1; + } + else if(cs==1 && c==delimitstr[cnt]) + { + cs=1; + cnt = cnt+1; + } + else if(cs==1 && c!=delimitstr[cnt]) + { + cs = 0; + ind2 = ind1; + cnt = 0; + I = I - 1; //step back so you can evaluate this char again + } + + if(cnt>=N) + { + //cut string from (ind1,ind2) + cs = 0; + + ind1 = min(ind1,s->size()); + ind1 = max(ind1,0); + ind2 = min(ind2,s->size()); + ind2 = max(ind2,0); + ind2 = max(ind2,ind1); + + s->substring(ind1,ind2,&q); + lns->push_back(q); + + ind1 = I + 1; + ind2 = I + 1; + cnt = 0; + } + I = I + 1; + } + + if(ind1size()) + { + s->substring(ind1,s->size(),&q); + lns->push_back(q); + } + } //N>0 + else + { + lns->push_back(*s); + } + } //lns!=NULL + + return; + } + + void split(amsstring *s, amsstring *delimitstr, std::vector *lns) + { + split(s,delimitstr->cstring,lns); + return; + } + + void split(amsstring *s, amsstring *delimitstr, ams::amsarray *lns) + { + split(s,delimitstr->cstring,lns); + return; + } + + + void splitwhitespace(amsstring *s, std::vector *lns) + { + int I; + int mode; + ams_chartype c; + int ind1 = 0; + int ind2 = 0; + I = 0; + mode = 0; + amsstring q; + bool qf = 0; + + if(s!=NULL && lns!=NULL) + { + lns->resize(0); + while(qf==0) + { + c = s->cstring[I]; + if(!(isspace(c)||c==' '||c=='\t')&&mode==0) + { + mode = 1; + ind1 = I; + ind1 = ams::max(0,ind1); + } + if((isspace(c)||c==' '||c=='\t'||c=='\0')&&mode==1) + { + mode = 0; + ind2 = I; + ind2 = ams::min(ind2,s->length); + s->substring(ind1,ind2,&q); + //printf("debug: %d, %s\n",I,q.cstring); + lns->push_back(q); + } + if(I>=s->length) + { + qf = 1; + } + + I = I + 1; + } + } //test null pointers + return; + } + + void splitwhitespace(amsstring *s, ams::amsarray *lns) + { + int I; + int mode; + ams_chartype c; + int ind1 = 0; + int ind2 = 0; + I = 0; + mode = 0; + amsstring q; + bool qf = 0; + + if(s!=NULL && lns!=NULL) + { + lns->resize(0); + while(qf==0) + { + c = s->cstring[I]; + if(!(isspace(c)||c==' '||c=='\t')&&mode==0) + { + mode = 1; + ind1 = I; + ind1 = ams::max(0,ind1); + } + if((isspace(c)||c==' '||c=='\t'||c=='\0')&&mode==1) + { + mode = 0; + ind2 = I; + ind2 = ams::min(ind2,s->length); + s->substring(ind1,ind2,&q); + //printf("debug: %d, %s\n",I,q.cstring); + lns->push_back(q); + } + if(I>=s->length) + { + qf = 1; + } + + I = I + 1; + } + } //test null pointers + return; + } + + void stripwhitespace(amsstring *s) + { + int I; + amsstring q; + int ind1; + int ind2; + ams_chartype c; + + if(s!=NULL) + { + ind1 = 0; + ind2 = 0; + for(I=0;Ilength;I++) + { + c = s->cstring[I]; + if(!(isspace(c)||c==' '||c=='\t')) + { + ind1 = I; + break; + } + } + for(I=s->length-1;I>=0;I--) + { + c = s->cstring[I]; + if(!(isspace(c)||c==' '||c=='\t')) + { + ind2 = I+1; + break; + } + } + + ind1 = min(ind1,s->size()); + ind1 = max(ind1,0); + ind2 = min(ind2,s->size()); + ind2 = max(ind2,0); + ind2 = max(ind1,ind2); + + q = *s; //q.copy(s); + q.substring(ind1,ind2,s); + } //null guard + return; + } + + void stripallwhitespace(amsstring *s) + { + amsstring q; + q.resize(s->length); + //int count; + int I; + int J; + J = 0; + ams_chartype c; + for(I=0;Ilength;I++) + { + c = s->cstring[I]; + if(!(isspace(c)||c==' '||c=='\t'||c=='\n'||c=='\r'||c=='\f'||c=='\v'||(int)c==9||(int)c==10||(int)c==11||(int)c==12)) + { + q.cstring[J] = s->cstring[I]; + J = J + 1; + } + } + q.resize(J); + q.cstring[q.length]='\0'; + //s->copy(&q); + *s = q; + return; + } + + ///File IO + + void freadline(FILE *fp,amsstring *s) + { + const int BUFFSZ = 8000; + char buff[BUFFSZ]; + int N; + if(fp!=NULL && s!=NULL) + { + if(!feof(fp)) + { + fgets(buff,BUFFSZ,fp); + N = ams::localstrlen(buff); + if((N-1)>=0&&(buff[N-1]=='\n')) + { + buff[N-1] = '\0'; + N = N - 1; + } + if((N-1)>=0&&(buff[N-1]=='\r')) + { + buff[N-1] = '\0'; + N = N-1; + } + N = ams::localstrlen(buff); + *s = buff; //s->copy(buff); + } + else + { + s->resize(0); + } + }//null guards + return; + } + + void freadlines(FILE *fp, std::vector *lines) + { + amsstring ln; + //note - this does not resize the lines to zero, just adds to them + if(fp!=NULL && lines!=NULL) + { + while(!feof(fp)) + { + freadline(fp,&ln); + lines->push_back(ln); + } + } + return; + } + + void fwritelines(FILE *fp, amsstring *s) + { + if(fp!=NULL && s!=NULL) + { + fputs(s->cstring,fp); + } + return; + } + + void fwritelines(FILE *fp, std::vector *lines) + { + int I; + if(fp!=NULL && lines!=NULL) + { + for(I=0;Isize();I++) + { + fputs(lines->at(I).cstring,fp); + if(Isize()-1) fputs("\n",fp); + } + } + return; + } + + void freadtxtfile(FILE *fp, amsstring *s) + { + amsstring q; + if(fp!=NULL&&s!=NULL) + { + while(!feof(fp)) + { + freadline(fp,&q); + if(!feof(fp)) + { + q.append("\n"); + s->append(q); + } + } + } + return; + } + + amsstring amsstring::operator+(const amsstring &other) + { + amsstring ret; + amsstring q1 = *this; + amsstring q2 = other; + ret = ""; + ret.append(q1); + ret.append(q2); + return ret; + } + + const amsstring amsstring::operator+(const amsstring &other) const + { + amsstring ret; + amsstring q1 = *this; + amsstring q2 = other; + ret = ""; + ret.append(q1); + ret.append(q2); + return ret; + } + + amsstring amsstring::operator+(const ams_chartype *other) + { + amsstring ret; + amsstring q1 = *this; + ret = ""; + ret.append(q1); + ret.append(other); + return ret; + } + + const amsstring amsstring::operator+(const ams_chartype *other) const + { + amsstring ret; + amsstring q1 = *this; + ret = ""; + ret.append(q1); + ret.append(other); + return ret; + } + + amsstring amsstring::operator+(const ams_chartype other) + { + amsstring ret; + amsstring q1 = *this; + ret = ""; + ret.append(q1); + ret.append(other); + return ret; + } + + const amsstring amsstring::operator+(const ams_chartype other) const + { + amsstring ret; + amsstring q1 = *this; + ret = ""; + ret.append(q1); + ret.append(other); + return ret; + } + + +}; \ No newline at end of file diff --git a/src/amsstring4/amsstring4_portability.cpp b/src/amsstring4/amsstring4_portability.cpp new file mode 100644 index 0000000..aa00a94 --- /dev/null +++ b/src/amsstring4/amsstring4_portability.cpp @@ -0,0 +1,177 @@ +#include + +namespace ams +{ + +//snprintf, vsnprintf should now be part of the C++ standard library +//as of C++11, so I don't think I need quite as elaborate a compatibility +//shim as in the previous library. +//It *should* compile with MinGW and Visual Studio. + + +//src must be a NULL terminated string, or have more indices than the size of the destination buffer +//I'm seeing platform specific memory leaks in the strncpy and strcpy_s implementations in valgrind +//This is a dirt simple function, I shouldn't *need* to depend on a platform specific implementation, +//... so, writing my own. +// +//This function copies the string src to dest. +//It stops when either size-1 characters have been copied to +//dest, or a null terminator has been encountered in src. +// +//The return value is the number of characters copied, excluding the null terminator +//or an error code. +// +//All additional positions in dest are padded with null terminators. Size is intended to be the size +//of the dest buffer. +int amsstrcpy_s(char *dest, int size, const char *src) +{ + int ret = 0; + int I=0; + char c='\0'; + + if(dest==NULL) + { + ret = -2; + return ret; + } + + if(src==NULL) + { + ret = -1; + return ret; + } + + for(I=0;I0) +// { +// dest[size-1] = '\0'; +// } +// #elif defined(__MINGW32__) || defined(__MINGW64__) || defined(_WIN32) +// //use strcpy_s +// //ret = (int)strcpy_s(dest,size,src); +// strcpy_s(dest,size,src); +// ret = 0; +// if(size>0) +// { +// dest[size-1] = '\0'; +// } +// #else +// #pragma message("amsstrcpy_s: Unsupported architecture - neither linux nor mingw64 nor msvc") +// #endif +// } +// else +// { +// if(size>0) +// { +// dest[0] = '\0'; +// ret = -2; //src was NULL +// } +// } +// } +// else +// { +// ret = -1; //dest was a null pointer +// } + +// return ret; +// } + + +//sprintf_s +//snprintf +// +int amssprintf_s(char *s, int n, const char *format, ...) +{ + int ret = 0; + + va_list args; + va_start(args, format); + //exampleV(b, args); + //va_arg(val,datatype) + if(s!=NULL) + { + #if defined(LINUX) || defined(linux) || defined(__linux__) || defined(__GNUC__) + //use snprintf + ret = (int)vsnprintf(s,n,format,args); + s[n-1] = '\0'; + + #elif defined(__MINGW32__) || defined(__MINGW64__) || defined(_WIN32) + //use sprintf_s + ret = (int)vsprintf_s(s,n,format,args); + #else + #pragma message("amssprintf_s: Unsupported architecture - neither linux nor mingw64 nor msvc") + #endif + } + + va_end(args); + return ret; +} + +//Using the C library's sscanf function is more robust +//than atod or atof. It returns valid numbers for infs and nans +//Returns nan for any uninterpretable string +double amsstrtonum(const char *str) +{ + int q; + double ret = std::numeric_limits::quiet_NaN(); + try + { + //sscanf(s.cstring,"%lf",&ret); + //stod(const std::string& str, std::size_t* pos) + //calls std::strtod + //strtod(const char *, &ptr) + //wcstrtod + //ret = atof(str); //old c-style parser + q = sscanf(str,"%lf",&ret); + if(q==0) + { + ret = std::numeric_limits::quiet_NaN(); + } + } + catch(int e) + { + ret = std::numeric_limits::quiet_NaN(); + } + return ret; +} + + + +}; \ No newline at end of file diff --git a/src/amsstring4/amsstring4_tests1.cpp b/src/amsstring4/amsstring4_tests1.cpp new file mode 100644 index 0000000..2d78542 --- /dev/null +++ b/src/amsstring4/amsstring4_tests1.cpp @@ -0,0 +1,475 @@ +#include + +namespace ams +{ + + void amsstring3_basic_string_test1() + { + char q1,c; + unsigned char q2; + uint8_t q3; + int I; + + printf("Basic string tests1.\n"); + for(I=-127;I<256;I++) + { + c = (char)I; + q2 = (unsigned char) I; + //printf("I=%d %d %c %02x %02x %02x\n",I,(int)c,c,c,(unsigned char)c,I); + printf("I=%d, %c, %02x\n",I,q2,q2); + } + + q2 = (unsigned char) '\r'; + printf("\nLF: %c After LF %c After LF2 \n",q2,q2); + } + + void amsstring3_sscanf_test1() + { + char buf[500]; + double d; + int q; + + // //vsnprintf(buf,500," -123.456E10 "); + // snprintf(buf,500," -123.456E10 "); + // //sprintf_s(buf,500," -123.456E10 "); + // q=sscanf(buf,"%lf",&d); + // printf("Buffer %s reads as %1.4g, q=%d\n",buf,d,q); + + // snprintf(buf,500," -inf "); + // //sprintf_s(buf,500," -123.456E10 "); + // q=sscanf(buf,"%lf",&d); + // printf("Buffer %s reads as %1.4g, q=%d\n",buf,d,q); + + // snprintf(buf,500,"3"); + // //sprintf_s(buf,500," -123.456E10 "); + // q=sscanf(buf,"%lf",&d); + // printf("Buffer %s reads as %1.4g, q=%d\n",buf,d,q); + + // snprintf(buf,500," #.QUAN0 "); + // //sprintf_s(buf,500," -123.456E10 "); + // q=sscanf(buf,"%lf",&d); + // printf("Buffer %s reads as %1.4g, q=%d\n",buf,d,q); + + // snprintf(buf,500,"nan"); + // //sprintf_s(buf,500," -123.456E10 "); + // q=sscanf(buf,"%lf",&d); + // printf("Buffer %s reads as %1.4g, q=%d\n",buf,d,q); + + amssprintf_s(buf,500,"-3"); + d = amsstrtonum(buf); + printf("String %s reads as %1.4g\n",buf,d); + + amssprintf_s(buf,500," -3 "); + d = amsstrtonum(buf); + printf("String %s reads as %1.4g\n",buf,d); + + amssprintf_s(buf,500,"\t\t-3\t\n "); + d = amsstrtonum(buf); + printf("String %s reads as %1.4g\n",buf,d); + + amssprintf_s(buf,500," +3E+1 "); + d = amsstrtonum(buf); + printf("String %s reads as %1.4g\n",buf,d); + + amssprintf_s(buf,500,"2,3,4"); + d = amsstrtonum(buf); + printf("String %s reads as %1.4g\n",buf,d); + + amssprintf_s(buf,500,"inf"); + d = amsstrtonum(buf); + printf("String %s reads as %1.4g\n",buf,d); + + amssprintf_s(buf,500,"-inf"); + d = amsstrtonum(buf); + printf("String %s reads as %1.4g\n",buf,d); + + amssprintf_s(buf,500,"nan"); + d = amsstrtonum(buf); + printf("String %s reads as %1.4g\n",buf,d); + + amssprintf_s(buf,500,"1.0*4E3"); + d = amsstrtonum(buf); + printf("String %s reads as %1.4g\n",buf,d); + + amssprintf_s(buf,2,"2,3,4"); + d = amsstrtonum(buf); + printf("String %s reads as %1.4g\n",buf,d); + + amssprintf_s(buf,2,NULL); + d = amsstrtonum(buf); + printf("String %s reads as %1.4g\n",buf,d); + + amssprintf_s(NULL,2,"100"); + d = amsstrtonum(buf); + printf("String %s reads as %1.4g\n",buf,d); + } + + void amsstring3_basic_string_test2() + { + amsstring s1,s2; + //const amsstring s3; //don't do this - just accept that strings must be mutable + + s1="Hello world"; + s2 = s1; + printf("%d %c\n",(ams_chartype) '\0', (ams_chartype) '\0'); + printf("s1: '%s', s2: '%s'\n",s1.cstring,s2.cstring); + int I; + for(I=-5;Is2:'%s'?:%d\n",s1.cstring,s2.cstring,s1>s2); + s1 = "hello"; s2 = "Hello"; + printf("s1:'%s's2:'%s'?:%d\n",s1.cstring,s2.cstring,s1>s2); + + //s3 = "Hello constant world."; + //printf("s3= '%s'\n",s3.cstring); + + } + + void amsstring3_memoryleakcheck1() + { + amsstring q1,q2,q3; + int I; + + q1.sprintf(1000,"%1.100g,",ams::pi); + printf("q1='%s'\n",q1.cstring); + printf("q1.size()=%d\n",q1.size()); + q2 = q1; + for(I=0;I<100;I++) + { + q1.substring(0,q1.length-1,&q1); + printf("q1 = substr; q1='%s'\n",q1.cstring); + } + + q1 = q2; + q1.resize(10000000); + for(I=0;I<20;I++) + { + printf("resize test %d\n",(int)I); + q2 = q1; + q2.resize(10000000); + q3 = q2; + q3.resize(10000000); + q1 = q3; + q1.resize(10000000); + } + return; + } + + void amsstring3_memoryleakcheck2() + { + int I; + amsstring q1; + + for(I=0;I<100;I++) + { + q1.sprintf(4,"%1.100g",ams::pi); + } + printf("q1=%s\n",q1.cstring); + } + + void amsstring3_stringtests2() + { + amsstring q1,q2; + int I; + amsarray qarr; + + q1.insert(0,"Hello world"); + printf("q1='%s'\n",q1.cstring); + + for(I=-2;I<15;I++) + { + q2 = q1; + q2.insert(I,""); + printf("q2=q1;q2.insert(%d,') = '%s' size=%d\n",I,q2.cstring,q2.size()); + } + + q1 = "Hello world."; + for(I=-5;I<15;I++) + { + q2 = q1; + q2.remove(I); + printf("q2.remove(%d) = '%s'\n",I,q2.cstring); + } + + for(I=-5;I<15;I++) + { + q2 = q1; + q2.remove(I,I+2); + printf("q2.remove(%d,%d) = '%s'\n",I,I+2,q2.cstring); + } + + q1 = "Hello hEllo 1,2,3;"; + printf("q1='%s'\n",q1.cstring); + q1.tolower(); + printf("q1='%s'\n",q1.cstring); + q1.toupper(); + printf("q1='%s'\n",q1.cstring); + + q1.append("hello more appened stuff..."); + printf("q1='%s'\n",q1.cstring); + + q1.substring(-5,5,&q1); + printf("q1='%s'\n",q1.cstring); + + q1 = "Hello 1,2,3"; + printf("q1='%s', q1.isvalidnumber() = %d, q1.strtonum=%1.6g\n",q1.cstring,q1.isvalidnumber(),q1.strtonum()); + q1 = " 3.1415 "; + printf("q1='%s', q1.isvalidnumber() = %d, q1.strtonum=%1.6g\n",q1.cstring,q1.isvalidnumber(),q1.strtonum()); + q1 = "-inf"; + printf("q1='%s', q1.isvalidnumber() = %d, q1.strtonum=%1.6g\n",q1.cstring,q1.isvalidnumber(),q1.strtonum()); + q1 = "nan"; + printf("q1='%s', q1.isvalidnumber() = %d, q1.strtonum=%1.6g\n",q1.cstring,q1.isvalidnumber(),q1.strtonum()); + q1 = "1.1E1,2.2E2"; + printf("q1='%s', q1.isvalidnumber() = %d, q1.strtonum=%1.6g\n",q1.cstring,q1.isvalidnumber(),q1.strtonum()); + q1 = ",1,2,3"; + printf("q1='%s', q1.isvalidnumber() = %d, q1.strtonum=%1.6g\n",q1.cstring,q1.isvalidnumber(),q1.strtonum()); + + // qarr.resize(1000); + // for(I=0;I<1000;I++) + // { + // qarr[I].sprintf(1000,"%1.500g\n",ams::pi); + // qarr[I].resize(1000000); + // } + // printf("%d",qarr[0].size()); + q1 = "Hello world"; + for(I=-2;I<15;I++) + { + q1.substring(I,I+3,&q2); + printf("q1[%d:%d] = '%s' size=%d\n",I,I+3,q2.cstring,q2.size()); + } + + return; + } + + void amsstring3_test_find() + { + amsstring q1,q2,q3; + int I; + + q1 = "hello world"; + q3 = ""); + printf("q2=q1;q2.insert(%d,') = '%s' q2.find(q3)=%d\n",I,q2.cstring,q2.find(q3,0,0)); + } + + q3 = ""; + printf("\nq3='%s'\n",q3.cstring); + for(I=-1;I<13;I++) + { + q2 = q1; + q2.insert(I,""); + printf("q2=q1;q2.insert(%d,') = '%s' q2.find(q3)=%d\n",I,q2.cstring,q2.find(q3,0,0)); + } + + q3 = " "; + printf("\nq3='%s'\n",q3.cstring); + for(I=-1;I<13;I++) + { + q2 = q1; + q2.insert(I,""); + printf("q2=q1;q2.insert(%d,') = '%s' q2.find(q3)=%d\n",I,q2.cstring,q2.find(q3,0,0)); + } + + return; + } + + void amsstring3_test_splitlines() + { + int I; + amsstring q1; + amsarray lns; + std::vector lns2; + q1 = "This is a \n string on \n multiple \r\n lines\n\n with CR\\LFs\n"; + //q1 = "\n\n"; + //q1 = ""; + //q1 = "More malformed\r string nonsense\n\r\n\r\r\na"; + + printf("q1='%s'\n",q1.cstring); + splitlines(&q1,&lns2); + for(I=0;I strs; + int I; + + q1 = "this is a string to split "; + printf("string='%s'\n",q1.cstring); + split(&q1," ",&strs); + for(I=0;I strs; + int I; + + q1 = " "; + printf("string ws ='%s'\n",q1.cstring); + stripwhitespace(&q1); + printf("string nows='%s'\n",q1.cstring); + + q1 = "\t something = something else\t "; + printf("string ws ='%s'\n",q1.cstring); + stripwhitespace(&q1); + printf("string nows='%s'\n",q1.cstring); + + stripwhitespace(NULL); + + q1 = "\t something = something else\t "; + printf("string ws ='%s'\n",q1.cstring); + stripallwhitespace(&q1); + printf("string allws='%s'\n",q1.cstring); + + return; + } + + void amsstring3_test_freadwrite() + { + FILE *fp = NULL; + FILE *fp2 = NULL; + int I; + amsstring q; + std::vector q2; + + fp = fopen("../ref/0p375_hexbolt.scad","r"); + fp2 = fopen("../ref/testrewrite.scad","w+"); + + I = 0; + while(!feof(fp)) + { + freadline(fp,&q); + printf("Line %d: '%s'\n",I,q.cstring); + I = I + 1; + } + + fseek(fp,SEEK_SET,0); + + freadlines(fp,&q2); + for(I=0;I + +namespace ams +{ + + + //UC codepoints + //0x00 to 0x10FFFF (~24 bits, with the remainder being escape sequences and the like) + + //different processors order bytes differently (endianness) + + //UTF-8 + // 0x00 - 0x7F: 1 byte + // 0x00: U+0000 - only when representing the null character + + //21 bit values + // 0b0xxxxxxx 0x00000000 0x0000007F + // 0b110xxxxx 01xxxxxx 0x00000080 0x000007FF + // 0b1110xxxx 01xxxxxx 01xxxxxx 0x00000800 0x0000FFFF + // 0b11110xxx 01xxxxxx 01xxxxxx 01xxxxxx 0x00010000 0x0010FFFF + + + static void _intl_print_ui32bits(uint32_t q) + { + int I; + + for(I=32-1;I>=24;I--) + { + if((q & 1<=16;I--) + { + if((q & 1<=8;I--) + { + if((q & 1<=0;I--) + { + if((q & 1<=0;I--) + { + if((q & 1< &codepoints) + { + long I,J; + ams_chartype c0; + uint32_t cp0,cpw; + + int escmode; + int escs; + + int correct = 1; + + codepoints.reserve(str.length); + escmode = 0; + escs = 0; + for(I=0;I0) + { + if((c0 & 0b11000000)==0b10000000) + { + cpw = (uint32_t)(c0 & 0b00111111); + cp0 = cp0 + (cpw<<((uint32_t)6*(escs-1))); + escs--; + //printf("debug: escs=%d cp0=",escs); _intl_print_ui32bits(cp0); printf("\n"); + } + else + { + //invalid escape character - this is bad UTF-8 + correct = 0; + escs = 0; + escmode = 0; + //don't append anything + //printf("incorrect!\n"); + } + } + + if(escmode!=0 && escs==0) + { + //end escape mode, push character, return to mode 0; + escmode = 0; + escs = 0; + codepoints.append(cp0); + } + + } //for chars in string + + codepoints.shrink_to_fit(); + + return correct; + } + + int string_to_uccodepoints(const amsstring *str, amsarray *codepoints) + { + long I,J; + ams_chartype c0; + uint32_t cp0,cpw; + + int escmode; + int escs; + + int correct = 1; + + codepoints->reserve(str->length); + escmode = 0; + escs = 0; + for(I=0;Ilength+1;I++) + { + c0 = str->cstring[I]; + if(c0=='\0') + { + //end of string, terminate search + cp0 = 0; + codepoints->append(cp0); + break; + } + + else if(escmode==0 && (c0 & 0b10000000)==0) + { + //normal ASCII character + cp0 = (uint32_t)((unsigned char)c0); + codepoints->append(cp0); + } + else if(escmode==0 && (c0 & 0b11100000)==0b11000000) + { + escmode = 1; escs = 1; + cp0 = 0; + cpw = (uint32_t)(c0 & 0b00011111); + cp0 = cp0 + (cpw<<((uint32_t)6)); + //printf("debug: escs=%d cp0=",escs); _intl_print_ui32bits(cp0); printf("\n"); + } + else if(escmode==0 && (c0 & 0b11110000)==0b11100000) + { + escmode = 2; escs = 2; + cp0 = 0; + cpw = (uint32_t)(c0 & 0b00001111); + cp0 = cp0 + (cpw<<((uint32_t)12)); + //printf("debug: escs=%d cp0=",escs); _intl_print_ui32bits(cp0); printf("\n"); + } + else if(escmode==0 && (c0 & 0b11111000)==0b11110000) + { + escmode = 3; escs = 3; + cp0 = 0; + cpw = (uint32_t)(c0 & 0b00000111); + cp0 = cp0 + (cpw<<((uint32_t)18)); + //printf("debug: escs=%d cp0=",escs); _intl_print_ui32bits(cp0); printf("\n"); + } + + else if(escmode!=0 && escs>0) + { + if((c0 & 0b11000000)==0b10000000) + { + cpw = (uint32_t)(c0 & 0b00111111); + cp0 = cp0 + (cpw<<((uint32_t)6*(escs-1))); + escs--; + //printf("debug: escs=%d cp0=",escs); _intl_print_ui32bits(cp0); printf("\n"); + } + else + { + //invalid escape character - this is bad UTF-8 + correct = 0; + escs = 0; + escmode = 0; + //don't append anything + //printf("incorrect!\n"); + } + } + + if(escmode!=0 && escs==0) + { + //end escape mode, push character, return to mode 0; + escmode = 0; + escs = 0; + codepoints->append(cp0); + } + + } //for chars in string + + codepoints->shrink_to_fit(); + + return correct; + } + + void uccodepoints_to_string(const amsarray &codepoints, amsstring &str) + { + long I,J; + uint8_t ch; + uint32_t cp,bits1,bits2,bits3,bits4; + + str.resize(codepoints.length*4+1); + str.cstring[str.length]='\0'; //guard against last char not being \0 + + J = 0; + for(I=0;I0 && cp<=0x0000007F) + { + ch = (uint8_t) cp; + str.cstring[J] = ((ams_chartype)((unsigned char)ch)); + J++; + } + + if(cp>=0x00000080 && cp<=0x000007FF) + { + bits1 = (cp & (0b00111111))+0b10000000; + bits2 = ((cp & (0b00011111<<6L))>>6)+0b11000000; + + //string.cstring[J] = ((ams_chartype)((unsigned char)bits2)); + str.cstring[J] = bits2; + J++; + //string.cstring[J] = ((ams_chartype)((unsigned char)bits1)); + str.cstring[J] = bits1; + J++; + } + + if(cp>=0x00000800 && cp<=0x0000FFFF) + { + bits1 = (cp & (0b00111111))+0b10000000; + bits2 = ((cp & (0b00111111<<6))>>6)+0b10000000; + bits3 = ((cp & (0b00001111<<12))>>12)+0b11100000; + + str.cstring[J] = ((ams_chartype)((unsigned char)bits3)); + J++; + str.cstring[J] = ((ams_chartype)((unsigned char)bits2)); + J++; + str.cstring[J] = ((ams_chartype)((unsigned char)bits1)); + J++; + } + + if(cp>=0x00010000 && cp<=0x010FFFFF) + { + bits1 = (cp & (0b00111111))+0b10000000; + bits2 = ((cp & (0b00111111<<6))>>6)+0b10000000; + bits3 = ((cp & (0b00111111<<12))>>12)+0b10000000; + bits4 = ((cp & (0b00000111<<18))>>18)+0b11110000; + + str.cstring[J] = ((ams_chartype)((unsigned char)bits4)); + J++; + str.cstring[J] = ((ams_chartype)((unsigned char)bits3)); + J++; + str.cstring[J] = ((ams_chartype)((unsigned char)bits2)); + J++; + str.cstring[J] = ((ams_chartype)((unsigned char)bits1)); + J++; + } + + } + + str.shrinktofit(); + return; + } + + void uccodepoints_to_string(const amsarray *codepoints, amsstring *str) + { + long I,J; + uint8_t ch; + uint32_t cp,bits1,bits2,bits3,bits4; + + str->resize(codepoints->length*4+1); + str->cstring[str->length]='\0'; //guard against last char not being \0 + + J = 0; + for(I=0;Ilength;I++) + { + cp = codepoints->at(I); + if(cp==0) + { + str->cstring[J] = '\0'; + J++; + break; + } + + //21 bit values + // 0b0xxxxxxx 0x00000000 0x0000007F + // 0b110xxxxx 01xxxxxx 0x00000080 0x000007FF + // 0b1110xxxx 01xxxxxx 01xxxxxx 0x00000800 0x0000FFFF + // 0b11110xxx 01xxxxxx 01xxxxxx 01xxxxxx 0x00010000 0x0010FFFF + + if(cp>0 && cp<=0x0000007F) + { + ch = (uint8_t) cp; + str->cstring[J] = ((ams_chartype)((unsigned char)ch)); + J++; + } + + if(cp>=0x00000080 && cp<=0x000007FF) + { + bits1 = (cp & (0b00111111))+0b10000000; + bits2 = ((cp & (0b00011111<<6L))>>6)+0b11000000; + + //string.cstring[J] = ((ams_chartype)((unsigned char)bits2)); + str->cstring[J] = bits2; + J++; + //string.cstring[J] = ((ams_chartype)((unsigned char)bits1)); + str->cstring[J] = bits1; + J++; + } + + if(cp>=0x00000800 && cp<=0x0000FFFF) + { + bits1 = (cp & (0b00111111))+0b10000000; + bits2 = ((cp & (0b00111111<<6))>>6)+0b10000000; + bits3 = ((cp & (0b00001111<<12))>>12)+0b11100000; + + str->cstring[J] = ((ams_chartype)((unsigned char)bits3)); + J++; + str->cstring[J] = ((ams_chartype)((unsigned char)bits2)); + J++; + str->cstring[J] = ((ams_chartype)((unsigned char)bits1)); + J++; + } + + if(cp>=0x00010000 && cp<=0x010FFFFF) + { + bits1 = (cp & (0b00111111))+0b10000000; + bits2 = ((cp & (0b00111111<<6))>>6)+0b10000000; + bits3 = ((cp & (0b00111111<<12))>>12)+0b10000000; + bits4 = ((cp & (0b00000111<<18))>>18)+0b11110000; + + str->cstring[J] = ((ams_chartype)((unsigned char)bits4)); + J++; + str->cstring[J] = ((ams_chartype)((unsigned char)bits3)); + J++; + str->cstring[J] = ((ams_chartype)((unsigned char)bits2)); + J++; + str->cstring[J] = ((ams_chartype)((unsigned char)bits1)); + J++; + } + + } + + str->shrinktofit(); + return; + } + + + void test_unicode_ascii_int_conv() + { + int I; + char c; + unsigned char uc; + int J1,J2; + + for(I=0;I<255;I++) + { + c = (char)I; + uc = (unsigned char) c; + J1 = (int)c; + J2 = (int)uc; + + printf("%d\t%c\t%c\t%d\t%d\n",I,c,uc,J1,J2); + } + + + return; + } + + static void test_unicode_conv1_sub(uint32_t codept) + { + long I; + amsarray codepts1; + amsarray codepts2; + amsstring s1,s2; + + codepts1.resize(1); + codepts1[0] = codept; + + uccodepoints_to_string(codepts1,s1); + + printf("UCC: "); _intl_print_ui32bits(codepts1[0]); printf("\n"); + printf("STR: "); + for(I=0;I *cp) + { + int I; + int pass = 1; + amsstring s1,s2; + amsarray cp2; + + uccodepoints_to_string(cp,&s1); + string_to_uccodepoints(&s1,&cp2); + uccodepoints_to_string(&cp2,&s2); + + if(s1==s2 && *cp==cp2) + { + pass = 1; + } + else + { + pass = 0; + printf("FAIL: \n"); + + } + + + return pass; + } + + static void test_gen_rand_codepts(int len, amsarray *cp) + { + long I; + cp->resize(len+1); + for(I=0;Iat(I) = ams::randi(1,0x0010FFFF); + } + cp->at(len) = 0; + + return; + } + + void test_unicode_conv2() + { + long I,J; + int pass; + amsarray cp; + + long ntests = 10000; + long passes = 0; + long failures = 0; + + int len = 30; + + printf("Testing unicode to string conversion.\n"); + printf("%ld tests of %d random codepoints each.\n",ntests,len); + + for(I=0;I