#!/bin/bash
# -*- ENCODING: UTF-8 -*-

# picatc
#
# Convert between local times.
#
# Copyright (c) 2013-2026: Alexis Puente Montiel   < pica (a) picalibre.org >
#
# Licensed according to GNU AGPL version 3.0.
#
# It is libre/free software; you can use, redistribute and/or modify it according to the terms of GNU AGPL as published by GNU, version 3.0, 19 November 2007.
#
# It is distributed in the hope that it will be useful, but without any warranty. Read GNU AGPL version 3.0 for additional details.
#
# A copy of GNU AGPL version 3.0 is available at /usr/share/doc/<software-package-name>/agpl-3.0.txt (additionally on Internet as text at https://www.gnu.org/licenses/agpl-3.0.txt and as HTML at https://www.gnu.org/licenses/agpl-3.0-standalone.html ).
#
# Note: Additionally to the official e-mails, picalibre.org is strictly the only official site for this software project, please consider using it to download, report bugs and contribute.
#
# Depends: bash, coreutils, dialog | yad | yad-pica | zenity, gawk | mawk | original-awk, grep, sed, tzdata
# Recommends: x11-xkb-utils


### SCRIPT VARIABLES ########################################

CNAME="picatc"
VERSION="1.3.1"
TITLE="PicaTC"
ICON="/usr/share/icons/picatc.png"

# Translations
if [ "$LANG" = "" ] ; then export $(cat /etc/default/locale | grep -a 'LANG=') ; fi
TEXTDOMAIN=picatc
TEXTDOMAINDIR=/usr/share/locale/

# Write errors to log
ERRORLOG="$HOME/.${CNAME}.log"
if [ -e "$ERRORLOG" ] ; then
	mv -f $ERRORLOG ${ERRORLOG}.ant
fi
if [ -e "$ERRORLOG" ] ; then rm -rf "$ERRORLOG" ; fi

for i in /etc/pica-global.dist /etc/pica-global.orig /etc/pica-global /etc/pica-global.local ~/.pica-global ~/pica-global ; do
	if [ -f "$i" ] ; then
	cat "$i"
	source "$i"
	source <(cat $i | sed -e "s/=\(YES\|Yes\|yes\|y\|SÍ\|SI\|Sí\|Si\|sí\|si\|S\|s\)/=Y/g" -e "s/=\(No\|no\|n\)/=N/g" -e "s/=\"\(YES\|Yes\|yes\|y\|SÍ\|SI\|Sí\|Si\|sí\|si\|S\|s\)\"/=Y/g" -e "s/=\"\(No\|no\|n\)\"/=N/g")
	fi
done
if [ "$DEBUG" = "Y" ] ; then
	set -xv
	DEBUG="Y"
else
	ERRORLOG="/tmp/.${CNAME}_$(id -nu).log"
	if [ -e "$ERRORLOG" ] ; then mv -f $ERRORLOG ${ERRORLOG}.ant ; fi
	if [ -e "$ERRORLOG" ] ; then rm -rf "$ERRORLOG" ; fi
fi
if [ "$DEBUG" = "" ] ; then DEBUG="N" ; fi
if [ "$DEBUG" != "N" ] ; then
exec > >(tee -a "$ERRORLOG") 2>&1
echo "$0" "$*" >> "$ERRORLOG"
echo "$CNAME" "$VERSION" >> "$ERRORLOG"
echo $(date +%Y-%m-%d_%H:%M:%S) $"Start" >> "$ERRORLOG"
echo "env:" >> "$ERRORLOG"
env >> "$ERRORLOG"
echo "set:" >> "$ERRORLOG"
set >> "$ERRORLOG"
#else
#exec 2>>"$ERRORLOG"
fi

# Description:
BDESCRIP=$"Convert between local times."
LDESCRIP=$"$TITLE is a tool to convert between local times."

