U8 *RandVocabWord()
{
    I64 i;
    U8 *ptr;

    if (!acd.num_words)
        return NULL;
    i = RandU32%acd.num_words;
    ptr = acd.word_list;
    while (i-- && *ptr == ACD_WORD_CHAR)
        ptr += StrLen(ptr) + 3;
    if (*ptr++ != ACD_WORD_CHAR)
        return NULL;
    else
        return ptr;
}

U0 VocabQuiz()
{
    I64 ch, i, num;
    U8 *right_word, *words[4];

    if (!FileFind(ACD_DEF_FILENAME))
    {
        "Uncompressed dictionary not present.\n";
        return;
    }
    do
    {
        right_word = RandVocabWord;
        for (i = 0; i < 4; i++)
            words[i] = RandVocabWord;
        num = RandU32 & 3;
        words[num] = right_word;

        "$WW,1$$CM-LE,5$$RED$$BK,1$%s$BK,0$:$FG$$LM,4$\n", right_word;
        for (i = 0; i < 4; i++)
            "\n\n$GREEN$$BT-X,\"%d\",LM=\"%d\"$$FG$"
            "$LM,7$%s\n$LM,4$", i + 1, i + 1, ACDDefGet(words[i]);
        "\n\n$LTBLUE$Answer:$FG$";
        do
        {
            ch = KeyGet(, TRUE);
            DocBottom;
            if ('1' <= ch <= '4')
            {
                '\n';
                if (ch - '1' == num)
                {
                    "$LTGREEN$Correct\n$FG$";
                    Sound(74);
                }
                else
                {
                    "$LTRED$Incorrect\n$FG$";
                    Sound(46);
                }
                Sleep(500);
                Sound;
                ACDPopUpDef(right_word);
                break;
            }
        }
        while (ch != CH_SHIFT_ESC && ch != CH_ESC);

        "$LM,0$\n";
    }
    while (ch != CH_SHIFT_ESC && ch != CH_ESC);
}