10DEFFNucase(lcase$)
20REM Returns a string
30REM ASCii values of a,z are 97,122
40FORX%=1TOLEN(lcase$)
50IFASC(MID$(lcase$,X%,1))>96 AND ASC
(MID$(lcase$,X%,1))<123 THENlcase$=LEFT$
(lcase$,X%-1)+CHR$(ASC(MID$(lcase$,X%,1)
)AND&DF)+RIGHT$(lcase$,LEN(lcase$)-X%)
60NEXT
70=lcase$
80:
90DEFFNgetline(length%)
100REM Returns a string
110DIM line% length%
120DIM block% &5
130P%=block%
140[OPT2:EQUBline% MOD256:EQUBline% DI
V256:EQUBlength%:EQUB32:EQUB126:]
150A%=0:X%=block% MOD256:Y%=block% DIV
256:CALLoswd
160=$line%
170:
180DEFFNgotbadchr(name$,invalid$)
190REM Returns "FALSE" if all the lett
ers are OK
200line%=0
210FORX%=1TOLEN(invalid$)
220line%=line% OR INSTR(name$,MID$(inv
alid$,X%,1))
230NEXT
240=line%