#!/bin/sh
#(c) Copyright Barry Kauler Oct. 2011, http://bkhome.org
#License: Oct. 2011, GPL3 (refer /usr/share/doc/legal)
#A GUI when start desktop first time, to replace the text-mode dialogs (locale, keyboard-layout, timezone)
#inspired by shinobar's countrywizard.qs (firstrun), but a complete rewrite.
#replaces the old single-purpose scripts: chooselocale timezone-set (now symlinks)
#propose first startup, run 'quickcountry, which is symlink.
#111019 first version.
#1110120 call shinobar's 'keymap-set' script. FLAG_CHANGED improved.
#111020 'countrywizard', 'xrandrshell' now symlinks to 'quicksetup'.
#111022 even though LANG=en_US.UTF-8, localedef still creates /usr/lib/locale/en_US.utf8. use UTF8=.utf8
#111025 thanks to thunor, fix for window dimensions.
#111026 added button for dead mouse.
#111027 fix Xorg.0.log records 'intel' driver loading twice.
#111027 tweaked text messages very slightly.
#111027 first boot, /etc/localtime does not exist, so must set timezone.
#111103 other entries in Etc dir.
#111107 changed 'comboboxtext' to 'combobox' tag, but does not support 'default' tag.
#111111 revert to 'comboboxtext' due to heavy cpu usage, but not 'default' -- do not get the double-popup problem.
#111113 upgraded gtk to 2.24.8, fixed slowness. go back to 'combobox'.
#111113 fix timezone-set cli app.
#120209 scripts fixdesk and fixmenus translate files to new language (as specified in /usr/share/sss/menu_strings and desk_strings).
#120209 added call to fixscripts, to translate language in scripts (as specified in /usr/share/sss/script_strings).
#120213 when locale change, inform if langpack PET needed.
#120215 offer to translate initrd.
#120215 rc.country calls 'chooselocale cli quiet', to run localedef without asking any questions or popups.
#120216 insert /PUPPYKEYMAP into initrd. moved SET_KEYBOARD before SET_LOCALE processing.
#120216 call 'lang2initrd'
#120224 load console font. (code based on that in 'init')
#120226 redraw desktop drive icons when resolution changes (or may change, in the case of running xorgwizard).
#120227 set hostname, but only if ethernet auto-connected at 1st boot.
#120228 L18L: enabling adding locale without utf8 using regexp.
#120301 no, don't load console font here. seems to get dropped on exit from X. (instead, do it in xwin. now have /sbin/load_consolefont)
#120305 check if langpack available in noarch repo.
#120311 change persistence logic for 120227.
#120313 hardcode translations for popup if user changes locale.
#120313 restrict network frame to only be in main quicksetup window.
#120315 dutch (nl) hardcode translation for locale-change popup. added pt, es, it.
#120328 have rewritten rc.country, try to make chooselocale compatible. 120330 bugfix.
#120331 added Polish (pl) hardcoded translation.
#120401 change logic to call lang2initrd.
#120402 expand locale help window.
#120524 Please wait... msg after click ok button.
#120625 always display network frame, remove set-hostname button, added firewall and ntp checkboxes.
#120627 support kbd pkg.
#120708 'quickarm' symlink to 'quicksetup', for booting on arm boards. see also /etc/rc.d/BOOTCONSTRAINED and /usr/sbin/delayedrun.
#120714 revert 120708. instead, read BOOT_BOARD to determine type of board booting off. support raspberry pi audio settings.
#120717 remove XPID=""
#120901 /usr/share/zoneinfo layout has changed (ubuntu precise).
#130131 xrandr may have more than one frequency on a line, ex:   1360x768       59.8     60.0
#130202 130131 not enough. xrandr was not setting chosen vertical frequency.
#130203 fix insertion of fontsize in xml.
#130501 pupdesk.flg is created in rc.sysinit, for PUPMODE=5. further fixup.
#130506 detect current xorg driver broken, use same code as in /usr/sbin/report-video.
#130509 need to creat pupdesk.flg before bring up gui window, with $XDRIVERSUCCESS stored in it, for xorgwizard-cli.
#130509 also save $XDRIVERSUCCESS in /var/local/quicksetup-pupmode5-autodriver, also for xorgwizard-cli.
#130511 hostname-set now may return value 2.
#130513 pupdesk.flg code in rc.sysinit moved to init script in initrd, so different handling here.
#130701 network frame now always displayed. added checkbox for run apps as spot.
#131209 Packages-puppy- files renamed to Packages-pet-
#131210 mods for quirky.
#140127 fix 131210 so also works as before.
#140207 no network testing in this script. note, testing in delayedrun.
#140209 removed pupdesk.flg. now using /root/.XLOADED. see also 3builddistro, xorgwizard-cli, xwin, /root/.profile.
#140217 'sync' separate process to avoid delay. could use 'fsync' but think better to flush everything.
#141120 buildroot has everything in /usr/share/zoneinfo/posix, with symlinks into it.
#150302 added sr*
#150302 locale: need to cut @euro but not @latin
#150424 lang flags. 150425 preset locale combobox. more translations in final window.
#150429 bug fix.
#150929 do not assume xorg is in /usr/lib
#151109 firewall checkbox ticked at first boot.
#160420 added "Manage daemons" button in network frame.
#160423 fix firewall checkbox.
#160914 no longer using mouse and keyboard xorg drivers, now evdev, see /etc/X11/xorg.conf.d/10-evdev-puppy.conf
#160914 take out memory size test for localedef.
#160921 crda wireless country selection, ref: http://barryk.org/news/?viewDetailed=00409 160926
#161005 offer to resize partition if unallocated beyond it.
#161021 modify FLAG_CHANGED variable if CRD changed.
#161022 firewall_ng is in /etc/init.d/rc.firewall when installed.
#161026 fix CRD typo.
#161104 now have Qsync, replacing Psync, to sync time over internet. note, Qsync is in woofQ.
#161106 fix handling new firewall_ng. replace 'keymap-set' script with my own code.
#161130 changed name /etc/init.d/11alsa_raspi to just alsa_raspi. note, /etc/rc.d/rc.services runs this last.
#161231 fix CRD drop-down list.
#170113 sfdisk reports start of unused areas rounded-up to 1MB boundaries.
#170131 reduced size of flags, 64 down to 32 pixels.
#170210 easy linux, offer to recompress easy.sfs from xz to gzip. remove 161005
#170528 also run xkbconfigmanager, advanced xorg kb layout.
#170714 log xorg driver to /var/local/quicksetup-test-success0, read by xorgwizard-cli
#170723 kill "Please wait" msg before run xkbconfigmanager
#170731 fixed variables in help windows.
#170806 change "Quirky" to "Easy".
#170812 regenerate the translated help files.
#170919 not using /etc/rc.d/BOOTCONFIG anymore (old puppy thing).
#171015 sg keymap description changed from "sango" to "swiss-german", XKEYMAP="ch". 171017 "latam"
#180101 xrandr maybe unable to switch into a fractional frequency (ex: 60.2)
#180101 xrandr, eliminate + on end, ex: "1360x768      60.37 +"
#180101 xrandr, make new res permanent by altering xorg.conf (ref: xorgwizard-automatic)
#180102 xrandr, attempt fix overscan.
#180314 re 180101, also write to backup xorg.conf.<hardware profile>
#180409 easyos, remove run apps as spot.
#181028 rename 'repository' folder to 'releases'.
#181120 scsijon reported "Processing, please wait" was on top of hostname-set dlg.
#181122 q*.sfs renamed to easy*.sfs
#190101 init script in initrd requires a pre-existing 'easyinitrd.mo' copied-up to .session. 190103 revert.
#190103 fix translation of initrd. 190105 pass NEWLANG to lang2initrd
#190110 LANG prepend, calls to help.sh etc.
#190226 BOOT_SPECS in initrd no longer has INIT_LANG variable.
#190712 only offer en_* and default lang ex: fr_* ...NO
#190712 improved locale help msgs.
#190818 default firewall enabled.
#191025 changed ibiblio quirky path to easyos.
#200113 add PuppyHardwareProfile for 'xorg.conf.d' folder. 200120

[ "`whoami`" != "root" ] && exec sudo -A ${0} ${@}

export TEXTDOMAIN=quicksetup
export OUTPUT_CHARSET=UTF-8
. gettext.sh

. /etc/DISTRO_SPECS
. /etc/rc.d/PUPSTATE
#. /etc/rc.d/BOOTCONFIG
. /etc/clock
. /etc/rc.d/BOOTCONSTRAINED #120714

PARAM1=""
[ $1 ] && PARAM1="$1"
PARAM2=""
[ $2 ] && PARAM2="$2"
GTKDIALOGEXE="gtkdialog"
[ "`which gtkdialog4`" ] && GTKDIALOGEXE="gtkdialog4"
TABCHAR="`echo -n -e '\t'`"
xLANGUAGE="${LANGUAGE:0:2}" #150424 coz reenter like this: LANGUAGE=de:en exec quicksetup nosplash
[ ! "$xLANGUAGE" ] && xLANGUAGE='en' #150424

[ "$PARAM1" = "composeonly" ] && unset DISPLAY
[ "$PARAM1" = "cli" ] && unset DISPLAY

#150929 find where is xorg... ex: /usr/lib64/xorg
XORGPATH="$(find /usr -maxdepth 5 -type d -name drivers | grep '/xorg/modules/drivers' | head -n 1 | rev | cut -f 3- -d '/' | rev)"
if [ ! "$XORGPATH" ];then
 echo "Sorry, cannot find where Xorg is installed, quiting."
 exit
fi

MYBASE=$(basename $0)
WINICON="gtk-preferences"; HELPICON="gtk-index" #gtk-info
SET_FLAGS="" #150424
SET_LOCALE=""; SET_TIMEZONE=""; SET_KEYBOARD=""; SET_X=""; SET_COUNTRY=""; SET_XRES=""; SET_XWIZARD=""; SET_NETWORK=""
SET_WINTITLE="1"; SET_COUNTRYFRAMETITLE="1"; SET_XFRAMETITLE="1"; SET_BACKTITLE="1"
#[ "$DISTRO_XORG_AUTO" = "yes" ] && SET_XRES="yes"
#specific-purpose utilities...
case $MYBASE in
 chooselocale) SET_WINTITLE="2"; SET_COUNTRYFRAMETITLE="2"; SET_LOCALE="yes"; SET_BACKTITLE="2" ;;
 timezone-set) SET_WINTITLE="3"; SET_COUNTRYFRAMETITLE="3"; SET_TIMEZONE="yes"; SET_BACKTITLE="3" ;;
 quickcountry) SET_WINTITLE="4"; SET_LOCALE="yes"; SET_TIMEZONE="yes"; SET_KEYBOARD="yes"; SET_BACKTITLE="4"; SET_FLAGS="yes" ;;
 countrywizard) SET_WINTITLE="5"; SET_LOCALE="yes"; SET_TIMEZONE="yes"; SET_KEYBOARD="yes"; SET_BACKTITLE="5" ;;
 xrandrshell) SET_WINTITLE="6"; SET_XRES="yes"; SET_BACKTITLE="6"; SET_XFRAMETITLE="6" ;;
 *) #quicksetup
  case $BOOT_BOARD in
   raspi) SET_LOCALE="yes"; SET_TIMEZONE="yes"; SET_KEYBOARD="yes"; SET_NETWORK="yes"; SET_RP_AUDIO="yes"; SET_RP_VIDEO="yes"; SET_FLAGS="yes" ;; #120714 Raspberry Pi. 150424
   *) SET_LOCALE="yes"; SET_TIMEZONE="yes"; SET_KEYBOARD="yes"; SET_XRES="yes"; SET_XWIZARD="yes"; SET_NETWORK="yes"; SET_FLAGS="yes" ;; #normal quicksetup. 150424
  esac
 ;;
esac
[ "$SET_LOCALE" -o "$SET_TIMEZONE" -o "$SET_KEYBOARD" ] && SET_COUNTRY="yes"
[ "$SET_XRES" -o "$SET_XWIZARD" ] && SET_X="yes"
case $SET_WINTITLE in
 1) WINTITLE=$(gettext "Quick Setup") ;;
 2) WINTITLE=$(gettext "Choose Locale") ;;
 3) WINTITLE=$(gettext "Choose Timezone") ;;
 4) WINTITLE=$(gettext "Quick Country Setup") ;;
 5) WINTITLE=$(gettext "Country Wizard") ;;
 6) WINTITLE=$(gettext "Change Resolution") ;;
esac
case $SET_COUNTRYFRAMETITLE in
 1) COUNTRYFRAMETITLE=$(gettext 'Country Settings') ;;
 2) COUNTRYFRAMETITLE=$(gettext 'Language and Country') ;;
 3) COUNTRYFRAMETITLE=$(gettext 'Timezone') ;;
esac
case $SET_XFRAMETITLE in
 1) XFRAMETITLE=$(gettext 'Video Settings') ;;
 6) XFRAMETITLE=$(gettext 'Screen Resolution') ;;
esac
case $SET_BACKTITLE in
 1) BACKTITLE=$(gettext 'Welcome! Please set these to suit yourself, then click <b>OK</b>') ;;
 2) BACKTITLE=$(gettext 'Set font, money and language for your location') ;;
 3) BACKTITLE=$(gettext 'Set time and date for your location') ;;
 4) BACKTITLE=$(gettext 'Welcome! Please set these to suit your country and language') ;;
 5) BACKTITLE=$(gettext 'Please set these to suit your country and language') ;;
 6) BACKTITLE=$(gettext 'These are available resolutions that the <b>xrandr</b> utility can change the screen to. Please choose the one that you would like to test.') ;;
esac

XPID=0
if [ $DISPLAY ];then
 if [ "$PARAM1" != "nosplash" ];then
  WELCOMEMSG=$(printf "$(gettext 'Welcome to %s!')" "$DISTRO_NAME $DISTRO_VERSION")
  yaf-splash -bg orange -fg black -placement center -close never -fontsize large -icon /usr/share/doc/logo96.png -text "$WELCOMEMSG" &
  XPID=$!
 fi
fi

M_close="`gettext 'Close'`"
CR='
'

###Network###
NETWORK_XML=""

if [ "$MYBASE" = "quicksetup" ];then #120313 only allow in main quicksetup window.
    SET_NETWORK="yes"
    HOSTNAME="`cat /etc/hostname`" #do not use $HOSTNAME, as hostname-set may have just been run.
    
    #120625 firewall checkbox...
    TT_CH_F="$(gettext "Tick checkbox to activate the firewall (recommended)")"
    L_CH_F="$(gettext "Firewall enabled")"
    DEFAULT_FIREWALL='true' #190818
    #[ "`lsmod | grep '^iptable'`" != "" ] && DEFAULT_FIREWALL='true'
    #[ ! -f /etc/rc.d/rc.firewall ] && DEFAULT_FIREWALL='true' #151109 first startup, tick checkbox. 160423 remove.
    
    #120625 get time/date off internet... 161104
    CHKBOXNTP=""
    TT_CH_NTP="$(gettext "Set this computer's time and date from an Internet NTP server")" #'geany
    L_CH_NTP="$(gettext "Time from Internet")"
    DEFAULT_NTP='false'
    [ "$BOOT_BOARD" == "raspi" ] && DEFAULT_NTP='true' #161104.
    [ -s /var/local/qsync/qsync_active ] && DEFAULT_NTP="$(cat /var/local/qsync/qsync_active)" #161104 Qsync
    H_ntp="$(gettext "This will synchronise the local time and date to an NTP server on the Internet. You do not need to do this, as computers normally have their date and time set by a battery-backed hardware clock. However, some tiny computers, such as some ARM boards (for example the Raspberry Pi) do not have a hardware clock, so you either have to set the time/date manually at every bootup, or enable NTP. Note, if you enable NTP now, you can change the settings any time in the future -- see the 'Qsync' entry in the 'Desktop' menu.")"
    export DLG_HELP_NTP="<window resizable=\"false\" title=\"$(gettext 'Help: NTP')\" icon-name=\"${HELPICON}\" window_position=\"1\"><vbox><text use-markup=\"true\"><label>\"${H_ntp}\"</label><variable>DLG_HELP_NTP</variable></text><hbox><button><label>${M_close}</label><action type=\"closewindow\">DLG_HELP_NTP</action></button></hbox></vbox></window>"
     CHKBOXNTP="
      <checkbox tooltip-text=\"${TT_CH_NTP}\"><label>${L_CH_NTP}</label><variable>CHECK_NTP</variable><default>${DEFAULT_NTP}</default></checkbox>
      <button><input file>/usr/local/lib/X11/mini-icons/mini-question.xpm</input><action type=\"launch\">DLG_HELP_NTP</action></button>
    "
    
    H_net="$(gettext "Your computer has been assigned a unique name, known as the 'hostname', by which it identifies itself on a network.") $(eval_gettext "It is currently named '\${HOSTNAME}', however you might wish to change that to a name that is more meaningful to yourself, such as 'johnsmithpc'.") $(gettext "The hostname can have letters and numbers, no spaces.")"
    export DLG_HELP_NET="<window resizable=\"false\" title=\"$(gettext 'Help: Network')\" icon-name=\"${HELPICON}\" window_position=\"1\"><vbox><text use-markup=\"true\"><label>\"${H_net}\"</label><variable>DLG_HELP_NET</variable></text><hbox><button><label>${M_close}</label><action type=\"closewindow\">DLG_HELP_NET</action></button></hbox></vbox></window>"
    H_fw="$(gettext "It is always recommended that the firewall be enabled when connected to a network, unless it is a local trusted network. Note that you can run the Firewall Wizard any time in the future if you want to change the settings -- see the 'Setup' menu.")"
    export DLG_HELP_FW="<window resizable=\"false\" title=\"$(gettext 'Help: Firewall')\" icon-name=\"${HELPICON}\" window_position=\"1\"><vbox><text use-markup=\"true\"><label>\"${H_fw}\"</label><variable>DLG_HELP_FW</variable></text><hbox><button><label>${M_close}</label><action type=\"closewindow\">DLG_HELP_FW</action></button></hbox></vbox></window>"
    #160420 help for daemon management...
    H_daemon="$(gettext "Daemons are background processes.")${CR}$(gettext 'Two bad things about them, is they use system resources, although maybe very small, and are a potential security risk while online.')${CR}${CR}$(gettext 'If you are not going to use Samba (sharing drives over the Internet) or Rsync (remote file backup) especially, recommend disable.')${CR}$(gettext 'Others, such as Bluetooth (local network), Sane (scanner), Cups (printing), disable if you do not require those features.')${CR}${CR}$(gettext 'Note: you can always enable them later, via the <b>BootManager</b> in the System menu.')"
    export DLG_HELP_daemon="<window resizable=\"false\" title=\"$(gettext 'Help: Daemons')\" icon-name=\"${HELPICON}\" window_position=\"1\"><vbox><text use-markup=\"true\"><label>\"${H_daemon}\"</label><variable>DLG_HELP_daemon</variable></text><hbox><button><label>${M_close}</label><action type=\"closewindow\">DLG_HELP_daemon</action></button></hbox></vbox></window>"
    
    #130701...
    SPOT_XML=''
    HOMEUSER="`whoami`"
    #180409 easyos, remove run as spot...
    #if [ "$HOMEUSER" = "root" ];then
    # TT_CH_S="$(gettext 'Tick this if interested in running Internet applications as non-root user spot, for extra security')"
    # SPOT_XML="
    #    <checkbox tooltip-text=\"${TT_CH_S}\"><label>$(gettext 'Run apps as spot')</label><variable>CHECK_SPOT</variable><default>false</default></checkbox>
    #    <button><input file>/usr/local/lib/X11/mini-icons/mini-question.xpm</input><action>basichtmlviewer /usr/share/doc/root.htm & </action></button>
    #   "
    #fi
    
    #160921 160926
    if [ -s /etc/iso3166-1-alpha2 ];then #precaution
     DEFAULT_2CH='00'
     [ -f /etc/modprobe.d/crdw.conf ] && DEFAULT_2CH="$(cat /etc/modprobe.d/crdw.conf | grep '^options cfg80211' | cut -f 2 -d '=')" #created by quicksetup
     [ ! "$DEFAULT_2CH" ] && DEFAULT_2CH='00'
     DEFAULT_CRDW="$(grep "^${DEFAULT_2CH} " /etc/iso3166-1-alpha2)" #ex: AU Australia
     [ ! "$DEFAULT_CRDW" ] && DEFAULT_CRDW='00 UNSET'
     DEFAULT_CRDW_ITEM="<item>${DEFAULT_CRDW}</item>"
     if [ "$DEFAULT_2CH" == "00" ];then #161231
      ITEMS="$(sed -e 's%^%<item>%' -e 's%$%</item>%' /etc/iso3166-1-alpha2)"
     else
      ITEMS="<item>00 UNSET</item>$(sed -e 's%^%<item>%' -e 's%$%</item>%' /etc/iso3166-1-alpha2)"
     fi
     TT_crdw="$(gettext 'Choose country for WiFi channels')"
     T_crdw="$(gettext 'CRD:')"
     HH_crdw="$(gettext 'Help: CRD wireless')"
     H_crdw="$(gettext "A wireless network in home or office will broadcast on a channel. These are frequencies, numbered 1 to 14. Some countries only support a subset of these frequencies, and it is possible that a network may use a channel that the Linux kernel thinks is invalid for the country, hence will ignore it.
    