# Documentation:
docu_info () {
echo "$CNAME ($VERSION) - $BDESCRIP"
echo 
echo $"Usage:" $CNAME [$"OPTIONS"]
echo 
echo $"Options:"
echo -e "$ODESCRIP"
echo 
echo $"'man $CNAME' for more information."
echo 
}
ODESCRIP=" -t""\t"$"Use terminal interface.""\n"" -k""\t"$"Use 'kdialog' if possible.""\n"" -y""\t"$"Use 'yad' if possible (by default in graphical sessions).""\n"" -z""\t"$"Use 'zenity' if possible.""\n"" -x""\t"$"Show help documentation."

while getopts tkyzx OPTION ; do
	case $OPTION in
		t )   T="Y" ; G="N"      ;;
		k )   SDIALOG="kdialog"  ;;
		y )   SDIALOG="yad"      ;;
		z )   SDIALOG="zenity"   ;;
		x )   docu_info ; exit 0 ;;
	esac
done


### DIALOG ########################################

#DEFAULTDIALOGLIST="yad zenity kdialog"
DEFAULTDIALOGLIST="yad zenity"

#if [ -t 0 ] ; then
if [ "$(setxkbmap 1>/dev/null 2>&1 ; echo $? )" -ne 0 ] ; then
	G="N" ; T="Y"
fi

if [ "$G" != "N" ] ; then
	
	if   [ "$SDIALOG" = "kdialog" ] ; then
		DIALOGLIST="kdialog yad zenity"
	elif [ "$SDIALOG" = "yad" ] ; then
		DIALOGLIST="yad zenity kdialog"
	elif [ "$SDIALOG" = "zenity" ] ; then
		DIALOGLIST="zenity yad kdialog"
	else
		DIALOGLIST="$DEFAULTDIALOGLIST"
	fi
	
	if [ "$DIALOGLIST" = "" ] ; then
		if [ "$DEFAULTDIALOGLIST" != "" ] ; then
			DIALOGLIST="$DEFAULTDIALOGLIST"
		else
			DIALOGLIST="yad zenity kdialog"
		fi
	fi
	
	if [ "$(command -v $DIALOGLIST)" = "" ] ; then
		G="N" ; T="Y"
	fi

fi


if [ "$G" = "N" ] ; then

	if [ "$(command -v dialog)" = "" ] ; then
		echo $"ERROR: No supported dialog is installed. $TITLE cannot continue."
		exit 1
	else
		
		DIALOG="dialog --cr-wrap --keep-window --output-fd 1"
		#DIALOG="dialog --cr-wrap --keep-window --output-fd 1 --no-lines --no-shadow"
		if [ "$TITLE" != "" ] ; then
			WICON="--backtitle $(echo $TITLE | sed 's| |-|g')"
		fi
		WTITLE="--title"
		WTEXT=""
		H="0"
		W="0"
		LH="0"
		CALENDAR="--calendar"
		DATEFORMAT="--date-format %Y-%m-%d"
		WTIME="--timebox"
		TIMEFORMAT="--time-format %H:%M:%S"
		DSEL="--dselect"
		FSEL="--fselect"
		WRITE="--inputbox"
		PREWRITE=""
		COLUMN=""
		PRINTCOLUMN1=""
		PRINTCOLUMN2=""
		HIDECOLUMN1=""
		HIDECOLUMN2=""
		#INPUTSEPARATOR="--column-separator"
		#OUTPUTSEPARATOR="--separate-output"
		MONOLIST="--menu"
		#MONOLIST="--radiolist"
		MULTIPLELIST="--separate-output --checklist"
		PRE=""
		POST="off"
		PRES=""
		POSTS="on"

		INFO="--msgbox"
		WAIT="--infobox"

		QYN="--yesno"
		QYNC="--yesno"
		WYN="--yesno"
		WCC="--yesno"
		WYNC="--yesno"
		WM="--msgbox"
		ERROR="--msgbox"

		FORM="--form"
		FORMT=""
		FORMSELPRE=""
		FORMSELPOST=""
		#FORMCALPRE=""
		#FORMCALPOST=""
		#FORMCLPRE=""
		#FORMCLPOST=""
		PRELAB1="1 1"
		POSTLAB1="1 10 999 0"
		PRELAB2="2 1"
		POSTLAB2="2 10 999 0"
		PRELAB3="3 1"
		POSTLAB3="3 10 999 0"

		YES="--yes-label"
		NO="--no-label"
		OK="--ok-label"
		CONTINUE="--ok-label"
		CANCEL="--cancel-label"
		EXTRABUTTON="--extra-button --extra-label"
	
	fi

