build_checklist()  {

  STATUS=$1
  LABEL=$2
  shift  2

  for  ITEM  in  $@;  do
    echo  $ITEM  $LABEL  $STATUS
  done

}


select_card_drivers()  {

  TITLE="Graphics Card Driver Selection Menu"
  HELP="Key:  [X] = on, [ ] = off"

  CHECKLIST="`build_checklist ON   Graphics   $ON_CARD_DRIVERS`
             `build_checklist OFF  Graphics  $OFF_CARD_DRIVERS`"

  if  XF86CardDrivers=`dialog  --backtitle  "$BACKTITLE"  \
                               --title      "$TITLE"      \
                               --stdout                   \
                               --separate-output          \
                               --checklist  "$HELP"       \
                               18 55 10                   \
                               $CHECKLIST`
  then
     ON_CARD_DRIVERS=$XF86CardDrivers
    OFF_CARD_DRIVERS=$CARD_DRIVERS

    for  ITEM  in  $ON_CARD_DRIVERS;  do
      OFF_CARD_DRIVERS=`echo  $OFF_CARD_DRIVERS  |  sed  s/$ITEM//`
    done
  fi

}

select_devel_card_drivers()  {

  TITLE="Development Graphics Card Driver Selection Menu"
  HELP="Key:  [X] = on, [ ] = off"

  CHECKLIST="`build_checklist ON   Graphics   $ON_DEVEL_CARD_DRIVERS`
             `build_checklist OFF  Graphics  $OFF_DEVEL_CARD_DRIVERS`"

  if  DevelCardDrivers=`dialog  --backtitle  "$BACKTITLE"  \
                                --title      "$TITLE"      \
                                --stdout                   \
                                --separate-output          \
                                --checklist  "$HELP"       \
                                18 55 10                   \
                                $CHECKLIST`
  then
     ON_DEVEL_CARD_DRIVERS=$DevelCardDrivers
    OFF_DEVEL_CARD_DRIVERS=$DEVEL_CARD_DRIVERS

    for  ITEM  in  $ON_DEVEL_CARD_DRIVERS;  do
      OFF_DEVEL_CARD_DRIVERS=`echo  $OFF_DEVEL_CARD_DRIVERS  |  sed  s/$ITEM//`
    done
  fi

}

select_dridrivers()  {

  TITLE="DRI Driver Selection Menu"
  HELP="Not all XOrg supported graphics cards have DRI.
Key:  [X] = on, [ ] = off"

    CHECKLIST="`build_checklist  ON   DRI   $ON_DRI`
               `build_checklist  OFF  DRI  $OFF_DRI`"

  if  DriDrivers=`dialog  --backtitle  "$BACKTITLE"  \
                          --title      "$TITLE"      \
                          --stdout                   \
                          --separate-output          \
                          --checklist  "$HELP"       \
                          18 55 10                   \
                          $CHECKLIST`
  then
     ON_DRI=$DriDrivers
    OFF_DRI=$DRI

    for  ITEM  in  $ON_DRI;  do
      OFF_DRI=`echo  $OFF_DRI  |  sed  s/$ITEM//`
    done
  fi

}

select_devel_dridrivers()  {

  TITLE="Devel DRI Driver Selection Menu"
  HELP="Not all XOrg supported graphics cards have DRI.
Key:  [X] = on, [ ] = off"

    CHECKLIST="`build_checklist  ON   DRI   $ON_DEVEL_DRI`
               `build_checklist  OFF  DRI  $OFF_DEVEL_DRI`"

  if  DevelDriDrivers=`dialog  --backtitle  "$BACKTITLE"  \
                               --title      "$TITLE"      \
                               --stdout                   \
                               --separate-output          \
                               --checklist  "$HELP"       \
                               18 55 10                   \
                               $CHECKLIST`
  then
     ON_DEVEL_DRI=$DevelDriDrivers
    OFF_DEVEL_DRI=$DEVEL_DRI

    for  ITEM  in  $ON_DEVEL_DRI;  do
      OFF_DEVEL_DRI=`echo  $OFF_DEVEL_DRI  |  sed  s/$ITEM//`
    done
  fi

}