If a channel is ignored, using a network manager, such as <b>SNS</b> (Simple Network Setup), will not find that network.
    
<span color='red'>Recommend, leave the setting at <b>00</b> (unset), unless you encounter the problem of being unable to see a wireless network. Setting it may cause a longer time to establish the wifi connection. Also, currently only SNS properly handles settings other than 00.</span>
    
<b>Technical notes</b>
A list of country codes is in /etc/iso3166-1-alpha2, and /etc/modprobe.d/crdw.conf has the currently selected country code. QuickSetup may be used to change the setting, and this will create /etc/modprobe.d/crdw.conf which sets country code when the cfg80211 kernel module loads, which also informs the kernel (verifiable by 'iw reg get').")"
     export DLG_HELP_CRDW="<window resizable=\"false\" title=\"${HH_crdw}\" icon-name=\"${HELPICON}\" window_position=\"1\"><vbox><text use-markup=\"true\"><label>\"${H_crdw}\"</label><variable>DLG_HELP_CRDW</variable></text><hbox><button><label>${M_close}</label><action type=\"closewindow\">DLG_HELP_CRDW</action></button></hbox></vbox></window>"
     CRDW_XML="<hbox><text><label>${T_crdw}</label></text>
     <combobox tooltip-text=\"${TT_crdw}\" width-request=\"143\">
     ${DEFAULT_CRDW_ITEM}
     ${ITEMS}
     <variable>COMBO_CRDW</variable></combobox>
     <button><input file>/usr/local/lib/X11/mini-icons/mini-question.xpm</input><action type=\"launch\">DLG_HELP_CRDW</action></button></hbox>"
    fi
    
    NETWORK_XML="<frame $(gettext 'Network Settings')>
     <hbox>
     
      <vbox>
       <hbox>
        
        <button><label>$(gettext 'Manage daemons')</label><action>bootmanager sysdaemons & </action></button>
        <button><input file>/usr/local/lib/X11/mini-icons/mini-question.xpm</input><action type=\"launch\">DLG_HELP_daemon</action></button>
        <text><label>\"  \"</label></text>

        <checkbox tooltip-text=\"${TT_CH_F}\"><label>${L_CH_F}</label><variable>CHECK_FIREWALL</variable><default>${DEFAULT_FIREWALL}</default></checkbox>
        <button><input file>/usr/local/lib/X11/mini-icons/mini-question.xpm</input><action type=\"launch\">DLG_HELP_FW</action></button>
       </hbox>
       <hbox>
        ${SPOT_XML} <text><label>\" \"</label></text>
        ${CHKBOXNTP}
       </hbox>
      </vbox>
      <text><label>\" \"</label></text>
      <vbox>
       <hbox>
        <text><label>$(gettext 'Hostname:')</label></text>
        <entry tooltip-text=\"$(gettext 'Type your computer name to identify in the network. Alpha-numeric without spaces.')\" width-chars=\"15\">
        <input>echo -n \"$HOSTNAME\"</input><variable>ENTRY_HOSTNAME</variable></entry>
        <button><input file>/usr/local/lib/X11/mini-icons/mini-question.xpm</input><action type=\"launch\">DLG_HELP_NET</action></button>
       </hbox>
       ${CRDW_XML}
      </vbox>
     </hbox>
    </frame>"
fi

###Country localization###
if [ "$SET_COUNTRY" ];then

 #120402 190712
 WOOFLANGPACK="`grep '^langpack_' /root/.packages/woof-installed-packages | cut -f 2 -d '|'`" #ex: langpack_fr
 [ ! "$WOOFLANGPACK" ] && WOOFLANGPACK='none'
 INSTALLLANGPACK=""
 [ -s /root/.packages/user-installed-packages ] && INSTLANGPACK="`grep '^langpack_' /root/.packages/user-installed-packages | cut -f 2 -d '|'`"
 [ ! "$INSTLANGPACK" ] && INSTLANGPACK="none"
 
 ###Choose locale###
 LOCALEXML=""
 if [ "$SET_LOCALE" ];then
  H_l1="`gettext 'Help: Locale'`"
  #190712...
  H_l2="$(gettext "The locale setting provides money, date and font localization for your country.")

$(gettext "The format is, for example, <b>en_US</b> where <b>en</b> designates the language and <b>US</b> designates the country in which it is spoken and written.")

$(gettext "When you choose a non-English locale, you will also need a langpack PET package to provide full translation for applications in Easy. You will receive more information about this after choosing the locale.")

$(gettext "However, EasyOS is now available in international variants, with a langpack already built-in, plus much more translation. Downloading one of these is preferred to installing a langpack PET.")

$(gettext "Built-in langpack:") <b>${WOOFLANGPACK}</b>
$(gettext 'User installed langpack PET:') <b>${INSTLANGPACK}</b>

<b>$(gettext "Technical")</b>
$(gettext "The chosen locale file is generated in /usr/lib/locale (if not already) and LANG variable set in /etc/profile.")"
  export DLG_HELP_LOCALE="<window resizable=\"false\" title=\"${H_l1}\" icon-name=\"${HELPICON}\" window_position=\"1\"><vbox><text use-markup=\"true\"><label>\"${H_l2}\"</label><variable>DLG_HELP_LOCALE</variable></text><hbox><button><label>${M_close}</label><action type=\"closewindow\">DLG_HELP_LOCALE</action></button></hbox></vbox></window>"
  
  H_u1="`gettext 'Help: UTF-8'`"
  H_u2="`gettext 'UTF-8 is a Unicode standard in which international characters are represented in 8, 16 or more bits, and plain ASCII (8th bit = 0) text files are valid UTF-8 encoding. UTF-8 has become the defacto standard in Linux. The reason is, basically, that UTF-8 encoded files can be used anywhere in the world and do not need a particular <b>character set</b> translation.

<b>Note 1:</b> Some Easy OS users do not use UTF-8 as there is a slight speed penalty running applications -- all English users are ok running without UTF-8.
     
<b>Note 2:</b> Non-unicode rendering is achieved by 8-bit character sets, such as ISO-8859-1 for normal Latin1 English, or ISO-8859-2 for Eastern European Latin2 languages.

Basically, if your language is not a <b>Latin</b> derivative, such as all Asian languages, then you will need UTF-8. Most non-English Linux users enable UTF-8, even for Latin-derivative languages, <b>so recommend tick the box</b>!'`"
  export DLG_HELP_UTF8="<window resizable=\"false\" title=\"${H_u1}\" icon-name=\"${HELPICON}\" window_position=\"1\"><vbox><text use-markup=\"true\"><label>\"${H_u2}\"</label><variable>DLG_HELP_UTF8</variable></text><hbox><button><label>${M_close}</label><action type=\"closewindow\">DLG_HELP_UTF8</action></button></hbox></vbox></window>"

  CURRLANG="`grep '^LANG=' /etc/profile | tr -d "'" | tr -d '"' | cut -f 2 -d '='`" #111022
  [ ! "$CURRLANG" ] && CURRLANG="en_US" #precaution
  UTF8=''
  if [ "`echo -n "$CURRLANG" | grep 'utf8'`" != "" ];then #111022 get rid of old name.
   rm -rf /usr/lib/locale/$CURRLANG
   UTF8='.UTF-8'
  fi
  [ "`echo -n "$CURRLANG" | grep 'UTF\-8'`" != "" ] && UTF8='.UTF-8'
  BASELANG="`basename $CURRLANG .utf8`"
  BASELANG="`basename $BASELANG .UTF-8`"
  #does the locale need to have UTF-8 enabled?...
  UTF_FLAG="no"
  grep -q "^${BASELANG}[_. ].*ISO-8859-" /usr/share/i18n/SUPPORTED
  [ $? -ne 0 ] && UTF_FLAG="yes" #actually, alternate code below to determine this.
 
  if [ "$PARAM1" != "composeonly" ];then #param passed to chooselocale by 3builddistro in Woof.
   #want to default to utf8, but localedef crash problem in 64MB PC...
   if [ "$UTF8" = "" ];then
    [ ! -d /usr/lib/locale/en_US ] && localedef -f ISO-8859-1 -i en_US --no-archive en_US >/dev/null
   else
    #160914 take out memory size test...
    #warning: free output varies different versions of busybox (also early version do not accept params)...
    #RAMK=`free | tr -s ' ' | grep -o 'Mem:.*' | cut -f 2 -d ' '`
    #if [ $RAMK -gt 100000 ];then
    # #111022 no, i seem to have been lead up the garden path, the dir must remain as 'en_US.utf8'...
    # #[ -d /usr/lib/locale/en_US.utf8 ] && rm -rf /usr/lib/locale/en_US.utf8
     [ ! -d /usr/lib/locale/en_US.utf8 ] && localedef -f UTF-8 -i en_US --no-archive en_US.utf8 >/dev/null #110409 111022
    #else
    # [ ! -d /usr/lib/locale/en_US ] && localedef -f ISO-8859-1 -i en_US --no-archive en_US >/dev/null
    # UTF8=''
    #fi
   fi
   #190103 remove...
   ##190101 planning to have 'easyinitrd.mo' builtin for all langs, initrd needs it copied-up to .session ...
   #[ -f /usr/share/locale/en/LC_MESSAGES/easyinitrd.mo ] && touch /usr/share/locale/en/LC_MESSAGES/easyinitrd.mo
  fi

  #build language table...
  LANGUAGEDESCR='aa:Afar ab:Abkhazian af:Africaans am:Amharic an:Aragonese ar:Arabic az:Azeri be:Belarusian bn:Bengali bs:Bosnian bg:Bulgarian br:Breton ca:Catalan cs:Czech cy:Welsh da:Danish de:German dv:Divehi dz:Dzongkha el:Greek en:English eo:Esperanto es:Spanish et:Estonian eu:Basque fa:Persian fo:Faeroese fi:Finnish fr:French ga:Irish gd:Scots_Gaelic gl:Galician gv:Manx_Gaelic gu:Gujarati he:Hebrew hi:Hindi hr:Croatian hu:Hungarian hy:Armenian is:Icelandic id:Indonesian iw:Hebrew it:Italian ja:Japanese ka:Georgian kl:Greenlandic kn:Kannada kk:Kazakh km:Khmer kok:Konkani ko:Korean ku:Kurdish kw:Cornish ky:Kyrgyz lg:Luganda lo:Lao lt:Lithuanian lv:Latvian mg:Malagasy ms:Malay ml:Malayalam mt:Maltese mi:Maori mk:Macedonian mn:Mongolian mr:Marathi ne:Nepali nl:Dutch nb:Norgwegian nn:Norwegian_Nynorsk no:Norwegian_Bokm oc:Occitan om:Oromo or:Oriya pa:Pashto pl:Polish pt:Portuguese pa:Punjabi quz:Quechua ro:Romania rs:Serbian ru:Russian rw:Kinyarwanda smn:Sami smj:Sami se:Sami sa:Sanskrit sma:Sami sms:Sami sq:Albanian sr:Srpski sl:Slovenian sw:Swahili sv:Swedish syr:Syriac ta:Tamil th:Thai tl:Tagalog tt:Tatar te:Telugu tr:Turkish uk:Ukrainian ur:Urdu uz:Uzbek vi:Vietnamese wa:Walloon xh:Xhosa yi:Yiddish zh:Chinese zu:Zulu'
  REGIONDESCR='AA:ArabicCountries AE:UAE AL:Yugoslavia AR:Argentina AT:Austria AU:Australia BE:Belgium BG:Bularia BH:Bahrain BN:Brunei BO:Bolvia BR:Brazil BZ:Belize CA:Canada CH:Switzerland CL:Chile CN:PeoplesRepublicChina CO:Columbia CR:CostaRica CY:Cyprus CZ:CzechRepublic DE:Germany DK:Denmark DO:DominicanRepublic EC:Ecuador EE:Estonia ES:Spain DO:Dominican DZ:Algeria EC:Ecuador EG:Egypt FI:Finland FR:France GB:GreatBritain GR:Greece GT:Guatemalia HK:HongKong HN:Honduras HR:Croatia HU:Hungary ID:Indonesia IE:Ireland IL:Israel IN:India IQ:Iraq IS:Iceland IT:Italy JM:Jamaica JO:Jordan JP:Japan KR:Korea KW:Kuwait KZ:Kazakhstan LB:Lebanon LI:Liechtenstein LU:Luxembourg LY:Libya MA:Morocco MC:Monaco MK:Macedonia MO:Macau MY:Malaysia MX:Mexico NI:Nicaragua NL:Netherlands NO:Norway NZ:NewZealand OM:Oman PA:Panama PE:Peru PH:Philippines PL:Poland PR:PuertoRico PT:Portugal PY:Paraguay QA:Qatar RO:Romania RU:Russia SA:SaudiArabia SE:Sweden SG:Singapore SK:Slovakia SY:Syria TH:Thailand TN:Tunisia TR:Turkey TW:Taiwan ZA:SouthAfrica TT:Trinidad US:USA PE:Peru SV:ElSalvador MX:Mexico NI:Nicaragua UY:Uruguay VE:Venezuela YE:Yemen YU:Yugoslavia ZA:SouthAfrica'
  #need sanity check, as format of these files has changed...
  SANITYFLAG='pass'
  [ ! -f /usr/share/i18n/dialog_table_x ] && SANITYFLAG='fail' #111113 precaution.
  [ -s /usr/share/i18n/dialog_table_cli ] && [ `cat /usr/share/i18n/dialog_table_cli | wc -l` -le 1 ] && SANITYFLAG='fail'
  [ -s /usr/share/i18n/dialog_table_x ] && [ `cat /usr/share/i18n/dialog_table_x | wc -l` -le 1 ] && SANITYFLAG='fail'
  if [ "$PARAM1" = "composeonly" -o "$SANITYFLAG" = "fail" ];then
   CHOICES_CLI=""; ON=""; OFF=""; CHOICES_X="" #120717 remove XPID=""; 
   for ONELOCALE in `ls -1 /usr/share/i18n/locales | grep -v -E 'i18n|iso|translit|POSIX'`
   do
    STATUS="off"
    [ "$ONELOCALE" = "$BASELANG" ] && STATUS="on"
    LANGUAGE="`echo -n "$ONELOCALE" | cut -f 1 -d '_'`"
    REGION="`echo -n "$ONELOCALE" | cut -f 2 -d '_' | cut -f 1 -d '.' | cut -f 1 -d '@'`"
    lPATTERN="^${LANGUAGE}:"
    LANGUAGE="`echo "$LANGUAGEDESCR" | tr ' ' '\n' | grep "$lPATTERN" | head -n 1 | cut -f 2 -d ':'`"
    rPATTERN="^${REGION}:"
    REGION="`echo "$REGIONDESCR" | tr ' ' '\n' | grep "$rPATTERN" | head -n 1 | cut -f 2 -d ':'`"
    [ "$LANGUAGE" != "" ] && [ "$REGION" != "" ] && LANGUAGE="${LANGUAGE}, "
    DESCR="${LANGUAGE}${REGION}"
    if [ "$STATUS" = "on" ];then
     if [ "$CHOICES_X" = "" ];then #111113
      CHOICES_X="$ONELOCALE \"${DESCR}\" on"
     else
      CHOICES_X="$CHOICES_X
$ONELOCALE \"${DESCR}\" on"
     fi
     FIRSTLINE_CLI="$ONELOCALE \"${DESCR}\" "
    else
     if [ "$CHOICES_X" = "" ];then #111113
      CHOICES_X="$ONELOCALE \"${DESCR}\" off"
     else
      CHOICES_X="$CHOICES_X
$ONELOCALE \"${DESCR}\" off"
     fi
     if [ "$CHOICES_CLI" = "" ];then
      CHOICES_CLI="$ONELOCALE \"${DESCR}\" "
     else
      CHOICES_CLI="$CHOICES_CLI
$ONELOCALE \"${DESCR}\" "
     fi
    fi
   done
   echo "$CHOICES_X" > /usr/share/i18n/dialog_table_x
   CHOICES_CLI="${FIRSTLINE_CLI}
${CHOICES_CLI}"
   echo "$CHOICES_CLI" > /usr/share/i18n/dialog_table_cli
   [ "$PARAM1" = "composeonly" ] && exit
  fi

  #tables already exist, but may need to reselect 'on' item...
  onPTN="s%^${BASELANG} \"(.*)\" off$%${BASELANG} \"\1\" on%"
  sed -i -e 's% on$% off%' -r -e "$onPTN" /usr/share/i18n/dialog_table_x
  
  DEFAULTXML=""
  DEFAULT="`grep ' on$' /usr/share/i18n/dialog_table_x | sed -e 's% on$%%' -e 's%"%%g' -e "s% %  ${TABCHAR}%"`" #'geany
  #[ "$DEFAULT" ] && DEFAULTXML="<default>${DEFAULT}</default>"
  [ "$DEFAULT" ] && DEFAULTXML="<item>${DEFAULT}</item>" #111107 combobox does not support default tag.
  
  #190712 only offer the default language and en... um, no, lang developers need more choices...
  #if [ "${BASELANG:0:2}" == "en" ];then
  # grep "^en_" /usr/share/i18n/dialog_table_x > /tmp/dialog_table_x
  #else
  # grep -E "^en_|^${BASELANG:0:2}_" /usr/share/i18n/dialog_table_x > /tmp/dialog_table_x
  #fi
  cp -a -f /usr/share/i18n/dialog_table_x /tmp/dialog_table_x
  ITEMS="`sed -e 's% on$%%' -e 's% off$%%' -e 's%"%%g' -e "s% %  ${TABCHAR}%" -e 's%^%<item>%' -e 's%$%</item>%' /tmp/dialog_table_x`" #'geany
  
  #150425 change the default locale item if LANGUAGE set (occurs on reentry after click a flag)
  if [ "$LANGUAGE" ];then
   if [ "$xLANGUAGE" != "en" ];then
    xLCAPS="$(echo -n "$xLANGUAGE" | tr '[a-z]' '[A-Z]')"
    case $xLANGUAGE in
     el) xDEFAULT='el_GR' ;;
     nn) xDEFAULT='nn_NO' ;;
     *)
      xDEFAULT="$(grep -o "^${xLANGUAGE}_${xLCAPS}" /usr/share/i18n/dialog_table_x | head -n 1)"
      [ ! "$xDEFAULT" ] && xDEFAULT="$(grep -o "^${xLANGUAGE}_[A-Z][A-Z]" /usr/share/i18n/dialog_table_x | head -n 1)"
     ;;
    esac
    if [ "$xDEFAULT" ];then
     DEFAULT="$(grep "^${xDEFAULT}" /usr/share/i18n/dialog_table_x | head -n 1 | sed -e 's% on$%%' -e 's% off$%%' -e 's%"%%g' -e "s% %  ${TABCHAR}%")"
     DEFAULTXML="<item>${DEFAULT}</item>"
    fi
   fi
  fi
  
  DEFAULT_UTF8='false'
  [ "$UTF8" ] && DEFAULT_UTF8='true'
  TT_utf8=$(gettext 'Tick checkbox to support UTF-8 encoding')
  T_utf8=$(gettext 'UTF-8 encoding')
  CHECKUTF8XML="<hbox><checkbox tooltip-text=\"${TT_utf8}\"><label>${T_utf8}</label>
<variable>CHECK_UTF8</variable><default>${DEFAULT_UTF8}</default></checkbox>
  <button>
   <input file>/usr/local/lib/X11/mini-icons/mini-question.xpm</input>
   <action type=\"launch\">DLG_HELP_UTF8</action>
  </button>
</hbox>"
 
  TT_locale=$(gettext "Choose main language")
  TT_mainlanguage=$(gettext "Main Language")
  LOCALEXML="
  <hbox>
   <pixmap tooltip-text=\"${TT_mainlanguage}\" icon_size=\"3\" ><input file>/usr/local/lib/X11/mini-icons/mini-font.xpm</input></pixmap>
   <combobox tooltip-text=\"${TT_locale}\" width-request=\"202\">
    ${DEFAULTXML}
    ${ITEMS}
    <variable>COMBO_LOCALE</variable>
   </combobox>
   <button>
    <input file>/usr/local/lib/X11/mini-icons/mini-question.xpm</input>
    <action type=\"launch\">DLG_HELP_LOCALE</action>
   </button>
  </hbox>
  ${CHECKUTF8XML}"
 fi #end SET_LOCALE

 ###Choose timezone###
 TIMEZONEXML=""
 if [ "$SET_TIMEZONE" ];then
 
  H_t1="`gettext 'Help: Time Zone'`"
  H_t2="`gettext 'This needs to be set to ensure that Easy knows the correct time and date.
If you cannot find an entry for your location, choose one of the <b>GMT</b> entries. Finding the correct entry is best, as it automatically applies DST (Daylight Saving Time), whereas the GMT entries are fixed offsets from the GMT (UTC) reference.

