Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

106 lines (88 sloc) 2.773 kb
# -*- coding: utf-8 -*-
# Copyright (C) 2010, 2011 Rocky Bernstein <rockyb@rubyforge.net>
# A base class for a debugger interface.
class Trepan
unless defined?(NotImplementedMessage)
NotImplementedMessage = 'This method must be overriden in a subclass'
end
# A debugger interface handles the communication or interaction with between
# the program and the outside portion which could be
# - a user,
# - a front-end that talks to a user, or
# - another interface in another process or computer
class Interface
attr_accessor :history_io, :history_save, :interactive, :input, :output
unless defined?(YES)
YES = %w(y yes oui si yep ja)
NO = %w(n no non nope nein)
YES_OR_NO = YES + NO
end
def initialize(inp=nil, out=nil, opts={})
@histfile = nil
@history_io = nil
@history_save = false
@histsize = nil
@input = inp || STDIN
@interactive = false
@opts = opts
@output = out || STDOUT
end
# Closes all input and/or output.
def close
@input.close unless !@input || @input.closed?
@output.close unless !@output || @output.closed?
end
# Called when a dangerous action is about to be done to make sure
# it's okay. `prompt' is printed; user response is returned.
def confirm(prompt, default=false)
raise RuntimeError, Trepan::NotImplementedMessage
end
# Common routine for reporting debugger error messages.
def errmsg(str, prefix='** ')
if str.is_a?(Array)
str.each{|s| errmsg(s)}
else
str.split("\n").each do |s|
msg("%s%s" % [prefix, s])
end
end
end
def finalize(last_wishes=nil)
close
end
def input_eof?
@input.eof?
end
# Return true if interface is interactive.
def interactive?
# Default false and making subclasses figure out how to determine
# interactiveness.
false
end
# used to write to a debugger that is connected to this
# server; `str' written will have a newline added to it.
def msg(message)
if message.is_a?(Array)
message.each{|s| msg(s)}
else
message = message ? message.to_s + "\n" : ''
@output.write(message)
end
end
# used to write to a debugger that is connected to this
# server; `str' written will not have a newline added to it
def msg_nocr(msg)
@output.write(msg)
end
def read_command(prompt='')
line = readline(prompt)
# FIXME: Do something with history?
return line
end
def readline(prompt='')
@output.flush
@output.write(prompt) if prompt and prompt.size > 0
@input.readline
end
end
end
Jump to Line
Something went wrong with that request. Please try again.