1 |
cebix |
1.1 |
#!/usr/bin/wish |
2 |
|
|
|
3 |
|
|
# Frodo Tk GUI by Lutz Vieweg <lkv@mania.robin.de> |
4 |
|
|
# requires Tk >= 4.1 |
5 |
|
|
|
6 |
|
|
#package require Tk 4.1 |
7 |
|
|
|
8 |
|
|
set prefname "$env(HOME)/.frodorc" |
9 |
|
|
|
10 |
|
|
proc defaults {} { |
11 |
|
|
global pref |
12 |
|
|
set pref(NormalCycles) "63" |
13 |
|
|
set pref(BadLineCycles) "23" |
14 |
|
|
set pref(CIACycles) "63" |
15 |
|
|
set pref(FloppyCycles) "64" |
16 |
|
|
set pref(SkipFrames) "4" |
17 |
|
|
set pref(DriveType8) "DIR" |
18 |
|
|
set pref(DrivePath8) "./64prgs" |
19 |
|
|
set pref(DriveType9) "D64" |
20 |
|
|
set pref(DrivePath9) "./disk1.d64" |
21 |
|
|
set pref(DriveType10) "DIR" |
22 |
|
|
set pref(DrivePath10) "" |
23 |
|
|
set pref(DriveType11) "DIR" |
24 |
|
|
set pref(DrivePath11) "" |
25 |
|
|
set pref(SIDType) "NONE" |
26 |
|
|
set pref(SpritesOn) "TRUE" |
27 |
|
|
set pref(SpriteCollisions) "TRUE" |
28 |
|
|
set pref(Joystick1On) "FALSE" |
29 |
|
|
set pref(Joystick2On) "TRUE" |
30 |
|
|
set pref(JoystickSwap) "FALSE" |
31 |
|
|
set pref(LimitSpeed) "FALSE" |
32 |
|
|
set pref(FastReset) "FALSE" |
33 |
|
|
set pref(CIAIRQHack) "FALSE" |
34 |
|
|
set pref(MapSlash) "TRUE" |
35 |
|
|
set pref(Emul1541Proc) "FALSE" |
36 |
|
|
set pref(ShowOptions) "FALSE" |
37 |
|
|
set pref(SIDFilters) "TRUE" |
38 |
|
|
} |
39 |
|
|
|
40 |
|
|
proc s2bool { s } { |
41 |
|
|
if {$s == "TRUE"} {return 1} |
42 |
|
|
return 0 |
43 |
|
|
} |
44 |
|
|
|
45 |
|
|
defaults |
46 |
|
|
|
47 |
|
|
if {![catch { set in [open $prefname] }]} { |
48 |
|
|
while {![eof $in]} { |
49 |
|
|
set line [gets $in] |
50 |
|
|
if [regexp {^([^ ]*)[ ]*=[ ]*([^ ]*)$} $line range name val] { |
51 |
|
|
switch -exact $name { |
52 |
|
|
"NormalCycles" { |
53 |
|
|
set pref(NormalCycles) $val |
54 |
|
|
} |
55 |
|
|
"BadLineCycles" { |
56 |
|
|
set pref(BadLineCycles) $val |
57 |
|
|
} |
58 |
|
|
"CIACycles" { |
59 |
|
|
set pref(CIACycles) $val |
60 |
|
|
} |
61 |
|
|
"FloppyCycles" { |
62 |
|
|
set pref(FloppyCycles) $val |
63 |
|
|
} |
64 |
|
|
"SkipFrames" { |
65 |
|
|
set pref(SkipFrames) $val |
66 |
|
|
} |
67 |
|
|
"DriveType8" { |
68 |
|
|
set pref(DriveType8) $val |
69 |
|
|
} |
70 |
|
|
"DrivePath8" { |
71 |
|
|
set pref(DrivePath8) $val |
72 |
|
|
} |
73 |
|
|
"DriveType9" { |
74 |
|
|
set pref(DriveType9) $val |
75 |
|
|
} |
76 |
|
|
"DrivePath9" { |
77 |
|
|
set pref(DrivePath9) $val |
78 |
|
|
} |
79 |
|
|
"DriveType10" { |
80 |
|
|
set pref(DriveType10) $val |
81 |
|
|
} |
82 |
|
|
"DrivePath10" { |
83 |
|
|
set pref(DrivePath10) $val |
84 |
|
|
} |
85 |
|
|
"DriveType11" { |
86 |
|
|
set pref(DriveType11) $val |
87 |
|
|
} |
88 |
|
|
"DrivePath11" { |
89 |
|
|
set pref(DrivePath11) $val |
90 |
|
|
} |
91 |
|
|
"SIDType" { |
92 |
|
|
set pref(SIDType) $val |
93 |
|
|
} |
94 |
|
|
"SpritesOn" { |
95 |
|
|
set pref(SpritesOn) [s2bool $val] |
96 |
|
|
} |
97 |
|
|
"SpriteCollisions" { |
98 |
|
|
set pref(SpriteCollisions) [s2bool $val] |
99 |
|
|
} |
100 |
|
|
"Joystick1On" { |
101 |
|
|
set pref(Joystick1On) [s2bool $val] |
102 |
|
|
} |
103 |
|
|
"Joystick2On" { |
104 |
|
|
set pref(Joystick2On) [s2bool $val] |
105 |
|
|
} |
106 |
|
|
"JoystickSwap" { |
107 |
|
|
set pref(JoystickSwap) [s2bool $val] |
108 |
|
|
} |
109 |
|
|
"LimitSpeed" { |
110 |
|
|
set pref(LimitSpeed) [s2bool $val] |
111 |
|
|
} |
112 |
|
|
"FastReset" { |
113 |
|
|
set pref(FastReset) [s2bool $val] |
114 |
|
|
} |
115 |
|
|
"CIAIRQHack" { |
116 |
|
|
set pref(CIAIRQHack) [s2bool $val] |
117 |
|
|
} |
118 |
|
|
"MapSlash" { |
119 |
|
|
set pref(MapSlash) [s2bool $val] |
120 |
|
|
} |
121 |
|
|
"Emul1541Proc" { |
122 |
|
|
set pref(Emul1541Proc) [s2bool $val] |
123 |
|
|
} |
124 |
|
|
"ShowOptions" { |
125 |
|
|
set pref(ShowOptions) [s2bool $val] |
126 |
|
|
} |
127 |
|
|
"SIDFilters" { |
128 |
|
|
set pref(SIDFilters) [s2bool $val] |
129 |
|
|
} |
130 |
|
|
} |
131 |
|
|
} |
132 |
|
|
} |
133 |
|
|
} |
134 |
|
|
|
135 |
|
|
proc bool2s { b } { |
136 |
|
|
if {$b} { return "TRUE" } |
137 |
|
|
return "FALSE" |
138 |
|
|
} |
139 |
|
|
|
140 |
|
|
proc WritePrefs { } { |
141 |
|
|
global pref prefname |
142 |
|
|
|
143 |
|
|
if [catch { set out [open "$prefname" "w"] }] { |
144 |
|
|
puts stderr "unable to write preferences file '$prefname'" |
145 |
|
|
} else { |
146 |
|
|
puts $out "NormalCycles = $pref(NormalCycles)" |
147 |
|
|
puts $out "BadLineCycles = $pref(BadLineCycles)" |
148 |
|
|
puts $out "CIACycles = $pref(CIACycles)" |
149 |
|
|
puts $out "FloppyCycles = $pref(FloppyCycles)" |
150 |
|
|
puts $out "SkipFrames = $pref(SkipFrames)" |
151 |
|
|
puts $out "DriveType8 = $pref(DriveType8)" |
152 |
|
|
puts $out "DrivePath8 = $pref(DrivePath8)" |
153 |
|
|
puts $out "DriveType9 = $pref(DriveType9)" |
154 |
|
|
puts $out "DrivePath9 = $pref(DrivePath9)" |
155 |
|
|
puts $out "DriveType10 = $pref(DriveType10)" |
156 |
|
|
puts $out "DrivePath10 = $pref(DrivePath10)" |
157 |
|
|
puts $out "DriveType11 = $pref(DriveType11)" |
158 |
|
|
puts $out "DrivePath11 = $pref(DrivePath11)" |
159 |
|
|
puts $out "SIDType = $pref(SIDType)" |
160 |
|
|
puts $out "SpritesOn = [bool2s $pref(SpritesOn)]" |
161 |
|
|
puts $out "SpriteCollisions = [bool2s $pref(SpriteCollisions)]" |
162 |
|
|
puts $out "Joystick1On = [bool2s $pref(Joystick1On)]" |
163 |
|
|
puts $out "Joystick2On = [bool2s $pref(Joystick2On)]" |
164 |
|
|
puts $out "JoystickSwap = [bool2s $pref(JoystickSwap)]" |
165 |
|
|
puts $out "LimitSpeed = [bool2s $pref(LimitSpeed)]" |
166 |
|
|
puts $out "FastReset = [bool2s $pref(FastReset)]" |
167 |
|
|
puts $out "CIAIRQHack = [bool2s $pref(CIAIRQHack)]" |
168 |
|
|
puts $out "MapSlash = [bool2s $pref(MapSlash)]" |
169 |
|
|
puts $out "Emul1541Proc = [bool2s $pref(Emul1541Proc)]" |
170 |
|
|
puts $out "ShowOptions = [bool2s $pref(ShowOptions)]" |
171 |
|
|
puts $out "SIDFilters = [bool2s $pref(SIDFilters)]" |
172 |
|
|
|
173 |
|
|
close $out |
174 |
|
|
|
175 |
|
|
puts -nonewline "p" |
176 |
|
|
flush stdout |
177 |
|
|
} |
178 |
|
|
} |
179 |
|
|
|
180 |
|
|
proc Quit {} { |
181 |
|
|
puts -nonewline "q" |
182 |
|
|
flush stdout |
183 |
|
|
exit 0 |
184 |
|
|
} |
185 |
|
|
|
186 |
|
|
# ============================================================= |
187 |
|
|
|
188 |
|
|
frame .cmds |
189 |
|
|
pack .cmds -expand false -fill both |
190 |
|
|
|
191 |
|
|
button .cmds.quit -text "Quit" -command "Quit" |
192 |
|
|
pack .cmds.quit -side left -expand true -fill both |
193 |
|
|
|
194 |
|
|
button .cmds.reset -text "Reset" -command {puts -nonewline "r" ; flush stdout} |
195 |
|
|
pack .cmds.reset -side left -expand true -fill both |
196 |
|
|
|
197 |
|
|
# ============================================================= |
198 |
|
|
|
199 |
|
|
proc Change { {dummy1 ""} {dummy2 ""}} { |
200 |
|
|
WritePrefs |
201 |
|
|
} |
202 |
|
|
|
203 |
|
|
#====================== begin of fs-box ======================== |
204 |
|
|
|
205 |
|
|
proc check_file_type {filename var} { |
206 |
|
|
global pref |
207 |
|
|
switch [file extension $filename] { |
208 |
|
|
.d64 - .x64 { set $var D64; Change } |
209 |
|
|
.lnx - .t64 { set $var T64; Change } |
210 |
|
|
} |
211 |
|
|
} |
212 |
|
|
|
213 |
|
|
proc fs_FileSelect {w {title {FileSelector}} {filter {*}} {name {}} typevar} { |
214 |
|
|
global fs_priv |
215 |
|
|
|
216 |
|
|
if {[info commands tk_getOpenFile] != ""} { |
217 |
|
|
switch $filter { |
218 |
|
|
"*.{t64,lnx}" { |
219 |
|
|
set types { |
220 |
|
|
{{t64/lnx archive files} {.t64 .lnx}} |
221 |
|
|
{{disk files} {.d64 .x64}} |
222 |
|
|
{{all files} *} |
223 |
|
|
} |
224 |
|
|
} |
225 |
|
|
"*.{d64,x64}" { |
226 |
|
|
set types { |
227 |
|
|
{{disk files} {.d64 .x64}} |
228 |
|
|
{{t64/lnx archive files} {.t64 .lnx}} |
229 |
|
|
{{all files} *} |
230 |
|
|
} |
231 |
|
|
} |
232 |
|
|
default { |
233 |
|
|
set types { |
234 |
|
|
{{all files} *} |
235 |
|
|
{{disk files} {.d64 .x64}} |
236 |
|
|
{{t64/lnx archive files} {.t64 .lnx}} |
237 |
|
|
} |
238 |
|
|
} |
239 |
|
|
} |
240 |
|
|
if {[file isdir $name]} { |
241 |
|
|
set name $name |
242 |
|
|
} else { |
243 |
|
|
set name "[file dirname $name]" |
244 |
|
|
} |
245 |
|
|
set fs_priv(result) [tk_getOpenFile -filetypes $types -initialdir $name] |
246 |
|
|
check_file_type $fs_priv(result) $typevar |
247 |
|
|
return $fs_priv(result) |
248 |
|
|
} |
249 |
|
|
|
250 |
|
|
# remainder of the code is for pre-tk8.0 |
251 |
|
|
|
252 |
|
|
if {$name != ""} { |
253 |
|
|
if {[file isdir $name]} { |
254 |
|
|
set filter "$name/$filter" |
255 |
|
|
} else { |
256 |
|
|
set filter "[file dirname $name]/$filter" |
257 |
|
|
} |
258 |
|
|
} |
259 |
|
|
|
260 |
|
|
set fs_priv(window) $w |
261 |
|
|
set fs_priv(filter) $filter |
262 |
|
|
set fs_priv(name) "" |
263 |
|
|
set fs_priv(result) "" |
264 |
|
|
|
265 |
|
|
# if this window already exists, destroy it |
266 |
|
|
catch {destroy $w} |
267 |
|
|
|
268 |
|
|
# create new toplevel |
269 |
|
|
toplevel $w |
270 |
|
|
wm title $w $title |
271 |
|
|
|
272 |
|
|
# create frames |
273 |
|
|
|
274 |
|
|
# create filter-entry |
275 |
|
|
frame $w.filter |
276 |
|
|
pack $w.filter -side top -fill x |
277 |
|
|
label $w.filter.lbl -text "Filter" |
278 |
|
|
pack $w.filter.lbl -side top -anchor w |
279 |
|
|
entry $w.filter.et -textvar fs_priv(filter) |
280 |
|
|
pack $w.filter.et -side top -fill x -expand true |
281 |
|
|
bind $w.filter.et <Return> { fs_newpath } |
282 |
|
|
button $w.filter.up -text "Up" -command { |
283 |
|
|
set f [file dirname $fs_priv(filter)] |
284 |
|
|
set t [file tail $fs_priv(filter)] |
285 |
|
|
if {$f == "."} {set f [pwd]} |
286 |
|
|
set f [file dirname $f] |
287 |
|
|
if {$f == "/"} {set f ""} |
288 |
|
|
set fs_priv(filter) "$f/$t" |
289 |
|
|
fs_newpath |
290 |
|
|
} |
291 |
|
|
pack $w.filter.up -side top -anchor w |
292 |
|
|
|
293 |
|
|
#create list-frames |
294 |
|
|
frame $w.l |
295 |
|
|
pack $w.l -side top -fill both -expand true |
296 |
|
|
frame $w.l.d |
297 |
|
|
pack $w.l.d -side left -fill both -expand true |
298 |
|
|
frame $w.l.f |
299 |
|
|
pack $w.l.f -side left -fill both -expand true |
300 |
|
|
|
301 |
|
|
fs_slist $w.l.d Directories single |
302 |
|
|
|
303 |
|
|
fs_slist $w.l.f Files single |
304 |
|
|
bind $w.l.f.top.lst <ButtonRelease-1> { |
305 |
|
|
focus %W |
306 |
|
|
global fs_priv |
307 |
|
|
set sel [%W curselection] |
308 |
|
|
if {$sel != ""} { |
309 |
|
|
set fs_priv(name) [%W get [%W curselection]] |
310 |
|
|
} |
311 |
|
|
} |
312 |
|
|
|
313 |
|
|
bind $w.l.f.top.lst <Double-Button-1> "$w.bts.ok flash; $w.bts.ok invoke" |
314 |
|
|
bind $w.l.d.top.lst <Double-Button-1> { |
315 |
|
|
global fs_priv |
316 |
|
|
set f [file dirname $fs_priv(filter)] |
317 |
|
|
set t [file tail $fs_priv(filter)] |
318 |
|
|
set d [%W get active] |
319 |
|
|
switch $d { |
320 |
|
|
"." { } |
321 |
|
|
".." { |
322 |
|
|
if {$f == "."} {set f [pwd]} |
323 |
|
|
set fs_priv(filter) "[file dirname $f]/$t" |
324 |
|
|
} |
325 |
|
|
default { |
326 |
|
|
if {$f == "/"} {set f ""} |
327 |
|
|
set fs_priv(filter) "$f/$d/$t" |
328 |
|
|
} |
329 |
|
|
} |
330 |
|
|
fs_newpath |
331 |
|
|
} |
332 |
|
|
|
333 |
|
|
#create name-entry |
334 |
|
|
|
335 |
|
|
frame $w.name |
336 |
|
|
pack $w.name -side top -fill x |
337 |
|
|
label $w.name.lbl -text "Filename" |
338 |
|
|
pack $w.name.lbl -side top -anchor w |
339 |
|
|
entry $w.name.et -textvar fs_priv(name) |
340 |
|
|
pack $w.name.et -side top -fill x |
341 |
|
|
bind $w.name.et <FocusOut> { |
342 |
|
|
global fs_priv |
343 |
|
|
set fs_priv(filter) \ |
344 |
|
|
"[file dirname $fs_priv(name)]/*[file extension $fs_priv(filter)]" |
345 |
|
|
fs_newpath |
346 |
|
|
} |
347 |
|
|
bind $w.name.et <Return> { |
348 |
|
|
global fs_priv |
349 |
|
|
set n $fs_priv(name) |
350 |
|
|
|
351 |
|
|
if {[string index $n 0] != "/" && [string index $n 0] != "~"} { |
352 |
|
|
set n "[file dirname $fs_priv(filter)]/$n" |
353 |
|
|
} |
354 |
|
|
|
355 |
|
|
set n "[file dirname $n]/[file tail $n]" |
356 |
|
|
|
357 |
|
|
set fs_priv(result) $n |
358 |
|
|
} |
359 |
|
|
|
360 |
|
|
# create buttons |
361 |
|
|
frame $w.bts |
362 |
|
|
pack $w.bts -side top -fill x |
363 |
|
|
button $w.bts.ok -text "OK" -command { |
364 |
|
|
global fs_priv |
365 |
|
|
set w $fs_priv(window) |
366 |
|
|
set sel [$w.l.f.top.lst curselection] |
367 |
|
|
if {$sel != ""} { |
368 |
|
|
set val [$w.l.f.top.lst get $sel] |
369 |
|
|
set fs_priv(result) "[file dirname $fs_priv(filter)]/$val" |
370 |
|
|
} |
371 |
|
|
} |
372 |
|
|
pack $w.bts.ok -side left -expand true |
373 |
|
|
|
374 |
|
|
button $w.bts.cancel -text "Cancel" -command { |
375 |
|
|
global fs_priv |
376 |
|
|
set fs_priv(result) "" |
377 |
|
|
} |
378 |
|
|
pack $w.bts.cancel -side left -expand true |
379 |
|
|
|
380 |
|
|
fs_newpath |
381 |
|
|
|
382 |
|
|
set oldfocus [focus] |
383 |
|
|
grab $w |
384 |
|
|
focus $w |
385 |
|
|
|
386 |
|
|
tkwait variable fs_priv(result) |
387 |
|
|
|
388 |
|
|
if { "$oldfocus" != "" } { focus $oldfocus } |
389 |
|
|
|
390 |
|
|
destroy $w |
391 |
|
|
|
392 |
|
|
check_file_type $fs_priv(result) $typevar |
393 |
|
|
|
394 |
|
|
return $fs_priv(result) |
395 |
|
|
} |
396 |
|
|
|
397 |
|
|
proc fs_DirSelect {w {title {FileSelector}} {filter {*}} {name {}} } { |
398 |
|
|
global fs_priv |
399 |
|
|
|
400 |
|
|
if {$name != ""} { |
401 |
|
|
if {[file isdir $name]} { |
402 |
|
|
set filter $name |
403 |
|
|
} else { |
404 |
|
|
set filter [file dirname $name] |
405 |
|
|
} |
406 |
|
|
} |
407 |
|
|
|
408 |
|
|
if {[info commands tk_chooseDirectory] != ""} { |
409 |
|
|
return [tk_chooseDirectory -initialdir $filter] |
410 |
|
|
} |
411 |
|
|
|
412 |
|
|
# remainder of the code is for pre-tk8.3 |
413 |
|
|
|
414 |
|
|
set fs_priv(window) $w |
415 |
|
|
set fs_priv(filter) $filter |
416 |
|
|
set fs_priv(name) $name |
417 |
|
|
set fs_priv(result) "" |
418 |
|
|
|
419 |
|
|
# if this window already exists, destroy it |
420 |
|
|
catch {destroy $w} |
421 |
|
|
|
422 |
|
|
# create new toplevel |
423 |
|
|
toplevel $w |
424 |
|
|
wm title $w $title |
425 |
|
|
|
426 |
|
|
# create frames |
427 |
|
|
|
428 |
|
|
# create filter-entry |
429 |
|
|
frame $w.filter |
430 |
|
|
pack $w.filter -side top -fill x |
431 |
|
|
label $w.filter.lbl -text "Directory" |
432 |
|
|
pack $w.filter.lbl -side top -anchor w |
433 |
|
|
entry $w.filter.et -textvar fs_priv(filter) |
434 |
|
|
pack $w.filter.et -side top -fill x -expand true |
435 |
|
|
bind $w.filter.et <Return> { fs_dir_newpath } |
436 |
|
|
button $w.filter.up -text "Up" -command { |
437 |
|
|
set f $fs_priv(filter) |
438 |
|
|
if {$f == "."} {set f [pwd]} |
439 |
|
|
set fs_priv(filter) [file dirname $f] |
440 |
|
|
fs_dir_newpath |
441 |
|
|
} |
442 |
|
|
pack $w.filter.up -side top -anchor w |
443 |
|
|
|
444 |
|
|
#create list-frames |
445 |
|
|
frame $w.l |
446 |
|
|
pack $w.l -side top -fill both -expand true |
447 |
|
|
frame $w.l.d |
448 |
|
|
pack $w.l.d -side left -fill both -expand true |
449 |
|
|
|
450 |
|
|
fs_slist $w.l.d "Sub Directories" single |
451 |
|
|
|
452 |
|
|
bind $w.l.d.top.lst <Double-Button-1> { |
453 |
|
|
global fs_priv |
454 |
|
|
set f [string trimright $fs_priv(filter) /] |
455 |
|
|
set d [%W get active] |
456 |
|
|
switch $d { |
457 |
|
|
"." { } |
458 |
|
|
".." { |
459 |
|
|
if {$f == "."} {set f [pwd]} |
460 |
|
|
set fs_priv(filter) [file dirname $f] |
461 |
|
|
} |
462 |
|
|
default { |
463 |
|
|
if {$f == "/"} {set f ""} |
464 |
|
|
set fs_priv(filter) "$f/$d" |
465 |
|
|
} |
466 |
|
|
} |
467 |
|
|
fs_dir_newpath |
468 |
|
|
} |
469 |
|
|
|
470 |
|
|
# create buttons |
471 |
|
|
frame $w.bts |
472 |
|
|
pack $w.bts -side top -fill x |
473 |
|
|
button $w.bts.ok -text "OK" -command { |
474 |
|
|
global fs_priv |
475 |
|
|
set w $fs_priv(window) |
476 |
|
|
set sel [$w.l.d.top.lst curselection] |
477 |
|
|
if {$sel != ""} { |
478 |
|
|
set val [$w.l.d.top.lst get $sel] |
479 |
|
|
set fs_priv(result) "$fs_priv(filter)/$val" |
480 |
|
|
} else { |
481 |
|
|
set fs_priv(result) $fs_priv(filter) |
482 |
|
|
} |
483 |
|
|
} |
484 |
|
|
pack $w.bts.ok -side left -expand true |
485 |
|
|
|
486 |
|
|
button $w.bts.cancel -text "Cancel" -command { |
487 |
|
|
global fs_priv |
488 |
|
|
set fs_priv(result) "" |
489 |
|
|
} |
490 |
|
|
pack $w.bts.cancel -side left -expand true |
491 |
|
|
|
492 |
|
|
fs_dir_newpath |
493 |
|
|
|
494 |
|
|
set oldfocus [focus] |
495 |
|
|
grab $w |
496 |
|
|
focus $w |
497 |
|
|
|
498 |
|
|
tkwait variable fs_priv(result) |
499 |
|
|
|
500 |
|
|
if { "$oldfocus" != "" } { focus $oldfocus } |
501 |
|
|
|
502 |
|
|
destroy $w |
503 |
|
|
|
504 |
|
|
return $fs_priv(result) |
505 |
|
|
} |
506 |
|
|
|
507 |
|
|
proc fs_slist {w title mode} { |
508 |
|
|
|
509 |
|
|
if {$title != ""} { |
510 |
|
|
label $w.lbl -text $title |
511 |
|
|
pack $w.lbl -side top -anchor w |
512 |
|
|
} |
513 |
|
|
|
514 |
|
|
frame $w.top |
515 |
|
|
pack $w.top -side top -fill both -expand true |
516 |
|
|
frame $w.bot |
517 |
|
|
pack $w.bot -side top -fill x |
518 |
|
|
|
519 |
|
|
listbox $w.top.lst -relief sunken -bd 2 -yscrollcommand "$w.top.vs set" \ |
520 |
|
|
-xscrollcommand "$w.bot.hs set" -selectmode $mode \ |
521 |
|
|
-font -*-courier-medium-r-normal--14-*-*-*-*-*-* |
522 |
|
|
pack $w.top.lst -side left -fill both -expand true |
523 |
|
|
|
524 |
|
|
scrollbar $w.top.vs -relief sunken -bd 2 -command "$w.top.lst yview" \ |
525 |
|
|
-orient vertical |
526 |
|
|
pack $w.top.vs -side left -fill y |
527 |
|
|
|
528 |
|
|
scrollbar $w.bot.hs -relief sunken -bd 2 -command "$w.top.lst xview" \ |
529 |
|
|
-orient horizontal |
530 |
|
|
pack $w.bot.hs -side left -fill x -expand true |
531 |
|
|
|
532 |
|
|
frame $w.bot.pad -width [expr [lindex [$w.top.vs config -width] 4] + \ |
533 |
|
|
[lindex [$w.top.vs config -bd] 4] *2] |
534 |
|
|
|
535 |
|
|
pack $w.bot.pad -side left |
536 |
|
|
|
537 |
|
|
} |
538 |
|
|
|
539 |
|
|
proc fs_newpath {} { |
540 |
|
|
|
541 |
|
|
global fs_priv |
542 |
|
|
|
543 |
|
|
if {$fs_priv(filter) == ""} { |
544 |
|
|
set fs_priv(filter) "./*" |
545 |
|
|
} |
546 |
|
|
|
547 |
|
|
if {[file isdir $fs_priv(filter)]} { |
548 |
|
|
set fs_priv(filter) "$fs_priv(filter)/*" |
549 |
|
|
} |
550 |
|
|
|
551 |
|
|
set w $fs_priv(window) |
552 |
|
|
set filter $fs_priv(filter) |
553 |
|
|
|
554 |
|
|
$w.l.d.top.lst delete 0 end |
555 |
|
|
|
556 |
|
|
$w.l.f.top.lst delete 0 end |
557 |
|
|
|
558 |
|
|
# update dirs |
559 |
|
|
set dwidth 5 |
560 |
|
|
set files [lsort "[glob -nocomplain "[file dirname $filter]/*" ] \ |
561 |
|
|
[glob -nocomplain "[file dirname $filter]/.*"]" ] |
562 |
|
|
foreach j $files { |
563 |
|
|
if [file isdir $j] { |
564 |
|
|
set name [file tail $j] |
565 |
|
|
$w.l.d.top.lst insert end $name |
566 |
|
|
if {[string length $name] > $dwidth} { set dwidth [string length $name] } |
567 |
|
|
} |
568 |
|
|
} |
569 |
|
|
|
570 |
|
|
#update files |
571 |
|
|
set pos 0 |
572 |
|
|
set fwidth 5 |
573 |
|
|
set files [lsort [glob -nocomplain "$filter"]] |
574 |
|
|
foreach j $files { |
575 |
|
|
if [file isfile $j] { |
576 |
|
|
set name [file tail $j] |
577 |
|
|
$w.l.f.top.lst insert end $name |
578 |
|
|
if {[string length $name] > $fwidth} { |
579 |
|
|
set pos [string length [file dirname $j]] |
580 |
|
|
set fwidth [string length $name] |
581 |
|
|
} |
582 |
|
|
} |
583 |
|
|
} |
584 |
|
|
|
585 |
|
|
if {$fwidth < 20} { set fwidth 20 } |
586 |
|
|
$w.l.f.top.lst configure -width [expr $fwidth+1] |
587 |
|
|
|
588 |
|
|
if {$dwidth < 20} { set dwidth 20 } |
589 |
|
|
$w.l.d.top.lst configure -width [expr $dwidth+1] |
590 |
|
|
|
591 |
|
|
|
592 |
|
|
if {$pos == 1} { set pos 0 } |
593 |
|
|
|
594 |
|
|
update idletasks |
595 |
|
|
|
596 |
|
|
$w.l.f.top.lst xview $pos |
597 |
|
|
|
598 |
|
|
} |
599 |
|
|
|
600 |
|
|
proc fs_dir_newpath {} { |
601 |
|
|
|
602 |
|
|
global fs_priv |
603 |
|
|
|
604 |
|
|
if {$fs_priv(filter) == ""} { |
605 |
|
|
set fs_priv(filter) "." |
606 |
|
|
} |
607 |
|
|
|
608 |
|
|
set w $fs_priv(window) |
609 |
|
|
set filter $fs_priv(filter) |
610 |
|
|
|
611 |
|
|
$w.l.d.top.lst delete 0 end |
612 |
|
|
|
613 |
|
|
# update dirs |
614 |
|
|
set dwidth 5 |
615 |
|
|
set files [lsort "[glob -nocomplain "$filter/*" ] \ |
616 |
|
|
[glob -nocomplain "$filter/.*"]" ] |
617 |
|
|
foreach j $files { |
618 |
|
|
if [file isdir $j] { |
619 |
|
|
set name [file tail $j] |
620 |
|
|
$w.l.d.top.lst insert end $name |
621 |
|
|
if {[string length $name] > $dwidth} { set dwidth [string length $name] } |
622 |
|
|
} |
623 |
|
|
} |
624 |
|
|
|
625 |
|
|
|
626 |
|
|
if {$dwidth < 20} { set dwidth 20 } |
627 |
|
|
$w.l.d.top.lst configure -width [expr $dwidth+1] |
628 |
|
|
|
629 |
|
|
update idletasks |
630 |
|
|
|
631 |
|
|
} |
632 |
|
|
|
633 |
|
|
#====================== end of fs-box ======================== |
634 |
|
|
|
635 |
|
|
set num(1) "ABCDEFGHIJKLMNOPQRSTUVWXYZA" |
636 |
|
|
set num(2) "abcdefghijklmnopqrstuvwxyza" |
637 |
|
|
set num(3) "12345678901" |
638 |
|
|
|
639 |
|
|
proc NDname { name } { |
640 |
|
|
global num |
641 |
|
|
if [string match *.?64 $name] { |
642 |
|
|
set len [string length $name] |
643 |
|
|
set z [string index $name [expr $len-5]] |
644 |
|
|
|
645 |
|
|
foreach i "1 2 3" { |
646 |
|
|
set c [string first $z $num($i)] |
647 |
|
|
if {$c >= 0} { break } |
648 |
|
|
} |
649 |
|
|
incr c |
650 |
|
|
set nname "[string range $name 0 [expr $len-6]][string index $num($i) $c][string range $name [expr $len-4] end]" |
651 |
|
|
if [file exists $nname] { return $nname } |
652 |
|
|
set nname "[string range $name 0 [expr $len-6]][string index $num($i) 0][string range $name [expr $len-4] end]" |
653 |
|
|
if [file exists $nname] { return $nname } |
654 |
|
|
} |
655 |
|
|
return $name |
656 |
|
|
} |
657 |
|
|
|
658 |
|
|
# =========================================================== |
659 |
|
|
|
660 |
|
|
frame .drives -borderwidth 0 |
661 |
|
|
pack .drives -side top -expand false -fill x |
662 |
|
|
|
663 |
|
|
label .drives.l -text "Disk Drive Controls" -height 2 |
664 |
|
|
pack .drives.l -side top -expand true -fill both |
665 |
|
|
|
666 |
|
|
checkbutton .drives.ef -text "Emulate 1541 CPU (Drive 8 only)" -variable pref(Emul1541Proc) -command "Change" -bg "dark grey" -anchor w |
667 |
|
|
pack .drives.ef -side top -expand true -fill both |
668 |
|
|
|
669 |
|
|
frame .drives.d8 -borderwidth 0 |
670 |
|
|
pack .drives.d8 -side top -expand true -fill x |
671 |
|
|
|
672 |
|
|
label .drives.d8.l -text "8" -width 2 |
673 |
|
|
pack .drives.d8.l -side left -expand false |
674 |
|
|
radiobutton .drives.d8.d64 -text "D64" -variable pref(DriveType8) -value "D64" \ |
675 |
|
|
-bg "dark grey" -command { |
676 |
|
|
set erg [fs_FileSelect .fs "Choose D64 image file" "*.{d64,x64}" $pref(DrivePath8) pref(DriveType8)] |
677 |
|
|
if {$erg != ""} { set pref(DrivePath8) $erg ; Change } |
678 |
|
|
} |
679 |
|
|
pack .drives.d8.d64 -side left -expand false -fill y |
680 |
|
|
|
681 |
|
|
radiobutton .drives.d8.dir -text "DIR" -variable pref(DriveType8) -value "DIR" \ |
682 |
|
|
-command { |
683 |
|
|
set erg [fs_DirSelect .fs "Choose directory" "*" $pref(DrivePath8)] |
684 |
|
|
if {$erg != ""} { set pref(DrivePath8) $erg ; Change } |
685 |
|
|
} |
686 |
|
|
pack .drives.d8.dir -side left -expand false |
687 |
|
|
|
688 |
|
|
radiobutton .drives.d8.t64 -text "T64" -variable pref(DriveType8) -value "T64" \ |
689 |
|
|
-command { |
690 |
|
|
set erg [fs_FileSelect .fs "Choose T64/LYNX archive file" "*.{t64,lnx}" $pref(DrivePath8) pref(DriveType8)] |
691 |
|
|
if {$erg != ""} { set pref(DrivePath8) $erg ; Change } |
692 |
|
|
} |
693 |
|
|
pack .drives.d8.t64 -side left -expand false |
694 |
|
|
|
695 |
|
|
entry .drives.d8.name -textvar pref(DrivePath8) |
696 |
|
|
bind .drives.d8.name <Return> "Change" |
697 |
|
|
bind .drives.d8.name <Double-1> { |
698 |
|
|
set erg [fs_FileSelect .fs "Choose A File" "*" $pref(DrivePath8) pref(DriveType8)] |
699 |
|
|
if {$erg != ""} { set pref(DrivePath8) $erg ; Change } |
700 |
|
|
} |
701 |
|
|
pack .drives.d8.name -side left -expand true -fill x |
702 |
|
|
|
703 |
|
|
button .drives.d8.n -text "N" -command { set pref(DrivePath8) [NDname $pref(DrivePath8)]; Change } |
704 |
|
|
pack .drives.d8.n -side left -expand false |
705 |
|
|
|
706 |
|
|
frame .drives.d9 |
707 |
|
|
pack .drives.d9 -side top -expand true -fill x |
708 |
|
|
|
709 |
|
|
label .drives.d9.l -text "9" -width 2 |
710 |
|
|
pack .drives.d9.l -side left -expand false |
711 |
|
|
radiobutton .drives.d9.d64 -text "D64" -variable pref(DriveType9) -value "D64" \ |
712 |
|
|
-command { |
713 |
|
|
set erg [fs_FileSelect .fs "Choose D64 image file" "*.{d64,x64}" $pref(DrivePath9) pref(DriveType9)] |
714 |
|
|
if {$erg != ""} { set pref(DrivePath9) $erg ; Change } |
715 |
|
|
} |
716 |
|
|
pack .drives.d9.d64 -side left -expand false |
717 |
|
|
|
718 |
|
|
radiobutton .drives.d9.dir -text "DIR" -variable pref(DriveType9) -value "DIR" \ |
719 |
|
|
-command { |
720 |
|
|
set erg [fs_DirSelect .fs "Choose directory" "*" $pref(DrivePath9)] |
721 |
|
|
if {$erg != ""} { set pref(DrivePath9) $erg ; Change } |
722 |
|
|
} |
723 |
|
|
pack .drives.d9.dir -side left -expand false |
724 |
|
|
|
725 |
|
|
radiobutton .drives.d9.t64 -text "T64" -variable pref(DriveType9) -value "T64" \ |
726 |
|
|
-command { |
727 |
|
|
set erg [fs_FileSelect .fs "Choose T64/LYNX archive file" "*.{t64,lnx}" $pref(DrivePath9) pref(DriveType9)] |
728 |
|
|
if {$erg != ""} { set pref(DrivePath9) $erg ; Change } |
729 |
|
|
} |
730 |
|
|
pack .drives.d9.t64 -side left -expand false |
731 |
|
|
|
732 |
|
|
entry .drives.d9.name -textvar pref(DrivePath9) |
733 |
|
|
bind .drives.d9.name <Return> "Change" |
734 |
|
|
bind .drives.d9.name <Double-1> { |
735 |
|
|
set erg [fs_FileSelect .fs "Choose A File" "*" $pref(DrivePath9) pref(DriveType9)] |
736 |
|
|
if {$erg != ""} { set pref(DrivePath9) $erg ; Change } |
737 |
|
|
} |
738 |
|
|
pack .drives.d9.name -side left -expand true -fill x |
739 |
|
|
|
740 |
|
|
button .drives.d9.n -text "N" -command { set pref(DrivePath9) [NDname $pref(DrivePath9)]; Change } |
741 |
|
|
pack .drives.d9.n -side left -expand false |
742 |
|
|
|
743 |
|
|
|
744 |
|
|
frame .drives.d10 |
745 |
|
|
pack .drives.d10 -side top -expand true -fill x |
746 |
|
|
|
747 |
|
|
label .drives.d10.l -text "10" -width 2 |
748 |
|
|
pack .drives.d10.l -side left -expand false |
749 |
|
|
radiobutton .drives.d10.d64 -text "D64" -variable pref(DriveType10) -value "D64" \ |
750 |
|
|
-command { |
751 |
|
|
set erg [fs_FileSelect .fs "Choose D64 image file" "*.{d64,x64}" $pref(DrivePath10) pref(DriveType10)] |
752 |
|
|
if {$erg != ""} { set pref(DrivePath10) $erg ; Change } |
753 |
|
|
} |
754 |
|
|
pack .drives.d10.d64 -side left -expand false |
755 |
|
|
|
756 |
|
|
radiobutton .drives.d10.dir -text "DIR" -variable pref(DriveType10) -value "DIR" \ |
757 |
|
|
-command { |
758 |
|
|
set erg [fs_DirSelect .fs "Choose directory" "*" $pref(DrivePath10)] |
759 |
|
|
if {$erg != ""} { set pref(DrivePath10) $erg ; Change } |
760 |
|
|
} |
761 |
|
|
pack .drives.d10.dir -side left -expand false |
762 |
|
|
|
763 |
|
|
radiobutton .drives.d10.t64 -text "T64" -variable pref(DriveType10) -value "T64" \ |
764 |
|
|
-command { |
765 |
|
|
set erg [fs_FileSelect .fs "Choose T64/LYNX archive file" "*.{t64,lnx}" $pref(DrivePath10) pref(DriveType10)] |
766 |
|
|
if {$erg != ""} { set pref(DrivePath10) $erg ; Change } |
767 |
|
|
} |
768 |
|
|
pack .drives.d10.t64 -side left -expand false |
769 |
|
|
|
770 |
|
|
entry .drives.d10.name -textvar pref(DrivePath10) |
771 |
|
|
bind .drives.d10.name <Return> "Change" |
772 |
|
|
bind .drives.d10.name <Double-1> { |
773 |
|
|
set erg [fs_FileSelect .fs "Choose A File" "*" $pref(DrivePath10) pref(DriveType10)] |
774 |
|
|
if {$erg != ""} { set pref(DrivePath10) $erg ; Change } |
775 |
|
|
} |
776 |
|
|
pack .drives.d10.name -side left -expand true -fill x |
777 |
|
|
|
778 |
|
|
button .drives.d10.n -text "N" -command { set pref(DrivePath10) [NDname $pref(DrivePath10)]; Change } |
779 |
|
|
pack .drives.d10.n -side left -expand false |
780 |
|
|
|
781 |
|
|
|
782 |
|
|
frame .drives.d11 |
783 |
|
|
pack .drives.d11 -side top -expand true -fill x |
784 |
|
|
|
785 |
|
|
label .drives.d11.l -text "11" -width 2 |
786 |
|
|
pack .drives.d11.l -side left -expand false |
787 |
|
|
radiobutton .drives.d11.d64 -text "D64" -variable pref(DriveType11) -value "D64" \ |
788 |
|
|
-command { |
789 |
|
|
set erg [fs_FileSelect .fs "Choose D64 image file" "*.{d64,x64}" $pref(DrivePath11) pref(DriveType11)] |
790 |
|
|
if {$erg != ""} { set pref(DrivePath11) $erg ; Change } |
791 |
|
|
} |
792 |
|
|
pack .drives.d11.d64 -side left -expand false |
793 |
|
|
|
794 |
|
|
radiobutton .drives.d11.dir -text "DIR" -variable pref(DriveType11) -value "DIR" \ |
795 |
|
|
-command { |
796 |
|
|
set erg [fs_DirSelect .fs "Choose directory" "*" $pref(DrivePath11)] |
797 |
|
|
if {$erg != ""} { set pref(DrivePath11) $erg ; Change } |
798 |
|
|
} |
799 |
|
|
pack .drives.d11.dir -side left -expand false |
800 |
|
|
|
801 |
|
|
radiobutton .drives.d11.t64 -text "T64" -variable pref(DriveType11) -value "T64" \ |
802 |
|
|
-command { |
803 |
|
|
set erg [fs_FileSelect .fs "Choose T64/LYNX archive file" "*.{t64,lnx}" $pref(DrivePath11) pref(DriveType11)] |
804 |
|
|
if {$erg != ""} { set pref(DrivePath11) $erg ; Change } |
805 |
|
|
} |
806 |
|
|
pack .drives.d11.t64 -side left -expand false |
807 |
|
|
|
808 |
|
|
entry .drives.d11.name -textvar pref(DrivePath11) |
809 |
|
|
bind .drives.d11.name <Return> "Change" |
810 |
|
|
bind .drives.d11.name <Double-1> { |
811 |
|
|
set erg [fs_FileSelect .fs "Choose A File" "*" $pref(DrivePath11) pref(DriveType11)] |
812 |
|
|
if {$erg != ""} { set pref(DrivePath11) $erg ; Change } |
813 |
|
|
} |
814 |
|
|
pack .drives.d11.name -side left -expand true -fill x |
815 |
|
|
|
816 |
|
|
button .drives.d11.n -text "N" -command { set pref(DrivePath11) [NDname $pref(DrivePath11)]; Change } |
817 |
|
|
pack .drives.d11.n -side left -expand false |
818 |
|
|
|
819 |
|
|
|
820 |
|
|
# ============================================================= |
821 |
|
|
|
822 |
|
|
global show_options_string |
823 |
|
|
|
824 |
|
|
checkbutton .more_options -borderwidth 3 -relief raised -textvariable show_options_string -variable pref(ShowOptions) -command "Change" |
825 |
|
|
pack .more_options -side top -expand false -fill x |
826 |
|
|
|
827 |
|
|
frame .nums -borderwidth 3 -relief raised |
828 |
|
|
|
829 |
|
|
scale .nums.nc -from 1 -to 200 -orient horizontal -variable pref(NormalCycles) \ |
830 |
|
|
-label "Normal Cycles" |
831 |
|
|
pack .nums.nc -side top -expand false -fill x |
832 |
|
|
|
833 |
|
|
scale .nums.bc -from 1 -to 200 -orient horizontal -variable pref(BadLineCycles) \ |
834 |
|
|
-label "Bad Line Cycles" |
835 |
|
|
pack .nums.bc -side top -expand false -fill x |
836 |
|
|
|
837 |
|
|
scale .nums.cc -from 1 -to 200 -orient horizontal -variable pref(CIACycles) \ |
838 |
|
|
-label "CIA Cycles" |
839 |
|
|
pack .nums.cc -side top -expand false -fill x |
840 |
|
|
|
841 |
|
|
scale .nums.fc -from 1 -to 200 -orient horizontal -variable pref(FloppyCycles) \ |
842 |
|
|
-label "Floppy Cycles" |
843 |
|
|
pack .nums.fc -side top -expand false -fill x |
844 |
|
|
|
845 |
|
|
scale .nums.sf -from 1 -to 10 -orient horizontal -variable pref(SkipFrames) \ |
846 |
|
|
-label "Skip Frames" |
847 |
|
|
pack .nums.sf -side top -expand false -fill x |
848 |
|
|
|
849 |
|
|
# ============================================================= |
850 |
|
|
|
851 |
|
|
frame .bools1 -borderwidth 3 -relief raised |
852 |
|
|
|
853 |
|
|
frame .bools1.sprites |
854 |
|
|
pack .bools1.sprites -side left -expand true -fill both |
855 |
|
|
|
856 |
|
|
checkbutton .bools1.sprites.o -text "Sprites" -variable pref(SpritesOn) -command "Change" |
857 |
|
|
pack .bools1.sprites.o -anchor nw -expand false -fill y |
858 |
|
|
|
859 |
|
|
checkbutton .bools1.sprites.c -text "Sprite Collisions" \ |
860 |
|
|
-variable pref(SpriteCollisions) -command "Change" |
861 |
|
|
pack .bools1.sprites.c -anchor nw -expand false -fill y |
862 |
|
|
|
863 |
|
|
|
864 |
|
|
frame .bools1.joy |
865 |
|
|
pack .bools1.joy -side left -expand true -fill both |
866 |
|
|
|
867 |
|
|
checkbutton .bools1.joy.j1 -text "Joy 1" -variable pref(Joystick1On) -command "Change" |
868 |
|
|
pack .bools1.joy.j1 -anchor nw -expand false -fill y |
869 |
|
|
|
870 |
|
|
checkbutton .bools1.joy.j2 -text "Joy 2" -variable pref(Joystick2On) -command "Change" |
871 |
|
|
pack .bools1.joy.j2 -anchor nw -expand false -fill y |
872 |
|
|
|
873 |
|
|
checkbutton .bools1.joy.swap -text "Swap 1<->2" -variable pref(JoystickSwap) -command "Change" |
874 |
|
|
pack .bools1.joy.swap -anchor nw -expand false -fill y |
875 |
|
|
|
876 |
|
|
|
877 |
|
|
frame .bools2 -borderwidth 3 -relief raised |
878 |
|
|
|
879 |
|
|
frame .bools2.m1 |
880 |
|
|
pack .bools2.m1 -side left -expand true -fill both |
881 |
|
|
|
882 |
|
|
checkbutton .bools2.m1.ls -text "Limit Speed" -variable pref(LimitSpeed) -command "Change" |
883 |
|
|
pack .bools2.m1.ls -anchor nw -expand false -fill y |
884 |
|
|
|
885 |
|
|
checkbutton .bools2.m1.fr -text "Fast Reset" -variable pref(FastReset) -command "Change" |
886 |
|
|
pack .bools2.m1.fr -anchor nw -expand false -fill y |
887 |
|
|
|
888 |
|
|
|
889 |
|
|
frame .bools2.m2 |
890 |
|
|
pack .bools2.m2 -side left -expand true -fill both |
891 |
|
|
|
892 |
|
|
checkbutton .bools2.m2.ch -text "CIA IRQ Hack" -variable pref(CIAIRQHack) -command "Change" |
893 |
|
|
pack .bools2.m2.ch -anchor nw -expand false -fill y |
894 |
|
|
|
895 |
|
|
checkbutton .bools2.m2.ms -text "Map '/'" -variable pref(MapSlash) -command "Change" |
896 |
|
|
pack .bools2.m2.ms -anchor nw -expand false -fill y |
897 |
|
|
|
898 |
|
|
|
899 |
|
|
frame .bools4 -relief raised -borderwidth 3 |
900 |
|
|
|
901 |
|
|
frame .bools4.st |
902 |
|
|
pack .bools4.st -side left -expand true -fill both |
903 |
|
|
|
904 |
|
|
label .bools4.st.l -text "SID Emulation" |
905 |
|
|
pack .bools4.st.l -anchor nw |
906 |
|
|
radiobutton .bools4.st.none -text "None" -variable pref(SIDType) -value "NONE" \ |
907 |
|
|
-command {Change} |
908 |
|
|
pack .bools4.st.none -anchor nw |
909 |
|
|
|
910 |
|
|
radiobutton .bools4.st.digi -text "Digital" -variable pref(SIDType) -value "DIGITAL" \ |
911 |
|
|
-command {Change} |
912 |
|
|
pack .bools4.st.digi -anchor nw |
913 |
|
|
|
914 |
|
|
frame .bools4.sf |
915 |
|
|
pack .bools4.sf -side left -expand true -fill both |
916 |
|
|
|
917 |
|
|
checkbutton .bools4.sf.sf -text "SID Filters" -variable pref(SIDFilters) -command "Change" |
918 |
|
|
pack .bools4.sf.sf -side top -expand false -fill y |
919 |
|
|
|
920 |
|
|
|
921 |
|
|
# ============================================================= |
922 |
|
|
|
923 |
|
|
frame .pcmd |
924 |
|
|
pack .pcmd -side top -expand false -fill both |
925 |
|
|
|
926 |
|
|
button .pcmd.apply -text "Apply" -command "Change" |
927 |
|
|
pack .pcmd.apply -side left -expand true -fill both |
928 |
|
|
|
929 |
|
|
button .pcmd.default -text "Defaults" -command "defaults ; Change" |
930 |
|
|
pack .pcmd.default -side left -expand false -fill both |
931 |
|
|
|
932 |
|
|
# ============================================================= |
933 |
|
|
|
934 |
|
|
set ledcolors(0) "#d9d9d9" |
935 |
|
|
set ledcolors(1) "red" |
936 |
|
|
set ledcolors(2) "brown" |
937 |
|
|
|
938 |
|
|
proc ListenToFrodo {} { |
939 |
|
|
set line [gets stdin] |
940 |
|
|
set cmd [lindex $line 0] |
941 |
|
|
switch -exact $cmd { |
942 |
|
|
"speed" { |
943 |
|
|
.speed.v configure -text "[lindex $line 1]%" |
944 |
|
|
} |
945 |
|
|
"ping" { |
946 |
|
|
puts -nonewline "o" |
947 |
|
|
flush stdout |
948 |
|
|
} |
949 |
|
|
"quit" { |
950 |
|
|
exit 0 |
951 |
|
|
} |
952 |
|
|
"leds" { |
953 |
|
|
global ledcolors |
954 |
|
|
.drives.d8.l configure -background $ledcolors([lindex $line 1]) |
955 |
|
|
.drives.d9.l configure -background $ledcolors([lindex $line 2]) |
956 |
|
|
.drives.d10.l configure -background $ledcolors([lindex $line 3]) |
957 |
|
|
.drives.d11.l configure -background $ledcolors([lindex $line 4]) |
958 |
|
|
} |
959 |
|
|
default { |
960 |
|
|
puts stderr "line = $line" |
961 |
|
|
} |
962 |
|
|
} |
963 |
|
|
} |
964 |
|
|
|
965 |
|
|
|
966 |
|
|
proc set_Emul1541Proc args { |
967 |
|
|
global pref |
968 |
|
|
|
969 |
|
|
if {$pref(Emul1541Proc)} { |
970 |
|
|
set state disabled |
971 |
|
|
set pref(DriveType8) "D64" |
972 |
|
|
} else { |
973 |
|
|
set state normal |
974 |
|
|
} |
975 |
|
|
.drives.d8.dir configure -state $state |
976 |
|
|
.drives.d8.t64 configure -state $state |
977 |
|
|
foreach i {9 10 11} { |
978 |
|
|
.drives.d${i}.d64 configure -state $state |
979 |
|
|
.drives.d${i}.dir configure -state $state |
980 |
|
|
.drives.d${i}.t64 configure -state $state |
981 |
|
|
.drives.d${i}.name configure -state $state |
982 |
|
|
.drives.d${i}.n configure -state $state |
983 |
|
|
} |
984 |
|
|
} |
985 |
|
|
|
986 |
|
|
proc set_ShowOptions args { |
987 |
|
|
global pref show_options_string |
988 |
|
|
|
989 |
|
|
if {$pref(ShowOptions)} { |
990 |
|
|
pack .nums -side top -expand false -fill x -after .more_options |
991 |
|
|
pack .bools1 -side top -expand true -fill both -after .nums |
992 |
|
|
pack .bools2 -side top -expand true -fill both -after .bools1 |
993 |
|
|
pack .bools4 -side top -expand true -fill both -after .bools2 |
994 |
|
|
set show_options_string "Hide Advanced Options" |
995 |
|
|
} else { |
996 |
|
|
pack forget .nums .bools1 .bools2 .bools4 |
997 |
|
|
set show_options_string "Show Advanced Options" |
998 |
|
|
} |
999 |
|
|
} |
1000 |
|
|
|
1001 |
|
|
fileevent stdin readable { ListenToFrodo } |
1002 |
|
|
|
1003 |
|
|
# ============================================================= |
1004 |
|
|
|
1005 |
|
|
wm title . "Frodo Preferences Menu" |
1006 |
|
|
|
1007 |
|
|
# set trace and trigger it now |
1008 |
|
|
trace variable pref(Emul1541Proc) w set_Emul1541Proc |
1009 |
|
|
set pref(Emul1541Proc) $pref(Emul1541Proc) |
1010 |
|
|
|
1011 |
|
|
# set trace and trigger it now |
1012 |
|
|
trace variable pref(ShowOptions) w set_ShowOptions |
1013 |
|
|
set pref(ShowOptions) $pref(ShowOptions) |
1014 |
|
|
|
1015 |
|
|
tkwait window . |
1016 |
|
|
|
1017 |
|
|
|
1018 |
|
|
|