Files
TempleOS-Rijn/SparrowOS/Demo/SuggestSpelling.CPP
T
2018-09-08 21:45:28 +02:00

92 lines
1.6 KiB
C++

/*
This does a really crappy job of
suggesting spellings. Write a better
one for fun.
*/
U8 *SuggestMatchForm(U8 *src)
{
U8 ch,ch1=0,*result=MStrUtil(src,SUF_TO_UPPER),*dst;
dst=src=result;
while (ch=*src++) {
if (!StrOcc("AEIOU",ch)) {
if (ch=='C') ch='K';
if (ch=='Z') ch='S';
if (ch!=ch1) //F64 chars to single
*dst++=ch;
}
ch1=ch;
}
*dst=0;
return result;
}
/*
Fmt of word list entry:
U8 WSD_WORD_CHAR
U8 word[] with terminating zero
I16 block; //definition offset in ::/SparrowOS/Adam/WordStat/WSDefs.DAT
*/
U0 SuggestSpelling(U8 *pattern)
{
U8 *dict=ws_dict_word_list,
*pf=SuggestMatchForm(pattern),
*wf;
I64 len=StrLen(pf),
num_cols=Fs->win_width/16,
col=0;
while (*dict) {
wf=SuggestMatchForm(dict+1);
if (!StrNCmp(pf,wf,len)) {
"%16s",dict+1;
if (++col==num_cols) {
col=0;
NewLine;
}
}
Free(wf);
dict+=StrLen(dict+1)+4;
}
Free(pf);
NewLine;
}
U0 SuggestSpellingDemo()
{
U8 *w;
while (TRUE) {
w=PmtStr("Word:");
if (*w) {
SuggestSpelling(w);
Free(w);
} else
break;
}
}
/*
If you "Adam Include" this file, it will
install this command as a hot-key.
*/
U0 CtrlAltL(I64)
{
//$LK,"ws_cur_word","MN:ws_cur_word"$ is only set if WordStat
//is running.
PopUp("SuggestSpelling(ws_cur_word);View;");
}
if (Fs!=adam_task)
SuggestSpellingDemo;
else {
SetCtrlAltLetCB('L',&CtrlAltL,"Cmd/Suggest Spelling");
//Appears in the Adam Task Window
"<CTRL-ALT-L> installed\n";
}
//Note: It would be more appropriate
//to define a key in $LK,"MyPutKey","MN:MyPutKey"$().