/* DOCTOR */ call Start_Up do forever call Input_Ctl if weGone=YES then leave call Swap_Keywords call Keyword_Process if rpySet=YES then do call Doctor_Reply end end say "GOOD BYE." exit /* */ Input_Ctl: do until paStr \= '' pull paStr paStr = strip(paStr) if paStr = prevStr then do say "PLEASE DON'T REPEAT YOURSELF." paStr= '' end else prevStr = paStr end paLen= length(paStr) punct= right(paStr,1) if punct='.' | punct='?' | punct='!' then do paLen= paLen - 1 paStr= ' 'left(paStr,paLen)' ' end else paStr= ' 'paStr' ' paStru = translate(paStr) if paStru="GOOD BYE" | paStru="GOOD-BYE" | paStru="BYE" |, paStru="GOOD BY" | paStru="GOOD-BY" | paStru="BYE" |, paStru="GOODBYE" | paStr="END" | paStr="OFF" | paStr="EXIT" |, paStru="DONE" | paStr="QUIT" then weGone=YES return /* */ Swap_Keywords: do i = 1 to nm do while wordpos(teStr.i,paStru) > 0 parse var paStru prepaStr (teStr.i) postpaStr paStru = prepaStr tnStr.i postpaStr end end return /* */ Keyword_Process: rpySet= NO do i = 1 to nu wrdPtr= wordpos(kwStr.kw.i,paStru) if wrdPtr > 0 then do if wrdPtr\=1 & kwStr.sv.i=25 then iterate parse var paStru . (kwStr.kw.i) Rpy rpySet = YES inu= i leave end end if rpySet=YES then do call Marker_Removal if Rpy= '' | Rpy= ' ' then rpySet= NO else return end /* No keywords found... */ if yoStr='' then rpy1P= random(1,4) else rpy1P= random(1,7) select when rpy1P=1 then say "I AM NOT SURE I UNDERSTAND YOU FULLY." when rpy1P=2 then say "PLEASE GO ON." when rpy1P=3 then say "WHAT DOES THAT SUGGEST TO YOU?" when rpy1P=4 then say "DO YOU FEEL STRONGLY ABOUT DISCUSSING SUCH THINGS?" when rpy1P=5 then say "LET'S DISCUSS FURTHER WHY YOUR" yoStr"." when rpy1P=6 then say "EARLIER YOU SAID YOUR" yoStr"." otherwise say "IS THAT RELATED TO THE FACT THAT" yoStr"?" end return /* */ Marker_Removal: if rpySet=YES then do do while pos('*',Rpy)\=0 parse var Rpy preRpy '*' postRpy Rpy= preRpy||postRpy end do while pos('@',Rpy)\=0 parse var Rpy preRpy '@' postRpy Rpy= preRpy||postRpy end end return /* */ Doctor_Reply: Rpy= strip(Rpy) select when kwStr.sv.inu=1 then say "DO COMPUTERS WORRY YOU?" when kwStr.sv.inu=2 then say "I AM NOT INTERESTED IN NAMES." when kwStr.sv.inu=3 then say "IN WHAT WAY?" when kwStr.sv.inu=4 then say "DO YOU OFTEN THINK OF" Rpy"?" when kwStr.sv.inu=5 then say "DID YOU THINK I WOULD FORGET" Rpy"?" when kwStr.sv.inu=6 then say "REALLY," Rpy"?" when kwStr.sv.inu=7 then say "WHAT DOES THAT DREAM SUGGEST TO YOU?" when kwStr.sv.inu=8 then say "DO YOU THINK IT'S LIKELY THAT IF" Rpy"?" when kwStr.sv.inu=9 then say "REALLY," kwStr.kw.inu"?" when kwStr.sv.inu=10 then say "WHAT IF YOU WERE" Rpy"?" when kwStr.sv.inu=11 then say "WERE YOU REALLY?" when kwStr.sv.inu=12 then say "WOULD YOU LIKE TO BELIEVE I WAS" Rpy"?" when kwStr.sv.inu=13 then say "TELL ME MORE ABOUT YOUR FAMILY." when kwStr.sv.inu=14 then do /* When keyword=MY... */ say "YOUR" Rpy"." if length(Rpy)>11 then yoStr=Rpy end when kwStr.sv.inu=15 then say "CAN YOU THINK OF A SPECIFIC EXAMPLE?" when kwStr.sv.inu=16 then say "WHY ARE YOU INTERESTED IN WHETHER I AM" Rpy "OR NOT?" when kwStr.sv.inu=17 then say "DID YOU THINK THERE MIGHT NOT BE" Rpy"?" when kwStr.sv.inu=18 then say "DO YOU BELIEVE YOU ARE" Rpy"?" when kwStr.sv.inu=19 then say "IS THAT THE REAL REASON?" when kwStr.sv.inu=20 then say "YOU BELIEVE I CAN" Rpy", DON'T YOU?" when kwStr.sv.inu=21 then say "WHETHER OR NOT YOU CAN" Rpy "DEPENDS MORE ON YOU THAN ME." when kwStr.sv.inu=22 then say "YOU SEEM QUITE POSITIVE." when kwStr.sv.inu=23 then say "I AM SORRY, I SPEAK ONLY ENGLISH." when kwStr.sv.inu=24 then say "HOW DO YOU DO?" when kwStr.sv.inu=25 then say "WHY DO YOU ASK?" when kwStr.sv.inu=26 then say "WHAT MAKES YOU THINK I AM" Rpy"?" when kwStr.sv.inu=27 then say "WE WERE DISCUSSING YOU, NOT ME." when kwStr.sv.inu=28 then say "YOU DON'T SEEM QUITE SO CERTAIN." when kwStr.sv.inu=29 then say "WHY ARE YOU CONCERNED OVER MY" Rpy"?" when kwStr.sv.inu=30 then say "ARE YOU SAYING 'NO' JUST TO BE NEGATIVE?" when kwStr.sv.inu=31 then do rpy2P= random(1,4) select when rpy2P=1 then say "PLEASE DON'T APOLOGIZE." when rpy2P=2 then say "APOLOGIES AREN'T NECESSARY." when rpy2P=3 then say "WHAT FEELINGS DO YOU HAVE WHEN YOU APOLOGIZE?" otherwise say "YOU NEEDN'T FEEL THAT YOU HAVE TO APOLOGIZE." end end when kwStr.sv.inu=32 then say "DO YOU BELIEVE I DON'T" Rpy"?" when kwStr.sv.inu=33 then say "DO YOU THINK YOU SHOULD BE ABLE TO" Rpy"?" when kwStr.sv.inu=34 then say "WHAT WOULD IT MEAN TO YOU IF YOU GOT" Rpy"?" when kwStr.sv.inu=35 then do if substr(kwStr.kw.inu,4,1)='@' then Rpy= substr(kwStr.kw.inu,10) if substr(kwStr.kw.inu,7,1)='*' then Rpy= substr(kwStr.kw.inu,8) say "I AM SORRY TO HEAR YOU ARE" Rpy"." end when kwStr.sv.inu=36 then do if substr(kwStr.kw.inu,4,1)='@' then Rpy= substr(kwStr.kw.inu,10) if substr(kwStr.kw.inu,7,1)='*' then Rpy= substr(kwStr.kw.inu,8) say "HOW HAVE I HELPED YOU BE" Rpy"?" end when kwStr.sv.inu=37 then say "DO YOU REALLY THINK SO?" when kwStr.sv.inu=38 then say "IS IT BECAUSE YOU ARE" Rpy "THAT YOU CAME TO ME?" when kwStr.sv.inu=39 then say "HOW DO YOU KNOW YOU CAN'T" Rpy"?" when kwStr.sv.inu=40 then say "DON'T YOU REALLY" Rpy"?" when kwStr.sv.inu=41 then say "TELL ME MORE ABOUT SUCH FEELINGS." otherwise say "I SEE." end return /* */ Start_Up: yoStr= '' nm = 14 nu = 82 teStr.1 = " MOM " tnStr.1 = "MOTHER" teStr.2 = " DAD " tnStr.2 = "FATHER" teStr.3 = " DREAMS " tnStr.3 = "DREAM" teStr.4 = " I " tnStr.4 = "YOU@" teStr.5 = " YOU " tnStr.5 = "I@" teStr.6 = " ME " tnStr.6 = "YOU*" teStr.7 = " MY " tnStr.7 = "YOUR*" teStr.8 = " YOUR " tnStr.8 = "MY@" teStr.9 = " MYSELF " tnStr.9 = "YOURSELF*" teStr.10 = " YOURSELF " tnStr.10 = "MYSELF@" teStr.11 = " I'M " tnStr.11 = "YOU'RE*" teStr.12 = " YOU'RE " tnStr.12 = "I'M*" teStr.13 = " AM " tnStr.13 = "ARE@" teStr.14 = " WERE " tnStr.14 = "WAS" kwStr.kw.1 = "COMPUTER" kwStr.sv.1 = 1 kwStr.kw.2 = "MACHINE" kwStr.sv.2 = 1 kwStr.kw.3 = "NAME" kwStr.sv.3 = 2 kwStr.kw.4 = "BECAUSE" kwStr.sv.4 = 19 kwStr.kw.5 = "ALIKE" kwStr.sv.5 = 3 kwStr.kw.6 = "LIKE" kwStr.sv.6 = 3 kwStr.kw.7 = "SAME" kwStr.sv.7 = 3 kwStr.kw.8 = "YOU@ REMEMBER" kwStr.sv.8 = 4 kwStr.kw.9 = "DO I REMEMBER" kwStr.sv.9 = 5 kwStr.kw.10 = "YOU@ DREAMED" kwStr.sv.10 = 6 kwStr.kw.11 = "DREAM" kwStr.sv.11 = 7 kwStr.kw.12 = "IF" kwStr.sv.12 = 8 kwStr.kw.13 = "EVERYBODY" kwStr.sv.13 = 9 kwStr.kw.14 = "EVERYONE" kwStr.sv.14 = 9 kwStr.kw.15 = "NOBODY" kwStr.sv.15 = 9 kwStr.kw.16 = "NO ONE" kwStr.sv.16 = 9 kwStr.kw.17 = "WAS YOU@" kwStr.sv.17 = 10 kwStr.kw.18 = "YOU@ WAS" kwStr.sv.18 = 11 kwStr.kw.19 = "WAS I" kwStr.sv.19 = 12 kwStr.kw.20 = "YOUR* MOTHER" kwStr.sv.20 = 13 kwStr.kw.21 = "YOUR* FATHER" kwStr.sv.21 = 13 kwStr.kw.22 = "YOUR* SISTER" kwStr.sv.22 = 13 kwStr.kw.23 = "YOUR* BROTHER" kwStr.sv.23 = 13 kwStr.kw.24 = "YOUR* WIFE" kwStr.sv.24 = 13 kwStr.kw.25 = "YOUR* HUSBAND" kwStr.sv.25 = 13 kwStr.kw.26 = "YOUR* CHILDREN" kwStr.sv.26 = 13 kwStr.kw.27 = "YOUR*" kwStr.sv.27 = 14 kwStr.kw.28 = "ALWAYS" kwStr.sv.28 = 15 kwStr.kw.29 = "ARE I" kwStr.sv.29 = 16 kwStr.kw.30 = "ARE@ YOU@" kwStr.sv.30 = 18 kwStr.kw.31 = "CAN I" kwStr.sv.31 = 20 kwStr.kw.32 = "CAN YOU@" kwStr.sv.32 = 21 kwStr.kw.33 = "CERTAINLY" kwStr.sv.33 = 22 kwStr.kw.34 = "DEUTSCH" kwStr.sv.34 = 23 kwStr.kw.35 = "ESPANOL" kwStr.sv.35 = 23 kwStr.kw.36 = "FRANCAIS" kwStr.sv.36 = 23 kwStr.kw.37 = "ITALIANO" kwStr.sv.37 = 23 kwStr.kw.38 = "HELLO" kwStr.sv.38 = 24 kwStr.kw.39 = "I REMIND YOU OF" kwStr.sv.39 = 3 kwStr.kw.40 = "I ARE" kwStr.sv.40 = 26 kwStr.kw.41 = "I'M" kwStr.sv.41 = 26 kwStr.kw.42 = "I" kwStr.sv.42 = 27 kwStr.kw.43 = "MAYBE" kwStr.sv.43 = 28 kwStr.kw.44 = "MY" kwStr.sv.44 = 29 kwStr.kw.45 = "NO" kwStr.sv.45 = 30 kwStr.kw.46 = "PERHAPS" kwStr.sv.46 = 28 kwStr.kw.47 = "SORRY" kwStr.sv.47 = 31 kwStr.kw.48 = "WHAT" kwStr.sv.48 = 25 kwStr.kw.49 = "WHEN" kwStr.sv.49 = 25 kwStr.kw.50 = "WHY DON'T I" kwStr.sv.50 = 25 kwStr.kw.51 = "WHY CAN'T YOU" kwStr.sv.51 = 33 kwStr.kw.52 = "YES" kwStr.sv.52 = 22 kwStr.kw.53 = "YOU@ WANT" kwStr.sv.53 = 34 kwStr.kw.54 = "YOU@ NEED" kwStr.sv.54 = 34 kwStr.kw.55 = "ARE" kwStr.sv.55 = 17 kwStr.kw.56 = "YOU@ ARE@ SAD" kwStr.sv.56 = 35 kwStr.kw.57 = "YOU'RE* SAD" kwStr.sv.57 = 35 kwStr.kw.58 = "YOU@ ARE@ UNHAPPY" kwStr.sv.58 = 35 kwStr.kw.59 = "YOU'RE* UNHAPPY" kwStr.sv.59 = 35 kwStr.kw.60 = "YOU@ ARE@ DEPRESSED" kwStr.sv.60 = 35 kwStr.kw.61 = "YOU'RE* DEPRESSED" kwStr.sv.61 = 35 kwStr.kw.62 = "YOU@ ARE@ SICK" kwStr.sv.62 = 35 kwStr.kw.63 = "YOU'RE* SICK" kwStr.sv.63 = 35 kwStr.kw.64 = "YOU@ ARE@ HAPPY" kwStr.sv.64 = 36 kwStr.kw.65 = "YOU'RE* HAPPY" kwStr.sv.65 = 36 kwStr.kw.66 = "YOU@ ARE@ ELATED" kwStr.sv.66 = 36 kwStr.kw.67 = "YOU'RE* ELATED" kwStr.sv.67 = 36 kwStr.kw.68 = "YOU@ ARE@ GLAD" kwStr.sv.68 = 36 kwStr.kw.69 = "YOU'RE* GLAD" kwStr.sv.69 = 36 kwStr.kw.70 = "YOU@ ARE@ BETTER" kwStr.sv.70 = 36 kwStr.kw.71 = "YOU'RE* BETTER" kwStr.sv.71 = 36 kwStr.kw.72 = "YOU@ FEEL YOU@" kwStr.sv.72 = 37 kwStr.kw.73 = "YOU@ THINK YOU@" kwStr.sv.73 = 37 kwStr.kw.74 = "YOU@ BELIEVE YOU@" kwStr.sv.74 = 37 kwStr.kw.75 = "YOU@ WISH YOU@" kwStr.sv.75 = 37 kwStr.kw.76 = "YOU@ ARE@" kwStr.sv.76 = 38 kwStr.kw.77 = "YOU'RE*" kwStr.sv.77 = 38 kwStr.kw.78 = "YOU@ CAN'T" kwStr.sv.78 = 39 kwStr.kw.79 = "YOU@ CANNOT" kwStr.sv.79 = 39 kwStr.kw.80 = "YOU@ DON'T" kwStr.sv.80 = 40 kwStr.kw.81 = "YOU@ DO NOT" kwStr.sv.81 = 40 kwStr.kw.82 = "YOU@ FEEL" kwStr.sv.82 = 41 x = random() say say 'PLEASE STATE YOUR PROBLEM.' return