}
-#if 0
// export function for a msglist or a fulltext index record
// (both are indexed by a long and the data is arrays of longs)
-void export_msglists(int which_cdb, DBT *in_key, DBT *in_data, DBT *out_key, DBT *out_data) {
+void export_msglist(int which_cdb, DBT *in_key, DBT *in_data) {
int i;
-
- char *table = (which_cdb == CDB_FULLTEXT) ? "FullText" : "Msglist";
+ int num_msgs;
+ long msg;
// records are indexed by a single "long" and contains an array of zero or more "long"s
- // and remember ... "long" is int32_t on the source system
- int32_t in_roomnum;
- long out_roomnum;
- memcpy(&in_roomnum, in_key->data, sizeof(in_roomnum));
- out_roomnum = (long) in_roomnum;
+ long roomnum;
+ memcpy(&roomnum, in_key->data, sizeof(long));
- if (in_key->size != 4) {
- fprintf(stderr, "\033[31m\033[1m *** SOURCE DATABASE IS NOT 32-BIT *** ABORTING *** \033[0m\n");
- abort();
- }
-
- int num_msgs = in_data->size / sizeof(int32_t);
- // printf("\033[32m\033[1m%s: key %ld (%d messages)\033[0m\n", table, out_roomnum, num_msgs);
+ printf("msglist|%ld|", roomnum);
- // the key is a "long"
- out_key->size = sizeof(out_roomnum);
- out_key->data = realloc(out_key->data, out_key->size);
- memcpy(out_key->data, &out_roomnum, sizeof(out_roomnum));
-
- // the data is another array, but a wider type
- out_data->size = sizeof(long) * num_msgs;
- out_data->data = realloc(out_data->data, out_data->size);
-
- int32_t in_msg = 0;
- long out_msg = 0;
- for (i=0; i<num_msgs; ++i) {
- memcpy(&in_msg, (in_data->data + (i * sizeof(int32_t))), sizeof(int32_t));
- out_msg = (long) in_msg;
- memcpy((out_data->data + (i * sizeof(long))), &out_msg, sizeof(long));
- // printf("msg#%ld\n", out_msg);
+ if (in_data->size > 0) {
+ num_msgs = in_data->size / sizeof(long);
+ for (i=0; i<num_msgs; ++i) {
+ memcpy(&msg, (in_data->data + (i * sizeof(long))), sizeof(long));
+ if (i != 0) {
+ printf(",");
+ }
+ printf("%ld", msg);
+ }
}
+ printf("\n");
}
// export function for a visit record
-void export_visits(int which_cdb, DBT *in_key, DBT *in_data, DBT *out_key, DBT *out_data) {
-
- // data
- struct visit_32 *visit32 = (struct visit_32 *)in_data->data;
- out_data->size = sizeof(struct visit);
- out_data->data = realloc(out_data->data, out_data->size);
- struct visit *visit64 = (struct visit *)out_data->data;
-
- // the data (zero it out so it will compress well)
- memset(visit64, 0, sizeof(struct visit));
- visit64->v_roomnum = (long) visit32->v_roomnum;
- visit64->v_roomgen = (long) visit32->v_roomgen;
- visit64->v_usernum = (long) visit32->v_usernum;
- visit64->v_lastseen = (long) visit32->v_lastseen;
- visit64->v_flags = (unsigned) visit32->v_flags;
- strcpy(visit64->v_seen, visit32->v_seen);
- strcpy(visit64->v_answered, visit32->v_answered);
- visit64->v_view = (int) visit32->v_view;
-
- // printf("\033[32m\033[1mVisit: room %10ld, gen %10ld, user %10ld\033[0m\n", visit64->v_roomnum, visit64->v_roomgen, visit64->v_usernum);
-
- // create the key (which is based on the data, so there is no need to convert the old key)
- out_key->size = sizeof(struct visit_index);
- out_key->data = realloc(out_key->data, out_key->size);
- struct visit_index *newvisitindex = (struct visit_index *) out_key->data;
- newvisitindex->iRoomID = visit64->v_roomnum;
- newvisitindex->iRoomGen = visit64->v_roomgen;
- newvisitindex->iUserID = visit64->v_usernum;
+void export_visit(int which_cdb, DBT *in_key, DBT *in_data) {
+
+ struct visit *visit = (struct visit *)in_data->data;
+
+ printf("visit|%ld|%ld|%ld|%ld|%u|%s|%s|%d\n",
+ visit->v_roomnum,
+ visit->v_roomgen,
+ visit->v_usernum,
+ visit->v_lastseen,
+ visit->v_flags,
+ visit->v_seen,
+ visit->v_answered,
+ visit->v_view
+ );
}
+#if 0
// export function for a directory record
void export_dir(int which_cdb, DBT *in_key, DBT *in_data, DBT *out_key, DBT *out_data) {
export_user, // CDB_USERS
export_room, // CDB_ROOMS
export_floor, // CDB_FLOORTAB
- zero_function, // CDB_MSGLISTS
- zero_function, // CDB_VISIT
+ export_msglist, // CDB_MSGLISTS
+ export_visit, // CDB_VISIT
zero_function, // CDB_DIRECTORY
zero_function, // CDB_USETABLE
zero_function, // CDB_BIGMSGS