Deleted Added
full compact
timezone (252995) timezone (263791)
1#!/bin/sh
2#-
3# Copyright (c) 2011-2013 Devin Teske
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
9# 1. Redistributions of source code must retain the above copyright
10# notice, this list of conditions and the following disclaimer.
11# 2. Redistributions in binary form must reproduce the above copyright
12# notice, this list of conditions and the following disclaimer in the
13# documentation and/or other materials provided with the distribution.
14#
15# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25# SUCH DAMAGE.
26#
1#!/bin/sh
2#-
3# Copyright (c) 2011-2013 Devin Teske
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
9# 1. Redistributions of source code must retain the above copyright
10# notice, this list of conditions and the following disclaimer.
11# 2. Redistributions in binary form must reproduce the above copyright
12# notice, this list of conditions and the following disclaimer in the
13# documentation and/or other materials provided with the distribution.
14#
15# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25# SUCH DAMAGE.
26#
27# $FreeBSD: stable/9/usr.sbin/bsdconfig/timezone/timezone 252995 2013-07-07 19:13:34Z dteske $
27# $FreeBSD: stable/9/usr.sbin/bsdconfig/timezone/timezone 263791 2014-03-27 03:20:47Z dteske $
28#
29############################################################ INCLUDES
30
31BSDCFG_SHARE="/usr/share/bsdconfig"
32. $BSDCFG_SHARE/common.subr || exit 1
33f_dprintf "%s: loading includes..." "$0"
34f_include $BSDCFG_SHARE/dialog.subr
35f_include $BSDCFG_SHARE/mustberoot.subr
36f_include $BSDCFG_SHARE/strings.subr
37f_include $BSDCFG_SHARE/timezone/continents.subr
38f_include $BSDCFG_SHARE/timezone/countries.subr
39f_include $BSDCFG_SHARE/timezone/iso3166.subr
40f_include $BSDCFG_SHARE/timezone/menus.subr
41f_include $BSDCFG_SHARE/timezone/zones.subr
42
43BSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="090.timezone"
44f_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr
45
28#
29############################################################ INCLUDES
30
31BSDCFG_SHARE="/usr/share/bsdconfig"
32. $BSDCFG_SHARE/common.subr || exit 1
33f_dprintf "%s: loading includes..." "$0"
34f_include $BSDCFG_SHARE/dialog.subr
35f_include $BSDCFG_SHARE/mustberoot.subr
36f_include $BSDCFG_SHARE/strings.subr
37f_include $BSDCFG_SHARE/timezone/continents.subr
38f_include $BSDCFG_SHARE/timezone/countries.subr
39f_include $BSDCFG_SHARE/timezone/iso3166.subr
40f_include $BSDCFG_SHARE/timezone/menus.subr
41f_include $BSDCFG_SHARE/timezone/zones.subr
42
43BSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="090.timezone"
44f_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr
45
46ipgm=$( f_index_menusel_keyword $BSDCFG_LIBE/$APP_DIR/INDEX "$pgm" )
47[ $? -eq $SUCCESS -a "$ipgm" ] && pgm="$ipgm"
46f_index_menusel_keyword $BSDCFG_LIBE/$APP_DIR/INDEX "$pgm" ipgm &&
47 pgm="${ipgm:-$pgm}"
48
49############################################################ CONFIGURATION
50
51#
52# Standard pathnames
53#
54_PATH_DB="/var/db/zoneinfo"
55_PATH_WALL_CMOS_CLOCK="/etc/wall_cmos_clock"
56
57############################################################ GLOBALS
58
59#
60# Options
61#
62REALLYDOIT=1
63REINSTALL=
64USEDIALOG=1
65SKIPUTC=
66VERBOSE=
67TZ_OR_FAIL=
68CHROOTENV=
69
70#
71# Dummy vars (populated dynamically)
72#
73COUNTRIES= # list of 2-character country codes created by f_read_iso3166_table
74
75############################################################ FUNCTIONS
76
77# dialog_menu_main
78#
79# Display the dialog(1)-based application main menu.
80#
81dialog_menu_main()
82{
83 local title="$DIALOG_TITLE"
84 local btitle="$DIALOG_BACKTITLE"
85 local prompt="$msg_select_region"
86 local defaultitem= # Calculated below
87 local hline=
88
89 local height width rows
90 eval f_dialog_menu_size height width rows \
91 \"\$title\" \
92 \"\$btitle\" \
93 \"\$prompt\" \
94 \"\$hline\" \
95 $continent_menu_list
96
97 # Obtain default-item from previously stored selection
98 f_dialog_default_fetch defaultitem
99
100 local menu_choice
101 menu_choice=$( eval $DIALOG \
102 --title \"\$title\" \
103 --backtitle \"\$btitle\" \
104 --hline \"\$hline\" \
105 --ok-label \"\$msg_ok\" \
106 --cancel-label \"\$msg_cancel\" \
107 --default-item \"\$defaultitem\" \
108 --menu \"\$prompt\" \
109 $height $width $rows \
110 $continent_menu_list \
111 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
112 )
113 local retval=$?
114 f_dialog_data_sanitize menu_choice
115 f_dialog_menutag_store "$menu_choice"
116 f_dialog_default_store "$menu_choice"
117 return $retval
118}
119
120############################################################ MAIN
121
122# Incorporate rc-file if it exists
123[ -f "$HOME/.bsdconfigrc" ] && f_include "$HOME/.bsdconfigrc"
124
125#
126# Process command-line arguments
127#
128while getopts C:ehnrsv$GETOPTS_STDARGS flag; do
129 case "$flag" in
130 C) CHROOTENV="$OPTARG" ;;
131 e) TZ_OR_FAIL=1 ;;
132 n) REALLYDOIT= ;;
133 r) REINSTALL=1
134 USEDIALOG= ;;
135 s) SKIPUTC=1 ;;
136 v) VERBOSE=1 ;;
137 h|\?) f_usage $BSDCFG_LIBE/$APP_DIR/USAGE "PROGRAM_NAME" "$pgm" ;;
138 esac
139done
140shift $(( $OPTIND - 1 ))
141
142#
143# Initialize
144#
145f_dialog_title "$msg_time_zone"
146f_dialog_backtitle "${ipgm:+bsdconfig }$pgm"
147f_mustberoot_init
148
149#
150# Process `-C chroot_directory' command-line argument
151#
152if [ "$CHROOTENV" ]; then
153 _PATH_ZONETAB="$CHROOTENV$_PATH_ZONETAB"
154 _PATH_ISO3166="$CHROOTENV$_PATH_ISO3166"
155 _PATH_ZONEINFO="$CHROOTENV$_PATH_ZONEINFO"
156 _PATH_LOCALTIME="$CHROOTENV$_PATH_LOCALTIME"
157 _PATH_DB="$CHROOTENV$_PATH_DB"
158 _PATH_WALL_CMOS_CLOCK="$CHROOTENV$_PATH_WALL_CMOS_CLOCK"
159fi
160
161#
162# Process `-r' command-line option
163#
164if [ "$REINSTALL" ]; then
165 [ -f "$_PATH_DB" -a -r "$_PATH_DB" ] ||
166 f_die 1 "$msg_cannot_open_for_reading" "$_PATH_DB"
48
49############################################################ CONFIGURATION
50
51#
52# Standard pathnames
53#
54_PATH_DB="/var/db/zoneinfo"
55_PATH_WALL_CMOS_CLOCK="/etc/wall_cmos_clock"
56
57############################################################ GLOBALS
58
59#
60# Options
61#
62REALLYDOIT=1
63REINSTALL=
64USEDIALOG=1
65SKIPUTC=
66VERBOSE=
67TZ_OR_FAIL=
68CHROOTENV=
69
70#
71# Dummy vars (populated dynamically)
72#
73COUNTRIES= # list of 2-character country codes created by f_read_iso3166_table
74
75############################################################ FUNCTIONS
76
77# dialog_menu_main
78#
79# Display the dialog(1)-based application main menu.
80#
81dialog_menu_main()
82{
83 local title="$DIALOG_TITLE"
84 local btitle="$DIALOG_BACKTITLE"
85 local prompt="$msg_select_region"
86 local defaultitem= # Calculated below
87 local hline=
88
89 local height width rows
90 eval f_dialog_menu_size height width rows \
91 \"\$title\" \
92 \"\$btitle\" \
93 \"\$prompt\" \
94 \"\$hline\" \
95 $continent_menu_list
96
97 # Obtain default-item from previously stored selection
98 f_dialog_default_fetch defaultitem
99
100 local menu_choice
101 menu_choice=$( eval $DIALOG \
102 --title \"\$title\" \
103 --backtitle \"\$btitle\" \
104 --hline \"\$hline\" \
105 --ok-label \"\$msg_ok\" \
106 --cancel-label \"\$msg_cancel\" \
107 --default-item \"\$defaultitem\" \
108 --menu \"\$prompt\" \
109 $height $width $rows \
110 $continent_menu_list \
111 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
112 )
113 local retval=$?
114 f_dialog_data_sanitize menu_choice
115 f_dialog_menutag_store "$menu_choice"
116 f_dialog_default_store "$menu_choice"
117 return $retval
118}
119
120############################################################ MAIN
121
122# Incorporate rc-file if it exists
123[ -f "$HOME/.bsdconfigrc" ] && f_include "$HOME/.bsdconfigrc"
124
125#
126# Process command-line arguments
127#
128while getopts C:ehnrsv$GETOPTS_STDARGS flag; do
129 case "$flag" in
130 C) CHROOTENV="$OPTARG" ;;
131 e) TZ_OR_FAIL=1 ;;
132 n) REALLYDOIT= ;;
133 r) REINSTALL=1
134 USEDIALOG= ;;
135 s) SKIPUTC=1 ;;
136 v) VERBOSE=1 ;;
137 h|\?) f_usage $BSDCFG_LIBE/$APP_DIR/USAGE "PROGRAM_NAME" "$pgm" ;;
138 esac
139done
140shift $(( $OPTIND - 1 ))
141
142#
143# Initialize
144#
145f_dialog_title "$msg_time_zone"
146f_dialog_backtitle "${ipgm:+bsdconfig }$pgm"
147f_mustberoot_init
148
149#
150# Process `-C chroot_directory' command-line argument
151#
152if [ "$CHROOTENV" ]; then
153 _PATH_ZONETAB="$CHROOTENV$_PATH_ZONETAB"
154 _PATH_ISO3166="$CHROOTENV$_PATH_ISO3166"
155 _PATH_ZONEINFO="$CHROOTENV$_PATH_ZONEINFO"
156 _PATH_LOCALTIME="$CHROOTENV$_PATH_LOCALTIME"
157 _PATH_DB="$CHROOTENV$_PATH_DB"
158 _PATH_WALL_CMOS_CLOCK="$CHROOTENV$_PATH_WALL_CMOS_CLOCK"
159fi
160
161#
162# Process `-r' command-line option
163#
164if [ "$REINSTALL" ]; then
165 [ -f "$_PATH_DB" -a -r "$_PATH_DB" ] ||
166 f_die 1 "$msg_cannot_open_for_reading" "$_PATH_DB"
167 zoneinfo=$( cat "$_PATH_DB" ) ||
167 f_eval_catch -dk zoneinfo "$0" cat 'cat "%s"' "$_PATH_DB" ||
168 f_die 1 "$msg_error_reading" "$_PATH_DB"
169 [ "$zoneinfo" ] ||
170 f_die 1 "$msg_unable_to_determine_name_from_db" "$_PATH_DB"
171 f_install_zoneinfo "$zoneinfo"
172 exit $?
173fi
174
175#
176# If the arguments on the command-line do not specify a file,
177# then interpret it as a zoneinfo name
178#
179if [ $# -ge 1 ]; then
180 zoneinfo="$1"
181
182 if [ ! -f "$zoneinfo" ]; then
183 USEDIALOG=
184 f_install_zoneinfo "$zoneinfo"
185 exit $?
186 fi
187
188 # FALLTHROUGH
189fi
190
191#
192# Process the UTC option
193#
194if [ "$_PATH_WALL_CMOS_CLOCK" -a ! "$SKIPUTC" ]; then
195 f_dialog_title "$msg_select_local_or_utc"
196 title="$DIALOG_TITLE"
197 btitle="$DIALOG_BACKTITLE"
198 f_dialog_title_restore
199 msg="$msg_is_machine_clock_utc"
200
201 if [ "$USE_XDIALOG" ]; then
202 defaultno="default-no"
203 height=10 width=77
204 else
205 defaultno="defaultno"
206 height=7 width=73
207 fi
208
209 if [ "$USE_XDIALOG" ]; then
210 $DIALOG \
211 --title "$title" \
212 --backtitle "$btitle" \
213 --$defaultno \
214 --ok-label "$msg_yes" \
215 --cancel-label "$msg_no" \
216 --yesno "$msg" $height $width
217 result=$?
218 else
219 $DIALOG \
220 --title "$title" \
221 --backtitle "$btitle" \
222 --$defaultno \
223 --yes-label "$msg_yes" \
224 --no-label "$msg_no" \
225 --yesno "$msg" $height $width
226 result=$?
227 fi
228
168 f_die 1 "$msg_error_reading" "$_PATH_DB"
169 [ "$zoneinfo" ] ||
170 f_die 1 "$msg_unable_to_determine_name_from_db" "$_PATH_DB"
171 f_install_zoneinfo "$zoneinfo"
172 exit $?
173fi
174
175#
176# If the arguments on the command-line do not specify a file,
177# then interpret it as a zoneinfo name
178#
179if [ $# -ge 1 ]; then
180 zoneinfo="$1"
181
182 if [ ! -f "$zoneinfo" ]; then
183 USEDIALOG=
184 f_install_zoneinfo "$zoneinfo"
185 exit $?
186 fi
187
188 # FALLTHROUGH
189fi
190
191#
192# Process the UTC option
193#
194if [ "$_PATH_WALL_CMOS_CLOCK" -a ! "$SKIPUTC" ]; then
195 f_dialog_title "$msg_select_local_or_utc"
196 title="$DIALOG_TITLE"
197 btitle="$DIALOG_BACKTITLE"
198 f_dialog_title_restore
199 msg="$msg_is_machine_clock_utc"
200
201 if [ "$USE_XDIALOG" ]; then
202 defaultno="default-no"
203 height=10 width=77
204 else
205 defaultno="defaultno"
206 height=7 width=73
207 fi
208
209 if [ "$USE_XDIALOG" ]; then
210 $DIALOG \
211 --title "$title" \
212 --backtitle "$btitle" \
213 --$defaultno \
214 --ok-label "$msg_yes" \
215 --cancel-label "$msg_no" \
216 --yesno "$msg" $height $width
217 result=$?
218 else
219 $DIALOG \
220 --title "$title" \
221 --backtitle "$btitle" \
222 --$defaultno \
223 --yes-label "$msg_yes" \
224 --no-label "$msg_no" \
225 --yesno "$msg" $height $width
226 result=$?
227 fi
228
229 if [ $result -eq 0 ]; then
229 if [ $result -eq $DIALOG_OK ]; then
230 # User chose YES
231 [ "$REALLYDOIT" ] &&
232 f_quietly rm -f "$_PATH_WALL_CMOS_CLOCK"
233 else
234 # User chose NO, pressed ESC (or Ctrl-C), or closed box
235 [ "$REALLYDOIT" ] &&
236 ( umask 222 && :> "$_PATH_WALL_CMOS_CLOCK" )
237 fi
238fi
239
240#
241# Process optional default zone argument
242#
243if [ $# -ge 1 ]; then
244 default="$1"
245
246 f_dialog_title "$msg_default_zone_provided"
230 # User chose YES
231 [ "$REALLYDOIT" ] &&
232 f_quietly rm -f "$_PATH_WALL_CMOS_CLOCK"
233 else
234 # User chose NO, pressed ESC (or Ctrl-C), or closed box
235 [ "$REALLYDOIT" ] &&
236 ( umask 222 && :> "$_PATH_WALL_CMOS_CLOCK" )
237 fi
238fi
239
240#
241# Process optional default zone argument
242#
243if [ $# -ge 1 ]; then
244 default="$1"
245
246 f_dialog_title "$msg_default_zone_provided"
247 msg=$( printf "\n$msg_use_default_zone" "$default" )
247 f_sprintf msg "\n$msg_use_default_zone" "$default"
248 hline=
249 f_dialog_yesno "$msg" "$hline"
250 result=$?
251 f_dialog_title_restore
252
248 hline=
249 f_dialog_yesno "$msg" "$hline"
250 result=$?
251 f_dialog_title_restore
252
253 if [ $result -eq 0 ]; then
253 if [ $result -eq $DIALOG_OK ]; then
254 # User chose YES
255 f_install_zoneinfo_file "$default"
256 result=$?
257 [ ! "$USE_XDIALOG" ] && f_dialog_clear
258 exit $result
259 fi
260
261 [ ! "$USE_XDIALOG" ] && f_dialog_clear
262fi
263
264#
265# Override the user-supplied umask
266#
267umask 022
268
269#
270# Read databases and perform initialization
271#
272f_read_iso3166_table # creates $COUNTRIES and $country_*_name
273f_read_zones # creates $country_*_{descr,cont,filename}
274f_sort_countries # sorts the countries listed for each continent
275f_make_menus # creates $continent_menu_list and $continent_*_menu_list
276
277#
278# Launch application main menu
279#
280defaultctry=""
281defaultzone=""
282NEED_CONTINENT=1
283NEED_COUNTRY=1
284while :; do
285 if [ "$NEED_CONTINENT" ]; then
286 dialog_menu_main # prompt the user to select a continent/ocean
287 retval=$?
288 f_dialog_menutag_fetch mtag
289
254 # User chose YES
255 f_install_zoneinfo_file "$default"
256 result=$?
257 [ ! "$USE_XDIALOG" ] && f_dialog_clear
258 exit $result
259 fi
260
261 [ ! "$USE_XDIALOG" ] && f_dialog_clear
262fi
263
264#
265# Override the user-supplied umask
266#
267umask 022
268
269#
270# Read databases and perform initialization
271#
272f_read_iso3166_table # creates $COUNTRIES and $country_*_name
273f_read_zones # creates $country_*_{descr,cont,filename}
274f_sort_countries # sorts the countries listed for each continent
275f_make_menus # creates $continent_menu_list and $continent_*_menu_list
276
277#
278# Launch application main menu
279#
280defaultctry=""
281defaultzone=""
282NEED_CONTINENT=1
283NEED_COUNTRY=1
284while :; do
285 if [ "$NEED_CONTINENT" ]; then
286 dialog_menu_main # prompt the user to select a continent/ocean
287 retval=$?
288 f_dialog_menutag_fetch mtag
289
290 if [ $retval -ne 0 ]; then
290 if [ $retval -ne $DIALOG_OK ]; then
291 [ "$TZ_OR_FAIL" ] && f_die
292 exit $SUCCESS
293 fi
294
295 NEED_CONTINENT=
296
297 continent=$( eval f_dialog_menutag2item \"\$mtag\" \
298 $continent_menu_list )
299 cont=$( f_find_continent "$continent" )
300 cont_title=$( f_continent $cont title )
301 nitems=$( f_continent $cont nitems )
302 isocean=$( f_OCEANP $cont )
303 fi
304
305 if [ "$NEED_COUNTRY" ]; then
306 if [ "$cont_title" = "$continent_utc_title" ]; then
307 if f_set_zone_utc; then
308 break
309 else
310 NEED_CONTINENT=1
311 continue
312 fi
313 fi
314
315 #
316 # Short cut -- if there's only one country, don't post a menu.
317 #
318 if [ $nitems -eq 1 ]; then
319 tag=1
320 else
321 #
322 # It's amazing how much good grammar really matters...
323 #
324 if [ ! "$isocean" ]; then
291 [ "$TZ_OR_FAIL" ] && f_die
292 exit $SUCCESS
293 fi
294
295 NEED_CONTINENT=
296
297 continent=$( eval f_dialog_menutag2item \"\$mtag\" \
298 $continent_menu_list )
299 cont=$( f_find_continent "$continent" )
300 cont_title=$( f_continent $cont title )
301 nitems=$( f_continent $cont nitems )
302 isocean=$( f_OCEANP $cont )
303 fi
304
305 if [ "$NEED_COUNTRY" ]; then
306 if [ "$cont_title" = "$continent_utc_title" ]; then
307 if f_set_zone_utc; then
308 break
309 else
310 NEED_CONTINENT=1
311 continue
312 fi
313 fi
314
315 #
316 # Short cut -- if there's only one country, don't post a menu.
317 #
318 if [ $nitems -eq 1 ]; then
319 tag=1
320 else
321 #
322 # It's amazing how much good grammar really matters...
323 #
324 if [ ! "$isocean" ]; then
325 title=$( printf "$msg_country_title" \
326 "$cont_title" )
325 f_sprintf title "$msg_country_title" \
326 "$cont_title"
327 f_dialog_title "$title"
328 title="$DIALOG_TITLE"
329 btitle="$DIALOG_BACKTITLE"
330 f_dialog_title_restore
331 prompt="$msg_select_country"
332 else
327 f_dialog_title "$title"
328 title="$DIALOG_TITLE"
329 btitle="$DIALOG_BACKTITLE"
330 f_dialog_title_restore
331 prompt="$msg_select_country"
332 else
333 title=$( printf "$msg_island_and_group_title" \
334 "$cont_title" )
333 f_sprintf title "$msg_island_and_group_title" \
334 "$cont_title"
335 f_dialog_title "$title"
336 title="$DIALOG_TITLE"
337 btitle="$DIALOG_BACKTITLE"
338 f_dialog_title_restore
339 prompt="$msg_select_island_or_group"
340 fi
341
342 #
343 # Calculate size of menu
344 #
345 menu_list=$( f_continent $cont menu_list )
346 eval f_dialog_menu_size height width rows \
347 \"\$title\" \
348 \"\$btitle\" \
349 \"\$prompt\" \
350 \"\" \
351 $menu_list
352
353 #
354 # Launch the country selection menu
355 #
356 tag=$( eval $DIALOG \
357 --title \"\$title\" \
358 --backtitle \"\$btitle\" \
359 --ok-label \"\$msg_ok\" \
360 --cancel-label \"\$msg_cancel\" \
361 --default-item \"\$defaultctry\" \
362 --menu \"\$prompt\" \
363 $height $width $rows \
364 $menu_list \
365 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
366 )
367 retval=$?
368 f_dialog_data_sanitize tag
369 defaultctry="$tag"
370
335 f_dialog_title "$title"
336 title="$DIALOG_TITLE"
337 btitle="$DIALOG_BACKTITLE"
338 f_dialog_title_restore
339 prompt="$msg_select_island_or_group"
340 fi
341
342 #
343 # Calculate size of menu
344 #
345 menu_list=$( f_continent $cont menu_list )
346 eval f_dialog_menu_size height width rows \
347 \"\$title\" \
348 \"\$btitle\" \
349 \"\$prompt\" \
350 \"\" \
351 $menu_list
352
353 #
354 # Launch the country selection menu
355 #
356 tag=$( eval $DIALOG \
357 --title \"\$title\" \
358 --backtitle \"\$btitle\" \
359 --ok-label \"\$msg_ok\" \
360 --cancel-label \"\$msg_cancel\" \
361 --default-item \"\$defaultctry\" \
362 --menu \"\$prompt\" \
363 $height $width $rows \
364 $menu_list \
365 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
366 )
367 retval=$?
368 f_dialog_data_sanitize tag
369 defaultctry="$tag"
370
371 if [ $retval -ne 0 ]; then
371 if [ $retval -ne $DIALOG_OK ]; then
372 NEED_CONTINENT=1
373 continue # back to main menu
374 fi
375 fi
376
377 # Get the country code from the user's selection
378 tlc=$( f_continent $cont tlc_$tag )
379
380 NEED_COUNTRY=
381 fi
382
383 #
384 # If the selection has only one zone (nzones == -1),
385 # just set it.
386 #
387 nzones=$( f_country $tlc nzones )
388 if [ $nzones -lt 0 ]; then
389 real_cont=$( f_country $tlc cont )
390 real_continent=$( f_continent $real_cont name )
391 name=$( f_country $tlc name )
392 filename=$( f_country $tlc filename )
393
394 if ! f_confirm_zone "$real_continent/$filename"; then
395 [ $nitems -eq 1 ] && NEED_CONTINENT=1
396 NEED_COUNTRY=1
397 continue
398 fi
399 else
372 NEED_CONTINENT=1
373 continue # back to main menu
374 fi
375 fi
376
377 # Get the country code from the user's selection
378 tlc=$( f_continent $cont tlc_$tag )
379
380 NEED_COUNTRY=
381 fi
382
383 #
384 # If the selection has only one zone (nzones == -1),
385 # just set it.
386 #
387 nzones=$( f_country $tlc nzones )
388 if [ $nzones -lt 0 ]; then
389 real_cont=$( f_country $tlc cont )
390 real_continent=$( f_continent $real_cont name )
391 name=$( f_country $tlc name )
392 filename=$( f_country $tlc filename )
393
394 if ! f_confirm_zone "$real_continent/$filename"; then
395 [ $nitems -eq 1 ] && NEED_CONTINENT=1
396 NEED_COUNTRY=1
397 continue
398 fi
399 else
400 title=$( printf "$msg_country_time_zones" \
401 "$( f_country $tlc name )" )
400 f_sprintf title "$msg_country_time_zones" \
401 "$( f_country $tlc name )"
402 f_dialog_title "$title"
402 f_dialog_title "$title"
403 title="$DIALOG_TITLE"
404 btitle="$DIALOG_BACKTITLE"
403 title="$DIALOG_TITLE" btitle="$DIALOG_BACKTITLE"
405 f_dialog_title_restore
406 prompt="$msg_select_zone"
407 menu_list=$( f_country $tlc menu_list )
408 eval f_dialog_menu_size height width rows \
409 \"\$title\" \"\$btitle\" \"\$prompt\" \"\" $menu_list
410
411 #
412 # Launch the zone selection menu
413 # NOTE: This is as deep as we go
414 #
415 n=$( eval $DIALOG \
416 --title \"\$title\" \
417 --backtitle \"\$btitle\" \
418 --ok-label \"\$msg_ok\" \
419 --cancel-label \"\$msg_cancel\" \
420 --default-item \"\$defaultzone\" \
421 --menu \"\$prompt\" \
422 $height $width $rows \
423 $menu_list \
424 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
425 )
426 retval=$?
427 f_dialog_data_sanitize n
428 defaultzone="$n"
429
404 f_dialog_title_restore
405 prompt="$msg_select_zone"
406 menu_list=$( f_country $tlc menu_list )
407 eval f_dialog_menu_size height width rows \
408 \"\$title\" \"\$btitle\" \"\$prompt\" \"\" $menu_list
409
410 #
411 # Launch the zone selection menu
412 # NOTE: This is as deep as we go
413 #
414 n=$( eval $DIALOG \
415 --title \"\$title\" \
416 --backtitle \"\$btitle\" \
417 --ok-label \"\$msg_ok\" \
418 --cancel-label \"\$msg_cancel\" \
419 --default-item \"\$defaultzone\" \
420 --menu \"\$prompt\" \
421 $height $width $rows \
422 $menu_list \
423 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
424 )
425 retval=$?
426 f_dialog_data_sanitize n
427 defaultzone="$n"
428
430 if [ $retval -ne 0 ]; then
429 if [ $retval -ne $DIALOG_OK ]; then
431 [ $nitems -eq 1 ] && NEED_CONTINENT=1
432 NEED_COUNTRY=1
433 continue
434 fi
435
436 real_cont=$( f_country $tlc cont_$n )
437 real_continent=$( f_continent $real_cont name )
438 name=$( f_country $tlc name )
439 filename=$( f_country $tlc filename_$n )
440
441 f_confirm_zone "$real_continent/$filename" || continue
442 fi
443
430 [ $nitems -eq 1 ] && NEED_CONTINENT=1
431 NEED_COUNTRY=1
432 continue
433 fi
434
435 real_cont=$( f_country $tlc cont_$n )
436 real_continent=$( f_continent $real_cont name )
437 name=$( f_country $tlc name )
438 filename=$( f_country $tlc filename_$n )
439
440 f_confirm_zone "$real_continent/$filename" || continue
441 fi
442
444 [ $retval -eq 0 ] || continue # back to main menu
443 [ $retval -eq $DIALOG_OK ] || continue # back to main menu
445
446 if ! f_install_zoneinfo "$real_continent/$filename"; then
447 [ $nzones -lt 0 ] && NEED_COUNTRY=1
448 else
449 break
450 fi
451done
452
453################################################################################
454# END
455################################################################################
444
445 if ! f_install_zoneinfo "$real_continent/$filename"; then
446 [ $nzones -lt 0 ] && NEED_COUNTRY=1
447 else
448 break
449 fi
450done
451
452################################################################################
453# END
454################################################################################