# Copyright 1992-2024 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 -- User-defined 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 -- User-defined 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 [string repeat 4 30]]

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"

# A height of 1 used to cause pathological behavior -- it would
# endlessly prompt for paging without printing anything.
gdb_test_no_output "set height 1"
gdb_test "print 23" " = 23"
