#!/bin/bash

##################################################
#                                                #
# SETTING FILE                                   #
# ~/.bashrc ~/.bash_profile                      #
# /etc/fstab-mountrc                             #
# ~/.fstab-mountrc                               #
#                                                #
# FSTAB_MOUNT_DIR = directory                    #
#         default = empty = "$HOME/.fstab-mount" #
#                                                #
# FSTAB_MOUNT_DESKTOP_NO_ICON = 1 or not 1       #
#             default = empty = not 1            #
#  not 1 : make icon in $HOME/Desktop            #
#      1 : do not make icon                      #
#                                                #
##################################################

##########################
# $ fstab-mount.sh $1    #
#                        #
# argument               #
# $1 : device_name     * #
#    : mount_directory * #
#    : LABEL             #
#    : UUID              #
#                        #
#    * symbolic link OK  #
#                        #
##########################

# exit code
# 2 device not found in fstab
# 3 cannot use directory 
# 4 no argument
# 5 media not found

# /bin/echo : need
# echo      : for check

# read /etc/fstab-mountrc
if [ -r "/etc/fstab-mountrc" ] ; then
    source /etc/fstab-mountrc
fi
# read ~/.fstab-mountrc
if [ -r "$HOME/.fstab-mountrc" ] ; then
    source "$HOME/.fstab-mountrc"
fi

# japanese message
if [ -z "$TEXTDOMAIN" ] ; then
    TEXTDOMAIN="fstab-user-mount-tool"
    TEXTDOMAINDIR="/usr/share/locale"
fi

if [ -n "$FSTAB_MOUNT_NO_ZENITY" ] || [ "$TERM" = "linux" ] ; then
    zenity_command=":"
    zenity_command_for_wait=":"
else
    zenity_command="/usr/bin/zenity"
    if [ -n "$FSTAB_MOUNT_WAIT_NO_ZENITY" ] ; then
	zenity_command_for_wait=":"
    else
	zenity_command_for_wait="/usr/bin/zenity"
    fi
fi

if [ -n "$FSTAB_MOUNT_BEEP" ] ; then
    if [ -n "$FSTAB_BEEP_COMMAND" ] ; then
	function fstab_beep { $FSTAB_BEEP_COMMAND ;}
    else
	function fstab_beep {
	    /usr/bin/setterm -blength 10
	    /bin/echo -e "\a"
	}
    fi
    
    if [ -n "$FSTAB_BEEP_NG_COMMAND" ] ; then
	function fstab_beep_ng { $FSTAB_BEEP_NG_COMMAND ;}
    else
	function fstab_beep_ng {
	    /usr/bin/setterm -blength 10
	    /bin/echo -e "\a"
	    /bin/sleep 0.3
	    /bin/echo -e "\a"
	}
    fi
else
    function fstab_beep { : ; }
    function fstab_beep_ng { : ; }
fi

if [ -z "$FSTAB_MOUNT_NO_WAIT" ] ; then
    FSTAB_MOUNT_NO_WAIT=0
fi

# no argument : exit and show error message
if [ -z "$1" ] ; then
    ERROR_MESSAGE_NEED_ARGUMENT=$"This shell script needs one argument.\n\nexample: fstab-mount /dev/fd0"
    /bin/echo -e "$ERROR_MESSAGE_NEED_ARGUMENT" >&2
#    $zenity_command --error --text="$ERROR_MESSAGE_NEED_ARGUMENT" >/dev/null &
    exit 4
fi

# no check
if [ -n "$FSTAB_MOUNT_NO_CHECK" ] ; then
    /bin/mount "$1"
    exit
fi

# nautilus check
if [ "$TERM" = "linux" ] ; then
    NAUTILUS_IS_WORKING=0
else
    NAUTILUS_IS_WORKING="`/usr/bin/pgrep nautilus | /usr/bin/wc -l`"
fi


# directory name
if [ -z "$FSTAB_MOUNT_DIR" ] ; then
    FSTAB_MOUNT_DIR="$HOME/.fstab-mount"
fi

# desktop directory name
if [ "$NAUTILUS_IS_WORKING" -ne "0" ] ; then
    if [ -x /usr/bin/gconftool-2 ] ; then
	if [ "`/usr/bin/gconftool-2 -g /apps/nautilus/preferences/desktop_is_home_dir`" = "true" ] ; then
	    DESKTOP_DIR=$HOME/
	else
	    DESKTOP_DIR=$HOME/Desktop/
	fi
    else
	DESKTOP_DIR=$HOME/Desktop/
    fi
else
    DESKTOP_DIR=$HOME/Desktop/
fi

# directory was not found -> setup
if [ ! -d "$FSTAB_MOUNT_DIR" ] ; then
    SETUP_MESSAGE_START=$"directory \$FSTAB_MOUNT_DIR : $FSTAB_MOUNT_DIR was not found.\nSetup(fstab-user-mount) starts."
    SETUP_MESSAGE_END=$"Setup has been finished.\n"

    SETUP_MESSAGE_ERROR=$"\nerror : Setup has been failed."

    /bin/echo -e "$SETUP_MESSAGE_START"
    if ( ! FSTAB_DO_NOT_OPEN_NAUTILUS=1 /usr/bin/fstab-user-mount ) ; then
	/bin/echo -e "$SETUP_MESSAGE_ERROR"
	exit 3
    fi
    /bin/echo -e "$SETUP_MESSAGE_END"
fi

LOG_FILE="$FSTAB_MOUNT_DIR/mount.log"

if [ -w "$LOG_FILE" ] ; then
    /bin/mv -f "$LOG_FILE" "$LOG_FILE.old"
fi

SCRIPT_NAME="fstab-mount"
function get_oldest_pid {
#    OLDEST_PID=`/bin/ps ax | /usr/bin/awk '{print $1,$5}'| /bin/grep "$SCRIPT_NAME" | /bin/sort -n | /usr/bin/head -n 1`
    OLDEST_PID=`/usr/bin/pgrep "$SCRIPT_NAME" | /bin/sort -n | /usr/bin/head -n 1`
}

get_oldest_pid


MY_PID="$$"
# echo "MY_PID:" "$MY_PID"


