home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / DOCTOR.ARC / DOCTOR.C
Encoding:
C/C++ Source or Header  |  2019-04-13  |  5.6 KB  |  251 lines

  1.  
  2. /*
  3.  
  4. ─╧├╘╧╥.├ 
  5.  
  6. - FROM "┴RTIFICIAL ╔NTELLIGENCE IN ├"
  7.   BY ╚ERBERT ╙CHILDT
  8.  
  9. - ADDITIONS BY ╩. ╥. ┴PPLEGATE
  10.  
  11. - PORTED TO ├ ╨OWER 
  12.   18╬OV1987 ┬EN ╨EDERSEN
  13.  
  14. */
  15.  
  16. #INCLUDE <STDIO.H>
  17.  
  18. #DEFINE ═┴╪ 100
  19. #DEFINE ╙╚╧╥╘ 10
  20. #DEFINE ╓┼╥┘╙╚╧╥╘ 2
  21.  
  22. CHAR *RESPONSE[] = █
  23.   "╚OW ARE YOU THIS BEAUTIFUL DAY?",
  24.   "─ID YOU HAVE A HAPPY CHILDHOOD?",
  25.   "─ID YOU HATE YOUR FATHER?",
  26.   "╔ NOT SURE ╔ UNDERSTAND.",
  27.   ""
  28.   ▌;
  29.  
  30. CHAR *TRANS[] = █
  31.   "FINE","─ON'T YOU HAVE ANY PROBLEMS YOU'D LIKE TO DISCUSS?",
  32.   "FEAR","─O YOU THINK YOUR FEARS ARE REALISTIC?",
  33.   "FEARS","─O YOU THINK YOUR FEARS ARE REALISTIC?",
  34.   "AFRAID","─O YOU THINK YOUR FEARS ARE REALISTIC?",
  35.   "SCARED","┴REN'T YOU OVERLY PARANOID ABOUT THIS?",
  36.   "SCARE","┴REN'T YOU OVERLY PARANOID ABOUT THIS?",
  37.   "DEPRESS","─ON'T BE SO NEGATIVE.",
  38.   "DEPRESSION","╫HAT IS DEPRESSING YOU?",
  39.   "DEPRESSED","╫HAT IS DEPRESSING YOU?",
  40.   "WORRY","╔S IT REALLY THAT IMPORTANT?",
  41.   "WORRIED","╔S IT REALLY THAT CRITICAL?",
  42.   "YOU","╠ET'S NOT TALK ABOUT ME.",
  43.   "THINK","╫HY DO YOU THINK THAT?",
  44.   "THOUGHT","╫HY DID YOU THINK THAT?",
  45.   "HATE","╙O YOU HATE SOMETHING - TELL ME MORE.",
  46.   "WHAT","╫HY TO YOU ASK?",
  47.   "WANT","╫HY DO YOU WANT THAT?",
  48.   "WANTED","╫HY DO YOU WANT THAT?",
  49.   "NEED","╫E ALL NEED MANY THINGS - IS THIS SPECIAL?",
  50.   "NEEDED","╫E ALL NEED MANY THINGS - IS THIS SPECIAL?",
  51.   "DESIRE","╫E ALL HAVE DESIRES - IS THIS SPECIAL?",
  52.   "DESIRED","╫E ALL HAVE DESIRES - IS THIS SPECIAL?",
  53.   "WHY","╥EMEMBER, THERAPY IS GOOD FOR YOU.",
  54.   "KNOW","╚OW DO YOU KNOW THAT?",
  55.   "BYE","┘OUR BILL WILL BE MAILED TO YOU.",
  56.   "MURDER","╔ DON'T LIKE KILLING.",
  57.   "PAIN","─O YOU RESENT THIS FACT?",
  58.   "ABUSE","─O YOU RESENT THIS FACT?",
  59.   "ABUSED","─O YOU RESENT THIS FACT?",
  60.   "HURT","─O YOU HAVE RESENTMENT OVER THIS HURT?",
  61.   "GOD","┴RE YOU A RELIGIOUS PERSON?",
  62.   "KILL","╔T IS WRONG TO KILL.",
  63.   "SHAME","┴ND WHY DO YOU FEEL THAT WAY?",
  64.   "SHAMED","┴ND WHY DO YOU FEEL THAT WAY?",
  65.   "JERK","─ON'T EVER CALL ME A JERK!",
  66.   "FUCK","╧BSCENITIES WIROB T YOU NOWHERE!",
  67.   "SHIT","╧BSCENITIES WILL  T YOU NOWHERE!",
  68.   "DAMN","╧BSCENITIES WILL  ET YOU NOWHERE!",
  69.   "SCREW","╧BSCENITIES WIROB ET YOU NOWHERE!",
  70.   "CAN'T","─ON'T BE NEGATIVE - BE POSITIVE.",
  71.   "FAILURE","╙TRIVE FOR SUCCESS.",
  72.   "NEVER","─ON'T BE NEGATIVE - BE POSITIVE",
  73.   "UNHAPPY","╫HY ARE YOU UNHAPPY?",
  74.   "LOVE","╫HY DO YOU FEEL THAT WAY?",
  75.   "LOVED","╫HY DO YOU FEEL THAT WAY?",
  76.   "FEEL","╘ELL ME MORE ABOUT SUCH FEELINGS.",
  77.   "FELT","╘ELL ME MORE ABOUT SUCH FEELINGS.",
  78.   "FEELING","─O YOU ENJOY FEELING",
  79.   "AM","┴RE YOU REALLY",
  80.   "MACHINE","─O MACHINES WORRY YOU?",
  81.   "COMPUTER","┴RE YOU FRIGHTENED BY MACHINES?",
  82.   "CAUSE","╔S THAT THE REAL REASON?",
  83.   "BECAUSE","┴RE YOU CERTAIN?",
  84.   "SORRY","╘HERE'S NO NEED TO APOLOGIZE.",
  85.   "DREAM","╫HAT DOES THAT DREAM SUGGEST TO YOU?",
  86.   "DREAMS","╫HAT DO YOU THINK THAT MEANS?",
  87.   "HELLO","╟REETINGS.  ╨LEASE STATE YOUR PROBLEM.",
  88.   "MAYBE","╫HY THE UNCERTAIN TONE?",
  89.   "ALWAYS","╥EALLY?  ┴LWAYS?",
  90.   "ALIKE","╔N WHAT WAY?",
  91.   "YES","┘OU SEEM QUITE POSITIVE.",
  92.   "NO","╙HOULD YOU REALLY BE SO NEGATIVE",
  93.   "FRIEND","─O YOUR FRIENDS WORRY YOU?"NGTHER","─O YOU HAVE DISTURBING FEELINGS ABOUT YOUR THER?",
  94.   "FATHER","─O YOU EVER RESENT YOUR FATHER?",
  95.   "SISTER","╫HAT SORT OF THOUGHTS DO YOU HAVE ABOUT YOUR SISTER?",
  96.   "SISTERS","─ID ONE SISTER IN PARTICULAR BOTHER YOU?"N
  97.   "BROTHER","┴RE YOU AND YOUR BROTHER CLOSE?",
  98.   "BROTHERS","─ID YOU HAVE PROBLEMS WITH ONE BROTHER IN PARTICULAR?",
  99.   ""
  100. ▌;
  101.  
  102. CHAR TOPICS[═┴╪][80]; /* HOLDS OLD TOPICS */
  103.  
  104. CHAR TOKEN[80];
  105. CHAR *PñPOS;
  106. INT RES=0; /* INDEX INTO RESPONSE ARRAY */
  107. INT HEAD=0; /* HEAD OF TOPICS QUEUE */
  108. INT TAIL=0; /* TAIL OF TOPICS QUEUE */
  109.  
  110. MAIN()
  111.   CHAR S[80];
  112.  
  113.   PRINTF("%S\N",RESPONSE[RES++]);
  114.  
  115.   DO █
  116.     PRINTF(": ");
  117.     PñPOS=S;
  118.      TS(S);
  119.     RESPOND(S);
  120.   ▌ WHILE(STRCMP(S,"BYE"));
  121.  
  122. /* CREATE THE DOCTOR'S RESPONSES */
  123. RESPOND(S)
  124. CHAR *S;
  125.   CHAR T[80];
  126.   INT LOC;
  127.  
  128.   IF(STRLEN(S)<╓┼╥┘╙╚╧╥╘ && STRCMP(S,"BYE")) █
  129.     IF(FINDñTOPIC(T)) █
  130.       PRINTF("┘OU JUST SAID: ");
  131.       PRINTF("%S"  "σT);
  132.       PRINTF("TELL ME MORE.  "σ);
  133.     ▌
  134.     ELSE █
  135.       IF (!*RESPONSE[RES]) RES=0; /* START OVER AGAIN */
  136.       PRINTF("%S\N",RESPONSE[RES++]);
  137.     ▌
  138.     RETURN ;
  139.   ▌
  140.  
  141.   IF(INñTOPICS(S)) █
  142.     PRINTF("╙TOP REPEATING YOURSELF!  "σ);
  143.     RETURN;
  144.   ▌
  145.  
  146.   IF(STRLEN(S)>╙╚╧╥╘) ASSERTñTOPIC(S);
  147.  
  148.   DO █
  149.      TñTOKEN();
  150.     LOC=LOOKUP(TOKEN);
  151.     IF(LOC!=-1) █
  152.       PRINTF("%S  "σ,TRANS[LOC+1]);
  153.       RETURN;
  154.     ▌
  155.   ▌ WHILE(*TOKEN);
  156.   /* COMMENT OF LAST RESORT */
  157.   PRINTF("╘ELL ME MORE... N");
  158.  
  159. /* ╠OOKUP A KEY WORD IN TRANSLATION TABLE */
  160. LOOKUP(TOKEN)
  161. CHAR *TOKEN;
  162.   INT T;
  163.  
  164.   T=0;
  165.   WHILE(*TRANS[T]) █
  166.     IF(!STRCMP(TRANS[T],TOKEN)) RETURN T;
  167.     T++;
  168.   ▌
  169.   RETURN -1;
  170.  
  171. /* PLACE A TOPIC INTO THE TOPICS DATABASE */
  172. ASSERTñTOPIC(T)
  173. CHAR *T;
  174.   IF(HEAD==═┴╪) HEAD=0; /* WRAP AROUND */
  175.   STRCPY(TOPICS[HEAD],T);
  176.   HEAD++;
  177.  
  178. /* RETRIEVE A TOPIC */
  179. FINDñTOPIC(T)
  180. CHAR *T;
  181.   IF(TAIL!=HEAD) █
  182.     STRCPY(T,TOPICS[TAIL]);
  183. ","─I
  184. ++;
  185.     /* WRAP AROUND IF NECESSARY */
  186.     IF(TAIL==═┴╪) TAIL=0;
  187.     RETURN 1;
  188.   ▌
  189.   RETURN 0;
  190.  
  191. /* SEE IF IN TOPICS QUEUE */
  192. INñTOPICS(S)
  193. CHAR *S;
  194.   INT T;
  195.  
  196.   FOR(T=0;T<═┴╪;T++)
  197.     IF(!STRCMP(S,TOPICS[T])) RETURN 1;
  198.  
  199.   RETURN 0;
  200.  
  201. /* RETURN A TOKEN FROM THE INPUT STREAM */
  202. TñTOKEN()
  203.   CHAR *P;
  204.  
  205.   P=TOKEN;
  206.   /* SKIP SPACES */
  207.   WHILE(*PñPOS==' ') PñPOS++;
  208.  
  209.   IF(*PñPOS=='\0') █  /* IS END OF INPUT */
  210.     *P++='\0';
  211.     RETURN;
  212.   ▌
  213.   IF(ISñIN(*PñPOS,".!?")) █
  214.     *P=*PñPOS;
  215.     P++, PñPOS++;
  216.     *P='\0';
  217.     RETURN;
  218.   ▌
  219.  
  220.   /* READ WORD UNTIL */
  221.   WHILE(*PñPOS!=' ' && !ISñIN(*PñPOS,".,;?!") && *PñPOS)  █
  222.     *P=*PñPOS++;
  223.     P++;
  224.   ▌
  225.   *P='\0';
  226.  
  227. ISñIN(C,S)
  228. CHAR C,*S;
  229.   WHILE(*S) █
  230.     IF(C==*S) RETURN 1;
  231.     S++;
  232.   ▌
  233.   RETURN 0;
  234.  
  235.