DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦d6f5ecd82⟧ TextFile

    Length: 42240 (0xa500)
    Types: TextFile
    Names: »ANALIZA2.BAS«

Derivation

└─⟦9f1fc2afd⟧ Bits:30005939 Spil: Pacman, Invaders, Kong til RC700
    └─ ⟦this⟧ »ANALIZA2.BAS« 

TextFile

REM ***********************************************Ø
    *   ANALIZA2  Copyright 4/16/81 J.M. Holland  *Ø
    *              Version 1.17                   *Ø
    *       Please send corrections to:           *Ø
    *            John M. Holland                  *Ø
    *              Consultant                     *Ø
    *            Rt 1,  Box 175                   *Ø
    *         Shawsville, Va. 24162               *Ø
    ***********************************************

REM  REMOVE THIS LINE TO ACTIVATE %CHAIN FOR .INT VERSION Ø
%CHAIN 8,18349,0,960 

     COMMON INITIALIZE%,GAB$(1),FILENAME$,CYCLE%,Ø
            IRRITABLE%,QUES%,MAX%,B$,FAIL%,EROTIC%,VIOLENT%

REM  REMOVE THIS LINE TO ACTIVATE  POKE FOR .INT VERSION Ø 
1    POKE 272,0  REM THIS SETS INFINITE CONSOLE WIDTH 

REM -------------------------------------------------------

10   IF END # 1 THEN 269
     OPEN "ANALIZA.CON" AS 1
     IF END # 1 THEN 270

     DIM GAB$(5) REM 	GAB$(1)=FROM PERSONAL FILE + GENERAL
		 REM	GAB$(2)=FROM LAST PATIENT
		 REM	GAB$(3)=FROM THIS PATIENT 
		 REM	GAB$(4)=FROM 3 OVERFLOW OR HOLD$
		 REM	GAB$(5)=TO FILE

     FOR CNTR%=1 TO 5 :GAB$(CNTR%)="":NEXT CNTR%

265    READ #1; THRESHOLD%
     DIM RATE%(25) REM CRACKER RATES OF AGEING
     FOR CNTR%=1 TO 25
      READ #1; RATE%(CNTR%) REM FROM CONSTANT.DAT
     NEXT CNTR%
     DIM QUAL%(25) REM CRACKER QUALITY FACTORS
     FOR CNTR%=1 TO 25 
       READ #1; QUAL%(CNTR%) REM FROM CONSTANT.DAT
     NEXT CNTR%
     DIM AGE%(25) REM CRACKER AGES
     DIM SCORE%(25) REM CRACKER SCORES
     DIM FOCUS%(3)  REM HE SHE THEY FOCUS
     DIM FLAG%(25)  REM CRACKER ALTERNATOR FLAGS
     FOR CNTR%=1 TO 25
       FLAG%(CNTR%)=0
     NEXT CNTR%
     READ #1;UR$
     READ #1;RU$
     READ #1;CONT$ 
     READ #1;ENOUN$
     READ #1;EMOT$
       EMOT$=EMOT$+ENOUN$	   
     READ #1;SCARE$ 
     READ #1;SIGNIF$
     READ #1;NORMAL$
     READ #1;CERT$
     READ #1;AFIRM$
       AFIRM$=AFIRM$+CERT$
     READ #1;NEG$
     READ #1;FEMALE$
     READ #1;MALE$
     READ #1;GROUP$
     READ #1;BAD$
     REM ---------- PRINT HEADING HERE -------------------
     IF INITIALIZE%=1 THEN CLOSE 1:GOTO 334
268  READ #1;R$
     PRINT R$
     GOTO 268
269  PRINT "NO CON FILE"
     STOP  
270  CLOSE 1  REM RELEASE CONSTANT FILE SPACE
     SUBJ$=" "
320  INPUT MAX%
     

334  RANDOMIZE
     DIM N%(100) REM FRAGMENT POINTERS
     FOR CNTR%=1 TO 100
       N%(CNTR%)=INT%(RND*3.) REM RANDOMIZE ARRAY 
     NEXT CNTR%
     N%(99)=1:N%(5)=1:N%(14)=1: REM MUST BE SAME EACH TIME
     RANDOM%=INT%(RND*4.)


350  PRINT:PRINT"I AM ANALIZA"
360  IF END # 1 THEN 367
     OPEN "PATIENTS.LST" AS 1
     IF END # 1 THEN 365
     READ #1 ;M$
365  CLOSE 1  REM RELEASE SPACE
367  PRINT:PRINT"WHAT IS YOUR NAME?"
370  GOSUB 3640      REM INPUTS R$
     GOSUB 9200      REM COUNT WORDS
     IF LEN(R$)<3 THEN 367
     IF WORDS%>2 THEN PRINT"YOUR FIRST NAME?":GOTO 370
     IF WORDS%=2 THEN Ø
     B$=MID$(R$,2,MATCH(" ",R$,2)-1):Ø
     D$=MID$(R$,MATCH(" ",R$,2)+1,LEN(R$)):GOTO 385
     IF WORDS%<>1 THEN 367
     B$=MID$(R$,2,LEN(R$))
380  PRINT:PRINT"YOUR LAST NAME?"
     GOSUB 3640
     GOSUB 9200
     IF LEN(R$)<3 THEN 380
     IF WORDS%<>1 THEN 380
     D$=MID$(R$,2,LEN(R$))
385  FILENAME$=LEFT$(B$,4)+LEFT$(D$,4)+".DAT"
387  T%=MATCH(" ",FILENAME$,1)  REM REMOVE SPACES
     IF T%>0 THEN Ø
     FILENAME$=LEFT$(FILENAME$,T%-1)+Ø
               MID$(FILENAME$,T%+1,LEN(FILENAME$)):GOTO 387
     T%=MATCH("*"+B$+"*/+*"+D$,M$,1)
     IF T%=0 THEN 400  		REM NOT FOUND
				REM STRIP NAME FROM M$
     T3%=MATCH("*",M$,T%+LEN(B$)+LEN(D$)+3)
     IF T3%>0 THEN Ø REM NOT LAST ENTRY IN M$
     M$=LEFT$(M$,T%-1)+MID$(M$,T3%,LEN(M$)) Ø
     ELSE M$=LEFT$(M$,T%-1)
		REM STRIPS LEFT(*) AND LEAVES RIGHT ONE
     PRINT"WELCOME BACK "+B$+"...LET ME GET YOUR FILE."
     PRINT
     GOTO 500

400  PRINT B$+D$+"...RIGHT?" REM VERIFY NAME
     PRINT
     GOSUB 2395 	REM GET YES/NO
     IF Y%=0 THEN 367
500  A$=M$+"*"+B$+"*/+*"+D$  REM PUT NEW NAME AT END AND STORE
502  CNTR%=0:T%=1  REM <<<PURGE OF FILES LOOPS HERE
505  IF LEN(A$)>220 THEN 507  REM DELETE DUE TO LIST FULL
     T%=MATCH("*/+*",A$,T%+1)
     IF T%>0 THEN CNTR%=CNTR%+1 :GOTO 505
     IF CNTR%<MAX% THEN 520  REM <<<NO NEED TO DELETE
507  T%=MATCH("*",A$,1)+1
     T2%=MATCH("*/+*",A$,T%+1)
     T3%=MATCH("*",A$,T2%+4)
     C$=MID$(A$,T%,T2%-T%)
     D$=MID$(A$,T2%+4,T3%-T2%-5)
     PRINT"I AM DISCARDING "+C$+D$+"'S FILE!"
     A$=MID$(A$,T3%,LEN(A$))
     C$=LEFT$(C$,4)+LEFT$(D$,4)+".DAT"
510  T%=MATCH(" ",C$,1)   REM REMOVE SPACES
     IF T%>0 THEN Ø
     C$=LEFT$(C$,T%-1)+MID$(C$,T%+1,LEN(C$)):GOTO 510
     IF END # 1 THEN 515
     OPEN C$ AS 1
     DELETE 1
515  GOTO 502     REM LOOP TO PURGE MORE FILES

     REM REWRITE PATIENT DIRECTORY
520  CREATE "PATIENTS.LST" AS 1
     PRINT # 1;A$ 
     CLOSE 1

     IF INITIALIZE%=0 THEN 526  REM DONT GOSSIP IF 1ST PATIENT
     REM    //// GET LAST PATIENT FILE ////
     IF END # 1 THEN 526 REM NO FILE SO DONT CLOSE
     OPEN "LASTPAT.DAT" AS 1
     IF END # 1 THEN 524 REM CLOSE IT
     READ #1;GAB$(2) REM GET FILENAME
     IF GAB$(2)=FILENAME$ THEN GAB$(2)="" :GOTO 524 REM SAME 
     READ #1;GAB$(2) REM GET ACTUAL STRING
524  CLOSE 1
526  REM END OF OLD PATIENT FETCH
     INITIALIZE%=1

     REM FILEOPEN%, PERSONAL%, AND GENERAL% WILL BE Ø
         ZERO AT THIS POINT SINCE THEY HAVENT BEEN USED.

     P%=1		  REM START WITH GAB$(1)