<b>Technical</b>
After making a choice, /etc/localtime will point to the appropriate timezone file in /usr/share/zoneinfo. However, note that the GMT files (in /usr/share/zoneinfo/Etc) actually have the opposite sign from the GMT entry that you have chosen -- this is just a technical detail, it does not affect the user in any way.'`"
  export DLG_HELP_TIMEZONE="<window resizable=\"false\" title=\"${H_t1}\" icon-name=\"${HELPICON}\" window_position=\"1\"><vbox><text use-markup=\"true\"><label>\"${H_t2}\"</label><variable>DLG_HELP_TIMEZONE</variable></text><hbox><button><label>${M_close}</label><action type=\"closewindow\">DLG_HELP_TIMEZONE</action></button></hbox></vbox></window>"
  
  H_utc1="`gettext 'Help: UTC'`"
  H_utc2="`gettext 'All computers have a hardware clock that runs continuously from a battery, even when the computer is turned off. This clock can be set either to the local time or to UTC.

<b>UTC/GMT</b>
UTC is Coordinated Universal Time, which is basically the same as GMT, Greenwich Mean Time. The latter is the time at the Royal Observatory in Greenwich, London -- this is a time that does not have daylight saving or summer time as does the rest of the UK. It is said to simplify things if the computer hardware clock is set to UTC.

<b>Local time</b>
By default, Easy OS assumes that the hardware clock is set to local time, as this is what MS DOS and Windows systems normally use. If you were to change the hardware clock to UTC, you would also have to ensure that all operating systems recognise that, else they will show the wrong time/date.'`"
  export DLG_HELP_UTC="<window resizable=\"false\" title=\"${H_utc1}\" icon-name=\"${HELPICON}\" window_position=\"1\"><vbox><text use-markup=\"true\"><label>\"${H_utc2}\"</label><variable>DLG_HELP_UTC</variable></text><hbox><button><label>${M_close}</label><action type=\"closewindow\">DLG_HELP_UTC</action></button></hbox></vbox></window>"

  if [ -e /etc/localtime ];then
   CZONE="`readlink /etc/localtime 2>/dev/null`"
   [ "$CZONE" = "" ] && rm -f /etc/localtime
  fi
  if [ -e /etc/localtime ];then
   CZONE="`readlink /etc/localtime`"
   DEF_TIMEZONE="`readlink /etc/localtime | sed -e 's%/usr/share/zoneinfo/%%'`"
  else
   CZONE='/usr/share/zoneinfo/Australia/Perth'
   DEF_TIMEZONE='Australia/Perth'
  fi
  if [ "`echo -n "$DEF_TIMEZONE" | grep 'GMT' | grep '\+'`" = "" ];then #fix sign.
   DEF_TIMEZONE="`echo -n "$DEF_TIMEZONE" | sed -e 's%Etc/%%' | tr "\-" "\+"`"
  else
   DEF_TIMEZONE="`echo -n "$DEF_TIMEZONE" | sed -e 's%Etc/%%' | tr "\+" "\-"`"
  fi
  xDEF_TIMEZONE="`echo -n "$DEF_TIMEZONE" | sed 's%GMT%GMT\\\\%'`"  #the sign needs a \ in front. ex: GMT\+8
  #note, screen out UTC timezone, causes confusion... 111103 screen more...
  #ZONEINFO="`find /usr/share/zoneinfo -type f | grep -v '\.tab$' | grep -v -E 'UTC|Greenwich|UCT|Universal|Zulu' | sed -e 's%/usr/share/zoneinfo/%%' | sed -e 's%Etc/%%' | tr ' ' '_' | sort | tr '\n' ' '`"
  #120901 fix for new layout in ubuntu precise...
  #141120 buildroot has everything in /usr/share/zoneinfo/posix, with symlinks into it...
  TZLAYOUT='precise'
  [ -h /usr/share/zoneinfo/Australia ] && [ "$(readlink /usr/share/zoneinfo/Australia | grep 'posix')" != "" ] && TZLAYOUT='buildroot'
  if [ "$TZLAYOUT" == "buildroot" ];then
   echo -n "" > /tmp/quicksetup-buildroot-zoneinfo
   for TZLINK in `find /usr/share/zoneinfo -mindepth 1 -maxdepth 1 -type l | tr '\n' ' '`
   do
    [ "$(readlink $TZLINK | grep 'posix')" == "" ] && continue
    TZBASE="$(basename $TZLINK)" #ex: Australia
    tzmoreinfo="$(ls -1 $TZLINK | sed -e "s%^%${TZBASE}/%")"
    echo "$tzmoreinfo" >> /tmp/quicksetup-buildroot-zoneinfo
   done
   ZONEINFO="$(cat /tmp/quicksetup-buildroot-zoneinfo | sort | tr '\n' ' ')"
  else  
   ZONEINFO="`find /usr/share/zoneinfo -mindepth 2 -type f -o -type l | grep -v -E 'UTC|Greenwich|UCT|Universal|Zulu|posix|right' | sed -e 's%/usr/share/zoneinfo/%%' -e 's%Etc/%%' | tr ' ' '_' | sort | tr '\n' ' '`"
  fi
  if [ ! -f /var/local/quicksetup-timezone-table-x -o ! -f /var/local/quicksetup-timezone-table-cli ];then  
   echo -n "" > /var/local/quicksetup-timezone-table-x
   echo -n "" > /var/local/quicksetup-timezone-table-cli
   ZONECHOICES_CLI=""
   for ONEZONE in $ZONEINFO
   do
    ONEDESCR="."
    [ "$ONEZONE" = "GMT" ] && continue
    [ "$ONEZONE" = "GMT-0" ] && continue
    case $ONEZONE in
     GMT+0)     ONEDESCR='(London, Dublin, Edinburgh, Lisbon, Reykjavik, Casablanca)';;
     GMT-1)     ONEDESCR='(Azores, Cape Verdes)';;
     GMT+1)     ONEDESCR='(Paris, Berlin, Amsterdam, Brussels, Madrid, Stockholm Oslo)';;
     GMT-2)     ONEDESCR='(mid-Atlantic)';;
     GMT+2)     ONEDESCR='(Athens, Helsinki, Istanbul, Jerusalem, Harare)';;
     GMT-3)     ONEDESCR='(Brasilia, Buenos Aires, Georgetown)';;
     GMT+3)     ONEDESCR='(Kuwait, Nairobi, Riyadh, Moscow)';;
     GMT-4)     ONEDESCR='(Caracas, La Paz, Canada)';;
     GMT+4)     ONEDESCR='(Abu Dhabi, Muscat, Tblisi, Volgograd, Kabul)';;
     GMT-5)     ONEDESCR='(Bogota, Lima, New York)';;
     GMT+5)     ONEDESCR='(Islamabad, Karachi)';;
     GMT+5:30)  ONEDESCR='(India)';;
     GMT-6)     ONEDESCR='(Mexico City, Saskatchewan)';;
     GMT+6)     ONEDESCR='(Almaty, Dhaka)';;
     GMT+6:30)  ONEDESCR='(Cocos Islands)';;
     GMT-7)     ONEDESCR='(Alberta, Montana, Arizona)';;
     GMT+7)     ONEDESCR='(Bangkok, Jakarta)';;
     GMT-8)     ONEDESCR='(Los Angeles)';;
     GMT+8)     ONEDESCR='(Perth, Singapore, Hongkong)';;
     GMT-9)     ONEDESCR='(Alaska)';;
     GMT+9)     ONEDESCR='(Tokyo)';;
     GMT+9:30)  ONEDESCR='(Darwin, Adelaide)';;
     GMT-10)    ONEDESCR='(Alaska, Hawaii)';;
     GMT+10)    ONEDESCR='(Guam)';;
     GMT+10:30) ONEDESCR='(Lord Howe Island)';;
     GMT-11)    ONEDESCR='(Samoa)';;
     GMT+11)    ONEDESCR='(Magadan, Soloman Is.)';;
     GMT-12)    ONEDESCR='(Eniwetok)';;
     GMT+12)    ONEDESCR='(Wellington, Fiji, Marshall Islands)';;
     GMT+13)    ONEDESCR='(Rawaki Islands)';;
     GMT+14)    ONEDESCR='(Line Islands)';;
    esac
    #ZONECHOICES_CLI="${ZONECHOICES_CLI}${ONEZONE} \"${ONEDESCR}\" "
    echo -n "${ONEZONE} \"${ONEDESCR}\" " >> /var/local/quicksetup-timezone-table-cli #111113
    if [ "$DEF_TIMEZONE" = "${ONEZONE}" ];then
     echo "${ONEZONE} \"${ONEDESCR}\" on" >> /var/local/quicksetup-timezone-table-x
    else
     echo "${ONEZONE} \"${ONEDESCR}\" off" >> /var/local/quicksetup-timezone-table-x
    fi
   done
  fi
  ZONECHOICES_CLI="`cat /var/local/quicksetup-timezone-table-cli`" #111113

  #table already exist, but may need to reselect 'on' item...
  onPTN="s%^${xDEF_TIMEZONE} \"(.*)\" off$%${DEF_TIMEZONE} \"\1\" on%"
  sed -i -e 's% on$% off%' -r -e "$onPTN" /var/local/quicksetup-timezone-table-x

  DEFAULTXML=""
  DEFAULT="`grep ' on$' /var/local/quicksetup-timezone-table-x | sed -e 's% on$%%' -e 's%"%%g' -e "s% %${TABCHAR}%"`" #'geany
  #[ "$DEFAULT" ] && DEFAULTXML="<default>${DEFAULT}</default>"
  [ "$DEFAULT" ] && DEFAULTXML="<item>${DEFAULT}</item>" #111107 combobox does not support default tag.
  ITEMS="`sed -e 's% on$%%' -e 's% off$%%' -e 's%"%%g' -e "s% %${TABCHAR}%" -e 's%^%<item>%' -e 's%$%</item>%' /var/local/quicksetup-timezone-table-x`" #'geany
  
  DEFAULT_UTC="false"
  [ "$HWCLOCKTIME" = "utc" ] && DEFAULT_UTC="true" #see /etc/clock
  TT_utc=$(gettext 'Tick checkbox if hardware clock is set to UTC, untick if hardware clock set to local time')
  T_utc=$(gettext 'Hardware clock set to UTC')
  CHECKUTCXML="<hbox><checkbox tooltip-text=\"${TT_utc}\"><label>${T_utc}</label>
<variable>CHECK_UTC</variable><default>${DEFAULT_UTC}</default></checkbox>
  <button>
   <input file>/usr/local/lib/X11/mini-icons/mini-question.xpm</input>
   <action type=\"launch\">DLG_HELP_UTC</action>
  </button>
</hbox>"
 
  TT_tz1=$(gettext "Choose time zone")
  TT_tz2=$(gettext "Time Zone")
  TIMEZONEXML="
  <hbox>
   <pixmap tooltip-text=\"${TT_tz2}\" icon_size=\"3\" ><input file>/usr/local/lib/X11/mini-icons/mini-clock.xpm</input></pixmap>
   <combobox tooltip-text=\"${TT_tz1}\" width-request=\"202\">
    ${DEFAULTXML}
    ${ITEMS}
    <variable>COMBO_TIMEZONE</variable>
   </combobox>
   <button>
    <input file>/usr/local/lib/X11/mini-icons/mini-question.xpm</input>
    <action type=\"launch\">DLG_HELP_TIMEZONE</action>
   </button>
  </hbox>
  ${CHECKUTCXML}"
 fi #end SET_TIMEZONE
 
 ###keyboard layout###
 KEYBOARDXML=""
 if [ "$SET_KEYBOARD" ];then
 
  #120627
  KMAPPATH='/lib/keymaps'
  [ -d /usr/share/kbd/keymaps/i386 ] && KMAPPATH='/usr/share/kbd/keymaps/i386'
  [ -d /usr/share/keymaps/i386 ] && KMAPPATH='/usr/share/keymaps/i386' #debian, gentoo. note, debian files have extension .kmap.gz, gentoo have .map.gz
  KEXT=''
  [ -f ${KMAPPATH}/qwerty/us.map ] && KEXT='.map'
  [ -f ${KMAPPATH}/qwerty/us.map.gz ] && KEXT='.map'
  [ -f ${KMAPPATH}/qwerty/us.kmap ] && KEXT='.kmap'
  [ -f ${KMAPPATH}/qwerty/us.kmap.gz ] && KEXT='.kmap'

  H_kb1="`gettext 'Help: Keyboard Layout'`"
  H_kb2="`gettext 'Computer keyboards have different layouts, depending on the country and language.

<b>Note:</b> After making a choice here, clicking the <b>OK</b> button will update the layout in X (graphical desktop) but not the console (when X not running) -- that requires a reboot.

<b>Technical</b>
The choice made here is saved in /etc/keymap. The value specifies a console layout, from the directory /lib/keymaps. When X starts, the startup script /usr/bin/xwin translates that to the equivalent for X, from directory /etc/X11/xkb/symbols -- note, if no match is found, X falls back to using <b>us</b> layout -- please report if that happens to you.'`"
  export DLG_HELP_KEYBOARD="<window resizable=\"false\" title=\"${H_kb1}\" icon-name=\"${HELPICON}\" window_position=\"1\"><vbox><text use-markup=\"true\"><label>\"${H_kb2}\"</label><variable>DLG_HELP_KEYBOARD</variable></text><hbox><button><label>${M_close}</label><action type=\"closewindow\">DLG_HELP_KEYBOARD</action></button></hbox></vbox></window>"
  
  H_n1="`gettext 'Help: Keyboard Numlock'`"
  H_n2="`gettext 'Most keyboards have a group of keys on the right side of the keyboard that are labeled <b>0</b> to <b>9</b>. These are intended for when heavy entry of numbers is required. They are dual-purpose, that is can also serve as arrow-keys, Home, End, PgUp, PgDn -- and the latter is usually the default. That is, numlock defaults to off.

If the checkbox is ticked, numlock will be on when X starts.

<b>Technical</b>
The file /root/Startup/numlockx specifies whether numlock is on or off. if the file attribute is executable, then it will execute when X starts. The file contains either <b>numlockx on</b> or <b>numlockx off</b>, and may be edited directly if desired.'`"
  export DLG_HELP_NUMLOCK="<window resizable=\"false\" title=\"${H_n1}\" icon-name=\"${HELPICON}\" window_position=\"1\"><vbox><text use-markup=\"true\"><label>\"${H_n2}\"</label><variable>DLG_HELP_NUMLOCK</variable></text><hbox><button><label>${M_close}</label><action type=\"closewindow\">DLG_HELP_NUMLOCK</action></button></hbox></vbox></window>"

  DEF_KMAP="us"
  [ -f /etc/keymap ] && DEF_KMAP="`cat /etc/keymap | sed -e 's/\..*//'`"
  [ ! "$DEF_KMAP" ] && DEF_KMAP="us" #precaution.
  if [ ! -f /var/local/quickset-keyboard-list ];then
   echo -n "" > /var/local/quickset-keyboard-list
   case $KMAPPATH in #120627
    /lib/keymaps) KMAPFILES="`find /lib/keymaps -mindepth 1 -maxdepth 1 -name '*.gz' | sort`" ;; #ex: us.gz
    *) KMAPFILES="`find ${KMAPPATH}/[^i]* -name '*.map' -o -name '*.kmap' -o -name '*.map.gz' -o -name '*.kmap.gz' -not -name 'defkeymap*' | sort`" ;;
   esac
   for AFILE in $KMAPFILES
   do
    AKMAP="`basename $AFILE .gz`" #us, fr, br, etc.
    AKMAP="`basename $AKMAP .kmap`" #120627
    AKMAP="`basename $AKMAP .map`" #120627
    case $AKMAP in
     us*) ACNTRY="(USA)";;
     fr*) ACNTRY="(France)";;
     it*) ACNTRY="(Italy)";;
     ba*) ACNTRY="(Bashkir)";;
     be*) ACNTRY="(Belgium)";;
     bg*) ACNTRY="(Bulgaria)";;
     br*) ACNTRY="(Brazil)";;
     by*) ACNTRY="(Byelorussian)";;
     cf*) ACNTRY="(French-Canadian)";;
     croat*) ACNTRY="(Croatia)";;
     cz*) ACNTRY="(Czech)";;
     de) ACNTRY="(Germany)";;
     de_*) ACNTRY="(Germany)";;
     de-*) ACNTRY="(Germany)";;
     dk*) ACNTRY="(Denmark)";;
     es*) ACNTRY="(Spain)";;
     fi*) ACNTRY="(Finland)";;
     hu*) ACNTRY="(Hungary)";;
     ka*) ACNTRY="(Kazakhstan)";;
     ky*) ACNTRY="(Kyrgyzstan)";;
     et*) ACNTRY="(Estonia)";;
     lt*) ACNTRY="(Lithuania)";;
     mk*) ACNTRY="(Macedonia)";;
     sr*) ACNTRY="(Serbia)";;
     tr*) ACNTRY="(Turkey)";;
     tt*) ACNTRY="(Tatar)";;
     sg*) ACNTRY="(Swiss-German)";;
     ua*) ACNTRY="(Ukraine)";;
     gr*) ACNTRY="(Greece)";;
     il*) ACNTRY="(Israel)";;
     is*) ACNTRY="(Iceland)";;
     jp*) ACNTRY="(Japan)";;
     pc*) ACNTRY="(Japanese/English)";;
     la*) ACNTRY="(Latin_America)";;
     nl*) ACNTRY="(Netherlands)";;
     no*) ACNTRY="(Norway)";;
     pl*) ACNTRY="(Poland)";;
     pt*) ACNTRY="(Portugal)";;
     ro*) ACNTRY="(Romania)";;
     ru*) ACNTRY="(Russia)";;
     se*) ACNTRY="(Sweden)";;
     sv*) ACNTRY="(Sweden)";;
     sk*) ACNTRY="(Slovakia)";;
     sl*) ACNTRY="(Slovenia)";;
     uk*) ACNTRY="(UK)";;
     wangbe*) ACNTRY="(Belgium)";;
     azerty) ACNTRY="(Tandon)";;
     dvorak-r) ACNTRY="(Right_single-handed)";;
     dvorak-l) ACNTRY="(Left_single-handed)";;
     *)  ACNTRY="-";;
    esac
    if [ "$DEF_KMAP" = "$AKMAP" ];then
     echo "$AKMAP \"${ACNTRY}\" on" >> /var/local/quickset-keyboard-list
    else
     echo "$AKMAP \"${ACNTRY}\" off" >> /var/local/quickset-keyboard-list
    fi
   done
  fi
  
  #table already exist, but may need to reselect 'on' item...
  onPTN="s%^${DEF_KMAP} \"(.*)\" off$%${DEF_KMAP} \"\1\" on%"
  sed -i -e 's% on$% off%' -r -e "$onPTN" /var/local/quickset-keyboard-list

  DEFAULTXML=""
  DEFAULT="`grep ' on$' /var/local/quickset-keyboard-list | sed -e 's% on$%%' -e 's%"%%g' -e "s% %    ${TABCHAR}%"`" #'geany
  #[ "$DEFAULT" ] && DEFAULTXML="<default>${DEFAULT}</default>"
  [ "$DEFAULT" ] && DEFAULTXML="<item>${DEFAULT}</item>" #111107 combobox does not support default tag.
  ITEMS="`sed -e 's% on$%%' -e 's% off$%%' -e 's%"%%g' -e "s% %    ${TABCHAR}%" -e 's%^%<item>%' -e 's%$%</item>%' /var/local/quickset-keyboard-list`" #'geany

  DEFAULT_NUMLOCK="false"
  CHECKNUMLOCKXML=""
  if which numlockx >/dev/null;then
   [ -x /root/Startup/numlockx ] && [ "`grep '^numlockx on' /root/Startup/numlockx`" != "" ] && DEFAULT_NUMLOCK="true"
   TT_num=$(gettext 'Tick checkbox to turn on keyboard numlock')
   T_num=$(gettext 'Keyboard numlock')
   CHECKNUMLOCKXML="<hbox><checkbox tooltip-text=\"${TT_num}\"><label>${T_num}</label>
<variable>CHECK_NUMLOCK</variable><default>${DEFAULT_NUMLOCK}</default></checkbox>
  <button>
   <input file>/usr/local/lib/X11/mini-icons/mini-question.xpm</input>
   <action type=\"launch\">DLG_HELP_NUMLOCK</action>
  </button>
</hbox>"
  fi

  TT_kb1=$(gettext "Choose keyboard layout")
  TT_kb2=$(gettext "Keyboard Layout")
  KEYBOARDXML="
  <hbox>
   <pixmap tooltip-text=\"${TT_kb2}\" icon_size=\"3\" ><input file>/usr/local/lib/X11/mini-icons/mini-keyboard.xpm</input></pixmap>
   <combobox tooltip-text=\"${TT_kb1}\" width-request=\"202\">
    ${DEFAULTXML}
    ${ITEMS}
    <variable>COMBO_KEYBOARD</variable>
   </combobox>
   <button>
    <input file>/usr/local/lib/X11/mini-icons/mini-question.xpm</input>
    <action type=\"launch\">DLG_HELP_KEYBOARD</action>
   </button>
  </hbox>
  ${CHECKNUMLOCKXML}"
 fi #end SET_KEYBOARD

 COUNTRYXML="<vbox><frame ${COUNTRYFRAMETITLE}>
   ${LOCALEXML}
   ${TIMEZONEXML}
   ${KEYBOARDXML}
 </frame></vbox>"
fi #end SET_COUNTRY

