#!/usr/bin/wish -f
#
# Microwindows configuration interface: X11 version
#
# wish is available at http://dev.scriptics.com/software/tcltck
#
# (C) Martin Jolicoeur, 1999
#
# Thu Mar 16 14:33:08 CET 2000, Fabio Parodi, <fabio.parodi@iname.com>
#       added VTSWITCH button
#
#

set configfile 0;

# Configurable options
variable arch;
variable armtoolsprefix;
variable mipstoolsprefix;
variable rtemstoolsprefix;
variable optimize;
variable debug;
variable verbose
variable microwin;
variable nanox;
variable shlibs;
variable objframe;
variable nwidget;
variable microwindemo;
variable nanoxdemo;
variable screenpixtype;
variable server;
variable sharedmem;
variable havefileio;
variable havebmp;
variable havejpg;
variable incjpg;
variable libjpg;
variable haveft;
variable incft;
variable libft;
variable havet1;
variable inct1;
variable libt1;

variable havehzk;
variable hzkdir;
variable hzkfontsize;

variable updateregions;
variable erasemove;
variable havemsfonts;
variable graypalette;
variable screenlinux;
variable vgafb;
variable portraitfb;
variable x11e15;
variable x11screenwidth;
variable x11screenheight;
variable x11screendepth;
variable mouselinux;
variable keyblinux;
variable vtswitch;
variable sa1100ltlend;
variable rtemsbuild;
variable rtemsbsp;
variable screenelks;


wm title . "Microwindows configuration"
wm geometry . +100+100

# Create main menu
frame .main
frame .main.col1
frame .main.col2
button .main.col1.compile -text "Compiling options" -command "compileoptions;"
button .main.col1.platform -text "Platform" -command "platformoptions;"
button .main.col1.lib -text "Libraries to compile" -command "liboptions;"
button .main.col2.colors -text "Color options" -command "colorsoptions;"
button .main.col2.io -text "I/O" -command "iooptions;"
button .main.col2.misc -text "Miscellaneous options" -command "miscoptions;"
pack .main.col1.compile .main.col1.platform .main.col1.lib -side top -fill x
pack .main.col2.colors .main.col2.io .main.col2.misc -side top -fill x
pack .main.col1 .main.col2 -side left

# Create ok, cancel, help buttons
frame .buttons
pack .buttons -side bottom -fill x -pady 2m
button .buttons.ok -text "Save & Exit" -command "writeconfig; destroy ."
button .buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
button .buttons.cancel -text "Cancel" -command "destroy ."
pack .buttons.cancel .buttons.help .buttons.ok -side right -expand 1

pack .main .buttons -side bottom


################################################################################
#
# Show the "compile" options dialog
#
################################################################################
proc compileoptions {} {

   toplevel .compile
   wm title .compile "Compiling options"
   wm geometry .compile +100+100

   frame .compile.buttons
   pack .compile.buttons -side bottom -fill x -pady 2m
   button .compile.buttons.ok -text "Ok" -command "destroy .compile"
   button .compile.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .compile.buttons.help .compile.buttons.ok -side right -expand 1

   frame .compile.a0
   frame .compile.a1
   frame .compile.a2
   checkbutton .compile.a0.b0 -text "Optimize" -variable optimize -relief flat
   checkbutton .compile.a1.b1 -text "Debug" -variable debug -relief flat
   checkbutton .compile.a2.b2 -text "Verbose" -variable verbose -relief flat
   pack .compile.a0.b0 -side left
   pack .compile.a1.b1 -side left
   pack .compile.a2.b2 -side left
   pack .compile.a0  -side top -pady 2 -anchor w -fill x
   pack .compile.a1  -side top -pady 2 -anchor w -fill x
   pack .compile.a2  -side top -pady 2 -anchor w -fill x
   pack .compile.a0 .compile.a1 .compile.a2 -side top -anchor e
}


################################################################################
#
# Show the "platform" options dialog
#
################################################################################
proc platformoptions {} {

   toplevel .platform
   wm title .platform "Platform options"
   wm geometry .platform +100+100

   frame .platform.buttons
   pack .platform.buttons -side bottom -fill x -pady 2m
   button .platform.buttons.ok -text "Ok" -command "destroy .platform"
   button .platform.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .platform.buttons.help .platform.buttons.ok -side right -expand 1

   frame .platform.a0
   frame .platform.a1
   frame .platform.a2
   frame .platform.a3
   frame .platform.a4
   frame .platform.a5

   radiobutton .platform.a0.b0 -text "Linux (native)" -variable arch -relief flat -value 0 -anchor w
   button .platform.a0.options -text "Options" -command {nativelinuxoptions;};
   radiobutton .platform.a1.b1 -text "Linux-ARM (x-compile)" -variable arch -relief flat -value 1 -anchor w
   button .platform.a1.options -text "Options" -command {armlinuxoptions;};
   radiobutton .platform.a2.b2 -text "Linux-MIPS (x-compile)" -variable arch -relief flat -value 2 -anchor w
   button .platform.a2.options -text "Options" -command {mipslinuxoptions;};
   radiobutton .platform.a3.b3 -text "RTEMS" -variable arch -relief flat -value 3 -anchor w
   button .platform.a3.options -text "Options" -command {rtemsoptions;};
   radiobutton .platform.a4.b4 -text "Solaris" -variable arch -relief flat -value 4 -anchor w
   button .platform.a4.options -text "Options" -command {nativelinuxoptions;};
   radiobutton .platform.a5.b5 -text "ELKS" -variable arch -relief flat -value 5 -anchor w
   button .platform.a5.options -text "Options" -command {elksoptions;};
   pack .platform.a0.b0 .platform.a0.options -side left
   pack .platform.a1.b1 .platform.a1.options -side left
   pack .platform.a2.b2 .platform.a2.options -side left
   pack .platform.a3.b3 .platform.a3.options -side left
   pack .platform.a4.b4 .platform.a4.options -side left
   pack .platform.a5.b5 .platform.a5.options -side left
   pack .platform.a0  -side top -pady 2 -anchor w -fill x
   pack .platform.a1  -side top -pady 2 -anchor w -fill x
   pack .platform.a2  -side top -pady 2 -anchor w -fill x
   pack .platform.a3  -side top -pady 2 -anchor w -fill x
   pack .platform.a4  -side top -pady 2 -anchor w -fill x
   pack .platform.a5  -side top -pady 2 -anchor w -fill x
   pack .platform.a0.options .platform.a1.options .platform.a2.options \
   .platform.a3.options .platform.a4.options .platform.a5.options -side top -anchor e
}


