5748168 [rkeene@sledge /home/rkeene/devel/archive/quickbasic]$ cat -n is2000c.bas
   1: DECLARE SUB ReadKey (prm$, t$, chrs!, brd$, rd!)
   2: DECLARE SUB CompuSay (t$)
   3: DECLARE SUB StartMappingSpeech ()
   4: DECLARE SUB Anton (i$, o$)
   5: DECLARE SUB ChkWrd (i$, dflt$, nw$)
   6: DECLARE SUB Talk2Em ()
   7: DECLARE SUB SolveDAProb (qt$)
   8: DECLARE SUB TeachMSmthing ()
   9: DECLARE SUB Corr (n$)
  10: DECLARE SUB Upper (n$)
  11: DECLARE FUNCTION Revers$ (t$)
  12: DECLARE SUB Answr ()
  13: RANDOMIZE TIMER
  14: DIM SHARED is2000 AS STRING
  15: lne = 0
  16: CLS
  17: OPEN "greet.ai" FOR INPUT AS #1
  18: DO UNTIL EOF(1): lne = lne + 1: LINE INPUT #1, a$: LOOP:
  19: CLOSE 1
  20: OPEN "Greet.ai" FOR INPUT AS #1
  21: le = CINT(RND * lne)
  22: IF le = 0 THEN le = lne
  23: FOR qw = 1 TO le
  24: LINE INPUT #1, grt$
  25: NEXT qw
  26: Corr grt$
  27: hding$ = "IS2000 Inteligentce Simulator 2000"
  28: PRINT hding$
  29: PRINT STRING$(LEN(hding$), 205)
  30: PRINT "IS2000>"; TAB(10); LTRIM$(RTRIM$(grt$))
  31: LOCATE 4, 1, 0
  32: ReadKey "Human>", grt2$, 69, "Hello?", 0
  33: FOR sl = 1 TO LEN(grt2$)
  34: IF MID$(grt2$, sl, 1) = "A" OR MID$(grt2$, sl, 1) = "E" OR MID$(grt2$, sl, 1) = "O" OR MID$(grt2$, sl, 1) = "I" OR MID$(grt2$, sl, 1) = "U" OR MID$(grt2$, sl, 1) = "Y" THEN slybl = slybl + 1
  35: NEXT sl
  36: IF slybl = 0 THEN g = -1: GOTO 333
  37: Corr grt2$
  38: grt2$ = RTRIM$(grt2$)
  39: grt2$ = LTRIM$(grt2$)
  40: CLOSE #1
  41: OPEN "words.is2" FOR INPUT AS #1
  42: DO UNTIL EOF(1)
  43: LINE INPUT #1, ln$
  44: IF UCASE$(ln$) = UCASE$(grt2$) THEN EXIT DO
  45: LOOP
  46: IF UCASE$(ln$) = UCASE$(grt2$) THEN  ELSE g = -2: PRINT "IS2000>"; TAB(10); grt2$; " is not a known word": CLOSE #1: GOTO 337
  47: CLOSE 1
  48: OPEN "Greets.ai" FOR INPUT AS #1
  49: DO UNTIL EOF(1)
  50: LINE INPUT #1, Mystr$
  51: IF UCASE$(grt2$) = UCASE$(Mystr$) THEN g = 1
  52: LOOP
  53: CLOSE 1
  54: OPEN "NGreets.ai" FOR INPUT AS #1
  55: DO UNTIL EOF(1)
  56: LINE INPUT #1, Mystr$
  57: IF UCASE$(grt2$) = UCASE$(Mystr$) THEN g = -1
  58: LOOP
  59: CLOSE 1
  60: 337 OPEN "greet.ai" FOR APPEND AS #1
  61: OPEN "WORDs.is2" FOR APPEND AS #2
  62: IF g = 1 THEN PRINT #1, grt2$: PRINT #2, UCASE$(grt2$): CLOSE 1, 2
  63: IF g = -1 THEN GOTO 333
  64: IF g = 0 THEN INPUT "Is that a greeting"; gt$: LOCATE 5, 1: PRINT "                         ": Upper gt$: IF gt$ = "Y" THEN CLOSE #1: OPEN "greets.ai" FOR APPEND AS #1: PRINT #1, grt2$: CLOSE #1 ELSE CLOSE #1: OPEN "ngreets.ai" FOR APPEND AS #1: PRINT #1, grt2$: LOCATE 5, 1: PRINT "IS2000>"; TAB(10); "Ok?": CLOSE #1
  65: IF g = -2 THEN
  66:         INPUT "Is that a Greeting"; gt$
  67:         LOCATE 5, 1: PRINT "                         "
  68:         gt$ = UCASE$(gt$)
  69:                 IF gt$ = "Y" THEN
  70:                 FOR ss = 1 TO LEN(grt2$)
  71:                 IF MID$(grt2$, ss, 1) = " " THEN PRINT #2, UCASE$(wrdd$): wrdd$ = "" ELSE wrdd$ = wrdd$ + MID$(grt2$, ss, 1)
  72:                 NEXT ss
  73:                 IF INSTR(grt2$, " ") = 0 THEN PRINT #2, wrdd$
  74:                 PRINT #1, UCASE$(grt2$)
  75:                 LOCATE 5, 1: PRINT "                                         "
  76:                 LOCATE 6, 1: PRINT "                                      ": LOCATE 5, 1
  77:                 CLOSE 1, 2
  78:         ELSE
  79:                 LOCATE 5, 1: PRINT "IS2000>"; TAB(10); "Ok?                      "; SPACE$(LEN(grt2$))
  80:                 LOCATE 6, 1: PRINT "                                     ": LOCATE 6, 1
  81:                 CLOSE 1, 2: OPEN "ngreets.ai" FOR APPEND AS #1: PRINT #1, UCASE$(grt2$)
  82:         END IF
  83: END IF
  84: GOTO 334
  85: 333 LOCATE CSRLIN, 1, 0: PRINT "IS2000>"; TAB(10); "Ok?"
  86: 334 ReadKey "Human>", m$, 69, "Hello?", 0
  87: IF m$ = "TEACH" THEN TeachMSmthing
  88: IF INSTR(m$, ")") > 0 THEN SolveDAProb m$
  89: IF m$ = "USE INFO" THEN SolveDAProb ""
  90: IF m$ = "TALK TO ME" THEN Talk2Em
  91: IF m$ = "MIMIC: ON" AND qd = 0 THEN StartMappingSpeech: qd = 1
  92: IF m$ = "BYE" THEN END
  93: IF m$ = "/RESTART" THEN RESET: RUN
  94: IF RIGHT$(m$, 1) = "?" THEN Answr
  95: IF INSTR(m$, ")") > 0 THEN SolveDAProb m$
  96: IF LEFT$(m$, 4) = "SAY " THEN CompuSay RIGHT$(m$, LEN(m$) - 4)
  97: IF is2000 = "USE INFO" THEN SolveDAProb ""
  98: IF is2000 = "TALK TO ME" THEN Talk2Em
  99: IF is2000 = "MIMIC: ON" AND qd = 0 THEN StartMappingSpeech: qd = 1
 100: IF is2000 = "BYE" THEN END
 101: IF is2000 = "/RESTART" THEN RESET: RUN
 102: GOTO 334
 103: 
 104: SUB Answr
 105: 
 106: END SUB
 107: 
 108: SUB Anton (i$, o$)
 109: 'OPEN "Anon.is2" FOR INPUT AS #4
 110: 'CLOSE 4
 111: END SUB
 112: 
 113: SUB ChkWrd (i$, dflt$, nw$)
 114: a = INSTR(UCASE$(i$), "A")
 115: e = INSTR(UCASE$(i$), "E")
 116: i = INSTR(UCASE$(i$), "I")
 117: o = INSTR(UCASE$(i$), "O")
 118: u = INSTR(UCASE$(i$), "U")
 119: IF a = 0 AND e = 0 AND i = 0 AND o = 0 AND u = 0 THEN PRINT nw$ ELSE PRINT dflt$
 120: END SUB
 121: 
 122: SUB CompuSay (t$)
 123: PRINT "IS2000>"; TAB(10); t$
 124: is2000 = t$
 125: END SUB
 126: 
 127: SUB Corr (n$)
 128: IF n$ = " " THEN EXIT SUB
 129: IF n$ = "" THEN EXIT SUB
 130: IF ASC(MID$(n$, 1, 1)) > 96 AND ASC(MID$(n$, 1, 1)) < 123 THEN MID$(n$, 1, 1) = CHR$(ASC(MID$(n$, 1, 1)) - 32)
 131: IF LEN(n$) > 1 THEN  ELSE EXIT SUB
 132: FOR qw% = 2 TO LEN(n$)
 133: IF ASC(MID$(n$, qw%, 1)) > 64 AND ASC(MID$(n$, qw%, 1)) < 91 THEN MID$(n$, qw%, 1) = CHR$(ASC(MID$(n$, qw%, 1)) + 32)
 134: IF MID$(n$, qw%, 1) = "." THEN prd = 1: qw% = qw% + 1
 135: IF prd = 1 AND ASC(MID$(n$, 1, 1)) > 96 AND ASC(MID$(n$, 1, 1)) < 123 THEN MID$(n$, 1, 1) = CHR$(ASC(MID$(n$, 1, 1)) - 32): prd = 0
 136: NEXT qw%
 137: END SUB
 138: 
 139: SUB Define (t$)
 140: DIM aii(0 TO LEN(t$)) AS STRING
 141: ab = 1
 142: bb% = 1
 143: FOR ab = 1 TO LEN(t$)
 144: t$ = LTRIM$(t$)
 145: t$ = RTRIM$(t$)
 146: t$ = t$ + " "
 147: DO UNTIL MID$(t$, ab, 1) = " "
 148: aii(bb%) = aii(bb%) + MID$(t$, ab, 1)
 149: ab = ab + 1
 150: LOOP
 151: bb% = bb% + 1
 152: NEXT ab
 153: FOR bba = 1 TO bb% - 1
 154: Upper a$
 155: c$ = aii(bba) + ":"
 156: OPEN "vocab.ai" FOR INPUT AS #2
 157: DO UNTIL b$ = c$
 158: IF EOF(2) THEN CLOSE 2: OPEN "vocab.ai" FOR INPUT AS #2
 159: LINE INPUT #2, b$
 160: LOOP
 161: LINE INPUT #2, meng$
 162: PRINT meng$
 163: CLOSE #2
 164: a$ = ""
 165: c$ = ""
 166: NEXT bba
 167: END SUB
 168: 
 169: SUB DelRepChars (t$)
 170: IF LEN(t$) < 3 THEN EXIT SUB
 171: FOR q = 3 TO LEN(t$)
 172: c$ = MID$(t$, q - 2, 1)
 173: b$ = MID$(t$, q - 1, 1)
 174: a$ = MID$(t$, q, 1)
 175: 'IF a$ = b$ AND b$ = c$ AND c$ = a$ THEN
 176: NEXT q
 177: END SUB
 178: 
 179: SUB FindWrd (phr$, wrd$, fd)
 180: 'wrd$ = LTRIM$(RTRIM$(wrd$)): phr$ = LTRIM$(RTRIM$(phr$)): wrd$ = " " + wrd$ + " ": phr$ = " " + phr$ + " ": fd = 0
 181: 'FOR q = 0 TO LEN(phr$) - LEN(wrd$) + 1
 182: '    FOR w = 1 TO LEN(wrd$)
 183: '        p$ = p$ + MID$(phr$, q + w, 1)
 184: '    NEXT w
 185: '    IF UCASE$(p$) = UCASE$(wrd$) THEN fd = q + 1: phr$ = LTRIM$(RTRIM$(phr$)): EXIT SUB
 186: '    p$ = ""
 187: 'NEXT q
 188: END SUB
 189: 
 190: SUB ReadKey (prm$, t$, chrs, brd$, rd)
 191: t$ = ""
 192: PRINT prm$; TAB(10);
 193: DO UNTIL i$ = CHR$(13) OR i$ = CHR$(27)
 194: IF q = 10000 THEN IF POS(0) > 1 THEN PRINT : PRINT "IS2000>"; TAB(10); brd$: q = 0: PRINT prm$; TAB(10); : t$ = "" ELSE PRINT "IS2000>"; TAB(10); brd$: t$ = "": q = 0: PRINT prm$; TAB(10); : t$ = ""
 195: IF q < 10000 AND rd = 1 THEN q = q + 1
 196: IF i$ = CHR$(8) THEN IF LEN(t$) = 0 THEN i$ = "": GOTO 60 ELSE t$ = MID$(t$, 1, LEN(t$) - 1): LOCATE CSRLIN, POS(0) - 1: PRINT " "; : LOCATE CSRLIN, POS(0) - 1
 197: i$ = INKEY$
 198: IF i$ = "" THEN GOTO 60
 199: q = 0
 200: IF (ASC(i$) > -1 AND ASC(i$) < 32) THEN GOTO 60
 201: IF i$ = CHR$(13) OR i$ = CHR$(27) THEN GOTO 70
 202: IF ASC(i$) < 123 AND ASC(i$) > 96 THEN i$ = CHR$(ASC(i$) - 32): PRINT i$;  ELSE PRINT i$;
 203: t$ = t$ + i$
 204: IF LEN(t$) >= chrs THEN t$ = MID$(t$, 1, LEN(t$) - 1): LOCATE CSRLIN, POS(0) - 1: PRINT " "; : LOCATE CSRLIN, POS(0) - 1
 205: 60 LOOP
 206: 70 PRINT ""
 207: IF prm$ = "IS2000>" THEN is2000 = t$
 208: END SUB
 209: 
 210: FUNCTION Revers$ (t$)
 211: r$ = ""
 212: FOR q = LEN(t$) TO 1 STEP -1
 213: r$ = r$ + MID$(t$, q, 1)
 214: NEXT q
 215: Revers$ = r$
 216: END FUNCTION
 217: 
 218: SUB Simpl (s$)
 219: OPEN "syon.is2" FOR INPUT AS #3
 220: m$ = MID$(s$, 1, 1)
 221: FOR q = 2 TO LEN(s$)
 222: IF MID$(s$, q, 1) = " " AND MID$(s$, q - 1, 1) <> " " THEN
 223: DO UNTIL EOF(3) OR UCASE$(g$) = UCASE$(m$)
 224: LINE INPUT #3, g$
 225: m$ = LTRIM$(RTRIM$(m$))
 226: g$ = UCASE$(LTRIM$(RTRIM$(g$)))
 227: f = INSTR(g$, "}")
 228: IF LEFT$(g$, 1) = "{" THEN r$ = MID$(g$, 2, f - 2)
 229: IF LEN(g$) = f THEN  ELSE Anton g$, a$
 230: LOOP
 231: IF EOF(3) THEN ChkWrd m$, "IS2000>  I don't know the word " + m$, "IS2000>  " + m$ + " is not a word.": CLOSE 3: OPEN "syon.is2" FOR INPUT AS #3: m$ = "" ELSE tt$ = tt$ + r$ + " ": CLOSE 3: OPEN "syon.is2" FOR INPUT AS #3: m$ = ""
 232: ELSE m$ = m$ + MID$(s$, q, 1)
 233: END IF
 234: NEXT q
 235: PRINT tt$
 236: CLOSE 3
 237: END SUB
 238: 
 239: SUB SolveDAProb (qt$)
 240: IF qt$ = "" THEN  ELSE m$ = qt$: GOTO 12
 241: 'ON ERROR GOTO 0
 242: OPEN "KNLDGE.IS2" FOR INPUT AS #2
 243: ln = 0
 244: DO UNTIL EOF(2)
 245: LINE INPUT #2, d$: ln = ln + 1
 246: LOOP
 247: CLOSE 2
 248: OPEN "words.is2" FOR INPUT AS #2
 249: DO UNTIL EOF(2)
 250: LINE INPUT #2, noth$
 251: IF noth$ = "" THEN  ELSE wrdd = wrdd + 1
 252: LOOP
 253: CLOSE 2
 254: IF ln = 1 THEN a$ = "thing" ELSE a$ = "things"
 255: IF wrdd = 1 THEN b$ = "word" ELSE b$ = "words"
 256: t$ = "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
 257: PRINT t$
 258: PRINT "ºI currently know"; ln; a$; TAB(LEN(t$)); "º"
 259: PRINT "ºI know"; wrdd; b$; TAB(LEN(t$)); "º"
 260: PRINT "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"
 261: ReadKey "Problem>", m$, 70, "Are you here?", 0
 262: 12 fst = INSTR(m$, "(")
 263: snd = INSTR(m$, ")")
 264: IF fst = 0 OR snd = 0 THEN PRINT "I don't know what to do.": EXIT SUB
 265: impotnt = INSTR(snd, m$, " ")
 266: IF impotnt = 0 THEN wdbd$ = MID$(m$, snd + 1, LEN(m$) - (snd + 1)): GOTO 2
 267: wdbd$ = MID$(m$, snd + 1, impotnt - snd - 1)
 268: 2 tt$ = UCASE$(MID$(m$, fst, snd - fst))
 269: OPEN "KNLDGE.IS2" FOR INPUT AS #2
 270: DO
 271: LINE INPUT #2, f$
 272: ff$ = MID$(f$, 1, LEN(tt$))
 273: IF UCASE$(ff$) = UCASE$(tt$) THEN GOTO 3
 274: IF EOF(2) THEN PRINT "IS2000>"; TAB(10); "I don't know how to "; LCASE$(MID$(ff$, 2, LEN(ff$) - 1)): CLOSE 2: EXIT SUB
 275: LOOP UNTIL UCASE$(ff$) = UCASE$(tt$)
 276: 3 FOR s = 1 TO LEN(tt$)
 277: IF MID$(tt$, s, 1) = "$" THEN w$ = wdbd$
 278: NEXT s
 279: gw$ = MID$(f$, LEN(tt$) + 3, LEN(f$) - LEN(tt$) - 2)
 280: els = INSTR(gw$, "|")
 281: FOR sl = 1 TO LEN(wdbd$)
 282: IF MID$(wdbd$, sl, 1) = "A" OR MID$(wdbd$, sl, 1) = "E" OR MID$(wdbd$, sl, 1) = "O" OR MID$(wdbd$, sl, 1) = "I" OR MID$(wdbd$, sl, 1) = "U" OR MID$(wdbd$, sl, 1) = "Y" THEN slybl = slybl + 1
 283: NEXT sl
 284: IF slybl = 0 THEN PRINT "IS2000>"; TAB(10); "Use REAL words please.": CLOSE 2: EXIT SUB
 285: FOR s = 1 TO LEN(gw$)
 286: IF MID$(gw$, s, 2) = "*1" THEN IF slybl < 3 THEN f = 3 ELSE s = els
 287: IF MID$(gw$, s, 2) = "$" + CHR$(34) THEN lnt = INSTR(s + 2, gw$, CHR$(34)): g$ = g$ + wdbd$ + MID$(gw$, s + 2, (lnt - s) - 2) ' ELSE G$ = G$ + MID$(M$, S, 1)
 288: IF MID$(gw$, s, 2) = CHR$(34) + "$" AND f = 0 THEN lnt = INSTR(els + 1, gw$, CHR$(34)): ss = INSTR(lnt + 1, gw$, CHR$(34)): g$ = g$ + MID$(gw$, lnt + 1, ss - lnt - 1) + wdbd$
 289: IF MID$(gw$, s, 4) = "$=-$" THEN s = s + 3: g$ = Revers$(wdbd$):
 290: NEXT s
 291: IF impotnt = 0 THEN impotnt = LEN(m$) + 1
 292: FOR d = 1 TO LEN(m$)
 293: IF d = fst THEN m2$ = m2$ + g$: d = impotnt - 1 ELSE m2$ = m2$ + MID$(m$, d, 1)
 294: NEXT d
 295: PRINT "IS2000>"; TAB(10); m2$: is2000 = m2$
 296: CLOSE 2
 297: END SUB
 298: 
 299: SUB StartMappingSpeech
 300: PRINT "IS2000>"; TAB(10); "Computers don't talk very well"
 301: EXIT SUB
 302: PRINT "IS2000>"; TAB(10); "What is your name?"
 303: ReadKey "Human>", nm2$, 69, "What is your name? " + TIME$, 0
 304: OPEN "Spchpats.is2" FOR INPUT AS #2
 305: DO UNTIL EOF(2) OR nm$ = nm2$
 306: LINE INPUT #2, nm$
 307: LOOP
 308: IF EOF(2) AND nm$ <> nm2$ THEN new = 1 ELSE new = 0
 309: IF new = 1 THEN CLOSE 2: GOTO 1234
 310: DO UNTIL d$ = "{/}"
 311: LINE INPUT #2, d$
 312: 
 313: LOOP
 314: 
 315: 
 316: 
 317: 
 318: 
 319: 
 320: 
 321: 1234 END SUB
 322: 
 323: SUB Talk2Em
 324: 
 325: END SUB
 326: 
 327: SUB TeachMSmthing
 328: ON ERROR GOTO 0
 329: OPEN "KNLDGE.IS2" FOR INPUT AS #2
 330: ln = 0
 331: DO UNTIL EOF(2)
 332: LINE INPUT #2, d$: ln = ln + 1
 333: LOOP
 334: CLOSE 2
 335: IF ln = 1 THEN g$ = "thing" ELSE g$ = "things"
 336: t$ = "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
 337: PRINT t$
 338: PRINT "ºI currently know"; ln; g$; TAB(LEN(t$)); "º"
 339: PRINT "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"
 340: 
 341: END SUB
 342: 
 343: SUB Upper (n$)
 344: FOR qw% = 1 TO LEN(n$)
 345: IF ASC(MID$(n$, qw%, 1)) > 96 AND ASC(MID$(n$, qw%, 1)) < 123 THEN MID$(n$, qw%, 1) = CHR$(ASC(MID$(n$, qw%, 1)) - 32)
 346: NEXT qw%
 347: END SUB
 348: 
5748169 [rkeene@sledge /home/rkeene/devel/archive/quickbasic]$

Click here to go back to the directory listing.
Click here to download this file.
last modified: 2000-05-09 21:03:58