#!/usr/bin/env bash
###############################################################################
# BRLTTY - A background process providing access to the console screen (when in
#          text mode) for a blind person using a refreshable braille display.
#
# Copyright (C) 1995-2023 by The BRLTTY Developers.
#
# BRLTTY comes with ABSOLUTELY NO WARRANTY.
#
# This is free software, placed under the terms of the
# GNU Lesser General Public License, as published by the Free Software
# Foundation; either version 2.1 of the License, or (at your option) any
# later version. Please see the file LICENSE-LGPL for details.
#
# Web Page: http://brltty.app/
#
# This software is maintained by Dave Mielke <dave@mielke.cc>.
###############################################################################

. "$(dirname "${0}")/brltty-prologue.sh"
ttyDefaultPath="/dev/tty"

showProgramUsagePurpose() {
cat <<END_OF_PROGRAM_USAGE_PURPOSE
Inspect or change the size of the current virtual terminal's screen.
END_OF_PROGRAM_USAGE_PURPOSE
}

addProgramOption p string.path ttyPath "the path to the device" "${ttyDefaultPath}"
addProgramOption c string.count ttyColumns "set the number of columns"
addProgramOption l string.count ttyLines "set the number of lines"
parseProgramArguments "${@}"

[ -n "${ttyPath}" ] || ttyPath="${ttyDefaultPath}"
showSize=true

if [ -n "${ttyColumns}" ]
then
   verifyInteger "column count" "${ttyColumns}" 1 255
   showSize=false
else
   ttyColumns="$(tput cols)"
   [ -n "${ttyColumns}" ] || semanticError "column count not available: ${TERM}"
fi

if [ -n "${ttyLines}" ]
then
   verifyInteger "line count" "${ttyLines}" 1 255
   showSize=false
else
   ttyLines="$(tput lines)"
   [ -n "${ttyLines}" ] || semanticError "line count not available: ${TERM}"
fi

if "${showSize}"
then
   echo "${ttyColumns}x${ttyLines}"
elif [ "${TERM#xterm}" != "${TERM}" ]
then
   echo >"${ttyPath}" -n -e "\\e[8;${ttyLines};${ttyColumns}t"
else
   stty -F "${ttyPath}" columns "${ttyColumns}" rows "${ttyLines}"
fi

exit 0
