blob: d224bc82e3e081b8bdb30cf1311654356686016e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
#include <defs.h>
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 );
}
}
|