select_input_drivers()  {

  TITLE="Input Driver Selection Menu"
  HELP="Key:  [X] = on, [ ] = off"

  CHECKLIST="`build_checklist  ON   Input   $ON_INPUT_DRIVERS`
             `build_checklist  OFF  Input  $OFF_INPUT_DRIVERS`"

  if  XInputDrivers=`dialog  --backtitle  "$BACKTITLE"  \
                             --title      "$TITLE"      \
                             --stdout                   \
                             --separate-output          \
                             --checklist  "$HELP"       \
                             18 55 10                   \
                             $CHECKLIST`
  then
     ON_INPUT_DRIVERS=$XInputDrivers
    OFF_INPUT_DRIVERS=$INPUT_DRIVERS

    for  ITEM  in  $ON_INPUT_DRIVERS;  do
      OFF_INPUT_DRIVERS=`echo  $OFF_INPUT_DRIVERS  |  sed  s/$ITEM//`
    done
  fi

}


initialize()  {

  BACKTITLE="Source Mage XOrg host.def Configuration Menu"

   ON_CARD_DRIVERS="apm ark ati chips cirrus cyrix fbdev glide glint i128 i740
                    i810 imstt mga neomagic nsc nv rendition s3 s3virge savage
                    siliconmotion sis sisusb tdfx tga trident tseng vesa vga
                    via vmware"
  OFF_CARD_DRIVERS=""
      CARD_DRIVERS="$ON_CARD_DRIVERS  $OFF_CARD_DRIVERS"

   ON_DEVEL_CARD_DRIVERS=""
  OFF_DEVEL_CARD_DRIVERS="imstt newport"
      DEVEL_CARD_DRIVERS="$ON_DEVEL_CARD_DRIVERS  $OFF_DEVEL_CARD_DRIVERS"

   ON_DRI="gamma i810 i915 mga r128 r200 radeon sis tdfx"
  OFF_DRI=""
      DRI="$ON_DRI  $OFF_DRI"

   ON_DEVEL_DRI=""
  OFF_DEVEL_DRI="ffb mach64 savage unichrome"
      DEVEL_DRI="$ON_DEVEL_DRI  $OFF_DEVEL_DRI"


   ON_INPUT_DRIVERS="mouse keyboard"
  OFF_INPUT_DRIVERS="aiptek calcomp citron digitaledge dmc dynapro elographics
                     evdev fpit hyperpen js_x microtouch mutouch palmax penmount
                     spaceorb summa tek4957 ur98 voide wacom"
  OFF_INPUT_DRIVERS="acecad calcomp citron digitaledge dmc dynapro elographics
                     evdev
                     fpit hyperpen jamstudio magictouch magellan microtouch
                     mutouch palmax penmount summa tek4957 spaceorb wacom void"
      INPUT_DRIVERS="$ON_INPUT_DRIVERS  $OFF_INPUT_DRIVERS"


  YES_FONT_OPTIONS="MakeLocalFontDir Build75DpiFonts Build100DpiFonts
                    BuildType1Fonts BuildTrueTypeFonts BuildCIDFonts
                    GzipFontCompression CompressAllFonts BuildXF86BigfontExt
                    BuildCID BuildFreeType BuildCyrillicFonts
                    BuildLatin2Fonts BuildArabicFonts BuildThaiFonts
                    BuildGreekFonts BuildHebrewFonts BuildJapaneseFonts
                    BuildKoreanFonts BuildBethMarduthoFonts BuildEthiopicFonts
                    BuildChineseFonts BuildISO8859_2Fonts BuildISO8850_3Fonts
                    BuildISO8859_4Fonts BuildISO8859_9Fonts BuildISO8859_10Fonts
                    BuildISO8859_13Fonts BuildISO8859_14Fonts
                    BuildISO8859_15Fonts BuildISO8859_16Fonts BuildSpeedo
                    BuildSpeedoFonts BuildType1 UseKoi8RForCyrillic"
   NO_FONT_OPTIONS="BuildBuiltinFonts BuildFontServer InstallFSConfig"
      FONT_OPTIONS="$YES_FONT_OPTIONS  $NO_FONT_OPTIONS"

    YES_EXTENSIONS="BuildXF86RushExt BuildDBElib BuildRECORDlib BuildXKBlib 
                    BuildScreenSaverExt BuildXInputExt BuildXinerama BuildGlxExt
                    BuildRender BuildXF86VidModeExt BuildXF86MiscExt
                    BuildXF86DGA BuildDPMSExt BuildXvMCExt BuildXResExt"
     NO_EXTENSIONS="JoystickSupport"
        EXTENSIONS="$YES_EXTENSIONS  $NO_EXTENSIONS"

     YES_LIBRARIES="BuildGLULibrary BuildOSMesaLib BuildScreenSaverLibrary
                    BuildXF86MiscLibrary BuildXF86DGALibrary BuildXVLibrary
                    BuildXF86VidModeLibrary BuildXvMCLibrary BuildGLXLibrary
                    BuildXResLibrary"
      NO_LIBRARIES=""
         LIBRARIES="$YES_LIBRARIES  $NO_LIBRARIES"

  YES_MISC_OPTIONS="HasShm BuildXF86DRI BuildXF86OldDRMCompat UseRgbTxt
                    InstallXinitConfig InstallXdmConfig XnestServer"
   NO_MISC_OPTIONS="BuildServersOnly LinuxFBDevSupport
                    XVirtualFramebufferServer"
      MISC_OPTIONS="$YES_MISC_OPTIONS  $NO_MISC_OPTIONS"

}


