# Copyright 1992, 1994, 1995, 1999, 2002 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

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

if $tracelevel {
    strace $tracelevel
}

global message
global timeout

set timeout 200

gdb_exit
gdb_start

gdb_test "set pagination off" ""
gdb_test "show pagination" "State of pagination is off.*" "pagination is off"
send_gdb "help\n"
gdb_expect_list "unpaged help" ".*$gdb_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"
    "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 "set pagination on" ""
gdb_test "show pagination" "State of pagination is on.*" "pagination is on"
gdb_test "set height 10" ""
send_gdb "help\n"
gdb_expect_list "paged help" \
	".*---Type <return> to continue, or q <return> to quit---" {
    "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_exit
return 0