528  GOSUB 1550  REM LOAD ENVIRONMENT & PRINT INTRO

     REM RESET COMMON AGES AND PROFILE STORAGE
800  SUBJ$=" "
     FOR CNTR%=1 TO 25
       AGE%(CNTR%)=25
     NEXT CNTR%

805  COGNITION%=860 REM SHORT TERM COGNITION
     MIN%=THRESHOLD%

810  REM <<<<<<<<<  M A I N   L O O P  <<<<<<<<<<<<

     IF BECAUSE%=CYCLE% THEN BECAUSE$=""

     REM  AGE DOWN PRONOUNS THAT ARE ALREADY TRAPPED
     ITAGE%=ITAGE%-1 
     IF ITAGE%<1 THEN IT$=" it "
     HEAGE%=HEAGE%-1
     IF HEAGE%<1 THEN HE$=" he ":HIM$=" him "
     SHEAGE%=SHEAGE%-1
     IF SHEAGE%<1 THEN SHE$=" she ":HER$=" her "
     THEYAGE%=THEYAGE%-1
     IF THEYAGE%<1 THEN THEY$=" they ":THEM$=" them "

     REM SHUFFLE OVERFLOWING GAB STRINGS
814  IF LEN(GAB$(4))<3 THEN GAB$(4)=GAB$(3):GAB$(3)=""

     	  REM TRIM DOWN COLLECTION GAB STRINGS
      IF LEN(GAB$(3))<150 THEN 815
        Z2%=MATCH("*P",GAB$(3),3)
        IF Z2%=0 THEN Z2%=LEN(GAB$(3))
        GAB$(3)=MID$(GAB$(3),Z2%,LEN(GAB$(3)))

815   GOSUB 3640        REM GET R$

     IF MATCH("BECAUSE",R$,1)>0 THEN 816
     IF REASON%>CYCLE% THEN R$=" BECAUSE"+R$

816  IF TRAPAGE%<1 THEN 828
     TRAPAGE%=TRAPAGE%-1 REM TRAP HERE<<<
     T$=" IT * THEY * THEM * HE * HIM * SHE * HER "
     IF MATCH(CAND$,T$,1)>0 THEN 822 REM IGNORE PRONOUN IN CAND$
     IF TRAP$=" ALL " THEN Ø
        TRAP$=T$ 
     IF TRAP$=" PERSON " THEN Ø
        TRAP$=" HE * SHE * HIM * HER "
     IF TRAP$=" HE " THEN TRAP$=" HE * HIM "
     IF TRAP$=" SHE " THEN TRAP$=" SHE * HER "
     IF TRAP$=" THEY " THEN TRAP$=" THEY * THEM "
     T$=TRAP$
     GOSUB 2470
     IF T%=0 THEN 828 REM NOT TRAPPED
     IF TFRAG$=" IT"   THEN Ø
        IT$=CAND$:ITAGE%=1:GOTO 822
     IF TFRAG$=" THEY" THEN 817
     IF TFRAG$<>" THEM" THEN 818 
817  THEY$=CAND$:THEM$=CAND$:THEYAGE%=8:PLURAL$=CAND$:GOTO 822
818  IF TFRAG$=" HE"   THEN 819
     IF TFRAG$<>" HIM"  THEN 820
819  HE$=CAND$:HIM$=CAND$:HEAGE%=10:GOTO 821
820  SHE$=CAND$:HER$=CAND$:SHEAGE%=10
821  VICTIM$=CAND$
822  TRAPAGE%=0 

     REM CONVERT PRONOUN STRINGS TO PRONOUNS FOR Ø
     IDENTIFICATION BY ALGORITHMS AND FOR FOCUS CALC.
828  T$=HE$+"*"+SHE$+"*"+THEY$
829  TREF%= MATCH("your",T$,1)
     IF TREF%>0 THEN Ø
     T$=MID$(T$,1,TREF%-1)+"MY"+MID$(T$,TREF%+4,255):GOTO 829
     F$=" he * she * they "
     GOSUB 2890    REM SUBSTITUTE
  
    IF MATCH("GOODBYE",R$,1)=0 THEN 830
     PRINT"GOODBYE ";B$ 
     PRINT"YOUR BILL IS $";CYCLE%;".00!":GOTO 9900
			REM CLOSE FILE

830  T$="S YOUR NAME *WHO AM I *WHO ARE YOU *S MY NAME "
     GOSUB 2470
     IF T%=0 THEN 832
     IF LEN(Z$)>11 THEN 832  REM AVOID "WHO ARE YOU TALKING.."
831  PRINT "BE SERIOUS ";B$;"!"
     GOTO 810 

832  T$=" NOT "+B$+"*ISNT "+B$+"* ME "+B$+"*HELLO * HI "
     GOSUB 2470
834  IF T%=0 THEN 942
910  PRINT"AM I STILL TALKING TO ";B$;"?"
920  GOSUB 2395 	REM GET Y/N
930  IF Y%=0 THEN 9900
940  PRINT"SORRY, GO ON.":GOTO 810

942  ANSWER$="":REM CLEAR ANSWER
943  T$=AFIRM$ :GOSUB 2470
     IF T%=0 THEN 944
     ANSWER$=YES$ 
     IF T%<3 THEN R$=" "+Z$: GOTO 943

944  T$=NEG$ :GOSUB 2470
     IF T%=0 THEN 946
     ANSWER$=NO$ 
     IF T%<3 THEN R$=" "+Z$: GOTO 944

946  CYCLE%=CYCLE%+1
     SIZE%=(((CYCLE%-1)*SIZE%)+LEN(R$))/CYCLE% REM AVE LENGTH

     T$=" CANT * DONT * NOT ":GOSUB 2470
     NEGREF%=T%
     T$=BAD$ :GOSUB 2470
     BADREF%=T%

     T$="SEX* FUCK* SCREW * INTERCOURSE* PUSSY*"+Ø
     " HIT* HATE* KILL* HURT* SHOOT"+Ø
     "*MURDER* STAB * GUN": GOSUB 2470
    IF T%=0 THEN 947
	IF T2%<39 THEN EROTIC%=EROTIC%+1: GOTO 947
	IF NEGREF%=0 THEN VIOLENT%=VIOLENT%+1

     REM WHY$ CAN ANSWER WHY QUESTIONS OR FILL IN 1 WORD Ø
         ANSWERS WITH A SENTENCE STRUCTURE.
947  IF LEN(WHY$)<3 THEN 950
     TREF%=MATCH("Ø#",WHY$,1)
     IF TREF%=0 THEN 948      REM NOT A FILL IN
     GOSUB 9200               REM TEST FOR 1 WORD ANSWER
     IF WORDS%=1 THEN Ø
      R$=" "+MID$(WHY$,1,TREF%-2)+R$+MID$(WHY$,TREF%+2,255)
     GOTO 950

948  T$="WHY *WHY DO *WHY DID *MADE YOU *MAKES YOU "
     GOSUB 2470 
     IF T%=0 THEN 950
     IF T2%+LEN(Z$)<3 THEN 949 REM MEANS R$=" WHY "
     TREF%=T%
     T$=" SAY * TO KNOW * BELIEVE * THINK * ASK ":GOSUB 2470
     IF T%<TREF% THEN 950
949  PRINT WHY$: WHY$="": GOTO 810 

950  IF MATCH(" MFRE ",R$,1)>0 THENØ
     PRINT MFRE :GOTO 810

     REM /////  MAIN DISTRIBUTOR ////

960  TEST%=1: SAV$=R$: WHY$=""
970  T5%=1
1000 IF T5%>20 THEN 1045
     IF T5%>10 THEN 1040
     IF T5%<=0 THEN 1050
     ON T5% GOSUB 1480,1240,1340,1410,1080Ø
                 ,3350,1640,3090,1710,1820
     GOTO 1050
1040 ON T5%-10 GOSUB 1940,2020,3230,3540,3780Ø
                    ,3850,3980,4060,4160,4290
     GOTO 1050 
1045 ON T5%-20 GOSUB 6000,8000,5800,7000,9000
1050 IF TEST%=0 THEN 810
     AGE%(T5%)=RATE%(T5%)+AGE%(T5%)
     IF AGE%(T5%)>25 THEN AGE%(T5%)=25
     IF T%=0 THEN SCORE%(T5%)=0: GOTO 1057
1055 PFACT%=INT%(20*(1-(T%/(2*LEN(R$)))))
     SCORE%(T5%)=PFACT%*QUAL%(T5%)*AGE%(T5%) 
1057 T5%=T5%+1 :R$=SAV$
     IF T5%<26 THEN 1000
