home *** CD-ROM | disk | FTP | other *** search
/ Caldera Network Desktop 1.0 / caldera-network-desktop-1.0.bin / images / ramdisk2-beta.img / usr / lib / perl / makefs < prev    next >
Text File  |  1995-12-04  |  3KB  |  197 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 = get_partitions("ext2");
  41.  
  42.     if (keys(%fsinfolist) == 0) {
  43.         &rhs_msgbox ( "Filesystems",
  44. <<EOM
  45. >
  46. You do not appear to have any Linux partitions on your system.
  47. You must create at least one before continuing.
  48. >
  49. EOM
  50.                      , 60);
  51.         return 0;
  52.     }
  53.  
  54.     do {
  55.     @selected_devices = ();
  56.     %fsformat = ();
  57.     %fs_menu = %fsinfolist;
  58.     foreach $dev (keys %fs_menu) {
  59.         #$fs_menu{$dev} = sprintf("%7s %s", $fsformat{$dev}, $fs_menu{$dev});
  60.         ($start, $stop, $blocks) = 
  61.         ($fs_menu{$dev} =~ /(.*) (.*) (.*)/);
  62.         $fs_menu{$dev} = sprintf("ext2 %9s %9s %9s", 
  63.         $start, $stop, $blocks);
  64.     }
  65.     if (! &rhs_checklista("Filesystems",
  66. <<EOM
  67. >
  68. Use the spacebar to select all partitions to format. Then select OK.
  69. >
  70. >      Device        Type     Start       End    Blocks
  71. EOM
  72.                    , 65, %fs_menu)) {
  73.         return 0;
  74.     }
  75.     if (! scalar(@dialog_result)) {
  76.         next;
  77.     }
  78.     @selected_devices = sort @dialog_result;
  79.     
  80.     foreach $dev (@selected_devices) {
  81.         $fsformat{$dev} = $fstype;
  82.     }
  83.  
  84.     if ($express_install) {
  85.         $dialog_result = "No";
  86.     } else {
  87.         if (! &rhs_menu("Filesystems",
  88. <<EOM
  89. >
  90. Check for bad blocks on the hard drive during formatting?
  91. >
  92. EOM
  93.                 , 50, 2,
  94.                 "Yes", "Check for bad blocks",
  95.                 "No", "Do not check for bad blocks")) {
  96.         next;
  97.         }
  98.     }
  99.     if ($dialog_result eq "Yes") {
  100.         $badblock_check = "-c";
  101.     } else {
  102.         $badblock_check = "";
  103.     }
  104.  
  105.     $msg =
  106. <<EOM
  107. >
  108. Are you absolutely certain that you want to format?
  109. >
  110. EOM
  111.     ;
  112.     foreach $dev (@selected_devices) {
  113.         $msg .= 
  114. <<EOM
  115. >$dev
  116. EOM
  117.     ;
  118.     }
  119.     $msg .=
  120. <<EOM
  121. >
  122. All data on these partitions will be lost!
  123. >
  124. EOM
  125.     ;
  126.     } while (! &rhs_yesno("Filesystems", $msg, 70));
  127.  
  128.     return 1;
  129. }
  130.  
  131. sub format_disks {
  132.     local ( $dev, $devsize, %fsinfolist, $msg, $res, $retval );
  133.  
  134.     $retval = 1;
  135.  
  136.     %fsinfolist = get_partitions("ext2");
  137.  
  138.     if (keys(%fsinfolist) == 0) {
  139.         &rhs_msgbox ( "Filesystems",
  140. <<EOM
  141. >
  142. Your Linux partitions have disappeared.
  143. >
  144. You must create at least one before continuing.
  145. >
  146. EOM
  147.                      , 60);
  148.         return 0;
  149.     }
  150.  
  151.     foreach $dev (@selected_devices) {
  152.     $fsinfolist{$dev} =~ /^.*(.{9})$/;
  153.     $devsize = $1;
  154.     chop($devsize);
  155.  
  156.     $msg =
  157. <<EOM
  158. >
  159. Formatting $dev with $fstype filesystem.
  160. >
  161. EOM
  162.     ;
  163.     if ($badblock_check eq "-c") {
  164.         $msg .=
  165. <<EOM
  166. Checking for bad blocks. This may take a minute or two.
  167. >
  168. EOM
  169.     ;
  170.     }
  171.  
  172.     &rhs_infobox("Formatting Filesystems", $msg, 65);
  173.  
  174.     if ($express_install) {
  175.         $res = &invoke_no_output("mke2fs $badblock_check $dev");
  176.     } else {
  177.         $res = &invoke("mke2fs $badblock_check $dev");
  178.     }
  179.     if ($res) {
  180.         $retval = 0;
  181.         &rhs_msgbox("Error",
  182. <<EOM
  183. >
  184. An error occurred while formatting $dev.
  185. >
  186. EOM
  187.             , 60);
  188.         delete $fsformat{$dev};
  189.     }
  190.     }
  191.  
  192.     return $retval;
  193. }
  194.  
  195. #############
  196. 1;
  197.