#!/usr/bin/perl 
##################################################################
# SuSEVboxConf 1.1
# Autor  : Michael Burghart <mb@suse.de>
# (c)    : 1998 Michael Burghart 
# (c)    : 2003 Karsten Keil <kkeil@suse.de>
#
# provides an easy means of setting up some vbox basics..
#########################################################################
#-----------------------------------------------------------------------#
#----------------------- preliminary stuff -----------------------------#
#-----------------------------------------------------------------------#
eval 'sub _ERRNO_H () {1;}' unless defined(&_ERRNO_H);
require "syscall.ph";
BEGIN { 
    push(@INC,"/usr/lib/vboxconf");

}
syscall (&SYS_setuid, 0);
use Tk;
use Tk::BrowseEntry;
use Tk::Dialog;
use File::Copy;
use POSIX;
use FileHandle;
use IO::Handle;
#-----------------------------------------------------------------------#
#----------------------- some useful defaults --------------------------#
#-----------------------------------------------------------------------#
$defaultfont = "8x13bold";
$version = "SuSEVboxConf 1.2";
$anzahl_newframes = $anzahl_frames = ""; 
$helppath = "/usr/lib/susevbox/vboxconf.hlp";
$confpath = "";
$messagepath = "/usr/lib/susevbox/messages";
$standardtcl = "/usr/share/doc/packages/i4l-vbox/examples/standard.tcl.example";
$homepath = "/home";
$group = "users";
$create_vboxd_conf = "0";
$yes_no = "no";
$result_button = "";
$disable_hints = 0;
#select(STDOUT); $| = 1;
#-----------------------------------------------------------------------#
#--------------------- create main window ------------------------------#
#-----------------------------------------------------------------------#
$top        = MainWindow->new();
$top->wm("title",$version);
$menueleiste = $top->Frame(-relief => 'raised', -bd => '2')
    ->pack(-side => 'top', -fill => 'x');
$infos1 = $top->Label(-text => "Settings:",-font => $defaultfont)
    ->pack(-side => 'top', -fill => 'y', -anchor => 'w');
$listbox = $top->ScrlListbox(-width => '70', -height => '20',
			     -font => $defaultfont, -bg => 'white',
			     -selectmode => 'extended',
			     -exportselection => 0)
    ->pack(-side => 'top');;
$eintrag1 = $menueleiste->Menubutton(-text => 'File',
				     -underline => '0',
				     -font => $defaultfont,
				     -tearoff => 'no' )
    ->pack(-side => 'left');
$eintrag2 = $menueleiste->Menubutton(
				     -text => 'Setup',
			     -underline => '0',
				     -font => $defaultfont,
				     -tearoff => 'no' )
    ->pack(-side => 'left');
$eintrag3 = $menueleiste->Menubutton(
				     -text => 'Options',
				     -underline => '0',
				     -font => $defaultfont,
				     -tearoff => 'no' )
    ->pack(-side => 'left');
$eintrag4 = $menueleiste->Menubutton(-text => 'Help',
				     -underline => '0',
				     -font => $defaultfont,
				     -tearoff => 'no')
    ->pack(-side => 'right');
$eintrag1->command(-label => 'Load setup',
		   -font => $defaultfont,
		   -command => \&read_rcfile);
$eintrag1->command(-label => 'Save setup',
		   -font => $defaultfont,
		   -command =>  \&write_configfiles);
$eintrag1->separator();
$eintrag1->command(-label => 'Quit',
		   -command => \&exitvbox,
		   -font => $defaultfont);
$eintrag2->command(-label => 'Configure Vbox...',
		   -font => $defaultfont,
		   -command => \&configvbox);
$eintrag2->command(-label => 'Configure SuSEVbox...',
		   -font => $defaultfont,
		   -command => \&configtkvbox);
#$eintrag2->command(-label => 'Messages',
#		   -font => $defaultfont,
#		   -state => disabled);
$eintrag3->command(-label => 'Settings',
		   -font => $defaultfont,
		   -command => \&settings);
$eintrag4->command(-label => 'Help',
		   -font => $defaultfont,
		   -command => \&help);
$eintrag4->command(-label => 'About',
		   -font => $defaultfont,
		   -command => \&about);
$eintrag4->separator();
$eintrag4->checkbutton(-label => 'Disable warnings!',
		       -font => $defaultfont,
		       -variable => \$disable_hints);
