[tz] [PROPOSED 15/18] * tzselect: Indent more consistently.

Paul Eggert eggert at cs.ucla.edu
Tue Dec 19 07:26:04 UTC 2023


* tzselect.ksh: Be more consistent about indenting two spaces
for each level, and no space before ‘;;’.
This changes only white space (you can verify with ‘diff -w’).
---
 tzselect.ksh | 920 +++++++++++++++++++++++++--------------------------
 1 file changed, 460 insertions(+), 460 deletions(-)

diff --git a/tzselect.ksh b/tzselect.ksh
index d2b3ecda..69d7e188 100644
--- a/tzselect.ksh
+++ b/tzselect.ksh
@@ -47,14 +47,14 @@ REPORT_BUGS_TO=tz at iana.org
 # Output one argument as-is to standard output, with trailing newline.
 # Safer than 'echo', which can mishandle '\' or leading '-'.
 say() {
-    printf '%s\n' "$1"
+  printf '%s\n' "$1"
 }
 
 # Check for awk POSIX compliance.
 ($AWK -v x=y 'BEGIN { exit 123 }') <>/dev/null >&0 2>&0
 [ $? = 123 ] || {
-	say >&2 "$0: Sorry, your '$AWK' program is not POSIX compatible."
-	exit 1
+  say >&2 "$0: Sorry, your '$AWK' program is not POSIX compatible."
+  exit 1
 }
 
 coord=
@@ -91,7 +91,7 @@ Report bugs to $REPORT_BUGS_TO."
 # available, falling back on a portable substitute otherwise.
 if
   case $BASH_VERSION in
-  ?*) : ;;
+  ?*) :;;
   '')
     # '; exit' should be redundant, but Dash doesn't properly fail without it.
     (eval 'set --; select x; do break; done; exit') <>/dev/null 2>&0
@@ -104,7 +104,7 @@ then
       select select_result
       do
 	case $select_result in
-	"") echo >&2 "Please enter a number in range." ;;
+	"") echo >&2 "Please enter a number in range.";;
 	?*) break
 	esac
       done || exit
@@ -126,9 +126,9 @@ else
 	do
 	  select_i=`expr $select_i + 1`
 	  printf >&2 "%${select_width}d) %s\\n" $select_i "$select_word"
-	done ;;
+	done;;
       *[!0-9]*)
-	echo >&2 'Please enter a number in range.' ;;
+	echo >&2 'Please enter a number in range.';;
       *)
 	if test 1 -le $select_i && test $select_i -le $#; then
 	  shift `expr $select_i - 1`
@@ -147,37 +147,37 @@ fi
 
 while getopts c:n:t:-: opt
 do
-    case $opt$OPTARG in
-    c*)
-	coord=$OPTARG ;;
-    n*)
-	location_limit=$OPTARG ;;
-    t*) # Undocumented option, used for developer testing.
-	zonetabtype=$OPTARG ;;
-    -help)
-	exec echo "$usage" ;;
-    -version)
-	exec echo "tzselect $PKGVERSION$TZVERSION" ;;
-    -*)
-	say >&2 "$0: -$opt$OPTARG: unknown option; try '$0 --help'"; exit 1 ;;
-    *)
-	say >&2 "$0: try '$0 --help'"; exit 1 ;;
-    esac
+  case $opt$OPTARG in
+  c*)
+    coord=$OPTARG;;
+  n*)
+    location_limit=$OPTARG;;
+  t*) # Undocumented option, used for developer testing.
+    zonetabtype=$OPTARG;;
+  -help)
+    exec echo "$usage";;
+  -version)
+    exec echo "tzselect $PKGVERSION$TZVERSION";;
+  -*)
+    say >&2 "$0: -$opt$OPTARG: unknown option; try '$0 --help'"; exit 1;;
+  *)
+    say >&2 "$0: try '$0 --help'"; exit 1;;
+  esac
 done
 
 shift `expr $OPTIND - 1`
 case $# in
 0) ;;
-*) say >&2 "$0: $1: unknown argument"; exit 1 ;;
+*) say >&2 "$0: $1: unknown argument"; exit 1;;
 esac
 
 # translit=true to try transliteration.
 # This is false if U+12345 CUNEIFORM SIGN URU TIMES KI has length 1
 # which means awk (and presumably the shell) do not need transliteration.
 if $AWK 'BEGIN { u12345 = "\360\222\215\205"; exit length(u12345) == 1 }'; then
-    translit=true
+  translit=true
 else
-    translit=false
+  translit=false
 fi
 
 # Read into shell variable $1 the contents of file $2.
