Skip to content

Commit 67bd015

Browse files
add tree
1 parent 0d63f08 commit 67bd015

1 file changed

Lines changed: 32 additions & 22 deletions

File tree

os/programs/tree.rrbasic

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,56 @@
11
start$ = ARGS$
22
IF start$ = "" THEN start$ = CSD$
3+
IF start$ = "" THEN start$ = "/"
34

45
dirs = 0
56
files = 0
67

78
PRINT start$
89
PROCwalk(start$, "")
910

10-
PRINT
11+
PRINT ""
1112
PRINT dirs; " directories, "; files; " files."
1213
END
1314

1415
DEF PROCwalk(dir$, prefix$)
1516
LOCAL n = GETNAMECOUNT(dir$)
16-
LOCAL i = 0
17+
IF n = 0 THEN ENDPROC
18+
19+
LOCAL ndirs = 0
1720
FOR i = 0 TO n - 1
1821
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)
3025
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
3527
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$)
3638

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
3850
NEXT
3951
ENDPROC
4052

4153
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$ + "│ ")
4656
ENDPROC

0 commit comments

Comments
 (0)