###setup x###
if [ "$SET_X" ];then
 
 #180102
 #XRANDR="$(xrandr -q | sed -e 's%\+%%' | sed -e 's%\.[0-9][0-9]%%g' | sed -e 's% 39[^0-9]% 40%g' -e 's% 49[^0-9]% 50%g' -e 's% 59[^0-9]% 60%g' -e 's% 69[^0-9]% 70%g' -e 's% 79[^0-9]% 80%g')" #180101 eliminate + on end, ex: "1360x768      60.37 +". chop off fraction. roll up.
 XRANDR="$(xrandr -q | sed -e 's%\+%%' | sed -e 's%\.[0-9][0-9]%%g' | sed -e 's% 39\*% 40*%g' -e 's% 49\*% 50*%g' -e 's% 59\*% 60*%g' -e 's% 69\*% 70*%g' -e 's% 79\*% 80*%g' | sed -e 's% 39[^0-9]% 40%g' -e 's% 49[^0-9]% 50%g' -e 's% 59[^0-9]% 60%g' -e 's% 69[^0-9]% 70%g' -e 's% 79[^0-9]% 80%g')" #180101 eliminate + on end, ex: "1360x768      60.37 +". chop off fraction. roll up.
 DEF_XYRES="`echo "$XRANDR" | tr -s ' ' | grep '^ [0-9]' | grep '\*' | cut -f 2 -d ' ' | head -n 1`" #130202 'head -n 1' workaround for dual monitors. (see also .xinitrc)
 OVERSCANXML=''
 
 #try keep this message short, so renders in one line...
 M_xy="`gettext 'Change the screen resolution:'`" #used in SET_XRES. #180102

 if [ "$SET_XWIZARD" ];then

  H_xw1=$(gettext 'Help: Xorg Wizards')
  H_xw2=$(gettext 'If you tick a checkbox, you are flagging your wish to run the Wizard, and it will happen after you click the <b>OK</b> button.

<b>Xorg Video Wizard</b>
This is a text-mode application (keyboard-driven, no mouse, and requires exiting from X (the graphical desktop) to run), that enables you to set the screen resolution, refresh frequency, correct mouse/touchpad, and find a correct hardware-specific driver. Note, the <b>vesa</b> driver is generic, for any video hardware, but is slow. In some cases there is more than one hardware-specific driver and you have to choose the best one -- for example:')
  H_xw3='

<i>Intel:  i810 intel
nVidia: nv nouveau</i>

'
  H_xw4=$(gettext '<b>Video Upgrade Wizard</b>
What this offers depends on the particular build of Easy OS. It may offer upgrade PETs for the commercial nVidia and ATI Xorg drivers. In the case of Wary Puppy, there is an offer to upgrade Xorg from version 7.3 to 7.6. Some builds of Puppy do not offer any upgrades via this Wizard, but may have upgrade PETs available elswhere, such as via the Puppy Package Manager or the Puppy Forum.

<b>Note 1:</b> If you need to run either of these Wizards later on, they are available via the <b>setup</b> icon on the desktop, or the <b>Setup</b> category in the menu. 
<b>Note 2:</b> The <b>Xorg Video Wizard</b> via the <b>setup</b> icon is a full graphical application, with many more options than the text-mode version, such as finetuning screen dimensions and adjusting brightness. You might want to run that afterward to further finetune your X configuration.')
  export DLG_HELP_XWIZARD="<window resizable=\"false\" title=\"${H_xw1}\" icon-name=\"${HELPICON}\" window_position=\"1\"><vbox><text use-markup=\"true\"><label>\"${H_xw2}${H_xw3}${H_xw4}\"</label><variable>DLG_HELP_XWIZARD</variable></text><hbox><button><label>${M_close}</label><action type=\"closewindow\">DLG_HELP_XWIZARD</action></button></hbox></vbox></window>"
  
  #note, quicksetup gets launched from /usr/sbin/delayedrun, but only for xorg, not xvesa.
  #put up a button to launch xorgwizard...
  if [ -f /var/log/Xorg.0.log ];then #log file created when X starts.
   #130506 broken, use same code as in /usr/sbin/report-video...
   #XDRIVERSATTEMPTED="`grep -o 'Loading .*xorg/modules/drivers/.*_drv.so' /var/log/Xorg.0.log | rev | cut -f 1 -d '/' | rev | cut -f 1 -d '_' | sort -u`" #111027 fix multiple hits.
   #XDRIVERSFAILED="`grep 'UnloadModule: ' /var/log/Xorg.0.log | cut -f 2 -d '"'`" #'geany
   #echo -n "$XDRIVERSFAILED" > /tmp/quicksetup_xorg_driversfailed
   #XDRIVERSUCCESS="`echo "$XDRIVERSATTEMPTED" | grep -w -v -f /tmp/quicksetup_xorg_driversfailed`"
   XDRIVERSUCCESS=''
   LOADED="$(grep 'Loading .*/xorg/modules/drivers/.*_drv.so' /var/log/Xorg.0.log | rev | cut -f 1 -d '/' | rev | cut -f 1 -d '_' | tr '\n' ' ')"
   for ALOADED in $LOADED
   do
    aPTN="UnloadModule: \"$ALOADED\""
    bPTN="LoadModule: \"$ALOADED\""
    #Xorg loaded noauveau, then tried to load it again, failed, then unloaded, so count them...
    CNTload=`grep "$bPTN" /var/log/Xorg.0.log | wc -l`
    CNTunload=`grep "$aPTN" /var/log/Xorg.0.log | wc -l`
    [ $CNTload -eq 0 ] && continue
    [ $CNTunload -ge $CNTload ] && continue
    XDRIVERSUCCESS="$ALOADED"
    break
   done
   if [ "$XDRIVERSUCCESS" ];then #precaution.
    #180102 change text and layout...
    M_xdrv1="$(gettext 'The generic <b>vesa</b> video driver is currently being used. It is recommended that you run the Video Wizard to try and load a hardware-specific driver.')"
    M_xdrv2="$(gettext 'The')"
    M_xdrv3="$(gettext 'video driver is currently being used.')"
    M_xdrv4="$(gettext 'Current resolution:')"
    TT_xorg1=$(gettext 'Run the Xorg Video Wizard')
    TT_xorg2=$(gettext 'Xorg Video Wizard')
    B_xwiz=$(gettext 'VideoWizard')
    B_xup=$(gettext 'UpgradeWizard')
    TT_xup1=$(gettext 'Run the Video Upgrade Wizard')
    TT_xup2=$(gettext 'Video Upgrade Wizard')
    WIZMSGXML="<text><label>$(gettext 'For further changes, run the Video Wizard:')</label></text>"
    if [ "$XDRIVERSUCCESS" = "vesa" ];then
     XMSGXML="<text use-markup=\"true\"><label>\"${M_xdrv1} ${M_xdrv4} <b>${DEF_XYRES}</b>\"</label></text>"
     XWIZARDXML="<hbox>
      <pixmap tooltip-text=\"${TT_xorg2}\"><input file>/usr/local/video_upgrade/xsettings24.xpm</input></pixmap><checkbox tooltip-text=\"${TT_xorg1}\"><variable>CHECK_XORGWIZARD</variable><label>${B_xwiz}</label><action>if true disable:CHECK_XUPGRADE</action><action>if false enable:CHECK_XUPGRADE</action></checkbox>
      <pixmap tooltip-text=\"${TT_xup2}\"><input file>/usr/local/video_upgrade/xupgrade24.xpm</input></pixmap><checkbox tooltip-text=\"${TT_xup1}\"><variable>CHECK_XUPGRADE</variable><label>${B_xup}</label><action>if true disable:CHECK_XORGWIZARD</action><action>if false enable:CHECK_XORGWIZARD</action></checkbox>
      <button><input file>/usr/local/lib/X11/mini-icons/mini-question.xpm</input><action type=\"launch\">DLG_HELP_XWIZARD</action></button>
     </hbox>"
    else
     XMSGXML="<text use-markup=\"true\"><label>\"${M_xdrv2} <b>${XDRIVERSUCCESS}</b> ${M_xdrv3} ${M_xdrv4} <b>${DEF_XYRES}</b>\"</label></text>"
     XWIZARDXML="<hbox>
      <pixmap tooltip-text=\"${TT_xorg2}\"><input file>/usr/local/video_upgrade/xsettings24.xpm</input></pixmap><checkbox tooltip-text=\"${TT_xorg1}\"><variable>CHECK_XORGWIZARD</variable><label>${B_xwiz}</label></checkbox>
      <button><input file>/usr/local/lib/X11/mini-icons/mini-question.xpm</input><action type=\"launch\">DLG_HELP_XWIZARD</action></button>
     </hbox>"
    fi
   fi
  fi
 fi #end SET_XWIZARD
 
 if [ "$SET_XRES" ];then
  #a combobox to choose resolution... 180101 fix text...
  H_xy1="$(gettext 'Help: Xrandr Screen Resolution')"
  H_xy2="<b>$(gettext 'Screen resolution')</b>
$(gettext 'The choices are in the format, for example, <b>1024x768</b>, which means 1024 pixels (dots) horizontally and 768 pixels vertically.')

<b>$(gettext 'Refresh frequency')</b>
$(gettext 'Also listed is the vertical refresh frequency, for example <b>1024x768 60</b> means that the screen is refreshing (redrawing) 60 times per second. For older cathode-ray-tube monitors, a value of at least 75 is required to minimize flicker. For modern LCD screens, 60 is satisfactory, and even preferred in most cases.')

<b>$(gettext 'Warning 1')</b>
$(gettext 'After testing a resolution, you will be given the opportunity to make it permanent if you wish. <b>IF THE NEW RESOLUTION MESSES UP THE SCREEN, WAIT 60 SECONDS OR PRESS CTRL-ALT-BACKSPACE</b>')

<b>$(gettext 'Warning 2')</b>
$(gettext 'This resolution selection box uses the <b>xrandr</b> utility to set the resolution, however, with some video hardware it may not work -- in that case, run the <b>Video Wizard</b> to choose a resolution, or edit /etc/X11/xorg.conf directly.')"
  export DLG_HELP_XYRES="<window resizable=\"false\" title=\"${H_xy1}\" icon-name=\"${HELPICON}\" window_position=\"1\"><vbox><text use-markup=\"true\"><label>\"${H_xy2}\"</label><variable>DLG_HELP_XYRES</variable></text><hbox><button><label>${M_close}</label><action type=\"closewindow\">DLG_HELP_XYRES</action></button></hbox></vbox></window>"
  
  #180102 overscan help...
  H_ov1="$(gettext 'Help: Overscan and underscan')"
  H_ov2="$(gettext 'The desktop may suffer from horizontal or vertical displacement, or be too wide, too narrow, too high, or too short.')

<b>Overscan</b>
$(gettext 'This is the most common problem. The desktop is off all edges of the screen.')
$(gettext 'Mostly this happens when a TV is being used as a monitor. It is also more common with AMD or NVIDIA video hardware -- Intel video may be less likely to have this problem.')
$(gettext 'The best way to fix it is to go into the TV setup and choose the <b>Just Scan</b> option, sometimes with a different name, such as <b>1:1</b> or <b>Native Mode</b>.') $(gettext 'Unfortunately, with some TVs this will have to be done at every power-up.')

$(gettext 'If settings on the monitor or TV do not work, or require setting at every power-up, tick the <b>Fix overscan</b> checkbox. This will use the <b>xrandr</b> utility to apply overscan/underscan correction after the graphical desktop has started.')"
  export DLG_HELP_OVERSCAN="<window resizable=\"false\" title=\"${H_ov1}\" icon-name=\"${HELPICON}\" window_position=\"1\"><vbox><text use-markup=\"true\"><label>\"${H_ov2}\"</label><variable>DLG_HELP_OVERSCAN</variable></text><hbox><button><label>${M_close}</label><action type=\"closewindow\">DLG_HELP_OVERSCAN</action></button></hbox></vbox></window>"
  
  FLAG_XYRES="enabled"

  #shinobar...
  NVIDIABUTTON=""
  if which nvidia-settings &>/dev/null  && NRATE=$(nvidia-settings -q RefreshRate | grep '[0-9]') ; then
   NVIDIABUTTON="<button tooltip-text=\"$(gettext 'Launch the NVIDIA X Server Settings.')\" icon_size=\"2\" ><input file>/usr/local/video_upgrade/nvidia48x32.png</input><label>$(gettext 'NVIDIA')</label><action>EXIT:NVIDIA</action></button>"
   FLAG_XYRES="disabled"
  fi
  
  DEF_VFREQ="$(echo "$XRANDR" | tr -s ' ' | grep '^ [0-9]' | grep '\*' | cut -f 3 -d ' ' | cut -f 1 -d '*' | head -n 1)" #130202 get freq also.
  #130131 xrandr may have more than one frequency on a line, ex:   1360x768       59.8     60.0
  #LIST_XYRESES="`echo "$XRANDR" | tr -s ' ' | grep '^ [0-9]' | cut -f 2,3 -d ' ' | sed -e 's%$% "" off%'`"
  #1301310 creates multiple lines, ex: "1360x768       59.8" and "1360x768       60.0"...
  #180101 freq now whole numbers. remove duplicates...
  xXYRESES="$(echo "$XRANDR" | tr -s ' ' | grep '^ [0-9]' | cut -f 2,3,4 -d ' ' | sed -r -e 's%([^ ]*) ([^ ]*) ([^ ]*)%\1 \2TWO\1THREE\3%' -e 's%TWO.*THREE$%%' -e 's%TWO%\n%' -e 's%THREE% %' | uniq)"
  LIST_XYRESES=""
  [ "$xXYRESES" ] && LIST_XYRESES="$(echo "$xXYRESES" | sed -e 's%$% "" off%')"
  echo "$LIST_XYRESES" > /var/local/quickset-xrandr-list
  onPTN="s%^${DEF_XYRES} \"(.*)\" off$%${DEF_XYRES} \"\1\" on%"
  sed -i -e 's% on$% off%' -r -e "$onPTN" /var/local/quickset-xrandr-list

  DEFAULTXML=""
  DEFAULT="`grep ' on$' /var/local/quickset-xrandr-list | sed -e 's% on$%%' -e 's%"%%g' -e "s% % ${TABCHAR}%"`" #'geany
  #[ "$DEFAULT" ] && DEFAULTXML="<default>${DEFAULT}</default>"
  [ "$DEFAULT" ] && DEFAULTXML="<item>${DEFAULT}</item>" #111107 combobox does not support default tag.
  ITEMS="`sed -e 's% on$%%' -e 's% off$%%' -e 's%"%%g' -e "s% % ${TABCHAR}%" -e 's%^%<item>%' -e 's%$%</item>%' /var/local/quickset-xrandr-list`" #'geany

  TT_xy1="`gettext 'Xrandr Screen Resolution'`"
  TT_xy2="`gettext 'Set screen resolution with xrandr'`"
  XYRESXML="<text><label>${M_xy}</label></text>
  <hbox>
   <pixmap tooltip-text=\"${TT_xy1}\" icon_size=\"3\" ><input file  stock=\"gtk-fullscreen\"></input></pixmap>
   <combobox tooltip-text=\"${TT_xy2}\" width-request=\"202\">
    ${DEFAULTXML}
    ${ITEMS}
    <variable>COMBO_XYRES</variable>
    <visible>${FLAG_XYRES}</visible>
   </combobox>
   <button>
    <input file>/usr/local/lib/X11/mini-icons/mini-question.xpm</input>
    <action type=\"launch\">DLG_HELP_XYRES</action>
   </button>
  </hbox>"
  
  DEF_OVCHK='false'
  [ -f /root/.xrandroverscan ] && DEF_OVCHK='true'
  OVERSCANXML="<hbox>
   <checkbox><default>${DEF_OVCHK}</default><label>$(gettext 'Fix overscan')</label><variable>OVERSCAN_VAR</variable></checkbox>
   <button>
    <input file>/usr/local/lib/X11/mini-icons/mini-question.xpm</input>
    <action type=\"launch\">DLG_HELP_OVERSCAN</action>
   </button>
  </hbox>"
 fi #end SET_XRES

 #131210 for now... 140127 fix so works as before also... 150929...
 AVAILDRVS="$(ls -1 ${XORGPATH}/modules/drivers | sort | sed -e 's%\.so$%%' | tr '\n' ' ')"
 if [ "$AVAILDRVS" = "modesetting vesa " ];then #quirky6 orig only has these.
  XMSGXML=""
  XWIZARDXML="<text><label>Xorg is currently running with either the 'vesa' or 'modesetting' driver. If you wish to experiment with both drivers, and change resolution and other parameters, exit from X (see Shutdown menu) and type 'xorgwizard'.</label></text>"
  NVIDIABUTTON=""
 fi

 #[ "$XYRESXML" = "" -a "$NVIDIABUTTON" = "" ] && XYRESXML="<text><label>nothing</label></text>" #precaution 
 XXML="<vbox>
  <frame ${XFRAMETITLE}>
   ${XMSGXML}
   ${NVIDIABUTTON}
   ${OVERSCANXML}
   ${XYRESXML}
   ${WIZMSGXML}
   ${XWIZARDXML}
  </frame>
 </vbox>"
fi

#120714 alternate audio/video frame for arm board... create $XXML...
if [ "$SET_RP_AUDIO" -o "$SET_RP_VIDEO" ];then
 if [ "$SET_RP_AUDIO" ];then
  RP_DEF_AUDIO='0'; RP_AUDIO_0_DEF='false'; RP_AUDIO_1_DEF='false'; RP_AUDIO_2_DEF='false'
  if [ -f /etc/init.d/alsa_raspi ];then
   RP_DEF_AUDIO="`grep 'amixer cset numid' /etc/init.d/alsa_raspi | rev | cut -f 1 -d ' ' | rev`" #0=auto, 1=analog, 2=hdmi.
  else #precaution. script should be provided by 'z_raspi_fixes_hack' pet.
   echo '#!/bin/sh
case $1 in
 start)
  amixer cset numid=3 0
 ;;
esac' > /etc/init.d/alsa_raspi
   chmod 755 /etc/init.d/alsa_raspi
  fi
  case $RP_DEF_AUDIO in
   1) RP_AUDIO_1_DEF='true' ;;
   2) RP_AUDIO_2_DEF='true' ;;
   *) RP_AUDIO_0_DEF='true' ;;
  esac
  RP_AUDIOXML="<frame $(gettext 'Raspberry Pi Audio Settings')>
   <radiobutton active=\"${RP_AUDIO_0_DEF}\"><label>$(gettext 'Automatic output routing')</label><variable>RP_AUDIO_0_RAD</variable></radiobutton>
   <radiobutton active=\"${RP_AUDIO_1_DEF}\"><label>$(gettext 'Output to round analog socket')</label><variable>RP_AUDIO_1_RAD</variable></radiobutton>
   <radiobutton active=\"${RP_AUDIO_2_DEF}\"><label>$(gettext 'Output to HDMI TV/monitor')</label><variable>RP_AUDIO_2_RAD</variable></radiobutton>
  </frame>"
 fi
 if [ "$SET_RP_VIDEO" ];then
  RP_VIDEOXML="<frame Raspberry Pi Video Settings>
   <text><label>No fancy GUI here yet! Please edit file 'config.txt' in partition #1 then reboot.</label></text>
  </frame>"
 fi
 XXML="<vbox>
  ${RP_AUDIOXML}
  ${RP_VIDEOXML}
 </vbox>"
fi



####main window#### width-chars=\"46\"
###################
[ $XPID -ne 0 ] && kill $XPID 2> /dev/null
BACKTITLEXML=""
#[ "$SET_BACKTITLE" ] && BACKTITLEXML="<text use-markup=\"true\" wrap=\"false\"><label>\"<b>${BACKTITLE}</b>\"</label></text>"
[ "$SET_BACKTITLE" ] && BACKTITLEXML="<text use-markup=\"true\"><label>\"<big><b>${BACKTITLE}</b></big>\"</label></text>" #150425
M_mouse=$(gettext 'Dead mouse? <b>TAB</b> key to select this button then press <b>ENTER</b> key:')
WINWIDTH=""
WINWIDTHPARAM=""
#WINWIDTHPARAM='width-request="644"' #"564"
#[ "$SET_X" = "" ] && WINWIDTHPARAM='width-request="282"'
#B_ok=$(gettext "OK, do not restart X")
#B_okrestart=$(gettext "OK, restart X now")
#    <button><label>${B_cancel}</label><input file>/usr/local/lib/X11/mini-icons/mini-cross.xpm</input><action>EXIT:cancel</action></button>
B_cancel=$(gettext "Cancel")
M_exit="`gettext 'Confirm the settings and click OK:'`"
B_ok=$(gettext "OK")

