Date: Mon, 8 Oct 2001 14:23:01 -0400 From: The Anarcat <anarcat@anarcat.dyndns.org> To: Libh <freebsd-libh@freebsd.org> Subject: basic label editor stub, take II Message-ID: <20011008142300.B53336@shall.anarcat.dyndns.org>
next in thread | raw e-mail | index | archive | help
--LwW0XdcUbUexiWVK
Content-Type: multipart/mixed; boundary="TRYliJ5NKNqkz5bu"
Content-Disposition: inline
--TRYliJ5NKNqkz5bu
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Hi again...
I fitted a label editor stub in diskwizard. (attached patch)
I have made a basic "iterator" that walks a DiskChunk hierarchy,
breath-first, pre-order. I have also made a simple "print_chunk" proc to
test that algorithm.
It works fine.
I will use it to create the partition list and the editing interface.
I have included these algorithms in the new disklabel.tcl file.
Now, my concern is the following... Eventually, this tool will (and
should) be used to manipulate things such as /etc/fstab and partitions.
The thing is that a lot of partitions types are *not* supported by
libhdisk. We have the type proc to have a unique integer designating the
partition "type":
MethodDescription("type", "type",
LanguageInterface::Object::MethodDescription::fDynamic,
"0 - whole, 1 - unknown, 2 - fat, 3 - freebsd, 4 - extended, 5 - part, 6=
- unused",
MethodDescription::vtInt,
MethodDescription::vtVoid),
But partition types can be much more than that! For example, it is quite
possible to have a NTFS or ext2fs partitions in there. Currently, this
is not very important since support for these partitions is unstable at
best. But we can probably hope for best support.=20
And anyways, it would be nice to have something other than "unknown" as
partition type when we know what it is, because we know (Disk.cc:420,
sliceTypeNames[]).
Actually, the types from sliceTypeNames are available in the DiskChunk,
as subtype(). So we would probably just need to implement subtype_text()
or something. And as a matter of fact, Disk::slice_type_name already
implements that:
case 1:
for ( SliceTypeName* t =3D sliceTypeNames; t->name; ++t )
if ( subtype =3D=3D t->type )
return(t->name);
return("unknown");
case 2:
return("fat");
case 3:
switch ( subtype ) {
case 165:
for ( SliceTypeName* t =3D sliceTypeNames;
t->name; ++t )
if ( subtype =3D=3D t->type )
return(t->name);
default:
return("unknown");
}
But this is not accessible from DiskChunk...
Anyways, this interface is getting rather heavy. Isn't there a way to
export tables such as sliceTypeNames[] from C/C++ to TCL?
Keeping on the work on the label editor...
A.
--TRYliJ5NKNqkz5bu
Content-Type: text/plain; charset=us-ascii
Content-Description: patch to add partition editor button
Content-Disposition: attachment; filename=patch-20011008
Content-Transfer-Encoding: quoted-printable
Index: diskwizard.tcl
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /home/libh/cvs/libh/release/diskedit/diskwizard.tcl,v
retrieving revision 1.5
diff -u -r1.5 diskwizard.tcl
--- diskwizard.tcl 2001/10/04 18:21:35 1.5
+++ diskwizard.tcl 2001/10/08 18:02:18
@@ -1,5 +1,12 @@
global disks
=20
+proc part_callback {hui button userdata} {
+
+ source disklabel.tcl
+ disklabel
+
+}
+
proc disk_geometry_text {disk} {
# XXX add size of disk in MB
format "%d cyls/%d heads/%d sectors =3D %d sectors" [$disk bios_cyl] [=
$disk bios_hd] [$disk bios_sect] [expr [$disk bios_cyl] * [$disk bios_hd] *=
[$disk bios_sect]]
@@ -52,9 +59,13 @@
=20
set quit_button [$cont button "quit_button" "&Quit" {quit_callback ""}]
set fdisk_button [$cont button "fdisk_button" "&FDisk" {fdisk_callback=
""}]
+ set label_button [$cont button "label_button" "&Partition" {part_callb=
ack ""}]
+
$quit_button resize "10 2"
$fdisk_button resize "10 2"
+ $label_button resize "10 2"
$quit_button move "0 0"
+ $label_button move "19 0"
$fdisk_button move "38 0"
=20
set menubar [$hui menuBar]
--TRYliJ5NKNqkz5bu
Content-Type: application/x-tcl
Content-Description: new disklabel file
Content-Disposition: attachment; filename="disklabel.tcl"
Content-Transfer-Encoding: quoted-printable
# walk a chunk architecture, exectuting proc on each chunk=0Aproc iterate_c=
hunk {chunk procname} {=0A if {[info commands $procname] !=3D $procname}=
{=0A puts stderr "unknown procedure $procname!!!"=0A }=0A =0A=
if {![H::is_null $chunk]} {=0A $procname $chunk=0A iterat=
e_chunk [$chunk next] $procname=0A iterate_chunk [$chunk part] $proc=
name=0A }=0A}=0A=0Aproc print_chunk {chunk} {=0A =0A puts [format =
"%s\t%s\t%s\t%s" \=0A [$chunk name] [$chunk type_text] \=0A =
[$chunk offset] [$chunk end]]=0A=0A}=0A=0A# FIXME: no default fo=
r diskname please!=0A# also, diskname should be something like ad0s2=0Aproc=
disklabel {} {=0A puts stderr "unimplemented"=0A global main_window=
=0A global menubar=0A global hui=0A global slices=0A global dia=
log=0A global activedisk=0A=0A foreach diskname [Disk::Disk_Names] {=
=0A if {![string match "*cd*" $diskname] &&=0A ![string m=
atch "*md*" $diskname]=0A } {=0A if { [catch {set d [Disk=
$diskname]} fid] } {=0A # XXX: we should put this in a wind=
ow=0A puts stderr "warning: $fid"=0A } else {=0A =
set activedisk [Disk $diskname]=0A iterate_ch=
unk [$activedisk chunks] "print_chunk"=0A }=0A }=0A }=
=0A return=0A}
--TRYliJ5NKNqkz5bu--
--LwW0XdcUbUexiWVK
Content-Type: application/pgp-signature
Content-Disposition: inline
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (FreeBSD)
Comment: For info see http://www.gnupg.org
iEYEARECAAYFAjvB7wMACgkQttcWHAnWiGfaqwCfaOrzKDPjwGu5mZ9Mn5+Fi15I
o7UAn3E/fUePUeaQOQgnnQODv6rWFS3g
=UjEW
-----END PGP SIGNATURE-----
--LwW0XdcUbUexiWVK--
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-libh" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20011008142300.B53336>
