static void read_verbdef(Verbdef * v) { v->name = dbio_read_string_intern(); v->owner = dbio_read_objid(); v->perms = dbio_read_num(); v->prep = dbio_read_num(); v->next = 0; v->program = 0; }
Var dbio_read_var(void) { Var r; int i, l = dbio_read_num(); if (l == (int) TYPE_ANY && dbio_input_version == DBV_Prehistory) l = TYPE_NONE; /* Old encoding for VM's empty temp register * and any as-yet unassigned variables. */ r.type = (var_type) l; switch (l) { case TYPE_CLEAR: case TYPE_NONE: break; case _TYPE_STR: r.v.str = dbio_read_string_intern(); r.type |= TYPE_COMPLEX_FLAG; break; case TYPE_OBJ: case TYPE_ERR: case TYPE_INT: case TYPE_CATCH: case TYPE_FINALLY: r.v.num = dbio_read_num(); break; case _TYPE_FLOAT: r = new_float(dbio_read_float()); break; case _TYPE_LIST: l = dbio_read_num(); r = new_list(l); for (i = 0; i < l; i++) r.v.list[i + 1] = dbio_read_var(); break; default: errlog("DBIO_READ_VAR: Unknown type (%d) at DB file pos. %ld\n", l, ftell(input)); r = zero; break; } return r; }
static Propdef read_propdef() { const char *name = dbio_read_string_intern(); return dbpriv_new_propdef(name); }
static int read_object(void) { Objid oid; Object *o; char s[20]; int i; Verbdef *v, **prevv; int nprops; if (dbio_scanf("#%d", &oid) != 1 || oid != db_last_used_objid() + 1) return 0; dbio_read_line(s, sizeof(s)); if (strcmp(s, " recycled\n") == 0) { dbpriv_new_recycled_object(); return 1; } else if (strcmp(s, "\n") != 0) return 0; o = dbpriv_new_object(); o->name = dbio_read_string_intern(); (void) dbio_read_string(); /* discard old handles string */ o->flags = dbio_read_num(); o->owner = dbio_read_objid(); o->location = dbio_read_objid(); o->contents = dbio_read_objid(); o->next = dbio_read_objid(); o->lastcontents = NOTHING; o->parent = dbio_read_objid(); o->child = dbio_read_objid(); o->sibling = dbio_read_objid(); o->lastchild = NOTHING; o->verbdefs = 0; prevv = &(o->verbdefs); for (i = dbio_read_num(); i > 0; i--) { v = mymalloc(sizeof(Verbdef), M_VERBDEF); read_verbdef(v); *prevv = v; prevv = &(v->next); } o->propdefs.cur_length = 0; o->propdefs.max_length = 0; o->propdefs.l = 0; if ((i = dbio_read_num()) != 0) { o->propdefs.l = mymalloc(i * sizeof(Propdef), M_PROPDEF); o->propdefs.cur_length = i; o->propdefs.max_length = i; for (i = 0; i < o->propdefs.cur_length; i++) o->propdefs.l[i] = read_propdef(); } nprops = dbio_read_num(); if (nprops) o->propval = mymalloc(nprops * sizeof(Pval), M_PVAL); else o->propval = 0; for (i = 0; i < nprops; i++) { read_propval(o->propval + i); } return 1; }