+# Read Pintos.pm from the same directory as this program.
+BEGIN { my $self = $0; $self =~ s%/+[^/]*$%%; require "$self/Pintos.pm"; }
+
+our ($disk_fn); # Output disk file name.
+our (%parts); # Partitions.
+our ($format); # "partitioned" (default) or "raw"
+our (%geometry); # IDE disk geometry.
+our ($align); # Align partitions on cylinders?
+our ($loader_fn); # File name of loader.
+our ($include_loader); # Include loader?
+our (@kernel_args); # Kernel arguments.
+
+if (grep ($_ eq '--', @ARGV)) {
+ @kernel_args = @ARGV;
+ @ARGV = ();
+ while ((my $arg = shift (@kernel_args)) ne '--') {
+ push (@ARGV, $arg);
+ }
+}
+
+GetOptions ("h|help" => sub { usage (0); },
+
+ "kernel=s" => \&set_part,
+ "filesys=s" => \&set_part,
+ "scratch=s" => \&set_part,
+ "swap=s" => \&set_part,
+
+ "filesys-size=s" => \&set_part,
+ "scratch-size=s" => \&set_part,
+ "swap-size=s" => \&set_part,
+
+ "kernel-from=s" => \&set_part,
+ "filesys-from=s" => \&set_part,
+ "scratch-from=s" => \&set_part,
+ "swap-from=s" => \&set_part,
+
+ "format=s" => \$format,
+ "loader:s" => \&set_loader,
+ "no-loader" => \&set_no_loader,
+ "geometry=s" => \&set_geometry,
+ "align=s" => \&set_align)