#!/usr/bin/perl

use strict;
use Time::HiRes qw(usleep nanosleep);
use Getopt::Long;

# GetOpts parser
my $p = Getopt::Long::Parser->new();
my %opts;
$p->getoptions(
        \%opts,
        'domain|d=s',
        'string|s=s',
        'sleep|w=s',
        'help|h',
        'listonly',
        );

my $domain=$opts{domain};
my $string=$opts{string};
my $listonly=$opts{listonly};
my $milisleep=300000;

#
#################### KEYMAP ##########
#
my %key;

#
# LOWER CASE CHARS (UPPERCASE ARE KEY_LEFTSHIFT KEY_x)
#
$key{a}="KEY_A"; $key{A}="KEY_LEFTSHIFT KEY_A";
$key{b}="KEY_B"; $key{B}="KEY_LEFTSHIFT KEY_B";
$key{c}="KEY_C"; $key{C}="KEY_LEFTSHIFT KEY_C";
$key{d}="KEY_D"; $key{D}="KEY_LEFTSHIFT KEY_D";
$key{e}="KEY_E"; $key{E}="KEY_LEFTSHIFT KEY_E";
$key{f}="KEY_F"; $key{F}="KEY_LEFTSHIFT KEY_F";
$key{g}="KEY_G"; $key{G}="KEY_LEFTSHIFT KEY_G";
$key{h}="KEY_H"; $key{H}="KEY_LEFTSHIFT KEY_H";
$key{i}="KEY_I"; $key{I}="KEY_LEFTSHIFT KEY_I";
$key{j}="KEY_J"; $key{J}="KEY_LEFTSHIFT KEY_J";
$key{k}="KEY_K"; $key{K}="KEY_LEFTSHIFT KEY_K";
$key{l}="KEY_L"; $key{L}="KEY_LEFTSHIFT KEY_L";
$key{m}="KEY_M"; $key{M}="KEY_LEFTSHIFT KEY_M";
$key{n}="KEY_N"; $key{N}="KEY_LEFTSHIFT KEY_N";
$key{o}="KEY_O"; $key{O}="KEY_LEFTSHIFT KEY_O";
$key{p}="KEY_P"; $key{P}="KEY_LEFTSHIFT KEY_P";
$key{q}="KEY_Q"; $key{Q}="KEY_LEFTSHIFT KEY_Q";
$key{r}="KEY_R"; $key{R}="KEY_LEFTSHIFT KEY_R";
$key{s}="KEY_S"; $key{S}="KEY_LEFTSHIFT KEY_S";
$key{t}="KEY_T"; $key{T}="KEY_LEFTSHIFT KEY_T";
$key{u}="KEY_U"; $key{U}="KEY_LEFTSHIFT KEY_U";
$key{v}="KEY_V"; $key{V}="KEY_LEFTSHIFT KEY_V";
$key{w}="KEY_W"; $key{W}="KEY_LEFTSHIFT KEY_W";
$key{x}="KEY_X"; $key{X}="KEY_LEFTSHIFT KEY_X";
$key{y}="KEY_Y"; $key{Y}="KEY_LEFTSHIFT KEY_Y";
$key{z}="KEY_Z"; $key{Z}="KEY_LEFTSHIFT KEY_Z";

$key{1}="KEY_1";
$key{2}="KEY_2";
$key{3}="KEY_3";
$key{4}="KEY_4";
$key{5}="KEY_5";
$key{6}="KEY_6";
$key{7}="KEY_7";
$key{8}="KEY_8";
$key{9}="KEY_9";
$key{0}="KEY_0";


$key{"="}="KEY_EQUAL"; $key{"+"}="KEY_LEFTSHIFT KEY_EQUAL";
$key{";"}="KEY_SEMICOLON"; $key{":"}="KEY_LEFTSHIFT KEY_SEMICOLON";
$key{" "}="KEY_SPACE";
$key{"/"}="KEY_SLASH";
$key{"-"}="KEY_MINUS"; $key{"_"}="KEY_LEFTSHIFT KEY_MINUS";
$key{"."}="KEY_DOT";
$key{","}="KEY_COMMA";


#my $string="autoyast://10.162.201.40/hana_inst/se02group1-ay.xml netdevice=eth0 netconfig=dhcp instmode=cd";


#printf("%s: ", $domain);
while ($string =~ /(^.)(.*)/) {
   #printf "%s - %s \n", $1, $key{$1};
   if ( $listonly ) {
       printf("%s\n", "printf \"%s\" \"$1\";");
       printf("%s\n", "virsh send-key $domain --codeset linux $key{$1} 2>/dev/null 1>/dev/null;");
       printf("%s\n", "usleep $milisleep ;");
   } else {
       printf("%s", $1);
       my $rc=0;
       $rc = system("virsh send-key $domain --codeset linux $key{$1} 2>/dev/null 1>/dev/null");
       usleep($milisleep);
   }
   #printf("virsh send-key $domain --codeset linux $key{$1}");
   #printf(" (rc=%s)\n", $rc);
   $string = $2;
}
printf("\n");