################################################################################
#
# Show the "libraries" options dialog
#
################################################################################
proc liboptions {} {

   toplevel .lib
   wm title .lib "Libraries to compile"
   wm geometry .lib +100+100

   frame .lib.buttons
   pack .lib.buttons -side bottom -fill x -pady 2m
   button .lib.buttons.ok -text "Ok" -command "destroy .lib"
   button .lib.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .lib.buttons.help .lib.buttons.ok -side right -expand 1

   frame .lib.a0
   frame .lib.a1
   frame .lib.a2
   frame .lib.a3
   checkbutton .lib.a0.b0 -text "NanoX" -variable nanox -relief flat
   button .lib.a0.options -text "Options" -command {nanoxoptions;};
   checkbutton .lib.a1.b1 -text "Microwindows" -variable microwin -relief flat
   button .lib.a1.options -text "Options" -command {mwinoptions;};
   checkbutton .lib.a2.b2 -text "Shared libs" -variable shlibs -relief flat
   checkbutton .lib.a3.b3 -text "C++ obj framework" -variable objframe -relief flat

   pack .lib.a0.b0 .lib.a0.options -side left
   pack .lib.a1.b1 .lib.a1.options -side left
   pack .lib.a2.b2 -side left
   pack .lib.a3.b3 -side left
   pack .lib.a0  -side top -pady 2 -anchor w -fill x
   pack .lib.a1  -side top -pady 2 -anchor w -fill x
   pack .lib.a2  -side top -pady 2 -anchor w -fill x
   pack .lib.a3  -side top -pady 2 -anchor w -fill x
   pack .lib.a0.options .lib.a1.options -side top -anchor e
}


################################################################################
#
# Show the "colors" options dialog
#
################################################################################
proc colorsoptions {} {
   global screenpixtype;

   toplevel .colors
   wm title .colors "Colors options"
   wm geometry .colors +100+100

   frame .colors.buttons
   pack .colors.buttons -side bottom -fill x -pady 2m
   button .colors.buttons.ok -text "Ok" -command "colorsoptions_ok; destroy .colors"
   button .colors.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .colors.buttons.help .colors.buttons.ok -side right -expand 1

   frame .colors.a0
   frame .colors.a1
   label .colors.a0.label -text "ScreenPixType:" -anchor e
   entry .colors.a0.pixtype -width 25 -relief sunken
   checkbutton .colors.a1.b1 -text "Gray Palette (4bpp only)" -variable graypalette -relief flat
   pack .colors.a0.label .colors.a0.pixtype -side left
   pack .colors.a1.b1 -side left
   pack .colors.a0  -side top -pady 2 -anchor w -fill x
   pack .colors.a1  -side top -pady 2 -anchor w -fill x
   pack .colors.a0 .colors.a1 -side top -anchor e
   .colors.a0.pixtype insert 0 $screenpixtype;
}

proc colorsoptions_ok {} {
   global screenpixtype;
   set screenpixtype [.colors.a0.pixtype get];
}


################################################################################
#
# Show the "I/O" options dialog
#
################################################################################
proc iooptions {} {
   global havebmp;
   global havejpg;
   global haveft;
   global havet1;

	global havehzk;

   toplevel .io
   wm title .io "I/O options"
   wm geometry .io +100+100

   frame .io.buttons
   pack .io.buttons -side bottom -fill x -pady 2m
   button .io.buttons.ok -text "Ok" -command "destroy .io"
   button .io.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .io.buttons.help .io.buttons.ok -side right -expand 1

   frame .io.a0
   frame .io.a1
   frame .io.a2
   frame .io.a3
   frame .io.a4

   frame .io.a5

   checkbutton .io.a0.b0 -text "Have File I/O" -variable havefileio -relief flat
   label .io.a0.label -text "(If the above is disabled, this will disable all the features below)" -anchor e
   checkbutton .io.a1.b0 -text "Have bmp support" -variable havebmp -relief flat
   checkbutton .io.a2.b0 -text "Have jpeg support" -variable havejpg -relief flat
   button .io.a2.options -text "Options" -command {jpegoptions;};
   checkbutton .io.a3.b0 -text "Have freetype support (truetype fonts)" -variable haveft -relief flat
   button .io.a3.options -text "Options" -command {ftoptions;};
   checkbutton .io.a4.b0 -text "Have t1lib support (type 1 fonts)" -variable havet1 -relief flat
   button .io.a4.options -text "Options" -command {t1options;};

   checkbutton .io.a5.b0 -text "Have HZK support (Bitmap(Metrix) fonts)" -variable havehzk -relief flat
   button .io.a5.options -text "Options" -command {hzkoptions;};

   pack .io.a0.b0  .io.a0.label -side top -pady 2 -anchor w
   pack .io.a1.b0  -side top -pady 2 -anchor w
   pack .io.a2.b0 .io.a2.options -side left
   pack .io.a3.b0 .io.a3.options -side left
   pack .io.a4.b0 .io.a4.options -side left
   pack .io.a5.b0 .io.a5.options -side left

   pack .io.a0  -side top -pady 2 -anchor w -fill x
   pack .io.a1  -side top -pady 2 -anchor w -fill x
   pack .io.a2  -side top -pady 2 -anchor w -fill x
   pack .io.a3  -side top -pady 2 -anchor w -fill x
   pack .io.a4  -side top -pady 2 -anchor w -fill x
   pack .io.a5  -side top -pady 2 -anchor w -fill x

   pack .io.a2.options .io.a3.options .io.a4.options .io.a5.options -side top -anchor e
}


################################################################################
#
# Show the "Miscellaneous" options dialog
#
################################################################################
proc miscoptions {} {

   toplevel .misc
   wm title .misc "Miscellaneous options"
   wm geometry .misc +100+100

   frame .misc.buttons
   pack .misc.buttons -side bottom -fill x -pady 2m
   button .misc.buttons.ok -text "Ok" -command "destroy .misc"
   button .misc.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .misc.buttons.help .misc.buttons.ok -side right -expand 1

   checkbutton .misc.b0 -text "Have MS fonts" -variable havemsfonts -relief flat
   pack .misc.b0  -side top -pady 2 -anchor w
}


################################################################################
#
# Show nanox options dialog
#
################################################################################
proc nanoxoptions {} {

   toplevel .optnanox
   wm title .optnanox "NanoX options"
   wm geometry .optnanox +100+100

   frame .optnanox.buttons
   pack .optnanox.buttons -side bottom -fill x -pady 2m
   button .optnanox.buttons.ok -text "Ok" -command "destroy .optnanox"
   button .optnanox.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .optnanox.buttons.help .optnanox.buttons.ok -side right -expand 1

   frame .optnanox.a0
   checkbutton .optnanox.a0.server -text "Link app into server" -variable server -relief flat
   checkbutton .optnanox.a0.sharedmem -text "Enable shared mem support (app/server only)" -variable sharedmem -relief flat
   checkbutton .optnanox.a0.nwidget -text "Compile Nwidget library" -variable nwidget -relief flat
   checkbutton .optnanox.a0.demo -text "Compile demos" -variable nanoxdemo -relief flat
   pack .optnanox.a0.server  -side top -pady 2 -anchor w
   pack .optnanox.a0.sharedmem  -side top -pady 2 -anchor w
   pack .optnanox.a0.nwidget  -side top -pady 2 -anchor w
   pack .optnanox.a0.demo  -side top -pady 2 -anchor w
   pack .optnanox.a0  -side top -pady 2 -anchor w -fill x
}