generate_host_def()  {

  echo  "#define DefaultCCOptions      $CFLAGS"
  echo  "#define DefaultGcc2i386Opt    $CFLAGS"
  echo  "#define LibraryCDebugFlags    $CFLAGS"
  echo  "#define DefaultCDebugFlags    $CFLAGS"
  echo  "#define OptimizedCDebugFlags  $CFLAGS"
  echo  "#define InstallFontconfigLibrary NO"
  echo  "#define BuildXterm YES"

  # Build only shared libraries, don't create static archive .a files
  echo  '#define ForceNormalLib  NO'

  if  [  -z  "$XF86CardDrivers"  ];  then
    XF86CardDrivers="$ON_CARD_DRIVERS"
  fi  &&

  XF86CardDrivers=`echo  $XF86CardDrivers  |  tr  '
' ' '`
  echo  "#define XF86CardDrivers $XF86CardDrivers"


  if  [  -z  "$DevelCardDrivers"  ];  then
    echo  "#define DevelDrivers /**/"
  else
    DevelDrivers=`echo  $DevelCardDrivers  |  tr  '
' ' '`
    echo  "#define DevelDrivers $DevelCardDrivers"
  fi  &&


  if  [  -z  "$DriDrivers"  ];  then
    echo  "#define DriDrivers /**/"
  else
    DriDrivers=`echo  $DriDrivers  |  tr  '
' ' '`
    echo  "#define DriDrivers $DriDrivers"
  fi  &&


  if  [  -z  "$DevelDriDrivers"  ];  then
    echo  "#define DevelDRIDrivers /**/"
  else
    DevelDRIDrivers=`echo  $DevelDriDrivers  |  tr  '
' ' '`
    echo  "#define DevelDRIDrivers $DevelDriDrivers"
  fi  &&

  if  [  -z  "$XInputDrivers"  ];  then
    echo  "#define XInputDrivers keyboard mouse"
  else
    XInputDrivers=`echo  $XInputDrivers  |  tr  '
' ' '`
    echo  "#define XInputDrivers $XInputDrivers"
  fi  &&

  for  ITEM  in   $YES_FONT_OPTIONS;  do
    echo  "#define $ITEM  YES"
  done  &&

  for  ITEM  in  $NO_FONT_OPTIONS;  do
    echo  "#define $ITEM  NO"
  done  &&

  for  ITEM  in   $YES_MISC_OPTIONS;  do
    echo  "#define $ITEM  YES"
  done  &&

  for  ITEM  in  $NO_MISC_OPTIONS;  do
    echo  "#define $ITEM  NO"
  done  &&

  for  ITEM  in  $YES_EXTENSIONS;  do
    echo  "#define $ITEM  YES"
  done  &&

  for  ITEM  in  $NO_EXTENSIONS;  do
    echo  "#define $ITEM  NO"
  done  &&

  for  ITEM  in  $YES_LIBRARIES;  do
    echo  "#define $ITEM  YES"
  done  &&

  for  ITEM  in  $NO_LIBRARIES;  do
    echo  "#define $ITEM  NO"
  done  &&

if  !  spell_ok  g++;  then
  echo  "#define  BuildGLXLibrary  NO"  &&
  echo  "#define  BuildGlxExt      NO"
fi  &&

if  [[  "${HOST%%-*}"  ==  x86_64  ]];  then
  echo '#define  HaveLib64  NO'
fi

}


