1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
############################################################################
#
# File: browser.icn
#
# Subject: Program to demonstrate file-navigation "dialog"
#
# Author: Ralph E. Griswold
#
# Date: July 10, 2002
#
############################################################################
#
# This file is in the public domain.
#
############################################################################
#
# Requires: Version 9 graphics
#
############################################################################
#
# Links: navitrix, vsetup
#
############################################################################
link navitrix
link vsetup
global pat_window
global vidgets
$define LineLength 75
$define FileLength 500
procedure main()
local root, root_cur
nav_init()
vidgets := ui()
pat_window := &window
root := vidgets["root"]
repeat {
root_cur := case Active() of {
pat_window : root
nav_window : nav_root
}
ProcessEvent(root_cur, , shortcuts)
case nav_state of {
&null : next
"Okay" : process_file()
}
nav_state := &null
}
end
procedure process_file()
local input, file_list
static list_vidget
initial list_vidget := vidgets["list"]
if nav_file[-1] == "/" then { # directory
chdir(nav_file)
nav_refresh()
}
else { # "plain" file
input := open(nav_file) | {
Notice("Cannot open " || image(nav_file) || ".")
fail
}
file_list := []
every put(file_list, left(entab(!input), LineLength)) \ FileLength
VSetItems(list_vidget, file_list)
close(input)
WAttrib(nav_window, "canvas=hidden")
}
return
end
procedure file_cb(vidget, value)
case value[1] of {
"find @F" : find_file()
"quit @Q" : exit()
}
return
end
procedure list_cb(vidget, value)
if /value then return # deselection; no action
return
end
procedure find_file()
WAttrib(nav_window, "canvas=normal")
return
end
procedure shortcuts(e)
if &meta then case map(e) of {
"f" : find_file()
"q" : exit()
}
return
end
#===<<vib:begin>>=== modify using vib; do not remove this marker line
procedure ui_atts()
return ["size=587,402", "bg=pale gray", "label=Browser"]
end
procedure ui(win, cbk)
return vsetup(win, cbk,
[":Sizer:::0,0,587,402:Browser",],
["file:Menu:pull::0,3,36,21:File",file_cb,
["find @F","quit @Q"]],
["list:List:r::17,44,557,343:",list_cb],
["menubar:Line:::0,26,585,26:",],
)
end
#===<<vib:end>>=== end of section maintained by vib
|