# wait other process ?
if [ "$FSTAB_MOUNT_NO_WAIT" -ne "1" ] ; then

    ##############################
    # setup for waiting other process

    # zenity message and echo message
    device_name_in_title=`/bin/basename "$1"`
    
    ZENITY_FSTAB_MOUNT_WAIT_TITLE=$"Please wait ( mount $device_name_in_title )"
    ZENITY_FSTAB_MOUNT_WAIT_MESSAGE=$"other fstab-mount is working.\n\nIf you want to start now,\nclick Cancel Button.\n\nHINT: If you do not want to wait,\nset FSTAB_MOUNT_NO_WAIT=1\nin $HOME/.fstab-mountrc."

    CONSOLE_FSTAB_MOUNT_WAIT_TITLE="$ZENITY_FSTAB_MOUNT_WAIT_TITLE"
    CONSOLE_FSTAB_MOUNT_WAIT_MESSAGE=$"other fstab-mount is working.\n\nIf you want to cancel now,\nCtrl+C.\n\nHINT: If you do not want to wait,\nset FSTAB_MOUNT_NO_WAIT=1\nin $HOME/.fstab-mountrc."


    # lock file for exiting until loop
    LOCK_FILE="$FSTAB_MOUNT_DIR/fstab-mount.lock.$MY_PID"

    
    # for trap (cancel with Ctrl+C)
    ZENITY_NO_WAIT_CANCEL_MESSAGE=$"fstab-mount ( mount $device_name_in_title ) : PID:$MY_PID : cancelled."
    function cancel_with_CTRL_C {

	# remove LOCK_FILE for exiting until loop
	if [ -e "$LOCK_FILE" ] ; then /bin/rm "$LOCK_FILE" ; fi

	/bin/echo -e "\n\n*******\n$ZENITY_NO_WAIT_CANCEL_MESSAGE\n*******"
	$zenity_command --info --text="$ZENITY_NO_WAIT_CANCEL_MESSAGE" &
	exit
    }
    
    # set up ok
    ##############################
    
    
    # process id check
    if [ "$OLDEST_PID" -ne "$MY_PID" ] ; then

	# wating other process start

	/bin/touch "$LOCK_FILE" || exit 2

	# message to console
	/bin/echo -e "$CONSOLE_FSTAB_MOUNT_WAIT_TITLE"
	/bin/echo -e "$CONSOLE_FSTAB_MOUNT_WAIT_MESSAGE"

	# until loop is in background for trap.
	(
	    until [ ! -e "$LOCK_FILE" ] || [ "$OLDEST_PID" -eq "$MY_PID" ] ;
	    do
		get_oldest_pid
		/bin/sleep 1
		
		# echo "OLDEST_PID:" "$OLDEST_PID"
		# echo "MY_PID:" "$MY_PID"
		
    		# echo for zenity
		/bin/echo ""

	    # 2>/dev/null for "Broken pipe" message from echo (by zenity's Cancel button)
	    done 2>/dev/null | $zenity_command_for_wait --progress --pulsate --auto-close --title="$ZENITY_FSTAB_MOUNT_WAIT_TITLE" --text="$ZENITY_FSTAB_MOUNT_WAIT_MESSAGE" >/dev/null
	) &
    fi 
fi

# trap for Ctrl+C
trap "cancel_with_CTRL_C" 2

# trap -p

# wait for until loop
# 1>/dev/null for Interrupt message
# 2>/dev/null for hung up message (from zenity)
wait >/dev/null 2>&1

# If zenity is cancelled by Cancel button,
# I need to finish until loop.
if [ -e "$LOCK_FILE" ] ; then
    /bin/rm "$LOCK_FILE"
fi

# clear trap for 2 (SIGINT = Ctrl+C)
trap 2

# trap -p


# directory check
if ( ! /bin/mkdir -p "$FSTAB_MOUNT_DIR" ) ; then
    ERROR_MESSAGE_DIRECTORY_CREATE=$"error : cannot create temporal directory\n\$FSTAB_MOUNT_DIR : $FSTAB_MOUNT_DIR"
    /bin/echo -e "$ERROR_MESSAGE_DIRECTORY_CREATE" >/dev/stderr
    exit 3
fi

LOG_FILE="$FSTAB_MOUNT_DIR/mount.log.$$"

date >"$LOG_FILE" 2>&1

device_name="$1"

# echo "device_name is $device_name"

#######################
# check name step1
# cut "$FSTAB_MOUNT_DIR" from $1
if [ `/bin/echo "$device_name" | /bin/grep -c "^$FSTAB_MOUNT_DIR"` -gt '0' ] ; then
    device_name="`/bin/echo $1 | /bin/sed -e s@$FSTAB_MOUNT_DIR@@ -e s@^/@@`"
fi

# echo "step1 device_name is $device_name"

#######################
# check name step2
# cut "$DESKTOP_DIR" from $1
if [ `/bin/echo "$device_name" | /bin/grep -c "^$DESKTOP_DIR"` -gt '0' ] ; then
    device_name="`/bin/echo $1 | /bin/sed s@$DESKTOP_DIR@@`"
fi

# echo "step2 device_name is $device_name"

#######################
# check name step3
# rename _dev_ /dev/ $device_name
if [ `/bin/echo "$device_name" | /bin/grep -c "^_dev_"` -gt "0" ] ; then
    device_name="`/bin/echo $device_name | /bin/sed s@_dev_@/dev/@`"
fi

# echo "step3 device_name is $device_name"

#######################
# save device_name for findfs
if [ `/bin/echo "$device_name" | /bin/grep -c "^/dev/"` -gt "0" ] ; then
    device_name_for_LABEL_UUID_check="$device_name"
    # echo "device_name_for_LABEL_UUID_check:" "$device_name_for_LABEL_UUID_check"
fi	


#######################
# check name step4
# rename _mnt_ /mnt/ $device_name
if [ `/bin/echo "$device_name" | /bin/grep -c "^_mnt_"` -gt "0" ] ; then
    device_name="`/bin/echo $device_name | /bin/sed s@_mnt_@/mnt/@`"
fi

# echo "step4 device_name is $device_name"

#######################
# check name step4-2
# rename _media_ /media/ $device_name
if [ `/bin/echo "$device_name" | /bin/grep -c "^_media_"` -gt "0" ] ; then
    device_name="`/bin/echo $device_name | /bin/sed s@_media_@/media/@`"
fi

# echo "step4-2 device_name is $device_name"

#######################
# check name step5
# LABEL?
if [ `/bin/echo "$device_name" | grep -c "^LABEL="` -eq "1" ] ; then

    device_name_tmp="`/bin/echo $device_name | sed s@/\$\@@`"
    LABEL_device="`/sbin/findfs $device_name_tmp 2>/dev/null`"
    if [ -n "$LABEL_device" ] ; then
	if [ -z "$device_name_for_LABEL_UUID_check" ] ; then
	    device_name_for_LABEL_UUID_check="$LABEL_device"
	    # echo "device_name_for_LABEL_UUID_check:" "$device_name_for_LABEL_UUID_check"
	fi
    else
	# findfs message
	/bin/cat "$LOG_FILE" >&2
    fi
fi

# echo "step5 LABEL_device is $LABEL_device"

