summaryrefslogtreecommitdiff
path: root/lib/ultralib/src/voice/voicecheckword.c
blob: 05c2a59e0fe4eed187d95a35ea603c5786069f4c (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
#include "PR/os_internal.h"
#include "io/controller.h"
#include "PR/os_voice.h"

s32 osVoiceCheckWord(u8* word) {
    s32 k;
    s32 ret = 0;
    u16 sjis;
    u16 old = 0;

    for (k = 0; word[k] != 0; k += 2) {
        sjis = (word[k] << 8) + word[k + 1];
        if (((sjis != 'ー') && (sjis < 'ぁ')) || ((sjis > 'ん') && (sjis < 'ァ')) || (sjis == 0x837F) ||
            (sjis > 'ヶ')) {
            ret = CONT_ERR_VOICE_WORD;
        } else if ((k == 0) &&
                   ((sjis == 'ー') || (sjis == 'ん') || (sjis == 'っ') || (sjis == 'ゎ') || (sjis == 'ン') ||
                    (sjis == 'ッ') || (sjis == 'ヮ') || (sjis == 'ヵ') || (sjis == 'ヶ'))) {
            ret = CONT_ERR_VOICE_WORD;
        } else if (((sjis == 'ぁ') || (sjis == 'ァ')) && (old != 'ふ') && (old != 'フ') && (old != 'ヴ')) {
            ret = CONT_ERR_VOICE_WORD;
        } else if (((sjis == 'ぃ') || (sjis == 'ィ')) && (old != 'う') && (old != 'て') && (old != 'で') &&
                   (old != 'ふ') && (old != 'ウ') && (old != 'テ') && (old != 'デ') && (old != 'フ') && (old != 'ヴ')) {
            ret = CONT_ERR_VOICE_WORD;
        } else if (((sjis == 'ぅ') || (sjis == 'ゥ')) && (old != 'と') && (old != 'ど') && (old != 'ふ') &&
                   (old != 'ト') && (old != 'ド') && (old != 'フ') && (old != 'ヴ')) {
            ret = CONT_ERR_VOICE_WORD;
        } else if (((sjis == 'ぇ') || (sjis == 'ェ')) && (old != 'う') && (old != 'し') && (old != 'じ') &&
                   (old != 'ち') && (old != 'ぢ') && (old != 'つ') && (old != 'ふ') && (old != 'ウ') && (old != 'シ') &&
                   (old != 'ジ') && (old != 'チ') && (old != 'ヂ') && (old != 'ツ') && (old != 'フ') && (old != 'ヴ')) {
            ret = CONT_ERR_VOICE_WORD;
        } else if (((sjis == 'ぉ') || (sjis == 'ォ')) && (old != 'う') && (old != 'ふ') && (old != 'ウ') &&
                   (old != 'フ') && (old != 'ヴ')) {
            ret = CONT_ERR_VOICE_WORD;
        } else if (((sjis == 'ゃ') || (sjis == 'ゅ') || (sjis == 'ょ') || (sjis == 'ャ') || (sjis == 'ュ') ||
                    (sjis == 'ョ')) &&
                   (old != 'き') && (old != 'し') && (old != 'ち') && (old != 'に') && (old != 'ひ') && (old != 'み') &&
                   (old != 'り') && (old != 'ぎ') && (old != 'じ') && (old != 'ぢ') && (old != 'び') && (old != 'ぴ') &&
                   (old != 'キ') && (old != 'シ') && (old != 'チ') && (old != 'ニ') && (old != 'ヒ') && (old != 'ミ') &&
                   (old != 'リ') && (old != 'ギ') && (old != 'ジ') && (old != 'ヂ') && (old != 'ビ') && (old != 'ピ') &&
                   (old != 'ヴ')) {
            ret = CONT_ERR_VOICE_WORD;
        } else if ((sjis == 'ー') && ((old == 'ん') || (old == 'っ') || (old == 'ン') || (old == 'ッ'))) {
            ret = CONT_ERR_VOICE_WORD;
        } else if (((sjis == 'ん') || (sjis == 'ン')) && ((old == 'ん') || (old == 'ン'))) {
            ret = CONT_ERR_VOICE_WORD;
        } else if (((old == 'っ') || (old == 'ッ')) &&
                   ((sjis == 'ー') || (sjis == 'あ') || (sjis == 'い') || (sjis == 'う') || (sjis == 'え') ||
                    (sjis == 'お') || (sjis == 'な') || (sjis == 'に') || (sjis == 'ぬ') || (sjis == 'ね') ||
                    (sjis == 'の') || (sjis == 'ま') || (sjis == 'み') || (sjis == 'む') || (sjis == 'め') ||
                    (sjis == 'も') || (sjis == 'や') || (sjis == 'ゆ') || (sjis == 'よ') || (sjis == 'ら') ||
                    (sjis == 'り') || (sjis == 'る') || (sjis == 'れ') || (sjis == 'ろ') || (sjis == 'わ') ||
                    (sjis == 'ゐ') || (sjis == 'ゑ') || (sjis == 'を') || (sjis == 'ん') || (sjis == 'ぁ') ||
                    (sjis == 'ぃ') || (sjis == 'ぅ') || (sjis == 'ぇ') || (sjis == 'ぉ') || (sjis == 'ゃ') ||
                    (sjis == 'ゅ') || (sjis == 'ょ') || (sjis == 'っ') || (sjis == 'ゎ')

                    || (sjis == 'ア') || (sjis == 'イ') || (sjis == 'ウ') || (sjis == 'エ') || (sjis == 'オ') ||
                    (sjis == 'ナ') || (sjis == 'ニ') || (sjis == 'ヌ') || (sjis == 'ネ') || (sjis == 'ノ') ||
                    (sjis == 'マ') || (sjis == 'ミ') || (sjis == 'ム') || (sjis == 'メ') || (sjis == 'モ') ||
                    (sjis == 'ヤ') || (sjis == 'ユ') || (sjis == 'ヨ') || (sjis == 'ラ') || (sjis == 'リ') ||
                    (sjis == 'ル') || (sjis == 'レ') || (sjis == 'ロ') || (sjis == 'ワ') || (sjis == 'ヰ') ||
                    (sjis == 'ヱ') || (sjis == 'ヲ') || (sjis == 'ン') || (sjis == 'ァ') || (sjis == 'ィ') ||
                    (sjis == 'ゥ') || (sjis == 'ェ') || (sjis == 'ォ') || (sjis == 'ャ') || (sjis == 'ュ') ||
                    (sjis == 'ョ') || (sjis == 'ッ') || (sjis == 'ヮ'))) {
            ret = CONT_ERR_VOICE_WORD;
        }

        if (ret != 0) {
            return ret;
        } else {
            old = sjis;
        }
    }

    if ((sjis == 'っ') || (sjis == 'ッ')) {
        ret = CONT_ERR_VOICE_WORD;
    }

    return ret;
}