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
|