_WCRTLINK char *getenv( const char *name ) { char **envp; char *p; /*** Find the environment string ***/ __ptr_check( name, 0 ); envp = _RWD_environ; if( (envp != NULL) && (name != NULL) ) { for( ; p = *envp; ++envp ) { const char *s = name; while( *p != '\0' ) { /* simple check is sufficient for p, not s */ if ( _mbterm( s ) ) { if( *p == '=' ) return( p + 1 ); break; } if ( _mbctoupper( _mbsnextc( p ) ) != _mbctoupper( _mbsnextc( s ) ) ) break; p = _mbsinc( p ); /* skip over character */ s = _mbsinc( s ); /* skip over character */ } } } return( NULL ); /* not found */ }
_WCRTLINK unsigned char _FFAR *_NEARFAR(_mbstok_r,_fmbstok_r)( unsigned char _FFAR *str, const unsigned char _FFAR *delim, unsigned char _FFAR **ptr ) { unsigned char _FFAR * string_start; int count; int char_len; // if( !__IsDBCS ) return( strtok( str, delim ) ); if( str == NULL ) { str = *ptr; if( str == NULL ) return( NULL ); } /*** Skip characters until we reach one not in 'delim' ***/ #ifdef __FARFUNC__ while( !_fmbterm(str) && _fmbschr(delim,_fmbsnextc(str))!=NULL ) str = _fmbsinc( str ); #else while( !_mbterm(str) && _mbschr(delim,_mbsnextc(str))!=NULL ) str = _mbsinc( str ); #endif if( _NEARFAR(_mbterm,_fmbterm)(str) ) return( NULL ); string_start = str; /*** Skip characters until we reach one in 'delim' ***/ #ifdef __FARFUNC__ while( !_fmbterm(str) && _fmbschr(delim,_fmbsnextc(str))==NULL ) str = _fmbsinc( str ); #else while( !_mbterm(str) && _mbschr(delim,_mbsnextc(str))==NULL ) str = _mbsinc( str ); #endif /*** Handle the next token ***/ if( !_NEARFAR(_mbterm,_fmbterm)(str) ) { char_len = _NEARFAR(_mbclen,_fmbclen)( str ); /* get char length */ for( count=0; count<char_len; count++ ) str[count] = '\0'; /* replace delim with NULL */ str += char_len; /* start of next token */ *ptr = str; /* save next start */ return( string_start ); /* return next token start */ } else { *ptr = NULL;/* no more tokens */ return( string_start ); /* return same token */ } }
_WCRTLINK unsigned char _FFAR *_NEARFAR(_mbschr,_fmbschr)( const unsigned char _FFAR *string, unsigned int ch ) { char mbc[MB_LEN_MAX+1]; // if( !__IsDBCS && !ch&0xFF00 ) return( strchr( string, ch ) ); /*** Search for the specified character ***/ _mbvtop( ch, mbc ); mbc[_mbclen(mbc)] = '\0'; #ifdef __FARFUNC__ while( !_fmbterm(string) && _fmbccmp(string,mbc)!=0 ) string = _fmbsinc( string ); /* skip over character */ #else while( !_mbterm(string) && _mbccmp(string,mbc)!=0 ) string = _mbsinc( string ); /* skip over character */ #endif /*** Return character address, or NULL if not found ***/ if( !_NEARFAR(_mbterm,_fmbterm)(string) || ch==0 ) return( (unsigned char _FFAR*) string ); else return( NULL ); }