1060 TEST%=0 :BEST%=0 :
     YES$="":NO$=""
     FOR CNTR%=1 TO 25
       IF SCORE%(CNTR%)>BEST% THEN BEST%=SCORE%(CNTR%)Ø
       :T5%=CNTR%
     NEXT CNTR%
     IF LEN(ANSWER$)>3 THEN BEST%=BEST%/3 REM BIAS FOR ANSWER

            REM INCREASE BOREDOM THRESHOLD
     MIN%=MIN%+THRESHOLD%/3    REM INCREASE BOREDOM THRESHOLD
     IF LEN(VICTIM$)>1 THEN MIN%=MIN%+THRESHOLD%/3 

     IF BEST%<MIN% THEN 1065
     AGE%(T5%)=RATE%(T5%) REM AGE ALGORITHM
     IF FLAG%(T5%)>0 THEN FLAG%(T5%)=0 ELSE FLAG%(T5%)=1
1063 T6%=T5%
     COGNITION%=(100+2*COGNITION%)/3
     GOTO 1000 REM MEETS MINIMUM

1065 REM ----NO CRACKER PASSES----
1070 IF LEN(ANSWER$)<2 THEN 1075
     PRINT ANSWER$ :GOTO 810
1075 FAIL%=FAIL%+1
     COGNITION%=(2*COGNITION%)/3
     IF LEN(TOPIC$)<2 THEN R$=SAV$: GOTO 1077
     PRINT TOPIC$
     TOPIC$=""
     GOTO 810

1077 MIN%=THRESHOLD%
     GOSUB 1550		REM ACCESS STRINGS
     GOTO 810  

1080 T$=UR$+"*YOURE"
1090 GOSUB 2470
1100 IF T%=0 THEN RETURN
1105 IF LEN(Z$)<6 THEN T%=0:RETURN
1170 IF NEGREF%>0 THEN T%=0: RETURN REM SCREEN NEGATIVE CASES
     TREF%= BADREF% REM SAVE NEGATIVE REFERENCE
     IF CURSE%>0 THEN TREF%=1
     IF TEST%=0 THEN 1180
       IF TREF%>0 THEN IRRITABLE%=IRRITABLE%+4
       T%=1 : RETURN
1180 I$="TRUE,*DOES IT PLEASE YOU TO BELIEVE*"Ø
	+"I DONT FEEL*ARE YOU FANTASIZING THAT"
     D$=", "+B$+"?" 
     IF TREF%>0 THEN Ø
       I$="DEGRADE ME*ELEVATE YOURSELF*HUMILIATE ME"
1190 GOSUB 2630
     IF TREF%=0 THEN IFRAG$=IFRAG$+" I AM "
1200 GOSUB 2770
1210 IF LEN(Z$)=1 THEN Z$=Z$+" "
1215 C$=IFRAG$
     IF TREF%>0 THEN Ø
      C$="ARE YOU SAYING I AM ": D$=" TO "+IFRAG$+D$
     IF LEN(Z$)<3 THEN 1220
     HOLD%=CYCLE%+6
     IF TREF%=0 THEN 1220  REM FALL THRU IF HE INSULTED US.
     GAB$(4)="*PEARLIER YOU SAID I WAS "+Z$+"."+Ø
     "* DO YOU STILL THINK SO?*NI AM GLAD YOU REALIZE YOUR "+Ø
     "MISTAKE!*YVERY WELL, PERHAPS I AM "+Z$+"!"
     IF LEN(GAB$(5))+LEN(Z$)<250 Ø REM CANT USE 9800 (D$ USED)
      THEN GAB$(5)=GAB$(5)+"*U"+Z$
1220 A$=C$+MID$(Z$,1,LEN(Z$)-1)
     IF LEN(C$)<19 THEN D$="."
     PRINT A$;D$
     IF TREF%>0 THEN A$="" 
     IF LEN(C$)>18 THEN YES$="WHY "+A$+"?"
     BECAUSE$="YOU SAID IT ":BECAUSE%=CYCLE%+2
     NO$="REALLY?" :TOPIC$=""
1230 RETURN

1240 T$=" IM * I AM * I WAS * I USED TO BE "
1250 GOSUB 2470
1260 IF T%<>1 THEN T%=0: RETURN
1270 IF TEST%=1 THEN RETURN
     IF T2%>7 THEN A$="WERE " ELSE A$="ARE "
     GOSUB 2770
     F$=A$: A$=Z$: R$=Z$
     T$="AN *THE *A ":GOSUB 2470
     Z$=A$
     IF T%<>1 THEN 1275
     D$="*PTELL ME MORE ABOUT BEING "+A$+"."+Ø
      "*NPLEASE!*YGOOD...GO AHEAD.*C BEING "+A$+"*R IT "
     IF LEN(GAB$(3))+LEN(D$)<250 THEN GAB$(3)=GAB$(3)+D$
     D$="*I"+A$
     GOSUB 9800
     TRAPAGE%=1 : TRAP$=" IT ":CAND$=" BEING "+A$
     I$="TELL ME *HOW DO YOU FEEL *DO YOU FEEL GOOD "
     IF F$="WERE " THEN Ø
      I$="WHAT DID YOU FEEL *WHAT WERE YOUR FEELINGS "
     GOSUB 2630 
     PRINT IFRAG$+"ABOUT BEING "+Z$+"?" 
     NO$=RU$+"ASHAMED THAT YOU "+F$+Z$+"?":YES$="GO ON "+B$+"."
     RETURN 
1275 I$="BECAUSE...*WHY "+F$+"YOU "+Z$+"?*OF COURSE YOU "+F$+Z$+"."
     GOSUB 2630
     PRINT IFRAG$
     TOPIC$="SO YOU "+F$+Z$+"...INTERESTING."
     BECAUSE%=CYCLE%+1
     IF I2%=1 THEN REASON%=CYCLE%+1
     BECAUSE$="YOU "+F$+Z$
1330 RETURN

1340 IF WHODATE%<>CYCLE%+9 THEN T%=0 :RETURN
     IF LEN(R$)<3 THEN T%=0: RETURN 
     T$=" MY * THE * A * THOSE * THAT ":GOSUB 2470
     IF T%=1 THEN 1345
     GOSUB 9200 REM COUNT WORDS
     IF WORDS%<3 THEN 1345 REM CATCH NAMES
     T%=0 :RETURN  REM ONLY AS 1ST WORD
1345 IF TEST%=1 THEN T%=1: RETURN
     TRAP$=" "+MID$(TOPIC$,1,MATCH(" ",TOPIC$,2)) REM " HE "ETC
     TRAPAGE%=3
     TOPIC$=MID$(TOPIC$,MATCH(" ",TOPIC$,1)+1,255) REM STRIP HE
     T$=" "+MID$(TOPIC$,1,MATCH(" ",TOPIC$,1))+Ø REM " IS " ETC
     "* IS * ARE * DO * WILL * HAVE * DOES* ISNT *"+Ø
     " ARENT * WONT * CANT * SHOULD* COULD* DID * DIDNT "
     GOSUB 2470
     IF T%>0 THEN R$=MID$(R$,1,T%)
     Z$=R$:GOSUB 2770
     Z$=" "+Z$	REM REPLACE SPACE
     CAND$=Z$
     Z$=MID$(Z$,2,255) REM STRIP LEADING SPACE
1350 PRINT Z$+TOPIC$ REM eg:THE CIA IS AFTER YOU...OF COURSE
     NO$="EXPLAIN?":YES$="OF COURSE..."+Z$+"...GO ON."
     TOPIC$="I THOUGHT YOU MEANT "+Z$+"."
     RETURN

1410 T$="COMPUTER*MACHINE*PROCESSOR"
1420 GOSUB 2470
1430 IF T%=0 THEN RETURN
     TFRAG$=TFRAG$+"S "
     TRAPAGE%=2:TRAP$=" THEY ":CAND$=" "+TFRAG$
     IF TEST%=1 THEN T%=1 :RETURN
1440 I$=SCARE$
1450 GOSUB 2630
     IF FLAG%(T6%)=0 THEN Ø
      PRINT"IT DOES SEEM THAT "+TFRAG$+IFRAG$+"YOU!":Ø
      RATE%(4)=0: GOTO 1465
1460 PRINT"DO ";TFRAG$;IFRAG$;"YOU ";B$;"?"
1465 YES$="WHY DO THEY "+IFRAG$+"YOU?"
     BECAUSE%=CYCLE%+2
     BECAUSE$=TFRAG$+IFRAG$+"YOU "
     I$=CONT$ :GOSUB 2630
     NO$="I AM GLAD..."+IFRAG$+"."
1470 RETURN

1480 T$=" SHIT* PISS*FUCK* CRAP* HELL *DAMN* ASS *BITCH"+Ø
        "*BASTARD"
1490 GOSUB 2470
1500 CURSE%=T%
     IF T%=0 THEN RETURN
     IRRITABLE%=IRRITABLE%+1
     IF TEST%=1 THEN T%=1 : RETURN
       TRAPAGE%=1:TRAP$=" IT ":CAND$=" PROFANITY "
1510 I$="IS UNNECESSARY!*SERVES NO PURPOSE."
1520 GOSUB 2630
     IF FLAG%(T6%)<>0 THEN 1530
     PRINT "AGAIN "+B$+", SUCH LANGUAGE "+IFRAG$
     GOTO 1540