################################################################################
#
# Show microwindows options dialog
#
################################################################################
proc mwinoptions {} {

   toplevel .optmwin
   wm title .optmwin "MicroWindows options"
   wm geometry .optmwin +100+100

   frame .optmwin.buttons
   pack .optmwin.buttons -side bottom -fill x -pady 2m
   button .optmwin.buttons.ok -text "Ok" -command "destroy .optmwin"
   button .optmwin.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .optmwin.buttons.help .optmwin.buttons.ok -side right -expand 1

   frame .optmwin.algo -borderwidth 1 -relief solid
   frame .optmwin.demo -borderwidth 1 -relief solid
   pack .optmwin.algo .optmwin.demo -side top -fill x -pady .5c -padx .5c

   frame .optmwin.algo.a0
   frame .optmwin.algo.a1
   label .optmwin.algo.label -text "Window move agorithm options"
   pack .optmwin.algo.label -side top
   checkbutton .optmwin.algo.a0.b0 -text "Update regions" -variable updateregions -relief flat
   checkbutton .optmwin.algo.a1.b1 -text "Erase Move" -variable erasemove -relief flat
   pack .optmwin.algo.a0.b0  -side top -pady 2 -anchor w
   pack .optmwin.algo.a1.b1  -side top -pady 2 -anchor w
   pack .optmwin.algo.a0  -side top -pady 2 -anchor w -fill x
   pack .optmwin.algo.a1  -side top -pady 2 -anchor w -fill x

   frame .optmwin.demo.a0
   label .optmwin.demo.label -text "Other options"
   pack .optmwin.demo.label -side top
   checkbutton .optmwin.demo.a0.b0 -text "Compile demos" -variable microwindemo -relief flat
   pack .optmwin.demo.a0.b0  -side top -pady 2 -anchor w
   pack .optmwin.demo.a0  -side top -pady 2 -anchor w -fill x
}


################################################################################
#
# Show native linux/Solaris options dialog
#
################################################################################
proc nativelinuxoptions {} {

   toplevel .optnatlinux
   wm title .optnatlinux "Native Linux/Solaris options"
   wm geometry .optnatlinux +100+100

   frame .optnatlinux.buttons
   pack .optnatlinux.buttons -side bottom -fill x -pady 2m
   button .optnatlinux.buttons.ok -text "Ok" -command "destroy .optnatlinux"
   button .optnatlinux.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .optnatlinux.buttons.help .optnatlinux.buttons.ok -side right -expand 1

   button .optnatlinux.screen -text "Screen driver" -command "screenoptions;"
   button .optnatlinux.mouse -text "Mouse driver" -command "mouseoptions;"
   button .optnatlinux.kbd -text "Keyboard driver" -command "kbdoptions;"
   pack .optnatlinux.screen .optnatlinux.mouse .optnatlinux.kbd -side top -fill x
}


################################################################################
#
# Show arm linux options dialog
#
################################################################################
proc armlinuxoptions {} {
   global screenlinux;
   global armtoolsprefix;

   toplevel .optarmlinux
   wm title .optarmlinux "ARM Linux options"
   wm geometry .optarmlinux +100+100

   frame .optarmlinux.buttons
   pack .optarmlinux.buttons -side bottom -fill x -pady 2m
   button .optarmlinux.buttons.ok -text "Ok" -command "armlinuxoptions_ok; destroy .optarmlinux"
   button .optarmlinux.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .optarmlinux.buttons.help .optarmlinux.buttons.ok -side right -expand 1

   frame .optarmlinux.comp -borderwidth 1 -relief solid
   pack .optarmlinux.comp -side top -fill x -pady .5c -padx .5c

   frame .optarmlinux.comp.a0
   label .optarmlinux.comp.label -text "Compiler options"
   pack .optarmlinux.comp.label -side top
   label .optarmlinux.comp.a0.label -text "Tools Prefix:" -anchor e
   entry .optarmlinux.comp.a0.prefix -width 25 -relief sunken
   checkbutton .optarmlinux.comp.a0.sa1100ltlend \
-text "SA1100 Little endian option (for 4 bpp only)" -variable sa1100ltlend -relief flat
   pack .optarmlinux.comp.a0.label  -side top -pady 2 -anchor w
   pack .optarmlinux.comp.a0.prefix  -side top -pady 2 -anchor c
   pack .optarmlinux.comp.a0.sa1100ltlend  -side top -pady 2 -anchor c
   pack .optarmlinux.comp.a0  -side top -pady 2 -anchor w -fill x
   .optarmlinux.comp.a0.prefix insert 0 $armtoolsprefix;

   button .optarmlinux.screen -text "Screen driver" -command "screenoptions;"
   button .optarmlinux.mouse -text "Mouse driver" -command "mouseoptions;"
   button .optarmlinux.kbd -text "Keyboard driver" -command "kbdoptions;"
   pack .optarmlinux.comp .optarmlinux.screen .optarmlinux.mouse .optarmlinux.kbd -side top -fill x
}

proc armlinuxoptions_ok {} {
   global armtoolsprefix;
   set armtoolsprefix [.optarmlinux.comp.a0.prefix get];
}


################################################################################
#
# Show mips linux options dialog
#
################################################################################
proc mipslinuxoptions {} {
   global screenlinux;
   global mipstoolsprefix;

   toplevel .optmipslinux
   wm title .optmipslinux "MIPS Linux options"
   wm geometry .optmipslinux +100+100

   frame .optmipslinux.buttons
   pack .optmipslinux.buttons -side bottom -fill x -pady 2m
   button .optmipslinux.buttons.ok -text "Ok" -command "mipslinuxoptions_ok; destroy .optmipslinux"
   button .optmipslinux.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .optmipslinux.buttons.help .optmipslinux.buttons.ok -side right -expand 1

   frame .optmipslinux.comp -borderwidth 1 -relief solid
   pack .optmipslinux.comp -side top -fill x -pady .5c -padx .5c

   frame .optmipslinux.comp.a0
   label .optmipslinux.comp.label -text "Compiler options"
   pack .optmipslinux.comp.label -side top
   label .optmipslinux.comp.a0.label -text "Tools Prefix:" -anchor e
   entry .optmipslinux.comp.a0.prefix -width 25 -relief sunken
   pack .optmipslinux.comp.a0.label  -side top -pady 2 -anchor w
   pack .optmipslinux.comp.a0.prefix  -side top -pady 2 -anchor c
   pack .optmipslinux.comp.a0  -side top -pady 2 -anchor w -fill x
   .optmipslinux.comp.a0.prefix insert 0 $mipstoolsprefix;

   button .optmipslinux.screen -text "Screen driver" -command "screenoptions;"
   button .optmipslinux.mouse -text "Mouse driver" -command "mouseoptions;"
   button .optmipslinux.kbd -text "Keyboard driver" -command "kbdoptions;"
   pack .optmipslinux.comp .optmipslinux.screen .optmipslinux.mouse .optmipslinux.kbd -side top -fill x
}

proc mipslinuxoptions_ok {} {
   global mipstoolsprefix;
   set mipstoolsprefix [.optmipslinux.comp.a0.prefix get];
}