#150424 add lang flags...
FLAGSXML1=""; FLAGSXML2=""
if [ "$SET_FLAGS" == "yes" ];then
 FCNT=1
 for AFLAG in `find /usr/share/pixmaps -mindepth 1 -maxdepth 1 -type f -name 'lang-*-64.png' | sort | tr '\n' ' '`
 do
  flagLANG="$(echo -n "$AFLAG" | cut -f 2 -d '-')"
  [ "$xLANGUAGE" == "$flagLANG" ] && continue
  if [ "$flagLANG" != "en" ];then
   [ -f /usr/share/locale/${flagLANG}/LC_MESSAGES/quicksetup.mo ] || continue
  fi
  case $FCNT in
   1) FLAGSXML1="<hbox spacing=\"4\"><vbox spacing=\"4\">" ;; #4 is the default anyway.
   15) FCNT=1; FLAGSXML1="${FLAGSXML1}</vbox><vbox spacing=\"4\">" ;; #170131 changed 9 to 15
  esac
  case $flagLANG in
   da) ttMSG="Klik for at oversætte til dansk" ;; #danish
   de) ttMSG="Klicken Sie, um ins Deutsche zu übersetzen" ;; #german. 150429 fix.
   el) ttMSG="Κάντε κλικ για να μεταφράσει στην ελληνική" ;; #greek
   es) ttMSG="Haga clic aquí para traducir al español" ;; #spanish
   et) ttMSG="Kliki tõlkida eesti" ;; #estonian
   fi) ttMSG="Klikkaa kääntää suomeksi" ;; #finnish
   fr) ttMSG="Cliquez pour traduire en français" ;; #french
   hu) ttMSG="Kattintson lefordítani magyarra" ;; #hungarian
   it) ttMSG="Clicca per tradurre in italiano" ;; #italian
   nl) ttMSG="Klik om te vertalen naar het Nederlands" ;; #dutch
   pl) ttMSG="Kliknij, aby przetłumaczyć na polski" ;; #polish
   pt) ttMSG="Clique para traduzir para Português" ;; #portuguese
   ru) ttMSG="Нажмите, чтобы перевести на русский язык" ;; #russian
   sv) ttMSG="Klicka för att översätta till svenska" ;; #swedish
   tr) ttMSG="Türkçe'ye çevirmek için tıklayın" ;; #turkish
   *) ttMSG="Click to translate to English" ;;
  esac
  #170131 reduced size of flags, 64 down to 32 pixels...
  FLAGSXML1="${FLAGSXML1}<eventbox tooltip-text=\"${ttMSG}\"><pixmap><width>48</width><input file>${AFLAG}</input></pixmap>
  <action signal=\"button-release-event\">EXIT:flag_${flagLANG}</action>
  </eventbox>"
  FCNT=`expr $FCNT + 1`
 done
 FLAGSXML1="${FLAGSXML1}</vbox>"
 FLAGSXML2="</hbox>"
fi

#170210 offer to recompress xz easy.sfs to gz-compressed...
EXPANDFS_XML=""; CHECK_EXPFS=""
if [ $DISPLAY ];then
 if [ "$MYBASE" == "quicksetup" ];then #full window.
  if [ -f /mnt/${WKG_DEV}/${WKG_DIR}releases/easy-${DISTRO_VERSION}/easy.sfs ];then #paranoid precaution
   XZflag="$(unsquashfs -s /mnt/${WKG_DEV}/${WKG_DIR}releases/easy-${DISTRO_VERSION}/easy.sfs | grep '^Compression xz')"
   if [ "$XZflag" ];then
    H_fs1="$(gettext 'Help: Recompress easy.sfs')"
    H_fs2="$(gettext 'The file easy.sfs has all of Easy Linux. It is loaded at bootup as a read-only layer in the layered filesystem.')
    $(gettext 'easy.sfs is currently xz-compressed, which is a very high level of compression. This was chosen as it makes the download from the Internet smaller. However, it does make Easy Linux noticeably slower on slow CPUs or slow USB memory.')
    $(gettext 'By ticking the checkbox, easy.sfs will be recompressed with gzip compression, which will make easy.sfs bigger, but may result in noticeably faster responsiveness, especially when starting applications.')"
    export DLG_HELP_EXPFS="<window resizable=\"false\" title=\"${H_fs1}\" icon-name=\"${HELPICON}\" window_position=\"1\"><vbox><text use-markup=\"true\"><label>\"${H_fs2}\"</label><variable>DLG_HELP_EXPFS</variable></text><hbox><button><label>${M_close}</label><action type=\"closewindow\">DLG_HELP_EXPFS</action></button></hbox></vbox></window>"
    TT_CH_EXPFS="$(gettext 'Recompress easy.sfs from xz to gz compression')"
    EXPANDFS_XML="
    <text use-markup=\"true\"><label>\"<b><span fgcolor='white' bgcolor='#FF4040'> $(gettext 'Recompress easy.sfs:') </span></b>\"</label></text>
      <checkbox tooltip-text=\"${TT_CH_EXPFS}\"><label>\"\"</label><variable>CHECK_EXPFS</variable><default>false</default></checkbox>
      <button><input file>/usr/local/lib/X11/mini-icons/mini-question.xpm</input><action type=\"launch\">DLG_HELP_EXPFS</action></button>
    <text><label>\"             \"</label></text>"
   fi
  fi
 fi
fi

MAINCONTENTXML=""
export QUICKSETUP_DIALOG="<window title=\"${WINTITLE}\" window_position=\"1\" icon-name=\"${WINICON}\" ${WINWIDTHPARAM} resizable=\"false\">
${FLAGSXML1}<vbox>
  <hbox>
    ${BACKTITLEXML}
    <text><label>\"         \"</label></text>
    <text use-markup=\"true\"><label>\"${M_mouse}\"</label></text>
    <vbox><button><input file>/usr/local/lib/X11/mini-icons/Mouse.xpm</input><action>mousecheck nowait</action></button></vbox>
  </hbox>
  <hbox>
    ${COUNTRYXML}
    ${XXML}
  </hbox>
  ${NETWORK_XML}
  <hbox>
    ${EXPANDFS_XML}
    <text><label>${M_exit}</label></text>
    <button><label>${B_ok}</label><input file>/usr/local/lib/X11/mini-icons/mini-tick.xpm</input><action>EXIT:OK</action></button>
  </hbox>
</vbox>${FLAGSXML2}
</window>"

###display main window###
wPID=0
if [ $DISPLAY ];then

 #140209 if forced-reboot before quicksetup ok-exit, /root/.profile will read this, force run xorgwizard...
 if [ ! -f /var/local/quicksetup-test-success ];then #only do this once...
  echo -n "$XDRIVERSUCCESS" > /var/local/quicksetup-test-success
  [ "$XDRIVERSUCCESS" ] && echo -n "$XDRIVERSUCCESS" > /var/local/quicksetup-test-success0 #170714 read by xorgwizard-cli
  sync & #make sure it is written to disk. 140217 separate process to avoid delay. could use 'fsync' but think better to flush everything.
 fi
 #note also, there is a totally different file, /.fsckme.flg, that forces a
 #f.s. check if a forced reboot/shutdown (such as power failure).
 #note, also, there is a totally different file, /root/.XLOADED, set in /xwin, forces run xorgwizard
 #if a power failure or crash. xwin reads this also.

 RETVALS="`${GTKDIALOGEXE} --program=QUICKSETUP_DIALOG`"
 eval "$RETVALS"
 
 #150424 change language of text...
 if [[ $EXIT == flag_* ]];then
  tagLANG=':en'
  flagLANG="${EXIT:5}"
  [ "$flagLANG" == "en" ] && tagLANG=''
  LANGUAGE=${flagLANG}${tagLANG} exec ${MYBASE} nosplash #reenter quicksetup
 fi

 [ "$EXIT" != "OK" -a "$EXIT" != "NVIDIA" ] && exit
 
 #140209 successful exit from quicksetup, so X is working...
 echo -n "" > /var/local/quicksetup-test-success

 yaf-splash -bg orange -close never -fontsize large -text "$(gettext 'Processing, please wait...')" & #120524
 wPID=$!
else
 #replace the old single-purpose text-mode scripts...
 case $MYBASE in
  chooselocale)
   CHOICES="`cat /usr/share/i18n/dialog_table_cli | tr '\n' ' '`"
   if [ "$PARAM2" = "quiet" ];then #120215 rc.country calls 'chooselocale cli quiet'
    COMBO_LOCALE=${BASELANG} #LANG already chosen. ex: de_DE (.UTF-8 part is specified by UTF8)
   else
    echo "#!/bin/sh
dialog --aspect 10 --title \"Country setup\" --menu \"The locale setting provides money, date and font localization for your country. The current choice is ${BASELANG}. Make a choice to suit your country...\" 0 0 0 ${CHOICES} 2>/tmp/chooselocale-choice
exit \$?" > /tmp/dialog-chooselocale
    chmod 777 /tmp/dialog-chooselocale
    /tmp/dialog-chooselocale
    [ $? -ne 0 ] && exit
    COMBO_LOCALE="`cat /tmp/chooselocale-choice | head -n 1`"
   fi
   CHECK_UTF8="$DEFAULT_UTF8" #dialog box does not have a UTF-8 checkbox.
  ;;
  timezone-set)
   ZONEDLG="dialog --aspect 10 --title \"Easy timezone selector\" --default-item $DEF_TIMEZONE --menu \"Please choose your timezone. If a city/region/country in your timezone is not listed, choose a GMT<number>\" 0 0 0 ${ZONECHOICES_CLI}"
   eval $ZONEDLG 2>/tmp/zoneretval
   [ $? -ne 0 ] && exit
   COMBO_TIMEZONE="`cat /tmp/zoneretval`"
   CHECK_UTC="$DEFAULT_UTC" #dialog box does not have a UTC checkbox.
  ;;
  *)
   exit
  ;;
 esac
fi

####process choices####
FLAG_CHANGED=""

if [ "$EXIT" = "NVIDIA" ];then
 nvidia-settings
fi

if [ "$SET_KEYBOARD" ];then
 #two variables COMBO_KEYBOARD and CHECK_NUMLOCK
 NEW_KMAP="`echo -n "$COMBO_KEYBOARD" | cut -f 1 -d ' ' | cut -f 1 -d "$TABCHAR"`"
 FONTMAP=""; CODEPAGE=""
 if [ "$DEF_KMAP" != "$NEW_KMAP" ];then
  FLAG_CHANGED="${FLAG_CHANGED}${TT_kb2}:yes|" #111020 no need to restart X.
  case $NEW_KMAP in #note, same code in /etc/rc.d/rc.country, init, and input-wizard.
   de*|be*|br*|dk*|es*|fi*|fr*|it*|no*|se*|sv*|pt*|sg*) #171015 added sg*
    #FONTMAP="lat1-12.psfu"
    modprobe nls_cp850
    CODEPAGE="850"
   ;;
   cz*|hu*|pl*|ro*|sk*|croat*|slovene*|sr*) #150302 added sr*
    modprobe nls_cp852
    modprobe nls_iso8859-2
    #FONTMAP="lat2-12.psfu"
    CODEPAGE="852"
   ;;
  esac
  echo -n "${NEW_KMAP}${KEXT}" > /etc/keymap #120627
  #echo -n "$FONTMAP" > /etc/fontmap
  echo -n "$CODEPAGE" > /etc/codepage
  
  #161106 keymap-set broken with new evdev. too complicated, remove...
  #keymap-set --load #111020 script by shinobar.
  #120224 fontmap will be handled in locale code below.
  
  #161106 instead of keymap-set...
  gzip -dcf /lib/keymaps/$NEW_KMAP.gz | loadkmap
  #[ "$FONTMAP" ] && gzip -dcf /lib/consolefonts/${FONTMAP}.gz | loadfont
  X_KM=""
  [ -e /etc/X11/xorg.conf ] && [ "$(grep '#xkeymap0' /etc/X11/xorg.conf)" ] && X_KM='/etc/X11/xorg.conf'
  #...that was the old keyboard and mouse xorg drivers. using evdev...
  [ -e /etc/X11/xorg.conf.d/10-evdev-puppy.conf ] && [ "$(grep '#xkeymap0' /etc/X11/xorg.conf.d/10-evdev-puppy.conf)" ] && X_KM='/etc/X11/xorg.conf.d/10-evdev-puppy.conf'
  if [ "$X_KM" ];then
   xCONSKEYMAP="`cat /etc/keymap`"
   [ "$xCONSKEYMAP" = "" ] && xCONSKEYMAP="us"
   case $xCONSKEYMAP in
    srp*) XKEYMAP="srp" ;;   #serbia
    az*) XKEYMAP="fr" ;;     #azerty
    wa*) XKEYMAP="fr" ;;     #wangbe
    dv*) XKEYMAP="dvorak" ;; #dvorak
    cr*) XKEYMAP="cz" ;;     #croat
    sg*) XKEYMAP="ch" ;;     #swiss-german
    sl*) XKEYMAP="si" ;;     #slovene
    sv*) XKEYMAP="se" ;;     #sweden
    uk*) XKEYMAP="gb" ;;     #united kingdom
    la*) XKEYMAP="latam" ;;  #latin american
    *)  XKEYMAP="$(echo -n "$xCONSKEYMAP" | cut -c 1-2)" ;;
   esac
   #a problem is we may have 'xkb' folder in one of two places, also variation
   # different versions of xorg...
   XKBD_PATH="dunnowhere"
   [ -f /etc/X11/xkb/symbols/pc/us ] && XKBD_PATH='/etc/X11/xkb/symbols/pc'
   [ -f /usr/share/X11/xkb/symbols/us ] && XKBD_PATH='/usr/share/X11/xkb/symbols'
   [ ! -f ${XKBD_PATH}/${XKEYMAP} ] && XKEYMAP='us' #fallback.
   currXKEYMAP="`grep '#xkeymap0' ${X_KM} | tr '\t' ' ' | tr -s ' ' | cut -f 4 -d '"'`" #'geany fix
   if [ "$currXKEYMAP" != "$XKEYMAP" ];then
    skPATTERN="s%.*#xkeymap0%	Option      \"XkbLayout\" \"${XKEYMAP}\" #xkeymap0%"
    sed -i -e "${skPATTERN}" ${X_KM}
    #do an immediate update, so do not have to restart X...
    XMODEL="$(grep '#xkbmodel0' ${X_KM} | tr '\t' ' ' | tr -s ' ' | cut -f 4 -d '"')" #ex: pc102
    setxkbmap -rules xorg -model "$XMODEL" -layout "$XKEYMAP"
   fi
  fi
  if [ "$DISPLAY" ];then
   [ $wPID -ne 0 ] && kill $wPID #170723
   wPID=0
   xkbconfigmanager #170528 coz many people need to run this, advanced xorg kb layout.
  fi
 fi
 if [ "$DEFAULT_NUMLOCK" != "$CHECK_NUMLOCK" ];then
  FLAG_CHANGED="${FLAG_CHANGED}${T_num}:yes|"
  STATUS_NUMLOCK=off
  [ "$CHECK_NUMLOCK" = "true" ] && STATUS_NUMLOCK=on
  echo -e "#!/bin/sh\nnumlockx ${STATUS_NUMLOCK}" > /root/Startup/numlockx
  chmod 755 /root/Startup/numlockx
  numlockx ${STATUS_NUMLOCK} #do it now.
 fi
fi #end SET_KEYBOARD

if [ "$SET_LOCALE" ];then
 #two variables, COMBO_LOCALE and CHECK_UTF8
 
 #150302
 #LANGCHOICE="`echo -n "$COMBO_LOCALE" | cut -f 1 -d ' ' | cut -f 1 -d '@'`" #nl_BE@euro, need to chop.
 #refer: http://murga-linux.com/puppy/viewtopic.php?t=97897&start=75
 #Nobody needs @euro if using utf8. But that code has chopped each @ that is
 # @latin  has been chopped ! Change it to look like:
 LANGCHOICE="`echo -n ${COMBO_LOCALE//@euro/} | cut -f 1 -d ' '`" #all @euro chopped.
 #.... and locale sr_SR@latin can be activated.
 #note: ${COMBO_LOCALE//@euro/} is the bash builtin equivalent of echo ${COMBO_LOCALE}| sed s/@euro//
 
 UTF8=""
 [ "$CHECK_UTF8" = "true" ] && UTF8='.UTF-8'
 
 #120215 rc.country calls 'chooselocale cli quiet'
 [ "$PARAM2" = "quiet" ] && CURRLANG=en_US #so as to force below code block to run...

 if [ "$LANGCHOICE" != "" -a "${LANGCHOICE}${UTF8}" != "$CURRLANG" ];then
  FLAG_CHANGED="${FLAG_CHANGED}${TT_mainlanguage}:restart|"
  # creates locale files in /usr/lib/locale...
  OLDLANGLINE="LANG=$CURRLANG"
  NEWLANGLINE="LANG=${LANGCHOICE}"
  xUTF8="$UTF8"
  if [ "$UTF8" != "" ];then #111022
   NEWLANGLINE="LANG=${LANGCHOICE}"'.UTF-8'
   xUTF8='.utf8'
  fi
  if [ "`locale -a | grep "${LANGCHOICE}${xUTF8}$"`" = "" ];then #120228 L18L bugfix.
   if [ "$UTF8" = "" ];then
    lcPATTERN='^'"${LANGCHOICE}"' '
    CHARMAP="`grep "$lcPATTERN" /usr/share/i18n/SUPPORTED | head -n 1 | cut -f 2 -d ' '`"
    if [ "$CHARMAP" != "" ];then #make sure have it...
     cPATTERN="$CHARMAP"'\.gz'
     [ "`ls -1 /usr/share/i18n/charmaps | grep '.gz$'`" = "" ] && cPATTERN="$CHARMAP"'$'
     [ "`ls -1 /usr/share/i18n/charmaps | grep "$cPATTERN"`" = "" ] && CHARMAP=""
    fi
    if [ "$CHARMAP" != "" ];then
     localedef -f $CHARMAP -i $LANGCHOICE --no-archive ${LANGCHOICE} > /dev/null
     NEWLANGLINE="LANG=${LANGCHOICE}"
     UTF8="" #120209
    else
     #no match, i think forced to use utf8... 111022 change name back to .utf8...
     localedef -f UTF-8 -i $LANGCHOICE --no-archive ${LANGCHOICE}.utf8 > /dev/null
     NEWLANGLINE="LANG=${LANGCHOICE}.UTF-8"
     UTF8='.UTF-8'
    fi
   else
    localedef -f UTF-8 -i $LANGCHOICE --no-archive ${LANGCHOICE}.utf8 > /dev/null #111022
    NEWLANGLINE="LANG=${LANGCHOICE}.UTF-8"
   fi
   #190103 remove...
   ##190101 planning to have 'easyinitrd.mo' builtin for all langs, initrd needs it copied-up to .session ...
   #[ -f /usr/share/locale/${LANGCHOICE%_*}/LC_MESSAGES/easyinitrd.mo ] && touch /usr/share/locale/${LANGCHOICE%_*}/LC_MESSAGES/easyinitrd.mo
  fi
  NEWLANG="`echo -n "$NEWLANGLINE" | cut -f 2 -d '='`" #ex: de_DE.UTF-8

  if [ "$OLDLANGLINE" != "$NEWLANGLINE" ];then
   #langPATTERN="s/${OLDLANGLINE}/${NEWLANGLINE}/"
   langPATTERN="s%^LANG=.*%${NEWLANGLINE}%" #111022
   sed -i -e "$langPATTERN" /etc/profile
   #120328 code moved up, to be compatible for chooselocale call from rc.country...
   #120224 load console font... (code based on that in 'init')
   #120301 don't load console font here. seems to get dropped on exit from X. (instead, do it in xwin. now have /sbin/load_consolefont)
   case $NEWLANG in
    en*)
     #er, no, really want to unload all console fonts.
     echo -n "" > /etc/fontmap #well, next boot, no font will be loaded.
    ;;
    ar*|he*|iw*) #L18L no Greek. arabic, hebrew,
     echo -n 'LatArCyrHeb-16.psfu' > /etc/fontmap
    ;;
    *) #L18L All European languages; new default ?!
     echo -n 'LatGrkCyr-8x16.psfu' > /etc/fontmap
    ;;
   esac
  fi
    
  if [ "$PARAM2" = "quiet" ];then #120215 refer to /etc/rc.d/rc.country.
   #scripts fixdesk and fixmenus translate files to new language (as specified in /usr/share/sss/menu_strings and desk_strings).
   #so need to call them here...
   #note, these are also called in /etc/rc.d/rc.update, and further down.
   LANG=${NEWLANG} fixscripts
   LANG=${NEWLANG} fixdesk
   LANG=${NEWLANG} fixmenus
   exit
  fi
  [ "$MYBASE" = "chooselocale" ] && [ "$PARAM1" = "cli" ] && exit #refer rc.country.
  
  if [ "$OLDLANGLINE" != "$NEWLANGLINE" ];then
   #120213 need language-pack...
   LANG1=${LANGCHOICE%_*}  #"`echo -n $LANGCHOICE | cut -f 1 -d '_'`"  #ex: de
   LANG12=${LANGCHOICE%.*} #"`echo -n $LANGCHOICE | cut -f 1 -d '.'`" #ex: de_DE
   l1PTN="|langpack_${LANG1}|"
   l12PTN="|langpack_${LANG12}|"
   if [ "$LANG1" != "en" ];then
    LANGFLAG='no'
    [ "`grep "$l12PTN" /root/.packages/woof-installed-packages`" != "" ] && LANGFLAG='yes'
    [ "`grep "$l12PTN" /root/.packages/user-installed-packages`" != "" ] && LANGFLAG='yes'
    [ "`grep "$l1PTN" /root/.packages/woof-installed-packages`" != "" ] && LANGFLAG='yes'
    [ "`grep "$l1PTN" /root/.packages/user-installed-packages`" != "" ] && LANGFLAG='yes'
    if [ "$LANGFLAG" = "no" ];then
     
     #150425 moved up...
     AVAILPACK='' #150429 moved up.
     [ "`grep "$l12PTN" /root/.packages/Packages-pet-noarch-official`" != "" ] && AVAILPACK="langpack_${LANG12}"
     [ "`grep "$l1PTN" /root/.packages/Packages-pet-noarch-official`" != "" ] && AVAILPACK="langpack_${LANG1}"

     #check if a langpack available... 150425 more translations... 190712 more...
     case $NEWLANG in #120313 hardcode translations... 120315
      da*) #Danish
       AVAILMSG1="Der er en passende \Zb${AVAILPACK}\ZB pakke i \Zbnoarch\ZB PET repository, i kategorien Setup. Når du har en internetforbindelse, skal du klikke på ikonet \Zbinstallere\ZB på skrivebordet for at køre Easy Package Manager, og vælg derefter lageret og kategori.
