1#!/bin/sh
2# the next line restart wish \
3exec wish "$0" "$@"
4
5set inf_file	"setup.inf"
6
7# default values
8set inf_title				"GNU Setup"
9set inf_info				"Setup: No INF-file found, using defaults.."
10set inf_view				"README INSTALL"
11set inf_makefile			"Makefile"
12set inf_create_makefile_cmd	"configure"
13set inf_compile_cmd			"make"
14set inf_clean_cmd			"make clean"
15set inf_install_cmd			"make install"
16set inf_test_install_cmd	"make -n install"
17
18set inf_makefile_options	"--prefix /usr/local/X11"
19
20set width	620
21set height	400
22set x_off	310
23set y_off	340
24set top		".top"
25set logo_data {\
26R0lGODlhbAKQAaUAAAICBBEREU5OTmpqaIqKjKampMDAwM7OztjY2ODg4Obm5Orq7B0dHu7u
277AIChP7+BCsrKvLy9Pb29H19fjk5OWBgYPr6/I6OjJeXmERERFhYV7CwsHR0dP7+/KCgoIaG
28hP//////////////////////////////////////////////////////////////////////
29/////////////////////////////////////////////////////////yH+Dk1hZGUgd2l0
30aCBHSU1QACH5BAEKACAALAAAAABsApABAAb+wI5wSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16
31v+CweEwum8/otHrNbrvf8Lh8Tq/b7/i8fs/v+/+AgYKDhIWGh4iJiouMjY6PkJGSk5SVhw4O
32AJqbnACYlqChoqOkipgPqKmqD5gbpa+wsbKzZZgJt7i5Ca20vb6/wMEdn0q8wsfIycqJtrq6
33xsvR0tPUb8RJ0NXa29zdVc3OuNne5OXm3ddI4+fs7e6/mPHy8w6u7/f4+aLyBv3+BvLs6RtI
34sCAifpj+BTTIsKFDPQgdKIwn8KHFixjPRJy4LqPHjyCpbPS3MKTJkyiTbIj3jyTFlDBjntxA
35s6bNmzJz6tzJs6f+z59AkVmwIEFChKNIjxa1UGWoUyxPlzhlemWqmKFFkyZdGrQrPgseBgjo
36pEmAAAwHFixoEEECVSYGCsj14AFBgwZupcSda7ftWyFzC3gwwDZvlMCDC//NYsGAWAZkKWT4
37cEDBWr9eM5MzMJasZwAQJiBIcHnxEQ2dINxSwNa0EtSbMCRgXZRIJwG31hp2cjs3XtdSEgyA
38/Dk1h9GlNSufZoBC8ecMBoxO8DuJhc6cBhg4QDoCcCPXOVE+gGCBdyEWOlHYPvq8k/Sc1pNP
394N4Kh+fFA3wYTfv78v+yDIDfgBAUwJ0CbSWBHScX9FPebkssyEEBG5C3QF7wbUIBhQb+IICg
40f0RkqMmGG3T4YRUJODdgcQJsRxqEZ0wFIoA0npEidAzkyEAA+RHQIXUSHBEeWQxcUKJdQTIx
41pCYVXIDBdgi6JUFqH1xQgAHUzSjElJxAUOWVWVKRAHGe6Zgjj59RUKGH9ZFxgQAamLXBXW3W
42aKeNZHISAAVm9SlABmZBgCZZGFQI5F9ELchJBgQYipdUEiyYAQcfDGbXUBF0wkAFEzyZVpJS
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
142RNkdHHly5curTjr2hQxK5tOpV7e+btq/ete5d/f+vRR48ePJlzd/Hn169evZt3f/Hn58+fPp
14317d/H39+/fv59/f/H8AABRyQwAINPBDBBBVckMEGHXwQwgglnJDCCi28EMP+DDXckMMOPfwQ
144xBBFHJHEEk08EcUUVVyRxRZdfBHGGGWckcYabbwRxxx13JHHHn38EcgghRySyCKNPBLJJJVc
145kskmnXwSyiilnJLKKq28EssstdySyy69/BLMMMUck8wyzTwTzTTVXJPNNt18E8445ZyTzjrt
146vBPPPPXck88+/fwT0EAFHZTQQg09FNFEFV2U0UYdfRTSSCWdlNJKLb0U00w13ZTTTj39FNRQ
147RR2V1FJNPRXVVFVdldVWXX0V1lhlnZXWWm29Fddcdd2V1159/RXYYIUdlthijT0W2WSVXZbZ
148Zp19FtpopZ2W2mqtvRbbbLXdlttuvf0W3HDFHZf+3HLNPRfddNVdl9123X0X3njlnZfeeu29
149F9989d2X3379/RfggAUemOCCDT4Y4YQVXpjhhh1+GOKIJZ6Y4ootvhjjjDXemOOOPf4Y5JBF
150Hpnkkk0+GeWUVV6Z5ZZdfhnmmGWemeaabb4Z55x13pnnnn3+GeighR6a6KKNPhrppJVemumm
151nX4a6qilnprqqq2+Guustd6a6669/hrssMUem+yyzT4b7bTVXpvttt1+G+645Z6b7rrtvhvv
152vPXem+++/f4b8MAFH5zwwg0/HPHEFV+c8cYdfxzyyCWfnPLKLb8c88w135zzzj3/HPTQRR+d
1539NJNPx311FVfnfXWXX9AHfbYZZ+d9tptvx333HXfnffeff8d+OCFH5744o0/HvnklV+e+ead
154fx766KWfnvrqrb8e++y135777r3/HsggAAA7
155}
156
157# read the inf-file to get some installation parameters
158#
159catch [source $inf_file]
160
161#
162wm title . $inf_title
163
164image create photo logo -data $logo_data
165canvas	$top -background white -border 0 -width $width -height $height
166frame	$top.panel
167button	$top.panel.compile -text "Compile" -command "m_compile $top"
168button	$top.panel.install -text "Install" -command "install $top"
169button	$top.panel.edit -text "Make $inf_makefile" -command \
170			"m_makefile $top $inf_makefile $inf_create_makefile_cmd"
171label	$top.panel.space -text "-"
172
173foreach view $inf_view {
174	set view_w $top.panel.v_$view
175	button $view_w -text "$view" -command "m_view $top $view"
176}
177button	$top.quit  -text "Quit" -command exit
178
179catch "$top create image 0 0 -image logo -anchor nw"
180$top create window $x_off $y_off -window $top.panel
181$top create text $x_off [expr $y_off+30] \
182		-text "GNU Setup - Version 0.3, (c) Rasca, published under the GNU GPL"
183$top create text $x_off 98 -text $inf_info -anchor n
184
185$top create window $width $height -window $top.quit -anchor se
186
187pack $top
188pack $top.panel.edit -side left
189pack $top.panel.compile -side left
190pack $top.panel.install -side left
191pack $top.panel.space -side left
192foreach view $inf_view {
193	set view_w $top.panel.v_$view
194	pack $view_w -side left
195}
196event add <<Press>> <Enter> <ButtonPress-1> <ButtonRelease-1>
197# end of main()
198
199
200# view a file inside a text box
201#
202proc m_view {top what} {
203	set box [newframe $top]
204	set text [newtext $box]
205	set id [open $what]
206	button $box.close -text "Close" -command "destroy $box"
207
208	pack $text
209	pack $box.close -side right
210	$text.text insert 1.0 [read $id]
211	$text.text config -state disabled
212	close $id
213}
214
215#
216# run a command and display result in "out"
217#
218proc run {out command btn} {
219	$out insert end "$command\n"
220	if [catch {open "|$command |& cat"} input] {
221		$out insert end $input\n
222	} else {
223		set label [$btn cget -text]
224		fileevent $input readable \
225			"cont $out $input $btn \"$label\" \"$command\""
226		$btn config -text "Stop" \
227			-command "stop \"$out\" $input $btn \"$label\" \"$command\""
228	}
229}
230
231#
232proc stop {out input btn label command} {
233	catch {close $input}
234	$btn config -text $label -command "run \"$out\" \"$command\" $btn"
235}
236
237proc cont {out input btn label cmd} {
238	if [eof $input] {
239		stop $out $input $btn "$label" "$cmd"
240	} else {
241		gets $input line
242		$out insert end $line\n
243		$out see end
244	}
245}
246
247
248#
249# run configure command and before read options from the named entry
250#
251proc run_opts {out cmd btn opts} {
252	global inf_makefile_options
253	set inf_makefile_options [$opts get]
254	set command [concat $cmd $inf_makefile_options]
255	$out insert end "$command\n"
256	if [catch {open "|$command |& cat"} input] {
257		$out insert end $input\n
258	} else {
259		set label [$btn cget -text]
260		fileevent $input readable \
261			"cont_opts $out $input $btn \"$label\" \"$cmd\" $opts"
262		$btn config -text "Stop" \
263			-command "stop_opts \"$out\" $input $btn \"$label\" \"$cmd\" $opts"
264	}
265}
266
267#
268# stop running configure
269#
270proc stop_opts {out input btn label command opts} {
271	catch {close $input}
272	$btn config -text $label -command "run_opts \"$out\" \"$command\" $btn $opts"
273}
274
275
276# continue running configure
277#
278proc cont_opts {out input btn label cmd opts} {
279	if [eof $input] {
280		stop_opts $out $input $btn "$label" "$cmd" $opts
281	} else {
282		gets $input line
283		$out insert end $line\n
284		$out see end
285	}
286}
287
288#
289# menu for creating a makefile
290#
291proc m_makefile {top makefile cmd} {
292	global inf_makefile_options
293	set box [newframe $top]
294	set text [newtext $box]
295
296	entry $box.opts -width 24
297	$box.opts insert 0 $inf_makefile_options
298
299	button $box.run -text "Run $cmd" -command \
300			"run_opts $text.text \"$cmd\" $box.run $box.opts"
301
302	button $box.help -text "Options:" -command \
303			"run $text.text \"$cmd --help\" $box.help"
304
305	button $box.edit -text "Edit $makefile" -command "edit $top $makefile"
306	button $box.close -text "Close" -command "destroy $box"
307
308	pack $text
309	pack $box.run -side left
310	pack $box.help -side left
311	pack $box.opts -side left -fill x -expand true
312	pack $box.edit -side left
313	pack $box.close -side right
314	return $box.run
315}
316
317#
318proc save {text file} {
319	set id [open $file w]
320	puts $id [$text get 0.0 end]
321	close $id
322}
323
324#
325proc edit {top file} {
326	set box [newframe $top]
327	set text [newtext $box]
328	set id [open $file]
329	button $box.close -text "Close" -command "destroy $box"
330	button $box.save -text "Save" -command "save $text.text $file"
331
332	pack $text
333	pack $box.save -side left
334	pack $box.close -side right
335	$text.text insert 1.0 [read $id]
336	close $id
337}
338
339#
340proc m_compile {top} {
341	global inf_compile_cmd
342	global inf_clean_cmd
343	global inf_makefile
344	global inf_create_makefile_cmd
345	if {[file exists $inf_makefile] != 1} {
346		set btn [m_makefile $top $inf_makefile $inf_create_makefile_cmd]
347		tkwait visibility $btn
348		event generate $btn <Enter>
349		event generate $btn <ButtonPress-1>
350		event generate $btn <ButtonRelease-1>
351		return
352	}
353	set box [newframe $top]
354	set text [newtext $box]
355	button $box.close -text "Close" -command "destroy $box"
356	button $box.compile -text "Compile" -command \
357				"run $text.text \"$inf_compile_cmd\" $box.compile"
358	button $box.clean -text "Clean" -command \
359				"run $text.text \"$inf_clean_cmd\" $box.clean"
360
361	pack $text
362	pack $box.compile -side left
363	pack $box.clean -side left
364	pack $box.close -side right
365	return $box.compile
366}
367
368#
369proc install {top} {
370	global inf_install_cmd
371	global inf_test_install_cmd
372	global inf_makefile
373	if {[file exists $inf_makefile] != 1} {
374		set btn [m_compile $top]
375		tkwait visibility $btn
376		event generate $btn <Enter>
377		event generate $btn <ButtonPress-1>
378		event generate $btn <ButtonRelease-1>
379		return
380	}
381	set box [newframe $top]
382	set out [newtext $box]
383	button $box.close -text "Close" -command "destroy $box"
384	button $box.install -text "Install" -command \
385				"run \"$out.text\" \"$inf_install_cmd\" $box.install"
386	button $box.test -text "Test" -command \
387				"run \"$out.text\" \"$inf_test_install_cmd\" \ $box.test"
388	pack $out
389	pack $box.install -side left
390	pack $box.test -side left
391	pack $box.close -side right
392}
393
394# create a new container frame inside the canvas
395#
396proc newframe {top} {
397	if {[winfo exists $top.f] == 1} {destroy $top.f}
398	frame $top.f
399	$top create window 310 215 -window $top.f
400	return $top.f
401}
402
403#
404#
405proc newtext {top} {
406	set box $top.text_box
407	frame $box
408	text $box.text -wrap word -yscrollcommand "$box.yscroll set" -height 13
409	scrollbar $box.yscroll -command "$box.text yview" -orient vertical
410	pack $box.text -side left
411	pack $box.yscroll -side right -fill y
412	return $box
413}
414
415