112 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
_runtimePath_ "../runtime"
 | 
						|
_runtimeStart_ &h7FFF
 | 
						|
_codeRomType_ ROMv1
 | 
						|
 | 
						|
CONST N1 = 35
 | 
						|
CONST N2 = 6
 | 
						|
CONST N3 = 111
 | 
						|
CONST YOU_IDX = 12
 | 
						|
CONST YOUR_IDX = 28
 | 
						|
 | 
						|
module "ElizaData.m"
 | 
						|
 | 
						|
TYPE dum = {a%,
 | 
						|
            b,
 | 
						|
            DIM c(2,2),
 | 
						|
            d$,
 | 
						|
            DIM e$(5),
 | 
						|
            f$="dog"}
 | 
						|
 | 
						|
DIM TEST(2, 2) = 0, 1, 2, 3, 4, 5
 | 
						|
 | 
						|
DIM R(N1)
 | 
						|
DIM N(N1)
 | 
						|
 | 
						|
P$ = ""
 | 
						|
 | 
						|
const gobber$ = "123"
 | 
						|
 | 
						|
gobber$ = "45678"
 | 
						|
 | 
						|
CLS
 | 
						|
FOR X=0 TO N1
 | 
						|
    R(X) = S(X)
 | 
						|
    N(X) = S(X) + T(X) - 1
 | 
						|
NEXT X
 | 
						|
 | 
						|
PRINT "HI! IM ELIZA, WHAT IS YOURPROBLEM?"
 | 
						|
 | 
						|
 | 
						|
restart:
 | 
						|
    set FG_COLOUR, 0x3F : INPUT I$ : set FG_COLOUR, 0x0F : print
 | 
						|
    I$ = "  " + UPPER$(I$) + "  "
 | 
						|
 | 
						|
input:
 | 
						|
    FOR L=0 TO LEN(I$)-1
 | 
						|
input0:
 | 
						|
        IF MID$(I$,L,1) = "'" then I$ = LEFT$(I$,L) + RIGHT$(I$,LEN(I$)-L-1) : goto input0
 | 
						|
        IF L+4 > LEN(I$)-1 THEN goto input1
 | 
						|
        IF MID$(I$,L,4) <> "SHUT" THEN goto input1
 | 
						|
        PRINT "OK, IF THAT'S HOW YOU FEELTHEN I'LL SHUT UP...BYE..."
 | 
						|
        END
 | 
						|
input1:
 | 
						|
    NEXT L
 | 
						|
        
 | 
						|
    'an example of how to use gprintf
 | 
						|
    dim tt(2, 1) = 0, 1, 2, 5, 4, 3 : ll = 1
 | 
						|
    gprintf "L=%d L+1=%d : S(L)=%d : I$=%s : R$=%s : tt(1, 1)=%d : @L=0x%4x : @S(L)=0x%4x : @I$=0x%4x : @R$=0x%4x", L, L+1, S(L), I$, REPLIES$(L), tt(1, 1), @L, addr(S(L)), @I$, addr(REPLIES$(L))
 | 
						|
        
 | 
						|
    IF I$=P$ THEN PRINT "PLEASE DON'T REPEAT YOURSELF!" : GOTO restart
 | 
						|
    
 | 
						|
    
 | 
						|
keywords:    
 | 
						|
    FOR K=0 TO N1
 | 
						|
        FOR L=0 TO LEN(I$) - LEN(KEYWORD$(K))
 | 
						|
            IF MID$(I$,L,LEN(KEYWORD$(K))) <> KEYWORD$(K) THEN goto keywords1
 | 
						|
            IF K <> YOU_IDX THEN goto keywords0
 | 
						|
            IF MID$(I$,L,LEN(KEYWORD$(YOUR_IDX))) = KEYWORD$(YOUR_IDX) THEN K = YOUR_IDX
 | 
						|
keywords0:
 | 
						|
            F$ = KEYWORD$(K): GOTO conjugate
 | 
						|
keywords1:
 | 
						|
        NEXT L
 | 
						|
    NEXT K
 | 
						|
    K=N1 : GOTO reply
 | 
						|
 | 
						|
 | 
						|
conjugate:
 | 
						|
    C$ = " " + RIGHT$(I$,LEN(I$)-LEN(F$)-L+1) + " "
 | 
						|
    FOR X=0 TO N2
 | 
						|
        FOR L=0 TO LEN(C$)-1
 | 
						|
            IF L+1 + LEN(WORDIN$(X)) > LEN(C$) THEN conjugate0
 | 
						|
            IF MID$(C$,L,LEN(WORDIN$(X))) <> WORDIN$(X) THEN conjugate0
 | 
						|
            C$ = LEFT$(C$,L) + WORDOUT$(X) + RIGHT$(C$,LEN(C$)-L-LEN(WORDIN$(X)))
 | 
						|
            L = L + LEN(WORDOUT$(X))
 | 
						|
            GOTO conjugate1
 | 
						|
conjugate0:
 | 
						|
            IF L+1 + LEN(WORDOUT$(X)) > LEN(C$) THEN conjugate1
 | 
						|
            IF MID$(C$,L,LEN(WORDOUT$(X))) <> WORDOUT$(X) THEN conjugate1
 | 
						|
            C$ = LEFT$(C$,L) + WORDIN$(X) + RIGHT$(C$,LEN(C$)-L-LEN(WORDOUT$(X)))
 | 
						|
            L = L + LEN(WORDIN$(X))
 | 
						|
conjugate1:
 | 
						|
        NEXT L
 | 
						|
    NEXT X
 | 
						|
    
 | 
						|
    IF MID$(C$,1,1) = " " THEN C$ = RIGHT$(C$,LEN(C$)-1)
 | 
						|
    FOR L=0 TO LEN(C$)-1
 | 
						|
conjugate2:
 | 
						|
        IF MID$(C$,L,1) = "!" THEN C$ = LEFT$(C$,L) + RIGHT$(C$,LEN(C$)-L-1) : GOTO conjugate2
 | 
						|
    NEXT L
 | 
						|
    
 | 
						|
    
 | 
						|
reply:
 | 
						|
    F$ = REPLIES$(R(K))
 | 
						|
    R(K) = R(K)+1 : IF R(K)>N(K) THEN R(K) = S(K)
 | 
						|
    IF RIGHT$(F$,1) <> "*" THEN PRINT F$ : P$ = I$ : GOTO restart
 | 
						|
    IF C$<>"   " THEN reply0
 | 
						|
    PRINT "YOU WILL HAVE TO ELABORATE MORE FOR ME TO HELP YOU"
 | 
						|
    GOTO restart
 | 
						|
    
 | 
						|
reply0:
 | 
						|
    PRINT LEFT$(F$,LEN(F$)-1);C$
 | 
						|
    P$ = I$ : GOTO restart
 |