Bemærk: Før du downloader langpack, bliver du nødt til at gøre en internetforbindelse og bruge Easy Package Manager på engelsk. Hvis du tror, at du ikke kan læse engelsk tilstrækkeligt, et alternativ er at køre et andet operativsystem, skal du gå til http://distro.ibiblio.org/easyos/noarch/packages/pet/pet_packages-noarch og downloade langpack. Derefter starte Easy Klik på ikonet partition på skrivebordet for at montere den aktuelle partition (hvor du downloadede langpack til), og klik derefter på langpack PET at installere det."
       AVAILMSG2="Officielle langpacks er tilgængelige i \Zbnoarch\ZB repository, men der er ikke én for dit sprog. Måske er der en under udvikling i Puppy Forum (vær forsigtig, nogle ældre versioner af Puppy har inkompatible langpacks). Eller måske kan du frivilligt til at hjælpe og skabe en langpack - klik på Menu -> Hjælp -> HOWTO Internationalisering (du naturligvis brug for et godt kendskab til engelsk)."
       AVAILTITLE="Sprog pack nødvendig"
       AVAILMSG3="Den locale vil blive ændret til ${LANGCHOICE}, men du nødt til at installere en sprogpakke til at oversætte Easy til dit sprog. Du har brug for en PET-pakke med navnet \Zblangpack_${LANG12}\ZB eller \Zblangpack_${LANG1}\ZB. Vi har endnu ikke automatiseret dette, så du bliver nødt til at hente og installere pakken. Du kan gøre dette når som helst i fremtiden. Offentligt støttede langpacks er tilgængelige ved at køre Easy Package Manager (klik på ikonet \Zbinstall\ZB på skrivebordet), i \Zbnoarch\ZB repository."
       AVAILMSG4="Denne langpack er allerede installeret:"
       AVAILMSG5="Denne langpack er allerede indbygget:"
      ;;
      de*) #German, L18L
       AVAILMSG1="Es gibt ein passendes Sprachpaket \Zb${AVAILPACK}\ZB in der Kategorie \ZbSetup\ZB des PET-Repositoriums \Zbnoarch\ZB. Bei vorhandener Internetverbindung ein Klick auf das Symbol \Zbinstall\ZB auf dem Desktop und dann ein Klick auf Easy Package Manager startet diesen. Im Paketmanager dann Kategorie Setup und Repo: puppy-noarch wählen.
Hinweis: Vor dem Herunterladen des Sprachpakets muß eine Internetverbindung hergestellt sein und der Easy-Paket-Manager auf Englisch benutzt werden. Falls man glaubt, dies nicht auf Englisch hinzukriegen, kann man alternativ mit einem anderen Betriebssystem das langpack, Sprachpaket, herunterladen von http://distro.ibiblio.org/easyos/noarch/packages/pet/pet_packages-noarch. Dann Easy hochfahren, ein Klick auf das Partitions-Symbol auf dem Desktop hängt die Partition ein, auf die das Sprachpaket heruntergeladen wurde und ein Klick auf das Sprachpaket-PET installiert es dann."
       AVAILMSG2="Offizielle langpacks, Sprachpakete, sind im Repositorium \Zbnoarch\ZB vefügbar, jedoch keines für deutsch. Vielleicht ist eines in Entwicklung im Puppy Forum (aber Achtung: einige ältere Puppy-Versionen haben inkompatible langpacks, Sprachpakete.). Oder \"Do It Yourself\":  klick Menü -> Hilfe -> HOWTO Internationalization (you will of course need a good knowledge of English; und deshalb bleibt dieser Satz unübersetzt)."
       AVAILTITLE="Sprachpaket erforderlich"
       AVAILMSG3="Die locale wird geändert in ${LANGCHOICE}, aber es muß ein Sprachpaket installiert werden, um Easy auf deutsch laufen zu lassen. Ein PET-Paket namens \Zblangpack_${LANG12}\ZB oder \Zblangpack_${LANG1}\ZB wird gebraucht. Wir habe dies noch nicht automatisiert, sodaß man das Paket noch selbst herunterladen und installieren muß, das ist auch irgendwann in der Zukunft noch möglich. Offiziell unterstützte langpacks, Sprachpakete, sind im Easy Package Manager (Klick auf das Symbol \Zbinstall\ZB auf dem Desktop), im Repo: \Zbpuppy-noarch\ZB zu finden."
       AVAILMSG4="Dieses Langpack ist bereits installiert:"
       AVAILMSG5="Dieses Langpack ist bereits eingebaut:"
      ;;
      el*) #Greek
       AVAILMSG1="Υπάρχει ένα κατάλληλο πακέτο \Zb${AVAILPACK}\ZB στο \Zbnoarch\ZB αποθετήριο ΡΕΤ, στην κατηγορία εγκατάστασης. Αφού έχετε μια σύνδεση στο Internet, κάντε κλικ στο εικονίδιο \ZbInstall\ZB στην επιφάνεια εργασίας για να τρέξει το Package Manager Easy, στη συνέχεια, επιλέξτε το αποθετήριο και την κατηγορία.
Σημείωση: Πριν από τη λήψη του Langpack, θα πρέπει να κάνει μια σύνδεση στο Internet και να χρησιμοποιήσετε το διαχειριστή πακέτων Easy στα αγγλικά. Αν νομίζετε ότι δεν μπορείτε να διαβάσετε αρκετά αγγλικά, μια εναλλακτική λύση είναι να εκτελέσετε ένα άλλο λειτουργικό σύστημα, πηγαίνετε στο http://distro.ibiblio.org/easyos/noarch/packages/pet/pet_packages-noarch και να κατεβάσετε το Langpack. Στη συνέχεια, εκκίνηση Easy, κάντε κλικ στο εικονίδιο διαμέρισμα στην επιφάνεια εργασίας για να τοποθετήσετε το διαμέρισμα (όπου κάνατε λήψη του Langpack να), στη συνέχεια, κάντε κλικ στο Langpack ΡΕΤ για να το εγκαταστήσετε."
       AVAILMSG2="Επίσημη langpacks είναι διαθέσιμα στο \ Zbnoarch\ZB αποθετήριο, ωστόσο δεν υπάρχει για τη γλώσσα σας. Ίσως υπάρχει ένα υπό ανάπτυξη στο φόρουμ Puppy (να είστε προσεκτικοί, κάποιες παλαιότερες εκδόσεις του Puppy έχουν ασυμβίβαστες langpacks). Ή, ίσως και εσείς εθελοντικά να βοηθήσουν και να δημιουργήσει ένα Langpack - Κάντε κλικ στο μενού -> Βοήθεια -> HOWTO Διεθνοποίηση (θα χρειαστείτε φυσικά καλή γνώση της αγγλικής γλώσσας)."
       AVAILTITLE="Γλώσσα που απαιτείται πακέτο"
       AVAILMSG3="Η τοπική ρύθμιση θα αλλάξει σε ${LANGCHOICE}, αλλά θα πρέπει να εγκαταστήσετε ένα πακέτο γλώσσας για να μεταφράσει Εκκεντρικά στη γλώσσα σας. Χρειάζεται ένα πακέτο που ονομάζεται PET \Zblangpack_${LANG12}\ZB ή \Zblangpack_${LANG1}\ZB. Δεν έχουμε ακόμη αυτοματοποιημένη αυτό, έτσι θα πρέπει να κατεβάσετε και να εγκαταστήσετε το πακέτο. Μπορείτε να το κάνετε αυτό οποιαδήποτε στιγμή στο μέλλον. Επισήμως υποστηρίζεται langpacks είναι διαθέσιμα, εκτελώντας τον διαχειριστή πακέτων Εκκεντρικά (κάντε κλικ στο εικονίδιο ZB \Zbinstall\ZB στην επιφάνεια εργασίας), στο αποθετήριο \ Zbnoarch\ZB."
       AVAILMSG4="Αυτό το langpack είναι ήδη εγκατεστημένο:"
       AVAILMSG5="Αυτό το langpack είναι ήδη ενσωματωμένο:"
      ;;
      es*) #Spanish, vicmz
       AVAILMSG1="Hay un paquete \Zb${AVAILPACK}\ZB apropiado en el respositorio de PETs \Zbnoarch\ZB, en la categoría \ZbConfiguración\ZB. Después de tener una conexión a Internet, pulse el ícono \Zbinstalar\ZB del escritorio para abrir el Administrador de Paquetes, luego elija el repositorio y la categoría.
Nota: Antes de descargar el paquete de idioma, tendrá que hacer una conexión a Internet y usar el Administrador de Paquetes (Puppy Package Manager) en inglés. Si piensa que no sabe leer inglés lo suficiente, una alternativa es usar otro sistema operativo, ir a http://distro.ibiblio.org/easyos/noarch/packages/pet/pet_packages-noarch y descargar el paquete de idioma. Entonces, inicie Easy, haga clic en el ícono de partición (donde descargó el paquete de idioma), y haga clic en el PET de paquete de idioma para instalarlo." 
       AVAILMSG2="Hay paquetes de idioma oficiales disponibles en el repositorio \Zbnoarch\ZB, sin embargo no hay uno para su idioma. Tal vez haya uno en desarrollo en el Foro de Easy (cuidado, algunas versiones más antiguas de Easy tienen paquetes incompatibles). Ó, tal vez usted pueda ofrecerse como voluntario para ayudar y crear un paquete de idioma (haga clic en Menu -> Help -> HOWTO Internationalization, por supuesto usted necesitará un buen conocimiento de inglés)."
       AVAILTITLE="Se necesita un paquete de idioma"
       AVAILMSG3="El idioma se cambiará a ${LANGCHOICE}, pero usted necesita instalar un paquete de idioma para traducir Easy a su lengua. Usted necesita un paquete PET llamado \Zblangpack_${LANG12}\ZB o \Zblangpack_${LANG1}\ZB. No hemos automatizado esto aún, así que tendrá que descargar e instalar el paquete. Puede hacer esto en cualquier momento en el futuro. Hay paquetes de idioma con soporte oficial disponibles usando el Administrador de Paquetes (Easy Package Manager) (haga clic en el ícono \Zbinstalar\ZB del escritorio), en el repositorio \Zbnoarch\ZB. "
       AVAILMSG4="Este langpack ya está instalado:"
       AVAILMSG5="Este langpack ya está incorporado:"
      ;;
      et*) #Estonian
       AVAILMSG1="Seal on sobiv \Zb${AVAILPACK}\ZB paketi \Zbnoarch\ZB PET hoidla \ZbHäälestus\ZB kategooriasse. Kui olete Interneti-ühendus, klõpsake \Zbpaigaldada\ZB töölaual ikooni joosta Easy Package Manager ja valige hoidla kategooriasse.
Märkus: Enne allalaadimist langpack, siis pead tegema internetiühenduse ja kasuta Easy Package Manager inglise keeles. Kui te arvate, et te ei saa lugeda inglise piisavalt, alternatiivse võimalusena võib teha teise operatsioonisüsteemi, minge http://distro.ibiblio.org/easyos/noarch/pet/packages/pet_packages-noarch ja lae langpack. Siis boot Easy klõpsake partitsiooni ikooni töölaual paigaldada vahesein (kui sa alla laadida langpack kuni), siis klõpsa langpack PET seda installida."
       AVAILMSG2="Ametlik langpacks on saadaval \Zbnoarch\ZB hoidla, aga seal ei ole üks keel. Võib-olla on üks väljatöötamisel Puppy Foorum (ettevaatust, mõned vanemad versioonid Puppy on vastuolus langpacks). Või ehk siis võiks vabatahtlikuna appi ja luua langpack - klõpsake Menu -> Abi -> HOWTO Rahvusvahelistumine (te Loomulikult tuleb hea inglise keele oskus)."
       AVAILTITLE="Keelepaketti vaja"
       AVAILMSG3="Locale muutub to ${LANGCHOICE}, kuid peate installima keelepaketi tõlkida Pentsik keel. Sa pead PET paketi nimega \Zblangpack_${LANG12}\ZB või \Zblangpack_${LANG1}\ZB. Me ei ole veel automatiseeritud see, et sa pead alla laadima ja installima paketi. Seda saab teha mis tahes ajal tulevikus. Ametlikult toetatud langpacks on saadaval käivitades Pentsik Package Manager (kliki \Zbinstall\ZB ikooni töölaual), in \Zbnoarch\ZB hoidla."
       AVAILMSG4="See keelepakett on juba installitud:"
       AVAILMSG5="See keelepakett on juba sisseehitatud:"
      ;;
      fi*) #Finnish
       AVAILMSG1="On sopiva \Zb${AVAILPACK}\ZB paketin \Zbnoarch\ZB PET arkiston, \ZbSetup\ZB luokkaan. Kun sinulla on Internet-yhteys, napsauta \ZbAsenna\ZB-kuvaketta työpöydällä ajaa Easy Package Manager, valitse arkistoon ja luokka.
Märkus: Enne allalaadimist langpack, siis pead tegema internetiühenduse ja kasuta Easy Package Manager inglise keeles. Kui te arvate, et te ei saa lugeda inglise piisavalt, alternatiivse võimalusena võib teha teise operatsioonisüsteemi, minge http://distro.ibiblio.org/easyos/noarch/packages/pet/pet_packages-noarch ja lae langpack. Siis boot Easy klõpsake partitsiooni ikooni töölaual paigaldada vahesein (kui sa alla laadida langpack kuni), siis klõpsa langpack PET seda installida."
       AVAILMSG2="Virallinen langpacks ovat saatavilla \Zbnoarch\ZB arkistosta, mutta siellä ei ole yksi kieli. Ehkä siellä on yksi kehitteillä Puppy Forum (varo, jotkut vanhemmat versiot Puppy on ristiriidassa langpacks). Tai, ehkä saatat vapaaehtoisiksi auttamaan ulos ja luoda langpack - klikkaa Menu -> Ohjeet -> HOWTO Kansainvälistyminen (sinun on tietenkin hyvä tuntemus Englanti)."
       AVAILTITLE="Kielipaketti tarvitaan"
       AVAILMSG3="Maa muuttuu ${LANGCHOICE}, mutta sinun täytyy asentaa kielipaketin kääntää Omituinen ja kieli. Tarvitset PET paketti nimeltään \Zblangpack_${LANG12}\ZB tai \Zblangpack_${LANG1}\ZB. Emme ole vielä automatisoitu tätä, niin sinun täytyy ladata ja asentaa paketin. Voit tehdä tämän milloin tahansa tulevaisuudessa. Julkisesti tuettujen langpacks ovat käytettävissä ajamalla Omituinen Package Manager (klikkaa \Zbinstall\ZB -kuvaketta) ja \Zbnoarch\ZB arkistoon."
       AVAILMSG4="Tämä langpack on jo asennettu:"
       AVAILMSG5="Tämä langpack on jo sisäänrakennettu:"
      ;;
      fr*) #French, esmourguit
       AVAILMSG1="Il y a un paquet \Zb${AVAILPACK}\ZB dans le répertoire \Zbnoarch\ZB, catégorie \ZbSetup\ZB. Après être connecté à Internet, cliquer sur l'icône du bureau \Zbinstall\ZB pour lancer le Gestionnaire des Paquets, puis choisir le répertoire et la catégorie.
Remarque: Avant de télécharger le paquet, vous devrez établir une connexion Internet et utiliser le Gestionnaire des Paquets en anglais. Si vous ne comprenez pas l'anglais, l'alternative consiste à lancer avec un autre système d'exploitation, d'aller sur le site http://distro.ibiblio.org/easyos/noarch/packages/pet/pet_packages-noarch et télécharger le Langpack. Redémarrez Easy, cliquez sur l'icône des partitions du bureau pour monter la partition (où est téléchargé le Langpack) et cliquez sur le fichier pour l'installer."
       AVAILMSG2="Les Langpacks officiels sont disponibles dans \Zbnoarch\ZB, mais il n'y en a pas pour votre langue. Peut-être y en a-t'il un en développement dans le forum (attention, certaines anciennes versions de Easy possèdent des Langpacks incompatibles). Peut-être voulez-vous aider et/ou créer un Langpack - cliquez sur le menu -> Aide -> HOWTO internationalisation (vous devrez connaitre bien l'anglais)."
       AVAILTITLE="Langpack nécessaire"
       AVAILMSG3="La locale sera changée en ${LANGCHOICE}, mais vous devez installer un Langpack pour avoir Easy dans votre langue. Vous avez besoin du paquet \Zblangpack_${LANG12}\ZB ou \Zblangpack_${LANG1}\ZB. Ce n'est pas encore automatisé, vous devrez donc télécharger et installer le paquet vous même. Vous pourrez le faire à n'importe quel moment plus tard. Les Langpacks bénéficiant d'un soutien officiel sont disponibles dans le Gestionnaire des Paquets (cliquez sur l'icône du bureau \Zbinstall\ZB ), et dans le répertoire \Zbnoarch\ZB."
       AVAILMSG4="Ce langpack est déjà installé:"
       AVAILMSG5="Ce langpack est déjà intégré:"
      ;;
      hu*) #Hungarian
       AVAILMSG1="Van egy megfelelő \Zb${AVAILPACK}\ZB csomagot a \Zbnoarch\ZB PET adattár, a \ZbSetup\ZB kategóriában. Miután rendelkezik internetkapcsolattal, kattints a \Zbtelepítés\ZB ikonjára az asztalon futtatni a Easy Package Manager, majd válassza ki a forrás és a kategóriában.
Megjegyzés: Mielőtt letöltené a Langpack, akkor meg kell tenni az internetkapcsolat, és a Easy Package Manager angolul. Ha úgy gondolja, hogy nem tudja elolvasni English elég, egy másik az, hogy fut egy másik operációs rendszer, menj http://distro.ibiblio.org/easyos/noarch/packages/pet/pet_packages-noarch és töltse le a Langpack. Ezután indul Easy, kattintson a partíció ikonra az asztalon, hogy csatold (ahová letöltöttük a Langpack a), majd kattintson a Langpack PET-e telepíteni."
       AVAILMSG2="Hivatalos langpacks állnak rendelkezésre a \Zbnoarch\ZB adattár azonban nem egy, a nyelvet. Lehet, hogy van egy fejlesztés alatt áll a Puppy Forum (legyen óvatos, néhány régebbi verziói Puppy van összeegyeztethetetlen langpacks). Vagy talán lehet, hogy önkéntes segít, és hozzon létre egy Langpack - kattintson a Menü -> Help -> HOGYAN Nemzetközivé (akkor természetesen szükség van egy jó angol nyelvtudás)."
       AVAILTITLE="Nyelvi csomag szükséges"
       AVAILMSG3="A locale fog változni ${LANGCHOICE}, de meg kell telepíteni a nyelvi csomagot lefordítani Furcsa, hogy a nyelvet. Szüksége van egy PET nevű csomagot \Zblangpack_${LANG12}\ZB vagy \Zblangpack_${LANG1}\ZB. Még nem automatizált ezt, így lesz, hogy töltse le és telepítse a csomagot. Ezt megteheti bármikor a jövőben. Hivatalosan támogatott langpacks állnak a futás a Furcsa Package Manager (kattintson a \Zbinstall\ZB ikonra az asztalon), a \Zbnoarch\ZB tárolóból."
       AVAILMSG4="Ez a langpack már telepítve van:"
       AVAILMSG5="A langpack már beépítve van:"
      ;;
      it*) #Italian, vicmz
       AVAILMSG1="C'è un pacchetto \Zb${AVAILPACK}\ZB idoneo nel repository di PET \Zbnoarch\ZB, nella categoria \ZbImpostazioni\ZB. Una volta ottenuto una connessione a Internet, fare clic sull'icona \Zbinstallare\ZB sul desktop per eseguire l'Amministratore di Pacchetti, quindi scegli il repository e la categoria.
