Eliza fix

Discuss software for the Apple 1/replica 1

Eliza fix

Postby vbriel » Dec Wed 27, 2006 7:53 am

Anybody have spare time to clean up Eliza? I was working on a version from Creative Computing and I just don't have time to fix it. I have some debug code in it.

Here's the original:

http://www.brielcomputers.com/files/ELIZA.TXT

and here's the one I've been working on:

http://www.brielcomputers.com/files/ELIZANEW.TXT

This will be a nice classic to add to the collection once finished!

Vince
User avatar
vbriel
Site Admin
 
Posts: 1184
Joined: Jul Tue 19, 2005 12:10 pm
Location: Ohio

Postby vbriel » Jan Fri 12, 2007 7:29 pm

Ok, a SPECIAL THANKS goes out to Carl Claunch for fixing Eliza so that it works. Nice mods! Here it is folks, the classic game that everybody loves, ELIZA.

http://www.brielcomputers.com/files/ELIZA.TXT

Start your replica 1, press RESET, type E000R [ENTER KEY] and dump the file. Enjoy!

Vince
User avatar
vbriel
Site Admin
 
Posts: 1184
Joined: Jul Tue 19, 2005 12:10 pm
Location: Ohio

Postby J. Calhoun » Jan Sat 13, 2007 3:20 am

That's awesome. I may yet be motivated to do the speech synthesis board for the Apple I....
User avatar
J. Calhoun
 
Posts: 70
Joined: Nov Sun 19, 2006 3:10 pm
Location: San Jose, CA

New faster version

Postby cclaunch » Jan Sun 14, 2007 10:02 pm

Well, the port of the classic version works but it is just toooo s-l-o-w.

I decided to take a chainsaw to about 80% of the code and rebuild it for speed. It involved a new structure and sequence and lots of speed tricks and best practices.

I highly suggest using this new version, once Vince installs it as a file and links to it.

Carl
cclaunch
 
Posts: 31
Joined: Jan Wed 03, 2007 7:18 pm
Location: Silicon Valley

Source code

Postby cclaunch » Jan Sun 14, 2007 10:05 pm

For those who are interested, here is the source:

