DIM scanned AS LONG lines = 50 WIDTH 80, lines green = 10 cyan = 11 red = 12 magenta = 13 yellow = 14 white = 15 CONST false = 0, true = -1 maxwords = (lines - 7) * 5 tmpp = INSTR(COMMAND$, "/") IF tmpp = 0 THEN oa$ = COMMAND$ ELSE IF tmpp = 1 THEN file$ = MID$(COMMAND$, 2) ELSE oa$ = LEFT$(COMMAND$, tmpp - 1): file$ = MID$(COMMAND$, tmpp + 1) IF file$ = "" THEN file$ = "d:\dict\WEB2.DIC" OPEN file$ FOR BINARY AS #1 IF LOF(1) = 0 OR LEFT$(oa$, 1) = "/" THEN BEEP COLOR INT(RND * 14) + 1 PRINT PRINT "Useage: ANAGRAM [w] [/f]" PRINT PRINT "Where w is the word to analyze, and f is a simple word file" PRINT "(default is WEB2.DIC)" PRINT GOTO nd END IF CLOSE IF RIGHT$(file$, 8) <> "d:\dict\WEB2.DIC" THEN PRINT "Counting words... press ESC to abort" OPEN file$ FOR INPUT AS #1 DO INPUT #1, tmp$ now = now + 1 IF now MOD 1000 = 0 THEN LOCATE , 1: PRINT now; LOOP UNTIL EOF(1) OR INKEY$ = CHR$(27) CLOSE ELSE now = 234936 END IF start: DO more = true CLS OPEN file$ FOR INPUT AS #1 alredy = 0 COLOR white PRINT PRINT STRING$((80 - 14) / 2, 32); "ANAGRAM SEARCH" PRINT COLOR yellow PRINT "Enter your word: "; COLOR green IF oa$ = "" THEN INPUT "", oa$ ELSE PRINT oa$: cm = 1 oa$ = RTRIM$(oa$) IF oa$ = "" THEN CLOSE : GOTO nd a$ = LCASE$(oa$) la = LEN(a$) PRINT COLOR cyan REDIM letter(la) AS STRING * 1 REDIM templetter(la) AS STRING * 1 FOR letters = 1 TO la letter$(letters) = MID$(a$, letters, 1) NEXT letters VIEW PRINT 6 TO lines DO UNTIL EOF(1) INPUT #1, bb$ b$ = LCASE$(bb$) lb = LEN(b$) tmp$ = a$ scanned = scanned + 1 FOR place = 1 TO lb tmp = INSTR(tmp$, MID$(b$, place, 1)) IF tmp = 0 THEN IF scanned MOD 2000 = 1 THEN GOSUB stats GOTO 6 END IF tmp$ = LEFT$(tmp$, tmp - 1) + MID$(tmp$, tmp + 1) NEXT found = found + 1 IF b$ = a$ THEN wasitfound = 1 IF found MOD maxwords = 0 AND more THEN COLOR red PRINT "More? (Y/n/c)"; in$ = "" WHILE in$ = "": in$ = LCASE$(INKEY$): WEND LOCATE , POS(0) - 13 PRINT STRING$(13, 32); LOCATE , POS(0) - 13 IF in$ = "n" THEN CLOSE : GOTO 1 ELSE IF in$ = "c" THEN more = false COLOR cyan ELSE in$ = INKEY$ SELECT CASE in$ CASE "" CASE CHR$(27): CLOSE : GOTO 1 CASE ELSE: more = true END SELECT END IF GOSUB stats IF LEN(b$) = la THEN IF b$ = a$ THEN COLOR green ELSE COLOR magenta ELSE COLOR cyan END IF PRINT bb$, 6 LOOP GOSUB stats CLOSE PRINT PRINT COLOR yellow BEEP COLOR green: PRINT LTRIM$(STR$(scanned)); : COLOR yellow: PRINT " words scanned,"; : IF found = 0 THEN PRINT " NO "; ELSE COLOR green: PRINT found; COLOR yellow: PRINT "anagram"; : IF found <> 1 THEN PRINT "s"; PRINT " found." 1 COLOR magenta PRINT PRINT "Press any key except <"; : COLOR yellow: PRINT "ESC"; : COLOR magenta: PRINT "> to start over..." DO: in$ = INKEY$: LOOP UNTIL in$ <> "" found = 0 scanned = 0 wasitfound = 0 yn$ = "" oa$ = "" VIEW PRINT 1 TO 50 LOOP UNTIL in$ = CHR$(27) nd: IF RND > .5 THEN COLOR white ELSE COLOR red LOCATE lines, 1 vain$ = "Richard A. Nichols III - a.k.a. Inhahe." LOCATE CSRLIN, 1 l = TIMER FOR s = 1 TO LEN(vain$) LOCATE CSRLIN, 1 PRINT RIGHT$(vain$, s); WHILE TIMER = l: WEND l = TIMER NEXT LOCATE CSRLIN, 1 END addword: CLOSE OPEN "words.txt" FOR INPUT AS #1 OPEN "words.tmp" FOR OUTPUT AS #2 LEN = 8192 x = -2 first = 1 already = 0 lk = LEN(oa$) DO UNTIL EOF(1) INPUT #1, f$ lf = LEN(f$) IF f$ > oa$ AND already = 0 THEN already = 1 x = x + lk + 2 IF x > 78 THEN PRINT #2, x = lk ELSE IF first = 0 THEN PRINT #2, ", "; ELSE first = 0 END IF PRINT #2, oa$; END IF x = x + lf + 2 IF x > 78 THEN PRINT #2, PRINT #2, f$; x = lf ELSE IF first = 0 THEN PRINT #2, ", "; ELSE first = 0 PRINT #2, f$; END IF LOOP IF already = 0 THEN IF x + lk + 2 > 78 THEN PRINT #2, ELSE IF first = 0 THEN PRINT #2, ", "; END IF PRINT #2, oa$; END IF CLOSE SHELL "copy words.tmp words.txt" KILL "words.tmp" RETURN stats: xp = POS(0) yp = CSRLIN VIEW PRINT 1 TO lines LOCATE 1, 1 COLOR red PRINT USING " ###.####% ######/######/###### ###.#%"; found / scanned * 100; found; scanned; now; scanned / now * 100 LOCATE 1, 5 VIEW PRINT 6 TO lines LOCATE yp, xp RETURN