#pragma once typedef char* string; /* basic c string (nul terminated) functions */ intptr str·len(char *s); char *str·findc(char *s, int c); char *str·nfindc(char *s, intptr n, int c); char *str·efindc(char *s, char *e, int c); char *str·rfindc(char *s, int c); char *str·nrfindc(char *s, intptr n, int c); char *str·erfindc(char *s, char *e, int c); char *str·find(char *s, char *sub); char *str·nfind(char *s, intptr n, char *sub); char *str·efind(char *s, char *e, char *sub); char *str·copy(char *dst, char *src); char *str·ncopy(char *dst, intptr n, char *src); char *str·ecopy(char *dst, char *end, char *src); char *str·append(char *dst, char *src); char *str·nappend(char *dst, intptr n, char *src); char *str·eappend(char *dst, char *end, char *src); int str·compare(char *, char *); int str·ncompare(char *, intptr len, char *); int str·ecompare(char *, char *end, char *); /* old school interfaces (no error checking) */ long str·atoi(char *s); double str·atof(char *s); char *str·itoa(char *s, int x); /* nicer */ long str·asint(char *s, char **end, int base); double str·asfloat(char *s, char **end); /* augmented string functions */ string string·nnmake(char *s, vlong len, vlong cap); string string·nmake(char *s, vlong len); string string·make(char *s); string string·makef(char *fmt, ...); void string·free(string s); int string·len(string s); int string·cap(string s); void string·clear(string *s); void string·grow(string *s, vlong delta); void string·fit(string *s); int string·appendlen(string *s, vlong len, char *b); int string·append(string *s, char *b); int string·appendf(string *s, char *fmt, ...); int string·appendbyte(string *s, char b); bool string·equals(string s, string t); int string·find(string s, char *substr); void string·lower(string s); void string·upper(string s); int string·read(string s, int size, int n, void *buf); void string·replace(string s, byte* from, byte* to); string* string·split(string s, byte* tok); string string·join(vlong len, byte** fields, byte* sep);