@@ -186,14 +186,14 @@ fi
 # If GNU iconv's //TRANSLIT does not work, fall back on POSIXish iconv;
 # if that does not work, fall back on 'cat'.
 read_file() {
-    { $translit && {
-	eval "$1=\`(iconv -f UTF-8 -t //TRANSLIT) 2>/dev/null <\"\$2\"\`" ||
-	eval "$1=\`(iconv -f UTF-8) 2>/dev/null <\"\$2\"\`"
-    }; } ||
-    eval "$1=\`cat <\"\$2\"\`" || {
-	say >&2 "$0: time zone files are not set up correctly"
-	exit 1
-    }
+  { $translit && {
+    eval "$1=\`(iconv -f UTF-8 -t //TRANSLIT) 2>/dev/null <\"\$2\"\`" ||
+    eval "$1=\`(iconv -f UTF-8) 2>/dev/null <\"\$2\"\`"
+  }; } ||
+  eval "$1=\`cat <\"\$2\"\`" || {
+    say >&2 "$0: time zone files are not set up correctly"
+    exit 1
+  }
 }
 read_file TZ_COUNTRY_TABLE "$TZDIR/iso3166.tab"
 read_file TZ_ZONE_TABLE "$TZDIR/$zonetabtype.tab"
@@ -204,57 +204,57 @@ IFS=$newline
 
 # Awk script to output a country list.
 output_country_list='