################################################################################
#
# Show rtems options dialog
#
################################################################################
proc rtemsoptions {} {
   global rtemstoolsprefix;
   global rtemsbuild;
   global rtemsbsp;

   toplevel .optrtems
   wm title .optrtems "RTEMS options"
   wm geometry .optrtems +100+100

   frame .optrtems.buttons
   pack .optrtems.buttons -side bottom -fill x -pady 2m
   button .optrtems.buttons.ok -text "Ok" -command "rtemsoptions_ok; destroy .optrtems"
   button .optrtems.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .optrtems.buttons.help .optrtems.buttons.ok -side right -expand 1

   frame .optrtems.comp -borderwidth 1 -relief solid
   pack .optrtems.comp -side top -fill x -pady .5c -padx .5c

   frame .optrtems.comp.a0
   frame .optrtems.comp.a1
   frame .optrtems.comp.a2
   label .optrtems.comp.label -text "Compiler options"
   pack .optrtems.comp.label -side top
   label .optrtems.comp.a0.label -text "Tools Prefix:" -anchor e
   entry .optrtems.comp.a0.prefix -width 25 -relief sunken
   label .optrtems.comp.a1.label -text "Build:" -anchor e
   entry .optrtems.comp.a1.build -width 25 -relief sunken
   label .optrtems.comp.a2.label -text "BSP:" -anchor e
   entry .optrtems.comp.a2.bsp -width 25 -relief sunken
   pack .optrtems.comp.a0.label  -side top -pady 2 -anchor w
   pack .optrtems.comp.a0.prefix  -side top -pady 2 -anchor c
   pack .optrtems.comp.a1.label .optrtems.comp.a1.build -side top -pady 2 -anchor w
   pack .optrtems.comp.a2.label .optrtems.comp.a2.bsp -side top -pady 2 -anchor w
   pack .optrtems.comp.a0  -side top -pady 2 -anchor w -fill x
   pack .optrtems.comp.a1  -side top -pady 2 -anchor w -fill x
   pack .optrtems.comp.a2  -side top -pady 2 -anchor w -fill x
   pack .optrtems.comp.a0.prefix .optrtems.comp.a1.build .optrtems.comp.a2.bsp  -side top -anchor e
   .optrtems.comp.a0.prefix insert 0 $rtemstoolsprefix;
   .optrtems.comp.a1.build insert 0 $rtemsbuild;
   .optrtems.comp.a2.bsp insert 0 $rtemsbsp;

   button .optrtems.screen -text "Screen driver" -command "screenoptions;"
   button .optrtems.mouse -text "Mouse driver" -command "mouseoptions;"
   button .optrtems.kbd -text "Keyboard driver" -command "kbdoptions;"
   pack .optrtems.comp .optrtems.screen .optrtems.mouse .optrtems.kbd -side top -fill x
}

proc rtemsoptions_ok {} {
   global rtemstoolsprefix;
   global rtemsbuild;
   global rtemsbsp;
   set rtemstoolsprefix [.optrtems.comp.a0.prefix get];
   set rtemsbuild [.optrtems.comp.a1.build get];
   set rtemsbsp [.optrtems.comp.a2.bsp get];
}


################################################################################
#
# Show jpeg options dialog
#
################################################################################
proc jpegoptions {} {
   global incjpg;
   global libjpg;

   toplevel .optjpeg
   wm title .optjpeg "JPEG support options"
   wm geometry .optjpeg +100+100

   frame .optjpeg.buttons
   pack .optjpeg.buttons -side bottom -fill x -pady 2m
   button .optjpeg.buttons.ok -text "Ok" -command "jpegoptions_ok; destroy .optjpeg"
   button .optjpeg.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .optjpeg.buttons.help .optjpeg.buttons.ok -side right -expand 1

   frame .optjpeg.a0
   frame .optjpeg.a1
   label .optjpeg.a0.label -text "Libjpeg include dir:" -anchor e
   entry .optjpeg.a0.incjpg -width 40 -relief sunken
   label .optjpeg.a1.label -text "Libjpeg path:" -anchor e
   entry .optjpeg.a1.libjpg -width 40 -relief sunken
   pack .optjpeg.a0.label  -side top -pady 2 -anchor w
   pack .optjpeg.a0.incjpg  -side top -pady 2 -anchor w
   pack .optjpeg.a1.label  -side top -pady 2 -anchor w
   pack .optjpeg.a1.libjpg  -side top -pady 2 -anchor w
   pack .optjpeg.a0  -side top -pady 2 -anchor w -fill x
   pack .optjpeg.a1  -side top -pady 2 -anchor w -fill x

   pack .optjpeg.a0.incjpg .optjpeg.a1.libjpg  -side top -anchor e

   .optjpeg.a0.incjpg insert 0 $incjpg;
   .optjpeg.a1.libjpg insert 0 $libjpg;
}


proc jpegoptions_ok {} {
   global incjpg;
   global libjpg;
   set incjpg [.optjpeg.a0.incjpg get];
   set libjpg [.optjpeg.a1.libjpg get];
}


################################################################################
#
# Show freetype options dialog
#
################################################################################
proc ftoptions {} {
   global incft;
   global libft;

   toplevel .optft
   wm title .optft "Freetype support options"
   wm geometry .optft +100+100

   frame .optft.buttons
   pack .optft.buttons -side bottom -fill x -pady 2m
   button .optft.buttons.ok -text "Ok" -command "ftoptions_ok; destroy .optft"
   button .optft.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .optft.buttons.help .optft.buttons.ok -side right -expand 1

   frame .optft.a0
   frame .optft.a1
   label .optft.a0.label -text "Freetype include dir:" -anchor e
   entry .optft.a0.incft -width 40 -relief sunken
   label .optft.a1.label -text "Freetype lib path:" -anchor e
   entry .optft.a1.libft -width 40 -relief sunken
   pack .optft.a0.label  -side top -pady 2 -anchor w
   pack .optft.a0.incft  -side top -pady 2 -anchor w
   pack .optft.a1.label  -side top -pady 2 -anchor w
   pack .optft.a1.libft  -side top -pady 2 -anchor w
   pack .optft.a0  -side top -pady 2 -anchor w -fill x
   pack .optft.a1  -side top -pady 2 -anchor w -fill x

   pack .optft.a0.incft .optft.a1.libft  -side top -anchor e

   .optft.a0.incft insert 0 $incft;
   .optft.a1.libft insert 0 $libft;
}


proc ftoptions_ok {} {
   global incft;
   global libft;
   set incft [.optft.a0.incft get];
   set libft [.optft.a1.libft get];
}