#######################
# check name step6
# UUID?
if [ `/bin/echo "$device_name" | grep -c "^UUID="` -eq "1" ] ; then

    device_name_tmp="`/bin/echo $device_name | sed s@/\$\@@`"
    UUID_device="`/sbin/findfs $device_name_tmp 2>/dev/null`"
    if [ -n "$UUID_device" ] ; then
	if [ -z "$device_name_for_LABEL_UUID_check" ] ; then
	    device_name_for_LABEL_UUID_check="$UUID_device"
	    # echo "device_name_for_LABEL_UUID_check:" "$device_name_for_LABEL_UUID_check"
	fi
    else
	# findfs message
	/bin/cat "$LOG_FILE" >&2
    fi
fi

# echo "step6 UUID_device is $UUID_device"

# now 2 case
# 1 $device_name is device name
# 2 $device_name is mount point

# + 2 case
# LABEL_device is set
# UUID_device is set

#########################################
#########################################
# function for set mount_name from fstab


# ***** mount_name is DEVICE NAME *****
# 1 -> 1
# search device name on fstab by devicename
# keyword is in field 1 (device name) , print field 1 (device name)
function get_device_name_from_fstab_with_device_name {
    if [ -z "$device_name_in_fstab" ] ; then
	device_name_in_fstab=`/usr/bin/awk -F "\#" '{print \$1}' /etc/fstab |\
	/usr/bin/awk "\\$1 ~ \"^\$device_name$\" && \\$4 ~ /user|owner|group/ {print \\$1}" `
	
	if [ -n "$device_name_in_fstab" ] ; then
	    # echo "device_name_in_fstab:" "$device_name_in_fstab" "in_get_dn_from_fstab_with_dn"
	    
	    if [ -z "$mount_name" ] ; then
		mount_name="$device_name_in_fstab"
	    fi
	    # echo "mount_name:" "$mount_name" "in_get_dn_from_fstab_with_dn"
	fi
    fi
}

# ***** mount_name is MOUNT POINT ******
# 2 -> 2
# search mount point on fstab by mountpoint
# keyword is in field 2 , print field 2
function get_mount_point_from_fstab_with_mount_point {
    if [ -z "$mount_point_in_fstab" ] ; then
	mount_point_in_fstab=`/usr/bin/awk -F "\#" '{print \$1}' /etc/fstab |\
	/usr/bin/awk "\\$2 ~ \"^\$device_name$\" && \\$4 ~ /user|owner|group/ {print \\$2}" `
	
	if [ -n "$mount_point_in_fstab" ] ; then
	    # echo "mount_point_in_fstab:" "$mount_point_in_fstab" "in get_mp_from_fstab_with_mp"

	    if [ -z "$mount_name" ] ; then	    
		mount_name="$mount_point_in_fstab"
	    fi
	    # echo "mount_name:" "$mount_name" "in get_mp_from_fstab_with_mp"
	fi
    fi
}

# ***** mount_name is MOUNT POINT ******
# 1 -> 2
# search mount point on fstab by devicename
# keyword is in field 1 , print field 2
function get_mount_point_from_fstab_with_device_name {
    if [ -z "$mount_point_in_fstab" ] ; then
	mount_point_in_fstab=`/usr/bin/awk -F "\#" '{print \$1}' /etc/fstab |\
	/usr/bin/awk "\\$1 ~ \"^\$device_name$\" && \\$4 ~ /user|owner|group/ {print \\$2}" `
	
	if [ -n "$mount_point_in_fstab" ] ; then
	    # echo "mount_point_in_fstab:" "$mount_point_in_fstab" "in get_mp_from_fstab_with_dn"
	    
	    if [ -z "$mount_name" ] ; then
		mount_name="$mount_point_in_fstab"
	    fi
	    device_name_in_fstab="$device_name"
	    
	    # echo "mount_name:" "$mount_name" "in get_mp_from_fstab_with_dn"
	fi
    fi
}

# ***** mount_name is MOUNT POINT ******
# 2 -> 1
# search device name on fstab by mountpoint
# keyword is in field 2 (mount point) , print field 1 (device name)
function get_device_name_from_fstab_with_mount_point {
    if [ -z "$device_name_in_fstab" ] ; then
	device_name_in_fstab=`/usr/bin/awk -F "\#" '{print \$1}' /etc/fstab |\
	/usr/bin/awk "\\$2 ~ \"^\$device_name$\" && \\$4 ~ /user|owner|group/ {print \\$1}" `
	
	if [ -n "$device_name_in_fstab" ] ; then
	    # echo "device_name_in_fstab:" "$device_name_in_fstab" "in get_dn_from_fstab_with_mp"
	    
	    if [ -z "$mount_name" ] ; then
		mount_name="$device_name_in_fstab"
	    fi		
	    # echo "mount_name:" "$mount_name" "in get_dn_from_fstab_with_mp"
	fi
    fi
}

# ***** $1 is DEVICE NAME *****
# device_name -> LABEL_name
# check LABEL name with blkid
# keyword is device name , print LABEL_name
function get_LABEL_name_from_blkid_command_with_device_name_for_LABEL_UUID_check {
    # echo "$device_name_for_LABEL_UUID_check"
    if [ -n "$device_name_for_LABEL_UUID_check" ] && [ -z "$LABEL_device" ] ; then
	LABEL=`/sbin/blkid -s LABEL "$device_name_for_LABEL_UUID_check" | awk '{print $2}'`
	if [ -n "$LABEL" ] ; then
	    LABEL_device="$LABEL"
	    # remove two double quotes for awk ( LABEL="HOGE" -> LABEL=HOGE )
	    device_name="`/bin/echo $LABEL_device | sed s/\\"//g`"
	    fi
	# echo "LABEL_device:" "$LABEL_device"
	# echo "device_name:" "$device_name"
	    fi
	    }

# ***** $1 is DEVICE NAME *****
# device_name -> UUID_name
# check UUID name with blkid
# keyword is device name , print UUID_name
	    function get_UUID_name_from_blkid_command_with_device_name_for_LABEL_UUID_check {
    # echo "$device_name_for_LABEL_UUID_check"

		if [ `/bin/echo "$device_name" | /bin/grep -c "^/dev/"` -ne "1" ] ; then
		    if [ -n "$device_name_for_LABEL_UUID_check" ] && [ -z "$UUID_device" ] ; then
			UUID=`/sbin/blkid -s UUID "$device_name_for_LABEL_UUID_check" | awk '{print $2}'`
			if [ -n "$UUID" ] ; then
			    UUID_device="$UUID"
		# remove two double quotes for awk ( UUID="1234-5678" -> UUID=1234-5678 )
			    device_name="`/bin/echo $UUID_device | sed s/\\"//g `"
	fi
	    # echo "UUID_device:" "$UUID_device"
	    # echo "device_name:" "$device_name"
    fi
    fi
}


#######################
# set mount_name

function all_check {
    get_device_name_from_fstab_with_device_name
    get_mount_point_from_fstab_with_mount_point
    
    get_mount_point_from_fstab_with_device_name
    get_device_name_from_fstab_with_mount_point
}

