Exemple #1
0
char *MYRTLEXP StrCase( char *str,msCaseTypes type )
  {  int n;

     if ( !str || *str == 0 ) return str;

     switch( type ){
       case      mscLower: StrLwr( str ); break;
       case      mscUpper: StrUpr( str ); break;
       case mscCapitalize: StrLwr( str );
                           str[0] = ToUpper(str[0]);
                        break;
       case    mscUpLower: for ( n = 0; str[n]; n++ )
                             if ( isLower(str[n]) ) return str;
                           return StrCase( str,mscLower );
       case    mscLoUpper: for ( n = 0; str[n]; n++ )
                             if ( isUpper(str[n]) ) return str;
                           return StrCase( str,mscUpper );
       case     mscInvert: for ( n = 0; str[n]; n++ )
                             if ( isUpper(str[n]) )
                               str[n] = ToLower(str[n]);
                              else
                               str[n] = ToUpper(str[n]);
                        break;
     }
 return str;
}
Exemple #2
0
int CLabel::SearchLocal( char *oname, char *loname )
{
    //		object name search ( for local )
    //
    int hash, hash2;
    if (cur == 0) return -1;
    
    hash = StrCase(oname);
    hash2 = GetHash(loname);
    if (*oname != 0) {
        std::pair<LabelMap::iterator, LabelMap::iterator> r = labels.equal_range( oname );
        for(LabelMap::iterator it = r.first; it != r.second; ++it) {
            LABOBJ *lab = mem_lab + it->second;
            if (lab->flag >= 0 && lab->eternal) {
                return it->second;
            }
        }
        
        std::pair<LabelMap::iterator, LabelMap::iterator> r2 = labels.equal_range( loname );
        for(LabelMap::iterator it = r2.first; it != r2.second; ++it) {
            LABOBJ *lab = mem_lab + it->second;
            if (lab->flag >= 0 && !lab->eternal) {
                return it->second;
            }
        }
    }
    return -1;
}
Exemple #3
0
int CLabel::Regist( char *name, int type, int opt, char const *filename, int line )
{
    if ( name[0]==0 ) return -1;
    if ( cur>=maxlab ) {				// ラベルバッファ拡張
        LABOBJ *tmp;
        int i,oldsize;
        oldsize = sizeof(LABOBJ)*maxlab;
        maxlab += def_maxlab;
        tmp = (LABOBJ *)malloc( sizeof(LABOBJ)*maxlab );
        for(i=0;i<maxlab;i++) { tmp[i].flag = -1; }
        memcpy( (char *)tmp, (char *)mem_lab, oldsize );
        free( mem_lab );
        mem_lab = tmp;
    }
    
    int label_id = cur;
    LABOBJ *lab=&mem_lab[cur++];
    lab->flag = 1;
    lab->type = type;
    lab->opt  = opt;
    lab->eternal = 0;
    lab->ref = 0;
    lab->name = RegistSymbol( name );
    lab->data = NULL;
    lab->data2 = NULL;
    lab->hash = StrCase( lab->name );
    lab->rel = NULL;
    lab->init = LAB_INIT_NO;
    lab->typefix = LAB_TYPEFIX_NONE;
    SetDefinition(label_id, filename, line);
    
    labels.insert(std::make_pair(lab->name, label_id));
    return label_id;
}
Exemple #4
0
int CLabel::Search( char *oname )
{
    //		object name search
    //
    if (cur==0) return -1;
    
    //int hash =
    StrCase( oname );
    if (*oname != 0) {
        std::pair<LabelMap::iterator, LabelMap::iterator> r = labels.equal_range( oname );
        for(LabelMap::iterator it = r.first; it != r.second; ++it) {
            LABOBJ *lab = mem_lab + it->second;
            if ( lab->flag >= 0 ) {
                return it->second;
            }
        }
    }
    return -1;
}