主题:[讨论]不用中断不用shell不用/l的文件目录处理
看到71做的文件目录和45做的中断调用,
我也忍不住手弄了一个来
主要利用的是files命令
因为利用的是屏幕显示,有几个局限:
0. 做的是文件列表选择功能
源文件就在这里了,随便你们喜欢怎样利用怎样改都行了.
1. 单个目录中文件数量过多的时候只对后面的20*4=88个文件名有效,这也是屏幕显示的局限
DEFINT A-Z
FUNCTION FilesSelect$
lenofname = 16
GOSUB dirfilename
DO
onoff = 0
IF x > 0 AND y > 0 AND x < 26 AND y < 73 THEN IF SCREEN(x, y) <> 45 OR SCREEN(x, y + 8) = 46 THEN onoff = onoff + 1
IF onoff = 1 THEN
DEF SEG = &HB800
addofscr = ((xx - 1) * 80 + yy - 1) * 2 + 1
FOR iofadd = addofscr TO (addofscr + lenofname * 2) STEP 2
POKE iofadd, 135
NEXT
addofscr = ((x - 1) * 80 + y - 1) * 2 + 1
FOR iofadd = addofscr TO (addofscr + lenofname * 2) STEP 2
POKE iofadd, 18
NEXT
DEF SEG
xx = x
yy = y
ELSE
x = xx
y = yy
BEEP
END IF
DO: k$ = INKEY$: LOOP WHILE k$ = ""
SELECT CASE k$
CASE CHR$(0) + CHR$(72): x = x - 1
CASE CHR$(0) + CHR$(80): x = x + 1
CASE CHR$(0) + CHR$(75): y = y - 2 - lenofname
CASE CHR$(0) + CHR$(77): y = y + 2 + lenofname
CASE CHR$(0) + CHR$(73), CHR$(0) + CHR$(81): x = 1: y = 1
CASE CHR$(13)
f$ = ""
FOR yi = y TO (y + lenofname)
si = SCREEN(x, yi)
IF si > 45 THEN f$ = f$ + CHR$(si)
NEXT
IF RIGHT$(f$, 5) = "<DIR>" THEN
CHDIR LEFT$(f$, INSTR(1, f$, "<") - 1)
GOSUB dirfilename
ELSE
FilesSelect$ = f$
EXIT DO
END IF
CASE CHR$(8)
CHDIR ".."
GOSUB dirfilename
CASE CHR$(0) + CHR$(59)
CHDIR "\"
GOSUB dirfilename
CASE ELSE
END SELECT
LOOP UNTIL k$ = CHR$(27)
COLOR 7, 0
CLS
EXIT FUNCTION
dirfilename:
COLOR 23, 0
CLS
FILES
LOCATE CSRLIN - 1, 1
PRINT STRING$(80, 45);
x = 1
y = 1
xx = 1
yy = 1
RETURN
END FUNCTION
我也忍不住手弄了一个来
主要利用的是files命令
因为利用的是屏幕显示,有几个局限:
0. 做的是文件列表选择功能
源文件就在这里了,随便你们喜欢怎样利用怎样改都行了.
1. 单个目录中文件数量过多的时候只对后面的20*4=88个文件名有效,这也是屏幕显示的局限
DEFINT A-Z
FUNCTION FilesSelect$
lenofname = 16
GOSUB dirfilename
DO
onoff = 0
IF x > 0 AND y > 0 AND x < 26 AND y < 73 THEN IF SCREEN(x, y) <> 45 OR SCREEN(x, y + 8) = 46 THEN onoff = onoff + 1
IF onoff = 1 THEN
DEF SEG = &HB800
addofscr = ((xx - 1) * 80 + yy - 1) * 2 + 1
FOR iofadd = addofscr TO (addofscr + lenofname * 2) STEP 2
POKE iofadd, 135
NEXT
addofscr = ((x - 1) * 80 + y - 1) * 2 + 1
FOR iofadd = addofscr TO (addofscr + lenofname * 2) STEP 2
POKE iofadd, 18
NEXT
DEF SEG
xx = x
yy = y
ELSE
x = xx
y = yy
BEEP
END IF
DO: k$ = INKEY$: LOOP WHILE k$ = ""
SELECT CASE k$
CASE CHR$(0) + CHR$(72): x = x - 1
CASE CHR$(0) + CHR$(80): x = x + 1
CASE CHR$(0) + CHR$(75): y = y - 2 - lenofname
CASE CHR$(0) + CHR$(77): y = y + 2 + lenofname
CASE CHR$(0) + CHR$(73), CHR$(0) + CHR$(81): x = 1: y = 1
CASE CHR$(13)
f$ = ""
FOR yi = y TO (y + lenofname)
si = SCREEN(x, yi)
IF si > 45 THEN f$ = f$ + CHR$(si)
NEXT
IF RIGHT$(f$, 5) = "<DIR>" THEN
CHDIR LEFT$(f$, INSTR(1, f$, "<") - 1)
GOSUB dirfilename
ELSE
FilesSelect$ = f$
EXIT DO
END IF
CASE CHR$(8)
CHDIR ".."
GOSUB dirfilename
CASE CHR$(0) + CHR$(59)
CHDIR "\"
GOSUB dirfilename
CASE ELSE
END SELECT
LOOP UNTIL k$ = CHR$(27)
COLOR 7, 0
CLS
EXIT FUNCTION
dirfilename:
COLOR 23, 0
CLS
FILES
LOCATE CSRLIN - 1, 1
PRINT STRING$(80, 45);
x = 1
y = 1
xx = 1
yy = 1
RETURN
END FUNCTION