01 U0 AddBadWord(U8 *word) {
02   word=StrNew(word);
03   U8 *ptr=word;
04   while(*ptr) {
05     *ptr=ToUpper(*ptr);
06     ptr++;
07   }
08   ptr=MStrPrint("BadWord.%s",word);
09   FramePtrAdd(ptr,1);
10   Free(word),Free(ptr);
11 }
12 U8 *BadWordFilter(U8 *str) {
13   U8 *ret=StrNew(str),buf[4096],*ptr;
14   I64 st=0,en;
15 again:
16   while(ret[st]&&!Bt(char_bmp_alpha_numeric,ret[st]))
17    st++;
18   en=st;
19   while(ret[en]&&Bt(char_bmp_alpha_numeric,ret[en])) {
20     buf[en-st]=ToUpper(ret[en]);
21     en++;
22   }
23   buf[en-st]=0;
24   ptr=MStrPrint("BadWord.%s",buf);
25   if(FramePtr(ptr)) {
26     while(st!=en) {
27      ret[st++]="@*&%^&~!"[RandU16&7];
28     }
29   } else
30     st=en;
31   if(ret[st]) 
32    goto again;
33   Free(ptr);
34   return ret;
35 }
36 U0 LoadBadWords() {
37   I64 l=1;
38   U8 *bad;
39   while(bad=DocLineRead("BadWords.TXT",l++)) {
40     AddBadWord(bad);
41     Free(bad);
42   }
43 }
44 LoadBadWords;