|
1 | 1 | start$ = ARGS$ |
2 | 2 | IF start$ = "" THEN start$ = CSD$ |
| 3 | +IF start$ = "" THEN start$ = "/" |
3 | 4 |
|
4 | 5 | dirs = 0 |
5 | 6 | files = 0 |
6 | 7 |
|
7 | 8 | PRINT start$ |
8 | 9 | PROCwalk(start$, "") |
9 | 10 |
|
10 | | -PRINT |
| 11 | +PRINT "" |
11 | 12 | PRINT dirs; " directories, "; files; " files." |
12 | 13 | END |
13 | 14 |
|
14 | 15 | DEF PROCwalk(dir$, prefix$) |
15 | 16 | LOCAL n = GETNAMECOUNT(dir$) |
16 | | - LOCAL i = 0 |
| 17 | + IF n = 0 THEN ENDPROC |
| 18 | + |
| 19 | + LOCAL ndirs = 0 |
17 | 20 | FOR i = 0 TO n - 1 |
18 | 21 | LOCAL name$ = GETNAME$(dir$, i) |
19 | | - |
20 | | - IF dir$ = "" THEN LOCAL base$ = "" |
21 | | - IF dir$ <> "" THEN LOCAL base$ = dir$ + "/" |
22 | | - LOCAL full$ = base$ + name$ |
23 | | - |
24 | | - LOCAL is_last = FALSE |
25 | | - IF i = n - 1 THEN is_last = TRUE |
26 | | - |
27 | | - IF is_last = TRUE THEN LOCAL branch$ = prefix$ + "\-- " |
28 | | - IF is_last = FALSE THEN LOCAL branch$ = prefix$ + "+-- " |
29 | | - |
| 22 | + LOCAL full$ = dir$ + "/" + name$ |
| 23 | + IF LEFT$(full$, 2) = "//" THEN LOCAL full$ = RIGHT$(full$, LEN(full$) - 1) |
| 24 | + IF RIGHT$(full$, 1) = "/" THEN LOCAL full$ = LEFT$(full$, LEN(full$) - 1) |
30 | 25 | LOCAL ftype$ = FILETYPE$(full$) |
31 | | - |
32 | | - PRINT branch$; name$ |
33 | | - |
34 | | - IF ftype$ = "directory" THEN dirs = dirs + 1 |
| 26 | + IF ftype$ = "directory" THEN LOCAL ndirs = ndirs + 1 |
35 | 27 | IF ftype$ = "file" THEN files = files + 1 |
| 28 | + NEXT |
| 29 | + |
| 30 | + LOCAL dcount = 0 |
| 31 | + FOR i = 0 TO n - 1 |
| 32 | + LOCAL z = i ' FOR loop vars cant be local yet |
| 33 | + LOCAL name$ = GETNAME$(dir$, i) |
| 34 | + LOCAL full$ = dir$ + "/" + name$ |
| 35 | + IF LEFT$(full$, 2) = "//" THEN LOCAL full$ = RIGHT$(full$, LEN(full$) - 1) |
| 36 | + IF RIGHT$(full$, 1) = "/" THEN LOCAL full$ = LEFT$(full$, LEN(full$) - 1) |
| 37 | + LOCAL ftype$ = FILETYPE$(full$) |
36 | 38 |
|
37 | | - IF ftype$ = "directory" THEN PROCdescend(full$, prefix$, is_last) |
| 39 | + IF ftype$ = "directory" THEN |
| 40 | + LOCAL dcount = dcount + 1 |
| 41 | + dirs = dirs + 1 |
| 42 | + IF dcount = ndirs THEN LOCAL is_last = TRUE |
| 43 | + IF dcount <> ndirs THEN LOCAL is_last = FALSE |
| 44 | + IF is_last = TRUE THEN LOCAL branch$ = prefix$ + "└── " |
| 45 | + IF is_last = FALSE THEN LOCAL branch$ = prefix$ + "├── " |
| 46 | + PRINT branch$; name$ |
| 47 | + PROCdescend(full$, prefix$, is_last) |
| 48 | + ENDIF |
| 49 | + i = z |
38 | 50 | NEXT |
39 | 51 | ENDPROC |
40 | 52 |
|
41 | 53 | DEF PROCdescend(full$, prefix$, is_last) |
42 | | - LOCAL next_prefix$ = prefix$ |
43 | | - IF is_last = TRUE THEN next_prefix$ = next_prefix$ + " " |
44 | | - IF is_last = FALSE THEN next_prefix$ = next_prefix$ + "| " |
45 | | - PROCwalk(full$, next_prefix$) |
| 54 | + IF is_last = TRUE THEN PROCwalk(full$, prefix$ + " ") |
| 55 | + IF is_last = FALSE THEN PROCwalk(full$, prefix$ + "│ ") |
46 | 56 | ENDPROC |
0 commit comments