Nota: Prima di scaricare il pacchetto di lingua, si dovrà effettuare una connessione a Internet e utilizzare l'Amministratore di Pacchetti (Easy Package Manager) in lingua inglese. Se pensi che non puoi leggere l'inglese a sufficienza, un'alternativa è quella di eseguire un altro sistema operativo, andare a http://distro.ibiblio.org/easyos/noarch/packages/pet/pet_packages-noarch e scaricare il pacchetto di lingua. Poi, avvia Easy, clicca sull'icona di partizione sul desktop per montare la partizione (dove ai scaricato il pacchetto di lingua), quindi clicca sul PET del pacchetto di lingua per installarlo."
       AVAILMSG2="Pacchetti di lingua ufficiali sono disponibili nel repository \Zbnoarch\ZB, ma non ce n'è uno per tua lingua. Forse ce n'è uno in fase di sviluppo nel Forum Puppy (attenzione, alcune vecchie versioni di Puppy hanno pacchetti di lingua incompatibili). O, forse potrebbe volontari per aiutare e creare un pacchetto di lingua -- fare clic sul Menu -> Help -> HOWTO Internationalization (ovviamente hai bisogno di una buona conoscenza della lingua inglese)."
       AVAILTITLE="È necessario un pacchetto di lingua"
       AVAILMSG3="La lingua sarà cambiata in ${LANGCHOICE}, però hai bisogno d'installare un pacchetto di lingua per tradurre Easy nella tua lingua. Hai bisogno di un pacchetto PET chiamato \Zblangpack_${LANG12}\ZB o \Zblangpack_${LANG1}\ZB. Non abbiamo ancora automatizzato questa azione, quindi dovrete scaricare e installare il pacchetto. Puoi fare ne in qualsiasi momento in futuro. Pacchetti di lingua ufficialmente supportati sono disponibili eseguendo l'Amministratori di Pacchetti (Easy Package Manager) (clicca l'icona \Zbinstallare\ZB sul desktop), nel repository \Zbnoarch\ZB."
       AVAILMSG4="Questo langpack è già installato:"
       AVAILMSG5="Questo langpack è già integrato:"
      ;;
      nl*) #Netherlands (Dutch), FlyingDutchman 120701 fix...
       AVAILMSG1="Er is een geschikt \Zb${AVAILPACK}\ZB pakket in de \Zbnoarch\ZB PET repository, in de \ZbSetup\ZB categorie. Klik op het \Zbinstall\ZB pictogram op het bureaublad om de Easy Package Manager te starten en kies vervolgens de repository en categorie.
Opmerking: Voor het downloaden van het taalpakket is een werkende internetverbinding nodig. Tevens moet de Easy Package Manager in het Engels worden gebruikt. Als u Engels hiervoor onvoldoende beheerst is het ook mogelijk om vanuit een ander besturingssysteem naar http://distro.ibiblio.org/easyos/noarch/packages/pet/pet_packages-noarch te gaan en het taalpakket (langpack_nl) te downloaden. Start daarna Easy op, klik op het pictogram van de partitie waarop het taalpakket is opgeslagen en klik vervolgens op de taalpakket PET om het te installeren."
       AVAILMSG2="Er zijn officiële taalpakketten beschikbaar in de \Zbnoarch\ZB repository maar helaas is er geen taalpakket gevonden voor uw taal. Wellicht wordt er aan een vertaling gewerkt in het Puppy Forum (pas op, sommige oudere Puppy versies gebruiken taalpakketten die niet uitwisselbaar zijn). Of misschien wilt u helpen bij het creëren van een taalpakket -- Klik Menu -> Help -> HOWTO Internationalization (U hebt hiervoor uiteraard een goede kennis van het Engels voor nodig)."
       AVAILTITLE="Taalpakket nodig"
       AVAILMSG3="De standaard taal wordt gewijzigd naar ${LANGCHOICE}, maar u moet een taalpakket installeren om Easy in uw taal te vertalen. U hebt daarvoor een PET pakket nodig met de naam \Zblangpack_${LANG12}\ZB of \Zblangpack_${LANG1}\ZB. We hebben dit nog niet geautomatiseerd dus u zult dit zelf moeten downloaden en installeren. U kunt dit op elk gewenst moment doen. Officeel ondersteunde taalpakketten zijn beschikbaar door het de Easy Package Manager te starten (klik op het \Zbinstall\ZB pictogram op het bureaublad), in de \Zbnoarch\ZB repository."
       AVAILMSG4="Deze langpack is al geïnstalleerd:"
       AVAILMSG5="Deze langpack is al ingebouwd:"
      ;;
      pl*) #120331 Polish, robwoj44 (Robert)
       AVAILMSG1="Jest odpowiedni pakiet \Zb${AVAILPACK}\ZB w repozytorium \Zbnoarch\ZB PET, w kategorii \ZbSetup\ZB. Po uzyskaniu połączenia z Internetem, kliknij ikonę \Zbinstall\ZB na pulpicie by uruchomić Easy Package Manager, potem wybierz repozytorium i kategorię.
Uwaga: Przed pobraniem pakietu językowego, trzeba mieć połączenie z Internetem i użyć Easy Manager Pakietów po angielsku. Jeśli myślisz że nie zrozumiesz po angielsku dostatecznie, alternatywą jest uruchomienie innego systemu operacyjnego, wejście na http://distro.ibiblio.org/easyos/noarch/packages/pet/pet_packages-noarch i pobranie pakietu językowego. Następnie, rozruch Easy, kliknięcie ikony partycji na pulpicie by zamontować partycję (tą gdzie ściągnąłeś pakiet językowy), potem kliknięcie na pakiecie językowym PET by go zainstalować."
       AVAILMSG2="Oficjalne pakiety językowe są dostępne w repozytorium \Zbnoarch\ZB, jednak gdy nie ma dla twojego języka. Możliwe że jest jakiś w przygotowaniu na Forum Puppy (uważaj, niektóre starsze wersje Puppy mają niekompatybilne pakiety językowe). Albo, możesz dobrowolnie pomóc i stworzyć pakiet językowy -- kliknij Menu -> Help -> HOWTO Internationalization (oczywiście będziesz potrzebował dobrej znajomości angielskiego)."
       AVAILTITLE="Pakiet językowy potrzebny"
       AVAILMSG3="Ustawienia regionalne będą zmienione na ${LANGCHOICE}, ale musisz zainstalować pakiet językowy by przetłumaczyć Easy na swój język. Potrzebujesz pakietu PET nazwanego \Zblangpack_${LANG12}\ZB lub \Zblangpack_${LANG1}\ZB. Jeszcze nie zautomatyzowaliśmy tego, zatem musisz pobrać i zainstalować pakiet. Możesz to zrobić w każdym czasie w przyszłości. Oficjalnie obsługiwane pakiety językowe są dostępne przez uruchomienie Easy Package Manager (kliknij ikonę \Zbinstall\ZB na pulpicie), w repozytorium \Zbnoarch\ZB."
       AVAILMSG4="Ten pakiet langpack jest już zainstalowany:"
       AVAILMSG5="Ten pakiet langpack jest już wbudowany:"
      ;;
      pt*) #Portuguese, vicmz
       AVAILMSG1="Há um pacote \Zb${AVAILPACK}\ZB apropriado no respositório de PETs \Zbnoarch\ZB, na categoria \ZbConfiguração\ZB. Após ter uma conexão a Internet, clique o ícone \Zbinstalar\ZB da Área de Trabalho para abrir o Administrador de Pacotes, então escolha o repositório e a categoria.
Nota: Antes de transferir o pacote de língua, você terá que fazer uma conexão a Internet e usar o Administrador de Pacotes (Easy Package Manager) em inglês. Se pensar que não sabe ler inglês o bastante, uma alternativa é usar outro sistema operativo, ir para http://distro.ibiblio.org/easyos/noarch/packages/pet/pet_packages-noarch e descarregar o pacote de língua. Então, inicie Easy, clique no ícone de partição (onde descarregou o pacote de língua), e clique no PET do pacote de língua para instalá-lo."
       AVAILMSG2="Há pacotes de língua oficiais disponíveis no repositório \Zbnoarch\ZB, porém não há um para sua língua. Talvez há um em desenvolvimento no Fórum de Puppy (atenção, algumas versões mais antigas de Puppy têm pacotes incompatíveis). Ou, talvez você possa se oferecer como voluntário para ajudar e criar um pacote de língua (clique no Menu -> Help -> HOWTO Internationalization, certamente você precisará um bom conhecimento de inglês)."
       AVAILTITLE="Precisa-se de um pacote de língua"
       AVAILMSG3="A língua será mudada para ${LANGCHOICE}, mas você precisa instalar um pacote de língua para traduzir Easy em sua língua. Você precisa um pacote PET chamado de \Zblangpack_${LANG12}\ZB ou \Zblangpack_${LANG1}\ZB. Nós não temos automatizado isto ainda, asim que você terá que descarregar e instalar o pacote. Você pode fazer isto em qualquer momento no futuro. Há pacotes com suporte oficial disponíveis usando o Administrador de Pacotes (Easy Package Manager) (clique no ícone \Zbinstalar\ZB na Área de Trabalho), no repositório  \Zbnoarch\ZB. "
       AVAILMSG4="Este langpack já está instalado:"
       AVAILMSG5="Este langpack já está embutido:"
      ;;
      ru*) #Russian, rodin.s
       AVAILMSG1="Есть подходящий пакет \\Zb${AVAILPACK}\\ZB в \\Zbnoarch\\ZB PET-репозитарии, в категории \\ZbSetup\\ZB. После того, как у вас появится подключение к Интернет нажмите значок \\Zbinstall\\ZB на рабочем столе для запуска Менеджера пакетов Easy, затем выберите репозитарий и категорию.
Примечание: Перед загрузкой пакета локализации вы должны будете настроить подключение к Интернет и использовать Менеджер пакетов Easy на английском. Если вы думаете, что не знаете английский достаточно хорошо, альтернатива - это запуск другой операционной системы, зайдете на http://distro.ibiblio.org/easyos/noarch/packages/pet/pet_packages-noarch и загрузите пакет локализации. После этого загрузите Easy, нажмите на значок раздела на рабочем столе для монтирования раздела (на который вы загрузили пакет локализации), затем кликните на сам PET-пакет лангпака для его установки."
       AVAILMSG2="Официальные пакеты локализации доступны в \\Zbnoarch\\ZB-репозитарии, однако для вашего языка нет пакета. Возможно пакет для вашего языка в разработке на форуме Easy (будте осторожны, пакеты для старых версий Easy не подходят). Или, возможно, вы захотите помочь и создать пакет -- Кликните Меню -> Справка -> HOWTO Internationalization (конечно же вам будет нужно хорошее знание английского языка)."
       AVAILTITLE="Нужен пакет локализации"
       AVAILMSG3="Локаль будет изменена на ${LANGCHOICE}, но вам нужно установить языковой пакет для перевода Easy на ваш язык. Вам нужен PET-пакет с названием \\Zblangpack_${LANG12}\\ZB или \\Zblangpack_${LANG1}\\ZB. Этот процесс ещё не автоматизирован, так, что вам нужно загрузить и установить пакет. Вы можете сделать это в любое время в будущем. Официально поддерживаемые пакеты локализации доступны в Менеджере пакетов Easy (кликните значок \\Zbinstall\\ZB на рабочем столе), в репозитарии \\Zbnoarch\\ZB."
       AVAILMSG4="Этот langpack уже установлен:"
       AVAILMSG5="Этот langpack уже встроен:"
      ;;
      sv*) #Swedish
       AVAILMSG1="Det är en lämplig \Zb${AVAILPACK}\ZB paket i \Zbnoarch\ZB PET förvaret, i kategorin \ZbSetup\ZB. Efter att du har en Internetanslutning klickar \Zbinstallera\ZB ikonen på skrivbordet för att köra Easy Package Manager, välj sedan förvaret och kategori.
Obs: Innan du laddar ner den langpack, måste du göra en Internet-anslutning och använda Easy Package Manager på engelska. Om du tror att du inte kan läsa engelska tillräckligt, är ett alternativ att köra ett annat operativsystem, gå till http://distro.ibiblio.org/easyos/noarch/packages/pet/pet_packages-noarch och hämta langpack. Sedan starta Easy, klicka på ikonen partitionen på skrivbordet för att montera partitionen (där du hämtade langpack till) och klicka på langpack PET för att installera det."
       AVAILMSG2="Officiella språkpaket finns i \Zbnoarch\ZB slutförvar, men det finns inte en för ditt språk. Kanske finns det ett under utveckling i Puppy forumet (var försiktig, vissa äldre versioner av Puppy har oförenliga språkpaket). Eller, kanske du kan frivilligt att hjälpa till och skapa en langpack - klicka på Meny -> Hjälp -> HOWTO Internationalisering (du kommer naturligtvis att behöva goda kunskaper i engelska)."
       AVAILTITLE="Språkpaket behövs"
       AVAILMSG3="Lokalen kommer att ändras till ${LANGCHOICE}, men du måste installera ett språkpaket för att översätta Easy till ditt språk. Du behöver en PET-paketet som heter \Zblangpack_${LANG12}\ZB eller \Zblangpack_${LANG1}\ZB. Vi har ännu inte automatiserat detta, så du måste ladda ner och installera paketet. Du kan göra detta när som helst i framtiden. Språkpaket statsstödda finns genom att köra Easy Package Manager (klicka ikonen \Zbinstall\ZB på skrivbordet), i \Zbnoarch\ZB slutförvar."
       AVAILMSG4="Denna långpack är redan installerad:"
       AVAILMSG5="Denna långpack är redan inbyggd:"
      ;;
      tr*) #Turkish
       AVAILMSG1="\ZbKurulum\ZB kategorisinde \Zbnoarch\ZB PET deposunda uygun bir \Zb${AVAILPACK}\Zb paket bulunmaktadır. İnternet bağlantınız var sonra, daha sonra, Easy Paket Yöneticisi çalıştırmak depo ve kategori seçmek için masaüstünde \Zbyüklemek\ZB simgesini tıklatın.
Not: Dil Paketi indirmeden önce, bir internet bağlantısı ve İngilizce Easy Paket Yöneticisi kullanmak zorunda olacak. Eğer yeterince İngilizce okuyamaz düşünüyorsanız, alternatif, başka bir işletim sistemini çalıştırmak http://distro.ibiblio.org/easyos/noarch/packages/pet/pet_packages-noarch gidin ve Dil Paketi indirmektir. Ardından, Easy çizme, daha sonra yüklemek için LangPack PET üzerine tıklayın (size Dil Paketi karşıdan yüklediğiniz) bölümü mount masaüstündeki bölüm simgesini tıklatın."
       AVAILMSG2="Resmi Langpacks ancak sizin dilinizde için bir tane değil, \Zbnoarch\ZB depoda mevcuttur. Belki Puppy Forum geliştiriliyor bir (Puppy bazı eski sürümleri uyumsuz Langpacks var, dikkatli olun) bulunmaktadır. Ya da, belki de yardım ve Dil Paketi oluşturmak için gönüllü olabilir - Menu tıklayın -> Yardım -> NASIL Uluslararasılaşma (tabii iyi derecede İngilizce bilgisine ihtiyacınız olacak)."
       AVAILTITLE="Dil paketi gerekli"
       AVAILMSG3="Yerel ${LANGCHOICE} değiştirildi, ancak kendi dilinize çevirmek Easy bir dil paketini yüklemeniz gerekir. Sen adında bir PET paketi gerekir \Zblangpack_${LANG12}\ZB veya \Zblangpack_${LANG1}\ZB. Paketi indirmek ve kurmak zorunda olacak, böylece henüz, bu otomatik değil. Bu gelecekte herhangi bir zaman yapabilir. Resmen desteklenen Langpacks \Zbnoarch\ZB depo, İlginç Paket Yöneticisi (masaüstünde \Zbinstall\ZB simgesini tıklatın) çalışan ulaşabilirsiniz."
       AVAILMSG4="Bu langpack zaten kurulu:"
       AVAILMSG5="Bu langpack zaten yerleşiktir:"
      ;;
      *)
       AVAILMSG1="There is a suitable \Zb${AVAILPACK}\ZB package in the \Zbnoarch\ZB PET repository, in the \ZbSetup\ZB category. After you have an Internet connection, click the \Zbinstall\ZB icon on the desktop to run the Easy Package Manager, then choose the repository and category.
Note: Before downloading the langpack, you will have to make an Internet connection and use the Easy Package Manager in English. If you think that you cannot read English sufficiently, an alternative is to run another operating system, go to http://distro.ibiblio.org/easyos/noarch/packages/pet/pet_packages-noarch and download the langpack. Then, boot Easy, click the partition icon on the desktop to mount the partition (where you downloaded the langpack to), then click on the langpack PET to install it."
       AVAILMSG2="Official langpacks are available in the \Zbnoarch\ZB repository, however there is not one for your language. Perhaps there is one under development in the Puppy Forum (be careful, some older versions of Puppy have incompatible langpacks). Or, perhaps you might volunteer to help out and create a langpack -- click the Menu -> Help -> HOWTO Internationalization (you will of course need a good knowledge of English)."
       AVAILTITLE="Language pack needed"
       AVAILMSG3="The locale will be changed to ${LANGCHOICE}, but you need to install a language pack to translate Easy to your language. You need a PET package named \Zblangpack_${LANG12}\ZB or \Zblangpack_${LANG1}\ZB. We have not yet automated this, so you will have to download and install the package. You may do this any time in the future. Officially supported langpacks are available by running the Easy Package Manager (click the \Zbinstall\ZB icon on the desktop), in the \Zbnoarch\ZB repository."
       AVAILMSG4="This langpack is already installed:"
       AVAILMSG5="This langpack is already built-in:"
      ;;
     esac
     AVAILMSG="$AVAILMSG2"
     [ "$AVAILPACK" ] && AVAILMSG="$AVAILMSG1"
     [ "langpack_${LANG1}" == "$INSTLANGPACK" ] && AVAILMSG="${AVAILMSG4} \Zb${LANG1}\ZB"
     [ "langpack_${LANG1}" == "$WOOFLANGPACK" ] && AVAILMSG="${AVAILMSG5} \Zb${LANG1}\ZB"     
     if [ "$DISPLAY" ];then
      [ $wPID -ne 0 ] && kill $wPID #120524
      wPID=0
      LANG=${NEWLANG} pupdialog --background '#8080FF' --colors --backtitle "${AVAILTITLE}" --msgbox "${AVAILMSG3}\n\n${AVAILMSG}" 0 0
     else
      dialog --msgbox "`eval_gettext \"Note, you will need to install langpack_\\\${LANG12} or langpack_\\\${LANG1} PET package to more fully translate Easy to your language. Run the Easy Package Manager after connection to the Internet, to download and install this package.\"`" 0 0 >/dev/console
     fi
    fi
   fi
   
   #120215 offer to translate initrd... 120216 moved to separate script (so universal installer can also do it)...
   #190103 simplify the logic....
   GIVEITAGO='no'
   NEWLANG1=${NEWLANG%_*} #ex: en
   PLANG1="en"
   #[ "$INIT_LANG" ] && PLANG1="${INIT_LANG%_*}" #defined in PUPSTATE by init script in initrd. 190103
   [ "$PLANG1" != "$NEWLANG1" ] && GIVEITAGO='yes'
   if [ -f /var/local/lang2initrd.log ];then #read log from /usr/sbin/lang2initrd
    [ "`grep "^DECLINED ${NEWLANG1} " /var/local/lang2initrd.log`" != "" ] && GIVEITAGO='no'
    [ "`grep "^SUCCESS ${NEWLANG1} " /var/local/lang2initrd.log`" != "" ] && GIVEITAGO='no'
   fi
   [ "$GIVEITAGO" == "yes" ] && /usr/sbin/lang2initrd $NEWLANG #note, script has more tests, then asks if want translate initrd. 190105 change NEWLANG1 to NEWLANG passed.
   
   #120209 scripts fixdesk and fixmenus translate files to new language (as specified in /usr/share/sss/menu_strings and desk_strings).
   #so need to call them here...
   #note, these are also called in /etc/rc.d/rc.update ...
   LANG=${LANGCHOICE}${UTF8} fixscripts
   LANG=${LANGCHOICE}${UTF8} fixdesk
   LANG=${LANGCHOICE}${UTF8} fixmenus
   #...no need to refresh screen, as changing locale requires restart of X.
   
   #170812 regenerate the translated help files... 190110 LANG prepend...
   LANG=${LANGCHOICE}${UTF8} /usr/share/doc/easy/help.sh
   LANG=${LANGCHOICE}${UTF8} /usr/share/doc/easy/home.sh
   LANG=${LANGCHOICE}${UTF8} /usr/share/doc/easy/welcome.sh
  
  fi
 fi
fi #end SET_LOCALE

