}
+// Convert a "visit" record to a record on disk.
+int convert_visit(char *line, DBT *out_key, DBT *out_data) {
+ char *token;
+ struct visit *v = malloc(sizeof(struct visit));
+
+ memset(v, 0, sizeof(struct visit));
+ char *p = line;
+
+ for (int i=0; (token = strsep(&p, "|")); ++i) {
+ switch(i) {
+ case 1:
+ v->v_roomnum = atol(token);
+ break;
+ case 2:
+ v->v_roomgen = atol(token);
+ break;
+ case 3:
+ v->v_usernum = atol(token);
+ break;
+ case 4:
+ v->v_lastseen = atoi(token);
+ break;
+ case 5:
+ v->v_flags = atoi(token);
+ break;
+ case 6:
+ strncpy(v->v_seen, token, sizeof(v->v_seen));
+ break;
+ case 7:
+ strncpy(v->v_answered, token, sizeof(v->v_answered));
+ break;
+ case 8:
+ v->v_view = atoi(token);
+ break;
+ }
+ }
+
+ // The key is the same as the first three data members (3 x long)
+ out_key->size = sizeof(long) * 3;
+ out_key->data = reallok(NULL, out_key->size);
+ memcpy(out_key->data, v, out_key->size);
+
+ out_data->size = sizeof(struct visit);
+ out_data->data = v;
+ return(1);
+}
+
+
#if 0
// Convert a "foo" record to a record on disk.
int convert_foo(char *line, DBT *out_key, DBT *out_data) {
else if (!strcasecmp(record_type, "room")) row_was_good = convert_room(line, &out_key, &out_data);
else if (!strcasecmp(record_type, "floor")) row_was_good = convert_floor(line, &out_key, &out_data);
else if (!strcasecmp(record_type, "msglist")) row_was_good = convert_msglist(line, &out_key, &out_data);
- else if (!strcasecmp(record_type, "visit")) row_was_good = convert_foo(line, &out_key, &out_data);
+ else if (!strcasecmp(record_type, "visit")) row_was_good = convert_visit(line, &out_key, &out_data);
else if (!strcasecmp(record_type, "dir")) row_was_good = convert_foo(line, &out_key, &out_data);
else if (!strcasecmp(record_type, "use")) row_was_good = convert_foo(line, &out_key, &out_data);
else if (!strcasecmp(record_type, "bigmsg")) row_was_good = convert_foo(line, &out_key, &out_data);