1#!/usr/local/bin/bltwish
2
3package require BLT
4# --------------------------------------------------------------------------
5# Starting with Tcl 8.x, the BLT commands are stored in their own
6# namespace called "blt".  The idea is to prevent name clashes with
7# Tcl commands and variables from other packages, such as a "table"
8# command in two different packages.
9#
10# You can access the BLT commands in a couple of ways.  You can prefix
11# all the BLT commands with the namespace qualifier "blt::"
12#
13#    blt::graph .g
14#    blt::table . .g -resize both
15#
16# or you can import all the command into the global namespace.
17#
18#    namespace import blt::*
19#    graph .g
20#    table . .g -resize both
21#
22# --------------------------------------------------------------------------
23
24if { $tcl_version >= 8.0 } {
25    namespace import blt::*
26    namespace import -force blt::tile::*
27}
28
29source scripts/demo.tcl
30
31bitmap define blt.0 {{40 40} {
32    00 00 00 00 00 00 fc 07 00 00 00 04 08 00 00 00 04 04 00 00 00 e4 03 00
33    00 00 64 fe 07 00 00 64 02 04 00 00 e4 03 04 00 00 64 7e 02 00 00 64 1a
34    02 00 00 e4 1b 01 00 00 04 1a 01 00 00 04 1a 01 00 00 fc 1b 02 00 00 0c
35    1a 02 00 00 0c 02 04 00 00 0c 02 f4 03 80 ed fe 07 04 e0 0c 00 20 09 10
36    0c 00 00 12 10 0c 00 00 10 30 00 00 00 19 d0 03 00 00 14 b0 fe ff ff 1b
37    50 55 55 55 0d e8 aa aa aa 16 e4 ff ff ff 2f f4 ff ff ff 27 d8 ae aa bd
38    2d 6c 5f d5 67 1b bc f3 7f d0 36 f8 01 10 cc 1f e0 45 8e 92 0f b0 32 41
39    43 0b d0 cf 3c 7c 0d b0 aa c2 ab 0a 60 55 55 55 05 c0 ff ab aa 03 00 00
40    fe ff 00 00 00 00 00 00}
41}
42
43bitmap define blt.1 {{40 40} {
44    00 00 00 00 00 00 fc 07 00 00 00 04 08 00 00 00 04 04 00 00 00 e4 ff 0f
45    00 00 64 06 08 00 00 64 06 08 00 00 e4 ff 04 00 00 64 36 04 00 00 64 36
46    02 00 00 e4 37 02 00 00 04 34 02 00 00 04 34 04 00 00 fc 35 04 00 00 0c
47    04 08 00 00 0c 04 08 00 00 0c fc ef 03 80 ed 01 00 04 e0 0c 00 20 09 10
48    0c 00 00 12 10 0c 00 00 10 30 00 00 00 19 d0 03 00 00 14 b0 fe ff ff 1b
49    50 55 55 55 0d e8 aa aa aa 16 e4 ff ff ff 2f f4 ff ff ff 27 d8 ae aa bd
50    2d 6c 5f d5 67 1b bc f3 7f d0 36 f8 01 10 cc 1f e0 45 8e 92 0f b0 32 41
51    43 0b d0 cf 3c 7c 0d b0 aa c2 ab 0a 60 55 55 55 05 c0 ff ab aa 03 00 00
52    fe ff 00 00 00 00 00 00}
53}
54
55bitmap define blt.2 {{40 40} {
56    00 00 00 00 00 00 fc 0f 00 00 00 04 10 00 00 00 04 10 00 00 00 e4 fb 3f
57    00 00 64 0e 20 00 00 64 0e 20 00 00 e4 fb 13 00 00 64 ce 10 00 00 64 ce
58    08 00 00 e4 cb 08 00 00 04 c8 08 00 00 04 c8 10 00 00 fc cf 10 00 00 0c
59    08 20 00 00 0c 08 20 00 00 0c f8 bf 03 80 ed 03 00 04 e0 0c 00 20 09 10
60    0c 00 00 12 10 0c 00 00 10 30 00 00 00 19 d0 03 00 00 14 b0 fe ff ff 1b
61    50 55 55 55 0d e8 aa aa aa 16 e4 ff ff ff 2f f4 ff ff ff 27 d8 ae aa bd
62    2d 6c 5f d5 67 1b bc f3 7f d0 36 f8 01 10 cc 1f e0 45 8e 92 0f b0 32 41
63    43 0b d0 cf 3c 7c 0d b0 aa c2 ab 0a 60 55 55 55 05 c0 ff ab aa 03 00 00
64    fe ff 00 00 00 00 00 00}
65}
66
67bitmap define blt.3 {{40 40} {
68    00 00 00 00 00 00 fc 0f 00 00 00 04 f0 ff 00 00 04 00 80 00 00 e4 03 80
69    00 00 64 d6 4f 00 00 64 16 43 00 00 e4 13 23 00 00 64 16 23 00 00 64 16
70    23 00 00 e4 13 43 00 00 04 70 43 00 00 04 00 80 00 00 fc 0f 80 00 00 0c
71    f0 ff 00 00 0c 00 00 00 00 0c f8 ff 03 80 ed 07 00 04 e0 0c 00 20 09 10
72    0c 00 00 12 10 0c 00 00 10 30 00 00 00 19 d0 03 00 00 14 b0 fe ff ff 1b
73    50 55 55 55 0d e8 aa aa aa 16 e4 ff ff ff 2f f4 ff ff ff 27 d8 ae aa bd
74    2d 6c 5f d5 67 1b bc f3 7f d0 36 f8 01 10 cc 1f e0 45 8e 92 0f b0 32 41
75    43 0b d0 cf 3c 7c 0d b0 aa c2 ab 0a 60 55 55 55 05 c0 ff ab aa 03 00 00
76    fe ff 00 00 00 00 00 00}
77}
78
79bitmap define blt.4 {{40 40} {
80    00 00 00 00 00 00 fc ff ff 03 00 04 00 00 02 00 04 00 00 02 00 e4 33 3f
81    01 00 64 36 0c 01 00 64 36 8c 00 00 e4 33 8c 00 00 64 36 8c 00 00 64 36
82    0c 01 00 e4 f3 0d 01 00 04 00 00 02 00 04 00 00 02 00 fc ff ff 03 00 0c
83    00 00 00 00 0c 00 00 00 00 0c f8 ff 03 80 ed 07 00 04 e0 0c 00 20 09 10
84    0c 00 00 12 10 0c 00 00 10 30 00 00 00 19 d0 03 00 00 14 b0 fe ff ff 1b
85    50 55 55 55 0d e8 aa aa aa 16 e4 ff ff ff 2f f4 ff ff ff 27 d8 ae aa bd
86    2d 6c 5f d5 67 1b bc f3 7f d0 36 f8 01 10 cc 1f e0 45 8e 92 0f b0 32 41
87    43 0b d0 cf 3c 7c 0d b0 aa c2 ab 0a 60 55 55 55 05 c0 ff ab aa 03 00 00
88    fe ff 00 00 00 00 00 00}
89}
90
91
92
93#set animate(colors) { #ff8813 #ffaa13 #ffcc13 #ffff13 #ffcc13 #ffaa13 #ff8813 }
94bitmap define blt.5 [bitmap data blt.3]
95bitmap define blt.6 [bitmap data blt.2]
96bitmap define blt.7 [bitmap data blt.1]
97
98
99set interval 200
100
101proc AnimateBitmap { index } {
102    global interval afterId
103    if { ![winfo exists .logo] } {
104	return
105    }
106    if { $index >= 0 } {
107	.logo configure -bitmap blt.$index
108	incr index
109	if { $index >= 7 } {
110	    set index 0
111	}
112	set afterId [after $interval "AnimateBitmap $index"]
113    }
114}
115
116set length 80
117
118option add *text.yScrollCommand { .vscroll set }
119option add *text.relief sunken
120option add *text.width $length
121option add *text.height 10
122option add *text.borderWidth 2
123option add *vscroll.command { .text yview }
124option add *vscroll.minSlider 4p
125option add *quit.command { exit }
126option add *quit.text { quit }
127option add *stop.command { set bgStatus {} }
128option add *stop.text { stop }
129option add *logo.relief sunken
130option add *logo.padX 4
131option add *title.text "Virtual Memory Statistics"
132option add *title.font -*-Helvetica-Bold-R-*-*-14-*-*-*-*-*-*-*
133
134set visual [winfo screenvisual .]
135if { $visual != "staticgray" && $visual != "grayscale" } {
136    option add *text.background lightblue
137    option add *text.foreground blue
138    option add *quit.background red
139    option add *quit.foreground white
140    option add *stop.background yellow
141    option add *stop.foreground navyblue
142    option add *logo.background beige
143    option add *logo.foreground brown
144}
145
146# Create widgets
147text .text
148scrollbar .vscroll
149button .quit
150button .stop
151label .logo
152label .title
153
154# Layout widgets in table
155table . \
156    .title      0,0 -columnspan 4 \
157    .text 	1,0 -columnspan 3 \
158    .vscroll 	1,3 -fill y \
159    .logo 	2,0 -anchor w -padx 10 -reqheight .6i -pady 4 \
160    .stop 	2,1 \
161    .quit  	2,2
162
163set buttonWidth 1i
164table configure . c1 c2 -width 1i
165table configure . c3 -resize none
166table configure . .stop .quit -reqwidth $buttonWidth -anchor e
167table configure . .title .text -fill both
168
169wm min . 0 0
170
171proc DisplayStats { data } {
172    .text insert end "$data\n"
173    set textlen [expr int([.text index end])]
174    scan [.vscroll get] "%s %s %s %s" total window first last
175    if { $textlen > $total } {
176	.text yview [expr $textlen-$window]
177    }
178    update idletasks
179}
180
181set bgStatus {}
182
183AnimateBitmap 0
184
185#
186# Pick a command that
187#    1) periodically writes output and
188#    2) flushes output each time.
189#
190set command { vmstat 1 }
191#set command { netstat -c }
192
193catch { eval "bgexec bgStatus -onoutput DisplayStats $command" }
194
195# Turn off animation by canceling any pending after task.
196if { [info exists afterId] } {
197    after cancel $afterId
198}
199