else

	for i in $DIALOGLIST ; do

		if [ "$(command -v $i)" != "" ] ; then
	
			if [ "$i" = "yad" ] ; then
		
				if [ "$(yad --version | tail -n 1 | cut -d ' ' -f 1 | cut -d '.' -f 1)" -lt 2 ] ; then
					DIALOG="yad --center"  # --selectable-labels (bug in Yad < 2.0) https://github.com/v1cont/yad/blob/master/NEWS
				else
					DIALOG="yad --center --selectable-labels"  # --on-top
				fi
				if [ "$ICON" != "" ] ; then
					WICON="--window-icon $ICON"
				fi
				WTITLE="--title"
				WTEXT="--text"
				H=""
				if [ "$(yad --version | tail -n 1 | grep -aE ^'7.2')" != "" ] ; then
					W="--width=640"
				else
					W="--width=640 --text-width=640 --fixed"  # https://github.com/v1cont/yad/issues/107  https://github.com/v1cont/yad/issues/140
				fi
				LH=""
				CALENDAR="--calendar"
				DATEFORMAT="--date-format %Y-%m-%d"
				WTIME="--separator=\n --columns 3 --form"
				#TIMEFORMAT="--time-format %H:%M:%S"
				DSEL="--file --directory --filename"  # Deleted *-selection alias for --file in Yad 4.0
				FSEL="--file --filename"              # Deleted *-selection alias for --file in Yad 4.0
				WRITE="--entry"
				PREWRITE="--entry-text"
				COLUMN="--column="
				PRINTCOLUMN1="--print-column=01"
				PRINTCOLUMN2="--print-column=02"
				HIDECOLUMN1="--hide-column=01"
				HIDECOLUMN2="--hide-column=02"
				#INPUTSEPARATOR="--item-separator"
				#OUTPUTSEPARATOR="--separator="
				#MONOLIST="--entry"
				MONOLIST="--separator=\n --list --search-column=1 --no-headers"
				MONOLISTH="--separator=\n --list --search-column=1"
				MULTIPLELIST="--separator= --list --checklist --search-column=2 --no-headers"
				MULTIPLELISTH="--separator= --list --checklist --search-column=2"
				PRE="FALSE"
				POST=""
				PRES="TRUE"
				POSTS=""
				# standard gtk keybindings for next and previous search are ctrl+g and ctrl+shift+g while you can redefine them in gtk-keys.css for your theme  # https://github.com/v1cont/yad/issues/127
			
				INFO="--image=/usr/share/icons/picalibre/rm/play.png --button="$"OK"
				WAIT="--image=/usr/share/icons/picalibre/rm/play.png --no-buttons"
			
				QYN="--image=/usr/share/icons/picalibre/rm/question.png --button="$"Yes"":0 --button="$"No"":1"
				QYNC="--image=/usr/share/icons/picalibre/rm/question.png --button="$"Yes"":0 --button="$"No"":1 --button="$"Cancel"":1"
				WYN="--image=/usr/share/icons/picalibre/rm/warning.png --button="$"Yes"":0 --button="$"No"":1"
				WCC="--image=/usr/share/icons/picalibre/rm/warning.png --button="$"Continue"":0 --button="$"Cancel"":1"
				WYNC="--image=/usr/share/icons/picalibre/rm/warning.png --button="$"Yes"":0 --button="$"No"":1 --button="$"Cancel"":1"
				WM="--image=/usr/share/icons/picalibre/rm/warning.png --button="$"OK"
				ERROR="--image=/usr/share/icons/picalibre/rm/error.png --button="$"OK"
			
				FORM="--separator=\n --form"
				FORMT="--field"
				FORMSELPRE="--field"
				FORMSELPOST=":FL"
				FORMCALPRE="--field"
				FORMCALPOST=":DT"
				FORMCLPRE="--field"
				FORMCLPOST=":CB"
				PRELAB1=""
				POSTLAB1=""
				PRELAB2=""
				POSTLAB2=""
				PRELAB3=""
				POSTLAB3=""
			
				YES="--button"
				NO="--button"
				OK="--button"
				CONTINUE="--button"
				CANCEL="--button"
				EXTRABUTTON="--button"
		
			elif [ "$i" = "zenity" ] ; then
		
				DIALOG="zenity"
				if [ "$ICON" != "" ] ; then
					WICON="--window-icon $ICON"
				fi
				WTITLE="--title"
				WTEXT="--text"
				H=""
				W="--width=640"
				LH=""
				CALENDAR="--calendar"
				DATEFORMAT="--date-format %Y-%m-%d"
				WTIME="--separator : --forms"
				#TIMEFORMAT="--time-format %H:%M:%S"
				DSEL="--file-selection --directory --filename"
				FSEL="--file-selection --filename"
				WRITE="--entry"
				PREWRITE="--entry-text"
				COLUMN="--column="
				PRINTCOLUMN1="--print-column=01"
				PRINTCOLUMN2="--print-column=02"
				HIDECOLUMN1="--hide-column=01"
				HIDECOLUMN2="--hide-column=02"
				#INPUTSEPARATOR=""
				#OUTPUTSEPARATOR="--separator=\n"
				MONOLIST="--separator=\n --list --hide-header"
				MONOLISTH="--separator=\n --list"
				MULTIPLELIST="--separator=\n --list --checklist --hide-header"
				MULTIPLELISTH="--separator=\n --list --checklist"
				PRE="FALSE"
				POST=""
				PRES="TRUE"
				POSTS=""
			
				INFO="--info"
				WAIT="--info"
			
				QYN="--question"
				QYNC="--question"
				WYN="--question"
				WCC="--question"
				WYNC="--question"
				WM="--warning"
				ERROR="--error"
			
				FORM="--forms"
				FORMT="--add-entry"
				FORMSELPRE="--add-entry"
				FORMSELPOST=""
				FORMCALPRE="--add-calendar"
				FORMCALPOST=""
				if [ "$(zenity --version | cut -d '.' -f 1 )" -ge 3 ] || [ "$(zenity --version | sed 's|\.||g')" -ge 3102 ] ; then
					FORMCLPOST="--combo-values"
					FORMCLPRE="--add-combo"
				fi
				PRELAB1=""
				POSTLAB1=""
				PRELAB2=""
				POSTLAB2=""
				PRELAB3=""
				POSTLAB3=""
			
				# Zenity <3 does not support custom buttons.
				if [ "$(zenity --version | cut -d '.' -f 1 )" -ge 3 ] ; then
					YES="--ok-label"
					NO="--cancel-label"
					OK="--ok-label"
					CONTINUE="--ok-label"
					CANCEL="--cancel-label"
					#EXTRABUTTON=""
				fi
		
