1 |
# UtilProc.tcl: ascend path/unix utility box procedures |
2 |
# by Benjamin A. Allan and Kirk A. Abbott |
3 |
# Created: January 1994 |
4 |
# Part of ASCEND |
5 |
# Revision: $Revision: 1.38 $ |
6 |
# Last modified on: $Date: 1998/06/18 15:55:07 $ |
7 |
# Last modified by: $Author: mthomas $ |
8 |
# Revision control file: $RCSfile: UtilProc.tcl,v $ |
9 |
# |
10 |
# This file is part of the ASCEND Tcl/Tk Interface. |
11 |
# |
12 |
# Copyright (C) 1994-1998 Carnegie Mellon University |
13 |
# |
14 |
# The ASCEND Tcl/Tk Interface is free software; you can redistribute |
15 |
# it and/or modify it under the terms of the GNU General Public |
16 |
# License as published by the Free Software Foundation; either |
17 |
# version 2 of the License, or (at your option) any later version. |
18 |
# |
19 |
# The ASCEND Tcl/Tk Interface is distributed in hope that it will be |
20 |
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty |
21 |
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
22 |
# GNU General Public License for more details. |
23 |
# |
24 |
# You should have received a copy of the GNU General Public License |
25 |
# along with the program; if not, write to the Free Software |
26 |
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139 USA. Check the |
27 |
# file named COPYING. COPYING is found in ../compiler. |
28 |
|
29 |
#------------------------------------------------------------------------ |
30 |
# each system default not configured by |
31 |
# Xresources or ascend.ad should have an entry in the ascUtilVect |
32 |
# The list of subscripts is keyed to the list of labels through |
33 |
# the util_get_label procedure so we don't actually have to |
34 |
# add new widget definitions every time we get a new utility: |
35 |
# just update the procedures |
36 |
# util_init |
37 |
# util_get_label |
38 |
# util_get_var |
39 |
# |
40 |
# display is alpha-by-utilvect-subscript order |
41 |
# any sanity checking desired must be done at button press time |
42 |
# |
43 |
# util init:creates a utilvect entry for each option we want to appear |
44 |
# on the unix page. the values in sub must be appropriate as array |
45 |
# subscripts, duh, and widget names. |
46 |
# |
47 |
|
48 |
# Work around for tcl's braindead file volume command which |
49 |
# demands media in every drive before returning. |
50 |
# This simply gets the list of lettered devices c-z: that exist |
51 |
proc windoze_file_volume {} { |
52 |
set result {} |
53 |
foreach i {c d e f g h i j k l m n o p q r s t u v w x y z} { |
54 |
if {[file exists $i:]} { |
55 |
lappend result $i: |
56 |
} |
57 |
} |
58 |
if {![llength $result]} { |
59 |
lappend result a: b: |
60 |
} |
61 |
return $result |
62 |
} |
63 |
|
64 |
# |
65 |
# This function tries to guess windoze tmp directory, since |
66 |
# the idiots didn't standardize it. |
67 |
proc set_Windoze_tmp {} { |
68 |
global ascUtilVect env ascGlobalVect |
69 |
if {[info exists ascUtilVect(asctmp)] && \ |
70 |
[file writable $ascUtilVect(asctmp)] && \ |
71 |
[file isdirectory $ascUtilVect(asctmp)]} { |
72 |
if {![info exists env(TMPDIR)]} { |
73 |
set env(TMPDIR) $ascUtilVect(asctmp) |
74 |
} |
75 |
return |
76 |
} |
77 |
set drive [windoze_file_volume] |
78 |
set suffix [list \ |
79 |
{/Tmp} \ |
80 |
{/Temp} \ |
81 |
{/ASCEND IV/Tmp} \ |
82 |
{/WinNT/Temp} \ |
83 |
{/Win95/Temp} \ |
84 |
{/Windows/Temp} \ |
85 |
{/Program Files/Temp} \ |
86 |
{/Program Files/ASCEND IV/Tmp} \ |
87 |
] |
88 |
set dl {} |
89 |
foreach dr $drive { |
90 |
if {[string compare [string tolower $dr] "a:"] && \ |
91 |
[string compare [string tolower $dr] "b:"]} { |
92 |
foreach su $suffix { |
93 |
lappend dl $dr$su |
94 |
} |
95 |
} |
96 |
} |
97 |
if {[info exists ascGlobalVect(userhome)]} { |
98 |
lappend dl $ascGlobalVect(userhome)/../tmp |
99 |
} |
100 |
if {[info exists env(TMPDIR)]} { |
101 |
linsert dl 0 $env(TMPDIR) |
102 |
} |
103 |
if {[info exists env(TMP)]} { |
104 |
linsert dl 0 $env(TMP) |
105 |
} |
106 |
if {[info exists env(TEMP)]} { |
107 |
linsert dl 0 $env(TEMP) |
108 |
} |
109 |
foreach d $dl { |
110 |
set ascUtilVect(asctmp) [file rootname $d ] |
111 |
if {[file isdirectory $ascUtilVect(asctmp)] && \ |
112 |
[file writable $ascUtilVect(asctmp)]} { |
113 |
if {![info exists env(TMPDIR)]} { |
114 |
set env(TMPDIR) $ascUtilVect(asctmp) |
115 |
} |
116 |
return |
117 |
} |
118 |
} |
119 |
set ascUtilVect(asctmp) c:/temp |
120 |
if {![info exists env(TMPDIR)]} { |
121 |
set env(TMPDIR) $ascUtilVect(asctmp) |
122 |
} |
123 |
set str "Could not find a writable scratch directory. Tried:" |
124 |
append str " " $dl |
125 |
append str " Open the ASCEND System Utilities tool and set one." |
126 |
append str " Otherwise, some functions like Display Code do not work." |
127 |
Script_Raise_Alert $str |
128 |
return |
129 |
} |
130 |
# |
131 |
# proc set_Util_Defaults {} |
132 |
#------------------------------------------------------------------------ |
133 |
# set utility defaults here. note: any values not stored in |
134 |
# utilvect must be initialized elsewhere, eg. set_Toolbox_Defaults |
135 |
#------------------------------------------------------------------------ |
136 |
proc set_Util_Defaults {} { |
137 |
global ascUtilVect tcl_platform env |
138 |
if {[string compare $tcl_platform(platform) windows]==0} { |
139 |
set ascUtilVect(edit) "runemacs" |
140 |
set ascUtilVect(ghostview) "ghostview" |
141 |
set_Windoze_tmp |
142 |
set ascUtilVect(plot_type) "xgraph" |
143 |
set ascUtilVect(plot_command) \{$env(ASCENDDIST) |
144 |
append ascUtilVect(plot_command) "/../Tcl/bin/tkxgraph.exe\} -- -f" |
145 |
} else { |
146 |
set ascUtilVect(edit) "emacs" |
147 |
set ascUtilVect(ghostview) "ghostview" |
148 |
set ascUtilVect(asctmp) "/tmp" |
149 |
set ascUtilVect(plot_type) "xgraph" |
150 |
set ascUtilVect(plot_command) "xgraph" |
151 |
} |
152 |
set_Print_Defaults |
153 |
} |
154 |
|
155 |
# |
156 |
# proc Util_Init {} |
157 |
#------------------------------------------------------------------------ |
158 |
# Utilvect valu check here to guarantee widget creation. |
159 |
# All variables must ultimately resolve to vector entries. |
160 |
# We will _not_ have single variables running around loose in Util |
161 |
#------------------------------------------------------------------------ |
162 |
proc Util_Init {} { |
163 |
global ascUtilSubs ascUtilVect |
164 |
set subs "dir" |
165 |
lappend subs asclib ascdist tklib tcllib printer |
166 |
lappend subs print edit ghostview asctmp xspread webstart |
167 |
lappend subs webkick webroot plot_type plot_command |
168 |
# if not set, set dummy so it gets on the util page |
169 |
set alist [array names ascUtilVect] |
170 |
foreach s $subs { |
171 |
if {[lsearch $alist $s]=="-1"} { |
172 |
set ascUtilVect($s) "unset" |
173 |
} |
174 |
} |
175 |
set ascUtilSubs $subs |
176 |
} |
177 |
|
178 |
# |
179 |
# proc Util_Get_Label {defsub} |
180 |
#------------------------------------------------------------------------ |
181 |
# take a util default subscript and return its label string |
182 |
# for the utility box |
183 |
#------------------------------------------------------------------------ |
184 |
proc Util_Get_Label {defsub} { |
185 |
switch $defsub { |
186 |
{asclib} {return "ASCENDLIBRARY path"} |
187 |
{webstart} {return "WWW startup"} |
188 |
{webroot} {return "WWW root URL"} |
189 |
{ascdist} {return "ASCENDDIST dir"} |
190 |
{asctmp} {return "Scratch directory"} |
191 |
{dir} {return "Working Directory"} |
192 |
{edit} {return "Text edit command"} |
193 |
{ghostview} {return "Postscript viewer"} |
194 |
{plot_command} {return "Plot program name"} |
195 |
{plot_type} {return "Plot file type"} |
196 |
{print} {return "Text print command"} |
197 |
{printer} {return "PRINTER"} |
198 |
{webkick} {return "WWW restart"} |
199 |
{tcllib} {return "TCL_LIBRARY"} |
200 |
{tklib} {return "TK_LIBRARY dir"} |
201 |
{xspread} {return "Spreadsheet command"} |
202 |
default {error "util_get_label called with bad option $defsub"} |
203 |
} |
204 |
} |
205 |
|
206 |
# |
207 |
# proc Util_Get_Var {defsub} |
208 |
#------------------------------------------------------------------------ |
209 |
# take a util default subscript and return its variable |
210 |
# for the utility box. you better have set these vars |
211 |
# elsewhere or trap those not ever set |
212 |
#------------------------------------------------------------------------ |
213 |
proc Util_Get_Var {defsub} { |
214 |
switch $defsub { |
215 |
{dir} {return "ascToolVect(dirinput)"} |
216 |
{asclib} {return "env(ASCENDLIBRARY)"} |
217 |
{ascdist} {return "env(ASCENDDIST)"} |
218 |
{webstart} {return "ascHelpVect(start_command)"} |
219 |
{webroot} {return "ascHelpVect(rootURL)"} |
220 |
{asctmp} {return "ascUtilVect(asctmp)"} |
221 |
{tklib} {return "env(TK_LIBRARY)"} |
222 |
{tcllib} {return "env(TCL_LIBRARY)"} |
223 |
{plot_type} {return "ascUtilVect(plot_type)"} |
224 |
{plot_command} {return "ascUtilVect(plot_command)"} |
225 |
{printer} {return "env(PRINTER)"} |
226 |
{print} {return "ascToolVect(printargs)"} |
227 |
{webkick} {return "ascHelpVect(restart_command)"} |
228 |
{ghostview} {return "ascUtilVect(ghostview)"} |
229 |
{edit} {return "ascUtilVect(edit)"} |
230 |
{xspread} {return "ascUtilVect(xspread)"} |
231 |
default {error "util_get_var called with bad option $defsub"} |
232 |
} |
233 |
} |
234 |
|
235 |
# |
236 |
# proc Util_do_OK {} |
237 |
#------------------------------------------------------------------------ |
238 |
# any return from here before the Destroy leaves the utilbox up. |
239 |
# do sanity checks here where those failing cause a return |
240 |
#------------------------------------------------------------------------ |
241 |
proc Util_do_OK {} { |
242 |
global ascUtilSubs ascUtilVect |
243 |
foreach i $ascUtilSubs { |
244 |
set s [Util_Get_Var $i] |
245 |
set aname [lindex [split $s (] 0] |
246 |
global $aname |
247 |
set $s [string trim [set $s]] |
248 |
} |
249 |
if {[catch {Tool_set_dir} ]} {return} |
250 |
global ascUtilVect |
251 |
if {[catch { set ascUtilVect(asctmp) \ |
252 |
[file rootname $ascUtilVect(asctmp) ] } ] } { |
253 |
return |
254 |
} |
255 |
if {![file isdirectory $ascUtilVect(asctmp)] || \ |
256 |
![file writable $ascUtilVect(asctmp)]} { |
257 |
set str $ascUtilVect(asctmp) |
258 |
append str " is not a writable Scratch directory" |
259 |
Script_Raise_Alert $str |
260 |
return |
261 |
} |
262 |
Tool_printinstr |
263 |
DestroyWindow.util |
264 |
} |
265 |
|
266 |
# |
267 |
# proc Util_do_Read {} |
268 |
#------------------------------------------------------------------------ |
269 |
# Reads in settings from ~/ascdata/ascend-config if that is available. |
270 |
#------------------------------------------------------------------------ |
271 |
proc Util_do_Read {} { |
272 |
global env |
273 |
set configread 0 |
274 |
|
275 |
if {!$configread && [file exists ~/ascdata/ascend-config] && |
276 |
[file readable ~/ascdata/ascend-config] && |
277 |
("[file type ~/ascdata/ascend-config]" == "file" || |
278 |
"[file type ~/ascdata/ascend-config]" == "link")} { |
279 |
if {[catch "uplevel {source [glob ~/ascdata/ascend-config]}" ]} { |
280 |
puts stderr "error in config file: [glob ~/ascdata/ascend-config]" |
281 |
} else { |
282 |
set configread 1 |
283 |
} |
284 |
} |
285 |
|
286 |
} |
287 |
|
288 |
# |
289 |
# proc Util_do_Save {} |
290 |
#------------------------------------------------------------------------ |
291 |
# save ~/ascdata/ascend-config. overwrite whatever there. |
292 |
#------------------------------------------------------------------------ |
293 |
proc Util_do_Save {} { |
294 |
global ascUtilVect ascGlobalVect |
295 |
|
296 |
if {$ascGlobalVect(saveoptions) == 0} { |
297 |
puts stdout "cannot write ascend configure file" |
298 |
return; |
299 |
} |
300 |
|
301 |
if {[catch {set conffile [open ~/ascdata/ascend-config w]} ]} { |
302 |
Script_Raise_Alert "Error writing ~/ascdata/ascend-config." |
303 |
return |
304 |
} |
305 |
|
306 |
set ostr \ |
307 |
"\# Parameters in this file may be changed, saved, and read at any time." |
308 |
puts $conffile $ostr |
309 |
puts $conffile "\# Actions in the .ascendrc are only done at startup time." |
310 |
set ostr \ |
311 |
"\# This file is overwritten when toolbox.utilities.save is pressed." |
312 |
puts $conffile $ostr |
313 |
puts $conffile "\# Environment variables are not saved and set here." |
314 |
set subs [lsort [array names ascUtilVect]] |
315 |
foreach s $subs { |
316 |
set varname [Util_Get_Var $s] |
317 |
set aname [lindex [split $varname (] 0] |
318 |
global $varname |
319 |
# we don't save environment vars |
320 |
if {[string range $varname 0 2] !="env"} { |
321 |
puts $conffile " global $aname" |
322 |
puts $conffile " set $varname {[.util.box.main_frm.val_frm.$s get]}" |
323 |
} |
324 |
} |
325 |
close $conffile |
326 |
puts stdout "wrote config file." |
327 |
} |
328 |
|
329 |
# |
330 |
# proc Util_do_Help {} |
331 |
#------------------------------------------------------------------------ |
332 |
# Util Help button |
333 |
#------------------------------------------------------------------------ |
334 |
proc Util_do_Help {} { |
335 |
Help_button utilities |
336 |
} |
337 |
|
338 |
# |
339 |
# proc ascFindFile {filename code args} |
340 |
#------------------------------------------------------------------------ |
341 |
# File find procedure. baa 3-94 |
342 |
# given a filename, a control code, and zero or more searchpaths, |
343 |
# will return the first, last or all matches to a filename in the |
344 |
# search paths. |
345 |
# paths are searched in the order given and may be compound paths |
346 |
# separated by colons. |
347 |
# Each match is returned as a full path name. |
348 |
# filename is first warped to the nativename format |
349 |
# If file starts with / or ~ file will be globbed and the first match |
350 |
# returned rather than searched for. |
351 |
# under windoze, \ or ~ will be globbed instead of / and ~. |
352 |
# |
353 |
# If no path is given, . will be assumed. |
354 |
# If some path is given, . will NOT be assumed |
355 |
# If redundant paths are given, redundant entries will be returned |
356 |
# on the list. |
357 |
# |
358 |
# code must be one of: first last all |
359 |
# for all, return is a list of name elements |
360 |
# for first or last return is a single full path name |
361 |
#------------------------------------------------------------------------ |
362 |
proc ascFindFile {filename code args} { |
363 |
global tcl_platform |
364 |
set filename [file nativename $filename] |
365 |
switch $code { |
366 |
{first} - |
367 |
{last} - |
368 |
{all} {} |
369 |
default {error "bad call to ascFindFile: want first last or all"} |
370 |
} |
371 |
if {[file exists $filename]} { |
372 |
if {[file readable $filename]} { |
373 |
return $filename |
374 |
} |
375 |
} |
376 |
set fc [string range $filename 0 0] |
377 |
if {($fc == "/" ) || |
378 |
($fc == "\\" && $tcl_platform(platform)=="windows") } { |
379 |
return $filename |
380 |
} |
381 |
if {$fc == "~"} { |
382 |
if {[catch {set tfile [lindex [glob $filename] 0]} foo ]} { |
383 |
puts stderr $foo |
384 |
return "" |
385 |
} { |
386 |
return $tfile |
387 |
} |
388 |
} |
389 |
if {$args == ""} {set searchlist "."} {set searchlist ""} |
390 |
foreach p $args { |
391 |
set dlist "" |
392 |
if {$tcl_platform(platform)=="unix"} { |
393 |
set dlist [split $p :] |
394 |
} |
395 |
if {$tcl_platform(platform)=="windows"} { |
396 |
set dlist [split $p \;] |
397 |
} |
398 |
foreach d $dlist { |
399 |
lappend searchlist $d ;# redundant? |
400 |
} |
401 |
} |
402 |
set foundlist "" |
403 |
set SLASH "/" |
404 |
if {$tcl_platform(platform)=="windows"} { |
405 |
set SLASH "\\" |
406 |
} |
407 |
foreach d $searchlist { |
408 |
if {[file exists "${d}${SLASH}$filename"]} { |
409 |
if {![file readable "${d}${SLASH}$filename"]} { |
410 |
puts stderr "Cannot read $d$SLASH$filename (permission denied)" |
411 |
} else { |
412 |
lappend foundlist ${d}${SLASH}$filename |
413 |
if {$code == "first"} { |
414 |
return [file nativename [lindex $foundlist 0]] |
415 |
} |
416 |
} |
417 |
} |
418 |
} |
419 |
if {$code == "last"} { |
420 |
return [file nativename [lindex $foundlist end]] |
421 |
} |
422 |
return [file nativename $foundlist] |
423 |
} |
424 |
|
425 |
# |
426 |
# proc Util_Label_Width {} |
427 |
#------------------------------------------------------------------------ |
428 |
# pick out the maximum width of a Util window label |
429 |
#------------------------------------------------------------------------ |
430 |
proc Util_Label_Width {} { |
431 |
global ascUtilVect |
432 |
set items [array names ascUtilVect] |
433 |
set wid 0 |
434 |
foreach i $items { |
435 |
set sl [string length "[Util_Get_Label $i]"] |
436 |
if {[expr $sl > $wid]} {set wid $sl} |
437 |
} |
438 |
return $wid |
439 |
} |
440 |
|
441 |
proc set_Print_Defaults {} { |
442 |
global tcl_platform ascPrintVect env |
443 |
set ascPrintVect(grab) 1 |
444 |
set ascPrintVect(cancellable) 1 |
445 |
set ascPrintVect(entrywidth) 20 |
446 |
set ascPrintVect(npages) 1 |
447 |
set ascPrintVect(toplevel) .printconfig |
448 |
set ascPrintVect(title) "Printer setup" |
449 |
set ascPrintVect(helpcommand) {Help_button print} |
450 |
set ascPrintVect(usercheckcommand) Print_checkinput |
451 |
set ascPrintVect(whenokcommand) "" |
452 |
set ascPrintVect(namelist) [list \ |
453 |
destination \ |
454 |
printername \ |
455 |
filename \ |
456 |
enscriptflags \ |
457 |
customcommand \ |
458 |
] |
459 |
if {$tcl_platform(platform) == "unix"} { |
460 |
set ascPrintVect(destination.choices) [list \ |
461 |
{Print} \ |
462 |
{Write to file} \ |
463 |
{Append to file} \ |
464 |
{Enscript} \ |
465 |
{Custom} |
466 |
] |
467 |
} else { |
468 |
# until we can cope with PC idiocy |
469 |
set ascPrintVect(destination.choices) Print |
470 |
} |
471 |
set ascPrintVect(destination) {Print} |
472 |
set ascPrintVect(destination.type) string |
473 |
set ascPrintVect(destination.label) Destination |
474 |
set ascPrintVect(filename) Noname |
475 |
set ascPrintVect(filename.type) string |
476 |
set ascPrintVect(filename.label) "Name of file" |
477 |
|
478 |
set ascPrintVect(enscriptflags) {-2rG} |
479 |
set ascPrintVect(enscriptflags.type) string |
480 |
set ascPrintVect(enscriptflags.label) "Enscript flags" |
481 |
|
482 |
set ascPrintVect(customcommand) {>> /dev/null cat} |
483 |
set ascPrintVect(customcommand.type) string |
484 |
set ascPrintVect(customcommand.label) "User print command" |
485 |
|
486 |
# set the default printer name to mirage, then overwrite it with the |
487 |
# value in the PRINTER or LPDEST environment variable. Finally, set |
488 |
# the PRINTER environment variable so the Utilities window will |
489 |
# display the current printer |
490 |
set ascPrintVect(printername) mirage |
491 |
if {[catch {set ascPrintVect(printername) $env(PRINTER)}]} { |
492 |
catch {set ascPrintVect(printername) $env(LPDEST)} |
493 |
} |
494 |
set env(PRINTER) $ascPrintVect(printername) |
495 |
|
496 |
set ascPrintVect(printername.type) string |
497 |
set ascPrintVect(printername.label) "Printer" |
498 |
|
499 |
if {$tcl_platform(platform) == "unix"} { |
500 |
# Use SysV-style `lp' command if on HP-UX, IRIX, or Solaris |
501 |
# Use BSD-style `lpr' command everywhere else |
502 |
switch -regexp $tcl_platform(os)$tcl_platform(osVersion) { |
503 |
HP-UX* - |
504 |
IRIX* - |
505 |
SunOS5* { |
506 |
set ascPrintVect(Print) {lp -d%Printer%} |
507 |
set ascPrintVect(Enscript) {enscript %Enscript% -d%Printer%} |
508 |
} |
509 |
default { |
510 |
set ascPrintVect(Print) {lpr -P%Printer%} |
511 |
set ascPrintVect(Enscript) {enscript %Enscript% -P%Printer%} |
512 |
} |
513 |
} ;# endsw |
514 |
set ascPrintVect(Write) {> %File% cat} |
515 |
set ascPrintVect(Append) {>> %File% cat} |
516 |
} else { |
517 |
set ascPrintVect(Print) {notepad /p} |
518 |
# 3 NOT accessed since only Print is offered under windows. |
519 |
set ascPrintVect(Write) {> %File% type} |
520 |
set ascPrintVect(Append) {>> %File% type} |
521 |
set ascPrintVect(Enscript) {enscript %Enscript%P%Printer%} |
522 |
} |
523 |
} |
524 |
|
525 |
proc Print_checkinput {args} { |
526 |
global ascToolVect env ascPrintVect |
527 |
set option [lindex $ascPrintVect(destination) 0] |
528 |
switch $option { |
529 |
Print { |
530 |
if {"[stringcompact $ascPrintVect(printername)]" == ""} { |
531 |
error "You must specify a printer" |
532 |
} |
533 |
regsub %Printer% $ascPrintVect(Print) \ |
534 |
$ascPrintVect(printername) ascToolVect(printargs) |
535 |
return |
536 |
} |
537 |
Write { |
538 |
if {"[stringcompact $ascPrintVect(filename)]" == ""} { |
539 |
error "You must specify a name for the file written" |
540 |
} |
541 |
set fname [file nativename $ascPrintVect(filename)] |
542 |
if {[file exists $fname]} { |
543 |
if {[file isfile $fname] && [file writable $fname]} { |
544 |
set not [Script_Raise_Alert "File exists. Ok to replace?" \ |
545 |
"Print to file question"] |
546 |
if {$not} {error "Please specify a new file name"} |
547 |
} else { |
548 |
error "Please specify a writable file name" |
549 |
} |
550 |
} |
551 |
regsub %File% $ascPrintVect(Write) $fname ascToolVect(printargs) |
552 |
return |
553 |
} |
554 |
Append { |
555 |
if {"[stringcompact $ascPrintVect(filename)]" == ""} { |
556 |
error "You must specify a name for the file to append" |
557 |
} |
558 |
set fname [file nativename $ascPrintVect(filename)] |
559 |
if {![file exists $fname]} { |
560 |
set not [Script_Raise_Alert "File does not exist. Ok to create?" \ |
561 |
"Print to file question"] |
562 |
if {$not} {error "Please specify a new file name"} |
563 |
} else { |
564 |
if {![file isfile $fname] || ![file writable $fname]} { |
565 |
error "File not appendable. Please specify a new file name" |
566 |
} |
567 |
} |
568 |
regsub %File% $ascPrintVect(Append) $fname ascToolVect(printargs) |
569 |
return |
570 |
} |
571 |
Enscript { |
572 |
if {"[stringcompact $ascPrintVect(printername)]" == ""} { |
573 |
error "You must specify a printer" |
574 |
} |
575 |
regsub %Printer% $ascPrintVect(Enscript) \ |
576 |
$ascPrintVect(printername) tmp1 |
577 |
regsub %Enscript% $tmp1 \ |
578 |
$ascPrintVect(enscriptflags) ascToolVect(printargs) |
579 |
return |
580 |
} |
581 |
Custom { |
582 |
if {"[stringcompact $ascPrintVect(customcommand)]" == ""} { |
583 |
error "You must specify a custom printing command" |
584 |
} |
585 |
set ascToolVect(printargs) $ascPrintVect(customcommand) |
586 |
return |
587 |
} |
588 |
default {error "Unknown destination specified to print dialog"} |
589 |
} ;# endswitch |
590 |
} |
591 |
|
592 |
proc Print_cancelcheck {args} { |
593 |
global ascPrintVect |
594 |
return $ascPrintVect(__,cancelled) |
595 |
} |
596 |
|
597 |
# |
598 |
# call this and Print_cancelcheck in sequence always |
599 |
proc Print_configure {window {destination ""}} { |
600 |
global ascToolVect env ascPrintVect |
601 |
set g +10+10 |
602 |
catch { |
603 |
set w [winfo toplevel $window] |
604 |
set g "+[winfo x $w]+[winfo y $w]" |
605 |
} |
606 |
if {$destination !=""} { |
607 |
set ascPrintVect(destination) $destination |
608 |
} |
609 |
ascParPage ascPrintVect $g 1 |
610 |
set env(PRINTER) $ascPrintVect(printername) |
611 |
set env(LPDEST) $ascPrintVect(printername) |
612 |
} |