save_host_def()  {


  TARGET1="$CONFIG_CACHE/host.def"

  dialog  --backtitle  "$BACKTITLE"                        \
          --msgbox     "Saving Configuration to $TARGET1"  \
          6 40

  generate_host_def  >  "$TARGET1"

}


select_font_options() {

  TITLE="Select Font Options"
  CHECKLIST="`build_checklist  ON   Option  $YES_FONT_OPTIONS`
             `build_checklist  OFF  Option   $NO_FONT_OPTIONS`"
  HELP="Key:  [X] = on, [ ] = off"

  if  ON_FONT_OPTIONS=`dialog  --backtitle  "$BACKTITLE"  \
                               --title      "$TITLE"      \
                               --stdout                   \
                               --separate-output          \
                               --checklist  "$HELP"       \
                               18 55 10                   \
                              $CHECKLIST`
  then
    YES_FONT_OPTIONS=$ON_FONT_OPTIONS
     NO_FONT_OPTIONS=$FONT_OPTIONS

    for  ITEM  in  $YES_FONT_OPTIONS;  do
      NO_FONT_OPTIONS=`echo  $NO_FONT_OPTIONS  |  sed  s/$ITEM//`
    done
  fi

}  


select_misc_options() {

  TITLE="Select Misc Options"
  CHECKLIST="`build_checklist  ON   Option  $YES_MISC_OPTIONS`
             `build_checklist  OFF  Option   $NO_MISC_OPTIONS`"
  HELP="Key:  [X] = on, [ ] = off"

  if  ON_MISC_OPTIONS=`dialog  --backtitle  "$BACKTITLE"  \
                               --title      "$TITLE"      \
                               --stdout                   \
                               --separate-output          \
                               --checklist  "$HELP"       \
                               18 55 10                   \
                               $CHECKLIST`
  then
    YES_MISC_OPTIONS=$ON_MISC_OPTIONS
     NO_MISC_OPTIONS=$MISC_OPTIONS

    for  ITEM  in  $YES_MISC_OPTIONS;  do
      NO_MISC_OPTIONS=`echo  $NO_MISC_OPTIONS  |  sed  s/$ITEM//`
    done
  fi

}

select_extensions() {

  TITLE="Select Extensions"
  CHECKLIST="`build_checklist  ON   Option  $YES_EXTENSIONS`
             `build_checklist  OFF  Option   $NO_EXTENSIONS`"
  HELP="Key:  [X] = on, [ ] = off"

  if  ON_EXTENSIONS=`dialog  --backtitle  "$BACKTITLE"  \
                             --title      "$TITLE"      \
                             --stdout                   \
                             --separate-output          \
                             --checklist  "$HELP"       \
                             18 55 10                   \
                             $CHECKLIST`
  then
    YES_EXTENSIONS=$ON_EXTENSIONS
     NO_EXTENSIONS=$EXTENSIONS

    for  ITEM  in  $YES_EXTENSIONS;  do
      NO_EXTENSIONS=`echo  $NO_EXTENSIONS  |  sed  s/$ITEM//`
    done
  fi

}