#			elif [ "$i" = "kdialog" ] ; then
#		
#				# CAUTION: All 'kdialog' (TDE, KDE Plasma 4, KDE Plasma 5, KDE Plasma 6,...) are included here!
#			
#				DIALOG="kdialog"
#				if [ "$ICON" != "" ] ; then
#					WICON="--icon $ICON"
#				fi
#				WTITLE="--title"
#				WTEXT=""
#				H=""
#				W=""
#				LH=""
#				# No "--calendar" in TDE-kdialog + No "--date-format" both TDE and Plasma = There is no usable version of kdialog for calendars
#				#CALENDAR="--calendar"
#				#DATEFORMAT="--date-format %Y-%m-%d"
#				#WTIME="--timebox"
#				#TIMEFORMAT="--time-format %H:%M:%S"
#				DSEL="--getexistingdirectory"
#				FSEL="--getsavefilename"
#				#FSEL="--getopenfilename"
#				WRITE="--inputbox"
#				PREWRITE=""
#				COLUMN=""
#				PRINTCOLUMN1=""
#				PRINTCOLUMN2=""
#				HIDECOLUMN1=""
#				HIDECOLUMN2=""
#				#INPUTSEPARATOR=""
#				#OUTPUTSEPARATOR="--separate-output"
#				MONOLIST="--menu"
#				#MONOLIST="--combobox"
#				#MONOLIST="--radiolist"
#				MULTIPLELIST="--separate-output --checklist"
#				PRE=""
#				POST="off"
#				PRES=""
#				POSTS="on"
#			
#				INFO="--msgbox"
#				WAIT="--msgbox"
#			
#				QYN="--yesno"
#				QYNC="--yesnocancel"
#				WYN="--warningyesno"
#				WCC="--warningcontinuecancel"
#				WYNC="--warningyesnocancel"
#				WM="--sorry"
#				ERROR="--error"
#			
#				# No "--form" in any kdialog version
#				#FORM="--form"
#				#FORMT=""
#				#FORMSELPRE=""
#				#FORMSELPOST=""
#				#FORMCALPRE=""
#				#FORMCALPOST=""
#				#FORMCLPRE=""
#				#FORMCLPOST=""
#				#PRELAB1=""
#				#POSTLAB1=""
#				#PRELAB2=""
#				#POSTLAB2=""
#				#PRELAB3=""
#				#POSTLAB3=""
#			
#				# TDE-kdialog does not support custom buttons.
#				if [ "$(kdialog --version | grep -a Qt | grep -aEo "[0-9]" | head -n 1)" -ge 4 ] || [ "$(kdialog --version | grep -aEi kdialog | grep -aEo "[0-9]" | head -n 1)" -gt 1 ] ; then
#					YES="--yes-label"
#					NO="--no-label"
#					OK="--continue-label"
#					CONTINUE="--continue-label"
#					CANCEL="--cancel-label"
#					EXTRABUTTON="--cancel-label"
#				fi
		
			else
		
				true
		
			fi
		
		if [ "$DIALOG" != "" ] ; then break ; fi
		
		fi

	done