1530 PRINT"NOW ";B$;", PROFANITY ";IFRAG$
     TOPIC$="YOUR CURSING ISNT HELPING!"
1540 RETURN

     REM PRINT FROM GAB STRINGS 1-4
1550 IF P%>4 THEN P%=1
     Z%=P%	REM SAVE GAB POINTER IN Z%
     GAB$(1)="" REM CLEAR FOR NEW .DAT STRING
1560 IF P%=1 THEN GOSUB 1610
     T%=MATCH("*P",GAB$(P%),1)
     IF P%<4 THEN 1562
     IF HOLD%>CYCLE% THEN 1564  REM HOLDING GAB$(4)
1562 IF T%>0 THEN 1565
      GAB$(P%)=""
1564 P%=P%+1
     IF P%>4 THEN P%=1
     IF P%=Z% THEN Ø
      PRINT"SORRY, TIME IS UP "+B$+"!"Ø
      :GOTO 9900   REM ALL EMPTY CHAIN ANALIZA+ (STACK CLEARED)
     GOTO 1560
1565 IF T%>1 THEN GAB$(P%)=MID$(GAB$(P%),T%,LEN(GAB$(P%)))
     GOSUB 1600
     TOPIC$=""
     IF A$="P" THEN PRINT D$
1570 GAB$(P%)=MID$(GAB$(P%),T2%,LEN(GAB$(P%)))
     GOSUB 1600
     IF T%=0 THEN 1580
     IF A$=" " THEN PRINT D$:GOTO 1570 REM AUX LINE
     IF A$="Y" THEN YES$=D$:GOTO 1570
     IF A$="N" THEN NO$=D$:GOTO 1570
     IF A$="T" THEN TOPIC$=D$:GOTO 1570
     IF A$="C" THEN CAND$=D$:GOTO 1570
     IF A$="W" THEN WHY$=D$:GOTO 1570
     IF A$<>"R" THEN 1575
               TRAP$=D$:TRAPAGE%=2
               IF D$=" IT " THEN TRAPAGE%=1
               GOTO 1570
1575 IF A$="B" THEN BECAUSE$=D$:BECAUSE%=CYCLE%+2:GOTO 1570
1580 P%=P%+1 : RETURN     REM DO NEXT ONE NEXT TIME

1600 IF LEN(GAB$(P%))<3 THEN 1605 REM EMPTY
     T%=MATCH("*",GAB$(P%),1)
     IF T%=0 THEN 1605
     IF T%>1 THEN Ø
      GAB$(P%)=MID$(GAB$(P%),T%,LEN(GAB$(P%))):GOTO 1600
     T2%=MATCH("*",GAB$(P%),T%+1)
     IF T2%=0 THEN T2%=LEN(GAB$(P%))+1
     A$=MID$(GAB$(P%),T%+1,1)
     D$=MID$(GAB$(P%),T%+2,T2%-T%-2)
     X%=MATCH("B$",D$,1)	REM SUBSTITUTE NAME 
     IF X%>0 THEN D$=MID$(D$,1,X%-1)+MID$(B$,1,LEN(B$)-1)+Ø
     MID$(D$,X%+2,LEN(D$))
     RETURN
1605 T%=0:GAB$(P%)="":RETURN


     REM LOAD A STRING ENVIRONMENT FROM A .DAT FILE TO GAB$(1)
1610 IF PERSONAL%=1 THEN 1611    REM PERSONAL FILE ALREADY OPENED

     PERSONAL%=1
     IF END # 1 THEN 1613        REM DONT CLOSE IF NOT OPENED
     OPEN FILENAME$ AS 1 
     IF END # 1 THEN 1612	 REM CLOSE FILENAME.DAT WHEN EMPTY
     FILEOPEN%=1

1611 IF FILEOPEN%=0 THEN 1613
     READ # 1;GAB$(1)		 REM CONDITIONAL STRING READ
     GOTO 1616
1612  CLOSE 1			 REM EXHAUSTED PATIENT FILE
     INTRODUCED%=1
     FILEOPEN%=0
1613 IF GENERAL%=1 THEN RETURN  REM HAVE ALREADY EXHAUSTED GEN

     GENERAL%=1
     IF END # 1 THEN 1613	     REM NO GENERAL.DAT FILE
     OPEN "GENERAL.DAT" AS 1
     IF END # 1 THEN 1612	     REM CLOSE GENERAL WHEN EMPTY
     FILEOPEN%=1
     READ # 1;GAB$(1)	             REM READ IN INTRODUCTION STRING
     IF INTRODUCED%=1 THEN 1611      REM WILL NOT PRINT INTRO
 
1616 REM  END OF .DAT FETCH 

1622 GOSUB 1600  REM GET CONDITION SYMBOL IN A$    
     IF A$="P" THEN 1638
     IF A$<>"I" THEN 1623
      IF IRRITABLE%*10/(CYCLE%+1)>1 THEN 1635  REM SUBST.*P
1623 IF A$<>"E" THEN 1624
      IF EROTIC%>3 THEN 1635
1624 IF A$<>"L" THEN 1625
      IF SIZE%>25 THEN 1635
1625 IF A$<>"V" THEN 1626
      IF VIOLENT%>3 THEN 1635
1626 IF A$<>"S" THEN 1628
      IF SIZE%<12 THEN 1635
1628 IF A$<>"F" THEN 1629
     IF COGNITION%<33 THEN 1635      
1629 IF A$<>"Q" THEN 1630
     IF QUES%>6 THEN 1635
1630 IF LEN(VICTIM$)=0 THEN 1631
     IF A$="H" THEN D$=VICTIM$ Ø
       :GAB$(1)=GAB$(1)+"*R PERSON *C"+D$ :GOTO 1639
     GOTO 1632        REM SKIP *U IF VICTIM PRESENT
1631 IF A$="U" THEN 1635
1632 IF A$<>"M" THEN 1634
     IF LEN(PLURAL$)>0 THEN D$=PLURAL$Ø
      :GAB$(1)=GAB$(1)+"*R THEY *C"+D$ :GOTO 1639
1634 GOTO 1611		REM READ ANOTHER STRING

1635 IF MATCH("+",GAB$(1),1)=3Ø REM CHECK FOR 2ND CONDITION
      THEN GAB$(1)="*"+MID$(GAB$(1),4,255):GOTO 1622
     GAB$(1)="*P"+MID$(GAB$(1),3,255) REM CHANGE COND TO PRN
     MIN%=MIN%+1000  REM RAISE THRESHOLD TO CAUSE QUICKER Ø 
		        USE OF GOOD CONDITIONAL STRING.
1638 RETURN

1639 REF%=MATCH("X$",GAB$(1),1)      REM DO X$ SUBSTITUTION 
     IF REF%>0 THEN Ø
    GAB$(1)=MID$(GAB$(1),1,REF%-1)+MID$(D$,2,LEN(D$)-2)+Ø
            MID$(GAB$(1),REF%+2,255) :GOTO 1639
     GAB$(1)=UCASE$(GAB$(1)): GOTO 1635

1640 T$=" I "
1650 GOSUB 2470
1660 IF T%=0 THEN RETURN
     TREF%=T%
     T$=EMOT$ :GOSUB 2470
     IF T%=0 THEN RETURN
     IF T%>TREF%+10 THEN T%=0 :RETURN
     IF T%<TREF% THEN T%=0 :RETURN
     IF LEN(Z$)<10 THEN T%=0 :RETURN
     IF TEST%=1 THEN RETURN
     D$=TFRAG$
     IF NEGREF%=0 THEN 1670	REM SCREEN NEGATIVE MEANINGS
     IF NEGREF%<T% THEN 1705
1670 GOSUB 2770
     IF FLAG%(T6%)=0 THEN 1701
     I$="TEND *SEEM *ARE PRONE "
1680 GOSUB 2630
1690 BECAUSE$="YOU "+IFRAG$+"TO "+D$+" "+Z$:BECAUSE%=CYCLE%+1
     PRINT BECAUSE$+"BECAUSE..."
     REASON%=CYCLE%+1
     NO$="NO?"
1700 RETURN

1701 I$="MUST LEARN *SHOULD TRY TO UNDERSTAND " :GOSUB 2630
     PRINT "WE "+IFRAG$+"WHY YOU "Ø
     +D$+" "+Z$+"."
     NO$="NO?"
     YES$="GOOD...TELL ME YOUR OPINION."
     TOPIC$="I NEED TO UNDERSTAND WHY YOU "Ø
     +D$+" "+Z$+"."
     RETURN  

1705 GOSUB 2770
     I$=CERT$ :GOSUB 2630
     Z$="YOU DONT "+D$+" "+Z$
     PRINT IFRAG$+", "+Z$+"."
     YES$="WHAT DO YOU "+D$+"?"
     TOPIC$="EXPLAIN WHY "+Z$+"."
     BECAUSE$=Z$:BECAUSE%=CYCLE%+1
     RETURN

