home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / GAMES / colossal.lzh / english.c < prev    next >
Text File  |  1991-06-06  |  3KB  |  172 lines

  1.  
  2. /*    program ENGLISH.C                    *\
  3. \*    WARNING: "advent.c" allocates GLOBAL storage space by    *\
  4. \*        including "advdef.h".                *\
  5. \*        All other modules use "advdec.h".        */
  6.  
  7.  
  8. #include    "stdio.h"    /* drv = 1.1st file 2.def 3.A    */
  9. #include    "advent.h"
  10. #include    "advdec.h"
  11.  
  12. extern    char    *fgets();
  13.  
  14.  
  15. /*
  16.     Analyze a two word sentence
  17. */
  18. english()
  19. {
  20.  
  21.     char    *msg;
  22.     int    type1, type2, val1, val2;
  23.  
  24.     verb = object = motion = 0;
  25.     type2 = val2 = -1;
  26.     type1 = val1 = -1;
  27.     msg = "bad grammar...";
  28.  
  29.     getwords();
  30.  
  31.     if (!(*word1))
  32.         return(0);        /* ignore whitespace    */
  33.     if (!analyze(word1, &type1, &val1))    /* check word1    */
  34.         return(0);        /* didn't know it    */
  35.  
  36.     if (type1 == 2 && val1 == SAY) {
  37.         verb = SAY;    /* repeat word & act upon if..    */
  38.         object = 1;
  39.         return(1);
  40.     }
  41.  
  42.     if (*word2)
  43.         if (!analyze(word2, &type2, &val2))
  44.             return(0);    /* didn't know it    */
  45.  
  46.     /* check his grammar */
  47.     if ((type1 == 3) && (type2 == 3) && \
  48.         (val1 == 51) && (val2 == 51)) {
  49.         outwords();
  50.         return(0);
  51.     }
  52.     else if (type1 == 3) {
  53.         rspeak(val1);
  54.         return(0);
  55.     }
  56.     else if (type2 == 3) {
  57.         rspeak(val2);
  58.         return(0);
  59.     }
  60.     else if (type1 == 0) {
  61.         if (type2 == 0) {
  62.             printf("%s\n", msg);
  63.             return(0);
  64.         }
  65.         else
  66.             motion = val1;
  67.     }
  68.     else if (type2 == 0)
  69.         motion = val2;
  70.     else if (type1 == 1) {
  71.         object = val1;
  72.         if (type2 == 2)
  73.             verb = val2;
  74.         if (type2 == 1) {
  75.             printf("%s\n", msg);
  76.             return(0);
  77.         }
  78.     }
  79.     else if (type1 == 2) {
  80.         verb = val1;
  81.         if (type2 == 1)
  82.             object = val2;
  83.         if (type2 == 2) {
  84.             printf("%s\n", msg);
  85.             return(0);
  86.         }
  87.     }
  88.     else
  89.         bug(36);
  90.     return(1);
  91. }
  92.  
  93.  
  94. /*
  95.         Routine to analyze a word.
  96. */
  97. analyze(word, type, value)
  98. char    *word;
  99. int    *type, *value;
  100. {
  101.     int    wordval, msg;
  102.  
  103.     /* make sure I understand */
  104.     if ((wordval = vocab(word, 0)) == -1) {
  105.         switch(rand() % 3) {
  106.         case 0:
  107.             msg = 60;
  108.             break;
  109.         case 1:
  110.             msg = 61;
  111.             break;
  112.         default:
  113.             msg = 13;
  114.         }
  115.         rspeak(msg);
  116.         return(0);
  117.     }
  118.     *type = wordval/1000;
  119.     *value = wordval%1000;
  120.     return(1);
  121. }
  122.  
  123. /*
  124.     retrieve input line (max 80 chars), convert to lower case
  125.      & rescan for first two words (max. WORDSIZE-1 chars).
  126. */
  127. getwords()
  128. {
  129.     char    words[80], *wptr;
  130.  
  131.     fputc('>', stdout);
  132.     word1[0] = word2[0] = '\0';
  133.     fgets(words, 80, stdin);
  134.     wptr = words;
  135.     while (*wptr = tolower(*wptr))
  136.         ++wptr;
  137.     sscanf(words, "%19s %19s", word1, word2);
  138.     if (dbugflg)
  139.         printf("WORD1 = %s, WORD2 = %s\n", word1, word2);
  140.     return 0;
  141. }
  142.  
  143. /*
  144.     output adventure word list (motion/0xxx & verb/2xxx) only
  145.     6 words/line pausing at 20th line until keyboard active
  146. */
  147. outwords()
  148. {
  149.     int    i, j, line;
  150.     char    words[80];
  151.  
  152.     j = line = 0;
  153.     for (i = 0; i < MAXWC; ++i) {
  154.         if ((wc[i].acode < 1000) || ((wc[i].acode < 3000) && \
  155.                                      (wc[i].acode > 1999))) {
  156.             printf("%-12s", wc[i].aword);
  157.             if ((++j == 6) || (i == MAXWC-1)) {
  158.                 j = 0;
  159.                 fputc('\n', stdout);
  160.                 if (++line == 20) {
  161.                     line = 0;
  162.                     printf("\n\007Enter <RETURN>");
  163.                     printf(" to continue\n\n");
  164.                     fgets(words, 80, stdin);
  165.                 }
  166.             }
  167.         }
  168.     }
  169. }
  170.  
  171.  
  172.