################################################################################
#
# Show t1lib options dialog
#
################################################################################
proc t1options {} {
   global inct1;
   global libt1;

   toplevel .optt1
   wm title .optt1 "T1Lib support options"
   wm geometry .optt1 +100+100

   frame .optt1.buttons
   pack .optt1.buttons -side bottom -fill x -pady 2m
   button .optt1.buttons.ok -text "Ok" -command "t1options_ok; destroy .optt1"
   button .optt1.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .optt1.buttons.help .optt1.buttons.ok -side right -expand 1

   frame .optt1.a0
   frame .optt1.a1
   label .optt1.a0.label -text "T1lib include dir:" -anchor e
   entry .optt1.a0.inct1 -width 40 -relief sunken
   label .optt1.a1.label -text "T1lib path:" -anchor e
   entry .optt1.a1.libt1 -width 40 -relief sunken
   pack .optt1.a0.label  -side top -pady 2 -anchor w
   pack .optt1.a0.inct1  -side top -pady 2 -anchor w
   pack .optt1.a1.label  -side top -pady 2 -anchor w
   pack .optt1.a1.libt1  -side top -pady 2 -anchor w
   pack .optt1.a0  -side top -pady 2 -anchor w -fill x
   pack .optt1.a1  -side top -pady 2 -anchor w -fill x

   pack .optt1.a0.inct1 .optt1.a1.libt1  -side top -anchor e

   .optt1.a0.inct1 insert 0 $inct1;
   .optt1.a1.libt1 insert 0 $libt1;
}


proc t1options_ok {} {
   global inct1;
   global libt1;
   set inct1 [.optt1.a0.inct1 get];
   set libt1 [.optt1.a1.libt1 get];
}

################################################################################
#
# Show hzk dir options dialog
#
################################################################################
proc hzkoptions {} {
   global hzkdir;
	 global hzkfontsize;

   toplevel .opthzk
   wm title .opthzk "HZK support options"
   wm geometry .opthzk +100+100

   frame .opthzk.buttons
   pack .opthzk.buttons -side bottom -fill x -pady 2m
   button .opthzk.buttons.ok -text "Ok" -command "hzkoptions_ok; destroy .opthzk"
   button .opthzk.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .opthzk.buttons.help .opthzk.buttons.ok -side right -expand 1

   frame .opthzk.a0
   frame .opthzk.a1
   label .opthzk.a0.label -text "HZK fonts dir:" -anchor e
   entry .opthzk.a0.hzkdir -width 40 -relief sunken
   label .opthzk.a1.label -text "HZK fonts Size:(16 or 12 ,now)" -anchor e
   entry .opthzk.a1.hzksize -width 40 -relief sunken
   pack .opthzk.a0.label  -side top -pady 2 -anchor w
   pack .opthzk.a0.hzkdir -side top -pady 2 -anchor w
   pack .opthzk.a1.label  -side top -pady 2 -anchor w
   pack .opthzk.a1.hzksize -side top -pady 2 -anchor w
   pack .opthzk.a0  -side top -pady 2 -anchor w -fill x
   pack .opthzk.a1  -side top -pady 2 -anchor w -fill x

	 pack .opthzk.a0.hzkdir .opthzk.a1.hzksize -side top -anchor e

   .opthzk.a0.hzkdir insert 0 $hzkdir;
   .opthzk.a1.hzksize insert 0 $hzkfontsize;
}


proc hzkoptions_ok {} {
   global hzkdir;
   global hzkfontsize;
   set hzkdir [.opthzk.a0.hzkdir get];
   set hzkfontsize [.opthzk.a1.hzksize get];

}


################################################################################
#
# Show screen driver options dialog
#
################################################################################
proc screenoptions {} {

   toplevel .optscreen
   wm title .optscreen "Screen driver options"
   wm geometry .optscreen +100+100

   frame .optscreen.buttons
   pack .optscreen.buttons -side bottom -fill x -pady 2m
   button .optscreen.buttons.ok -text "Ok" -command "destroy .optscreen"
   button .optscreen.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .optscreen.buttons.help .optscreen.buttons.ok -side right -expand 1

   frame .optscreen.a0
   frame .optscreen.a1
   frame .optscreen.a2
   frame .optscreen.a3
   radiobutton .optscreen.a0.b0 -text "Framebuffer" -variable screenlinux -relief flat -value 0 -anchor w
   button .optscreen.a0.options -text "Options" -command {fboptions;};
   radiobutton .optscreen.a1.b1 -text "X11" -variable screenlinux -relief flat -value 1 -anchor w
   button .optscreen.a1.options -text "Options" -command {x11options;};
   radiobutton .optscreen.a2.b2 -text "VgaLib" -variable screenlinux -relief flat -value 2 -anchor w
   radiobutton .optscreen.a3.b3 -text "HW Vga" -variable screenlinux -relief flat -value 3 -anchor w
   pack .optscreen.a0.b0 .optscreen.a0.options -side left
   pack .optscreen.a1.b1  .optscreen.a1.options -side left
   pack .optscreen.a2.b2  -side top -pady 2 -anchor w
   pack .optscreen.a3.b3  -side top -pady 2 -anchor w
   pack .optscreen.a0  -side top -pady 2 -anchor w -fill x
   pack .optscreen.a1  -side top -pady 2 -anchor w -fill x
   pack .optscreen.a2  -side top -pady 2 -anchor w -fill x
   pack .optscreen.a3  -side top -pady 2 -anchor w -fill x
   pack .optscreen.a0.options .optscreen.a1.options  -side top -anchor e
}


################################################################################
#
# Show mouse options dialog
#
################################################################################
proc mouseoptions {} {

   toplevel .optmouse
   wm title .optmouse "Mouse driver options"
   wm geometry .optmouse +100+100

   frame .optmouse.buttons
   pack .optmouse.buttons -side bottom -fill x -pady 2m
   button .optmouse.buttons.ok -text "Ok" -command "destroy .optmouse"
   button .optmouse.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .optmouse.buttons.help .optmouse.buttons.ok -side right -expand 1

   frame .optmouse.a0
   frame .optmouse.a1
   frame .optmouse.a2
   frame .optmouse.a3
   frame .optmouse.a4
   radiobutton .optmouse.a0.b0 -text "GPM mouse" -variable mouselinux -relief flat -value 0 -anchor w
   radiobutton .optmouse.a1.b1 -text "Serial mouse" -variable mouselinux -relief flat -value 1 -anchor w
   radiobutton .optmouse.a2.b2 -text "Touch Pad" -variable mouselinux -relief flat -value 2 -anchor w
   radiobutton .optmouse.a3.b3 -text "Touch screen" -variable mouselinux -relief flat -value 3 -anchor w
   radiobutton .optmouse.a4.b4 -text "No Mouse" -variable mouselinux -relief flat -value 4 -anchor w
   pack .optmouse.a0.b0  -side top -pady 2 -anchor w
   pack .optmouse.a1.b1  -side top -pady 2 -anchor w
   pack .optmouse.a2.b2  -side top -pady 2 -anchor w
   pack .optmouse.a3.b3  -side top -pady 2 -anchor w
   pack .optmouse.a4.b4  -side top -pady 2 -anchor w
   pack .optmouse.a0  -side top -pady 2 -anchor w -fill x
   pack .optmouse.a1  -side top -pady 2 -anchor w -fill x
   pack .optmouse.a2  -side top -pady 2 -anchor w -fill x
   pack .optmouse.a3  -side top -pady 2 -anchor w -fill x
   pack .optmouse.a4  -side top -pady 2 -anchor w -fill x
}