1710 T$=" HOW * WHAT * WHO * WHERE * WHY "
1720 GOSUB 2470
1730 IF T%<>1 THEN T%=0 :RETURN
     IF TEST%=0 THEN 1731
     T%=1
     IF AGE%(T5%)<5 THEN AGE%(T5%)=5 
     RETURN
1731 QUES%=QUES%+1
     IF T2%<>7 THEN 1734 REM CATCH "WHAT SHOULD I SAY "
     A$=Z$ :D$=TFRAG$
     T$=" I * DO YOU MEAN * ME * YOU ":GOSUB 2470
     IF T%=0 THEN 1733
     IF T2%=5 THEN PRINT"YOU KNOW WHAT I MEAN."Ø
       :YES$="RIGHT!":GOTO 1739
     T$=" SAY * TELL * DISCUSS * TO KNOW "
     GOSUB 2470
     IF T%=0 THEN 1733
     I$="IS TROUBLING YOU*SEEMS IMPORTANT TO YOU*EVER YOU LIKE"
     GOSUB 2630
     PRINT "TELL ME WHAT ";IFRAG$;"."
     YES$="FINE...GO ON.":NO$=UR$+"MAKING THIS HARD."
     TOPIC$="YOU SEEM INHIBITED, "+B$+".":RETURN 
1733 Z$=A$ :TFRAG$=D$ :T2%=7
1734 IF T2%>2 THEN 1740
     A$=Z$ :D$=TFRAG$
     T$="DO *COULD *DOES *WOULD *SHOULD *CAN *WILL "
     GOSUB 2470
     IF T%=0 THEN 1735
     IF T%<8 THEN Z$=A$ :TFRAG$=D$ :GOTO 1740
1735 I$="ONLY YOU CAN *I CANT *PERHAPS YOU COULD "
     GOSUB 2630
     PRINT IFRAG$+"ANSWER THAT."
1739 T%=1: NO$="THINK ABOUT IT.":RETURN

1740 A$=R$
1742 D$=TFRAG$
1744 R$=Z$
1745 IF LEN(Z$)<6 THEN Z$="": GOTO 1790
1747 IF MATCH("DO ",R$,1)=1 THEN Ø
       R$="SHOULD"+MID$(R$,3,LEN(R$))
1748 IF MATCH("DOES ",R$,1)=1 THEN Ø
       R$="SHOULD"+MID$(R$,5,LEN(R$))
1750 T$="CAN *WILL *AM *ARE *IS *SHOULD *WOULD *HAVE *COULD "Ø
       +"*WAS " 
1755 GOSUB 2470
1757 F$=TFRAG$
1760 IF T%<>1 THEN T%=1:Z$=", "+B$:GOTO 1790
1763 R$=" "+Z$
1764 A$=Z$
1765 T$=" A * AN * THE * MY * YOUR * HIS * HER "Ø
       +"* ITS * OUR * THOSE * THAT * THEIR *ING "
1766 GOSUB 2470
1767 Z$=A$
1768 IF T%>0 THEN Z$=F$+" "+Z$:GOTO 1780
1770 Z$=MID$(Z$,1,MATCH(" ",Z$,2))+F$+MID$(Z$,MATCH(" ",Z$,2),LEN(Z$))
1780 GOSUB 2770
1790 IF FLAG%(T6%)=1 THEN 1795
     I$="WONDER*WANT TO KNOW*ASK*PRETEND YOU DONT KNOW":GOSUB 2630
     PRINT "WHY DO YOU "+IFRAG$+D$+" "+Z$+"?"
     BECAUSE$="YOU "+IFRAG$+" ":BECAUSE%=CYCLE%+1
     RETURN
1795 I$="TEND TO THINK *SUPPOSE *SUSPECT *FIGURE "
1800 GOSUB 2630
1810 PRINT D$;" DO YOU ";IFRAG$;Z$;"?"
     RETURN

1820 T$=" ABOUT * MY * DISCUSS ":GOSUB 2470
     IF T%=0 THEN RETURN
     IF LEN(Z$)<3 THEN T%=0 :RETURN
     R$=" "+Z$
     TREF%=T2%
     T$=FEMALE$+"*"+MALE$+"*"+GROUP$Ø
     +"*CHILDHOOD *SEX LIFE *"Ø
     +"LIFE *PAST *SEX "
1860 GOSUB 2470
1870 IF T%>0 THEN 1875
1872 T$=" IS * ARE * WERE * HAS * HAVE * CAN * WILL "
     GOSUB 2470
     IF T%>0 THEN R$=LEFT$(R$,T%)
     GOSUB 9200 REM COUNT WORDS
     IF WORDS%=1 THEN TFRAG$=MID$(R$,2,LEN(R$)-2):GOTO 1890
     T%=0 :RETURN
1875 IF MATCH(" ",R$,T%-1)<>T%-1 THEN 1872 
     Z1%=1:Z2%=T%:GOSUB 9210  REM COUNT WORDS FROM MY TO MATCH
     IF WORDS%>2 THEN T%=0 :RETURN 
     IF WORDS%>0 THEN Ø
      TFRAG$=MID$(R$,2,T%-2)+TFRAG$
1890 D$=" "
     IF TREF%<>9 THEN 1896  REM ONLY "MY" SUBJECTS TO SUBJ$
     TP%=MATCH(TFRAG$,SUBJ$,1)
     IF TP%=1 THEN T%=0 :RETURN
     IF TEST%=1 THEN 1894 REM AVOID PUTTING ON SUBJECT$
     IF TP%=0 THEN 1893
     IF MATCH("*",SUBJ$,TP%-1)<>TP%-1 THEN 1893 REM TWO WORDS
     PRINT"YES, WE WERE DISCUSSING YOUR "+TFRAG$+" EARLIER."Ø
     :SUBJ$=MID$(SUBJ$,1,TP%-1) REM REORDER SUBJ$
1893 SUBJ$=TFRAG$+"*"+SUBJ$:SUBJDATE%=CYCLE%+24
      IF MATCH(TFRAG$,GAB$(5),1)=0 THEN D$="*S"+TFRAG$+" ":Ø
      GOSUB 9800     REM SUBJECT TO DISK
1894 D$=" your "
1896 CAND$=D$+TFRAG$+" "
     IF T%=0 THEN TRAP$=" ALL ":TRAPAGE%=1:GOTO 1902
     IF T2%<LEN(FEMALE$)+LEN(MALE$)+LEN(GROUP$) THEN 1897
       TRAP$=" IT ":TRAPAGE%=1:GOTO 1902
1897 IF T2%>LEN(FEMALE$)+LEN(MALE$) THEN Ø
       TRAP$=" THEY ":GOTO 1900
       TRAP$=" PERSON "
1900 TRAPAGE%=3
1902 IF TREF%<>9 THEN T%=0 : RETURN
     IF TEST%=1 THEN T%=1 : RETURN REM AFTER TRAPPING
     I$="HOW DO YOU FEEL *I WANT TO KNOW MORE *TELL ME "
1910 GOSUB 2630
1920 PRINT IFRAG$;"ABOUT YOUR ";TFRAG$;"."
     I$=SCARE$ :GOSUB 2630
     NO$="DOES IT "+IFRAG$+"YOU TO DISCUSS IT? "
     TOPIC$="GO ON ABOUT YOUR "+TFRAG$+"."
1930 RETURN

1940 T$=" IVE * I HAVE "
1950 GOSUB 2470
1960 IF T%=0 THEN RETURN
     IF LEN(Z$)<3 THEN T%=0:RETURN
     IF TEST%=1 THEN RETURN
1970 GOSUB 2770
1980 I$="TELL ME YOUR FEELINGS ABOUT HAVING *"Ø
     +"LETS DISCUSS THE FACT THAT YOU HAVE "
1990 GOSUB 2630
2000 PRINT IFRAG$+Z$;"."
     YES$="WELL?"
     NO$="ARE YOU AFRAID TO?"
     TOPIC$="ITS INTERESTING THAT YOU HAVE "+Z$+"."
2010 RETURN

2020 T$="REAGAN */+*HOLLAND "+M$  REM NAME CRACKER
2025 GOSUB 2470
2030 IF T%=0 THEN RETURN
     IF MATCH(" ",R$,T%-1)<>T%-1 THEN T%=0 :RETURN
           REM CHECK FOR COMPLETE NAME (NOT LAST PART).
       TRAPAGE%=2:TRAP$=" PERSON "
       CAND$=" "+TFRAG$+" " REM TRAP NAME TO HE-SHE
     IF TEST%=1 THEN T%=1 :RETURN
     I$="VERY SICK*AN INTERESTING CASE"+Ø
     "*A PATIENT OF MINE*BEYOND MY HELP":GOSUB 2630
     PRINT TFRAG$+" IS "+IFRAG$+"!"
     TOPIC$="HOW DO YOU FEEL ABOUT "+TFRAG$+"?"
     YES$="ABSOLUTELY!":WHY$="TAKE MY WORD!"
     RETURN
2041 REM

     REM /////////////  YES TEST  ////////////////////

2395 GOSUB 3640  REM GET R$
2400             REM ENTER WITHOUT GETTING R$
2401 Y%=1
     T$=AFIRM$
     GOSUB 2470
     IF T%=0 THEN Y%=0
