Skip site navigation (1)Skip section navigation (2)
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>