# -*- shell-script -*-
# commands.sh - Bourne Again Shell Debugger 
#
#   Copyright (C) 2006, 2008 Rocky Bernstein rocky@gnu.org
#
#   bashdb 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.
#
#   bashdb 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 bashdb; see the file COPYING.  If not, write to the Free Software
#   Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.

# Code adapted from Python pydb code to do the same thing.
#================ VARIABLE INITIALIZATIONS ====================#

# associates a command list to breakpoint numbers
typeset -ai _Dbg_brkpt_commands_start=()
typeset -ai _Dbg_brkpt_commands_end=()

# The text strings for the *all* breakpoints. To get breakpoints for 
# breakpoint i, this goies from _Dbg_brkpt_commands_start[i] to
# _Dbg_brkpt_commands_end[i]
# 
typeset -a _Dbg_brkpt_commands=()

# For each breakpoint number, tells if the prompt must be displayed after
# execing the command list

typeset -ai _Dbg_brkpt_commands_doprompt=() 

# For each breakpoint number, tells if the stack trace must be displayed after
# execing the cmd list

typeset -ai _Dbg_brkpt_commands_silent=() 

typeset -i _Dbg_brkpt_commands_current=-1

# True while in the process of defining a command list
_Dbg_brkpt_commands_defining=0

# The breakpoint number for which we are defining a list
_Dbg_brkpt_commands_bnum=0

# Call every command that was set for the current active breakpoint
# (if there is one) Returns True if the normal interaction function
# must be called, False otherwise

_Dbg_bp_commands() {
    local currentbp=$1
    local lastcmd_back=$_Dbg_brkpt_lastcmd
    ## _Dbg_brkpt_setup(frame, None) ??? FIXME Probably not needed
    local -i i
    local -i start=${_Dbg_brkpt_commands_start[$currentbp]}
    local -i end=${_Dbg_brkpt_commands_end[$currentbp]}
    for (( i=start ; (( i < end )) ; i++ )) ; do 
      local -a line=(${_Dbg_brkpt_commands[$i]})
      _Dbg_onecmd ${line[*]}
      _Dbg_brkpt_lastcmd=$lastcmd_back
      if (( _Dbg_brkpt_commands_doprompt[$currentbp] )) ; then
	  ###??? What's this 
	  _Dbg_process_commands
	  return 0
      fi
    done
    return 1
}	  