fi

if [ "$DIALOG" = "" ] ; then
	echo $"ERROR: No supported dialog is installed. $TITLE cannot continue."
	exit 1
fi


### BASICFUN ########################################

check_exit () {

TAILERRORLOG=$(cat "$ERRORLOG" | grep -aE "[a-zA-Z0-9\=\[]" | tail -n 10 )

echo $(date +%Y-%m-%d_%H:%M:%S)

$DIALOG $WICON $WTITLE "$TITLE" $ERROR $WTEXT $"Stop due to error.\n\n$TAILERRORLOG\n" $H $W

exit 1

}

# "try again or exit" dialog window
input_error () {

echo $(date +%Y-%m-%d_%H:%M:%S)

$DIALOG $WICON $WTITLE "$TITLE" $WYN   $WTEXT $"Something went wrong.\n\nDo you want to try again?" $H $W

if [ "$?" -ne 0 ] ; then
	exit 1
else
	$REFUN
fi

}


### WELCOME ########################################

if [ "$WELCOME" != "N" ] ; then

$DIALOG $WICON $WTITLE "$TITLE" $INFO  $WTEXT $"Welcome to $TITLE.\n\n$TITLE is a tool to convert between local times.\n\n$TITLE is libre/free software, licensed according to 'GNU AGPL version 3.0'.\n\nIt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY.\n\nMore information at www.picalibre.org\n" $H $W

