static walk_result FindModCue( mod_handle mod, void *d ) { DIPHDL( cue, ch ); cue_find *fd = d; unsigned long curr_line; fd->id = 0; fd->ambig = FALSE; fd->match = CMP_NONE; if( mod != NO_MOD && fd->len != 0 ) { WalkFileList( mod, FindCue, fd ); if( fd->id == 0 ) return( WR_CONTINUE ); if( fd->ambig ) { Error( ERR_NONE, LIT( ERR_AMBIG_SRC_FILE ), fd->name, fd->len ); } } fd->found_a_file = TRUE; switch( LineCue( mod, fd->id, CurrGet.li.name.len, 0, ch ) ) { case SR_EXACT: HDLAssign( cue, fd->best_ch, ch ); fd->best_line = CurrGet.li.name.len; return( WR_STOP ); case SR_CLOSEST: curr_line = CueLine( ch ); if( curr_line < CurrGet.li.name.len && curr_line > fd->best_line ) { HDLAssign( cue, fd->best_ch, ch ); fd->best_line = CurrGet.li.name.len; } break; case SR_FAIL: return( WR_FAIL ); } return( WR_CONTINUE ); }
static walk_result CheckOneMod( mod_handle mh, void *_d ) { cue_mod *d = _d; d->mod = mh; if( ModHasInfo( mh, HK_CUE ) == DS_OK ) { WalkFileList( mh, CheckFirstFile, d ); } return( d->found ? WR_STOP : WR_CONTINUE ); }
bool FindFirstCue( mod_handle mod, cue_handle *ch ) { cue_first d; d.dest = ch; d.found = false; if( mod != NO_MOD ) { d.dest = ch; d.found = false; WalkFileList( mod, FindCue, &d ); } return( d.found ); }
/** * WalkModList callback, pass 2. * * @returns WR_CONTINUE * @param mh The module. * @param ignored Pointer to the current module index. */ static walk_result Mod2Callback( mod_handle mh, void *_idx ) { walk_result walkres; int i; int need_trailing_newline = 0; int *idx = (int *)_idx; ++*idx; /* * Linenumbers. */ if( 1 && ModHasInfo( mh, HK_CUE ) == DS_OK ) { printf( "%03d Line Numbers\n" "-----------------\n" "\n", *idx ); i = 0; walkres = WalkFileList( mh, File2Callback, &i ); printf( "\n" "\n" ); need_trailing_newline = 1; } /* * Types */ if( 1 && ModHasInfo( mh, HK_TYPE ) == DS_OK ) { printf( " %03d Types\n" "-----------\n" "\n" "index seg:offset info lang name\n" "---------------------------------------\n", *idx); i = 0; walkres = WalkTypeList( mh, Type2Callback, &i ); printf( "\n" "\n" ); need_trailing_newline = 1; } /* * Symbols. */ if( 1 && ModHasInfo( mh, HK_SYM ) == DS_OK ) { printf( "%03d Symbols\n" "------------\n" "\n", *idx ); i = 0; walkres = WalkSymList( SS_MODULE, &mh, Sym2Callback, &i ); printf( "\n" "\n" ); need_trailing_newline = 1; } if( need_trailing_newline ) { printf( "\n" ); } return( WR_CONTINUE ); }