################################################################################
#
# Show keyboard options dialog
#
################################################################################
proc kbdoptions {} {

   toplevel .optkbd
   wm title .optkbd "Keyboard driver options"
   wm geometry .optkbd +100+100

   frame .optkbd.buttons
   pack .optkbd.buttons -side bottom -fill x -pady 2m
   button .optkbd.buttons.ok -text "Ok" -command "destroy .optkbd"
   button .optkbd.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .optkbd.buttons.help .optkbd.buttons.ok -side right -expand 1

   frame .optkbd.a0
   frame .optkbd.a1
   radiobutton .optkbd.a0.b0 -text "TTY" -variable keyblinux -relief flat -value 0 -anchor w
   radiobutton .optkbd.a1.b0 -text "No keyboard" -variable keyblinux -relief flat -value 1 -anchor w
   pack .optkbd.a0.b0  -side top -pady 2 -anchor w
   pack .optkbd.a1.b0  -side top -pady 2 -anchor w
   pack .optkbd.a0  -side top -pady 2 -anchor w -fill x
   pack .optkbd.a1  -side top -pady 2 -anchor w -fill x
}


################################################################################
#
# Show framebuffer options dialog
#
################################################################################
proc fboptions {} {

   toplevel .optfb
   wm title .optfb "Framebuffer options"
   wm geometry .optfb +100+100

   frame .optfb.buttons
   pack .optfb.buttons -side bottom -fill x -pady 2m
   button .optfb.buttons.ok -text "Ok" -command "destroy .optfb"
   button .optfb.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .optfb.buttons.help .optfb.buttons.ok -side right -expand 1

   frame .optfb.a0
   frame .optfb.a1
   frame .optfb.a2
   checkbutton .optfb.a0.vgafb -text "VGA fb" -variable vgafb -relief flat
   checkbutton .optfb.a1.portrait -text "Portrait mode" -variable portraitfb -relief flat
   checkbutton .optfb.a2.vt -text "VTerm Switch code included" -variable vtswitch -relief flat
   pack .optfb.a0.vgafb  -side top -pady 2 -anchor w
   pack .optfb.a1.portrait  -side top -pady 2 -anchor w
   pack .optfb.a2.vt  -side top -pady 2 -anchor w
   pack .optfb.a0 .optfb.a1 .optfb.a2 -side top -pady 2 -anchor w -fill x
}


################################################################################
#
# Show X11 options dialog
#
################################################################################
proc x11options {} {
   global x11screenwidth;
   global x11screenheight;
   global x11screendepth;
   global x11e15;

   toplevel .optx11
   wm title .optx11 "X11 options"
   wm geometry .optx11 +100+100

   frame .optx11.buttons
   pack .optx11.buttons -side bottom -fill x -pady 2m
   button .optx11.buttons.ok -text "Ok" -command "x11options_ok; destroy .optx11"
   button .optx11.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .optx11.buttons.help .optx11.buttons.ok -side right -expand 1

   frame .optx11.a0
   frame .optx11.a1
   frame .optx11.a2
   frame .optx11.a3
   label .optx11.a0.label -text "Screen width:" -anchor e
   entry .optx11.a0.width -width 5 -relief sunken
   label .optx11.a1.label -text "Screen height:" -anchor e
   entry .optx11.a1.height -width 5 -relief sunken
   label .optx11.a2.label -text "Screen depth:" -anchor e
   entry .optx11.a2.depth -width 5 -relief sunken
   checkbutton .optx11.a3.x11e15 -text "Use predefined model E15" -variable x11e15 -relief flat
   pack .optx11.a0.label .optx11.a0.width  -side left
   pack .optx11.a1.label .optx11.a1.height -side left
   pack .optx11.a2.label .optx11.a2.depth -side left
   pack .optx11.a3.x11e15  -side top -pady 2 -anchor w
   pack .optx11.a0  -side top -pady 2 -anchor w -fill x
   pack .optx11.a1  -side top -pady 2 -anchor w -fill x
   pack .optx11.a2  -side top -pady 2 -anchor w -fill x
   pack .optx11.a3  -side top -pady 2 -anchor w -fill x
   pack .optx11.a0.width .optx11.a1.height .optx11.a2.depth -side top -anchor e
   .optx11.a0.width insert 0 $x11screenwidth;
   .optx11.a1.height insert 0 $x11screenheight;
   .optx11.a2.depth insert 0 $x11screendepth;
}

proc x11options_ok {} {
   global x11screenwidth;
   global x11screenheight;
   global x11screendepth;
   set x11screenwidth [.optx11.a0.width get];
   set x11screenheight [.optx11.a1.height get];
   set x11screendepth [.optx11.a2.depth get];
}


################################################################################
#
# Show elks options dialog
#
################################################################################
proc elksoptions {} {
   global screenelks;

   toplevel .optelks
   wm title .optelks "ELKS options"
   wm geometry .optelks +100+100

   frame .optelks.buttons
   pack .optelks.buttons -side bottom -fill x -pady 2m
   button .optelks.buttons.ok -text "Ok" -command "destroy .optelks"
   button .optelks.buttons.help -text "Help" -command "tk_dialog .help message TODO \"\" 0 ok"
   pack .optelks.buttons.help .optelks.buttons.ok -side right -expand 1

   frame .optelks.sd -borderwidth 1 -relief solid
   pack .optelks.sd -side top -fill x -pady .5c -padx .5c

   frame .optelks.sd.a0
   frame .optelks.sd.a1
   frame .optelks.sd.a2
   label .optelks.sd.label -text "Screen driver"
   pack .optelks.sd.label -side top
   radiobutton .optelks.sd.a0.b0 -text "ASM VGA (faster)" -variable screenelks -relief flat -value 0 -anchor w
   radiobutton .optelks.sd.a1.b1 -text "C VGA " -variable screenelks -relief flat -value 1 -anchor w
   radiobutton .optelks.sd.a2.b2 -text "Hercule" -variable screenelks -relief flat -value 2 -anchor w
   pack .optelks.sd.a0.b0  -side top -pady 2 -anchor w
   pack .optelks.sd.a1.b1  -side top -pady 2 -anchor w
   pack .optelks.sd.a2.b2  -side top -pady 2 -anchor w
   pack .optelks.sd.a0  -side top -pady 2 -anchor w -fill x
   pack .optelks.sd.a1  -side top -pady 2 -anchor w -fill x
   pack .optelks.sd.a2  -side top -pady 2 -anchor w -fill x
}