if [ "$?" -ne 0 ] ; then
	exit 0
fi

fi


### CLOCK CHECK ########################################

YMD="$(date +%Y-%m-%d)"
if [ "$(date +%Y)" -lt 2025 ] ; then
	$DIALOG $WICON $WTITLE "$TITLE" $WM    $WTEXT $"The clock seems to be in the past: $YMD \nIf it is a computer with a button battery to keep time, then the button battery probably needs to be replaced (if this is not the first time this computer is turned on), to prevent the clock reverting to the past every time the computer loses power." $H $W
fi


### SCRIPT ########################################

### Origin

sel_orig () {

SELORIG=$($DIALOG $WICON $WTITLE "$TITLE" $MONOLIST $WTEXT $"Step 1: Please select an option:" $H $W $LH $COLUMN $COLUMN \
$"Write (or paste) the time in its original time zone" " " \
$"Select a file with the time (or a list of times) in its/their original time zone(s)" " " \
$"Close" " " \
| head -n 1 )

if [ "$?" -ne 0 ] || [ "$SELORIG" = "" ] ; then
	exit 0
fi

case $SELORIG in

$"Close" )
	exit 0
;;

$"Write (or paste) the time in its original time zone" )
	
	FORIG="1"
	
	PROPORIG=$(date +%Y-%m-%d' '%H:%M' '%:z)
	#PROPORIG=$(echo TZ=$(cat /etc/timezone) date +%Y-%m-%d' '%H:%M)
	
	PREORIG=$($DIALOG $WICON $WTITLE "$TITLE" $WRITE $WTEXT $"Please write the date/time/zone in 'YYYY-mm-dd HH:MM Zone' or similar format, where 'YYYY' is the year, 'mm' is the month (1 to 12), 'dd' is the day (1 to 31), 'HH' is the hour (0 to 23), 'MM' is the minute (0 to 59) and 'Zone' is the time zone, for example:\n\n$PROPORIG\n\nIf left blank, the current date/time/zone of the operating system will be used.\n\n" $H $W)

		if [ "$?" -ne 0 ] ; then
			exit 0
		fi

		if [ "$PREORIG" = "" ] ; then
			ORIG="now"
		else
			ORIG="$(date +%Y-%m-%d' '%H:%M' '%:z -d @$(date +%s -d "$PREORIG"))"
		fi
		
		if [ "$ORIG" = "" ] ; then
			REFUN=sel_orig
			input_error ; return
		fi
	
;;

$"Select a file with the time (or a list of times) in its/their original time zone(s)" )

	FORIG="L"
	
	ORIG=$($DIALOG $WICON $WTITLE $"Select the file" $FSEL /home/ $H $W)
	
		if [ "$?" -ne 0 ] ; then
			exit 0
		fi
	
		if [ "$ORIG" = "" ] ; then
			REFUN=sel_orig
			input_error ; return
		fi
	
		if [ ! -f "$ORIG" ] ; then
			REFUN=sel_orig
			input_error ; return
		fi
	
;;

* )
	echo "SELORIG=$SELORIG"
	REFUN=sel_orig
	input_error ; return
;;

esac

}

sel_orig

if [ "$ORIG" = "" ] ; then
	echo "ERROR: ORIG=$ORIG"
	check_exit
fi


### Destination

sel_dest () {

SELDEST=$($DIALOG $WICON $WTITLE "$TITLE" $MONOLIST $WTEXT $"Step 2: Please select an option:" $H $W $LH $COLUMN $COLUMN \
$"Write (or paste) the time zone (or a list of time zones, separated by spaces) to convert to" " " \
$"Select a file with the time zone (or a list of time zones) to convert to" " " \
$"Select from a list the time zone(s) to convert to" " " \
$"Close" " " \
| head -n 1 )

if [ "$?" -ne 0 ] || [ "$SELDEST" = "" ] ; then
	exit 0
fi

case $SELDEST in

$"Close" )
	exit 0