all_check

# echo "##### after first check"
# echo "device_name:" "$device_name"
# echo "mount_name:" "$mount_name"

# echo "device_name_in_fstab:" "$device_name_in_fstab"
# echo "mount_point_in_fstab:" "$mount_point_in_fstab"

# echo "device_name_for_LABEL_UUID_check:" "$device_name_for_LABEL_UUID_check"

# rename /mnt/hoge/ /mnt/hoge
if [ -z "$mount_name" ] ; then
    device_name="`/bin/echo $device_name|sed s@/\\$@@`"
    
    all_check
fi

# echo "##### after remove /"
# echo "device_name:" "$device_name"
# echo "mount_name:" "$mount_name"

# echo "device_name_in_fstab:" "$device_name_in_fstab"
# echo "mount_point_in_fstab:" "$mount_point_in_fstab"

# echo "device_name_for_LABEL_UUID_check:" "$device_name_for_LABEL_UUID_check"

# LABEL

if [ -z "$mount_name" ] && [ -n "LABEL_device" ] ; then
    
    device_name="$LABEL_device"

    all_check
fi

# echo "##### after LABEL"
# echo "device_name:" "$device_name"
# echo "mount_name:" "$mount_name"

# echo "device_name_in_fstab:" "$device_name_in_fstab"
# echo "mount_point_in_fstab:" "$mount_point_in_fstab"

# echo "device_name_for_LABEL_UUID_check:" "$device_name_for_LABEL_UUID_check"

# echo "LABEL_device:" "$LABEL_device"
# echo "UUID_device:" "$UUID_device"


# UUID

if [ -z "$mount_name" ] && [ -n "$UUID_device" ] ; then
    
    device_name="$UUID_device"

    all_check
fi

# echo "##### after UUID"
# echo "device_name:" "$device_name"
# echo "mount_name:" "$mount_name"

# echo "device_name_in_fstab:" "$device_name_in_fstab"
# echo "mount_point_in_fstab:" "$mount_point_in_fstab"

# echo "device_name_for_LABEL_UUID_check:" "$device_name_for_LABEL_UUID_check"

# echo "LABEL_device:" "$LABEL_device"
# echo "UUID_device:" "$UUID_device"


WARNING_READ_LINK=0

if [ -z "$device_name_in_fstab" ] ; then
    if [ -z "$mount_name" ] ; then

	# $1 is a file ?
	if [ -e "$1" ] ; then
	    device_name_tmp=`/usr/bin/readlink -m "$1"`
	    if [ -e "$device_name_tmp" ] ; then
		device_name="$device_name_tmp"
	    fi

            if [ "$1" != "$device_name" ] ; then

		# cd /dev
		# fstab-mount hda1
		# hda1 --readlink--> /dev/hda1
		
		WARNING_READ_LINK=1
		WARNING_MESSAGE_READ_LINK=$"$1 is linked to $device_name.\nI use $device_name instead of $1.\n"
		
		/bin/echo -e "$WARNING_MESSAGE_READ_LINK" >> "$LOG_FILE" 2>&1
		/bin/echo -e "$WARNING_MESSAGE_READ_LINK" >&2
		
		all_check
		
		if [ `/bin/echo "$device_name_for_LABEL_UUID_check" | /bin/grep -c "^/dev/"` -ne "1" ] ; then
		    device_name_for_LABEL_UUID_check="$device_name"
		fi
	    fi
	fi
    fi
fi

# echo "##### after READ LINK"
# echo "device_name:" "$device_name"
# echo "mount_name:" "$mount_name"

# echo "device_name_in_fstab:" "$device_name_in_fstab"
# echo "mount_point_in_fstab:" "$mount_point_in_fstab"

# echo "device_name_for_LABEL_UUID_check:" "$device_name_for_LABEL_UUID_check"

# echo "LABEL_device:" "$LABEL_device"
# echo "UUID_device:" "$UUID_device"


if [ -z "$device_name_in_fstab" ] ; then
    if [ -z "$LABEL_device" ] ; then
	# device_name_in_fstab is LABEL ?

	# set LABEL_name
        get_LABEL_name_from_blkid_command_with_device_name_for_LABEL_UUID_check

	# device_name is LABEL_name
	
	all_check
    fi
fi

# echo "##### after get LABEL"
# echo "device_name:" "$device_name"
# echo "mount_name:" "$mount_name"

# echo "device_name_in_fstab:" "$device_name_in_fstab"
# echo "mount_point_in_fstab:" "$mount_point_in_fstab"

# echo "device_name_for_LABEL_UUID_check:" "$device_name_for_LABEL_UUID_check"

# echo "LABEL_device:" "$LABEL_device"
# echo "UUID_device:" "$UUID_device"


if [ -z "$device_name_in_fstab" ] ; then
    # device_name_in_fstab is UUID ?
    
    # set UUID_name
    get_UUID_name_from_blkid_command_with_device_name_for_LABEL_UUID_check
    
    # device_name is UUID_name
    
    all_check
fi

# echo "##### after get UUID"
# echo "device_name:" "$device_name"
# echo "mount_name:" "$mount_name"

# echo "device_name_in_fstab:" "$device_name_in_fstab"
# echo "mount_point_in_fstab:" "$mount_point_in_fstab"

# echo "device_name_for_LABEL_UUID_check:" "$device_name_for_LABEL_UUID_check"

# echo "LABEL_device:" "$LABEL_device"
# echo "UUID_device:" "$UUID_device"


if [ -z "$device_name_for_LABEL_UUID_check" ] ; then
    if [ `/bin/echo "$device_name_in_fstab" | /bin/grep -c "^/dev/"` -gt "0" ] ; then
	device_name_for_LABEL_UUID_check="$device_name_in_fstab"
    else
	device_name_for_LABEL_UUID_check="`/sbin/findfs $device_name_in_fstab 2>/dev/null`"
    fi
    #echo "device_name_for_LABEL_UUID_check:" "$device_name_for_LABEL_UUID_check"
fi

#########################
# check mount option users , user , owner , group

YOU_CAN_MOUNT=0

