123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374 |
- /* voc 2.1.0 [2017/07/20]. Bootstrapping compiler for address size 8, alignment 8. xtspaSF */
- #define SHORTINT INT8
- #define INTEGER INT16
- #define LONGINT INT32
- #define SET UINT32
- #include "SYSTEM.h"
- #include "Reals.h"
- export void Strings_Append (CHAR *extra, ADDRESS extra__len, CHAR *dest, ADDRESS dest__len);
- export void Strings_Cap (CHAR *s, ADDRESS s__len);
- export void Strings_Delete (CHAR *s, ADDRESS s__len, INT16 pos, INT16 n);
- export void Strings_Extract (CHAR *source, ADDRESS source__len, INT16 pos, INT16 n, CHAR *dest, ADDRESS dest__len);
- export void Strings_Insert (CHAR *source, ADDRESS source__len, INT16 pos, CHAR *dest, ADDRESS dest__len);
- export INT16 Strings_Length (CHAR *s, ADDRESS s__len);
- export BOOLEAN Strings_Match (CHAR *string, ADDRESS string__len, CHAR *pattern, ADDRESS pattern__len);
- export INT16 Strings_Pos (CHAR *pattern, ADDRESS pattern__len, CHAR *s, ADDRESS s__len, INT16 pos);
- export void Strings_Replace (CHAR *source, ADDRESS source__len, INT16 pos, CHAR *dest, ADDRESS dest__len);
- export void Strings_StrToLongReal (CHAR *s, ADDRESS s__len, LONGREAL *r);
- export void Strings_StrToReal (CHAR *s, ADDRESS s__len, REAL *r);
- INT16 Strings_Length (CHAR *s, ADDRESS s__len)
- {
- INT32 i;
- __DUP(s, s__len, CHAR);
- i = 0;
- while ((i < s__len && s[__X(i, s__len)] != 0x00)) {
- i += 1;
- }
- if (i <= 32767) {
- __DEL(s);
- return (INT16)i;
- } else {
- __DEL(s);
- return 32767;
- }
- __RETCHK;
- }
- void Strings_Append (CHAR *extra, ADDRESS extra__len, CHAR *dest, ADDRESS dest__len)
- {
- INT16 n1, n2, i;
- __DUP(extra, extra__len, CHAR);
- n1 = Strings_Length(dest, dest__len);
- n2 = Strings_Length(extra, extra__len);
- i = 0;
- while ((i < n2 && (i + n1) < dest__len)) {
- dest[__X(i + n1, dest__len)] = extra[__X(i, extra__len)];
- i += 1;
- }
- if ((i + n1) < dest__len) {
- dest[__X(i + n1, dest__len)] = 0x00;
- }
- __DEL(extra);
- }
- void Strings_Insert (CHAR *source, ADDRESS source__len, INT16 pos, CHAR *dest, ADDRESS dest__len)
- {
- INT16 n1, n2, i;
- __DUP(source, source__len, CHAR);
- n1 = Strings_Length(dest, dest__len);
- n2 = Strings_Length(source, source__len);
- if (pos < 0) {
- pos = 0;
- }
- if (pos > n1) {
- Strings_Append(dest, dest__len, (void*)source, source__len);
- __DEL(source);
- return;
- }
- if ((pos + n2) < dest__len) {
- i = n1;
- while (i >= pos) {
- if ((i + n2) < dest__len) {
- dest[__X(i + n2, dest__len)] = dest[__X(i, dest__len)];
- }
- i -= 1;
- }
- }
- i = 0;
- while (i < n2) {
- dest[__X(pos + i, dest__len)] = source[__X(i, source__len)];
- i += 1;
- }
- __DEL(source);
- }
- void Strings_Delete (CHAR *s, ADDRESS s__len, INT16 pos, INT16 n)
- {
- INT16 len, i;
- len = Strings_Length(s, s__len);
- if (pos < 0) {
- pos = 0;
- } else if (pos >= len) {
- return;
- }
- if (pos + n < len) {
- i = pos + n;
- while (i < len) {
- s[__X(i - n, s__len)] = s[__X(i, s__len)];
- i += 1;
- }
- if ((i - n) < s__len) {
- s[__X(i - n, s__len)] = 0x00;
- }
- } else {
- s[__X(pos, s__len)] = 0x00;
- }
- }
- void Strings_Replace (CHAR *source, ADDRESS source__len, INT16 pos, CHAR *dest, ADDRESS dest__len)
- {
- __DUP(source, source__len, CHAR);
- Strings_Delete((void*)dest, dest__len, pos, pos + Strings_Length(source, source__len));
- Strings_Insert(source, source__len, pos, (void*)dest, dest__len);
- __DEL(source);
- }
- void Strings_Extract (CHAR *source, ADDRESS source__len, INT16 pos, INT16 n, CHAR *dest, ADDRESS dest__len)
- {
- INT16 len, destLen, i;
- __DUP(source, source__len, CHAR);
- len = Strings_Length(source, source__len);
- destLen = (INT16)dest__len - 1;
- if (pos < 0) {
- pos = 0;
- }
- if (pos >= len) {
- dest[0] = 0x00;
- __DEL(source);
- return;
- }
- i = 0;
- while (((((pos + i) <= source__len && source[__X(pos + i, source__len)] != 0x00)) && i < n)) {
- if (i < destLen) {
- dest[__X(i, dest__len)] = source[__X(pos + i, source__len)];
- }
- i += 1;
- }
- dest[__X(i, dest__len)] = 0x00;
- __DEL(source);
- }
- INT16 Strings_Pos (CHAR *pattern, ADDRESS pattern__len, CHAR *s, ADDRESS s__len, INT16 pos)
- {
- INT16 n1, n2, i, j;
- __DUP(pattern, pattern__len, CHAR);
- __DUP(s, s__len, CHAR);
- n1 = Strings_Length(s, s__len);
- n2 = Strings_Length(pattern, pattern__len);
- if (n2 == 0) {
- __DEL(pattern);
- __DEL(s);
- return 0;
- }
- i = pos;
- while (i <= n1 - n2) {
- if (s[__X(i, s__len)] == pattern[0]) {
- j = 1;
- while ((j < n2 && s[__X(i + j, s__len)] == pattern[__X(j, pattern__len)])) {
- j += 1;
- }
- if (j == n2) {
- __DEL(pattern);
- __DEL(s);
- return i;
- }
- }
- i += 1;
- }
- __DEL(pattern);
- __DEL(s);
- return -1;
- }
- void Strings_Cap (CHAR *s, ADDRESS s__len)
- {
- INT16 i;
- i = 0;
- while (s[__X(i, s__len)] != 0x00) {
- if (('a' <= s[__X(i, s__len)] && s[__X(i, s__len)] <= 'z')) {
- s[__X(i, s__len)] = __CAP(s[__X(i, s__len)]);
- }
- i += 1;
- }
- }
- static struct Match__7 {
- struct Match__7 *lnk;
- } *Match__7_s;
- static BOOLEAN M__8 (CHAR *name, ADDRESS name__len, CHAR *mask, ADDRESS mask__len, INT16 n, INT16 m);
- static BOOLEAN M__8 (CHAR *name, ADDRESS name__len, CHAR *mask, ADDRESS mask__len, INT16 n, INT16 m)
- {
- while ((((n >= 0 && m >= 0)) && mask[__X(m, mask__len)] != '*')) {
- if (name[__X(n, name__len)] != mask[__X(m, mask__len)]) {
- return 0;
- }
- n -= 1;
- m -= 1;
- }
- if (m < 0) {
- return n < 0;
- }
- while ((m >= 0 && mask[__X(m, mask__len)] == '*')) {
- m -= 1;
- }
- if (m < 0) {
- return 1;
- }
- while (n >= 0) {
- if (M__8(name, name__len, mask, mask__len, n, m)) {
- return 1;
- }
- n -= 1;
- }
- return 0;
- }
- BOOLEAN Strings_Match (CHAR *string, ADDRESS string__len, CHAR *pattern, ADDRESS pattern__len)
- {
- struct Match__7 _s;
- BOOLEAN __retval;
- __DUP(string, string__len, CHAR);
- __DUP(pattern, pattern__len, CHAR);
- _s.lnk = Match__7_s;
- Match__7_s = &_s;
- __retval = M__8((void*)string, string__len, (void*)pattern, pattern__len, Strings_Length(string, string__len) - 1, Strings_Length(pattern, pattern__len) - 1);
- Match__7_s = _s.lnk;
- __DEL(string);
- __DEL(pattern);
- ;
- return __retval;
- }
- void Strings_StrToReal (CHAR *s, ADDRESS s__len, REAL *r)
- {
- INT16 p, e;
- REAL y, g;
- BOOLEAN neg, negE;
- __DUP(s, s__len, CHAR);
- p = 0;
- while (s[__X(p, s__len)] == ' ' || s[__X(p, s__len)] == '0') {
- p += 1;
- }
- if (s[__X(p, s__len)] == '-') {
- neg = 1;
- p += 1;
- } else {
- neg = 0;
- }
- while (s[__X(p, s__len)] == ' ' || s[__X(p, s__len)] == '0') {
- p += 1;
- }
- y = (REAL)0;
- while (('0' <= s[__X(p, s__len)] && s[__X(p, s__len)] <= '9')) {
- y = y * (REAL)10 + ((INT16)s[__X(p, s__len)] - 48);
- p += 1;
- }
- if (s[__X(p, s__len)] == '.') {
- p += 1;
- g = (REAL)1;
- while (('0' <= s[__X(p, s__len)] && s[__X(p, s__len)] <= '9')) {
- g = g / (REAL)(REAL)10;
- y = y + g * ((INT16)s[__X(p, s__len)] - 48);
- p += 1;
- }
- }
- if (s[__X(p, s__len)] == 'D' || s[__X(p, s__len)] == 'E') {
- p += 1;
- e = 0;
- if (s[__X(p, s__len)] == '-') {
- negE = 1;
- p += 1;
- } else {
- negE = 0;
- }
- while (s[__X(p, s__len)] == '0') {
- p += 1;
- }
- while (('0' <= s[__X(p, s__len)] && s[__X(p, s__len)] <= '9')) {
- e = e * 10 + ((INT16)s[__X(p, s__len)] - 48);
- p += 1;
- }
- if (negE) {
- y = y / (REAL)Reals_Ten(e);
- } else {
- y = y * Reals_Ten(e);
- }
- }
- if (neg) {
- y = -y;
- }
- *r = y;
- __DEL(s);
- }
- void Strings_StrToLongReal (CHAR *s, ADDRESS s__len, LONGREAL *r)
- {
- INT16 p, e;
- LONGREAL y, g;
- BOOLEAN neg, negE;
- __DUP(s, s__len, CHAR);
- p = 0;
- while (s[__X(p, s__len)] == ' ' || s[__X(p, s__len)] == '0') {
- p += 1;
- }
- if (s[__X(p, s__len)] == '-') {
- neg = 1;
- p += 1;
- } else {
- neg = 0;
- }
- while (s[__X(p, s__len)] == ' ' || s[__X(p, s__len)] == '0') {
- p += 1;
- }
- y = (LONGREAL)0;
- while (('0' <= s[__X(p, s__len)] && s[__X(p, s__len)] <= '9')) {
- y = y * (LONGREAL)10 + ((INT16)s[__X(p, s__len)] - 48);
- p += 1;
- }
- if (s[__X(p, s__len)] == '.') {
- p += 1;
- g = (LONGREAL)1;
- while (('0' <= s[__X(p, s__len)] && s[__X(p, s__len)] <= '9')) {
- g = g / (LONGREAL)(LONGREAL)10;
- y = y + g * ((INT16)s[__X(p, s__len)] - 48);
- p += 1;
- }
- }
- if (s[__X(p, s__len)] == 'D' || s[__X(p, s__len)] == 'E') {
- p += 1;
- e = 0;
- if (s[__X(p, s__len)] == '-') {
- negE = 1;
- p += 1;
- } else {
- negE = 0;
- }
- while (s[__X(p, s__len)] == '0') {
- p += 1;
- }
- while (('0' <= s[__X(p, s__len)] && s[__X(p, s__len)] <= '9')) {
- e = e * 10 + ((INT16)s[__X(p, s__len)] - 48);
- p += 1;
- }
- if (negE) {
- y = y / (LONGREAL)Reals_Ten(e);
- } else {
- y = y * Reals_Ten(e);
- }
- }
- if (neg) {
- y = -y;
- }
- *r = y;
- __DEL(s);
- }
- export void *Strings__init(void)
- {
- __DEFMOD;
- __MODULE_IMPORT(Reals);
- __REGMOD("Strings", 0);
- /* BEGIN */
- __ENDMOD;
- }
|