#include static int text_equal_ascii_nocase( const __mpu_char16_t *text, size_t length, const char *ascii ) { size_t i; size_t ascii_length; if( text == NULL || ascii == NULL ) return( 0 ); ascii_length = strlen( ascii ); if( length != ascii_length ) return( 0 ); for( i = 0; i < length; ++i ) { __mpu_char16_t c = text[i]; unsigned char a = (unsigned char)ascii[i]; if( c >= 'A' && c <= 'Z' ) c = (__mpu_char16_t)(c - 'A' + 'a'); if( a >= 'A' && a <= 'Z' ) a = (unsigned char)(a - 'A' + 'a'); if( c != (__mpu_char16_t)a ) return( 0 ); } return( 1 ); } const char * mcpu_language_name( enum mcpu_language language ) { switch( language ) { case MCPU_LANG_0: return( "0" ); case MCPU_LANG_DIFF: return( "diff" ); case MCPU_LANG_DIFT: return( "dift" ); case MCPU_LANG_ALG: return( "alg" ); case MCPU_LANG_AS: return( "as" ); case MCPU_LANG_AVM: return( "avm" ); case MCPU_LANG_ACS: return( "ACS" ); default: return( "unknown" ); } } int mcpu_language_from_text( const __mpu_char16_t *text, size_t length, enum mcpu_language *language ) { enum mcpu_language candidate; if( text == NULL || language == NULL ) return( -1 ); /* * MCPU_LANG_0 is the initial base language state. It is deliberately * not a valid #lang argument. Every accepted name comes directly from * the internal switched-language table and is matched case-insensitively. */ for( candidate = MCPU_LANG_DIFF; candidate < MCPU_LANG__COUNT; candidate = (enum mcpu_language)(candidate + 1) ) { if( text_equal_ascii_nocase(text, length, mcpu_language_name(candidate)) ) { *language = candidate; return( 0 ); } } return( -1 ); } const char * mcpu_language_config_variable( enum mcpu_language language ) { switch( language ) { case MCPU_LANG_DIFF: return( "MCPU_CPP_DIFF_INCLUDE_PATH" ); case MCPU_LANG_DIFT: return( "MCPU_CPP_DIFT_INCLUDE_PATH" ); case MCPU_LANG_ALG: return( "MCPU_CPP_ALG_INCLUDE_PATH" ); case MCPU_LANG_AS: return( "MCPU_CPP_AS_INCLUDE_PATH" ); case MCPU_LANG_AVM: return( "MCPU_CPP_AVM_INCLUDE_PATH" ); case MCPU_LANG_ACS: return( "MCPU_CPP_ACS_INCLUDE_PATH" ); default: return( NULL ); } } const char * mcpu_language_directory_name( enum mcpu_language language ) { switch( language ) { case MCPU_LANG_DIFF: return( "diff" ); case MCPU_LANG_DIFT: return( "dift" ); case MCPU_LANG_ALG: return( "alg" ); case MCPU_LANG_AS: return( "as" ); case MCPU_LANG_AVM: return( "avm" ); case MCPU_LANG_ACS: return( "acs" ); default: return( NULL ); } }