- BEGIN {
-  continent_re = substr(ARGV[1], 2)
-  TZ_COUNTRY_TABLE = substr(ARGV[2], 2)
-  TZ_ZONE_TABLE = substr(ARGV[3], 2)
-  ARGV[1] = ARGV[2] = ARGV[3] = ""
-  FS = "\t"
-  nlines = split(TZ_ZONE_TABLE, line, /\n/)
-  for (iline = 1; iline <= nlines; iline++) {
-    $0 = line[iline]
-    commentary = $0 ~ /^#@/
-    if (commentary) {
-      if ($0 !~ /^#@/) continue
-      col1ccs = substr($1, 3)
-      conts = $2
-    } else {
-      col1ccs = $1
-      conts = $3
-    }
-    ncc = split(col1ccs, cc, /,/)
-    ncont = split(conts, cont, /,/)
-    for (i = 1; i <= ncc; i++) {
-      elsewhere = commentary
-      for (ci = 1; ci <= ncont; ci++) {
-	if (cont[ci] ~ continent_re) {
-	  if (!cc_seen[cc[i]]++) cc_list[++ccs] = cc[i]
-	  elsewhere = 0
-	}
+  BEGIN {
+    continent_re = substr(ARGV[1], 2)
+    TZ_COUNTRY_TABLE = substr(ARGV[2], 2)
+    TZ_ZONE_TABLE = substr(ARGV[3], 2)
+    ARGV[1] = ARGV[2] = ARGV[3] = ""
+    FS = "\t"
+    nlines = split(TZ_ZONE_TABLE, line, /\n/)
+    for (iline = 1; iline <= nlines; iline++) {
+      $0 = line[iline]
+      commentary = $0 ~ /^#@/
+      if (commentary) {
+	if ($0 !~ /^#@/) continue
+	col1ccs = substr($1, 3)
+	conts = $2
+      } else {
+	col1ccs = $1
+	conts = $3
       }
-      if (elsewhere) {
-	for (i = 1; i <= ncc; i++) {
-	  cc_elsewhere[cc[i]] = 1
+      ncc = split(col1ccs, cc, /,/)
+      ncont = split(conts, cont, /,/)
+      for (i = 1; i <= ncc; i++) {
+	elsewhere = commentary
+	for (ci = 1; ci <= ncont; ci++) {
+	  if (cont[ci] ~ continent_re) {
+	    if (!cc_seen[cc[i]]++) cc_list[++ccs] = cc[i]
+	    elsewhere = 0
+	  }
+	}
+	if (elsewhere) {
+	  for (i = 1; i <= ncc; i++) {
+	    cc_elsewhere[cc[i]] = 1
+	  }
 	}
       }
     }
+    {
+    nlines = split(TZ_COUNTRY_TABLE, line, /\n/)
+    for (i = 1; i <= nlines; i++) {
+      $0 = line[i]
+      if ($0 !~ /^#/) cc_name[$1] = $2
+    }
+    for (i = 1; i <= ccs; i++) {
+      country = cc_list[i]
+      if (cc_elsewhere[country]) continue
+      if (cc_name[country]) {
+	country = cc_name[country]
+      }
+      print country
+    }
+    }
   }
-  {
-	  nlines = split(TZ_COUNTRY_TABLE, line, /\n/)
-	  for (i = 1; i <= nlines; i++) {
-		  $0 = line[i]
-		  if ($0 !~ /^#/) cc_name[$1] = $2
-	  }
-	  for (i = 1; i <= ccs; i++) {
-		  country = cc_list[i]
-		  if (cc_elsewhere[country]) continue
-		  if (cc_name[country]) {
-		    country = cc_name[country]
-		  }
-		  print country
-	  }
-  }
- }
 '
 
 # Awk script to process a time zone table and output the same table,
@@ -334,415 +334,415 @@ output_distances_or_times='
     return gcdist(lat1, long1, lat2, long2) + pardist(lat1, long1, lat2, long2)
   }
   BEGIN {
-   coord_lat = convert_latitude(coord)
-   coord_long = convert_longitude(coord)
-   nlines = split(TZ_ZONE_TABLE, line, /\n/)
-   for (h = 1; h <= nlines; h++) {
-     $0 = line[h]
-     if ($0 ~ /^#/) continue
-     inline[inlines++] = $0
-     ncc = split($1, cc, /,/)
-     for (i = 1; i <= ncc; i++)
-       cc_used[cc[i]]++
-   }
-   for (h = 0; h < inlines; h++) {
-    $0 = inline[h]
-    outline = $1 "\t" $2 "\t" $3
-    sep = "\t"
-    ncc = split($1, cc, /,/)
-    split("", item_seen)
-    item_seen[""] = 1
-    for (i = 1; i <= ncc; i++) {
-      item = cc_used[cc[i]] <= 1 ? country[cc[i]] : $4
-      if (item_seen[item]++) continue
-      outline = outline sep item
-      sep = "; "
+    coord_lat = convert_latitude(coord)
+    coord_long = convert_longitude(coord)
+    nlines = split(TZ_ZONE_TABLE, line, /\n/)
+    for (h = 1; h <= nlines; h++) {
+      $0 = line[h]
+      if ($0 ~ /^#/) continue
+      inline[inlines++] = $0
+      ncc = split($1, cc, /,/)
+      for (i = 1; i <= ncc; i++)
+	cc_used[cc[i]]++
     }
-    if (output_times) {
-      fmt = "TZ='\''%s'\'' date +'\''%d %%Y %%m %%d %%H:%%M %%a %%b\t%s'\''\n"
-      gsub(/'\''/, "&\\\\&&", outline)
-      printf fmt, $3, h, outline
-    } else {
-      here_lat = convert_latitude($2)
-      here_long = convert_longitude($2)
-      printf "%g\t%s\n", dist(coord_lat, coord_long, here_lat, here_long), \
-	outline
+    for (h = 0; h < inlines; h++) {
+      $0 = inline[h]
+      outline = $1 "\t" $2 "\t" $3
+      sep = "\t"
+      ncc = split($1, cc, /,/)
+      split("", item_seen)
+      item_seen[""] = 1
+      for (i = 1; i <= ncc; i++) {
+	item = cc_used[cc[i]] <= 1 ? country[cc[i]] : $4
+	if (item_seen[item]++) continue
+	outline = outline sep item
+	sep = "; "
+      }
+      if (output_times) {
+	fmt = "TZ='\''%s'\'' date +'\''%d %%Y %%m %%d %%H:%%M %%a %%b\t%s'\''\n"
+	gsub(/'\''/, "&\\\\&&", outline)
+	printf fmt, $3, h, outline
+      } else {
+	here_lat = convert_latitude($2)
+	here_long = convert_longitude($2)
+	printf "%g\t%s\n", dist(coord_lat, coord_long, here_lat, here_long), \
+	  outline
+      }
     }
-   }
   }
 '
 
 # Begin the main loop.  We come back here if the user wants to retry.
 while
 
-	echo >&2 'Please identify a location' \
-		'so that time zone rules can be set correctly.'
-
-	continent=
-	country=
-	country_result=
-	region=
-	time=
-
-	case $coord in
-	?*)
-		continent=coord;;
-	'')
-
-	# Ask the user for continent or ocean.
-
-	echo >&2 'Please select a continent, ocean, "coord", "TZ", or "time".'
-
-        quoted_continents=`
-	  $AWK '
-	    function handle_entry(entry) {
-	      entry = substr(entry, 1, index(entry, "/") - 1)
-	      if (entry == "America")
-	       entry = entry "s"
-	      if (entry ~ /^(Arctic|Atlantic|Indian|Pacific)$/)
-	       entry = entry " Ocean"
-	      printf "'\''%s'\''\n", entry
+  echo >&2 'Please identify a location' \
+    'so that time zone rules can be set correctly.'
+
+  continent=
+  country=
+  country_result=
+  region=
+  time=
+
+  case $coord in
+  ?*)
+    continent=coord;;
+  '')
+
+    # Ask the user for continent or ocean.
+
+    echo >&2 'Please select a continent, ocean, "coord", "TZ", or "time".'
+
+    quoted_continents=`
+      $AWK '
+	function handle_entry(entry) {
+	  entry = substr(entry, 1, index(entry, "/") - 1)
+	  if (entry == "America")
+	    entry = entry "s"
+	  if (entry ~ /^(Arctic|Atlantic|Indian|Pacific)$/)
+	    entry = entry " Ocean"
+	  printf "'\''%s'\''\n", entry
+	}
+	BEGIN {
+	  TZ_ZONE_TABLE = substr(ARGV[1], 2)
+	  ARGV[1] = ""
+	  FS = "\t"
+	  nlines = split(TZ_ZONE_TABLE, line, /\n/)
+	  for (i = 1; i <= nlines; i++) {
+	    $0 = line[i]
+	    if ($0 ~ /^[^#]/)
+	      handle_entry($3)
+	    else if ($0 ~ /^#@/) {
+	      ncont = split($2, cont, /,/)
+	      for (ci = 1; ci <= ncont; ci++)
+		handle_entry(cont[ci])
+	    }
+	  }
+	}
+      ' ="$TZ_ZONE_TABLE" |
+      sort -u |
+      tr '\n' ' '
+      echo ''
+    `
+
+    eval '
+      doselect '"$quoted_continents"' \
+	"coord - I want to use geographical coordinates." \
+	"TZ - I want to specify the timezone using the POSIX TZ format." \
+	"time - I know local time already."
+      continent=$select_result
+      case $continent in
+      Americas) continent=America;;
+      *" "*)    continent=`expr "$continent" : '\''\([^ ]*\)'\''`
+      esac
+    '
+  esac
+
+  case $continent in
+  TZ)
+    # Ask the user for a POSIX TZ string.  Check that it conforms.
+    check_POSIX_TZ_string='BEGIN {
+      tz = substr(ARGV[1], 2)
+      ARGV[1] = ""
+      tzname = ("(<[[:alnum:]+-][[:alnum:]+-][[:alnum:]+-]+>" \
+		"|[[:alpha:]][[:alpha:]][[:alpha:]]+)")
+      time = ("(2[0-4]|[0-1]?[0-9])" \
+	      "(:[0-5][0-9](:[0-5][0-9])?)?")
+      offset = "[-+]?" time
+      mdate = "M([1-9]|1[0-2])\\.[1-5]\\.[0-6]"
+      jdate = ("((J[1-9]|[0-9]|J?[1-9][0-9]" \
+	       "|J?[1-2][0-9][0-9])|J?3[0-5][0-9]|J?36[0-5])")
+      datetime = ",(" mdate "|" jdate ")(/" time ")?"
+      tzpattern = ("^(:.*|" tzname offset "(" tzname \
+		   "(" offset ")?(" datetime datetime ")?)?)$")
+      if (tz ~ tzpattern) exit 1
+      exit 0
+    }'
+
+    while
+      echo >&2 'Please enter the desired value' \
+	'of the TZ environment variable.'
+      echo >&2 'For example, AEST-10 is abbreviated' \
+	'AEST and is 10 hours'
+      echo >&2 'ahead (east) of Greenwich,' \
+	'with no daylight saving time.'
+      read tz
+      $AWK "$check_POSIX_TZ_string" ="$tz"
+    do
+      say >&2 "'$tz' is not a conforming POSIX timezone string."
+    done
+    TZ_for_date=$tz;;
+  *)
+    case $continent in
+    coord)
+      case $coord in
+      '')
+	echo >&2 'Please enter coordinates' \
+	  'in ISO 6709 notation.'
+	echo >&2 'For example, +4042-07403 stands for'
+	echo >&2 '40 degrees 42 minutes north,' \
+	  '74 degrees 3 minutes west.'
+	read coord;;
+      esac
+      distance_table=`$AWK \
+	  "$output_distances_or_times" \
+	  ="$coord" ="$TZ_COUNTRY_TABLE" ="$TZ_ZONE_TABLE" |
+	sort -n |
+	sed "${location_limit}q"
+      `
+      regions=`$AWK '
+	BEGIN {
+	  distance_table = substr(ARGV[1], 2)
+	  ARGV[1] = ""
+	  nlines = split(distance_table, line, /\n/)
+	  for (nr = 1; nr <= nlines; nr++) {
+	    nf = split(line[nr], f, /\t/)
+	    print f[nf]
+	  }
+	}
+      ' ="$distance_table"`
+      echo >&2 'Please select one of the following timezones,'
+      echo >&2 'listed roughly in increasing order' \
+	"of distance from $coord".
+      doselect $regions
+      region=$select_result
+      tz=`$AWK '
+	BEGIN {
+	  distance_table = substr(ARGV[1], 2)
+	  region = substr(ARGV[2], 2)
+	  ARGV[1] = ARGV[2] = ""
+	  nlines = split(distance_table, line, /\n/)
+	  for (nr = 1; nr <= nlines; nr++) {
+	    nf = split(line[nr], f, /\t/)
+	    if (f[nf] == region) {
+	      print f[4]
+	    }
+	  }
+	}
+      ' ="$distance_table" ="$region"`
+      ;;
+    *)
+      case $continent in
+      time)
+	minute_format='%a %b %d %H:%M'
+	old_minute=`TZ=UTC0 date +"$minute_format"`
+	for i in 1 2 3
+	do
+	  time_table_command=`$AWK \
+	    -v output_times=1 \
+	    "$output_distances_or_times" \
+	    = = ="$TZ_ZONE_TABLE"
+	  `
+	  time_table=`eval "$time_table_command"`
+	  new_minute=`TZ=UTC0 date +"$minute_format"`
+	  case $old_minute in
+	  "$new_minute") break;;
+	  esac
+	  old_minute=$new_minute
+	done
+	echo >&2 "The system says Universal Time is $new_minute."
+	echo >&2 "Assuming that's correct, what is the local time?"
+	sorted_table=`say "$time_table" | sort -k2n -k2,5 -k1n` || {
+	  say >&2 "$0: cannot sort time table"
+	  exit 1
+	}
+	eval doselect `
+	  $AWK 'BEGIN {
+	    sorted_table = substr(ARGV[1], 2)
+	    ARGV[1] = ""
+	    nlines = split(sorted_table, line, /\n/)
+	    for (i = 1; i <= nlines; i++) {
+	      $0 = line[i]
+	      outline = $6 " " $7 " " $4 " " $5
+	      if (outline == oldline) continue
+	      oldline = outline
+	      gsub(/'\''/, "&\\\\&&", outline)
+	      printf "'\''%s'\''\n", outline
+	    }
+	  }' ="$sorted_table"
+	`
+	time=$select_result
+	continent_re='^'
+	zone_table=`
+	  $AWK 'BEGIN {
+	    time = substr(ARGV[1], 2)
+	    time_table = substr(ARGV[2], 2)
+	    ARGV[1] = ARGV[2] = ""
+	    nlines = split(time_table, line, /\n/)
+	    for (i = 1; i <= nlines; i++) {
+	      $0 = line[i]
+	      if ($6 " " $7 " " $4 " " $5 == time) {
+		sub(/[^\t]*\t/, "")
+		print
+	      }
 	    }
+	  }' ="$time" ="$time_table"
+	`
+	countries=`
+	  $AWK \
+	    "$output_country_list" \
+	    ="$continent_re" ="$TZ_COUNTRY_TABLE" ="$zone_table" |
+	  sort -f
+	`
+	;;
+      *)
+	continent_re="^$continent/"
+	zone_table=$TZ_ZONE_TABLE
+      esac
+
+      # Get list of names of countries in the continent or ocean.
+      countries=`
+	$AWK \
+	  "$output_country_list" \
+	  ="$continent_re" ="$TZ_COUNTRY_TABLE" ="$zone_table" |
+	sort -f
+      `
+
+      # If there's more than one country, ask the user which one.
+      case $countries in
+      *"$newline"*)
+	echo >&2 'Please select a country' \
+	  'whose clocks agree with yours.'
+	doselect $countries
+	country_result=$select_result
+	country=$select_result;;
+      *)
+	country=$countries
+      esac
+
+
+      # Get list of timezones in the country.
+      regions=`
+	$AWK \
+	  '
 	    BEGIN {
-	      TZ_ZONE_TABLE = substr(ARGV[1], 2)
-	      ARGV[1] = ""
+	      country = substr(ARGV[1], 2)
+	      TZ_COUNTRY_TABLE = substr(ARGV[2], 2)
+	      TZ_ZONE_TABLE = substr(ARGV[3], 2)
+	      ARGV[1] = ARGV[2] = ARGV[3] = ""
 	      FS = "\t"
-	      nlines = split(TZ_ZONE_TABLE, line, /\n/)
+	      cc = country
+	      nlines = split(TZ_COUNTRY_TABLE, line, /\n/)
 	      for (i = 1; i <= nlines; i++) {
 		$0 = line[i]
-	        if ($0 ~ /^[^#]/)
-		  handle_entry($3)
-		else if ($0 ~ /^#@/) {
-		  ncont = split($2, cont, /,/)
-		  for (ci = 1; ci <= ncont; ci++)
-		    handle_entry(cont[ci])
+		if ($0 !~ /^#/  &&  country == $2) {
+		  cc = $1
+		  break
 		}
 	      }
+	      nlines = split(TZ_ZONE_TABLE, line, /\n/)
+	      for (i = 1; i <= nlines; i++) {
+		$0 = line[i]
+		if ($0 ~ /^#/) continue
+		if ($1 ~ cc)
+		  print $4
+	      }
 	    }
-          ' ="$TZ_ZONE_TABLE" |
-	  sort -u |
-	  tr '\n' ' '
-	  echo ''
-	`
+	  ' ="$country" ="$TZ_COUNTRY_TABLE" ="$zone_table"
+      `
 
-	eval '
-	    doselect '"$quoted_continents"' \
-		"coord - I want to use geographical coordinates." \
-		"TZ - I want to specify the timezone using the POSIX TZ format." \
-		"time - I know local time already."
-	    continent=$select_result
-	    case $continent in
-	    Americas) continent=America;;
-	    *" "*) continent=`expr "$continent" : '\''\([^ ]*\)'\''`
-	    esac
-	'
-	esac
 
-	case $continent in
-	TZ)
-		# Ask the user for a POSIX TZ string.  Check that it conforms.
-		check_POSIX_TZ_string='BEGIN {
-		  tz = substr(ARGV[1], 2)
-		  ARGV[1] = ""
-		  tzname = ("(<[[:alnum:]+-][[:alnum:]+-][[:alnum:]+-]+>" \
-			    "|[[:alpha:]][[:alpha:]][[:alpha:]]+)")
-		  time = ("(2[0-4]|[0-1]?[0-9])" \
-			  "(:[0-5][0-9](:[0-5][0-9])?)?")
-		  offset = "[-+]?" time
-		  mdate = "M([1-9]|1[0-2])\\.[1-5]\\.[0-6]"
-		  jdate = ("((J[1-9]|[0-9]|J?[1-9][0-9]" \
-			   "|J?[1-2][0-9][0-9])|J?3[0-5][0-9]|J?36[0-5])")
-		  datetime = ",(" mdate "|" jdate ")(/" time ")?"
-		  tzpattern = ("^(:.*|" tzname offset "(" tzname \
-			       "(" offset ")?(" datetime datetime ")?)?)$")
-		  if (tz ~ tzpattern) exit 1
-		  exit 0
-		}'
-
-		while
-			echo >&2 'Please enter the desired value' \
-				'of the TZ environment variable.'
-			echo >&2 'For example, AEST-10 is abbreviated' \
-				'AEST and is 10 hours'
-			echo >&2 'ahead (east) of Greenwich,' \
-				'with no daylight saving time.'
-			read tz
-			$AWK "$check_POSIX_TZ_string" ="$tz"
-		do
-		    say >&2 "'$tz' is not a conforming POSIX timezone string."
-		done
-		TZ_for_date=$tz;;
-	*)
-		case $continent in
-		coord)
-		    case $coord in
-		    '')
-			echo >&2 'Please enter coordinates' \
-				'in ISO 6709 notation.'
-			echo >&2 'For example, +4042-07403 stands for'
-			echo >&2 '40 degrees 42 minutes north,' \
-				'74 degrees 3 minutes west.'
-			read coord;;
-		    esac
-		    distance_table=`$AWK \
-			    "$output_distances_or_times" \
-			    ="$coord" ="$TZ_COUNTRY_TABLE" ="$TZ_ZONE_TABLE" |
-		      sort -n |
-		      sed "${location_limit}q"
-		    `
-		    regions=`$AWK '
-		      BEGIN {
-		        distance_table = substr(ARGV[1], 2)
-			ARGV[1] = ""
-		        nlines = split(distance_table, line, /\n/)
-			for (nr = 1; nr <= nlines; nr++) {
-			  nf = split(line[nr], f, /\t/)
-			  print f[nf]
-			}
-		      }
-		    ' ="$distance_table"`
-		    echo >&2 'Please select one of the following timezones,'
-		    echo >&2 'listed roughly in increasing order' \
-			    "of distance from $coord".
-		    doselect $regions
-		    region=$select_result
-		    tz=`$AWK '
-		      BEGIN {
-		        distance_table = substr(ARGV[1], 2)
-			region = substr(ARGV[2], 2)
-			ARGV[1] = ARGV[2] = ""
-		        nlines = split(distance_table, line, /\n/)
-			for (nr = 1; nr <= nlines; nr++) {
-			  nf = split(line[nr], f, /\t/)
-			  if (f[nf] == region) {
-			    print f[4]
-			  }
-			}
-		      }
-		    ' ="$distance_table" ="$region"`
-		    ;;
-		*)
-		case $continent in
-		time)
-		  minute_format='%a %b %d %H:%M'
-		  old_minute=`TZ=UTC0 date +"$minute_format"`
-		  for i in 1 2 3
-		  do
-		    time_table_command=`$AWK \
-		          -v output_times=1 \
-			  "$output_distances_or_times" \
-			  = = ="$TZ_ZONE_TABLE"
-		    `
-		    time_table=`eval "$time_table_command"`
-		    new_minute=`TZ=UTC0 date +"$minute_format"`
-		    case $old_minute in
-		    "$new_minute") break;;
-		    esac
-		    old_minute=$new_minute
-		  done
-		  echo >&2 "The system says Universal Time is $new_minute."
-		  echo >&2 "Assuming that's correct, what is the local time?"
-		  sorted_table=`say "$time_table" | sort -k2n -k2,5 -k1n` || {
-		      say >&2 "$0: cannot sort time table"
-		      exit 1
-		  }
-		  eval doselect `
-		    $AWK 'BEGIN {
-		     sorted_table = substr(ARGV[1], 2)
-		     ARGV[1] = ""
-		     nlines = split(sorted_table, line, /\n/)
-		     for (i = 1; i <= nlines; i++) {
-		      $0 = line[i]
-		      outline = $6 " " $7 " " $4 " " $5
-		      if (outline == oldline) continue
-		      oldline = outline
-		      gsub(/'\''/, "&\\\\&&", outline)
-		      printf "'\''%s'\''\n", outline
-		     }
-		    }' ="$sorted_table"
-		  `
-		  time=$select_result
-		  continent_re='^'
-		  zone_table=`
-		    $AWK 'BEGIN {
-		     time = substr(ARGV[1], 2)
-		     time_table = substr(ARGV[2], 2)
-		     ARGV[1] = ARGV[2] = ""
-		     nlines = split(time_table, line, /\n/)
-		     for (i = 1; i <= nlines; i++) {
-		      $0 = line[i]
-		      if ($6 " " $7 " " $4 " " $5 == time) {
-			sub(/[^\t]*\t/, "")
-			print
-		      }
-		     }
-		    }' ="$time" ="$time_table"
-		  `
-		  countries=`
-		     $AWK \
-			"$output_country_list" \
-			="$continent_re" ="$TZ_COUNTRY_TABLE" ="$zone_table" |
-		     sort -f
-		  `
-		  ;;
-		*)
-		  continent_re="^$continent/"
-		  zone_table=$TZ_ZONE_TABLE
-		esac
-
-		# Get list of names of countries in the continent or ocean.
-		countries=`
-		    $AWK \
-			"$output_country_list" \
-			="$continent_re" ="$TZ_COUNTRY_TABLE" ="$zone_table" |
-		    sort -f
-		`
-
-		# If there's more than one country, ask the user which one.
-		case $countries in
-		*"$newline"*)
-			echo >&2 'Please select a country' \
-				'whose clocks agree with yours.'
-			doselect $countries
-			country_result=$select_result
-			country=$select_result;;
-		*)
-			country=$countries
-		esac
-
-
-		# Get list of timezones in the country.
-		regions=`
-		  $AWK \
-		    '
-			BEGIN {
-				country = substr(ARGV[1], 2)
-				TZ_COUNTRY_TABLE = substr(ARGV[2], 2)
-				TZ_ZONE_TABLE = substr(ARGV[3], 2)
-				ARGV[1] = ARGV[2] = ARGV[3] = ""
-				FS = "\t"
-				cc = country
-				nlines = split(TZ_COUNTRY_TABLE, line, /\n/)
-				for (i = 1; i <= nlines; i++) {
-					$0 = line[i]
-					if ($0 !~ /^#/  &&  country == $2) {
-						cc = $1
-						break
-					}
-				}
-				nlines = split(TZ_ZONE_TABLE, line, /\n/)
-				for (i = 1; i <= nlines; i++) {
-				  $0 = line[i]
-				  if ($0 ~ /^#/) continue
-				  if ($1 ~ cc)
-				    print $4
-				}
-			}
-		    ' ="$country" ="$TZ_COUNTRY_TABLE" ="$zone_table"
-		`
-
-
-		# If there's more than one region, ask the user which one.
-		case $regions in
-		*"$newline"*)
-			echo >&2 'Please select one of the following timezones.'
-			doselect $regions
-			region=$select_result
-		esac
-
-		# Determine tz from country and region.
-		tz=`
-		  $AWK \
-		    '
-			BEGIN {
-				country = substr(ARGV[1], 2)
-				region = substr(ARGV[2], 2)
-				TZ_COUNTRY_TABLE = substr(ARGV[3], 2)
-				TZ_ZONE_TABLE = substr(ARGV[4], 2)
-				ARGV[1] = ARGV[2] = ARGV[3] = ARGV[4] = ""
-				FS = "\t"
-				cc = country
-				nlines = split(TZ_COUNTRY_TABLE, line, /\n/)
-				for (i = 1; i <= nlines; i++) {
-					$0 = line[i]
-					if ($0 !~ /^#/  &&  country == $2) {
-						cc = $1
-						break
-					}
-				}
-				nlines = split(TZ_ZONE_TABLE, line, /\n/)
-				for (i = 1; i <= nlines; i++) {
-				  $0 = line[i]
-				  if ($0 ~ /^#/) continue
-				  if ($1 ~ cc && ($4 == region || !region))
-				    print $3
-				}
-			}
-		    ' ="$country" ="$region" ="$TZ_COUNTRY_TABLE" ="$zone_table"
-		`;;
-		esac
-
-		# Make sure the corresponding zoneinfo file exists.
-		TZ_for_date=$TZDIR/$tz
-		<"$TZ_for_date" || {
-			say >&2 "$0: time zone files are not set up correctly"
-			exit 1
+      # If there's more than one region, ask the user which one.
+      case $regions in
+      *"$newline"*)
+	echo >&2 'Please select one of the following timezones.'
+	doselect $regions
+	region=$select_result
+      esac
+
+      # Determine tz from country and region.
+      tz=`
+	$AWK \
+	  '
+	    BEGIN {
+	      country = substr(ARGV[1], 2)
+	      region = substr(ARGV[2], 2)
+	      TZ_COUNTRY_TABLE = substr(ARGV[3], 2)
+	      TZ_ZONE_TABLE = substr(ARGV[4], 2)
+	      ARGV[1] = ARGV[2] = ARGV[3] = ARGV[4] = ""
+	      FS = "\t"
+	      cc = country
+	      nlines = split(TZ_COUNTRY_TABLE, line, /\n/)
+	      for (i = 1; i <= nlines; i++) {
+		$0 = line[i]
+		if ($0 !~ /^#/  &&  country == $2) {
+		  cc = $1
+		  break
 		}
-	esac
+	      }
+	      nlines = split(TZ_ZONE_TABLE, line, /\n/)
+	      for (i = 1; i <= nlines; i++) {
+		$0 = line[i]
+		if ($0 ~ /^#/) continue
+		if ($1 ~ cc && ($4 == region || !region))
+		  print $3
+	      }
+	    }
+	  ' ="$country" ="$region" ="$TZ_COUNTRY_TABLE" ="$zone_table"
+      `;;
+    esac
 
