Files
2021-07-26 13:13:33 -07:00

1915 lines
102 KiB
Plaintext

GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0001
LINE PG/LN A...B............................................................
000001 <<<<<<< .mine
error: invalid indicator '<' at column 7
000002 IDENTIFICATION DIVISION.
000003
000004 PROGRAM-ID. ELIZA.
000005 *AUTHOR. ARNOLD J. TREMBLEY.
000006 *DATE-WRITTEN. 2017-10-01.
000007 *SECURITY. THIS PROGRAM IS PUBLIC DOMAIN FREEWARE.
000008
000009 ****************************************************************
000010 * *
000011 * https://en.wikipedia.org/wiki/ELIZA *
000012 * ELIZA is an early natural language processing program *
000013 * created around 1964 by Joseph Wiezenbaum at MIT. This *
000014 * version is adapted from ELIZA.BAS which appeared in *
000015 * Creative Computing magazine in 1977, written by Jeff *
000016 * Shrager and adapted for IBM PC in the early 1980's by *
000017 * Patricia Danielson and Paul Hashfield. *
000018 * *
000019 * COBOL translation by Arnold Trembley, 2017-10-01. *
000020 * arnold.trembley@att.net *
000021 * Using MinGW GnuCOBOL 2.2 for Windows 7 Pro. *
000022 * This version is public domain freeware. *
000023 * *
000024 * ELIZA simulates a psychotherapist interacting with a *
000025 * human patient. Enter "shut up" to stop the dialog. *
000026 * *
000027 ****************************************************************
000028
000029 ENVIRONMENT DIVISION.
000030
000031 CONFIGURATION SECTION.
000032
000033 REPOSITORY.
000034 FUNCTION ALL INTRINSIC.
000035
000036 INPUT-OUTPUT SECTION.
000037
000038 FILE-CONTROL.
000039
000040 DATA DIVISION.
000041
000042 FILE SECTION.
000043
000044 WORKING-STORAGE SECTION.
000045
000046 01 100-PROGRAM-FLAGS.
000047 05 100-EOF-FLAG PIC X(01) VALUE SPACE.
000048 88 88-100-ALL-DONE VALUE "Y".
000049 05 100-KEYWORD-FLAG PIC X(01) VALUE SPACE.
000050 88 88-100-KEYWORD-FOUND VALUE "Y".
000051 88 88-100-KEYWORD-NOT-FOUND VALUE "N".
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0002
LINE PG/LN A...B............................................................
000052
000053 01 200-USER-INPUT PIC X(80) VALUE SPACES.
000054
000055 01 210-USER-INPUT-LC PIC X(80) VALUE SPACES.
000056
000057 01 220-LAST-USER-INPUT PIC X(80) VALUE SPACES.
000058
000059 01 230-TRANSLATED-INPUT PIC X(80) VALUE SPACES.
000060
000061 01 240-REPLY PIC X(79) VALUE SPACES.
000062
000063 01 250-SUBSTITUTE-WORK PIC X(100) VALUE SPACES.
000064
000065 01 300-PROGRAM-CONSTANTS.
000066 05 300-MAX-KEYWORD-ENTRIES PIC S9(4) COMP VALUE +36.
000067 05 300-MAX-SCAN-LEN PIC S9(4) COMP VALUE +30.
000068 05 300-SHUT PIC X(04) VALUE "shut".
000069 05 300-ASTERISK PIC X(01) VALUE "*".
000070
000071 01 400-PROGRAM-COUNTERS.
000072 05 400-HOLD-KW-LEN PIC S9(4) COMP VALUE ZERO.
000073 05 400-SCAN-LEN PIC S9(4) COMP VALUE ZERO.
000074 05 400-HOLD-500-K PIC S9(4) COMP VALUE +0.
000075 05 400-HOLD-OFFSET PIC S9(4) COMP VALUE +0.
000076 05 400-OFFSET PIC S9(4) COMP VALUE +0.
000077 05 400-SUB PIC S9(4) COMP VALUE ZERO.
000078 05 400-SPACES-COUNT PIC S9(4) COMP VALUE ZERO.
000079
000080 01 500-KEYWORD-TABLE-DATA.
000081 05 FILLER PIC X(16) VALUE "07can you ".
000082 05 FILLER PIC X(16) VALUE "05can i ".
000083 05 FILLER PIC X(16) VALUE "07you are ".
000084 05 FILLER PIC X(16) VALUE "06you're ".
000085 05 FILLER PIC X(16) VALUE "07i don't ".
000086 05 FILLER PIC X(16) VALUE "06i feel ".
000087 05 FILLER PIC X(16) VALUE "13why don't you ".
000088 05 FILLER PIC X(16) VALUE "11why can't i ".
000089 05 FILLER PIC X(16) VALUE "07are you ".
000090 05 FILLER PIC X(16) VALUE "07i can't ".
000091 05 FILLER PIC X(16) VALUE "04i am ".
000092 05 FILLER PIC X(16) VALUE "03i'm ".
000093 05 FILLER PIC X(16) VALUE "03you ".
000094 05 FILLER PIC X(16) VALUE "06i want ".
000095 05 FILLER PIC X(16) VALUE "04what ".
000096 05 FILLER PIC X(16) VALUE "03how ".
000097 05 FILLER PIC X(16) VALUE "03who ".
000098 05 FILLER PIC X(16) VALUE "05where ".
000099 05 FILLER PIC X(16) VALUE "04when ".
000100 05 FILLER PIC X(16) VALUE "03why ".
000101 05 FILLER PIC X(16) VALUE "04name ".
000102 05 FILLER PIC X(16) VALUE "05cause ".
000103 05 FILLER PIC X(16) VALUE "05sorry ".
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0003
LINE PG/LN A...B............................................................
000104 05 FILLER PIC X(16) VALUE "05dream ".
000105 05 FILLER PIC X(16) VALUE "05hello ".
000106 05 FILLER PIC X(16) VALUE "02hi ".
000107 05 FILLER PIC X(16) VALUE "05maybe ".
000108 05 FILLER PIC X(16) VALUE "02no ".
000109 05 FILLER PIC X(16) VALUE "04your ".
000110 05 FILLER PIC X(16) VALUE "06always ".
000111 05 FILLER PIC X(16) VALUE "05think ".
000112 05 FILLER PIC X(16) VALUE "05alike ".
000113 05 FILLER PIC X(16) VALUE "03yes ".
000114 05 FILLER PIC X(16) VALUE "06friend ".
000115 05 FILLER PIC X(16) VALUE "08computer ".
000116 05 FILLER PIC X(16) VALUE "10NOKEYFOUND".
000117
000118 01 500-KEYWORD-TABLE REDEFINES 500-KEYWORD-TABLE-DATA.
000119 05 500-KEYWORD-ENTRY OCCURS 36 TIMES
000120 INDEXED BY 500-K.
000121 10 500-KW-LEN PIC 9(02).
000122 10 500-KEYWORD PIC X(14).
000123
000124 01 520-TRANSLATION-CONSTANTS.
000125 05 520-THING-IN PIC X(05) VALUE "thing".
000126 05 520-HIGH-IN PIC X(04) VALUE "high".
000127 05 520-SHI-IN PIC X(03) VALUE "shi".
000128 05 520-CHI-IN PIC X(03) VALUE "chi".
000129 05 520-HIT-IN PIC X(03) VALUE "hit".
000130 05 520-OUR-IN PIC X(03) VALUE "our".
000131 05 520-QMARK-IN PIC X(02) VALUE "? ".
000132 05 520-XMARK-IN PIC X(02) VALUE "! ".
000133 05 520-FSTOP-IN PIC X(02) VALUE ". ".
000134
000135 05 520-THING-OUT PIC X(05) VALUE "th!ng".
000136 05 520-HIGH-OUT PIC X(04) VALUE "h!gh".
000137 05 520-SHI-OUT PIC X(03) VALUE "sh!".
000138 05 520-CHI-OUT PIC X(03) VALUE "ch!".
000139 05 520-HIT-OUT PIC X(03) VALUE "h!t".
000140 05 520-OUR-OUT PIC X(03) VALUE "0ur".
000141 05 520-QMARK-OUT PIC X(02) VALUE " ".
000142 05 520-FSTOP-OUT PIC X(02) VALUE " ".
000143
000144 05 520-ARE-IN PIC X(05) VALUE " are ".
000145 05 520-WERE-IN PIC X(06) VALUE " were ".
000146 05 520-YOU-IN PIC X(05) VALUE " you ".
000147 05 520-YOUR-IN PIC X(06) VALUE " your ".
000148 05 520-MY-IN PIC X(04) VALUE " my ".
000149 05 520-IVE-IN PIC X(06) VALUE " i've ".
000150 05 520-IM-IN PIC X(05) VALUE " i'm ".
000151 05 520-I-AM-IN PIC X(06) VALUE " i am ".
000152 05 520-ME-IN PIC X(04) VALUE " me ".
000153 05 520-I-IN PIC X(03) VALUE " i ".
000154 05 520-YOURE-IN PIC X(08) VALUE " you're ".
000155 05 520-YOU-ARE-IN PIC X(09) VALUE " you are ".
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0004
LINE PG/LN A...B............................................................
000156 05 520-YOURSELF-IN PIC X(10) VALUE " yourself ".
000157
000158 05 520-AM-OUT PIC X(04) VALUE " am ".
000159 05 520-WAS-OUT PIC X(05) VALUE " was ".
000160 05 520-I-FIX PIC X(04) VALUE " i# ".
000161 05 520-IM-FIX PIC X(06) VALUE " i'm# ".
000162 05 520-I-AM-FIX PIC X(07) VALUE " i am# ".
000163 05 520-MY-FIX PIC X(05) VALUE " my# ".
000164 05 520-YOUR-FIX PIC X(07) VALUE " your# ".
000165 05 520-YOUVE-OUT PIC X(08) VALUE " you've ".
000166 05 520-YOURE-OUT PIC X(08) VALUE " you're ".
000167 05 520-YOU-FIX PIC X(06) VALUE " you# ".
000168 05 520-MYSELF-OUT PIC X(08) VALUE " myself ".
000169
000170 05 520-I-OUT PIC X(03) VALUE " I ".
000171 05 520-IM-OUT PIC X(05) VALUE " I'm ".
000172 05 520-I-AM-OUT PIC X(06) VALUE " I am ".
000173 05 520-MY-OUT PIC X(04) VALUE " my ".
000174 05 520-YOUR-OUT PIC X(06) VALUE " your ".
000175 05 520-YOU-OUT PIC X(05) VALUE " you ".
000176
000177
000178 01 540-REPLY-TABLE-DATA.
000179 05 PIC x(60) VALUE "29Don't you believe that I can*".
000180 05 PIC X(60) VALUE "29Perhaps you would like me to*".
000181 05 PIC x(60) VALUE "29Do you want me to be able to*".
000182 05 PIC x(60) VALUE "26Perhaps you don't want to*".
000183 05 PIC x(60) VALUE "26Do you want to be able to*".
000184 05 PIC x(60) VALUE "26What makes you think I am*".
000185
000186 05 PIC X(30) VALUE "35Does it please you to believ".
000187 05 PIC X(30) VALUE "e I am*".
000188
000189 05 PIC x(60) VALUE "29Perhaps you would like to be*".
000190
000191 05 PIC X(30) VALUE "31Do you sometimes wish you we".
000192 05 PIC X(30) VALUE "re*".
000193
000194 05 PIC x(60) VALUE "17Don't you really*".
000195 05 PIC x(60) VALUE "14Why don't you*".
000196 05 PIC x(60) VALUE "26Do you wish to be able to*".
000197 05 PIC x(60) VALUE "22Does that trouble you?".
000198 05 PIC x(60) VALUE "18Do you often feel*".
000199 05 PIC x(60) VALUE "18Do you often feel*".
000200 05 PIC x(60) VALUE "21Do you enjoy feeling*".
000201 05 PIC x(60) VALUE "30Do you really believe I don't*".
000202 05 PIC x(60) VALUE "28Perhaps in good time I will*".
000203 05 PIC x(60) VALUE "18Do you want me to*".
000204
000205 05 PIC X(30) VALUE "35Do you think you should be a".
000206 05 PIC X(30) VALUE "ble to*".
000207
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0005
LINE PG/LN A...B............................................................
000208 05 PIC x(60) VALUE "14Why can't you*".
000209
000210 05 PIC X(30) VALUE "46Why are you interested in wh".
000211 05 PIC X(30) VALUE "ether or not I am*".
000212
000213 05 PIC x(60) VALUE "31Would you prefer if I were not*".
000214 05 PIC x(60) VALUE "31Perhaps in your fantasies I am*".
000215 05 PIC x(60) VALUE "26How do you know you can't*".
000216 05 PIC x(60) VALUE "15Have you tried?".
000217 05 PIC x(60) VALUE "20Perhaps you can now*".
000218
000219 05 PIC X(30) VALUE "35Did you come to me because y".
000220 05 PIC X(30) VALUE "ou are*".
000221
000222 05 PIC x(60) VALUE "23How long have you been*".
000223
000224 05 PIC X(30) VALUE "34Do you believe it is normal ".
000225 05 PIC X(30) VALUE "to be*".
000226
000227 05 PIC x(60) VALUE "19Do you enjoy being*".
000228 05 PIC x(60) VALUE "31We were discussing you--not me.".
000229 05 PIC x(60) VALUE "06Oh, I*".
000230
000231 05 PIC X(30) VALUE "44You're not really talking ab".
000232 05 PIC X(30) VALUE "out me, are you?".
000233
000234 05 PIC X(30) VALUE "37What would it mean to you if".
000235 05 PIC X(30) VALUE " you got*".
000236
000237 05 PIC x(60) VALUE "16Why do you want*".
000238 05 PIC x(60) VALUE "21Suppose you soon got*".
000239 05 PIC x(60) VALUE "22What if you never got*".
000240 05 PIC x(60) VALUE "22I sometimes also want*".
000241 05 PIC x(60) VALUE "15Why do you ask?".
000242 05 PIC x(60) VALUE "32Does that question interest you?".
000243
000244 05 PIC X(30) VALUE "38What answer would please you".
000245 05 PIC X(30) VALUE " the most?".
000246
000247 05 PIC x(60) VALUE "18What do you think?".
000248
000249 05 PIC X(30) VALUE "38Are such questions on your m".
000250 05 PIC X(30) VALUE "ind often?".
000251
000252 05 PIC X(30) VALUE "40What is it that you really w".
000253 05 PIC X(30) VALUE "ant to know?".
000254
000255 05 PIC x(60) VALUE "27Have you asked anyone else?".
000256
000257 05 PIC X(30) VALUE "37Have you asked such question".
000258 05 PIC X(30) VALUE "s before?".
000259
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0006
LINE PG/LN A...B............................................................
000260 05 PIC X(30) VALUE "42What else comes to mind when".
000261 05 PIC X(30) VALUE " you ask that?".
000262
000263 05 PIC x(60) VALUE "24Names don't interest me.".
000264
000265 05 PIC X(30) VALUE "41I don't care about names -- ".
000266 05 PIC X(30) VALUE "Please go on.".
000267
000268 05 PIC x(60) VALUE "24Is that the real reason?".
000269
000270 05 PIC X(30) VALUE "37Don't any other reasons come".
000271 05 PIC X(30) VALUE " to mind?".
000272
000273 05 PIC X(30) VALUE "39Does that reason explain any".
000274 05 PIC X(30) VALUE "thing else?".
000275
000276 05 PIC X(30) VALUE "34What other reasons might the".
000277 05 PIC X(30) VALUE "re be?".
000278
000279 05 PIC x(60) VALUE "23Please don't apologize!".
000280 05 PIC x(60) VALUE "28Apologies are not necessary.".
000281
000282 05 PIC X(30) VALUE "45What feelings do you have wh".
000283 05 PIC X(30) VALUE "en you apologize?".
000284
000285 05 PIC x(60) VALUE "22Don't be so defensive!".
000286
000287 05 PIC X(30) VALUE "36What does that dream suggest".
000288 05 PIC X(30) VALUE " to you?".
000289
000290 05 PIC x(60) VALUE "19Do you dream often?".
000291
000292 05 PIC X(30) VALUE "35What persons appear in your ".
000293 05 PIC X(30) VALUE "dreams?".
000294
000295 05 PIC X(30) VALUE "33Are you disturbed by your dr".
000296 05 PIC X(30) VALUE "eams?".
000297
000298 05 PIC X(30) VALUE "43How do you do ...Please stat".
000299 05 PIC X(30) VALUE "e your problem.".
000300
000301 05 PIC x(60) VALUE "29You don't seem quite certain.".
000302 05 PIC x(60) VALUE "23Why the uncertain tone?".
000303 05 PIC x(60) VALUE "27Can't you be more positive?".
000304 05 PIC x(60) VALUE "16You aren't sure?".
000305 05 PIC x(60) VALUE "15Don't you know?".
000306
000307 05 PIC X(30) VALUE "38Are you saying no just to be".
000308 05 PIC X(30) VALUE " negative?".
000309
000310 05 PIC x(60) VALUE "29You are being a bit negative.".
000311 05 PIC x(60) VALUE "08Why not?".
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0007
LINE PG/LN A...B............................................................
000312 05 PIC x(60) VALUE "13Are you sure?".
000313 05 PIC x(60) VALUE "07Why no?".
000314 05 PIC x(60) VALUE "31Why are you concerned about my*".
000315 05 PIC x(60) VALUE "20What about your own*".
000316
000317 05 PIC X(30) VALUE "36Can you think of a specific ".
000318 05 PIC X(30) VALUE "example?".
000319
000320 05 PIC x(60) VALUE "05When?".
000321 05 PIC x(60) VALUE "25What are you thinking of?".
000322 05 PIC x(60) VALUE "15Really, always?".
000323 05 PIC x(60) VALUE "23Do you really think so?".
000324 05 PIC x(60) VALUE "21But you are not sure*".
000325 05 PIC x(60) VALUE "13Do you doubt*".
000326 05 PIC x(60) VALUE "12In what way?".
000327 05 PIC x(60) VALUE "28What resemblance do you see?".
000328
000329 05 PIC X(30) VALUE "40What does the similarity sug".
000330 05 PIC X(30) VALUE "gest to you?".
000331
000332 05 PIC X(30) VALUE "34What other connections do yo".
000333 05 PIC X(30) VALUE "u see?".
000334
000335 05 PIC X(30) VALUE "38Could there really be some c".
000336 05 PIC X(30) VALUE "onnection?".
000337
000338 05 PIC x(60) VALUE "04How?".
000339 05 PIC x(60) VALUE "24You seem quite positive.".
000340 05 PIC x(60) VALUE "13Are you sure?".
000341 05 PIC x(60) VALUE "06I see.".
000342 05 PIC x(60) VALUE "13I understand.".
000343
000344 05 PIC X(30) VALUE "41Why do you bring up the topi".
000345 05 PIC X(30) VALUE "c of friends?".
000346
000347 05 PIC x(60) VALUE "26Do your friends worry you?".
000348 05 PIC x(60) VALUE "28Do your friends pick on you?".
000349
000350 05 PIC X(30) VALUE "34Are you sure you have any fr".
000351 05 PIC X(30) VALUE "iends?".
000352
000353 05 PIC x(60) VALUE "30Do you impose on your friends?".
000354
000355 05 PIC X(30) VALUE "42Perhaps your love for friend".
000356 05 PIC X(30) VALUE "s worries you.".
000357
000358 05 PIC x(60) VALUE "23Do computers worry you?".
000359
000360 05 PIC X(30) VALUE "39Are you talking about me in ".
000361 05 PIC X(30) VALUE "particular?".
000362
000363 05 PIC X(30) VALUE "31Are you frightened by machin".
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0008
LINE PG/LN A...B............................................................
000364 05 PIC X(30) VALUE "es?".
000365
000366 05 PIC x(60) VALUE "29Why do you mention computers?".
000367
000368 05 PIC X(30) VALUE "56What do you think machines h".
000369 05 PIC X(30) VALUE "ave to do with your problem?".
000370
000371 05 PIC X(30) VALUE "42Don't you think computers ca".
000372 05 PIC X(30) VALUE "n help people?".
000373
000374 05 PIC X(30) VALUE "43What is it about machines th".
000375 05 PIC X(30) VALUE "at worries you?".
000376
000377 05 PIC X(30) VALUE "44Say, do you have any psychol".
000378 05 PIC X(30) VALUE "ogical problems?".
000379
000380 05 PIC x(60) VALUE "30What does that suggest to you?".
000381 05 PIC x(60) VALUE "06I see.".
000382
000383 05 PIC X(30) VALUE "36I'm not sure I understand yo".
000384 05 PIC X(30) VALUE "u fully.".
000385
000386 05 PIC X(30) VALUE "36Come, Come, elucidate your t".
000387 05 PIC X(30) VALUE "houghts.".
000388
000389 05 PIC x(60) VALUE "26Can you elaborate on that?".
000390 05 PIC x(60) VALUE "26That is quite interesting.".
000391
000392 01 540-REPLY-TABLE REDEFINES 540-REPLY-TABLE-DATA.
000393 05 540-REPLY-ENTRY OCCURS 112 TIMES
000394 INDEXED BY 540-R.
000395 10 540-REPLY-LENGTH PIC 9(02).
000396 10 540-REPLY PIC X(58).
000397
000398
000399 01 560-REPLY-LOCATER-DATA.
000400 05 FILLER PIC X(12) VALUE "000100030004".
000401 05 FILLER PIC X(12) VALUE "000400050005".
000402 05 FILLER PIC X(12) VALUE "000600090009".
000403 05 FILLER PIC X(12) VALUE "000600090009".
000404 05 FILLER PIC X(12) VALUE "001000130013".
000405 05 FILLER PIC X(12) VALUE "001400160016".
000406 05 FILLER PIC X(12) VALUE "001700190019".
000407 05 FILLER PIC X(12) VALUE "002000210021".
000408 05 FILLER PIC X(12) VALUE "002200240024".
000409 05 FILLER PIC X(12) VALUE "002500270027".
000410 05 FILLER PIC X(12) VALUE "002800310031".
000411 05 FILLER PIC X(12) VALUE "002800310031".
000412 05 FILLER PIC X(12) VALUE "003200340034".
000413 05 FILLER PIC X(12) VALUE "003500390039".
000414 05 FILLER PIC X(12) VALUE "004000480048".
000415 05 FILLER PIC X(12) VALUE "004000480048".
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0009
LINE PG/LN A...B............................................................
000416 05 FILLER PIC X(12) VALUE "004000480048".
000417 05 FILLER PIC X(12) VALUE "004000480048".
000418 05 FILLER PIC X(12) VALUE "004000480048".
000419 05 FILLER PIC X(12) VALUE "004000480048".
000420 05 FILLER PIC X(12) VALUE "004900500050".
000421 05 FILLER PIC X(12) VALUE "005100540054".
000422 05 FILLER PIC X(12) VALUE "005500580058".
000423 05 FILLER PIC X(12) VALUE "005900620062".
000424 05 FILLER PIC X(12) VALUE "006300630063".
000425 05 FILLER PIC X(12) VALUE "006300630063".
000426 05 FILLER PIC X(12) VALUE "006400680068".
000427 05 FILLER PIC X(12) VALUE "006900730073".
000428 05 FILLER PIC X(12) VALUE "007400750075".
000429 05 FILLER PIC X(12) VALUE "007600790079".
000430 05 FILLER PIC X(12) VALUE "008000820082".
000431 05 FILLER PIC X(12) VALUE "008300890089".
000432 05 FILLER PIC X(12) VALUE "009000920092".
000433 05 FILLER PIC X(12) VALUE "009300980098".
000434 05 FILLER PIC X(12) VALUE "009901050105".
000435 05 FILLER PIC X(12) VALUE "010601120112".
000436
000437 01 560-REPLY-LOCATER-TABLE REDEFINES 560-REPLY-LOCATER-DATA.
000438 05 560-REPLY-LOCATER-ENTRY OCCURS 36 TIMES INDEXED BY 560-L.
000439 10 560-REPLY-LO PIC 9(04).
000440 10 560-REPLY-HI PIC 9(04).
000441 10 560-REPLY-LAST-USED PIC 9(04).
000442
000443 01 600-PROGRAM-MESSAGES.
000444 05 600-REPLY-LIST.
000445 10 FILLER PIC X(07) VALUE 'Reply: '.
000446 10 600-REPLY-DATA PIC X(70) VALUE SPACES.
000447
000448 05 600-INITIAL-MESSAGE PIC X(40) VALUE
000449 "Hi! I'm ELIZA. What's your problem?".
000450
000451 05 600-GOODBYE-MESSAGE PIC X(40) VALUE
000452 "If that's how you feel--goodbye...".
000453
000454 05 600-NO-REPEAT-MSG PIC X(32) VALUE
000455 "Please don't repeat yourself!".
000456
000457 PROCEDURE DIVISION.
000458
000459 ****************************************************************
000460 * 0 0 0 0 - M A I N L I N E . *
000461 ****************************************************************
000462 * START THE PSYCHOTHERAPIST DIALOG WITH THE USER, ANALYZE *
000463 * THE USER INPUT AND GENERATE THE REPLIES. THE USER CAN *
000464 * TYPE "SHUT UP" OR SIMPLY "SHUT" TO TERMINATE THE SESSION. *
000465 ****************************************************************
000466
000467 0000-MAINLINE.
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0010
LINE PG/LN A...B............................................................
000468
000469 DISPLAY SPACE
warning: DISPLAY statement not terminated by END-DISPLAY
000470 MOVE SPACE TO 100-EOF-FLAG
000471 DISPLAY 600-INITIAL-MESSAGE
warning: DISPLAY statement not terminated by END-DISPLAY
000472 PERFORM UNTIL 88-100-ALL-DONE
000473 ACCEPT 200-USER-INPUT
warning: ACCEPT statement not terminated by END-ACCEPT
000474 MOVE FUNCTION LOWER-CASE (200-USER-INPUT)
000475 TO 210-USER-INPUT-LC
000476 IF 210-USER-INPUT-LC (1:4) = 300-SHUT
000477 SET 88-100-ALL-DONE TO TRUE
000478 DISPLAY 600-GOODBYE-MESSAGE
warning: DISPLAY statement not terminated by END-DISPLAY
000479 ELSE
000480 IF 210-USER-INPUT-LC = 220-LAST-USER-INPUT
000481 DISPLAY 600-NO-REPEAT-MSG
warning: DISPLAY statement not terminated by END-DISPLAY
000482 ELSE
000483 MOVE 210-USER-INPUT-LC
000484 TO 220-LAST-USER-INPUT
000485 PERFORM 1000-SCAN-FOR-KEYWORD
000486 IF 400-HOLD-OFFSET > ZERO
000487 PERFORM 2000-TRANSLATE-USER-INPUT
000488 END-IF
000489 PERFORM 3000-BUILD-KEYWORD-REPLY
000490 END-IF
000491 END-IF
000492 END-PERFORM
000493
000494 STOP RUN.
000495
000496 ****************************************************************
000497 * 1 0 0 0 - S C A N - F O R - K E Y W O R D . *
000498 ****************************************************************
000499 * SEARCH THE USER INPUT FOR KEYWORDS THAT WILL TRIGGER *
000500 * THE RESPONSES FROM THE REPLY TABLE. *
000501 ****************************************************************
000502
000503 1000-SCAN-FOR-KEYWORD.
000504
000505 PERFORM 1100-MASK-STRING-HI
000506
000507 SET 88-100-KEYWORD-NOT-FOUND TO TRUE
000508 MOVE ZERO TO 400-HOLD-OFFSET
000509 PERFORM VARYING 400-SUB FROM +1 BY +1
000510 UNTIL 400-SUB > 300-MAX-SCAN-LEN
000511 OR 88-100-KEYWORD-FOUND
000512 PERFORM VARYING 500-K FROM +1 BY +1
000513 UNTIL 500-K > 300-MAX-KEYWORD-ENTRIES
000514 OR 88-100-KEYWORD-FOUND
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0011
LINE PG/LN A...B............................................................
000515 MOVE 500-KW-LEN (500-K)
000516 TO 400-HOLD-KW-LEN
000517 IF 210-USER-INPUT-LC (400-SUB:400-HOLD-KW-LEN) =
000518 500-KEYWORD (500-K)
000519 SET 400-HOLD-500-K TO 500-K
warning: some digits may be truncated
000520 SET 88-100-KEYWORD-FOUND TO TRUE
000521 COMPUTE 400-HOLD-OFFSET =
warning: COMPUTE statement not terminated by END-COMPUTE
000522 400-SUB + 400-HOLD-KW-LEN
000523 COMPUTE 400-SUB = 400-SCAN-LEN + 1
warning: COMPUTE statement not terminated by END-COMPUTE
000524 END-IF
000525 END-PERFORM
000526 END-PERFORM
000527
000528 IF 88-100-KEYWORD-NOT-FOUND
000529 MOVE 300-MAX-KEYWORD-ENTRIES
000530 TO 400-HOLD-500-K
000531 SET 88-100-KEYWORD-FOUND TO TRUE
000532 END-IF
000533
000534 PERFORM 1200-RESTORE-STRING-HI
000535 .
000536
000537 ****************************************************************
000538 * 1 1 0 0 - M A S K - S T R I N G - H I . *
000539 ****************************************************************
000540 * WORDS LIKE "THING" AND "HIGH" WERE CAUSING A KEYWORD *
000541 * "HI" MATCH THAT TRIGGERED THE HELLO/HI KEYWORD RESPONSES, *
000542 * SO THEY ARE MASKED HERE TO PREVENT THAT. *
000543 * ALSO REMOVE TRAILING "?", "!", AND "." CHARACTERS. *
000544 ****************************************************************
000545
000546 1100-MASK-STRING-HI.
000547
000548 MOVE FUNCTION SUBSTITUTE
000549 (210-USER-INPUT-LC, 520-THING-IN, 520-THING-OUT,
000550 520-HIGH-IN, 520-HIGH-OUT,
000551 520-SHI-IN, 520-SHI-OUT,
000552 520-CHI-IN, 520-CHI-OUT,
000553 520-HIT-IN, 520-HIT-OUT,
000554 520-OUR-IN, 520-OUR-OUT,
000555 520-QMARK-IN, 520-QMARK-OUT,
000556 520-XMARK-IN, 520-QMARK-OUT,
000557 520-FSTOP-IN, 520-FSTOP-OUT)
000558 TO 250-SUBSTITUTE-WORK
000559 MOVE 250-SUBSTITUTE-WORK TO 210-USER-INPUT-LC
warning: sending field larger than receiving field
000560 ****************************************************************
000561 * REMOVE MULTIPLE TRAILING QUESTION MARKS, EXCLAMATION *
000562 * POINTS, AND PERIODS (FULL STOPS). *
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0012
LINE PG/LN A...B............................................................
000563 ****************************************************************
000564 MOVE FUNCTION SUBSTITUTE
000565 (210-USER-INPUT-LC, 520-QMARK-IN, 520-QMARK-OUT,
000566 520-XMARK-IN, 520-QMARK-OUT,
000567 520-FSTOP-IN, 520-FSTOP-OUT)
000568 TO 250-SUBSTITUTE-WORK
000569 MOVE 250-SUBSTITUTE-WORK TO 210-USER-INPUT-LC
warning: sending field larger than receiving field
000570 MOVE FUNCTION SUBSTITUTE
000571 (210-USER-INPUT-LC, 520-QMARK-IN, 520-QMARK-OUT,
000572 520-XMARK-IN, 520-QMARK-OUT,
000573 520-FSTOP-IN, 520-FSTOP-OUT)
000574 TO 250-SUBSTITUTE-WORK
000575 MOVE 250-SUBSTITUTE-WORK TO 210-USER-INPUT-LC
warning: sending field larger than receiving field
000576 .
000577
000578 ****************************************************************
000579 * 1 2 0 0 - R E S T O R E - S T R I N G - H I . *
000580 ****************************************************************
000581 * AFTER COMPLETING THE KEYWORD SEARCH, RESTORE THE "HI" *
000582 * STRING IN THE USER INPUT. *
000583 ****************************************************************
000584
000585 1200-RESTORE-STRING-HI.
000586
000587 MOVE FUNCTION SUBSTITUTE
000588 (210-USER-INPUT-LC, 520-THING-OUT, 520-THING-IN,
000589 520-HIGH-OUT, 520-HIGH-IN,
000590 520-SHI-OUT, 520-SHI-IN,
000591 520-CHI-OUT, 520-CHI-IN,
000592 520-HIT-OUT, 520-HIT-IN,
000593 520-OUR-OUT, 520-OUR-IN)
000594 TO 250-SUBSTITUTE-WORK
000595 MOVE 250-SUBSTITUTE-WORK TO 210-USER-INPUT-LC
warning: sending field larger than receiving field
000596 .
000597
000598 ****************************************************************
000599 * 2 0 0 0 - T R A N S L A T E - U S E R - I N P U T . *
000600 ****************************************************************
000601 * PERFORM PRONOUN REPLACEMENT AND CONJUGATION ON THE USER *
000602 * INPUT SO IT WILL SOUND FAIRLY NORMAL WHEN APPENDED TO *
000603 * THE DOCTOR'S REPLY. *
000604 ****************************************************************
000605
000606 2000-TRANSLATE-USER-INPUT.
000607
000608 MOVE 210-USER-INPUT-LC (400-HOLD-OFFSET:)
000609 TO 230-TRANSLATED-INPUT.
000610
000611 MOVE FUNCTION SUBSTITUTE
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0013
LINE PG/LN A...B............................................................
000612 (230-TRANSLATED-INPUT, 520-ARE-IN, 520-AM-OUT,
000613 520-WERE-IN, 520-WAS-OUT
000614 520-YOU-IN, 520-I-FIX,
000615 520-YOUR-IN, 520-MY-FIX,
000616 520-MY-IN, 520-YOUR-FIX,
000617 520-IVE-IN, 520-YOUVE-OUT,
000618 520-IM-IN, 520-YOURE-OUT,
000619 520-I-AM-IN, 520-YOURE-OUT,
000620 520-ME-IN, 520-YOU-FIX,
000621 520-I-IN, 520-YOU-FIX,
000622 520-YOURE-IN 520-IM-FIX,
000623 520-YOU-ARE-IN 520-I-AM-FIX,
000624 520-YOURSELF-IN, 520-MYSELF-OUT)
000625 TO 250-SUBSTITUTE-WORK.
000626
000627 MOVE 250-SUBSTITUTE-WORK TO 230-TRANSLATED-INPUT.
warning: sending field larger than receiving field
000628
000629 MOVE FUNCTION SUBSTITUTE
000630 (230-TRANSLATED-INPUT, 520-I-FIX, 520-I-OUT,
000631 520-IM-FIX, 520-IM-OUT,
000632 520-I-AM-FIX, 520-I-AM-OUT,
000633 520-MY-FIX, 520-MY-OUT,
000634 520-YOUR-FIX, 520-YOUR-OUT,
000635 520-YOU-FIX, 520-YOU-OUT)
000636 TO 250-SUBSTITUTE-WORK.
000637
000638 MOVE 250-SUBSTITUTE-WORK TO 230-TRANSLATED-INPUT
warning: sending field larger than receiving field
000639 .
000640
000641 ****************************************************************
000642 * 3 0 0 0 - B U I L D - K E Y W O R D - R E P L Y . *
000643 ****************************************************************
000644 * BUILD THE REPLY BASED ON THE KEYWORD FOUND IN THE USER *
000645 * INPUT. NOTE THERE ARE A VARIABLE NUMBER OF POSSIBLE *
000646 * REPLIES FOR EACH KEYWORD, AND SOME REPLIES INCLUDE TEXT *
000647 * ECHOED FROM THE USER INPUT. *
000648 ****************************************************************
000649
000650 3000-BUILD-KEYWORD-REPLY.
000651
000652 SET 560-L TO 400-HOLD-500-K
000653 ADD +1 TO 560-REPLY-LAST-USED (560-L)
warning: ADD statement not terminated by END-ADD
000654 IF 560-REPLY-LAST-USED (560-L) > 560-REPLY-HI (560-L)
000655 MOVE 560-REPLY-LO (560-L) TO 560-REPLY-LAST-USED (560-L)
000656 END-IF
000657
000658 SET 540-R TO 560-REPLY-LAST-USED (560-L)
000659 MOVE 540-REPLY (540-R) TO 240-REPLY
000660 MOVE 540-REPLY-LENGTH (540-R) TO 400-SUB
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0014
LINE PG/LN A...B............................................................
000661 IF 240-REPLY (400-SUB:1) = 300-ASTERISK
000662 MOVE SPACE TO 240-REPLY (400-SUB:1)
000663 MOVE 230-TRANSLATED-INPUT
warning: sending field larger than receiving field
000664 TO 240-REPLY (400-SUB:)
000665 PERFORM 3100-FIX-MORE-BAD-GRAMMAR
000666 MOVE ZERO TO 400-SPACES-COUNT
000667 INSPECT 240-REPLY TALLYING 400-SPACES-COUNT
000668 FOR TRAILING SPACES
000669 ****************************************************************
000670 * MERGE USER INPUT INTO THE REPLY AND THEN CORRECT *
000671 * ENDING PUNCTUATION FOR "?" OR "." (FULL-STOP). *
000672 ****************************************************************
000673 IF 400-SPACES-COUNT > ZERO
000674 AND 400-SPACES-COUNT < (LENGTH OF 240-REPLY) - 1
000675 COMPUTE 400-OFFSET =
000676 (LENGTH OF 240-REPLY) - 400-SPACES-COUNT + 1
000677 END-COMPUTE
000678 IF 560-REPLY-LAST-USED (560-L) = 02 OR 04 OR 05
000679 OR 08 OR 18 OR 24 OR 33 OR 39 OR 81
000680 MOVE "." TO 240-REPLY (400-OFFSET:1)
000681 ELSE
000682 MOVE "?" TO 240-REPLY (400-OFFSET:1)
000683 END-IF
000684 END-IF
000685 END-IF
000686
000687 DISPLAY 240-REPLY
warning: DISPLAY statement not terminated by END-DISPLAY
000688 .
000689
000690 ****************************************************************
000691 * 3 1 0 0 - F I X - M O R E - B A D - G R A M M A R . *
000692 ****************************************************************
000693 * HERE ARE SOME MORE FIXUPS FOR GRAMMAR PROBLEMS. BUT IT *
000694 * DOESN'T SOLVE ALL OF THEM. *
000695 ****************************************************************
000696
000697 3100-FIX-MORE-BAD-GRAMMAR.
000698
000699 MOVE FUNCTION SUBSTITUTE (240-REPLY,
000700 " you want I ", " you want me ",
000701 " you got I ", " you got me ",
000702 " to make I ", " to make me ",
000703 " you been I ", " you been me ",
000704 " you be I ", " you be me ",
000705 " to be I ", " to be me ",
000706 " soon got I ", " soon got me ",
000707 " never got I ", " never got me ",
000708 " sometimes also want I ", " sometimes also want me ",
000709 " normal to be I ", " normal to be me ",
000710 " enjoy being I ", " enjoy being me ",
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0015
LINE PG/LN A...B............................................................
000711 " can't make I ", " can't make me ",
000712 " can now make I ", " can now make me ",
000713 " I are ", " I am ",
000714 " you am ", " you are ",
000715 " with I ", " with me")
000716 TO 250-SUBSTITUTE-WORK.
000717
000718 MOVE 250-SUBSTITUTE-WORK TO 240-REPLY.
warning: sending field larger than receiving field
000719
000720 END PROGRAM ELIZA.
000721 ||||||| .r0
error: invalid indicator '|' at column 7
000722 =======
error: invalid indicator '=' at column 7
000723 IDENTIFICATION DIVISION.
000724
000725 PROGRAM-ID. ELIZA.
error: redefinition of program ID 'ELIZA'
000726 *AUTHOR. ARNOLD J. TREMBLEY.
000727 *DATE-WRITTEN. 2017-10-01.
000728 *SECURITY. THIS PROGRAM IS PUBLIC DOMAIN FREEWARE.
000729
000730 ****************************************************************
000731 * *
000732 * https://en.wikipedia.org/wiki/ELIZA *
000733 * ELIZA is an early natural language processing program *
000734 * created around 1964 by Joseph Wiezenbaum at MIT. This *
000735 * version is adapted from ELIZA.BAS which appeared in *
000736 * Creative Computing magazine in 1977, written by Jeff *
000737 * Shrager and adapted for IBM PC in the early 1980's by *
000738 * Patricia Danielson and Paul Hashfield. *
000739 * *
000740 * COBOL translation by Arnold Trembley, 2017-10-01. *
000741 * arnold.trembley@att.net *
000742 * Using MinGW GnuCOBOL 2.2 for Windows 7. *
000743 * This version is public domain freeware. *
000744 * *
000745 * ELIZA simulates a psychotherapist interacting with a *
000746 * human patient. Enter "shut up" to stop the dialog. *
000747 * *
000748 ****************************************************************
000749
000750 ENVIRONMENT DIVISION.
000751
000752 CONFIGURATION SECTION.
000753
000754 REPOSITORY.
000755 FUNCTION ALL INTRINSIC.
000756
000757 INPUT-OUTPUT SECTION.
000758
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0016
LINE PG/LN A...B............................................................
000759 FILE-CONTROL.
000760
000761 DATA DIVISION.
000762
000763 FILE SECTION.
000764
000765 WORKING-STORAGE SECTION.
000766
000767 01 100-PROGRAM-FLAGS.
000768 05 100-EOF-FLAG PIC X(01) VALUE SPACE.
000769 88 88-100-ALL-DONE VALUE "Y".
000770 05 100-KEYWORD-FLAG PIC X(01) VALUE SPACE.
000771 88 88-100-KEYWORD-FOUND VALUE "Y".
000772 88 88-100-KEYWORD-NOT-FOUND VALUE "N".
000773
000774 01 200-USER-INPUT PIC X(80) VALUE SPACES.
000775
000776 01 210-USER-INPUT-LC PIC X(80) VALUE SPACES.
000777
000778 01 220-LAST-USER-INPUT PIC X(80) VALUE SPACES.
000779
000780 01 230-TRANSLATED-INPUT PIC X(80) VALUE SPACES.
000781
000782 01 240-REPLY PIC X(79) VALUE SPACES.
000783
000784 01 250-SUBSTITUTE-WORK PIC X(100) VALUE SPACES.
000785
000786 01 300-PROGRAM-CONSTANTS.
000787 05 300-MAX-KEYWORD-ENTRIES PIC S9(4) COMP VALUE +36.
000788 05 300-MAX-SCAN-LEN PIC S9(4) COMP VALUE +30.
000789 05 300-SHUT PIC X(04) VALUE "shut".
000790 05 300-ASTERISK PIC X(01) VALUE "*".
000791
000792 01 400-PROGRAM-COUNTERS.
000793 05 400-HOLD-KW-LEN PIC S9(4) COMP VALUE ZERO.
000794 05 400-SCAN-LEN PIC S9(4) COMP VALUE ZERO.
000795 05 400-HOLD-500-K PIC S9(4) COMP VALUE +0.
000796 05 400-HOLD-OFFSET PIC S9(4) COMP VALUE +0.
000797 05 400-OFFSET PIC S9(4) COMP VALUE +0.
000798 05 400-SUB PIC S9(4) COMP VALUE ZERO.
000799 05 400-SPACES-COUNT PIC S9(4) COMP VALUE ZERO.
000800
000801 01 500-KEYWORD-TABLE-DATA.
000802 05 FILLER PIC X(16) VALUE "07can you ".
000803 05 FILLER PIC X(16) VALUE "05can i ".
000804 05 FILLER PIC X(16) VALUE "07you are ".
000805 05 FILLER PIC X(16) VALUE "06you're ".
000806 05 FILLER PIC X(16) VALUE "07i don't ".
000807 05 FILLER PIC X(16) VALUE "06i feel ".
000808 05 FILLER PIC X(16) VALUE "13why don't you ".
000809 05 FILLER PIC X(16) VALUE "11why can't i ".
000810 05 FILLER PIC X(16) VALUE "07are you ".
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0017
LINE PG/LN A...B............................................................
000811 05 FILLER PIC X(16) VALUE "07i can't ".
000812 05 FILLER PIC X(16) VALUE "04i am ".
000813 05 FILLER PIC X(16) VALUE "03i'm ".
000814 05 FILLER PIC X(16) VALUE "03you ".
000815 05 FILLER PIC X(16) VALUE "06i want ".
000816 05 FILLER PIC X(16) VALUE "04what ".
000817 05 FILLER PIC X(16) VALUE "03how ".
000818 05 FILLER PIC X(16) VALUE "03who ".
000819 05 FILLER PIC X(16) VALUE "05where ".
000820 05 FILLER PIC X(16) VALUE "04when ".
000821 05 FILLER PIC X(16) VALUE "03why ".
000822 05 FILLER PIC X(16) VALUE "04name ".
000823 05 FILLER PIC X(16) VALUE "05cause ".
000824 05 FILLER PIC X(16) VALUE "05sorry ".
000825 05 FILLER PIC X(16) VALUE "05dream ".
000826 05 FILLER PIC X(16) VALUE "05hello ".
000827 05 FILLER PIC X(16) VALUE "02hi ".
000828 05 FILLER PIC X(16) VALUE "05maybe ".
000829 05 FILLER PIC X(16) VALUE "02no ".
000830 05 FILLER PIC X(16) VALUE "04your ".
000831 05 FILLER PIC X(16) VALUE "06always ".
000832 05 FILLER PIC X(16) VALUE "05think ".
000833 05 FILLER PIC X(16) VALUE "05alike ".
000834 05 FILLER PIC X(16) VALUE "03yes ".
000835 05 FILLER PIC X(16) VALUE "06friend ".
000836 05 FILLER PIC X(16) VALUE "08computer ".
000837 05 FILLER PIC X(16) VALUE "10NOKEYFOUND".
000838
000839 01 500-KEYWORD-TABLE REDEFINES 500-KEYWORD-TABLE-DATA.
000840 05 500-KEYWORD-ENTRY OCCURS 36 TIMES
000841 INDEXED BY 500-K.
000842 10 500-KW-LEN PIC 9(02).
000843 10 500-KEYWORD PIC X(14).
000844
000845 01 520-TRANSLATION-CONSTANTS.
000846 05 520-THING-IN PIC X(05) VALUE "thing".
000847 05 520-HIGH-IN PIC X(04) VALUE "high".
000848 05 520-SHI-IN PIC X(03) VALUE "shi".
000849 05 520-CHI-IN PIC X(03) VALUE "chi".
000850 05 520-HIT-IN PIC X(03) VALUE "hit".
000851 05 520-OUR-IN PIC X(03) VALUE "our".
000852 05 520-QMARK-IN PIC X(02) VALUE "? ".
000853 05 520-XMARK-IN PIC X(02) VALUE "! ".
000854 05 520-FSTOP-IN PIC X(02) VALUE ". ".
000855
000856 05 520-THING-OUT PIC X(05) VALUE "th!ng".
000857 05 520-HIGH-OUT PIC X(04) VALUE "h!gh".
000858 05 520-SHI-OUT PIC X(03) VALUE "sh!".
000859 05 520-CHI-OUT PIC X(03) VALUE "ch!".
000860 05 520-HIT-OUT PIC X(03) VALUE "h!t".
000861 05 520-OUR-OUT PIC X(03) VALUE "0ur".
000862 05 520-QMARK-OUT PIC X(02) VALUE " ".
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0018
LINE PG/LN A...B............................................................
000863 05 520-FSTOP-OUT PIC X(02) VALUE " ".
000864
000865 05 520-ARE-IN PIC X(05) VALUE " are ".
000866 05 520-WERE-IN PIC X(06) VALUE " were ".
000867 05 520-YOU-IN PIC X(05) VALUE " you ".
000868 05 520-YOUR-IN PIC X(06) VALUE " your ".
000869 05 520-MY-IN PIC X(04) VALUE " my ".
000870 05 520-IVE-IN PIC X(06) VALUE " i've ".
000871 05 520-IM-IN PIC X(05) VALUE " i'm ".
000872 05 520-I-AM-IN PIC X(06) VALUE " i am ".
000873 05 520-ME-IN PIC X(04) VALUE " me ".
000874 05 520-I-IN PIC X(03) VALUE " i ".
000875 05 520-YOURE-IN PIC X(08) VALUE " you're ".
000876 05 520-YOU-ARE-IN PIC X(09) VALUE " you are ".
000877 05 520-YOURSELF-IN PIC X(10) VALUE " yourself ".
000878
000879 05 520-AM-OUT PIC X(04) VALUE " am ".
000880 05 520-WAS-OUT PIC X(05) VALUE " was ".
000881 05 520-I-FIX PIC X(04) VALUE " i# ".
000882 05 520-IM-FIX PIC X(06) VALUE " i'm# ".
000883 05 520-I-AM-FIX PIC X(07) VALUE " i am# ".
000884 05 520-MY-FIX PIC X(05) VALUE " my# ".
000885 05 520-YOUR-FIX PIC X(07) VALUE " your# ".
000886 05 520-YOUVE-OUT PIC X(08) VALUE " you've ".
000887 05 520-YOURE-OUT PIC X(08) VALUE " you're ".
000888 05 520-YOU-FIX PIC X(06) VALUE " you# ".
000889 05 520-MYSELF-OUT PIC X(08) VALUE " myself ".
000890
000891 05 520-I-OUT PIC X(03) VALUE " I ".
000892 05 520-IM-OUT PIC X(05) VALUE " I'm ".
000893 05 520-I-AM-OUT PIC X(06) VALUE " I am ".
000894 05 520-MY-OUT PIC X(04) VALUE " my ".
000895 05 520-YOUR-OUT PIC X(06) VALUE " your ".
000896 05 520-YOU-OUT PIC X(05) VALUE " you ".
000897
000898
000899 01 540-REPLY-TABLE-DATA.
000900 05 PIC x(60) VALUE "29Don't you believe that I can*".
000901 05 PIC X(60) VALUE "29Perhaps you would like me to*".
000902 05 PIC x(60) VALUE "29Do you want me to be able to*".
000903 05 PIC x(60) VALUE "26Perhaps you don't want to*".
000904 05 PIC x(60) VALUE "26Do you want to be able to*".
000905 05 PIC x(60) VALUE "26What makes you think I am*".
000906
000907 05 PIC X(30) VALUE "35Does it please you to believ".
000908 05 PIC X(30) VALUE "e I am*".
000909
000910 05 PIC x(60) VALUE "29Perhaps you would like to be*".
000911
000912 05 PIC X(30) VALUE "31Do you sometimes wish you we".
000913 05 PIC X(30) VALUE "re*".
000914
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0019
LINE PG/LN A...B............................................................
000915 05 PIC x(60) VALUE "17Don't you really*".
000916 05 PIC x(60) VALUE "14Why don't you*".
000917 05 PIC x(60) VALUE "26Do you wish to be able to*".
000918 05 PIC x(60) VALUE "22Does that trouble you?".
000919 05 PIC x(60) VALUE "18Do you often feel*".
000920 05 PIC x(60) VALUE "18Do you often feel*".
000921 05 PIC x(60) VALUE "21Do you enjoy feeling*".
000922 05 PIC x(60) VALUE "30Do you really believe I don't*".
000923 05 PIC x(60) VALUE "28Perhaps in good time I will*".
000924 05 PIC x(60) VALUE "18Do you want me to*".
000925
000926 05 PIC X(30) VALUE "35Do you think you should be a".
000927 05 PIC X(30) VALUE "ble to*".
000928
000929 05 PIC x(60) VALUE "14Why can't you*".
000930
000931 05 PIC X(30) VALUE "46Why are you interested in wh".
000932 05 PIC X(30) VALUE "ether or not I am*".
000933
000934 05 PIC x(60) VALUE "31Would you prefer if I were not*".
000935 05 PIC x(60) VALUE "31Perhaps in your fantasies I am*".
000936 05 PIC x(60) VALUE "26How do you know you can't*".
000937 05 PIC x(60) VALUE "15Have you tried?".
000938 05 PIC x(60) VALUE "20Perhaps you can now*".
000939
000940 05 PIC X(30) VALUE "35Did you come to me because y".
000941 05 PIC X(30) VALUE "ou are*".
000942
000943 05 PIC x(60) VALUE "23How long have you been*".
000944
000945 05 PIC X(30) VALUE "34Do you believe it is normal ".
000946 05 PIC X(30) VALUE "to be*".
000947
000948 05 PIC x(60) VALUE "19Do you enjoy being*".
000949 05 PIC x(60) VALUE "31We were discussing you--not me.".
000950 05 PIC x(60) VALUE "06Oh, I*".
000951
000952 05 PIC X(30) VALUE "44You're not really talking ab".
000953 05 PIC X(30) VALUE "out me, are you?".
000954
000955 05 PIC X(30) VALUE "37What would it mean to you if".
000956 05 PIC X(30) VALUE " you got*".
000957
000958 05 PIC x(60) VALUE "16Why do you want*".
000959 05 PIC x(60) VALUE "21Suppose you soon got*".
000960 05 PIC x(60) VALUE "22What if you never got*".
000961 05 PIC x(60) VALUE "22I sometimes also want*".
000962 05 PIC x(60) VALUE "15Why do you ask?".
000963 05 PIC x(60) VALUE "32Does that question interest you?".
000964
000965 05 PIC X(30) VALUE "38What answer would please you".
000966 05 PIC X(30) VALUE " the most?".
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0020
LINE PG/LN A...B............................................................
000967
000968 05 PIC x(60) VALUE "18What do you think?".
000969
000970 05 PIC X(30) VALUE "38Are such questions on your m".
000971 05 PIC X(30) VALUE "ind often?".
000972
000973 05 PIC X(30) VALUE "40What is it that you really w".
000974 05 PIC X(30) VALUE "ant to know?".
000975
000976 05 PIC x(60) VALUE "27Have you asked anyone else?".
000977
000978 05 PIC X(30) VALUE "37Have you asked such question".
000979 05 PIC X(30) VALUE "s before?".
000980
000981 05 PIC X(30) VALUE "42What else comes to mind when".
000982 05 PIC X(30) VALUE " you ask that?".
000983
000984 05 PIC x(60) VALUE "24Names don't interest me.".
000985
000986 05 PIC X(30) VALUE "41I don't care about names -- ".
000987 05 PIC X(30) VALUE "Please go on.".
000988
000989 05 PIC x(60) VALUE "24Is that the real reason?".
000990
000991 05 PIC X(30) VALUE "37Don't any other reasons come".
000992 05 PIC X(30) VALUE " to mind?".
000993
000994 05 PIC X(30) VALUE "39Does that reason explain any".
000995 05 PIC X(30) VALUE "thing else?".
000996
000997 05 PIC X(30) VALUE "34What other reasons might the".
000998 05 PIC X(30) VALUE "re be?".
000999
001000 05 PIC x(60) VALUE "23Please don't apologize!".
001001 05 PIC x(60) VALUE "28Apologies are not necessary.".
001002
001003 05 PIC X(30) VALUE "45What feelings do you have wh".
001004 05 PIC X(30) VALUE "en you apologize?".
001005
001006 05 PIC x(60) VALUE "22Don't be so defensive!".
001007
001008 05 PIC X(30) VALUE "36What does that dream suggest".
001009 05 PIC X(30) VALUE " to you?".
001010
001011 05 PIC x(60) VALUE "19Do you dream often?".
001012
001013 05 PIC X(30) VALUE "35What persons appear in your ".
001014 05 PIC X(30) VALUE "dreams?".
001015
001016 05 PIC X(30) VALUE "33Are you disturbed by your dr".
001017 05 PIC X(30) VALUE "eams?".
001018
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0021
LINE PG/LN A...B............................................................
001019 05 PIC X(30) VALUE "43How do you do ...Please stat".
001020 05 PIC X(30) VALUE "e your problem.".
001021
001022 05 PIC x(60) VALUE "29You don't seem quite certain.".
001023 05 PIC x(60) VALUE "23Why the uncertain tone?".
001024 05 PIC x(60) VALUE "27Can't you be more positive?".
001025 05 PIC x(60) VALUE "16You aren't sure?".
001026 05 PIC x(60) VALUE "15Don't you know?".
001027
001028 05 PIC X(30) VALUE "38Are you saying no just to be".
001029 05 PIC X(30) VALUE " negative?".
001030
001031 05 PIC x(60) VALUE "29You are being a bit negative.".
001032 05 PIC x(60) VALUE "08Why not?".
001033 05 PIC x(60) VALUE "13Are you sure?".
001034 05 PIC x(60) VALUE "07Why no?".
001035 05 PIC x(60) VALUE "31Why are you concerned about my*".
001036 05 PIC x(60) VALUE "20What about your own*".
001037
001038 05 PIC X(30) VALUE "36Can you think of a specific ".
001039 05 PIC X(30) VALUE "example?".
001040
001041 05 PIC x(60) VALUE "05When?".
001042 05 PIC x(60) VALUE "25What are you thinking of?".
001043 05 PIC x(60) VALUE "15Really, always?".
001044 05 PIC x(60) VALUE "23Do you really think so?".
001045 05 PIC x(60) VALUE "21But you are not sure*".
001046 05 PIC x(60) VALUE "13Do you doubt*".
001047 05 PIC x(60) VALUE "12In what way?".
001048 05 PIC x(60) VALUE "28What resemblance do you see?".
001049
001050 05 PIC X(30) VALUE "40What does the similarity sug".
001051 05 PIC X(30) VALUE "gest to you?".
001052
001053 05 PIC X(30) VALUE "34What other connections do yo".
001054 05 PIC X(30) VALUE "u see?".
001055
001056 05 PIC X(30) VALUE "38Could there really be some c".
001057 05 PIC X(30) VALUE "onnection?".
001058
001059 05 PIC x(60) VALUE "04How?".
001060 05 PIC x(60) VALUE "24You seem quite positive.".
001061 05 PIC x(60) VALUE "13Are you sure?".
001062 05 PIC x(60) VALUE "06I see.".
001063 05 PIC x(60) VALUE "13I understand.".
001064
001065 05 PIC X(30) VALUE "41Why do you bring up the topi".
001066 05 PIC X(30) VALUE "c of friends?".
001067
001068 05 PIC x(60) VALUE "26Do your friends worry you?".
001069 05 PIC x(60) VALUE "28Do your friends pick on you?".
001070
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0022
LINE PG/LN A...B............................................................
001071 05 PIC X(30) VALUE "34Are you sure you have any fr".
001072 05 PIC X(30) VALUE "iends?".
001073
001074 05 PIC x(60) VALUE "30Do you impose on your friends?".
001075
001076 05 PIC X(30) VALUE "42Perhaps your love for friend".
001077 05 PIC X(30) VALUE "s worries you.".
001078
001079 05 PIC x(60) VALUE "23Do computers worry you?".
001080
001081 05 PIC X(30) VALUE "39Are you talking about me in ".
001082 05 PIC X(30) VALUE "particular?".
001083
001084 05 PIC X(30) VALUE "31Are you frightened by machin".
001085 05 PIC X(30) VALUE "es?".
001086
001087 05 PIC x(60) VALUE "29Why do you mention computers?".
001088
001089 05 PIC X(30) VALUE "56What do you think machines h".
001090 05 PIC X(30) VALUE "ave to do with your problem?".
001091
001092 05 PIC X(30) VALUE "42Don't you think computers ca".
001093 05 PIC X(30) VALUE "n help people?".
001094
001095 05 PIC X(30) VALUE "43What is it about machines th".
001096 05 PIC X(30) VALUE "at worries you?".
001097
001098 05 PIC X(30) VALUE "44Say, do you have any psychol".
001099 05 PIC X(30) VALUE "ogical problems?".
001100
001101 05 PIC x(60) VALUE "30What does that suggest to you?".
001102 05 PIC x(60) VALUE "06I see.".
001103
001104 05 PIC X(30) VALUE "36I'm not sure I understand yo".
001105 05 PIC X(30) VALUE "u fully.".
001106
001107 05 PIC X(30) VALUE "36Come, Come, elucidate your t".
001108 05 PIC X(30) VALUE "houghts.".
001109
001110 05 PIC x(60) VALUE "26Can you elaborate on that?".
001111 05 PIC x(60) VALUE "26That is quite interesting.".
001112
001113 01 540-REPLY-TABLE REDEFINES 540-REPLY-TABLE-DATA.
001114 05 540-REPLY-ENTRY OCCURS 112 TIMES
001115 INDEXED BY 540-R.
001116 10 540-REPLY-LENGTH PIC 9(02).
001117 10 540-REPLY PIC X(58).
001118
001119
001120 01 560-REPLY-LOCATER-DATA.
001121 05 FILLER PIC X(12) VALUE "000100030004".
001122 05 FILLER PIC X(12) VALUE "000400050005".
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0023
LINE PG/LN A...B............................................................
001123 05 FILLER PIC X(12) VALUE "000600090009".
001124 05 FILLER PIC X(12) VALUE "000600090009".
001125 05 FILLER PIC X(12) VALUE "001000130013".
001126 05 FILLER PIC X(12) VALUE "001400160016".
001127 05 FILLER PIC X(12) VALUE "001700190019".
001128 05 FILLER PIC X(12) VALUE "002000210021".
001129 05 FILLER PIC X(12) VALUE "002200240024".
001130 05 FILLER PIC X(12) VALUE "002500270027".
001131 05 FILLER PIC X(12) VALUE "002800310031".
001132 05 FILLER PIC X(12) VALUE "002800310031".
001133 05 FILLER PIC X(12) VALUE "003200340034".
001134 05 FILLER PIC X(12) VALUE "003500390039".
001135 05 FILLER PIC X(12) VALUE "004000480048".
001136 05 FILLER PIC X(12) VALUE "004000480048".
001137 05 FILLER PIC X(12) VALUE "004000480048".
001138 05 FILLER PIC X(12) VALUE "004000480048".
001139 05 FILLER PIC X(12) VALUE "004000480048".
001140 05 FILLER PIC X(12) VALUE "004000480048".
001141 05 FILLER PIC X(12) VALUE "004900500050".
001142 05 FILLER PIC X(12) VALUE "005100540054".
001143 05 FILLER PIC X(12) VALUE "005500580058".
001144 05 FILLER PIC X(12) VALUE "005900620062".
001145 05 FILLER PIC X(12) VALUE "006300630063".
001146 05 FILLER PIC X(12) VALUE "006300630063".
001147 05 FILLER PIC X(12) VALUE "006400680068".
001148 05 FILLER PIC X(12) VALUE "006900730073".
001149 05 FILLER PIC X(12) VALUE "007400750075".
001150 05 FILLER PIC X(12) VALUE "007600790079".
001151 05 FILLER PIC X(12) VALUE "008000820082".
001152 05 FILLER PIC X(12) VALUE "008300890089".
001153 05 FILLER PIC X(12) VALUE "009000920092".
001154 05 FILLER PIC X(12) VALUE "009300980098".
001155 05 FILLER PIC X(12) VALUE "009901050105".
001156 05 FILLER PIC X(12) VALUE "010601120112".
001157
001158 01 560-REPLY-LOCATER-TABLE REDEFINES 560-REPLY-LOCATER-DATA.
001159 05 560-REPLY-LOCATER-ENTRY OCCURS 36 TIMES INDEXED BY 560-L.
001160 10 560-REPLY-LO PIC 9(04).
001161 10 560-REPLY-HI PIC 9(04).
001162 10 560-REPLY-LAST-USED PIC 9(04).
001163
001164 01 600-PROGRAM-MESSAGES.
001165 05 600-REPLY-LIST.
001166 10 FILLER PIC X(07) VALUE 'Reply: '.
001167 10 600-REPLY-DATA PIC X(70) VALUE SPACES.
001168
001169 05 600-INITIAL-MESSAGE PIC X(40) VALUE
001170 "Hi! I'm ELIZA. What's your problem?".
001171
001172 05 600-GOODBYE-MESSAGE PIC X(40) VALUE
001173 "If that's how you feel--goodbye...".
001174
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0024
LINE PG/LN A...B............................................................
001175 05 600-NO-REPEAT-MSG PIC X(32) VALUE
001176 "Please don't repeat yourself!".
001177
001178 PROCEDURE DIVISION.
001179
001180 ****************************************************************
001181 * 0 0 0 0 - M A I N L I N E . *
001182 ****************************************************************
001183 * START THE PSYCHOTHERAPIST DIALOG WITH THE USER, ANALYZE *
001184 * THE USER INPUT AND GENERATE THE REPLIES. THE USER CAN *
001185 * TYPE "SHUT UP" OR SIMPLY "SHUT" TO TERMINATE THE SESSION. *
001186 ****************************************************************
001187
001188 0000-MAINLINE.
001189
001190 DISPLAY SPACE
warning: DISPLAY statement not terminated by END-DISPLAY
001191 MOVE SPACE TO 100-EOF-FLAG
001192 DISPLAY 600-INITIAL-MESSAGE
warning: DISPLAY statement not terminated by END-DISPLAY
001193 PERFORM UNTIL 88-100-ALL-DONE
001194 ACCEPT 200-USER-INPUT
warning: ACCEPT statement not terminated by END-ACCEPT
001195 MOVE FUNCTION LOWER-CASE (200-USER-INPUT)
001196 TO 210-USER-INPUT-LC
001197 IF 210-USER-INPUT-LC (1:4) = 300-SHUT
001198 SET 88-100-ALL-DONE TO TRUE
001199 DISPLAY 600-GOODBYE-MESSAGE
warning: DISPLAY statement not terminated by END-DISPLAY
001200 ELSE
001201 IF 210-USER-INPUT-LC = 220-LAST-USER-INPUT
001202 DISPLAY 600-NO-REPEAT-MSG
warning: DISPLAY statement not terminated by END-DISPLAY
001203 ELSE
001204 MOVE 210-USER-INPUT-LC
001205 TO 220-LAST-USER-INPUT
001206 PERFORM 1000-SCAN-FOR-KEYWORD
001207 IF 400-HOLD-OFFSET > ZERO
001208 PERFORM 2000-TRANSLATE-USER-INPUT
001209 END-IF
001210 PERFORM 3000-BUILD-KEYWORD-REPLY
001211 END-IF
001212 END-IF
001213 END-PERFORM
001214
001215 STOP RUN.
001216
001217 ****************************************************************
001218 * 1 0 0 0 - S C A N - F O R - K E Y W O R D . *
001219 ****************************************************************
001220 * SEARCH THE USER INPUT FOR KEYWORDS THAT WILL TRIGGER *
001221 * THE RESPONSES FROM THE REPLY TABLE. *
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0025
LINE PG/LN A...B............................................................
001222 ****************************************************************
001223
001224 1000-SCAN-FOR-KEYWORD.
001225
001226 PERFORM 1100-MASK-STRING-HI
001227
001228 SET 88-100-KEYWORD-NOT-FOUND TO TRUE
001229 MOVE ZERO TO 400-HOLD-OFFSET
001230 PERFORM VARYING 400-SUB FROM +1 BY +1
001231 UNTIL 400-SUB > 300-MAX-SCAN-LEN
001232 OR 88-100-KEYWORD-FOUND
001233 PERFORM VARYING 500-K FROM +1 BY +1
001234 UNTIL 500-K > 300-MAX-KEYWORD-ENTRIES
001235 OR 88-100-KEYWORD-FOUND
001236 MOVE 500-KW-LEN (500-K)
001237 TO 400-HOLD-KW-LEN
001238 IF 210-USER-INPUT-LC (400-SUB:400-HOLD-KW-LEN) =
001239 500-KEYWORD (500-K)
001240 SET 400-HOLD-500-K TO 500-K
warning: some digits may be truncated
001241 SET 88-100-KEYWORD-FOUND TO TRUE
001242 COMPUTE 400-HOLD-OFFSET =
warning: COMPUTE statement not terminated by END-COMPUTE
001243 400-SUB + 400-HOLD-KW-LEN
001244 COMPUTE 400-SUB = 400-SCAN-LEN + 1
warning: COMPUTE statement not terminated by END-COMPUTE
001245 END-IF
001246 END-PERFORM
001247 END-PERFORM
001248
001249 IF 88-100-KEYWORD-NOT-FOUND
001250 MOVE 300-MAX-KEYWORD-ENTRIES
001251 TO 400-HOLD-500-K
001252 SET 88-100-KEYWORD-FOUND TO TRUE
001253 END-IF
001254
001255 PERFORM 1200-RESTORE-STRING-HI
001256 .
001257
001258 ****************************************************************
001259 * 1 1 0 0 - M A S K - S T R I N G - H I . *
001260 ****************************************************************
001261 * WORDS LIKE "THING" AND "HIGH" WERE CAUSING A KEYWORD *
001262 * "HI" MATCH THAT TRIGGERED THE HELLO/HI KEYWORD RESPONSES, *
001263 * SO THEY ARE MASKED HERE TO PREVENT THAT. *
001264 * ALSO REMOVE TRAILING "?", "!", AND "." CHARACTERS. *
001265 ****************************************************************
001266
001267 1100-MASK-STRING-HI.
001268
001269 MOVE FUNCTION SUBSTITUTE
001270 (210-USER-INPUT-LC, 520-THING-IN, 520-THING-OUT,
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0026
LINE PG/LN A...B............................................................
001271 520-HIGH-IN, 520-HIGH-OUT,
001272 520-SHI-IN, 520-SHI-OUT,
001273 520-CHI-IN, 520-CHI-OUT,
001274 520-HIT-IN, 520-HIT-OUT,
001275 520-OUR-IN, 520-OUR-OUT,
001276 520-QMARK-IN, 520-QMARK-OUT,
001277 520-XMARK-IN, 520-QMARK-OUT,
001278 520-FSTOP-IN, 520-FSTOP-OUT)
001279 TO 250-SUBSTITUTE-WORK
001280 MOVE 250-SUBSTITUTE-WORK TO 210-USER-INPUT-LC
warning: sending field larger than receiving field
001281 ****************************************************************
001282 * REMOVE MULTIPLE TRAILING QUESTION MARKS, EXCLAMATION *
001283 * POINTS, AND PERIODS (FULL STOPS). *
001284 ****************************************************************
001285 MOVE FUNCTION SUBSTITUTE
001286 (210-USER-INPUT-LC, 520-QMARK-IN, 520-QMARK-OUT,
001287 520-XMARK-IN, 520-QMARK-OUT,
001288 520-FSTOP-IN, 520-FSTOP-OUT)
001289 TO 250-SUBSTITUTE-WORK
001290 MOVE 250-SUBSTITUTE-WORK TO 210-USER-INPUT-LC
warning: sending field larger than receiving field
001291 MOVE FUNCTION SUBSTITUTE
001292 (210-USER-INPUT-LC, 520-QMARK-IN, 520-QMARK-OUT,
001293 520-XMARK-IN, 520-QMARK-OUT,
001294 520-FSTOP-IN, 520-FSTOP-OUT)
001295 TO 250-SUBSTITUTE-WORK
001296 MOVE 250-SUBSTITUTE-WORK TO 210-USER-INPUT-LC
warning: sending field larger than receiving field
001297 .
001298
001299 ****************************************************************
001300 * 1 2 0 0 - R E S T O R E - S T R I N G - H I . *
001301 ****************************************************************
001302 * AFTER COMPLETING THE KEYWORD SEARCH, RESTORE THE "HI" *
001303 * STRING IN THE USER INPUT. *
001304 ****************************************************************
001305
001306 1200-RESTORE-STRING-HI.
001307
001308 MOVE FUNCTION SUBSTITUTE
001309 (210-USER-INPUT-LC, 520-THING-OUT, 520-THING-IN,
001310 520-HIGH-OUT, 520-HIGH-IN,
001311 520-SHI-OUT, 520-SHI-IN,
001312 520-CHI-OUT, 520-CHI-IN,
001313 520-HIT-OUT, 520-HIT-IN,
001314 520-OUR-OUT, 520-OUR-IN)
001315 TO 250-SUBSTITUTE-WORK
001316 MOVE 250-SUBSTITUTE-WORK TO 210-USER-INPUT-LC
warning: sending field larger than receiving field
001317 .
001318
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0027
LINE PG/LN A...B............................................................
001319 ****************************************************************
001320 * 2 0 0 0 - T R A N S L A T E - U S E R - I N P U T . *
001321 ****************************************************************
001322 * PERFORM PRONOUN REPLACEMENT AND CONJUGATION ON THE USER *
001323 * INPUT SO IT WILL SOUND FAIRLY NORMAL WHEN APPENDED TO *
001324 * THE DOCTOR'S REPLY. *
001325 ****************************************************************
001326
001327 2000-TRANSLATE-USER-INPUT.
001328
001329 MOVE 210-USER-INPUT-LC (400-HOLD-OFFSET:)
001330 TO 230-TRANSLATED-INPUT.
001331
001332 MOVE FUNCTION SUBSTITUTE
001333 (230-TRANSLATED-INPUT, 520-ARE-IN, 520-AM-OUT,
001334 520-WERE-IN, 520-WAS-OUT
001335 520-YOU-IN, 520-I-FIX,
001336 520-YOUR-IN, 520-MY-FIX,
001337 520-MY-IN, 520-YOUR-FIX,
001338 520-IVE-IN, 520-YOUVE-OUT,
001339 520-IM-IN, 520-YOURE-OUT,
001340 520-I-AM-IN, 520-YOURE-OUT,
001341 520-ME-IN, 520-YOU-FIX,
001342 520-I-IN, 520-YOU-FIX,
001343 520-YOURE-IN 520-IM-FIX,
001344 520-YOU-ARE-IN 520-I-AM-FIX,
001345 520-YOURSELF-IN, 520-MYSELF-OUT)
001346 TO 250-SUBSTITUTE-WORK.
001347
001348 MOVE 250-SUBSTITUTE-WORK TO 230-TRANSLATED-INPUT.
warning: sending field larger than receiving field
001349
001350 MOVE FUNCTION SUBSTITUTE
001351 (230-TRANSLATED-INPUT, 520-I-FIX, 520-I-OUT,
001352 520-IM-FIX, 520-IM-OUT,
001353 520-I-AM-FIX, 520-I-AM-OUT,
001354 520-MY-FIX, 520-MY-OUT,
001355 520-YOUR-FIX, 520-YOUR-OUT,
001356 520-YOU-FIX, 520-YOU-OUT)
001357 TO 250-SUBSTITUTE-WORK.
001358
001359 MOVE 250-SUBSTITUTE-WORK TO 230-TRANSLATED-INPUT
warning: sending field larger than receiving field
001360 .
001361
001362 ****************************************************************
001363 * 3 0 0 0 - B U I L D - K E Y W O R D - R E P L Y . *
001364 ****************************************************************
001365 * BUILD THE REPLY BASED ON THE KEYWORD FOUND IN THE USER *
001366 * INPUT. NOTE THERE ARE A VARIABLE NUMBER OF POSSIBLE *
001367 * REPLIES FOR EACH KEYWORD, AND SOME REPLIES INCLUDE TEXT *
001368 * ECHOED FROM THE USER INPUT. *
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0028
LINE PG/LN A...B............................................................
001369 ****************************************************************
001370
001371 3000-BUILD-KEYWORD-REPLY.
001372
001373 SET 560-L TO 400-HOLD-500-K
001374 ADD +1 TO 560-REPLY-LAST-USED (560-L)
warning: ADD statement not terminated by END-ADD
001375 IF 560-REPLY-LAST-USED (560-L) > 560-REPLY-HI (560-L)
001376 MOVE 560-REPLY-LO (560-L) TO 560-REPLY-LAST-USED (560-L)
001377 END-IF
001378
001379 SET 540-R TO 560-REPLY-LAST-USED (560-L)
001380 MOVE 540-REPLY (540-R) TO 240-REPLY
001381 MOVE 540-REPLY-LENGTH (540-R) TO 400-SUB
001382 IF 240-REPLY (400-SUB:1) = 300-ASTERISK
001383 MOVE SPACE TO 240-REPLY (400-SUB:1)
001384 MOVE 230-TRANSLATED-INPUT
warning: sending field larger than receiving field
001385 TO 240-REPLY (400-SUB:)
001386 PERFORM 3100-FIX-MORE-BAD-GRAMMAR
001387 MOVE ZERO TO 400-SPACES-COUNT
001388 INSPECT 240-REPLY TALLYING 400-SPACES-COUNT
001389 FOR TRAILING SPACES
001390 ****************************************************************
001391 * MERGE USER INPUT INTO THE REPLY AND THEN CORRECT *
001392 * ENDING PUNCTUATION FOR "?" OR "." (FULL-STOP). *
001393 ****************************************************************
001394 IF 400-SPACES-COUNT > ZERO
001395 AND 400-SPACES-COUNT < (LENGTH OF 240-REPLY) - 1
001396 COMPUTE 400-OFFSET =
001397 (LENGTH OF 240-REPLY) - 400-SPACES-COUNT + 1
001398 END-COMPUTE
001399 IF 560-REPLY-LAST-USED (560-L) = 02 OR 04 OR 05
001400 OR 08 OR 18 OR 24 OR 33 OR 39 OR 81
001401 MOVE "." TO 240-REPLY (400-OFFSET:1)
001402 ELSE
001403 MOVE "?" TO 240-REPLY (400-OFFSET:1)
001404 END-IF
001405 END-IF
001406 END-IF
001407
001408 DISPLAY 240-REPLY
warning: DISPLAY statement not terminated by END-DISPLAY
001409 .
001410
001411 ****************************************************************
001412 * 3 1 0 0 - F I X - M O R E - B A D - G R A M M A R . *
001413 ****************************************************************
001414 * HERE ARE SOME MORE FIXUPS FOR GRAMMAR PROBLEMS. BUT IT *
001415 * DOESN'T SOLVE ALL OF THEM. *
001416 ****************************************************************
001417
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0029
LINE PG/LN A...B............................................................
001418 3100-FIX-MORE-BAD-GRAMMAR.
001419
001420 MOVE FUNCTION SUBSTITUTE (240-REPLY,
001421 " you want I ", " you want me ",
001422 " you got I ", " you got me ",
001423 " to make I ", " to make me ",
001424 " you been I ", " you been me ",
001425 " you be I ", " you be me ",
001426 " to be I ", " to be me ",
001427 " soon got I ", " soon got me ",
001428 " never got I ", " never got me ",
001429 " sometimes also want I ", " sometimes also want me ",
001430 " normal to be I ", " normal to be me ",
001431 " enjoy being I ", " enjoy being me ",
001432 " can't make I ", " can't make me ",
001433 " can now make I ", " can now make me ",
001434 " I are ", " I am ",
001435 " you am ", " you are ",
001436 " with I ", " with me")
001437 TO 250-SUBSTITUTE-WORK.
001438
001439 MOVE 250-SUBSTITUTE-WORK TO 240-REPLY.
warning: sending field larger than receiving field
001440
001441 END PROGRAM ELIZA.
001442 >>>>>>> .r513
error: invalid indicator '>' at column 7
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0030
NAME DEFINED REFERENCES
PROGRAM ELIZA
100-PROGRAM-FLAGS 46 referenced by child
100-EOF-FLAG 47 *470 *477
88-100-ALL-DONE 48 472 477
100-KEYWORD-FLAG 49 *507 *520 *531
88-100-KEYWORD-FOUND 50 511 514 520 531
88-100-KEYWORD-NOT-FOUND 51 507 528
200-USER-INPUT 53 *473 474
210-USER-INPUT-LC 55 *475 476 480 483 517
549 *559 565 *569 571
*575 588 *595 608
220-LAST-USER-INPUT 57 480 *484
230-TRANSLATED-INPUT 59 *609 612 *627 630 *638
663
240-REPLY 61 *659 661 *662 *664 667
674 676 *680 *682 687
699 *718
250-SUBSTITUTE-WORK 63 *558 559 *568 569 *574
575 *594 595 *625 627
*636 638 *716 718
300-PROGRAM-CONSTANTS 65 referenced by child
300-MAX-KEYWORD-ENTRIES 66 513 529
300-MAX-SCAN-LEN 67 510
300-SHUT 68 476
300-ASTERISK 69 661
400-PROGRAM-COUNTERS 71 referenced by child
400-HOLD-KW-LEN 72 *516 517 522
400-SCAN-LEN 73 523
400-HOLD-500-K 74 *519 *530 652
400-HOLD-OFFSET 75 486 *508 521 608
400-OFFSET 76 675 680 682
400-SUB 77 509 510 517 522 523
*660 661 662 664
400-SPACES-COUNT 78 *666 667 673 674 676
500-KEYWORD-TABLE-DATA 80 not referenced
500-KEYWORD-TABLE 118 referenced by child
500-KEYWORD-ENTRY 119 referenced by child
500-KW-LEN 121 515
500-KEYWORD 122 518
520-TRANSLATION-CONSTANTS 124 referenced by child
520-THING-IN 125 549 588
520-HIGH-IN 126 550 589
520-SHI-IN 127 551 590
520-CHI-IN 128 552 591
520-HIT-IN 129 553 592
520-OUR-IN 130 554 593
520-QMARK-IN 131 555 565 571
520-XMARK-IN 132 556 566 572
520-FSTOP-IN 133 557 567 573
520-THING-OUT 135 549 588
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0031
NAME DEFINED REFERENCES
520-HIGH-OUT 136 550 589
520-SHI-OUT 137 551 590
520-CHI-OUT 138 552 591
520-HIT-OUT 139 553 592
520-OUR-OUT 140 554 593
520-QMARK-OUT 141 555 556 565 566 571
572
520-FSTOP-OUT 142 557 567 573
520-ARE-IN 144 612
520-WERE-IN 145 613
520-YOU-IN 146 614
520-YOUR-IN 147 615
520-MY-IN 148 616
520-IVE-IN 149 617
520-IM-IN 150 618
520-I-AM-IN 151 619
520-ME-IN 152 620
520-I-IN 153 621
520-YOURE-IN 154 622
520-YOU-ARE-IN 155 623
520-YOURSELF-IN 156 624
520-AM-OUT 158 612
520-WAS-OUT 159 613
520-I-FIX 160 614 630
520-IM-FIX 161 622 631
520-I-AM-FIX 162 623 632
520-MY-FIX 163 615 633
520-YOUR-FIX 164 616 634
520-YOUVE-OUT 165 617
520-YOURE-OUT 166 618 619
520-YOU-FIX 167 620 621 635
520-MYSELF-OUT 168 624
520-I-OUT 170 630
520-IM-OUT 171 631
520-I-AM-OUT 172 632
520-MY-OUT 173 633
520-YOUR-OUT 174 634
520-YOU-OUT 175 635
540-REPLY-TABLE-DATA 178 not referenced
540-REPLY-TABLE 392 referenced by child
540-REPLY-ENTRY 393 referenced by child
540-REPLY-LENGTH 395 660
540-REPLY 396 659
560-REPLY-LOCATER-DATA 399 not referenced
560-REPLY-LOCATER-TABLE 437 referenced by child
560-REPLY-LOCATER-ENTRY 438 referenced by child
560-REPLY-LO 439 655
560-REPLY-HI 440 654
560-REPLY-LAST-USED 441 653 654 *655 658 678
600-PROGRAM-MESSAGES 443 referenced by child
600-REPLY-LIST 444 not referenced
600-REPLY-DATA 446 not referenced
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0032
NAME DEFINED REFERENCES
600-INITIAL-MESSAGE 448 471
600-GOODBYE-MESSAGE 451 478
600-NO-REPEAT-MSG 454 481
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0033
LABEL DEFINED REFERENCES
PROGRAM ELIZA
E ELIZA 467
P 0000-MAINLINE 467 not referenced
P 1000-SCAN-FOR-KEYWORD 503 485
P 1100-MASK-STRING-HI 546 505
P 1200-RESTORE-STRING-HI 585 534
P 2000-TRANSLATE-USER-INPUT 606 487
P 3000-BUILD-KEYWORD-REPLY 650 489
P 3100-FIX-MORE-BAD-GRAMMAR 697 665
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0034
NAME DEFINED REFERENCES
PROGRAM ELIZA
100-PROGRAM-FLAGS 767 referenced by child
100-EOF-FLAG 768 *1191 *1198
88-100-ALL-DONE 769 1193 1198
100-KEYWORD-FLAG 770 *1228 *1241 *1252
88-100-KEYWORD-FOUND 771 1232 1235 1241 1252
88-100-KEYWORD-NOT-FOUND 772 1228 1249
200-USER-INPUT 774 *1194 1195
210-USER-INPUT-LC 776 *1196 1197 1201 1204 1238
1270 *1280 1286 *1290 1292
*1296 1309 *1316 1329
220-LAST-USER-INPUT 778 1201 *1205
230-TRANSLATED-INPUT 780 *1330 1333 *1348 1351 *1359
1384
240-REPLY 782 *1380 1382 *1383 *1385 1388
1395 1397 *1401 *1403 1408
1420 *1439
250-SUBSTITUTE-WORK 784 *1279 1280 *1289 1290 *1295
1296 *1315 1316 *1346 1348
*1357 1359 *1437 1439
300-PROGRAM-CONSTANTS 786 referenced by child
300-MAX-KEYWORD-ENTRIES 787 1234 1250
300-MAX-SCAN-LEN 788 1231
300-SHUT 789 1197
300-ASTERISK 790 1382
400-PROGRAM-COUNTERS 792 referenced by child
400-HOLD-KW-LEN 793 *1237 1238 1243
400-SCAN-LEN 794 1244
400-HOLD-500-K 795 *1240 *1251 1373
400-HOLD-OFFSET 796 1207 *1229 1242 1329
400-OFFSET 797 1396 1401 1403
400-SUB 798 1230 1231 1238 1243 1244
*1381 1382 1383 1385
400-SPACES-COUNT 799 *1387 1388 1394 1395 1397
500-KEYWORD-TABLE-DATA 801 not referenced
500-KEYWORD-TABLE 839 referenced by child
500-KEYWORD-ENTRY 840 referenced by child
500-KW-LEN 842 1236
500-KEYWORD 843 1239
520-TRANSLATION-CONSTANTS 845 referenced by child
520-THING-IN 846 1270 1309
520-HIGH-IN 847 1271 1310
520-SHI-IN 848 1272 1311
520-CHI-IN 849 1273 1312
520-HIT-IN 850 1274 1313
520-OUR-IN 851 1275 1314
520-QMARK-IN 852 1276 1286 1292
520-XMARK-IN 853 1277 1287 1293
520-FSTOP-IN 854 1278 1288 1294
520-THING-OUT 856 1270 1309
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0035
NAME DEFINED REFERENCES
520-HIGH-OUT 857 1271 1310
520-SHI-OUT 858 1272 1311
520-CHI-OUT 859 1273 1312
520-HIT-OUT 860 1274 1313
520-OUR-OUT 861 1275 1314
520-QMARK-OUT 862 1276 1277 1286 1287 1292
1293
520-FSTOP-OUT 863 1278 1288 1294
520-ARE-IN 865 1333
520-WERE-IN 866 1334
520-YOU-IN 867 1335
520-YOUR-IN 868 1336
520-MY-IN 869 1337
520-IVE-IN 870 1338
520-IM-IN 871 1339
520-I-AM-IN 872 1340
520-ME-IN 873 1341
520-I-IN 874 1342
520-YOURE-IN 875 1343
520-YOU-ARE-IN 876 1344
520-YOURSELF-IN 877 1345
520-AM-OUT 879 1333
520-WAS-OUT 880 1334
520-I-FIX 881 1335 1351
520-IM-FIX 882 1343 1352
520-I-AM-FIX 883 1344 1353
520-MY-FIX 884 1336 1354
520-YOUR-FIX 885 1337 1355
520-YOUVE-OUT 886 1338
520-YOURE-OUT 887 1339 1340
520-YOU-FIX 888 1341 1342 1356
520-MYSELF-OUT 889 1345
520-I-OUT 891 1351
520-IM-OUT 892 1352
520-I-AM-OUT 893 1353
520-MY-OUT 894 1354
520-YOUR-OUT 895 1355
520-YOU-OUT 896 1356
540-REPLY-TABLE-DATA 899 not referenced
540-REPLY-TABLE 1113 referenced by child
540-REPLY-ENTRY 1114 referenced by child
540-REPLY-LENGTH 1116 1381
540-REPLY 1117 1380
560-REPLY-LOCATER-DATA 1120 not referenced
560-REPLY-LOCATER-TABLE 1158 referenced by child
560-REPLY-LOCATER-ENTRY 1159 referenced by child
560-REPLY-LO 1160 1376
560-REPLY-HI 1161 1375
560-REPLY-LAST-USED 1162 1374 1375 *1376 1379 1399
600-PROGRAM-MESSAGES 1164 referenced by child
600-REPLY-LIST 1165 not referenced
600-REPLY-DATA 1167 not referenced
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0036
NAME DEFINED REFERENCES
600-INITIAL-MESSAGE 1169 1192
600-GOODBYE-MESSAGE 1172 1199
600-NO-REPEAT-MSG 1175 1202
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0037
LABEL DEFINED REFERENCES
PROGRAM ELIZA
E ELIZA 1188
P 0000-MAINLINE 1188 not referenced
P 1000-SCAN-FOR-KEYWORD 1224 1206
P 1100-MASK-STRING-HI 1267 1226
P 1200-RESTORE-STRING-HI 1306 1255
P 2000-TRANSLATE-USER-INPUT 1327 1208
P 3000-BUILD-KEYWORD-REPLY 1371 1210
P 3100-FIX-MORE-BAD-GRAMMAR 1418 1386
GnuCOBOL 2.2.0 eliza.cbl Thu Oct 12 21:22:20 2017 Page 0038
Error/Warning summary:
eliza.cbl: 1: error: invalid indicator '<' at column 7
eliza.cbl: 721: error: invalid indicator '|' at column 7
eliza.cbl: 722: error: invalid indicator '=' at column 7
eliza.cbl: 1442: error: invalid indicator '>' at column 7
eliza.cbl: 469: warning: DISPLAY statement not terminated by END-DISPLAY
eliza.cbl: 471: warning: DISPLAY statement not terminated by END-DISPLAY
eliza.cbl: 473: warning: ACCEPT statement not terminated by END-ACCEPT
eliza.cbl: 478: warning: DISPLAY statement not terminated by END-DISPLAY
eliza.cbl: 481: warning: DISPLAY statement not terminated by END-DISPLAY
eliza.cbl: 519: warning: some digits may be truncated
eliza.cbl: 521: warning: COMPUTE statement not terminated by END-COMPUTE
eliza.cbl: 523: warning: COMPUTE statement not terminated by END-COMPUTE
eliza.cbl: 559: warning: sending field larger than receiving field
eliza.cbl: 569: warning: sending field larger than receiving field
eliza.cbl: 575: warning: sending field larger than receiving field
eliza.cbl: 595: warning: sending field larger than receiving field
eliza.cbl: 627: warning: sending field larger than receiving field
eliza.cbl: 638: warning: sending field larger than receiving field
eliza.cbl: 653: warning: ADD statement not terminated by END-ADD
eliza.cbl: 663: warning: sending field larger than receiving field
eliza.cbl: 687: warning: DISPLAY statement not terminated by END-DISPLAY
eliza.cbl: 718: warning: sending field larger than receiving field
eliza.cbl: 725: error: redefinition of program ID 'ELIZA'
eliza.cbl: 1190: warning: DISPLAY statement not terminated by END-DISPLAY
eliza.cbl: 1192: warning: DISPLAY statement not terminated by END-DISPLAY
eliza.cbl: 1194: warning: ACCEPT statement not terminated by END-ACCEPT
eliza.cbl: 1199: warning: DISPLAY statement not terminated by END-DISPLAY
eliza.cbl: 1202: warning: DISPLAY statement not terminated by END-DISPLAY
eliza.cbl: 1240: warning: some digits may be truncated
eliza.cbl: 1242: warning: COMPUTE statement not terminated by END-COMPUTE
eliza.cbl: 1244: warning: COMPUTE statement not terminated by END-COMPUTE
eliza.cbl: 1280: warning: sending field larger than receiving field
eliza.cbl: 1290: warning: sending field larger than receiving field
eliza.cbl: 1296: warning: sending field larger than receiving field
eliza.cbl: 1316: warning: sending field larger than receiving field
eliza.cbl: 1348: warning: sending field larger than receiving field
eliza.cbl: 1359: warning: sending field larger than receiving field
eliza.cbl: 1374: warning: ADD statement not terminated by END-ADD
eliza.cbl: 1384: warning: sending field larger than receiving field
eliza.cbl: 1408: warning: DISPLAY statement not terminated by END-DISPLAY
eliza.cbl: 1439: warning: sending field larger than receiving field
36 warnings in compilation group
5 errors in compilation group