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