+    # Make sure the corresponding zoneinfo file exists.
+    TZ_for_date=$TZDIR/$tz
+    <"$TZ_for_date" || {
+      say >&2 "$0: time zone files are not set up correctly"
+      exit 1
+    }
+  esac
 
-	# Use the proposed TZ to output the current date relative to UTC.
-	# Loop until they agree in seconds.
-	# Give up after 8 unsuccessful tries.
 
-	extra_info=
-	for i in 1 2 3 4 5 6 7 8
-	do
-		TZdate=`LANG=C TZ="$TZ_for_date" date`
-		UTdate=`LANG=C TZ=UTC0 date`
-		TZsec=`expr "$TZdate" : '.*:\([0-5][0-9]\)'`
-		UTsec=`expr "$UTdate" : '.*:\([0-5][0-9]\)'`
-		case $TZsec in
-		$UTsec)
-			extra_info="
+  # Use the proposed TZ to output the current date relative to UTC.
+  # Loop until they agree in seconds.
+  # Give up after 8 unsuccessful tries.
+
+  extra_info=
+  for i in 1 2 3 4 5 6 7 8
+  do
+    TZdate=`LANG=C TZ="$TZ_for_date" date`
+    UTdate=`LANG=C TZ=UTC0 date`
+    TZsec=`expr "$TZdate" : '.*:\([0-5][0-9]\)'`
+    UTsec=`expr "$UTdate" : '.*:\([0-5][0-9]\)'`
+    case $TZsec in
+    $UTsec)
+      extra_info="
 Selected time is now:	$TZdate.
 Universal Time is now:	$UTdate."
