summaryrefslogtreecommitdiffstats
path: root/x11vnc/tkx11vnc.h
diff options
context:
space:
mode:
Diffstat (limited to 'x11vnc/tkx11vnc.h')
-rw-r--r--x11vnc/tkx11vnc.h2194
1 files changed, 2194 insertions, 0 deletions
diff --git a/x11vnc/tkx11vnc.h b/x11vnc/tkx11vnc.h
new file mode 100644
index 0000000..83891fe
--- /dev/null
+++ b/x11vnc/tkx11vnc.h
@@ -0,0 +1,2194 @@
+/*
+ * tkx11vnc.h: generated by 'tkx11vnc -spit'
+ * Abandon all hope, ye who enter here...
+ * ...edit tkx11vnc instead.
+ */
+ char gui_code[] =
+"#!/bin/sh\n"
+"# the next line restarts using wish. \\\n"
+"exec wish \"$0\" \"$@\"\n"
+"catch {rename send {}}\n"
+"#\n"
+"# Copyright (c) 2004 Karl J. Runge <runge@karlrunge.com>\n"
+"# All rights reserved.\n"
+"#\n"
+"# This is free software; you can redistribute it and/or modify\n"
+"# it under the terms of the GNU General Public License as published by\n"
+"# the Free Software Foundation; either version 2 of the License, or\n"
+"# (at your option) any later version.\n"
+"#\n"
+"# This software is distributed in the hope that it will be useful,\n"
+"# but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"# GNU General Public License for more details.\n"
+"#\n"
+"# You should have received a copy of the GNU General Public License\n"
+"# along with this software; if not, write to the Free Software\n"
+"# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"# USA.\n"
+"\n"
+"#\n"
+"# tkx11vnc v0.1\n"
+"# This is a simple frontend to x11vnc. It uses the remote control\n"
+"# and query features (-remote/-query aka -R/-Q) to interact with it. \n"
+"# It is just a quick-n-dirty hack (it parses -help output, etc), but\n"
+"# it could be of use playing with or learning about the (way too) many\n"
+"# parameters x11vnc has.\n"
+"# \n"
+"# It can be used to interact with a running x11vnc (see the x11vnc\n"
+"# -gui option), or to set the parameters and then start up x11vnc. \n"
+"# \n"
+"\n"
+"#\n"
+"# Below is a simple picture of how the gui should be laid out and how\n"
+"# the menus should be organized. Most menu items correspond to remote\n"
+"# control commands. A trailing \":\" after the item name means it is a string\n"
+"# to be set rather than a boolean that can be toggled (e.g. the entry\n"
+"# box must be used).\n"
+"#\n"
+"# Some tweak options may be set in the prefix \"=\" string.\n"
+"# A means it is an \"Action\" (not a true variable)\n"
+"# R means it is an action only valid in remote mode.\n"
+"# S means it is an action only valid in startup mode.\n"
+"# Q means it is an action worth querying after running.\n"
+"# D means it is a good idea to delay a little before querying \n"
+"# (i.e. perhaps it causes x11vnc to do a lot of work, new fb)\n"
+"# P means the string can be +/- appended/deleted (string may not\n"
+"# be the same after the remote command)\n"
+"# G means gui internal item\n"
+"# F means can be set via file browse\n"
+"# -C:val1,... means it will be a checkbox (radio button)\n"
+"# the \"-\" means no other options follow\n"
+"# 0 means to skip the item.\n"
+"# -- means add a separator\n"
+"#\n"
+"proc set_template {} {\n"
+" global template\n"
+" set template \"\n"
+"Row: Actions Clients Permissions Keyboard Pointer Help\n"
+"Row: Displays Screen Tuning Debugging Misc\n"
+"\n"
+"Actions\n"
+" =SA start\n"
+" =RA stop\n"
+" =GA attach\n"
+" =RA detach\n"
+" --\n"
+" =RA ping\n"
+" =RA update-all\n"
+" =GA clear-all\n"
+" --\n"
+" =GA Quit \n"
+"\n"
+"Help\n"
+" =GA gui\n"
+" =GA all\n"
+"\n"
+"Clients\n"
+" =RQA current:\n"
+" =F connect:\n"
+" =RQA disconnect:\n"
+" --\n"
+" accept:\n"
+" gone:\n"
+" vncconnect\n"
+" --\n"
+" =F httpdir:\n"
+" httpport:\n"
+" enablehttpproxy\n"
+"\n"
+"Displays\n"
+" display:\n"
+" =F auth:\n"
+" desktop:\n"
+" rfbport:\n"
+" =0 gui:\n"
+"\n"
+"Screen\n"
+" =DRA refresh\n"
+" =DRA reset\n"
+" =DRA blacken\n"
+" --\n"
+" =D id:\n"
+" =D sid:\n"
+" =D scale:\n"
+" --\n"
+" =D overlay\n"
+" overlay_nocursor\n"
+" --\n"
+" =D visual:\n"
+" flashcmap\n"
+" notruecolor\n"
+" --\n"
+" =DP blackout:\n"
+" =D xinerama\n"
+" --\n"
+" = xrandr\n"
+" =-C:resize,newfbsize,exit xrandr_mode:\n"
+" padgeom:\n"
+"\n"
+"Keyboard\n"
+" norepeat\n"
+" add_keysyms\n"
+" modtweak\n"
+" xkb\n"
+" skip_keycodes:\n"
+" --\n"
+" =FP remap:\n"
+" --\n"
+" clear_mods\n"
+" clear_keys\n"
+"\n"
+"Pointer\n"
+" =-C:none,arrow,X,some,most cursor:\n"
+" noxfixes\n"
+" --\n"
+" cursorpos\n"
+" nocursorshape\n"
+" --\n"
+" buttonmap:\n"
+" --\n"
+" xwarppointer\n"
+"\n"
+"Misc\n"
+" =F rc:\n"
+" norc\n"
+" --\n"
+" nofb\n"
+" --\n"
+" nobell\n"
+" nosel\n"
+" noprimary\n"
+" --\n"
+" bg\n"
+" =-C:ignore,exit sigpipe:\n"
+" =0 inetd\n"
+" --\n"
+" =RA remote-cmd:\n"
+" =GA all-settings\n"
+"\n"
+"Debugging\n"
+" debug_pointer\n"
+" debug_keyboard\n"
+" =F logfile:\n"
+" quiet\n"
+" --\n"
+" =G debug_gui\n"
+"\n"
+"Permissions\n"
+" =RQA lock\n"
+" =RQA unlock\n"
+" =SQA deny_all\n"
+" --\n"
+" =FP allow:\n"
+" localhost\n"
+" =RA allowonce:\n"
+" --\n"
+" viewonly\n"
+" shared\n"
+" forever\n"
+" --\n"
+" =RA noremote\n"
+" --\n"
+" alwaysshared\n"
+" nevershared\n"
+" dontdisconnect\n"
+" --\n"
+" viewpasswd:\n"
+" =F passwdfile:\n"
+" =0 storepasswd\n"
+" =F rfbauth:\n"
+" passwd:\n"
+" --\n"
+" safer\n"
+" unsafe\n"
+"\n"
+"Tuning\n"
+" =-C:1,2,3,4 pointer_mode:\n"
+" input_skip:\n"
+" nodragging\n"
+" --\n"
+" =D noshm\n"
+" flipbyteorder\n"
+" onetile\n"
+" --\n"
+" wait:\n"
+" defer:\n"
+" nap\n"
+" screen_blank:\n"
+" --\n"
+" fs:\n"
+" gaps:\n"
+" grow:\n"
+" fuzz:\n"
+" --\n"
+" threads\n"
+" rfbwait:\n"
+" --\n"
+" progressive:\n"
+"\"\n"
+"}\n"
+"\n"
+"proc set_internal_help {} {\n"
+" global helptext helpall\n"
+"\n"
+" # set some internal item help here:\n"
+" set helptext(start) \"\n"
+"Launch x11vnc with the settings you have prescribed in the gui.\n"
+"The x11vnc process is started in an xterm window so you can see the\n"
+"output, kill it, etc.\n"
+"\"\n"
+"\n"
+" set helptext(debug_gui) \"\n"
+"Set debug_gui to get more output printed in the text area.\n"
+"\"\n"
+"\n"
+" set helptext(detach) \"\n"
+"No longer be associated with the x11vnc server. Switch to non-connected\n"
+"state.\n"
+"\"\n"
+"\n"
+" set helptext(attach) \"\n"
+"Attach to the x11vnc server, if possible. Switches to connected state\n"
+"if successful. To change or set the X display use \\\"Displays -> display\\\"\n"
+"\"\n"
+"\n"
+" set helptext(ping) \"\n"
+"Check if x11vnc still responds to \\\"ping\\\" remote command.\n"
+"\"\n"
+"\n"
+" set helptext(update-all) \"\n"
+"Query the x11vnc server for the current values of all variables.\n"
+"Populate the values into the gui's database.\n"
+"\"\n"
+"\n"
+" set helptext(clear-all) \"\n"
+"Forget any variable settings either entered in by you or retrieved\n"
+"from a running x11vnc server. Basically sets everything to 0 or\n"
+"the string (unset).\n"
+"\"\n"
+"\n"
+" set helptext(all-settings) \"\n"
+"Displays the gui's database of all of the x11vnc server's current\n"
+"settings. Use \\\"Actions -> update-all\\\" or \\\"Control+R\\\" to\n"
+"refresh this list if it ever gets out of sync.\n"
+"\"\n"
+"\n"
+" set helptext(remote-cmd) \"\n"
+"Run a remote command (-R) or query (-Q) directly. Only a few\n"
+"remote commands are not on a menu, but for those few you can\n"
+"run the command directly this way. Just enter the command into\n"
+"the Entry box when prompted. Use the prefix \\\"Q:\\\" to indicate\n"
+"a -Q query. Examples: \\\"zero:20,20,100,100\\\", \\\"Q:ext_xfixes\\\" \n"
+"\"\n"
+"\n"
+" set helptext(Quit) \"\n"
+"Terminate the tkx11vnc gui. Any x11vnc servers will be left running.\n"
+"\"\n"
+"\n"
+" set helptext(current) \"\n"
+"Shows a menu of currently connected VNC clients on the x11vnc server.\n"
+"\n"
+"Allows you to find more information about them or disconnect them.\n"
+"You will be prompted to confirm any disconnections.\n"
+"\"\n"
+"\n"
+" set helptext(xrandr_mode) \"\n"
+"Set the -xrandr mode value.\n"
+"\"\n"
+"\n"
+" set helptext(all) $helpall\n"
+"\n"
+" set helptext(gui) \"\n"
+"tkx11vnc is a simple frontend to x11vnc. Nothing fancy, it merely\n"
+"provides an interface to each of the many x11vnc command line options and\n"
+"remote control commands. See \\\"Help -> all\\\" for much info about x11vnc.\n"
+"\n"
+"Most menu items have a (?) button one can click on to get more information\n"
+"about the option or command. In most cases it will be text extracted\n"
+"from that in \\\"Help -> all\\\".\n"
+"\n"
+"There are two states tkx11vnc can be in:\n"
+"\n"
+" 1) Available to control a running x11vnc process.\n"
+" 2) Getting ready to start a x11vnc process.\n"
+"\n"
+"In state 1) the Menu items available in the menus are those that\n"
+"correspond to the x11vnc \\\"remote control\\\" commands. See the -remote\n"
+"entry under \\\"Help -> all\\\" for a complete list. Also available is\n"
+"the \\\"Actions -> stop\\\" item to shut down the running x11vnc server,\n"
+"thereby changing to state 2). One could also simply \\\"Actions -> detach\\\"\n"
+"leaving the x11vnc server running. \\\"Actions -> attach\\\" would\n"
+"reestablish the connection.\n"
+"\n"
+"In state 2) the Menu items available in the menus (Actions, Clients,\n"
+"etc.) are those that correspond to command line options used in starting\n"
+"an x11vnc process, and the \\\"Actions -> start\\\" item executes\n"
+"x11vnc thereby changing to state 1). To see what x11vnc startup command\n"
+"you have built so far, look at the (?) help for \\\"Actions -> start\\\"\n"
+"and it will show you what the command looks like.\n"
+"\n"
+"There is much overlap between the menu items available in state 1)\n"
+"and state 2), but it is worth keeping in mind it is not 100%.\n"
+"For example, you cannot set passwords or password files in state 1).\n"
+"\n"
+"Also note that there may be *two* separate X displays involved, not just\n"
+"one: 1) the X display x11vnc will be polling (and making available to\n"
+"VNC viewers), and 2) the X display this GUI is intended to display on.\n"
+"For example, one might use ssh to access the remote machine where the\n"
+"GUI would display on :11 and x11vnc would poll display :0.\n"
+"\n"
+"\n"
+"GUI components: \n"
+"--- ----------\n"
+"\n"
+"At the top of the gui is a info text label where information will\n"
+"be posted, e.g. when traversing menu items text indicating how to get\n"
+"help on the item and its current value will be displayed.\n"
+"\n"
+"Below the info label is the area where the menu buttons, Actions,\n"
+"Clients, etc., are presented. If a menu item has a checkbox,\n"
+"it corresponds to a boolean on/off variable. Otherwise it is\n"
+"either a string variable, or an action not associated with a\n"
+"variable (for the most part).\n"
+"\n"
+"Below the menu button area is a text label indicating the current x11vnc\n"
+"X display being polled and the corresponding VNC display name. Both\n"
+"will be \\\"(*none*)\\\" when there is no connection established.\n"
+"\n"
+"Below the x11 and vnc displays text label is a text area there scrolling\n"
+"information about actions being taken and commands being run is displayed.\n"
+"To scroll use PageUp/PageDown or the arrow keys.\n"
+"\n"
+"At the bottom is an entry area. When one selects a menu item that\n"
+"requires supplying a string value, the label will be set to the\n"
+"parameter name and one types in the new value. Then one presses the\n"
+"\\\"OK\\\" button or presses \\\"Enter\\\" to set the value. Or you can press\n"
+"\\\"Skip\\\" or \\\"Escape\\\" to avoid changing the variable. Some variables\n"
+"are boolean toggles (for example, \\\"Permissions -> viewonly\\\") or Radio\n"
+"button selections. Selecting these menu items will not activate the\n"
+"entry area but rather toggle the variable directly.\n"
+"\n"
+"Cascades: There is a bug not yet worked around for the cascade menus\n"
+"where the (?) help button gets in the way. To get the mouse over to\n"
+"the cascade menu click and release mouse to activate the cascade, then\n"
+"you can click on its items. Dragging with a mouse button held down\n"
+"will not work (sorry).\n"
+"\n"
+"Key Bindings:\n"
+"\n"
+" In the Text Area: Control-/ selects all of the text.\n"
+" Anywhere: Control-d invokes \\\"Actions -> detach\\\"\n"
+" Anywhere: Control-a invokes \\\"Actions -> attach\\\"\n"
+" Anywhere: Control-p invokes \\\"Actions -> ping\\\"\n"
+" Anywhere: Control-u and Control-r invoke \\\"Actions -> update-all\\\"\n"
+"\n"
+"\"\n"
+"}\n"
+"\n"
+"proc center_win {w} {\n"
+" wm withdraw $w\n"
+" set x [expr [winfo screenwidth $w]/2 - [winfo reqwidth $w]/2];\n"
+" set y [expr [winfo screenheight $w]/2 - [winfo reqheight $w]/2];\n"
+" wm geom $w +$x+$y\n"
+" wm deiconify $w\n"
+" update\n"
+"}\n"
+"\n"
+"proc textwidth {text} {\n"
+" set min 0;\n"
+" foreach line [split $text \"\\n\"] {\n"
+" set n [string length $line]\n"
+" if {$n > $min} {\n"
+" set min $n\n"
+" }\n"
+" }\n"
+" return $min\n"
+"}\n"
+"\n"
+"proc textheight {text} {\n"
+" set count 0;\n"
+" foreach line [split $text \"\\n\"] {\n"
+" incr count\n"
+" }\n"
+" return $count\n"
+"}\n"
+"\n"
+"proc make_toplevel {w {title \"\"}} {\n"
+" catch {destroy $w}\n"
+" toplevel $w;\n"
+" bind $w <Escape> \"destroy $w\"\n"
+" if {$title != \"\"} {\n"
+" wm title $w $title\n"
+" }\n"
+"}\n"
+"\n"
+"proc textwin {name title text} {\n"
+" global max_text_height max_text_width\n"
+" global bfont\n"
+"\n"
+" set width [textwidth $text]\n"
+" incr width\n"
+" if {$width > $max_text_width} {\n"
+" set width $max_text_width\n"
+" }\n"
+" set height [textheight $text]\n"
+" if {$height > $max_text_height} {\n"
+" set height $max_text_height\n"
+" }\n"
+"\n"
+" set w \".text_$name\"\n"
+" make_toplevel $w $title\n"
+"\n"
+" frame $w.f -bd 0;\n"
+" pack $w.f -fill both -expand 1\n"
+" text $w.f.t -width $width -height $height -setgrid 1 -bd 2 \\\n"
+" -yscrollcommand \"$w.f.y set\" -relief ridge -font fixed;\n"
+" scrollbar $w.f.y -orient v -relief sunken -command \"$w.f.t yview\";\n"
+" button $w.f.b -text \"Dismiss\" -command \"destroy $w\" -font $bfont\n"
+"\n"
+" $w.f.t insert 1.0 $text;\n"
+"\n"
+" bind $w <Enter> \"focus $w.f.t\"\n"
+"\n"
+" wm withdraw $w\n"
+" pack $w.f.b -side bottom -fill x \n"
+" pack $w.f.y -side right -fill y;\n"
+" pack $w.f.t -side top -fill both -expand 1;\n"
+" update\n"
+"\n"
+" center_win $w\n"
+"}\n"
+"\n"
+"proc active_when_connected {item} {\n"
+" global helpremote helptext\n"
+"\n"
+" if {[opt_match G $item]} {\n"
+" return 1\n"
+" } elseif {[is_action $item]} {\n"
+" if {[opt_match R $item]} {\n"
+" return 1\n"
+" } else {\n"
+" return 0\n"
+" }\n"
+" } elseif {[info exists helpremote($item)]} {\n"
+" return 1\n"
+" } else {\n"
+" return 0\n"
+" }\n"
+"}\n"
+"\n"
+"proc active_when_starting {item} {\n"
+" global helpremote helptext\n"
+"\n"
+" if {[opt_match G $item]} {\n"
+" return 1\n"
+" } elseif {[is_action $item]} {\n"
+" if {[opt_match S $item]} {\n"
+" return 1\n"
+" } else {\n"
+" return 0\n"
+" }\n"
+" } elseif {[info exists helptext($item)]} {\n"
+" return 1\n"
+" } else {\n"
+" return 0\n"
+" }\n"
+"}\n"
+"\n"
+"proc help_win {item} {\n"
+" global helptext helpremote\n"
+" global query_ans query_aro;\n"
+"\n"
+" set ok 0\n"
+" set text \"Help on $item:\\n\\n\"\n"
+"\n"
+" if {[is_gui_internal $item]} {\n"
+" ;\n"
+" } elseif {[is_action $item]} {\n"
+" append text \" + Is a remote control Action (cannot be set).\\n\";\n"
+" } elseif {[active_when_connected $item]} {\n"
+" append text \" + Can be changed in a running x11vnc.\\n\";\n"
+" } else {\n"
+" append text \" - Cannot be changed in a running x11vnc.\\n\";\n"
+" }\n"
+" if {[is_gui_internal $item]} {\n"
+" ;\n"
+" } elseif {[active_when_starting $item]} {\n"
+" append text \" + Can be set at x11vnc startup.\\n\";\n"
+" } else {\n"
+" append text \" - Cannot be set at x11vnc startup.\\n\";\n"
+" }\n"
+" append text \"\\n\"\n"
+"\n"
+" if {[info exists helptext($item)]} {\n"
+" append text \"\\n\"\n"
+" if {[is_gui_internal $item]} {\n"
+" append text \"==== x11vnc help: ====\\n\";\n"
+" } else {\n"
+" append text \"==== x11vnc startup option help: ====\\n\";\n"
+" }\n"
+" append text \"\\n\"\n"
+" append text $helptext($item)\n"
+" append text \"\\n\"\n"
+" set ok 1\n"
+" }\n"
+"\n"
+" if {[info exists helpremote($item)]} {\n"
+" append text \"\\n\"\n"
+" append text \"==== x11vnc remote control help: ====\\n\";\n"
+" append text \"\\n\"\n"
+" append text $helpremote($item)\n"
+" set ok 1\n"
+" }\n"
+"\n"
+" if {$item == \"start\"} {\n"
+" set str [get_start_x11vnc_txt]\n"
+" append text $str\n"
+" append_text \"$str\\n\"\n"
+" }\n"
+"\n"
+" regsub -all { } $item \" \" name\n"
+"\n"
+" if {$ok} {\n"
+" textwin $name \"x11vnc help: $item\" \"$text\";\n"
+" }\n"
+" return $ok\n"
+"}\n"
+"\n"
+"proc parse_help {} {\n"
+" global env x11vnc_prog;\n"
+" global helpall helptext;\n"
+"\n"
+" set helppipe [open \"| $x11vnc_prog -help\" \"r\"];\n"
+" if {$helppipe == \"\"} {\n"
+" puts stderr \"failed to run $x11vnc_prog -help\";\n"
+" exit 1;\n"
+" }\n"
+"\n"
+" set sawopts 0;\n"
+" set curropt \"\";\n"
+" while {[gets $helppipe line] > -1} {\n"
+" append helpall \"$line\\n\" \n"
+"\n"
+" # XXX\n"
+" if {[regexp {^Options:} $line]} {\n"
+" set sawopts 1;\n"
+" continue;\n"
+" }\n"
+" # XXX\n"
+" if {[regexp {^These options} $line]} {\n"
+" continue;\n"
+" }\n"
+"\n"
+" if {! $sawopts} {\n"
+" continue;\n"
+" }\n"
+" if {[regexp {^-([A-z_][A-z_]*)} $line match name]} {\n"
+" set allnames($name) 1;\n"
+" if {\"$curropt\" != \"no$name\" && \"no$curropt\" != \"$name\"} {\n"
+" set curropt $name;\n"
+" set helptext($curropt) \"$line\\n\";\n"
+" } else {\n"
+" append helptext($curropt) \"$line\\n\";\n"
+" }\n"
+" } elseif {$curropt != \"\"} {\n"
+" append helptext($curropt) \"$line\\n\";\n"
+" }\n"
+" }\n"
+" foreach name [array names allnames] {\n"
+" if {[regexp {^no} $name]} {\n"
+" regsub {^no} $name \"\" pair\n"
+" } else {\n"
+" set pair \"no$name\"\n"
+" }\n"
+" if {[info exists helptext($name)]} {\n"
+" if ![info exists helptext($pair)] {\n"
+" set helptext($pair) $helptext($name);\n"
+" }\n"
+" } elseif {[info exists helptext($pair)]} {\n"
+" if ![info exists helptext($name)] {\n"
+" set helptext($name) $helptext($pair);\n"
+" }\n"
+" }\n"
+" }\n"
+"\n"
+" set_internal_help\n"
+"}\n"
+"\n"
+"proc tweak_both {new old} {\n"
+" tweak_help $new $old\n"
+" tweak_remote_help $new $old\n"
+"}\n"
+"\n"
+"proc tweak_remote_help {new old} {\n"
+" global helpremote\n"
+" if ![info exists helpremote($new)] {\n"
+" if {[info exists helpremote($old)]} {\n"
+" set helpremote($new) $helpremote($old)\n"
+" }\n"
+" }\n"
+"}\n"
+"\n"
+"proc tweak_help {new old} {\n"
+" global helptext\n"
+" if ![info exists helptext($new)] {\n"
+" if {[info exists helptext($old)]} {\n"
+" set helptext($new) $helptext($old)\n"
+" }\n"
+" }\n"
+"}\n"
+"\n"
+"proc parse_remote_help {} {\n"
+" global helpremote helptext help_indent remote_name;\n"
+"\n"
+" set sawopts 0;\n"
+" set curropt \"\";\n"
+" set possopts \"\";\n"
+" set offset [expr $help_indent - 1];\n"
+" foreach line [split $helptext(remote) \"\\n\"] {\n"
+" \n"
+" set line [string range $line $offset end];\n"
+"\n"
+" # XXX\n"
+" if {[regexp {^The following -remote/-R commands} $line]} {\n"
+" set sawopts 1;\n"
+" continue;\n"
+" }\n"
+" # XXX\n"
+" if {[regexp {^The vncconnect.*command} $line]} {\n"
+" set sawopts 0;\n"
+" }\n"
+"\n"
+" if {! $sawopts} {\n"
+" continue;\n"
+" }\n"
+" if {[regexp {^([A-z_][A-z_:]*)} $line match name]} {\n"
+" regsub {:.*$} $name \"\" popt\n"
+" lappend possopts $popt\n"
+" if {\"$curropt\" != \"no$name\" && \"no$curropt\" != \"$name\"} {\n"
+" set curropt $name;\n"
+" regsub {:.*$} $curropt \"\" curropt\n"
+" set remote_name($curropt) $name\n"
+" set helpremote($curropt) \"$line\\n\";\n"
+" } else {\n"
+" append helpremote($curropt) \"$line\\n\";\n"
+" }\n"
+" } elseif {$curropt != \"\"} {\n"
+" append helpremote($curropt) \"$line\\n\";\n"
+" }\n"
+" }\n"
+"\n"
+" foreach popt $possopts {\n"
+" if {[info exists helpremote($popt)]} {\n"
+" continue\n"
+" }\n"
+" if {[regexp {^no} $popt]} {\n"
+" regsub {^no} $popt \"\" try\n"
+" } else {\n"
+" set try \"no$popt\"\n"
+" }\n"
+" if {[info exists helpremote($try)]} {\n"
+" set helpremote($popt) $helpremote($try)\n"
+" }\n"
+" }\n"
+"}\n"
+"\n"
+"proc parse_query_help {} {\n"
+" global query_ans query_aro query_ans_list query_aro_list helptext;\n"
+"\n"
+" set sawans 0;\n"
+" set sawaro 0;\n"
+" set ans_str \"\"\n"
+" set aro_str \"\"\n"
+"\n"
+" foreach line [split $helptext(query) \"\\n\"] {\n"
+"\n"
+" if {! $sawans && [regexp {^ *ans=} $line]} {\n"
+" set sawans 1\n"
+" }\n"
+" if {! $sawans} {\n"
+" continue\n"
+" }\n"
+"\n"
+" if {[regexp {^ *aro=} $line]} {\n"
+" set sawaro 1\n"
+" }\n"
+" if {$sawaro && [regexp {^[ ]*$} $line]} {\n"
+" set sawans 0\n"
+" break\n"
+" }\n"
+"\n"
+" regsub {ans=} $line \"\" line\n"
+" regsub {aro=} $line \"\" line\n"
+" set line [string trim $line]\n"
+"\n"
+" if {$sawaro} {\n"
+" set aro_str \"$aro_str $line\"\n"
+" } else {\n"
+" set ans_str \"$ans_str $line\"\n"
+" }\n"
+" }\n"
+"\n"
+" regsub -all { *} $ans_str \" \" ans_str\n"
+" regsub -all { *} $aro_str \" \" aro_str\n"
+"\n"
+" set ans_str [string trim $ans_str]\n"
+" set aro_str [string trim $aro_str]\n"
+" set query_ans_list [split $ans_str]\n"
+" set query_aro_list [split $aro_str]\n"
+"\n"
+" foreach item $query_ans_list {\n"
+" if {[regexp {^[ ]*$} $item]} {\n"
+" continue\n"
+" }\n"
+" set query_ans($item) 1\n"
+" }\n"
+" foreach item $query_aro_list {\n"
+" if {[regexp {^[ ]*$} $item]} {\n"
+" continue\n"
+" }\n"
+" set query_aro($item) 1\n"
+" }\n"
+"}\n"
+"\n"
+"proc in_debug_mode {} {\n"
+" global menu_var\n"
+" if {![info exists menu_var(debug_gui)]} {\n"
+" return 0\n"
+" }\n"
+" return $menu_var(debug_gui)\n"
+"}\n"
+"\n"
+"# Menubar utilities:\n"
+"proc menus_state {state} {\n"
+" global menu_b\n"
+"\n"
+" foreach case [array names menu_b] {\n"
+" set menu_button $menu_b($case)\n"
+" $menu_button configure -state $state\n"
+" }\n"
+"}\n"
+"\n"
+"proc menus_enable {} {\n"
+" menus_state \"normal\"\n"
+"}\n"
+"\n"
+"proc menus_disable {} {\n"
+" menus_state \"disabled\"\n"
+"}\n"
+"\n"
+"# Entry box utilities:\n"
+"proc entry_state {x state} {\n"
+" global entry_box entry_label entry_ok entry_help entry_skip entry_browse\n"
+" if {$x == \"all\"} {\n"
+" $entry_label configure -state $state\n"
+" $entry_box configure -state $state\n"
+" $entry_ok configure -state $state\n"
+" $entry_skip configure -state $state\n"
+" $entry_help configure -state $state\n"
+" $entry_browse configure -state $state\n"
+" } elseif {$x == \"label\"} {\n"
+" $entry_label configure -state $state\n"
+" } elseif {$x == \"box\"} {\n"
+" $entry_box configure -state $state\n"
+" } elseif {$x == \"ok\"} {\n"
+" $entry_ok configure -state $state\n"
+" } elseif {$x == \"skip\"} {\n"
+" $entry_skip configure -state $state\n"
+" } elseif {$x == \"help\"} {\n"
+" $entry_help configure -state $state\n"
+" } elseif {$x == \"browse\"} {\n"
+" $entry_browse configure -state $state\n"
+" }\n"
+"}\n"
+"\n"
+"proc entry_enable {{x \"all\"}} {\n"
+" entry_state $x normal\n"
+"}\n"
+"\n"
+"proc entry_disable {{x \"all\"}} {\n"
+" entry_state $x disabled\n"
+"}\n"
+"\n"
+"proc entry_browse_button {{show 1}} {\n"
+" global entry_browse\n"
+" if {$show} {\n"
+" pack $entry_browse -side left\n"
+" } else {\n"
+" pack forget $entry_browse\n"
+" }\n"
+"}\n"
+"proc entry_focus {} {\n"
+" global entry_box\n"
+" focus $entry_box\n"
+"}\n"
+"proc entry_select {} {\n"
+" global entry_box\n"
+" $entry_box selection range 0 end\n"
+"}\n"
+"proc entry_get {} {\n"
+" global entry_box\n"
+" return [$entry_box get]\n"
+"}\n"
+"proc entry_insert {str} {\n"
+" global entry_box\n"
+" entry_delete\n"
+" $entry_box insert end $str\n"
+" $entry_box icursor end\n"
+"}\n"
+"proc entry_delete {} {\n"
+" global entry_box\n"
+" $entry_box delete 0 end\n"
+"}\n"
+"\n"
+"\n"
+"# Utilities for remote control and updating vars.\n"
+"\n"
+"proc push_new_value {item name new {query 1}} {\n"
+" global menu_var always_update remote_output query_output\n"
+" global delay_sleep extra_sleep extra_sleep_split\n"
+"\n"
+" set debug [in_debug_mode]\n"
+" set do_query_all 0\n"
+" set getout 0\n"
+"\n"
+" if {$item == \"remote-cmd\"} {\n"
+" # kludge for arbitrary remote command:\n"
+" if {[regexp {^Q:} $new]} {\n"
+" # extra kludge for Q:var to mean -Q var\n"
+" regsub {^Q:} $new \"\" new\n"
+" set qonly 1\n"
+" } else {\n"
+" set qonly 0\n"
+" }\n"
+" # need to extract item from new:\n"
+" set qtmp $new\n"
+" regsub {:.*$} $qtmp \"\" qtmp\n"
+" if {! $qonly} {\n"
+" set rargs [list \"-R\" \"$new\"]\n"
+" set qargs [list \"-Q\" \"$qtmp\"]\n"
+" set getout 1\n"
+" } else {\n"
+" set rargs [list \"-Q\" \"$qtmp\"]\n"
+" set qargs [list \"-Q\" \"$qtmp\"]\n"
+" }\n"
+"\n"
+" } elseif {[value_is_string $item]} {\n"
+" set rargs [list \"-R\" \"$name:$new\"]\n"
+" set qargs [list \"-Q\" \"$name\"]\n"
+" } else {\n"
+" set rargs [list \"-R\" \"$name\"]\n"
+" set qargs [list \"-Q\" \"$name\"]\n"
+" }\n"
+"\n"
+" if {!$debug} {\n"
+" append_text \"x11vnc $rargs ...\"\n"
+" }\n"
+" set remote_output [run_remote_cmd $rargs]\n"
+"\n"
+" if {[lindex $rargs 0] == \"-Q\"} {\n"
+" append_text \"\\t$remote_output\"\n"
+" set getout 1\n"
+" } elseif {! $query && ! $always_update} {\n"
+" set getout 1\n"
+" } elseif {$item == \"noremote\"} {\n"
+" set getout 1\n"
+" } elseif {[is_action $item] && ![opt_match Q $item] && $rargs != \"\"} {\n"
+" set getout 1\n"
+" } elseif {[regexp {^(sid|id)$} $item] && ![regexp {^0x} $new]} {\n"
+" set getout 1\n"
+" }\n"
+"\n"
+" if {$getout} {\n"
+" append_text \"\\n\"\n"
+" return\n"
+" }\n"
+"\n"
+" stop_watch on\n"
+" after $delay_sleep\n"
+" if {[opt_match D $item]} {\n"
+" set s [expr $extra_sleep/$extra_sleep_split] \n"
+" append_text \" \"\n"
+" for {set i 0} {$i<$extra_sleep_split} {incr i} {\n"
+" after $s\n"
+" append_text \".\"\n"
+" update\n"
+" }\n"
+" }\n"
+" stop_watch off\n"
+"\n"
+" if {!$debug} {\n"
+" append_text \", -Q ...\"\n"
+" }\n"
+"\n"
+" if {$item == \"disconnect\"} {\n"
+" set new \"N/A\"\n"
+" set do_query_all 1\n"
+" }\n"
+"\n"
+" if {$always_update || $do_query_all} {\n"
+" set query [query_all 1]\n"
+" } else {\n"
+" set query [run_remote_cmd $qargs]\n"
+" }\n"
+" set query_output $query\n"
+"\n"
+" if {![see_if_ok $query $item \"$name:$new\"]} {\n"
+" # failed\n"
+" if {[regexp {^a..=} $query]} {\n"
+" # but some result came back\n"
+" if {! $always_update} {\n"
+" # synchronize everything\n"
+" set query_output [query_all 1]\n"
+" }\n"
+" } else {\n"
+" # server may be dead\n"
+" if {$item != \"ping\" && $item != \"attach\"} {\n"
+" try_connect\n"
+" }\n"
+" }\n"
+" } else {\n"
+" # succeeded\n"
+" if {! $always_update} {\n"
+" # synchronize this variable\n"
+" update_menu_vars $query\n"
+" } else {\n"
+" # already done in query_all\n"
+" }\n"
+" }\n"
+"}\n"
+"\n"
+"# For updating a string variable. Also used for simple OK/Skip dialogs\n"
+"# with entry = 0.\n"
+"proc entry_dialog {item {entry 1}} {\n"
+" global menu_var entry_str entry_set entry_dialog_item\n"
+" global unset_str connected_to_x11vnc\n"
+"\n"
+" set entry_str \"Set $item\"\n"
+" set entry_set 0\n"
+" set entry_dialog_item $item\n"
+"\n"
+" entry_enable\n"
+" menus_disable\n"
+"\n"
+" if {$entry} {\n"
+" entry_insert \"\"\n"
+" if {[info exists menu_var($item)] &&\n"
+" $menu_var($item) != $unset_str} {\n"
+" entry_insert $menu_var($item)\n"
+" entry_select\n"
+" }\n"
+"\n"
+" if {[is_browse $item]} {\n"
+" entry_browse_button\n"
+" }\n"
+" set_info \"Set parameter in entry box, \"\n"
+" entry_focus\n"
+" } else {\n"
+" entry_disable box\n"
+" }\n"
+"\n"
+" update\n"
+"\n"
+" # wait for user reply:\n"
+" vwait entry_set\n"
+"\n"
+" set rc $entry_set\n"
+" set entry_set 0\n"
+"\n"
+" set value [entry_get]\n"
+" update\n"
+"\n"
+" entry_browse_button 0\n"
+" set entry_str \"Set... :\"\n"
+"\n"
+" entry_delete\n"
+" entry_disable\n"
+" menus_enable\n"
+" update\n"
+"\n"
+" if {! $entry} {\n"
+" ;\n"
+" } elseif {$rc} {\n"
+" set menu_var($item) $value\n"
+" } else {\n"
+" if {[in_debug_mode]} {\n"
+" append_text \"skipped setting $item\\n\"\n"
+" }\n"
+" }\n"
+" return $rc\n"
+"}\n"
+"\n"
+"proc warning_dialog {msg {item \"gui\"} } {\n"
+" append_text $msg\n"
+" # just reuse the entry widgets for a yes/no dialog\n"
+" return [entry_dialog $item 0]\n"
+"}\n"
+"\n"
+"# For updating a boolean toggle:\n"
+"proc check_var {item} {\n"
+" global menu_var\n"
+"\n"
+" set inval $menu_var($item);\n"
+"\n"
+" if {$item == \"debug_gui\"} {\n"
+" return \"\";\n"
+" }\n"
+"\n"
+" set rname $item\n"
+" if {! $inval} {\n"
+" if {[regexp {^no} $item]} {\n"
+" regsub {^no} $rname \"\" rname\n"
+" } else {\n"
+" set rname \"no$rname\"\n"
+" }\n"
+" }\n"
+" return $rname\n"
+"}\n"
+"\n"
+"proc see_if_ok {query item expected} {\n"
+" set ok 0\n"
+" set found \"\"\n"
+" foreach q [split_query $query] {\n"
+" if {[regexp \"^$item:\" $q]} {\n"
+" set found $q\n"
+" }\n"
+" if {$q == $expected} {\n"
+" set ok 1\n"
+" }\n"
+" }\n"
+" if {$found == \"\"} {\n"
+" set msg $query\n"
+" regsub {^a..=} $msg {} msg\n"
+" if {[string length $msg] > 60} {\n"
+" set msg [string range $msg 0 60]\n"
+" }\n"
+" } else {\n"
+" set msg $found\n"
+" }\n"
+" if {$ok} {\n"
+" append_text \"\\tSet OK ($msg)\\n\"\n"
+" return 1\n"
+"\n"
+" } elseif {[opt_match P $item] && [regexp {:(-|\\+)} $expected]} {\n"
+" # e.g. blackout:+30x30+20+20\n"
+" append_text \"\\t($msg)\\n\"\n"
+" return 1\n"
+" } else {\n"
+" append_text \"\\t*FAILED* $msg\\n\"\n"
+" return 0\n"
+" }\n"
+"}\n"
+"\n"
+"proc update_menu_vars {{query \"\"}} {\n"
+" global all_settings menu_var\n"
+"\n"
+" set debug [in_debug_mode]\n"
+"\n"
+" if {$query == \"\"} {\n"
+" set qstr $all_settings\n"
+" } else {\n"
+" set qstr $query\n"
+" }\n"
+" foreach piece [split_query $qstr] {\n"
+" if {[regexp {^([^:][^:]*):(.*)$} $piece m0 item val]} {\n"
+" if {[info exists menu_var($item)]} {\n"
+" set old $menu_var($item)\n"
+" if {$val == \"N/A\"} {\n"
+" continue\n"
+" }\n"
+" if {$debug} {\n"
+" puts \"setting menuvar: $item: $old -> $val\"\n"
+" }\n"
+" set menu_var($item) $val\n"
+" }\n"
+" if {$item == \"clients\"} {\n"
+" update_clients_menu $val\n"
+" }\n"
+" }\n"
+" }\n"
+"}\n"
+"\n"
+"proc clear_all {} {\n"
+" global menu_var unset_str\n"
+"\n"
+" set debug [in_debug_mode]\n"
+" \n"
+" foreach item [array names menu_var] {\n"
+" if {$item == \"debug_gui\"} {\n"
+" continue\n"
+" }\n"
+" if {[info exists menu_var($item)]} {\n"
+" if [is_action $item] {\n"
+" set menu_var($item) \"\"\n"
+" } elseif {[value_is_bool $item]} {\n"
+" set menu_var($item) 0\n"
+" } elseif {[value_is_string $item]} {\n"
+" set menu_var($item) $unset_str\n"
+" }\n"
+" }\n"
+" }\n"
+"}\n"
+"\n"
+"proc all_query_vars {} {\n"
+" global query_ans_list query_aro_list all_settings\n"
+" \n"
+" set qry \"\"\n"
+" foreach item $query_ans_list {\n"
+" if {$qry == \"\"} {\n"
+" set qry $item\n"
+" } else {\n"
+" append qry \",$item\"\n"
+" }\n"
+" }\n"
+" foreach item $query_aro_list {\n"
+" if {$qry == \"\"} {\n"
+" set qry $item\n"
+" } else {\n"
+" append qry \",$item\"\n"
+" }\n"
+" }\n"
+" return $qry\n"
+"}\n"
+"\n"
+"proc query_all {{quiet 0}} {\n"
+" global query_ans_list query_aro_list all_settings\n"
+"\n"
+" set qry [all_query_vars]\n"
+"\n"
+" #puts \"into query_all $quiet\"\n"
+"\n"
+" set qargs [list \"-Q\" $qry]\n"
+" set all [run_remote_cmd $qargs]\n"
+"\n"
+" if {[regexp {ans=} $all]} {\n"
+" if {! $quiet} {\n"
+" append_text \"Retrieved all settings.\\n\"\n"
+" }\n"
+" set all_settings $all\n"
+" update_menu_vars $all\n"
+" } else {\n"
+" if {! $quiet} {\n"
+" append_text \"Failed to retrieve settings.\\n\"\n"
+" }\n"
+" }\n"
+" return $all\n"
+"}\n"
+"\n"
+"proc set_info {str} {\n"
+" global info_str\n"
+" set info_str \"$str\"\n"
+" update\n"
+"}\n"
+"\n"
+"proc append_text {str} {\n"
+" global text_area\n"
+" $text_area insert end $str\n"
+" $text_area see end\n"
+"}\n"
+"\n"
+"proc show_all_settings {} {\n"
+" global all_settings\n"
+" set txt \"\\nRead-Write setting:\\n\\n\"\n"
+" foreach item [split_query $all_settings] {\n"
+" regsub {:} $item {: } item\n"
+" append txt \" $item\\n\"\n"
+" if {[regexp {noremote} $item]} {\n"
+" append txt \"\\nRead-Only setting:\\n\\n\"\n"
+" }\n"
+" }\n"
+" textwin \"Settings\" \"All Current Settings\" $txt\n"
+"}\n"
+"\n"
+"proc set_connected {yesno} {\n"
+" global connected_to_x11vnc\n"
+" set orig $connected_to_x11vnc\n"
+" \n"
+" if {$yesno == \"yes\"} {\n"
+" set connected_to_x11vnc 1\n"
+" } else {\n"
+" set connected_to_x11vnc 0\n"
+" no_x11_display\n"
+" no_vnc_display\n"
+" }\n"
+" if {$orig != $connected_to_x11vnc} {\n"
+" set_widgets\n"
+" }\n"
+"}\n"
+"\n"
+"proc detach_from_display {} {\n"
+" global connected_to_x11vnc reply_xdisplay x11vnc_xdisplay\n"
+" set str \"Detaching from X display.\"\n"
+" if {$reply_xdisplay != \"\"} {\n"
+" set str \"Detaching from $reply_xdisplay.\"\n"
+" } elseif {$x11vnc_xdisplay != \"\"} {\n"
+" set str \"Detaching from $x11vnc_xdisplay.\"\n"
+" }\n"
+" if {$connected_to_x11vnc} {\n"
+" append_text \"$str\\n\"\n"
+" }\n"
+" set_connected no\n"
+"}\n"
+"\n"
+"# Menu item is an action:\n"
+"proc do_action {item} {\n"
+" global menu_var connected_to_x11vnc\n"
+"\n"
+" if {[in_debug_mode]} {\n"
+" append_text \"action: \\\"$item\\\"\\n\"\n"
+" }\n"
+"\n"
+" if {$item == \"ping\"} {\n"
+" try_connect\n"
+" return\n"
+" } elseif {$item == \"start\"} {\n"
+" start_x11vnc\n"
+" return\n"
+" } elseif {$item == \"detach\"} {\n"
+" detach_from_display\n"
+" return\n"
+" } elseif {$item == \"attach\"} {\n"
+" try_connect_and_query_all\n"
+" return\n"
+" } elseif {$item == \"update-all\"} {\n"
+" query_all\n"
+" return\n"
+" } elseif {$item == \"clear-all\"} {\n"
+" clear_all\n"
+" return\n"
+" } elseif {$item == \"all-settings\"} {\n"
+" show_all_settings\n"
+" return\n"
+" }\n"
+"\n"
+" if {[value_is_string $item]} {\n"
+" if {! [entry_dialog $item]} {\n"
+" return\n"
+" }\n"
+" set new $menu_var($item)\n"
+" set name $item\n"
+" } else {\n"
+" set new 1\n"
+" set name $item\n"
+" }\n"
+"\n"
+" if {! $connected_to_x11vnc} {\n"
+" ;\n"
+" } elseif {[regexp {^(stop|quit|exit|shutdown)$} $item]} {\n"
+" # just do -R\n"
+" append_text \"stopping remote x11vnc server...\\n\"\n"
+" push_new_value $item $name $new 0\n"
+" set_connected no\n"
+" \n"
+" } elseif [opt_match Q $item] {\n"
+" push_new_value $item $name $new 1\n"
+" } else {\n"
+" push_new_value $item $name $new 0\n"
+" }\n"
+"}\n"
+"\n"
+"proc do_var {item} {\n"
+" global connected_to_x11vnc item_cascade menu_var\n"
+"\n"
+" set string 0\n"
+" if {[is_action $item]} {\n"
+" # Menu item is action:\n"
+" do_action $item\n"
+" return\n"
+" }\n"
+"\n"
+" if {[value_is_string $item]} {\n"
+" # Menu item is a string:\n"
+" if {$item_cascade($item) != \"\"} {\n"
+" # Cascade sets variable automatically\n"
+" } else {\n"
+" # Otherwise Entry box\n"
+" if {![entry_dialog $item]} {\n"
+" return\n"
+" }\n"
+" }\n"
+" set new $menu_var($item)\n"
+" set name $item\n"
+" } else {\n"
+" # Menu item is a boolean:\n"
+" set name [check_var $item]\n"
+" if {$name == \"\"} {\n"
+" return\n"
+" }\n"
+" set new 1\n"
+" }\n"
+" if {$connected_to_x11vnc} {\n"
+" push_new_value $item $name $new 1\n"
+" }\n"
+"}\n"
+"\n"
+"proc menu_help {item} {\n"
+" if ![help_win $item] {\n"
+" textwin \"nohelp\" \"No help available\" \\\n"
+" \"Sorry, no help avaiable for \\\"$item\\\"\"\n"
+" }\n"
+"}\n"
+"\n"
+"proc opt_match {c item} {\n"
+" global item_opts\n"
+" if {[info exists item_opts($item)]} {\n"
+" if {[regexp \"^\\[A-z\\]*$c\" $item_opts($item)]} {\n"
+" return 1\n"
+" }\n"
+" }\n"
+" return 0\n"
+"}\n"
+"\n"
+"proc is_action {item} {\n"
+" return [opt_match A $item]\n"
+"}\n"
+"\n"
+"proc is_gui_internal {item} {\n"
+" return [opt_match G $item]\n"
+"}\n"
+"\n"
+"proc is_browse {item} {\n"
+" return [opt_match F $item]\n"
+"}\n"
+"\n"
+"proc value_is_string {item} {\n"
+" global item_bool\n"
+" if {! $item_bool($item)} {\n"
+" return 1\n"
+" } else {\n"
+" return 0\n"
+" }\n"
+"}\n"
+"\n"
+"proc value_is_bool {item} {\n"
+" global item_bool\n"
+" if {$item_bool($item)} {\n"
+" return 1\n"
+" } else {\n"
+" return 0\n"
+" }\n"
+"}\n"
+"\n"
+"proc split_query {query} {\n"
+" regsub -all {aro=} $query {ans=} query\n"
+" set items {}\n"
+" while {1} {\n"
+" if {! [regexp {^ans=(.*)$} $query m0 m1]} {\n"
+" break\n"
+" }\n"
+" set item $m1\n"
+" set m2 \"\"\n"
+" regexp {,ans=.*$} $item m2\n"
+" regsub {,ans=.*$} $item \"\" item\n"
+" if {$item != \"\"} {\n"
+" lappend items $item\n"
+" }\n"
+" set query $m2\n"
+" regsub {^,} $query \"\" query\n"
+" }\n"
+" return $items\n"
+"}\n"
+"\n"
+"proc set_x11_display {name} {\n"
+" global x11_display\n"
+" set x11_display \"x11vnc X display: $name\"\n"
+"}\n"
+"proc set_vnc_display {name} {\n"
+" global vnc_display\n"
+" set vnc_display \"VNC display: $name\"\n"
+"}\n"
+"proc no_x11_display {} {\n"
+" set_x11_display \"(*none*)\"\n"
+"}\n"
+"proc no_vnc_display {} {\n"
+" set_vnc_display \"(*none*)\"\n"
+"}\n"
+"proc fetch_displays {} {\n"
+"\n"
+" set qargs [list \"-Q\" \"display,vncdisplay\"]\n"
+" set result [run_remote_cmd $qargs]\n"
+"\n"
+" set got_x11 0\n"
+" set got_vnc 0\n"
+"\n"
+" foreach item [split_query $result] {\n"
+" if {[regexp {^display:(.*)$} $item m0 m1]} {\n"
+" set_x11_display $m1\n"
+" set got_x11 1\n"
+" } elseif {[regexp {^vncdisplay:(.*)$} $item m0 m1]} {\n"
+" set_vnc_display $m1\n"
+" set got_vnc 1\n"
+" }\n"
+" }\n"
+" if {! $got_x11} {\n"
+" no_x11_display\n"
+" }\n"
+" if {! $got_vnc} {\n"
+" no_vnc_display\n"
+" }\n"
+"}\n"
+"\n"
+"proc disconnect_dialog {client} {\n"
+" set cid \"\"\n"
+" set host \"\"\n"
+" set msg \"\\n\"\n"
+" append msg \"*** Client info string: $client\\n\"\n"
+" if {[regexp {^(.*):(.*)/(.*)-(.*)$} $client m0 m1 m2 m3 m4]} {\n"
+" if {$m4 == \"ro\"} {\n"
+" set view \"(viewonly)\"\n"
+" } else {\n"
+" set view \"(interactive)\"\n"
+" }\n"
+" set host $m1\n"
+" set cid $m3\n"
+" append msg \"*** Host: $m1, Port: $m2 Id: $m3 $view\\n\"\n"
+" }\n"
+" if {$cid == \"\"} {\n"
+" append_text \"Invalid client info string: $client\\n\"\n"
+" return\n"
+" }\n"
+" append msg \"*** To disconnect this client press \\\"OK\\\", otherwise press \\\"Skip\\\"\\n\"\n"
+" bell\n"
+" if [warning_dialog $msg \"current\"] {\n"
+" push_new_value \"disconnect\" \"disconnect\" $cid 1\n"
+" } else {\n"
+" append_text \"disconnect cancelled.\\n\"\n"
+" }\n"
+"}\n"
+"\n"
+"proc update_clients_menu {list} {\n"
+" global item_cascade\n"
+" set subm $item_cascade(current);\n"
+" catch {destroy $subm}\n"
+" menu $subm -tearoff 0\n"
+" $subm add command\n"
+" $subm add separator\n"
+" set count 0\n"
+" foreach client [split $list \",\"] {\n"
+" regsub {:[0-9][0-9]*/} $client {/} lab\n"
+" $subm add command -label \"$client\" \\\n"
+" -command \"disconnect_dialog $client\"\n"
+" incr count\n"
+" }\n"
+" $subm entryconfigure 0 -label \"#clients: $count\"\n"
+"}\n"
+"\n"
+"proc set_widgets {} {\n"
+" global connected_to_x11vnc item_case item_entry menu_m\n"
+"\n"
+" foreach item [array names item_case] {\n"
+" set case $item_case($item)\n"
+" set menu $menu_m($case)\n"
+" set entry $item_entry($item)\n"
+" set type [$menu type $entry]\n"
+" if {$type == \"separator\" || $type == \"tearoff\"} {\n"
+" continue\n"
+" }\n"
+" if {$connected_to_x11vnc} {\n"
+" if {[active_when_connected $item]} {\n"
+" $menu entryconfigure $entry -state normal\n"
+" } else {\n"
+" $menu entryconfigure $entry -state disabled\n"
+" }\n"
+" } else {\n"
+" if {[active_when_starting $item]} {\n"
+" $menu entryconfigure $entry -state normal\n"
+" } else {\n"
+" $menu entryconfigure $entry -state disabled\n"
+" }\n"
+" }\n"
+" }\n"
+"}\n"
+"\n"
+"proc make_widgets {} {\n"
+" global template \n"
+" global menu_b menu_m\n"
+" global item_opts item_bool item_case item_entry menu_var unset_str\n"
+" global item_cascade\n"
+" global info_str x11_display vnc_display\n"
+" global text_area\n"
+" global entry_box entry_str entry_set entry_label entry_ok entry_browse\n"
+" global entry_help entry_skip\n"
+" global bfont\n"
+" global helptext helpremote helplabel\n"
+"\n"
+"set v 0\n"
+" \n"
+" label .info -textvariable info_str -bd 2 -relief groove -anchor w \n"
+" pack .info -side top -fill x \n"
+"\n"
+" # Extract the Rows:\n"
+" set row 0;\n"
+" set colmax 0;\n"
+" foreach line [split $template \"\\n\"] {\n"
+" if {[regexp {^Row: (.*)} $line rest]} {\n"
+" set col 0\n"
+" foreach case [split $rest] {\n"
+" if {$case == \"\" || $case == \"Row:\"} {\n"
+" continue\n"
+" }\n"
+" set menu_row($case) $row\n"
+" set menu_col($case) $col\n"
+" set menu_count($case) 0\n"
+"\n"
+" lappend cases($col) $case;\n"
+" set len [string length $case]\n"
+" if {[info exists max_len($col)]} {\n"
+" if {$len > $max_len($col)} {\n"
+" set max_len($col) $len\n"
+" }\n"
+" } else {\n"
+" set max_len($col) $len\n"
+" }\n"
+" incr col\n"
+" if {$col > $colmax} {\n"
+" set colmax $col\n"
+" }\n"
+" }\n"
+" incr row;\n"
+" }\n"
+" }\n"
+"\n"
+" # Make frames for the rows and make the menu buttons.\n"
+" set f \".menuframe\"\n"
+" frame $f\n"
+" for {set c 0} {$c < $colmax} {incr c} {\n"
+" set colf \"$f.menuframe$c\"\n"
+" frame $colf\n"
+" pack $colf -side left -fill y\n"
+" set fbg [$colf cget -background]\n"
+" foreach case $cases($c) {\n"
+" set menub \"$colf.menu$case\";\n"
+" set menu \"$colf.menu$case.menu\";\n"
+" set menu_b($case) $menub\n"
+" set menu_m($case) $menu\n"
+" menubutton $menub -text \"$case\" -underline 0 \\\n"
+" -anchor w -menu $menu -background $fbg \\\n"
+" -font $bfont\n"
+" pack $menub -side top -fill x\n"
+" menu $menu -tearoff 0\n"
+" }\n"
+" }\n"
+" pack $f -side top -fill x\n"
+"\n"
+" # Now extract the menu items:\n"
+" set case \"\";\n"
+" foreach line [split $template \"\\n\"] {\n"
+" if {[regexp {^Row:} $line]} {\n"
+" continue\n"
+" }\n"
+" if {[regexp {^[A-z]} $line]} {\n"
+" set case [string trim $line]\n"
+" continue;\n"
+" }\n"
+" set item [string trim $line]\n"
+" regsub -all { *} $item \" \" item\n"
+" if {$item == \"\"} {\n"
+" continue;\n"
+" }\n"
+" set opts \"\"\n"
+" if {[regexp {^=} $item]} {\n"
+" set opts [lindex [split $item] 0]\n"
+" regsub {^=} $opts \"\" opts\n"
+" set item [lindex [split $item] 1]\n"
+" }\n"
+" if {[regexp {^0} $opts]} {\n"
+" continue;\n"
+" }\n"
+" if {[regexp {:$} $item]} {\n"
+" set bool 0\n"
+" } else {\n"
+" set bool 1\n"
+" }\n"
+" regsub {:$} $item {} item\n"
+"\n"
+" set item_opts($item) $opts\n"
+" set item_case($item) $case\n"
+" set item_bool($item) $bool\n"
+" set item_cascade($item) \"\"\n"
+" set item_entry($item) $menu_count($case)\n"
+"\n"
+"if {$v} { puts \"ITEM: $item - $opts - $case - $bool - $menu_count($case)\" }\n"
+"\n"
+" set mvar 0 \n"
+" set m $menu_m($case)\n"
+"\n"
+" # Create the menu items, its variables, etc., etc.\n"
+"\n"
+" if {$item == \"--\"} {\n"
+" $m add separator\n"
+"\n"
+" } elseif {$item == \"Quit\"} {\n"
+" # Quit item must shut us down:\n"
+" $m add command -label \"$item\" -underline 0 \\\n"
+" -command {destroy .; exit 0}\n"
+"\n"
+" } elseif {$case == \"Help\"} {\n"
+" # Help is simple help:\n"
+" $m add command -label \"$item\" \\\n"
+" -command \"menu_help $item\"\n"
+"\n"
+" } elseif {$item == \"current\"} {\n"
+" # Current clients cascade\n"
+" set subm $m.cascade$menu_count($case)\n"
+" set item_cascade($item) $subm\n"
+" update_clients_menu \"\"\n"
+" $m add cascade -label \"$item\" \\\n"
+" -menu $subm\n"
+"\n"
+" } elseif {[is_action $item]} {\n"
+" # Action\n"
+" $m add command -label \"$item\" \\\n"
+" -command \"do_var $item\"\n"
+" set menu_var($item) \"\"; # for convenience\n"
+"\n"
+" } elseif {! $item_bool($item)} {\n"
+" # String\n"
+" if {[regexp -- {-C:(.*)} $item_opts($item) m0 m1]} {\n"
+" # Radiobutton select\n"
+" set subm $m.cascade$menu_count($case)\n"
+" menu $subm -tearoff 0\n"
+" foreach val [split $m1 \",\"] {\n"
+" $subm add radiobutton -label \"$val\" \\\n"
+" -command \"do_var $item\" \\\n"
+" -value \"$val\" \\\n"
+" -variable menu_var($item)\n"
+" }\n"
+" $m add cascade -label \"$item\" \\\n"
+" -menu $subm\n"
+" set item_cascade($item) $subm\n"
+" } else {\n"
+" # Arbitrary_string\n"
+" $m add command -label \"$item\" \\\n"
+" -command \"do_var $item\"\n"
+" }\n"
+" set mvar 1\n"
+"\n"
+" } else {\n"
+" # Boolean\n"
+" $m add checkbutton -label \"$item\" \\\n"
+" -command \"do_var $item\" \\\n"
+" -variable menu_var($item)\n"
+" set menu_var($item) 0\n"
+" }\n"
+"\n"
+" incr menu_count($case)\n"
+" if {$mvar} {\n"
+" set menu_var($item) $unset_str\n"
+" }\n"
+" }\n"
+"\n"
+" # Now make the litte \"(?)\" help buttons\n"
+" foreach case [array names menu_m] {\n"
+" if {$case == \"Help\"} {\n"
+" continue;\n"
+" }\n"
+" set m $menu_m($case);\n"
+" set n [$m index end]\n"
+"\n"
+"if {$v} { puts \"$case end: $n\" }\n"
+"\n"
+" for {set i 0} {$i <= $n} {incr i} {\n"
+" set type [$m type $i]\n"
+" if {$type == \"separator\"} {\n"
+" $m add separator\n"
+" } elseif {$type == \"tearoff\"} {\n"
+" continue;\n"
+" } else {\n"
+" set label [$m entrycget $i -label]\n"
+" set str \"\"\n"
+" if {[info exists helpremote($label)]} {\n"
+" set str \"(?)\"\n"
+" } elseif {[info exists helptext($label)]} {\n"
+" set str \"(?)\"\n"
+" }\n"
+" $m add command -label $str \\\n"
+" -command \"menu_help $label\";\n"
+"\n"
+"if {$v} {\n"
+" set ht \"\"; set hr \"\"\n"
+" if {[info exists helptext($label)]} { set ht \"YES\" }\n"
+" if {[info exists helpremote($label)]} { set hr \"YES\" }\n"
+" puts \"'$label'\\tht='$ht' hr='$hr'\"\n"
+"}\n"
+"\n"
+" if {$str == \"\"} {\n"
+" $m entryconfigure end -state disabled\n"
+" }\n"
+" set arg \"$m,$i\"\n"
+" set helplabel($arg) $label\n"
+" set j [$m index end]\n"
+" set arg \"$m,$j\"\n"
+" set helplabel($arg) $label\n"
+" }\n"
+" if {$i == 0} {\n"
+" $m entryconfigure end -columnbreak 1\n"
+" }\n"
+" }\n"
+" }\n"
+"\n"
+" # Make the x11 and vnc display label bar:\n"
+" set df .displayframe\n"
+" frame $df -bd 1 -relief groove\n"
+"\n"
+" set df_x11 \"$df.xdisplay\"\n"
+" no_x11_display\n"
+" label $df_x11 -textvariable x11_display -width 35 -anchor w\n"
+"\n"
+" set df_vnc \"$df.vdisplay\"\n"
+" no_vnc_display\n"
+" label $df_vnc -textvariable vnc_display -width 35 -anchor w\n"
+"\n"
+" pack $df_x11 $df_vnc -side left \n"
+" pack $df -side top -fill x\n"
+"\n"
+" # text area\n"
+" text .text -height 11 -relief ridge\n"
+" set text_area .text\n"
+" pack .text -side top -fill both -expand 1\n"
+"\n"
+"\n"
+" set str \"Click Help -> gui for overview.\"\n"
+" append_text \"\\n$str\\n\\n\"\n"
+"\n"
+" # Make entry box stuff\n"
+" set ef .entryframe\n"
+" frame $ef -bd 1 -relief groove\n"
+"\n"
+" # Label\n"
+" set ef_label \"$ef.label\"\n"
+" label $ef_label -textvariable entry_str -anchor w -font $bfont\n"
+"\n"
+" set entry_str \"Set... : \"\n"
+" set ef_entry \"$ef.entry\"\n"
+" entry $ef_entry -relief sunken\n"
+" bind $ef_entry <KeyPress-Return> {set entry_set 1}\n"
+" bind $ef_entry <KeyPress-Escape> {set entry_set 0}\n"
+"\n"
+" # OK button\n"
+" set ef_ok \"$ef.ok\"\n"
+" button $ef_ok -text OK -pady 1 -command {set entry_set 1} \\\n"
+" -font $bfont\n"
+"\n"
+" # Skip button\n"
+" set ef_skip \"$ef.skip\"\n"
+" button $ef_skip -text Skip -pady 0 -command {set entry_set 0} \\\n"
+" -font $bfont\n"
+"\n"
+" # Help button\n"
+" set ef_help \"$ef.help\"\n"
+" button $ef_help -text Help -pady 0 -command \\\n"
+" {menu_help $entry_dialog_item} -font $bfont\n"
+"\n"
+" # Browse button\n"
+" set ef_browse \"$ef.browse\"\n"
+" button $ef_browse -text \"Browse...\" -pady 0 -font $bfont \\\n"
+" -command {entry_insert [tk_getOpenFile]} \n"
+"\n"
+" pack $ef_label -side left\n"
+" pack $ef_entry -side left -fill x -expand 1\n"
+" pack $ef_ok -side right\n"
+" pack $ef_skip -side right\n"
+" pack $ef_help -side right\n"
+" pack $ef -side bottom -fill x\n"
+"\n"
+" set entry_ok $ef_ok\n"
+" set entry_skip $ef_skip\n"
+" set entry_help $ef_help\n"
+" set entry_box $ef_entry\n"
+" set entry_browse $ef_browse\n"
+" set entry_label $ef_label\n"
+" entry_disable\n"
+"\n"
+" update\n"
+" wm minsize . [winfo width .] [winfo height .]\n"
+"}\n"
+"\n"
+"proc menu_bindings {} {\n"
+" bind Menu <<MenuSelect>> {\n"
+"#syntax hilite bug \\\n"
+"MenuSelect>>\n"
+" set n [%W index active]\n"
+" set label \" \"\n"
+" if {$n != \"none\"} {\n"
+" set str %W,$n\n"
+" set which \"\"\n"
+" if {[info exists helplabel($str)]} {\n"
+" set vname [format %%-16s $helplabel($str)]\n"
+" set label \"Click (?) for help on: $vname\"\n"
+" set which $helplabel($str)\n"
+" }\n"
+" if {$which == \"\"} {\n"
+" ;\n"
+" } elseif {[is_action $which]} {\n"
+" if {[info exists menu_var($which)] \n"
+" && $menu_var($which) != \"\"} {\n"
+" set label \"$label value: $menu_var($which)\"\n"
+" } else {\n"
+" set label \"$label (is action)\"\n"
+" }\n"
+" } elseif {[info exists menu_var($which)]} {\n"
+" set label \"$label value: $menu_var($which)\"\n"
+" }\n"
+" }\n"
+" set_info $label\n"
+" }\n"
+"}\n"
+"\n"
+"proc key_bindings {} {\n"
+" global env\n"
+" if {[info exists env(USER)] && $env(USER) == \"runge\"} {\n"
+" # quick restart\n"
+" bind . <Control-KeyPress-c> {exec $argv0 $argv &; destroy .}\n"
+" }\n"
+" bind . <Control-KeyPress-p> {try_connect_and_query_all}\n"
+" bind . <Control-KeyPress-u> {query_all 0}\n"
+" bind . <Control-KeyPress-r> {query_all 0}\n"
+" bind . <Control-KeyPress-d> {detach_from_display}\n"
+" bind . <Control-KeyPress-a> {try_connect_and_query_all}\n"
+"}\n"
+"\n"
+"proc stop_watch {onoff} {\n"
+" global orig_cursor text_area entry_box\n"
+"\n"
+" set widgets [list . $text_area $entry_box] \n"
+"\n"
+" if {$onoff == \"on\"} {\n"
+" foreach item $widgets {\n"
+" $item config -cursor {watch}\n"
+" }\n"
+" } else {\n"
+" foreach item $widgets {\n"
+" $item config -cursor {}\n"
+" }\n"
+" }\n"
+" update\n"
+"}\n"
+"\n"
+"proc double_check_noremote {} {\n"
+" set msg \"\\n\\n\"\n"
+" append msg \"WARNING: setting \\\"noremote\\\" will disable ALL remote control commands\\n\"\n"
+" append msg \"WARNING: (i.e. this gui will be locked out) Do you really want to do this?\\n\"\n"
+" append msg \"WARNING: If so, press \\\"OK\\\", otherwise press \\\"Skip\\\"\\n\"\n"
+" append msg \"\\n\"\n"
+" bell\n"
+" return [warning_dialog $msg \"noremote\"]\n"
+"}\n"
+"\n"
+"proc double_check_start_x11vnc {} {\n"
+" global hostname\n"
+" set msg [get_start_x11vnc_txt]\n"
+" append msg \"\\n\"\n"
+" append msg \"*** To run the above command on machine \\\"$hostname\\\" to\\n\"\n"
+" append msg \"*** start x11vnc press \\\"OK\\\" otherwise press \\\"Skip\\\".\\n\"\n"
+" return [warning_dialog $msg \"start\"]\n"
+"}\n"
+"\n"
+"proc get_start_x11vnc_txt {} {\n"
+" set cmd [get_start_x11vnc_cmd]\n"
+" set str [join $cmd]\n"
+" set msg \"\"\n"
+" append msg \"\\n\"\n"
+" append msg \"==== The command built so far is: ====\\n\";\n"
+" append msg \"\\n\"\n"
+" append msg \"$str\\n\"\n"
+" return $msg\n"
+"}\n"
+"\n"
+"proc get_start_x11vnc_cmd {} {\n"
+" global menu_var unset_str x11vnc_prog\n"
+"\n"
+" set xterm_cmd \"xterm -iconic -geometry 80x35 -title x11vnc-console -e\"\n"
+"\n"
+" set cmd [split $xterm_cmd]\n"
+"\n"
+" lappend cmd $x11vnc_prog\n"
+"\n"
+" foreach item [lsort [array names menu_var]] {\n"
+" if {![active_when_starting $item]} {\n"
+" continue\n"
+" }\n"
+" if {[is_action $item]} {\n"
+" continue\n"
+" }\n"
+"\n"
+" if {[value_is_bool $item]} {\n"
+" if {[info exists menu_var($item)]} {\n"
+" if {$menu_var($item)} {\n"
+" lappend cmd \"-$item\"\n"
+" }\n"
+" }\n"
+" } elseif {[value_is_string $item]} {\n"
+" if {[info exists menu_var($item)]} {\n"
+" if {$menu_var($item) != \"\"\n"
+" && $menu_var($item) != $unset_str} {\n"
+" lappend cmd \"-$item\"\n"
+" lappend cmd $menu_var($item)\n"
+" }\n"
+" }\n"
+" }\n"
+" }\n"
+" lappend cmd \"2>\"\n"
+" lappend cmd \"/dev/null\"\n"
+" lappend cmd \"&\"\n"
+" \n"
+" return $cmd\n"
+"}\n"
+"\n"
+"proc start_x11vnc {} {\n"
+" global menu_var unset_str\n"
+" global x11vnc_prog x11vnc_xdisplay\n"
+" global connected_to_x11vnc\n"
+"\n"
+" if {$connected_to_x11vnc} {\n"
+" append_text \"\\n\"\n"
+" append_text \"WARNING: Still connected to an x11vnc server.\\n\"\n"
+" append_text \"WARNING: Use \\\"stop\\\" or \\\"detach\\\" first.\\n\"\n"
+" return 0\n"
+" }\n"
+"\n"
+" if {![double_check_start_x11vnc]} {\n"
+" return\n"
+" }\n"
+"\n"
+" set x11vnc_xdisplay \"\"\n"
+" if {[info exists menu_var(display)]} {\n"
+" if {$menu_var(display) != \"\" && $menu_var(display) != $unset_str} {\n"
+" set x11vnc_xdisplay $menu_var(display)\n"
+" }\n"
+" }\n"
+"\n"
+" set cmd [get_start_x11vnc_cmd]\n"
+"\n"
+" set str [join $cmd]\n"
+" regsub { -e} $str \" -e \\\\\\n \" str\n"
+"\n"
+" if {0} {\n"
+" puts \"running: $str\"\n"
+" foreach word $cmd {\n"
+" puts \" word: $word\"\n"
+" }\n"
+" }\n"
+"\n"
+" append_text \"Starting x11vnc in an iconified xterm with command:\\n\"\n"
+" append_text \" $str\\n\\n\"\n"
+" catch {[eval exec $cmd]}\n"
+" after 500\n"
+" try_connect_and_query_all 3\n"
+"}\n"
+"\n"
+"proc run_remote_cmd {opts} {\n"
+" global menu_var x11vnc_prog x11vnc_cmdline x11vnc_xdisplay\n"
+"\n"
+" set debug [in_debug_mode]\n"
+"\n"
+" if {[lindex $opts 0] == \"-R\" && [lindex $opts 1] == \"noremote\"} {\n"
+" set str [join $opts]\n"
+" if ![double_check_noremote] {\n"
+" append_text \"skipping: x11vnc $str\"\n"
+" return \"\"\n"
+" } else {\n"
+" append_text \"running: x11vnc $str (please do \\\"Actions -> detach\\\" to clean things up)\\n\"\n"
+" append_text \"subsequent -R/-Q commands should fail...\"\n"
+" }\n"
+" }\n"
+"\n"
+" set cmd \"\"\n"
+"\n"
+" lappend cmd $x11vnc_prog;\n"
+"\n"
+" if {$x11vnc_xdisplay != \"\"} {\n"
+" lappend cmd \"-display\"\n"
+" lappend cmd $x11vnc_xdisplay\n"
+" }\n"
+" foreach word $opts {\n"
+" lappend cmd $word\n"
+" }\n"
+" lappend cmd \"2>\"\n"
+" lappend cmd \"/dev/null\"\n"
+"\n"
+"if {0} {\n"
+" set str [join $cmd]\n"
+" puts \"running: $str\"\n"
+" foreach word $cmd {\n"
+" puts \" word: $word\"\n"
+" }\n"
+"}\n"
+"\n"
+" set output \"\"\n"
+" stop_watch on\n"
+" catch {set output [eval exec $cmd]}\n"
+" stop_watch off\n"
+" if {$debug} {\n"
+" append_text \"output: $output\\n\"\n"
+" }\n"
+" return $output\n"
+"}\n"
+"\n"
+"proc try_connect_and_query_all {{n 2}} {\n"
+" for {set i 0} {$i < $n} {incr i} {\n"
+" if {$i > 0} {\n"
+" after 500\n"
+" append_text \"trying again ...\\n\"\n"
+" }\n"
+" if {[try_connect]} {\n"
+" query_all\n"
+" break\n"
+" }\n"
+" }\n"
+"}\n"
+"\n"
+"proc try_connect {} {\n"
+" global x11vnc_xdisplay connected_to_x11vnc reply_xdisplay\n"
+" global menu_var unset_str\n"
+"\n"
+" if {! $connected_to_x11vnc} {\n"
+" if {[info exists menu_var(display)]} {\n"
+" set d $menu_var(display)\n"
+" if {$d != \"\" && $d != $unset_str && $d != $x11vnc_xdisplay} {\n"
+" set x11vnc_xdisplay $menu_var(display)\n"
+" append_text \"Setting X display to: $x11vnc_xdisplay\\n\"\n"
+" }\n"
+" }\n"
+" }\n"
+"\n"
+" set_info \"Pinging $x11vnc_xdisplay ...\"\n"
+" set rargs [list \"-Q\" \"ping\"]\n"
+" set result [run_remote_cmd $rargs]\n"
+"\n"
+" if {[regexp {^ans=ping:} $result]} {\n"
+" regsub {^ans=ping:} $result {} reply_xdisplay\n"
+" set msg \"Connected to $reply_xdisplay\"\n"
+" set_info $msg\n"
+" append_text \"$msg\\n\"\n"
+" set_connected yes\n"
+" fetch_displays\n"
+" return 1\n"
+" } else {\n"
+" set str \"x11vnc server.\"\n"
+" if {$x11vnc_xdisplay != \"\"} {\n"
+" set str $x11vnc_xdisplay\n"
+" }\n"
+" set msg \"No reply from $str\"\n"
+" set_info $msg\n"
+" append_text \"$msg\\n\"\n"
+" set_connected no\n"
+" return 0\n"
+" }\n"
+"}\n"
+"\n"
+"############################################################################\n"
+"# main:\n"
+"\n"
+"global env x11vnc_prog x11vnc_cmdline x11vnc_xdisplay x11vnc_connect;\n"
+"global helpall helptext helpremote helplabel hostname;\n"
+"global all_settings reply_xdisplay always_update\n"
+"global max_text_height max_text_width\n"
+"global menu_var unset_str\n"
+"global bfont\n"
+"global connected_to_x11vnc\n"
+"global delay_sleep extra_sleep extra_sleep_split\n"
+"\n"
+"set unset_str \"(unset)\"\n"
+"set connected_to_x11vnc 0\n"
+"set max_text_height 40\n"
+"set max_text_width 90\n"
+"set bfont -adobe-helvetica-bold-r-*-*-*-120-*-*-*-*-*-*;\n"
+"set help_indent 24;\n"
+"set reply_xdisplay \"\"\n"
+"set all_settings \"None so far.\"\n"
+"set always_update 1\n"
+"\n"
+"#set delay_sleep 500\n"
+"#set extra_sleep 1500\n"
+"set delay_sleep 350\n"
+"set extra_sleep 1000\n"
+"set extra_sleep_split 4\n"
+"\n"
+"if {\"$argv\" == \"-spit\"} {\n"
+" set fh [open $argv0 r]\n"
+" puts \"/*\"\n"
+" puts \" * tkx11vnc.h: generated by 'tkx11vnc -spit'\"\n"
+" puts \" * Abandon all hope, ye who enter here...\"\n"
+" puts \" * ...edit tkx11vnc instead.\"\n"
+" puts \" */\"\n"
+" puts \" char gui_code\\[\\] =\"\n"
+" while {[gets $fh line] > -1} {\n"
+" regsub -all {\\\\} $line {\\\\\\\\} line\n"
+" regsub -all {\"} $line {\\\\\"} line\n"
+" puts \"\\\"$line\\\\n\\\"\"\n"
+" }\n"
+" close $fh\n"
+" puts \";\"\n"
+" exit 0\n"
+"}\n"
+"\n"
+"# Read environment for clues:\n"
+"if {[info exists env(X11VNC_PROG)]} {\n"
+" set x11vnc_prog $env(X11VNC_PROG);\n"
+"} else {\n"
+" set x11vnc_prog \"x11vnc\";\n"
+"}\n"
+"\n"
+"if {[info exists env(X11VNC_CMDLINE)]} {\n"
+" set x11vnc_cmdline $env(X11VNC_CMDLINE);\n"
+"} else {\n"
+" set x11vnc_cmdline \"\";\n"
+"}\n"
+"\n"
+"if {[info exists env(X11VNC_CONNECT)]} {\n"
+" set x11vnc_connect 1\n"
+"} else {\n"
+" set x11vnc_connect 0;\n"
+"}\n"
+"\n"
+"if {[info exists env(X11VNC_XDISPLAY)]} {\n"
+" set x11vnc_xdisplay $env(X11VNC_XDISPLAY);\n"
+" set x11vnc_connect 1\n"
+"\n"
+"} elseif {$argv != \"\" && [regexp {:[0-9]} $argv]} {\n"
+" set x11vnc_xdisplay \"$argv\"\n"
+" set x11vnc_connect 1\n"
+"\n"
+"} elseif {[info exists env(DISPLAY)]} {\n"
+" set x11vnc_xdisplay $env(DISPLAY);\n"
+"} else {\n"
+" set x11vnc_xdisplay \":0\";\n"
+"}\n"
+"\n"
+"set hostname [exec uname -n]\n"
+"#puts [exec env]\n"
+"#puts \"x11vnc_xdisplay: $x11vnc_xdisplay\"\n"
+"\n"
+"set env(X11VNC_STD_HELP) 1\n"
+"\n"
+"# scrape the help output for the text and remote control vars:\n"
+"parse_help;\n"
+"parse_remote_help;\n"
+"parse_query_help;\n"
+"\n"
+"# tweaks to duplicate help text:\n"
+"tweak_remote_help lock deny\n"
+"tweak_remote_help unlock deny\n"
+"\n"
+"tweak_both quiet q\n"
+"tweak_help logfile o\n"
+"tweak_both xwarppointer xwarp\n"
+"tweak_both screen_blank sb\n"
+"\n"
+"set_template\n"
+"\n"
+"wm title . \"tkx11vnc\"\n"
+"make_widgets;\n"
+"\n"
+"menu_bindings;\n"
+"key_bindings;\n"
+"\n"
+"if {$x11vnc_connect} {\n"
+" try_connect_and_query_all\n"
+"}\n"
+"set_widgets\n"
+"\n"
+"# main loop.\n"
+;
OpenPOWER on IntegriCloud