2402 IF Y%=1 THEN RETURN
2403 T$=NEG$
2404 GOSUB 2470
2405 IF T%>0 THEN RETURN  REM NEG RESP.
2408 PRINT "DOES THAT MEAN YES?"
2409 GOTO 2395

2470 REM ////////////// TEST  T$ ///////////////////
2471 REM  (Look for one of T$ substrings in R$)
2480 T4%=0
2490 T2%=1
2500 IF LEN(R$)<2 THEN T%=0:RETURN
2505 START%=1 REM START% IS USED WHEN 2510 IS CALLED TO
              REM PREVENT SUBSTITUTING INTO SUBSTITUTIONS
     T4%=T4%+1   REM COUNT POSITION
2510 T2%=MATCH("*",T$,T2%)+1 REM <<<SECONDARY ENTRY (FOR SUBS)
2520 T3%=MATCH("*",T$,T2%)-1
2530 IF T3%<T2% THEN T3%=LEN(T$)
2550 C$=MID$(T$,T2%,T3%-T2%+1)
2560 T%=MATCH(C$,R$,START%)
2570 IF T%=0 THEN GOTO 2610
2580 IF MID$(T$,T3%,1)=" " THEN T3%=T3%-1
2590 IF T%+LEN(C$)>LEN(R$) THEN Z$=" ":GOTO 2621
2600 IF T%>0 THEN Ø
       Z$=MID$(R$,T%+T3%-T2%+2,LEN(R$)):GOTO 2621
2610 IF T2%>1 THEN 2505   REM NEXT TFRAG CAN START AT 1
2620 RETURN REM FAILED TO FIND ANY R$
2621 TFRAG$=MID$(T$,T2%,T3%-T2%+1):RETURN REM FOUND ONE

2630 REM ///////////  PICK ONE I$ //////////////////////
2623 REM  (Picks one I$ substring on a rotating basis)
2640 I2%=1
2650 N2%=1:N3%=1
2660 IF MATCH("*",I$,N2%)>0 THEN Ø
       N2%=MATCH("*",I$,N2%)+1 Ø
       :N3%=N3%+1 : GOTO 2660

2670 N%(T5%)=N%(T5%)+1
2680 IF N%(T5%)>N3% THEN N%(T5%)=1
2690 N1%=N%(T5%)
     IF T5%<25 THEN T5%=T5%+75
     IF T5%>25 THEN T5%=T5%-25
2720 I2%=MATCH("*",I$,I2%)+1
2730 I3%=MATCH("*",I$,I2%)-1
2740 IF I3%<I2% THEN I3%=LEN(I$)
2750 N1%=N1%-1
2755 IF N1%>0 THEN 2720
     IFRAG$=MID$(I$,I2%,I3%-I2%+1)
2760 RETURN

     REM  ////////// PERSON CHANGER //////////////////

2770 R$=Z$
     IF MATCH(" ",R$,1)<>1 THEN R$=" "+Z$

2800 T$=" I WAS * YOU WERE * ARE YOU *"Ø
     +" I AM * MY * I * MINE * ME *"Ø
     +" MYSELF * IM *"Ø
     +" IVE * YOU ARE * YOU ARENT * YOU * YOURSELF * YOURE *"Ø
     +" YOUR * YOURS * YOUVE * ANALIZA "
2810 F$=" you were * i was * am i *"Ø
     +" you are * your * you * yours *"Ø
     +" you * yourself * you are *"Ø
     +" youve * i am * i am not * THIS ENTITY *"Ø
     +" myself * i am *"Ø
     +" my * mine * i have * ..."
     PROREF%=LEN(T$)+4 REM USED TO LIMIT PRONOUNS TO 1 SUBST.
     REM THE PRONOUN STRINGS WILL BE SUBSTITUTED IF ROOM
     IF LEN(F$)+LEN(IT$)+LEN(HE$)+LEN(SHE$)+LEN(THEY$)<247 Ø
      THEN T$=T$+"* IT * HE * SHE * THEY ":Ø
           F$=F$+"*"+IT$+"*"+HE$+"*"+SHE$+"*"+THEY$
     IF LEN(F$)+LEN(HIM$)+LEN(HER$)+LEN(THEM$)<248 Ø
      THEN T$=T$+"* HIM * HER * THEM ":Ø
           F$=F$+"*"+HIM$+"*"+HER$+"*"+THEM$
2890 T$="#%#*"+T$ : F$="%#%*"+F$ REM NULL FIRST ENTRY
     IF LEN(R$)<2 THEN T%=0: RETURN
     START%=1 REM SEARCH R$ FROM START% (1)
     REM SUBSTITUTION LOOP <<<<<<
2900 T4%=0 :T2%=1 REM SET UP TEST T$ ROUTINE FOR MID-ENTRY
2910 GOSUB 2510
2980 IF T%=0 THEN 3062 REM CANT FIND ANY MORE
2990 F4%=0
3000 F2%=1
3010 F4%=F4%+1 REM COUNTING LOOP
3020 F2%=MATCH("*",F$,F2%)+1
3030 F3%=MATCH("*",F$,F2%)-1
3040 IF F3%<F2% THEN F3%=LEN(F$)
3050 IF F4%<T4%+1 THEN 3010
3060 R$=LEFT$(R$,T%)+MID$(F$,F2%+1,F3%-F2%)Ø
        +MID$(R$,T%+T3%-T2%+2,200)
     START%=T%+F3%-F2%  
                REM SAME TFRAG SEARCH ONLY AFTER SUBSTITUTION
     IF T2%>PROREF% THEN T4%=T4%+1:GOTO 2910 
                         REM DONT SUBST PRONOUN BUT ONCE
     T2%=T2%-1  REM TRY THIS TFRAG AGAIN
     GOTO 2910
3062 IF LEN(R$)<14 THEN 3070
3065 TEMATCH%=MATCH(" THIS ENTITY",R$,1)
     IF TEMATCH%=0 THEN 3070
     IF MATCH(" TO ",R$,TEMATCH%)=TEMATCH%+12 THEN 3067
     IF TEMATCH%>LEN(R$)-13 THEN 3067
     GOTO 3068
3067 R$=MID$(R$,1,TEMATCH%)+"ME"+MID$(R$,TEMATCH%+12,100)
3068 TEMATCH%=MATCH(" THIS ENTITY",R$,1)
     IF TEMATCH%=0 THEN 3070
     IF TEMATCH%<LEN(R$)/3 THENØ
       R$=MID$(R$,1,TEMATCH%)+"I"Ø
      +MID$(R$,TEMATCH%+12,LEN(R$))
3070 R$=UCASE$(R$) REM UNLOWER CASE THE SUBSTITUTIONS
     Z$=R$
     IF MATCH(" ",Z$,1)=1 THEN Z$=MID$(Z$,2,200)
3085 RETURN 
     REM //////////////////////////////////////////

3090 T$=" I * YOU * HE * SHE * THEY ":GOSUB 2470
3130 IF T%=0 THEN RETURN
     D$=TFRAG$+" "
3150 TREF%=T%
3160 T$="CANT *WONT *DONT *SHOULDNT *DIDNT *DOESNT "
3170 GOSUB 2470
3171 IF T%>TREF% THEN 3190
3172 T$="CAN NOT *CANT *DO NOT *DONT *DOES NOT *DOESNT "
3173 GOSUB 2470
3180 IF T%<TREF% THEN T%=0:RETURN
3185 T2%=T3%+3
3187 T3%=MATCH(" ",T$,T2%+1)-1
     TFRAG$=MID$(T$,T2%,T3%-T2%+1)
3190 A$=TFRAG$  REM A$="CANT" ETC / D$=" YOU " ETC
3200 IF TEST%=1 THEN T%=1: RETURN
     A$=A$+" ":D$=MID$(D$,2,LEN(D$))
     IF D$="YOU " THEN D$="i "
     Z1%=MATCH(" ANY",Z$,1)
     IF Z1%>0 THEN Ø REM CHANGE ANY... TO SOME...
      Z$=LEFT$(Z$,Z1%)+"SOME"+MID$(Z$,Z1%+4,255) 
     I$="WHY "+A$+D$+Z$+"?*PERHAPS IN TIME "+D$+"WILL "+Z$+"."
     GOSUB 2630
     BECAUSE$=D$+A$
     IF I2%=1 THEN BECAUSE%=CYCLE%+1
     TOPIC$="YOU STILL WONDER WHY "+D$+A$+Z$+"."
     Z$=IFRAG$:GOSUB 2770
     PRINT Z$			REM CONVERT PRINT
     Z$=BECAUSE$:GOSUB 2770
     BECAUSE$=Z$		REM CONVERT BECAUSE
     Z$=TOPIC$:GOSUB 2770
     TOPIC$=Z$			REM CONVERT TOPIC
3220 RETURN

3221 REM
3230 T$=" THAT IS * THATS * THAT WAS * IT IS * ITS *"Ø
       +" THERE ARE * THERE WERE * IT WAS "