################################################################################
#
# Read data from the configuration file
#
################################################################################
proc readconfig {} {
   global configfile;

   global arch;
   global armtoolsprefix;
   global mipstoolsprefix;
   global rtemstoolsprefix;
   global optimize;
   global debug;
   global verbose
   global microwin;
   global nanox;
   global shlibs;
   global objframe;
   global nwidget;
   global microwindemo;
   global nanoxdemo;
   global screenpixtype;
   global server;
   global sharedmem;
   global havefileio;
   global havebmp;
   global havejpg;
   global incjpg;
   global libjpg;
   global haveft;
   global incft;
   global libft;
   global havet1;
   global inct1;
   global libt1;
   global havehzk;
   global hzkdir;	
   global hzkfontsize;
   global updateregions;
   global erasemove;
   global havemsfonts;
   global graypalette;
   global screenlinux;
   global vgafb;
   global portraitfb;
   global x11e15;
   global x11screenwidth;
   global x11screenheight;
   global x11screendepth;
   global mouselinux;
   global keyblinux;
   global vtswitch;
   global sa1100ltlend;
   global rtemsbuild;
   global rtemsbsp;
   global screenelks;

   set configfile [open "config" r+]

   set armtoolsprefix [getvalue "ARMTOOLSPREFIX" 0];
   set mipstoolsprefix [getvalue "MIPSTOOLSPREFIX" 0];
   set rtemstoolsprefix [getvalue "RTEMSTOOLSPREFIX" 0];

   set arch [getvalue "ARCH" 0];
   switch -exact $arch {
        LINUX-NATIVE {set arch 0;}
        LINUX-ARM {set arch 1;}
        LINUX-MIPS {set arch 2;}
        RTEMS {set arch 3;}
        SOLARIS {set arch 4;}
        ELKS {set arch 5;}
        default {set arch 0}
   }

   set optimize [getvalue "OPTIMIZE" 1];
   set debug [getvalue "DEBUG" 1];
   set verbose [getvalue "VERBOSE" 1];
   
   set vtswitch [getvalue "VTSWITCH" 1];

   set microwin [getvalue "MICROWIN" 1];
   set nanox [getvalue "NANOX" 1];
   set shlibs [getvalue "SHAREDLIBS" 1];
   set objframe [getvalue "OBJFRAMEWORK" 1];
   set nwidget [getvalue "NWIDGET" 1];

   set microwindemo [getvalue "MICROWINDEMO" 1]
   set nanoxdemo [getvalue "NANOXDEMO" 1];

   set screenpixtype [getvalue "SCREEN_PIXTYPE" 0]
   set server [getvalue "LINK_APP_INTO_SERVER" 1];
   set sharedmem [getvalue "HAVE_SHAREDMEM_SUPPORT" 1];

   set havefileio [getvalue "HAVE_FILEIO" 1];
   set havebmp [getvalue "HAVE_BMP_SUPPORT" 1];
   set havejpg [getvalue "HAVE_JPEG_SUPPORT" 1];
   set incjpg [getvalue "INCJPEG" 0];
   set libjpg [getvalue "LIBJPEG" 0];
   set haveft [getvalue "HAVE_FREETYPE_SUPPORT" 1];
   set incft [getvalue "INCFTLIB" 0];
   set libft [getvalue "LIBFTLIB" 0];
   set havet1 [getvalue "HAVE_T1LIB_SUPPORT" 1];
   set inct1 [getvalue "INCT1LIB" 0];
   set libt1 [getvalue "LIBT1LIB" 0];

   set havehzk [getvalue "HAVE_HZK_SUPPORT" 1];
   set hzkdir		[getvalue "HZK_FONT_DIR" 0];	
   set hzkfontsize [getvalue "HZK_FONT_SIZE" 0];

   set updateregions [getvalue "UPDATEREGIONS" 1]
   set erasemove [getvalue "ERASEMOVE" 1]

   set havemsfonts [getvalue "HAVEMSFONTS" 1];

   set graypalette [getvalue "GRAYPALETTE" 1];

   set vgafb [getvalue "FBVGA" 1]
   set portraitfb [getvalue "PORTRAIT_MODE" 1]

   set x11e15 [getvalue "SCREEN_E15 1" 1]
   set x11screenwidth [getvalue "SCREEN_WIDTH" 0]
   set x11screenheight [getvalue "SCREEN_HEIGHT" 0]
   set x11screendepth [getvalue "SCREEN_DEPTH" 0]

   set sa1100ltlend [getvalue "SA1100_LCD_LTLEND" 1]
   set rtemsbuild [getvalue "RTEMS_BUILD" 0]
   set rtemsbsp [getvalue "RTEMS_BSP" 0]

   if {[getvalue "FRAMEBUFFER" 1] == 1} {set screenlinux 0;}
   if {[getvalue "X11" 1] == 1} {set screenlinux 1}
   if {[getvalue "VGALIB" 1] == 1} {set screenlinux 2}
   if {[getvalue "HWVGA" 1] == 1} {set screenlinux 3}

   if {[getvalue "GPMMOUSE" 1] == 1} {set mouselinux 0;}
   if {[getvalue "SERMOUSE" 1] == 1} {set mouselinux 1}
   if {[getvalue "TPMOUSE" 1] == 1} {set mouselinux 2}
   if {[getvalue "TSMOUSE" 1] == 1} {set mouselinux 3}
   if {[getvalue "NOMOUSE" 1] == 1} {set mouselinux 4}

   if {[getvalue "TTYKBD" 1] == 1} {set keyblinux 0;}
   if {[getvalue "NOKBD" 1] == 1} {set keyblinux 1;}

   if {[getvalue "ASMVGADRIVER" 1] == 1} {set screenelks 0;}
   if {[getvalue "CVGADRIVER" 1] == 1} {set screenelks 1}
   if {[getvalue "HERCDRIVER" 1] == 1} {set screenelks 2}

   close $configfile;
}


################################################################################
#
# Get a value from the config file
#
################################################################################
proc getvalue {name isyesorno} {
   global configfile;

   set line 0;

   seek $configfile 0 start;

   while {[eof $configfile] == 0} {
      set line [gets $configfile];

      if {[regexp ($name)(\ |\t)*(=)(\ |\t)*(.*) $line all a b c d e] == 1} {
         set $e [string trim $e]

         if {$isyesorno == 1} {
            switch -exact $e {
            N {return 0;}
            Y {return 1;}
            default {return 0}
            }
         }

         return $e
      }
   }
}


