Many files:
  pass1.c, pass2.c, pass3.c, pass4.c, pass5.c: Add calls to the progress
  	indicator function.
  pass1.c (scan_callback): Add call to the progress feedback function
  	(if it exists).
  super.c (check_super_block): Skip the device size check if the
  	get_device_size returns EXT2_EXT_UNIMPLEMENTED.
  iscan.c (main): Don't use fatal_error() anymore.
  pass1b.c, swapfs.c, badblocks.c: Set E2F_FLAG_ABORT instead of calling
  	fatal_error(0).
  problem.c, pass3.c (PR_3_ROOT_NOT_DIR_ABORT,
  	PR_3_NO_ROOT_INODE_ABORT): New problem codes.
  problem.c, pass2.c (PR_2_SPLIT_DOT): New problem code.
  problem.c, pass1.c (PR_1_SUPPRESS_MESSAGES): New problem code.
  problemP.h: New file which separates out the private fix_problem data
  	structures.
  util.c, dirinfo.c, pass1.c, pass1b.c, pass2.c, pass5.c, super.c,
  	swapfs.c util.c: allocate_memory() now takes a e2fsck context as its
  	first argument, and rename it to be e2fsck_allocate_memory().
problemP.h:
  New file which contains the private problem abstraction definitions.
Makefile.pq:
  Remove include of MAKEFILE.STD, which doesn't exist at this point.

diff --git a/e2fsck/pass2.c b/e2fsck/pass2.c
index 4facc60..85a857b 100644
--- a/e2fsck/pass2.c
+++ b/e2fsck/pass2.c
@@ -63,6 +63,7 @@
 struct check_dir_struct {
 	char *buf;
 	struct problem_context	pctx;
+	int	count, max;
 	e2fsck_t ctx;
 };	
 
@@ -97,7 +98,8 @@
 		ctx->flags |= E2F_FLAG_ABORT;
 		return;
 	}
-	buf = allocate_memory(fs->blocksize, "directory scan buffer");
+	buf = e2fsck_allocate_memory(ctx, fs->blocksize,
+				     "directory scan buffer");
 
 	/*
 	 * Set up the parent pointer for the root directory, if
@@ -110,6 +112,8 @@
 
 	cd.buf = buf;
 	cd.ctx = ctx;
+	cd.count = 0;
+	cd.max = ext2fs_dblist_count(fs->dblist);
 	
 	cd.pctx.errcode = ext2fs_dblist_iterate(fs->dblist, check_dir_block,
 						&cd);
@@ -177,9 +181,8 @@
 	if (dirent->rec_len > 12) {
 		new_len = dirent->rec_len - 12;
 		if (new_len > 12) {
-			preenhalt(ctx);
 			if (created ||
-			    ask(ctx, "Directory entry for '.' is big.  Split", 1)) {
+			    fix_problem(ctx, PR_2_SPLIT_DOT, pctx)) {
 				nextdir = (struct ext2_dir_entry *)
 					((char *) dirent + 12);
 				dirent->rec_len = 12;
@@ -280,6 +283,9 @@
 
 	buf = cd->buf;
 	ctx = cd->ctx;
+
+	if (ctx->progress)
+		(ctx->progress)(ctx, 2, cd->count++, cd->max);
 	
 	/*
 	 * Make sure the inode is still in use (could have been 
@@ -553,7 +559,7 @@
 	/*
 	 * Fix up the bitmaps...
 	 */
-	read_bitmaps(ctx);
+	e2fsck_read_bitmaps(ctx);
 	ext2fs_unmark_inode_bitmap(ctx->inode_used_map, ino);
 	ext2fs_unmark_inode_bitmap(ctx->inode_dir_map, ino);
 	if (ctx->inode_bad_map)
@@ -691,7 +697,7 @@
 	 * Read the inode and block bitmaps in; we'll be messing with
 	 * them.
 	 */
-	read_bitmaps(ctx);
+	e2fsck_read_bitmaps(ctx);
 	
 	/*
 	 * First, find a free block