Announcing the new curses based fdisk program... cfdisk

cfdisk is a curses based disk drive partitioning program that can
create partitions for a wide variety of operating systems including
Linux, MS-DOS and OS/2.  cfdisk was inspired by the fdisk program, by
A. V. Le Blanc (LeBlanc@mcc.ac.uk).  I hope that this program will be
useful to both new and old Linux users, and I hope it will make the
installation process easier.


                           **** WARNING ****
If you write a bad partition table to disk, it may destroy data and
partitions.


You can FTP cfdisk from ftp.cs.unc.edu in the /pub/martin/linux
directory.

I would also like comments (good and bad) on the user interface, logic
and ease of use.  If you have any suggestions for improvements, I
would be happy to hear them.

My e-mail address is martin@cs.unc.edu.

-------------------------------------------------------------------

    Copyright (C) 1994 Kevin E. Martin (martin@cs.unc.edu)

cfdisk 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.

cfdisk 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 cfdisk; if not, write to the Free Software Foundation,
Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

___
Kevin E. Martin               University of North Carolina at Chapel Hill
martin@cs.unc.edu                          Department of Computer Science
