This file is indexed.

/usr/share/plplot5.13.0/tcl/plclient.tcl is in plplot-tcl 5.13.0+dfsg-6ubuntu2.

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
#----------------------------------------------------------------------------
# PLPLOT TK/TCL graphics client procs
# Maurice LeBrun
# 14-Jan-1994
# IFS, University of Texas at Austin
#
# These are customizable (since autoloaded) initialization procs for the
# TK driver.  At present you should be very careful what you change,
# however, since this stuff is still evolving.
#----------------------------------------------------------------------------

#----------------------------------------------------------------------------
# plclient_init
#
# Initializes variables for plplot/TK/DP driver.
# These variables determine what plserver procs are invoked by the driver
# to do various jobs.  Specifically, they are:
#
# plserver_init_proc	proc to initialize plserver
# plw_create_proc	proc to create the plframe widget
# plw_start_proc	proc to manage the plframe widget
# plw_flash_proc	proc to handle end of page condition
# plw_end_proc		proc to detach the plframe widget from the client
#----------------------------------------------------------------------------

proc plclient_init {} {

    global plserver_init_proc plw_create_proc \
	plw_start_proc plw_end_proc \
	dp client_host client_port

# This initializes plserver

    set plserver_init_proc	plserver_init

# These govern the plframe and associated widgets

    set plw_create_proc		plw::create
    set plw_start_proc		plw::start
    set plw_end_proc 		plw::end

# Set up communications port

    if { $dp } {
	set client_host [host_id]
	set client_port [dp_MakeRPCServer]
    }
}

#----------------------------------------------------------------------------
# plclient_link_init
#
# Initializes link to plserver assuming plserver already exists.
# Basically this means just sending info on the communications channel.
#----------------------------------------------------------------------------

proc plclient_link_init {} {
    global dp server client

    if { $dp } {
	global client_host client_port

	dp_RDO $server set client_host $client_host
	dp_RDO $server set client_port $client_port

    } else {
	global client_name

	send [list $server] "after 1 {set client_name [list $client_name]}"
	send [list $server] "after 2 plserver_start"
    }

    wait_until {[info exists client]}
}

#----------------------------------------------------------------------------
# plclient_link_end
#
# Terminate link to plserver.
#
# Note: due to some apparent bogosity in Tcl 7.3 and/or Tcl-DP 3.2,
# Tcl_DeleteInterp() doesn't always provide all the necessary cleanup when
# exiting, and a filehandler event for the old interpreter is generated
# /after/ the old interpreter has been deleted.  When multiple interpreters
# are in use, this results in an attempt to use a hash table that has
# already been deleted, and a panic.  I tried to find the offending code
# while in the debugger but it looks like a tough one to crack.  Only seen
# when using multiple DP output streams (e.g. from x14c or pltcl).
#----------------------------------------------------------------------------

proc plclient_link_end {} {
    global dp server plserver_exiting plw_end_proc

    if { [info exists server] } then {

    # Tell server we are exiting.

	if { $dp } then {
	    dp_RPC $server set plclient_exiting 1
	} else {
	    send $server "set plclient_exiting 1"
	}

    # If the server isn't exiting, cause it to.

	if { ! [info exists plserver_exiting] } then {
	    global plwindow
	    if { $dp } then {
		dp_update
		dp_RPC $server after 1 $plw_end_proc $plwindow
	    } else {
		update
		send $server "after 1 plw::end $plwindow"
	    }
	    wait_until {[info exists plserver_exiting]}
	}

    # Clean up socket communications if using Tcl-DP.

	if { $dp } {
	    catch dp_CloseRPC $server
	    dp_update
	}
    }

# Destroy main window if there is one.

    if { ! $dp } then {
	destroy .
    }
}

#----------------------------------------------------------------------------
# plclient_dp_init
#
# Initializes dp data link.
# In addition, as this is the last client/server connection needed, I
# disable further connections.
#----------------------------------------------------------------------------

proc plclient_dp_init {} {
    global server server_host plwindow client data_port data_sock

    dp_RDO $server plw::dplink $plwindow $client

    wait_until {[info exists data_port]}
    set data_sock [lindex [dp_connect $server_host $data_port] 0]

    dp_Host -
}