Example #1
0
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 );
}
Example #2
0
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 );
}
Example #3
0
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 );
}
Example #4
0
/**
 * 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 );
}