select_libraries() {

  TITLE="Select Libraries"
  CHECKLIST="`build_checklist  ON   Option  $YES_LIBRARIES`
             `build_checklist  OFF  Option   $NO_LIBRARIES`"
  HELP="Key:  [X] = on, [ ] = off"

  if  ON_LIBRARIES=`dialog  --backtitle  "$BACKTITLE"  \
                            --title      "$TITLE"      \
                            --stdout                   \
                            --separate-output          \
                            --checklist  "$HELP"       \
                            18 55 10                   \
                            $CHECKLIST`
  then
    YES_LIBRARIES=$ON_LIBRARIES
     NO_LIBRARIES=$LIBRARIES

    for  ITEM  in  $YES_LIBRARIES;  do
      NO_LIBRARIES=`echo  $NO_LIBRARIES  |  sed  s/$ITEM//`
    done
  fi

}

configure_host_def()  {

  initialize

  while  

#
# for dialog
#                     "Extensions"       "Select X Extensions"              \
#                     "Libraries"        "Select X Libraries"               \
#
# For case statement
#           Extensions)  select_extensions            ;;
#            Libraries)  select_libraries             ;;
#
    COMMAND=`dialog  --backtitle  "$BACKTITLE"                             \
                     --stdout                                              \
                     --title  "Main Menu"                                  \
                     --default-item  $COMMAND                              \
                     --nocancel                                            \
                     --menu                                                \
                     ""                                                    \
                     18 55 10                                              \
                     "XF86CardDrivers"  "Select Video Card Drivers"        \
                     "DevelCardDrivers" "Select Development Card Drivers"  \
                     "DriDrivers"       "Select DRI Drivers"               \
                     "DevelDriDrivers"  "Select Development DRI Drivers"   \
                     "XInputDrivers"    "Select Input Drivers"             \
                     "Fonts"            "Select Font Options"              \
                     "Extensions"       "Select X Extensions"              \
                     "Libraries"        "Select X Libraries"               \
                     "Misc"             "Set other Options"                \
                     "Save"             "Save current configuration"       \
                     "Edit"             "Edit host.def"                    \
                     "Exit"             "Done here.  Start building"`
  do

    case  $COMMAND  in
                 Exit)  break                        ;;
                 Save)  save_host_def                ;;
                 Edit)  [  -n   "$EDITOR"  ]         &&
                        $EDITOR  /etc/sorcery/local/host.def  ||
                        nano     /etc/sorcery/local/host.def  ;;
      XF86CardDrivers)  select_card_drivers          ;;
     DevelCardDrivers)  select_devel_card_drivers    ;;
           DriDrivers)  select_dridrivers            ;;
      DevelDriDrivers)  select_devel_dridrivers      ;;
        XInputDrivers)  select_input_drivers         ;;
                Fonts)  select_font_options          ;;
           Extensions)  select_extensions            ;;
            Libraries)  select_libraries             ;;
                 Misc)  select_misc_options          ;;
    esac
  done

}

if    [  -f  $CONFIG_CACHE/host.def  ]
then  message  "Reconfiguration is optional."
fi  &&

if    query  "Configure host.def?"  n
  then  configure_host_def
fi  &&

config_query  X_IPV6      "Build IPv6 support?"           n  &&
config_query  X_DEBUG    "Build X.Org with debug code?"  n  &&
config_query  X_DRI_DEVEL  "Build devel DRI drivers?"      n  &&
config_query  X_DOC_JAPANESE  "Install Japanese docs?"        n
