예제 #1
0
static segment_id AddSeg( const char *segname, const char *class_name, int segtype )
{
    seg_name        *seg;
    user_seg        *useg, **lnk;
    hw_reg_set      reg;
    const char      *p;
    size_t          len;

    len = strlen( segname ) + 1;
    for( seg = &Predefined_Segs[0]; seg->name != NULL; seg++ ) {
        if( memcmp( segname, seg->name, len ) == 0 ) {
            return( seg->segid );
        }
    }
    HW_CAsgn( reg, HW_EMPTY );
    for( p = segname; *p != '\0'; ++p ) {
        if( *p == ':' ) {
            reg = PragRegName( segname, p - segname );
            segname = p + 1;
            len = strlen( segname ) + 1;
            break;
        }
    }
    for( lnk = &userSegments; (useg = *lnk) != NULL; lnk = &useg->next ) {
        if( memcmp( segname, useg->name, len ) == 0 ) {
            return( useg->segid ); /* was return( segment ) */
        }
    }
    useg = AllocUserSeg( segname, class_name, segtype );
    useg->next = *lnk;
    useg->pegged_register = reg;
    *lnk = useg;
    return( useg->segid );
}
예제 #2
0
static segment_id AddSeg( const char *segname, const char *class_name, int segtype )
{
    int             i;
    user_seg        *useg, **lnk;
#if _INTEL_CPU
    hw_reg_set      reg;
    const char      *p;
#endif
    size_t          len;

    len = strlen( segname ) + 1;
    for( i = 0; i < CArraySize( Predefined_Segs ); i++ ) {
        if( memcmp( segname, Predefined_Segs[i].name, len ) == 0 ) {
            return( Predefined_Segs[i].segid );
        }
    }
#if _INTEL_CPU
    HW_CAsgn( reg, HW_EMPTY );
    for( p = segname; *p != '\0'; ++p ) {
        if( *p == ':' ) {
            reg = PragRegName( segname, p - segname );
            segname = p + 1;
            len = strlen( segname ) + 1;
            break;
        }
    }
#endif
    for( lnk = &userSegments; (useg = *lnk) != NULL; lnk = &useg->next ) {
        if( memcmp( segname, useg->name, len ) == 0 ) {
            return( useg->segid ); /* was return( segment ) */
        }
    }
    useg = AllocUserSeg( segname, class_name, segtype );
    useg->next = *lnk;
#if _INTEL_CPU
    useg->pegged_register = reg;
#endif
    *lnk = useg;
    return( useg->segid );
}
예제 #3
0
static int AddSeg( char *segname, char *class_name, int segtype )
{
    struct seg_name     *seg;
    struct user_seg     *useg, **lnk;
    hw_reg_set          reg;
    char                *p;

    for( seg = &Predefined_Segs[0]; seg->name; seg++ ) {
        if( strcmp( segname, seg->name ) == 0 ) {
            return( seg->segment );
        }
    }
    HW_CAsgn( reg, HW_EMPTY );
    p = segname;
    for( ;; ) {
        if( *p == '\0' ) break;
        if( *p == ':' ) {
            *p = '\0';
            reg = PragRegName( segname );
            *p = ':';
            segname = p + 1;
            break;
        }
        ++p;
    }
    lnk = &UserSegments;
    while( (useg = *lnk) != NULL ) {
        if( strcmp( segname, useg->name ) == 0 ) {
            return( useg->segment ); /* 11-mar-93 - was return( segment ) */
        }
        lnk = &useg->next;
    }
    useg = AllocUserSeg( segname, class_name, segtype );
    useg->next = *lnk;
    useg->pegged_register = reg;
    *lnk = useg;
    return( useg->segment );
}