* Sherlock Library -- Object Functions
*
* (c) 1997--2001 Martin Mares <mj@ucw.cz>
+ *
+ * This software may be freely distributed and used according to the terms
+ * of the GNU Lesser General Public License.
*/
#include "lib/lib.h"
int
obj_read(struct fastbuf *f, struct odes *o)
{
- byte buf[1024];
+ byte buf[4096];
struct oattr **last = &o->attrs;
struct oattr *a, *la;
{
bputc(f, a->attr);
for(z = b->val; *z; z++)
- if (*z >= ' ')
+ if (*z >= ' ' || *z == '\t')
bputc(f, *z);
else
{
b = oa_new(o, x, v);
a->last_same->same = b;
a->last_same = b;
+ return a;
+}
+
+struct oattr *
+obj_prepend_attr(struct odes *o, uns x, byte *v)
+{
+ struct oattr *a, *b, **z;
+
+ b = oa_new(o, x, v);
+ z = &o->attrs;
+ while (a = *z)
+ {
+ if (a->attr == x)
+ {
+ b->same = a;
+ b->next = a->next;
+ a->next = NULL;
+ *z = b;
+ b->last_same = a->last_same;
+ return b;
+ }
+ z = &a->next;
+ }
+ b->next = o->attrs;
+ o->attrs = b;
+ return b;
+}
+
+struct oattr *
+obj_insert_attr(struct odes *o, struct oattr *first, struct oattr *after, byte *v)
+{
+ struct oattr *b;
+
+ b = oa_new(o, first->attr, v);
+ b->same = after->same;
+ after->same = b;
+ if (first->last_same == after)
+ first->last_same = b;
return b;
}