# Copyright 1992-2020 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

# This file was written by Fred Fish. (fnf@cygnus.com)

gdb_exit
gdb_start

gdb_test_no_output "set pagination off"
gdb_test "show pagination" "State of pagination is off.*" "pagination is off"
gdb_test_sequence "help" "unpaged help" {
    "List of classes of commands:"
    ""
    "aliases -- Aliases of other commands"
    "breakpoints -- Making program stop at certain points"
    "data -- Examining data"
    "files -- Specifying and examining files"
    "internals -- Maintenance commands"
    "obscure -- Obscure features"
    "running -- Running the program"
    "stack -- Examining the stack"
    "status -- Status inquiries"
    "support -- Support facilities"
    "tracepoints -- Tracing of program execution without stopping the program"
    "user-defined -- User-defined commands"
    ""
    "Type .help. followed by a class name for a list of commands in that class."
    "Type .help. followed by command name for full documentation."
    "Command name abbreviations are allowed if unambiguous."
}


gdb_test_no_output "set pagination on"
gdb_test "show pagination" "State of pagination is on.*" "pagination is on"
gdb_test_no_output "set height 10"
send_gdb "help\n"
gdb_expect_list "paged help" \
	".*$pagination_prompt" {
    "List of classes of commands:"
    ""
    "aliases -- Aliases of other commands"
    "breakpoints -- Making program stop at certain points"
    "data -- Examining data"
    "files -- Specifying and examining files"
    "internals -- Maintenance commands"
    "obscure -- Obscure features"
    "running -- Running the program"
}
gdb_test "q"

gdb_test_no_output "set height 5"
send_gdb "printf \"1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n9\\n10\\n11\"\n"
gdb_expect_list "paged count" \
    ".*$pagination_prompt" {
	1
	2
	3
	4
}
send_gdb "c\n"
gdb_expect_list "paged count remainder" "${gdb_prompt} " {
    5
    6
    7
    8
    9
    10
    11
}

set fours [string repeat 4 40]
set str "1\\n2\\n3\\n$fours\\n5\\n"

# Avoid some confusing output from readline.
gdb_test_no_output "set editing off"

gdb_test_no_output "set width 30"
send_gdb "printf \"$str\"\n"
gdb_expect_list "paged count for interrupt" \
    ".*$pagination_prompt" \
    [list 1\r\n 2\r\n 3\r\n 444444444444444444444444444444]

gdb_test "q" "Quit" "quit while paging"

# Check that width/height of sqrt(INT_MAX) is treated as unlimited, as
# well as "0" and explicit "unlimited".
foreach_with_prefix size {"0" "0x80000000" "unlimited"} {

    # Alternate between "non-unlimited" values and "unlimited" values,
    # to make sure we're not seeing stale internal state.

    gdb_test "set width 200"
    gdb_test "show width" \
	"Number of characters gdb thinks are in a line is 200\\."

    gdb_test "set height 200"
    gdb_test "show height" \
	"Number of lines gdb thinks are in a page is 200\\."

    gdb_test "set width $size"
    gdb_test "show width unlimited" \
	"Number of characters gdb thinks are in a line is unlimited\\."

    gdb_test "set height $size"
    gdb_test "show height unlimited" \
	"Number of lines gdb thinks are in a page is unlimited\\."
}

gdb_test "set width -1" "integer -1 out of range"
gdb_test "set height -1" "integer -1 out of range"

gdb_exit
return 0

