Michael Grunditz writes:

> How do I do a recursive delete in qdos ?

With extreme care!! Requires TK2.

Per

1 REMark  Example: CLS: DELETE_DIRECTORY 'ram2_', 'topdir', 1
2 :
10 REMark        DELETE_DIRECTORY
11 REMark S*BASIC PROCedure to delete an
12 REMark     entire directory tree
13 REMark   Requires tk2 or equivalent
14 REMark          P Witte 1998
15 REMark Use at own risk! No warranties!
16 REMark Parameters:
17 REMark  dev$ = device; eg win1_, ram2_
18 REMark  dir$ = directory; eg temp_
19 REMark  tree:  0: files in this dir only
20 REMark       <>0: all sub-dirs and files
21 :
1000 DEFine PROCedure DELETE_DIRECTORY(dev$, dir$, tree)
1010 LOCal c%, t%, pos, ch%(18), n$(36)
1020 n$ = dir$: c% = 0
1030 REPeat dir_loop
1040  ch%(c%) = FOP_DIR(dev$ & n$)
1050  IF ch%(c%) < 0: Action 'Error', ch%(c%)
1060  pos = -64
1070  REPeat file_loop
1080   pos = pos + 64
1090   IF pos >= FLEN(#ch%(c%)) THEN
1100    n$ = FNAME$(#ch%(c%)): CLOSE#ch%(c%)
1110    IF tree: Action 'Deleting', 1
1120    c% = c% - 1: IF c% < 0: EXIT dir_loop
1130    pos = INT(FPOS(#ch%(c%)) / 64) * 64
1140   ELSE
1150    GET#ch%(c%)\ pos + 14; n$
1160    IF LEN(n$) > 0 THEN
1170     BGET#ch%(c%)\ pos + 5; t%
1180     IF t% = 255 THEN
1190      IF tree THEN
1200       Action 'Checking', 2
1210       c% = c% + 1: EXIT file_loop
1220      END IF
1230     ELSE
1240      Action 'Deleting', 0
1250     END IF
1260    END IF
1270   END IF
1280  END REPeat file_loop
1290 END REPeat dir_loop
1300 END DEFine
1310 :
2000 DEFine PROCedure Action(tx$, type)
2010 IF CODE(INKEY$(#0; 0)) = 27: CLOSE: ERT -1
2020 IF type THEN
2030  PRINT \ tx$! dev$; n$! '->'
2040  IF type < 0: CLOSE: ERT type
2050  IF type = 1: DELETE dev$ & n$
2060 ELSE
2070  PRINT tx$! n$
2080  DELETE dev$ & n$
2090 END IF
2100 END DEFine
2110 :


Reply via email to