Ilya Zakharevich on Sat, 1 Mar 2003 02:01:44 -0800 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
[PATCH CVS] Strchr(77), Strchr([79,75]) |
This patch allows one to invert Vecsmall("OK"). Enjoy, Ilya P.S. Should not we replace t_STR to allow lgef() - which would specify the length of the string. This would allow to have strings with embedded \0 as well... I grepped for t_STR, and think the patch would be very short. --- ./src/language/anal.h-pre Sat Feb 22 23:58:44 2003 +++ ./src/language/anal.h Sat Mar 1 01:49:02 2003 @@ -262,6 +262,7 @@ void writetex(const char *s, GEN g); GEN Str(GEN g); GEN Strexpand(GEN g); GEN Strtex(GEN g); +GEN Str_char(GEN g); /* for output */ typedef struct { --- ./src/language/es.c-pre Sat Mar 1 01:48:40 2003 +++ ./src/language/es.c Sat Mar 1 01:48:10 2003 @@ -725,6 +725,33 @@ Strexpand(GEN g) { GEN z = STRtoGENstr(t); free(t); free(s); return z; } +GEN +Str_char(GEN g) { + long n; + unsigned char buf[2]; + + if (is_vec_t(typ(g))) { + long l = lg(g), i; + long len = (l+BYTES_IN_LONG-1) >> TWOPOTBYTES_IN_LONG; + GEN x = cgetg(len+1, t_STR); + char *s = GSTR(x); + + for (i=1; i<l; i++) { + n = itos((GEN)g[i]); + if (n <= 0 || n > 255) + err(talker, "Out of range in integer -> character conversion"); + *s++ = n; + } + *s = 0; + return x; + } + n = itos(g); + if (n <= 0 || n > 255) + err(talker, "Out of range in integer -> character conversion"); + buf[0] = n; /* UTF8 ? */ + buf[1] = 0; + return STRtoGENstr(buf); +} /********************************************************************/ /** **/ --- ./src/language/helpmsg.c-pre Sun Jan 12 16:32:58 2003 +++ ./src/language/helpmsg.c Sat Mar 1 01:52:54 2003 @@ -27,6 +27,7 @@ char *helpmessages_basic[]={ "Ser(x,{v=x}): convert x (usually a vector) into a power series with variable v, starting with the constant coefficient", "Set({x=[]}): convert x into a set, i.e. a row vector with strictly increasing coefficients. Empty set if x is omitted", "Str({str}*): concatenates its (string) argument into a single string", + "Strchr(x): converts x to string, translating each integer into a characters", "Strexpand({str}*): concatenates its (string) argument into a single string, performing tilde expansion", "Strtex({str}*): translates its (string) arguments to TeX format and returns the resulting string", "Vec({x=[]}): transforms the object x into a vector. Used mainly if x is a polynomial or a power series. Empty vector if x is omitted", --- ./src/language/init.c-pre Sat Feb 22 19:58:36 2003 +++ ./src/language/init.c Sat Mar 1 01:50:36 2003 @@ -2018,6 +2018,7 @@ entree functions_basic[]={ {"Ser",14,(void*)gtoser,2,"GDn"}, {"Set",0,(void*)gtoset,2,"DG"}, {"Str",0,(void*)Str,2,"s*"}, +{"Strchr",18,(void*)Str_char,2,"G"}, {"Strexpand",0,(void*)Strexpand,2,"s*"}, {"Strtex",0,(void*)Strtex,2,"s*"}, {"Vec",0,(void*)gtovec,2,"DG"},