# -*- shell-script -*-
# list.sh - Some listing commands
#
# Copyright (C) 2002-2006, 2008-2011, 2016
#
# 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, 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; see the file COPYING. If not, write to
# the Free Software Foundation, 59 Temple Place, Suite 330, Boston,
# MA 02111 USA.
_Dbg_help_add list \
'**list**[**>**] [*location*|**.**|**-**] [*count*]
List source code.
Without arguments, print lines centered around the current line. If
*location* is given, that number of lines is shown.
*location* can be a read-in function name or a filename and line
number separated by a colon, e.g /etc/profile:5
If *count* is omitted, use the value in the **set listize** setting as
a count. Use **set listsize** to change this setting. If *count* is
given and is less than the starting line, then it is treated as a
count. Otherwise it is treated as an ending line number.
more generally when the alias ends in ">", rather than center lines
around *location* that will be used as the starting point.
Examples:
---------
list # List from current program position or where we last left off
list 5 # List starting from line 5
list 5 2 # List two lines starting from line 5
list . # List lines centered from where we currently are stopped
list - # List lines previous to those just shown
See also:
---------
**set listsize** or **show listsize** to see or set the value;
**set autolist**.
'
# l [start|.] [cnt] List cnt lines from line start.
# l sub List source code fn
_Dbg_do_list() {
typeset -i center_line
if [[ ${_Dbg_orig_cmd:${#_Dbg_orig_cmd}-1:1} == '>' ]] ; then
center_line=0
else
center_line=1
fi
typeset first_arg
if (( $# > 0 )) ; then
first_arg="$1"
shift
else
first_arg="$_Dbg_listline"
fi
if [[ $first_arg == '.' ]] || [[ $first_arg == '-' ]] ; then
_Dbg_list $center_line "$_Dbg_frame_last_filename" $first_arg "$*"
_Dbg_last_cmd="$_Dbg_cmd"
return 0
fi
typeset filename
typeset -i line_number
typeset full_filename
_Dbg_linespec_setup "$first_arg"
if [[ -n $full_filename ]] ; then
(( line_number == 0 )) && line_number=1
_Dbg_check_line $line_number "$full_filename"
(( $? == 0 )) && \
_Dbg_list $center_line "$full_filename" "$line_number" $*
_Dbg_last_cmd="$_Dbg_cmd"
return 0
else
_Dbg_file_not_read_in "$filename"
return 3
fi
}
_Dbg_alias_add l list
_Dbg_alias_add "l>" list
_Dbg_alias_add "list>" list