3240 GOSUB 2470
3250 IF T%<>1 THEN T%=0 :RETURN
     D$=TFRAG$
     IF T2%>MATCH("WAS",T$,1) THEN 3260
     IF BADREF%=0 THEN 3260
     IF BADREF%>T%+LEN(TFRAG$)+20 THEN 3260 
     IRRITABLE%=IRRITABLE%+3
     IF TEST%=1 THEN T%=1: RETURN
     I$="SORRY *EXCUSE ME ":GOSUB 2630
     A$=IFRAG$+B$+", I OCCASSIONALLY "
     I$="GET CONFUSED*MISUNDERSTAND*MESS UP"
     GOSUB 2630
     PRINT A$+IFRAG$+"!"
     YES$="DONT RUB IT IN!"
     RETURN
3260 IF TEST%=1 THEN T%=1: RETURN
     Z$=D$+" "+Z$
3270 GOSUB 2770
3280 I$="WHY DO *WHAT MAKES *WHY IS IT "
3290 GOSUB 2630
3300 A$=IFRAG$+"YOU "
3310 I$="THINK *FEEL *BELIEVE *SAY "
3320 GOSUB 2630
3330 PRINT A$;IFRAG$;Z$;"?"
     BECAUSE$="YOU "+IFRAG$+Z$:BECAUSE%=CYCLE%+1
     TOPIC$="" 
3340 RETURN

3341 REM
3350 T%=0
     IF LEN(SUBJ$)<3 THEN RETURN
3355 IF CYCLE%<SUBJDATE% THEN RETURN
     IF TEST%=1 THEN T%=1 :RETURN
3360 I$="LETS REGRESS *LETS GO BACK *WE SHOULD RETURN "
3370 GOSUB 2630
3380 E3%=MATCH("*",SUBJ$,1)
     A$=" "+MID$(SUBJ$,1,E3%-1)
3390 PRINT IFRAG$;"TO DISCUSSING YOUR"Ø
           ;A$;"."
       TRAPAGE%=1 :TRAP$=" ALL ":CAND$=" your"+A$+" "
3400 IF MID$(SUBJ$,LEN(SUBJ$),1)<>" " THEN SUBJ$=SUBJ$+" "
3410 SUBJ$=MID$(SUBJ$,E3%+1,LEN(SUBJ$))
     NO$="WHY WONT YOU TALK ABOUT YOUR"+A$+"?"
     BECAUSE$="YOU WONT DISCUSS YOUR"+A$+" ":BECAUSE%=CYCLE%+2
     YES$="GOOD...GO AHEAD!" 
     I$="AVOIDING THE TRUTH *TRYING TO FORGET ":GOSUB 2630
     TOPIC$=RU$+IFRAG$+"ABOUT YOUR"+A$+"?"
3420 RETURN

3540 T$="STICK IT * UP YOUR* SHOVE IT *"Ø
       +"DROP DEAD * GO TO HELL * IT IN YOUR * BUZZ OFF *"Ø
       +"UCK YOU *IT ON YOU *STUFF IT *CRAM IT "
3550 GOSUB 2470
3560 IF T%=0 THEN RETURN
     IRRITABLE%=IRRITABLE%+1
     IF TEST%=1 THEN T%=1 :RETURN 
3570 I$="ISNT THAT *WHY ARE YOU STILL SO *WHY SO "
3580 GOSUB 2630
     A$=IFRAG$
     I$="BELLIGERENT *HOSTILE *IRRITABLE ":GOSUB 2630
3600 PRINT A$+IFRAG$+"?"
     BECAUSE$=UR$+"SO HOSTILE ":BECAUSE%=CYCLE%+1
     TOPIC$="YOUR "+IFRAG$+"NATURE MAY BE PART OF YOUR "Ø
           +"PROBLEM, "+B$+"."
3610 RETURN

     REM /////// GET AND CLEAN UP INPUT SENTENCE /////////
3640 PRINT:INPUT R$:PRINT:R$=UCASE$(R$)
3650 R$=" "+R$
3660 IF LEN(R$)<2 THEN RETURN
3670 R9%=MATCH(".",R$,1)
3680 IF R9%=0 THEN R9%=MATCH("Ø?",R$,1)
3690 IF R9%=0 THEN R9%=MATCH("Ø!",R$,1)
3700 IF R9%=0 THEN 3710
     R$=MID$(R$,1,R9%-1)+" "+MID$(R$,R9%+1,LEN(R$)):GOTO 3670
3710 R9%=MATCH("'",R$,1)
3720 IF R9%=0 THEN 3730
     R$=MID$(R$,1,R9%-1)+MID$(R$,R9%+1,LEN(R$)) 
     GOTO 3710
3730 R9%=MATCH("  ",R$,1)
3740 IF R9%<LEN(R$) THEN 3750
     R$=MID$(R$,1,R9%):GOTO 3761
3750 IF R9%=0 THEN 3760
     R$=MID$(R$,1,R9%)+MID$(R$,R9%+2,LEN(R$))
     GOTO 3730
3760 IF MID$(R$,LEN(R$),1)<>" " THEN R$=R$+" "
       REM TRIM TRAILING THOUGHTS FROM Z$
3761 T$=" ALSO * TOO * LIKEWISE ":GOSUB 2470
     IF T%=0 THEN 3763
     IF T%>(LEN(R$)-(LEN(TFRAG$)+3)) THEN R$=MID$(R$,1,T%)
3763 T$=" ARENT * ISNT * CANT * WONT * DONT * WONT ":GOSUB 2470
     IF T%<2*LEN(R$)/5 THEN 3765 REM LOOKING FOR 2ND THOUGHT
     TREF%=T%
     A$=R$:R$=" "+Z$     
     T$=" IT * HE * SHE * YOU * THEY * WE * I ":GOSUB 2470
     R$=A$
     IF T%=1 THEN R$=MID$(R$,1,TREF%)
3765 T$=" AND * OR * BUT ": GOSUB 2470
     Z1%=T%:Z2%=255:GOSUB 9210   REM COUNT WORDS AFTER CONJ.
     IF WORDS%=2 THEN 3770 REM LAST WORD OF LIST
     IF T%=0 THEN 3770
     IF T%<LEN(R$)/3 THEN R$=MID$(R$,MATCH(" ",R$,T%+1),64)Ø
     :GOTO 3770
     R$=MID$(R$,1,T%)
     REM------SYNONYMER-------
3770 T$=" MOM * DAD * WANT * SAID * PERVERT *"Ø
    +" BEGIN * TALK ABOUT * DUMB * STUPID * QUEER *"Ø
    +" HORNY * SICK * LISTENING *"Ø
    +" HES * SHES * THEYRE * ITS * OFTEN *"Ø
    +" UNDERSTAND * USUALLY "
    F$=" mother * father * desire * stated * deviate *"Ø
    +" start * discuss * stupid * dumb * homosexual *"Ø
    +" sexually aroused * ill * paying attention *"Ø
    +" he is * she is * they are * it is * frequently *"Ø
    +" comprehend * normally "
     GOSUB 2890 REM LAST PART OF PERSON CHANGER
     RETURN
3772 REM ///////////////////////////////////////////////

3780 T$="BECAUSE "
3790 GOSUB 2470
3800 IF T%=0 THEN RETURN
     IF TEST%=1 THEN RETURN
     GOSUB 2770
     IF FLAG%(T6%)=0 THEN 3810
     IF LEN(BECAUSE$)>1 THEN PRINT BECAUSE$+"BECAUSE "+Z$+"?"Ø
     :GOTO 3832
     PRINT Z$+"?":GOTO 3832
3810 I$="IS THAT THE REAL *YOU EXPECT ME TO BELIEVE THATS "+Ø
     "THE *THATS THE WHOLE "
3820 GOSUB 2630
3830 PRINT IFRAG$+"REASON "+BECAUSE$+"?"
3832 NO$="I DIDNT THINK SO."
     I$=CONT$ :GOSUB 2630
     YES$="VERY WELL..."+Z$+"..." +IFRAG$+"."
     TOPIC$=""
3840 RETURN
3842 REM

3850 A$=R$
3860 T$=" I "
3870 GOSUB 2470
3880 IF T%=0 THEN RETURN
3890 R$=" "+Z$

3900 T%=0: RETURN     REM FREE ALGORITHM SPACE
3971 REM

3980 T$=" ARE YOU * ARENT YOU * AM I * IS HE * IS SHE *"Ø
       +" ISNT HE * ISNT SHE * ISNT IT "
3990 GOSUB 2470
4000 IF T%<>1 THEN T%=0 : RETURN
     IF TEST%=1 THEN RETURN
     Z$=MID$(TFRAG$,MATCH(" ",TFRAG$,2),200)+" "Ø
       +MID$(TFRAG$,2,MATCH(" ",TFRAG$,2)-1)+Z$
4010 I$="OF COURSE *DOES IT SEEM "Ø
        +"*IS IT YOUR OPINION *ARE YOU INCLINED TO FEEL "