if [ -n "$device_name_in_fstab" ] ; then
    # users
    users_in_fstab=`/usr/bin/awk -F "\#" '{print \$1}' /etc/fstab |\
	/usr/bin/awk "\\$1 ~ \"^$device_name_in_fstab$\" && \\$4 ~ /users/ {print \\$1}"`

    # echo "users_in_fstab:" "$users_in_fstab"
    
    if [ -n "$users_in_fstab" ] ; then
	YOU_CAN_MOUNT=1
    fi
    
    # user
    if [ -z "$users_in_fstab" ] ; then
	user_in_fstab=`/usr/bin/awk -F "\#" '{print \$1}' /etc/fstab |\
	/usr/bin/awk "\\$1 ~ \"^$device_name_in_fstab$\" && \\$4 ~ /user/ && \\$4 !~ /users/ && \\$4 !~ /nouser/ {print \\$1}"`
	
	# echo "user_in_fstab:" "$user_in_fstab"
	
	if [ -n "$user_in_fstab" ] ; then
	    # check who mounted device
	    MY_NAME=`/usr/bin/id -nu`
	    MY_NUM=`/usr/bin/id -u`

	    WHO_MOUNT=`/usr/bin/awk "\\$1 ~ \"^\$device_name_for_LABEL_UUID_check$\" {print \\$4}" /etc/mtab | /usr/bin/awk -F "user=" "{print \\$2}"`

	    # not mounted -> WHO_MOUNT=empty
	    if [ -z "$WHO_MOUNT" ] || [ "$MY_NAME" = "$WHO_MOUNT" ] || [ "$MY_NUM" = "$WHO_MOUNT" ] ; then
		YOU_CAN_MOUNT=1
	    fi
	fi
    fi
    
    # owner
    # owner + user,users -> user,users
    if [ -z "$users_in_fstab" ] && [ -z "$user_in_fstab" ] ; then
	owner_in_fstab=`/usr/bin/awk -F "\#" '{print \$1}' /etc/fstab |\
	/usr/bin/awk "\\$1 ~ \"^$device_name_in_fstab$\" && \\$4 ~ /owner/ {print \\$1}"`
	
	# echo "owner_in_fstab:" "$owner_in_fstab"
	
	if [ -n "$owner_in_fstab" ] ; then
	    # check owner of device
	    MY_NAME=`/usr/bin/id -nu`
	    
	    # echo "owner_in_fstab:" "$owner_in_fstab"
	    # echo "device_name_for_LABEL_UUID_check:" "$device_name_for_LABEL_UUID_check"
	    OWNER_OF_DEVICE="`/usr/bin/stat --printf %U $device_name_for_LABEL_UUID_check`"
	    
	    if [ "$OWNER_OF_DEVICE" = "$MY_NAME" ] ; then
		OWNER_OK=1
		YOU_CAN_MOUNT=1
	    fi
	fi
    fi
    
    # group
    # group + user,users -> user,users
    if [ -z "$users_in_fstab" ] && [ -z "$user_in_fstab" ] ; then
	group_in_fstab=`/usr/bin/awk -F "\#" '{print \$1}' /etc/fstab |\
	/usr/bin/awk "\\$1 ~ \"^$device_name_in_fstab$\" && \\$4 ~ /group/ {print \\$1}"`
	
	# echo "group_in_fstab:" "$group_in_fstab"
	
	if [ -n "$group_in_fstab" ] ; then
	    # check group of device
	    MY_GROUP=`/usr/bin/id -nG`
	    GROUP_OF_DEVICE=`/usr/bin/stat --print "%G" "$device_name_for_LABEL_UUID_check"`
	    
	    for GROUP in $MY_GROUP ;
	    do
		# echo "$GROUP"
		if [ "$GROUP" = "$GROUP_OF_DEVICE" ] ; then
		    YOU_CAN_MOUNT=1
		fi
	    done
	fi
    fi
fi

# echo "YOU_CAN_MOUNT:" "$YOU_CAN_MOUNT"

if [ -z "$mount_name" ] ; then
    YOU_CAN_MOUNT=0
    mount_name="$1"

    # for output message
    if [ -z "$device_name" ] ; then
	device_name="$mount_name"
    fi
fi

# echo "##### after ALL"
# echo "device_name:" "$device_name"
# echo "mount_name:" "$mount_name"

# echo "device_name_in_fstab:" "$device_name_in_fstab"
# echo "mount_point_in_fstab:" "$mount_point_in_fstab"

# echo "device_name_for_LABEL_UUID_check:" "$device_name_for_LABEL_UUID_check"

# echo "LABEL_device:" "$LABEL_device"
# echo "UUID_device:" "$UUID_device"

######################################
# mount_name is set
######################################

function get_zenity_window_width {
    LOG_FILE_WIDTH="`while read line ; do /bin/echo $line | /usr/bin/wc -m ; done < "$LOG_FILE" | /bin/sort -n |/usr/bin/tail -n 1`"
    ZENITY_WINDOW_WIDTH=$((LOG_FILE_WIDTH+10))
}


# echo "YOU_CAN_MOUNT:" "$YOU_CAN_MOUNT"

