-/* $MirOS: contrib/code/jupp/vs.c,v 1.3 2010/01/03 18:22:04 tg Exp $ */
/*
* Variable length strings
* Copyright
#include "config.h"
#include "types.h"
+__RCSID("$MirOS: contrib/code/jupp/vs.c,v 1.10 2017/12/02 02:07:38 tg Exp $");
+
+#include <stdlib.h>
+
#include "blocks.h"
#include "utils.h"
#include "vs.h"
-int sicmp(unsigned char a, unsigned char b)
-{
- if (a >= 'A' || a <= 'Z')
- a += 'a' - 'A';
- if (b >= 'A' || b <= 'Z')
- b += 'a' - 'A';
- return scmp(a, b);
-}
-
sELEMENT *vsmk(int len)
{
int *new = (int *) joe_malloc((1 + len) * sizeof(sELEMENT) + 2 * sizeof(int));
}
if (pos > olen)
vary = vsfill(vary, olen, sblank, pos - olen);
+#ifdef TEST
+ memmove(vary + pos, array, len * sizeof(sELEMENT));
+#else
mmove(vary + pos, array, len * sizeof(sELEMENT));
+#endif
return vary;
}
return vary;
}
-#ifdef junk
-
-sELEMENT *vsins(sELEMENT *vary, int pos, int n)
-{
- if (!vary || sLEN(vary) + n > sSIZ(vary))
- vary = vsensure(vary, sLEN(vary) + n);
- if (pos >= sLen(vary))
- vary = vstrunc(vary, pos + n);
- else {
- mmove(vary + pos + n, vary + pos, sLen(vary) - (pos + n) + 1);
- sLen(vary) += n;
- }
- return vary;
-}
-
-sELEMENT *vsdel(sELEMENT *vary, int pos, int n)
-{
- if (pos >= sLEN(vary))
- return vary;
- if (pos + n >= sLen(vary))
- return vstrunc(vary, pos);
- mmove(vary + pos, vary + pos + n, sLen(vary) - (pos + n) + 1);
- sLen(vary) -= n;
- return vary;
-}
-
-int _scmp(sELEMENT a, sELEMENT b)
-{
- return scmp(a, b);
-}
-
-sELEMENT *vssort(sELEMENT *ary, int len)
-{
- if (!ary || !len)
- return ary;
- qsort(ary, len, sizeof(sELEMENT), _scmp);
- return ary;
-}
-
-#endif
-
-int vsbsearch(sELEMENT *ary, int len, sELEMENT el)
+int vsbsearch(const sELEMENT *ary, int len, sELEMENT el)
{
int x, y, z;
return y;
}
-#ifdef junk
-
-int vsfirst(sELEMENT *ary, int len, sELEMENT el)
-{
- int x;
-
- if (!ary || !len)
- return ~0;
- for (x = 0; x != len; ++x)
- if (!scmp(ary[x], el))
- return x;
- return ~0;
-}
-
-int vslast(sELEMENT *ary, int len, sELEMENT el)
-{
- int x = len;
-
- if (!ary || !len)
- return ~0;
- do {
- --x;
- if (!scmp(ary[x], el))
- return x;
- } while (x);
- return ~0;
-}
-
-#endif
-
int vscmpn(sELEMENT *a, int alen, sELEMENT *b, int blen)
{
int x, l;
{
return vscmpn(sv(a), sv(b));
}
-#ifdef junk
-int vsicmpn(sELEMENT *a, int alen, sELEMENT *b, int blen)
-{
- int x, l;
- int t;
-
- if (!a && !b)
- return 0;
- if (!a)
- return -1;
- if (!b)
- return 1;
- if (alen > blen)
- l = sLen(a);
- else
- l = blen;
- for (x = 0; x != l; ++x)
- if (t = sicmp(a[x], b[x]))
- return t;
- if (alen > blen)
- return 1;
- if (alen < blen)
- return -1;
- return 0;
-}
-
-int vss(sELEMENT *a, int alen, sELEMENT *b, int blen)
-{
- int x;
-
- if (!a && !b)
- return 0;
- if (!a || !b)
- return ~0;
- if (alen < blen)
- return ~0;
- if (!blen)
- return 0;
- for (x = 0; x != alen - blen; ++x)
- if (!vscmpn(a, blen, b, blen))
- return x;
- return ~0;
-}
-
-#endif
-int vsscan(sELEMENT *a, int alen, sELEMENT *b, int blen)
+int vsscan(const sELEMENT *a, int alen, const sELEMENT *b, int blen)
{
int x;
{
int x;
+ /* should not happen */
+ if (!b)
+ return (0);
+
for (x = 0; x != alen; ++x) {
int z = vsbsearch(b, blen, a[x]);
}
return x;
}
-
-#ifdef junk
-
-sELEMENT *vsread(sELEMENT d, int p, int (*getC)(), void *ptr)
-{
- int c;
-
- if (!d)
- d = vsmk(10);
- c = getC(ptr);
- if (c == NO_MORE_DATA) {
- vsrm(d);
- return NULL;
- } else if (c == '\n')
- return d;
- else {
- d = vsset(d, p, c);
- p++;
- }
- while (c = getC(ptr), c != NO_MORE_DATA && c != '\n') {
- d = vsset(d, p, c);
- p++;
- }
- return d;
-}
-
-sELEMENT *vwords(sELEMENT *s, sELEMENT **a, int len, sELEMENT t)
-{
- int x;
-
- if (!s)
- s = vsmk(32);
- else
- s = vstrunc(s, 0);
- for (x = 0; x != len; ++x) {
- s = vsncpy(s, sLEN(s), sz(a[x]));
- if (a[1])
- s = vsadd(s, t);
- }
- return s;
-}
-
-#endif