1 /* $Header: array.c,v 1.0 87/12/18 13:04:42 root Exp $
4 * Revision 1.0 87/12/18 13:04:42 root
21 if (key < 0 || key > ar->ary_max)
23 return ar->ary_array[key];
36 if (key > ar->ary_max) {
37 int newmax = key + ar->ary_max / 5;
39 ar->ary_array = (STR**)saferealloc((char*)ar->ary_array,
40 (newmax+1) * sizeof(STR*));
41 bzero((char*)&ar->ary_array[ar->ary_max+1],
42 (newmax - ar->ary_max) * sizeof(STR*));
45 if (key > ar->ary_fill)
47 retval = (ar->ary_array[key] != Nullstr);
49 str_free(ar->ary_array[key]);
50 ar->ary_array[key] = val;
59 if (key < 0 || key > ar->ary_max)
61 if (ar->ary_array[key]) {
62 str_free(ar->ary_array[key]);
63 ar->ary_array[key] = Nullstr;
72 register ARRAY *ar = (ARRAY*)safemalloc(sizeof(ARRAY));
74 ar->ary_array = (STR**) safemalloc(5 * sizeof(STR*));
77 bzero((char*)ar->ary_array, 5 * sizeof(STR*));
89 for (key = 0; key <= ar->ary_fill; key++)
90 str_free(ar->ary_array[key]);
91 safefree((char*)ar->ary_array);
100 return astore(ar,++(ar->ary_fill),val);
109 if (ar->ary_fill < 0)
111 retval = ar->ary_array[ar->ary_fill];
112 ar->ary_array[ar->ary_fill--] = Nullstr;
121 register STR **sstr,**dstr;
125 astore(ar,ar->ary_fill+num,(STR*)0); /* maybe extend array */
126 sstr = ar->ary_array + ar->ary_fill;
128 for (i = ar->ary_fill; i >= 0; i--) {
131 bzero((char*)(ar->ary_array), num * sizeof(STR*));
140 if (ar->ary_fill < 0)
142 retval = ar->ary_array[0];
143 bcopy((char*)(ar->ary_array+1),(char*)ar->ary_array,
144 ar->ary_fill * sizeof(STR*));
145 ar->ary_array[ar->ary_fill--] = Nullstr;
153 return (long)ar->ary_fill;
166 if (ar->ary_fill < 0) {
171 dlen = strlen(delim);
172 len = ar->ary_fill * dlen; /* account for delimiters */
173 for (i = ar->ary_fill; i >= 0; i--)
174 len += str_len(ar->ary_array[i]);
175 str_grow(str,len); /* preallocate for efficiency */
176 str_sset(str,ar->ary_array[0]);
177 for (i = 1; i <= ar->ary_fill; i++) {
178 str_ncat(str,delim,dlen);
179 str_scat(str,ar->ary_array[i]);