if [ "$YOU_CAN_MOUNT" -eq "1" ] ; then
    
    ######################################
    # mount
    ######################################
    
    LOG_FILE_SIZE=`/usr/bin/stat -c "%s" "$LOG_FILE"`
    # echo "$LOG_FILE_SIZE"
    
    /bin/mount "$mount_name" >> "$LOG_FILE" 2>&1

    ERROR=0
    WARNING=0

    MOUNTED=0
    # echo "MOUNTED:" "$MOUNTED"

    ##########
    # mount ok?
    # check /etc/mtab

    if [ `/usr/bin/awk "\\$1 ~ \"^\$device_name_for_LABEL_UUID_check$\" && \\$2 ~ \"^\$mount_point_in_fstab$\" " /etc/mtab | /usr/bin/wc -l ` -eq "1" ] ; then
	MOUNTED=1
    elif [ `/usr/bin/awk "\\$1 ~ \"^\$device_name_in_fstab$\" && \\$2 ~ \"^\$mount_point_in_fstab$\" " /etc/mtab | /usr/bin/wc -l ` -eq "1" ] ; then
	MOUNTED=1
    else
	# not mounted
	ERROR=1
    fi
    
    # echo "MOUNTED:" "$MOUNTED"
    # echo "ERROR:" "$ERROR"

    # /etc/fstab is ok
    # mount is ng
    # no media ?
    if [ "$ERROR" -eq "1" ] ; then
	# beep for warning
	fstab_beep_ng

	ERROR_MESSAGE_CANNOT_MOUNT=$"You can NOT mount $device_name ($1)."
	MESSAGE_PLEASE_CHECK_MEDIA=$"There is probably no media in the drive. Please check drive and cable."

	get_zenity_window_width
	$zenity_command --width="$ZENITY_WINDOW_WIDTH" --error --title="$ERROR_MESSAGE_CANNOT_MOUNT" --text="$ERROR_MESSAGE_CANNOT_MOUNT\n$MESSAGE_PLEASE_CHECK_MEDIA" >/dev/null &
	
	/bin/echo -e "$ERROR_MESSAGE_CANNOT_MOUNT\n$MESSAGE_PLEASE_CHECK_MEDIA" >> "$LOG_FILE" 2>&1
	/bin/echo -e "$ERROR_MESSAGE_CANNOT_MOUNT\n$MESSAGE_PLEASE_CHECK_MEDIA" >&2

	# FSTAB_MOUNT_SAVE_LOG is set
	# save log file
	if [ -n "$FSTAB_MOUNT_SAVE_LOG" ] ; then
	    exit 5
	fi

	# LOG_FILE="$FSTAB_MOUNT_DIR/mount.log.$$"
	/bin/mv -f "$LOG_FILE" "$FSTAB_MOUNT_DIR/mount.log"

	exit 5
    fi
    

    # mount ok
    if [ "$ERROR" -eq "0" ] ; then
	LOG_FILE_SIZE_NEW=`/usr/bin/stat -c "%s" "$LOG_FILE"`
	# echo "$LOG_FILE_SIZE_NEW"
	
	ERROR_MESSAGE_ALREADY_MOUNTED=0
	
	# error message check
	if [ "$LOG_FILE_SIZE_NEW" -gt "$LOG_FILE_SIZE" ] ; then

	    /bin/cat "$LOG_FILE" >&2
	    
	    ERROR=1
	    ERROR_MESSAGE_ALREADY_MOUNTED=1
	    
	    # beep for warning
	    fstab_beep_ng
	    sleep 1
	fi
	
	MESSAGE_MOUNT_OK=$"mount $mount_name has been finished."
	
	MESSAGE="$MESSAGE_MOUNT_OK"
	/bin/echo -e "$MESSAGE"
	
	/bin/df -hT >> "$LOG_FILE" 2>&1

    fi

    # echo "mount_name :" "$mount_name"
    # echo "device_name:" "$device_name"
    # echo "LABEL_device:" "$LABEL_device"
    # echo "UUID_device:" "$UUID_device"
    
    if [ "$MOUNTED" -eq "1" ] ; then
	
	# beep
	fstab_beep

	if [ -n "$FSTAB_MOUNT_ZENITY" ] ; then
	    if [ "$WARNING_READ_LINK" -eq "0" ] && [ "$ERROR_MESSAGE_ALREADY_MOUNTED" -eq "0" ] ; then
		# no errors , no warnings

		$zenity_command --info --title="$MESSAGE" --text="$MESSAGE_MOUNT_OK" >/dev/null &
	    fi
	fi
	
	if [ "$WARNING_READ_LINK" -eq "1" ] && [ "$ERROR_MESSAGE_ALREADY_MOUNTED" -eq "0" ] ; then
	    get_zenity_window_width
	    $zenity_command --width="$ZENITY_WINDOW_WIDTH" --info --title="$MESSAGE" --text="$WARNING_MESSAGE_READ_LINK" >/dev/null &
	fi
	
	if [ "$ERROR_MESSAGE_ALREADY_MOUNTED" -eq "1" ] ; then
	    ZENITY_ERROR_MESSAGE_ALREADY_MOUNTED=$"ALREADY MOUNTED or CANNOT USE MOUNT POINT"
	    ZENITY_ERROR_MESSAGE_ALREADY_MOUNTED_TEXT=`/bin/cat "$LOG_FILE"`
	    
	    get_zenity_window_width
	    $zenity_command --width="$ZENITY_WINDOW_WIDTH" --error --title="$ZENITY_ERROR_MESSAGE_ALREADY_MOUNTED" --text="$ZENITY_ERROR_MESSAGE_ALREADY_MOUNTED_TEXT" >/dev/null &
	fi
	
	# echo icon_check
	if [ -z "$FSTAB_MOUNT_DESKTOP_NO_ICON" ] || [ "$FSTAB_MOUNT_DESKTOP_NO_ICON" -ne "1" ] ; then

	    if ( ! /bin/mkdir -p "$DESKTOP_DIR" ) ; then
		ERROR_MESSAGE_DESKTOP_DIRECTORY_CREATE=$"error : cannot create desktop directory\n\$DESKTOP_DIR : $DESKTOP_DIR"
		/bin/echo -e "$ERROR_MESSAGE_DESKTOP_DIRECTORY_CREATE" >/dev/stderr
	    else

		# make link icon in $DESKTOP_DIR ($HOME/Desktop or $HOME)
		
		if [ `/bin/echo "$mount_name" | /bin/grep -c "^LABEL="` -eq "1" ] ; then
		    # echo "found LABEL"
		    device_name="`/sbin/findfs $mount_name`"
		    icon_name="$DESKTOP_DIR$mount_name"
		elif [ `/bin/echo "$mount_name" | /bin/grep -c "^UUID="` -eq "1" ] ; then
		    # echo "found UUID"
		    device_name="`/sbin/findfs $mount_name`"
		    icon_name="$DESKTOP_DIR$mount_name"
		else
		    # echo "not found LABEL or UUID"
		    icon_name="`/bin/echo $mount_name | /bin/sed s@/@_@g`"
		    icon_name="$DESKTOP_DIR$icon_name"
		fi
		
		if [ ! -e "$icon_name" ] ; then
		    if [ ! -e "$icon_name/" ] ; then
			# link to mount point
			/bin/ln -s "$mount_point_in_fstab" "$icon_name"
		    fi
		fi
		
		# echo "device_name:" "$device_name"
		# echo "mount_name:" "$mount_name"
		# echo "icon_name:" "$icon_name"
		# echo "mount_point_in_fstab:" "$mount_point_in_fstab"
	    fi
	fi
    fi
    
