コード例 #1
0
ファイル: caux.c プロジェクト: ABratovic/open-watcom-v2
static void writeAuxInfo( AUX_INFO *info, unsigned index )
{
    hw_reg_set  *regs;
    hw_reg_set  *save_parms;
    char        *save_objname;
    unsigned    len;

    info->index = index;
    save_parms = info->parms;
    save_objname = info->objname;
    if( save_parms != NULL ) {
        len = 0;
        regs = save_parms;
        for(;;) {
            len += sizeof( hw_reg_set );
            if( HW_CEqual( *regs, HW_EMPTY ) ) break;
            ++regs;
        }
        info->parms = PCHSetUInt( len );
    }
    if( save_objname != NULL ) {
        info->objname = PCHSetUInt( strlen( save_objname ) + 1 );
    }
    PCHWriteVar( *info );
    AsmSysPCHWriteCode( info );
    if( save_parms != NULL ) {
        PCHWrite( save_parms, PCHGetUInt( info->parms ) );
    }
    if( save_objname != NULL ) {
        PCHWrite( save_objname, PCHGetUInt( info->objname ) );
    }
    info->parms = save_parms;
    info->objname = save_objname;
}
コード例 #2
0
ファイル: rtfun.c プロジェクト: Ukusbobra/open-watcom-v2
pch_status PCHReadRTFNames( void )
{
    NAME *name;

    for( name = runTimeCodeName; name < &runTimeCodeName[ RTF_LAST ]; ++name ) {
        *name = NameMapIndex( PCHSetUInt( PCHReadUInt() ) );
    }
    return( PCHCB_OK );
}
コード例 #3
0
ファイル: name.c プロジェクト: jossk/open-watcom-v2
NAME NameGetIndex( NAME name )
/****************************/
{
    idname **found;
    idname *pname;

    if( name == NULL ) {
        return( PCHSetUInt( PCH_NULL_INDEX ) );
    }
    pname = NAME_PTR( name );
    found = bsearch( &pname, nameTranslateTable, nameCount, sizeof( idname * ), cmpFindName );
    if( found == NULL ) {
#ifndef NDEBUG
        CFatal( "invalid name passed to NameGetIndex" );
#endif
        return( PCHSetUInt( PCH_ERROR_INDEX ) );
    }
    return( PCHSetUInt( ( found - nameTranslateTable ) + PCH_FIRST_INDEX ) );
}
コード例 #4
0
ファイル: caux.c プロジェクト: ABratovic/open-watcom-v2
AUX_INFO *PragmaGetIndex( AUX_INFO *i )
{
    if( i == NULL ) {
        return( (AUX_INFO *)PCH_NULL_INDEX );
    }
#ifndef NDEBUG
    if( i->index < PCH_FIRST_INDEX ) {
        CFatal( "aux info not assigned an index" );
    }
#endif
    return( PCHSetUInt( i->index ) );
}
コード例 #5
0
ファイル: caux.c プロジェクト: ABratovic/open-watcom-v2
pch_status PCHReadPragmas( void )
{
    unsigned    size;
    unsigned    max_index;
    unsigned    entry_len;
    unsigned    index;
    AUX_ENTRY   *e;
    AUX_ENTRY   *f;
    AUX_ENTRY   *next_f;
    AUX_INFO    *info;

    for( f = AuxList; f != NULL; f = next_f ) {
        next_f = f->next;
        freeAuxInfo( f->info );
        CMemFree( f->info );
        CMemFree( f );
    }
    max_index = PCHReadUInt();
    size = max_index * sizeof( AUX_INFO * );
    infoTranslate = CMemAlloc( size );
    memset( infoTranslate, 0, size );
    // read all aux_info
    for( index = PCH_FIRST_INDEX; index < max_index; ++index ) {
        if( index < PCH_FIRST_USER_INDEX ) {
            info = BuiltinAuxInfo + index - PCH_FIRST_INDEX;
        } else {
            info = CMemAlloc( sizeof( AUX_INFO ) );
        }
        infoTranslate[index] = info;
        readAuxInfo( info );
    }
    // read aux entries
    AuxList = NULL;
    for( ; (entry_len = PCHReadUInt()) != 0; ) {
        e = CMemAlloc( offsetof( AUX_ENTRY, name ) + entry_len + 1 );
        PCHRead( e->name, entry_len + 1 );
        e->info = PragmaMapIndex( PCHSetUInt( PCHReadUInt() ) );
        e->next = AuxList;
        AuxList = e;
    }
    return( PCHCB_OK );
}