if [ "$SET_TIMEZONE" ];then
 #two variables, COMBO_TIMEZONE and CHECK_UTC
 ZONERETVAL="`echo -n "$COMBO_TIMEZONE" | cut -f 1 -d ' ' | cut -f 1 -d "$TABCHAR"`"
 NEW_HWCLOCKTIME="localtime"
 [ "$CHECK_UTC" = "true" ] && NEW_HWCLOCKTIME="utc"
 [ ! -e /etc/localtime ] && DEF_TIMEZONE="" #111027 precaution.
 if [ "$DEF_TIMEZONE" != "$ZONERETVAL" -o "$HWCLOCKTIME" != "$NEW_HWCLOCKTIME" ];then
  FLAG_CHANGED="${FLAG_CHANGED}${TT_tz2}:yes|"
  if [ "`echo -n "$ZONERETVAL" | grep 'GMT' | grep '\+'`" = "" ];then
   ZONERETVAL="`echo -n "$ZONERETVAL" | tr "\-" "\+"`"
  else
   ZONERETVAL="`echo -n "$ZONERETVAL" | tr "\+" "\-"`"
  fi
  [ "`echo "$ZONERETVAL" | grep 'GMT'`" != "" ] && ZONERETVAL="Etc/$ZONERETVAL"
  #111103 these are also in Etc dir...
  [ "$ZONERETVAL" = "Greenwich" ] && ZONERETVAL="Etc/$ZONERETVAL"
  [ "$ZONERETVAL" = "UCT" ] && ZONERETVAL="Etc/$ZONERETVAL"
  [ "$ZONERETVAL" = "Universal" ] && ZONERETVAL="Etc/$ZONERETVAL"
  [ "$ZONERETVAL" = "UTC" ] && ZONERETVAL="Etc/$ZONERETVAL"
  [ "$ZONERETVAL" = "Zulu" ] && ZONERETVAL="Etc/$ZONERETVAL"
  ln -snf /usr/share/zoneinfo/$ZONERETVAL /etc/localtime
  which xset &>/dev/null && xset s noblank s noexpose -dpms  #shinobar 30jan11: avoid the screen go to blank

  [ -f /etc/TZ ] && rm -f /etc/TZ #don't think need this anymore. also removed from /etc/profile.
  #.../etc/profile now reads /etc/localtime and exports TZ variable.
 
  #need to set Linux system time/date, from hardware clock...
  hwclock --hctosys --${NEW_HWCLOCKTIME} #NEW_HWCLOCKTIME=localtime or utc
  #...--hctosys reads cmos clock to system, referencing /usr/share/zoneinfo/localtime
  echo "#this is read/written by /usr/sbin/quicksetup, timezone-set
HWCLOCKTIME=${NEW_HWCLOCKTIME}" > /etc/clock
 fi
fi #end SET_TIMEZONE

if [ "$SET_XRES" ];then
 #one variable COMBO_XYRES
 #note, similar code in xrandshell.
 #NEW_XYRES="`echo -n "$COMBO_XYRES" | cut -f 1 -d ' ' | cut -f 1 -d "$TABCHAR"`"
 NEW_XYRES="$(echo -n "$COMBO_XYRES" | tr '\t' ' ' | cut -f 1 -d ' ')" #130202
 NEW_VFREQ="$(echo -n "$COMBO_XYRES" | tr '\t' ' ' | tr -s ' ' | cut -f 2 -d ' ' | cut -f 1 -d '*')" #130202
 
 if [ "$DEF_XYRES$DEF_VFREQ" != "$NEW_XYRES$NEW_VFREQ" ];then
  FLAG_CHANGED="${FLAG_CHANGED}${TT_xy1}:yes|"
  T_yesno="`gettext 'Change resolution to:'`"
  M_yesno1="`gettext 'Click the OK button to change the resolution.'`"
  M_yesno2="`gettext 'If the new resolution does not work, wait 60 seconds, or hit the CTRL-ALT-BACKSPACE key combination to kill X.'`"
  M_yesno3="$(gettext 'Note, the drive icons may be in wrong place after resolution change, but will be correct after X is restarted.')" #120226
  [ $wPID -ne 0 ] && kill $wPID #120524
  wPID=0
  pupdialog --background yellow --backtitle "${T_yesno} ${NEW_XYRES}@${NEW_VFREQ}" --yes-label "$B_ok" --no-label "$B_cancel" --yesno "${M_yesno1}\n${M_yesno2}\n${M_yesno3}" 0 0 #130202
  if [ $? -eq 0 ];then
   echo "ICONWIPE" > /var/local/pup_event_icon_change_flag #120226 .xinitrc -> clean_desk_icons will read this, and redraw drive icons.
   sync
   xrandr -s $NEW_XYRES -r $NEW_VFREQ #this changes the screen resolution. #130202 add freq.
   XRANDR="`xrandr -q`"
   TESTLINE="$(echo "$XRANDR" | tr -s " " | grep "^ [0-9]" | grep '\*' | head -n 1)" #130202 'head -n 1' workaround for dual monitors (see also .xinitrc).
   TESTX="`echo -n "$TESTLINE" | cut -f 2 -d " " | cut -f 1 -d 'x'`"
   TESTY="`echo -n "$TESTLINE" | cut -f 2 -d " " | cut -f 2 -d 'x'`"
   TESTVR="`echo -n "$TESTLINE" | cut -f 3 -d ' ' | cut -f 1 -d '*'`"

   M_y0="$(gettext 'Can you see this?')"
   M_y0b="$(gettext 'Note: when the resolution is changed with xrandr, the positioning of desktop icons and layout of background wallpaper may not be correct, however, they should be alright after X is restarted.')" #180314
   M_y1="$(gettext 'Click <b>Permanent</b> button to keep this resolution permanently.')
$(gettext 'Click <b>Session</b> button to keep this resolution for current session only.')
$(gettext 'Click <b>Cancel</b> button to revert to default resolution.')"
   #180101 remove warning, as now modifying xorg.conf...
#   M_y2=$(gettext "<b>Warning</b>
#It is NOT recommended to choose <b>Permanent</b> here, as the default resolution is #not really changed, instead it switches resolutions after X has started, which causes #a delay and flicker at startup and may have other undesirable side-effects. Instead, #run the Video Wizard to choose a permanent resolution.")
   M_y2="$(gettext '<b>Technical note</b>')
$(gettext 'If choose <b>Permanent</b>, the new resolution is written to /etc/X11/xorg.conf, to take effect at future bootups.')"
   B_permanent=$(gettext 'Permanent')
   B_session=$(gettext 'Session')
   STEP=6	# timeout is x10sec
   fontsize="x-large" # small, medium, large, x-large  130203 fix insertion of fontsize...
   export XY_DIALOG="<window title=\"$WINTITLE\" icon-name=\"gtk-preferences\"><vbox>
    <text use-markup=\"true\"><label>\"<span size='${fontsize}'>${M_y0}</span>\"</label></text>
    <text><label>\"${M_y0b}\"</label></text>
    <text><label>\"   \"</label></text>
    <text use-markup=\"true\"><label>\"${M_y1}\"</label></text>
    <text><label>\"   \"</label></text>
    <text use-markup=\"true\"><label>\"${M_y2}\"</label></text>
	<progressbar><input>for i in \$(seq 0 10 100); do echo \$i; sleep $STEP; done;echo 100</input>
	  <label>$(gettext 'Or, it will be canceled in 60 seconds.')</label>
      <action type=\"exit\">TIMEOUT</action></progressbar>
	<hbox>
	 <button><label>${B_permanent}</label><action>EXIT:permanent</action></button> 
	 <button><label>${B_session}</label><action>EXIT:session</action></button> 
	 <button><label>${B_cancel}</label><action>EXIT:cancel</action></button> 
	</hbox>
	</vbox></window>" 
   eval $(${GTKDIALOGEXE} --program=XY_DIALOG --center)
   case $EXIT in
    permanent)
     #180101 make new res permanent by altering xorg.conf (ref: xorgwizard-automatic)...
     #echo -n "${TESTX}x${TESTY}@${TESTVR}" > /etc/xrandrindex #so will be set in .xinitrc at next X start. #130202 added freq.
     rm -f /etc/xrandrindex 2>/dev/null #precaution
     CHOSENRES="${TESTX}x${TESTY}"
     REGEX1="s%.*#screen0modes%		Modes       \"${CHOSENRES}\" #screen0modes%"
     REGEX2="s%.*#monitor0prefmode%	Option      \"PreferredMode\" \"${CHOSENRES}\" #monitor0prefmode%"
     sed -i -e "$REGEX1" -e "$REGEX2" /etc/X11/xorg.conf
     #180314 also write to the backup (refer: /usr/bin/xwin)...
     CURRENTPROFILE="$(grep '^#PuppyHardwareProfile' /etc/X11/xorg.conf | tail -n 1 | cut -f 2 -d '=' | cut -f 2 -d "'" | cut -f 1 -d ' ')" #200120
     cp -f /etc/X11/xorg.conf /etc/X11/xorg.conf.${CURRENTPROFILE}
     echo "PuppyHardwareProfile='${CURRENTPROFILE}'" > /etc/X11/xorg.conf.d/PuppyHardwareProfile #200113
     [ -d /etc/X11/xorg.conf.d.${CURRENTPROFILE} ] && rm -rf /etc/X11/xorg.conf.d.${CURRENTPROFILE} #200113
     cp -a /etc/X11/xorg.conf.d /etc/X11/xorg.conf.d.${CURRENTPROFILE} #200113
    ;;
    session)
     rm -f /etc/xrandrindex
    ;;
    *)
     rm -f /etc/xrandrindex
     xrandr -s $DEF_XYRES -r $DEF_VFREQ #restore to what it was before. #130202 added freq.
    ;;
   esac
   
  fi
 fi
 
 #180102 overscan...
 if [ "$OVERSCAN_VAR" == "true" ];then
  if [ ! -f /root/.xrandroverscan ];then
   [ $wPID -ne 0 ] && kill $wPID
   wPID=0
   MONOUT="$(echo "$XRANDR" | grep ' connected ' | cut -f 1 -d ' ' | head -n 1)"
   M_xr1="$(gettext 'Fix Overscan')"
   M_xr2="$(gettext 'This is a first attempt to fix overscan. If you choose \ZbYes\ZB, the following command will run:')
  xrandr --output ${MONOUT} --set underscan on

$(gettext 'There are three disadvantages to this technique:')
$(gettext '\Zb1:\ZB Over-correction, may result in blank borders.')
$(gettext '\Zb2:\ZB Screen flicker and slight delay loading desktop.')
$(gettext '\Zb3:\ZB xrandr does not work with some video drivers.')

\Zb\Z1$(gettext 'This is a work-in-progress')\Zn\ZB"
   pupdialog --colors --background '#FFFF80' --backtitle "${M_xr1}" --yesno "${M_xr2}" 0 0
   if [ $? -eq 0 ];then
    xrandr --output ${MONOUT} --set underscan on
    echo "xrandr --output ${MONOUT} --set underscan on" > /root/.xrandroverscan
   fi
  fi
 else
  if [ -f /root/.xrandroverscan ];then
   MONOUT="$(echo "$XRANDR" | grep ' connected ' | cut -f 1 -d ' ' | head -n 1)"
   xrandr --output ${MONOUT} --set underscan off
   rm -f /root/.xrandroverscan
  fi
 fi
 
fi #end SET_XRES

if [ "$SET_XWIZARD" ];then

 if [ "$CHECK_XUPGRADE" = "true" ];then
  #FLAG_CHANGED="${FLAG_CHANGED}${TT_xup2}:yes|" #"Video Upgrade Wizard"
  /usr/sbin/video_upgrade_wizard
 fi
 
 if [ "$CHECK_XORGWIZARD" = "true" ];then
  FLAG_CHANGED="${FLAG_CHANGED}${TT_xorg2}:restart|" #"Xorg Video Wizard"
  sed -i -e "s%^DISTRO_XORG_AUTO.*%DISTRO_XORG_AUTO='no'%" /etc/DISTRO_SPECS #/usr/bin/xwin reads this when X starts.
  mv -f /etc/X11/xorg.conf /etc/X11/xorg.conf.prev 2>/dev/null #/usr/bin/xwin will then run xorgwizard.
  echo "ICONWIPE" > /var/local/pup_event_icon_change_flag #120226 .xinitrc -> clean_desk_icons will read this, and redraw drive icons. ...actually, redundant, as xorgwizard does this.
 fi

fi #end SET_XWIZARD

if [ "$SET_NETWORK" ];then #120227

 #120625 set new hostname...
 OLD_HOSTNAME="$HOSTNAME"
 if [ "$OLD_HOSTNAME" != "$ENTRY_HOSTNAME" ];then
  [ $wPID -ne 0 ] && kill $wPID #181120
  wPID=0
  /usr/sbin/hostname-set $ENTRY_HOSTNAME
  HOSTNAMEFLAG=$?
  [ "$HOSTNAMEFLAG" = "0" ] && FLAG_CHANGED="${FLAG_CHANGED}$(gettext 'Hostname'):restart|"
  [ "$HOSTNAMEFLAG" = "2" ] && FLAG_CHANGED="${FLAG_CHANGED}$(gettext 'Hostname'):yes|" #130511 see hostname-set.
 fi
 
 #120625... 190818 change logic...
 FWrunning='false'
 [ "`lsmod | grep '^iptable'`" != "" ] && FWrunning='true'
 if [ "$CHECK_FIREWALL" != "$FWrunning" ];then
  RCINITD='rc.d'
  if which firewall_ng >/dev/null; then RCINITD='init.d'; fi #161106
  if [ "$CHECK_FIREWALL" = "false" ];then
   if [ -e /etc/${RCINITD}/rc.firewall ];then #160423
    if [ -x /etc/${RCINITD}/rc.firewall ];then #151109. 160423 change -f to -x
     /etc/${RCINITD}/rc.firewall stop
     chmod 664 /etc/${RCINITD}/rc.firewall #so that /etc/rc.d/rc.local won't start it.
     FLAG_CHANGED="${FLAG_CHANGED}$(gettext 'Firewall disabled'):yes|"
    fi
   fi
  else
   FLAG_CHANGED="${FLAG_CHANGED}$(gettext 'Firewall enabled'):yes|"
   if [ -f /etc/${RCINITD}/rc.firewall ];then
    chmod 755 /etc/${RCINITD}/rc.firewall #so that /etc/rc.d/rc.local will start firewall at bootup.
    /etc/${RCINITD}/rc.firewall start
   else
    [ $wPID -ne 0 ] && kill $wPID
    wPID=0
    if [ "$RCINITD" == "init.d" ];then #161106
     firewall_ng
    else
     rxvt -bg LightYellow -title "Firewall setup" -e firewallinstallshell
    fi
   fi
  fi
 fi
 
 #120625... 161104
 if [ "$CHECK_NTP" == "true" -a ! -f /var/local/qsync/qsync_active ];then
  [ $wPID -ne 0 ] && kill $wPID
  wPID=0
  /usr/sbin/qsync
  FLAG_CHANGED="${FLAG_CHANGED}$(gettext 'NTP set-time enabled'):yes|"
 else
  if [ "$CHECK_NTP" != "$DEFAULT_NTP" ];then
   if [ "$CHECK_NTP" = "false" ];then
    echo -n 'false' > /var/local/qsync/qsync_active #ref: /usr/sbin/qsync
    FLAG_CHANGED="${FLAG_CHANGED}$(gettext 'NTP set-time disabled'):yes|"
   else
    [ $wPID -ne 0 ] && kill $wPID
    wPID=0
    /usr/sbin/qsync
    FLAG_CHANGED="${FLAG_CHANGED}$(gettext 'NTP set-time enabled'):yes|"
   fi
  fi
 fi
 
 if [ "$DEFAULT_CRDW" != "$COMBO_CRDW" ];then #160921 160926 161026
  NEW_CRDW="$(echo -n "$COMBO_CRDW" | cut -f 1 -d ' ')" #ex: AU
  echo "options cfg80211 ieee80211_regdom=${NEW_CRDW}" > /etc/modprobe.d/crdw.conf #set at the next bootup.
  #...at bootup, after module cfg80211 loads, can confirm setting by running 'iw reg get'
  #160926 had taken this out, but seems still need it on my laptop. may need to expand this script,
  #  with a loop, keep plugging away until the setting gets forced. but for now, just do it once...
  echo "#!/bin/ash
  iw reg set ${NEW_CRDW}" > /etc/init.d/z-wifi-puppy
  chmod 755 /etc/init.d/z-wifi-puppy
  iw reg set ${NEW_CRDW} #set now.
  FLAG_CHANGED="${FLAG_CHANGED}$(gettext 'CRD changed to') ${NEW_CRDW}:yes|" #161021
 fi
 
 #130701...
 if [ $DISPLAY ];then
  if [ "$CHECK_SPOT" = "true" ];then
   [ $wPID -ne 0 ] && kill $wPID
   wPID=0
   loginmanager
  fi
 fi
 
fi

#120714 raspberry pi support...
if [ "$SET_RP_AUDIO" -o "$SET_RP_VIDEO" ];then
 if [ "$SET_RP_AUDIO" ];then
  RP_AUDIO_OUT='0'
  [ "$RP_AUDIO_0_RAD" = "true" ] && RP_AUDIO_OUT='0' #auto
  [ "$RP_AUDIO_1_RAD" = "true" ] && RP_AUDIO_OUT='1' #analog
  [ "$RP_AUDIO_2_RAD" = "true" ] && RP_AUDIO_OUT='2' #hdmi
  if [ "$RP_DEF_AUDIO" != "$RP_AUDIO_OUT" ];then
   rpPTN="s%amixer cset numid.*%amixer cset numid=3 ${RP_AUDIO_OUT}%"
   sed -i -e "$rpPTN" /etc/init.d/alsa_raspi
   amixer cset numid=3 ${RP_AUDIO_OUT} #do it now.
   case $RP_AUDIO_OUT in
    0) FLAG_CHANGED="${FLAG_CHANGED}$(gettext 'Automatic audio output'):yes|" ;;
    1) FLAG_CHANGED="${FLAG_CHANGED}$(gettext 'Analog audio output'):yes|" ;;
    2) FLAG_CHANGED="${FLAG_CHANGED}$(gettext 'HDMI audio output'):yes|" ;;
   esac
  fi
 fi
 if [ "$SET_RP_VIDEO" ];then
  echo
 fi
fi

#170210
if [ "$CHECK_EXPFS" == "true" ];then
 echo -n "true" > /.qsfs.flg #read by /init in initramfs.
 FLAG_CHANGED="${FLAG_CHANGED}$(gettext 'Recompress easy.sfs, xz to gzip'):reboot|"
fi

[ ! $DISPLAY ] && exit

if [ "`echo -n "$FLAG_CHANGED" | grep -E ":restart|:reboot"`" != "" ];then #161005
 RESTART="$(echo -n "$FLAG_CHANGED" | grep ":restart")"
 REBOOT="$(echo -n "$FLAG_CHANGED" | grep ":reboot")"
 F_restart="`gettext 'restart'`"
 rPTN="s%:restart% <b><big>${F_restart}</big></b>%"
 F_reboot="$(gettext 'reboot')"
 rbPTN="s%:reboot% <b><big>${F_reboot}</big></b>%"
 CHANGEDMARKUP="`echo "$FLAG_CHANGED" | tr '|' '\n' | sed -e "$rPTN" -e "$rbPTN" | cut -f 1 -d ':'`"
 H_t1="`gettext 'Quick Setup: finished'`"
 B_restart="`gettext 'Restart X'`"
 B_exit="`gettext 'Exit'`"
 M_fc0="`gettext 'These are the changed items:'`"
 M_fc1XML=""; M_fc2XML=""; M_fc3XML=""; M_fc4XML=""; restartXML=""
 if [ "$RESTART" ];then
  M_fc1="`gettext 'Those marked with <b>restart</b> require a restart of X (the graphical desktop) to take effect. Recommend, if it is ok to continue without restarting X for now, choose that option (<b>Exit</b> button).'`"
  M_fc2="`gettext 'Make sure no other applications are running, and click the <b>Restart X</b> button, which will exit from the graphical desktop and restart it.'`"
  M_fc3="`gettext 'Or, if the <b>Exit</b> button is clicked, the desktop will be retained, and changes marked with <b>restart</b> will not take effect. However, they will take effect the next time that X is started.'`"
  M_fc1XML="<text use-markup=\"true\"><label>\"${M_fc1}\"</label></text>"
  M_fc2XML="<text use-markup=\"true\"><label>\"${M_fc2}\"</label></text>"
  M_fc3XML="<text use-markup=\"true\"><label>\"${M_fc3}\"</label></text>"
  restartXML="<button><label>${B_restart}</label><input file stock=\"gtk-redo\"></input><action>EXIT:OK</action></button>"
 fi
 if [ "$REBOOT" ];then
  M_fc4="$(gettext 'Those marked with <b>reboot</b> will only take affect after the computer is rebooted.')"
  M_fc4XML="<text use-markup=\"true\"><label>\"${M_fc4}\"</label></text>"
 fi
#    <button><label>${B_restart}</label><input file>/usr/local/lib/X11/mini-icons/mini-turn.xpm</input><action>EXIT:OK</action></button>
#    <button><label>${B_exit}</label><input file>/usr/local/lib/X11/mini-icons/adblock.xpm</input><action>EXIT:cancel</action></button>
 export FC_DIALOG="<window title=\"${H_t1}\" window_position=\"1\" icon-name=\"${WINICON}\">
<vbox>
  <text use-markup=\"true\"><label>\"${M_fc0}\"</label></text>
  <text use-markup=\"true\"><label>\"<i>${CHANGEDMARKUP}</i>\"</label></text>
  ${M_fc1XML}
  ${M_fc2XML}
  ${M_fc3XML}
  ${M_fc4XML}
  <hbox>
    ${restartXML}
    <button><label>${B_exit}</label><input file stock=\"gtk-quit\"></input><action>EXIT:cancel</action></button>
  </hbox>
</vbox>
</window>"
 [ $wPID -ne 0 ] && kill $wPID #120524
 wPID=0
 RETVALS="`${GTKDIALOGEXE} --program=FC_DIALOG`"
 eval "$RETVALS"
 if [ "$EXIT" = "OK" ];then
  rm -rf /tmp/.X0-lock
  sync
  exec restartwm `cat /etc/windowmanager`
 fi
fi  

[ $wPID -ne 0 ] && kill $wPID #120524
wPID=0
###END###