;;

$"Write (or paste) the time zone (or a list of time zones, separated by spaces) to convert to" )
	
	PREDEST1=$(cat /etc/timezone)
	PREDEST2="UTC$(echo $(date +%:z) | sed 's|+0|+|g' | sed 's|-0|-|g' | sed "s|:.*||g")"
	
	PREDESTLIST=$($DIALOG $WICON $WTITLE "$TITLE" $WRITE $WTEXT $"Please write the time zone(s) as Continent/Capital or UTC (separated by spaces if there are several, not commas or other signs), for example:\n\n$PREDEST1\n$PREDEST2\n\nIf left blank, the time zone of the operating system will be used.\n\n" $H $W)

		if [ "$?" -ne 0 ] ; then
			exit 0
		fi

		if [ "$PREDESTLIST" = "" ] ; then
			if [ "$PREDEST1" != "" ] ; then
				PREDESTLIST="$PREDEST1"
			elif [ "$PREDEST2" != "" ] ; then
				PREDESTLIST="$PREDEST2"
			else
				check_exit
			fi
		fi
	
	DESTLIST=$(echo $PREDESTLIST)
	
;;

$"Select a file with the time zone (or a list of time zones) to convert to" )
	
	PREDESTLIST=$($DIALOG $WICON $WTITLE $"Select the file" $FSEL /home/ $H $W)
	
		if [ "$?" -ne 0 ] ; then
			exit 0
		fi
	
		if [ "$PREDESTLIST" = "" ] ; then
			REFUN=sel_dest
			input_error ; return
		fi
	
		if [ ! -f "$PREDESTLIST" ] ; then
			REFUN=sel_dest
			input_error ; return
		fi
	
	DESTLIST=$(echo $(cat $PREDESTLIST))
	
;;

$"Select from a list the time zone(s) to convert to" )
	
	ZLIST1=$(cat /usr/share/zoneinfo/zone1970.tab | grep -aE "^[A-Z]" | awk '{print $3}' | sort -u | awk '{print "'"$PRE"'",$1"\t("$1")","'"$POST"'"}' | sort -u )
	
	ZLIST2=$(for i in +{12..1} ; do printf "$PRE""\t""UTC$i""\t""(""UTC$i"")""\t""$POST""\n" ; done)

	ZLIST3=$(for i in -{1..12} ; do printf "$PRE""\t""UTC$i""\t""(""UTC$i"")""\t""$POST""\n" ; done)

	PREDESTLIST=$($DIALOG $WICON $WTITLE "$TITLE" $MULTIPLELIST $WTEXT $"Select one or more time zones:" $H $W $LH $COLUMN $COLUMN $COLUMN $ZLIST1 $ZLIST2 $ZLIST3 | sed 's|(.*)||g' | sed 's|^TRUE||g')

		if [ "$?" -ne 0 ] || [ "$PREDESTLIST" = "" ] ; then
			exit 0
		fi
	
	DESTLIST=$(echo $PREDESTLIST)
	
;;

* )
	echo "SELDEST=$SELDEST"
	REFUN=sel_dest
	input_error ; return
;;

esac

# Check

for DEST in $DESTLIST ; do

	ZLIST1=$(cat /usr/share/zoneinfo/zone1970.tab | grep -aE "^[A-Z]" | awk '{print $3}' | sort -u)
	ZLIST2=$(for i in +{12..1} ; do echo UTC$i ; done)
	ZLIST3=$(for i in -{1..12} ; do echo UTC$i ; done)

	CHECK_DEST=$(printf "$ZLIST1""\n""$ZLIST2""\n""$ZLIST3""\n" | grep -ai "^$DEST$")
	if [ "$CHECK_DEST" = "" ] ; then
		$DIALOG $WICON $WTITLE "$TITLE" $ERROR $WTEXT $"$DEST seems not to be a valid time zone." $H $W
		sel_dest
		break
		return 1
	fi