4020 GOSUB 2630
4030 GOSUB 2770
4040 IF I2%>1 THEN D$="?" ELSE D$="!"
     YES$="THEN PERHAPS "+Z$+"."
     NO$="IF "+Z$+", THEN WHAT?"
     PRINT IFRAG$+Z$+D$
     TOPIC$=""
4050 RETURN
4052 REM

4060 T$="CAN YOU *DO YOU "
4070 GOSUB 2470
4080 IF T%=0 THEN RETURN
4090 IF T%>3 THEN T%=0:RETURN
     IF TEST%=1 THEN T%=1 : RETURN
4100 D$=TFRAG$+" "
4110 I$="NOT REALLY...*THE IMPORTANT THING IS "Ø
        +"*YES...*MY QUESTION IS "
4120 GOSUB 2630
4130 GOSUB 2770
4140 PRINT IFRAG$+D$+Z$+"?"
     YES$="I HOPE SO...GO ON..."
     NO$="I WAS AFRAID OF THAT!"
     TOPIC$=""
4150 RETURN

4153 REM
4160 T$="WILL YOU "
4170 GOSUB 2470
4180 IF T%<>2 THEN T%=0:RETURN
     IF TEST%=1 THEN T%=1 :RETURN
4190 I$="HOPE *THINK *REALLY EXPECT "Ø
        +"*FANTASIZE "
4200 Z%=MATCH("PLEASE ",Z$,1)
4210 IF Z%=1 THEN Z$=MID$(Z$,7,LEN(Z$))
4220 IF Z%>1 THEN Ø
        Z$=MID$(Z$,1,Z%-1)+MID$(Z$,Z%+6,LEN(Z$))
4230 GOSUB 2630
4240 GOSUB 2770
4250 IF LEN(Z$)<3 THEN 4265
4260 IF MID$(Z$,1,1)=" " THEN Z$=MID$(Z$,2,LEN(Z$))
4265 Z$=MID$(Z$,1,LEN(Z$)-1)+","
4270 PRINT"DO YOU "+IFRAG$+"I WILL "Ø
          +Z$+" "+B$+"?"
     YES$="DONT COUNT ON IT!"
     NO$="I SEE...YOU DONT."
     TOPIC$=""
4280 RETURN

4290 T$=" EVERY* SOME* ALIKE * ARE LIKE * IS LIKE * THE SAME "
     GOSUB 2470
     IF TEST%=1 THEN RETURN
     I$="IN WHAT WAY*WHAT IS THE RESEMBLANCE"
     IF T2%<10 THEN Ø
     I$="BE MORE SPECIFIC*ELUCIDATE THAT"
     IF T2%<3 THEN Ø
     I$="AVOID GENERALIZING*TRY NOT TO EXAGGERATE"
     GOSUB 2630
     IF T2%<10 THEN IFRAG$=B$+", COULD YOU "+IFRAG$Ø
     : YES$="FINE...GO ON": NO$="TRY!"
     PRINT IFRAG$+"?" 
4430 RETURN

5800 T$=" HE * SHE * THEY "
     D$="HIM *HER  *THEM  "
5810 GOSUB 2470
5820 IF T%<>1 THEN T%=0: RETURN
     IF T2%>2 THEN 5821
     INDEX%=1
     IF HEAGE%<1 THEN 5824 
     GOTO 5825
5821 IF T2%>7 THEN 5822
     INDEX%=2
     IF SHEAGE%<1 THEN 5824 
     GOTO 5825
5822 INDEX%=3
     IF THEYAGE%>0 THEN GOTO 5825
5824 IF WHODATE%>CYCLE% THEN 5825 REM DONT ASK WHO TOO OFTEN
     IF TEST%=1 THEN RETURN
     WHODATE%=CYCLE%+10
     TOPIC$=MID$(TFRAG$,2,255)+" " REM eg:"THEY "
     GOSUB 2770
     PRINT"WHO "+Z$+"?":Ø
     TOPIC$=TOPIC$+Z$+"...OF COURSE."
     RETURN
5825 IF TEST%=1 THEN RETURN 
     FOCUS%(INDEX%)=FOCUS%(INDEX%)+1
     CNTR%=INDEX%
5826 CNTR%=CNTR%+1
     IF CNTR%=4 THEN CNTR%=1
     IF CNTR%<>INDEX% THEN Ø
      FOCUS%(CNTR%)=0 :GOTO 5826
     Z$=MID$(T$,T2%,T3%+1-T2%+1)+Z$
     D$=MID$(D$,T2%,MATCH(" ",D$,T2%)-T2%+1)
5830 I$="IS IT IMPORTANT *WHY DO YOU MENTION "Ø
       +"*ARE YOU BOTHERED "
5840 GOSUB 2630
5850 GOSUB 2770
5860 IF FOCUS%(INDEX%)=2 THEN Ø
     PRINT "YOU SEEM CONCERNED ABOUT "+D$+", "+B$+"."Ø
     :YES$="I COULD TELL.":NO$="REALLY?":RETURN
     PRINT B$+", "+IFRAG$+"THAT "+Z$+"?"
     YES$="WHY "+IFRAG$+"?"
     BECAUSE$="YOU FEEL ITS IMPORTANT ":BECAUSE%=CYCLE%+2
     NO$="HUMMM....WHY DO I DOUBT THAT?"
     IF FLAG%(T6%)=0 Ø
     THEN TOPIC$="TELL ME ABOUT "+D$+"."
5870 RETURN

6000 T$=" IS * ISNT "
6010 GOSUB 2470
6020 IF T%<>1 THEN T%=0:RETURN
     IF TEST%=1 THEN T%=1 :RETURN
6030 I$="PERHAPS, WHAT IS YOUR OPINION?*MAYBE, BUT"Ø
     +" WHAT IF NOT?*DO YOU THINK SO?"
6040 GOSUB 2630
6050 PRINT IFRAG$
     YES$="WHY DO YOU THINK SO?"
     BECAUSE$="YOU THINK SO ":BECAUSE%=CYCLE%+2
     NO$="I SEE...YOU DONT THINK SO...GO ON." 
     TOPIC$=""
6060 RETURN

7000 T$="I ":GOSUB 2470
7010 IF T%<>2 THEN T%=0 :RETURN
     IF TEST%=1 THEN T%=1 :RETURN
     Z$=R$ :GOSUB 2770
     IF FLAG%(T6%)=0 THEN 7060
7030 I$="UNDERSTAND*AM LISTENING*FOLLOW YOU"
7040 GOSUB 2630
7050 PRINT"I "+ IFRAG$+"..."+Z$+"...PLEASE GO ON."
     NO$="NO?"
     GOTO 7070
7060 PRINT Z$;"?"
     NO$="I AM CONFUSED ABOUT THIS."
7070 IF NEGREF%>0 THEN NO$="OF COURSE NOT."
     YES$="I UNDERSTAND...GO ON."
     RETURN

8000 T$=" IF "
8010 GOSUB 2470
8020 IF T%<>1 THEN T%=0:RETURN
8030 IF NEGREF%>T% THEN T%=0:RETURN
     IF TEST%=1 THEN T%=1 :RETURN
8040 I$="AND IF NOT..*WHAT IF NOT *WHY DO YOU SAY THAT "
8050 GOSUB 2630
8060 PRINT IFRAG$+"?"
8070 RETURN

9000 T$=" LETS * LET US * WHY DONT WE * CAN WE "
     GOSUB 2470
     IF T%=0 THEN RETURN
     IF TEST%=1 THEN RETURN
     GOSUB 2770
     IF MATCH("NOT",Z$,1)=1 THEN 9100
     I$=CERT$ :GOSUB 2630
     PRINT IFRAG$+"WE CAN "+Z$+"."
     TOPIC$=""
     RETURN
9100 Z$=MID$(Z$,MATCH("NOT",Z$,1)+4,LEN(Z$))
     PRINT "WHY SHOULDNT WE ";Z$;"?"
     BECAUSE$="WE SHOULDNT ":BECAUSE%=CYCLE%+1
     TOPIC$="WHAT ARE YOU AFRAID OF, "+B$+"?"
     RETURN

9200 REM COUNT WORDS IN R$ BETWEEN Z1% AND Z2%
     Z1%=1:Z2%=LEN(R$)
9210 WORDS%=0
9220 Z1%=MATCH(" ",R$,Z1%+1)
     IF Z1%=0 THEN RETURN
     IF Z1%>Z2% THEN RETURN
     WORDS%=WORDS%+1
     IF Z1%=LEN(R$) THEN RETURN
     IF Z1%=Z2% THEN RETURN 
     GOTO 9220

	REM THIS SUBROUTINE APPENDS D$ TO GAB$(5) IF IT CAN
9800 IF LEN(D$)+LEN(GAB$(5))<255 THEN Ø
      GAB$(5)=GAB$(5)+D$
     RETURN

9900 PRINT"EXCUSE ME FOR A MOMENT."
     IF FILEOPEN%=1 THEN CLOSE 1
     CHAIN "ANALIZA+.OVL"

     END«eof»