################################################################################
#
# Write data to the configuration file
#
################################################################################
proc writeconfig {} {
   global arch;
   global armtoolsprefix;
   global mipstoolsprefix;
   global rtemstoolsprefix;
   global optimize;
   global debug;
   global verbose
   global microwin;
   global nanox;
   global shlibs;
   global objframe;
   global nwidget;
   global microwindemo;
   global nanoxdemo;
   global screenpixtype;
   global server;
   global sharedmem;
   global havefileio;
   global havebmp;
   global havejpg;
   global incjpg;
   global libjpg;
   global haveft;
   global incft;
   global libft;
   global havet1;
   global inct1;
   global libt1;
   global havehzk;
   global hzkdir;
   global hzkfontsize;
   global updateregions;
   global erasemove;
   global havemsfonts;
   global graypalette;
   global screenlinux;
   global vgafb;
   global portraitfb;
   global x11e15;
   global x11screenwidth;
   global x11screenheight;
   global x11screendepth;
   global mouselinux;
   global keyblinux;
   global vtswitch;
   global sa1100ltlend;
   global rtemsbuild;
   global rtemsbsp;
   global screenelks;

   if {$arch == 0} {putvalue "ARCH" "LINUX-NATIVE"
   } elseif {$arch == 1} {putvalue "ARCH" "LINUX-ARM"
   } elseif {$arch == 2} {putvalue "ARCH" "LINUX-MIPS"
   } elseif {$arch == 3} {putvalue "ARCH" "RTEMS"
   } elseif {$arch == 4} {putvalue "ARCH" "SOLARIS"
   } elseif {$arch == 5} {putvalue "ARCH" "ELKS"}

   putvalue "ARMTOOLSPREFIX" $armtoolsprefix;
   putvalue "MIPSTOOLSPREFIX" $mipstoolsprefix;
   putvalue "RTEMSTOOLSPREFIX" $rtemstoolsprefix;
   putvalue "OPTIMIZE" $optimize;
   putvalue "DEBUG" $debug;
   putvalue "VERBOSE" $verbose;
   putvalue "MICROWIN" $microwin
   putvalue "NANOX" $nanox;
   putvalue "SHAREDLIBS" $shlibs;
   putvalue "OBJFRAMEWORK" $objframe;
   putvalue "NWIDGET" $nwidget;
   putvalue "MICROWINDEMO" $microwindemo;
   putvalue "NANOXDEMO" $nanoxdemo;
   putvalue "SCREEN_PIXTYPE" $screenpixtype;
   putvalue "LINK_APP_INTO_SERVER" $server;
   putvalue "HAVE_SHAREDMEM_SUPPORT" $sharedmem;
   putvalue "HAVE_FILEIO" $havefileio;
   putvalue "HAVE_BMP_SUPPORT" $havebmp;
   putvalue "HAVE_JPEG_SUPPORT" $havejpg;
   putvalue "INCJPEG" $incjpg;
   putvalue "LIBJPEG" $libjpg;
   putvalue "HAVE_FREETYPE_SUPPORT" $haveft;
   putvalue "INCFTLIB" $incft;
   putvalue "LIBFTLIB" $libft;
   putvalue "HAVE_T1LIB_SUPPORT" $havet1;
   putvalue "INCT1LIB" $inct1;
   putvalue "LIBT1LIB" $libt1;
   putvalue "HAVE_HZK_SUPPORT" $havehzk;
   putvalue "HZK_FONT_DIR"		$hzkdir;
   putvalue "HZK_FONT_SIZE"		$hzkfontsize;

   putvalue "UPDATEREGIONS" $updateregions;
   putvalue "ERASEMOVE" $erasemove;
   putvalue "HAVEMSFONTS" $havemsfonts;
   putvalue "GRAYPALETTE" $graypalette;
   putvalue "PORTRAIT_MODE" $portraitfb;
   putvalue "FBVGA" $vgafb;
   putvalue "SCREEN_E15" $x11e15;
   putvalue "SCREEN_WIDTH" $x11screenwidth;
   putvalue "SCREEN_HEIGHT" $x11screenheight;
   putvalue "SCREEN_DEPTH" $x11screendepth;
   putvalue "RTEMS_BUILD" $rtemsbuild;
   putvalue "RTEMS_BSP" $rtemsbsp;
   putvalue "SA1100_LCD_LTLEND" $sa1100ltlend;

   if {$screenlinux == 0} {
      putvalue "FRAMEBUFFER" 1;
      putvalue "X11" 0;
      putvalue "VGALIB" 0;
      putvalue "HWVGA" 0;
   } elseif {$screenlinux == 1} {
      putvalue "FRAMEBUFFER" 0;
      putvalue "X11" 1;
      putvalue "VGALIB" 0;
      putvalue "HWVGA" 0;
   } elseif {$screenlinux == 2} {
      putvalue "FRAMEBUFFER" 0;
      putvalue "X11" 0;
      putvalue "VGALIB" 1;
      putvalue "HWVGA" 0;
   } elseif {$screenlinux == 2} {
      putvalue "FRAMEBUFFER" 0;
      putvalue "X11" 0;
      putvalue "VGALIB" 0;
      putvalue "HWVGA" 1;
   }

   if {$mouselinux == 0} {
      putvalue "GPMMOUSE" 1;
      putvalue "SERMOUSE" 0;
      putvalue "TPMOUSE" 0;
      putvalue "TSMOUSE" 0;
      putvalue "NOMOUSE" 0;
   } elseif {$mouselinux == 1} {
      putvalue "GPMMOUSE" 0;
      putvalue "SERMOUSE" 1;
      putvalue "TPMOUSE" 0;
      putvalue "TSMOUSE" 0;
      putvalue "NOMOUSE" 0;
   } elseif {$mouselinux == 2} {
      putvalue "GPMMOUSE" 0;
      putvalue "SERMOUSE" 0;
      putvalue "TPMOUSE" 1;
      putvalue "TSMOUSE" 0;
      putvalue "NOMOUSE" 0;
   } elseif {$mouselinux == 3} {
      putvalue "GPMMOUSE" 0;
      putvalue "SERMOUSE" 0;
      putvalue "TPMOUSE" 0;
      putvalue "TSMOUSE" 1;
      putvalue "NOMOUSE" 0;
   } elseif {$mouselinux == 4} {
      putvalue "GPMMOUSE" 0;
      putvalue "SERMOUSE" 0;
      putvalue "TPMOUSE" 0;
      putvalue "TSMOUSE" 0;
      putvalue "NOMOUSE" 1;
   }

   if {$keyblinux == 0} {
      putvalue "TTYKBD" 1;
      putvalue "NOKBD" 0;
   } elseif {$keyblinux == 1} {
      putvalue "TTYKBD" 0;
      putvalue "NOKBD" 1;
   }

   putvalue "VTSWITCH" $vtswitch;

   if {$screenelks == 0} {
      putvalue "ASMVGADRIVER" 1;
      putvalue "CVGADRIVER" 0;
      putvalue "HERCDRIVER" 0;
   } elseif {$screenelks == 1} {
      putvalue "ASMVGADRIVER" 0;
      putvalue "CVGADRIVER" 1;
      putvalue "HERCDRIVER" 0;
   } elseif {$screenelks == 2} {
      putvalue "ASMVGADRIVER" 0;
      putvalue "CVGADRIVER" 0;
      putvalue "HERCDRIVER" 1;
   }

   puts "Now type `make` ... Enjoy"
}


################################################################################
#
# Write a value to the configuration file
#
################################################################################
proc putvalue {name value} {
   global configfile;

   set found 0;
   set configfile [open "config" r+]
   set tempconfigfile [open "config~" w+]

   if {$value == "0"} {set value "N"} elseif {$value == "1"} {set value "Y"}

   seek $configfile 0 start;
   seek $tempconfigfile 0 start;

   while {[eof $configfile] == 0} {
      set linelength [gets $configfile line];

      if {[regexp ($name)(\ |\t)*(=)(\ |\t)*(.*) $line all a b c d e] == 1 && $found == 0} {
         set $e [string trim $e]

         puts -nonewline $tempconfigfile $name

         set padding [expr 25 - [string length $name]]

         for {set i 0} {$i < $padding} {incr i} {
            puts  -nonewline $tempconfigfile " "
         }

         puts $tempconfigfile "= $value"

         set found 1;
      } else {
         if {[eof $configfile] == 0} {
            puts $tempconfigfile $line
         } else {
            puts -nonewline $tempconfigfile $line
         }
      }
   }


   close $tempconfigfile;
   close $configfile;

   file rename -force "config~" "config"  
}

# Initialization ...
readconfig;