done

}

sel_dest

if [ "$DESTLIST" = "" ] ; then
	echo "ERROR: DESTLIST=$DESTLIST"
	check_exit
fi


### Result

if [ -e "/tmp/$CNAME" ] ; then
	rm -f /tmp/$CNAME
fi

if [ "$FORIG" = "L" ] ; then
#	for TZi in $DESTLIST ; do
#		(TZ="$(echo "$TZi" | sed 's|UTC-|UTC+|g;t;s|UTC+|UTC-|g')" date +%Y-%m-%d' '%H:%M -f "$ORIG" | while read l ; do printf "$l""\t""$TZi""\n" ; done | tee -a /tmp/$CNAME )
#	done
	cat "$ORIG" | grep -aEi "[a-zA-Z0-9]" | while read PREORIG ; do
		if [ "$(echo "$PREORIG" | grep -aEi ^#)" != "" ] ; then
			echo "$PREORIG" | tee -a /tmp/$CNAME
		else
			for TZi in $DESTLIST ; do
				(TZ="$(echo "$TZi" | sed 's|UTC-|UTC+|g;t;s|UTC+|UTC-|g')" date +%Y-%m-%d' '%H:%M -d "$(date +%Y-%m-%d' '%H:%M' '%:z -d @$(date +%s -d "$PREORIG"))" | while read l ; do printf "$l""\t""$TZi""\n" ; done | tee -a /tmp/$CNAME )
			done
			echo "" | tee -a /tmp/$CNAME
		fi
	done
else
	for TZi in $DESTLIST ; do
		(TZ="$(echo "$TZi" | sed 's|UTC-|UTC+|g;t;s|UTC+|UTC-|g')" date +%Y-%m-%d' '%H:%M -d "$ORIG" | while read l ; do printf "$l""\t""$TZi""\n" ; done | tee -a /tmp/$CNAME )
	done
fi

if [ "$(cat /tmp/$CNAME)" = "" ] ; then
	check_exit
fi

$DIALOG $WICON $WTITLE "$TITLE" $QYN   $WTEXT $"The result is:\n\n$(cat /tmp/$CNAME)\n\nDo you want to save the result in a file?" $H $W
		
if [ "$?" -eq 0 ] ; then

dest_dialog () {

	DDEST=$($DIALOG $WICON $WTITLE $"Please select a folder/directory for the file" $DSEL /home/ $H $W)

		if [ "$?" -ne 0 ] ; then
			return 1
		fi

		if [ "$DDEST" = "" ] ; then
			dest_dialog
			return 1
		fi

		if [ ! -d "$DDEST" ] ; then
			dest_dialog
			return 1
		fi

	if [ -e "$DDEST/$CNAME" ] ; then
		FDEST="${CNAME}_$(date +%Y-%m-%d_%H:%M:%S)"
	else
		FDEST="$CNAME"
	fi

	cp /tmp/$CNAME "$DDEST"/"$FDEST"

	$DIALOG $WICON $WTITLE "$TITLE" $INFO  $WTEXT $"The result has been saved as $DDEST/$FDEST" $H $W

}

dest_dialog

fi


### END ########################################

#$DIALOG $WICON $WTITLE "$TITLE" $INFO  $WTEXT $"$TITLE finished.\n\nThank you very much for using PicaLibre. Visit the website www.picalibre.org for more information.\n" $H $W

if [ -e "/tmp/$CNAME" ] ; then
	rm -f /tmp/$CNAME
fi

echo $(date +%Y-%m-%d_%H:%M:%S) $"End" >> "$ERRORLOG"

exit 0
