/*This does a really crappy job of
suggesting spellings.  Write a better
one for fun.
*/

U8 *SuggestMatchForm(U8 *src)
{
        I64 ch, ch1 = 0;
        U8 *res = MStrUtil(src, SUF_TO_UPPER), *dst;

        dst = src = res;
        while (ch = *src++)
        {
                if (!StrOcc("AEIOU", ch))
                {
                        if (ch == 'C')
                                ch = 'K';
                        if (ch == 'Z')
                                ch = 'S';
                        if (ch != ch1) //double chars to single
                                *dst++ = ch;
                }
                ch1 = ch;
        }
        *dst = 0;

        return res;
}

/*Format of word list entry:
        U8 ACD_WORD_CHAR
        U8 word[] with terminating zero
        I16 block; //definition offset in ::/System/AutoComplete/ACDefs.DATA
*/

Bool SuggestSpelling(U8 *word)
{
        U8      *dict = acd.word_list,
                *pf = SuggestMatchForm(word),
                *wf;
        I64  len = StrLen(pf),
                 num_cols = Fs->win_width / 16,
                 col = 0;

        if (len)
                while (*dict)
                {
                        wf = SuggestMatchForm(dict + 1);
                        if (!StrNCompare(pf, wf, len))
                        {
                                "%16s", dict + 1;
                                if (++col >= num_cols)
                                {
                                        col=0;
                                        '\n';
                                }
                        }
                        Free(wf);
                        dict += StrLen(dict + 1) + 4;
                }
        Free(pf);
        '\n';

        return ToBool(len);
}

U0 SuggestSpellingDemo()
{
        U8 *w;

        while (TRUE)
        {
                w = StrGet("Word:");
                if (*w) {
                        SuggestSpelling(w);
                        Free(w);
                }
                else
                        break;
        }
}

//If you "System Include" this file, it will
//install this command as a hot-key.

U0 CtrlAltL(I64)
{
//ac.cur_word is only set if AutoComplete
        //is running.
        if (!TaskValidate(ac.task))
        {
                AutoComplete(ON);
                Sleep(500);
        }
        PopUp("if (SuggestSpelling(ac.cur_word)) View;");
}

if (Fs != sys_task)
        SuggestSpellingDemo;
else
{
        CtrlAltCBSet('L', &CtrlAltL, "Cmd /Suggest Spelling");
//Appears in the System Task Window
        "<CTRL-ALT-l> installed\n";
}

//Note: It would be more appropriate
//to define a key in MyPutKey().