/usr/lib/grass64/etc/gm/runandoutput.tcl is in grass-gui 6.4.3-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 | ############################################################################
#
# LIBRARY: runandoutput.tcl
# AUTHOR(S): Cedric Shock (cedricgrass AT shockfamily.net)
# PURPOSE: Interactive console for gis.m and other run commands
# COPYRIGHT: (C) 2006 GRASS Development Team
#
# This program is free software under the GNU General Public
# License (>=v2). Read the file COPYING that comes with GRASS
# for details.
#
############################################################################
#############################################
#Overloaded gui.tcl behaviour:
# Overload run_cmd (proc called when run button is pushed)
proc run_cmd {dlg} {
global gronsole
global opt
set cmd [dialog_get_command $dlg]
catch {$opt($dlg,run_button) configure -state disabled}
$gronsole run $cmd {} "catch {$opt($dlg,run_button) configure -state active}"
# Bring that output window up:
raise [winfo toplevel $gronsole]
}
# no output or progress or buttons:
proc make_output {dlg path root} {}
proc make_progress {dlg path root} {}
proc make_buttons {dlg path root} {}
###########################################
proc make_fun_buttons {dlg path} {
global opt env
set pgm_name $opt($dlg,pgm_name)
set buttonframe [frame $path.buttonframe]
button $buttonframe.run -text [G_msg "Run"] -command "run_cmd $dlg"
# In the future we'll have a button to make a layer from here:
# button $buttonframe.layer -text [G_msg "Layer"] -command "layer_cmd $dlg"
button $buttonframe.help -text [G_msg "Help"] -command "help_cmd $dlg"
button $buttonframe.close -text [G_msg "Close"] -command "close_cmd $dlg"
set opt($dlg,run_button) $buttonframe.run
# Turn off help button if the help file doesn't exist
if {! [file exists [file join "$env(GISBASE)" "docs" "html" "$pgm_name.html"]]} {
$buttonframe.help configure -state disabled
}
pack $buttonframe.run $buttonframe.help $buttonframe.close \
-side left -expand yes -padx 5 -pady 5
pack $buttonframe -expand no -fill x -side bottom -before [lindex [pack slaves $path] 0]
# Set the starting window size if this is a toplevel window
if {[winfo toplevel $path] == $path} {
wm geometry $path "560x400"
}
}
proc run_ui {cmd} {
global dlg
global path
global devnull
set program [lindex $cmd 0]
set code ""
if {[catch {set code [exec -- "$program" --tcltk 2> $devnull]} error]} {
GmLib::errmsg $error
}
set path .dialog$dlg
toplevel $path
if {$code == ""} { return }
eval $code
# Push the command to the dialog
set thisdialog $dlg
dialog_set_command $dlg $cmd
# Add our ui
make_fun_buttons $dlg $path
}
#################################################
proc run_disabled {gronsole button cmd} {
if {[catch {$button configure -state disabled} error]} {
GmLib::errmsg $error
}
$gronsole run $cmd {running} "catch {$button configure -state active}"
}
proc gronsole_history {cmdtext ci cmd} {
$cmdtext delete 1.0 end
$cmdtext insert end $cmd
}
proc command_window {where} {
global keycontrol
global bgcolor
global mingw
set cmdpane [frame $where.command -bg $bgcolor]
set cmdwin [ScrolledWindow $where.win -relief flat -borderwidth 1]
set gronsole [Gronsole $where.gronsole -clickcmd "gronsole_history $cmdwin.text"]
set cmdtext [text $cmdwin.text -height 2 -width 80]
$cmdwin setwidget $cmdtext
set runbutton [button $cmdpane.run -text [G_msg "Run"] -width 17 -wraplength 100 \
-default active -bd 1 -highlightbackground $bgcolor \
-command "run_disabled $gronsole $cmdpane.run \[string trim \[$cmdtext get 1.0 end\]\]"]
set run2button [button $cmdpane.run2 -text [G_msg "Run (background)"] -width 17 \
-wraplength 100 -bd 1 -highlightbackground $bgcolor \
-command "$gronsole run \[string trim \[$cmdtext get 1.0 end\]\] {} {}"]
set runuibutton [button $cmdpane.runui -text [G_msg "Run (GUI)"] -width 17 \
-wraplength 100 -bd 1 -highlightbackground $bgcolor \
-command "run_ui \[string trim \[$cmdtext get 1.0 end\]\]"]
if { $mingw } {
set termbox "DOS box"
} else {
set termbox "Xterm"
}
set runxterm [button $cmdpane.xterm -text [G_msg "Run (in $termbox)"] -width 17 \
-wraplength 100 -bd 1 -highlightbackground $bgcolor \
-command "$gronsole run_xterm \[string trim \[$cmdtext get 1.0 end\]\] {}"]
set outpane [frame $where.output -bg $bgcolor]
set savebutton [button $outpane.save -text [G_msg " Save "] -command "$gronsole save" \
-bd 1 -padx 10 -highlightbackground $bgcolor]
set clearbutton [button $outpane.clear -text [G_msg " Clear "] -command "$gronsole clear" \
-bd 1 -padx 10 -highlightbackground $bgcolor]
pack $runbutton $run2button $runuibutton $runxterm \
-side left -expand yes -padx 2 -pady 5
pack $savebutton $clearbutton \
-side left -expand yes -padx 5 -pady 5
pack $cmdpane -fill x -side bottom
pack $cmdwin -fill x -side bottom
pack $outpane -fill x -side bottom
pack $gronsole -side top -fill both -expand yes
bind $cmdtext <$keycontrol-c> "tk_textCopy %W"
bind $cmdtext <$keycontrol-v> "tk_textPaste %W"
bind $cmdtext <$keycontrol-x> "tk_textCut %W"
return $gronsole
}
toplevel .gronsole
wm title .gronsole [G_msg "Output - GIS.m"]
# If we had our own window manager we could withdraw windows instead of iconifying them:
wm protocol .gronsole WM_DELETE_WINDOW "wm iconify .gronsole"
set gronsole [command_window {.gronsole}]
###############################################################################
# Run procs for gis.m:
################################################################################
proc execute {cmd} {
# Use run and output
run_ui [list $cmd]
}
###############################################################################
proc spawn {cmd args} {
if {[catch {eval [list exec -- $cmd] $args &} error]} {
GmLib::errmsg $error
}
}
###############################################################################
proc spawn_panel {cmd args} {
global gronsole
$gronsole run $cmd gism {}
}
###############################################################################
proc run_panel {cmd} {
global gronsole
$gronsole run_wait $cmd gism
}
###############################################################################
proc run {cmd args} {
global devnull
# This and runcmd are being used to run command in the background
# These used to go to stdout and stderr
# but we don't want to pollute that console.
# eval exec -- $cmd $args >@ stdout 2>@ stderr
if {[catch {eval [list exec -- $cmd] $args >& $devnull} error]} {
GmLib::errmsg $error
}
}
###############################################################################
proc runcmd {cmd args} {
global gronsole
set ci [$gronsole annotate $cmd [list gism running]]
eval run $cmd $args
$gronsole remove_tag $ci running
}
###############################################################################
proc term_panel {cmd} {
global gronsole
$gronsole run_xterm $cmd gism
}
###############################################################################
proc term {cmd args} {
global env
global mingw
if { $mingw == "1" } {
if {[catch {eval [list exec -- cmd.exe /c start $env(GISBASE)/etc/grass-run.bat $cmd] $args &} error]} {
GmLib::errmsg $error
}
} else {
if {[catch {eval [list exec -- $env(GISBASE)/etc/grass-xterm-wrapper -name xterm-grass -e $env(GISBASE)/etc/grass-run.sh $cmd] $args &} error]} {
GmLib::errmsg $error
}
}
}
###############################################################################
# Make sure there's an xmon before running some commands.
# Used in menus.
proc guarantee_xmon {} {
global mingw
if {$mingw == 1} {
tk_messageBox -type ok -icon error -title [G_msg "X Windows not available"] \
-message [G_msg "Functions that require X Windows are not available in Windows"]
return
}
if {![catch {open "|d.mon -L" r} input]} {
while {[gets $input line] >= 0 } {
if {[regexp -nocase {(x[0-9]+).*not running} $line dummy monitor]} {
# $monnum is the monitor number
#create list of non-running monitors
lappend xmonlist $monitor
}
}
}
if {[catch {close $input} error]} {
tk_messageBox -type ok -icon error -title [G_msg "Error"] \
-message [G_msg "d.mon error: problem launching xmon, $error"]
return
}
if { ![info exists xmonlist] } {
tk_messageBox -type ok -icon error -title [G_msg "Error"] \
-message [G_msg "This module requires X11 support, but no xmons were found"]
return
}
set xmon [lindex $xmonlist 0]
spawn d.mon start=$xmon
}
###############################################################################
# Annotation procs for gis.m:
proc monitor_annotation_start {mon title tags} {
global gronsole
set handle [$gronsole annotate $title $tags]
$gronsole set_click_command $handle {}
return $handle
}
proc monitor_annotate {handle text} {
global gronsole
$gronsole annotate_text $handle $text
}
|