


int fog_handle;


string fog_fleschlevel(int level)
{

 if(level>900) return("Grade 5");
 else
 if(level>800) return("Grade 6");
 else 
 if(level>700) return("Grade 7");
 else
 if(level>600) return("Grade 8-9 (Jr. High)");
 else
 if(level>500) return("Grade 10-12 (Sr. High)");
 else
 if(level>300) return("College student");
 else          return("College graduate");
}




int fog_tolower(int c)
{
 if(c>='A' && c<='Z') c='a'+c-'A';
 return(c);
}



int fog_isalpha(int c)
{
 return((c>='A' && c<='Z')||(c>='a' && c<='z'));
}



int fog_istermpunc(int c)
{
 if(c=='.' || c=='?' || c=='!' ) return(1);
 else                            return(0);
}


int fog_isvowel(int ch)
{
 int c;

 c=fog_tolower(ch);
 if(c=='a' || c=='e' || c=='i' || c=='o' || c=='u' || c=='y') return(1);
 else                                                         return(0);
}


int fog_isconsonant(int c)
{
 if(fog_isalpha(c) && !(fog_isvowel(c))) return(1);
 else                                    return(0);
}


int fog_div_round(int n1,int n2)
{
 if(n2==0) return(0);
 else      return((n1+n2-1)/n2);
}



int fog_parseword(string & word)
{                  
 int syl = 1;
 int i = 0;
 int len;


 len=slen(word);
 if(len==0) return(0);
 len-=3;
 
 while(i<=len)
 {   
  if(fog_isvowel(schar(word,i)) && 
     fog_isconsonant(schar(word,i+1)) && 
     fog_isvowel(schar(word,i+2))) 
  {
   syl++;
  }
  else
  if(i<len)
  {  
   if(fog_isvowel(schar(word,i)) && 
      fog_isconsonant(schar(word,i+1)) && 
      fog_isconsonant(schar(word,i+2)) && 
      fog_isvowel(schar(word,i+3)))
   {
    syl++;
    i++;
   }
   if(fog_isvowel(schar(word,i)) && 
      fog_isconsonant(schar(word,i+1)) && 
      fog_isconsonant(schar(word,i+2)) && 
      fog_isconsonant(schar(word,i+3)))
   {
    syl++;
    i+=2;
   }
  }
  i++;
 } 
 return(syl);
}





int fog_command(int subcode,int all)
{
 int    bm1;
 int    bm2;
 string s;
 int    c;
 int    numlet=0;     
 int    numsyl =0;     
 int    numwd =0;      
 int    numsent = 0;   
 int    syl;        
 int    num1 =0;       
 int    num2 =0;       
 int    num3 = 0;      
 int    wps10;
 int    lpw10;
 int    spw10;
 int    fog10;
 int    flesch10; 
 string word="";



 if(!zoneorder())
 {
  s="{FOG_01}";
  translate(s);
  errorbox(s);
 }

 bm1=bmcreate("fogbm1");
 bm2=bmcreate("fogbm2");
 setbmtozone(bm1, bm2);


 while(bmcmp(bm1,bm2)<0)
 {
  c=bmchar(bm1);

  if(fog_isalpha(c))
  {
   numlet++; 
   word=word+chars(c);
  }
  else
  {
   if(fog_istermpunc(c))
   {  
    numsent++;
   }

   if((syl=fog_parseword(word))!=0)
   {
    word="";
    numwd++;
    numsyl+=syl; 
    if(syl==1)
    {
     num1++;
    }
    if(syl==2)
    {
     num2++;
    }
    if(syl>2)
    {
     num3++;
    }
   }
  }

  if(!bmmove(bm1, 1, 0)) break;
 }

 bmdelete(bm1);
 bmdelete(bm2);

 wps10=fog_div_round(numwd*10,numsent);
 lpw10=fog_div_round(numlet*10,numwd);
 spw10=fog_div_round(numsyl*10,numwd);
        
 fog10=fog_div_round(400*num3,numwd) + fog_div_round(4*numwd,numsent);
        
 flesch10=fog_div_round(206835-(wps10*102)-(spw10*8460),100);

 writeicon(fog_handle,3,itos(numlet));
 writeicon(fog_handle,5,itos(numsyl));
 writeicon(fog_handle,6,itos(numwd));
 writeicon(fog_handle,21,itos(numsent));
 writeicon(fog_handle,7,itos(lpw10/10));
 writeicon(fog_handle,9,itos(spw10/10));
 writeicon(fog_handle,11,itos(wps10/10));
 writeicon(fog_handle,13,itos(num1));
 writeicon(fog_handle,15,itos(fog10/10));
 writeicon(fog_handle,17,itos(flesch10/10));
 writeicon(fog_handle,19,fog_fleschlevel(flesch10));

 display_window(fog_handle, 0, 1+2);

 return(0);
}





void main(void)
{
 fog_handle = create_window("fog_main");

 script_menu_initialise();
 addentry_menu(script_handle,"fog_command","","","","{FOG_00}");
}

