//------------------------------------------------------------ static void writeDLP(BookCaseDB &db, info_lib *mmdb, const char *bcname, const char *thisBook, DBCursor &dlp_cursor, hashTable<CC_String,BTCollectable> &node_tab) { DBTable *out = db.DB::table(DATABASE_STDIO, DLP_CODE, 1, DB::CREATE); const char *aBook; const char *nodeLoc; int line_num; const char *toc_file_name; hashTable<CC_String, int> link_table(hash_func); int record_pos = dlp_cursor.tell(); // create the link table while(dlp_cursor.next(STRING_CODE, &aBook, STRING_CODE, &nodeLoc, INTEGER_CODE, &line_num, STRING_CODE, &toc_file_name, NULL)){ if(strcmp(aBook, thisBook) != 0){ /* book id has changed! We're done... */ dlp_cursor.undoNext(); break; } CC_String *key = new CC_String ( nodeLoc ); link_table.insertKeyAndValue( key, new int(line_num) ); #ifdef FISH_DEBUG // DBUG_PRINT("DLP", ("DLP Entry: O:%s\n", nodeOID)); #endif } checkTocLink( toc_file_name, link_table, node_tab ); /* throw exception if unresolved TOC links are found */ link_table.clearAndDestroy(); dlp_cursor.seekToRec( record_pos ); out->start_list(); while ( dlp_cursor.next( STRING_CODE, &aBook, STRING_CODE, &nodeLoc, INTEGER_CODE, &line_num, STRING_CODE, &toc_file_name, NULL)) { if(strcmp(aBook, thisBook) != 0){ /* book id has changed! We're done... */ dlp_cursor.undoNext(); break; } const char *nodeOID = to_oid(mmdb, bcname, nodeLoc); out->insert_untagged(OID_CODE, nodeOID, NULL); #ifdef FISH_DEBUG DBUG_PRINT("DLP", ("DLP Entry: O:%s\n", nodeOID)); #endif } out->end_list(); /* exception thrown in this if failed */ delete out; }