else

    # $1 means function's argument.
    # I need to use alias name($for_mount_check) in place of $1(fstab-mount's argument).
    for_mount_check="$1"

    function mount_check () {
	if [ `/usr/bin/awk "\\$1 ~ \"^\$device_name$\" " /etc/mtab | /usr/bin/wc -l ` -ne "0" ] ; then
	    MOUNTED=1
	elif [ `/usr/bin/awk "\\$2 ~ \"^\$mount_name$\" " /etc/mtab | /usr/bin/wc -l ` -ne "0" ] ; then
	    MOUNTED=1
	elif [ -n "$LABEL_device" ] && [ `/usr/bin/awk "\\$1 ~ \"^\$LABEL_device$\" " /etc/mtab | /usr/bin/wc -l ` -ne "0" ] ; then
	    MOUNTED=1
	elif [ -n "$UUID_device" ] && [ `/usr/bin/awk "\\$1 ~ \"^\$UUID_device$\" " /etc/mtab | /usr/bin/wc -l ` -ne "0" ] ; then
	    MOUNTED=1
	elif [ -n "$device_name_for_LABEL_UUID_check" ] && [ `/usr/bin/awk "\\$1 ~ \"^\$device_name_for_LABEL_UUID_check$\" " /etc/mtab | /usr/bin/wc -l ` -ne "0" ] ; then
	    MOUNTED=1
	elif [ `/usr/bin/awk "\\$1 ~ \"^\$for_mount_check$\" " /etc/mtab | /usr/bin/wc -l ` -ne "0" ] ; then
	    MOUNTED=1
	fi
    }
    
    
    /bin/mount "$mount_name" >> "$LOG_FILE" 2>&1
    
    /usr/bin/tail -n 2 "$LOG_FILE" >&2

    ERROR=1

    ##########
    # mount ok?
    # check /etc/mtab
    
    MOUNTED=0

    mount_check

    # echo "MOUNTED:" "$MOUNTED"
    
    if [ -z "$device_name_in_fstab" ] ; then
	
	###################################
	# partition check
	# device name does not have number.
	# example : /dev/hda
	# check /dev/hda1
	
	if [ "`/bin/echo $1 | /bin/grep -c [0-9]$`" -eq "0" ] ; then
	    if [ -e "$1"1 ] ; then
		
		HINT_TO_LOG=$"HINT:${1}1 is exists. I Think $1 has partition number.\nPlease check ${1}*."
		HINT_TO_ZENITY=$"HINT:$1 will have one or more partitions like ${1}1.\nPlease check.\nexample: /bin/ls ${1}*"
	    fi
	fi
    fi
    
    if [ -n "$owner_in_fstab" ] ; then
	HINT_TO_LOG=$"HINT:You need to be a owner of $device_name_for_LABEL_UUID_check.\nCurrent owner is $OWNER_OF_DEVICE.\n\nIf PAM sets device's owner, you need to login again after all users (including you) logout."
	HINT_TO_ZENITY="$HINT_TO_LOG"
    fi
    
    if [ -n "$group_in_fstab" ] ; then
	HINT_TO_LOG=$"HINT:You need to be a member of group:$GROUP_OF_DEVICE."
	HINT_TO_ZENITY="$HINT_TO_LOG"
    fi


    if [ -z "$owner_in_fstab" ] && [ -z "$group_in_fstab" ] ; then
	# echo "before gnome-mount and pmount"
	if [ "$MOUNTED" -eq "0" ] ; then
	    
	    LINE_NUMBER_OF_LOG_FILE=`wc -l "$LOG_FILE" | awk '{print $1}'`

	    # echo "before gnome-mount"
	    if [ -z "$FSTAB_MOUNT_WITHOUT_GNOME_MOUNT" ] && [ -x "/usr/bin/gnome-mount" ] ; then

		MESSAGE_BEFORE_GNOME_MOUNT=$"I try gnome-mount."
		
		if [ -n "$device_name_for_LABEL_UUID_check" ] ; then
		    # gnome-mount -t -d $device_name_for_LABEL_UUID_check
		    MESSAGE_FOR_GNOME_MOUNT1="\n$MESSAGE_BEFORE_GNOME_MOUNT /usr/bin/gnome-mount -t -d $device_name_for_LABEL_UUID_check"
		    /bin/echo -e "$MESSAGE_FOR_GNOME_MOUNT1"
		    /bin/echo -e "$MESSAGE_FOR_GNOME_MOUNT1" >> "$LOG_FILE" 2>&1
		    
		    MESSAGE_FROM_GNOME_MOUNT1="`/usr/bin/gnome-mount -t -d $device_name_for_LABEL_UUID_check`"
		    /bin/echo -e "$MESSAGE_FROM_GNOME_MOUNT1"
		    /bin/echo -e "$MESSAGE_FROM_GNOME_MOUNT1" >> "$LOG_FILE" 2>&1
		    
		    mount_check
		fi
		
		if [ "$MOUNTED" -eq "0" ] ; then
		    if [ "$device_name" != "$device_name_for_LABEL_UUID_check" ] ; then
			# gnome-mount -t -d $device_name
			MESSAGE_FOR_GNOME_MOUNT2="\n$MESSAGE_BEFORE_GNOME_MOUNT /usr/bin/gnome-mount -t -d $device_name"
			/bin/echo -e "$MESSAGE_FOR_GNOME_MOUNT2"
			/bin/echo -e "$MESSAGE_FOR_GNOME_MOUNT2" >> "$LOG_FILE" 2>&1
			
			MESSAGE_FROM_GNOME_MOUNT2="`/usr/bin/gnome-mount -t -d $device_name`"
			/bin/echo -e "$MESSAGE_FROM_GNOME_MOUNT2"
			/bin/echo -e "$MESSAGE_FROM_GNOME_MOUNT2" >> "$LOG_FILE" 2>&1
			
			mount_check
		    fi
		fi
		
		if [ "$MOUNTED" -eq "0" ] ; then
		    if [ "$device_name" != "$1" ] && [ "$device_name_for_LABEL_UUID_check" != "$1" ] ; then
			# gnome-mount -t -d $1
			
			# link to device -> gnome-mount linkfile : OK
			# link to other  -> gnome-mount linkfile : NG , gnome-mount stop and do not finish.
			device_name_tmp=`/usr/bin/readlink -m "$1"`
			if [ -e "$device_name_tmp" ] ; then
			    device_name_new="$device_name_tmp"
			fi
			
			if [ "$device_name" != "$device_name_new" ] && [ "$device_name_for_LABEL_UUID_check" != "$device_name_new" ] ; then
			    MESSAGE_FOR_GNOME_MOUNT3="\n$MESSAGE_BEFORE_GNOME_MOUNT /usr/bin/gnome-mount -t -d $device_name_new"
			    /bin/echo -e "$MESSAGE_FOR_GNOME_MOUNT3"
			    /bin/echo -e "$MESSAGE_FOR_GNOME_MOUNT3" >> "$LOG_FILE" 2>&1
			    
			    MESSAGE_FROM_GNOME_MOUNT3="`/usr/bin/gnome-mount -t -d $device_name_new`"
			    /bin/echo -e "$MESSAGE_FROM_GNOME_MOUNT3"
			    /bin/echo -e "$MESSAGE_FROM_GNOME_MOUNT3" >> "$LOG_FILE" 2>&1
			    
			    mount_check
			fi
		    fi
		fi
	    fi
	    
	    if [ "$MOUNTED" -eq "0" ] ; then
		# echo "before pmount"
		if [ -z "$FSTAB_MOUNT_WITHOUT_PMOUNT" ] && [ -x "/usr/bin/pmount" ] ; then
		    MESSAGE_BEFORE_PMOUNT=$"I try pmount."

		    if [ -n "$device_name_for_LABEL_UUID_check" ] ; then
			# pmount -d $device_name_for_LABEL_UUID_check
			
			MESSAGE_FOR_PMOUNT1="\n$MESSAGE_BEFORE_PMOUNT /usr/bin/pmount -d $device_name_for_LABEL_UUID_check"
			/bin/echo -e "$MESSAGE_FOR_PMOUNT1"
			/bin/echo -e "$MESSAGE_FOR_PMOUNT1" >> "$LOG_FILE" 2>&1
			
			MESSAGE_FROM_PMOUNT1=`/usr/bin/pmount -d $device_name 2>&1 | grep -e "mount:" -e "mount point to be used:"`
			
			/bin/echo -e "$MESSAGE_FROM_PMOUNT1"
			/bin/echo -e "$MESSAGE_FROM_PMOUNT1" >> "$LOG_FILE" 2>&1
			
			mount_check
		    fi
		    
		    if [ "$MOUNTED" -eq "0" ] ; then
			if [ "$device_name" != "$device_name_for_LABEL_UUID_check" ] ; then			
			    # pmount -d $device_name
			    MESSAGE_FOR_PMOUNT2="\n$MESSAGE_BEFORE_PMOUNT /usr/bin/pmount -d $device_name"
			    /bin/echo -e "$MESSAGE_FOR_PMOUNT2"
			    /bin/echo -e "$MESSAGE_FOR_PMOUNT2" >> "$LOG_FILE" 2>&1
			    
			    MESSAGE_FROM_PMOUNT2=`/usr/bin/pmount -d $device_name 2>&1 | grep -e "mount:" -e "mount point to be used:"`
			    
			    /bin/echo -e "$MESSAGE_FROM_PMOUNT2"
			    /bin/echo -e "$MESSAGE_FROM_PMOUNT2" >> "$LOG_FILE" 2>&1
			    
			    mount_check
			fi
		    fi
		    
		    if [ "$MOUNTED" -eq "0" ] ; then
			if [ "$device_name" != "$1" ] && [ "$device_name_for_LABEL_UUID_check" != "$1" ] ; then
			    # pmount -d $1
			    MESSAGE_FOR_PMOUNT3="\n$MESSAGE_BEFORE_PMOUNT /usr/bin/pmount -d $1"
			    /bin/echo -e "$MESSAGE_FOR_PMOUNT3"
			    /bin/echo -e "$MESSAGE_FOR_PMOUNT3" >> "$LOG_FILE" 2>&1
			    
			    MESSAGE_FROM_PMOUNT3=`/usr/bin/pmount -d $1 2>&1 | grep -e "mount:" -e "mount point to be used:"`
			    /bin/echo -e "$MESSAGE_FROM_PMOUNT3"
			    /bin/echo -e "$MESSAGE_FROM_PMOUNT3" >> "$LOG_FILE" 2>&1
			    
			    mount_check
			fi
		    fi
		fi
	    fi
	    LINE_NUMBER_OF_LOG_FILE_NEW=`wc -l "$LOG_FILE" | awk '{print $1}'`

	    LINES=$((LINE_NUMBER_OF_LOG_FILE_NEW-LINE_NUMBER_OF_LOG_FILE))

	    if [ $LINES -gt 0 ] ; then
		# HINT_TO_LOG="$HINT_TO_LOG\n`/usr/bin/tail -n $LINES $LOG_FILE`"
		HINT_TO_ZENITY="$HINT_TO_LOG\n`/usr/bin/tail -n $LINES $LOG_FILE`"
	    fi
	fi
	
    fi

    MESSAGE_PLEASE_CHECK=$"Please check /etc/fstab."
    
    if [ "$MOUNTED" -eq "0" ] ; then
	ERROR_MESSAGE_CANNOT_MOUNT=$"You can NOT mount $device_name ($1)."
	
	if [ -n "$HINT_TO_LOG" ] ; then
	    get_zenity_window_width
	    $zenity_command --width="$ZENITY_WINDOW_WIDTH" --error --title="$ERROR_MESSAGE_CANNOT_MOUNT" --text="$ERROR_MESSAGE_CANNOT_MOUNT\n$MESSAGE_PLEASE_CHECK\n\n$HINT_TO_ZENITY" >/dev/null &
	    
	    /bin/echo -e "$ERROR_MESSAGE_CANNOT_MOUNT\n$MESSAGE_PLEASE_CHECK\n\n$HINT_TO_LOG" >> "$LOG_FILE" 2>&1
	    /bin/cat "$LOG_FILE" >&2
	    
	else
	    get_zenity_window_width
	    $zenity_command --width="$ZENITY_WINDOW_WIDTH" --error --title="$ERROR_MESSAGE_CANNOT_MOUNT" --text="$ERROR_MESSAGE_CANNOT_MOUNT\n$MESSAGE_PLEASE_CHECK\n\n`cat $LOG_FILE`" >/dev/null &
	    
	    /bin/echo -e "$ERROR_MESSAGE_CANNOT_MOUNT\n$MESSAGE_PLEASE_CHECK" >> "$LOG_FILE" 2>&1
	    /bin/cat "$LOG_FILE" >&2
	fi
	
	/bin/df -hT >> "$LOG_FILE" 2>&1
	
	fstab_beep_ng
	
    else    
	# "$MOUNTED" -eq "1" 

	sleep 1
	fstab_beep

	MESSAGE_MOUNT_OK_WITH_OTHER_METHOD=$"mount $device_name ($1) has been finished."

	if [ -n "$HINT_TO_LOG" ] ; then
	    get_zenity_window_width
	    $zenity_command --width="$ZENITY_WINDOW_WIDTH" --info --title="$MESSAGE_MOUNT_OK_WITH_OTHER_METHOD" --text="$MESSAGE_MOUNT_OK_WITH_OTHER_METHOD\n$MESSAGE_PLEASE_CHECK\n\n$HINT_TO_ZENITY" >/dev/null &
	    
	    /bin/echo -e "$MESSAGE_MOUNT_OK_WITH_OTHER_METHOD\n$MESSAGE_PLEASE_CHECK\n\n$HINT_TO_LOG" >> "$LOG_FILE" 2>&1
	    # /bin/cat "$LOG_FILE" >&2

	else
	    get_zenity_window_width
	    $zenity_command --width="$ZENITY_WINDOW_WIDTH" --info --title="$MESSAGE_MOUNT_OK_WITH_OTHER_METHOD" --text="$MESSAGE_MOUNT_OK_WITH_OTHER_METHOD\n$MESSAGE_PLEASE_CHECK\n\n`cat $LOG_FILE`" >/dev/null &
	    
	    /bin/echo -e "$MESSAGE_MOUNT_OK_WITH_OTHER_METHOD\n$MESSAGE_PLEASE_CHECK" >> "$LOG_FILE" 2>&1
	    # /bin/cat "$LOG_FILE" >&2
	fi
	/bin/df -hT >> "$LOG_FILE" 2>&1
    fi
fi

# error or warning and FSTAB_MOUNT_SAVE_LOG is set
# save log file
if [ "$ERROR" -eq "1" ] ; then
    if [ -n "$FSTAB_MOUNT_SAVE_LOG" ] ; then
	exit
    fi
fi

# LOG_FILE="$FSTAB_MOUNT_DIR/mount.log.$$"
/bin/sleep 1
/bin/mv -f "$LOG_FILE" "$FSTAB_MOUNT_DIR/mount.log"

# EOF