&read_rcfile;
MainLoop;
#-----------------------------------------------------------------------#
#--------------------- create vbox window ------------------------------#
#-----------------------------------------------------------------------#
sub configvbox {
    unless (Exists $conf) {
	$create_tkvbox = "T";
	$maingeometry = $top->wm("geometry");
	$maingeometry =~ /^(\d{1,3})x(\d{1,3})\+(\d{1,3})\+(\d{1,3})$/;
	$xpos = $3 + 160;
	$ypos = $4 + 120;
	$conf        = $top->Toplevel();
	$conf->wm("title","Vbox configuration");
	$conf->wm("geometry","+$xpos+$ypos" );
	$frame1 = $conf->Frame(-bd => '2', -relief => groove)
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both',
		   -pady => 7,
		   -padx => 7);
	$frame2 = $conf->Frame(-bd => '2')
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both',
		   -pady => 7,
		   -padx => 7);
	$frame3 = $conf->Frame(-bd => '2')
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both');
	$frame33 = $frame3->Frame(-bd => '2')
	    ->pack(-side => 'bottom', 
		   -expand => yes,
		   -fill => 'both');
	$frame31 = $frame3->Frame(-bd => '2')
	    ->pack(-side => 'left', 
		   -expand => yes,
		   -fill => 'both');
	$frame32 = $frame3->Frame(-bd => '2')
	    ->pack(-side => 'left', 
		   -expand => yes,
		   -fill => 'both');
	$label1 = $frame1->Label(-text => 'Vboxgetties: ', -fg => 'blue',
				 -font => $defaultfont)
	    ->pack(-side => 'left');
	$entry1 = $frame1->Entry(-textvariable => \$anzahl_newframes, -width => '2',
				 -bg => 'white')
	    ->pack(-side => 'left');
	$button1 = $frame1->Button(-text => 'Create entries', 
				   -command => \&create_getties,
				   -font => $defaultfont)
	    ->pack(-side => 'left', -padx => 3);
	$okbutton = $frame33->Button(-text => 'Done', 
				     -width => 15,
				     -command => sub {$conf->destroy()},
				     -font => $defaultfont)
	    ->pack(-side => left, -fill => both);
	$escbutton = $frame33->Button(-text => Reload,
				      -width => 15,
				      -command => sub {&read_rcfile ; &create_getties},
				      -font => $defaultfont)
	    ->pack(-side => left, -fill => both);
	&create_getties;
    } else {
	$conf->raise();
	$conf->focus();
    }
}
#-----------------------------------------------------------------------#
#------------------------- create entries for vboxgetties --------------#
#-----------------------------------------------------------------------#
sub create_getties {
    for ($item = 1; $item <= $anzahl_frames; $item++) {
	if (Exists($frame2[$item])) {
	    $frame2[$item]->destroy();
	}
    }
    $anzahl_frames = $anzahl_newframes;
    for ($item = 1; $item <= $anzahl_newframes; $item++) {
	$frame2[$item] = $frame2->Frame(-bd => '2',
					-relief => 'groove')
	    ->pack(-side => 'top', -expand => 'yes',
		   -fill => 'both');
	$label21 = $frame2->Label(-text => "Vboxgetty $item:",
				  -font => $defaultfont)
	    ->pack(-side => left, -in => $frame2[$item],
		   -pady => '0.8',
		   -padx => 0);
	$label22 = $frame2->Label(-text => "MSN",
				  -font => $defaultfont)
	    ->pack(-side => left,
		   -in => $frame2[$item],
		   -pady => '0.8',
		   -padx => 0);
	$entry21 = $frame2->Entry(-width => 20,
				  -textvariable => \$msn_var[$item],
				  -bg => 'white')
	    ->pack(-side => left,
		   -in => $frame2[$item],
		   -pady => 0,
		   -padx => 3);
	$label23 = $frame2->Label(-text => "Device /dev/",
				  -font => $defaultfont)
	    ->pack(-side => left,
		   -in => $frame2[$item],
		   -pady => '0.8',
		   -padx => 0);
	$entry23 = $frame2->BrowseEntry(-label => 'Device /dev',
					-textvariable => \$dev_var[$item],
					-state => 'readonly',
					-width => '4',
					-bg => 'white')
	    ->pack(-side => left,
		   -in => $frame2[$item],
		   -pady => '0.8',
		   -padx => 0);
	for ($iter = 1; $iter <= 20; $iter++) {
	    $entry23->insert("end","ttyI$iter");
	}
	$label24 = $frame2->Label(-text => "User",
				  -font => $defaultfont)
	    ->pack(-side => left,
		   -in => $frame2[$item],
		   -pady => '0.8',
		   -padx => 0);
	$entry23 = $frame2->Entry(-width => 10,
				  -textvariable => \$usr_var[$item],
				  -bg => 'white')
	    ->pack(-side => left,
		   -in => $frame2[$item],
		   -pady => 0,
		   -padx => 3);
	$button23 = $frame2->Checkbutton(-width => '10',
					 -text => 'vbox.conf',
					 -selectcolor => 'blue',
					 -variable => \$vbox_var[$item])
	    ->pack(-side => left,
		   -in => $frame2[$item],
		   -pady => 0,
		   -padx => 3);
    }
}
#-----------------------------------------------------------------------#
#----------------------- create tkvbox window --------------------------#
#-----------------------------------------------------------------------#
sub configtkvbox {
    unless (Exists $tkconf) {
	$maingeometry = $top->wm("geometry");
	$maingeometry =~ /^(\d{1,3})x(\d{1,3})\+(\d{1,3})\+(\d{1,3})$/;
	$xpos = $3 + 160;
	$ypos = $4 + 120;
	$tkconf        = MainWindow->new();
	$tkconf->wm("title","SuSEVbox configuration");
	$tkconf->wm("geometry","+$xpos+$ypos" );
	$framet1 = $tkconf->Frame(-bd => '2', -relief => groove)
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both',
		   -pady => 7,
		   -padx => 7);
	$framet2 = $tkconf->Frame(-bd => '2')
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both',
		   -pady => 7,
		   -padx => 7);
	$esc1button = $framet2->Button(-text => 'Done',
				       -width => '15',
				       -command => sub {$tkconf->destroy()},
				       -font => $defaultfont)
	    ->pack(-side => left);
	$ok1button  = $framet2->Button(-text => 'Reload',
				       -width => '15',
				       -command => \&read_rcfile,
				       -font => $defaultfont)
	    ->pack(-side => left);
	&create_tkvbox;
    } else {
	$tkconf->raise();
	$tkconf->focus();
    }
}
#-----------------------------------------------------------------------#
#------------------------- create entries for tkvbox -------------------#
#-----------------------------------------------------------------------#
sub create_tkvbox {
    for ($item = 1; $item <= $anzahl_frames; $item++) {
	if (Exists($framet2[$item])) {
	    $framet2[$item]->destroy();
	}
    }
    for ($item = 1; $item <= $anzahl_newframes; $item++) {
	$frameg1[$item] = $framet1->Frame(-bd => '2',
					  -relief => 'groove')
	    ->pack(-side => 'top', -expand => 'yes',
		   -fill => 'both');
	$framet1[$item] = $frameg1[$item]->Frame(-bd => '2',
						 -relief => 'groove')
	    ->pack(-side => 'top', -expand => 'yes',
		   -fill => 'both');
	$framet2[$item] = $frameg1[$item]->Frame(-bd => '2')
	    ->pack(-side => 'top', -expand => 'yes',
		   -fill => 'both');
	$framet3[$item] = $frameg1[$item]->Frame(-bd => '2')
	    ->pack(-side => 'top', -expand => 'yes',
		   -fill => 'both');
	$framet4[$item] = $frameg1[$item]->Frame(-bd => '2')
	    ->pack(-side => 'top', -expand => 'yes',
		   -fill => 'both');
	$labelt21 = $framet1->Label(-text => "Vboxgetty on device",
				    -font => $defaultfont)
	    ->pack(-side => left, -in => $framet1[$item],
		   -pady => '0.8',
		   -padx => 0);
	$labelt22 = $framet1->Label(-text => "  $dev_var[$item]",
				    -fg => 'blue',
				    -font => $defaultfont)
	    ->pack(-side => left, -in => $framet1[$item],
		   -pady => '0.8',
		   -padx => 0);
	$labelt23 = $framet1->Label(-text => " for user:",
				    -font => $defaultfont)
	    ->pack(-side => left, -in => $framet1[$item],
		   -pady => '0.8',
		   -padx => 0);
	$labelt24 = $framet1->Label(-text => " $usr_var[$item]",
				    -font => $defaultfont,
				    -fg => 'blue')
	    ->pack(-side => left, -in => $framet1[$item],
		   -pady => '0.8',
		   -padx => 0);
	$labelt25 = $framet1->Label(-text => " serving MSN",
				    -font => $defaultfont)
	    ->pack(-side => left, -in => $framet1[$item],
		   -pady => '0.8',
		   -padx => 0);
	$labelt26 = $framet1->Label(-text => " $msn_var[$item]",
				    -fg => 'blue',
				    -font => $defaultfont)
	    ->pack(-side => left, -in => $framet1[$item],
		   -pady => '0.8',
		   -padx => 0);
	$labelt41 = $framet1->Label(-text => "Incoming path:",
				    -width => 15,
				    -anchor => 'w',
				    -font => $defaultfont)
	    ->pack(-side => left, -in => $framet2[$item],
		   -pady => '0.8',
		   -padx => 0);
	unless (defined $incoming[$item]) {
	    $incoming[$item] = "/var/spool/vbox/$usr_var[$item]/incoming";
	}
	$entryt41 = $framet1->Entry(-width => 25,
				    -textvariable => \$incoming[$item],
				    -bg => 'white')
	    ->pack(-side => left,
		   -in => $framet2[$item],
		   -pady => 0,
		   -padx => 3);
	$labelt51 = $framet1->Label(-text => "Messages path:",
				    -width => '15',
				    -anchor => 'w',
				    -font => $defaultfont)
	    ->pack(-side => left, -in => $framet2[$item],
		   -pady => '0.8',
		   -padx => 0);
	unless (defined $messages[$item]) {
	    $messages[$item] = "/var/spool/vbox/$usr_var[$item]/messages";
	}
	$entryt51 = $framet1->Entry(-width => 25,
				    -textvariable => \$messages[$item],
				    -bg => 'white')
	    ->pack(-side => left,
		   -in => $framet2[$item],
		   -pady => 0,
		   -padx => 3);
	$labelt61 = $framet1->Label(-text => "Audio script:",
				    -width => '15',
				    -anchor => 'w',
				    -font => $defaultfont)
	    ->pack(-side => left, -in => $framet3[$item],
		   -pady => '0.8',
		   -padx => 0);


	unless (defined $script[$item]) {
	    $script[$item] = "/usr/bin/susevboxplay";
	}

	$entryt61 = $framet1->Entry(-width => 25,
				    -textvariable => \$script[$item],
				    -bg => 'white')
	    ->pack(-side => left,
		   -in => $framet3[$item],
		   -pady => 0,
		   -padx => 3);
	$labelt71 = $framet1->Label(-text => "Volume:",
				    -width => '15',
				    -anchor => 'w',
				    -font => $defaultfont)
	    ->pack(-side => left, -in => $framet3[$item],
		   -pady => '0.8',
		   -padx => 0);
	unless (defined $volume[$item]) {
	    $volume[$item] = "5";
	}
	$entryt71 = $framet1->Entry(-width => 2,
				  -textvariable => \$volume[$item],
				    -bg => 'white')
	    ->pack(-side => left,
		   -in => $framet3[$item],
		   -pady => 0,
		   -padx => 3);
	$check81 =  $framet1->Checkbutton(-text => 'Copy default messages?',
					  -selectcolor => 'blue',
					  -variable => \$defaultmsg[$item],
					  -font => $defaultfont)
	    ->pack(-side => left,
		   -in => $framet3[$item],
		   -pady => 0,
		   -padx => 3);
	$labelt91 = $framet1->Label(-text => "Homedirectory:",
				    -width => '15',
				    -anchor => 'w',
				    -font => $defaultfont)
	    ->pack(-side => left, -in => $framet4[$item],
		   -pady => '0.8',
		   -padx => 0);
 	unless (defined $home[$item]) {
	    $home[$item] = "$homepath/$usr_var[$item]";
	}
	$entryt91 = $framet1->Entry(-width => 25,
				    -textvariable => \$home[$item],
				    -bg => 'white')
	    ->pack(-side => left,
		   -in => $framet4[$item],
		   -pady => 0,
		   -padx => 3);
	$labelt101 = $framet1->Label(-text => "Group:",
				    -width => '15',
				     -anchor => 'w',
				     -font => $defaultfont)
	    ->pack(-side => left, -in => $framet4[$item],
		   -pady => '0.8',
		   -padx => 0);
 	unless (defined $group[$item]) {
	    $group[$item] = $group;
	}
	$entryt101 = $framet1->Entry(-width => 25,
				    -textvariable => \$group[$item],
				     -bg => 'white')
	    ->pack(-side => left,
		   -in => $framet4[$item],
		   -pady => 0,
		   -padx => 3);
    }
}
#-----------------------------------------------------------------------#
#-------------------- create settings window ---------------------------#
#-----------------------------------------------------------------------#
sub settings {
    unless (Exists $settings) {
	$maingeometry = $top->wm("geometry");
	$maingeometry =~ /^(\d{1,3})x(\d{1,3})\+(\d{1,3})\+(\d{1,3})$/;
	$xpos = $3 + 160;
	$ypos = $4 + 120;
	$settings        = MainWindow->new();
	$settings->wm("title","Vboxconf configuration");
	$settings->wm("geometry","+$xpos+$ypos" );
	$frames1 = $settings->Frame(-bd => '2', -relief => groove)
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both',
		   -pady => 7,
		   -padx => 7);
	$frames2 = $settings->Frame(-bd => '2')
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both',
		   -pady => 7,
		   -padx => 7);
	$configpath1 = $frames1->Frame(-bd => '2')
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both');
	$configpath2 = $frames1->Frame(-bd => '2')
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both');
	$configpath3 = $frames1->Frame(-bd => '2')
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both');
	$configpath4 = $frames1->Frame(-bd => '2')
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both');

	$configpath5 = $frames1->Frame(-bd => '2')
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both');

	$configpath6 = $frames1->Frame(-bd => '2')
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both');

	$configpath7 = $frames1->Frame(-bd => '2')
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both');
	$configpath8 = $frames1->Frame(-bd => '2')
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both');
	$configpath9 = $frames1->Frame(-bd => '2')
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both');



	$conf_label1 = $configpath1->Label(-text => 'Path to configuration files',
					   -width => '28',
					   -anchor => 'w',
					   -font => $defaultfont)
	    ->pack(-side => 'left');
	$conf_entry1 = $configpath1->Entry(-textvariable => \$confpath,
					   -width => '30',
					   -bg => 'white')
	    ->pack(-side => 'left');
	$conf_label2 = $configpath2->Label(-text => 'Path to default messages',
					   -width => '28',
					   -anchor => 'w',
					   -font => $defaultfont)
	    ->pack(-side => 'left');
	$conf_entry2 = $configpath2->Entry(-textvariable => \$messagepath,
					   -width => '30',
					   -bg => 'white')
	    ->pack(-side => 'left');
	$conf_label3 = $configpath3->Label(-text => 'Path to home directories',
					   -width => '28',
					   -anchor => 'w',
					   -font => $defaultfont)
	    ->pack(-side => 'left');
	$conf_entry3 = $configpath3->Entry(-textvariable => \$homepath,
					   -width => '30',
					   -bg => 'white')
	    ->pack(-side => 'left');
	$conf_label4 = $configpath4->Label(-text => 'Default group',
					   -width => '28',
					   -anchor => 'w',
					   -font => $defaultfont)
	    ->pack(-side => 'left');
	$conf_entry4 = $configpath4->Entry(-textvariable => \$group,
					   -width => '30',
					   -bg => 'white')
	    ->pack(-side => 'left');
	$conf_label5 = $configpath5->Label(-text => 'Spooldir',
					   -width => '28',
					   -anchor => 'w',
					   -font => $defaultfont)
	    ->pack(-side => 'left');
	$conf_entry5 = $configpath5->Entry(-textvariable => \$spooldir,
					   -width => '30',
					   -bg => 'white')
	    ->pack(-side => 'left');




	$conf_label6 = $configpath6->Label(-text => 'Modem init string',
					   -width => '28',
					   -anchor => 'w',
					   -font => $defaultfont)
	    ->pack(-side => 'left');
	$conf_entry6 = $configpath6->Entry(-textvariable => \$modem_init,
					   -width => '30',
					   -bg => 'white')
	    ->pack(-side => 'left');




	$conf_label7 = $configpath7->Label(-text => 'Adapt /etc/inittab',
					   -width => '28',
					   -anchor => 'w',
					   -font => $defaultfont)
	    ->pack(-side => 'left');
	$conf_entry7 = $configpath7->Checkbutton(-text => 'yes / no' ,
						 -width => '8',
						 -selectcolor => 'blue',
						 -variable => \$adapt_inittab)
	    ->pack(-side => 'left', -fill => 'x');
	$conf_label8 = $configpath8->Label(-text => 'Create vboxd.conf',
					   -width => '28',
					   -anchor => 'w',
					   -font => $defaultfont)
	    ->pack(-side => 'left');
	$conf_entry8 = $configpath8->Checkbutton(-text => 'yes / no' ,
						 -width => '8',
						 -selectcolor => 'blue',
						 -variable => \$create_vboxd_conf)
	    ->pack(-side => 'left', -fill => 'x');
	$conf_label9 = $configpath9->Label(-text => 'Create vboxgetty.conf',
					   -width => '28',
					   -anchor => 'w',
					   -font => $defaultfont)
	    ->pack(-side => 'left');
	$conf_entry9 = $configpath9->Checkbutton(-text => 'yes / no' ,
						 -width => '8',
						 -selectcolor => 'blue',
						 -variable => \$create_vboxgetty_conf)
	    ->pack(-side => 'left', -fill => 'x');
	$buttons1 = $frames2->Button(-text => 'Done',
				     -command => sub {$settings->destroy()},
				     -width => '15',
				     -font => $defaultfont)
	    ->pack(-side => 'left');
	$buttons2 = $frames2->Button(-text => 'Reload',
				     -command => \&read_rcfile,
				     -width => '15',
				     -font => $defaultfont)
	    ->pack(-side => 'left');
    } else {
	$settings->focus();
	$settings->raise();
    }
}
#-----------------------------------------------------------------------#
#-------------------- edit user vbox.conf not in use! ------------------#
#-----------------------------------------------------------------------#
sub vboxconf {
    $User = shift;
    unless (Exists $vboxconf) {
	$maingeometry = $top->wm("geometry");
	$maingeometry =~ /^(\d{1,3})x(\d{1,3})\+(\d{1,3})\+(\d{1,3})$/;
	$xpos = $3 + 160;
	$ypos = $4 + 120;
	$vboxconf        = MainWindow->new();
	$vboxconf->wm("title","vbox.conf configuration for user: >> $User <<");
	$vboxconf->wm("geometry","+$xpos+$ypos" );
	$framet0 = $vboxconf->Frame(-bd => '2', -relief => groove)
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both',
		   -pady => 7,
		   -padx => 7);
	$framet1 = $vboxconf->Frame(-bd => '2', -relief => groove)
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both',
		   -pady => 7,
		   -padx => 7);
	$framet2 = $vboxconf->Frame(-bd => '2')
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both',
		   -pady => 7,
		   -padx => 7);
	$framet3 = $vboxconf->Frame(-bd => '2', -relief => groove)
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both',
		   -pady => 7,
		   -padx => 7);
	$framet4 = $vboxconf->Frame(-bd => '2', -relief => groove)
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both',
		   -pady => 7,
		   -padx => 7);
	$framet5 = $vboxconf->Frame(-bd => '2')
	    ->pack(-side => 'top',
		   -expand => 'yes',
		   -fill => 'both',
		   -pady => 7,
		   -padx => 7);
	$vboxsecs_label = $framet0->Label(-text => 'Sections found in vbox.conf')
	    ->pack(-side => 'top');;
	$vboxsecs = $framet1->ScrlListbox(-width => '70', -height => '3',
				     -font => $defaultfont, -bg => 'white',
				     -selectmode => 'extended',
				     -exportselection => 0)
	    ->pack(-side => 'top');;
	$add_sec = $framet2->Button(-text => 'Add section',
				       -width => '15',
				       -command => sub {},
				       -font => $defaultfont)
	    ->pack(-side => left);
	$edit_sec = $framet2->Button(-text => 'Edit section',
				     -width => '15',
				     -command => sub {},
				     -font => $defaultfont,
				     -state => 'disabled')
	    ->pack(-side => left);
	$del_sec = $framet2->Button(-text => 'Delete section',
				    -width => '15',
				    -command => sub {},
				    -font => $defaultfont,
				    -state => 'disabled')
	    ->pack(-side => left);
	$vboxlists_label = $framet3->Label(-text => 'Calling entries found:')
	    ->pack(-side => 'top');

	$vboxlists = $framet3->Text(-width => '70', -height => '6',
				     -font => $defaultfont, -bg => 'white')
	    ->pack(-side => 'top');
	$vboxlists->insert("end","*   *   standard.msg   60   RINGS=6");
	$esc1button = $framet5->Button(-text => 'Done',
				       -width => '15', 
				       -command => sub {$vboxconf->destroy()},
				       -font => $defaultfont)
	    ->pack(-side => left);
	$ok1button  = $framet5->Button(-text => 'Reload',
				       -width => '15',
				       -font => $defaultfont)
	    ->pack(-side => left);
    } else {
	$vboxconf->raise();
	$vboxconf->focus();
    }
}
#-----------------------------------------------------------------------#
#------------------------- about this tool -----------------------------#
#-----------------------------------------------------------------------#
sub about {
    unless (Exists $about) {
	$maingeometry = $top->wm("geometry");
	$maingeometry =~ /^(\d{1,3})x(\d{1,3})\+(\d{1,3})\+(\d{1,3})$/;
	$xpos = $3 + 160;
	$ypos = $4 + 120;
	$about        = $top->Toplevel();
	$about->wm("title","About $version");
	$about->wm("geometry","+$xpos+$ypos" );
	$label1 = $about->Label(-text => "$version", 
				-font => $defaultfont)
	    ->pack(-side => 'top');
	$label2 = $about->Label(-text => 'was written by:', 
				-font => $defaultfont)
	    ->pack(-side => 'top');
	$label3 = $about->Label(-text => 'Michael Burghart <mb@suse.de>',
				-font => $defaultfont)
	    ->pack(-side => 'top');
	$okbutton    = $about->Button(-text => "OK", 
				      -command => sub {$about->destroy()},
				      -font => $defaultfont, -width => '15')
	    ->pack(-side => 'bottom', -pady => '2m', -padx => '2m');
    } else {
	$about->raise();
	$about->focus();
    }
}
#-----------------------------------------------------------------------#
#------------------------ help -----------------------------------------#
#-----------------------------------------------------------------------#
sub help {
    unless (Exists $hilfe) {
	$maingeometry = $top->wm("geometry");
	$maingeometry =~ /^(\d{1,3})x(\d{1,3})\+(\d{1,3})\+(\d{1,3})$/;
	$xpos = $3 + 160;
	$ypos = $4 + 120;
	$hilfe        = $top->Toplevel();
	$hilfe->wm("title","Help on $version");
	$hilfe->wm("geometry","+$xpos+$ypos" );
	$helpframe1 = $hilfe->Frame(-bd => '2', 
				    -relief => 'flat')
	    ->pack(-side => 'top', -expand => 'yes', -fill => 'both');
	$helpframe2 = $hilfe->Frame(-bd => '2', 
				    -relief => 'flat')
	    ->pack(-side => 'top', -expand => 'yes', -fill => 'both');
	$helptext = $helpframe1->Text(-wrap => 'none',
				      -state => 'normal',
				      -bg => 'white')
	    ->pack(-side => 'left');
	$yscroll  = $helpframe1->Scrollbar(-command => [yview => $helptext])
	    ->pack(-side => 'left', - fill => 'y');
	$helptext->configure(-yscrollcommand => [set => $yscroll]);
	$okbutton = $helpframe2->Button(-text => 'OK', 
					-command => sub {$hilfe->destroy()},
					-font => $defaultfont, -width => '15')
	    ->pack(-side => 'bottom', -pady => '2m', -padx => '2m');
	open(HELP,$helppath);
	while ($line = <HELP>) {
	    $helptext->insert("end",$line);
	}
	$helptext->configure(-state => 'disabled');
	close(HELP);
    } else {
	$hilfe->raise();
	$hilfe->focus();
    }
}
#-----------------------------------------------------------------------#
#---------------------- writes config file -----------------------------#
#-----------------------------------------------------------------------#
sub write_configfiles {
    unless (-e $confpath &&  -e $messagepath &&  -e $homepath && $group ne "" && $modem_init ne "") {
	&errwin("An error occured while reading your settings. Please check\n\"Options->Settings\"","error","OK","Attention!");
	return;
    } else {
	unless (-e "$spooldir") {
	    mkdir("$spooldir",0777);
	}
    }
    $anzahl_frames = $anzahl_newframes;
    &write_rcfile;
    &write_vboxgetty_conf($confpath);
    &write_vboxd_conf($confpath);
    &adapt_inittab;
    for ($item = 1; $item <= $anzahl_newframes; $item++) {
	($n,$p,$uid,$gid,$q,$k,$g,$d,$s) = getpwnam("$usr_var[$item]");
	if ($uid eq "" && $disable_hints == 0) {
	    &errwin("User \"$usr_var[$item]\" doesn't exist! Installation for user \"$usr_var[$item]\" aborted. Please check \"Setup->Configure Vbox\"!","error","OK","No such user");
	    $usr_noexist[$item] = "yes";
	    next;
	} elsif ($uid eq "" && $disable_hints == 1) {
	    $usr_noexist[$item] = "yes";
	} else {
	    $usr_noexist[$item] = "no";
	}
	if (-e "$spooldir/$usr_var[$item]") {
	    if ($disable_hints == 0) {
		&errwin("Spool path for user \"$usr_var[$item]\" already exist.\nDo you want me to overwrite these files?","question","YesNo","Replace File?");
		if ($result_button eq "Yes") {
		    $replace[$item] = "yes";
		} else {
		    $replace[$item] = "no";
		}
	    } elsif ($disable_hints == 1) {
		$replace[$item] = "yes";
	    } else {
		$replace[$item] = "yes";
	    }
	} else {
	   $replace[$item] = "yes";
	}	
    }
    &write_messages;
    &write_usr_vboxconf;	    
    &write_susevboxrc;
    for ($item = 1; $item <= $anzahl_frames; $item++) {
	($n,$p,$uid,$gid,$q,$k,$g,$d,$s) = getpwnam("$usr_var[$item]");
	if (-e "$spooldir/$usr_var[$item]") {
		chown($uid,$gid,"$spooldir/$usr_var[$item]");
		if (-e "$spooldir/$usr_var[$item]/standard.tcl") {
		    chown($uid,$gid,"$spooldir/$usr_var[$item]/standard.tcl");
		    chmod(0700,"$spooldir/$usr_var[$item]/standard.tcl");
		}
		if (-e "$spooldir/$usr_var[$item]/vbox.conf") {
		    chown($uid,$gid,"$spooldir/$usr_var[$item]/vbox.conf");
		    chmod(0600,"$spooldir/$usr_var[$item]/vbox.conf");
		}
		chown($uid,$gid,"$spooldir/$usr_var[$item]/messages");
		chown($uid,$gid,"$spooldir/$usr_var[$item]/incoming");
		chown($uid,$gid,"$homepath/$usr_var[$item]/.susevboxrc");
		chmod(0600,"$homepath/$usr_var[$item]/.susevboxrc");
		chmod(0700,"$spooldir/$usr_var[$item]");
		chmod(0700,"$spooldir/$usr_var[$item]/messages");
		chmod(0700,"$spooldir/$usr_var[$item]/incoming");
	    }
	}
    &hint;
}
#-----------------------------------------------------------------------#
#----------------------- installs default messages ---------------------#
#-----------------------------------------------------------------------#
sub write_messages {
    for ($item = 1; $item <= $anzahl_frames; $item++) {
	if ($usr_noexist[$item] eq "yes") {
	    next;
	}
	if ($replace[$item] eq "yes") {	    
	    unless (-e "$spooldir/$usr_var[$item]") {
		mkdir("$spooldir/$usr_var[$item]",0777);
	    }
	    # copy a standard.tcl if none exist
	    if (-e "$spooldir/$usr_var[$item]/standard.tcl") {
	    } else {
		if (-e $standardtcl) {
		    copy("$standardtcl", "$spooldir/$usr_var[$item]/standard.tcl");
		}
	    }
	    unless (-e "$spooldir/$usr_var[$item]/messages") {
		mkdir("$spooldir/$usr_var[$item]/messages",0777);
	    }
	    unless (-e "$spooldir/$usr_var[$item]/incoming") {
		mkdir("$spooldir/$usr_var[$item]/incoming",0777);
	    }
	    if ($defaultmsg[$item] eq "1") {
		$defaultmsg[$item] = 0;
		if (-e "$messages[$item]/$usr_dev[$item]/panic.msg") {
		    copy("$messagepath/panic.msg","$messages[$item]/$usr_dev[$item]");
		} else {
		    copy("$messagepath/panic.msg","$messages[$item]/");
		}
		if (-e "$messages[$item]/beep.msg") {
		    copy("$messagepath/beep.msg","$messages[$item]/");
		} else {
		    copy("$messagepath/beep.msg","$messages[$item]/");
		}
		if (-e "$messages[$item]/parkline.msg") {
		    copy("$messagepath/parkline.msg","$messages[$item]/");
		} else {
		    copy("$messagepath/parkline.msg","$messages[$item]/");
		}
		if (-e "$messages[$item]/standard.msg") {
		    copy("$messagepath/standard.msg","$messages[$item]/");
		} else {
		    copy("$messagepath/standard.msg","$messages[$item]/");
		}
		if (-e "$messages[$item]/timeout.msg") {
		    copy("$messagepath/timeout.msg","$messages[$item]/");
		} else {
		    copy("$messagepath/timeout.msg","$messages[$item]/");
		}
	    }
	}
    }
}
#-----------------------------------------------------------------------#
#------------------------- read config file ----------------------------#
#-----------------------------------------------------------------------#
sub read_rcfile {
    $listbox->delete('0','end');		    
    if (-e "/etc/vboxconfrc") {
	open(RC1_FILE,"/etc/vboxconfrc") ;
    } else  {
	&errwin("Could not load \"/etc/vboxconfrc\"!!","error","OK","No such file");
	return;
    }
    chop($line = <RC1_FILE>);
    $anzahl_frames  = $line;
    chop($line = <RC1_FILE>);
    $confpath = $line;
    chop($line = <RC1_FILE>);
    $homepath = $line;
    chop($line = <RC1_FILE>);
    $group = $line;
    chop($line = <RC1_FILE>);
    $spooldir = $line;
    chop($line = <RC1_FILE>);
    $messagepath = $line;
    chop($line = <RC1_FILE>);
    $modem_init = $line;
    while ($line = <RC1_FILE>) {
	chop($line);
	if ($line =~ /\[begin:getties\]/) {
	    $item = 1;
	    $listbox->insert("end","Found vbox entry for:");		    
	    $listbox->insert("end","=====================");		    
	    $listbox->see("end");		    
	    until ($line =~ /\[end:getties\]/) {
		chop($line = <RC1_FILE>);
		if ($line =~ /tty/) {
		    $dev_var[$item] = "$line";
		    chop($line = <RC1_FILE>);
		    $usr_var[$item] = $line;
		    chop($line = <RC1_FILE>);
		    $msn_var[$item] = $line;
		    $listbox->insert("end","Dev: $dev_var[$item] User: $usr_var[$item] using MSN $msn_var[$item]");
		    $listbox->see("end");		    
		    $item++;
		}
	    }
	} elsif ($line =~ /\[begin:tkvbox\]/) {
	    $item = 1;
	    $listbox->insert("end","");		    
	    $listbox->insert("end","Found tkvbox entry for:");		    
	    $listbox->insert("end","=======================");
	    $listbox->see("end");		    		    
	    until ($line =~ /\[end:tkvbox\]/) {
		chop($line = <RC1_FILE>);
		if ($line =~ /tty/) {
		    chop($line = <RC1_FILE>);
		    $home[$item] = $line;
		    chop($line = <RC1_FILE>);
		    $group[$item] = $line;
		    chop($line = <RC1_FILE>);
		    if ($line eq "") {
			$incoming[$item] = "/var/spool/vbox/";
		    } else {
			$incoming[$item] = $line;
		    }
		    chop($line = <RC1_FILE>);
		    if ($line eq "") {
			$messages[$item] = "/var/spool/vbox/";
		    } else {
			$messages[$item] = $line;
		    }
		    chop($line = <RC1_FILE>);
		    if ($line eq "") {
#			$script[$item] = "/usr/bin/susevboxplay";
		    } else {
			$script[$item] = $line;
		    }
		    chop($line = <RC1_FILE>);
		    if ($line eq "") {
			$volume[$item] = "5"; 
		    } else {
			$volume[$item] = $line;
		    }
		    $listbox->insert("end","User: $usr_var[$item]"); 
			$listbox->insert("end","  Incoming: $incoming[$item]");
			$listbox->insert("end","  Messages: $messages[$item]");
		    $listbox->see("end");		    
		    $item++;
		}
	    }
	}
    }
    close(RC1_FILE);
    $anzahl_newframes = $anzahl_frames;
}
#-----------------------------------------------------------------------#
#------------------------- write config file ---------------------------#
#-----------------------------------------------------------------------#
sub write_rcfile {
    if (-e "/etc/vboxconfrc") {
#	system("rm /root/.vboxconfrc");
	open(RC_FILE,">/etc/vboxconfrc") ;
    } else  {
	&errwin("Could not write \"/etc/vboxconfrc\"!!","error","OK","No such file");
	return;
    }
    select(RC_FILE); $| = 1;
    print RC_FILE "$anzahl_newframes\n";
    print RC_FILE "$confpath\n";
    print RC_FILE "$homepath\n";
    print RC_FILE "$group\n";
    print RC_FILE "$spooldir\n";
    print RC_FILE "$messagepath\n";
    print RC_FILE "$modem_init\n";
    print RC_FILE "\[begin:getties\]\n";
    for ($item = 1; $item <= $anzahl_frames; $item++) {
	print RC_FILE "$dev_var[$item]\n";
	print RC_FILE "$usr_var[$item]\n";
	print RC_FILE "$msn_var[$item]\n";
    }
    print RC_FILE "\[end:getties\]\n";
    print RC_FILE "\n";
    print RC_FILE "\[begin:tkvbox\]\n";
    for ($item = 1; $item <= $anzahl_frames; $item++) {
	print RC_FILE "$dev_var[$item]\n";
	print RC_FILE "$home[$item]\n";
	print RC_FILE "$group[$item]\n";
	print RC_FILE "$incoming[$item]\n";
	print RC_FILE "$messages[$item]\n";
	print RC_FILE "$script[$item]\n";
	print RC_FILE "$volume[$item]\n";
    }
    print RC_FILE "\[end:tkvbox\]\n";
    close(RC_FILE);
    &read_rcfile;
    select STDOUT;
}
#-----------------------------------------------------------------------#
#------------------------- write vbox startup script -------------------#
#-----------------------------------------------------------------------#
sub write_vboxgetty_conf  {
    my $file = shift;
    if ($create_vboxgetty_conf eq "1") {
	if ($disable_hints == 0) {
	    &errwin("File \"$confpath/vboxgetty.conf\" already exists.\nDo you want me to overwrite this file?","question","YesNo","Replace File?");
	    if ($result_button eq "No") {
		return;
	    }
	}
	unless (-e "$confpath") {
	    mkdir("$confpath",0777);
	}
	open(TEST,">$file/vboxgetty.conf");
	print TEST <<End_of_Script_Header;
# Global settings for all ports

compression             adpcm-4
umask                   077
badinitsexit            10
dropdtrtime             400
initpause               2500
commandtimeout          4
echotimeout             4
ringtimeout             6
alivetimeout            1800
freespace               2000000
debuglevel              FEWIDJ
End_of_Script_Header
	for ($item = 1; $item <= $anzahl_frames; $item++) {
	    print TEST "\n";
	    print TEST "#Settings for port $dev_var[$item]\n";
	    print TEST "    port /dev/$dev_var[$item]\n";
	    print TEST "        modeminit $modem_init$msn_var[$item]\n";
	    print TEST "        user      $usr_var[$item]\n";
	    print TEST "        group     $group\n";
	    print TEST "        spooldir  $spooldir/$usr_var[$item]\n\n";
	}
	close(TEST);
    }
}
#-----------------------------------------------------------------------#
#--------------------------- write .susevboxrc -------------------------#
#-----------------------------------------------------------------------#
sub write_susevboxrc {
    for ($item = 1; $item <= $anzahl_frames; $item++) {

	if ($usr_noexist[$item] eq "yes") {
	    next;
	}
	    
	if ($replace[$item] eq "yes") {
	    ($n,$p,$uid,$gid,$q,$k,$g,$d,$s) = getpwnam("$usr_var[$item]");
	    open(SUSEVBOXRC,">$homepath/$usr_var[$item]/.susevboxrc");
	    print SUSEVBOXRC <<End_of_Tkvboxrc_Header;
#
# SuSEVboxrc by Michael Burghart <mb\@suse.de>
# this file has been generated automatically. 
# 
#

# Volume
$volume[$item]

# Vboxconfpath
$spooldir/$usr_var[$item]

# Playscript
$script[$item]

# Incoming Files
$incoming[$item]

# Messages
$messages[$item]

End_of_Tkvboxrc_Header
close(SUSEVBOXRC);
	}
    }
}
#-----------------------------------------------------------------------#
#---------------------------- write vboxd.conf -------------------------#
#-----------------------------------------------------------------------#
sub write_vboxd_conf {
    my $file = shift;
    if ($create_vboxd_conf eq "1") {
	if ($disable_hints == 0) {
	    &errwin("File \"$confpath/vboxd.conf\" already exists\nDo you want me to overwrite this file?","question","YesNo","Replace File?");
	    if ($result_button eq "No") {
		return;
	    }
	    unless (-e "$confpath") {
		mkdir("$confpath",0777);
	    }
	    open(VBOXD,">$file/vboxd.conf");
	    print VBOXD <<End_of_Vboxd_Header;
# Login access list
#
# All hosts in the login access list (begins with 'L') are checked at
# login (server startup) time. If access is 'yes' the host can login
# and count messages without special access.

L:localhost:Y
L:*:N

# Full access list
#
# All hosts in the full access list (begins with 'A') are checked if the
# server gets the 'login' command.
End_of_Vboxd_Header
    for ($item = 1; $item <= $anzahl_frames; $item++) {
	print VBOXD "A:localhost:RW:$usr_var[$item]:xxx:$spooldir/$usr_var[$item]:incoming\n";
    }
	    print VBOXD "A:*:!:!:!:!:!\n";
	    close(VBOXD);
	}
    }
}
#-----------------------------------------------------------------------#
#---------------------- write user vbox.conf ---------------------------#
#-----------------------------------------------------------------------#
sub write_usr_vboxconf {
    for ($item = 1; $item <= $anzahl_frames; $item++) {
	if ($usr_noexist[$item] eq "yes") {
	    next;
	}
	if ($replace[$item] eq "yes") {
	    ($n,$p,$uid,$gid,$q,$k,$g,$d,$s) = getpwnam("$usr_var[$item]");
	    if ($vbox_var[$item] eq "1") {
		open(VBOXCONF,">$spooldir/$usr_var[$item]/vbox.conf");
		print VBOXCONF <<End_of_Vboxconf_Header;		
#
#
# This vbox.conf file was automatically generated by
#              SuSEVboxConf   
#
# For syntax of this file see vbox manual
#
# CALLERIDS
#
# Format: PATTERN SECTION REALNAME

\[CALLERIDS\]

11223344      TESTUSER          Test User
55667788      SOMEONE           Someone else       
00000000      FREUNDIN           Meine Freundin
*              \-                     Unknown


# RINGS
#
# Format: TIME DAYS RINGS

\[RINGS\]

23:30-23:59,00:00-08:59         *       1
*                               *       6
# \[USERSECTIONS\]
#
# Format: TIME DAYS STANDARD RECTIME \[FLAG\] \[...\]

\[STANDARD\]
*       *   standard.msg    90  RINGS=6 TOLLRINGS=4


\[FREUNDIN\]
       *   freundin.msg    90  RINGS=6 TOLLRINGS=4

\[TESTUSER\]
*               *       testuser1.msg    120     RINGS=6

\[SOMEONE\]
*               *       someone.msg    120     RINGS=6

# end of generated file
End_of_Vboxconf_Header
    close(VBOXCONF);
	    }	    
	} 
    }
}
#-----------------------------------------------------------------------#
#--------------------- adapt /etc/inittab ------------------------------#
#-----------------------------------------------------------------------#
sub adapt_inittab {
    if ($adapt_inittab eq "1") {
	if ($disable_hints == 0) {
	    &errwin("CAUTION! \"/etc/inittab\" is a vital file!\nPlease be sure to have a backup, just in case.\nDo you want me to adapt \"/etc/inittab\"?","question","YesNo","Adapt /etc/inittab?");
	    if ($result_button eq "No") {
		return;
	    }

	    
	    if (-e "/etc/inittab.bak") {
		&errwin("File \"/etc/inittab.bak\" already exist, overwrite?","question","YesNo","Overwrite \"/etc/inittab.bak\"?");
	    }
	    if ($result_button eq "Yes") {
		copy("/etc/inittab","/etc/inittab.bak");	
	    }


	    

	    open(INITTAB,"/etc/inittab");
	    $nummer = 0;
	    while ($line = <INITTAB>)  {
		if ($line =~ /vbox/ || $line =~ /end of/) {
		    $line = "";
		}
		$array[$nummer] = $line;
		$nummer++;
	    }
	    close(INITTAB);
	    open(INITTAB,">/etc/inittab");	
	    foreach (@array) {
		print INITTAB;
	    }
	    for ($item = 1; $item <= $anzahl_frames; $item++) {
		$blubb = $dev_var[$item];
		($dummy,$tty) = split("I",$blubb);
		print INITTAB "I$tty:35:respawn:/usr/sbin/vboxgetty -d /dev/$dev_var[$item]\n";
	    }
	    print INITTAB "# end of /etc/inittab\n";
	}
	close(INITTAB);
    }
}
#-----------------------------------------------------------------------#
#-------------------- multi message window -----------------------------#
#-----------------------------------------------------------------------#
sub errwin {
    ($text,$icon,$type,$title) = @_;
    
    $result_button = $top->messageBox(-icon =>$icon, -type => $type,
				  -message => $text,
				  -title => $title);
}
#-----------------------------------------------------------------------#
#----------------------- final hints -----------------------------------#
#-----------------------------------------------------------------------#
sub hint {
    if ($disable_hints == 0) {
	unless (Exists $about) {
	    $maingeometry = $top->wm("geometry");
	    $maingeometry =~ /^(\d{1,3})x(\d{1,3})\+(\d{1,3})\+(\d{1,3})$/;
	    $xpos = $3 + 160;
	    $ypos = $4 + 120;
	    $hint        = $top->Toplevel();
	    $hint->wm("title","Final steps..:)");
	    $hint->wm("geometry","+$xpos+$ypos" );
#	    $text = "Now please check \"/etc/services\". It must contain the line:\n\n\"vboxd  stream  tcp  nowait  root  /usr/sbin/tcpd/usr/sbin/vboxd\"\n\nAlso check \"/etc/inetd.conf\" which must contain the line\n\n\"vboxd           20012/tcp\" and\n\"vboxd           20012/udp\"\n\nThese entries are only needed if you plan to use \"vboxd\". SuSEVbox runs without so you won't need to bother.\n\nRemember to have fun!!..:-))))";
	

	    $text = "Now please check the created files \"/etc/vbox/vboxgetty.conf\", \"/etc/vbox/vboxd.conf\"and \"/etc/inittab\"for correctnes.\n\nIf you want to use the \"vboxd\" (SuSEVbox runs without it), make sure the following entries exist in \"/etc/services\":\n\n\"vboxd  stream  tcp  nowait  root  /usr/sbin/tcpd/usr/sbin/vboxd\".\n\n\"/etc/inetd.conf\" should contain two lines resembling:\n\n\"vboxd           20012/tcp\" and\n\"vboxd           20012/udp\".\nRemember that the lines are only needed if you run \"vboxd\". More about vboxd may be found in the vbox manual.\n\nFor the changes in \"/etc/inittab\" to take effect you either need to reboot the machine or just switch runlevels (init 1; init 2)\n\nRemember to have fun!..:-)";




	    $frame1 = $hint->Frame(-bd => '2', -relief => groove)
		->pack(-side => 'top',
		       -expand => 'yes',
		       -fill => 'both',
		       -pady => 7,
		       -padx => 7);
	    $frame2 = $hint->Frame(-bd => '2', -relief => groove)
		->pack(-side => 'top',
		       -expand => 'yes',
		       -fill => 'both',
		       -pady => 7,
		       -padx => 7);
	    $textlabel = $frame1->Message(-text => $text, -width => 500,
					  -bg => 'white')
		->pack(-side => 'bottom', -pady => '2m', -padx => '2m');
	    $okbutton    = $frame2->Button(-text => "OK", 
					   -command => sub {$hint->destroy()},
					   -font => $defaultfont, -width => '15')
		->pack(-side => 'bottom', -pady => '2m', -padx => '2m');
	} else {
	    $hint->raise();
	    $hint->focus();
	}
    }
}
#-----------------------------------------------------------------------#
#--------------------- well exits vbox ---------------------------------#
#-----------------------------------------------------------------------#y
sub exitvbox {
    exit(0);
}
#--------------------------- the end -----------------------------------#
#-----------------------------------------------------------------------#