Code: Select all
SCR
LOMEM=768
HIMEM=16384
5 PRINT "**************************"
10 TAB (6): PRINT "ELIZA"
20 PRINT "CREATIVE COMPUTING"
30 PRINT "MORRISTOWN, NEW JERSEY": PRINT
40 REM PORTED AND REWRITTEN FOR REPLICA 1
45 REM BY VINCE BRIEL AND CARL CLAUNCH
55 PRINT "*************************"
60 PRINT : PRINT : PRINT
100 DIM S(36),R(36),N(36)
105 DIM K$(36),W$(37),O$(27),R$(112),I$(90),X$(155)
106 DIM P$(100)
107 DIM J(14),J$(112)
108 DIM D$(255),D(36),E(36)
109 DIM B$(200)
110 N1=36:V1=14:P$=""
120 GOSUB 5000
160 PRINT "HI! I'M ELIZA. WHAT'S YOUR PROBLEM?"
200 INPUT X$
201 I$=" "
202 I$(2)=X$
203 F=LEN(I$)
204 I$(F+1)="  "
205 F=F+2
210 IF X$="QUIT" THEN 9999
215 X$(F-2)="    "
220 IF X$(1,4)#"SHUT" THEN 255
230 PRINT "IF YOU FEEL THAT WAY, THEN I WILL SHUT UP.":GOTO 9999
255 IF I$#P$ THEN 260
256 PRINT "PLEASE DON'T REPEAT YOURSELF!": GOTO 200
260 M=0: B$="": Q=0 : K=36
267 H=0
270 FOR L=1 TO F
275 Y$=I$(L,L)
280 IF Y$ # " " THEN 285
281 H=1
282 GOTO 300
285 IF Y$="!" THEN 800
297 GOTO 500
300 IF Q=0 THEN 500
315 A=0
320 FOR X=1 TO V1-1
330 W$=J$(X*8-7,X*8+J(X)-8)
335 O$=J$(X*8+1,X*8+J(X+1))
350 T=J(X)
353 B=T+L-1
355 U=J(X+1)
356 C=U+L-1
357 IF B > F THEN 400
360 IF I$(L,B)#W$ THEN 400
365 B$(M+1)=O$
370 M=M+U
375 L=B
380 X=V1
385 A=1
390 GOTO 470
400 IF C>F THEN 470
410 IF I$(L,C)#O$ THEN 470
420 B$(M+1)=W$
430 M=M+T
440 L=C
450 X=V1
460 A=1
470 X=X+1
475 NEXT X
480 IF A#1 THEN 500
485 A=0
490 GOTO 800
500 IF Y$=" " THEN 790
505 IF H=0 THEN 790
507 H=0
510 IF Q#0 THEN 790
515 GOSUB 4000
520 FOR S=P TO O
530 K$=D$(D(S),E(S))
540 G=LEN(K$)+1
550 K$(G)=" "
560 V=L+G-1
570 IF V+1 > F THEN 650
600 IF I$(L,V)#K$ THEN 650
610 L=V-1
615 Y$=" "
620 Q=1
630 K=S
640 S=N1
650 NEXT S
790 IF Q=0 THEN 800
794 M=M+1
795 B$(M)= Y$
800 NEXT L
900 GOSUB 1310+(R(K)*10)
940 R(K)=R(K)+1: IF R(K)>N(K) THEN R(K)=S(K)
950 I=LEN(R$)
960 IF R$(I,I)#"*" THEN 990
965 IF LEN(B$) >= 3 THEN 975
970 PRINT "YOU WILL HAVE TO ELABORATE MORE FOR ME TO HELP YOU":GOTO 995
975 IF B$(2,3)="  " THEN 970
980 R$(I)=B$(2)
990 PRINT R$
995 P$=I$: GOTO 200
1320 R$="DON'T YOU BELIEVE THAT I CAN*": RETURN
1330 R$="PERHAPS YOU WOULD LIKE TO BE LIKE ME*": RETURN
1340 R$="YOU WANT ME TO BE ABLE TO*": RETURN
1350 R$="PERHAPS YOU DON'T WANT TO*": RETURN
1360 R$="DO YOU WANT TO BE ABLE TO*": RETURN
1365 R$="DO YOU WANT TO BE ABLE TO*": RETURN
1370 R$="WHAT MAKES YOU THINK I AM*": RETURN
1380 R$="DOES IT PLEASE YOU TO BELIEVE I AM*": RETURN
1390 R$="PERHAPS YOU WOULD LIKE TO BE*": RETURN
1400 R$="DO YOU SOMETIMES WISH YOU WERE*": RETURN
1410 R$="DON'T YOU REALLY*": RETURN       
1420 R$="WHY DON'T YOU*": RETURN     
1430 R$="DO YOU WISH TO BE ABLE TO*": RETURN
1440 R$="DOES THAT TROUBLE YOU*": RETURN
1450 R$="DO YOU OFTEN FEEL*": RETURN     
1460 R$="DO YOU OFTEN FEEL*": RETURN     
1470 R$="DO YOU ENJOY FEELING*": RETURN
1480 R$="DO YOU REALLY BELIEVE I DON'T*": RETURN
1490 R$="PERHAPS IN GOOD TIME I WILL*": RETURN
1500 R$="DO YOU WANT ME TO*": RETURN       
1510 R$="DO YOU THINK YOU SHOULD BE ABLE TO*": RETURN
1520 R$="WHY CAN'T YOU*": RETURN       
1530 R$="WHY ARE YOU INTERESTED IN WHETHER OR NOT I AM*": RETURN     
1540 R$="WOULD YOU PREFER IF I WERE NOT*": RETURN
1550 R$="PERHAPS IN YOUR FANTASIES I AM*": RETURN
1560 R$="HOW DO YOU KNOW YOU CAN'T*": RETURN
1570 R$="HAVE YOU TRIED?": RETURN       
1580 R$="PERHAPS YOU CAN NOW*": RETURN
1590 R$="DID YOU COME TO ME BECAUSE YOU ARE*": RETURN
1600 R$="HOW LONG HAVE YOU BEEN*": RETURN
1610 R$="DO YOU BELIEVE IT IS NORMAL TO BE*": RETURN
1620 R$="DO YOU ENJOY BEING*": RETURN       
1630 R$="WE WERE DISCUSSING YOU--NOT ME.": RETURN
1640 R$="OH, I*": RETURN
1650 R$="YOU'RE NOT REALLY TALKING ABOUT ME, ARE YOU?": RETURN       
1660 R$="WHAT WOULD IT MEAN TO YOU IF YOU GOT*": RETURN
1670 R$="WHY DO YOU WANT*": RETURN     
1680 R$="SUPPOSE YOU SOON GOT*": RETURN
1690 R$="WHAT IF YOU NEVER GOT*": RETURN
1700 R$="I SOMETIMES ALSO WANT*": RETURN
1710 R$="WHY DO YOU ASK?": RETURN       
1720 R$="DOES THAT QUESTION INTEREST YOU?": RETURN
1730 R$="WHAT ANSWER WOULD PLEASE YOU THE MOST?": RETURN
1740 R$="WHAT DO YOU THINK?": RETURN       
1750 R$="ARE SUCH QUESTIONS ON YOUR MIND OFTEN?": RETURN
1760 R$="WHAT IS IT THAT YOU REALLY WANT TO KNOW?": RETURN
1770 R$="HAVE YOU ASKED ANYONE ELSE?": RETURN
1780 R$="HAVE YOU ASKED SUCH QUESTIONS BEFORE?": RETURN
1790 R$="WHAT ELSE COMES TO MIND WHEN YOU ASK THAT?": RETURN
1800 R$="NAMES DON'T INTEREST ME.": RETURN
1810 R$="I DON'T CARE ABOUT NAMES --PLEASE GO ON.": RETURN
1820 R$="IS THAT THE REAL REASON?": RETURN
1830 R$="DON'T ANY OTHER REASONS COME TO MIND?": RETURN
1840 R$="DOES THAT REASON EXPLAIN ANYTHING ELSE?": RETURN
1850 R$="WHAT OTHER REASONS MIGHT THERE BE?": RETURN
1860 R$="PLEASE DON'T APOLOGIZE!": RETURN
1870 R$="APOLOGIES ARE NOT NECESSARY.": RETURN
1880 R$="WHAT FEELINGS DO YOU HAVE WHEN YOU APOLOGIZE?": RETURN     
1890 R$="DON'T BE SO DEFENSIVE!": RETURN
1900 R$="WHAT DOES THAT DREAM SUGGEST TO YOU?": RETURN
1910 R$="DO YOU DREAM OFTEN?": RETURN     
1920 R$="WHAT PERSONS APPEAR IN YOUR DREAMS?": RETURN
1930 R$="ARE YOU DISTURBED BY YOUR DREAMS?": RETURN
1940 R$="HOW DO YOU DO ...PLEASE STATE YOUR PROBLEM.": RETURN     
1950 R$="YOU DON'T SEEM QUITE CERTAIN.": RETURN
1960 R$="WHY THE UNCERTAIN TONE?": RETURN
1970 R$="CAN'T YOU BE MORE POSITIVE?": RETURN
1980 R$="YOU AREN'T SURE?": RETURN     
1990 R$="DON'T YOU KNOW?": RETURN     
2000 R$="ARE YOU SAYING NO JUST TO BE NEGATIVE?": RETURN
2010 R$="YOU ARE BEING A BIT NEGATIVE.": RETURN
2020 R$="WHY NOT?": RETURN
2030 R$="ARE YOU SURE?": RETURN   
2040 R$="WHY NO?": RETURN
2050 R$="WHY ARE YOU CONCERNED ABOUT MY*": RETURN
2060 R$="WHAT ABOUT YOUR OWN*": RETURN
2070 R$="CAN YOU THINK OF A SPECIFIC EXAMPLE?": RETURN
2080 R$="WHEN?": RETURN
2090 R$="WHAT ARE YOU THINKING OF?": RETURN
2100 R$="REALLY, ALWAYS?": RETURN       
2110 R$="DO YOU REALLY THINK SO?": RETURN
2120 R$="BUT YOU ARE NOT SURE YOU*": RETURN
2130 R$="DO YOU DOUBT YOU*": RETURN     
2140 R$="IN WHAT WAY?": RETURN     
2150 R$="WHAT RESEMBLANCE DO YOU SEE?": RETURN
2160 R$="WHAT DOES THE SIMILARITY SUGGEST TO YOU?": RETURN
2170 R$="WHAT OTHER CONNECTIONS DO YOU SEE?": RETURN
2180 R$="COULD THERE REALLY BE SOME CONNECTION?": RETURN
2190 R$="HOW?": RETURN
2200 R$="YOU SEEM QUITE POSITIVE.": RETURN
2210 R$="ARE YOU SURE?": RETURN
2220 R$="I SEE.": RETURN
2230 R$="I UNDERSTAND.": RETURN     
2240 R$="WHY DO YOU BRING UP THE TOPIC OF FRIENDS?": RETURN
2250 R$="DO YOUR FRIENDS WORRY YOU?": RETURN
2260 R$="DO YOUR FRIENDS PICK ON YOU?": RETURN
2270 R$="ARE YOU SURE YOU HAVE ANY FRIENDS?": RETURN
2280 R$="DO YOU IMPOSE ON YOUR FRIENDS?": RETURN
2290 R$="PERHAPS YOUR LOVE FOR FRIENDS WORRIES YOU.": RETURN
2300 R$="DO COMPUTERS WORRY YOU?": RETURN
2310 R$="ARE YOU TALKING ABOUT ME IN PARTICULAR?": RETURN
2320 R$="ARE YOU FRIGHTENED BY MACHINES?": RETURN
2330 R$="WHY DO YOU MENTION COMPUTERS?": RETURN
2340 R$="WHAT DO YOU THINK MACHINES HAVE TO DO WITH YOUR PROBLEM?": RETURN
2350 R$="DON'T YOU THINK COMPUTERS CAN HELP PEOPLE?": RETURN
2360 R$="WHAT IS IT ABOUT MACHINES THAT WORRIES YOU?": RETURN       
2370 R$="SAY, DO YOU HAVE ANY PSYCHOLOGICAL PROBLEMS?": RETURN     
2380 R$="WHAT DOES THAT SUGGEST TO YOU?": RETURN
2390 R$="I SEE.": RETURN
2400 R$="I'M NOT SURE I UNDERSTAND YOU FULLY.": RETURN
2410 R$="COME COME ELUCIDATE YOUR THOUGHTS.": RETURN
2420 R$="CAN YOU ELABORATE ON THAT?": RETURN
2430 R$="THAT IS QUITE INTERESTING.": RETURN
4000 IF Y$#"A" THEN 4030
4010 P=1
4020 O=3
4025 RETURN
4030 IF Y$#"C" THEN 4060
4040 P=4
4050 O=7
4055 RETURN
4060 IF Y$#"D" THEN 4090
4070 P=8
4080 O=8
4085 RETURN
4090 IF Y$#"F" THEN 4120
4100 P=9
4110 O=9
4115 RETURN
4120 IF Y$#"H" THEN 4150
4130 P=10
4140 O=12
4145 RETURN
4150 IF Y$#"I" THEN 4180
4160 P=13
4170 O=18
4175 RETURN
4180 IF Y$#"M" THEN 4210
4190 P=19
4200 O=19
4205 RETURN
4210 IF Y$#"N" THEN 4240
4220 P=20
4230 O=21
4235 RETURN
4240 IF Y$#"S" THEN 4270
4250 P=22
4260 O=22
4265 RETURN
4270 IF Y$#"T" THEN 4300
4280 P=23
4290 O=23
4295 RETURN
4300 IF Y$#"Y" THEN 4330
4310 P=24
4320 O=28
4325 RETURN
4330 P=29
4350 O=35
4355 RETURN
5000 S(1)=76:N(1)=S(1)+3
5001 S(2)=83:N(2)=S(2)+6
5002 S(3)=22:N(3)=S(3)+2
5003 S(4)=1:N(4)=S(4)+2
5004 S(5)=4:N(5)=S(5)+1
5005 S(6)=51:N(6)=S(6)+3
5006 S(7)=99:N(7)=S(7)+1
5007 S(8)=59:N(8)=S(8)+3
5008 S(9)=93:N(9)=S(9)+5
5009 S(10)=63:N(10)=S(10)
5010 S(11)=63:N(12)=S(11)
5011 S(12)=40:N(12)=S(12)+8
5012 S(13)=10:N(13)=S(13)+3
5013 S(14)=14:N(14)=S(14)+2
5014 S(15)=25:N(15)=S(15)+2
5015 S(16)=28:N(16)=S(16)+3
5016 S(17)=28:N(17)=S(17)+3
5017 S(18)=35:N(18)=S(18)+4
5018 S(19)=64:N(19)=S(19)+4
5019 S(20)=49:N(20)=S(20)+1
5020 S(21)=69:N(21)=S(21)+4
5021 S(22)=55:N(22)=S(22)+3
5022 S(23)=80:N(23)=S(23)+2
5023 S(24)=74:N(24)=S(24)+1
5024 S(25)=6:N(25)=S(25)+3
5025 S(26)=90:N(26)=S(26)+2
5026 S(27)=6:N(27)=S(27)+3
5027 S(28)=32:N(28)=S(28)+2
5028 S(29)=40:N(29)=S(29)+8
5029 S(30)=40:N(30)=S(30)+8
5030 S(31)=40:N(31)=S(31)+8
5031 S(32)=40:N(32)=S(32)+8
5032 S(33)=20:N(33)=S(33)+1
5033 S(34)=17:N(34)=S(34)+2
5034 S(35)=40:N(35)=S(35)+8
5035 S(36)=106:N(36)=S(36)+6
5045 FOR X=1TO36
5050 R(X)=S(X)
5055 NEXT X
6000 REM LOADS THE CONJUGATE PAIRS INTO A SINGLE STRING
6001 J$=" ARE    ":J(1)=5
6002 J$(9)=" AM     ":J(2)=4
6003 J$(17)=" WERE   ":J(3)=6
6004 J$(25)=" WAS    ":J(4)=5
6005 J$(33)=" YOU    ":J(5)=5
6006 J$(41)=" I      ":J(6)=3
6007 J$(49)=" YOUR   ":J(7)=6
6008 J$(57)=" MY     ":J(8)=4
6009 J$(65)=" I'VE   ":J(9)=6
6010 J$(73)=" YOU'VE ":J(10)=8
6011 J$(81)=" I'M    ":J(11)=5
6012 J$(89)=" YOU'RE ":J(12)=8
6013 J$(97)=" ME     ":J(13)=4
6014 J$(105)=" YOU    ":J(14)=5
7000 D$="" : REM PACKS KEYWORDS INTO A STRING
7001 K$="ALWAYS":D(1)=LEN(D$)+1:E(1)=D(1)+LEN(K$)-1: D$=K$
7002 K$="ALIKE":D(2)=LEN(D$)+1:E(2)=D(2)+LEN(K$)-1: D$(D(2))=K$
7003 K$="ARE YOU":D(3)=LEN(D$)+1:E(3)=D(3)+LEN(K$)-1: D$(D(3))=K$
7004 K$="CAN YOU":D(4)=LEN(D$)+1:E(4)=D(4)+LEN(K$)-1: D$(D(4))=K$
7005 K$="CAN I":D(5)=LEN(D$)+1:E(5)=D(5)+LEN(K$)-1: D$(D(5))=K$
7006 K$="CAUSE":D(6)=LEN(D$)+1:E(6)=D(6)+LEN(K$)-1: D$(D(6))=K$
7007 K$="COMPUTER":D(7)=LEN(D$)+1:E(7)=D(7)+LEN(K$)-1: D$(D(7))=K$
7008 K$="DREAM":D(8)=LEN(D$)+1:E(8)=D(8)+LEN(K$)-1: D$(D(8))=K$
7009 K$="FRIEND":D(9)=LEN(D$)+1:E(9)=D(9)+LEN(K$)-1: D$(D(9))=K$
7010 K$="HELLO":D(10)=LEN(D$)+1:E(10)=D(10)+LEN(K$)-1: D$(D(10))=K$
7011 K$="HI":D(11)=LEN(D$)+1:E(11)=D(11)+LEN(K$)-1: D$(D(11))=K$
7012 K$="HOW":D(12)=LEN(D$)+1:E(12)=D(12)+LEN(K$)-1: D$(D(12))=K$
7013 K$="I DON'T":D(13)=LEN(D$)+1:E(13)=D(13)+LEN(K$)-1: D$(D(13))=K$
7014 K$="I FEEL":D(14)=LEN(D$)+1:E(14)=D(14)+LEN(K$)-1: D$(D(14))=K$
7015 K$="I CAN'T":D(15)=LEN(D$)+1:E(15)=D(15)+LEN(K$)-1: D$(D(15))=K$
7016 K$="I AM":D(16)=LEN(D$)+1:E(16)=D(16)+LEN(K$)-1: D$(D(16))=K$
7017 K$="I'M":D(17)=LEN(D$)+1:E(17)=D(17)+LEN(K$)-1: D$(D(17))=K$
7018 K$="I WANT":D(18)=LEN(D$)+1:E(18)=D(18)+LEN(K$)-1: D$(D(18))=K$
7019 K$="MAYBE":D(19)=LEN(D$)+1:E(19)=D(19)+LEN(K$)-1: D$(D(19))=K$
7020 K$="NAME":D(20)=LEN(D$)+1:E(20)=D(20)+LEN(K$)-1: D$(D(20))=K$
7021 K$="NO":D(21)=LEN(D$)+1:E(21)=D(21)+LEN(K$)-1: D$(D(21))=K$
7022 K$="SORRY":D(22)=LEN(D$)+1:E(22)=D(22)+LEN(K$)-1: D$(D(22))=K$
7023 K$="THINK":D(23)=LEN(D$)+1:E(23)=D(23)+LEN(K$)-1: D$(D(23))=K$
7024 K$="YOUR":D(24)=LEN(D$)+1:E(24)=D(24)+LEN(K$)-1: D$(D(24))=K$
7025 K$="YOU ARE":D(25)=LEN(D$)+1:E(25)=D(25)+LEN(K$)-1: D$(D(25))=K$
7026 K$="YES":D(26)=LEN(D$)+1:E(26)=D(26)+LEN(K$)-1: D$(D(26))=K$
7027 K$="YOU'RE":D(27)=LEN(D$)+1:E(27)=D(27)+LEN(K$)-1: D$(D(27))=K$
7028 K$="YOU":D(28)=LEN(D$)+1:E(28)=D(28)+LEN(K$)-1: D$(D(28))=K$
7029 K$="WHAT":D(29)=LEN(D$)+1:E(29)=D(29)+LEN(K$)-1: D$(D(29))=K$
7030 K$="WHO":D(30)=LEN(D$)+1:E(30)=D(30)+LEN(K$)-1: D$(D(30))=K$
7031 K$="WHERE":D(31)=LEN(D$)+1:E(31)=D(31)+LEN(K$)-1: D$(D(31))=K$
7032 K$="WHEN":D(32)=LEN(D$)+1:E(32)=D(32)+LEN(K$)-1: D$(D(32))=K$
7033 K$="WHY CAN'T I":D(33)=LEN(D$)+1:E(33)=D(33)+LEN(K$)-1: D$(D(33))=K$
7034 K$="WHY DON'T YOU":D(34)=LEN(D$)+1:E(34)=D(34)+LEN(K$)-1: D$(D(34))=K$
7035 K$="WHY":D(35)=LEN(D$)+1:E(35)=D(35)+LEN(K$)-1: D$(D(35))=K$
7036 K$="NOKEYFOUND":D(36)=LEN(D$)+1:E(36)=D(36)+LEN(K$)-1: D$(D(36))=K$
7100 RETURN
9999 END
cclaunch
 
Posts: 31
Joined: Jan Wed 03, 2007 7:18 pm
Location: Silicon Valley

Postby vbriel » Jan Mon 22, 2007 10:27 pm

The latest version is much faster on the responses. Around one - three seconds to answer depending upon the length of your statement, not bad. I like this version much better.

Vince
User avatar
vbriel
Site Admin
 
Posts: 1184
Joined: Jul Tue 19, 2005 12:10 pm
Location: Ohio


Return to Software

Who is online

Users browsing this forum: No registered users and 1 guest

cron