home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
cpmug
/
cpmug053.ark
/
ENGLISH.C
< prev
next >
Wrap
C/C++ Source or Header
|
1984-04-29
|
2KB
|
152 lines
/* ENGLISH.C no mod for V 1.43 */
#include "advent.h"
/*
Analyze a two word sentence
*/
english()
{
char *msg;
int type1,type2,val1,val2;
verb=object=motion=0;
type2=val2=-1;
type1=val1=-1;
msg="bad grammar...";
getin();
if(!analyze(word1,&type1,&val1))
return 0;
if(type1==2 && val1==SAY) {
verb=SAY;
object=1;
return 1;
}
if(strcmp(word2,""))
if(!analyze(word2,&type2,&val2))
return 0;
/* check his grammar */
if(type1==3) {
rspeak(val1);
return 0;
}
else if(type2==3) {
rspeak(val2);
return 0;
}
else if(type1==0) {
if(type2==0) {
printf("%s\n",msg);
return 0;
}
else
motion=val1;
}
else if(type2==0)
motion=val2;
else if(type1==1) {
object=val1;
if(type2==2)
verb=val2;
if(type2==1) {
printf("%s\n",msg);
return 0;
}
}
else if(type1==2) {
verb=val1;
if(type2==1)
object=val2;
if(type2==2) {
printf("%s\n",msg);
return 0;
}
}
else
bug(36);
return 1;
}
/*
Routine to analyze a word.
*/
analyze(word,type,value)
char *word;
int *type,*value;
{
int wordval,msg,i;
/* make sure I understand */
if((wordval=vocab(word,0))==-1) {
switch(rand()%3) {
case 0:
msg=60;
break;
case 1:
msg=61;
break;
default:
msg=13;
}
rspeak(msg);
return(0);
}
*type = wordval/1000;
*value = wordval%1000;
return 1;
}
/*
routine to get two words of input
and convert them to lower case
*/
getin()
{
char *cptr,*bptr;
char linebuff[65];
putchar(0x80+'>');
word1[0]=word2[0]='\0';
bptr=linebuff;
gets(linebuff);
skipspc(&bptr);
getword(&bptr,word1);
if(!*bptr)
return;
while(!isspace(*bptr)) {
if(!*bptr++)
return;
}
skipspc(&bptr);
getword(&bptr,word2);
}
/*
Routine to extract one word from a buffer
*/
getword(buff,word)
char **buff,*word;
{
int i;
for(i=0;i<WORDSIZE;++i) {
if(!**buff || isspace(**buff)) {
*word='\0';
return;
}
*word++=tolower(*(*buff)++);
}
*--word='\0';
}
/*
Routine to skip spaces
*/
skipspc(buff)
char **buff;
{
while(isspace(**buff)) ++(*buff);
}