#!/usr/bin/python
#
# Simple QEMU shell on top of QMP
#
# Copyright (C) 2009 Red Hat Inc.
#
# Authors:
#  Luiz Capitulino <lcapitulino@redhat.com>
#
# This work is licensed under the terms of the GNU GPL, version 2.  See
# the COPYING file in the top-level directory.
#
# Usage:
#
# Start QEMU with:
#
# $ qemu [...] -monitor control,unix:./qmp,server
#
# Run the shell:
#
# $ qmp-shell ./qmp
#
# Commands have the following format:
#
# < command-name > [ arg-name1=arg1 ] ... [ arg-nameN=argN ]
#
# For example:
#
# (QEMU) info item=network

import qmp
import readline
from sys import argv,exit

def shell_help():
    print 'bye  exit from the shell'

def main():
    if len(argv) != 2:
        print 'qemu-shell <unix-socket>'
        exit(1)

    qemu = qmp.QEMUMonitorProtocol(argv[1])
    qemu.connect()
    qemu.send("qmp_capabilities")

    print 'Connected!'

    while True:
        try:
            cmd = raw_input('(QEMU) ')
        except EOFError:
            print
            break
        if cmd == '':
            continue
        elif cmd == 'bye':
            break
        elif cmd == 'help':
            shell_help()
        else:
            try:
                resp = qemu.send(cmd)
                if resp == None:
                    print 'Disconnected'
                    break
                print resp
            except IndexError:
                print '-> command format: <command-name> ',
                print '[arg-name1=arg1] ... [arg-nameN=argN]'

if __name__ == '__main__':
    main()
