[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#138424: mtoolsfm: please include this small formating program



Package: mtoolsfm
Version: 1.9-3-2
Severity: wishlist

I think, my floppy formating frontend written with Perl/Gtk some time
ago would be a good extension for mtoolsfm.

Gruss/Regards,
Eduard.

-- System Information
Debian Release: 3.0
Architecture: i386
Kernel: Linux zombie 2.4.18 #2 Die Mär 12 18:52:25 CET 2002 i686
Locale: LANG=de_DE@euro, LC_CTYPE=de_DE@euro

Versions of packages mtoolsfm depends on:
ii  libc6                    2.2.5-3         GNU C Library: Shared libraries an
ii  libglib1.2               1.2.10-4        The GLib library of C routines
ii  libgtk1.2                1.2.10-9        The GIMP Toolkit set of widgets fo
ii  mtools                   3.9.8-7         Tools for manipulating MSDOS files
ii  xlibs                    4.1.0-14pre15v3 X Window System client libraries

-- 
Du musst einen Plan haben. Denn wenn Du keinen Plan hast,
wirst Du zum Teil des Planes eines anderen ...
#!/usr/bin/perl
#
#  Swiss knife, an allround tool for formating, copying, exploring the
#  content of floppy disks or making backups using them.
#  Copyright (C) 1999 Eduard Bloch (eduard.bloch@zombie.inka.de)
#
#  This program 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 of the License, or
#  (at your option) any later version.
#
#  This program 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 this program; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#

#language support will come later
#2m-formats are not listen since i was too lazy to search for them. you
#may add them if needed. 
#use Devel::ptkdb;
eval 'use Gtk';
print"Please install Gtk-Library and the the
Gtk-Perl-Module before using this tool" if $@;
use POSIX;
$mydir="$ENV{'HOME'}/.gsk";
mkdir ($mydir,0755);
$dirtowork="$mydir"."/tmp";
mkdir ($dirtowork,0700);

init Gtk;
$hoehe = 340; 
$VERSION = "0.0.5";

if(-f "${mydir}/config")
{
#print "config auslesen"
open config,"<${mydir}/config";
while(<config>)
	{$_ =~ s/\n|\r//g; $_ =~ s/  / /g; @temp = split(/ /,$_);
	@temp = split(/ /,$_);
# hier noch was einbauen, um arrays zu speichern,
# syntax:<arrayname>wert\nwert2\nwert3</arrayname>
	$var=$temp[0];
	shift(@temp);
	${$var}=(join(" ",@temp));
	}
close config;
}
else
{
$deflang = $ENV{'LC_ALL'};
$fsuffix=""; #anhang, hxxxx
$fnum=0;
$bb=0;
$preffs="minix";
$verbose=1;
$ll = 0;
$disklabel = "Disk 1";
#$files = "~/shareware/vga/vgaread.exe";
}

sub saveexit{
open config,">${mydir}/config";
print config "
fsuffix $fsuffix
fnum $fnum
bb $bb
preffs $preffs
verbose $verbose
ll $ll
disklabel $disklabel
fmenunum $fmenunum
adsfopts $adsfopts
";
close config;
}

@disk_xpm = (
'48 48 33 1',
'  c #020305',
'. c #020b03',
'X c #0e0d13',
'o c #16151f',
'O c #1f202f',
'+ c #201a2e',
'@ c #232137',
'# c #25223a',
'$ c #25273a',
'% c #2c273f',
'& c #312f48',
'* c #383150',
'= c #3e3a56',
'- c #464558',
'; c #4f4a67',
': c #535064',
'> c #575b60',
', c #646179',
'< c #6c6b7a',
'1 c #787886',
'2 c #7d8089',
'3 c #898995',
'4 c #9295a3',
'5 c #9f9eab',
'6 c #aaaaaa',
'7 c #a4a5b8',
'8 c #ada8c0',
'9 c #b4b1c1',
'0 c #c5c1d2',
'q c #ceced9',
'w c #eaeaed',
'e c Gray100',
'r c None',
'rrrrrrrrrrr4>,,,,,,<,,,243233323323323333233rrrr',
'rrrrrrrrrrr3=3r5r5234rr2oO%=<12112112><<<1<<>rrr',
'rrrrrrrrrrr3-5<<,,*<<9w<%$OXrqqqqqqqq>52322&o-rr',
'rrrrrrrrrrr2:4=;;=o;29-%%#@O1789O%$19-2%&%%$Oo<r',
'rrrrrrrrrrr3>3;=;=+;5*&%%%##@880o>>w9-2&%%%$$.>r',
'rrrrrrrrrrr2;4=;=;9:3*%%%##@+%10X>>wq-2%%%$$%.>r',
'rrrrrrrrrrr3:3=*=w03=2&%#%#@@+orX>-wq-2%###@OX>r',
'rrrrrrrrrrr1;1#1w7<93-,&#%#@#O+oX>>w0-1&%##$$.>r',
'rrrrrrrrrrr,&&0q3o<w0,<;%%@#@@+oX>>wq-2###@@@X>r',
'rrrrrrrrrr4&1w05 ->9w0-1=%#@+O+OX-rw0-2##@+@O.>r',
'rrrrrrrrr2&rw888:%>>qq0&2%#@@++++X4qq-1##@@OOX>r',
'rrrrrrrr>-qq47890O&><wq7*1#@+@+++o +++2@@+++O.>r',
'rrrrrr5-,w04477900X>-2w02::$@++++oo+11@O@OO+O.>r',
'rrrrr3%2w074478000rX>>wq7#>@+O+Oo++XX#O@@+++O.>r',
'rrrr,&req9744489000<-qw1&3-@@++++oooXo++O+++o.>r',
'rr5->84wq9744780qq0q39>-3&@@+O =<:ooo +O+Oo+O.>r',
'51$103;<w074478800q0r-<<$$@@+ =;;3&ooX Xo%+o+.>r',
'2&40&;;;3q444780qq04&2>#%@OoX;;,,;3@ooXo;<$+o.>r',
':09:*o;;;804488000<-2=#%#@XO;,qw0,,1oXoX#1&oo.>r',
'>0;;;#@,;;0848800-:2&&%#OX*;1weeeq;,,oXX >&oo.>r',
'-<7=;=+&;;,q8787%2,&%#%+X=;4eeeeee9;1=oXXXOoo.>r',
'4%51;=*o=,;1q81*2;&&#%oo;;0eeeeeeee4;3OXXX Xo.>r',
'r3%9,=;*o;;;74=3=*&%%X$;,weeeeeeeeee1;3oXX XX.>r',
'rr<=0;=*&@;;;31**&&# =;3weeeeeeeeeeeq,,1 XX X.>r',
'rrr-,8=;*@&;4,**&&+X-;8eeeeeeeeeeeeee0;,;X   .>r',
'rrr5*34==*+#;**&&X+;,qeeeeeeeeeeeeeeee7;2&X  .<r',
'rrrr4&9,;*****&#o&;1weeeeeeeeeeeeeeeeee2;3oX  Or',
'rrrr51;8,*=***#o=;4weeeeeeeeeeeeeeeeeeew,,1X . 2',
'rrrrrr;=8;****#=;8eeeeeeeeeeeeeeeeeeeeeew;,,  2r',
'rrrrrr7=,7****+;,qeeeeeeeeeeeeeeeeeeeeeee0;,o.>r',
'rrrrrrr4%71***o=,qeeeeeeeeeeeeeeeeeeeeeeew<@ .>r',
'rrrrrrrr2*0;**&o;1eeeeeeeeeeeeeeeeeeeeeew2o  .>r',
'rrrrrrrr7,;0=*&@o;7eeeeeeeeeeeeeeeeeeeeq<.X  .>r',
'rrrrrrrrr7=18**&o%;9eeeeeeeeeeeeeeeeeer- %X  .>r',
'rrrrrrrrrr5$44&&&X=,weeeeeeeeeeeeeeee3$X%$X  .>r',
'rrrrrrrrrrr4$8,%&%X-1weeeeeeeeeeeeew<o...... .>r',
'rrrrrrrrrrr5<=0;&&#X;3eeeeeeeeeeee0>.X........>r',
'rrrrrrrrrrrrr-,8*%%+@;9eeeeeeeeeer-o<2222222225r',
'rrrrrrrrrrrrr5&<7&%#o&:qeeeeeeew3X-rrrrrrrrrrrrr',
'rrrrrrrrrrrrrr4%21&$%X-,weeeeeq<X>rrrrrrrrrrrrrr',
'rrrrrrrrrrrrrrr1%7;%%@X;1eeee9-.3rrrrrrrrrrrrrrr',
'rrrrrrrrrrrrrrrr>-9*%#oo;4ee4%Orrrrrrrrrrrrrrrrr',
'rrrrrrrrrrrrrrrrr=:5###o%;8<X>rrrrrrrrrrrrrrrrrr',
'rrrrrrrrrrrrrrrrr4%<3@#+XO%o>rrrrrrrrrrrrrrrrrrr',
'rrrrrrrrrrrrrrrrrr2$5,@@X o3rrrrrrrrrrrrrrrrrrrr',
'rrrrrrrrrrrrrrrrrrr,%7-X.$rrrrrrrrrrrrrrrrrrrrrr',
'rrrrrrrrrrrrrrrrrrrr-Oo.>rrrrrrrrrrrrrrrrrrrrrrr',
'rrrrrrrrrrrrrrrrrrrrr123rrrrrrrrrrrrrrrrrrrrrrrr'
);



sub len{
 $_about = "About";
 $_format = "Format";
 $_copy = "Copy";
 $_devf = "Device";
 $_fsf = "Filesystem";
 $_cfs = "Creat";
 $_formatnow = "format now!";
 #print "blabla";
 $_options = "Options";
 $_blocks = "Check for badblocks";
 $_summe = "Be verbose";
 $_special = "Advanced options";
#define a better message
 @mis_fd = (
 "Error!", 
 "Couldn't find any floppy devices or couldn't acces them!
 Check read/write permissions to the /dev/fd*-files",
 "Exit");
@mis_fdutil = (
 "Error!", 
 "Some tools from the fdutils couldn't 
 be found in your path. Please make sure 
 fdutils are installed and check your paths.
 
 Check also if you have read/write acces to
 the /dev/fd* files.", 
 "Exit");
 $_pformat = "format physicaly?";
#return "Language: English(default)";
}

$lang = "len";
&{$lang};

#end of the language part

#define floppy formats and compabilities

@formats = (
#syntax: floppy-device, name-entry, format-comptability, device-compability
# 1->standard, 2->quasi-standard, 3->non-standard, 0->not available
#devices: 1:5.25-dd, 2:5.25-hd, 3:3.5-dd, 4:3.5-hd, 5:3.5-ed

#0
"", "default",1,12345,
"d360","360KB",1,1,
"h360","360KB",1,2,
"h410","410KB (mc+ms/c?)",3,2, #x
"h420","420KB (mc+ms/c?)",3,2, #x
"h720","720KB (qd)",3,2,#x
"h880","880KB (qd+mss?)",3,2,#x
"h1200","1200KB",1,2,
"h1440","1440KB (ui)",2,2,
"h1476","1476KB (mc)",2,2,
"h1494","1494KB (mc)",2,2,

#10
"h1600","1600KB (mss)",3,2,
"u360","360KB (?)",3,345,
"u720","720KB",1,345,
"u800","800KB (ms/c)",2,345,
"u820","820KB (mc+ms/c?)",3,345,
"u830","830KB (mc+ms/c?)",2,345,
"u1040","1040KB (2m?)",3,5,
"u1120","1120KB (qd)",3,5,
"u1440","1440KB",1,45,
"u1600","1600KB (ms/c?)",2,45,

#20
"u1680","1680KB (ui)",2,45,
"u1722","1722KB (ms/c?)",2,45,
"u1743","1743KB (mc)",2,45,
"u1760","1760KB (ls)",3,45,
"u1840","1840KB (mss)",3,45,
"u1840 hd tracksize=23b mss 2m","1840KB (2m)",3,45,
"u1920","1920KB (mss)",3,45,
"u2880","2880KB",1,5,
"u3200","3200KB (ms/c?)",2,5,
#3360
"u3520","3520KB (ls)",3,5,
#3680
"u3840","3840KB (mss)",3,5,
);

#Since mformat is not able to recognice the correct disk size without an
#existing msdos-bootsector, this may be a problem after using an other
#fs. A possible fix could be to provide mformat with args for the
#default formats, but I am too lazy to implement it yet. Just reformat
#the disk physicaly or fix it if you want to.

@dse=("msdos","minix","ext2");

sub dse_menu {
my $menu = new Gtk::Menu();
foreach(@dse){my $temp=$_;
	my $menuitem = new Gtk::MenuItem $temp;
	$menuitem->signal_connect("activate", => sub {$preffs = $temp});
	$menuitem->show;
	$menu->append($menuitem);
	}
return $menu;
}


sub not_imp {
my $hbox = new Gtk::HBox(0,0);
my $label = new Gtk::Label "NOT IMPLEMENTED YET";
$label->show;
$hbox->pack_start($label, 0,0,0);
$hbox->show;
#$_->pack_start($hbox,0,0,0);
return $hbox;
}

sub create_dmenu {
my $menu = new Gtk::Menu();
foreach(0..$#floppies)
	{my $menuitem = new Gtk::MenuItem "/dev/fd". $_ ." (" . $floppies[$_] .")";
	my $fdtyp = $fdt[$_];
	my $temp=$_;
	$menuitem->signal_connect("activate", =>sub {$format->set_menu(create_fmenu($fdtyp));
		$fnum=$temp});
	$menuitem->show;
	$menu->append($menuitem);
	}
$menu->show;
#$fdtyp = $fdt[0];
return $menu;
}

sub create_fmenu {
($parm1) = @_; 
$fdtyp = $parm1 if($parm1);
my $temp=0;
undef $menu;
my $menu = new Gtk::Menu();
undef @menge;

for(0..30) #vergleich des floppy-types, liste der kompatiblen bilden
{	my $i=$_;
	my $j= ($i*4)+3;
	if($formats[$j]=~ /$fdtyp/){push(@menge, $i)}
}

for(1,2,3)
{#formate sortieren, standards, quasi-standards, non-standards
$stufe=$_;
	if($_ != 1)
	{my $menuitem = new Gtk::MenuItem ($stufe==2 ? "-- often compatible formats --" : "-- less compatible formats --");my $temp_=$temp;
	$menuitem->signal_connect("activate", =>sub {$format->set_menu(create_fmenu(@last_pars));$fmenunum=$temp_});
	$menuitem->show;$temp++;
	$menu->append($menuitem);
	};
	
	for(@menge)
	{   my $i=($_*4) ,my $j=($_*4)+1;$k=$j+1;my $temp_=$temp;#print $formats[$k], "\n";
		if($formats[$k]==$stufe)
		{
		my $menuitem = new Gtk::MenuItem $formats[$j]; 
		#print "addmenu", $j, "\n";#, $formats[j];
		$menuitem->show;
		$menuitem->signal_connect("activate", =>sub {#print $j, "\n"; 
			$fsuffix=$formats[$i];$fmenunum=$temp_;
			#print $i;
			});
		$temp++;
		$menu->append($menuitem);
		}
	}
}

return $menu;
}	

sub showmes{
# fuettern mit title, text, [pixmap], button1, funktion 1, button2, fuktion2 usw., (mglw. spaeter ein
# icon, werde ich wohl dann irgendwie reinbasteln
#my (@opts, $window, $label, $button, $box, $hbox, $vbox);

@opts = @_;
        $window = new Gtk::Window('toplevel');
        $window->set_name("meldung");
        $window->set_title("$opts[0]");
	$window->set_uposition(500, 20);
	
	$box = new Gtk::VBox(0, 0);
	$vbox = new Gtk::HBox( 0,0);
	#hier noch das pixmap "reinflicken", abfragen, dann shiften
#"v" in vbox ignorieren, zufaellig reingerutscht, trotzdem vertikal
	$label = new Gtk::Label "$opts[1]";
	$label->show;
	$vbox->pack_start($label, 1,1,5);
	$vbox->show;
	$box->pack_start($vbox, 0,0,0);
	
	$hbox = new Gtk::HBox(0,0);
	for($i=2;$i<$#opts;$i+=2){
	$button = new Gtk::Button("$opts[$_]");
	my $meswert=$_;
	my $func=$_+1;
	signal_connect $button "clicked"=> sub 
#		{
#		if($err==1)
#		{Gtk->exit(0);}
#		else
		{print $opts[$func]
		};
#		};
	$hbox->pack_start($button, 1,1,5);
	show $button;
	}
$hbox->show;
$box->pack_start($hbox, 1,1,5);
$box->show;

$window->add($box);	
$window->signal_connect( 'destroy', \&Gtk::Widget::destroyed, \$window );
$window->show;
}
#showmes(1,"etwas text, asdfasdf ",3,4,5,6,7,8,9,10);

sub fswahl
#rebuild the command line with changed options
{	@al=(a..z);
	if($preffs=~ /dos/i)
	{
	$formcmd=($verbose ? "minfo $al[$fnum]:\n" : "\n");
	}
	else
	{
	$formcmd="echo ".($bb?"Searching for bad blocks and c":"C")."reating a filesystem, please wait... && /sbin/mkfs.".($preffs=~ /minix/i ? "minix" : "ext2 -L \"$disklabel\"").($bb ? " -c " : " ")." $msdosopts /dev/fd".$fnum.($preffs=~ /minix/i ? "\n":($verbose ? "\n/sbin/dumpe2fs /dev/fd$fnum\n" : " "));
	}
#	print $formcmd,"\n";
}


sub formatnow
{
#open(sfout,"system superformat -f 2>&1|");
#showmes("titel", "test: suffix = $fsuffix")
#unless($slave = fork){
#system "xterm -e $comline &";
#sleep 2;
#exit;
#Gtk->exit(0);
#&do_exit;
#Gtk::main_quit;
#}
#print "\n\n$slave\n";

&fswahl;
$comline= ($ll ? "superformat ".(($bb && $preffs=~/dos/i)?"-B":"-f")." /dev/fd" . $fnum . $fsuffix : "")." $adsfopts";
#check msdos-options, decide the right flag and drive
$temp = time;
open(work, ">$dirtowork/starter");
print work $comline,"\n";
print work $formcmd, "\n";
print work "echo Created by Eduard Bloch, http://www.eduard.bloch.com/gsk/\n";;
print work ($verbose ? "echo Press RETURN to continue...\nread\n" : "sleep 3");
close(work);
chmod 0700, "$dirtowork/starter";
system "xterm -e $dirtowork/starter &";
}

sub do_exit {&saveexit;Gtk->exit(0);}

sub create_notebook {
my($notebook);
my($hbox, $label);
$notebook = new Gtk::Notebook;
$notebook->set_tab_pos(-top);
$notebook->border_width(3);

$notebook->append_page( create_form_page() );
#$notebook->append_page( create_copy_page() );
$notebook->append_page( create_set_page());
return $notebook;
}

sub objects_menu {
my ($rw)=@_;

#my $gz="| gzip";
#my $guz="| gzip -d";
#my $bz="| bzip2";
#my $buz="| bzip2 -d";
#fill the source/targetmenu with objects
my @objects,$driveitem;
@abc=(A..Z);
foreach(0..$#floppies)
{
 my $driveitem = "/dev/fd$_  (\"$abc[$_]:\", "."$floppies[$_])";
 push(@objects,$driveitem,"dd ".($read?"i":"o")."f=/dev/fd$_");
}

push(@objects,(($read)?@rap:@wap));
# append kommt aus den gespeicherten daten

my $omenu = new Gtk::Menu();
for($j=0;$j<$#objects;$j+=2)
	{
#	my $temp=$objects[$j].": ".$objects[$j+1].$objects[$j+2];
	print $objects[$j]."\n";
	my $menuitem = new Gtk::MenuItem $objects[$j];
#	$menuitem->signal_connect("activate", => sub {$preffs = $temp});
	$menuitem->show;
	$omenu->append($menuitem);
	};
return $omenu;
}

sub create_copy_page{	
#Diskcopy-Page
my $dslabel = new Gtk::Label( "Diskcopy" );
my $dcbox= new Gtk::VBox(0,0);
#haupt-box
$dcbox->border_width(0);
#starting source-frame
my $sc_frame =  new Gtk::Frame "Source";
$sc_frame->border_width(3);
$sc_frame->show;
$dcbox->pack_start($sc_frame, 1,1,5);
#analog zu formbox
	my $box1 = new Gtk::VBox(0,0);
	$box1->border_width( 2 );
	$sc_frame->add($box1);
	$box1->show;

	$boxoben = new Gtk::HBox(1,0);
	$box1->pack_start($boxoben,1,1,5);
	$source_menu = new Gtk::OptionMenu;
	$source_menu->set_menu(objects_menu);
	$boxoben->pack_start($source_menu,1,1,5);
	$source_menu->show;

	$reignore = new Gtk::CheckButton "ignore read errors";
	$reignore->signal_connect("clicked", sub {});
	$boxoben->pack_start($reignore,1,1,5);
	$reignore->show;
$boxoben->show;

my	$boxunten = new Gtk::HBox(1,0);
	$box1->pack_start($boxunten,1,1,5);
	$boxunten->show;
	
	$preformbtn = new Gtk::CheckButton "read while writing";
	$preformbtn->signal_connect("clicked", sub {});
	$boxunten->pack_start($preformbtn,1,1,5);
	$preformbtn->show;

my	$readbutton = new Gtk::Button "READ!";
	$boxunten->pack_start($readbutton,1,1,5);
	$readbutton->show;


my $tr_frame =  new Gtk::Frame "Target";
$tr_frame->border_width(3);
$tr_frame->show;
$dcbox->pack_start($tr_frame, 1,1,5);
$dcbox->show;

	my $box2 = new Gtk::VBox(0,0);
	$tr_frame->add($box2);
	$box2->show;

	$boxoben = new Gtk::HBox(1,0);
	$box2->pack_start($boxoben,1,1,5);
	$target_menu = new Gtk::OptionMenu;
	$target_menu->set_menu(objects_menu(src));
	$boxoben->pack_start($target_menu,1,1,5);
	$target_menu->show;
	
	$weignore = new Gtk::CheckButton "ignore write errors";
	$weignore->signal_connect("clicked", sub {});
	$boxoben->pack_start($weignore,1,1,5);
	$weignore->show;
$boxoben->show;	
	$boxunten = new Gtk::HBox(1,0);
	$box2->pack_start($boxunten,1,1,5);
	$boxunten->show;

	$preformbtn = new Gtk::CheckButton "format before writing";
	$preformbtn->signal_connect("clicked", sub {});
	$boxunten->pack_start($preformbtn,1,1,5);
	$preformbtn->show;

	$okbutton = new Gtk::Button "WRITE!";
	$okbutton->signal_connect("clicked", sub {
		$adsfopts=($sfentry->get_text);
		destroy $adsf_window});
	$boxunten->pack_start($okbutton,1,1,5);
	$okbutton->show;

#status-bar
$stbar=new Gtk::Statusbar;
$stbar->push( 1, "Don't use this, nothing works correctly");
$stbar->show;
$dcbox->pack_end($stbar,1,1,3);#???

return ($dcbox, $dslabel);
};

sub create_form_page{
#starting format-page
my $fbox = new Gtk::VBox(0,0);
$fbox->border_width(0);

my	$box = new Gtk::VBox( 0, 0 );
	$box->border_width( 2 );

#starting low-level-format-frame
my $dev_frame = new Gtk::Frame ( $_devf . " / " . $_format );
$dev_frame->border_width(1);

$formbox = new Gtk::VBox 1,0;
	
	$lw = new Gtk::HBox 1,0;
	$drv = new Gtk::OptionMenu;
	$drv->set_menu(create_dmenu());
	$drv->set_history($fnum);
	$drv->show;
	$lw->pack_start($drv, 1,1,5);
#checkbutton fur ll-format
	$pform = new Gtk::CheckButton $_pformat;
	$pform->set_active(1);
	$pform->signal_connect("clicked", => sub {
		$ll =($pform->active);
		$format->set_sensitive($ll);
		$format->set_menu(create_fmenu);
		$sforms->set_sensitive($ll)});

	$pform->show;
	$lw->pack_start($pform, 1,1,5);
	$lw->show;

	$formate = new Gtk::HBox 1,0;
	$format = new Gtk::OptionMenu;
	$format->set_menu(create_fmenu($fdtyp));
	$format->set_history($fmenunum);
	$format->show;
	$formate->pack_start($format, 1,1,5);
	$sforms = new Gtk::Button $_special;
	$sforms->signal_connect("clicked", => \&adsf_opts);
	$sforms->show;
	$formate->pack_start($sforms, 1,1,7);
	$formate->show;
#	$format->set_sensitive(0);
#	$sforms->set_sensitive(0);
#	$pform->set_active(1);
	$pform->clicked if !$ll;

$formbox->pack_start($lw, 1,1,5);
$formbox->pack_start($formate, 1,1,5);
$formbox->show;
	
$dev_frame->add($formbox);
$box->pack_start($dev_frame,1,1,5);

#starting filesystem-frame

$fs_frame = new Gtk::Frame ($_fsf);
$fs_frame->border_width(1);

	$fs_box = new Gtk::HBox 1,0;
	$fsbox1 = new Gtk::VBox 1,0;
	$optionsf = new Gtk::OptionMenu;
	$optionsf->set_menu(dse_menu);
	$optionsf->set_history($preffs=~/dos/ ?"0":($preffs=~/mini/?"1":"2"));
	$optionsf->show;
	$fsbox1->pack_start($optionsf, 1,1,5);
	$fsopts = new Gtk::Button $_options;
	signal_connect $fsopts "clicked", msdos_opts;
	$fsopts->show;
	$fsbox1->pack_start($fsopts, 1,1,5);
	
	$fsbox1->show;
	$fs_box->pack_start($fsbox1, 1,1,5);

	$fsbox2 = new Gtk::VBox 1,0;
	$blocks = new Gtk::CheckButton $_blocks;
	$blocks->set_active($bb);
	signal_connect $blocks "clicked", sub {$bb = ($blocks->active)};
	$blocks->show;
	$fsbox2->pack_start($blocks, 1,1,5);

	$summe = new Gtk::CheckButton $_summe;
	$summe->set_active($verbose);
	signal_connect $summe "clicked", sub {$verbose = ($summe->active)};
	$summe->show;
	$fsbox2->pack_start($summe, 1,1,5);
	
$fsbox2->show;
$fs_box->pack_start($fsbox2, 0,1,0);
	
$fs_frame->add($fs_box);
$fs_frame->show;
$box->pack_start($fs_frame, 1,1,5);
$fbox->pack_start($box, 1,1,0);

	$button = new Gtk::Button $_formatnow;
	$button->can_default;
#	$button->grab_default;
	$button->border_width(5);
#	$button->set_usize(200,40);
	$fbox->pack_start($button, 0,0,0 );
	signal_connect $button "clicked", \&formatnow;
$fbox->show_all();
my $label = new Gtk::Label( $_format );
return ($fbox, $label);
}

sub create_set_page{	
my $cbox = new Gtk::VBox(0,0);
$cbox->border_width(0);
$cbox->show;
$pixmap = new Gtk::Pixmap $disk_logo, $disk_open_mask;
my $hbox = new Gtk::HBox(0,0);
$hbox->pack_start($pixmap,1,1,1);
$pixmap->show;
my $gsklabel = new Gtk::Label "gSwissKnife\n\nhttp://www.eduard.bloch.com/gsk";;
$hbox->pack_start($gsklabel,1,1,1);
$gsklabel->show;
my $alabel = new Gtk::Label "About";
$alabel->show;
$hbox->show;
return ($hbox, $alabel);
};

sub destroy_window {
	my($widget, $windowref, $w2) = @_;
	$$windowref = undef;
	$w2 = undef if defined $w2;
	0;
}

sub adsf_opts {
my($box1,$boxoben,$boxunten,$sfentry,$hbutton,$okbutton);
	if (not defined $adsf_window) {
	$adsf_window = new Gtk::Window "toplevel";
	$adsf_window->set_name("fs-options window");
	$adsf_window->signal_connect("destroy", \&destroy_window, \$adsf_window);
	$adsf_window->signal_connect("delete_event", \&destroy_window, \$adsf_window);
	$adsf_window->set_title("superformat options");
#		$adsf_window->set_uposition(40, 40);
#		$adsf_window->set_usize(300, 150);
	$adsf_window->border_width(0);
	$box1 = new Gtk::VBox(0,0);
	$adsf_window->add($box1);
	$box1->show;

	$boxoben = new Gtk::HBox(0,0);
	$box1->pack_start($boxoben,1,1,2);
	$sflabel = new Gtk::Label "superformat ".(($bb && $preffs=~/dos/i)?"-B":"-f")." /dev/fd".$fnum.$fsuffix;
	$sflabel->set_alignment(0,0);
	$boxoben->pack_start($sflabel,1,1,0);
	$sflabel->show;

	$sfentry= new Gtk::Entry;
	$boxoben->pack_start($sfentry,1,1,0);
	$sfentry->set_text("$adsfopts");
	$sfentry->show;
	$boxoben->show;
	
	$boxunten = new Gtk::HBox(0,0);
	$box1->pack_start($boxunten,1,0,2);
	$boxunten->show;

	$hbutton = new Gtk::Button "Help";
	$hbutton->signal_connect("clicked", sub {system "gnome-help-browser man:superformat&" || system "xterm -e man superformat&"});
	$boxunten->pack_start($hbutton,1,0,2);
	$hbutton->show;

	$okbutton = new Gtk::Button "Ok";
	$okbutton->signal_connect("clicked", sub {
		$adsfopts=($sfentry->get_text);
		destroy $adsf_window});
	$boxunten->pack_start($okbutton,1,0,2);
	$okbutton->show;
	}
	
	if (!visible $adsf_window) {
		show $adsf_window;
	} else {
		destroy $adsf_window;
	}
}

sub msdos_opts {
my ($boxa, $boxb, $box1, $box2, $button, $cancel, $labeltext, $table, $opttext,$labelentry,$optentry);

	if (not defined $msdos_window) {
	$msdos_window = new Gtk::Window "toplevel";
	$msdos_window->set_name("fs-options window");
	$msdos_window->signal_connect("destroy", \&destroy_window, \$msdos_window);
	$msdos_window->signal_connect("delete_event", \&destroy_window, \$msdos_window);
	$msdos_window->set_title("filesystem options");
#		$msdos_window->set_uposition(40, 40);
#		$msdos_window->set_usize(300, 150);
	$msdos_window->border_width(0);
	
	$box1 = new Gtk::VBox(0,0);
	$msdos_window->add($box1);
	$box1->show;
	
	$table = new Gtk::Table(3,2,0);
#		$table->set_row_spacing(0,3);
#		$table->set_row_spacing(1,3);
#		$table->set_col_spacing(1,5);
	$box1->pack_start($table,1,0,2);
	$table->show;
	
	$labeltext = new Gtk::Label "Disk label:";
	Gtk::Misc::set_alignment($labeltext,0,0);
	$labeltext->set_justify("left");
	$table->attach($labeltext, 0,1,0,1,{expand=>1,fill=>0},{expand=>1,fill=>0},0,0);
	$labeltext->set_alignment(0,0);
	show $labeltext;
	
	$labelentry = new Gtk::Entry;
	$labelentry->set_text("$disklabel");
#		$labelentry->grab_default;
	$labelentry->select_region(0, length($labelentry->get_text));
	$table->attach($labelentry, 1,2,0,1,{expand=>1,fill=>1},{expand=>1,fill=>1},3,2);
	show $labelentry;
	
	$opttext = new Gtk::Label "other options:";
	$table->attach($opttext, 0,1,1,2,{expand=>1,fill=>1},{expand=>1,fill=>1},3,2);
	$opttext->set_alignment(0,0);
	show $opttext;
	
	$optentry = new Gtk::Entry;
	$optentry->set_text("$msdosopts");
	$table->attach($optentry, 1,2,1,2,{expand=>1,fill=>1},{expand=>1,fill=>1},3,2);
	show $optentry;
				
	$boxb = new Gtk::HBox(0,0);
	$box1->pack_start($boxb,1,1,0);
	$boxb->show;
			
	$cancel = new Gtk::Button "Cancel";
	$cancel->signal_connect("clicked", sub {destroy $msdos_window});
	$table->attach_defaults($cancel,0,1,2,3);
#		$boxb->pack_start($cancel, 1, 1, 0);
	$cancel->can_default(1);
	$cancel->show;

	$button = new Gtk::Button "Ok";
	$button->signal_connect("clicked", sub {
		$disklabel=($labelentry->get_text);
		#print $disklabel;
		$msdosopts=($optentry->get_text);
		destroy $msdos_window});
#		$boxb->pack_start($button, 1, 1, 0);
	$table->attach_defaults($button,1,2,2,3);
	$button->can_default(1);
	$button->grab_default;
	$button->show;
	}
	
	if (!visible $msdos_window) {
		show $msdos_window;
	} else {
		destroy $msdos_window;
	}
}


sub create_main_window {
        $window = new Gtk::Window('toplevel');
        $window->set_name("main window");
        $window->set_title("Swiss knife");
#	$window->set_uposition(40, 40);
        $window->set_usize(350, 340);
	$window->signal_connect("destroy" => \&Gtk::main_quit);
        $window->signal_connect("delete_event" => \&Gtk::false);
$window->realize;
($disk_logo, $disk_open_mask) = Gtk::Gdk::Pixmap->create_from_xpm_d($window->window, undef, @disk_xpm);

        $box1 = new Gtk::VBox(0, 0);
        $window->add($box1);
        $box1->show;
	my $buffer = "WARNING: This is alpha-software, use it at your own risk. \n©gsk-" . $VERSION . ", found " . ($#floppies+1) ." floppy device(s)";
        $top = new Gtk::Label $buffer;
        show  $top;
        $box1->pack_start($top, 0, 0, 0);

#$notebook->append_page_menu($child, $label_box, $menu_box);

	my $notebook = create_notebook();
	$box1->pack_start($notebook, 1, 1, 0);
	$notebook->show;

	$separator = new Gtk::HSeparator;
        $box1->pack_start($separator, 0, 1, 0);
        $separator->show;
 
        
        $box3 = new Gtk::HBox(0, 10);
        $box3->border_width(3);
	$box1->pack_start($box3, 0, 1, 0);
        $box3->show();
        
	$helpb = new Gtk::Button "Exit";
	signal_connect $helpb "clicked", Gtk::main_quit;

	#sub
	#{$exbutton->set_sensitive(0)};
	$box3->pack_start($helpb,1,1,0);
	$helpb->show;
        
	$exbutton = new Gtk::Button 'Save & Exit';
	signal_connect $exbutton "clicked", \&do_exit;
        $box3->pack_start($exbutton, 1, 1, 0);
#        $button->can_default(1);
#        $button->grab_default();
        $exbutton->show;
        
        $window->show;
}

#starting the main script

if (system"which superformat >/dev/null" and system"which floppycontrol")
	{$err = 1; showmes(@mis_fdutil)}
else
	{
RAUS:	for(0..7){
	undef $ask;
	$num = $_;
	$ask = "floppycontrol /dev/fd" . "$num" . " -T 2>/dev/null";
	if($temp = `$ask`)
	 {
	  next RAUS if($temp=~/.*nul.*/);
	  push(@floppies, $temp);
	 }
	}

	#$temp=0;
	foreach(@floppies){
	#$fdnum= "fdt" . $temp;
	$_ =~ s/\n//g; 
	   if($_ =~ /28/) {push @fdt,5}
	   if($_ =~ /14/) {push @fdt,4}
	   if($_ =~ /72/) {push @fdt,3}
	   if($_ =~ /12/) {push @fdt,2}
	   if($_ =~ /36/) {push @fdt,1}
	}

	if($#floppies lt 0)
	{showmes(@mis_fd, '\$do_exit')}
	$fdtyp = $fdt[$fnum];
#	print $fdtyp;
	create_main_window($#floppies+1);
	}

main Gtk;


Reply to: