home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / languages / tcl / expect / expect-4.7 / example / chesslib2.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-04-20  |  1.3 KB  |  85 lines

  1. /* testlib.c - test expectlib */
  2.  
  3. #include <stdio.h>
  4. #include "expect.h"
  5.  
  6. timedout()
  7. {
  8.     fprintf(stderr,"timed out\n");
  9.     exit(-1);
  10. }
  11.  
  12. char move[100];
  13.  
  14. read_first_move(fp)
  15. FILE *fp;
  16. {
  17.     if (EXP_TIMEOUT == exp_fexpectl(fp,
  18.                 exp_glob,"first\r\n1.*\r\n",0,
  19.                 exp_end)) {
  20.         timedout();
  21.     }
  22.     sscanf(exp_match,"%*s 1. %s",move);
  23. }
  24.  
  25. /* moves and counter-moves are printed out in different formats, sigh... */
  26.  
  27. read_counter_move(fp)
  28. FILE *fp;
  29. {
  30.     switch (exp_fexpectl(fp,exp_glob,"*...*\r\n",0, exp_end)) {
  31.     case EXP_TIMEOUT: timedout();
  32.     case EXP_EOF: exit(-1);
  33.     }
  34.  
  35.     sscanf(exp_match,"%*s %*s %*s %*s ... %s",move);
  36. }
  37.  
  38. read_move(fp)
  39. FILE *fp;
  40. {
  41.     switch (exp_fexpectl(fp,exp_glob,"*...*\r\n*.*\r\n",0,exp_end)) {
  42.     case EXP_TIMEOUT: timedout();
  43.     case EXP_EOF: exit(-1);
  44.     }
  45.  
  46.     sscanf(exp_match,"%*s %*s ... %*s %*s %s",move);
  47. }
  48.  
  49. send_move(fp)
  50. FILE *fp;
  51. {
  52.     fprintf(fp,move);
  53. }
  54.  
  55. main(){
  56.     FILE *fp1, *fp2;
  57.     int ec;
  58.  
  59. /*    exp_is_debugging = 1;*/
  60.     exp_loguser = 1;
  61.     exp_timeout = 3600;
  62.  
  63.     if (0 == (fp1 = exp_popen("chess"))) {
  64.         printf("exp_popen failed\n");
  65.         exit();
  66.     }
  67.  
  68.     if (0 > exp_fexpectl(fp1,exp_glob,"Chess\r\n",0,exp_end)) exit();
  69.     fprintf(fp1,"first\r");
  70.  
  71.     read_first_move(fp1);
  72.  
  73.     fp2 = exp_popen("chess");
  74.  
  75.     exp_fexpectl(fp2,exp_glob,"Chess\r\n",0,exp_end);
  76.  
  77.     for (;;) {
  78.         send_move(fp2);
  79.         read_counter_move(fp2);
  80.  
  81.         send_move(fp1);
  82.         read_move(fp1);
  83.     }
  84. }
  85.