home *** CD-ROM | disk | FTP | other *** search
/ Caldera Network Desktop 1.0 / caldera-network-desktop-1.0.bin / images / ramdisk2.img / usr / lib / perl / makefs < prev    next >
Text File  |  1995-10-06  |  4KB  |  217 lines

  1. ###### -*-perl-*-
  2.  
  3. # routines to format partitions
  4.  
  5. # This variable will be used later to determine the
  6. # filesystem type for each partition formatted here
  7. %fsformat = ();
  8.  
  9. @selected_devices = ();
  10.  
  11. $fstype = "ext2";
  12. $badblock_check = "";
  13.  
  14. sub select_format_disks {
  15.     local ( %fsinfolist, $dev, $devsize );
  16.     local ( %fsmenu, $msg );
  17.     local ( $p, $r );
  18.  
  19.     if ($fs_mounted) {
  20.     &rhs_msgbox("Error",
  21. <<EOM
  22. >
  23. Your filesystems are already mounted (and thus, they are
  24. most likely formatted).  If you still wish to format them,
  25. unmount them first.
  26. >
  27. EOM
  28.             , 60);
  29.     return 0;
  30.     }
  31.  
  32.     &rhs_infobox ( "Filesystems",
  33. <<EOM
  34. >
  35. Looking for Linux partitions...
  36. >
  37. EOM
  38.                            , 60);
  39.  
  40.     %fsinfolist = ();
  41.     open(SAVEERR, ">&STDERR");
  42.     open(STDERR, ">/dev/null");
  43.     open(PROC, "fdisk -l |") || &newdie("Can't call fdisk!");
  44.     while (<PROC>) {
  45.         if (/^(.{10}).{5}(.{31}).*Linux native$/) {
  46.         $p = $1; $r = $2;
  47.         $p =~ s/\s$//;
  48.             $fsinfolist{$p} = "$r";
  49.         }
  50.     }
  51.     close PROC;
  52.     open(STDERR, ">&SAVEERR");
  53.  
  54.     if (keys(%fsinfolist) == 0) {
  55.         &rhs_msgbox ( "Filesystems",
  56. <<EOM
  57. >
  58. You do not appear to have any Linux partitions on your system.
  59. You must create at least one before continuing.
  60. >
  61. EOM
  62.                      , 60);
  63.         return 0;
  64.     }
  65.  
  66.     do {
  67.     @selected_devices = ();
  68.     %fsformat = ();
  69.     %fs_menu = %fsinfolist;
  70.     foreach $dev (keys %fs_menu) {
  71.         $fs_menu{$dev} = sprintf("%7s %s", $fsformat{$dev}, $fs_menu{$dev});
  72.     }
  73.     if (! &rhs_checklista("Filesystems",
  74. <<EOM
  75. >
  76. Use the spacebar to select all partitions to format. Then select OK.
  77. >
  78. >      Device        Type  Begin   Start     End  Blocks
  79. EOM
  80.                    , 65, %fs_menu)) {
  81.         return 0;
  82.     }
  83.     if (! scalar(@dialog_result)) {
  84.         next;
  85.     }
  86.     @selected_devices = sort @dialog_result;
  87.     
  88.     foreach $dev (@selected_devices) {
  89.         $fsformat{$dev} = $fstype;
  90.     }
  91.  
  92.     if ($express_install) {
  93.         $dialog_result = "No";
  94.     } else {
  95.         if (! &rhs_menu("Filesystems",
  96. <<EOM
  97. >
  98. Check for bad blocks on the hard drive during formatting?
  99. >
  100. EOM
  101.                 , 50, 2,
  102.                 "Yes", "Check for bad blocks",
  103.                 "No", "Do not check for bad blocks")) {
  104.         next;
  105.         }
  106.     }
  107.     if ($dialog_result eq "Yes") {
  108.         $badblock_check = "-c";
  109.     } else {
  110.         $badblock_check = "";
  111.     }
  112.  
  113.     $msg =
  114. <<EOM
  115. >
  116. Are you absolutely certain that you want to format?
  117. >
  118. EOM
  119.     ;
  120.     foreach $dev (@selected_devices) {
  121.         $msg .= 
  122. <<EOM
  123. >$dev
  124. EOM
  125.     ;
  126.     }
  127.     $msg .=
  128. <<EOM
  129. >
  130. All data on these partitions will be lost!
  131. >
  132. EOM
  133.     ;
  134.     } while (! &rhs_yesno("Filesystems", $msg, 70));
  135.  
  136.     return 1;
  137. }
  138.  
  139. sub format_disks {
  140.     local ( $dev, $devsize, %fsinfolist, $msg, $res, $retval );
  141.  
  142.     $retval = 1;
  143.  
  144.     %fsinfolist = ();
  145.     open(SAVEERR, ">&STDERR");
  146.     open(STDERR, ">/dev/null");
  147.     open(PROC, "fdisk -l |") || &newdie("Can't call fdisk!");
  148.     while (<PROC>) {
  149.         if (/^(.{10}).{5}(.{31}).*Linux native$/) {
  150.         $p = $1; $r = $2;
  151.         $p =~ s/\s$//;
  152.             $fsinfolist{$p} = "$r";
  153.         }
  154.     }
  155.     close PROC;
  156.     open(STDERR, ">&SAVEERR");
  157.  
  158.     if (keys(%fsinfolist) == 0) {
  159.         &rhs_msgbox ( "Filesystems",
  160. <<EOM
  161. >
  162. Your Linux partitions have disappeared.
  163. >
  164. You must create at least one before continuing.
  165. >
  166. EOM
  167.                      , 60);
  168.         return 0;
  169.     }
  170.  
  171.     foreach $dev (@selected_devices) {
  172.     $fsinfolist{$dev} =~ /^.*(.{9})$/;
  173.     $devsize = $1;
  174.     chop($devsize);
  175.  
  176.     $msg =
  177. <<EOM
  178. >
  179. Formatting $dev with $fstype filesystem.
  180. >
  181. EOM
  182.     ;
  183.     if ($badblock_check eq "-c") {
  184.         $msg .=
  185. <<EOM
  186. Checking for bad blocks. This may take a minute or two.
  187. >
  188. EOM
  189.     ;
  190.     }
  191.  
  192.     &rhs_infobox("Formatting Filesystems", $msg, 65);
  193.  
  194.     if ($express_install) {
  195.         $res = &invoke_no_output("mke2fs $badblock_check $dev");
  196.     } else {
  197.         $res = &invoke("mke2fs $badblock_check $dev");
  198.     }
  199.     if ($res) {
  200.         $retval = 0;
  201.         &rhs_msgbox("Error",
  202. <<EOM
  203. >
  204. An error occurred while formatting $dev.
  205. >
  206. EOM
  207.             , 60);
  208.         delete $fsformat{$dev};
  209.     }
  210.     }
  211.  
  212.     return $retval;
  213. }
  214.  
  215. #############
  216. 1;
  217.