U8 *RandVocabWord()
{
  I64 i;
  U8 *ptr;
  if (!acd.num_words)
    return NULL;
  i=RandU32%acd.num_words;
  ptr=acd.word_lst;
  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=GetKey(,TRUE);
      DocBottom;
      if ('1'<=ch<='4') {
        '\n';
        if (ch-'1'==num) {
          "$LTGREEN$Correct\n$FG$";
          Snd(74);
        } else {
          "$LTRED$Incorrect\n$FG$";
          Snd(46);
        }
        Sleep(500);
        Snd;
        ACDPopUpDef(right_word);
        break;
      }
    } while (ch!=CH_SHIFT_ESC && ch!=CH_ESC);
    "$LM,0$\n";
  } while (ch!=CH_SHIFT_ESC && ch!=CH_ESC);
}