-			break
-		esac
-	done
-
-
-	# Output TZ info and ask the user to confirm.
-
-	echo >&2 ""
-	echo >&2 "Based on the following information:"
-	echo >&2 ""
-	case $time%$country_result%$region%$coord in
-	?*%?*%?*%)
-	  say >&2 "	$time$newline	$country_result$newline	$region";;
-	?*%?*%%|?*%%?*%) say >&2 "	$time$newline	$country_result$region";;
-	?*%%%) say >&2 "	$time";;
-	%?*%?*%) say >&2 "	$country_result$newline	$region";;
-	%?*%%)	say >&2 "	$country_result";;
-	%%?*%?*) say >&2 "	coord $coord$newline	$region";;
-	%%%?*)	say >&2 "	coord $coord";;
-	*)	say >&2 "	TZ='$tz'"
-	esac
-	say >&2 ""
-	say >&2 "TZ='$tz' will be used.$extra_info"
-	say >&2 "Is the above information OK?"
-
-	doselect Yes No
-	ok=$select_result
-	case $ok in
-	Yes) break
-	esac
+      break
+    esac
+  done
+
+
+  # Output TZ info and ask the user to confirm.
+
+  echo >&2 ""
+  echo >&2 "Based on the following information:"
+  echo >&2 ""
+  case $time%$country_result%$region%$coord in
+  ?*%?*%?*%)
+    say >&2 "	$time$newline	$country_result$newline	$region";;
+  ?*%?*%%|?*%%?*%) say >&2 "	$time$newline	$country_result$region";;
+  ?*%%%)	say >&2 "	$time";;
+  %?*%?*%)	say >&2 "	$country_result$newline	$region";;
+  %?*%%)	say >&2 "	$country_result";;
+  %%?*%?*)	say >&2 "	coord $coord$newline	$region";;
+  %%%?*)	say >&2 "	coord $coord";;
+  *)		say >&2 "	TZ='$tz'"
+  esac
+  say >&2 ""
+  say >&2 "TZ='$tz' will be used.$extra_info"
+  say >&2 "Is the above information OK?"
+
+  doselect Yes No
+  ok=$select_result
+  case $ok in
+  Yes) break
+  esac
 do coord=
 done
 
 case $SHELL in
 *csh) file=.login line="setenv TZ '$tz'";;
-*) file=.profile line="TZ='$tz'; export TZ"
+*)    file=.profile line="TZ='$tz'; export TZ"
 esac
 
 test -t 1 && say >&2 "
-- 
2.40.1




More information about the tz mailing list