Imported reiserfsprogs-3.6.20
diff --git a/CREDITS b/CREDITS
index 8e47774..f396a2d 100644
--- a/CREDITS
+++ b/CREDITS
@@ -45,11 +45,11 @@
 project in many little ways.
 
 Vitaly Fertman wrote  fsck for V3 and  maintains the reiserfsprogs package now.
-He wrote librepair,  userspace plugins repair code, fsck for V4,  and worked on
-developing libreiser4 and userspace plugins with Umka.
+He worked on libreiser4 and userspace plugins; developped librepair, userspace 
+plugins repair code, fsck & debugfs for V4.
 
 Yury Umanets  (aka Umka)  developed  libreiser4,  userspace  plugins,  and  all
-userspace tools (reiser4progs) except of fsck.
+userspace tools (reiser4progs) except of fsck & debugfs.
 
 Joshua Macdonald wrote the first draft of the transaction manager. Yuri Rupasov
 did testing  and benchmarking,  plus he invented the r5 hash  (also used by the
@@ -79,10 +79,6 @@
 V3 maintenance. Reiserfs integration in their distro is consistently solid, and
 they were key to our becoming widely used.
 
-Lycos Europe  (www.lycos-europe.com)  had  a  support  contract  with  us  that
-consistently came in just when we would otherwise have missed payroll, and that
-they kept doubling every year. Much thanks to them.
-
 Many persons came to www.namesys.com/support.html,  and got a question answered
 for $25, or just gave us a small donation there.
 
diff --git a/INSTALL b/INSTALL
index b42a17a..1cdbbeb 100644
--- a/INSTALL
+++ b/INSTALL
@@ -85,7 +85,7 @@
 ==================
 
    By default, `make install' will install the package's files in
-`/usr/local/bin', `/usr/local/man', etc.  You can specify an
+`/usr/local/sbin', `/usr/local/man', etc.  You can specify an
 installation prefix other than `/usr/local' by giving `configure' the
 option `--prefix=PATH'.
 
diff --git a/Makefile.am b/Makefile.am
index bcb518d..48a28d6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,8 +1,18 @@
-SUBDIRS = include lib reiserfscore fsck debugreiserfs resize_reiserfs mkreiserfs tune
+SUBDIRS		= include libmisc libreiserfs libutil utils
 
-noinst_DATA = reiserfsprogs.spec
+EXTRA_DIST	= AUTHORS COPYING NEWS README CREDITS \
+		  reiserfsprogs.spec reiserfsprogs.spec.in depcomp
+#		  libreiserfs.m4
 
-EXTRA_DIST = CREDITS version.h
+aclocaldir 	= $(datadir)/aclocal
+#aclocal_DATA	= libreiserfs.m4
 
-dist-hook:
-	cp -f reiserfsprogs.spec $(distdir)
+define all-sources
+	( find ./ -name '*.[ch]' | grep -v SCCS | grep -v "Attic" | grep -v "reiserfsprogs" )
+endef
+
+TAGS:
+	$(all-sources) | etags -
+
+tags:
+	$(all-sources) | xargs -- ctags -w -o TAGS
diff --git a/Makefile.in b/Makefile.in
index 5b4b0f1..f430cca 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.7.6 from Makefile.am.
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
 # @configure_input@
 
-# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-# Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -13,7 +13,6 @@
 # PARTICULAR PURPOSE.
 
 @SET_MAKE@
-
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 VPATH = @srcdir@
@@ -21,7 +20,6 @@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 top_builddir = .
-
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
@@ -35,7 +33,45 @@
 NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
+build_triplet = @build@
 host_triplet = @host@
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
+	$(srcdir)/reiserfsprogs.spec.in $(top_srcdir)/configure \
+	AUTHORS COPYING ChangeLog INSTALL NEWS compile config.guess \
+	config.sub depcomp install-sh missing mkinstalldirs
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno configure.status.lineno
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = reiserfsprogs.spec
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-exec-recursive install-info-recursive \
+	install-recursive installcheck-recursive installdirs-recursive \
+	pdf-recursive ps-recursive uninstall-info-recursive \
+	uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d $(distdir) \
+    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
 ACLOCAL = @ACLOCAL@
 AMDEP_FALSE = @AMDEP_FALSE@
 AMDEP_TRUE = @AMDEP_TRUE@
@@ -78,6 +114,7 @@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROGS_LDFLAGS = @PROGS_LDFLAGS@
 RANLIB = @RANLIB@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -92,6 +129,8 @@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -112,6 +151,7 @@
 libexecdir = @libexecdir@
 localstatedir = @localstatedir@
 mandir = @mandir@
+mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
@@ -119,48 +159,68 @@
 sharedstatedir = @sharedstatedir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
-SUBDIRS = include lib reiserfscore fsck debugreiserfs resize_reiserfs mkreiserfs tune
+SUBDIRS = include libmisc libreiserfs libutil utils
+EXTRA_DIST = AUTHORS COPYING NEWS README CREDITS \
+		  reiserfsprogs.spec reiserfsprogs.spec.in depcomp
 
-noinst_DATA = reiserfsprogs.spec
-
-EXTRA_DIST = CREDITS version.h
-subdir = .
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-DIST_SOURCES =
-DATA = $(noinst_DATA)
-
-
-RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \
-	ps-recursive install-info-recursive uninstall-info-recursive \
-	all-recursive install-data-recursive install-exec-recursive \
-	installdirs-recursive install-recursive uninstall-recursive \
-	check-recursive installcheck-recursive
-DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \
-	Makefile.in NEWS aclocal.m4 config.guess config.sub configure \
-	configure.in depcomp install-sh missing mkinstalldirs
-DIST_SUBDIRS = $(SUBDIRS)
-all: all-recursive
+#		  libreiserfs.m4
+aclocaldir = $(datadir)/aclocal
+all: config.h
+	$(MAKE) $(AM_MAKEFLAGS) all-recursive
 
 .SUFFIXES:
-
-am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
- configure.lineno
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+am--refresh:
+	@:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
+	      cd $(srcdir) && $(AUTOMAKE) --gnu  \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  Makefile'; \
 	cd $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu  Makefile
-Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
-	cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    echo ' $(SHELL) ./config.status'; \
+	    $(SHELL) ./config.status;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+	esac;
 
-$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	$(SHELL) ./config.status --recheck
-$(srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
-	cd $(srcdir) && $(AUTOCONF)
 
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in 
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+config.h: stamp-h1
+	@if test ! -f $@; then \
+	  rm -f stamp-h1; \
+	  $(MAKE) stamp-h1; \
+	else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+	@rm -f stamp-h1
+	cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
+	cd $(top_srcdir) && $(AUTOHEADER)
+	rm -f stamp-h1
+	touch $@
+
+distclean-hdr:
+	-rm -f config.h stamp-h1
+reiserfsprogs.spec: $(top_builddir)/config.status $(srcdir)/reiserfsprogs.spec.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
 uninstall-info-am:
 
 # This directory's subdirectories are mostly independent; you can cd
@@ -170,7 +230,13 @@
 #     (which will cause the Makefiles to be regenerated when you run `make');
 # (2) otherwise, pass the desired values on the `make' command line.
 $(RECURSIVE_TARGETS):
-	@set fnord $$MAKEFLAGS; amf=$$2; \
+	@failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
 	dot_seen=no; \
 	target=`echo $@ | sed s/-recursive//`; \
 	list='$(SUBDIRS)'; for subdir in $$list; do \
@@ -182,7 +248,7 @@
 	    local_target="$$target"; \
 	  fi; \
 	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	  || eval $$failcom; \
 	done; \
 	if test "$$dot_seen" = "no"; then \
 	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
@@ -190,7 +256,13 @@
 
 mostlyclean-recursive clean-recursive distclean-recursive \
 maintainer-clean-recursive:
-	@set fnord $$MAKEFLAGS; amf=$$2; \
+	@failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
 	dot_seen=no; \
 	case "$@" in \
 	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
@@ -211,7 +283,7 @@
 	    local_target="$$target"; \
 	  fi; \
 	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	  || eval $$failcom; \
 	done && test -z "$$fail"
 tags-recursive:
 	list='$(SUBDIRS)'; for subdir in $$list; do \
@@ -222,14 +294,6 @@
 	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
 	done
 
-ETAGS = etags
-ETAGSFLAGS =
-
-CTAGS = ctags
-CTAGSFLAGS =
-
-tags: TAGS
-
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
@@ -238,38 +302,12 @@
 	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
 	mkid -fID $$unique
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	if (etags --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	else \
-	  include_option=--include; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test -f $$subdir/TAGS && \
-	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(ETAGS_ARGS)$$tags$$unique" \
-	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	     $$tags $$unique
-
 ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
 	tags=; \
 	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 	  done | \
@@ -286,23 +324,11 @@
 
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-
-top_distdir = .
-distdir = $(PACKAGE)-$(VERSION)
-
-am__remove_distdir = \
-  { test ! -d $(distdir) \
-    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
-         && rm -fr $(distdir); }; }
-
-GZIP_ENV = --best
-distuninstallcheck_listfiles = find . -type f -print
-distcleancheck_listfiles = find . -type f -print
 
 distdir: $(DISTFILES)
 	$(am__remove_distdir)
 	mkdir $(distdir)
+	$(mkdir_p) $(distdir)/.
 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
 	list='$(DISTFILES)'; for file in $$list; do \
@@ -314,7 +340,7 @@
 	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
 	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
 	    dir="/$$dir"; \
-	    $(mkinstalldirs) "$(distdir)$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
 	  else \
 	    dir=''; \
 	  fi; \
@@ -329,41 +355,67 @@
 	    || exit 1; \
 	  fi; \
 	done
-	list='$(SUBDIRS)'; for subdir in $$list; do \
+	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test -d $(distdir)/$$subdir \
-	    || mkdir $(distdir)/$$subdir \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(mkdir_p) "$(distdir)/$$subdir" \
 	    || exit 1; \
+	    distdir=`$(am__cd) $(distdir) && pwd`; \
+	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
 	    (cd $$subdir && \
 	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$(top_distdir)" \
-	        distdir=../$(distdir)/$$subdir \
+	        top_distdir="$$top_distdir" \
+	        distdir="$$distdir/$$subdir" \
 	        distdir) \
 	      || exit 1; \
 	  fi; \
 	done
-	$(MAKE) $(AM_MAKEFLAGS) \
-	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
-	  dist-hook
 	-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
 	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
 	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
 	  ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
 	|| chmod -R a+r $(distdir)
 dist-gzip: distdir
-	$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+
+dist-bzip2: distdir
+	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+	$(am__remove_distdir)
+
+dist-tarZ: distdir
+	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+	$(am__remove_distdir)
+
+dist-shar: distdir
+	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	$(am__remove_distdir)
+
+dist-zip: distdir
+	-rm -f $(distdir).zip
+	zip -rq $(distdir).zip $(distdir)
 	$(am__remove_distdir)
 
 dist dist-all: distdir
-	$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
 	$(am__remove_distdir)
 
 # This target untars the dist file and tries a VPATH configuration.  Then
 # it guarantees that the distribution is self-contained by making another
 # tarfile.
 distcheck: dist
-	$(am__remove_distdir)
-	GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
+	case '$(DIST_ARCHIVES)' in \
+	*.tar.gz*) \
+	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+	*.tar.bz2*) \
+	  bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+	*.tar.Z*) \
+	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+	*.shar.gz*) \
+	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+	*.zip*) \
+	  unzip $(distdir).zip ;;\
+	esac
 	chmod -R a-w $(distdir); chmod a+w $(distdir)
 	mkdir $(distdir)/_build
 	mkdir $(distdir)/_inst
@@ -383,19 +435,20 @@
 	        distuninstallcheck \
 	  && chmod -R a-w "$$dc_install_base" \
 	  && ({ \
-	       (cd ../.. && $(mkinstalldirs) "$$dc_destdir") \
+	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
 	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
 	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
 	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
 	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
 	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
 	  && rm -rf "$$dc_destdir" \
-	  && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \
-	  && rm -f $(distdir).tar.gz \
+	  && $(MAKE) $(AM_MAKEFLAGS) dist \
+	  && rm -rf $(DIST_ARCHIVES) \
 	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
 	$(am__remove_distdir)
-	@echo "$(distdir).tar.gz is ready for distribution" | \
-	  sed 'h;s/./=/g;p;x;p;x'
+	@(echo "$(distdir) archives ready for distribution: "; \
+	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+	  sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
 distuninstallcheck:
 	@cd $(distuninstallcheck_dir) \
 	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
@@ -416,10 +469,9 @@
 	       exit 1; } >&2
 check-am: all-am
 check: check-recursive
-all-am: Makefile $(DATA)
+all-am: Makefile config.h
 installdirs: installdirs-recursive
 installdirs-am:
-
 install: install-recursive
 install-exec: install-exec-recursive
 install-data: install-data-recursive
@@ -431,7 +483,7 @@
 installcheck: installcheck-recursive
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -439,7 +491,7 @@
 clean-generic:
 
 distclean-generic:
-	-rm -f Makefile $(CONFIG_CLEAN_FILES)
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
@@ -450,12 +502,15 @@
 
 distclean: distclean-recursive
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-distclean-am: clean-am distclean-generic distclean-tags
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
 
 dvi: dvi-recursive
 
 dvi-am:
 
+html: html-recursive
+
 info: info-recursive
 
 info-am:
@@ -473,6 +528,7 @@
 maintainer-clean: maintainer-clean-recursive
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
 	-rm -rf $(top_srcdir)/autom4te.cache
+	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-recursive
@@ -491,26 +547,32 @@
 
 uninstall-info: uninstall-info-recursive
 
-.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \
-	clean-generic clean-recursive ctags ctags-recursive dist \
-	dist-all dist-gzip distcheck distclean distclean-generic \
-	distclean-recursive distclean-tags distcleancheck distdir \
-	distuninstallcheck dvi dvi-am dvi-recursive info info-am \
-	info-recursive install install-am install-data install-data-am \
-	install-data-recursive install-exec install-exec-am \
-	install-exec-recursive install-info install-info-am \
-	install-info-recursive install-man install-recursive \
-	install-strip installcheck installcheck-am installdirs \
-	installdirs-am installdirs-recursive maintainer-clean \
-	maintainer-clean-generic maintainer-clean-recursive mostlyclean \
-	mostlyclean-generic mostlyclean-recursive pdf pdf-am \
-	pdf-recursive ps ps-am ps-recursive tags tags-recursive \
-	uninstall uninstall-am uninstall-info-am \
-	uninstall-info-recursive uninstall-recursive
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
+	check-am clean clean-generic clean-recursive ctags \
+	ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \
+	dist-tarZ dist-zip distcheck distclean distclean-generic \
+	distclean-hdr distclean-recursive distclean-tags \
+	distcleancheck distdir distuninstallcheck dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-man install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic maintainer-clean-recursive \
+	mostlyclean mostlyclean-generic mostlyclean-recursive pdf \
+	pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
+	uninstall-info-am
 
+#aclocal_DATA	= libreiserfs.m4
 
-dist-hook:
-	cp -f reiserfsprogs.spec $(distdir)
+define all-sources
+	( find ./ -name '*.[ch]' | grep -v SCCS | grep -v "Attic" | grep -v "reiserfsprogs" )
+endef
+
+TAGS:
+	$(all-sources) | etags -
+
+tags:
+	$(all-sources) | xargs -- ctags -w -o TAGS
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/aclocal.m4 b/aclocal.m4
index 6a91c51..cd564ba 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,7 +1,7 @@
-# generated automatically by aclocal 1.7.6 -*- Autoconf -*-
+# generated automatically by aclocal 1.9.5 -*- Autoconf -*-
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
-# Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005  Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -11,332 +11,6063 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
-# Do all the work for Automake.                            -*- Autoconf -*-
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
 
-# This macro actually does too much some checks are only needed if
-# your package does certain things.  But this isn't really a big deal.
+# serial 47 AC_PROG_LIBTOOL
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-# Free Software Foundation, Inc.
 
-# This program 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, or (at your option)
-# any later version.
+# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
+# -----------------------------------------------------------
+# If this macro is not defined by Autoconf, define it here.
+m4_ifdef([AC_PROVIDE_IFELSE],
+         [],
+         [m4_define([AC_PROVIDE_IFELSE],
+	         [m4_ifdef([AC_PROVIDE_$1],
+		           [$2], [$3])])])
 
-# This program 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 this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
+# AC_PROG_LIBTOOL
+# ---------------
+AC_DEFUN([AC_PROG_LIBTOOL],
+[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
+dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
+dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
+  AC_PROVIDE_IFELSE([AC_PROG_CXX],
+    [AC_LIBTOOL_CXX],
+    [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
+  ])])
+dnl And a similar setup for Fortran 77 support
+  AC_PROVIDE_IFELSE([AC_PROG_F77],
+    [AC_LIBTOOL_F77],
+    [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
+])])
 
-# serial 10
+dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
+dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
+dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
+  AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+    [AC_LIBTOOL_GCJ],
+    [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+      [AC_LIBTOOL_GCJ],
+      [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
+	[AC_LIBTOOL_GCJ],
+      [ifdef([AC_PROG_GCJ],
+	     [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+       ifdef([A][M_PROG_GCJ],
+	     [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+       ifdef([LT_AC_PROG_GCJ],
+	     [define([LT_AC_PROG_GCJ],
+		defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
+])])# AC_PROG_LIBTOOL
 
-AC_PREREQ([2.54])
 
-# Autoconf 2.50 wants to disallow AM_ names.  We explicitly allow
-# the ones we care about.
-m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+# _AC_PROG_LIBTOOL
+# ----------------
+AC_DEFUN([_AC_PROG_LIBTOOL],
+[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
 
-# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
-# AM_INIT_AUTOMAKE([OPTIONS])
-# -----------------------------------------------
-# The call with PACKAGE and VERSION arguments is the old style
-# call (pre autoconf-2.50), which is being phased out.  PACKAGE
-# and VERSION should now be passed to AC_INIT and removed from
-# the call to AM_INIT_AUTOMAKE.
-# We support both call styles for the transition.  After
-# the next Automake release, Autoconf can make the AC_INIT
-# arguments mandatory, and then we can depend on a new Autoconf
-# release and drop the old call support.
-AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
- AC_REQUIRE([AC_PROG_INSTALL])dnl
-# test to see if srcdir already configured
-if test "`cd $srcdir && pwd`" != "`pwd`" &&
-   test -f $srcdir/config.status; then
-  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+# Prevent multiple expansion
+define([AC_PROG_LIBTOOL], [])
+])# _AC_PROG_LIBTOOL
+
+
+# AC_LIBTOOL_SETUP
+# ----------------
+AC_DEFUN([AC_LIBTOOL_SETUP],
+[AC_PREREQ(2.50)dnl
+AC_REQUIRE([AC_ENABLE_SHARED])dnl
+AC_REQUIRE([AC_ENABLE_STATIC])dnl
+AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_LD])dnl
+AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
+AC_REQUIRE([AC_PROG_NM])dnl
+
+AC_REQUIRE([AC_PROG_LN_S])dnl
+AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+AC_REQUIRE([AC_OBJEXT])dnl
+AC_REQUIRE([AC_EXEEXT])dnl
+dnl
+
+AC_LIBTOOL_SYS_MAX_CMD_LEN
+AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+AC_LIBTOOL_OBJDIR
+
+AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+_LT_AC_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
+
+# Same as above, but do not quote variable references.
+[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+AC_CHECK_TOOL(AR, ar, false)
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+AC_CHECK_TOOL(STRIP, strip, :)
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$SED" && SED=sed
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+    ;;
+  *)
+    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
 fi
 
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
-  if (cygpath --version) >/dev/null 2>/dev/null; then
-    CYGPATH_W='cygpath -w'
-  else
-    CYGPATH_W=echo
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    AC_PATH_MAGIC
+  fi
+  ;;
+esac
+
+AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+enable_win32_dll=yes, enable_win32_dll=no)
+
+AC_ARG_ENABLE([libtool-lock],
+    [AC_HELP_STRING([--disable-libtool-lock],
+	[avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+AC_ARG_WITH([pic],
+    [AC_HELP_STRING([--with-pic],
+	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [pic_mode="$withval"],
+    [pic_mode=default])
+test -z "$pic_mode" && pic_mode=default
+
+# Use C for the default configuration in the libtool script
+tagname=
+AC_LIBTOOL_LANG_C_CONFIG
+_LT_AC_TAGCONFIG
+])# AC_LIBTOOL_SETUP
+
+
+# _LT_AC_SYS_COMPILER
+# -------------------
+AC_DEFUN([_LT_AC_SYS_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_AC_SYS_COMPILER
+
+
+# _LT_AC_SYS_LIBPATH_AIX
+# ----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
+[AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_AC_SYS_LIBPATH_AIX
+
+
+# _LT_AC_SHELL_INIT(ARG)
+# ----------------------
+AC_DEFUN([_LT_AC_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+	 [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_AC_SHELL_INIT
+
+
+# _LT_AC_PROG_ECHO_BACKSLASH
+# --------------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
+[_LT_AC_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+  ;;
+esac
+
+echo=${ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X[$]1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+[$]*
+EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+  for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+       echo_test_string="`eval $cmd`" &&
+       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+    then
+      break
+    fi
+  done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+   test "X$echo_testing_string" = "X$echo_test_string"; then
+  :
+else
+  # The Solaris, AIX, and Digital Unix default echo programs unquote
+  # backslashes.  This makes it impossible to quote backslashes using
+  #   echo "$something" | sed 's/\\/\\\\/g'
+  #
+  # So, first we look for a working echo in the user's PATH.
+
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for dir in $PATH /usr/ucb; do
+    IFS="$lt_save_ifs"
+    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      echo="$dir/echo"
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+
+  if test "X$echo" = Xecho; then
+    # We didn't find a better echo, so look for alternatives.
+    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      # This shell has a builtin print -r that does the trick.
+      echo='print -r'
+    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+	 test "X$CONFIG_SHELL" != X/bin/ksh; then
+      # If we have ksh, try running configure again with it.
+      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+      export ORIGINAL_CONFIG_SHELL
+      CONFIG_SHELL=/bin/ksh
+      export CONFIG_SHELL
+      exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+    else
+      # Try using printf.
+      echo='printf %s\n'
+      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+	 test "X$echo_testing_string" = "X$echo_test_string"; then
+	# Cool, printf works
+	:
+      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	export CONFIG_SHELL
+	SHELL="$CONFIG_SHELL"
+	export SHELL
+	echo="$CONFIG_SHELL [$]0 --fallback-echo"
+      elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	echo="$CONFIG_SHELL [$]0 --fallback-echo"
+      else
+	# maybe with a smaller string...
+	prev=:
+
+	for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+	  then
+	    break
+	  fi
+	  prev="$cmd"
+	done
+
+	if test "$prev" != 'sed 50q "[$]0"'; then
+	  echo_test_string=`eval $prev`
+	  export echo_test_string
+	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+	else
+	  # Oops.  We lost completely, so just stick with echo.
+	  echo=echo
+	fi
+      fi
+    fi
   fi
 fi
-AC_SUBST([CYGPATH_W])
+fi
 
-# Define the identity of the package.
-dnl Distinguish between old-style and new-style calls.
-m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
- AC_SUBST([PACKAGE], [$1])dnl
- AC_SUBST([VERSION], [$2])],
-[_AM_SET_OPTIONS([$1])dnl
- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+   ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
 
-_AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+AC_SUBST(ECHO)
+])])# _LT_AC_PROG_ECHO_BACKSLASH
 
-# Some tools Automake needs.
-AC_REQUIRE([AM_SANITY_CHECK])dnl
-AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
-AM_MISSING_PROG(AUTOCONF, autoconf)
-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
-AM_MISSING_PROG(AUTOHEADER, autoheader)
-AM_MISSING_PROG(MAKEINFO, makeinfo)
-AM_MISSING_PROG(AMTAR, tar)
-AM_PROG_INSTALL_SH
-AM_PROG_INSTALL_STRIP
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
-AC_REQUIRE([AC_PROG_AWK])dnl
-AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-AC_REQUIRE([AM_SET_LEADING_DOT])dnl
 
-_AM_IF_OPTION([no-dependencies],,
-[AC_PROVIDE_IFELSE([AC_PROG_CC],
-                  [_AM_DEPENDENCIES(CC)],
-                  [define([AC_PROG_CC],
-                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_CXX],
-                  [_AM_DEPENDENCIES(CXX)],
-                  [define([AC_PROG_CXX],
-                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
-])
+# _LT_AC_LOCK
+# -----------
+AC_DEFUN([_LT_AC_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+    [AC_HELP_STRING([--disable-libtool-lock],
+	[avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *ELF-32*)
+      HPUX_IA64_MODE="32"
+      ;;
+    *ELF-64*)
+      HPUX_IA64_MODE="64"
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+   if test "$lt_cv_prog_gnu_ld" = yes; then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -melf32bsmip"
+      ;;
+    *N32*)
+      LD="${LD-ld} -melf32bmipn32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -melf64bmip"
+      ;;
+    esac
+   else
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -32"
+      ;;
+    *N32*)
+      LD="${LD-ld} -n32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -64"
+      ;;
+    esac
+   fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case "`/usr/bin/file conftest.o`" in
+    *32-bit*)
+      case $host in
+        x86_64-*linux*)
+          LD="${LD-ld} -m elf_i386"
+          ;;
+        ppc64-*linux*|powerpc64-*linux*)
+          LD="${LD-ld} -m elf32ppclinux"
+          ;;
+        s390x-*linux*)
+          LD="${LD-ld} -m elf_s390"
+          ;;
+        sparc64-*linux*)
+          LD="${LD-ld} -m elf32_sparc"
+          ;;
+      esac
+      ;;
+    *64-bit*)
+      case $host in
+        x86_64-*linux*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        ppc*-*linux*|powerpc*-*linux*)
+          LD="${LD-ld} -m elf64ppc"
+          ;;
+        s390*-*linux*)
+          LD="${LD-ld} -m elf64_s390"
+          ;;
+        sparc*-*linux*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+  ])
+esac
+
+need_locks="$enable_libtool_lock"
+
+])# _LT_AC_LOCK
+
+
+# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
+[AC_REQUIRE([LT_AC_PROG_SED])
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+  ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       $2=yes
+     fi
+   fi
+   $rm conftest*
 ])
 
+if test x"[$]$2" = xyes; then
+    ifelse([$5], , :, [$5])
+else
+    ifelse([$6], , :, [$6])
+fi
+])# AC_LIBTOOL_COMPILER_OPTION
 
-# When config.status generates a header, we must update the stamp-h file.
-# This file resides in the same directory as the config header
-# that is generated.  The stamp files are numbered to have different names.
 
-# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
-# loop where config.status creates the headers, so we can generate
-# our stamp files there.
-AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
-[# Compute $1's index in $config_headers.
-_am_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $1 | $1:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                          [ACTION-SUCCESS], [ACTION-FAILURE])
+# ------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
+[AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   printf "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+     else
+       $2=yes
+     fi
+   fi
+   $rm conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    ifelse([$4], , :, [$4])
+else
+    ifelse([$5], , :, [$5])
+fi
+])# AC_LIBTOOL_LINKER_OPTION
+
+
+# AC_LIBTOOL_SYS_MAX_CMD_LEN
+# --------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
+[# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536 # usable default for *BSD
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    ;;
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    # 
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  *)
+    # If test is not a shell built-in, we'll probably end up computing a
+    # maximum length that is only half of the actual maximum length, but
+    # we can't tell.
+    SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+    while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
+	       = "XX$teststring") >/dev/null 2>&1 &&
+	    new_result=`expr "X$teststring" : ".*" 2>&1` &&
+	    lt_cv_sys_max_cmd_len=$new_result &&
+	    test $i != 17 # 1/2 MB should be enough
+    do
+      i=`expr $i + 1`
+      teststring=$teststring$teststring
+    done
+    teststring=
+    # Add a significant safety factor because C++ compilers can tack on massive
+    # amounts of additional arguments before passing them to the linker.
+    # It appears as though 1/2 is a usable value.
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    ;;
   esac
-done
-echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+])# AC_LIBTOOL_SYS_MAX_CMD_LEN
 
-# Copyright 2002  Free Software Foundation, Inc.
 
+# _LT_AC_CHECK_DLFCN
+# --------------------
+AC_DEFUN([_LT_AC_CHECK_DLFCN],
+[AC_CHECK_HEADERS(dlfcn.h)dnl
+])# _LT_AC_CHECK_DLFCN
+
+
+# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ------------------------------------------------------------------
+AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}]
+EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_unknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_AC_TRY_DLOPEN_SELF
+
+
+# AC_LIBTOOL_DLOPEN_SELF
+# -------------------
+AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+   ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+   ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+	  [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
+	[AC_CHECK_FUNC([dlopen],
+	      [lt_cv_dlopen="dlopen"],
+	  [AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+	    [AC_CHECK_LIB([svld], [dlopen],
+		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+	      [AC_CHECK_LIB([dld], [dld_link],
+		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
+	      ])
+	    ])
+	  ])
+	])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+	  lt_cv_dlopen_self, [dnl
+	  _LT_AC_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+    	  lt_cv_dlopen_self_static, [dnl
+	  _LT_AC_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+])# AC_LIBTOOL_DLOPEN_SELF
+
+
+# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
+# ---------------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler
+AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s out/conftest.err; then
+       _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w .
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+])
+])# AC_LIBTOOL_PROG_CC_C_O
+
+
+# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
+# -----------------------------------------
+# Check to see if we can do hard links to lock some files if needed
+AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
+[AC_REQUIRE([_LT_AC_LOCK])dnl
+
+hard_links="nottested"
+if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
+
+
+# AC_LIBTOOL_OBJDIR
+# -----------------
+AC_DEFUN([AC_LIBTOOL_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+])# AC_LIBTOOL_OBJDIR
+
+
+# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
+# ----------------------------------------------
+# Check hardcoding attributes.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_AC_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
+   test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \
+   test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+     test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_AC_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_AC_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
+
+
+# AC_LIBTOOL_SYS_LIB_STRIP
+# ------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
+[striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         AC_MSG_RESULT([yes])
+       else
+  AC_MSG_RESULT([no])
+fi
+       ;;
+   *)
+  AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+])# AC_LIBTOOL_SYS_LIB_STRIP
+
+
+# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
+[AC_MSG_CHECKING([dynamic linker characteristics])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[[45]]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case "$host_cpu" in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[[89]] | openbsd2.[[89]].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+
+
+# _LT_AC_TAGCONFIG
+# ----------------
+AC_DEFUN([_LT_AC_TAGCONFIG],
+[AC_ARG_WITH([tags],
+    [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
+        [include additional configurations @<:@automatic@:>@])],
+    [tagnames="$withval"])
+
+if test -f "$ltmain" && test -n "$tagnames"; then
+  if test ! -f "${ofile}"; then
+    AC_MSG_WARN([output file `$ofile' does not exist])
+  fi
+
+  if test -z "$LTCC"; then
+    eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+    if test -z "$LTCC"; then
+      AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
+    else
+      AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
+    fi
+  fi
+
+  # Extract list of available tagged configurations in $ofile.
+  # Note that this assumes the entire list is on one line.
+  available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+
+  lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+  for tagname in $tagnames; do
+    IFS="$lt_save_ifs"
+    # Check whether tagname contains only valid characters
+    case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
+    "") ;;
+    *)  AC_MSG_ERROR([invalid tag name: $tagname])
+	;;
+    esac
+
+    if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+    then
+      AC_MSG_ERROR([tag name \"$tagname\" already exists])
+    fi
+
+    # Update the list of available tags.
+    if test -n "$tagname"; then
+      echo appending configuration tag \"$tagname\" to $ofile
+
+      case $tagname in
+      CXX)
+	if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+	    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+	    (test "X$CXX" != "Xg++"))) ; then
+	  AC_LIBTOOL_LANG_CXX_CONFIG
+	else
+	  tagname=""
+	fi
+	;;
+
+      F77)
+	if test -n "$F77" && test "X$F77" != "Xno"; then
+	  AC_LIBTOOL_LANG_F77_CONFIG
+	else
+	  tagname=""
+	fi
+	;;
+
+      GCJ)
+	if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+	  AC_LIBTOOL_LANG_GCJ_CONFIG
+	else
+	  tagname=""
+	fi
+	;;
+
+      RC)
+	AC_LIBTOOL_LANG_RC_CONFIG
+	;;
+
+      *)
+	AC_MSG_ERROR([Unsupported tag name: $tagname])
+	;;
+      esac
+
+      # Append the new tag name to the list of available tags.
+      if test -n "$tagname" ; then
+      available_tags="$available_tags $tagname"
+    fi
+    fi
+  done
+  IFS="$lt_save_ifs"
+
+  # Now substitute the updated list of available tags.
+  if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+    mv "${ofile}T" "$ofile"
+    chmod +x "$ofile"
+  else
+    rm -f "${ofile}T"
+    AC_MSG_ERROR([unable to update list of available tagged configurations.])
+  fi
+fi
+])# _LT_AC_TAGCONFIG
+
+
+# AC_LIBTOOL_DLOPEN
+# -----------------
+# enable checks for dlopen support
+AC_DEFUN([AC_LIBTOOL_DLOPEN],
+ [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_DLOPEN
+
+
+# AC_LIBTOOL_WIN32_DLL
+# --------------------
+# declare package support for building win32 dll's
+AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_WIN32_DLL
+
+
+# AC_ENABLE_SHARED([DEFAULT])
+# ---------------------------
+# implement the --enable-shared flag
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_SHARED],
+[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([shared],
+    [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+	[build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]AC_ENABLE_SHARED_DEFAULT)
+])# AC_ENABLE_SHARED
+
+
+# AC_DISABLE_SHARED
+# -----------------
+#- set the default shared flag to --disable-shared
+AC_DEFUN([AC_DISABLE_SHARED],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_SHARED(no)
+])# AC_DISABLE_SHARED
+
+
+# AC_ENABLE_STATIC([DEFAULT])
+# ---------------------------
+# implement the --enable-static flag
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_STATIC],
+[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([static],
+    [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+	[build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]AC_ENABLE_STATIC_DEFAULT)
+])# AC_ENABLE_STATIC
+
+
+# AC_DISABLE_STATIC
+# -----------------
+# set the default static flag to --disable-static
+AC_DEFUN([AC_DISABLE_STATIC],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_STATIC(no)
+])# AC_DISABLE_STATIC
+
+
+# AC_ENABLE_FAST_INSTALL([DEFAULT])
+# ---------------------------------
+# implement the --enable-fast-install flag
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_FAST_INSTALL],
+[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([fast-install],
+    [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)
+])# AC_ENABLE_FAST_INSTALL
+
+
+# AC_DISABLE_FAST_INSTALL
+# -----------------------
+# set the default to --disable-fast-install
+AC_DEFUN([AC_DISABLE_FAST_INSTALL],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_FAST_INSTALL(no)
+])# AC_DISABLE_FAST_INSTALL
+
+
+# AC_LIBTOOL_PICMODE([MODE])
+# --------------------------
+# implement the --with-pic flag
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+AC_DEFUN([AC_LIBTOOL_PICMODE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+pic_mode=ifelse($#,1,$1,default)
+])# AC_LIBTOOL_PICMODE
+
+
+# AC_PROG_EGREP
+# -------------
+# This is predefined starting with Autoconf 2.54, so this conditional
+# definition can be removed once we require Autoconf 2.54 or later.
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
+[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
+   [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+    then ac_cv_prog_egrep='grep -E'
+    else ac_cv_prog_egrep='egrep'
+    fi])
+ EGREP=$ac_cv_prog_egrep
+ AC_SUBST([EGREP])
+])])
+
+
+# AC_PATH_TOOL_PREFIX
+# -------------------
+# find a file program which can recognise shared library
+AC_DEFUN([AC_PATH_TOOL_PREFIX],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="ifelse([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+])# AC_PATH_TOOL_PREFIX
+
+
+# AC_PATH_MAGIC
+# -------------
+# find a file program which can recognise a shared library
+AC_DEFUN([AC_PATH_MAGIC],
+[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# AC_PATH_MAGIC
+
+
+# AC_PROG_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([AC_PROG_LD],
+[AC_ARG_WITH([gnu-ld],
+    [AC_HELP_STRING([--with-gnu-ld],
+	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])
+AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_PROG_LD_GNU
+])# AC_PROG_LD
+
+
+# AC_PROG_LD_GNU
+# --------------
+AC_DEFUN([AC_PROG_LD_GNU],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# AC_PROG_LD_GNU
+
+
+# AC_PROG_LD_RELOAD_FLAG
+# ----------------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$CC -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+])# AC_PROG_LD_RELOAD_FLAG
+
+
+# AC_DEPLIBS_CHECK_METHOD
+# -----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
+[AC_CACHE_CHECK([how to recognise dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[[45]]*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump'.
+  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | kfreebsd*-gnu | dragonfly*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case "$host_cpu" in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+nto-qnx*)
+  lt_cv_deplibs_check_method=unknown
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sco3.2v5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+])# AC_DEPLIBS_CHECK_METHOD
+
+
+# AC_PROG_NM
+# ----------
+# find the pathname to a BSD-compatible name lister
+AC_DEFUN([AC_PROG_NM],
+[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    tmp_nm="$ac_dir/${ac_tool_prefix}nm"
+    if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+      # Check to see if the nm accepts a BSD-compat flag.
+      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+      #   nm: unknown option "B" ignored
+      # Tru64's nm complains that /dev/null is an invalid object file
+      case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+      */dev/null* | *'Invalid file or object type'*)
+	lt_cv_path_NM="$tmp_nm -B"
+	break
+        ;;
+      *)
+	case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	*/dev/null*)
+	  lt_cv_path_NM="$tmp_nm -p"
+	  break
+	  ;;
+	*)
+	  lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	  continue # so that we can try to find one that supports BSD flags
+	  ;;
+	esac
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi])
+NM="$lt_cv_path_NM"
+])# AC_PROG_NM
+
+
+# AC_CHECK_LIBM
+# -------------
+# check for math library
+AC_DEFUN([AC_CHECK_LIBM],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+])# AC_CHECK_LIBM
+
+
+# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl convenience library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-convenience to the configure arguments.  Note that LIBLTDL
+# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If
+# DIRECTORY is not provided, it is assumed to be `libltdl'.  LIBLTDL will
+# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with
+# '${top_srcdir}/' (note the single quotes!).  If your package is not
+# flat and you're not using automake, define top_builddir and
+# top_srcdir appropriately in the Makefiles.
+AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+  case $enable_ltdl_convenience in
+  no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
+  "") enable_ltdl_convenience=yes
+      ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
+  esac
+  LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
+  LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+  # For backwards non-gettext consistent compatibility...
+  INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_CONVENIENCE
+
+
+# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl installable library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-install to the configure arguments.  Note that LIBLTDL
+# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If
+# DIRECTORY is not provided and an installed libltdl is not found, it is
+# assumed to be `libltdl'.  LIBLTDL will be prefixed with '${top_builddir}/'
+# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single
+# quotes!).  If your package is not flat and you're not using automake,
+# define top_builddir and top_srcdir appropriately in the Makefiles.
+# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
+AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+  AC_CHECK_LIB(ltdl, lt_dlinit,
+  [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
+  [if test x"$enable_ltdl_install" = xno; then
+     AC_MSG_WARN([libltdl not installed, but installation disabled])
+   else
+     enable_ltdl_install=yes
+   fi
+  ])
+  if test x"$enable_ltdl_install" = x"yes"; then
+    ac_configure_args="$ac_configure_args --enable-ltdl-install"
+    LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
+    LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+  else
+    ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
+    LIBLTDL="-lltdl"
+    LTDLINCL=
+  fi
+  # For backwards non-gettext consistent compatibility...
+  INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_INSTALLABLE
+
+
+# AC_LIBTOOL_CXX
+# --------------
+# enable support for C++ libraries
+AC_DEFUN([AC_LIBTOOL_CXX],
+[AC_REQUIRE([_LT_AC_LANG_CXX])
+])# AC_LIBTOOL_CXX
+
+
+# _LT_AC_LANG_CXX
+# ---------------
+AC_DEFUN([_LT_AC_LANG_CXX],
+[AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([_LT_AC_PROG_CXXCPP])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
+])# _LT_AC_LANG_CXX
+
+# _LT_AC_PROG_CXXCPP
+# ---------------
+AC_DEFUN([_LT_AC_PROG_CXXCPP],
+[
+AC_REQUIRE([AC_PROG_CXX])
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+fi
+])# _LT_AC_PROG_CXXCPP
+
+# AC_LIBTOOL_F77
+# --------------
+# enable support for Fortran 77 libraries
+AC_DEFUN([AC_LIBTOOL_F77],
+[AC_REQUIRE([_LT_AC_LANG_F77])
+])# AC_LIBTOOL_F77
+
+
+# _LT_AC_LANG_F77
+# ---------------
+AC_DEFUN([_LT_AC_LANG_F77],
+[AC_REQUIRE([AC_PROG_F77])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
+])# _LT_AC_LANG_F77
+
+
+# AC_LIBTOOL_GCJ
+# --------------
+# enable support for GCJ libraries
+AC_DEFUN([AC_LIBTOOL_GCJ],
+[AC_REQUIRE([_LT_AC_LANG_GCJ])
+])# AC_LIBTOOL_GCJ
+
+
+# _LT_AC_LANG_GCJ
+# ---------------
+AC_DEFUN([_LT_AC_LANG_GCJ],
+[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
+    [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
+      [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
+	 [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
+	   [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
+])# _LT_AC_LANG_GCJ
+
+
+# AC_LIBTOOL_RC
+# --------------
+# enable support for Windows resource files
+AC_DEFUN([AC_LIBTOOL_RC],
+[AC_REQUIRE([LT_AC_PROG_RC])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
+])# AC_LIBTOOL_RC
+
+
+# AC_LIBTOOL_LANG_C_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
+AC_DEFUN([_LT_AC_LANG_C_CONFIG],
+[lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}\n'
+
+_LT_AC_SYS_COMPILER
+
+#
+# Check for any special shared library compilation flags.
+#
+_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)=
+if test "$GCC" = no; then
+  case $host_os in
+  sco3.2v5*)
+    _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf'
+    ;;
+  esac
+fi
+if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then
+  AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries])
+  if echo "$old_CC $old_CFLAGS " | grep "[[ 	]]$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[ 	]]" >/dev/null; then :
+  else
+    AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure])
+    _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no
+  fi
+fi
+
+
+#
+# Check to make sure the static flag actually works.
+#
+AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works],
+  _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
+  $_LT_AC_TAGVAR(lt_prog_compiler_static, $1),
+  [],
+  [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
+
+
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+# Report which librarie types wil actually be built
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+
+aix4* | aix5*)
+  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+    test "$enable_shared" = yes && enable_static=no
+  fi
+    ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_C_CONFIG
+
+
+# AC_LIBTOOL_LANG_CXX_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
+AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
+[AC_LANG_PUSH(C++)
+AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([_LT_AC_PROG_CXXCPP])
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Dependencies to place before and after the object being linked:
+_LT_AC_TAGVAR(predep_objects, $1)=
+_LT_AC_TAGVAR(postdep_objects, $1)=
+_LT_AC_TAGVAR(predeps, $1)=
+_LT_AC_TAGVAR(postdeps, $1)=
+_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
+
+# Source file extension for C++ test sources.
+ac_ext=cc
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_LD=$LD
+lt_save_GCC=$GCC
+GCC=$GXX
+lt_save_with_gnu_ld=$with_gnu_ld
+lt_save_path_LD=$lt_cv_path_LD
+if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+  lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+else
+  unset lt_cv_prog_gnu_ld
+fi
+if test -n "${lt_cv_path_LDCXX+set}"; then
+  lt_cv_path_LD=$lt_cv_path_LDCXX
+else
+  unset lt_cv_path_LD
+fi
+test -z "${LDCXX+set}" || LD=$LDCXX
+CC=${CXX-"c++"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+# We don't want -fno-exception wen compiling C++ code, so set the
+# no_builtin_flag separately
+if test "$GXX" = yes; then
+  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+else
+  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+fi
+
+if test "$GXX" = yes; then
+  # Set up default GNU C++ configuration
+
+  AC_PROG_LD
+
+  # Check if GNU C++ uses GNU ld as the underlying linker, since the
+  # archiving commands below assume that GNU ld is being used.
+  if test "$with_gnu_ld" = yes; then
+    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+    #     investigate it a little bit more. (MM)
+    wlarc='${wl}'
+
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
+	grep 'no-whole-archive' > /dev/null; then
+      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    with_gnu_ld=no
+    wlarc=
+
+    # A generic and very simple default shared library creation
+    # command for GNU C++ for the case where it uses the native
+    # linker, instead of GNU ld.  If possible, this setting should
+    # overridden to take advantage of the native linker features on
+    # the platform it is being used on.
+    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+  fi
+
+  # Commands to make compiler produce verbose output that lists
+  # what "hidden" libraries, object files and flags are used when
+  # linking a shared library.
+  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+else
+  GXX=no
+  with_gnu_ld=no
+  wlarc=
+fi
+
+# PORTME: fill in a description of your system's C++ link characteristics
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+_LT_AC_TAGVAR(ld_shlibs, $1)=yes
+case $host_os in
+  aix3*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  aix4* | aix5*)
+    if test "$host_cpu" = ia64; then
+      # On IA64, the linker does run time linking by default, so we don't
+      # have to do anything special.
+      aix_use_runtimelinking=no
+      exp_sym_flag='-Bexport'
+      no_entry_flag=""
+    else
+      aix_use_runtimelinking=no
+
+      # Test if we are trying to use run time linking or normal
+      # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+      # need to do runtime linking.
+      case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+	for ld_flag in $LDFLAGS; do
+	  case $ld_flag in
+	  *-brtl*)
+	    aix_use_runtimelinking=yes
+	    break
+	    ;;
+	  esac
+	done
+      esac
+
+      exp_sym_flag='-bexport'
+      no_entry_flag='-bnoentry'
+    fi
+
+    # When large executables or shared objects are built, AIX ld can
+    # have problems creating the table of contents.  If linking a library
+    # or program results in "error TOC overflow" add -mminimal-toc to
+    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+    _LT_AC_TAGVAR(archive_cmds, $1)=''
+    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+    if test "$GXX" = yes; then
+      case $host_os in aix4.[[012]]|aix4.[[012]].*)
+      # We only want to do this on AIX 4.2 and lower, the check
+      # below for broken collect2 doesn't work under 4.3+
+	collect2name=`${CC} -print-prog-name=collect2`
+	if test -f "$collect2name" && \
+	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	then
+	  # We have reworked collect2
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+	else
+	  # We have old collect2
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+	fi
+      esac
+      shared_flag='-shared'
+      if test "$aix_use_runtimelinking" = yes; then
+	shared_flag="$shared_flag "'${wl}-G'
+      fi
+    else
+      # not using gcc
+      if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	shared_flag='-G'
+      else
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag='${wl}-G'
+	else
+	  shared_flag='${wl}-bM:SRE'
+	fi
+      fi
+    fi
+
+    # It seems that -bexpall does not export symbols beginning with
+    # underscore (_), so it is better to generate a list of symbols to export.
+    _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+    if test "$aix_use_runtimelinking" = yes; then
+      # Warning - without using the other runtime loading flags (-brtl),
+      # -berok will link without error, but may produce a broken library.
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+      # Determine the default libpath from the value encoded in an empty executable.
+      _LT_AC_SYS_LIBPATH_AIX
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+     else
+      if test "$host_cpu" = ia64; then
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+      else
+	# Determine the default libpath from the value encoded in an empty executable.
+	_LT_AC_SYS_LIBPATH_AIX
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	# Warning - without using the other run time loading flags,
+	# -berok will link without error, but may produce a broken library.
+	_LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	# -bexpall does not export symbols beginning with underscore (_)
+	_LT_AC_TAGVAR(always_export_symbols, $1)=yes
+	# Exported symbols can be pulled into shared objects from archives
+	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
+	_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+	# This is similar to how AIX traditionally builds it's shared libraries.
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+      fi
+    fi
+    ;;
+  chorus*)
+    case $cc_basename in
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+
+
+  cygwin* | mingw* | pw32*)
+    # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+    # as there is no search path for DLLs.
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+    _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+    _LT_AC_TAGVAR(always_export_symbols, $1)=no
+    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+    if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+      # If the export-symbols file already is a .def file (1st line
+      # is EXPORTS), use it as is; otherwise, prepend...
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	cp $export_symbols $output_objdir/$soname.def;
+      else
+	echo EXPORTS > $output_objdir/$soname.def;
+	cat $export_symbols >> $output_objdir/$soname.def;
+      fi~
+      $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+    else
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    fi
+  ;;
+      darwin* | rhapsody*)
+        case "$host_os" in
+        rhapsody* | darwin1.[[012]])
+         _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
+         ;;
+       *) # Darwin 1.3 on
+         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+           _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+         else
+           case ${MACOSX_DEPLOYMENT_TARGET} in
+             10.[[012]])
+               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+               ;;
+             10.*)
+               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
+               ;;
+           esac
+         fi
+         ;;
+        esac
+      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_AC_TAGVAR(hardcode_direct, $1)=no
+      _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+    if test "$GXX" = yes ; then
+      lt_int_apple_cc_single_mod=no
+      output_verbose_link_cmd='echo'
+      if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then
+       lt_int_apple_cc_single_mod=yes
+      fi
+      if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      else
+          _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+        fi
+        _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+        # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+          if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+            _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          else
+            _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          fi
+            _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      else
+      case "$cc_basename" in
+        xlc*)
+         output_verbose_link_cmd='echo'
+          _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
+          _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+          _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          ;;
+       *)
+         _LT_AC_TAGVAR(ld_shlibs, $1)=no
+          ;;
+      esac
+      fi
+        ;;
+
+  dgux*)
+    case $cc_basename in
+      ec++)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      ghcx)
+	# Green Hills C++ Compiler
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  freebsd[[12]]*)
+    # C++ shared libraries reported to be fairly broken before switch to ELF
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  freebsd-elf*)
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    ;;
+  freebsd* | kfreebsd*-gnu | dragonfly*)
+    # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+    # conventions
+    _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+    ;;
+  gnu*)
+    ;;
+  hpux9*)
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+    _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+				# but as the default
+				# location of the library.
+
+    case $cc_basename in
+    CC)
+      # FIXME: insert proper C++ library support
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    aCC)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      #
+      # There doesn't appear to be a way to prevent this compiler from
+      # explicitly linking system object files so we need to strip them
+      # from the output so that they don't get included in the library
+      # dependencies.
+      output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+      ;;
+    *)
+      if test "$GXX" = yes; then
+        _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+        # FIXME: insert proper C++ library support
+        _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+    ;;
+  hpux10*|hpux11*)
+    if test $with_gnu_ld = no; then
+      case "$host_cpu" in
+      hppa*64*)
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+        ;;
+      ia64*)
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+        ;;
+      *)
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        ;;
+      esac
+    fi
+    case "$host_cpu" in
+    hppa*64*)
+      _LT_AC_TAGVAR(hardcode_direct, $1)=no
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+    ia64*)
+      _LT_AC_TAGVAR(hardcode_direct, $1)=no
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+					      # but as the default
+					      # location of the library.
+      ;;
+    *)
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+					      # but as the default
+					      # location of the library.
+      ;;
+    esac
+
+    case $cc_basename in
+      CC)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      aCC)
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+	  ;;
+	*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	  ;;
+	esac
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes; then
+	  if test $with_gnu_ld = no; then
+	    case "$host_cpu" in
+	    ia64*|hppa*64*)
+	      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+	      ;;
+	    *)
+	      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      ;;
+	    esac
+	  fi
+	else
+	  # FIXME: insert proper C++ library support
+	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+    esac
+    ;;
+  irix5* | irix6*)
+    case $cc_basename in
+      CC)
+	# SGI C++
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+	# Archives containing C++ object files must be created using
+	# "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	# necessary to make sure instantiated templates are included
+	# in the archive.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	;;
+      *)
+	if test "$GXX" = yes; then
+	  if test "$with_gnu_ld" = no; then
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+	  else
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+	  fi
+	fi
+	_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+	;;
+    esac
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+    ;;
+  linux*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+	# Archives containing C++ object files must be created using
+	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+	;;
+      icpc)
+	# Intel C++
+	with_gnu_ld=yes
+	# version 8.0 and above of icpc choke on multiply defined symbols
+	# if we add $predep_objects and $postdep_objects, however 7.1 and
+	# earlier do not add the objects themselves.
+	case `$CC -V 2>&1` in
+	*"Version 7."*)
+  	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+  	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  ;;
+	*)  # Version 8.0 or newer
+	  tmp_idyn=
+	  case $host_cpu in
+	    ia64*) tmp_idyn=' -i_dynamic';;
+	  esac
+  	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  ;;
+	esac
+	_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	;;
+      pgCC)
+        # Portland Group C++ compiler
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+  	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+        ;;
+      cxx)
+	# Compaq C++
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	runpath_var=LD_RUN_PATH
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+    esac
+    ;;
+  lynxos*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  m88k*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  mvs*)
+    case $cc_basename in
+      cxx)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+      wlarc=
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+    fi
+    # Workaround some broken pre-1.5 toolchains
+    output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+    ;;
+  openbsd2*)
+    # C++ shared libraries are fairly broken
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  openbsd*)
+    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+    if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    fi
+    output_verbose_link_cmd='echo'
+    ;;
+  osf3*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Archives containing C++ object files must be created using
+	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+
+	;;
+      RCC)
+	# Rational C++ 2.4.1
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      cxx)
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	  # Commands to make compiler produce verbose output that lists
+	  # what "hidden" libraries, object files and flags are used when
+	  # linking a shared library.
+	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+	else
+	  # FIXME: insert proper C++ library support
+	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+    esac
+    ;;
+  osf4* | osf5*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Archives containing C++ object files must be created using
+	# the KAI C++ compiler.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
+	;;
+      RCC)
+	# Rational C++ 2.4.1
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      cxx)
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	  echo "-hidden">> $lib.exp~
+	  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp  `test -n "$verstring" && echo -set_version	$verstring` -update_registry $objdir/so_locations -o $lib~
+	  $rm $lib.exp'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	 _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	  # Commands to make compiler produce verbose output that lists
+	  # what "hidden" libraries, object files and flags are used when
+	  # linking a shared library.
+	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+	else
+	  # FIXME: insert proper C++ library support
+	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+    esac
+    ;;
+  psos*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  sco*)
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    case $cc_basename in
+      CC)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  sunos4*)
+    case $cc_basename in
+      CC)
+	# Sun C++ 4.x
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      lcc)
+	# Lucid
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  solaris*)
+    case $cc_basename in
+      CC)
+	# Sun C++ 4.2, 5.x and Centerline C++
+	_LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	$CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+	case $host_os in
+	  solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+	  *)
+	    # The C++ compiler is used as linker so we must use $wl
+	    # flag to pass the commands to the underlying system
+	    # linker.
+	    # Supported since Solaris 2.6 (maybe 2.5.1?)
+	    _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	    ;;
+	esac
+	_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+	# Archives containing C++ object files must be created using
+	# "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	# necessary to make sure instantiated templates are included
+	# in the archive.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	;;
+      gcx)
+	# Green Hills C++ Compiler
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	# The C++ compiler must be used to create the archive.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	;;
+      *)
+	# GNU C++ compiler with Solaris linker
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+	  if $CC --version | grep -v '^2\.7' > /dev/null; then
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+	  else
+	    # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	    # platform.
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+	  fi
+
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+	fi
+	;;
+    esac
+    ;;
+  sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*)
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    ;;
+  tandem*)
+    case $cc_basename in
+      NCC)
+	# NonStop-UX NCC 3.20
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  vxworks*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  *)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+esac
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$GXX"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_POSTDEP_PREDEP($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC=$lt_save_CC
+LDCXX=$LD
+LD=$lt_save_LD
+GCC=$lt_save_GCC
+with_gnu_ldcxx=$with_gnu_ld
+with_gnu_ld=$lt_save_with_gnu_ld
+lt_cv_path_LDCXX=$lt_cv_path_LD
+lt_cv_path_LD=$lt_save_path_LD
+lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+])# AC_LIBTOOL_LANG_CXX_CONFIG
+
+# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
+# ------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
+int a;
+void foo (void) { a = 0; }
+EOF
+],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+EOF
+],[$1],[F77],[cat > conftest.$ac_ext <<EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+EOF
+],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  # The `*' in the case matches for architectures that use `case' in
+  # $output_verbose_cmd can trigger glob expansion during the loop
+  # eval without this substitution.
+  output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
+
+  for p in `eval $output_verbose_link_cmd`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" \
+	  || test $p = "-R"; then
+	 prev=$p
+	 continue
+       else
+	 prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 case $p in
+	 -L* | -R*)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
+	     _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+	   else
+	     _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then
+	   _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
+	 else
+	   _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
+	 fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then
+	   _LT_AC_TAGVAR(predep_objects, $1)="$p"
+	 else
+	   _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
+	 fi
+       else
+	 if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
+	   _LT_AC_TAGVAR(postdep_objects, $1)="$p"
+	 else
+	   _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$rm -f confest.$objext
+
+case " $_LT_AC_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+])# AC_LIBTOOL_POSTDEP_PREDEP
+
+# AC_LIBTOOL_LANG_F77_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
+AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
+[AC_REQUIRE([AC_PROG_F77])
+AC_LANG_PUSH(Fortran 77)
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="      subroutine t\n      return\n      end\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="      program t\n      end\n"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${F77-"f77"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+aix4* | aix5*)
+  test "$enable_shared" = yes && enable_static=no
+  ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$G77"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_F77_CONFIG
+
+
+# AC_LIBTOOL_LANG_GCJ_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
+AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_GCJ_CONFIG
+
+
+# AC_LIBTOOL_LANG_RC_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the Windows resource compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
+AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${RC-"windres"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_RC_CONFIG
+
+
+# AC_LIBTOOL_CONFIG([TAGNAME])
+# ----------------------------
+# If TAGNAME is not passed, then create an initial libtool script
+# with a default configuration from the untagged config vars.  Otherwise
+# add code to config.status for appending the configuration named by
+# TAGNAME from the matching tagged config vars.
+AC_DEFUN([AC_LIBTOOL_CONFIG],
+[# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS AS EGREP RANLIB LN_S LTCC NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    _LT_AC_TAGVAR(compiler, $1) \
+    _LT_AC_TAGVAR(CC, $1) \
+    _LT_AC_TAGVAR(LD, $1) \
+    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
+    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
+    _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
+    _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
+    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
+    _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
+    _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
+    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
+    _LT_AC_TAGVAR(old_archive_cmds, $1) \
+    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
+    _LT_AC_TAGVAR(predep_objects, $1) \
+    _LT_AC_TAGVAR(postdep_objects, $1) \
+    _LT_AC_TAGVAR(predeps, $1) \
+    _LT_AC_TAGVAR(postdeps, $1) \
+    _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
+    _LT_AC_TAGVAR(archive_cmds, $1) \
+    _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
+    _LT_AC_TAGVAR(postinstall_cmds, $1) \
+    _LT_AC_TAGVAR(postuninstall_cmds, $1) \
+    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
+    _LT_AC_TAGVAR(allow_undefined_flag, $1) \
+    _LT_AC_TAGVAR(no_undefined_flag, $1) \
+    _LT_AC_TAGVAR(export_symbols_cmds, $1) \
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
+    _LT_AC_TAGVAR(hardcode_automatic, $1) \
+    _LT_AC_TAGVAR(module_cmds, $1) \
+    _LT_AC_TAGVAR(module_expsym_cmds, $1) \
+    _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
+    _LT_AC_TAGVAR(exclude_expsyms, $1) \
+    _LT_AC_TAGVAR(include_expsyms, $1); do
+
+    case $var in
+    _LT_AC_TAGVAR(old_archive_cmds, $1) | \
+    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
+    _LT_AC_TAGVAR(archive_cmds, $1) | \
+    _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
+    _LT_AC_TAGVAR(module_cmds, $1) | \
+    _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
+    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
+    _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\[$]0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
+    ;;
+  esac
+
+ifelse([$1], [],
+  [cfgfile="${ofile}T"
+  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+  $rm -f "$cfgfile"
+  AC_MSG_NOTICE([creating $ofile])],
+  [cfgfile="$ofile"])
+
+  cat <<__EOF__ >> "$cfgfile"
+ifelse([$1], [],
+[#! $SHELL
+
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
 # This program 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, or (at your option)
-# any later version.
-
-# This program 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.
-
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="$SED -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# The names of the tagged configurations supported by this script.
+available_tags=
+
+# ### BEGIN LIBTOOL CONFIG],
+[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
+
+# Is the compiler the GNU C compiler?
+with_gcc=$_LT_AC_TAGVAR(GCC, $1)
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS=$lt_AS
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
+archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
+module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
+
+# Symbols that must always be exported.
+include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
+
+ifelse([$1],[],
+[# ### END LIBTOOL CONFIG],
+[# ### END LIBTOOL TAG CONFIG: $tagname])
+
+__EOF__
+
+ifelse([$1],[], [
+  case $host_os in
+  aix3*)
+    cat <<\EOF >> "$cfgfile"
+
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+EOF
+    ;;
+  esac
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" || \
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+])
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+])# AC_LIBTOOL_CONFIG
+
+
+# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+
+_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+  AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
+
+
+# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+# ---------------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_NM])
+AC_REQUIRE([AC_OBJEXT])
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*) # Its linker distinguishes data from code symbols
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+  lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+  ;;
+linux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDGIRSTW]]'
+    lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+    lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris* | sysv5*)
+  symcode='[[BDRT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ 	]]\($symcode$symcode*\)[[ 	]][[ 	]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if grep ' nm_test_var$' "$nlist" >/dev/null; then
+	if grep ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+
+	  cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr_t address;
+}
+lt_preloaded_symbols[[]] =
+{
+EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+	  cat <<\EOF >> conftest.$ac_ext
+  {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_save_LIBS="$LIBS"
+	  lt_save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$lt_save_LIBS"
+	  CFLAGS="$lt_save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -f conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+
+
+# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
+# ---------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
+[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+ ifelse([$1],[CXX],[
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+      ;;
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | os2* | pw32*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	;;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+    *)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix4* | aix5*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	else
+	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68)
+	  # Green Hills C++ Compiler
+	  # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+       darwin*)
+         # PIC is the default on this platform
+         # Common symbols not allowed in MH_DYLIB files
+         case "$cc_basename" in
+           xlc*)
+           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
+           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           ;;
+         esac
+       ;;
+      dgux*)
+	case $cc_basename in
+	  ec++)
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  ghcx)
+	    # Green Hills C++ Compiler
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | kfreebsd*-gnu | dragonfly*)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+	    if test "$host_cpu" != ia64; then
+	      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	    fi
+	    ;;
+	  aCC)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+	    case "$host_cpu" in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux*)
+	case $cc_basename in
+	  KCC)
+	    # KAI C++ Compiler
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    ;;
+	  icpc* | ecpc*)
+	    # Intel C++
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  pgCC)
+	    # Portland Group C++ compiler.
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  cxx)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx)
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd*)
+	;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    ;;
+	  RCC)
+	    # Rational C++ 2.4.1
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  cxx)
+	    # Digital/Compaq C++
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      sco*)
+	case $cc_basename in
+	  CC)
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	    ;;
+	  gcx)
+	    # Green Hills C++ Compiler
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC)
+	    # Sun C++ 4.x
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  lcc)
+	    # Lucid
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC)
+	    # NonStop-UX NCC 3.20
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      unixware*)
+	;;
+      vxworks*)
+	;;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+	;;
+    esac
+  fi
+],
+[
+  if test "$GCC" = yes; then
+    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+      ;;
+
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+
+    *)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+      darwin*)
+        # PIC is the default on this platform
+        # Common symbols not allowed in MH_DYLIB files
+       case "$cc_basename" in
+         xlc*)
+         _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
+         _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+         ;;
+       esac
+       ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    newsos6)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    linux*)
+      case $cc_basename in
+      icc* | ecc*)
+	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      pgcc | pgf77 | pgf90)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      ccc*)
+        _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      esac
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn'
+      ;;
+
+    solaris*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sunos4*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    unicos*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+
+    uts4*)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
+    _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
+    [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+case "$host_os" in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+])
+
+
+# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
+# ------------------------------------
+# See if the linker supports building shared libraries.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
+[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ifelse([$1],[CXX],[
+  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix4* | aix5*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+  ;;
+  cygwin* | mingw*)
+    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  *)
+    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+],[
+  runpath_var=
+  _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+  _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_AC_TAGVAR(archive_cmds, $1)=
+  _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
+  _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+  _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_AC_TAGVAR(hardcode_direct, $1)=no
+  _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_AC_TAGVAR(hardcode_automatic, $1)=no
+  _LT_AC_TAGVAR(module_cmds, $1)=
+  _LT_AC_TAGVAR(module_expsym_cmds, $1)=
+  _LT_AC_TAGVAR(always_export_symbols, $1)=no
+  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_AC_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+      fi
+      ;;
+
+    amigaos*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+
+      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can't use
+      # them.
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_AC_TAGVAR(always_export_symbols, $1)=no
+      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000  ${wl}--out-implib,$lib'
+      else
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris* | sysv5*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sunos4*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+  linux*)
+    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+      tmp_addflag=
+      case $CC,$host_cpu in
+      pgf77* | pgf90* )			# Portland Group f77 and f90 compilers
+        tmp_addflag=' -fpic' ;;
+      ecc*,ia64* | icc*,ia64*)		# Intel C compiler on ia64
+        tmp_addflag=' -i_dynamic' ;;
+      efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+        tmp_addflag=' -i_dynamic -nofor_main' ;;
+      ifc* | ifort*)			# Intel Fortran compiler
+      	tmp_addflag=' -nofor_main' ;;
+      esac
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      supports_anon_versioning=no
+      case `$LD -v 2>/dev/null` in
+        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+        *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+        *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+        *\ 2.11.*) ;; # other 2.11 versions
+        *) supports_anon_versioning=yes ;;
+      esac
+      if test $supports_anon_versioning = yes; then
+        _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~
+cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+$echo "local: *; };" >> $output_objdir/$libname.ver~
+        $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+      else
+        _LT_AC_TAGVAR(archive_expsym_cmds, $1)=$_LT_AC_TAGVAR(archive_cmds, $1)
+      fi
+    else
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    fi
+    ;;
+
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then
+      runpath_var=LD_RUN_PATH
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ 	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+  	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+      fi
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      if test "$GCC" = yes && test -z "$link_static_flag"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	_LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+	  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+	else
+	  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+	  for ld_flag in $LDFLAGS; do
+  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+  	    aix_use_runtimelinking=yes
+  	    break
+  	  fi
+	  done
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_AC_TAGVAR(archive_cmds, $1)=''
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[[012]]|aix4.[[012]].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" && \
+  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	  then
+  	  # We have reworked collect2
+  	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+	  else
+  	  # We have old collect2
+  	  _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+  	  # It fails to find uninstalled libraries when the uninstalled
+  	  # path is not listed in the libpath.  Setting hardcode_minus_L
+  	  # to unsupported forces relinking
+  	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+  	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+  	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+	esac
+	shared_flag='-shared'
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag="$shared_flag "'${wl}-G'
+	fi
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+  	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+  	if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+  	fi
+	fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+       # Determine the default libpath from the value encoded in an empty executable.
+       _LT_AC_SYS_LIBPATH_AIX
+       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+	if test "$host_cpu" = ia64; then
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	  _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an empty executable.
+	 _LT_AC_SYS_LIBPATH_AIX
+	 _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	  # -bexpall does not export symbols beginning with underscore (_)
+	  _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+	  # Exported symbols can be pulled into shared objects from archives
+	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
+	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  # This is similar to how AIX traditionally builds it's shared libraries.
+	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      # see comment about different semantics on the GNU ld section
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    bsdi[[45]]*)
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
+      # FIXME: Should let the user specify the lib program.
+      _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
+    darwin* | rhapsody*)
+      case "$host_os" in
+        rhapsody* | darwin1.[[012]])
+         _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
+         ;;
+       *) # Darwin 1.3 on
+         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+           _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+         else
+           case ${MACOSX_DEPLOYMENT_TARGET} in
+             10.[[012]])
+               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+               ;;
+             10.*)
+               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
+               ;;
+           esac
+         fi
+         ;;
+      esac
+      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_AC_TAGVAR(hardcode_direct, $1)=no
+      _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+    if test "$GCC" = yes ; then
+    	output_verbose_link_cmd='echo'
+        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    else
+      case "$cc_basename" in
+        xlc*)
+         output_verbose_link_cmd='echo'
+         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
+         _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+         _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          ;;
+       *)
+         _LT_AC_TAGVAR(ld_shlibs, $1)=no
+          ;;
+      esac
+    fi
+      ;;
+
+    dgux*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    freebsd1*)
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | kfreebsd*-gnu | dragonfly*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      ;;
+
+    hpux10* | hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*)
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
+	  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  ;;
+	ia64*)
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
+	  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+	  ;;
+	*)
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    openbsd*)
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      else
+       case $host_os in
+	 openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+	   _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	   ;;
+	 *)
+	   _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	   ;;
+       esac
+      fi
+      ;;
+
+    os2*)
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      else
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    sco3.2v5*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ;;
+
+    solaris*)
+      _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;;
+      esac
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
+        ;;
+	motorola)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	_LT_AC_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4.2uw2*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      hardcode_runpath_var=yes
+      runpath_var=LD_RUN_PATH
+      ;;
+
+   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[[78]]* | unixware7*)
+      _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text'
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      runpath_var='LD_RUN_PATH'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv5*)
+      _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+      # $CC -shared without GNU ld will not create a library from C++
+      # object files and a static libstdc++, better avoid it by now
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+      ;;
+
+    uts4*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+  fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $_LT_AC_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
+        _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+        if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
+        then
+	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+        else
+	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+        fi
+        _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
+      ;;
+    esac
+  fi
+  ;;
+esac
+])# AC_LIBTOOL_PROG_LD_SHLIBS
+
+
+# _LT_AC_FILE_LTDLL_C
+# -------------------
+# Be careful that the start marker always follows a newline.
+AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# #  ifdef __CYGWIN32__
+# #    define __CYGWIN__ __CYGWIN32__
+# #  endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+#   __hDllInstance_base = hInst;
+#   return TRUE;
+# }
+# /* ltdll.c ends here */
+])# _LT_AC_FILE_LTDLL_C
+
+
+# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
+# ---------------------------------
+AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
+
+
+# old names
+AC_DEFUN([AM_PROG_LIBTOOL],   [AC_PROG_LIBTOOL])
+AC_DEFUN([AM_ENABLE_SHARED],  [AC_ENABLE_SHARED($@)])
+AC_DEFUN([AM_ENABLE_STATIC],  [AC_ENABLE_STATIC($@)])
+AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+AC_DEFUN([AM_PROG_LD],        [AC_PROG_LD])
+AC_DEFUN([AM_PROG_NM],        [AC_PROG_NM])
+
+# This is just to silence aclocal about the macro not being used
+ifelse([AC_DISABLE_FAST_INSTALL])
+
+AC_DEFUN([LT_AC_PROG_GCJ],
+[AC_CHECK_TOOL(GCJ, gcj, no)
+  test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+  AC_SUBST(GCJFLAGS)
+])
+
+AC_DEFUN([LT_AC_PROG_RC],
+[AC_CHECK_TOOL(RC, windres, no)
+])
+
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+# LT_AC_PROG_SED
+# --------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+AC_DEFUN([LT_AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && continue
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+])
+SED=$lt_cv_path_SED
+AC_MSG_RESULT([$SED])
+])
+
+# Copyright (C) 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
 # AM_AUTOMAKE_VERSION(VERSION)
 # ----------------------------
 # Automake X.Y traces this macro to ensure aclocal.m4 has been
 # generated from the m4 files accompanying Automake X.Y.
-AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"])
+AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
 
 # AM_SET_CURRENT_AUTOMAKE_VERSION
 # -------------------------------
 # Call AM_AUTOMAKE_VERSION so it can be traced.
 # This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-	 [AM_AUTOMAKE_VERSION([1.7.6])])
+	 [AM_AUTOMAKE_VERSION([1.9.5])])
 
-# Helper functions for option handling.                    -*- Autoconf -*-
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
-# Copyright 2001, 2002  Free Software Foundation, Inc.
-
-# This program 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, or (at your option)
-# any later version.
-
-# This program 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 this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
-# serial 2
-
-# _AM_MANGLE_OPTION(NAME)
-# -----------------------
-AC_DEFUN([_AM_MANGLE_OPTION],
-[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
-
-# _AM_SET_OPTION(NAME)
-# ------------------------------
-# Set option NAME.  Presently that only means defining a flag for this option.
-AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
-
-# _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
-# OPTIONS is a space-separated list of Automake options.
-AC_DEFUN([_AM_SET_OPTIONS],
-[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
-
-# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
-# -------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-AC_DEFUN([_AM_IF_OPTION],
-[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
 #
-# Check to make sure that the build environment is sane.
-#
-
-# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
-
-# This program 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, or (at your option)
-# any later version.
-
-# This program 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 this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
-# serial 3
-
-# AM_SANITY_CHECK
-# ---------------
-AC_DEFUN([AM_SANITY_CHECK],
-[AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
-   if test "$[*]" = "X"; then
-      # -L didn't work.
-      set X `ls -t $srcdir/configure conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$[*]" != "X $srcdir/configure conftest.file" \
-      && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
-alias in your environment])
-   fi
-
-   test "$[2]" = conftest.file
-   )
-then
-   # Ok.
-   :
-else
-   AC_MSG_ERROR([newly created file is older than distributed files!
-Check your system clock])
-fi
-AC_MSG_RESULT(yes)])
-
-#  -*- Autoconf -*-
-
-
-# Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc.
-
-# This program 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, or (at your option)
-# any later version.
-
-# This program 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 this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
-# serial 3
-
-# AM_MISSING_PROG(NAME, PROGRAM)
-# ------------------------------
-AC_DEFUN([AM_MISSING_PROG],
-[AC_REQUIRE([AM_MISSING_HAS_RUN])
-$1=${$1-"${am_missing_run}$2"}
-AC_SUBST($1)])
-
-
-# AM_MISSING_HAS_RUN
-# ------------------
-# Define MISSING if not defined so far and test if it supports --run.
-# If it does, set am_missing_run to use it, otherwise, to nothing.
-AC_DEFUN([AM_MISSING_HAS_RUN],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
-else
-  am_missing_run=
-  AC_MSG_WARN([`missing' script is too old or missing])
-fi
-])
-
-# AM_AUX_DIR_EXPAND
-
-# Copyright 2001 Free Software Foundation, Inc.
-
-# This program 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, or (at your option)
-# any later version.
-
-# This program 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 this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
 # $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
@@ -376,131 +6107,55 @@
 # absolute PATH.  The drawback is that using absolute paths prevent a
 # configured tree to be moved without reconfiguration.
 
-# Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])
-
-AC_DEFUN([AM_AUX_DIR_EXPAND], [
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
 # expand $ac_aux_dir to an absolute path
 am_aux_dir=`cd $ac_aux_dir && pwd`
 ])
 
-# AM_PROG_INSTALL_SH
-# ------------------
-# Define $install_sh.
+# AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright 2001 Free Software Foundation, Inc.
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-# This program 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, or (at your option)
-# any later version.
+# serial 7
 
-# This program 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 this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
-AC_DEFUN([AM_PROG_INSTALL_SH],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-install_sh=${install_sh-"$am_aux_dir/install-sh"}
-AC_SUBST(install_sh)])
-
-# AM_PROG_INSTALL_STRIP
-
-# Copyright 2001 Free Software Foundation, Inc.
-
-# This program 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, or (at your option)
-# any later version.
-
-# This program 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 this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
-# One issue with vendor `install' (even GNU) is that you can't
-# specify the program used to strip binaries.  This is especially
-# annoying in cross-compiling environments, where the build's strip
-# is unlikely to handle the host's binaries.
-# Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in `make install-strip', and initialize
-# STRIPPROG with the value of the STRIP variable (set by the user).
-AC_DEFUN([AM_PROG_INSTALL_STRIP],
-[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
-if test "$cross_compiling" != no; then
-  AC_CHECK_TOOL([STRIP], [strip], :)
-fi
-INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
-AC_SUBST([INSTALL_STRIP_PROGRAM])])
-
-#                                                          -*- Autoconf -*-
-# Copyright (C) 2003  Free Software Foundation, Inc.
-
-# This program 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, or (at your option)
-# any later version.
-
-# This program 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 this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
-# serial 1
-
-# Check whether the underlying file-system supports filenames
-# with a leading dot.  For instance MS-DOS doesn't.
-AC_DEFUN([AM_SET_LEADING_DOT],
-[rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])
+AC_SUBST([$1_FALSE])
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
 else
-  am__leading_dot=_
+  $1_TRUE='#'
+  $1_FALSE=
 fi
-rmdir .tst 2>/dev/null
-AC_SUBST([am__leading_dot])])
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
 
-# serial 5						-*- Autoconf -*-
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003  Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-# This program 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, or (at your option)
-# any later version.
-
-# This program 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 this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
+# serial 8
 
 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
 # written in clear, in which case automake, when reading aclocal.m4,
@@ -509,7 +6164,6 @@
 # CC etc. in the Makefile, will ask for an AC_PROG_CC use...
 
 
-
 # _AM_DEPENDENCIES(NAME)
 # ----------------------
 # See how the compiler implements dependency checking.
@@ -568,7 +6222,9 @@
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      : > sub/conftst$i.h
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
@@ -596,9 +6252,14 @@
        grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
        ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
       # icc doesn't choke on unknown options, it will just issue warnings
-      # (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored.
-      if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
         am_cv_$1_dependencies_compiler_type=$depmode
         break
       fi
@@ -632,8 +6293,8 @@
 # ------------
 AC_DEFUN([AM_DEP_TRACK],
 [AC_ARG_ENABLE(dependency-tracking,
-[  --disable-dependency-tracking Speeds up one-time builds
-  --enable-dependency-tracking  Do not reject slow dependency extractors])
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
@@ -642,26 +6303,16 @@
 AC_SUBST([AMDEPBACKSLASH])
 ])
 
-# Generate code to set up dependency tracking.   -*- Autoconf -*-
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-# Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-# This program 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, or (at your option)
-# any later version.
-
-# This program 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 this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
-#serial 2
+#serial 3
 
 # _AM_OUTPUT_DEPENDENCY_COMMANDS
 # ------------------------------
@@ -680,27 +6331,21 @@
   else
     continue
   fi
-  grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue
-  # Extract the definition of DEP_FILES from the Makefile without
-  # running `make'.
-  DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
   test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
   # When using ansi2knr, U may be empty or an underscore; expand it
-  U=`sed -n -e '/^U = / s///p' < "$mf"`
-  test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
-  # We invoke sed twice because it is the simplest approach to
-  # changing $(DEPDIR) to its actual value in the expansion.
-  for file in `sed -n -e '
-    /^DEP_FILES = .*\\\\$/ {
-      s/^DEP_FILES = //
-      :loop
-	s/\\\\$//
-	p
-	n
-	/\\\\$/ b loop
-      p
-    }
-    /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
     # Make sure the directory exists.
     test -f "$dirpart/$file" && continue
@@ -726,27 +6371,206 @@
      [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
 ])
 
-# Check to see how 'make' treats includes.	-*- Autoconf -*-
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+# serial 8
 
-# This program 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, or (at your option)
-# any later version.
+# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
 
-# This program 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.
+# Do all the work for Automake.                             -*- Autoconf -*-
 
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 12
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.58])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+   test -f $srcdir/config.status; then
+  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+              [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+	      		     [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                  [_AM_DEPENDENCIES(CC)],
+                  [define([AC_PROG_CC],
+                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                  [_AM_DEPENDENCIES(CXX)],
+                  [define([AC_PROG_CXX],
+                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $1 | $1:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
 # serial 2
 
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+AC_DEFUN([AM_MAINTAINER_MODE],
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+  dnl maintainer-mode is disabled by default
+  AC_ARG_ENABLE(maintainer-mode,
+[  --enable-maintainer-mode  enable make rules and dependencies not useful
+			  (and sometimes confusing) to the casual installer],
+      USE_MAINTAINER_MODE=$enableval,
+      USE_MAINTAINER_MODE=no)
+  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+  AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
+  MAINT=$MAINTAINER_MODE_TRUE
+  AC_SUBST(MAINT)dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes.	            -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
 # AM_MAKE_INCLUDE()
 # -----------------
 # Check to see how make treats includes.
@@ -789,112 +6613,310 @@
 rm -f confinc confmf
 ])
 
-# AM_CONDITIONAL                                              -*- Autoconf -*-
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
-# Copyright 1997, 2000, 2001 Free Software Foundation, Inc.
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-# This program 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, or (at your option)
-# any later version.
+# serial 4
 
-# This program 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.
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
 
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
 
-# serial 5
-
-AC_PREREQ(2.52)
-
-# AM_CONDITIONAL(NAME, SHELL-CONDITION)
-# -------------------------------------
-# Define a conditional.
-AC_DEFUN([AM_CONDITIONAL],
-[ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
-        [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
-AC_SUBST([$1_TRUE])
-AC_SUBST([$1_FALSE])
-if $2; then
-  $1_TRUE=
-  $1_FALSE='#'
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
 else
-  $1_TRUE='#'
-  $1_FALSE=
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
 fi
-AC_CONFIG_COMMANDS_PRE(
-[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
-  AC_MSG_ERROR([conditional "$1" was never defined.
-Usually this means the macro was only invoked conditionally.])
-fi])])
+])
 
-# Add --enable-maintainer-mode option to configure.
-# From Jim Meyering
+# Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-# Copyright 1996, 1998, 2000, 2001, 2002  Free Software Foundation, Inc.
+# AM_PROG_MKDIR_P
+# ---------------
+# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
+#
+# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
+# created by `make install' are always world readable, even if the
+# installer happens to have an overly restrictive umask (e.g. 077).
+# This was a mistake.  There are at least two reasons why we must not
+# use `-m 0755':
+#   - it causes special bits like SGID to be ignored,
+#   - it may be too restrictive (some setups expect 775 directories).
+#
+# Do not use -m 0755 and let people choose whatever they expect by
+# setting umask.
+#
+# We cannot accept any implementation of `mkdir' that recognizes `-p'.
+# Some implementations (such as Solaris 8's) are not thread-safe: if a
+# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
+# concurrently, both version can detect that a/ is missing, but only
+# one can create it and the other will error out.  Consequently we
+# restrict ourselves to GNU make (using the --version option ensures
+# this.)
+AC_DEFUN([AM_PROG_MKDIR_P],
+[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+  # We used to keeping the `.' as first argument, in order to
+  # allow $(mkdir_p) to be used without argument.  As in
+  #   $(mkdir_p) $(somedir)
+  # where $(somedir) is conditionally defined.  However this is wrong
+  # for two reasons:
+  #  1. if the package is installed by a user who cannot write `.'
+  #     make install will fail,
+  #  2. the above comment should most certainly read
+  #     $(mkdir_p) $(DESTDIR)$(somedir)
+  #     so it does not work when $(somedir) is undefined and
+  #     $(DESTDIR) is not.
+  #  To support the latter case, we have to write
+  #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
+  #  so the `.' trick is pointless.
+  mkdir_p='mkdir -p --'
+else
+  # On NextStep and OpenStep, the `mkdir' command does not
+  # recognize any option.  It will interpret all options as
+  # directories to create, and then abort because `.' already
+  # exists.
+  for d in ./-p ./--version;
+  do
+    test -d $d && rmdir $d
+  done
+  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+  if test -f "$ac_aux_dir/mkinstalldirs"; then
+    mkdir_p='$(mkinstalldirs)'
+  else
+    mkdir_p='$(install_sh) -d'
+  fi
+fi
+AC_SUBST([mkdir_p])])
 
-# This program 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, or (at your option)
-# any later version.
+# Helper functions for option handling.                     -*- Autoconf -*-
 
-# This program 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.
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
+# serial 3
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
 # serial 2
 
-AC_DEFUN([AM_MAINTAINER_MODE],
-[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
-  dnl maintainer-mode is disabled by default
-  AC_ARG_ENABLE(maintainer-mode,
-[  --enable-maintainer-mode enable make rules and dependencies not useful
-                          (and sometimes confusing) to the casual installer],
-      USE_MAINTAINER_MODE=$enableval,
-      USE_MAINTAINER_MODE=no)
-  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
-  AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
-  MAINT=$MAINTAINER_MODE_TRUE
-  AC_SUBST(MAINT)dnl
-]
-)
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
 
-AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
 
-# Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*-
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
 
-# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
-
-# This program 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, or (at your option)
-# any later version.
-
-# This program 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 this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
-AC_PREREQ([2.52])
-
-# serial 6
-
-# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
-AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
 
diff --git a/compile b/compile
new file mode 100755
index 0000000..ad57e2f
--- /dev/null
+++ b/compile
@@ -0,0 +1,142 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand `-c -o'.
+
+scriptversion=2005-02-03.08
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# This program 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, or (at your option)
+# any later version.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand `-c -o'.
+Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file `INSTALL'.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "compile $scriptversion"
+    exit $?
+    ;;
+esac
+
+ofile=
+cfile=
+eat=
+
+for arg
+do
+  if test -n "$eat"; then
+    eat=
+  else
+    case $1 in
+      -o)
+	# configure might choose to run compile as `compile cc -o foo foo.c'.
+	# So we strip `-o arg' only if arg is an object.
+	eat=1
+	case $2 in
+	  *.o | *.obj)
+	    ofile=$2
+	    ;;
+	  *)
+	    set x "$@" -o "$2"
+	    shift
+	    ;;
+	esac
+	;;
+      *.c)
+	cfile=$1
+	set x "$@" "$1"
+	shift
+	;;
+      *)
+	set x "$@" "$1"
+	shift
+	;;
+    esac
+  fi
+  shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+  # If no `-o' option was seen then we might have been invoked from a
+  # pattern rule where we don't need one.  That is ok -- this is a
+  # normal compilation that the losing compiler can handle.  If no
+  # `.c' file was seen then we are probably linking.  That is also
+  # ok.
+  exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use `[/.-]' here to ensure that we don't use the same name
+# that we are using for the .o file.  Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
+while true; do
+  if mkdir "$lockdir" >/dev/null 2>&1; then
+    break
+  fi
+  sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+  mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+  mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/config.guess b/config.guess
index c8fc683..44f30e6 100755
--- a/config.guess
+++ b/config.guess
@@ -1,9 +1,9 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
-timestamp='2003-07-02'
+timestamp='2005-02-10'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -53,7 +53,7 @@
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
@@ -207,15 +207,21 @@
 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
 	echo "${machine}-${os}${release}"
 	exit 0 ;;
+    amd64:OpenBSD:*:*)
+	echo x86_64-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
     amiga:OpenBSD:*:*)
 	echo m68k-unknown-openbsd${UNAME_RELEASE}
 	exit 0 ;;
-    arc:OpenBSD:*:*)
-	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+    cats:OpenBSD:*:*)
+	echo arm-unknown-openbsd${UNAME_RELEASE}
 	exit 0 ;;
     hp300:OpenBSD:*:*)
 	echo m68k-unknown-openbsd${UNAME_RELEASE}
 	exit 0 ;;
+    luna88k:OpenBSD:*:*)
+    	echo m88k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
     mac68k:OpenBSD:*:*)
 	echo m68k-unknown-openbsd${UNAME_RELEASE}
 	exit 0 ;;
@@ -231,25 +237,33 @@
     mvmeppc:OpenBSD:*:*)
 	echo powerpc-unknown-openbsd${UNAME_RELEASE}
 	exit 0 ;;
-    pmax:OpenBSD:*:*)
-	echo mipsel-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
     sgi:OpenBSD:*:*)
-	echo mipseb-unknown-openbsd${UNAME_RELEASE}
+	echo mips64-unknown-openbsd${UNAME_RELEASE}
 	exit 0 ;;
     sun3:OpenBSD:*:*)
 	echo m68k-unknown-openbsd${UNAME_RELEASE}
 	exit 0 ;;
-    wgrisc:OpenBSD:*:*)
-	echo mipsel-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
     *:OpenBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
 	exit 0 ;;
+    *:ekkoBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+	exit 0 ;;
+    macppc:MirBSD:*:*)
+	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:MirBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+	exit 0 ;;
     alpha:OSF1:*:*)
-	if test $UNAME_RELEASE = "V4.0"; then
+	case $UNAME_RELEASE in
+	*4.0)
 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-	fi
+		;;
+	*5.*)
+	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		;;
+	esac
 	# According to Compaq, /usr/sbin/psrinfo has been available on
 	# OSF/1 and Tru64 systems produced since 1995.  I hope that
 	# covers most systems running today.  This code pipes the CPU
@@ -287,14 +301,12 @@
 	    "EV7.9 (21364A)")
 		UNAME_MACHINE="alphaev79" ;;
 	esac
+	# A Pn.n version is a patched version.
 	# A Vn.n version is a released version.
 	# A Tn.n version is a released field test version.
 	# A Xn.n version is an unreleased experimental baselevel.
 	# 1.2 uses "1.2" for uname -r.
-	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	exit 0 ;;
-    Alpha*:OpenVMS:*:*)
-	echo alpha-hp-vms
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
 	exit 0 ;;
     Alpha\ *:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
@@ -317,6 +329,12 @@
     *:OS/390:*:*)
 	echo i370-ibm-openedition
 	exit 0 ;;
+    *:z/VM:*:*)
+	echo s390-ibm-zvmoe
+	exit 0 ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+	exit 0 ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
 	echo arm-acorn-riscix${UNAME_RELEASE}
 	exit 0;;
@@ -337,7 +355,7 @@
     DRS?6000:unix:4.0:6*)
 	echo sparc-icl-nx6
 	exit 0 ;;
-    DRS?6000:UNIX_SV:4.2*:7*)
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
 	case `/usr/bin/uname -p` in
 	    sparc) echo sparc-icl-nx7 && exit 0 ;;
 	esac ;;
@@ -409,6 +427,9 @@
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
         echo m68k-unknown-mint${UNAME_RELEASE}
         exit 0 ;;
+    m68k:machten:*:*)
+	echo m68k-apple-machten${UNAME_RELEASE}
+	exit 0 ;;
     powerpc:machten:*:*)
 	echo powerpc-apple-machten${UNAME_RELEASE}
 	exit 0 ;;
@@ -744,7 +765,7 @@
 	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit 0 ;;
     *:UNICOS/mp:*:*)
-	echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' 
+	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit 0 ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
 	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
@@ -752,6 +773,11 @@
         FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
         echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
         exit 0 ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit 0 ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
 	exit 0 ;;
@@ -761,22 +787,8 @@
     *:BSD/OS:*:*)
 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
 	exit 0 ;;
-    *:FreeBSD:*:*|*:GNU/FreeBSD:*:*)
-	# Determine whether the default compiler uses glibc.
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <features.h>
-	#if __GLIBC__ >= 2
-	LIBC=gnu
-	#else
-	LIBC=
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
-	# GNU/FreeBSD systems have a "k" prefix to indicate we are using
-	# FreeBSD's kernel, but not the complete OS.
-	case ${LIBC} in gnu) kernel_only='k' ;; esac
-	echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
+    *:FreeBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
 	exit 0 ;;
     i*:CYGWIN*:*)
 	echo ${UNAME_MACHINE}-pc-cygwin
@@ -802,6 +814,9 @@
     i*:UWIN*:*)
 	echo ${UNAME_MACHINE}-pc-uwin
 	exit 0 ;;
+    amd64:CYGWIN*:*:*)
+	echo x86_64-unknown-cygwin
+	exit 0 ;;
     p*:CYGWIN*:*)
 	echo powerpcle-unknown-cygwin
 	exit 0 ;;
@@ -809,8 +824,13 @@
 	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit 0 ;;
     *:GNU:*:*)
+	# the GNU system
 	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
 	exit 0 ;;
+    *:GNU/*:*:*)
+	# other systems with GNU libc and userland
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	exit 0 ;;
     i*86:Minix:*:*)
 	echo ${UNAME_MACHINE}-pc-minix
 	exit 0 ;;
@@ -820,9 +840,18 @@
     cris:Linux:*:*)
 	echo cris-axis-linux
 	exit 0 ;;
+    crisv32:Linux:*:*)
+	echo crisv32-axis-linux
+	exit 0 ;;
+    frv:Linux:*:*)
+    	echo frv-${VENDOR}-linux
+	exit 0 ;;
     ia64:Linux:*:*)
 	echo ${UNAME_MACHINE}-${VENDOR}-linux
 	exit 0 ;;
+    m32r*:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux
+	exit 0 ;;
     m68*:Linux:*:*)
 	echo ${UNAME_MACHINE}-${VENDOR}-linux
 	exit 0 ;;
@@ -958,6 +987,9 @@
 	LIBC=gnuaout
 	#endif
 	#endif
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
 EOF
 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
 	test x"${LIBC}" != x && echo "${UNAME_MACHINE}-${VENDOR}-linux-${LIBC}" | sed 's/linux-gnu/linux/' && exit 0
@@ -988,6 +1020,9 @@
     i*86:atheos:*:*)
 	echo ${UNAME_MACHINE}-unknown-atheos
 	exit 0 ;;
+	i*86:syllable:*:*)
+	echo ${UNAME_MACHINE}-pc-syllable
+	exit 0 ;;
     i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
 	echo i386-unknown-lynxos${UNAME_RELEASE}
 	exit 0 ;;
@@ -1057,9 +1092,9 @@
     M680?0:D-NIX:5.3:*)
 	echo m68k-diab-dnix
 	exit 0 ;;
-    M68*:*:R3V[567]*:*)
+    M68*:*:R3V[5678]*:*)
 	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
-    3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
 	OS_REL=''
 	test -r /etc/.relid \
 	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
@@ -1157,9 +1192,10 @@
 	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
 	exit 0 ;;
     *:Darwin:*:*)
-	case `uname -p` in
+	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+	case $UNAME_PROCESSOR in
 	    *86) UNAME_PROCESSOR=i686 ;;
-	    powerpc) UNAME_PROCESSOR=powerpc ;;
+	    unknown) UNAME_PROCESSOR=powerpc ;;
 	esac
 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
 	exit 0 ;;
@@ -1174,7 +1210,10 @@
     *:QNX:*:4*)
 	echo i386-pc-qnx
 	exit 0 ;;
-    NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*)
+    NSE-?:NONSTOP_KERNEL:*:*)
+	echo nse-tandem-nsk${UNAME_RELEASE}
+	exit 0 ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
 	echo nsr-tandem-nsk${UNAME_RELEASE}
 	exit 0 ;;
     *:NonStop-UX:*:*)
@@ -1218,6 +1257,19 @@
     SEI:*:*:SEIUX)
         echo mips-sei-seiux${UNAME_RELEASE}
 	exit 0 ;;
+    *:DragonFly:*:*)
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit 0 ;;
+    *:*VMS:*:*)
+    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	case "${UNAME_MACHINE}" in
+	    A*) echo alpha-dec-vms && exit 0 ;;
+	    I*) echo ia64-dec-vms && exit 0 ;;
+	    V*) echo vax-dec-vms && exit 0 ;;
+	esac ;;
+    *:XENIX:*:SysV)
+	echo i386-pc-xenix
+	exit 0 ;;
 esac
 
 #echo '(No uname command or uname output not recognized.)' 1>&2
diff --git a/include/config.h.in b/config.h.in
similarity index 74%
rename from include/config.h.in
rename to config.h.in
index 5c60a71..c0ae185 100644
--- a/include/config.h.in
+++ b/config.h.in
@@ -1,11 +1,21 @@
-/* include/config.h.in.  Generated from configure.in by autoheader.  */
+/* config.h.in.  Generated from configure.in by autoheader.  */
 
 /* Define for enable debug info. */
 #undef ENABLE_DEBUG
 
+/* Define to 1 if you have the <asm/unaligned.h> header file. */
+#undef HAVE_ASM_UNALIGNED_H
+
+/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
+   */
+#undef HAVE_DIRENT_H
+
 /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
 #undef HAVE_DOPRNT
 
+/* Define to 1 if you have the <errno.h> header file. */
+#undef HAVE_ERRNO_H
+
 /* Define to 1 if you have the <fcntl.h> header file. */
 #undef HAVE_FCNTL_H
 
@@ -33,12 +43,22 @@
 /* Define to 1 if you have the `memset' function. */
 #undef HAVE_MEMSET
 
+/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
+#undef HAVE_NDIR_H
+
+/* Define to 1 if you have the <print.h> header file. */
+#undef HAVE_PRINT_H
+
 /* Define to 1 if you have the `register_printf_function' function. */
 #undef HAVE_REGISTER_PRINTF_FUNCTION
 
 /* Define to 1 if you have the `statfs' function. */
 #undef HAVE_STATFS
 
+/* Define to 1 if `stat' has the bug that it succeeds when given the
+   zero-length file name argument. */
+#undef HAVE_STAT_EMPTY_STRING_BUG
+
 /* Define to 1 if you have the <stdint.h> header file. */
 #undef HAVE_STDINT_H
 
@@ -70,9 +90,17 @@
    `HAVE_STRUCT_STAT_ST_RDEV' instead. */
 #undef HAVE_ST_RDEV
 
+/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
+   */
+#undef HAVE_SYS_DIR_H
+
 /* Define to 1 if you have the <sys/ioctl.h> header file. */
 #undef HAVE_SYS_IOCTL_H
 
+/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
+   */
+#undef HAVE_SYS_NDIR_H
+
 /* Define to 1 if you have the <sys/stat.h> header file. */
 #undef HAVE_SYS_STAT_H
 
@@ -97,6 +125,10 @@
 /* gets set when configure --enable-io-failure-emulation */
 #undef IO_FAILURE_EMULATION
 
+/* Define to 1 if `lstat' dereferences a symlink specified with a trailing
+   slash. */
+#undef LSTAT_FOLLOWS_SLASHED_SYMLINK
+
 /* Define to 1 if `major', `minor', and `makedev' are declared in <mkdev.h>.
    */
 #undef MAJOR_IN_MKDEV
@@ -135,6 +167,10 @@
 /* Version number of package */
 #undef VERSION
 
+/* Define to 1 if your processor stores words with the most significant byte
+   first (like Motorola and SPARC, unlike Intel and VAX). */
+#undef WORDS_BIGENDIAN
+
 /* Number of bits in a file offset, on hosts where this is settable. */
 #undef _FILE_OFFSET_BITS
 
@@ -144,9 +180,11 @@
 /* Define to empty if `const' does not conform to ANSI C. */
 #undef const
 
-/* Define as `__inline' if that's what the C compiler calls it, or to nothing
-   if it is not supported. */
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
 #undef inline
+#endif
 
 /* Define to `unsigned' if <sys/types.h> does not define. */
 #undef size_t
diff --git a/config.sub b/config.sub
index 9952c14..c884ad4 100755
--- a/config.sub
+++ b/config.sub
@@ -1,9 +1,9 @@
 #! /bin/sh
 # Configuration validation subroutine script.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
-timestamp='2003-07-04'
+timestamp='2005-02-10'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -70,7 +70,7 @@
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
@@ -118,7 +118,8 @@
 # Here we must recognize all the valid KERNEL-OS combinations.
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
-  nto-qnx* | linux-gnu* | kfreebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
+  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
@@ -144,7 +145,7 @@
 	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
 	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
 	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis)
+	-apple | -axis | -knuth | -cray)
 		os=
 		basic_machine=$1
 		;;
@@ -228,14 +229,15 @@
 	| a29k \
 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| am33_2.0 \
 	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
 	| c4x | clipper \
 	| d10v | d30v | dlx | dsp16xx \
 	| fr30 | frv \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
 	| i370 | i860 | i960 | ia64 \
-	| ip2k \
-	| m32r | m68000 | m68k | m88k | mcore \
+	| ip2k | iq2000 \
+	| m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \
 	| mips | mipsbe | mipseb | mipsel | mipsle \
 	| mips16 \
 	| mips64 | mips64el \
@@ -247,6 +249,7 @@
 	| mipsisa32 | mipsisa32el \
 	| mipsisa32r2 | mipsisa32r2el \
 	| mipsisa64 | mipsisa64el \
+	| mipsisa64r2 | mipsisa64r2el \
 	| mipsisa64sb1 | mipsisa64sb1el \
 	| mipsisa64sr71k | mipsisa64sr71kel \
 	| mipstx39 | mipstx39el \
@@ -259,12 +262,12 @@
 	| pyramid \
 	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
-	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
+	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
 	| strongarm \
 	| tahoe | thumb | tic4x | tic80 | tron \
 	| v850 | v850e \
 	| we32k \
-	| x86 | xscale | xstormy16 | xtensa \
+	| x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
 	| z8k)
 		basic_machine=$basic_machine-unknown
 		;;
@@ -297,17 +300,17 @@
 	| avr-* \
 	| bs2000-* \
 	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
-	| clipper-* | cydra-* \
+	| clipper-* | craynv-* | cydra-* \
 	| d10v-* | d30v-* | dlx-* \
 	| elxsi-* \
 	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
 	| h8300-* | h8500-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
 	| i*86-* | i860-* | i960-* | ia64-* \
-	| ip2k-* \
-	| m32r-* \
+	| ip2k-* | iq2000-* \
+	| m32r-* | m32rle-* \
 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | mcore-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* \
 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
 	| mips16-* \
 	| mips64-* | mips64el-* \
@@ -319,11 +322,13 @@
 	| mipsisa32-* | mipsisa32el-* \
 	| mipsisa32r2-* | mipsisa32r2el-* \
 	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64r2-* | mipsisa64r2el-* \
 	| mipsisa64sb1-* | mipsisa64sb1el-* \
 	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
 	| mipstx39-* | mipstx39el-* \
+	| mmix-* \
 	| msp430-* \
-	| none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
+	| none-* | np1-* | ns16k-* | ns32k-* \
 	| orion-* \
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
@@ -332,14 +337,14 @@
 	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
 	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
-	| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
 	| tahoe-* | thumb-* \
 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
 	| tron-* \
 	| v850-* | v850e-* | vax-* \
 	| we32k-* \
-	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
-	| xtensa-* \
+	| x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
+	| xstormy16-* | xtensa-* \
 	| ymp-* \
 	| z8k-*)
 		;;
@@ -359,6 +364,9 @@
 		basic_machine=a29k-amd
 		os=-udi
 		;;
+    	abacus)
+		basic_machine=abacus-unknown
+		;;
 	adobe68k)
 		basic_machine=m68010-adobe
 		os=-scout
@@ -376,6 +384,9 @@
 	amd64)
 		basic_machine=x86_64-pc
 		;;
+	amd64-*)
+		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	amdahl)
 		basic_machine=580-amdahl
 		os=-sysv
@@ -435,12 +446,27 @@
 		basic_machine=j90-cray
 		os=-unicos
 		;;
+	craynv)
+		basic_machine=craynv-cray
+		os=-unicosmp
+		;;
+	cr16c)
+		basic_machine=cr16c-unknown
+		os=-elf
+		;;
 	crds | unos)
 		basic_machine=m68k-crds
 		;;
+	crisv32 | crisv32-* | etraxfs*)
+		basic_machine=crisv32-axis
+		;;
 	cris | cris-* | etrax*)
 		basic_machine=cris-axis
 		;;
+	crx)
+		basic_machine=crx-unknown
+		os=-elf
+		;;
 	da30 | da30-*)
 		basic_machine=m68k-da30
 		;;
@@ -463,6 +489,10 @@
 		basic_machine=m88k-motorola
 		os=-sysv3
 		;;
+	djgpp)
+		basic_machine=i586-pc
+		os=-msdosdjgpp
+		;;
 	dpx20 | dpx20-*)
 		basic_machine=rs6000-bull
 		os=-bosx
@@ -641,10 +671,6 @@
 	mips3*)
 		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
 		;;
-	mmix*)
-		basic_machine=mmix-knuth
-		os=-mmixware
-		;;
 	monitor)
 		basic_machine=m68k-rom68k
 		os=-coff
@@ -725,10 +751,6 @@
 	np1)
 		basic_machine=np1-gould
 		;;
-	nv1)
-		basic_machine=nv1-cray
-		os=-unicosmp
-		;;
 	nsr-tandem)
 		basic_machine=nsr-tandem
 		;;
@@ -740,6 +762,10 @@
 		basic_machine=or32-unknown
 		os=-coff
 		;;
+	os400)
+		basic_machine=powerpc-ibm
+		os=-os400
+		;;
 	OSE68000 | ose68000)
 		basic_machine=m68000-ericsson
 		os=-ose
@@ -960,6 +986,10 @@
 	tower | tower-32)
 		basic_machine=m68k-ncr
 		;;
+	tpf)
+		basic_machine=s390x-ibm
+		os=-tpf
+		;;
 	udi29k)
 		basic_machine=a29k-amd
 		os=-udi
@@ -1003,6 +1033,10 @@
 		basic_machine=hppa1.1-winbond
 		os=-proelf
 		;;
+	xbox)
+		basic_machine=i686-pc
+		os=-mingw32
+		;;
 	xps | xps100)
 		basic_machine=xps100-honeywell
 		;;
@@ -1033,6 +1067,9 @@
 	romp)
 		basic_machine=romp-ibm
 		;;
+	mmix)
+		basic_machine=mmix-knuth
+		;;
 	rs6000)
 		basic_machine=rs6000-ibm
 		;;
@@ -1055,7 +1092,7 @@
 	sh64)
 		basic_machine=sh64-unknown
 		;;
-	sparc | sparcv9 | sparcv9b)
+	sparc | sparcv8 | sparcv9 | sparcv9b)
 		basic_machine=sparc-sun
 		;;
 	cydra)
@@ -1128,19 +1165,20 @@
 	      | -aos* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-	      | -hiux* | -386bsd* | -netbsd* | -openbsd* | -kfreebsd* | -freebsd* | -riscix* \
-	      | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
 	      | -chorusos* | -chorusrdb* \
 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -linux* | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -mingw32* | -linux* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei*)
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
@@ -1164,6 +1202,9 @@
 	-mac*)
 		os=`echo $os | sed -e 's|mac|macos|'`
 		;;
+	-linux-dietlibc)
+		os=-linux-dietlibc
+		;;
 	-sunos5*)
 		os=`echo $os | sed -e 's|sunos5|solaris2|'`
 		;;
@@ -1173,6 +1214,9 @@
 	-opened*)
 		os=-openedition
 		;;
+        -os400*)
+		os=-os400
+		;;
 	-wince*)
 		os=-wince
 		;;
@@ -1194,6 +1238,9 @@
 	-atheos*)
 		os=-atheos
 		;;
+	-syllable*)
+		os=-syllable
+		;;
 	-386bsd)
 		os=-bsd
 		;;
@@ -1216,6 +1263,9 @@
 	-sinix*)
 		os=-sysv4
 		;;
+        -tpf*)
+		os=-tpf
+		;;
 	-triton*)
 		os=-sysv3
 		;;
@@ -1252,6 +1302,9 @@
 	-kaos*)
 		os=-kaos
 		;;
+	-zvmoe)
+		os=-zvmoe
+		;;
 	-none)
 		;;
 	*)
@@ -1332,6 +1385,9 @@
 	*-ibm)
 		os=-aix
 		;;
+    	*-knuth)
+		os=-mmixware
+		;;
 	*-wec)
 		os=-proelf
 		;;
@@ -1464,9 +1520,15 @@
 			-mvs* | -opened*)
 				vendor=ibm
 				;;
+			-os400*)
+				vendor=ibm
+				;;
 			-ptx*)
 				vendor=sequent
 				;;
+			-tpf*)
+				vendor=ibm
+				;;
 			-vxsim* | -vxworks* | -windiss*)
 				vendor=wrs
 				;;
diff --git a/configure b/configure
index 66ef57d..2f45f37 100755
--- a/configure
+++ b/configure
@@ -1,9 +1,8 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.57.
+# Generated by GNU Autoconf 2.59.
 #
-# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
-# Free Software Foundation, Inc.
+# Copyright (C) 2003 Free Software Foundation, Inc.
 # This configure script is free software; the Free Software Foundation
 # gives unlimited permission to copy, distribute and modify it.
 ## --------------------- ##
@@ -20,9 +19,10 @@
 elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
   set -o posix
 fi
+DUALCASE=1; export DUALCASE # for MKS sh
 
 # Support unset when possible.
-if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
   as_unset=unset
 else
   as_unset=false
@@ -41,7 +41,7 @@
   LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
   LC_TELEPHONE LC_TIME
 do
-  if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
     eval $as_var=C; export $as_var
   else
     $as_unset $as_var
@@ -218,16 +218,17 @@
 if mkdir -p . 2>/dev/null; then
   as_mkdir_p=:
 else
+  test -d ./-p && rmdir ./-p
   as_mkdir_p=false
 fi
 
 as_executable_p="test -f"
 
 # Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
 
 # Sed expression to map a string onto a valid variable name.
-as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
 
 # IFS
@@ -270,7 +271,7 @@
 PACKAGE_STRING=
 PACKAGE_BUGREPORT=
 
-ac_unique_file="version.h"
+ac_unique_file="include/reiserfs/libreiserfs.h"
 # Factoring default headers for most tests.
 ac_includes_default="\
 #include <stdio.h>
@@ -308,7 +309,7 @@
 # include <unistd.h>
 #endif"
 
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE am__leading_dot MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE LN_S RANLIB ac_ct_RANLIB UUID_LIBS CPP EGREP LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP LN_S RANLIB ac_ct_RANLIB EGREP LIBOBJS UUID_LIBS PROGS_LDFLAGS LTLIBOBJS'
 ac_subst_files=''
 
 # Initialize some variables set by options.
@@ -667,7 +668,7 @@
 
 # Be sure to have absolute paths.
 for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
-              localstatedir libdir includedir oldincludedir infodir mandir
+	      localstatedir libdir includedir oldincludedir infodir mandir
 do
   eval ac_val=$`echo $ac_var`
   case $ac_val in
@@ -707,10 +708,10 @@
   # Try the directory containing this script, then its parent.
   ac_confdir=`(dirname "$0") 2>/dev/null ||
 $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X"$0" : 'X\(//\)[^/]' \| \
-         X"$0" : 'X\(//\)$' \| \
-         X"$0" : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
+	 X"$0" : 'X\(//\)[^/]' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
 echo X"$0" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
@@ -802,9 +803,9 @@
   cat <<_ACEOF
 Installation directories:
   --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
+			  [$ac_default_prefix]
   --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [PREFIX]
+			  [PREFIX]
 
 By default, \`make install' will install all the files in
 \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
@@ -848,11 +849,14 @@
 Optional Features:
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-maintainer-mode enable make rules and dependencies not useful
-                          (and sometimes confusing) to the casual installer
-  --disable-dependency-tracking Speeds up one-time builds
-  --enable-dependency-tracking  Do not reject slow dependency extractors
-  --enable-debug          enable extra checks
+  --enable-maintainer-mode  enable make rules and dependencies not useful
+			  (and sometimes confusing) to the casual installer
+  --enable-debug      enable extra checks
+  --enable-static     build all static
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+  --enable-shared[=PKGS]
+                          build shared libraries [default=yes]
   --disable-largefile     omit support for large files
   --enable-io-failure-emulation      Never use that. It is for debugging only
 
@@ -901,12 +905,45 @@
     ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
     ac_top_srcdir=$ac_top_builddir$srcdir ;;
 esac
-# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
-# absolute.
-ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
-ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
-ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
-ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
 
     cd $ac_dir
     # Check for guested configure; otherwise get Cygnus style configure.
@@ -917,7 +954,7 @@
       echo
       $SHELL $ac_srcdir/configure  --help=recursive
     elif test -f $ac_srcdir/configure.ac ||
-           test -f $ac_srcdir/configure.in; then
+	   test -f $ac_srcdir/configure.in; then
       echo
       $ac_configure --help
     else
@@ -931,8 +968,7 @@
 if $ac_init_version; then
   cat <<\_ACEOF
 
-Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
-Free Software Foundation, Inc.
+Copyright (C) 2003 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -944,7 +980,7 @@
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by $as_me, which was
-generated by GNU Autoconf 2.57.  Invocation command line was
+generated by GNU Autoconf 2.59.  Invocation command line was
 
   $ $0 $@
 
@@ -1021,19 +1057,19 @@
     2)
       ac_configure_args1="$ac_configure_args1 '$ac_arg'"
       if test $ac_must_keep_next = true; then
-        ac_must_keep_next=false # Got value, back to normal.
+	ac_must_keep_next=false # Got value, back to normal.
       else
-        case $ac_arg in
-          *=* | --config-cache | -C | -disable-* | --disable-* \
-          | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
-          | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
-          | -with-* | --with-* | -without-* | --without-* | --x)
-            case "$ac_configure_args0 " in
-              "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
-            esac
-            ;;
-          -* ) ac_must_keep_next=true ;;
-        esac
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
       fi
       ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
       # Get rid of the leading space.
@@ -1067,12 +1103,12 @@
     case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
     *ac_space=\ *)
       sed -n \
-        "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
-    	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
       ;;
     *)
       sed -n \
-        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
       ;;
     esac;
 }
@@ -1101,7 +1137,7 @@
       for ac_var in $ac_subst_files
       do
 	eval ac_val=$`echo $ac_var`
-        echo "$ac_var='"'"'$ac_val'"'"'"
+	echo "$ac_var='"'"'$ac_val'"'"'"
       done | sort
       echo
     fi
@@ -1120,7 +1156,7 @@
       echo "$as_me: caught signal $ac_signal"
     echo "$as_me: exit $exit_status"
   } >&5
-  rm -f core core.* *.core &&
+  rm -f core *.core &&
   rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
     exit $exit_status
      ' 0
@@ -1200,7 +1236,7 @@
 # value.
 ac_cache_corrupted=false
 for ac_var in `(set) 2>&1 |
-               sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
   eval ac_old_set=\$ac_cv_env_${ac_var}_set
   eval ac_new_set=\$ac_env_${ac_var}_set
   eval ac_old_val="\$ac_cv_env_${ac_var}_value"
@@ -1217,13 +1253,13 @@
     ,);;
     *)
       if test "x$ac_old_val" != "x$ac_new_val"; then
-        { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-        { echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
 echo "$as_me:   former value:  $ac_old_val" >&2;}
-        { echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
 echo "$as_me:   current value: $ac_new_val" >&2;}
-        ac_cache_corrupted=:
+	ac_cache_corrupted=:
       fi;;
   esac
   # Pass precious variables to config.status.
@@ -1357,7 +1393,23 @@
 
 
 
-am__api_version="1.7"
+
+
+
+
+
+LIBREISERFS_MAJOR_VERSION=3
+LIBREISERFS_MINOR_VERSION=6
+LIBREISERFS_MICRO_VERSION=20
+LIBREISERFS_VERSION=$LIBREISERFS_MAJOR_VERSION.$LIBREISERFS_MINOR_VERSION.$LIBREISERFS_MICRO_VERSION
+
+
+
+
+PACKAGE=reiserfsprogs
+VERSION=$LIBREISERFS_VERSION
+
+am__api_version="1.9"
 # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
 # incompatible versions:
@@ -1369,6 +1421,7 @@
 # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
 # AFS /usr/afsws/bin/install, which mishandles nonexistent args
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
 # ./install, which can be erroneously created by make from ./install.sh.
 echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
@@ -1385,6 +1438,7 @@
 case $as_dir/ in
   ./ | .// | /cC/* | \
   /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
   /usr/ucb/* ) ;;
   *)
     # OSF1 and SCO ODT 3.0 have their own names for install.
@@ -1392,20 +1446,20 @@
     # by default.
     for ac_prog in ginstall scoinst install; do
       for ac_exec_ext in '' $ac_executable_extensions; do
-        if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
-          if test $ac_prog = install &&
-            grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-            # AIX install.  It has an incompatible calling convention.
-            :
-          elif test $ac_prog = install &&
-            grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-            # program-specific install script used by HP pwplus--don't use.
-            :
-          else
-            ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-            break 3
-          fi
-        fi
+	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	    break 3
+	  fi
+	fi
       done
     done
     ;;
@@ -1493,7 +1547,6 @@
 program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
 rm conftest.sed
 
-
 # expand $ac_aux_dir to an absolute path
 am_aux_dir=`cd $ac_aux_dir && pwd`
 
@@ -1507,6 +1560,39 @@
 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
 fi
 
+if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+  # We used to keeping the `.' as first argument, in order to
+  # allow $(mkdir_p) to be used without argument.  As in
+  #   $(mkdir_p) $(somedir)
+  # where $(somedir) is conditionally defined.  However this is wrong
+  # for two reasons:
+  #  1. if the package is installed by a user who cannot write `.'
+  #     make install will fail,
+  #  2. the above comment should most certainly read
+  #     $(mkdir_p) $(DESTDIR)$(somedir)
+  #     so it does not work when $(somedir) is undefined and
+  #     $(DESTDIR) is not.
+  #  To support the latter case, we have to write
+  #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
+  #  so the `.' trick is pointless.
+  mkdir_p='mkdir -p --'
+else
+  # On NextStep and OpenStep, the `mkdir' command does not
+  # recognize any option.  It will interpret all options as
+  # directories to create, and then abort because `.' already
+  # exists.
+  for d in ./-p ./--version;
+  do
+    test -d $d && rmdir $d
+  done
+  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+  if test -f "$ac_aux_dir/mkinstalldirs"; then
+    mkdir_p='$(mkinstalldirs)'
+  else
+    mkdir_p='$(install_sh) -d'
+  fi
+fi
+
 for ac_prog in gawk mawk nawk awk
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
@@ -1549,7 +1635,7 @@
 
 echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
 if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
@@ -1585,7 +1671,7 @@
 fi
 rmdir .tst 2>/dev/null
 
- # test to see if srcdir already configured
+# test to see if srcdir already configured
 if test "`cd $srcdir && pwd`" != "`pwd`" &&
    test -f $srcdir/config.status; then
   { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
@@ -1604,8 +1690,8 @@
 
 
 # Define the identity of the package.
- PACKAGE=reiserfsprogs
- VERSION=3.6.19
+ PACKAGE=$PACKAGE
+ VERSION=$VERSION
 
 
 cat >>confdefs.h <<_ACEOF
@@ -1633,9 +1719,6 @@
 
 MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 
-
-AMTAR=${AMTAR-"${am_missing_run}tar"}
-
 install_sh=${install_sh-"$am_aux_dir/install-sh"}
 
 # Installed binaries are usually stripped using `strip' when the user
@@ -1728,9 +1811,18 @@
 
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
 
 
 
+
+
+          ac_config_headers="$ac_config_headers config.h"
+
 echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
 echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
     # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
@@ -1757,9 +1849,30 @@
 
 
 
-          ac_config_headers="$ac_config_headers include/config.h"
 
+# Check whether --enable-debug or --disable-debug was given.
+if test "${enable_debug+set}" = set; then
+  enableval="$enable_debug"
 
+else
+  enable_debug=no
+
+fi;
+
+PROGS_LDFLAGS=""
+
+# Check whether --enable-static or --disable-static was given.
+if test "${enable_static+set}" = set; then
+  enableval="$enable_static"
+
+else
+  enable_static=no
+
+fi;
+
+if test x$enable_static = xyes; then
+	PROGS_LDFLAGS=-static
+fi
 
 
 PRESET_CFLAGS=$CFLAGS
@@ -2100,7 +2213,6 @@
   (exit $ac_status); }
 
 cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -2120,8 +2232,8 @@
 # Try to create an executable without -o first, disregard a.out.
 # It will help us diagnose broken compilers, and finding out an intuition
 # of exeext.
-echo "$as_me:$LINENO: checking for C compiler default output" >&5
-echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
+echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
 if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
   (eval $ac_link_default) 2>&5
@@ -2141,23 +2253,23 @@
   test -f "$ac_file" || continue
   case $ac_file in
     *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
-        ;;
+	;;
     conftest.$ac_ext )
-        # This is the source file.
-        ;;
+	# This is the source file.
+	;;
     [ab].out )
-        # We found the default executable, but exeext='' is most
-        # certainly right.
-        break;;
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
     *.* )
-        ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-        # FIXME: I believe we export ac_cv_exeext for Libtool,
-        # but it would be cool to find out if it's true.  Does anybody
-        # maintain Libtool? --akim.
-        export ac_cv_exeext
-        break;;
+	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	# FIXME: I believe we export ac_cv_exeext for Libtool,
+	# but it would be cool to find out if it's true.  Does anybody
+	# maintain Libtool? --akim.
+	export ac_cv_exeext
+	break;;
     * )
-        break;;
+	break;;
   esac
 done
 else
@@ -2231,8 +2343,8 @@
   case $ac_file in
     *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
     *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-          export ac_cv_exeext
-          break;;
+	  export ac_cv_exeext
+	  break;;
     * ) break;;
   esac
 done
@@ -2257,7 +2369,6 @@
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -2308,7 +2419,6 @@
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -2328,11 +2438,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -2345,7 +2465,7 @@
 
 ac_compiler_gnu=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
 fi
@@ -2361,7 +2481,6 @@
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -2378,11 +2497,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -2395,7 +2524,7 @@
 
 ac_cv_prog_cc_g=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
@@ -2422,7 +2551,6 @@
   ac_cv_prog_cc_stdc=no
 ac_save_CC=$CC
 cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -2450,6 +2578,16 @@
   va_end (v);
   return s;
 }
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std1 is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std1.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
 int test (int i, double x);
 struct s1 {int (*f) (int a);};
 struct s2 {int (*f) (double a);};
@@ -2476,11 +2614,21 @@
   CC="$ac_save_CC $ac_arg"
   rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -2493,7 +2641,7 @@
 sed 's/^/| /' conftest.$ac_ext >&5
 
 fi
-rm -f conftest.$ac_objext
+rm -f conftest.err conftest.$ac_objext
 done
 rm -f conftest.$ac_ext conftest.$ac_objext
 CC=$ac_save_CC
@@ -2521,19 +2669,28 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   for ac_declaration in \
-   ''\
-   '#include <stdlib.h>' \
+   '' \
    'extern "C" void std::exit (int) throw (); using std::exit;' \
    'extern "C" void std::exit (int); using std::exit;' \
    'extern "C" void exit (int) throw ();' \
@@ -2541,14 +2698,13 @@
    'void exit (int);'
 do
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <stdlib.h>
 $ac_declaration
+#include <stdlib.h>
 int
 main ()
 {
@@ -2559,11 +2715,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -2576,9 +2742,8 @@
 
 continue
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -2595,11 +2760,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -2611,7 +2786,7 @@
 sed 's/^/| /' conftest.$ac_ext >&5
 
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 done
 rm -f conftest*
 if test -n "$ac_declaration"; then
@@ -2625,7 +2800,7 @@
 sed 's/^/| /' conftest.$ac_ext >&5
 
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -2738,7 +2913,9 @@
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      : > sub/conftst$i.h
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
@@ -2766,9 +2943,14 @@
        grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
        ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
       # icc doesn't choke on unknown options, it will just issue warnings
-      # (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored.
-      if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
         am_cv_CC_dependencies_compiler_type=$depmode
         break
       fi
@@ -2799,6 +2981,240 @@
 fi
 
 
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
 for ac_prog in gawk mawk nawk awk
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
@@ -2850,6 +3266,7 @@
 # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
 # AFS /usr/afsws/bin/install, which mishandles nonexistent args
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
 # ./install, which can be erroneously created by make from ./install.sh.
 echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
@@ -2866,6 +3283,7 @@
 case $as_dir/ in
   ./ | .// | /cC/* | \
   /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
   /usr/ucb/* ) ;;
   *)
     # OSF1 and SCO ODT 3.0 have their own names for install.
@@ -2873,20 +3291,20 @@
     # by default.
     for ac_prog in ginstall scoinst install; do
       for ac_exec_ext in '' $ac_executable_extensions; do
-        if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
-          if test $ac_prog = install &&
-            grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-            # AIX install.  It has an incompatible calling convention.
-            :
-          elif test $ac_prog = install &&
-            grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-            # program-specific install script used by HP pwplus--don't use.
-            :
-          else
-            ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-            break 3
-          fi
-        fi
+	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	    break 3
+	  fi
+	fi
       done
     done
     ;;
@@ -2929,7 +3347,7 @@
 
 echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
 if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
@@ -3037,8 +3455,34 @@
 fi
 
 
+# Check whether --enable-shared or --disable-shared was given.
+if test "${enable_shared+set}" = set; then
+  enableval="$enable_shared"
+  p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_shared=yes
+fi;
+
+
 
 # Check for LIBUUID
+LIBS=""
 
 
 echo "$as_me:$LINENO: checking for uuid_generate in -luuid" >&5
@@ -3049,7 +3493,6 @@
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-luuid  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -3073,11 +3516,21 @@
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
+  (eval $ac_link) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -3090,7 +3543,8 @@
 
 ac_cv_lib_uuid_uuid_generate=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
 echo "$as_me:$LINENO: result: $ac_cv_lib_uuid_uuid_generate" >&5
@@ -3110,241 +3564,6 @@
 UUID_LIBS="$LIBS"
 
 
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-                     Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether non-existent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  break
-fi
-
-    done
-    ac_cv_prog_CPP=$CPP
-
-fi
-  CPP=$ac_cv_prog_CPP
-else
-  ac_cv_prog_CPP=$CPP
-fi
-echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-                     Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether non-existent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  :
-else
-  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
 echo "$as_me:$LINENO: checking for egrep" >&5
 echo $ECHO_N "checking for egrep... $ECHO_C" >&6
 if test "${ac_cv_prog_egrep+set}" = set; then
@@ -3366,7 +3585,6 @@
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -3387,11 +3605,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -3404,12 +3632,11 @@
 
 ac_cv_header_stdc=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -3431,7 +3658,6 @@
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -3456,7 +3682,6 @@
   :
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -3468,9 +3693,9 @@
 # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
 #else
 # define ISLOWER(c) \
-                   (('a' <= (c) && (c) <= 'i') \
-                     || ('j' <= (c) && (c) <= 'r') \
-                     || ('s' <= (c) && (c) <= 'z'))
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
 # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
 #endif
 
@@ -3481,7 +3706,7 @@
   int i;
   for (i = 0; i < 256; i++)
     if (XOR (islower (i), ISLOWER (i))
-        || toupper (i) != TOUPPER (i))
+	|| toupper (i) != TOUPPER (i))
       exit(2);
   exit (0);
 }
@@ -3506,7 +3731,7 @@
 ( exit $ac_status )
 ac_cv_header_stdc=no
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 fi
@@ -3520,6 +3745,336 @@
 
 fi
 
+
+
+
+
+
+ac_header_dirent=no
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
+  as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5
+echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <$ac_hdr>
+
+int
+main ()
+{
+if ((DIR *) 0)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+_ACEOF
+
+ac_header_dirent=$ac_hdr; break
+fi
+
+done
+# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
+if test $ac_header_dirent = dirent.h; then
+  echo "$as_me:$LINENO: checking for library containing opendir" >&5
+echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6
+if test "${ac_cv_search_opendir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+ac_cv_search_opendir=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char opendir ();
+int
+main ()
+{
+opendir ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_search_opendir="none required"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test "$ac_cv_search_opendir" = no; then
+  for ac_lib in dir; do
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char opendir ();
+int
+main ()
+{
+opendir ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_search_opendir="-l$ac_lib"
+break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+  done
+fi
+LIBS=$ac_func_search_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
+echo "${ECHO_T}$ac_cv_search_opendir" >&6
+if test "$ac_cv_search_opendir" != no; then
+  test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS"
+
+fi
+
+else
+  echo "$as_me:$LINENO: checking for library containing opendir" >&5
+echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6
+if test "${ac_cv_search_opendir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+ac_cv_search_opendir=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char opendir ();
+int
+main ()
+{
+opendir ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_search_opendir="none required"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test "$ac_cv_search_opendir" = no; then
+  for ac_lib in x; do
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char opendir ();
+int
+main ()
+{
+opendir ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_search_opendir="-l$ac_lib"
+break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+  done
+fi
+LIBS=$ac_func_search_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
+echo "${ECHO_T}$ac_cv_search_opendir" >&6
+if test "$ac_cv_search_opendir" != no; then
+  test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS"
+
+fi
+
+fi
+
 # On IRIX 5.3, sys/types and inttypes.h are conflicting.
 
 
@@ -3531,7 +4086,7 @@
 
 
 for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-                  inttypes.h stdint.h unistd.h
+		  inttypes.h stdint.h unistd.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -3540,7 +4095,6 @@
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -3552,11 +4106,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -3569,7 +4133,7 @@
 
 eval "$as_ac_Header=no"
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
@@ -3589,7 +4153,9 @@
 
 
 
-for ac_header in fcntl.h limits.h malloc.h sys/ioctl.h unistd.h uuid/uuid.h
+
+
+for ac_header in print.h errno.h fcntl.h limits.h malloc.h sys/ioctl.h unistd.h uuid/uuid.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if eval "test \"\${$as_ac_Header+set}\" = set"; then
@@ -3605,7 +4171,6 @@
 echo "$as_me:$LINENO: checking $ac_header usability" >&5
 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -3616,11 +4181,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -3633,7 +4208,7 @@
 
 ac_header_compiler=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
 echo "${ECHO_T}$ac_header_compiler" >&6
 
@@ -3641,7 +4216,6 @@
 echo "$as_me:$LINENO: checking $ac_header presence" >&5
 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -3659,6 +4233,7 @@
   (exit $ac_status); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
   else
     ac_cpp_err=
   fi
@@ -3678,33 +4253,32 @@
 echo "${ECHO_T}$ac_header_preproc" >&6
 
 # So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc in
-  yes:no )
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
     { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
     ;;
-  no:yes )
+  no:yes:* )
     { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
     (
       cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists.  ##
+## ------------------------------------------ ##
 _ASBOX
     ) |
       sed "s/^/$as_me: WARNING:     /" >&2
@@ -3715,7 +4289,7 @@
 if eval "test \"\${$as_ac_Header+set}\" = set"; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  eval "$as_ac_Header=$ac_header_preproc"
+  eval "$as_ac_Header=\$ac_header_preproc"
 fi
 echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
@@ -3730,13 +4304,163 @@
 
 done
 
+
+for ac_header in asm/unaligned.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists.  ##
+## ------------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
 echo "$as_me:$LINENO: checking whether sys/types.h defines makedev" >&5
 echo $ECHO_N "checking whether sys/types.h defines makedev... $ECHO_C" >&6
 if test "${ac_cv_header_sys_types_h_makedev+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -3753,11 +4477,21 @@
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
+  (eval $ac_link) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -3770,7 +4504,8 @@
 
 ac_cv_header_sys_types_h_makedev=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
 
 fi
 echo "$as_me:$LINENO: result: $ac_cv_header_sys_types_h_makedev" >&5
@@ -3790,7 +4525,6 @@
 echo "$as_me:$LINENO: checking sys/mkdev.h usability" >&5
 echo $ECHO_N "checking sys/mkdev.h usability... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -3801,11 +4535,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -3818,7 +4562,7 @@
 
 ac_header_compiler=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
 echo "${ECHO_T}$ac_header_compiler" >&6
 
@@ -3826,7 +4570,6 @@
 echo "$as_me:$LINENO: checking sys/mkdev.h presence" >&5
 echo $ECHO_N "checking sys/mkdev.h presence... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -3844,6 +4587,7 @@
   (exit $ac_status); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
   else
     ac_cpp_err=
   fi
@@ -3863,33 +4607,32 @@
 echo "${ECHO_T}$ac_header_preproc" >&6
 
 # So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc in
-  yes:no )
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
     { echo "$as_me:$LINENO: WARNING: sys/mkdev.h: accepted by the compiler, rejected by the preprocessor!" >&5
 echo "$as_me: WARNING: sys/mkdev.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/mkdev.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: sys/mkdev.h: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
+    { echo "$as_me:$LINENO: WARNING: sys/mkdev.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: sys/mkdev.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
     ;;
-  no:yes )
+  no:yes:* )
     { echo "$as_me:$LINENO: WARNING: sys/mkdev.h: present but cannot be compiled" >&5
 echo "$as_me: WARNING: sys/mkdev.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/mkdev.h: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: sys/mkdev.h: check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/mkdev.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: sys/mkdev.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/mkdev.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: sys/mkdev.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/mkdev.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: sys/mkdev.h:     section \"Present But Cannot Be Compiled\"" >&2;}
     { echo "$as_me:$LINENO: WARNING: sys/mkdev.h: proceeding with the preprocessor's result" >&5
 echo "$as_me: WARNING: sys/mkdev.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/mkdev.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: sys/mkdev.h: in the future, the compiler will take precedence" >&2;}
     (
       cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists.  ##
+## ------------------------------------------ ##
 _ASBOX
     ) |
       sed "s/^/$as_me: WARNING:     /" >&2
@@ -3930,7 +4673,6 @@
 echo "$as_me:$LINENO: checking sys/sysmacros.h usability" >&5
 echo $ECHO_N "checking sys/sysmacros.h usability... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -3941,11 +4683,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -3958,7 +4710,7 @@
 
 ac_header_compiler=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
 echo "${ECHO_T}$ac_header_compiler" >&6
 
@@ -3966,7 +4718,6 @@
 echo "$as_me:$LINENO: checking sys/sysmacros.h presence" >&5
 echo $ECHO_N "checking sys/sysmacros.h presence... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -3984,6 +4735,7 @@
   (exit $ac_status); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
   else
     ac_cpp_err=
   fi
@@ -4003,33 +4755,32 @@
 echo "${ECHO_T}$ac_header_preproc" >&6
 
 # So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc in
-  yes:no )
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
     { echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: accepted by the compiler, rejected by the preprocessor!" >&5
 echo "$as_me: WARNING: sys/sysmacros.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: sys/sysmacros.h: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
+    { echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: sys/sysmacros.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
     ;;
-  no:yes )
+  no:yes:* )
     { echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: present but cannot be compiled" >&5
 echo "$as_me: WARNING: sys/sysmacros.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: sys/sysmacros.h: check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/sysmacros.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: sys/sysmacros.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: sys/sysmacros.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/sysmacros.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: sys/sysmacros.h:     section \"Present But Cannot Be Compiled\"" >&2;}
     { echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: proceeding with the preprocessor's result" >&5
 echo "$as_me: WARNING: sys/sysmacros.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: sys/sysmacros.h: in the future, the compiler will take precedence" >&2;}
     (
       cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists.  ##
+## ------------------------------------------ ##
 _ASBOX
     ) |
       sed "s/^/$as_me: WARNING:     /" >&2
@@ -4065,7 +4816,6 @@
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -4128,11 +4878,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4145,7 +4905,7 @@
 
 ac_cv_c_const=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
 echo "${ECHO_T}$ac_cv_c_const" >&6
@@ -4165,7 +4925,6 @@
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -4180,11 +4939,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4196,23 +4965,27 @@
 sed 's/^/| /' conftest.$ac_ext >&5
 
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 done
 
 fi
 echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
 echo "${ECHO_T}$ac_cv_c_inline" >&6
+
+
 case $ac_cv_c_inline in
   inline | yes) ;;
-  no)
-cat >>confdefs.h <<\_ACEOF
-#define inline
+  *)
+    case $ac_cv_c_inline in
+      no) ac_val=;;
+      *) ac_val=$ac_cv_c_inline;;
+    esac
+    cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
 _ACEOF
- ;;
-  *)  cat >>confdefs.h <<_ACEOF
-#define inline $ac_cv_c_inline
-_ACEOF
- ;;
+    ;;
 esac
 
 echo "$as_me:$LINENO: checking for size_t" >&5
@@ -4221,7 +4994,6 @@
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -4241,11 +5013,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4258,7 +5040,7 @@
 
 ac_cv_type_size_t=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
 echo "${ECHO_T}$ac_cv_type_size_t" >&6
@@ -4279,7 +5061,6 @@
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -4298,11 +5079,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4314,7 +5105,6 @@
 sed 's/^/| /' conftest.$ac_ext >&5
 
 cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -4333,11 +5123,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4350,9 +5150,9 @@
 
 ac_cv_member_struct_stat_st_rdev=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_rdev" >&5
 echo "${ECHO_T}$ac_cv_member_struct_stat_st_rdev" >&6
@@ -4370,15 +5170,236 @@
 fi
 
 
-
-# Check whether --enable-debug or --disable-debug was given.
-if test "${enable_debug+set}" = set; then
-  enableval="$enable_debug"
-  enable_debug=yes
+echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
+echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6
+if test "${ac_cv_c_bigendian+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  enable_debug=no
+  # See if sys/param.h defines the BYTE_ORDER macro.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/param.h>
 
-fi;
+int
+main ()
+{
+#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
+ bogus endian macros
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  # It does; now see whether it defined to BIG_ENDIAN or not.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/param.h>
+
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+ not big endian
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_bigendian=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_c_bigendian=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+# It does not; compile a test program.
+if test "$cross_compiling" = yes; then
+  # try to guess the endianness by grepping values into an object file
+  ac_cv_c_bigendian=unknown
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }
+short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }
+int
+main ()
+{
+ _ascii (); _ebcdic ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
+  ac_cv_c_bigendian=yes
+fi
+if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+  if test "$ac_cv_c_bigendian" = unknown; then
+    ac_cv_c_bigendian=no
+  else
+    # finding both strings is unlikely to happen, but who knows?
+    ac_cv_c_bigendian=unknown
+  fi
+fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+int
+main ()
+{
+  /* Are we little or big endian?  From Harbison&Steele.  */
+  union
+  {
+    long l;
+    char c[sizeof (long)];
+  } u;
+  u.l = 1;
+  exit (u.c[sizeof (long) - 1] == 1);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_bigendian=no
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_c_bigendian=yes
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
+echo "${ECHO_T}$ac_cv_c_bigendian" >&6
+case $ac_cv_c_bigendian in
+  yes)
+
+cat >>confdefs.h <<\_ACEOF
+#define WORDS_BIGENDIAN 1
+_ACEOF
+ ;;
+  no)
+     ;;
+  *)
+    { { echo "$as_me:$LINENO: error: unknown endianness
+presetting ac_cv_c_bigendian=no (or yes) will help" >&5
+echo "$as_me: error: unknown endianness
+presetting ac_cv_c_bigendian=no (or yes) will help" >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+
 
 echo "$as_me:$LINENO: checking whether -fPIC works" >&5
 echo $ECHO_N "checking whether -fPIC works... $ECHO_C" >&6
@@ -4389,7 +5410,6 @@
 	saved_CPPFLAGS="$CPPFLAGS"
 	CPPFLAGS="-fPIC -DPIC"
 	cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -4406,11 +5426,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4423,7 +5453,7 @@
 
 pic=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 	CPPFLAGS="$saved_CPPFLAGS"
 
 fi
@@ -4440,7 +5470,6 @@
 	saved_CPPFLAGS="$CPPFLAGS"
 	CPPFLAGS="-O1 -Wuninitialized"
 	cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -4457,11 +5486,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4474,7 +5513,7 @@
 
 uninitialized=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 	CPPFLAGS="$saved_CPPFLAGS"
 
 fi
@@ -4490,7 +5529,6 @@
 	saved_CPPFLAGS="$CPPFLAGS"
 	CPPFLAGS="-Wno-unused-parameter"
 	cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -4507,11 +5545,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4524,7 +5572,7 @@
 
 no_unused_parameter=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 	CPPFLAGS="$saved_CPPFLAGS"
 
 fi
@@ -4540,7 +5588,6 @@
 	saved_CPPFLAGS="$CPPFLAGS"
 	CPPFLAGS="-Wredundant-decls"
 	cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -4557,11 +5604,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4574,7 +5631,7 @@
 
 redundant_decls=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 	CPPFLAGS="$saved_CPPFLAGS"
 
 fi
@@ -4600,8 +5657,7 @@
        while :; do
      	 # IRIX 6.2 and later do not support large files by default,
      	 # so use the C compiler's -n32 option if that helps.
-         cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
+	 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -4626,11 +5682,21 @@
 _ACEOF
      	 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4642,15 +5708,25 @@
 sed 's/^/| /' conftest.$ac_ext >&5
 
 fi
-rm -f conftest.$ac_objext
+rm -f conftest.err conftest.$ac_objext
      	 CC="$CC -n32"
      	 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4662,8 +5738,8 @@
 sed 's/^/| /' conftest.$ac_ext >&5
 
 fi
-rm -f conftest.$ac_objext
-         break
+rm -f conftest.err conftest.$ac_objext
+	 break
        done
        CC=$ac_save_CC
        rm -f conftest.$ac_ext
@@ -4683,7 +5759,6 @@
   while :; do
   ac_cv_sys_file_offset_bits=no
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -4708,11 +5783,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4724,9 +5809,8 @@
 sed 's/^/| /' conftest.$ac_ext >&5
 
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -4752,11 +5836,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4768,7 +5862,7 @@
 sed 's/^/| /' conftest.$ac_ext >&5
 
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
   break
 done
 fi
@@ -4790,7 +5884,6 @@
   while :; do
   ac_cv_sys_large_files=no
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -4815,11 +5908,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4831,9 +5934,8 @@
 sed 's/^/| /' conftest.$ac_ext >&5
 
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -4859,11 +5961,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4875,7 +5987,7 @@
 sed 's/^/| /' conftest.$ac_ext >&5
 
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
   break
 done
 fi
@@ -4892,7 +6004,7 @@
 fi
 
 
-if test -z "${ac_cv_sys_file_offset_bits}"; then
+if test x${ac_cv_sys_file_offset_bits} = xno; then
 	{ echo "$as_me:$LINENO: WARNING: Can't detect right _FILE_OFFSET_BITS. Will be forced to 64bit." >&5
 echo "$as_me: WARNING: Can't detect right _FILE_OFFSET_BITS. Will be forced to 64bit." >&2;}
 	ac_cv_sys_file_offset_bits=64
@@ -4904,7 +6016,6 @@
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -4929,11 +6040,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4946,7 +6067,7 @@
 
 ac_cv_type_off_t=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
 echo "${ECHO_T}$ac_cv_type_off_t" >&6
@@ -4964,7 +6085,6 @@
   if test "$cross_compiling" = yes; then
   # Depending upon the size, compute the lo and hi bounds.
 cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -4988,11 +6108,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5001,7 +6131,6 @@
   ac_lo=0 ac_mid=0
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -5025,11 +6154,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5041,20 +6180,19 @@
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ac_lo=`expr $ac_mid + 1`
-                    if test $ac_lo -le $ac_mid; then
-                      ac_lo= ac_hi=
-                      break
-                    fi
-                    ac_mid=`expr 2 '*' $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -5078,11 +6216,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5091,7 +6239,6 @@
   ac_hi=-1 ac_mid=-1
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -5115,11 +6262,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5131,13 +6288,13 @@
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ac_hi=`expr '(' $ac_mid ')' - 1`
-                       if test $ac_mid -le $ac_hi; then
-                         ac_lo= ac_hi=
-                         break
-                       fi
-                       ac_mid=`expr 2 '*' $ac_mid`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
   echo "$as_me: failed program was:" >&5
@@ -5145,14 +6302,13 @@
 
 ac_lo= ac_hi=
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 # Binary search between lo and hi bounds.
 while test "x$ac_lo" != "x$ac_hi"; do
   ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -5176,11 +6332,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5193,7 +6359,7 @@
 
 ac_lo=`expr '(' $ac_mid ')' + 1`
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 done
 case $ac_lo in
 ?*) ac_cv_sizeof_off_t=$ac_lo;;
@@ -5212,7 +6378,6 @@
    { (exit 1); exit 1; }; }
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -5279,7 +6444,7 @@
 See \`config.log' for more details." >&2;}
    { (exit 1); exit 1; }; }
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 rm -f conftest.val
@@ -5301,7 +6466,6 @@
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -5326,11 +6490,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5343,7 +6517,7 @@
 
 ac_cv_type_blkcnt_t=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 echo "$as_me:$LINENO: result: $ac_cv_type_blkcnt_t" >&5
 echo "${ECHO_T}$ac_cv_type_blkcnt_t" >&6
@@ -5361,7 +6535,6 @@
   if test "$cross_compiling" = yes; then
   # Depending upon the size, compute the lo and hi bounds.
 cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -5385,11 +6558,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5398,7 +6581,6 @@
   ac_lo=0 ac_mid=0
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -5422,11 +6604,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5438,20 +6630,19 @@
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ac_lo=`expr $ac_mid + 1`
-                    if test $ac_lo -le $ac_mid; then
-                      ac_lo= ac_hi=
-                      break
-                    fi
-                    ac_mid=`expr 2 '*' $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -5475,11 +6666,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5488,7 +6689,6 @@
   ac_hi=-1 ac_mid=-1
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -5512,11 +6712,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5528,13 +6738,13 @@
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ac_hi=`expr '(' $ac_mid ')' - 1`
-                       if test $ac_mid -le $ac_hi; then
-                         ac_lo= ac_hi=
-                         break
-                       fi
-                       ac_mid=`expr 2 '*' $ac_mid`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
   echo "$as_me: failed program was:" >&5
@@ -5542,14 +6752,13 @@
 
 ac_lo= ac_hi=
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 # Binary search between lo and hi bounds.
 while test "x$ac_lo" != "x$ac_hi"; do
   ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -5573,11 +6782,21 @@
 _ACEOF
 rm -f conftest.$ac_objext
 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5590,7 +6809,7 @@
 
 ac_lo=`expr '(' $ac_mid ')' + 1`
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 done
 case $ac_lo in
 ?*) ac_cv_sizeof_blkcnt_t=$ac_lo;;
@@ -5609,7 +6828,6 @@
    { (exit 1); exit 1; }; }
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -5676,7 +6894,7 @@
 See \`config.log' for more details." >&2;}
    { (exit 1); exit 1; }; }
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 rm -f conftest.val
@@ -5700,7 +6918,6 @@
 else
     ac_pattern="Autoconf.*'x'"
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -5720,7 +6937,6 @@
 
   if test $ac_cv_prog_gcc_traditional = no; then
     cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -5744,6 +6960,152 @@
   fi
 fi
 
+echo "$as_me:$LINENO: checking whether lstat dereferences a symlink specified with a trailing slash" >&5
+echo $ECHO_N "checking whether lstat dereferences a symlink specified with a trailing slash... $ECHO_C" >&6
+if test "${ac_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  rm -f conftest.sym conftest.file
+echo >conftest.file
+if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then
+  if test "$cross_compiling" = yes; then
+  ac_cv_func_lstat_dereferences_slashed_symlink=no
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+struct stat sbuf;
+     /* Linux will dereference the symlink and fail.
+	That is better in the sense that it means we will not
+	have to compile and use the lstat wrapper.  */
+     exit (lstat ("conftest.sym/", &sbuf) ? 0 : 1);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_lstat_dereferences_slashed_symlink=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_lstat_dereferences_slashed_symlink=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+else
+  # If the `ln -s' command failed, then we probably don't even
+  # have an lstat function.
+  ac_cv_func_lstat_dereferences_slashed_symlink=no
+fi
+rm -f conftest.sym conftest.file
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5
+echo "${ECHO_T}$ac_cv_func_lstat_dereferences_slashed_symlink" >&6
+
+test $ac_cv_func_lstat_dereferences_slashed_symlink = yes &&
+
+cat >>confdefs.h <<_ACEOF
+#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1
+_ACEOF
+
+
+if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then
+  case $LIBOBJS in
+    "lstat.$ac_objext"   | \
+  *" lstat.$ac_objext"   | \
+    "lstat.$ac_objext "* | \
+  *" lstat.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS lstat.$ac_objext" ;;
+esac
+
+fi
+
+echo "$as_me:$LINENO: checking whether stat accepts an empty string" >&5
+echo $ECHO_N "checking whether stat accepts an empty string... $ECHO_C" >&6
+if test "${ac_cv_func_stat_empty_string_bug+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_func_stat_empty_string_bug=yes
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+struct stat sbuf;
+  exit (stat ("", &sbuf) ? 1 : 0);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_stat_empty_string_bug=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_stat_empty_string_bug=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_stat_empty_string_bug" >&5
+echo "${ECHO_T}$ac_cv_func_stat_empty_string_bug" >&6
+if test $ac_cv_func_stat_empty_string_bug = yes; then
+  case $LIBOBJS in
+    "stat.$ac_objext"   | \
+  *" stat.$ac_objext"   | \
+    "stat.$ac_objext "* | \
+  *" stat.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS stat.$ac_objext" ;;
+esac
+
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STAT_EMPTY_STRING_BUG 1
+_ACEOF
+
+fi
+
 echo "$as_me:$LINENO: checking for working memcmp" >&5
 echo $ECHO_N "checking for working memcmp... $ECHO_C" >&6
 if test "${ac_cv_func_memcmp_working+set}" = set; then
@@ -5753,13 +7115,12 @@
   ac_cv_func_memcmp_working=no
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-
+$ac_includes_default
 int
 main ()
 {
@@ -5778,12 +7139,12 @@
     int i;
     for (i = 0; i < 4; i++)
       {
-        char *a = foo + i;
-        char *b = bar + i;
-        strcpy (a, "--------01111111");
-        strcpy (b, "--------10000000");
-        if (memcmp (a, b, 16) >= 0)
-          exit (1);
+	char *a = foo + i;
+	char *b = bar + i;
+	strcpy (a, "--------01111111");
+	strcpy (b, "--------10000000");
+	if (memcmp (a, b, 16) >= 0)
+	  exit (1);
       }
     exit (0);
   }
@@ -5812,12 +7173,19 @@
 ( exit $ac_status )
 ac_cv_func_memcmp_working=no
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 echo "$as_me:$LINENO: result: $ac_cv_func_memcmp_working" >&5
 echo "${ECHO_T}$ac_cv_func_memcmp_working" >&6
-test $ac_cv_func_memcmp_working = no && LIBOBJS="$LIBOBJS memcmp.$ac_objext"
+test $ac_cv_func_memcmp_working = no && case $LIBOBJS in
+    "memcmp.$ac_objext"   | \
+  *" memcmp.$ac_objext"   | \
+    "memcmp.$ac_objext "* | \
+  *" memcmp.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS memcmp.$ac_objext" ;;
+esac
+
 
 
 for ac_func in strftime
@@ -5829,21 +7197,28 @@
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func (); below.
     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
     <limits.h> exists even on freestanding compilers.  */
+
 #ifdef __STDC__
 # include <limits.h>
 #else
 # include <assert.h>
 #endif
+
+#undef $ac_func
+
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
@@ -5874,11 +7249,21 @@
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
+  (eval $ac_link) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5891,7 +7276,8 @@
 
 eval "$as_ac_var=no"
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
 fi
 echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
@@ -5910,7 +7296,6 @@
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lintl  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -5934,11 +7319,21 @@
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
+  (eval $ac_link) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5951,7 +7346,8 @@
 
 ac_cv_lib_intl_strftime=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
 echo "$as_me:$LINENO: result: $ac_cv_lib_intl_strftime" >&5
@@ -5977,21 +7373,28 @@
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func (); below.
     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
     <limits.h> exists even on freestanding compilers.  */
+
 #ifdef __STDC__
 # include <limits.h>
 #else
 # include <assert.h>
 #endif
+
+#undef $ac_func
+
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
@@ -6022,11 +7425,21 @@
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
+  (eval $ac_link) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6039,7 +7452,8 @@
 
 eval "$as_ac_var=no"
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
 fi
 echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
@@ -6054,21 +7468,28 @@
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
+/* Define _doprnt to an innocuous variant, in case <limits.h> declares _doprnt.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define _doprnt innocuous__doprnt
+
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char _doprnt (); below.
     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
     <limits.h> exists even on freestanding compilers.  */
+
 #ifdef __STDC__
 # include <limits.h>
 #else
 # include <assert.h>
 #endif
+
+#undef _doprnt
+
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
@@ -6099,11 +7520,21 @@
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
+  (eval $ac_link) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6116,7 +7547,8 @@
 
 ac_cv_func__doprnt=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
 fi
 echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5
 echo "${ECHO_T}$ac_cv_func__doprnt" >&6
@@ -6152,21 +7584,28 @@
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func (); below.
     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
     <limits.h> exists even on freestanding compilers.  */
+
 #ifdef __STDC__
 # include <limits.h>
 #else
 # include <assert.h>
 #endif
+
+#undef $ac_func
+
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
@@ -6197,11 +7636,21 @@
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
+  (eval $ac_link) 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6214,7 +7663,8 @@
 
 eval "$as_ac_var=no"
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
 fi
 echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
@@ -6242,7 +7692,7 @@
 
 fi;
 
-credits="./CREDITS"
+credits="$srcdir/CREDITS"
 echo "$as_me:$LINENO: checking for $credits" >&5
 echo $ECHO_N "checking for $credits... $ECHO_C" >&6
 if test -r $credits ; then
@@ -6279,7 +7729,7 @@
     }
 }
 END    { print "\n};\n#define CREDITS_COUNT "  count }
-'  $credits > include/credits.h
+'  $credits > "$srcdir/include/util/credits.h"
 
 if test x$enable_debug = xyes; then
 	if test "x" = "x$PRESET_CFLAGS"; then
@@ -6299,11 +7749,11 @@
 	if test x$uninitialized = xyes; then
 		CFLAGS="$CFLAGS -Wuninitialized -O1"
 	else
-		CFLAGS="$CFLAGS -O2"
+		CFLAGS="$CFLAGS -O0"
 	fi
 else
 	if test "x" = "x$PRESET_CFLAGS"; then
-		CFLAGS="-g -Wall -O2"
+		CFLAGS="-Wall -O2"
 	fi
 fi
 
@@ -6311,7 +7761,11 @@
 	CFLAGS="$CFLAGS -fPIC -DPIC"
 fi
 
-                                                                                          ac_config_files="$ac_config_files include/Makefile mkreiserfs/Makefile resize_reiserfs/Makefile fsck/Makefile lib/Makefile Makefile reiserfscore/Makefile debugreiserfs/Makefile tune/Makefile"
+
+
+
+
+                                                                                                                                                      ac_config_files="$ac_config_files Makefile include/Makefile include/misc/Makefile include/reiserfs/Makefile include/util/Makefile libmisc/Makefile libreiserfs/Makefile libutil/Makefile utils/Makefile utils/mkfs/Makefile utils/resizer/Makefile utils/fsck/Makefile utils/debugfs/Makefile utils/tune/Makefile reiserfsprogs.spec"
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
 # tests run on this system so they can be shared between configure
@@ -6340,13 +7794,13 @@
       # `set' does not quote correctly, so add quotes (double-quote
       # substitution turns \\\\ into \\, and sed turns \\ into \).
       sed -n \
-        "s/'/'\\\\''/g;
-    	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
       ;;
     *)
       # `set' quotes correctly as required by POSIX, so do not add quotes.
       sed -n \
-        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
       ;;
     esac;
 } |
@@ -6376,13 +7830,13 @@
 # trailing colons and then remove the whole line if VPATH becomes empty
 # (actually we leave an empty line to preserve line numbers).
 if test "x$srcdir" = x.; then
-  ac_vpsub='/^[ 	]*VPATH[ 	]*=/{
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
 s/:*\$(srcdir):*/:/;
 s/:*\${srcdir}:*/:/;
 s/:*@srcdir@:*/:/;
-s/^\([^=]*=[ 	]*\):*/\1/;
+s/^\([^=]*=[	 ]*\):*/\1/;
 s/:*$//;
-s/^[^=]*=[ 	]*$//;
+s/^[^=]*=[	 ]*$//;
 }'
 fi
 
@@ -6393,7 +7847,7 @@
 for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
   # 1. Remove the extension, and $U if already installed.
   ac_i=`echo "$ac_i" |
-         sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
   # 2. Add them.
   ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
   ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
@@ -6458,9 +7912,10 @@
 elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
   set -o posix
 fi
+DUALCASE=1; export DUALCASE # for MKS sh
 
 # Support unset when possible.
-if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
   as_unset=unset
 else
   as_unset=false
@@ -6479,7 +7934,7 @@
   LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
   LC_TELEPHONE LC_TIME
 do
-  if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
     eval $as_var=C; export $as_var
   else
     $as_unset $as_var
@@ -6658,16 +8113,17 @@
 if mkdir -p . 2>/dev/null; then
   as_mkdir_p=:
 else
+  test -d ./-p && rmdir ./-p
   as_mkdir_p=false
 fi
 
 as_executable_p="test -f"
 
 # Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
 
 # Sed expression to map a string onto a valid variable name.
-as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
 
 # IFS
@@ -6694,7 +8150,7 @@
 cat >&5 <<_CSEOF
 
 This file was extended by $as_me, which was
-generated by GNU Autoconf 2.57.  Invocation command line was
+generated by GNU Autoconf 2.59.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -6738,9 +8194,9 @@
   -d, --debug      don't remove temporary files
       --recheck    update $as_me by reconfiguring in the same conditions
   --file=FILE[:TEMPLATE]
-                   instantiate the configuration file FILE
+		   instantiate the configuration file FILE
   --header=FILE[:TEMPLATE]
-                   instantiate the configuration header FILE
+		   instantiate the configuration header FILE
 
 Configuration files:
 $config_files
@@ -6757,11 +8213,10 @@
 cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
 config.status
-configured by $0, generated by GNU Autoconf 2.57,
+configured by $0, generated by GNU Autoconf 2.59,
   with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
 
-Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
+Copyright (C) 2003 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 srcdir=$srcdir
@@ -6867,17 +8322,23 @@
 do
   case "$ac_config_target" in
   # Handling of arguments.
-  "include/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
-  "mkreiserfs/Makefile" ) CONFIG_FILES="$CONFIG_FILES mkreiserfs/Makefile" ;;
-  "resize_reiserfs/Makefile" ) CONFIG_FILES="$CONFIG_FILES resize_reiserfs/Makefile" ;;
-  "fsck/Makefile" ) CONFIG_FILES="$CONFIG_FILES fsck/Makefile" ;;
-  "lib/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
   "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-  "reiserfscore/Makefile" ) CONFIG_FILES="$CONFIG_FILES reiserfscore/Makefile" ;;
-  "debugreiserfs/Makefile" ) CONFIG_FILES="$CONFIG_FILES debugreiserfs/Makefile" ;;
-  "tune/Makefile" ) CONFIG_FILES="$CONFIG_FILES tune/Makefile" ;;
+  "include/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
+  "include/misc/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/misc/Makefile" ;;
+  "include/reiserfs/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/reiserfs/Makefile" ;;
+  "include/util/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/util/Makefile" ;;
+  "libmisc/Makefile" ) CONFIG_FILES="$CONFIG_FILES libmisc/Makefile" ;;
+  "libreiserfs/Makefile" ) CONFIG_FILES="$CONFIG_FILES libreiserfs/Makefile" ;;
+  "libutil/Makefile" ) CONFIG_FILES="$CONFIG_FILES libutil/Makefile" ;;
+  "utils/Makefile" ) CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;;
+  "utils/mkfs/Makefile" ) CONFIG_FILES="$CONFIG_FILES utils/mkfs/Makefile" ;;
+  "utils/resizer/Makefile" ) CONFIG_FILES="$CONFIG_FILES utils/resizer/Makefile" ;;
+  "utils/fsck/Makefile" ) CONFIG_FILES="$CONFIG_FILES utils/fsck/Makefile" ;;
+  "utils/debugfs/Makefile" ) CONFIG_FILES="$CONFIG_FILES utils/debugfs/Makefile" ;;
+  "utils/tune/Makefile" ) CONFIG_FILES="$CONFIG_FILES utils/tune/Makefile" ;;
+  "reiserfsprogs.spec" ) CONFIG_FILES="$CONFIG_FILES reiserfsprogs.spec" ;;
   "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
-  "include/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS include/config.h" ;;
+  "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
   *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
 echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
    { (exit 1); exit 1; }; };;
@@ -6982,14 +8443,17 @@
 s,@AUTOMAKE@,$AUTOMAKE,;t t
 s,@AUTOHEADER@,$AUTOHEADER,;t t
 s,@MAKEINFO@,$MAKEINFO,;t t
-s,@AMTAR@,$AMTAR,;t t
 s,@install_sh@,$install_sh,;t t
 s,@STRIP@,$STRIP,;t t
 s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
 s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
+s,@mkdir_p@,$mkdir_p,;t t
 s,@AWK@,$AWK,;t t
 s,@SET_MAKE@,$SET_MAKE,;t t
 s,@am__leading_dot@,$am__leading_dot,;t t
+s,@AMTAR@,$AMTAR,;t t
+s,@am__tar@,$am__tar,;t t
+s,@am__untar@,$am__untar,;t t
 s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
 s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
 s,@MAINT@,$MAINT,;t t
@@ -7009,13 +8473,14 @@
 s,@CCDEPMODE@,$CCDEPMODE,;t t
 s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
 s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
+s,@CPP@,$CPP,;t t
 s,@LN_S@,$LN_S,;t t
 s,@RANLIB@,$RANLIB,;t t
 s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
-s,@UUID_LIBS@,$UUID_LIBS,;t t
-s,@CPP@,$CPP,;t t
 s,@EGREP@,$EGREP,;t t
 s,@LIBOBJS@,$LIBOBJS,;t t
+s,@UUID_LIBS@,$UUID_LIBS,;t t
+s,@PROGS_LDFLAGS@,$PROGS_LDFLAGS,;t t
 s,@LTLIBOBJS@,$LTLIBOBJS,;t t
 CEOF
 
@@ -7046,9 +8511,9 @@
       (echo ':t
   /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
       if test -z "$ac_sed_cmds"; then
-  	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
       else
-  	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
       fi
       ac_sed_frag=`expr $ac_sed_frag + 1`
       ac_beg=$ac_end
@@ -7066,21 +8531,21 @@
   # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
   case $ac_file in
   - | *:- | *:-:* ) # input from stdin
-        cat >$tmp/stdin
-        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
   *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
   * )   ac_file_in=$ac_file.in ;;
   esac
 
   # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
   ac_dir=`(dirname "$ac_file") 2>/dev/null ||
 $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X"$ac_file" : 'X\(//\)[^/]' \| \
-         X"$ac_file" : 'X\(//\)$' \| \
-         X"$ac_file" : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
 echo X"$ac_file" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
@@ -7096,10 +8561,10 @@
       as_dirs="$as_dir $as_dirs"
       as_dir=`(dirname "$as_dir") 2>/dev/null ||
 $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X"$as_dir" : 'X\(//\)[^/]' \| \
-         X"$as_dir" : 'X\(//\)$' \| \
-         X"$as_dir" : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
 echo X"$as_dir" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
@@ -7137,12 +8602,45 @@
     ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
     ac_top_srcdir=$ac_top_builddir$srcdir ;;
 esac
-# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
-# absolute.
-ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
-ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
-ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
-ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
 
 
   case $INSTALL in
@@ -7164,7 +8662,7 @@
     configure_input="$ac_file.  "
   fi
   configure_input=$configure_input"Generated from `echo $ac_file_in |
-                                     sed 's,.*/,,'` by configure."
+				     sed 's,.*/,,'` by configure."
 
   # First look for the input files in the build tree, otherwise in the
   # src tree.
@@ -7173,24 +8671,24 @@
       case $f in
       -) echo $tmp/stdin ;;
       [\\/$]*)
-         # Absolute (can't be DOS-style, as IFS=:)
-         test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
 echo "$as_me: error: cannot find input file: $f" >&2;}
    { (exit 1); exit 1; }; }
-         echo $f;;
+	 echo "$f";;
       *) # Relative
-         if test -f "$f"; then
-           # Build tree
-           echo $f
-         elif test -f "$srcdir/$f"; then
-           # Source tree
-           echo $srcdir/$f
-         else
-           # /dev/null tree
-           { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
 echo "$as_me: error: cannot find input file: $f" >&2;}
    { (exit 1); exit 1; }; }
-         fi;;
+	 fi;;
       esac
     done` || { (exit 1); exit 1; }
 _ACEOF
@@ -7232,12 +8730,12 @@
 # NAME is the cpp macro being defined and VALUE is the value it is being given.
 #
 # ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s,^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
-ac_dB='[ 	].*$,\1#\2'
+ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
+ac_dB='[	 ].*$,\1#\2'
 ac_dC=' '
 ac_dD=',;t'
 # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_uA='s,^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
+ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
 ac_uB='$,\1#\2define\3'
 ac_uC=' '
 ac_uD=',;t'
@@ -7246,11 +8744,11 @@
   # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
   case $ac_file in
   - | *:- | *:-:* ) # input from stdin
-        cat >$tmp/stdin
-        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
   *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
   * )   ac_file_in=$ac_file.in ;;
   esac
 
@@ -7264,28 +8762,29 @@
       case $f in
       -) echo $tmp/stdin ;;
       [\\/$]*)
-         # Absolute (can't be DOS-style, as IFS=:)
-         test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
 echo "$as_me: error: cannot find input file: $f" >&2;}
    { (exit 1); exit 1; }; }
-         echo $f;;
+	 # Do quote $f, to prevent DOS paths from being IFS'd.
+	 echo "$f";;
       *) # Relative
-         if test -f "$f"; then
-           # Build tree
-           echo $f
-         elif test -f "$srcdir/$f"; then
-           # Source tree
-           echo $srcdir/$f
-         else
-           # /dev/null tree
-           { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
 echo "$as_me: error: cannot find input file: $f" >&2;}
    { (exit 1); exit 1; }; }
-         fi;;
+	 fi;;
       esac
     done` || { (exit 1); exit 1; }
   # Remove the trailing spaces.
-  sed 's/[ 	]*$//' $ac_file_inputs >$tmp/in
+  sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
 
 _ACEOF
 
@@ -7308,9 +8807,9 @@
 s,[\\$`],\\&,g
 t clear
 : clear
-s,^[ 	]*#[ 	]*define[ 	][ 	]*\([^ 	(][^ 	(]*\)\(([^)]*)\)[ 	]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
 t end
-s,^[ 	]*#[ 	]*define[ 	][ 	]*\([^ 	][^ 	]*\)[ 	]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
 : end
 _ACEOF
 # If some macros were called several times there might be several times
@@ -7324,13 +8823,13 @@
 # example, in the case of _POSIX_SOURCE, which is predefined and required
 # on some systems where configure will not decide to define it.
 cat >>conftest.undefs <<\_ACEOF
-s,^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
 _ACEOF
 
 # Break up conftest.defines because some shells have a limit on the size
 # of here documents, and old seds have small limits too (100 cmds).
 echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
-echo '  if grep "^[ 	]*#[ 	]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
 echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
 echo '  :' >>$CONFIG_STATUS
 rm -f conftest.tail
@@ -7339,7 +8838,7 @@
   # Write a limited-size here document to $tmp/defines.sed.
   echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
   # Speed up: don't consider the non `#define' lines.
-  echo '/^[ 	]*#[ 	]*define/!b' >>$CONFIG_STATUS
+  echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
   # Work around the forget-to-reset-the-flag bug.
   echo 't clr' >>$CONFIG_STATUS
   echo ': clr' >>$CONFIG_STATUS
@@ -7366,7 +8865,7 @@
   # Write a limited-size here document to $tmp/undefs.sed.
   echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
   # Speed up: don't consider the non `#undef'
-  echo '/^[ 	]*#[ 	]*undef/!b' >>$CONFIG_STATUS
+  echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
   # Work around the forget-to-reset-the-flag bug.
   echo 't clr' >>$CONFIG_STATUS
   echo ': clr' >>$CONFIG_STATUS
@@ -7400,10 +8899,10 @@
     else
       ac_dir=`(dirname "$ac_file") 2>/dev/null ||
 $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X"$ac_file" : 'X\(//\)[^/]' \| \
-         X"$ac_file" : 'X\(//\)$' \| \
-         X"$ac_file" : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
 echo X"$ac_file" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
@@ -7419,10 +8918,10 @@
       as_dirs="$as_dir $as_dirs"
       as_dir=`(dirname "$as_dir") 2>/dev/null ||
 $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X"$as_dir" : 'X\(//\)[^/]' \| \
-         X"$as_dir" : 'X\(//\)$' \| \
-         X"$as_dir" : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
 echo X"$as_dir" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
@@ -7454,10 +8953,10 @@
 done
 echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
 $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X$ac_file : 'X\(//\)[^/]' \| \
-         X$ac_file : 'X\(//\)$' \| \
-         X$ac_file : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
+	 X$ac_file : 'X\(//\)[^/]' \| \
+	 X$ac_file : 'X\(//\)$' \| \
+	 X$ac_file : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
 echo X$ac_file |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
@@ -7476,16 +8975,41 @@
   ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
   ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
 $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X"$ac_dest" : 'X\(//\)[^/]' \| \
-         X"$ac_dest" : 'X\(//\)$' \| \
-         X"$ac_dest" : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
+	 X"$ac_dest" : 'X\(//\)[^/]' \| \
+	 X"$ac_dest" : 'X\(//\)$' \| \
+	 X"$ac_dest" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
 echo X"$ac_dest" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
   	  /^X\(\/\/\)$/{ s//\1/; q; }
   	  /^X\(\/\).*/{ s//\1/; q; }
   	  s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
   ac_builddir=.
 
 if test "$ac_dir" != .; then
@@ -7511,12 +9035,45 @@
     ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
     ac_top_srcdir=$ac_top_builddir$srcdir ;;
 esac
-# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
-# absolute.
-ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
-ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
-ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
-ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
 
 
   { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
@@ -7534,10 +9091,10 @@
   if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
     dirpart=`(dirname "$mf") 2>/dev/null ||
 $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X"$mf" : 'X\(//\)[^/]' \| \
-         X"$mf" : 'X\(//\)$' \| \
-         X"$mf" : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
+	 X"$mf" : 'X\(//\)[^/]' \| \
+	 X"$mf" : 'X\(//\)$' \| \
+	 X"$mf" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
 echo X"$mf" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
@@ -7547,36 +9104,30 @@
   else
     continue
   fi
-  grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
-  # Extract the definition of DEP_FILES from the Makefile without
-  # running `make'.
-  DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
   test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
   # When using ansi2knr, U may be empty or an underscore; expand it
-  U=`sed -n -e '/^U = / s///p' < "$mf"`
-  test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
-  # We invoke sed twice because it is the simplest approach to
-  # changing $(DEPDIR) to its actual value in the expansion.
-  for file in `sed -n -e '
-    /^DEP_FILES = .*\\\\$/ {
-      s/^DEP_FILES = //
-      :loop
-	s/\\\\$//
-	p
-	n
-	/\\\\$/ b loop
-      p
-    }
-    /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
     # Make sure the directory exists.
     test -f "$dirpart/$file" && continue
     fdir=`(dirname "$file") 2>/dev/null ||
 $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X"$file" : 'X\(//\)[^/]' \| \
-         X"$file" : 'X\(//\)$' \| \
-         X"$file" : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
+	 X"$file" : 'X\(//\)[^/]' \| \
+	 X"$file" : 'X\(//\)$' \| \
+	 X"$file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
 echo X"$file" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
@@ -7592,10 +9143,10 @@
       as_dirs="$as_dir $as_dirs"
       as_dir=`(dirname "$as_dir") 2>/dev/null ||
 $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X"$as_dir" : 'X\(//\)[^/]' \| \
-         X"$as_dir" : 'X\(//\)$' \| \
-         X"$as_dir" : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
 echo X"$as_dir" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
   	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
@@ -7648,4 +9199,4 @@
 
 
 echo
-echo Type \'make\' to compile reiserfsprogs
+echo Type \'make\' to compile reiserfsprogs and \'make install\' to install it.
diff --git a/configure.in b/configure.in
index bcb4789..6229f3c 100644
--- a/configure.in
+++ b/configure.in
@@ -1,41 +1,87 @@
 dnl Process this file with autoconf to produce a configure script.
-AC_INIT(version.h)
+AC_INIT(include/reiserfs/libreiserfs.h)
 AC_CANONICAL_HOST
 AC_PREREQ(2.50)
 
+AH_TEMPLATE([PACKAGE], [Define this to be the name of the package.])
+AH_TEMPLATE([VERSION], [Define to the version of the package.])
 AH_TEMPLATE([HAVE_LIBUUID], [Define for enable libuuid using.])
 AH_TEMPLATE([ENABLE_DEBUG], [Define for enable debug info.])
 
-AM_INIT_AUTOMAKE(reiserfsprogs, 3.6.19)
+dnl AH_TEMPLATE([LIBREISERFS_MAX_INTERFACE_VERSION], [Define to the max interface version.])
+dnl AH_TEMPLATE([LIBREISERFS_MIN_INTERFACE_VERSION], [Define to the min interface version.])
+
+LIBREISERFS_MAJOR_VERSION=3
+LIBREISERFS_MINOR_VERSION=6
+LIBREISERFS_MICRO_VERSION=20
+LIBREISERFS_VERSION=$LIBREISERFS_MAJOR_VERSION.$LIBREISERFS_MINOR_VERSION.$LIBREISERFS_MICRO_VERSION
+
+dnl LIBREISERFS_INTERFACE_AGE=0
+dnl LIBREISERFS_BINARY_AGE=0
+
+dnl LT_RELEASE=$LIBREISERFS_MAJOR_VERSION.$LIBREISERFS_MINOR_VERSION
+
+dnl LT_CURRENT=`expr $LIBREISERFS_MICRO_VERSION - $LIBREISERFS_INTERFACE_AGE`
+dnl LT_REVISION=$LIBREISERFS_INTERFACE_AGE
+dnl LT_AGE=`expr $LIBREISERFS_BINARY_AGE - $LIBREISERFS_INTERFACE_AGE`
+
+PACKAGE=reiserfsprogs
+VERSION=$LIBREISERFS_VERSION
+
+AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
+AM_CONFIG_HEADER(config.h)
 AM_MAINTAINER_MODE
 
+dnl AC_DEFINE_UNQUOTED(LIBREISERFS_MAX_INTERFACE_VERSION, $LIBREISERFS_BINARY_AGE)
+dnl AC_DEFINE_UNQUOTED(LIBREISERFS_MIN_INTERFACE_VERSION, $LIBREISERFS_INTERFACE_AGE)
+
+
+AC_ARG_ENABLE(debug,
+	[  --enable-debug      enable extra checks], ,
+	enable_debug=no
+)
+
+PROGS_LDFLAGS=""
+
+AC_ARG_ENABLE(static,
+    	[  --enable-static     build all static], ,
+		enable_static=no
+)
+
+if test x$enable_static = xyes; then
+	PROGS_LDFLAGS=-static
+fi
+
 dnl We install in /sbin, the utils are to be available on boot
 dnl AC_PREFIX(/)
 
-AM_CONFIG_HEADER(include/config.h)
-
-AC_SUBST(sbindir)
-
 PRESET_CFLAGS=$CFLAGS
 
 dnl Checks for programs.
 AC_PROG_CC
+AC_PROG_CPP
 AC_PROG_AWK 
 AC_PROG_INSTALL
 AC_PROG_LN_S
 AC_PROG_MAKE_SET
 AC_PROG_RANLIB
 
+AM_ENABLE_SHARED
+dnl AM_PROG_LIBTOOL
+
 dnl Checks for libraries.
 
 # Check for LIBUUID
+LIBS=""
 AC_CHECK_LIB(uuid, uuid_generate, , AC_MSG_WARN(libuuid could not be found))
 UUID_LIBS="$LIBS"
-AC_SUBST(UUID_LIBS)
 
 dnl Checks for header files.
 AC_HEADER_STDC
-AC_CHECK_HEADERS(fcntl.h limits.h malloc.h sys/ioctl.h unistd.h uuid/uuid.h)
+AC_HEADER_DIRENT
+AC_CHECK_HEADERS(print.h errno.h fcntl.h limits.h malloc.h sys/ioctl.h unistd.h uuid/uuid.h)
+AC_CHECK_HEADERS([asm/unaligned.h])
+
 AC_HEADER_MAJOR
 
 dnl Checks for typedefs, structures, and compiler characteristics.
@@ -43,11 +89,7 @@
 AC_C_INLINE
 AC_TYPE_SIZE_T
 AC_STRUCT_ST_RDEV
-
-AC_ARG_ENABLE(debug, [  --enable-debug          enable extra checks], 
-	      enable_debug=yes,
-	      enable_debug=no
-)
+AC_C_BIGENDIAN
 
 dnl Check for the compiler pic option.
 AC_CACHE_CHECK([whether -fPIC works], [pic], [
@@ -82,7 +124,7 @@
 # Check for large file
 AC_SYS_LARGEFILE
 
-if test -z "${ac_cv_sys_file_offset_bits}"; then
+if test x${ac_cv_sys_file_offset_bits} = xno; then
 	AC_MSG_WARN(Can't detect right _FILE_OFFSET_BITS. Will be forced to 64bit.)
 	ac_cv_sys_file_offset_bits=64
 fi
@@ -101,6 +143,7 @@
 
 dnl Checks for library functions.
 AC_PROG_GCC_TRADITIONAL
+AC_FUNC_STAT
 AC_FUNC_MEMCMP
 AC_FUNC_STRFTIME
 AC_FUNC_VPRINTF
@@ -117,7 +160,7 @@
   fi
 ])
 
-credits="./CREDITS"
+credits="$srcdir/CREDITS"
 AC_MSG_CHECKING(for $credits)
 if test -r $credits ; then
     AC_MSG_RESULT(yes)
@@ -150,7 +193,7 @@
     }
 }
 END    { print "\n};\n#define CREDITS_COUNT "  count }
-']  $credits > include/credits.h
+']  $credits > "$srcdir/include/util/credits.h"
 
 if test x$enable_debug = xyes; then
 	if test "x" = "x$PRESET_CFLAGS"; then
@@ -170,11 +213,11 @@
 	if test x$uninitialized = xyes; then
 		CFLAGS="$CFLAGS -Wuninitialized -O1"
 	else
-		CFLAGS="$CFLAGS -O2"
+		CFLAGS="$CFLAGS -O0"
 	fi
 else
 	if test "x" = "x$PRESET_CFLAGS"; then
-		CFLAGS="-g -Wall -O2"
+		CFLAGS="-Wall -O2"
 	fi
 fi
 
@@ -182,16 +225,30 @@
 	CFLAGS="$CFLAGS -fPIC -DPIC"
 fi
 
+dnl AC_SUBST(LT_RELEASE)
+dnl AC_SUBST(LT_CURRENT)
+dnl AC_SUBST(LT_REVISION)
+dnl AC_SUBST(LT_AGE)
+
+AC_SUBST(UUID_LIBS)
+AC_SUBST(PROGS_LDFLAGS)
+
 AC_OUTPUT(
-    include/Makefile 
-    mkreiserfs/Makefile 
-    resize_reiserfs/Makefile 
-    fsck/Makefile 
-    lib/Makefile 
     Makefile 
-    reiserfscore/Makefile 
-    debugreiserfs/Makefile 
-    tune/Makefile)
+    include/Makefile 
+    include/misc/Makefile
+    include/reiserfs/Makefile 
+    include/util/Makefile
+    libmisc/Makefile
+    libreiserfs/Makefile 
+    libutil/Makefile
+    utils/Makefile
+    utils/mkfs/Makefile 
+    utils/resizer/Makefile 
+    utils/fsck/Makefile
+    utils/debugfs/Makefile
+    utils/tune/Makefile
+    reiserfsprogs.spec)
 
 echo
-echo Type \'make\' to compile reiserfsprogs
+echo Type \'make\' to compile reiserfsprogs and \'make install\' to install it.
diff --git a/debugreiserfs/Makefile.am b/debugreiserfs/Makefile.am
deleted file mode 100644
index c06296a..0000000
--- a/debugreiserfs/Makefile.am
+++ /dev/null
@@ -1,7 +0,0 @@
-sbin_PROGRAMS = debugreiserfs
-
-debugreiserfs_SOURCES = debugreiserfs.c pack.c unpack.c stat.c corruption.c scan.c recover.c debugreiserfs.h
-man_MANS = debugreiserfs.8
-EXTRA_DIST = $(man_MANS)
-
-LDADD = $(top_srcdir)/lib/libmisc.a $(top_srcdir)/reiserfscore/libcore.a
diff --git a/debugreiserfs/Makefile.in b/debugreiserfs/Makefile.in
deleted file mode 100644
index 7c23b92..0000000
--- a/debugreiserfs/Makefile.in
+++ /dev/null
@@ -1,464 +0,0 @@
-# Makefile.in generated by automake 1.7.6 from Makefile.am.
-# @configure_input@
-
-# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-# Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
-
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-host_triplet = @host@
-ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-MAKEINFO = @MAKEINFO@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-UUID_LIBS = @UUID_LIBS@
-VERSION = @VERSION@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-datadir = @datadir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-oldincludedir = @oldincludedir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-sbin_PROGRAMS = debugreiserfs
-
-debugreiserfs_SOURCES = debugreiserfs.c pack.c unpack.c stat.c corruption.c scan.c recover.c debugreiserfs.h
-man_MANS = debugreiserfs.8
-EXTRA_DIST = $(man_MANS)
-
-LDADD = $(top_srcdir)/lib/libmisc.a $(top_srcdir)/reiserfscore/libcore.a
-subdir = debugreiserfs
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-sbin_PROGRAMS = debugreiserfs$(EXEEXT)
-PROGRAMS = $(sbin_PROGRAMS)
-
-am_debugreiserfs_OBJECTS = debugreiserfs.$(OBJEXT) pack.$(OBJEXT) \
-	unpack.$(OBJEXT) stat.$(OBJEXT) corruption.$(OBJEXT) \
-	scan.$(OBJEXT) recover.$(OBJEXT)
-debugreiserfs_OBJECTS = $(am_debugreiserfs_OBJECTS)
-debugreiserfs_LDADD = $(LDADD)
-debugreiserfs_DEPENDENCIES = $(top_srcdir)/lib/libmisc.a \
-	$(top_srcdir)/reiserfscore/libcore.a
-debugreiserfs_LDFLAGS =
-
-DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/corruption.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/debugreiserfs.Po ./$(DEPDIR)/pack.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/recover.Po ./$(DEPDIR)/scan.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/stat.Po ./$(DEPDIR)/unpack.Po
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-DIST_SOURCES = $(debugreiserfs_SOURCES)
-
-NROFF = nroff
-MANS = $(man_MANS)
-DIST_COMMON = Makefile.am Makefile.in
-SOURCES = $(debugreiserfs_SOURCES)
-
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  debugreiserfs/Makefile
-Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
-sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
-install-sbinPROGRAMS: $(sbin_PROGRAMS)
-	@$(NORMAL_INSTALL)
-	$(mkinstalldirs) $(DESTDIR)$(sbindir)
-	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
-	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-	  if test -f $$p \
-	  ; then \
-	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
-	   echo " $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) $$p $(DESTDIR)$(sbindir)/$$f"; \
-	   $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) $$p $(DESTDIR)$(sbindir)/$$f || exit 1; \
-	  else :; fi; \
-	done
-
-uninstall-sbinPROGRAMS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
-	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
-	  echo " rm -f $(DESTDIR)$(sbindir)/$$f"; \
-	  rm -f $(DESTDIR)$(sbindir)/$$f; \
-	done
-
-clean-sbinPROGRAMS:
-	-test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
-debugreiserfs$(EXEEXT): $(debugreiserfs_OBJECTS) $(debugreiserfs_DEPENDENCIES) 
-	@rm -f debugreiserfs$(EXEEXT)
-	$(LINK) $(debugreiserfs_LDFLAGS) $(debugreiserfs_OBJECTS) $(debugreiserfs_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT) core *.core
-
-distclean-compile:
-	-rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/corruption.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debugreiserfs.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recover.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scan.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unpack.Po@am__quote@
-
-distclean-depend:
-	-rm -rf ./$(DEPDIR)
-
-.c.o:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
-
-.c.obj:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
-uninstall-info-am:
-
-man8dir = $(mandir)/man8
-install-man8: $(man8_MANS) $(man_MANS)
-	@$(NORMAL_INSTALL)
-	$(mkinstalldirs) $(DESTDIR)$(man8dir)
-	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.8*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
-	  else file=$$i; fi; \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    8*) ;; \
-	    *) ext='8' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst"; \
-	  $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \
-	done
-uninstall-man8:
-	@$(NORMAL_UNINSTALL)
-	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.8*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    8*) ;; \
-	    *) ext='8' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " rm -f $(DESTDIR)$(man8dir)/$$inst"; \
-	  rm -f $(DESTDIR)$(man8dir)/$$inst; \
-	done
-
-ETAGS = etags
-ETAGSFLAGS =
-
-CTAGS = ctags
-CTAGSFLAGS =
-
-tags: TAGS
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	mkid -fID $$unique
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(ETAGS_ARGS)$$tags$$unique" \
-	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	     $$tags $$unique
-
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-
-top_distdir = ..
-distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkinstalldirs) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
-	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS) $(MANS)
-
-installdirs:
-	$(mkinstalldirs) $(DESTDIR)$(sbindir) $(DESTDIR)$(man8dir)
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-rm -f Makefile $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am
-
-distclean: distclean-am
-
-distclean-am: clean-am distclean-compile distclean-depend \
-	distclean-generic distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-man
-
-install-exec-am: install-sbinPROGRAMS
-
-install-info: install-info-am
-
-install-man: install-man8
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-info-am uninstall-man uninstall-sbinPROGRAMS
-
-uninstall-man: uninstall-man8
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-sbinPROGRAMS ctags distclean distclean-compile \
-	distclean-depend distclean-generic distclean-tags distdir dvi \
-	dvi-am info info-am install install-am install-data \
-	install-data-am install-exec install-exec-am install-info \
-	install-info-am install-man install-man8 install-sbinPROGRAMS \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am uninstall-info-am uninstall-man \
-	uninstall-man8 uninstall-sbinPROGRAMS
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/debugreiserfs/corruption.c b/debugreiserfs/corruption.c
deleted file mode 100644
index d584130..0000000
--- a/debugreiserfs/corruption.c
+++ /dev/null
@@ -1,1312 +0,0 @@
-/*
- * Copyright 2000-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#include "debugreiserfs.h"
-#include <time.h>
-
-extern struct reiserfs_fsstat g_stat_info;
-
-int  do_one_ih_corrupt (struct item_head * ih, unsigned int nr_bytes);
-int  do_one_ih_random_corrupt (struct item_head * ih);
-
-void do_one_corruption_in_one_block (reiserfs_filsys_t * fs, struct buffer_head * bh, char * corruption_command);
-int corrupt_block_header (struct block_head * blkh, unsigned int offset, unsigned int bytes );
-void do_one_block_random_corrupt (struct buffer_head * bh);
-
-static int str2int (char * str, int * res)
-{
-    int val;
-    char * tmp;
-
-    val = (int) strtol (str, &tmp, 0);
-    if (tmp == str)
-		/* could not convert string into a number */
-		return 0;
-    *res = val;
-    return 1;
-}
-
-static int get_rand (double min, double max) {
-
-	/* srand (time (0)); */
-	int ret;
-
-	ret =  (int)(min + (int)((max - min + 1) * rand() / (RAND_MAX + 1.0)));
-	if ((ret < min) || (ret > max))
-		die ("get_rand failed: min %d, max %d, returned %d\n", (int)min, (int)max, ret);
-
-	return ret;
-}
-
-static void edit_journal_params (struct journal_params * jp)
-{
-    char * str;
-    size_t n;
-    int num;
-
-    printf ("Journal parameters:\n");
-    printf ("\tDevice: current: %x: new:", get_jp_journal_dev (jp));
-    getline (&str, &n, stdin);
-    if (str2int (str, &num))
-		set_jp_journal_dev (jp, num);
-
-    printf ("\tFirst block: current: %d: new:",
-			get_jp_journal_1st_block (jp));
-    getline (&str, &n, stdin);
-    if (str2int (str, &num))
-		set_jp_journal_1st_block (jp, num);
-
-    printf ("\tSize: current: %d: new:", get_jp_journal_size (jp));
-    getline (&str, &n, stdin);
-    if (str2int (str, &num))
-		set_jp_journal_size (jp, num);
-
-    printf ("\tMagic number: current: %d: new:", get_jp_journal_magic (jp));
-    getline (&str, &n, stdin);
-    if (str2int (str, &num))
-		set_jp_journal_magic (jp, num);
-
-    printf ("\tMax transaction size: current: %d: new:",
-			get_jp_journal_max_trans_len (jp));
-    getline (&str, &n, stdin);
-    if (str2int (str, &num))
-		set_jp_journal_max_trans_len (jp, num);
-
-    printf ("\tMax batch size: current: %d: new:",
-			get_jp_journal_max_batch (jp));
-    getline (&str, &n, stdin);
-    if (str2int (str, &num))
-		set_jp_journal_max_batch (jp, num);
-
-    printf ("\tMax commit age: current: %d: new:",
-			get_jp_journal_max_commit_age (jp));
-    getline (&str, &n, stdin);
-    if (str2int (str, &num))
-		set_jp_journal_max_commit_age (jp, num);
-}
-
-/* this allows to edit all super block fields */
-static void edit_super_block (reiserfs_filsys_t * fs)
-{
-    char * str;
-    size_t n;
-    int num;
-
-    str = 0;
-    n = 0;
-
-    /* bs_block_count */
-    printf ("\tBlock count: current: %u: new:",
-			get_sb_block_count (fs->fs_ondisk_sb));
-    getline (&str, &n, stdin);
-    if (str2int (str, &num))
-		set_sb_block_count (fs->fs_ondisk_sb, num);
-
-    
-    /* sb_free_blocks */
-    printf ("\tFree block count: current: %u: new:",
-			get_sb_free_blocks (fs->fs_ondisk_sb));
-    getline (&str, &n, stdin);
-    if (str2int (str, &num))
-		set_sb_free_blocks (fs->fs_ondisk_sb, num);
-
-    /* sb_root_block */
-    printf ("\tRoot block: current: %u: new:",
-			get_sb_root_block (fs->fs_ondisk_sb));
-    getline (&str, &n, stdin);
-    if (str2int (str, &num))
-		set_sb_root_block (fs->fs_ondisk_sb, num);
-
-    /* sb_journal */
-    edit_journal_params (sb_jp (fs->fs_ondisk_sb));
-    
-    /* sb_blocksize */
-    printf ("\tBlocksize: current: %u: new:",
-			get_sb_block_size (fs->fs_ondisk_sb));
-    getline (&str, &n, stdin);
-    if (str2int (str, &num))
-		set_sb_block_size (fs->fs_ondisk_sb, num);
-
-    /* sb_oid_maxsize */
-    printf ("\tMax objectid size: current: %u: new:",
-			get_sb_oid_maxsize (fs->fs_ondisk_sb));
-    getline (&str, &n, stdin);
-    if (str2int (str, &num))
-		set_sb_oid_maxsize (fs->fs_ondisk_sb, num);
-
-    /* sb_oid_cursize */
-    printf ("\tCur objectid size: current: %u: new:",
-			get_sb_oid_cursize (fs->fs_ondisk_sb));
-    getline (&str, &n, stdin);
-    if (str2int (str, &num))
-		set_sb_oid_cursize (fs->fs_ondisk_sb, num);
-	
-    /* sb_state */
-    printf ("\tUmount state: current: %u: new:",
-			get_sb_umount_state (fs->fs_ondisk_sb));
-    getline (&str, &n, stdin);
-    if (str2int (str, &num))
-		set_sb_umount_state (fs->fs_ondisk_sb, num);
-
-    /* char s_magic [10]; */
-    printf ("\tMagic: current: \"%s\": new:", fs->fs_ondisk_sb->s_v1.s_magic);
-    getline (&str, &n, stdin);
-    if (strcmp (str, "\n"))
-		strncpy (fs->fs_ondisk_sb->s_v1.s_magic, str, n > 10 ? 10 : n);
-    
-    /* __u16 sb_fsck_state; */
-    printf ("\tFielsystem state: current: %u: new:", get_sb_fs_state (fs->fs_ondisk_sb));
-    getline (&str, &n, stdin);
-    if (str2int (str, &num))
-		set_sb_fs_state (fs->fs_ondisk_sb, num);
-	
-    /* __u32 sb_hash_function_code; */
-    printf ("\tHash code: current: %u: new (tea %d, r5 %d, rupasov %d):",
-			get_sb_hash_code (fs->fs_ondisk_sb), TEA_HASH, R5_HASH, YURA_HASH);
-    getline (&str, &n, stdin);
-    if (str2int (str, &num))
-		set_sb_hash_code (fs->fs_ondisk_sb, num);
-    
-    /* __u16 sb_tree_height; */
-    printf ("\tTree height: current: %u: new:",
-			get_sb_tree_height (fs->fs_ondisk_sb));
-    getline (&str, &n, stdin);
-    if (str2int (str, &num))
-		set_sb_tree_height (fs->fs_ondisk_sb, num);
-    
-    /* __u16 sb_bmap_nr; */
-    printf ("\tNumber of bitmaps: current: %u: new:",
-			get_sb_bmap_nr (fs->fs_ondisk_sb));
-    getline (&str, &n, stdin);
-    if (str2int (str, &num))
-		set_sb_bmap_nr (fs->fs_ondisk_sb, num);
-
-    /* __u16 sb_version; */
-    printf ("\tFilesystem format: current: %u: new:",
-			le16_to_cpu (fs->fs_ondisk_sb->s_v1.sb_version));
-    getline (&str, &n, stdin);
-    if (str2int (str, &num))
-		set_sb_version (fs->fs_ondisk_sb, num);
-
-    /* __u16 sb_reserved_for_journal; */
-    printf ("\tSpace reserved for journal: current: %u: new:",
-			get_sb_reserved_for_journal (fs->fs_ondisk_sb));
-    getline (&str, &n, stdin);
-    if (str2int (str, &num))
-		set_sb_reserved_for_journal (fs->fs_ondisk_sb, num);
-
-    print_block (stdout, fs, fs->fs_super_bh);
-    if (user_confirmed (stderr, "Is this ok ? [N/Yes]: ", "Yes\n")) {
-		mark_buffer_dirty (fs->fs_super_bh);
-		bwrite (fs->fs_super_bh);
-    }
-}
-
-
-static void corrupt_clobber_hash (char * name, struct item_head * ih, 
-								  struct reiserfs_de_head * deh)
-{
-    printf ("\tCorrupting deh_offset of entry \"%s\" of [%u %u]\n", name,
-			get_key_dirid (&ih->ih_key), get_key_objectid (&ih->ih_key));
-    set_deh_offset (deh, 700);
-}
-
-
-/* this reads list of desired corruptions from stdin and perform the
-   corruptions. Format of that list:
-   A hash_code
-   C name objectid     - 'C'ut entry 'name' from directory item with 'objectid'
-   H name objectid     - clobber 'H'hash of entry 'name' of directory 'objectid'
-   I item_num pos_in_item  make pos_in_item-th slot of indirect item to point out of device
-   O item_num          - destroy item 'O'rder - make 'item_num'-th to have key bigger than 'item_num' + 1-th item
-   D item_num          - 'D'elete item_num-th item
-   S item_num value    - change file size (item_num-th item must be stat data)
-   F item_num value    - change sd_first_direct_byte of stat data
-   J item_num objectid
-   E name objectid new - change entry's deh_objectid to new
-   P                   - print the block
-   B offset bytes_to_corrupt - corrupt bytes_to_corrupt bytes in block header,
-                               start from offset
-*/
-
-void do_corrupt_one_block (reiserfs_filsys_t * fs, char * fline)
-{
-    struct buffer_head * bh;
-    char * line = 0;
-    size_t n = 0;
-    unsigned long block;
-
-    block = certain_block (fs);
-    printf ("block = %lu\n", block);
-    if (block == fs->fs_super_bh->b_blocknr) {
-		edit_super_block (fs);
-		return;
-    }
-
-    if (!fs->fs_bitmap2) {
-        struct buffer_head * bm_bh;
-        unsigned long bm_block;
-        
-        if (spread_bitmaps (fs))
-            bm_block = ( block / (fs->fs_blocksize * 8) ) ? 
-				(block / (fs->fs_blocksize * 8)) * (fs->fs_blocksize * 8) : 
-			fs->fs_super_bh->b_blocknr + 1;
-        else
-            bm_block = fs->fs_super_bh->b_blocknr + 1 + (block / (fs->fs_blocksize * 8));
-        
-        bm_bh = bread (fs->fs_dev, bm_block, fs->fs_blocksize);
-        if (bm_bh) {
-            if ( misc_test_bit((block % (fs->fs_blocksize * 8)), bm_bh->b_data) )
-                fprintf (stderr, "%lu is used in ondisk bitmap\n", block);
-            else
-				fprintf (stderr, "%lu is free in ondisk bitmap\n", block);
-	        
-            brelse (bm_bh);
-        }
-    } else {
-        if (reiserfs_bitmap_test_bit (fs->fs_bitmap2, block))
-			fprintf (stderr, "%lu is used in ondisk bitmap\n", block);
-        else
-			fprintf (stderr, "%lu is free in ondisk bitmap\n", block);
-    }
-    
-    /* READ block */
-    bh = bread (fs->fs_dev, block, fs->fs_blocksize);
-    if (!bh) {
-		printf ("corrupt_one_block: bread fialed\n");
-		return;
-    }
-
-    if (who_is_this (bh->b_data, fs->fs_blocksize) != THE_LEAF) {
-		printf ("Can not corrupt not a leaf node\n");
-		brelse (bh);
-		return;
-    }
-
-    printf ("Corrupting block %lu..\n", bh->b_blocknr);
-
-    if (data(fs)->log_file_name) {
-		printf ("Log file : %s\n", data(fs)->log_file_name);
-    } else {
-		printf ("No Log file specified\n");
-    }
-
-    if (fline != NULL) {
-		do_one_corruption_in_one_block (fs, bh, fline);
-		if ((data(fs)->log_file_name) && (data(fs)->log)) {
-			fprintf (data(fs)->log, "%lu\n", block);
-			fprintf (data(fs)->log, "%s\n", fline);
-		}
-    } else {
-		/* Get list of corruptions from stdin */
-        while (getline (&line, &n, stdin) != -1) {
-			if ( line [0] == '\n' ) {
-				free (line);
-				line = 0;
-				n = 0;
-				break;
-			}
-			do_one_corruption_in_one_block (fs, bh, line);
-			if ((data(fs)->log_file_name) && (data(fs)->log)) {
-				fprintf (data(fs)->log, "%lu\n", block);
-				fprintf (data(fs)->log, "%s\n", line);
-			}
-			
-			free (line);
-			line = 0;
-			n = 0;
-		}
-    }
-
-    printf ("Done\n");
-    bwrite(bh);
-    brelse (bh);
-    return;
-}
-
-void do_one_corruption_in_one_block (reiserfs_filsys_t * fs,
-									 struct buffer_head * bh,
-									 char * corruption_command)
-{
-    int i, j;
-    struct item_head * ih;
-    int item_num;
-    int item_numbers;
-    int bytes_to_corrupt;
-    char code, name [100];
-    __u32 objectid, new_objectid;
-    int value;
-    int hash_code;
-    unsigned int pos_in_item;
-    int type, format;
-
-    printf ("corruption_command  : %s", corruption_command);
-
-    switch (corruption_command [0]) {
-	case '#':
-	case '\n':
-		break;
-		
-	case '?':
-		printf ("A hash_code     - reset hAsh code in super block\n"
-				"T item_num type (0, 1, 2, 3) format (0, 1)\n"
-				"C name objectid - Cut entry 'name' from directory item with 'objectid'\n"
-				"H name objectid - clobber Hash of entry 'name' of directory 'objectid'\n"
-				"I item_num pos_in_item  make pos_in_tem-th slot of Indirect item to point out of device\n"
-				"O item_num      - destroy item Order - make 'item_num'-th to have key bigger than 'item_num' + 1-th item\n"
-				"D item_num      - Delete item_num-th item\n"
-				"S item_num value - change file Size (item_num-th item must be stat data)\n"
-				"F item_num value - change sd_First_direct_byte of stat data\n"
-				"J item_num objectid - set 'obJectid' of 'item_num'-th item\n"
-				"E name objectid objectid - set deh_objectid of an entry to objectid\n"
-				"N item_numbers bytes_to_corrupt - corrupt bytes_to_corrupt in number of bytes in item_numbers items\n"
-				"B offset bytes_to_corrupt - corrupt bytes_to_corrupt in block_header, start corruption from offset\n");
-		
-	    break;
-		
-	case 'P':
-		print_block (stderr, fs, bh, 3, -1, -1);
-		break;
-	    
-	case 'A':
-		/* corrupt hash record in super block */
-		if (sscanf (corruption_command, "%c %d\n", &code, &hash_code) != 2) {
-			printf ("Wrong format \'%c\'\n", corruption_command [0]);
-			return;
-		}
-		reiserfs_warning (stderr, "Changing %s to %s\n",
-						  code2name (get_sb_hash_code (fs->fs_ondisk_sb)),
-						  code2name (hash_code));
-		set_sb_hash_code (fs->fs_ondisk_sb, hash_code);
-		break;
-	    
-	case 'C': /* cut entry */
-	case 'H': /* make hash wrong */
-		if (sscanf (corruption_command, "%c %s %u\n", &code, name, &objectid) != 3) {
-			printf ("Wrong format \'%c\'\n", corruption_command [0]);
-			return;
-	  }
-		
-		ih = B_N_PITEM_HEAD (bh, 0);
-		for (i = 0; i < get_blkh_nr_items (B_BLK_HEAD (bh)); i ++, ih ++) {
-			struct reiserfs_de_head * deh;
-			/* look for property objectid */
-			if (get_key_objectid (&ih->ih_key) != objectid || !is_direntry_ih (ih))
-				continue;
-
-			deh = B_I_DEH (bh, ih);
-			
-			for (j = 0; j < get_ih_entry_count (ih); j ++, deh ++) {
-				/* look for proper entry */
-				if (name_in_entry_length (ih, deh, j) == (int)strlen (name) &&
-					!strncmp (name, name_in_entry (deh, j), strlen (name)))
-					break;
-			}
-			if (j == get_ih_entry_count (ih)) {
-				printf ("Can't find entry %s\n", name);
-				exit (1);
-			}
-			switch (code) {
-			case 'H' : /* clobber hash */
-				corrupt_clobber_hash (name, ih, deh);
-				break;
-
-			case 'C' : /* cut entry */
-				cut_entry (fs, bh, i, j, 1);
-				break;
-
-			default:
-				printf ("Unknown command found\n");
-			}
-		}
-
-		if (!B_IS_IN_TREE (bh)) {
-			printf ("NOTE: block is deleted from the tree\n");
-			exit (0);
-		}
-		break;
-		
-	case 'E': /* set objectid : used to simulate objectid sharing problem */
-		if (sscanf (corruption_command, "%c %s %u %d\n", &code, name, &objectid, &new_objectid) != 4) {
-			printf ("Wrong format \'%c\'\n", corruption_command [0]);
-			return;
-		}
-		ih = B_N_PITEM_HEAD (bh, 0);
-		for (i = 0; i < get_blkh_nr_items (B_BLK_HEAD (bh)); i ++, ih ++) {
-			struct reiserfs_de_head * deh;
-			/* look for property objectid */
-			if (get_key_objectid (&ih->ih_key) != objectid || !is_direntry_ih (ih))
-				continue;
-			deh = B_I_DEH (bh, ih);
-			set_deh_objectid (deh, new_objectid);
-			break;
-		}  
-		break;
-		
-	case 'T': /* set type of item */
-	    if (sscanf (corruption_command, "%c %d %d %d\n", &code, &item_num, &type, &format) != 4) {
-			printf ("Wrong format \'%c\'\n", corruption_command [0]);
-			return;
-	    }
-	    if (item_num > get_blkh_nr_items (B_BLK_HEAD (bh))) {
-			printf ("Wrong format \'%c\', wrong item_num \n", corruption_command [0]);
-			return;
-	    }
-		
-	    ih = B_N_PITEM_HEAD (bh, item_num);
-	    set_ih_key_format (ih, format);
-	    set_type (format, &ih->ih_key, type);
-		
-	    break;
-		
-	case 'J': /* set objectid : used to simulate objectid sharing problem */
-	    if (sscanf (corruption_command, "%c %d %d\n", &code, &item_num, &objectid) != 3) {
-			printf ("Wrong format \'%c\'\n", corruption_command [0]);
-			return;
-	    }
-	    if (item_num > get_blkh_nr_items (B_BLK_HEAD (bh))) {
-			printf ("Wrong format \'%c\', wrong item_num \n", corruption_command [0]);
-			return;
-	    }
-	    ih = B_N_PITEM_HEAD (bh, item_num);
-	    set_key_objectid (&ih->ih_key, objectid);
-	    break;
-		
-	case 'I': /* break unformatted node pointer */
-	    if (sscanf (corruption_command, "%c %d %u\n", &code, &item_num, &pos_in_item) != 3) {
-			printf ("Wrong format \'%c\'\n", corruption_command [0]);
-			return;
-	    }
-	    if (item_num > get_blkh_nr_items (B_BLK_HEAD (bh))) {
-			printf ("Wrong format \'%c\', wrong item_num \n", corruption_command [0]);
-			return;
-	    }
-	    ih = B_N_PITEM_HEAD (bh, item_num);
-	    if (!is_indirect_ih (ih) || pos_in_item >= I_UNFM_NUM (ih)) {
-	        reiserfs_warning (stderr, "Not an indirect item or there is "
-							  "not so many unfm ptrs in it\n");
-			return;
-	    }
-	    d32_put((__u32 *)B_I_PITEM (bh, ih), pos_in_item, 
-		    get_sb_block_count (fs->fs_ondisk_sb) + 100);
-	    break;
-	    
-	case 'D': /* delete item */
-	    if (sscanf (corruption_command, "%c %d\n", &code, &item_num) != 2) {
-			printf ("Wrong format \'%c\'\n", corruption_command [0]);
-			return;
-	    }
-	    if (item_num > get_blkh_nr_items (B_BLK_HEAD (bh))) {
-			printf ("Wrong format \'%c\', wrong item_num \n", corruption_command [0]);
-			return;
-	    }
-	    delete_item (fs, bh, item_num);
-	    break;
-		
-	case 'O': /* make item out of order */
-		{
-			struct key * key;
-			if (sscanf (corruption_command, "%c %d\n", &code, &item_num) != 2) {
-				printf ("Wrong format \'%c\'\n", corruption_command [0]);
-				return;
-			}
-			if (item_num > get_blkh_nr_items (B_BLK_HEAD (bh))) {
-				printf ("Wrong format \'%c\', wrong item_num \n", corruption_command [0]);
-				return;
-			}
-			
-			/* destroy item order */
-			
-			if (item_num == get_blkh_nr_items (B_BLK_HEAD (bh)) - 1) {
-				printf ("can not destroy order\n");
-				return;
-			}
-			ih = B_N_PITEM_HEAD (bh, item_num);
-			key = &(ih + 1)->ih_key;
-			set_key_dirid (&ih->ih_key, get_key_dirid (key) + 1);
-			
-			break;
-		}  
-	case 'S': /* corrupt st_size */
-		{
-			/* fixme: old stat data only */
-			struct stat_data_v1 * sd;
-			
-			if (sscanf (corruption_command, "%c %d %d\n", &code, &item_num, &value) != 3) {
-				printf ("Wrong format \'%c\'\n", corruption_command [0]);
-				return;
-			}
-			if (item_num > get_blkh_nr_items (B_BLK_HEAD (bh))) {
-				printf ("Wrong format \'%c\', wrong item_num \n", corruption_command [0]);
-				return;
-			}
-			ih = B_N_PITEM_HEAD (bh, item_num);
-			
-			sd = (struct stat_data_v1 *)B_I_PITEM (bh, ih); 
-			reiserfs_warning (stderr, "Changing sd_size of %k from %d to %d\n",
-							  &ih->ih_key, sd_v1_size(sd), value);
-			set_sd_v1_size( sd, value );
-			break;
-		}
-		
-    case 'F': /*         st_first_direct_byte */
-		{
-			/* fixme: old stat data only */
-			struct stat_data_v1 * sd;
-			
-			if (sscanf (corruption_command, "%c %d %d\n", &code, &item_num, &value) != 3) {
-				printf ("Wrong format \'%c\'\n", corruption_command [0]);
-				return;
-			}
-			if (item_num > get_blkh_nr_items (B_BLK_HEAD (bh))) {
-				printf ("Wrong format \'%c\', wrong item_num \n",
-						corruption_command [0]);
-				return;
-			}
-			ih = B_N_PITEM_HEAD (bh, item_num);
-			
-			sd = (struct stat_data_v1 *)B_I_PITEM (bh, ih); 
-			reiserfs_warning (stderr, "Changing sd_first_direct_byte of %k from %d to %d\n",
-							  &ih->ih_key, sd_v1_first_direct_byte(sd), value);		
-			set_sd_v1_first_direct_byte( sd, value );
-			break;
-		}
-		
-	case 'N': /* corrupt N number of items */
-	    if (sscanf (corruption_command, "%c %d %d\n",
-					&code, &item_numbers, &bytes_to_corrupt) != 3) {
-			printf ("Wrong format \'%c\'\n", corruption_command [0]);
-			return;
-	    }
-		
-	    if (item_numbers > get_blkh_nr_items (B_BLK_HEAD (bh))) {
-			printf ("Wrong item_numbers %d expected not more then %d\n",
-					item_numbers,
-					get_blkh_nr_items (B_BLK_HEAD (bh)));
-			return;
-	    }
-		
-	    for (i = 0; i < item_numbers; i++) { 
-			printf ("Do corruptions :  %d item header; \n", i );
-			ih = B_N_PITEM_HEAD (bh, i);
-			do_one_ih_corrupt (ih, bytes_to_corrupt);
-			printf ("Ok\n");
-	    }
-		
-	    break;
-	case 'B' :
-		{
-			struct block_head * blkh;
-			unsigned int offset;
-			
-			if (sscanf (corruption_command, "%c %d %d\n",
-						&code, &offset, &bytes_to_corrupt) != 3) {
-				printf ("Wrong format \'%c\'\n", corruption_command [0]);
-				return;
-			}
-			
-			blkh = B_BLK_HEAD (bh);
-			corrupt_block_header (blkh, offset, bytes_to_corrupt);
-			break;
-		}
-		
-	default:
-		printf ("Unknown command found\n");
-	} 
-    mark_buffer_dirty (bh);
-    return;
-}
-
-/* corrupt first nr_bytes bytes in item header */
-int do_one_ih_corrupt (struct item_head * ih, unsigned int nr_bytes)
-{
-	if (nr_bytes > IH_SIZE) {
-		printf ("Bad byte number %u expected not more then %lu\n", nr_bytes,
-				(unsigned long)IH_SIZE);
-		exit (1);
-	}
-
-	if (memset ((char *)ih, 0, nr_bytes) != ih ) {
-		perror ("do_one_ih_corrupt: memset failed");
-		exit (1);
-	}
-
-	if ((data(fs)->log_file_name) && (data(fs)->log))
-		fprintf (data(fs)->log, "\tfirst %u bytes corrupted\n", nr_bytes);
-
-	printf ("\tfirst %u bytes corrupted\n", nr_bytes);
-	return 0;
-}
-
-/* item header random corruption */
-int do_one_ih_random_corrupt (struct item_head * ih)
-{
-	unsigned int i;
-	unsigned int from;
-	unsigned int count;
-		
-	from = get_rand (0,  IH_SIZE - 1);
-	count = get_rand (1, IH_SIZE);
-
-	if (from + count > IH_SIZE)
-		count = IH_SIZE - from;
-
-	for (i = from; i < from + count; i ++)
-		((char *)ih)[i] = get_rand(0, 255);
-
-	if ((data(fs)->log_file_name) && (data(fs)->log))
-		fprintf (data(fs)->log, "\tfrom %u ( %u )\n", from, count);
-
-	printf ("\tfrom %u ( %u )\n",  from, count);
-	return 0;
-}
-
-/* Corrupt n bytes in block header */
-int corrupt_block_header (struct block_head * blkh, unsigned int offset, 
-			  unsigned int bytes) 
-{
-	if ((offset + bytes) > BLKH_SIZE) {
-		printf ("Bad offset number: %u or bad bytes number: %u, the suumary "
-			"value expected not more then %lu\n", offset, bytes, 
-			(unsigned long)BLKH_SIZE);
-		exit (1);
-	} 
-
-	if (memset ((char *)blkh, 0, bytes) != blkh ) {
-		perror ("corrupt_block_head: memset failed");
-		exit (1);   
-	}
-
-	printf ("offset : %u, corrupt %u bytes\n", offset, bytes);
-	return 0;
-}
-
-/* corrupt random number of bytes within block header started from random
-   offset */
-void do_one_blkh_random_corrupt (struct buffer_head * bh)
-{
-	struct block_head * blkh;
-	unsigned int from;
-	unsigned int count;
-	unsigned int i;
-
-	from = get_rand (0, BLKH_SIZE - 1);
-	count = get_rand (1, BLKH_SIZE);
-
-	blkh = B_BLK_HEAD (bh);
-
-	if (from + count > BLKH_SIZE)
-		count = BLKH_SIZE - from;
-
-	for (i = from; i < from + count; i ++)
-		((char *)blkh)[i] = get_rand(0, 255);
-
-	if ((data(fs)->log_file_name) && (data(fs)->log)) {
-		fprintf (data(fs)->log, "# : %lu #    ", bh->b_blocknr);
-		fprintf (data(fs)->log, "from %u (%u)\n", from, count);
-	}
-
-	printf ("# : %lu #   ", bh->b_blocknr);
-	printf ("from %u (%u)\n", from, count);
-
-}
-
-void do_leaves_corruption (reiserfs_filsys_t * fs,
-						   unsigned long nr_leaves_cr) 
-						   
-{
-	struct buffer_head * bh;
-    unsigned long nr_leaves = 0;
-	unsigned int i, should_be_corrupted;
-
-	srand (time (0));
-	printf ("%lu leaves will be corrupted\n", nr_leaves_cr);
-	if ((data(fs)->log_file_name) && (data(fs)->log)) {
-		fprintf (data(fs)->log, "Block headers in %lu leaves will be corrupted\n", nr_leaves_cr);
-	}
-
-    if (reiserfs_open_ondisk_bitmap (fs) < 0)
-		reiserfs_exit (1, "Could not open ondisk bitmap");
-
-    for (i = 0; (i < get_sb_block_count (fs->fs_ondisk_sb)) &&
-			 nr_leaves < nr_leaves_cr; i ++) {
-
-		if (!reiserfs_bitmap_test_bit (fs->fs_bitmap2, i))
-			continue;
-
-		bh = bread (fs->fs_dev, i, fs->fs_blocksize);
-		if (!bh) {
-			reiserfs_warning (stderr, "could not read block %lu\n", i);
-			continue;
-		}
-
-		if (who_is_this (bh->b_data, bh->b_size) != THE_LEAF) {
-			brelse (bh);	
-			continue;
-		}
-
-		if ((!is_leaf_node (bh)) || (block_of_journal (fs, i))) {
-			brelse (bh);	
-			continue;
-		}
-
-		should_be_corrupted = (unsigned int) get_rand ((double)0, (double)1);
-		if (should_be_corrupted == 0)
-		{
-			brelse (bh);
-			continue;
-		}
-		do_one_blkh_random_corrupt (bh);
-		/* do_one_block_random_corrupt (bh); */
-		mark_buffer_dirty (bh);
-		bwrite(bh);
-		brelse (bh);
-		nr_leaves ++;
-	}
-
-	if ((data(fs)->log_file_name) && (data(fs)->log)) {
-		fprintf (data(fs)->log,
-				 "%lu leaves WERE corrupted\n",
-				 nr_leaves);
-	}
-
-	printf ("%lu leaves WERE corrupted\n", nr_leaves);
-
-	reiserfs_close_ondisk_bitmap (fs);
-	return;
-}
-
-void do_one_block_random_corrupt (struct buffer_head * bh) 
-{
-	unsigned int from = get_rand (0, bh->b_size - 1);
-	unsigned int count = get_rand (1, bh->b_size);
-	unsigned int i;
-
-	if (from + count > bh->b_size)
-		count = bh->b_size - from;
-
-	for (i = from; i < from + count; i ++)
-		((char *)bh->b_data)[i] = get_rand(0, 255);
-
-	if ((data(fs)->log_file_name) && (data(fs)->log)) {
-		fprintf (data(fs)->log, "# block %lu: ", bh->b_blocknr);
-		fprintf (data(fs)->log, "from %u ( %u )\n", from, count);
-	}
-
-	printf ("# block %lu: ", bh->b_blocknr);
-	printf ("from %u ( %u )\n", from, count);
-	
-}
-
-void do_bitmap_corruption (reiserfs_filsys_t * fs)
-{
-
-	unsigned long first = fs->fs_super_bh->b_blocknr + 1;
-	unsigned long nr_bitmap_to_corrupt;
-	unsigned long block;
-	struct buffer_head * bh;
-	unsigned int i;
-
-	nr_bitmap_to_corrupt = (unsigned long)get_rand (1, get_sb_bmap_nr (fs->fs_ondisk_sb) - 1);
-
-	if ((data(fs)->log_file_name) && (data(fs)->log)) {
-		fprintf (data(fs)->log, "%lu bitmaps will be corrupted\n", nr_bitmap_to_corrupt);
-	}
-	printf ("%lu bitmaps will be corrupted\n", nr_bitmap_to_corrupt);
-	for (i = 0; i < nr_bitmap_to_corrupt; i ++ )
-		{
-			block = ( i == 0 ) ? first 
-				: fs->fs_blocksize * 8 * i;
-			bh = bread (fs->fs_dev, block, fs->fs_blocksize);
-
-			if (!bh) {
-				printf ("do_bitmap_corruption: bread failed for bitmap %d: %lu\n",
-						i, block); 
-				exit (1);
-			}
-			do_one_block_random_corrupt (bh);
-			mark_buffer_dirty (bh);
-			bwrite(bh);
-			brelse (bh);
-		}
-
-} 
-
-/* corrupt the random number of item headers in random number of leaves */
-void do_ih_random_corrupt (reiserfs_filsys_t * fs,
-							  unsigned long nr_leaves_cr) 
-{
-	unsigned int nr_ih_cr;
-	unsigned int i, j;
-	struct buffer_head * bh;
-	struct item_head * ih;
-	unsigned long nr_leaves = 0;
-	unsigned int should_be_corrupted = 0;
-
-	srand (time (0));
-
-	printf ("item headers in %lu leaves will be corrupted\n", nr_leaves_cr);
-	if ((data(fs)->log_file_name) && (data(fs)->log)) {
-		fprintf (data(fs)->log, "item headers in %lu leaves will be corrupted\n", nr_leaves_cr);
-	}
-
-    if (reiserfs_open_ondisk_bitmap (fs) < 0)
-		reiserfs_exit (1, "Could not open ondisk bitmap");
-
-    for (i = 0; (i < get_sb_block_count (fs->fs_ondisk_sb)) &&
-			 nr_leaves < nr_leaves_cr; i ++) {
-
-		if (!reiserfs_bitmap_test_bit (fs->fs_bitmap2, i))
-			continue;
-
-		bh = bread (fs->fs_dev, i, fs->fs_blocksize);
-		if (!bh) {
-			reiserfs_warning (stderr, "could not read block %lu\n", i);
-			continue;
-		}
-
-		if (who_is_this (bh->b_data, bh->b_size) != THE_LEAF) {
-			brelse (bh);	
-			continue;
-		}
-
-		if ((!is_leaf_node (bh)) || (block_of_journal (fs, i))) {
-			brelse (bh);	
-			continue;
-		}
-
-		should_be_corrupted = (unsigned int) get_rand ((double)0, (double)1);
-		if (should_be_corrupted == 0)
-		{
-			brelse (bh);
-			continue;
-		}
-
-		nr_ih_cr = get_rand (1, get_blkh_nr_items (B_BLK_HEAD (bh))); 
-		for (j = 0; j < nr_ih_cr; j ++ ) {
-			should_be_corrupted = (unsigned int) get_rand ((double)0, (double)1);
-			if (should_be_corrupted == 0)
-				continue;
-
-			if ((data(fs)->log_file_name) && (data(fs)->log))
-				fprintf (data(fs)->log, "# block %lu , item header %d\n",
-						 bh->b_blocknr, j);
-			printf ("# block %lu , item header %d\n", bh->b_blocknr, j);
-			
-			ih = B_N_PITEM_HEAD (bh, j);
-			do_one_ih_random_corrupt (ih);
-		}
-		mark_buffer_dirty (bh);
-		bwrite(bh);
-		brelse (bh);
-		nr_leaves ++ ;
-	}
-
-	if ((data(fs)->log_file_name) && (data(fs)->log))
-		fprintf (data(fs)->log, "item headers in %lu leaves WERE corrupted\n",
-				 nr_leaves);
-	printf ("item headers in %lu leaves WERE corrupted\n", nr_leaves);
-
-	reiserfs_close_ondisk_bitmap (fs);
-}
-
-/* corrupt item */
-void do_one_item_random_corrupt (struct buffer_head * bh,
-								 struct item_head * ih)
-{
-	unsigned int i;
-	unsigned int from;
-	unsigned int count;
-	char * p;
-
-	p = (char *)B_I_PITEM(bh, ih);
-
-	from = get_rand (0, get_ih_item_len(ih)  - 1);
-	count = get_rand (1, get_ih_item_len(ih));
-
-	if (from + count > get_ih_item_len(ih))
-		count = get_ih_item_len(ih) - from;
-
-	for (i = from; i < from + count; i ++)
-		((char *)p)[i] = get_rand(0, 255);
-
-	if ((data(fs)->log_file_name) && (data(fs)->log))
-		fprintf (data(fs)->log, "item body \tfrom %u ( %u )\n", from, count);
-
-	printf ("item body \tfrom %u ( %u )\n",  from, count);
-	return ;
-
-}
-
-
-/* corrupt the random number of directory items in random number of leaves */
-void do_dir_random_corrupt (reiserfs_filsys_t * fs,
-							unsigned long nr_leaves_cr) 
-{
- 	unsigned int nr_ih_cr;
-	unsigned int i, j;
-	struct buffer_head * bh;
-	struct item_head * ih;
-	unsigned long nr_leaves = 0;
-	unsigned int should_be_corrupted = 0;
-
-	srand (time (0));
-
-	printf ("DIR items in %lu leaves will be corrupted\n", nr_leaves_cr);
-	if ((data(fs)->log_file_name) && (data(fs)->log)) {
-		fprintf (data(fs)->log, "DIR items in %lu leaves will be corrupted\n", nr_leaves_cr);
-	}
-
-    if (reiserfs_open_ondisk_bitmap (fs) < 0)
-		reiserfs_exit (1, "Could not open ondisk bitmap");
-
-    for (i = 0; (i < get_sb_block_count (fs->fs_ondisk_sb)) &&
-			 nr_leaves < nr_leaves_cr; i ++) {
-
-		if (!reiserfs_bitmap_test_bit (fs->fs_bitmap2, i))
-			continue;
-
-		bh = bread (fs->fs_dev, i, fs->fs_blocksize);
-		if (!bh) {
-			reiserfs_warning (stderr, "could not read block %lu\n", i);
-			continue;
-		}
-
-		if (who_is_this (bh->b_data, bh->b_size) != THE_LEAF) {
-			brelse (bh);	
-			continue;
-		}
-
-		if ((!is_leaf_node (bh)) || (block_of_journal (fs, i))) {
-			brelse (bh);	
-			continue;
-		}
-
-		should_be_corrupted = (unsigned int) get_rand ((double)0, (double)1);
-		if (should_be_corrupted == 0)
-		{
-			brelse (bh);
-			continue;
-		}
-
-		/* get next item, look is it a DIR */
-		nr_ih_cr = get_rand (1, get_blkh_nr_items (B_BLK_HEAD (bh))); 
-		for (j = 0; j < nr_ih_cr; j ++ ) {
-			should_be_corrupted = (unsigned int) get_rand ((double)0, (double)1);
-			if (should_be_corrupted == 0)
-				continue;
-
-			if ((data(fs)->log_file_name) && (data(fs)->log))
-				fprintf (data(fs)->log, "# block %lu , item %d\n",
-						 bh->b_blocknr, j);
-			printf ("# block %lu , item %d\n", bh->b_blocknr, j);
-			
-			ih = B_N_PITEM_HEAD (bh, j);
-			if (get_type (&ih->ih_key) != TYPE_DIRENTRY)
-				continue;
-			do_one_item_random_corrupt (bh, ih);
-		}
-		mark_buffer_dirty (bh);
-		bwrite(bh);
-		brelse (bh);
-		nr_leaves ++ ;
-	}
-
-	if ((data(fs)->log_file_name) && (data(fs)->log))
-		fprintf (data(fs)->log, "DIR items in %lu leaves WERE corrupted\n",
-				 nr_leaves);
-	printf ("DIR items in %lu leaves WERE corrupted\n", nr_leaves);
-
-	reiserfs_close_ondisk_bitmap (fs);
-}
-
-/* corrupt the random number of stat data items in random number of leaves */
-void do_sd_random_corrupt (reiserfs_filsys_t * fs,
-						   unsigned long nr_leaves_cr) 
-{
- 	unsigned int nr_ih_cr;
-	unsigned int i, j;
-	struct buffer_head * bh;
-	struct item_head * ih;
-	unsigned long nr_leaves = 0;
-	unsigned int should_be_corrupted = 0;
-
-	srand (time (0));
-
-	printf ("SD items in %lu leaves will be corrupted\n", nr_leaves_cr);
-	if ((data(fs)->log_file_name) && (data(fs)->log)) {
-		fprintf (data(fs)->log, "SD items in %lu leaves will be corrupted\n", nr_leaves_cr);
-	}
-
-    if (reiserfs_open_ondisk_bitmap (fs) < 0)
-		reiserfs_exit (1, "Could not open ondisk bitmap");
-
-    for (i = 0; (i < get_sb_block_count (fs->fs_ondisk_sb)) &&
-			 nr_leaves < nr_leaves_cr; i ++) {
-
-		if (!reiserfs_bitmap_test_bit (fs->fs_bitmap2, i))
-			continue;
-
-		bh = bread (fs->fs_dev, i, fs->fs_blocksize);
-		if (!bh) {
-			reiserfs_warning (stderr, "could not read block %lu\n", i);
-			continue;
-		}
-
-		if (who_is_this (bh->b_data, bh->b_size) != THE_LEAF) {
-			brelse (bh);	
-			continue;
-		}
-
-		if ((!is_leaf_node (bh)) || (block_of_journal (fs, i))) {
-			brelse (bh);	
-			continue;
-		}
-		
-		should_be_corrupted = (unsigned int) get_rand ((double)0, (double)1);
-		if (should_be_corrupted == 0)
-		{
-			brelse (bh);
-			continue;
-		}
-
-		/* get next item, look is it a SD */
-		nr_ih_cr = get_rand (1, get_blkh_nr_items (B_BLK_HEAD (bh))); 
-		for (j = 0; j < nr_ih_cr; j ++ ) {
-			should_be_corrupted = (unsigned int) get_rand ((double)0, (double)1);
-			if (should_be_corrupted == 0)
-				continue;
-
-			if ((data(fs)->log_file_name) && (data(fs)->log))
-				fprintf (data(fs)->log, "# block %lu , item %d\n",
-						 bh->b_blocknr, j);
-			printf ("# block %lu , item %d\n", bh->b_blocknr, j);
-			
-			ih = B_N_PITEM_HEAD (bh, j);
-			if (get_type (&ih->ih_key) != TYPE_STAT_DATA)
-				continue;
-			do_one_item_random_corrupt (bh, ih);
-		}
-		mark_buffer_dirty (bh);
-		bwrite(bh);
-		brelse (bh);
-		nr_leaves ++ ;
-	}
-
-	if ((data(fs)->log_file_name) && (data(fs)->log))
-		fprintf (data(fs)->log, "SD items in %lu leaves WERE corrupted\n",
-				 nr_leaves);
-	printf ("SD items in %lu leaves WERE corrupted\n", nr_leaves);
-
-	reiserfs_close_ondisk_bitmap (fs);
-}
-
-/* corrupt the random number of indierct items in random number of leaves */
-void do_ind_random_corrupt (reiserfs_filsys_t * fs,
-						   unsigned long nr_leaves_cr) 
-{
- 	unsigned int nr_ih_cr;
-	unsigned int i, j;
-	struct buffer_head * bh;
-	struct item_head * ih;
-	unsigned long nr_leaves = 0;
-	unsigned int should_be_corrupted = 0;
-
-	srand (time (0));
-
-	printf ("IND items in %lu leaves will be corrupted\n", nr_leaves_cr);
-	if ((data(fs)->log_file_name) && (data(fs)->log)) {
-		fprintf (data(fs)->log, "IND items in %lu leaves will be corrupted\n", nr_leaves_cr);
-	}
-
-    if (reiserfs_open_ondisk_bitmap (fs) < 0)
-		reiserfs_exit (1, "Could not open ondisk bitmap");
-
-    for (i = 0; (i < get_sb_block_count (fs->fs_ondisk_sb)) &&
-			 nr_leaves < nr_leaves_cr; i ++) {
-
-		if (!reiserfs_bitmap_test_bit (fs->fs_bitmap2, i))
-			continue;
-
-		bh = bread (fs->fs_dev, i, fs->fs_blocksize);
-		if (!bh) {
-			reiserfs_warning (stderr, "could not read block %lu\n", i);
-			continue;
-		}
-
-		if (who_is_this (bh->b_data, bh->b_size) != THE_LEAF) {
-			brelse (bh);	
-			continue;
-		}
-
-		if ((!is_leaf_node (bh)) || (block_of_journal (fs, i))) {
-			brelse (bh);	
-			continue;
-		}
-		
-		should_be_corrupted = (unsigned int) get_rand ((double)0, (double)1);
-		if (should_be_corrupted == 0)
-		{
-			brelse (bh);
-			continue;
-		}
-
-		/* get next item, look is it an IND */
-		nr_ih_cr = get_rand (1, get_blkh_nr_items (B_BLK_HEAD (bh))); 
-		for (j = 0; j < nr_ih_cr; j ++ ) {
-			should_be_corrupted = (unsigned int) get_rand ((double)0, (double)1);
-			if (should_be_corrupted == 0)
-				continue;
-
-			ih = B_N_PITEM_HEAD (bh, j);
-			if (get_type (&ih->ih_key) != TYPE_INDIRECT)
-				continue;
-			if ((data(fs)->log_file_name) && (data(fs)->log))
-				fprintf (data(fs)->log, "# block %lu , item %d\n",
-						 bh->b_blocknr, j);
-			printf ("# block %lu , item %d\n", bh->b_blocknr, j);
-
-			do_one_item_random_corrupt (bh, ih);
-		}
-		mark_buffer_dirty (bh);
-		bwrite(bh);
-		brelse (bh);
-		nr_leaves ++ ;
-	}
-
-	if ((data(fs)->log_file_name) && (data(fs)->log))
-		fprintf (data(fs)->log, "IND items in %lu leaves WERE corrupted\n",
-				 nr_leaves);
-	printf ("IND items in %lu leaves WERE corrupted\n", nr_leaves);
-
-	reiserfs_close_ondisk_bitmap (fs);
-}
-
-/* this reads list of desired corruptions from stdin and performs the
-   corruptions. Format of that list:
-   B           - the random number of bitmap to be corrupted
-   L nr_leaves - block headers in nr_leaves leaves to be corupted
-   H nr_leaves - the random number of item headers in nr_leaves to be corrupted
-   S nr_leaves - the random number of stat data items in nr_leaves to be
-                 corrupted
-   D nr_leaves - the random number of directory items in nr_leaves to be
-                 corrupted
-   I nr_leaves - the random number of indirect items in nr_leaves to be
-                 corrupted
-*/
-
-void what_to_corrupt (reiserfs_filsys_t * fs, char * corruption_command)
-{
-	unsigned long nr_leaves_cr;
-	char code;
-
-	switch (corruption_command [0]){
-	case 'B' :
-		/* bitmap */
-		do_bitmap_corruption (fs);
-		break;
-
-	case 'L' :
-		/* leaves */
-		if (sscanf (corruption_command, "%c %lu\n", &code, &nr_leaves_cr) != 2) {
-			printf ("Wrong format \'%c\'\n", corruption_command [0]);
-			return;
-		}
-		do_leaves_corruption (fs, nr_leaves_cr);		
-		break;
-
-	case 'H' :
-		/* item headers */
-		if (sscanf (corruption_command, "%c %lu\n", &code, &nr_leaves_cr) != 2) {
-			printf ("Wrong format \'%c\'\n", corruption_command [0]);
-			return;
-		}
-		do_ih_random_corrupt (fs, nr_leaves_cr);
-		break;
-
-	case 'D' :
-		/* directory items */
-		if (sscanf (corruption_command, "%c %lu\n", &code, &nr_leaves_cr) != 2) {
-			printf ("Wrong format \'%c\'\n", corruption_command [0]);
-			return;
-		}
-		do_dir_random_corrupt (fs, nr_leaves_cr);
-		break;
-
-	case 'S' :
-		/* stat data items */
-		if (sscanf (corruption_command, "%c %lu\n", &code, &nr_leaves_cr) != 2) {
-			printf ("Wrong format \'%c\'\n", corruption_command [0]);
-			return;
-		}
-		do_sd_random_corrupt (fs, nr_leaves_cr);
-		break;
-
-	case 'I' :
-		/* indirect items */
-		if (sscanf (corruption_command, "%c %lu\n", &code, &nr_leaves_cr) != 2) {
-			printf ("Wrong format \'%c\'\n", corruption_command [0]);
-			return;
-		}
-		do_ind_random_corrupt (fs, nr_leaves_cr);
-		break;
-
-	default :
-		printf ("Unknown command specified\n");
-	}
-}
-
-void do_fs_random_corrupt (reiserfs_filsys_t * fs)
-{
-    char * line = 0;
-    size_t n = 0;
-
-    printf ("Corrupting fs. Please insert one of the following command\n"
-			" B - the random number of bitmap to be corrupted\n"
-			" L nr_leaves - block headers in nr_leaves leaves to be corupted\n"
-			" H nr_leaves - the random number of item headers in nr_leaves to be corrupted\n"
-			" S nr_leaves - the random number of stat data items in nr_leaves to be corrupted\n"
-			" D nr_leaves - the random number of directory items in nr_leaves to be corrupted\n"
-			" I nr_leaves - the random number of indirect items in nr_leaves to be corrupted\n"
-			".. ->\n");
-
-	/* Get list of corruptions from stdin */
-	while (getline (&line, &n, stdin) != -1) {
-		if ( line [0] == '\n' ) {
-			free (line);
-			line = 0;
-			n = 0;
-			break;
-		}
-		printf ("################## command : %s", line);
-		if ((data(fs)->log_file_name) && (data(fs)->log)) {
-			fprintf (data(fs)->log, "################## command : %s", line);
-		}
-
-		what_to_corrupt (fs, line);
-		
-		free (line);
-		line = 0;
-		n = 0;
-	}
-}
-
-/*
-   Local variables:
-   c-indentation-style: "K&R"
-   mode-name: "LC"
-   c-basic-offset: 4
-   tab-width: 4
-   fill-column: 80
-   End:
-*/
-
-
-
-
-
-
-
-
diff --git a/debugreiserfs/unpack.c b/debugreiserfs/unpack.c
deleted file mode 100644
index fb93b6b..0000000
--- a/debugreiserfs/unpack.c
+++ /dev/null
@@ -1,631 +0,0 @@
-/*
- * Copyright 2000-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-  
-#include "debugreiserfs.h"
-#include <sys/resource.h>
-
-
-#define print_usage_and_exit() die ("Usage: %s [-v] [-b filename] device\n\
--v		prints blocks number of every block unpacked\n\
--b filename	saves bitmap of blocks unpacked to filename\n\
--j filename     stores journal in the filename\n", argv[0]);
-
-
-/* when super block gets unpacked for the first time - create a bitmap
-   and mark in it what have been unpacked. Save that bitmap at the end */
-reiserfs_bitmap_t * what_unpacked = 0;
-
-
-int leaves, full;
-
-int verbose = 0;
-
-int Default_journal = 1;
-
-static void unpack_offset (struct packed_item * pi, struct item_head * ih, int blocksize)
-{
-
-    if (get_pi_mask(pi) & OFFSET_BITS_64) {
-	__u64 v64;
-
-	if (get_ih_key_format (ih) != KEY_FORMAT_2)
-	    die ("unpack_offset: key format is not set or wrong");
-	fread_le64 (&v64);
-	set_offset (KEY_FORMAT_2, &ih->ih_key, v64);
-	return;
-    }
-
-    if (get_pi_mask(pi) & OFFSET_BITS_32) {
-	__u32 v32;
-
-	fread_le32 (&v32);
-	set_offset (get_ih_key_format (ih), &ih->ih_key, v32);
-	return;
-    }
-
-    if ((get_pi_mask(pi) & DIR_ID) == 0 && (get_pi_mask(pi) & OBJECT_ID) == 0) {
-	/* offset was not sent, as it can be calculated looking at the
-           previous item */
-	if (is_stat_data_ih (ih - 1))
-	    set_offset (get_ih_key_format (ih), &ih->ih_key, 1);
-	if (is_indirect_ih (ih - 1))
-	    set_offset (get_ih_key_format (ih), &ih->ih_key, 
-			get_offset (&(ih - 1)->ih_key) + get_bytes_number (ih - 1, blocksize));
-    }
-
-    // offset is 0
-    return;
-}
-
-
-static void unpack_type (struct packed_item * pi, struct item_head * ih)
-{
-    set_type (get_ih_key_format (ih), &ih->ih_key, get_pi_type(pi));
-    if (type_unknown (&ih->ih_key))
-	reiserfs_panic ("unpack_type: unknown type %d unpacked for %H\n",
-			get_pi_type(pi), ih);
-}
-
-
-/* direntry item comes in the following format: 
-   for each entry
-      mask - 8 bits
-      entry length - 16 bits
-      entry itself
-      deh_objectid - 32 bits
-      	maybe deh_dir_id (32 bits)
-	maybe gencounter (16)
-	maybe deh_state (16)
-*/
-static void unpack_direntry (struct packed_item * pi, struct buffer_head * bh,
-			     struct item_head * ih, hashf_t hash_func)
-{
-    __u16 entry_count, namelen, gen_counter, entry_len;
-    __u8 mask;
-    int i;
-    struct reiserfs_de_head * deh;
-    int location;
-    char * item;
-
-/*    if (!hash_func)
-	die ("unpack_direntry: hash function is not set");*/
-
-    if (!(get_pi_mask(pi) & IH_FREE_SPACE))
-        die ("ih_entry_count must be packed for directory items");
-
-    entry_count = get_ih_entry_count (ih);
-/*    if (!entry_count)
-	reiserfs_panic ("unpack_direntry: entry count should be set already");*/
-
-    item = bh->b_data + get_ih_location (ih);
-    deh = (struct reiserfs_de_head *)item;
-    location = get_pi_item_len(pi);
-    for (i = 0; i < entry_count; i ++, deh ++) {
-	fread8 (&mask);
-	fread_le16 (&entry_len);
-	location -= entry_len;
-	set_deh_location (deh, location);
-	fread (item + location, entry_len, 1, stdin);
-
-	/* find name length */
-	if (*(item + location + entry_len - 1))
-	    namelen = entry_len;
-	else
-	    namelen = strlen (item + location);
-
-	fread32 (&deh->deh2_objectid);
-	if (mask & HAS_DIR_ID)
-	    fread32 (&deh->deh2_dir_id);
-	else
-	    set_deh_dirid (deh, get_key_objectid (&ih->ih_key));
-
-	if (*(item + location) == '.' && namelen == 1)
-	    /* old or new "." */
-	    set_deh_offset (deh, DOT_OFFSET);
-	else if (*(item + location) == '.' && *(item + location + 1) == '.' && namelen == 2)
-	    /* old or new ".." */
-	    set_deh_offset (deh, DOT_DOT_OFFSET);
-	else if (hash_func)
-	    set_deh_offset (deh, hash_value(hash_func, item + location, namelen));
-	if (mask & HAS_GEN_COUNTER) {
-	    fread_le16 (&gen_counter);
-	    set_deh_offset (deh, get_deh_offset (deh) | gen_counter);
-	}
-
-	if (mask & HAS_STATE)
-	    fread16 (&deh->deh2_state);
-	else
-	    set_deh_state (deh, (1 << DEH_Visible2));
-    }
-
-    return;
-}
-
-
-/* struct packed_item is already unpacked */
-static void unpack_stat_data (struct packed_item * pi, struct buffer_head * bh,
-			      struct item_head * ih)
-{
-    if (!(get_pi_mask(pi) & IH_FREE_SPACE)) {
-        /* ih_free_space was not packed - set default */
-        set_ih_entry_count (ih, 0xffff);
-    }
-
-    if (get_ih_key_format (ih) == KEY_FORMAT_1) {
-	/* stat data comes in the following format:
-	   if this is old stat data:
-	   mode - 16 bits
-	   nlink - 16 bits
-	   size - 32 bits
-	   blocks/rdev - 32 bits
-	   maybe first_direct byte 32 bits
-	*/
-	struct stat_data_v1 * sd;
-
-	sd = (struct stat_data_v1 *)B_I_PITEM (bh, ih);
-	memset (sd, 0, sizeof (sd));
-
-	fread16 (&sd->sd_mode);
-	fread16 (&sd->sd_nlink);
-	fread32 (&sd->sd_size);
-	fread32 (&sd->u.sd_blocks);
-	
-	if (get_pi_mask(pi) & WITH_SD_FIRST_DIRECT_BYTE) {
-	    fread32 (&sd->sd_first_direct_byte);
-	} else {
-	    sd->sd_first_direct_byte = 0xffffffff;
-	}
-    } else {
-	/* for new stat data
-	   mode - 16 bits
-	   nlink in either 16 or 32 bits
-	   size in either 32 or 64 bits
-	   blocks - 32 bits
-	*/
-	struct stat_data * sd;
-
-	sd = (struct stat_data *)B_I_PITEM (bh, ih);
-	memset (sd, 0, sizeof (sd));
-	
-	fread16 (&sd->sd_mode);
-
-	if (get_pi_mask(pi) & NLINK_BITS_32) {
-	    fread32 (&sd->sd_nlink);
-	} else {
-	    __u16 nlink16;
-
-	    fread16 (&nlink16);
-            set_sd_v2_nlink (sd, le16_to_cpu(nlink16));
-	}
-
-	if (get_pi_mask(pi) & SIZE_BITS_64) {
-	    fread64 (&sd->sd_size);
-	} else {
-	    __u32 size32;
-
-            /* We need the endian conversions since sd->sd_size is 64 bit */
-	    fread_le32 (&size32);
-            set_sd_v2_size (sd, size32 );
-	}
-
-	fread32 (&sd->sd_blocks);
-    }
-
-    return;
-}
-
-
-/* indirect item comes either in packed form or as is. ih_free_space
-   can go first */
-static void unpack_indirect (struct packed_item * pi, struct buffer_head * bh,
-			     struct item_head * ih)
-{
-    __u32 * ind_item, * end;
-    int i;
-    __u16 v16;
-
-    if (!(get_pi_mask(pi) & IH_FREE_SPACE)) {
-        /* ih_free_space was not packed - set default */
-        set_ih_entry_count (ih, 0);
-    }
-
-    ind_item = (__u32 *)B_I_PITEM (bh, ih);
-
-    if (get_pi_mask(pi) & SAFE_LINK) {
-	d32_put(ind_item, 0, get_key_dirid(&ih->ih_key));
-	set_key_dirid(&ih->ih_key, (__u32)-1);
-	return;
-    }
-
-    if (get_pi_mask(pi) & WHOLE_INDIRECT) {
-	fread (ind_item, get_pi_item_len(pi), 1, stdin);
-	return;
-    }
-
-    end = ind_item + I_UNFM_NUM (ih);
-    while (ind_item < end) {
-        __u32 base;
-	fread32 (ind_item);
-	fread_le16 (&v16);
-        base = d32_get(ind_item, 0);
-	for (i = 1; i < v16; i ++) {
-	    if (base != 0)
-		d32_put(ind_item, i, base + i);
-	    else
-		d32_put(ind_item, i, 0);
-	}
-	ind_item += i;
-    }
-    return;
-}
-
-
-// FIXME: we have no way to preserve symlinks
-static void unpack_direct (struct packed_item * pi, struct buffer_head * bh,
-			   struct item_head * ih)
-{
-    __u32 * d_item = (__u32 *)B_I_PITEM (bh, ih);
-
-    if (!(get_pi_mask(pi) & IH_FREE_SPACE))
-        /* ih_free_space was not packed - set default */
-        set_ih_entry_count (ih, 0xffff);
-
-    if (get_pi_mask(pi) & SAFE_LINK) {
-	d32_put(d_item, 0, get_key_dirid(&ih->ih_key));
-	set_key_dirid(&ih->ih_key, (__u32)-1);
-    } else {
-	memset (d_item, 'a', get_pi_item_len(pi));
-    }
-    return;
-}
-
-
-static void unpack_leaf (int dev, hashf_t hash_func, __u16 blocksize)
-{
-    static int unpacked_leaves = 0;
-    struct buffer_head * bh;
-    struct packed_item pi;
-    struct item_head * ih;
-    int i;
-    __u16 v16;
-    __u32 v32;
-    
-    /* block number */
-    fread_le32 (&v32);
-
-
-    /* item number */
-    fread_le16 (&v16);
-
-    if (verbose)
-	reiserfs_warning (stderr, "leaf %d: %d items\n", v32, v16);
-
-    bh = getblk (dev, v32, blocksize);
-    if (!bh)
-	die ("unpack_leaf: getblk failed");
-
-    set_blkh_nr_items (B_BLK_HEAD (bh), v16);
-    set_blkh_level (B_BLK_HEAD (bh), DISK_LEAF_NODE_LEVEL);
-    set_blkh_free_space (B_BLK_HEAD (bh), MAX_FREE_SPACE (bh->b_size));
-    
-
-    ih = B_N_PITEM_HEAD (bh, 0);
-    for (i = 0; i < get_blkh_nr_items (B_BLK_HEAD (bh)); i ++, ih ++) {
-#if 0
-	fread32 (&v32);
-	if (v32 != ITEM_START_MAGIC)
-	    die ("unpack_leaf: no start item magic found: block %lu, item %i",
-		 bh->b_blocknr, i);
-#endif	
-
-	fread (&pi, sizeof (struct packed_item), 1, stdin);
-	
-	/* dir_id - if it is there */
-	if (get_pi_mask(&pi) & DIR_ID) {
-	    fread32 (&v32);
-            set_key_dirid (&ih->ih_key, le32_to_cpu(v32));
-	} else {
-	    if (!i)
-		die ("unpack_leaf: dir_id is not set");
-	    set_key_dirid (&ih->ih_key, get_key_dirid (&(ih - 1)->ih_key));
-	}
-
-	/* object_id - if it is there */
-	if (get_pi_mask(&pi) & OBJECT_ID) {
-	    fread32 (&v32);
-            set_key_objectid (&ih->ih_key, le32_to_cpu(v32));
-	} else {
-	    if (!i)
-		die ("unpack_leaf: object_id is not set");
-	    set_key_objectid (&ih->ih_key, get_key_objectid (&(ih - 1)->ih_key));
-	}
-
-	// we need to set item format before offset unpacking
-	set_ih_key_format (ih, (get_pi_mask(&pi) & NEW_FORMAT) ? KEY_FORMAT_2 : KEY_FORMAT_1);
-
-	// offset
-	unpack_offset (&pi, ih, bh->b_size);
-
-	/* type */
-	unpack_type (&pi, ih);
-
-	/* ih_free_space and ih_format */
-	if (get_pi_mask(&pi) & IH_FREE_SPACE) {
-	    fread16 (&v16);
-	    set_ih_entry_count (ih, le16_to_cpu(v16));
-	}
-
-	if (get_pi_mask(&pi) & IH_FORMAT)
-	    fread16 (&ih->ih_format);
-
-	/* item length and item location */
-	set_ih_item_len (ih, get_pi_item_len(&pi));
-	set_ih_location (ih, (i ? get_ih_location (ih - 1) : bh->b_size) - get_pi_item_len(&pi));
-
-	// item itself
-	if (is_direct_ih (ih)) {
-	    unpack_direct (&pi, bh, ih);
-	} else if (is_indirect_ih (ih)) {
-	    unpack_indirect (&pi, bh, ih);
-	} else if (is_direntry_ih (ih)) {
-	    unpack_direntry (&pi, bh, ih, hash_func);
-	} else if (is_stat_data_ih (ih)) {
-	    unpack_stat_data (&pi, bh, ih);
-	}
-	set_blkh_free_space (B_BLK_HEAD (bh), get_blkh_free_space (B_BLK_HEAD (bh)) -
-			     (IH_SIZE + get_ih_item_len (ih)));
-
-#if 0
-	fread32 (&v32);
-	if (v32 != ITEM_END_MAGIC)
-	    die ("unpack_leaf: no end item magic found: block %lu, item %i",
-		 bh->b_blocknr, i);
-	if (verbose)
-	    reiserfs_warning (stderr, "%d: %H\n", i, ih);
-#endif
-    }
-
-    fread_le16 (&v16);
-    if (v16 != LEAF_END_MAGIC)
-	die ("unpack_leaf: wrong end signature found - %x, block %lu", 
-	     v16, bh->b_blocknr);
-
-    mark_buffer_uptodate (bh, 1);
-    mark_buffer_dirty (bh);
-    bwrite (bh);
-    /*
-    if (!not_data_block (bh->b_blocknr))
-	data_blocks_unpacked ++;
-    */
-    brelse (bh);
-
-    if (what_unpacked)
-	reiserfs_bitmap_set_bit (what_unpacked, bh->b_blocknr);
-    /*unpacked ++;*/
-
-    if (!(++ unpacked_leaves % 10))
-	fprintf (stderr, "#");
-}
-
-
-static void unpack_full_block (int dev, int blocksize)
-{
-    static int full_blocks_unpacked = 0;
-    __u32 block;
-    struct buffer_head * bh;
-
-    fread_le32 (&block);
-
-    if (verbose)
-	fprintf (stderr, "full #%d\n", block);
-
-    bh = getblk (dev, block, blocksize);
-    if (!bh)
-	die ("unpack_full_block: getblk failed");
-
-    fread (bh->b_data, bh->b_size, 1, stdin);
-
-    if (who_is_this (bh->b_data, bh->b_size) == THE_SUPER && !what_unpacked) {
-	unsigned long blocks;
-	struct buffer_head * tmp;
-	
-	blocks = get_sb_block_count ((struct reiserfs_super_block *)(bh->b_data));
-	fprintf (stderr, "There were %lu blocks on the device\n", blocks);
-	what_unpacked = reiserfs_create_bitmap (blocks);
-
-	/* make file as long as filesystem is */
-	tmp = getblk (dev, blocks - 1, blocksize);
-	mark_buffer_dirty (tmp);
-	mark_buffer_uptodate (tmp, 0);
-	bwrite (tmp);
-	brelse (tmp);
-    }
-
-    mark_buffer_uptodate (bh, 1);
-    mark_buffer_dirty (bh);
-    bwrite (bh);
-/*
-    if (!not_data_block (bh->b_blocknr))
-	data_blocks_unpacked ++;
-*/
-    brelse (bh);
-
-    if (what_unpacked)
-	reiserfs_bitmap_set_bit (what_unpacked, block);
-    /*unpacked ++;*/
-
-    if (!(++ full_blocks_unpacked % 50))
-	fprintf (stderr, ".");
-}
-
-
-/* just skip bitmaps of unformatted nodes */
-static void unpack_unformatted_bitmap (int dev, int blocksize)
-{
-    __u16 bmap_num;
-    __u32 block_count;
-    int i;
-    char * buf;
- 
-    fread_le16 (&bmap_num);
-    fread_le32 (&block_count);
-    
-    buf = malloc (blocksize);
-    if (!buf)
-	reiserfs_panic ("unpack_unformatted_bitmap: malloc failed: %m");
-
-    for (i = 0; i < bmap_num; i ++) {
-	if (fread (buf, blocksize, 1, stdin) != 1)
-	    reiserfs_panic ("unpack_unformatted_bitmap: "
-			    "could not read bitmap #%d: %m", i);
-    }
-    free (buf);
-}
-
-
-// read packed reiserfs partition metadata from stdin
-void unpack_partition (int fd, int jfd)
-{
-    __u32 magic32;
-    long position;
-    __u16 magic16;
-    __u16 blocksize;
-    int dev = fd;
-    
-    fread_le32 (&magic32);
-    if (magic32 != REISERFS_SUPER_MAGIC)
-	die ("unpack_partition: reiserfs magic number (0x%x) not found - %x\n",
-             REISERFS_SUPER_MAGIC, magic32);
-    
-    fread_le16 (&blocksize);
-    
-    if (verbose)
-	fprintf (stderr, "Blocksize %d\n", blocksize);
-    
-    while (!feof (stdin)) {
-	char c[2];
-
-	fread (c, 1, 1, stdin);
-	switch (c[0]) {
-	case '.':
-	    if (verbose)
-		fprintf (stderr, "\".\" skipped\n");
-	    continue;
-
-	case '1':
-	    fread (c, 1, 1, stdin); /* that was 100%, read in first 0 */
-	case '2':
-	case '4':
-	case '6':
-	case '8':
-	    fread (c, 1, 1, stdin);
-	case '0':
-	    fread (c + 1, 1, 1, stdin); /* read % */
-		
-	    if (c[0] != '0' || c[1] != '%')
-		die ("0%% expected\n");
-
-	    if (verbose)
-		fprintf (stderr, "0%% skipped\n");
-	    continue;
-	}
-
-	fread (c + 1, 1, 1, stdin);
-	magic16 = le16_to_cpu(*(__u16 *)c);
-	/*fread16 (&magic16);*/
-	
-	switch (magic16 & 0xff) {
-	case LEAF_START_MAGIC:
-	    leaves ++;
-	    unpack_leaf (dev, code2func (magic16 >> 8), blocksize);
-	    break;
-	    
-	case SEPARATED_JOURNAL_START_MAGIC:
-	    if (Default_journal)
-		die ("file name for separated journal has to be specified");	
-	    dev = jfd;
-	    break;    
-
-	case SEPARATED_JOURNAL_END_MAGIC:
-	    dev = fd;
-	    break;
-	    
-	case FULL_BLOCK_START_MAGIC:
-	    full ++;
-	    unpack_full_block (dev, blocksize);
-	    break;
-
-	case UNFORMATTED_BITMAP_START_MAGIC:
-	    fprintf (stderr, "\nBitmap of unformatted - ignored\n");
-	    unpack_unformatted_bitmap (dev, blocksize);
-	    break;
-	    
-	case END_MAGIC:
-	    goto out;
-
-	default:
-	    position = ftell(stdin);
-	    if (position == ~(long)0)
-		die ("unpack_partition: bad magic found - %x", magic16 & 0xff);
-	    else
-		die ("unpack_partition: bad magic found - %x, position %lu", 
-		    magic16 & 0xff, ftell(stdin));
-	}
-    }
-out:
-    fprintf (stderr, "Unpacked %d leaves, %d full blocks\n", leaves, full);
-
-
-    /*    fclose (block_list);*/
-}
-
-
-int do_unpack(char *host, char *j_filename, char *filename, int verbose) {
-    int fd, fdj = -2;
-    struct rlimit lim = {RLIM_INFINITY, RLIM_INFINITY};
-
-    if (filename == NULL)
-	    filename = ".bitmap";
-    
-    if (j_filename)
-	    Default_journal = 0;
-    
-    /* with this 2.4.0-test9's file_write does not send SIGXFSZ */
-    if (setrlimit (RLIMIT_FSIZE, &lim)) {
-	fprintf  (stderr, "sertlimit failed: %m\n");
-    }
-
-    if (misc_device_mounted(host) > 0) {
-	fprintf(stderr, "%s seems mounted, umount it first\n", host);
-	return 0;
-    }
-  
-    fd = open (host, O_RDWR | O_LARGEFILE);
-    if (fd == -1) {
-	perror ("open failed");
-	return 0;
-    }
-
-    if (!Default_journal) {
-	fdj = open (j_filename, O_RDWR | O_LARGEFILE);
-	if (fdj == -1) {
-	    perror ("open failed");
-	    return 0;
-	}
-    }
-
-    unpack_partition (fd, fdj);
-
-    if (what_unpacked && filename) {
-        FILE * file = open_file(filename, "w+");
-        reiserfs_bitmap_save (file,  what_unpacked);
-        close_file(file);
-    }
-
-    close (fd);
-    if (!Default_journal)
-	close (fdj);	
-    return 0;
-}
diff --git a/depcomp b/depcomp
index aea3d00..ffcd540 100755
--- a/depcomp
+++ b/depcomp
@@ -1,7 +1,9 @@
 #! /bin/sh
-
 # depcomp - compile a program generating dependencies as side-effects
-# Copyright 1999, 2000 Free Software Foundation, Inc.
+
+scriptversion=2005-02-09.22
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -25,22 +27,45 @@
 
 # Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
 
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by `PROGRAMS ARGS'.
+  object      Object file output by `PROGRAMS ARGS'.
+  DEPDIR      directory where to store dependencies.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputing dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit $?
+    ;;
+esac
+
 if test -z "$depmode" || test -z "$source" || test -z "$object"; then
   echo "depcomp: Variables source, object and depmode must be set" 1>&2
   exit 1
 fi
-# `libtool' can also be set to `yes' or `no'.
 
-if test -z "$depfile"; then
-   base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
-   dir=`echo "$object" | sed 's,/.*$,/,'`
-   if test "$dir" = "$object"; then
-      dir=
-   fi
-   # FIXME: should be _deps on DOS.
-   depfile="$dir.deps/$base"
-fi
-
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
 tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
 
 rm -f "$tmpdepfile"
@@ -172,19 +197,25 @@
 
 aix)
   # The C for AIX Compiler uses -M and outputs the dependencies
-  # in a .u file.  This file always lives in the current directory.
-  # Also, the AIX compiler puts `$object:' at the start of each line;
-  # $object doesn't have directory information.
-  stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
   tmpdepfile="$stripped.u"
-  outname="$stripped.o"
   if test "$libtool" = yes; then
     "$@" -Wc,-M
   else
     "$@" -M
   fi
-
   stat=$?
+
+  if test -f "$tmpdepfile"; then :
+  else
+    stripped=`echo "$stripped" | sed 's,^.*/,,'`
+    tmpdepfile="$stripped.u"
+  fi
+
   if test $stat -eq 0; then :
   else
     rm -f "$tmpdepfile"
@@ -192,6 +223,7 @@
   fi
 
   if test -f "$tmpdepfile"; then
+    outname="$stripped.o"
     # Each line is of the form `foo.o: dependent.h'.
     # Do two passes, one to just change these to
     # `$object: dependent.h' and one to simply `dependent.h:'.
@@ -255,31 +287,47 @@
    base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
 
    if test "$libtool" = yes; then
-      tmpdepfile1="$dir.libs/$base.lo.d"
-      tmpdepfile2="$dir.libs/$base.d"
+      # With Tru64 cc, shared objects can also be used to make a
+      # static library.  This mecanism is used in libtool 1.4 series to
+      # handle both shared and static libraries in a single compilation.
+      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+      #
+      # With libtool 1.5 this exception was removed, and libtool now
+      # generates 2 separate objects for the 2 libraries.  These two
+      # compilations output dependencies in in $dir.libs/$base.o.d and
+      # in $dir$base.o.d.  We have to check for both files, because
+      # one of the two compilations can be disabled.  We should prefer
+      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+      # automatically cleaned when .libs/ is deleted, while ignoring
+      # the former would cause a distcleancheck panic.
+      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
+      tmpdepfile2=$dir$base.o.d          # libtool 1.5
+      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
+      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
       "$@" -Wc,-MD
    else
-      tmpdepfile1="$dir$base.o.d"
-      tmpdepfile2="$dir$base.d"
+      tmpdepfile1=$dir$base.o.d
+      tmpdepfile2=$dir$base.d
+      tmpdepfile3=$dir$base.d
+      tmpdepfile4=$dir$base.d
       "$@" -MD
    fi
 
    stat=$?
    if test $stat -eq 0; then :
    else
-      rm -f "$tmpdepfile1" "$tmpdepfile2"
+      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
       exit $stat
    fi
 
-   if test -f "$tmpdepfile1"; then
-      tmpdepfile="$tmpdepfile1"
-   else
-      tmpdepfile="$tmpdepfile2"
-   fi
+   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+   do
+     test -f "$tmpdepfile" && break
+   done
    if test -f "$tmpdepfile"; then
       sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-      # That's a space and a tab in the [].
-      sed -e 's,^.*\.[a-z]*:[ 	]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+      # That's a tab and a space in the [].
+      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
    else
       echo "#dummy" > "$depfile"
    fi
@@ -292,7 +340,7 @@
 
 dashmstdout)
   # Important note: in order to support this mode, a compiler *must*
-  # always write the proprocessed file to stdout, regardless of -o.
+  # always write the preprocessed file to stdout, regardless of -o.
   "$@" || exit $?
 
   # Remove the call to Libtool.
@@ -388,7 +436,7 @@
 
 cpp)
   # Important note: in order to support this mode, a compiler *must*
-  # always write the proprocessed file to stdout.
+  # always write the preprocessed file to stdout.
   "$@" || exit $?
 
   # Remove the call to Libtool.
@@ -430,7 +478,7 @@
 
 msvisualcpp)
   # Important note: in order to support this mode, a compiler *must*
-  # always write the proprocessed file to stdout, regardless of -o,
+  # always write the preprocessed file to stdout, regardless of -o,
   # because we must use -o when running libtool.
   "$@" || exit $?
   IFS=" "
@@ -470,3 +518,12 @@
 esac
 
 exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/fsck/Makefile.am b/fsck/Makefile.am
deleted file mode 100644
index fcf73fe..0000000
--- a/fsck/Makefile.am
+++ /dev/null
@@ -1,11 +0,0 @@
-sbin_PROGRAMS = reiserfsck
-
-reiserfsck_SOURCES = main.c pass0.c pass1.c pass2.c semantic_check.c \
-semantic_rebuild.c pass4.c lost+found.c ubitmap.c uobjectid.c ustree.c \
-ufile.c check_tree.c info.c super.c fsck.h
-
-man_MANS = reiserfsck.8
-EXTRA_DIST = $(man_MANS)
-
-reiserfsck_LDADD = $(top_srcdir)/lib/libmisc.a $(top_srcdir)/reiserfscore/libcore.a
-
diff --git a/fsck/Makefile.in b/fsck/Makefile.in
deleted file mode 100644
index 53b6bcc..0000000
--- a/fsck/Makefile.in
+++ /dev/null
@@ -1,483 +0,0 @@
-# Makefile.in generated by automake 1.7.6 from Makefile.am.
-# @configure_input@
-
-# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-# Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
-
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-host_triplet = @host@
-ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-MAKEINFO = @MAKEINFO@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-UUID_LIBS = @UUID_LIBS@
-VERSION = @VERSION@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-datadir = @datadir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-oldincludedir = @oldincludedir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-sbin_PROGRAMS = reiserfsck
-
-reiserfsck_SOURCES = main.c pass0.c pass1.c pass2.c semantic_check.c \
-semantic_rebuild.c pass4.c lost+found.c ubitmap.c uobjectid.c ustree.c \
-ufile.c check_tree.c info.c super.c fsck.h
-
-
-man_MANS = reiserfsck.8
-EXTRA_DIST = $(man_MANS)
-
-reiserfsck_LDADD = $(top_srcdir)/lib/libmisc.a $(top_srcdir)/reiserfscore/libcore.a
-subdir = fsck
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-sbin_PROGRAMS = reiserfsck$(EXEEXT)
-PROGRAMS = $(sbin_PROGRAMS)
-
-am_reiserfsck_OBJECTS = main.$(OBJEXT) pass0.$(OBJEXT) pass1.$(OBJEXT) \
-	pass2.$(OBJEXT) semantic_check.$(OBJEXT) \
-	semantic_rebuild.$(OBJEXT) pass4.$(OBJEXT) lost+found.$(OBJEXT) \
-	ubitmap.$(OBJEXT) uobjectid.$(OBJEXT) ustree.$(OBJEXT) \
-	ufile.$(OBJEXT) check_tree.$(OBJEXT) info.$(OBJEXT) \
-	super.$(OBJEXT)
-reiserfsck_OBJECTS = $(am_reiserfsck_OBJECTS)
-reiserfsck_DEPENDENCIES = $(top_srcdir)/lib/libmisc.a \
-	$(top_srcdir)/reiserfscore/libcore.a
-reiserfsck_LDFLAGS =
-
-DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/check_tree.Po ./$(DEPDIR)/info.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/lost+found.Po ./$(DEPDIR)/main.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/pass0.Po ./$(DEPDIR)/pass1.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/pass2.Po ./$(DEPDIR)/pass4.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/semantic_check.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/semantic_rebuild.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/super.Po ./$(DEPDIR)/ubitmap.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/ufile.Po ./$(DEPDIR)/uobjectid.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/ustree.Po
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-DIST_SOURCES = $(reiserfsck_SOURCES)
-
-NROFF = nroff
-MANS = $(man_MANS)
-DIST_COMMON = Makefile.am Makefile.in
-SOURCES = $(reiserfsck_SOURCES)
-
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  fsck/Makefile
-Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
-sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
-install-sbinPROGRAMS: $(sbin_PROGRAMS)
-	@$(NORMAL_INSTALL)
-	$(mkinstalldirs) $(DESTDIR)$(sbindir)
-	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
-	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-	  if test -f $$p \
-	  ; then \
-	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
-	   echo " $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) $$p $(DESTDIR)$(sbindir)/$$f"; \
-	   $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) $$p $(DESTDIR)$(sbindir)/$$f || exit 1; \
-	  else :; fi; \
-	done
-
-uninstall-sbinPROGRAMS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
-	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
-	  echo " rm -f $(DESTDIR)$(sbindir)/$$f"; \
-	  rm -f $(DESTDIR)$(sbindir)/$$f; \
-	done
-
-clean-sbinPROGRAMS:
-	-test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
-reiserfsck$(EXEEXT): $(reiserfsck_OBJECTS) $(reiserfsck_DEPENDENCIES) 
-	@rm -f reiserfsck$(EXEEXT)
-	$(LINK) $(reiserfsck_LDFLAGS) $(reiserfsck_OBJECTS) $(reiserfsck_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT) core *.core
-
-distclean-compile:
-	-rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_tree.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/info.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lost+found.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pass0.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pass1.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pass2.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pass4.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/semantic_check.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/semantic_rebuild.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/super.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ubitmap.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufile.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uobjectid.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ustree.Po@am__quote@
-
-distclean-depend:
-	-rm -rf ./$(DEPDIR)
-
-.c.o:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
-
-.c.obj:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
-uninstall-info-am:
-
-man8dir = $(mandir)/man8
-install-man8: $(man8_MANS) $(man_MANS)
-	@$(NORMAL_INSTALL)
-	$(mkinstalldirs) $(DESTDIR)$(man8dir)
-	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.8*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
-	  else file=$$i; fi; \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    8*) ;; \
-	    *) ext='8' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst"; \
-	  $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \
-	done
-uninstall-man8:
-	@$(NORMAL_UNINSTALL)
-	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.8*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    8*) ;; \
-	    *) ext='8' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " rm -f $(DESTDIR)$(man8dir)/$$inst"; \
-	  rm -f $(DESTDIR)$(man8dir)/$$inst; \
-	done
-
-ETAGS = etags
-ETAGSFLAGS =
-
-CTAGS = ctags
-CTAGSFLAGS =
-
-tags: TAGS
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	mkid -fID $$unique
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(ETAGS_ARGS)$$tags$$unique" \
-	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	     $$tags $$unique
-
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-
-top_distdir = ..
-distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkinstalldirs) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
-	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS) $(MANS)
-
-installdirs:
-	$(mkinstalldirs) $(DESTDIR)$(sbindir) $(DESTDIR)$(man8dir)
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-rm -f Makefile $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am
-
-distclean: distclean-am
-
-distclean-am: clean-am distclean-compile distclean-depend \
-	distclean-generic distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-man
-
-install-exec-am: install-sbinPROGRAMS
-
-install-info: install-info-am
-
-install-man: install-man8
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-info-am uninstall-man uninstall-sbinPROGRAMS
-
-uninstall-man: uninstall-man8
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-sbinPROGRAMS ctags distclean distclean-compile \
-	distclean-depend distclean-generic distclean-tags distdir dvi \
-	dvi-am info info-am install install-am install-data \
-	install-data-am install-exec install-exec-am install-info \
-	install-info-am install-man install-man8 install-sbinPROGRAMS \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am uninstall-info-am uninstall-man \
-	uninstall-man8 uninstall-sbinPROGRAMS
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/fsck/check_tree.c b/fsck/check_tree.c
deleted file mode 100644
index 8a53d37..0000000
--- a/fsck/check_tree.c
+++ /dev/null
@@ -1,1177 +0,0 @@
-/*
- * Copyright 1999-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#include "fsck.h"
-
-#if 0
-struct check_relocated {
-    __u32 old_dir_id;
-    __u32 old_objectid;
-    /*mode_t mode;*/
-    struct check_relocated * next;
-};
-
-static struct check_relocated * relocated_list;
-
-void to_be_relocated (struct key * key)
-{
-    struct check_relocated * cur, * prev, * new_relocated;
-
-    cur = relocated_list;
-    prev = 0;
-
-    while (cur && comp_short_keys(key, (struct key *)cur) != 1) {
-	if (comp_short_keys (key, (struct key *)cur) == 0)
-	    return;
-	prev = cur;
-        cur = cur->next;
-    }
-        
-    new_relocated = getmem (sizeof (struct check_relocated));
-    copy_short_key ((struct key *)new_relocated, key);
-             
-    if (prev) {
-        new_relocated->next = prev->next;
-        prev->next = new_relocated;
-    } else {
-        new_relocated->next = relocated_list;
-        relocated_list = new_relocated;
-    }
-}
-
-int should_be_relocated (struct key * key)
-{
-    struct check_relocated *cur, *prev;
-    int ret = 0;
-
-    if (!key)
-	return 0;
-    
-    cur = relocated_list;
-
-    prev = NULL;
-    while (cur && comp_short_keys(key, (struct key *)cur) != 1) {
-	if (comp_short_keys (key, (struct key *)cur) == 0) {
-	    ret = 1;
-	    break;
-	}
-	prev = cur;
-	cur = cur->next;
-    }
- 
-    if (ret) {
-	/* cur is found */
-	if (prev) /* not the first */
-	    prev->next = cur->next;
-	else /* first */
-	    relocated_list = cur->next;
-	freemem (cur);
-    }
- 
-    return ret;    
-}
-
-void clear_relocated_list() {
-    struct check_relocated *next;
-
-    while (relocated_list) {
-        next = relocated_list->next;
-        freemem (relocated_list);
-        relocated_list = next;
-    }
-}
-
-#endif
-
-//
-//
-//
-// check_fs_tree stops and recommends to run fsck --rebuild-tree when:
-// 1. read fails
-// 2. node of wrong level found in the tree
-// 3. something in the tree points to wrong block number
-//      out of filesystem boundary is pointed by tree
-//      to block marked as free in bitmap
-//      the same block is pointed from more than one place
-//      not data blocks (journal area, super block, bitmaps)
-// 4. bad formatted node found
-// 5. delimiting keys are incorrect
-//      
-
-
-
-/* mark every block we see in the tree in control bitmap, so, when to make
-   sure, that no blocks are pointed to from more than one place we use
-   additional bitmap (control_bitmap). If we see pointer to a block we set
-   corresponding bit to 1. If it is set already - run fsck with --rebuild-tree */
-static reiserfs_bitmap_t * control_bitmap;
-static reiserfs_bitmap_t * source_bitmap;
-
-static int tree_scanning_failed = 0;
-
-
-/* 1 if block is not marked as used in the bitmap */
-static int is_block_free (reiserfs_filsys_t * fs, unsigned long block)
-{
-    return !reiserfs_bitmap_test_bit (source_bitmap, block);
-}
-
-
-/*static int hits = 0;*/
-
-/* we have seen this block in the tree, mark corresponding bit in the
-   control bitmap */
-static void we_met_it (unsigned long block)
-{
-    reiserfs_bitmap_set_bit (control_bitmap, block);
-    /*hits ++;*/
-}
-
-
-/* have we seen this block somewhere in the tree before? */
-static int did_we_meet_it (unsigned long block)
-{
-    return reiserfs_bitmap_test_bit (control_bitmap, block);
-}
-
-
-static void init_control_bitmap (reiserfs_filsys_t * fs)
-{
-    unsigned int i;
-    unsigned long block;
-    unsigned long reserved;
-    
-
-    control_bitmap = reiserfs_create_bitmap(get_sb_block_count(fs->fs_ondisk_sb));
-    if (!control_bitmap)
-	die ("init_control_bitmap: Failed to allocate a control bitmap.");
-
-    /*printf ("Initially number of zeros in control bitmap %d\n", 
-	      reiserfs_bitmap_zeros (control_bitmap));*/
-
-    /* skipped and super block */
-    for (i = 0; i <= fs->fs_super_bh->b_blocknr; i ++)
-    	we_met_it (i);
-
-    /*printf ("SKIPPED: %d blocks marked used (%d)\n", hits, 
-              reiserfs_bitmap_zeros (control_bitmap));
-      hits = 0;*/
-
-    /* bitmaps */
-    block = fs->fs_super_bh->b_blocknr + 1;
-    for (i = 0; i < get_sb_bmap_nr (fs->fs_ondisk_sb); i ++) {
-        we_met_it (block);
-
-	if (spread_bitmaps (fs))
-	    block = (block / (fs->fs_blocksize * 8) + 1) * 
-		    (fs->fs_blocksize * 8);
-	else
-	    block ++;	
-    }
-    
-    /*printf ("BITMAPS: %d blocks marked used (%d)\n", hits, 
-	      reiserfs_bitmap_zeros (control_bitmap));
-	      
-      hits = 0;*/
-    
-    /* mark as used area of the main device either containing a journal or
-       reserved to hold it */
-
-    reserved = get_size_of_journal_or_reserved_area (fs->fs_ondisk_sb);
-    
-    /* where does journal area (or reserved journal area) start from */
-
-    if (!is_new_sb_location (fs->fs_super_bh->b_blocknr, fs->fs_blocksize) &&
-    	!is_old_sb_location (fs->fs_super_bh->b_blocknr, fs->fs_blocksize))
-	die ("init_control_bitmap: Wrong super block location. You must run "
-	     "--rebuild-sb.");
-
-    block = get_journal_start_must (fs);
-
-    for (i = block; i < reserved + block; i ++)
-	we_met_it (i);
-
-    if (fs->fs_badblocks_bm)
-	for (i = 0; i < get_sb_block_count (fs->fs_ondisk_sb); i ++) {
-	    if (reiserfs_bitmap_test_bit (fs->fs_badblocks_bm, i))
-	    	we_met_it (i);	
-	}
-}
-
-
-/* if we managed to complete tree scanning and if control bitmap and/or proper
-   amount of free blocks mismatch with bitmap on disk and super block's
-   s_free_blocks - we can fix that */
-static void handle_bitmaps (reiserfs_filsys_t * fs)
-{
-    int problem = 0;
-
-    if (tree_scanning_failed) {
-	fsck_progress ("Could not scan the internal tree. --rebuild-tree "
-		       "is required\n");
-	return;
-    }
-
-    fsck_progress ("Comparing bitmaps..");
-
-    /* check free block counter */
-    if (get_sb_free_blocks (fs->fs_ondisk_sb) != 
-	reiserfs_bitmap_zeros (control_bitmap)) 
-    {
-/*	fsck_log ("vpf-10630: The count of free blocks in the on-disk bitmap "
-		  "(%lu) mismatches with the correct one (%lu).\n",  
-		  get_sb_free_blocks (fs->fs_ondisk_sb),
-		  reiserfs_bitmap_zeros (control_bitmap));
-*/
-	problem++;
-    }
-
-    if (reiserfs_bitmap_compare (source_bitmap, control_bitmap))
-	problem++;    
-
-    if (problem) {
-        if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
-	    fsck_log ("vpf-10630: The on-disk and the correct bitmaps differs. "
-		"Will be fixed later.\n");
-//            fsck_progress ("Trying to fix bitmap ..\n");
-            /* mark blocks as used in source bitmap if they are used in 
-	       control bitmap */
-            reiserfs_bitmap_disjunction (source_bitmap, control_bitmap);
-            /* change used blocks count accordinly source bitmap, copy bitmap 
-	       changes to on_disk bitmap */
-            set_sb_free_blocks (fs->fs_ondisk_sb, 
-				reiserfs_bitmap_zeros(source_bitmap));
-            reiserfs_bitmap_copy (fs->fs_bitmap2, source_bitmap);
-            mark_buffer_dirty (fs->fs_super_bh);
-/*
-            // check again 
-            if ((diff = reiserfs_bitmap_compare(source_bitmap, 
-						control_bitmap)) != 0)  
-	    {
-                // do not mark them as fatal or fixable because one can live 
-		// with leaked space. So this is not a fatal corruption, and 
-		// fix-fixable cannot fix it 
-                fsck_progress (" bitmaps were not recovered.\n\tYou can either "
-		"run rebuild-tree or live with %d leaked blocks\n", diff);
-            } else {
-                fsck_progress ("finished\n");
-            }
-*/
-        } else if (problem) {
-	    fsck_log ("vpf-10640: The on-disk and the correct bitmaps differs.\n");
-            while (problem) {
-                /* fixable corruptions because we can try to recover them 
-		   without rebuilding the tree */
-        	one_more_corruption (fs, FIXABLE); 
-        	problem --;
-            }
-        }
-    } else 
-        fsck_progress ("finished\n");
-        
-    return;
-}
-
-static int auto_handle_bitmaps (reiserfs_filsys_t *fs) {
-    unsigned long i;
-    
-    if (source_bitmap->bm_byte_size != control_bitmap->bm_byte_size)
-	return -1;
-    
-    for (i = 0; i < source_bitmap->bm_byte_size; i ++) {
-	if (control_bitmap->bm_map[i] & ~source_bitmap->bm_map[i]) {
-	    return 1;
-	}
-    }
-    
-    return 0;
-}
-
-
-/* is this block legal to be pointed to by some place of the tree? */
-static int bad_block_number (reiserfs_filsys_t * fs, unsigned long block)
-{
-    if (block >= get_sb_block_count (fs->fs_ondisk_sb) ||
-	not_data_block (fs, block)) {
-	/* block has value which can not be used as a pointer in a tree */
-	
-	return 1;
-/*
-	if (is_unfm_pointer) {
-	    // unformatted node pointer will be zeroed
-	    one_more_corruption (fs, fixable);
-	    return 1;
-	}
-
-	// internal nodes can not have wrong pointer
-	one_more_corruption (fs, fatal);
-	return 1;
-*/
-
-    }
-
-    if (is_block_free (fs, block)) {
-	/* block is marked free - bitmap problems will be handled later */
-	//one_more_corruption (fs, fixable);
-    }
-
-    return 0;
-}
-
-
-static int got_already (reiserfs_filsys_t * fs, unsigned long block)
-{
-    if (did_we_meet_it (block)) {
-	/* block is in tree at least twice */
-    	return 1;
-    }
-    we_met_it (block);
-    return 0;
-}
-
-/* 1 if it does not look like reasonable stat data */
-static int bad_stat_data (reiserfs_filsys_t * fs, 
-			  struct buffer_head * bh, 
-			  struct item_head * ih)
-{
-    unsigned long objectid;
-//    __u32 links;
-
-    objectid = get_key_objectid (&ih->ih_key);
-    if (!is_objectid_used (fs, objectid)) {
-	/* FIXME: this could be cured right here */
-	fsck_log ("bad_stat_data: The objectid (%lu) is marked free, but used "
-		  "by an object %k\n", objectid, &ih->ih_key);
-
-        /* if it is FIX_FIXABLE we flush objectid map at the end
-           no way to call one_less_corruption later
-        */
-	if (fsck_mode (fs) != FSCK_FIX_FIXABLE)
-	    one_more_corruption (fs, FIXABLE);
-    }
-
-    if (id_map_mark(proper_id_map (fs), objectid)) {
-	fsck_log ("bad_stat_data: The objectid (%lu) is shared by at least two "
-		  "files. Can be fixed with --rebuild-tree only.\n", objectid);
-#if 0
-	to_be_relocated (&ih->ih_key);
-//	one_more_corruption (fs, FIXABLE);	
-#endif
-    }
-
-    return 0;
-/* Check this on semantic_check pass.    
-
-    sd = (struct stat_data *)B_I_PITEM(bh,ih);
-    get_sd_nlink (ih, sd, &links);
-    if (S_ISDIR(sd->sd_mode)) {
-        if (links < 2) {
-            fsck_log ("%s: block %lu: The directory StatData %k has bad nlink number (%u)\n",
-                __FUNCTION__, bh->b_blocknr, &ih->ih_key, links);
-            one_more_corruption (fs, fatal);
-        }
-    } else {
-        if (links == 0) {
-            fsck_log ("%s: block %lu: The StatData %k has bad nlink number (%u)\n",
-                __FUNCTION__, bh->b_blocknr, &ih->ih_key);
-            one_more_corruption (fs, fatal);
-        }
-    }
-*/    
-}
-
-
-/* it looks like we can check item length only */
-static int bad_direct_item (reiserfs_filsys_t * fs, 
-			    struct buffer_head * bh, 
-			    struct item_head * ih)
-{
-    return 0;
-}
-
-
-inline void handle_one_pointer (reiserfs_filsys_t * fs, 
-				struct buffer_head * bh,
-				__u32 * item, int offset)
-{
-    if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
-	fsck_log (" - zeroed");
-	d32_put (item, offset, 0);
-	mark_buffer_dirty (bh);
-    } else {
-	one_more_corruption (fs, FIXABLE);
-    }
-}
-
-
-static int bad_badblocks_item (reiserfs_filsys_t * fs, struct buffer_head * bh,
-			      struct item_head * ih) {
-    __u32 i;
-    __u32 * ind = (__u32 *)B_I_PITEM (bh, ih);
-
-    if (get_ih_item_len (ih) % 4) {
-	fsck_log ("%s: block %lu: item (%H) has bad length\n", __FUNCTION__,
-		  bh->b_blocknr, ih);
-	one_more_corruption (fs, FATAL);
-	return 1;
-    }
-	
-    /* All valid badblocks are given in badblock bitmap. Nothing to check anymore. */
-    if (fs->fs_badblocks_bm)
-	    return 0;
-    
-    for (i = 0; i < I_UNFM_NUM (ih); i ++) {
-	if (!d32_get (ind, i)) {
-/*	    fsck_log ("%s: block %lu: badblocks item (%H) has zero pointer.",
-		      __FUNCTION__, bh->b_blocknr, ih);
-	    
-	    if (fsck_mode(fs) != FSCK_FIX_FIXABLE) {
-		    fsck_log("Not an error, but could be deleted with --fix-fixable\n");
-	    } else {
-		    fsck_log("Will be deleted later.\n");
-	    }*/
-	    
-	    continue;
-	}
-
-	/* check list of badblocks pointers */
-	if (d32_get (ind, i) >= get_sb_block_count (fs->fs_ondisk_sb)) {
-	    fsck_log ("%s: badblock pointer (block %lu) points out of disk spase (%lu)",
-			__FUNCTION__, bh->b_blocknr, d32_get (ind, i));
-	    handle_one_pointer (fs, bh, ind, i);
-	    fsck_log ("\n");
-	}
-
-	if (did_we_meet_it (d32_get (ind, i))) {
-	    /* it can be
-	       1. not_data_block
-	       		delete pointer
-	       2. ind [i] or internal/leaf
-	          advice to run fix-fixable if there is no fatal errors
-	          with list of badblocks, say that it could fix it. */
-	
-	    if (not_data_block (fs, d32_get (ind, i))) {
-		fsck_log ("%s: badblock pointer (block %lu) points on fs metadata (%lu)",
-			  __FUNCTION__, bh->b_blocknr, d32_get (ind, i));
-		handle_one_pointer (fs, bh, ind, i);
-		fsck_log ("\n");
-	    } else {
-		one_more_corruption(fs, FIXABLE);
-	        fsck_log ("%s: badblock pointer (block %lu) points to a block (%lu) "
-			  "which is in the tree already. Use badblock option (-B) to"
-			  " fix the problem\n", __FUNCTION__, bh->b_blocknr, 
-			  d32_get (ind, i));
-	    }
-
-	    continue;
-	}
-	
-	we_met_it(d32_get(ind, i));
-    }
-
-    return 0;
-}
-
-/* for each unformatted node pointer: make sure it points to data area and
-   that it is not in the tree yet */
-static int bad_indirect_item (reiserfs_filsys_t * fs, struct buffer_head * bh,
-			      struct item_head * ih)
-{
-    __u32 * ind = (__u32 *)B_I_PITEM (bh, ih);
-    unsigned int i;
-
-    if (get_ih_item_len (ih) % 4) {
-	fsck_log ("%s: block %lu: The item (%H) has the bad length (%u)\n",
-	    __FUNCTION__, bh->b_blocknr, ih, get_ih_item_len (ih));
-	one_more_corruption (fs, FATAL);
-	return 1;
-    }
-
-    for (i = 0; i < I_UNFM_NUM (ih); i ++) {
-
-	fsck_check_stat (fs)->unfm_pointers ++;
-	if (!d32_get (ind, i)) {
-	    fsck_check_stat (fs)->zero_unfm_pointers ++;
-	    continue;
-	}
-
-	/* check unformatted node pointer and mark it used in the
-           control bitmap */
-	if (bad_block_number (fs, d32_get (ind, i))) {
-	    fsck_log ("%s: block %lu: The item %k has the bad pointer (%d) to "
-		      "the block (%lu)", __FUNCTION__, bh->b_blocknr, 
-		      &ih->ih_key, i, d32_get (ind, i));
-	    
-	    handle_one_pointer (fs, bh, ind, i);
-	    fsck_log ("\n");
-	    continue;
-	}
-
-        if (got_already (fs, d32_get (ind, i))) {
-	    fsck_log ("%s: block %lu: The item (%H) has the bad pointer (%d) "
-		      "to the block (%lu), which is in tree already", 
-		      __FUNCTION__, bh->b_blocknr, ih, i, d32_get (ind, i));
-	    
-	    handle_one_pointer (fs, bh, ind, i);
-	    fsck_log ("\n");
-            continue;
-	}
-    }
-
-#if 0
-    /* delete this check for 3.6 */
-    if (get_ih_free_space (ih) > fs->fs_blocksize - 1) {
-        if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
-            /*FIXME: fix it if needed*/
-        } else {
-            fsck_log ("bad_indirect_item: %H has wrong ih_free_space\n", ih);
-            one_more_corruption (fs, fixable);
-        }
-    }
-#endif
-
-    return 0;
-}
-
-
-/* FIXME: this was is_bad_directory from pass0.c */
-static int bad_directory_item (reiserfs_filsys_t * fs, 
-			       struct buffer_head * bh, 
-			       struct item_head * ih)
-{
-    char *name, *prev_name;
-    __u32 off, prev_off;
-    unsigned int count, i;
-    struct reiserfs_de_head * deh = B_I_DEH (bh, ih);
-    int min_entry_size = 1;/* We have no way to understand whether the
-                              filesystem was created in 3.6 format or
-                              converted to it. So, we assume that minimal name
-                              length is 1 */
-    __u16 state;
-    int namelen;
-
-    count = get_ih_entry_count (ih);
-
-    if (count == 0) {
-	one_more_corruption (fs, FATAL);	
-	return 1;
-    }
-    
-    /* make sure item looks like a directory */
-    if (get_ih_item_len (ih) / (DEH_SIZE + min_entry_size) < count) {
-	/* entry count can not be that big */
-	fsck_log ("%s: block %lu: The directory item %k has the exsessively "
-		  "big entry count (%u)\n",  __FUNCTION__, bh->b_blocknr, 
-		  &ih->ih_key, count);
-	
-	one_more_corruption (fs, FATAL);	
-	return 1;
-    }
-
-    if (get_deh_location (&deh[count - 1]) != DEH_SIZE * count) {
-	/* last entry should start right after array of dir entry headers */
-	fsck_log ("%s: block %lu: The directory item %k has the corrupted "
-		  "entry structure\n", __FUNCTION__, bh->b_blocknr, 
-		  &ih->ih_key);
-	
-	one_more_corruption (fs, FATAL);
-	return 1;
-    }
-    
-    /* check name hashing */
-    prev_name = B_I_PITEM(bh, ih) + get_ih_item_len(ih);
-    prev_off = 0;
-
-    for (i = 0; i < count; i ++, deh ++) {
-	namelen = name_in_entry_length (ih, deh, i);
-	name = name_in_entry (deh, i);
-	off = get_deh_offset (deh);
-	
-	if (namelen > (int)REISERFS_MAX_NAME_LEN(fs->fs_blocksize) || 
-	    name >= prev_name || off <= prev_off) 
-	{
-	    fsck_log ("%s: block %lu: The directory item %k has a broken entry "
-		      "(%d)\n", __FUNCTION__, bh->b_blocknr, &ih->ih_key, i);
-	    one_more_corruption (fs, FATAL);
-	    return 1;
-	}
-
-	if (!is_properly_hashed (fs, name, namelen, off)) {
-	    fsck_log ("%s: block %lu: The directory item %k has a not properly "
-		      "hashed entry (%d)\n", __FUNCTION__, bh->b_blocknr, 
-		      &ih->ih_key, i);
-	    
-	    one_more_corruption (fs, FATAL);
-	    return 1;
-	}
-
-	prev_name = name;
-	prev_off = off;
-    }
-
-    deh = B_I_DEH (bh, ih);
-    state = (1 << DEH_Visible2);
-    /* ok, items looks like a directory */
-    for (i = 0; i < count; i ++, deh ++) {
-	if (get_deh_state (deh) != state) {
-	    fsck_log ("bad_directory_item: block %lu: The directory item %k "
-		      "has the entry (%d) \"%.*s\" with a not legal state "
-		      "(%o), (%o) expected", bh->b_blocknr, &ih->ih_key, i, 
-		      name_in_entry_length (ih, deh, i), name_in_entry (deh, i), 
-		      get_deh_state (deh), state);
-	    
-	    if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
-		set_deh_state (deh, 1 << DEH_Visible2);
-		mark_buffer_dirty (bh);
-		fsck_log (" - corrected\n");
-	    } else 
-		one_more_corruption (fs, FIXABLE);
-	    
-	    fsck_log ("\n");
-	}
-    }
-
-    return 0;
-}
-
-
-static int bad_item (reiserfs_filsys_t * fs, struct buffer_head * bh, int num)
-{
-    struct item_head * ih;
-    int format;
-
-    ih = B_N_PITEM_HEAD (bh, num);
-
-    if ((get_ih_flags(ih)) != 0) {
-	if (fsck_mode(fs) != FSCK_FIX_FIXABLE) {
-	    one_more_corruption (fs, FIXABLE);
-	    fsck_log ("%s: vpf-10570: block %lu: The item header (%d) has not "
-		      "cleaned flags.\n", __FUNCTION__, bh->b_blocknr, num);
-	} else {
-	    fsck_log ("%s: vpf-10580: block %lu: Flags in the item header "
-		      "(%d) were cleaned\n", __FUNCTION__, bh->b_blocknr, num);
-	    
-	    clean_ih_flags(ih);
-	    mark_buffer_dirty(bh);
-	}
-    }
-
-    
-    if (is_stat_data_ih(ih) && get_ih_item_len(ih) == SD_SIZE)
-	format = KEY_FORMAT_2;
-    else if (is_stat_data_ih(ih) && get_ih_item_len(ih) == SD_V1_SIZE)
-	format = KEY_FORMAT_1;
-    else 
-	format = key_format(&ih->ih_key);
-    
-    if (format != get_ih_key_format(ih)) {
-	if (fsck_mode(fs) != FSCK_FIX_FIXABLE) {
-	    one_more_corruption (fs, FIXABLE);
-	    fsck_log ("%s: vpf-10710: block %lu: The format (%d) specified "
-		      "in the item header (%d) differs from the key format "
-		      "(%d).\n", __FUNCTION__, bh->b_blocknr, 
-		      get_ih_key_format(ih), num, format);
-	} else {
-	    fsck_log ("%s: vpf-10720: block %lu: The format (%d) specified in "
-		      "the item header (%d) was fixed to the key format (%d).\n", 
-		      __FUNCTION__, bh->b_blocknr, get_ih_key_format(ih), num, 
-		      format);
-
-	    set_ih_key_format(ih, format);
-	    mark_buffer_dirty(bh);
-	}
-    }
-
-    if (get_key_objectid (&ih->ih_key) == BADBLOCK_OBJID) {
-	if (get_key_dirid (&ih->ih_key) == BADBLOCK_DIRID && is_indirect_ih (ih)) {
-		/* Bad Block support. */
-		return bad_badblocks_item (fs, bh, ih);
-	}
-
-	goto error;
-    } else {
-	if (get_key_dirid (&ih->ih_key) == (__u32)-1) {
-	    /*  Safe Link support. Allowable safe links are:
-		-1 object_id           0x1	INDIRECT (truncate) or
-		-1 object_id   blocksize+1	DIRECT   (unlink) */
-	    if (is_direct_ih(ih) && get_offset(&ih->ih_key) == fs->fs_blocksize + 1) {
-		if (get_ih_item_len (ih) == 4) {
-		    /*fsck_log("vpf-00010: safe link found %k\n", &ih->ih_key);*/
-		    fsck_check_stat(fs)->safe ++;
-		    return 0;
-		}
-	    }
-
-	    if (is_indirect_ih(ih) && get_offset(&ih->ih_key) == 0x1) {
-		if (get_ih_item_len (ih) == 4) {
-		    /*fsck_log("vpf-00020: safe link found %k\n", &ih->ih_key);*/
-		    fsck_check_stat(fs)->safe ++;
-		    return 0;
-		}
-	    }
-	
-	    /* it does not look like safe link */
-	    goto error;
-	}
-    }
-    
-    if (is_stat_data_ih (ih))
-	return bad_stat_data (fs, bh, ih);
-
-    if (is_direct_ih (ih))
-	return bad_direct_item (fs, bh, ih);
-
-    if (is_indirect_ih(ih))
-	return bad_indirect_item (fs, bh, ih);
-    
-    return bad_directory_item (fs, bh, ih);
- 
- error:
-    one_more_corruption (fs, FATAL);
-    fsck_log ("%s: vpf-10310: block %lu, item %d: The item has a wrong "
-	      "key %k\n", __FUNCTION__, num, bh->b_blocknr, &ih->ih_key);
-    return 1;
-}
-
-
-/* 1 if i-th and (i-1)-th items can not be neighbors in a leaf */
-int bad_pair (reiserfs_filsys_t * fs, struct buffer_head * bh, int pos) {
-    struct item_head * ih;
-
-    ih = B_N_PITEM_HEAD (bh, pos);
-
-    if (comp_keys (&((ih - 1)->ih_key), &ih->ih_key) != -1) {
-	if (fsck_mode (fs) != FSCK_REBUILD)
-	    one_more_corruption (fs, FATAL);	
-	return 1;
-    }
-
-    if (is_stat_data_ih (ih))
-	/* left item must be of another object */
-	if (comp_short_keys (&((ih - 1)->ih_key), &ih->ih_key) != -1) {
-	    if (fsck_mode (fs) != FSCK_REBUILD)
-		one_more_corruption (fs, FATAL);	
-	    return 1;
-	}
-
-    if (get_key_objectid (&ih->ih_key) == BADBLOCK_OBJID) {
-	/* BAD BLOCK LIST SUPPORT. */
-	if (get_key_dirid(&ih->ih_key) == BADBLOCK_DIRID && 
-	    is_indirect_ih(ih) && comp_short_keys(&((ih - 1)->ih_key), 
-						  &ih->ih_key))
-		return 0;
-    } else {
-	/* Safe link support. */
-	if (get_key_dirid (&ih->ih_key) == (__u32)-1) {
-	    if (comp_short_keys (&((ih - 1)->ih_key), &ih->ih_key) == 0) {
-		if (is_indirect_ih (ih - 1) && is_direct_ih(ih))
-		    return 0; /* safe link */
-		/* they do not look like safe links */
-	    } else {
-		if (is_indirect_ih (ih) || is_direct_ih(ih))
-		    return 0; /* safe link */
-		/* it does not look like safe link */
-	    }
-	}
-    }
-    
-    if (is_direct_ih(ih)) {
-	/* left item must be indirect or stat data item of the same file */
-	if (not_of_one_file (&((ih - 1)->ih_key), &ih->ih_key)) {
-	    if (fsck_mode (fs) != FSCK_REBUILD)
-		one_more_corruption (fs, FATAL);
-	    
-	    return 1;
-	}
-
-	if (!((is_stat_data_ih (ih - 1) && get_offset (&ih->ih_key) == 1) ||
-	      (is_indirect_ih (ih - 1) && get_offset (&(ih - 1)->ih_key) + 
-	       get_bytes_number (ih-1, bh->b_size) == get_offset (&ih->ih_key)))) 
-	{
-	    if (fsck_mode (fs) != FSCK_REBUILD)
-		one_more_corruption (fs, FATAL);
-	    
-	    return 1;
-	}
-    }
-
-    if (is_indirect_ih (ih) || is_direntry_ih (ih)) {
-	/* left item must be stat data of the same object */
-	if (not_of_one_file (&((ih - 1)->ih_key), &ih->ih_key) ||
-	    !is_stat_data_ih (ih - 1)) {
-	    if (fsck_mode (fs) != FSCK_REBUILD)
-		one_more_corruption (fs, FATAL);
-	    return 1;
-	}
-    }
-
-    return 0;
-}
-
-/* 1 if block head or any of items is bad */
-static int bad_leaf (reiserfs_filsys_t * fs, struct buffer_head * bh)
-{
-    int i;
-
-    if (leaf_structure_check(fs, bh))
-	return 1;
-    
-    for (i = 0; i < B_NR_ITEMS (bh); i ++) {
-	if (bad_item (fs, bh, i)) {
-	    fsck_log ("bad_leaf: block %lu, item %d: The corrupted item found "
-		      "(%H)\n", bh->b_blocknr, i, B_N_PITEM_HEAD (bh, i));
-	}
-
-	if (i && bad_pair (fs, bh, i)) {
-	    fsck_log ("bad_leaf: block %lu, items %d and %d: The wrong order "
-		      "of items: %k, %k\n", bh->b_blocknr, i - 1, i, 
-		      &B_N_PITEM_HEAD (bh, i-1)->ih_key, 
-		      &B_N_PITEM_HEAD (bh, i)->ih_key);
-	}
-    }
-    return 0;
-}
-
-/* 1 if bh does not look like internal node */
-static int bad_internal (reiserfs_filsys_t * fs, struct buffer_head * bh)
-{
-    int i;
-
-    for (i = 0; i <= B_NR_ITEMS (bh); i ++) {
-        if (i != B_NR_ITEMS (bh) && i != B_NR_ITEMS (bh) - 1)
-	    /* make sure that keys are in increasing order */
-            if (comp_keys (B_N_PDELIM_KEY (bh, i), 
-			   B_N_PDELIM_KEY (bh, i + 1)) != -1) 
-	    {
-		fsck_log ("%s: vpf-10320: block %lu, items %d and %d: The "
-			  "wrong order of items: %k, %k\n", __FUNCTION__, 
-			  bh->b_blocknr, i, i + 1, B_N_PDELIM_KEY (bh, i), 
-			  B_N_PDELIM_KEY (bh, i + 1));
-		
-		one_more_corruption (fs, FATAL);
-                return 1;
-	    }
-
-	/* make sure that the child is correct */
-        if (bad_block_number (fs, get_dc_child_blocknr (B_N_CHILD (bh,i)))) {
-	    fsck_log ("%s: vpf-10330: block %lu, item %d: The internal item "
-		      "points to the not legal block (%lu)\n", __FUNCTION__, 
-		      bh->b_blocknr, i, get_dc_child_blocknr (B_N_CHILD (bh,i)));
-	    
-            one_more_corruption (fs, FATAL);
-            return 1;
-	}
-    }
-    return 0;
-}
-
-
-/* h == 0 for root level. block head's level == 1 for leaf level  */
-static inline int h_to_level (reiserfs_filsys_t * fs, int h)
-{
-    return get_sb_tree_height (fs->fs_ondisk_sb) - h - 1;
-}
-
-#if 0
-int dc_fix(struct buffer_head *bh, int pos, __u32 block) {
-	if (!bh || !bh->b_data)
-		return -1;
-
-	if (B_NR_ITEMS(bh) < pos)
-		return -1;
-
-	set_dc_child_blocknr(B_N_CHILD(bh,pos), block);
-
-	mark_buffer_dirty(bh);
-	bwrite(bh);
-
-	return 0;
-}
-
-/* Removes @N-th key and @(N+1) pointer. */
-int internal_remove(struct buffer_head *bh, int pos) {
-	char *delete;
-	__u32 nr;
-	
-	if (!bh || !bh->b_data)
-		return -1;
-
-	if (B_NR_ITEMS(bh) < pos)
-		return -1;
-
-	delete = (char *)B_N_CHILD(bh, pos + 2);
-	memmove(delete - DC_SIZE, delete, 
-		bh->b_size - (delete - bh->b_data));
-
-	delete = (char *)B_N_PDELIM_KEY(bh, pos + 1);
-	memmove(delete - KEY_SIZE, delete, 
-		bh->b_size - (delete - bh->b_data));
-
-	nr = B_NR_ITEMS(bh) - 1;
-	
-	set_blkh_nr_items(B_BLK_HEAD(bh), nr);
-	set_blkh_free_space(B_BLK_HEAD(bh), bh->b_size - 
-			    (BLKH_SIZE + KEY_SIZE * nr + DC_SIZE * (nr + 1)));
-	
-	mark_buffer_dirty(bh);
-	bwrite(bh);
-	
-	return 0;
-}
-
-int leaf_fix_key_oid(struct buffer_head *bh, int pos, __u32 oid) {
-	struct item_head * ih;
-
-
-	if (!bh || !bh->b_data)
-		return -1;
-
-	if (B_NR_ITEMS(bh) < pos)
-		return -1;
-
-	ih = B_N_PITEM_HEAD (bh, pos);
-	set_key_objectid(&ih->ih_key, oid);
-	
-	mark_buffer_dirty(bh);
-	bwrite(bh);
-
-	return 0;
-}
-#endif
-
-/* bh must be formatted node. blk_level must be tree_height - h + 1 */
-static int bad_node (reiserfs_filsys_t * fs, struct buffer_head ** path, int h)
-{
-    struct buffer_head ** pbh = &path[h];
-
-    if (B_LEVEL (*pbh) != h_to_level (fs, h)) {
-       	fsck_log ("block %lu: The level of the node (%d) is not correct, "
-		  "(%d) expected\n", (*pbh)->b_blocknr, B_LEVEL (*pbh), 
-		  h_to_level (fs, h));
-	
-	one_more_corruption (fs, FATAL);
-        return 1;
-    }
-
-    if (bad_block_number (fs, (*pbh)->b_blocknr)) {
-	one_more_corruption (fs, FATAL);
-	fsck_log ("%s: vpf-10340: The node in the wrong block number (%lu) "
-		  "found in the tree\n",  __FUNCTION__, (*pbh)->b_blocknr);
-	return 1;
-    }
-
-    if (got_already (fs, (*pbh)->b_blocknr)) {
-	fsck_log ("%s: vpf-10350: The block (%lu) is used more than once "
-		  "in the tree.\n",  __FUNCTION__, (*pbh)->b_blocknr);
-	one_more_corruption (fs, FATAL);
-        return 1;
-    }
-    
-    if (is_leaf_node (*pbh)) {
-	fsck_check_stat (fs)->leaves ++;
-	return bad_leaf (fs, *pbh);
-    }
-    
-    fsck_check_stat (fs)->internals ++;
-    return bad_internal (fs, *pbh);
-}
-
-
-/* internal node bh must point to block */
-static int get_pos (struct buffer_head * bh, unsigned long block)
-{
-    int i;
-
-    for (i = 0; i <= B_NR_ITEMS (bh); i ++) {
-	if (get_dc_child_blocknr (B_N_CHILD (bh, i)) == block)
-	    return i;
-    }
-    die ("An internal pointer to the block (%lu) cannot be found in the node (%lu)", 
-	block, bh->b_blocknr);
-    return 0;
-}
-
-
-/* path[h] - leaf node */
-static struct key * lkey (struct buffer_head ** path, int h)
-{
-    int pos;
-
-    while (h > 0) {
-       pos = get_pos (path[h - 1], path[h]->b_blocknr);
-       if (pos)
-           return B_N_PDELIM_KEY(path[h - 1], pos - 1);
-       h --;
-    }
-    return 0;
-}
-
-
-/* path[h] - leaf node */
-static struct key * rkey (struct buffer_head ** path, int h)
-{
-    int pos;
-
-    while (h > 0) {
-       pos = get_pos (path[h - 1], path[h]->b_blocknr);
-       if (pos != B_NR_ITEMS (path[h - 1]))
-           return B_N_PDELIM_KEY (path[h - 1], pos);
-       h --;
-    }
-    return 0;
-}
-
-
-/* are all delimiting keys correct */
-static int bad_path (reiserfs_filsys_t * fs, struct buffer_head ** path, int h1)
-{
-    int h = 0;
-    struct key * dk;
-    int pos = 0;
-
-    while (path[h])
-	h ++;
-
-    h--;
-    
-    // path[h] is leaf
-    if (h != h1)
-	die ("bad_path: The leaf is expected as the last element in the path");
-
-    if (h)
-	pos = get_pos (path[h - 1], path[h]->b_blocknr);
-
-    dk = lkey (path, h);
-    if (dk && comp_keys (dk, B_N_PKEY (path[h], 0))) {
-	/* left delimiting key must be equal to the key of 0-th item in the
-	   node */
-	fsck_log ("bad_path: The left delimiting key %k of the node (%lu) must "
-	    "be equal to the first element's key %k within the node.\n", dk, 
-	    path[h]->b_blocknr, B_N_PKEY (path[h], 0));
-	one_more_corruption (fs, FATAL);
-	return 1;
-    }
-    
-    dk = rkey (path, h);
-    if (dk && comp_keys (dk, B_N_PKEY (path[h],
-       get_blkh_nr_items (B_BLK_HEAD (path[h])) - 1)) != 1) {
-	/* right delimiting key must be gt the key of the last item in the node */
-	fsck_log ("bad_path: The right delimiting key %k of the node (%lu) must "
-	    "be greater than the last (%d) element's key %k within the node.\n", 
-	    dk, path[h]->b_blocknr, get_blkh_nr_items (B_BLK_HEAD (path[h])) - 1, 
-	    B_N_PKEY (path[h], get_blkh_nr_items (B_BLK_HEAD (path[h])) - 1));
-	one_more_corruption (fs, FATAL);
-	return 1;
-    }
-
-    if (h && (get_dc_child_size (B_N_CHILD(path[h-1],pos)) +
-    	get_blkh_free_space ((struct block_head *)path[h]->b_data) +
-    	BLKH_SIZE != path[h]->b_size))
-    {
-	/* wrong dc_size */
-	fsck_log ("bad_path: block %lu, pointer %d: The used space (%d) of the "
-	    "child block (%lu)", path[h-1]->b_blocknr, pos, 
-	    get_dc_child_size(B_N_CHILD(path[h-1],pos)), path[h]->b_blocknr);
-	fsck_log (" is not equal to the (blocksize (4096) - free space (%d) - "
-	    "header size (%u))", 
-	    get_blkh_free_space((struct block_head *)path[h]->b_data), BLKH_SIZE);
-	
-	if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
-	    set_dc_child_size (B_N_CHILD(path[h-1],pos), path[h]->b_size -
-			       get_blkh_free_space ((struct block_head *)path[h]->b_data) 
-			       - BLKH_SIZE);
-	    fsck_log (" - corrected to (%lu)\n", 
-		      get_dc_child_size (B_N_CHILD(path[h-1], pos)));
-	    
-	    mark_buffer_dirty (path[h-1]);
-	} else {
-	    one_more_corruption (fs, FIXABLE);
-	    fsck_log ("\n");
-	    return 1;
-	}
-    }
-
-    return 0;
-}
-
-static void before_check_fs_tree (reiserfs_filsys_t * fs) {
-    init_control_bitmap (fs);
-
-    source_bitmap = reiserfs_create_bitmap (get_sb_block_count (fs->fs_ondisk_sb));
-    reiserfs_bitmap_copy (source_bitmap, fs->fs_bitmap2);
-
-    proper_id_map (fs) = id_map_init();
-}
-
-static void after_check_fs_tree (reiserfs_filsys_t * fs) {
-    if (fsck_mode(fs) == FSCK_FIX_FIXABLE) {
-        reiserfs_flush_to_ondisk_bitmap (fs->fs_bitmap2, fs);
-        reiserfs_flush (fs);
-        fs->fs_dirt = 1;
-	reiserfs_bitmap_delta (source_bitmap, control_bitmap);
-	fsck_deallocate_bitmap(fs) = source_bitmap;
-    } else 
-	reiserfs_delete_bitmap (source_bitmap);
-    
-    reiserfs_delete_bitmap (control_bitmap);
-    flush_buffers (fs->fs_dev);
-}
-
-/* pass internal tree of filesystem */
-void check_fs_tree (reiserfs_filsys_t * fs)
-{
-    before_check_fs_tree (fs);
-    
-    fsck_progress ("Checking internal tree..");
-    pass_through_tree (fs, bad_node, bad_path, fsck_mode(fs) == FSCK_AUTO ? 2 : -1);
-    /* internal tree is correct (including all objects have correct
-       sequences of items) */
-    fsck_progress ("finished\n");
-    
-    /* compare created bitmap with the original */
-    if (fsck_mode(fs) == FSCK_AUTO) {
-	if (auto_handle_bitmaps(fs)) {
-	    fprintf(stderr, "The on-disk bitmap looks corrupted.");
-	    one_more_corruption(fs, FIXABLE);
-	}
-	id_map_free(proper_id_map(fs));
-    } else
-	handle_bitmaps (fs);
-    
-    after_check_fs_tree (fs);
-}
-
-static int clean_attributes_handler (reiserfs_filsys_t * fs, 
-				     struct buffer_head ** path, 
-				     int h) 
-{
-    struct buffer_head * bh = path[h];
-    int i;
-
-    if (B_LEVEL (bh) != h_to_level (fs, h)) {
-       	reiserfs_panic ("The node (%lu) with wrong level (%d) found in the "
-			"tree, (%d) expected\n", bh->b_blocknr, B_LEVEL (bh), 
-			h_to_level (fs, h));
-    }
-
-    if (!is_leaf_node (bh))
-        return 0;
-
-    for (i = 0; i < B_NR_ITEMS (bh); i ++) {
-        if (is_stat_data_ih (B_N_PITEM_HEAD (bh, i)) &&
-            get_ih_item_len (B_N_PITEM_HEAD (bh, i)) == SD_SIZE) {
-	    set_sd_v2_sd_attrs((struct stat_data *)B_N_PITEM(bh, i), 0);
-	    mark_buffer_dirty (bh);
-	}
-    }
-
-    return 0;
-}
-
-void do_clean_attributes (reiserfs_filsys_t * fs) {
-    pass_through_tree (fs, clean_attributes_handler, NULL, -1);
-    set_sb_v2_flag (fs->fs_ondisk_sb, reiserfs_attrs_cleared);
-    mark_buffer_dirty (fs->fs_super_bh);
-}
diff --git a/fsck/fsck.h b/fsck/fsck.h
deleted file mode 100644
index 16648a5..0000000
--- a/fsck/fsck.h
+++ /dev/null
@@ -1,514 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#define _GNU_SOURCE
-
-#ifndef HAVE_CONFIG_H
-#  include "config.h"
-#endif
-
-#include "io.h"
-#include "misc.h"
-#include "reiserfs_lib.h"
-
-#include <string.h>
-#include <errno.h>
-#include <time.h>
-#include <assert.h>
-
-#include "../version.h"
-
-/* main.c */
-extern reiserfs_filsys_t * fs;
-int main (int argc, char * argv []);
-
-/* Exit codes. */
-#define EXIT_OK		0
-#define EXIT_FIXED	1
-#define EXIT_REBOOT	2
-#define EXIT_FATAL	4
-#define EXIT_FIXABLE	6
-#define EXIT_OPER	8   /* Some operation returns error. */
-#define EXIT_USER	16
-
-/*
- * modes
- */
-#define DO_NOTHING              0
-#define FSCK_CHECK              1
-#define FSCK_FIX_FIXABLE        2
-#define FSCK_SB                 3
-#define FSCK_REBUILD            4
-#define FSCK_ROLLBACK_CHANGES   5
-#define FSCK_CLEAN_ATTRIBUTES	7
-#define FSCK_AUTO               8 /* -a || -p specified */
-
-/* temporary */
-#define DO_TEST                 9
-
-/*
- * options
- */
-
-#define OPT_INTERACTIVE                 1 << 0
-#define OPT_ADJUST_FILE_SIZE            1 << 1	/* not default yet */
-#define OPT_QUIET                       1 << 2	/* no "speed" info */
-#define OPT_SILENT                      1 << 3	/* no complains about found corruptions */
-#define OPT_BACKGROUND                  1 << 4
-#define OPT_SKIP_JOURNAL                1 << 5
-#define OPT_HASH_DEFINED                1 << 6
-#define OPT_SAVE_PASSES_DUMP            1 << 7
-#define OPT_SAVE_ROLLBACK               1 << 8
-#define OPT_YES				1 << 9
-#define BADBLOCKS_FILE               	1 << 10
-
-
-/* pass0.c */
-void pass_0 (reiserfs_filsys_t *);
-void load_pass_0_result (FILE *, reiserfs_filsys_t *);
-
-int leaf_structure_check(reiserfs_filsys_t * fs, struct buffer_head * bh);
-
-int is_used_leaf (unsigned long block);
-int is_good_unformatted (unsigned long block);
-void mark_good_unformatted (unsigned long block);
-int is_bad_unformatted (unsigned long block);
-
-int are_there_allocable_blocks (unsigned int amout_needed);
-unsigned long alloc_block (void);
-void make_allocable (unsigned long block);
-void register_uninsertable (unsigned long block);
-void register_saved_item (void);
-int still_bad_unfm_ptr_1 (unsigned long block);
-int still_bad_unfm_ptr_2 (unsigned long block);
-void make_alloc_bitmap (reiserfs_filsys_t *);
-
-void delete_aux_bitmaps ();
-void set_aux_bitmaps(reiserfs_bitmap_t * leaves, reiserfs_bitmap_t * good, reiserfs_bitmap_t * bad);
-
-#define __is_marked(name,block) reiserfs_bitmap_test_bit (name##_bitmap, block)
-#define __mark(name,block) reiserfs_bitmap_set_bit (name##_bitmap, block)
-#define __unmark(name,block) reiserfs_bitmap_clear_bit (name##_bitmap, block)
-
-/* unformatted in tree */
-extern reiserfs_bitmap_t * bad_unfm_in_tree_once_bitmap;
-#define is_bad_unfm_in_tree_once(block) __is_marked (bad_unfm_in_tree_once, block)
-#define mark_bad_unfm_in_tree_once(block) __mark (bad_unfm_in_tree_once, block)
-
-
-
-/* pass1.c */
-void pass_1 (reiserfs_filsys_t *);
-void load_pass_1_result (FILE *, reiserfs_filsys_t *);
-struct buffer_head * make_buffer (int dev, unsigned long blocknr, int size, char * data);
-void build_the_tree (void);
-extern int g_unaccessed_items;
-int is_item_reachable (struct item_head * ih);
-void mark_item_reachable (struct item_head * ih, struct buffer_head * bh);
-void mark_item_unreachable (struct item_head * ih);
-
-struct si * remove_saved_item (struct si * si);
-int tree_is_empty (void);
-void make_single_leaf_tree (struct buffer_head * bh);
-
-
-/* pass2.c */
-void pass_2 (reiserfs_filsys_t *);
-void load_pass_2_result (reiserfs_filsys_t *);
-void insert_item_separately (struct item_head * ih, char * item, int was_in_tree);
-void save_item (struct si ** head, struct item_head * ih, char * item, __u32 blocknr);
-struct si * save_and_delete_file_item (struct si * si, struct path * path);
-void take_bad_blocks_put_into_tree (void);
-void rewrite_object (struct item_head * ih, int do_remap);
-void pass_2_take_bad_blocks_put_into_tree (void);
-/*int is_remapped (struct item_head * ih);*/
-void link_relocated_files (void);
-int should_relocate (struct item_head * ih);
-void relocate_dir (struct item_head * ih, int change_ih);
-
-extern __u32 objectid_for_relocation (struct key * key);
-extern void linked_already(struct key *new_key);
-
-/* file.c */
-struct si {
-    struct item_head si_ih;
-    char * si_dnm_data;
-    struct si * si_next;
-    __u32 si_blocknr;
-
-    // changed by XB;
-    struct si * last_known;
-};
-void put_saved_items_into_tree (struct si *);
-int reiserfsck_file_write (struct item_head * ih, char * item, int was_in_tree);
-int are_file_items_correct (struct item_head * sd_ih, void * sd, __u64 * size, __u32 * blocks, int mark_passed_items, int * symlink);
-int delete_N_items_after_key(struct key * start_key, struct si ** save_here, int skip_dir_items, int n_to_delete);
-void rewrite_file (struct item_head * ih, int should_relocate, int should_change_ih);
-
-
-
-/* semantic.c */
-
-/* return values for check_regular_file and check_semantic_tree */
-#define OK 0
-#define STAT_DATA_NOT_FOUND -1
-#define DIRECTORY_HAS_NO_ITEMS -2
-#define RELOCATED -3
-#define LOOP_FOUND -4
-
-void load_semantic_result (FILE *, reiserfs_filsys_t *);
-
-void pass_3_semantic (reiserfs_filsys_t *);
-void semantic_check (void);
-int check_semantic_tree (struct key * key, struct key * parent, int is_dot_dot, int lost_found, struct item_head * new_ih);
-void zero_nlink (struct item_head * ih, void * sd);
-int not_a_directory (void * sd);
-int not_a_regfile (void * sd);
-int fix_obviously_wrong_sd_mode (struct path * path);
-int is_dot_dot (char * name, int namelen);
-int is_dot (char * name, int namelen);
-/*void create_dir_sd (reiserfs_filsys_t * fs, 
-  struct path * path, struct key * key);*/
-int rebuild_check_regular_file (struct path * path, void * sd,
-				struct item_head * new_ih);
-int rebuild_semantic_pass (struct key * key, struct key * parent, int is_dot_dot,
-			   struct item_head * new_ih);
-
-
-
-
-/* lost+found.c */
-void pass_3a_look_for_lost (reiserfs_filsys_t *);
-
-void load_lost_found_result (reiserfs_filsys_t *);
-
-/* pass4.c */
-void pass_4_check_unaccessed_items (void);
-
-/* check.c */
-int is_leaf_bad (struct buffer_head * bh);
-int is_bad_item (struct buffer_head * bh, struct item_head *, char *);
-/*int check_file_system (void);*/
-void reiserfsck_check_pass1 (void);
-/*char * bad_name (char * name, int namelen);*/
-/* to test result of direcotry item recovering on pass 0 */
-int is_bad_directory (struct item_head * ih, char * item, int dev, int blocksize);
-
-
-//extern int bad_block_number (struct super_block * s, blocknr_t block);
-
-/* check_tree.c */
-void check_fs_tree (reiserfs_filsys_t *);
-void do_clean_attributes (reiserfs_filsys_t * fs);
-int bad_pair (reiserfs_filsys_t *, struct buffer_head * bh, int i);
-int bad_leaf_2 (reiserfs_filsys_t *, struct buffer_head * bh);
-
-#if 0
-extern int should_be_relocated (struct key * key);
-extern void to_be_relocated (struct key * key);
-extern void clear_relocated_list(void);
-#endif
-
-/* ustree.c */
-void reiserfsck_paste_into_item (struct path * path, const char * body, int size);
-void reiserfsck_insert_item (struct path * path, struct item_head * ih, const char * body);
-void reiserfsck_delete_item (struct path * path, int temporary);
-void reiserfsck_cut_from_item (struct path * path, int cut_size);
-/*typedef	int (comp3_function_t)(void * key1, void * key2, int version);*/
-/*typedef int (comp_function_t)(struct key * key1, struct key * key2);*/
-/*int ubin_search_id(__u32 * id, __u32 * base, __u32 number, __u32 * pos);*/
-/*int usearch_by_key (struct super_block * s, struct key * key, struct path * path);*/
-/*int usearch_by_key_3 (struct super_block * s, struct key * key, struct path * path, int * repeat, int stop_level,
-		      comp3_function_t comp_func, int version);		
-		      int usearch_by_entry_key (struct super_block * s, struct key * key, struct path * path);*/
-
-typedef int do_after_read_t (reiserfs_filsys_t *, struct buffer_head **, int h);
-typedef int do_on_full_path_t (reiserfs_filsys_t *, struct buffer_head **, int);
-void pass_through_tree (reiserfs_filsys_t *, do_after_read_t, do_on_full_path_t, int depth);
-
-/* bitmap.c */
-int reiserfsck_reiserfs_new_blocknrs (reiserfs_filsys_t * fs,
-				      unsigned long * pblocknrs,
-				      unsigned long start_from,
-				      int amount_needed);
-int reiserfsck_reiserfs_free_block (reiserfs_filsys_t * fs, unsigned long block);
-struct buffer_head * reiserfsck_get_new_buffer (unsigned long start);
-int is_block_used (unsigned long block);
-void mark_block_used (unsigned long block, int check_hardware);
-void mark_block_uninsertable (unsigned long block);
-int is_block_uninsertable (unsigned long block);
-
-
-/* objectid.c */
-int comp_ids(const void *p1, const void *p2);
-
-typedef struct id_map {
-    void **index;
-    __u32 count, last_used;
-} id_map_t;
-
-id_map_t *id_map_init();
-void id_map_free(id_map_t *);
-int id_map_test(id_map_t *map, __u32 id);
-int id_map_mark(id_map_t *map, __u32 id);
-__u32 id_map_alloc(id_map_t *map);
-void id_map_flush(struct id_map * map, reiserfs_filsys_t * fs);
-    
-/* FIXME: Needs to be implemented
-void fetch_objectid_map (struct id_map * map, reiserfs_filsys_t * fs);
-
-void reiserfs_objectid_map_save (FILE * fp, struct id_map * id_map);
-struct id_map * reiserfs_objectid_map_load (FILE * fp);
-*/
-
-void mark_formatted_pointed_by_indirect (__u32);
-int is_formatted_pointed_by_indirect (__u32);
-
-#define MAP_NOT_PACKED	0
-#define MAP_PACKED	1
-
-struct pass0_stat {
-    unsigned long dealt_with; /* number of blocks read during pass 0 */
-    unsigned long leaves; /* blocks looking like reiserfs leaves found */
-    unsigned long leaves_corrected;
-    unsigned long all_contents_removed;
-    unsigned long too_old_leaves; /* these are leaves which contains
-                                     direntries with different hash from the
-                                     one specified with -h */
-    unsigned long wrong_pointers; /* pointers in indirect items pointing to
-                                     wrong area */
-    unsigned long pointed; /* pointers blocks of device pointed by all
-                              indirect items */
-};
-
-
-struct pass1_stat {
-    unsigned long leaves; /* leaves found in pass0 to build tree off */
-    unsigned long inserted_leaves; /* number of leaves inserted by pointers */
-    unsigned long pointed_leaves; /* pointers in indirect items which pointed
-				     to leaves (zeroed) */
-    unsigned long uninsertable_leaves;
-    unsigned long non_unique_pointers; /* pointers to already pointed unformatted nodes */
-    unsigned long correct_pointers;
-    unsigned long saved_items; /* items saved on pass1: should be 0 */
-    unsigned long allocable_blocks; /* allocable blocks before pass 1 starts */
-};
-
-
-struct pass2_stat {
-    unsigned long leaves; /* leaves inserted item by item */
-    unsigned long safe_non_unique_pointers; /* these are just the same pointers */
-    unsigned long relocated;
-    unsigned long shared_objectids;
-    unsigned long rewritten;
-};
-
-
-struct semantic_stat {
-    unsigned long oid_sharing_files_relocated;
-    unsigned long regular_files;
-    unsigned long directories;
-    unsigned long symlinks;
-    unsigned long broken_files;
-    unsigned long others;
-    unsigned long fixed_sizes;
-    unsigned long oid_sharing;
-    unsigned long oid_sharing_dirs_relocated;
-    unsigned long deleted_entries;
-};
-
-
-struct lost_found_stat {
-    unsigned long dir_recovered;
-    unsigned long empty_lost_dirs;
-    unsigned long lost_found;
-    unsigned long lost_found_files;
-    unsigned long lost_found_dirs;
-    unsigned long oid_sharing;
-    unsigned long oid_sharing_dirs_relocated;    
-    unsigned long oid_sharing_files_relocated;    
-};
-
-
-struct pass_4_stat {
-    unsigned long deleted_items;
-};
-
-
-struct rebuild_info {
-    union {
-	struct pass0_stat pass0;
-	struct pass1_stat pass1;
-	struct pass2_stat pass2;
-	struct {
-	    struct semantic_stat semantic;
-	    struct lost_found_stat lost_found;
-	} tree;
-	struct pass_4_stat pass4;
-    } pass_u;
-
-    /* bitmaps */
-    reiserfs_bitmap_t * source_bitmap;
-    reiserfs_bitmap_t * new_bitmap;
-    reiserfs_bitmap_t * allocable_bitmap;
-    reiserfs_bitmap_t * uninsertables;
-
-    char * bitmap_file_name;
-    /*char * new_bitmap_file_name;*/
-    char * passes_dump_file_name; /* after pass 0, 1 or 2 reiserfsck can store
-                                     data with which it will be able to start
-                                     from the point it stopped last time at */
-
-    unsigned short mode;
-    unsigned long options;
-
-    /* rollback file */
-    char * rollback_file;
-  
-    /* hash hits stat */
-    int hash_amount;
-    unsigned long * hash_hits;
-    char * defined_hash;
-
-#define USED_BLOCKS 1
-#define EXTERN_BITMAP 2
-#define ALL_BLOCKS 3
-    int scan_area;
-    int use_journal_area;
-    int test;
-};
-
-
-struct check_info {
-    unsigned long bad_nodes;
-    unsigned long fatal_corruptions;
-    unsigned long fixable_corruptions;
-//    unsigned long badblocks_corruptions;
-    unsigned long leaves;
-    unsigned long internals;
-    unsigned long dirs;
-    unsigned long files;
-    unsigned long safe;
-    unsigned long unfm_pointers;
-    unsigned long zero_unfm_pointers;
-    reiserfs_bitmap_t * deallocate_bitmap;
-};
-
-
-struct fsck_data {
-    unsigned short mode; /* check, rebuild, etc*/
-    unsigned long options;
-    unsigned long mounted;
-
-    struct rebuild_info rebuild;
-    struct check_info check;
-
-    char * journal_dev_name; 
-    /* log file name and handle */
-    char * log_file_name;
-    FILE * log;
-
-    /* this is a file where reiserfsck will explain what it is doing. This is
-       usually stderr. But when -g is specified - reiserfsck runs in the
-       background and append progress information into 'fsck.run' */
-    FILE * progress;
-
-    /* objectid maps */
-    id_map_t * proper_id_map;
-    id_map_t * semantic_id_map; /* this objectid map is used to
-                                        cure objectid sharing problem */
-};
-
-
-#define fsck_data(fs) ((struct fsck_data *)((fs)->fs_vp))
-#define pass_0_stat(fs) (&(fsck_data(fs)->rebuild.pass_u.pass0))
-#define pass_1_stat(fs) (&(fsck_data(fs)->rebuild.pass_u.pass1))
-#define pass_2_stat(fs) (&(fsck_data(fs)->rebuild.pass_u.pass2))
-#define sem_pass_stat(fs) (&(fsck_data(fs)->rebuild.pass_u.tree.semantic))
-#define lost_found_pass_stat(fs) (&(fsck_data(fs)->rebuild.pass_u.tree.lost_found))
-#define pass_4_stat(fs) (&(fsck_data(fs)->rebuild.pass_u.pass4))
-
-#define fsck_check_stat(fs) (&(fsck_data(fs)->check))
-
-
-#define proper_id_map(s) fsck_data(s)->proper_id_map
-#define semantic_id_map(s) fsck_data(s)->semantic_id_map
-
-#define fsck_source_bitmap(fs) fsck_data(fs)->rebuild.source_bitmap
-#define fsck_new_bitmap(fs) fsck_data(fs)->rebuild.new_bitmap
-#define fsck_allocable_bitmap(fs) fsck_data(fs)->rebuild.allocable_bitmap
-#define fsck_uninsertables(fs) fsck_data(fs)->rebuild.uninsertables
-
-#define fsck_deallocate_bitmap(fs) fsck_data(fs)->check.deallocate_bitmap
-
-#define fsck_interactive(fs) (fsck_data(fs)->options & OPT_INTERACTIVE)
-//#define fsck_fix_fixable(fs) (fsck_data(fs)->options & OPT_FIX_FIXABLE)
-
-#define fsck_run_one_step(fs) (fsck_data(fs)->options & OPT_SAVE_PASSES_DUMP)
-
-#define fsck_save_rollback(fs) (fsck_data(fs)->options & OPT_SAVE_ROLLBACK)
-
-/* change unknown modes (corrupted) to mode of regular files, fix file
-   sizes which are bigger than a real file size, relocate files with
-   shared objectids (this slows fsck down (when there are too many
-   files sharing the same objectid), it will also remove other names
-   pointing to this file */
-#define fsck_adjust_file_size(fs) (fsck_data(fs)->options & OPT_ADJUST_FILE_SIZE)
-#define fsck_quiet(fs)	(fsck_data(fs)->options & OPT_QUIET)
-#define fsck_silent(fs)	(fsck_data(fs)->options & OPT_SILENT)
-#define fsck_in_background(fs) (fsck_data(fs)->options & OPT_BACKGROUND)
-#define fsck_hash_defined(fs) (fsck_data(fs)->options & OPT_HASH_DEFINED)
-#define fsck_skip_journal(fs) (fsck_data(fs)->options & OPT_SKIP_JOURNAL)
-#define fsck_yes_all(fs) (fsck_data(fs)->options & OPT_YES)
-
-
-#define fsck_mode(fs) (fsck_data(fs)->mode)
-#define fsck_log_file(fs) (fsck_data(fs)->log)
-#define fsck_progress_file(fs) ((fs && fsck_data(fs)->progress) ? fsck_data(fs)->progress : stderr)
-
-/* name of file where we store information for continuing */
-#define state_dump_file(fs) fsck_data(fs)->rebuild.passes_dump_file_name
-
-/* name of file where we store rollback data */
-#define state_rollback_file(fs) fsck_data(fs)->rebuild.rollback_file
-
-int fsck_user_confirmed (reiserfs_filsys_t * fs, char * q, char * a, int default_answer);
-void stage_report (int, reiserfs_filsys_t *);
-
-/* journal.c */
-int replay_journal (reiserfs_filsys_t *);
-
-/*pass1: rebuild super block*/
-void rebuild_sb (reiserfs_filsys_t * fs, char * filename, struct fsck_data * data);
-
-
-#define fsck_log(fmt, list...) \
-{\
-if (!fsck_silent (fs))\
-    reiserfs_warning (fsck_log_file (fs), fmt, ## list);\
-}
-
-#define fsck_progress(fmt, list...) \
-{\
-reiserfs_warning (fsck_progress_file(fs), fmt, ## list);\
-fflush (fsck_progress_file(fs));\
-}
-
-#define FATAL	1
-#define FIXABLE 2
-
-void one_more_corruption(reiserfs_filsys_t *fs, int kind);
-void one_less_corruption(reiserfs_filsys_t *fs, int kind);
-
-/*
-#define one_more_corruption(fs,kind) fsck_check_stat (fs)->kind##_corruptions++
-#define one_less_corruption(fs,kind) fsck_check_stat (fs)->kind##_corruptions--
-*/
-
-#define fsck_exit(fmt, list...) \
-{\
-reiserfs_warning (fsck_progress_file(fs), fmt, ## list);\
-exit (EXIT_USER);\
-}
diff --git a/fsck/info.c b/fsck/info.c
deleted file mode 100644
index d5621dd..0000000
--- a/fsck/info.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#include "fsck.h"
-
-
-int fsck_user_confirmed (reiserfs_filsys_t * fs, char * q, char * a, int default_answer)
-{
-    if (!fsck_interactive (fs))
-	return default_answer;
-    
-    return user_confirmed (fsck_progress_file (fs), q, a);
-}
-
-
-void stage_report (int pass, reiserfs_filsys_t * fs)
-{
-    switch (pass) {
-    case 0: 
-    {
-	struct pass0_stat * stat;
-
-	/* what has been done on pass 0 */	
-	stat = pass_0_stat (fs);
-	fsck_progress ("\tRead blocks (but not data blocks) %lu\n", stat->dealt_with);
-	fsck_progress ("\t\tLeaves among those %lu\n", stat->leaves);
-	if (stat->leaves_corrected)
-	    fsck_progress ("\t\t\t- corrected leaves %lu\n", stat->leaves_corrected);
-	if (stat->all_contents_removed)
-	    fsck_progress ("\t\t\t- leaves all contents of which could not be saved and deleted %lu\n",
-			   stat->all_contents_removed);
-	if (stat->too_old_leaves)
-	    fsck_progress ("\t\t\t- too old leaves %lu (skipped)\n", stat->too_old_leaves);
-	if (stat->wrong_pointers)
-	    fsck_progress ("\t\tpointers in indirect items to wrong area %lu (zeroed)\n",
-			   stat->wrong_pointers);
-	fsck_progress ("\t\tObjectids found %lu\n", proper_id_map(fs)->count);
-    }
-    break;
-	
-    case 1:
-    {
-	struct pass1_stat * stat;
-
-	/* what has been done on pass 1 */
-	stat = pass_1_stat (fs);
-	fsck_progress ("\t%lu leaves read\n", stat->leaves);
-	fsck_progress ("\t\t%lu inserted\n", stat->inserted_leaves);
-	if (stat->pointed_leaves)
-	    fsck_progress ("\t\t\t- pointers in indirect items pointing to metadata %lu (zeroed)\n",
-			   stat->pointed_leaves);
-	if (stat->saved_items)
-	    fsck_progress ("\tSaved %lu items\n", stat->saved_items);
-	if (stat->uninsertable_leaves)
-	    fsck_progress ("\t\t%lu not inserted\n", stat->uninsertable_leaves);
-	if (stat->non_unique_pointers)
-	    fsck_progress ("\tnon-unique pointers in indirect items (zeroed) %lu\n",
-			   stat->non_unique_pointers);
-    }
-    break;
-
-    case 2:
-    {
-	struct pass2_stat * stat;
-
-	/* what has been done on pass 2 */
-	stat = pass_2_stat (fs);
-	if (stat->leaves)
-	    fsck_progress ("\tLeaves inserted item by item %lu\n", stat->leaves);
-	if (stat->safe_non_unique_pointers)
-	    fsck_progress ("\t%lu \n",
-			   stat->safe_non_unique_pointers);
-	if (stat->shared_objectids)
-	    fsck_progress ("\t%lu shared objectids\n", stat->shared_objectids);
-	if (stat->relocated)
-	    fsck_progress ("\tFiles relocated because of key conflicts with a directory %lu\n",
-			   stat->relocated);
-	if (stat->rewritten)
-	    fsck_progress ("\tFiles rewritten %lu\n", stat->rewritten);
-    }
-    break;
-
-    case 3: /* semantic */
-    {
-	struct semantic_stat * stat;
-
-	/* what has been done on the semantic pass */
-	stat = sem_pass_stat (fs);
-	fsck_progress ("\tFiles found: %ld\n", stat->regular_files);
-	fsck_progress ("\tDirectories found: %ld\n", stat->directories);
-	if (stat->symlinks)
-	    fsck_progress ("\tSymlinks found: %ld\n", stat->symlinks);
-	if (stat->others)
-	    fsck_progress ("\tOthers: %ld\n", stat->others);
-	if (stat->broken_files)
-	    fsck_progress ("\tBroken (of files/symlinks/others): %ld\n", stat->broken_files);
-	if (stat->fixed_sizes)
-	    fsck_progress ("\tFiles with fixed size: %ld\n", stat->fixed_sizes);
-	if (stat->deleted_entries)
-	    fsck_progress ("\tNames pointing to nowhere (removed): %ld\n", stat->deleted_entries);
-	if (stat->oid_sharing)
-	    fsck_progress ("\tObjects having used objectids: %lu\n", stat->oid_sharing);
-	if (stat->oid_sharing_files_relocated)
-	    fsck_progress ("\t\tfiles fixed %lu\n", stat->oid_sharing_files_relocated);
-	if (stat->oid_sharing_dirs_relocated)
-	    fsck_progress ("\t\tdirs fixed %lu\n", stat->oid_sharing_dirs_relocated);
-    }
-    break;
-    
-    case 0x3a: /* lost+found pass */
-    {
-	struct lost_found_stat * stat;
-
-	/* what has been done on the semantic pass */
-	stat = lost_found_pass_stat (fs);
-	if (stat->lost_found)
-	    fsck_progress ("\tObjects without names %lu\n",
-			   stat->lost_found);
-	if (stat->empty_lost_dirs)
-	    fsck_progress ("\tEmpty lost dirs removed %lu\n",
-			   stat->empty_lost_dirs);
-	if (stat->lost_found_dirs)
-	    fsck_progress ("\tDirs linked to /lost+found: %lu\n",
-			   stat->lost_found_dirs);
-	if (stat->dir_recovered)
-	    fsck_progress ("\t\tDirs without stat data found %lu\n",
-			   stat->dir_recovered);
-
-	if (stat->lost_found_files)
-	    fsck_progress ("\tFiles linked to /lost+found %lu\n",
-			   stat->lost_found_files);
-	if (stat->oid_sharing)
-	    fsck_progress ("\tObjects having used objectids: %lu\n", stat->oid_sharing);
-	if (stat->oid_sharing_files_relocated)
-	    fsck_progress ("\t\tfiles fixed %lu\n", stat->oid_sharing_files_relocated);
-	if (stat->oid_sharing_dirs_relocated)
-	    fsck_progress ("\t\tdirs fixed %lu\n", stat->oid_sharing_dirs_relocated);
-    }
-    break;
-
-    case 4: /* removing of unreachable */
-    {
-	struct pass_4_stat * stat;
-
-	/* what has been done on the semantic pass */
-	stat = pass_4_stat (fs);
-	if (stat->deleted_items)
-	    fsck_progress ("\tDeleted unreachable items %lu\n",
-			   stat->deleted_items);
-    }
-    break;
-
-    case 5:
-	fsck_progress ("There are on the filesystem:\n"
-		       "\tLeaves %lu\n\tInternal nodes %lu\n"
-		       "\tDirectories %lu\n\tOther files %lu\n"
-		       "\tData block pointers %lu (%lu of them are zero)\n"
-		       "\tSafe links %lu\n",
-		       fsck_check_stat (fs)->leaves,
-		       fsck_check_stat (fs)->internals,
-		       fsck_check_stat (fs)->dirs,
-		       fsck_check_stat (fs)->files,
-		       fsck_check_stat (fs)->unfm_pointers,
-		       fsck_check_stat (fs)->zero_unfm_pointers,
-		       fsck_check_stat (fs)->safe);
-	
-	
-    } /* switch */
-
-    memset (&fsck_data (fs)->rebuild.pass_u, 0, sizeof (fsck_data (fs)->rebuild.pass_u));
-
-}
-
-
diff --git a/fsck/lost+found.c b/fsck/lost+found.c
deleted file mode 100644
index dfafa23..0000000
--- a/fsck/lost+found.c
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
- * Copyright 2000-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#include "fsck.h"
-
-
-void erase_name (int len);
-void print_name (char * name, int len);
-
-void modify_item (struct item_head * ih, void * item);
-
-/* fixme: search_by_key is not needed after any add_entry */
-static __u64 _look_for_lost (reiserfs_filsys_t * fs, int link_lost_dirs)
-{
-    struct key key, prev_key, * rdkey;
-    INITIALIZE_PATH (path);
-    int item_pos;
-    struct buffer_head * bh;
-    struct item_head * ih;
-    unsigned long leaves;
-    int is_it_dir;
-    static int lost_files = 0; /* looking for lost dirs we calculate amount of
-				  lost files, so that when we will look for
-				  lost files we will be able to stop when
-				  there are no lost files anymore */
-    int retval;
-    __u64 size;
-
-    key = root_dir_key;
-
-    if (!link_lost_dirs && !lost_files) {
-	/* we have to look for lost files but we know already that there are
-           no any */
-	return 0;
-    }
-	
-    fsck_progress ("Looking for lost %s:\n", link_lost_dirs ? "directories" : "files");
-    leaves = 0;
-
-    /* total size of added entries */
-    size = 0;
-    while (1) {
-	retval = reiserfs_search_by_key_4 (fs, &key, &path);
-	/* fixme: we assume path ends up with a leaf */
-	bh = get_bh (&path);
-	item_pos = get_item_pos (&path);
-	if (retval != ITEM_FOUND) {
-	    if (item_pos == get_blkh_nr_items (B_BLK_HEAD (bh))) {
-		rdkey = uget_rkey (&path);
-		if (!rdkey) {
-		    pathrelse (&path);
-		    break;
-		}
-		key = *rdkey;
-		pathrelse (&path);
-		continue;
-	    }
-	    /* we are on the item in the buffer */
-	}
-
-	/* print ~ how many leaves were scanned and how fast it was */
-	if (!fsck_quiet (fs))
-	    print_how_fast (leaves++, 0, 50, 0);
-
-	for (ih = get_ih (&path); item_pos < get_blkh_nr_items (B_BLK_HEAD (bh)); item_pos ++, ih ++, PATH_LAST_POSITION(&path)++) {
-	    if (is_item_reachable (ih))
-		continue;
-
-	    /* found item which can not be reached */
-	    if (!is_direntry_ih (ih) && !is_stat_data_ih (ih)) {
-		continue;
-	    }
-
-	    if (is_direntry_ih (ih)) {
-		/* if this directory has no stat data - try to recover it */
-		struct key sd;
-		struct path tmp;
-
-		sd = ih->ih_key;
-		set_type_and_offset (KEY_FORMAT_1, &sd, SD_OFFSET, TYPE_STAT_DATA);
-		if (reiserfs_search_by_key_4 (fs, &sd, &tmp) == ITEM_FOUND) {
-		    /* should not happen - because if there were a stat data -
-                       we would have done with the whole directory */
-		    pathrelse (&tmp);
-		    continue;
-		}
-		lost_found_pass_stat (fs)->dir_recovered ++;
-		create_dir_sd (fs, &tmp, &sd, modify_item);
-                id_map_mark(proper_id_map (fs), get_key_objectid (&sd));
-		key = sd;
-		pathrelse (&path);
-		goto cont;
-	    }
-
-
-	    /* stat data marked "not having name" found */
-	    if (is_stat_data_ih (get_ih(&path)))
-		fix_obviously_wrong_sd_mode (&path);
-		
-    	    is_it_dir = ((not_a_directory (B_I_PITEM (bh,ih))) ? 0 : 1);
-
-	    if (is_it_dir) {
-		struct key tmp_key;
-		INITIALIZE_PATH (tmp_path);
-		struct item_head * tmp_ih;
-
-		/* there is no need to link empty lost directories into /lost+found */
-		tmp_key = ih->ih_key;
-		set_type_and_offset (KEY_FORMAT_1, &tmp_key, 0xffffffff, TYPE_DIRENTRY);
-		reiserfs_search_by_key_4 (fs, &tmp_key, &tmp_path);
-		tmp_ih = get_ih (&tmp_path);
-		tmp_ih --;
-		if (not_of_one_file (&tmp_key, tmp_ih))
-		    reiserfs_panic ("not directory found");
-		if (!is_direntry_ih (tmp_ih) ||
-		    (get_deh_offset (B_I_DEH (get_bh (&tmp_path), tmp_ih) + 
-				     get_ih_entry_count (tmp_ih) - 1) == DOT_DOT_OFFSET)) {
-		    /* last directory item is either stat data or empty
-                       directory item - do not link this dir into lost+found */
-		    lost_found_pass_stat (fs)->empty_lost_dirs ++;
-		    pathrelse (&tmp_path);
-		    continue;
-		}
-		pathrelse (&tmp_path);
-	    }
-
-	    if (link_lost_dirs && !is_it_dir) {
-		/* we are looking for directories and it is not a dir */
-		lost_files ++;
-		continue;
-	    }
-
-	    lost_found_pass_stat (fs)->lost_found ++;
-
-	    {
-		struct key obj_key = {0, 0, {{0, 0},}};
-		char * lost_name;
-		struct item_head tmp_ih;
-
-		/* key to continue */
-		key = ih->ih_key;
-		set_key_objectid (&key, get_key_objectid (&key) + 1);
-
-		tmp_ih = *ih;
-		if (id_map_test(semantic_id_map (fs), get_key_objectid (&ih->ih_key))) {
-		    /* objectid is used, relocate an object */
-		    lost_found_pass_stat (fs)->oid_sharing ++;
-		    
-		    if (is_it_dir) {
-			relocate_dir (&tmp_ih, 1);
-			lost_found_pass_stat (fs)->oid_sharing_dirs_relocated ++;
-		    } else {
-			rewrite_file (&tmp_ih, 1, 1);
-			lost_found_pass_stat (fs)->oid_sharing_files_relocated ++;
-		    }		    
-		    
-		    linked_already(&tmp_ih.ih_key);
-		} else {
-		    if (!is_it_dir)
-			id_map_mark(semantic_id_map (fs), get_key_objectid (&ih->ih_key));
-		}
-
-		asprintf (&lost_name, "%u_%u", get_key_dirid (&tmp_ih.ih_key),
-			  get_key_objectid (&tmp_ih.ih_key));
-
-		/* entry in lost+found directory will point to this key */
-		set_key_dirid (&obj_key, get_key_dirid (&tmp_ih.ih_key));
-		set_key_objectid (&obj_key, get_key_objectid (&tmp_ih.ih_key));
-
-		pathrelse (&path);
-		
-		/* 0 does not mean anyting - item with "." and ".." already
-		   exists and reached, so only name will be added */
-		size += reiserfs_add_entry (fs, &lost_found_dir_key, lost_name,
-			name_length (lost_name, lost_found_dir_format), &obj_key, 0/*fsck_need*/);
-
-		
-		if (is_it_dir) {
-		    /* fixme: we hope that if we will try to pull all the
-		       directory right now - then there will be less
-		       lost_found things */
-		    print_name (lost_name, strlen (lost_name));
-		    /*fsck_progress ("\tChecking lost dir \"%s\":", lost_name);*/
-		    rebuild_semantic_pass (&obj_key, &lost_found_dir_key, /*dot_dot*/0, /*reloc_ih*/0);
-		    erase_name (strlen (lost_name));
-		    /*fsck_progress ("finished\n");*/
-		    
-		    lost_found_pass_stat (fs)->lost_found_dirs ++;
-		} else {
-		    if (reiserfs_search_by_key_4 (fs, &obj_key, &path) != ITEM_FOUND)
-			reiserfs_panic ("look_for_lost: lost file stat data %K not found",
-					&obj_key);
-
-		    /* check_regular_file does not mark stat data reachable */
-		    mark_item_reachable (get_ih (&path), get_bh (&path));
-
-		    rebuild_check_regular_file (&path, get_item (&path), 0/*reloc_ih*/);
-		    pathrelse (&path);
-
-		    lost_found_pass_stat (fs)->lost_found_files ++;
-		    lost_files --;
-		}
-
-		free (lost_name);
-		goto cont;
-	    }
-	} /* for */
-
-	prev_key = key;
-	
-	PATH_LAST_POSITION(&path) = item_pos - 1;
-	rdkey = reiserfs_next_key (&path);
-	if (rdkey)
-	    key = *rdkey;
-	else
-	    break;
-	    	
-	if (comp_keys (&prev_key, &key) != -1)
-	    reiserfs_panic ("pass_3a: key must grow 2: prev=%k next=%k",
-			    &prev_key, &key);
-	pathrelse (&path);
-
-    cont:
-	if (!link_lost_dirs && !lost_files) {
-	    break;
-	}
-    }
-
-    pathrelse (&path);
-
-#if 0
-    /* check names added we just have added to/lost+found. Those names are
-       marked DEH_Lost_found flag */
-    fsck_progress ("Checking lost+found directory.."); fflush (stdout);
-    check_semantic_tree (&lost_found_dir_key, &root_dir_key, 0, 1/* lost+found*/);
-    fsck_progress ("finished\n");
-#endif
-
-    return size;
-
-}
-
-static void save_lost_found_result (reiserfs_filsys_t * fs)
-{
-    FILE * file;
-    int retval;
-
-    /* save bitmaps with which we will be able start reiserfs from
-       pass 1 */
-    file = open_file ("temp_fsck_file.deleteme", "w+");
-    if (!file)
-	return;
-
-    reiserfs_begin_stage_info_save (file, LOST_FOUND_DONE);
-    reiserfs_end_stage_info_save (file);
-    close_file (file);
-
-    retval = rename ("temp_fsck_file.deleteme", state_dump_file (fs));
-    if (retval != 0)
-	fsck_progress ("pass 0: Could not rename the temporary file temp_fsck_file.deleteme to %s",
-		       state_dump_file (fs));
-}
-
-/* we have nothing to load from a state file, but we have to fetch
-   on-disk bitmap, copy it to allocable bitmap, and fetch objectid
-   map */
-void load_lost_found_result (reiserfs_filsys_t * fs)
-{
-    fsck_new_bitmap (fs) = reiserfs_create_bitmap (get_sb_block_count (fs->fs_ondisk_sb));
-    reiserfs_bitmap_copy (fsck_new_bitmap (fs), fs->fs_bitmap2);
-
-    fsck_allocable_bitmap (fs) = reiserfs_create_bitmap (get_sb_block_count (fs->fs_ondisk_sb));
-    reiserfs_bitmap_copy (fsck_allocable_bitmap (fs), fs->fs_bitmap2);
-
-    fs->block_allocator = reiserfsck_reiserfs_new_blocknrs;
-    fs->block_deallocator = reiserfsck_reiserfs_free_block;
-
-    /* we need objectid map on semantic pass to be able to relocate files */
-    proper_id_map (fs) = id_map_init();
-    /* Not implemented yet.
-    fetch_objectid_map (proper_id_map (fs), fs);
-    */
-}
-
-void after_lost_found (reiserfs_filsys_t * fs)
-{
-    /* update super block: objectid map, fsck state */
-    set_sb_fs_state (fs->fs_ondisk_sb, LOST_FOUND_DONE);
-    mark_buffer_dirty (fs->fs_super_bh);
-
-    /* write all dirty blocks */
-    fsck_progress ("Flushing..");
-    id_map_flush(proper_id_map (fs), fs);
-    fs->fs_dirt = 1;
-    reiserfs_flush_to_ondisk_bitmap (fsck_new_bitmap(fs), fs);
-    reiserfs_flush (fs);
-    fsck_progress ("finished\n");
-
-    stage_report (0x3a, fs);
-
-    if (!fsck_run_one_step (fs)) {
-	if (fsck_user_confirmed (fs, "Continue? (Yes):", "Yes\n", 1))
-	    /* reiserfsck continues */
-	    return;
-    }
-
-    save_lost_found_result (fs);
-
-    id_map_free(proper_id_map (fs));
-    proper_id_map (fs) = 0;
-
-    fs->fs_dirt = 1;
-    reiserfs_close (fs);
-    exit(EXIT_OK);
-}
-
-void pass_3a_look_for_lost (reiserfs_filsys_t * fs)
-{
-    INITIALIZE_PATH (path);
-    struct item_head * ih;
-    void * sd;
-    __u64 size, sd_size;
-    __u32 blocks;
-    __u16 mode;
-    __u32 objectid;
-    unsigned int gen_counter;
-    fsck_progress ("Pass 3a (looking for lost dir/files):\n");
-
-    /* when warnings go not to stderr - separate them in the log */
-    if (fsck_log_file (fs) != stderr)
-	fsck_log ("####### Pass 3a (lost+found pass) #########\n");
-
-
-    /* look for lost dirs first */
-    size = _look_for_lost (fs, 1);
-
-    /* link files which are still lost */
-    size += _look_for_lost (fs, 0);
-
-    /* update /lost+found sd_size and sd_blocks (nlink is correct already) */
-
-    objectid = reiserfs_find_entry (fs, &root_dir_key, "lost+found",
-                                       &gen_counter, &lost_found_dir_key);
-
-    if (!objectid) {
-       reiserfs_panic ("look_for_lost: The entry 'lost+found' could not be found in the root directory.");
-    }
-
-    if (reiserfs_search_by_key_4 (fs, &lost_found_dir_key, &path) != ITEM_FOUND)
-	reiserfs_panic ("look_for_lost: The StatData of the 'lost+found' directory %K could not be found",
-			&lost_found_dir_key);
-    ih = get_ih (&path);
-    sd = get_item (&path);
-    get_sd_size (ih, sd, &sd_size);
-    size += sd_size;
-    blocks = dir_size2st_blocks (size);
-
-    set_sd_size (ih, sd, &size);
-    set_sd_blocks (ih, sd, &blocks);
-
-    /* make lost+found to be drwx------ */
-    mode = S_IFDIR | S_IRUSR | S_IWUSR | S_IXUSR;
-    set_sd_mode (ih, sd, &mode);
-
-    mark_buffer_dirty (get_bh (&path));
-    pathrelse (&path);
-
-    after_lost_found (fs);
-}
-
diff --git a/fsck/pass0.c b/fsck/pass0.c
deleted file mode 100644
index 8d91cc4..0000000
--- a/fsck/pass0.c
+++ /dev/null
@@ -1,1999 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#include "fsck.h"
-
-
-
-/* 
- * Pass0 scans the used part of the partition. It creates two maps which will 
- * be used on the pass 1. These are a map of nodes looking like leaves and 
- * a map of "bad" unformatted nodes. After pass 0 we can detect unformatted 
- * node pointers pointing to leaves. 
- */
-
-
-/* leaves */
-reiserfs_bitmap_t * leaves_bitmap;
-#define pass0_is_leaf(block) __is_marked (leaves, block)
-#define pass0_mark_leaf(block) __mark (leaves, block)
-
-/* nodes which are referred to from only one indirect item */
-reiserfs_bitmap_t * good_unfm_bitmap;
-#define pass0_is_good_unfm(block) __is_marked (good_unfm, block)
-#define pass0_mark_good_unfm(block) __mark (good_unfm, block)
-#define pass0_unmark_good_unfm(block) __unmark (good_unfm, block)
-
-/* nodes which are referred to from more than one indirect item */
-reiserfs_bitmap_t * bad_unfm_bitmap;
-#define pass0_is_bad_unfm(block) __is_marked (bad_unfm, block)
-#define pass0_mark_bad_unfm(block) __mark (bad_unfm, block)
-#define pass0_unmark_bad_unfm(block) __unmark (bad_unfm, block)
-
-static int correct_direct_item_offset (__u64 offset, int format) {
-    if (format == KEY_FORMAT_2) {
-        return (offset && ((offset - 1) % 8 == 0));
-    } else {
-	return (offset);
-    }
-    return 0;
-}
-
-/* bitmaps which are built on pass 0 and are used on pass 1 */
-static void make_aux_bitmaps (reiserfs_filsys_t * fs)
-{
-    struct reiserfs_super_block * sb;
-
-    sb = fs->fs_ondisk_sb;
-
-    /* bitmap of leaves found on the device */
-    leaves_bitmap = reiserfs_create_bitmap (get_sb_block_count (sb));
-
-    good_unfm_bitmap = reiserfs_create_bitmap (get_sb_block_count (sb));
-
-    bad_unfm_bitmap = reiserfs_create_bitmap (get_sb_block_count (sb));
-}
-
-
-void delete_aux_bitmaps (void)
-{
-    reiserfs_delete_bitmap (leaves_bitmap);
-    reiserfs_delete_bitmap (good_unfm_bitmap);
-    reiserfs_delete_bitmap (bad_unfm_bitmap);
-}
-
-
-/* register block some indirect item points to */
-static void register_unfm (unsigned long block)
-{
-    if (!pass0_is_good_unfm (block) && !pass0_is_bad_unfm (block)) {
-	/* this block was not pointed by other indirect items yet */
-	pass0_mark_good_unfm (block);
-	return;
-    }
-
-    if (pass0_is_good_unfm (block)) {
-	/* block was pointed once already, unmark it in bitmap of good
-           unformatted nodes and mark in bitmap of bad pointers */
-	pass0_unmark_good_unfm (block);
-	pass0_mark_bad_unfm (block);
-	return;
-    }
-
-    assert (pass0_is_bad_unfm (block));
-}
-
-
-/* 'upper' item is correct if 'upper + 2' exists and its key is greater than
-   key of 'upper' */
-static int upper_correct (struct buffer_head * bh, struct item_head * upper,
-			  int upper_item_num)
-{
-    if (upper_item_num + 2 < B_NR_ITEMS (bh)) {
-	if (comp_keys (&upper->ih_key, &(upper + 2)->ih_key) != -1)
-	    /* item-num's item is out of order of order */
-	    return 0;
-	return 1;
-    }
-    
-    /* there is no item above the "bad pair" */
-    return 2;
-}
-
-
-/* 'lower' item is correct if 'lower - 2' exists and its key is smaller than
-   key of 'lower' */
-static int lower_correct (struct buffer_head * bh, struct item_head * lower,
-			  int lower_item_num)
-{
-    if (lower_item_num - 2 >= 0) {
-	if (comp_keys (&(lower - 2)->ih_key, &lower->ih_key) != -1)
-	    return 0;
-	return 1;
-    }
-    return 2;
-}
-
-
-/* return 1 if something was changed */
-static int correct_key_format (struct item_head * ih, int symlink)
-{
-    int dirty = 0;
-
-    if (is_stat_data_ih (ih)) {
-	/* for stat data we have no way to check whether key format in item
-	   head matches to the key format found from the key directly */
-	if (get_ih_item_len (ih) == SD_V1_SIZE) {
-	    if (get_ih_key_format (ih) != KEY_FORMAT_1) {
-		/*fsck_log ("correct_key_format: ih_key_format of (%H) is set to format 1\n",
-		  ih);*/
-		set_ih_key_format (ih, KEY_FORMAT_1);
-		return 1;
-	    }
-	    return 0;
-	}
-	if (get_ih_item_len (ih) == SD_SIZE) {
-	    if (get_ih_key_format (ih) != KEY_FORMAT_2) {
-		/*fsck_log ("correct_key_format: ih_key_format of (%H) is set to format 2\n",
-		  ih);*/
-		set_ih_key_format (ih, KEY_FORMAT_2);
-		return 1;
-	    }
-	    return 0;
-	}
-	
-	die ("stat_data item of the wrong length");
-    }
-    
-    if (symlink && is_direct_ih(ih) && (key_format(&ih->ih_key) != KEY_FORMAT_1)) {	
-	/* All symlinks are of 3.5 format */
-	/*fsck_log ("correct_key_format: Symlink keys should be of 3.5 format. %k - fixed.\n", &ih->ih_key); */
-	set_type_and_offset(KEY_FORMAT_1, &ih->ih_key, get_offset(&ih->ih_key), get_type(&ih->ih_key));
-    }
-	
-    if (key_format (&ih->ih_key) != get_ih_key_format (ih)) {
-	/*fsck_log ("correct_key_format: ih_key_format of (%H) is set to format found in the key\n",
-	  ih);*/
-	set_ih_key_format (ih, key_format (&ih->ih_key));
-	dirty = 1;
-    }
-    
-    if (is_direct_ih (ih) && get_offset (&ih->ih_key) > fs->fs_blocksize * 4) {
-	/*fsck_log ("correct_key_format: %H made of indirect type\n", ih);*/
-	set_type (key_format (&ih->ih_key), &ih->ih_key, TYPE_INDIRECT);
-	if (get_offset (&ih->ih_key) % fs->fs_blocksize != 1)
-	    fsck_log ("correct_key_format: Item header's key has the wrong offset %H\n", ih);
-	dirty = 1;
-    }
-    
-    return dirty;
-}
-
-#if 0
-/* fixme: we might try all available hashes */
-static int prob_name (reiserfs_filsys_t * fs,
-		      char ** name, int max_len, __u32 deh_offset)
-{
-    int start; /* */
-    int len;
-
-    for (start = 0; start < max_len; start ++) {
-	for (len = 0; len < max_len - start; len ++) {
-	    if (is_properly_hashed (fs, *name + start, len + 1, deh_offset)) {
-		*name = *name + start;
-		return len + 1;
-	    }
-	}
-    }
-    return 0;
-}
-#endif
-
-
-static void hash_hits_init (reiserfs_filsys_t * fs)
-{
-    fsck_data (fs)->rebuild.hash_amount = known_hashes ();
-    fsck_data (fs)->rebuild.hash_hits = getmem (sizeof (unsigned long) * fsck_data (fs)->rebuild.hash_amount);
-    return;
-}
-
-
-static void add_hash_hit (reiserfs_filsys_t * fs, int hash_code)
-{
-    fsck_data (fs)->rebuild.hash_hits [hash_code] ++;
-}
-
-
-/* deh_location look reasonable, try to find name length. return 0 if
-   we failed */
-static int try_to_get_name_length (struct item_head * ih, struct reiserfs_de_head * deh,
-				int i)
-{
-    int len;
-
-    if (i == 0 || !de_bad_location (deh - 1)) {
-	len = name_in_entry_length (ih, deh, i);
-	return (len > 0) ? len : 0;
-    }
-
-    /* previous entry had bad location so we had no way to find
-       name length */
-    return 0;
-}
-
-
-
-/* define this if you are using -t to debug recovering of corrupted directory
-   item */
-#define DEBUG_VERIFY_DENTRY
-#undef DEBUG_VERIFY_DENTRY
-
-
-/* check directory item and try to recover something */
-static int verify_directory_item (reiserfs_filsys_t * fs, struct buffer_head * bh,
-				  int item_num)
-{
-    struct item_head * ih;
-    struct item_head tmp;
-    char * item;
-    struct reiserfs_de_head * deh;
-    char * name;
-    int name_len;
-    int bad, lost_found;
-    int i, j;
-    char buf[4096];
-    int dirty;
-    int hash_code;
-    int bad_locations;
-    int min_entry_size = 1;
-
-#ifdef DEBUG_VERIFY_DENTRY
-    char * direntries;
-#endif
-
-
-    ih = B_N_PITEM_HEAD (bh, item_num);
-    item = B_I_PITEM (bh,ih);
-    deh = (struct reiserfs_de_head *)item;
-
-    dirty = 0;
-    bad_locations = 0;
- 
-    if ( (get_ih_entry_count (ih) > (get_ih_item_len(ih) / (DEH_SIZE + min_entry_size))) ||
-          (get_ih_entry_count (ih) == 0))
-    {
-        set_ih_entry_count (ih, (int)get_ih_item_len(ih) / (DEH_SIZE + min_entry_size));
-        mark_buffer_dirty (bh);
-    }
-
-    if (get_ih_entry_count (ih) == 0) {
-	delete_item (fs, bh, item_num);
-	return -1;
-    }
-
-
-    /* check deh_location */
-    for (i = 0; i < get_ih_entry_count (ih); i ++) {
-	/* silently fix deh_state */
-	if (get_deh_state (deh + i) != (1 << DEH_Visible2)) {
-	    set_deh_state (deh + i, (1 << DEH_Visible2));
-	    mark_buffer_dirty (bh);
-	}
-	if (dir_entry_bad_location (deh + i, ih, !i))
-	    mark_de_bad_location (deh + i);
-    }    
-
-#ifdef DEBUG_VERIFY_DENTRY
-    direntries = getmem (ih_entry_count (ih) * sizeof (int));
-
-    printf ("Entries with bad locations within the directory: ");
-    for (i = 0; i < ih_entry_count (ih); i ++) {
-	if (de_bad_location (deh + i))
-	    printf ("%d ", i);
-    }
-    printf ("\n");
-#endif /* DEBUG_VERIFY_DENTRY */
-
-
-    /* find entries names in which have mismatching deh_offset */
-    for (i = get_ih_entry_count (ih) - 1; i >= 0; i --) {
-	if (de_bad (deh + i))
-	    /* bad location */
-	    continue;
-
-	if (i) {
-	    if (get_deh_location (deh + i - 1) < get_deh_location (deh + i))
-		mark_de_bad_location (deh + i - 1);
-	}
-
-	name = name_in_entry (deh + i, i);
-	/* Although we found a name, we not always can get its length as
-           it depends on deh_location of previous entry. */
-	name_len = try_to_get_name_length (ih, deh + i, i);
-
-#ifdef DEBUG_VERIFY_DENTRY
-	if (name_len == 0)
-	    printf ("Trying to find the name length for %d-th entry\n", i);
-#endif /* DEBUG_VERIFY_DENTRY */
-	if (is_dot (name, name_len)) {
-	    if (i != 0)
-		fsck_log ("block %lu: item %d: \".\" must be the first entry, but it is the %d-th entry\n",
-			  bh->b_blocknr, item_num, i);
-	    /* check and fix "." */
-	    
-	    if (get_deh_offset (deh + i) != DOT_OFFSET) {
-		set_deh_offset (deh + i, DOT_OFFSET);
-		mark_buffer_dirty (bh);
-	    }
-	    /* "." must point to the directory it is in */
-/*
-	    if (not_of_one_file (&(deh[i].deh2_dir_id), &(ih->ih_key))) {
-		fsck_log ("verify_direntry: block %lu, item %H has entry \".\" "
-			  "pointing to (%K) instead of (%K)\n", 
-			  bh->b_blocknr, ih,
-			  &(deh[i].deh2_dir_id), &(ih->ih_key));
-		set_deh_dirid (deh + i, get_key_dirid (&ih->ih_key));
-		set_deh_objectid (deh + i, get_key_objectid (&ih->ih_key));
-		mark_buffer_dirty (bh);
-	    }
-*/
-	} else if (is_dot_dot (name, name_len)) {
-	    if (i != 1)
-		fsck_log ("block %lu: item %d: \"..\" is %d-th entry\n",
-			  bh->b_blocknr, item_num, i);
-	    
-	    /* check and fix ".." */
-	    if (get_deh_offset (deh + i) != DOT_DOT_OFFSET) {
-		set_deh_offset (deh + i, DOT_DOT_OFFSET);
-		mark_buffer_dirty (bh);
-	    }
-	} else {
-	    int min_length, max_length;
-
-	    /* check other name */
-
-	    if (name_len == 0) {
-		/* we do not know the length of name - we will try to find it */
-		min_length = 1;
-		max_length = item + get_ih_item_len (ih) - name;
-	    } else
-		/* we kow name length, so we will try only one name length */
-		min_length = max_length = name_len;
-
-	    hash_code = 0;
-
-	    for (j = min_length; j <= max_length; j ++) {
-		hash_code = find_hash_in_use (name, j, get_deh_offset (deh + i),
-					      get_sb_hash_code (fs->fs_ondisk_sb));
-/*		add_hash_hit (fs, hash_code);*/
-		if (code2func (hash_code) != 0) {
-		    /* deh_offset matches to some hash of the name */
-		    if (fsck_hash_defined (fs) && 
-			hash_code != func2code (fs->fs_hash_function)) {
-			/* wrong hash selected - so we can skip this leaf */
-			return 1;
-		    }
-
-		    if (!name_len) {
-			fsck_log ("%s: block %lu, item %H: Found a name \"%.*s\" for %d-th entry "
-				  "matching to the hash %u.\n", __FUNCTION__,
-				  bh->b_blocknr, ih, j, name, i, get_deh_offset (deh + i));
-			/* FIXME: if next byte is 0 we think that the name is aligned to 8 byte boundary */
-			if (i) {
-			    set_deh_location (&deh[i - 1], get_deh_location (deh + i) +
-					    ((name[j] || fs->fs_format == REISERFS_FORMAT_3_5) ? j : ROUND_UP (j)));
-			    mark_de_good_location (deh + i - 1);
-			    mark_buffer_dirty (bh);
-			}
-		    }
-		    break;
-		}
-	    }
-
-	    add_hash_hit (fs, hash_code);
-
-	    if (j == max_length + 1) {
-		/* deh_offset does not match to anything. it will be
-		   deleted for now, but maybe we could just fix a
-		   deh_offset if it is in ordeer */
-		mark_de_bad_offset (deh + i);
-	    }
-	}
-    } /* for */
-
-#ifdef DEBUG_VERIFY_DENTRY
-    printf ("Entries with mismatching hash: ");
-    for (i = 0; i < ih_entry_count (ih); i ++) {
-	if (de_bad_offset (deh + i))
-	    printf ("%d ", i);
-    }
-    printf ("\n");
-#endif /* DEBUG_VERIFY_DENTRY */
-
-
-    /* correct deh_locations such that code cutting entries will not get
-       screwed up */
-    {
-	int prev_loc;
-	int loc_fixed;
-
-
-	prev_loc = get_ih_item_len (ih);
-	for (i = 0; i < get_ih_entry_count (ih); i ++) {
-	    loc_fixed = 0;
-	    if (de_bad_location (deh + i)) {
-		set_deh_location (deh + i, prev_loc/* - 1*/);
-		mark_buffer_dirty (bh);
-		loc_fixed = 1;
-	    } else {
-		if (get_deh_location (deh + i) >= prev_loc) {
-		    set_deh_location (deh + i, prev_loc/* - 1*/);
-		    mark_buffer_dirty (bh);
-		    loc_fixed = 1;
-		}
-	    }
-
-	    prev_loc = get_deh_location (deh + i);
-	    
-	    if (i == get_ih_entry_count (ih) - 1) {
-		/* last entry starts right after an array of dir entry headers */
-		if (!de_bad (deh + i) &&
-		    get_deh_location (deh + i) != (DEH_SIZE * get_ih_entry_count (ih))) {
-		    /* free space in the directory item */
-		    fsck_log ("%s: block %lu, item %H: Directory item has a free space - deleting\n", 
-			__FUNCTION__, bh->b_blocknr, ih);
-		    cut_entry (fs, bh, item_num, get_ih_entry_count (ih), 0);
-		}
-		if (get_deh_location (deh + i) != (DEH_SIZE * get_ih_entry_count (ih))) {
-		    set_deh_location (&deh[i], (DEH_SIZE * get_ih_entry_count (ih)));
-		    loc_fixed = 1;
-		    mark_buffer_dirty (bh);
-		}
-	    }
-
-#ifdef DEBUG_VERIFY_DENTRY
-	    if (loc_fixed)
-		direntries [i] = 1;
-#endif
-	} /* for */
-
-#ifdef DEBUG_VERIFY_DENTRY
-	printf ("Entries with fixed deh_locations: ");
-	for (i = 0; i < ih_entry_count (ih); i ++) {
-	    if (direntries [i])
-		printf ("%d ", i);
-	}
-	printf ("\n");
-#endif /* DEBUG_VERIFY_DENTRY */
-
-    }
-
-#ifdef DEBUG_VERIFY_DENTRY
-    printf (" N  location name\n");
-    for (i = 0; i < ih_entry_count (ih); i ++) {
-	if (de_bad (deh + i) ||
-	    (i && de_bad (deh + i - 1)) || /* previous entry marked bad */
-	    (i < ih_entry_count (ih) - 1 && de_bad (deh + i + 1))) { /* next entry is marked bad */
-	    /* print only entries to be deleted and their nearest neighbors */
-	    printf ("%3d: %8d ", i, deh_location (deh + i));
-	    if (de_bad (deh + i))
-		printf ("will be deleted\n");
-	    else
-		printf ("\"%.*s\"\n", name_in_entry_length (ih, deh + i, i),
-			name_in_entry (deh + i, i));
-	}
-    }
-#endif
-
-    bad = lost_found = 0;
-    tmp = *ih;
-
-    /* mark enries of /lost+found as bad */
-    deh = B_I_DEH (bh, ih);
-    for (i = 0; i < get_ih_entry_count (ih); i ++, deh ++) {
-	unsigned int dirid, objectid;
-
-	if (de_bad (deh))
-	    continue;
-
-	sprintf (buf, "%.*s", name_in_entry_length (ih, deh, i), name_in_entry (deh, i));
-	if (sscanf (buf, "%d_%d", &dirid, &objectid) != 2)
-	    continue;
-	
-	if (get_deh_dirid (deh) != dirid || get_deh_objectid (deh) != objectid)
-	    continue;
-	
-	/* entry in lost+found */
-//	printf ("%s - will be deleted\n", buf);
-	lost_found++;
-	mark_de_bad_offset (deh);
-    }
-
-    /* delete entries which are marked bad */
-    for (i = 0; i < get_ih_entry_count (ih); i ++) {
-	deh = B_I_DEH (bh, ih) + i;
-	if (de_bad (deh)) {
-	    bad ++;
-	    if (get_ih_entry_count (ih) == 1) {
-		delete_item (fs, bh, item_num);
-		break;
-	    } else {
-		cut_entry (fs, bh, item_num, i, 1);
-	    }
-	    i --;
-	}
-    }
-    
-    if (bad == get_ih_entry_count (&tmp)) {
-	if (lost_found != bad) {
-	    fsck_log ("%s: block %lu, item %H: All entries were deleted from the directory\n", 
-		      __FUNCTION__, bh->b_blocknr, &tmp);	
-	}
-	return -1;
-    }
-
-    deh = B_I_DEH (bh, ih);
-    if (get_offset (&ih->ih_key) != get_deh_offset (deh)) {
-	fsck_log ("verify_direntry: block %lu, item %H: Key's offset %k must match the directory's hash (%u) - changed.\n",
-		  bh->b_blocknr, ih, &ih->ih_key, get_deh_offset (deh));
-	set_offset (key_format (&ih->ih_key), &ih->ih_key, get_deh_offset (deh));
-	mark_buffer_dirty (bh);
-    }
-    
-    if (bad > lost_found)
-	fsck_log ("pass0: block %lu, item %H: %d entries were deleted\n",
-		  bh->b_blocknr, &tmp, bad - lost_found);
-	
-    return 0;
-
-}
-
-
-static __inline__ int does_it_fit_into_dev (__u64 offset, __u64 fs_size) {
-/* 
-   Count of unformatted pointers - offset / blocksize
-   Count of blocks to store them - UNFM_P_SIZE * offset / blocksize / MAX_ITEM_LEN
-   Size to store it              - blocksize * UNFM_P_SIZE * offset / blocksize / MAX_ITEM_LEN
-*/
-   return ( UNFM_P_SIZE * offset / MAX_ITEM_LEN(fs->fs_blocksize) < fs_size) ? 1 : 0;
-}
-
-
-static int is_wrong_short_key (struct key * key) {
-    if (get_key_dirid (key) == 0 || get_key_objectid (key) == 0 || get_key_objectid (key) == 1 ||
-	get_key_dirid (key) == ~(__u32)0 || get_key_objectid (key) == ~(__u32)0 ||
-	get_key_dirid (key) == get_key_objectid (key) ||
-	/* the alloc=packing_groups used to allow dirid = 1
-	(get_key_dirid (key) == 1 && get_key_objectid (key) != 2) || */
-	(get_key_dirid (key) != 1 && get_key_objectid (key) == 2) )
-	return 1;
-
-    return 0;
-}
-
-/* 1 if some of fields in the block head of bh look bad */
-int leaf_structure_check (reiserfs_filsys_t * fs, struct buffer_head * bh) {
-    struct block_head * blkh;
-    int free_space, counted;
-
-    blkh = B_BLK_HEAD (bh);
-    
-    if (!is_leaf_block_head(bh->b_data)) {
-	/* We should not get here on rebuild. */
-	fsck_log ("block %lu: The block does not look like a leaf.\n", bh->b_blocknr);
-        one_more_corruption (fs, FATAL);
-	return 1;
-    }
-
-    if (get_blkh_nr_items (blkh) == 0)
-	return 0;
-    
-    counted = leaf_count_ih(bh->b_data, bh->b_size);
-
-    if (counted < get_blkh_nr_items (blkh)) {
-	fsck_log ("block %lu: The number of items (%lu) is incorrect, should be (%lu)",
-		bh->b_blocknr, get_blkh_nr_items(blkh), counted);
-	if (fsck_mode(fs) == FSCK_REBUILD) {
-	    set_blkh_nr_items(blkh, counted);	    
-	    fsck_log (" - corrected\n");
-	    mark_buffer_dirty (bh);
-	} else {
-	    fsck_log ("\n");
-	    one_more_corruption (fs, FATAL);
-	    return 1;
-	}
-    }
-    
-    free_space = leaf_free_space_estimate(bh->b_data, bh->b_size);
-    if (get_blkh_free_space (blkh) != free_space) {
-	fsck_log ("block %lu: The free space (%lu) is incorrect, should be (%lu)",
-		bh->b_blocknr, get_blkh_free_space (blkh), free_space);
-	
-	if (fsck_mode(fs) != FSCK_CHECK && fsck_mode(fs) != FSCK_AUTO) {
-	    set_blkh_free_space (blkh, free_space);	    
-	    fsck_log (" - corrected\n");
-	    mark_buffer_dirty (bh);
-	} else {
-	    fsck_log ("\n");
-	    one_more_corruption (fs, FIXABLE);
-	    return 1;
-	}
-    }
-
-    return 0;
-}
-
-/* do this on pass 0 with every leaf marked used */
-
-/* FIXME: we can improve fixing of broken keys: we can ssfe direct items which
-   go after stat data and have broken keys */
-static void pass0_correct_leaf (reiserfs_filsys_t * fs,
-				struct buffer_head * bh)
-{
-    int file_format = KEY_FORMAT_UNDEFINED;
-    struct item_head * ih;
-    
-    __u32 * ind_item;
-    __u64 fs_size;
-    __u64 offset;
-    int symlnk = 0;
-    int bad_order;
-    
-    unsigned long unfm_ptr;
-//    unsigned int nr_items;
-    int i, j, nr_items;
-    int dirty = 0;
-
-    leaf_structure_check(fs, bh);
-
-    /* Delete all safe links. */
-    for (i = get_blkh_nr_items (B_BLK_HEAD (bh)) - 1; i >= 0; i--) {
-	if (get_key_dirid (&B_N_PITEM_HEAD (bh, i)->ih_key) == ~(__u32)0) {
-	    delete_item (fs, bh, i);
-	}
-	if (get_key_dirid (&B_N_PITEM_HEAD (bh, i)->ih_key) == BADBLOCK_DIRID && 
-	    get_key_objectid (&B_N_PITEM_HEAD (bh, i)->ih_key) == BADBLOCK_OBJID) {
-		delete_item (fs, bh, i);
-	}
-    }
-
-    fs_size = (__u64)fs->fs_blocksize * get_sb_block_count (fs->fs_ondisk_sb);
-
- start_again:
-
-    ih = B_N_PITEM_HEAD (bh, 0);
-    bad_order = 0;
-    for (i = 0; i < (nr_items = get_blkh_nr_items (B_BLK_HEAD (bh))); i ++, ih ++) {
-
-	if (is_indirect_ih(ih) && (get_ih_item_len (ih) % 4 != 0)) {
-	    set_type(get_ih_key_format(ih), &ih->ih_key, TYPE_UNKNOWN);
-	    dirty = 1;
-	}
-	    
-        if (type_unknown (&ih->ih_key)) {
-            if ((get_ih_item_len (ih) == SD_SIZE) || (get_ih_item_len (ih) == SD_V1_SIZE)) {
-                set_type_and_offset (KEY_FORMAT_1, &ih->ih_key, SD_OFFSET, TYPE_STAT_DATA);
-		dirty = 1;
-                fsck_log("pass0: vpf-10100: block %lu, item (%d): Unknown item type of StatData size,"
-                    " type set to StatData %k\n", bh->b_blocknr, i, &ih->ih_key);
-            } else {            
-                fsck_log("pass0: vpf-10110: block %lu, item (%d): Unknown item type found %k - deleted\n",
-                        bh->b_blocknr, i, &ih->ih_key);
-                delete_item (fs, bh, i);
-                goto start_again;
-            }
-        }
-
-	if (is_wrong_short_key (&ih->ih_key)) {
-	    /* sometimes stat datas get k_objectid==0 or k_dir_id==0 */
-	    
-/*	    if (i == (nr_items - 1)) {
-		
-		if (i == 0) {
-		    fsck_log ("block %lu: item %d: (%H) id equals 0\n",
-			      bh->b_blocknr, i, ih);
-		    return;
-		}
-		// delete last item 
-                fsck_log ("block %lu: item %d: (%H) id equals 0\n",
-			      bh->b_blocknr, i, ih);
-		delete_item (fs, bh, i - 1);
-		return;
-	    }
-*/
-
-            /* FIXME:
-		18842 19034    0x1 IND  (2)
-		19035 19035    0x0 SD   (0)
-		18842     1    0x1 IND  (1)
-		18842     1 0x1001 DRCT (2)
-             */
-	    /* there is next item: if it is not stat data - take its k_dir_id
-               and k_objectid. if key order will be still wrong - the changed
-               item will be deleted */
-
-	    if (i && !is_stat_data_ih (ih)) {
-	        /* previous item has a wrong short_key */
-		fsck_log ("pass0: vpf-10120: block %lu: item %d: Wrong key %k, corrected to ", 
-		    bh->b_blocknr, i, &ih->ih_key);
-		set_key_dirid (&ih->ih_key, get_key_dirid (&(ih - 1)->ih_key));
-		set_key_objectid (&ih->ih_key, get_key_objectid (&(ih - 1)->ih_key));
-		fsck_log ("%k\n", &ih->ih_key);
-		dirty = 1;
-	    } else if ((i < nr_items - 1) && !is_stat_data_ih (ih + 1)) {
-	        if (!is_wrong_short_key(&(ih + 1)->ih_key)) {
-		    fsck_log ("pass0: vpf-10130: block %lu: item %d: Wrong key %k, corrected to ", 
-			bh->b_blocknr, i, &ih->ih_key);
-		    set_key_dirid (&ih->ih_key, get_key_dirid (&(ih + 1)->ih_key));
-		    set_key_objectid (&ih->ih_key, get_key_objectid (&(ih + 1)->ih_key));
-/*		    set_offset (KEY_FORMAT_1, &ih->ih_key, 0);
-		    set_type (KEY_FORMAT_1, &ih->ih_key, TYPE_STAT_DATA);*/
-		    fsck_log ("%k\n", &ih->ih_key);
-		    dirty = 1;
-		    goto start_again;
-		} else {
-	            fsck_log ("pass0: vpf-10140: block %lu: items %d and %d have bad short keys %k, %k, both deleted\n",
-			      bh->b_blocknr, i, i+1, &ih->ih_key, &(ih + 1)->ih_key);
-		    delete_item (fs, bh, i);
-		    delete_item (fs, bh, i);
-		    goto start_again;
-		}
-	    } else {
-                fsck_log ("pass0: vpf-10150: block %lu: item %d: Wrong key %k, deleted\n",
-			      bh->b_blocknr, i, &ih->ih_key);
-		delete_item (fs, bh, i);
-		goto start_again;
-	    } 
-	}
-
-
-	if (i && i + 1 < nr_items) {
-            if (is_stat_data_ih (ih - 1) && !is_stat_data_ih (ih) &&
-                !is_direct_ih (ih + 1) && !is_stat_data_ih (ih + 1)) {
-                /* i or i+1 item should be SD or i+1 should be direct item */
-                if ((get_ih_item_len (ih) == SD_SIZE) || (get_ih_item_len (ih) == SD_V1_SIZE)) {
-                    /* make i as SD */
-                    fsck_log("pass0: vpf-10400: block %lu, item %d: Wrong order of items - "
-			"change the type of the key %k to StatData\n",  bh->b_blocknr, i, &ih->ih_key);
-                    set_type_and_offset (KEY_FORMAT_1, &ih->ih_key, SD_OFFSET, TYPE_STAT_DATA);
-		    dirty = 1;
-                } else if ((get_ih_item_len (ih+1) == SD_SIZE) || (get_ih_item_len (ih+1) == SD_V1_SIZE)) {
-                    /* make i+1 as SD */
-                    fsck_log("pass0: vpf-10410: block %lu, item %d: Wrong order of items - "
-			"change the type of the key %k to StatData\n", bh->b_blocknr, i + 1, &(ih + 1)->ih_key);
-                    set_type_and_offset (KEY_FORMAT_1, &(ih + 1)->ih_key, SD_OFFSET, TYPE_STAT_DATA);
-		    dirty = 1;
-                } else if (is_indirect_ih(ih)) {
-                    fsck_log("pass0: vpf-10420: block %lu, item %d: Wrong order of items - "
-			"change the type of the key %k to Direct\n", bh->b_blocknr, i+1, &(ih + 1)->ih_key);
-                    set_type (get_ih_key_format(ih+1), &(ih + 1)->ih_key, TYPE_DIRECT);
-		    dirty = 1;
-                }
-            }
-        }
-
-	if (i && ((is_stat_data_ih (ih - 1) &&
- 		   !is_stat_data_ih (ih) &&
-	           (get_key_dirid (&(ih - 1)->ih_key) != get_key_dirid (&ih->ih_key))) ||
-	          (is_stat_data_ih (ih) &&
-	           (get_key_dirid (&(ih - 1)->ih_key) > get_key_dirid (&ih->ih_key)))))
-        {
-            /* not the same dir_id of the same file or not increasing dir_id of different files */
-            if ((i > 1) && get_key_dirid (&(ih - 2)->ih_key) == get_key_dirid (&(ih - 1)->ih_key)) {
-                /* fix i-th */
-                if (!is_stat_data_ih (ih)) {
-                    fsck_log("pass0: vpf-10430: block %lu, item %d: Wrong order of items - "
-			"change the dir_id of the key %k to %lu\n",
-                    	bh->b_blocknr, i, &ih->ih_key, get_key_dirid (&(ih - 1)->ih_key));
-		    set_key_dirid (&ih->ih_key, get_key_dirid (&(ih - 1)->ih_key));
-		    dirty = 1;
-                } else if (i + 1 < nr_items) {
-                    fsck_log("pass0: vpf-10440: block %lu, item %d: Wrong order of items - "
-			"change the dir_id of the key %k to %lu\n",
-                    	bh->b_blocknr, i, &ih->ih_key, get_key_dirid (&(ih + 1)->ih_key));
-		    set_key_dirid (&ih->ih_key, get_key_dirid (&(ih + 1)->ih_key));
-		    dirty = 1;
-                }
-            } else 	
-            if ((i + 1 < nr_items) && get_key_dirid (&ih->ih_key) == get_key_dirid (&(ih + 1)->ih_key)) {
-                fsck_log("pass0: vpf-10450: block %lu, item %d: Wrong order of items - "
-		    "change the dir_id of the key %k to %lu\n",
-                    bh->b_blocknr, i - 1, &(ih - 1)->ih_key, get_key_dirid (&ih->ih_key));
-                /* fix (i - 1)-th */
-		set_key_dirid (&(ih - 1)->ih_key, get_key_dirid (&ih->ih_key));
-		dirty = 1;
-            }	
-        }
-
- 	if (i && i + 1 < nr_items) {
-      	    /* there is a previous and a next items */
-	    if ((get_key_dirid (&(ih - 1)->ih_key) == get_key_dirid (&(ih + 1)->ih_key)) &&
-		(get_key_dirid (&(ih - 1)->ih_key) != get_key_dirid (&ih->ih_key)))
-	    {
-                fsck_log("pass0: vpf-10460: block %lu, item %d: Wrong order of items - "
-		    "change the dir_id of the key %k to %lu\n",
-                    bh->b_blocknr, i, &ih->ih_key, get_key_dirid (&(ih - 1)->ih_key));
-		set_key_dirid (&ih->ih_key, get_key_dirid (&(ih - 1)->ih_key));
-		dirty = 1;
-            }
-            if (is_stat_data_ih (ih - 1) && is_indirect_ih (ih) && is_direct_ih (ih + 1)) {
-	    	if ((get_key_objectid (&(ih - 1)->ih_key) == get_key_objectid (&(ih + 1)->ih_key)) &&
-		    (get_key_objectid (&(ih - 1)->ih_key) != get_key_objectid (&ih->ih_key)))
-            	{
-		    fsck_log("pass0: vpf-10470: block %lu, item %d: Wrong order of items - "
-			"change the object_id of the key %k to %lu\n",
-                    	bh->b_blocknr, i, &ih->ih_key, get_key_objectid (&(ih - 1)->ih_key));
-		    set_key_objectid (&ih->ih_key, get_key_objectid (&(ih - 1)->ih_key));
-		    dirty = 1;
-		}
-	    	if ((get_key_objectid (&(ih - 1)->ih_key) == get_key_objectid (&ih->ih_key)) &&
-		    (get_key_objectid (&(ih - 1)->ih_key) != get_key_objectid (&(ih + 1)->ih_key)))
-            	{
-		    fsck_log("pass0: vpf-10480: block %lu, item %d: Wrong order of items - "
-			"change the object_id of the key %k to %lu\n",
-                    	bh->b_blocknr, i + 1, &(ih+1)->ih_key, get_key_objectid (&(ih - 1)->ih_key));
-		    set_key_objectid (&(ih + 1)->ih_key, get_key_objectid (&(ih - 1)->ih_key));
-		    dirty = 1;
-		}
-	    	if ((get_key_objectid (&ih->ih_key) == get_key_objectid (&(ih + 1)->ih_key)) &&
-		    (get_key_objectid (&(ih - 1)->ih_key) != get_key_objectid (&(ih + 1)->ih_key)))
-            	{
-		    fsck_log("pass0: vpf-10490: block %lu, item %d: Wrong order of items - "
-			"change the object_id of the key %k to %lu\n",
-                    	bh->b_blocknr, i - 1, &(ih-1)->ih_key, get_key_objectid (&(ih + 1)->ih_key));
-		    set_key_objectid (&(ih - 1)->ih_key, get_key_objectid (&(ih + 1)->ih_key));
-		    dirty = 1;
-		}
-		if ((get_key_dirid (&(ih - 1)->ih_key) == get_key_dirid (&ih->ih_key)) &&
-		    (get_key_dirid (&(ih - 1)->ih_key) != get_key_dirid (&(ih + 1)->ih_key)))
-	    	{
-		    fsck_log("pass0: vpf-10500: block %lu, item %d: Wrong order of items - "
-			"change the dir_id of the key %k to %lu\n",
-                    	bh->b_blocknr, i + 1, &(ih+1)->ih_key, get_key_dirid (&(ih - 1)->ih_key));
-		    set_key_dirid (&(ih + 1)->ih_key, get_key_dirid (&(ih - 1)->ih_key));
-		    dirty = 1;
-		}
-		if ((get_key_dirid (&ih->ih_key) == get_key_dirid (&(ih + 1)->ih_key)) &&
-		    (get_key_dirid (&(ih - 1)->ih_key) != get_key_dirid (&(ih + 1)->ih_key)))
-	    	{
-		    fsck_log("pass0: vpf-10510: block %lu, item %d: Wrong order of items - " 
-			"change the dir_id of the key %k to %lu\n",
-                    	bh->b_blocknr, i - 1, &(ih-1)->ih_key, get_key_dirid (&(ih + 1)->ih_key));
-		    set_key_dirid (&(ih - 1)->ih_key, get_key_dirid (&(ih + 1)->ih_key));
-		    dirty = 1;
-		}
-            }
-     	}
-
-	if (i && is_stat_data_ih (ih) &&
-	    get_key_dirid (&(ih - 1)->ih_key) == get_key_dirid (&ih->ih_key) &&
-	    get_key_objectid (&(ih - 1)->ih_key) >= get_key_objectid (&ih->ih_key)) {
-	    if ((i + 1 < nr_items) && !is_stat_data_ih (ih + 1)) {
-         	if (get_key_objectid (&(ih - 1)->ih_key) < get_key_objectid (&(ih + 1)->ih_key)) {
-		    fsck_log("pass0: vpf-10520: block %lu, item %d: Wrong order of items - "
-			"change the object_id of the key %k to %lu\n",
-			bh->b_blocknr, i - 1, &(ih-1)->ih_key, get_key_objectid (&(ih + 1)->ih_key));
-		    set_key_objectid (&ih->ih_key, get_key_objectid (&(ih + 1)->ih_key));
-		    dirty = 1;
-		}
-	    }
-	}
-
-        if (i && is_stat_data_ih (ih - 1) && !is_stat_data_ih (ih) &&
-	    (get_key_objectid (&(ih - 1)->ih_key) != get_key_objectid (&ih->ih_key)))
-        {
-            int err = 0;
-            if (i > 1) {
-                if (comp_short_keys (&(ih - 2)->ih_key, &(ih - 1)->ih_key) != -1)
-                    misc_set_bit (1, &err);
-                if (comp_short_keys (&(ih - 2)->ih_key, &ih->ih_key) != -1)
-                    misc_set_bit (2, &err);
-            }
-            if (i + 1 < nr_items) {
-                if (comp_short_keys (&(ih - 1)->ih_key, &(ih + 1)->ih_key) != -1)
-                    misc_set_bit (3, &err);
-                if (comp_short_keys (&ih->ih_key, &(ih + 1)->ih_key) != -1)
-                    misc_set_bit (4, &err);
-            }
-/*
-            if ((test_bit (1, err) || test_bit (3, err)) &&
-		(test_bit (2, err) || test_bit (4, err))) {
-      		// thera are no problem-free keys, delete them both
-                delete_item (fs, bh, i - 1);
-                delete_item (fs, bh, i - 1);
-                goto start_again;
-      	    }
-*/
-            if (!misc_test_bit (1, &err) && !misc_test_bit (3, &err) &&
-		!misc_test_bit (2, &err) && !misc_test_bit (4, &err)) {
-      		if (i <= 1) {
-            	    /* take bigger */
-                    if (comp_short_keys (&(ih - 1)->ih_key, &ih->ih_key) == 1) {
-			fsck_log("pass0: vpf-10530: block %lu, item %d: Wrong order of items - "
-			    "change the object_id of the key %k to %lu\n",
-                    	    bh->b_blocknr, i, &ih->ih_key, get_key_objectid (&(ih - 1)->ih_key));
-			set_key_objectid (&ih->ih_key, get_key_objectid (&(ih - 1)->ih_key));
-                    } else {
-			fsck_log("pass0: vpf-10540: block %lu, item %d: Wrong order of items - "
-			    "change the object_id of the key %k to %lu\n",
-                    	    bh->b_blocknr, i - 1, &(ih - 1)->ih_key, get_key_objectid (&ih->ih_key));
-                        set_key_objectid (&(ih - 1)->ih_key, get_key_objectid (&ih->ih_key));
-                    }
-            	} else {
-                    /* take smaller */
-                    if (comp_short_keys (&(ih - 1)->ih_key, &ih->ih_key) == 1) {
-			fsck_log("pass0: vpf-10550: block %lu, item %d: Wrong order of items - "
-			    "change the object_id of the key %k to %lu\n",
-                    	    bh->b_blocknr, i - 1, &(ih - 1)->ih_key, get_key_objectid (&ih->ih_key));
-                        set_key_objectid (&(ih - 1)->ih_key, get_key_objectid (&ih->ih_key));
-                    } else {
-			fsck_log("pass0: vpf-10560: block %lu, item %d: Wrong order of items - "
-			    "change the object_id of the key %k to %lu\n",
-                    	    bh->b_blocknr, i, &ih->ih_key, get_key_objectid (&(ih - 1)->ih_key));
-			set_key_objectid (&ih->ih_key, get_key_objectid (&(ih - 1)->ih_key));
-                    }
-                }
-		dirty = 1;
-	    } else if (!misc_test_bit (1, &err) && !misc_test_bit (3, &err)) {
-      		/* take i - 1 */
-		fsck_log("pass0: vpf-10590: block %lu, item %d: Wrong order of items - "
-		    "change the object_id of the key %k to %lu\n",
-                    bh->b_blocknr, i, &ih->ih_key, get_key_objectid (&(ih - 1)->ih_key));
-		set_key_objectid (&ih->ih_key, get_key_objectid (&(ih - 1)->ih_key));
-		dirty = 1;
- 	    } else if (!misc_test_bit (2, &err) && !misc_test_bit (4, &err)) {
-      		/* take i */
-		fsck_log("pass0: vpf-10600: block %lu, item %d: Wrong order of items - "
-		    "change the object_id of the key %k to %lu\n",
-              	    bh->b_blocknr, i - 1, &(ih - 1)->ih_key, get_key_objectid (&ih->ih_key));
-                set_key_objectid (&(ih - 1)->ih_key, get_key_objectid (&ih->ih_key));
-		dirty = 1;
-	    }
-        }
-
-	/* this recovers corruptions like the below: 
-	   1774 1732 0 0
-	   116262638 1732 1 3
-	   1774 1736 0 0 */
-	if (i && is_stat_data_ih (ih - 1) && !is_stat_data_ih (ih)) {
-	    if (get_key_objectid (&ih->ih_key) != get_key_objectid (&(ih - 1)->ih_key) ||
-		get_key_dirid (&ih->ih_key) != get_key_dirid (&(ih - 1)->ih_key) ||
-		get_offset (&ih->ih_key) != 1) {
-		if (is_direntry_ih (ih)) {
-		    fsck_log ("pass0: vpf-10160: block %lu: item %d: No \".\" entry found in "
-			      "the first item of a directory\n", bh->b_blocknr, i);
-		    set_key_dirid (&ih->ih_key, get_key_dirid (&(ih - 1)->ih_key));
-		    set_key_objectid (&ih->ih_key, get_key_objectid (&(ih - 1)->ih_key));
-		    dirty = 1;
-		} else {
-		    fsck_log ("pass0: vpf-10170: block %lu: item %d: Wrong order of items - "
-			"the item \n\t%H fixed to ", bh->b_blocknr, i, ih);
-		    
-		    set_key_dirid (&ih->ih_key, get_key_dirid (&(ih - 1)->ih_key));
-		    set_key_objectid (&ih->ih_key, get_key_objectid (&(ih - 1)->ih_key));
-		    
-		    if (get_ih_item_len (ih - 1) == SD_SIZE) {
-			/* stat data is new, therefore this item is new too */
-			set_offset (KEY_FORMAT_2, &(ih->ih_key), 1);
-			if ((get_ih_entry_count (ih) != 0xffff) && (get_ih_item_len (ih) % 4 == 0))
-			    set_type (KEY_FORMAT_2, &(ih->ih_key), TYPE_INDIRECT);
-			else
-			    set_type (KEY_FORMAT_2, &(ih->ih_key), TYPE_DIRECT);
-			set_ih_key_format (ih, KEY_FORMAT_2);
-		    } else {
-			/* stat data is old, therefore this item is old too */
-			set_offset (KEY_FORMAT_1, &(ih->ih_key), 1);
-			if ((get_ih_entry_count (ih) != 0xffff) && (get_ih_item_len (ih) % 4 == 0))
-			    set_type (KEY_FORMAT_1, &(ih->ih_key), TYPE_INDIRECT);
-			else {
-			    set_type (KEY_FORMAT_1, &(ih->ih_key), TYPE_DIRECT);
-			    set_ih_free_space (ih, 0xffff);
-			}
-			set_ih_key_format (ih, KEY_FORMAT_1);
-		    }
-		    fsck_log ("\n\t%H\n", ih);
-		    dirty = 1;
-		}
-	    }
-	}
-
-	/* FIXME: corruptions like:
-	   56702 66802 1 2
-	   56702 65536 0 0
-	   56702 66803 1 2
-	   do not get recovered (both last items will be deleted) */
-	/* delete item if it is not in correct order of object items */
-	if (i && not_of_one_file (&ih->ih_key, &(ih - 1)->ih_key) &&
-	    !is_stat_data_ih (ih)) {
-	    fsck_log ("pass0: vpf-10180: block %lu: item %d: The item %k, which follows non StatData item %k, is deleted\n",
-		      bh->b_blocknr, i, &ih->ih_key, &(ih - 1)->ih_key);
-	    delete_item (fs, bh, i);
-	    goto start_again;
-	}
-	
-	if (is_stat_data_ih (ih)) {
-            if (get_offset (&ih->ih_key) != 0) {
-                set_offset(KEY_FORMAT_1, &ih->ih_key, 0);
-                dirty = 1;
-            }
-	} else if (!is_direntry_ih (ih)) {
-	    /* not SD, not direntry */
-            if (i && comp_short_keys (&(ih - 1)->ih_key, &ih->ih_key) == 0) {
-                if (is_stat_data_ih (ih - 1)) {
-        	    if (get_offset (&ih->ih_key) != 1) {
-                        set_offset(key_format(&ih->ih_key), &ih->ih_key, 1);
-                        dirty = 1;
-                    }
-                } else if (is_indirect_ih (ih - 1) && is_direct_ih (ih)) {
-        	    if (get_offset (&ih->ih_key) != 
-        	        get_offset(&(ih - 1)->ih_key) + I_UNFM_NUM (ih - 1) * fs->fs_blocksize) 
-        	    {
-                        set_offset(key_format(&ih->ih_key), &ih->ih_key,
-                            get_offset(&(ih - 1)->ih_key) + I_UNFM_NUM (ih - 1) * fs->fs_blocksize);
-                        dirty = 1;
-        	    }
-                } else {
-                    /* if indirect item or not the first direct item in the leaf */
-                    fsck_log("pass0: vpf-10250: block %lu, item %d: The item %k with wrong type is deleted\n",
-                         bh->b_blocknr, i, &ih->ih_key);
-                    delete_item (fs, bh, i);
-                    goto start_again;
-                }
-		
-		/* Check the lenght of the direct item; offset should be ok already. */
-		if (is_direct_ih (ih)) {
-		    if (STORE_TAIL_IN_UNFM (get_offset (&ih->ih_key) + get_ih_item_len (ih) - 1, 
-			    get_ih_item_len (ih), bh->b_size)) 
-		    {
-                            fsck_log("pass0: vpf-10700: block %lu, item %d: The item with wrong offset"
-				" or length found %k, len % lu - deleted\n", bh->b_blocknr, i, &ih->ih_key, 
-				get_ih_item_len (ih));
-                            delete_item (fs, bh, i);
-                            goto start_again;
-		    }
-  		}
-            } else {
-		/*first item in the node or first item of the file */
-		
-  		if (i) {
-        	    /* first item of the file, but not SD - delete */
-		    fsck_log("pass0: vpf-10190: block %lu, item %d: The item %k, which follows non StatData"
-			" item %k, is deleted\n", bh->b_blocknr, i, &ih->ih_key, &(ih - 1)->ih_key );
-			delete_item (fs, bh, i);
-			goto start_again;
-        	}
-
-		/* indirect or direct is the first in the leaf */
-		offset = (__u64)get_offset (&ih->ih_key);
-		if (is_indirect_ih (ih)) {
-		    if (offset % fs->fs_blocksize != 1) {
-			fsck_log("pass0: vpf-10200: block %lu, item %d: The item %k with wrong offset is deleted\n",
-			    bh->b_blocknr, i, &ih->ih_key);
-			delete_item (fs, bh, i);
-			goto start_again;
-		    }
-		} else if (is_direct_ih (ih)) {
-		    if (!correct_direct_item_offset (get_offset (&ih->ih_key), key_format (&ih->ih_key)) ||
-			((get_offset (&ih->ih_key) % bh->b_size - 1) + get_ih_item_len (ih) > bh->b_size) || 
-          		STORE_TAIL_IN_UNFM (offset + get_ih_item_len (ih) - 1, get_ih_item_len (ih), bh->b_size)) 
-		    {
-                            fsck_log("pass0: vpf-10210: block %lu, item %d: The item with wrong offset ", 
-                                bh->b_blocknr, i);
-                            fsck_log("or length found %k, len % lu - deleted\n", &ih->ih_key, get_ih_item_len (ih));
-                            delete_item (fs, bh, i);
-                            goto start_again;
-		    }
-  		}
-		
-		offset += get_bytes_number (ih, fs->fs_blocksize);
-		if (!does_it_fit_into_dev (offset, fs_size)) {
-                    fsck_log("pass0: vpf-10230: block %lu, item %d: The item offset is is too big %k - deleted\n",
-                                        bh->b_blocknr, i, &ih->ih_key);
-                    delete_item (fs, bh, i);
-                    goto start_again;
-		}
-		
-	    }
-        }
-        
-
-        
-	if (i &&  comp_keys (&(ih - 1)->ih_key, &ih->ih_key) != -1) {
-	    /* previous item has key not smaller than the key of currect item */
-	    if (is_stat_data_ih (ih - 1) && !is_stat_data_ih (ih)) {
-		/* fix key of stat data such as if it was stat data of that item */
-		fsck_log ("pass0: block %lu, items %d, %d: Wrong order of items - make the StatData item %k of the file %k\n",
-		    bh->b_blocknr, i - 1, i, &(ih - 1)->ih_key, &ih->ih_key);
-		set_key_dirid (&(ih - 1)->ih_key, get_key_dirid (&ih->ih_key));
-		set_key_objectid (&(ih - 1)->ih_key, get_key_objectid (&ih->ih_key));
-		set_offset (KEY_FORMAT_1, &(ih - 1)->ih_key, 0);
-		set_type (KEY_FORMAT_1, &(ih - 1)->ih_key, TYPE_STAT_DATA);
-		dirty = 1;
-	    } else {
-		/* ok, we have to delete one of these two - decide which one */
-		int retval;
-
-		/* something will be deleted */
-		dirty = 1;
-		retval = upper_correct (bh, ih - 1, i - 1);
-		switch (retval) {
-		case 0:
-		    /* delete upper item */
-		    fsck_log ("pass0: block %lu, item %d (upper): Item %k is out of order - deleted\n",
-			      bh->b_blocknr, i - 1, &(ih - 1)->ih_key);
-		    delete_item (fs, bh, i - 1);
-		    goto start_again;
-
-		case 1:
-		    /* delete lower item */
-		    fsck_log ("pass0: block %lu, item %d (lower): Item %k is out of order - deleted\n",
-			      bh->b_blocknr, i, &ih->ih_key);
-		    delete_item (fs, bh, i);
-		    goto start_again;
-
-		default:
-		    /* upper item was the first item of a node */
-		    /* to make gcc 3.2 do not sware here */;
-		}
-
-		retval = lower_correct (bh, ih, i);
-		switch (retval) {
-		case 0:
-		    /* delete lower item */
-		    fsck_log ("pass0: block %lu, item %d (lower): Item %k is out of order - deleted\n",
-			      bh->b_blocknr, i, &ih->ih_key);
-		    delete_item (fs, bh, i);
-		    goto start_again;
-
-		case 1:
-		    /* delete upper item */
-		    fsck_log ("pass0: block %lu, %d (upper): Item %k is out of order - deleted\n",
-			      bh->b_blocknr, i - 1, &(ih - 1)->ih_key);
-		    delete_item (fs, bh, i - 1);
-		    goto start_again;
-
-		default:
-		    /* only 2 items in the node, how to decide what to delete, go and ask user */
-		    /* to make gcc 3.2 do not sware here */;
-		}
-		fsck_log ("pass0: block %lu, items %d and %d: Which of these items looks better (the other will be deleted.)?\n"
-			  "%k\n%k\n", bh->b_blocknr, i-1, i, &(ih - 1)->ih_key, &ih->ih_key);
-		if (fsck_user_confirmed (fs, "1 or 2?", "1\n", 1))
-		    delete_item (fs, bh, i - 1);
-		else
-		    delete_item (fs, bh, i);
-		goto start_again;
-	    }
-	}
-
-	if (is_stat_data_ih (ih) && (get_ih_item_len (ih) != SD_SIZE &&
-				     get_ih_item_len (ih) != SD_V1_SIZE)) {
-	    fsck_log ("pass0: block %lu, item %d: StatData item of wrong length found %H - deleted\n",
-		      bh->b_blocknr, i, ih);
-	    delete_item (fs, bh, i);
-	    goto start_again;
-	}
-
-	dirty += correct_key_format (ih, symlnk);
-	
-	if (is_stat_data_ih (ih)) {
-	    __u16 mode;
-
-            file_format = get_ih_key_format (ih);
-	
-	    get_sd_mode (ih, B_N_PITEM(bh,i), &mode);
-            symlnk = ( S_ISLNK(mode) ? 1 : 0);
-	    ;/*correct_stat_data (fs, bh, i);*/
-        } else if ( !is_direntry_ih(ih) &&
-                    !(symlnk && is_direct_ih(ih)) &&
-        	    (file_format != KEY_FORMAT_UNDEFINED) &&
-        	    (file_format != get_ih_key_format (ih)))
-        {
-            fsck_log("pass0: vpf-10240: block %lu, item (%d): Item %k, which format (%d) is not equal to StatData "
-		"format (%d), is deleted\n", bh->b_blocknr, i, &ih->ih_key, get_ih_key_format(ih), file_format);
-            delete_item (fs, bh, i);
-            goto start_again;
-        } else {
-	    file_format = KEY_FORMAT_UNDEFINED;
-	    symlnk = 0;
-	}
-
-
-	if (i && is_stat_data_ih (ih - 1) && !not_of_one_file (&ih->ih_key, &(ih - 1)->ih_key)) {
-	    __u16 mode;
-
-	    get_sd_mode (ih - 1, B_I_PITEM (bh, ih - 1), &mode);	
-	    if (not_a_directory (B_I_PITEM (bh, ih - 1)) && is_direntry_ih (ih)) {
-		/* make SD mode SD of dir */
-		fsck_log ("pass0: block %lu, item %d: The directory %K has the wrong mode (%M), corrected to ",
-			bh->b_blocknr, i, &ih->ih_key, mode);
-		mode &= ~S_IFMT;
-		mode |= S_IFDIR;
-		fsck_log ("(%M)\n", mode);
-		set_sd_mode (ih - 1, B_I_PITEM (bh, ih - 1), &mode);
-		dirty = 1;
-	    } else if (!not_a_directory (B_I_PITEM (bh, ih - 1)) && !is_direntry_ih (ih)) {
-		/* make SD mode SD of regular file */
-		fsck_log ("pass0: block %lu, item %d: Not the directory %K has the wrong mode (%M), corrected to ",
-			bh->b_blocknr, i, &ih->ih_key, mode);
-		mode &= ~S_IFMT;
-		mode |= S_IFREG;
-		fsck_log ("(%M)\n", mode);
-		set_sd_mode (ih - 1, B_I_PITEM (bh, ih - 1), &mode);
-		dirty = 1;
-	    }
-	    if (not_a_regfile (B_I_PITEM (bh, ih - 1)) && is_indirect_ih (ih)) {
-		fsck_log ("pass0: block %lu, item %d: The file %K has the wrong mode (%M), corrected to ",
-			  bh->b_blocknr, i, &ih->ih_key, mode);
-		mode &= ~S_IFMT;
-		mode |= S_IFREG;
-		fsck_log ("(%M)\n", mode);
-		set_sd_mode (ih - 1, B_I_PITEM (bh, ih - 1), &mode);
-		dirty = 1;
-	    }
-	}
-
-	if (is_direntry_ih (ih)) {
-	    j = verify_directory_item (fs, bh, i);
-	
-	    if (j == 1) {
-	        /* wrong hash, skip the leaf */
-		pass_0_stat (fs)->too_old_leaves ++;
-		mark_buffer_clean (bh);
-		return;
-	    } else if (j == -1) {
-		/* item was deleted */
-		goto start_again;
-	    }
-	    continue;
-	}
-
-	/*DEBUG*/
-        if (!is_stat_data_ih (ih) && get_offset (&ih->ih_key) == 0)
-            reiserfs_panic ("block %lu, item %d: Zero offset can have StatData items only, but found %k\n", 
-		bh->b_blocknr, i, &ih->ih_key);	
-	
-	if (!is_indirect_ih (ih))
-	    continue;
-
-	/* Darko Palic's filesystem had item: [20079 17328 0xfffb1001 IND, len 4048], format old */
-	{
-	    struct key tmp_key;
-
-	    tmp_key = ih->ih_key;
-	    set_offset (key_format (&tmp_key), &tmp_key,
-			get_offset (&tmp_key) + get_bytes_number (ih, bh->b_size) - 1);
-
-	    if (get_offset (&tmp_key) <	get_offset (&ih->ih_key)) {
-		fsck_log ("pass0: block %lu, item %d: The item, which has wrong offset %k, is deleted\n",
-		    bh->b_blocknr, i, &ih->ih_key);
-		delete_item (fs, bh, i);
-		goto start_again;
-	    }
-	}
-	
-	/* temporary ugly fix */
-/*
-	if (i && is_stat_data_ih (ih - 1) && !not_of_one_file (&ih->ih_key, &(ih - 1)->ih_key)) {
-	    __u16 mode;
-
-	    get_sd_mode (ih - 1, B_I_PITEM (bh, ih - 1), &mode);
-	    if (!S_ISREG (mode)) {
-		fsck_log ("pass0: block %lu: mode (%M) of file %K having indirect item is fixed to ",
-			  bh->b_blocknr, mode, &ih->ih_key);
-		mode &= ~S_IFMT;
-		mode |= S_IFREG;
-		set_sd_mode (ih - 1, B_I_PITEM (bh, ih - 1), &mode);
-		fsck_log ("(%M)\n", mode);
-		dirty = 1;
-	    }
-	}
-*/
-	ind_item = (__u32 *)B_I_PITEM (bh, ih);
-	for (j = 0; j < (int)I_UNFM_NUM (ih); j ++) {
-	    unfm_ptr = d32_get (ind_item, j);
-	    if (!unfm_ptr)
-		continue;
-#if 0
-	    if (fsck_mode (fs) == FSCK_ZERO_FILES) {
-		/* FIXME: this is temporary mode of fsck */
-		ind_item [j] = 0;
-		reiserfs_bitmap_clear_bit (fsck_new_bitmap(fs), unfm_ptr);
-		tmp_zeroed ++;
-		dirty = 1;
-		continue;
-	    }
-#endif
-
-	    if (not_data_block (fs, unfm_ptr) || /* journal area or bitmap or super block */
-		unfm_ptr >= get_sb_block_count (fs->fs_ondisk_sb) || /* garbage in pointer */
-		(fs->fs_badblocks_bm && /* bad block */
-		reiserfs_bitmap_test_bit(fs->fs_badblocks_bm, unfm_ptr))) {
-
-		pass_0_stat (fs)->wrong_pointers ++;
-		/*
-		fsck_log ("pass0: %d-th pointer (%lu) in item %k (leaf block %lu) is wrong\n",
-			  j, unfm_ptr, &ih->ih_key, bh->b_blocknr);
-		*/
-		d32_put(ind_item, j, 0);
-		dirty = 1;
-		continue;
-	    }
-	    /* mark block in bitmaps of unformatted nodes */
-	    register_unfm (unfm_ptr);
-	}
-    }
-
-    /* mark all objectids in use */
-    ih = B_N_PITEM_HEAD (bh, 0);
-    for (i = 0; i < get_blkh_nr_items (B_BLK_HEAD (bh)); i ++, ih ++) {
-	struct reiserfs_de_head * deh;
-
-	id_map_mark(proper_id_map (fs), get_key_dirid (&ih->ih_key));
-	id_map_mark(proper_id_map (fs), get_key_objectid (&ih->ih_key));
-	if (is_direntry_ih(ih)) {
-	    for (j = 0, deh = B_I_DEH (bh, ih); j < get_ih_entry_count (ih); j ++, deh++) 
-		id_map_mark(proper_id_map(fs), get_deh_objectid(deh));	    
-	}
-    }
-
-    if (get_blkh_nr_items (B_BLK_HEAD (bh)) < 1) {
-	/* pass 1 will skip this */
-	pass_0_stat (fs)->all_contents_removed ++;
-//	fsck_log ("pass0: block %lu: All items were deleted.\n", bh->b_blocknr);
-	dirty = 0;
-	mark_buffer_clean (bh);
-    } else {
-	/* pass1 will use this bitmap */
-	pass0_mark_leaf (bh->b_blocknr);
-	/*fsck_data (fs)->rebuild.leaves ++;*/
-    }
-    
-    if (dirty) {
-	pass_0_stat (fs)->leaves_corrected ++;
-	mark_buffer_dirty (bh);
-    }
-}
-
-
-static int is_bad_sd (struct item_head * ih, char * item)
-{
-    struct stat_data * sd = (struct stat_data *)item;
-
-    if (get_key_offset_v1 (&ih->ih_key) || get_key_uniqueness (&ih->ih_key)) {
-	fsck_log ("vpf-10610: StatData item %k has non zero offset found.\n", 
-	    &ih->ih_key);
-	return 1;
-    }
-
-    if (get_ih_item_len (ih) == SD_V1_SIZE) {
-	/* looks like old stat data */
-	if (get_ih_key_format (ih) != KEY_FORMAT_1)
-	    fsck_log ("vpf-10620: StatData item %k has wrong format.\n", 
-		&ih->ih_key);
-	return 0;
-    }
-
-    if (!S_ISDIR (sd_v2_mode(sd)) && !S_ISREG(sd_v2_mode(sd)) &&
-	!S_ISCHR (sd_v2_mode(sd)) && !S_ISBLK(sd_v2_mode(sd)) &&
-	!S_ISLNK (sd_v2_mode(sd)) && !S_ISFIFO(sd_v2_mode(sd)) &&
-	!S_ISSOCK(sd_v2_mode(sd))) {	
-	/*fsck_log ("file %k unexpected mode encountered 0%o\n", &ih->ih_key, sd_v2_mode(sd))*/;
-    }
-    return 0;
-}
-
-
-int is_bad_directory (struct item_head * ih, char * item, int dev, int blocksize)
-{
-    int i;
-    char * name;
-    int namelen, entrylen;
-    struct reiserfs_de_head * deh = (struct reiserfs_de_head *)item;
-    __u32 prev_offset = 0;
-    __u16 prev_location = get_ih_item_len (ih);
-    int min_entry_size = 1;/* we have no way to understand whether the
-                              filesystem wes created in 3.6 format or
-                              converted to it. So, we assume that minimal name
-                              length is 1 */
-
-    if (get_ih_item_len (ih) / (DEH_SIZE + min_entry_size) < get_ih_entry_count (ih))
-	/* entry count is too big */
-	return 1;
-
-    for (i = 0; i < get_ih_entry_count (ih); i ++, deh ++) {
-	entrylen = entry_length(ih, deh, i);
-	if (entrylen > (int)REISERFS_MAX_NAME_LEN (blocksize))
-	    return 1;
-	
-	if (get_deh_offset (deh) <= prev_offset)
-	    return 1;
-	
-	prev_offset = get_deh_offset (deh);
-
-	if (get_deh_location(deh) + entrylen != prev_location)
-	    return 1;
-	
-	prev_location = get_deh_location (deh);
-
-	namelen = name_in_entry_length (ih, deh, i);
-	name = name_in_entry (deh, i);
-	if (!is_properly_hashed (fs, name, namelen, get_deh_offset (deh)))
-	    return 1;
-    }
-    return 0;
-}
-
-
-/* change incorrect block adresses by 0. Do not consider such item as incorrect */
-static int is_bad_indirect (struct item_head * ih, char * item, int dev, int blocksize)
-{
-    unsigned long blocks;
-    unsigned int i;
-    int bad = 0;
-
-    if (get_ih_item_len(ih) % UNFM_P_SIZE) {
-	fsck_log ("is_bad_indirect: indirect item of %H of invalid length\n", ih);
-	return 1;
-    }
-
-    blocks = get_sb_block_count (fs->fs_ondisk_sb);
-  
-    for (i = 0; i < I_UNFM_NUM (ih); i ++) {
-	__u32 * ind = (__u32 *)item;
-
-	if (d32_get (ind, i) >= blocks) {
-	    bad ++;
-	    fsck_log ("is_bad_indirect: %d-th pointer of item %H looks bad (%lu)\n",
-		      i, ih, d32_get (ind, i));
-	    continue;
-	}
-    }
-    return bad;
-}
-
-
-/* this is used by pass1.c:save_item and check.c:is_leaf_bad */
-int is_bad_item (struct buffer_head * bh, struct item_head * ih, char * item)
-{
-    int blocksize, dev;
-
-    blocksize = bh->b_size;
-    dev = bh->b_dev;
-
-    // FIXME: refuse transparently bad items
-    if (get_key_dirid (&ih->ih_key) == get_key_objectid (&ih->ih_key))
-	return 1;
-    if (!get_key_dirid (&ih->ih_key) || !get_key_objectid (&ih->ih_key))
-	return 1;
-
-    if (is_stat_data_ih(ih))
-	return is_bad_sd (ih, item);
-
-    if (is_direntry_ih (ih))
-	return is_bad_directory (ih, item, dev, blocksize);
-
-    if (is_indirect_ih (ih))
-	return is_bad_indirect (ih, item, dev, blocksize);
-
-    if (is_direct_ih (ih))
-	return 0;
-
-    return 1;
-}
-
-
-int is_leaf_bad (struct buffer_head * bh)
-{
-    int i;
-    struct item_head * ih;
-    int bad = 0;
-
-    assert (is_leaf_node (bh));
-
-    for (i = 0, ih = B_N_PITEM_HEAD (bh,  0); i < B_NR_ITEMS (bh); i ++, ih ++) {
-	if (is_bad_item (bh, ih, B_I_PITEM (bh, ih))) {
-	    fsck_log ("is_leaf_bad: block %lu, item %d: The corrupted item found (%H)\n",
-		      bh->b_blocknr, i, ih);
-	    bad = 1;
-	    continue;
-	}
-
-	if (i && bad_pair (fs, bh, i)) {
-	    fsck_log ("is_leaf_bad: block %lu items %d and %d: Wrong order of items:"
-		"\n\t%H\n\t%H\n", bh->b_blocknr, i - 1, i, ih - 1, ih);
-	    bad = 1;
-	}
-    }
-
-    return bad;
-}
-
-
-static int is_to_be_read (reiserfs_filsys_t * fs, unsigned long block)
-{
-    return reiserfs_bitmap_test_bit (fsck_source_bitmap (fs), block);
-}
-
-
-
-static void do_pass_0 (reiserfs_filsys_t * fs)
-{
-    struct buffer_head * bh;
-    unsigned long i;
-    int what_node;
-    unsigned long done = 0, total;
-
-
-    if (fsck_mode (fs) == DO_TEST) {
-	/* just to test pass0_correct_leaf */
-	bh = bread (fs->fs_dev, fsck_data (fs)->rebuild.test, fs->fs_blocksize);
-
-	if (!bh) {
-	    /* we were reading one block at time, and failed, so mark block bad */
-	    fsck_progress ("%s: Reading of the block %lu failed\n", __FUNCTION__, 
-		fsck_data (fs)->rebuild.test);
-	    reiserfs_free (fs);
-	    exit(0);
-	}
-
-	if (is_leaf_bad (bh)) {
-	    fsck_progress ("###############  bad #################\n");
-	}
-
-	pass0_correct_leaf (fs, bh);
-	
-	print_block (stdout, fs, bh, 3, -1, -1);
-
-	if (is_leaf_bad (bh)) {
-	    fsck_progress ("############### still bad #################\n");
-	}
-	brelse (bh);
-	reiserfs_free (fs);
-	exit(0);
-    }
-
-
-    total = reiserfs_bitmap_ones (fsck_source_bitmap (fs));
-	
-    for (i = 0; i < get_sb_block_count (fs->fs_ondisk_sb); i ++) {
-	if (!is_to_be_read (fs, i))
-	    continue;
-
-	print_how_far (fsck_progress_file (fs), &done, total, 1, fsck_quiet (fs));
-
-	bh = bread (fs->fs_dev, i, fs->fs_blocksize);
-	if (!bh) {
-	    /* we were reading one block at time, and failed, so mark block bad */
-	    fsck_progress ("%s: Reading of the block %lu failed\n", __FUNCTION__, i);
-	    continue;
-	}
-
-	if (fs->fs_badblocks_bm && reiserfs_bitmap_test_bit (fs->fs_badblocks_bm, i))
-	    reiserfs_panic ("The block (%lu), specified in badblock list, was read.", i);
-	
-	if (not_data_block (fs, i)) {
-	    /* block which could not be pointed by indirect item */
-	    if (!(block_of_journal (fs, i) && fsck_data(fs)->rebuild.use_journal_area))
-		reiserfs_panic ("The block (%lu) from non data area was read.", i);
-	}
-
-	pass_0_stat (fs)->dealt_with ++;
-	what_node = who_is_this (bh->b_data, bh->b_size);
-	if ( what_node != THE_LEAF && what_node != HAS_IH_ARRAY ) {
-	    brelse (bh);
-	    continue;
-	}
-	
-	pass_0_stat (fs)->leaves ++;
-	pass0_correct_leaf (fs, bh);
-	brelse (bh);
-    }
-    fsck_progress ("\n");
-
-
-    /* just in case */
-    id_map_mark(proper_id_map (fs), REISERFS_ROOT_OBJECTID);
-
-}
-
-
-
-int is_used_leaf (unsigned long block)
-{
-    return pass0_is_leaf (block);
-}
-
-/*
-int how_many_leaves_were_there (void)
-{
-    return fsck_data (fs)->rebuild.leaves;
-}
-*/
-
-/* these are used to correct uformatted node pointers */
-int is_bad_unformatted (unsigned long block)
-{
-    return pass0_is_bad_unfm (block);
-}
-
-/* these are used to correct uformatted node pointers */
-int is_good_unformatted (unsigned long block)
-{
-    return pass0_is_good_unfm (block);
-}
-
-
-/* this is for check only. With this we make sure that all pointers we
-   put into tree on pass 1 do not point to leaves (FIXME), do not
-   point to journal, bitmap, etc, do not point out of fs boundary (and
-   are marked used in on-disk bitmap - this condition skipped for now). */
-int still_bad_unfm_ptr_1 (unsigned long block)
-{
-    if (!block)
-	return 0;
-    if (pass0_is_leaf (block))
-	return 1;
-    if (pass0_is_bad_unfm (block) && !is_bad_unfm_in_tree_once (block))
-	return 2;
-    if (not_data_block (fs, block))
-	return 3;
-    /*
-    if (!was_block_used (block))
-	return 4;
-    */
-    if (block >= get_sb_block_count (fs->fs_ondisk_sb))
-	return 5;
-    return 0;
-    
-}
-
-
-/* pointers to data block which get into tree are checked with this */
-int still_bad_unfm_ptr_2 (unsigned long block)
-{
-    if (!block)
-	return 0;
-    if (is_block_used (block))
-	return 1;
-    if (block >= get_sb_block_count (fs->fs_ondisk_sb))
-	return 1;
-    return 0;
-}
-
-
-/* these are used to allocate blocks for tree building */
-int are_there_allocable_blocks (unsigned int amout_needed) {
-    if (reiserfs_bitmap_zeros (fsck_allocable_bitmap (fs)) < amout_needed) {
-	unsigned int zeros = 0, i;
-	
-	fsck_progress ("Not enough allocable blocks, checking bitmap...");
-	for (i = 0; i < fsck_allocable_bitmap (fs)->bm_bit_size; i ++) {
-	    if (!reiserfs_bitmap_test_bit (fsck_allocable_bitmap (fs), i))
-		zeros ++;
-	}
-	fsck_progress ("there are %u allocable blocks, btw\n", zeros);
-	return 0;
-    }
-    return 1;
-}
-
-
-unsigned long alloc_block (void)
-{
-    unsigned long block = 0; /* FIXME: start point could be used */
-
-    if (reiserfs_bitmap_find_zero_bit (fsck_allocable_bitmap (fs), &block)) {
-	die ("alloc_block: Allocable blocks counter is wrong");
-	return 0;
-    }
-    reiserfs_bitmap_set_bit (fsck_allocable_bitmap (fs), block);
-    return block;
-}
-
-
-void make_allocable (unsigned long block)
-{
-    reiserfs_bitmap_clear_bit (fsck_allocable_bitmap (fs), block);
-}
-
-static void choose_hash_function (reiserfs_filsys_t * fs)
-{
-    unsigned long max;
-    unsigned int hash_code;
-    int i;
-
-    if (fsck_hash_defined (fs))
-	return;
-
-    max = 0;
-    hash_code = func2code (0);
-
-    for (i = 0; i < fsck_data (fs)->rebuild.hash_amount; i ++) {
-	/* remember hash whihc got more hits */
-	if (fsck_data (fs)->rebuild.hash_hits [i] > max) {
-	    hash_code = i;
-	    max = fsck_data (fs)->rebuild.hash_hits [i];
-	}
-
-	if (fsck_data (fs)->rebuild.hash_hits [i])
-	    fsck_log ("%lu directory entries were hashed with %s hash.\n", 
-		      fsck_data (fs)->rebuild.hash_hits [i], code2name(i));
-    }
-
-    if (max == 0 || hash_code == 0) {
-	/* no names were found. take either super block value or
-           default */
-        hash_code = get_sb_hash_code (fs->fs_ondisk_sb);
-	if (!hash_code)
-	    hash_code = DEFAULT_HASH;
-        fsck_log ("Could not find a hash in use. Using %s\n",
-		  code2name (hash_code));
-    }
-    /* compare the most appropriate hash with the hash set in super block */
-    if (hash_code != get_sb_hash_code (fs->fs_ondisk_sb)) {
-        fsck_progress ("Selected hash (%s) does not match to the hash set in the super block (%s).\n",
-		code2name (hash_code), code2name (get_sb_hash_code (fs->fs_ondisk_sb)));
-        set_sb_hash_code (fs->fs_ondisk_sb, hash_code);
-    } 
-    fsck_progress ("\t%s hash is selected\n", code2name (hash_code));
-    
-    reiserfs_hash (fs) = code2func (hash_code);
-}
-
-/* create bitmap of blocks the tree is to be built off */
-/* debugreiserfs and pass0 should share this code -s should show
-the same as we could recover - test: zero first 32M */
-static void init_source_bitmap (reiserfs_filsys_t * fs)
-{
-    FILE * fp;
-    unsigned long block_count = get_sb_block_count (fs->fs_ondisk_sb);
-    unsigned long i, j;
-    unsigned long tmp;
-    unsigned long block, reserved, bits_amount;
-
-
-    switch (fsck_data (fs)->rebuild.scan_area) {
-    case ALL_BLOCKS:
-	fsck_source_bitmap (fs) = reiserfs_create_bitmap (block_count);
-	reiserfs_bitmap_fill (fsck_source_bitmap (fs));
-	fsck_progress ("The whole partition (%d blocks) is to be scanned\n", 
-		       reiserfs_bitmap_ones (fsck_source_bitmap (fs)));	
-	break;
-
-    case USED_BLOCKS:
-	fsck_progress ("Loading on-disk bitmap .. ");
-	fsck_source_bitmap (fs) = reiserfs_create_bitmap (block_count);	
-	reiserfs_bitmap_copy (fsck_source_bitmap (fs), fs->fs_bitmap2);
-	
-	fsck_progress ("ok, %d blocks marked used\n", 
-		       reiserfs_bitmap_ones (fsck_source_bitmap (fs)));
-	break;
-
-    case EXTERN_BITMAP:
-	fp = fopen (fsck_data (fs)->rebuild.bitmap_file_name, "r");
-	
-	if (!fp) {
-	    reiserfs_exit (EXIT_OPER, "Could not load bitmap: %s\n", 
-			   strerror(errno));
-	}
-	
-	fsck_source_bitmap (fs) = reiserfs_bitmap_load (fp);
-	
-	if (!fsck_source_bitmap (fs)) {
-	    reiserfs_exit (EXIT_OPER, "Could not load fitmap from \"%s\"", 
-			   fsck_data (fs)->rebuild.bitmap_file_name);
-	}
-
-	fsck_progress ("%d blocks marked used in extern bitmap\n", 
-		       reiserfs_bitmap_ones (fsck_source_bitmap (fs)));
-	fclose (fp);
-	break;
-
-    default:
-	reiserfs_panic ("No area to scan specified");
-    }
-
-    tmp = 0;
-
-    /* unmark bitmaps */
-    block = fs->fs_super_bh->b_blocknr + 1;
-
-    reserved = fsck_source_bitmap(fs)->bm_bit_size;
-    for (i = 0; i < get_sb_bmap_nr (fs->fs_ondisk_sb); i ++) {
-	if (!reiserfs_bitmap_test_bit (fsck_source_bitmap (fs), block)) {
-	    /* bitmap is definitely broken, mark all blocks of this bitmap block as used */
-	
-	    bits_amount = (reserved < fs->fs_blocksize * 8) ? reserved : fs->fs_blocksize * 8;
-	    fsck_log("%s: Bitmap %lu (of %lu bits) is wrong - mark all blocks [%lu - %lu] as used\n",
-		__FUNCTION__, i, bits_amount, i * fs->fs_blocksize * 8,
-		fs->fs_blocksize * 8 * i + bits_amount); 	
-				
-	    for (j = i * fs->fs_blocksize * 8; j < i * fs->fs_blocksize * 8 + bits_amount; j++) {
-	        if (!reiserfs_bitmap_test_bit (fsck_source_bitmap(fs), j))
-		    reiserfs_bitmap_set_bit (fsck_source_bitmap(fs), j);
-	    }
-        }
-        reiserfs_bitmap_clear_bit (fsck_source_bitmap (fs), block);
-
-	reserved -= fs->fs_blocksize * 8;
-	tmp ++;
-	/* next block fo bitmap */
-	if (spread_bitmaps (fs))
-	    block = (block / (fs->fs_blocksize * 8) + 1) * (fs->fs_blocksize * 8);
-	else
-	    block ++;
-    }
-
-    /* pass 0 will skip super block and journal areas and bitmap blocks, find
-       how many blocks have to be read */
-    for (i = 0; i <= fs->fs_super_bh->b_blocknr; i ++) {
-	if (!reiserfs_bitmap_test_bit (fsck_source_bitmap (fs), i))
-	    continue;
-	reiserfs_bitmap_clear_bit (fsck_source_bitmap (fs), i);
-	tmp ++;
-    }
-
-    /* unmark journal area as used if journal is standard or it is non standard
-       and initialy has been created on a main device */
-
-    reserved = get_size_of_journal_or_reserved_area (fs->fs_ondisk_sb);
-    /* where does journal area (or reserved journal area) start from */
-
-    if (!is_new_sb_location (fs->fs_super_bh->b_blocknr, fs->fs_blocksize) &&
-    	!is_old_sb_location (fs->fs_super_bh->b_blocknr, fs->fs_blocksize))
-	die ("init_source_bitmap: Wrong super block location, you must run --rebuild-sb.");
-
-    block = get_journal_start_must (fs);
-
-    for (i = block; i < reserved + block; i ++) {
-	if (!reiserfs_bitmap_test_bit (fsck_source_bitmap (fs), i))
-	    continue;
-	reiserfs_bitmap_clear_bit (fsck_source_bitmap (fs), i);
-	tmp ++;	
-    }
-
-    if (fs->fs_badblocks_bm)
-    	for (i = 0; i < get_sb_block_count (fs->fs_ondisk_sb); i ++) {
-	    if (reiserfs_bitmap_test_bit (fs->fs_badblocks_bm, i))
-		reiserfs_bitmap_clear_bit (fsck_source_bitmap (fs), i);
-    	}
-
-    fsck_source_bitmap (fs)->bm_set_bits = reiserfs_bitmap_ones (fsck_source_bitmap (fs));
-
-    fsck_progress ("Skipping %d blocks (super block, journal, "
-		   "bitmaps) %d blocks will be read\n", tmp, fsck_source_bitmap (fs)->bm_set_bits);
-		
-}
-
-
-static void before_pass_0 (reiserfs_filsys_t * fs)
-{
-    /* bitmap of blocks to be read */
-    init_source_bitmap (fs);
-
-    /* bitmap of leaves, good and bad unformatted */
-    make_aux_bitmaps (fs);
-
-    /* on pass0 all objectids will be marked here as used */
-    proper_id_map (fs) = id_map_init();
-
-    /* pass0 gathers statistics about hash hits */
-    hash_hits_init (fs);
-}
-
-
-static void save_pass_0_result (reiserfs_filsys_t * fs)
-{
-    FILE * file;
-    int retval;
-
-    /* save bitmaps with which we will be able start reiserfs from
-       pass 1 */
-    file = open_file ("temp_fsck_file.deleteme", "w+");
-    if (!file)
-	return;
-
-    reiserfs_begin_stage_info_save (file, PASS_0_DONE);
-    reiserfs_bitmap_save (file,  leaves_bitmap);
-    reiserfs_bitmap_save (file,  good_unfm_bitmap);
-    reiserfs_bitmap_save (file,  bad_unfm_bitmap);
-    reiserfs_end_stage_info_save (file);
-    close_file (file);
-    retval = rename ("temp_fsck_file.deleteme", state_dump_file (fs));
-    if (retval != 0)
-	fsck_progress ("%s: Could not rename the temporary file temp_fsck_file.deleteme to %s",
-	    __FUNCTION__, state_dump_file (fs));
-}
-
-
-/* file 'fp' must contain 3 bitmaps saved during last pass 0: bitmap
-   of leaves, bitmaps of good and bad unfms*/
-void load_pass_0_result (FILE * fp, reiserfs_filsys_t * fs)
-{
-    leaves_bitmap = reiserfs_bitmap_load (fp);
-    good_unfm_bitmap = reiserfs_bitmap_load (fp);
-    bad_unfm_bitmap = reiserfs_bitmap_load (fp);
-    if (!leaves_bitmap || !good_unfm_bitmap || !bad_unfm_bitmap)
-	fsck_exit ("State dump file seems corrupted. Run without -d");
-
-    fsck_source_bitmap (fs) = leaves_bitmap;
-
-    /* on pass 1 we do not need proper objectid map */
-
-    fsck_progress ("Pass 0 result loaded. %d leaves, %d/%d good/bad data blocks\n",
-		   reiserfs_bitmap_ones (leaves_bitmap),
-		   reiserfs_bitmap_ones (good_unfm_bitmap),
-		   reiserfs_bitmap_ones (bad_unfm_bitmap));
-}
-
-
-static void after_pass_0 (reiserfs_filsys_t * fs)
-{
-    time_t t;
-
-    /* update super block: hash, objectid map, fsck state */
-    choose_hash_function (fs);
-    id_map_flush(proper_id_map (fs), fs);
-    set_sb_fs_state (fs->fs_ondisk_sb, PASS_0_DONE);
-    mark_buffer_dirty (fs->fs_super_bh);
-
-    /* write all dirty blocks */
-    fsck_progress ("Flushing..");
-    fs->fs_dirt = 1;
-    reiserfs_flush (fs);
-    fsck_progress ("finished\n");
-
-    stage_report (0, fs);
-
-    /* free what we do not need anymore */
-    reiserfs_delete_bitmap (fsck_source_bitmap (fs));
-    fsck_source_bitmap (fs) = 0;
-
-    if (!fsck_run_one_step (fs)) {
-	if (fsck_user_confirmed (fs, "Continue? (Yes):", "Yes\n", 1)) {
-	    /* reiserfsck continues */
-	    fsck_source_bitmap (fs) = leaves_bitmap;
-	    return;
-	}
-    } else
-	save_pass_0_result (fs);
-
-    id_map_free(proper_id_map (fs));
-    proper_id_map (fs) = 0;
-    
-    time (&t);
-    fsck_progress ("###########\n"
-		   "reiserfsck finished pass 0 at %s"
-		   "###########\n", ctime (&t));
-    fs->fs_dirt = 1;
-    reiserfs_close (fs);
-    exit(0);
-}
-
-
-void pass_0 (reiserfs_filsys_t * fs)
-{
-    if (get_reiserfs_format (fs->fs_ondisk_sb) != fs->fs_format || 
-        get_reiserfs_format (fs->fs_ondisk_sb) == REISERFS_FORMAT_UNKNOWN)
-    {
-	reiserfs_exit (EXIT_OPER, "pass 0: ReiserFS format version mismatch "
-		       "found, you should run --rebuild-sb");
-    }
-  
-    fsck_progress ("\nPass 0:\n");
-    if (fsck_log_file (fs) != stderr)
-	/* this is just to separate warnings in the log file */
-	fsck_log ("####### Pass 0 #######\n");
-
-
-    before_pass_0 (fs);
-
-    /* scan the partition, find leaves and correct them */
-    do_pass_0 (fs);
-
-    after_pass_0 (fs);
-}
-
diff --git a/fsck/pass1.c b/fsck/pass1.c
deleted file mode 100644
index d27fbb6..0000000
--- a/fsck/pass1.c
+++ /dev/null
@@ -1,821 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README 
- */
-
-#include "fsck.h"
-
-reiserfs_bitmap_t * bad_unfm_in_tree_once_bitmap;
-
-
-//int step = 0; // 0 - find stat_data or any item ; 1 - find item ; 2 - already found
-
-
-/* allocates buffer head and copy buffer content */
-struct buffer_head * make_buffer (int dev, unsigned long blocknr, int size, char * data)
-{
-    struct buffer_head * bh;
-    
-    bh = getblk (dev, blocknr, size);
-    if (buffer_uptodate (bh))
-	return bh;
-//    die ("make_buffer: uptodate buffer found");
-    memcpy (bh->b_data, data, size);
-    misc_set_bit (BH_Uptodate, (char *)&bh->b_state);
-    return bh;
-}
-
-
-int find_not_of_one_file(struct key * to_find, struct key * key) {
-    if ((get_key_objectid (to_find) != ~(__u32)0) &&
-        (get_key_objectid (to_find) != get_key_objectid (key)))
-        return 1;
-    if ((get_key_dirid (to_find) != ~(__u32)0) &&
-        (get_key_dirid (to_find) != get_key_dirid (key)))
-        return 1;
-    return 0;
-}
-
-
-int is_item_reachable (struct item_head * ih)
-{
-    return ih_reachable (ih) ? 1 : 0;
-}
-
-
-void mark_item_unreachable (struct item_head * ih)
-{
-    clean_ih_flags (ih);
-    mark_ih_unreachable (ih);
-
-    if (is_indirect_ih (ih))
-	set_ih_free_space (ih, 0);
-}
-
-
-void mark_item_reachable (struct item_head * ih, struct buffer_head * bh)
-{
-    mark_ih_reachable (ih);
-    mark_buffer_dirty (bh);
-}
-
-static void stat_data_in_tree (struct buffer_head *bh,
-			       struct item_head * ih)
-{
-#if 0
-    __u32 objectid;
-    
-    objectid = get_key_objectid (&ih->ih_key);
-    
-    if (mark_objectid_really_used (proper_id_map (fs), objectid)) {
-	stat_shared_objectid_found (fs);
-	mark_objectid_really_used (shared_id_map (fs), objectid);
-    }
-#endif
-    
-    zero_nlink (ih, B_I_PITEM (bh, ih));
-}
-
-static char *still_bad_unfm_ptr_to_string (int val) {
-    switch (val) {
-	case 1:
-	    return "a leaf";
-	case 2:
-	    return "shared between a few files";
-	case 3:
-	    return "not a data block";
-	case 4:
-	    return "not used in on-disk bitmap";
-	case 5:
-	    return "out of partition boundary";
-    }
-    return "";
-}
-
-/* this just marks blocks pointed by an indirect item as used in the
-   new bitmap */
-static void indirect_in_tree (struct buffer_head * bh,
-			      struct item_head * ih)
-{
-    unsigned int i;
-    __u32 * unp;
-    __u32 unfm_ptr;
-    int ret;
-
-    unp = (__u32 *)B_I_PITEM (bh, ih);
-    
-    for (i = 0; i < I_UNFM_NUM (ih); i ++) {
-	unfm_ptr = d32_get (unp, i);
-	if (unfm_ptr == 0)
-	    continue;
-	if ((ret = still_bad_unfm_ptr_1 (unfm_ptr)))
-	    reiserfs_panic ("%s: block %lu: The file %k points to the block (%u) which is %s", 
-		__FUNCTION__, bh->b_blocknr, &ih->ih_key, unfm_ptr, still_bad_unfm_ptr_to_string(ret));
-
-	mark_block_used (unfm_ptr, 1);
-    }
-}
-
-
-static void leaf_is_in_tree_now (struct buffer_head * bh)
-{
-    item_action_t actions[] = {stat_data_in_tree, indirect_in_tree, 0, 0};
-
-    mark_block_used ((bh)->b_blocknr, 1);
-
-    for_every_item (bh, mark_item_unreachable, actions);
-
-    pass_1_stat (fs)->inserted_leaves ++;
-
-    mark_buffer_dirty (bh);
-}
-
-
-static void insert_pointer (struct buffer_head * bh, struct path * path)
-{
-    struct item_head * ih;
-    char * body;
-    int retval;
-    struct tree_balance tb;
-    
-    init_tb_struct (&tb, fs, path, 0x7fff);
-
-    /* fix_nodes & do_balance must work for internal nodes only */
-    ih = 0;
-
-    retval = fix_nodes (/*tb.transaction_handle,*/ M_INTERNAL, &tb, ih);
-    if (retval != CARRY_ON)
-	die ("insert_pointer: fix_nodes failed with retval == %d", retval);
-    
-    /* child_pos: we insert after position child_pos: this feature of the insert_child */
-    /* there is special case: we insert pointer after
-       (-1)-st key (before 0-th key) in the parent */
-    if (PATH_LAST_POSITION (path) == 0 && path->pos_in_item == 0)
-	PATH_H_B_ITEM_ORDER (path, 0) = -1;
-    else {
-	if (PATH_H_PPARENT (path, 0) == 0)
-	    PATH_H_B_ITEM_ORDER (path, 0) = 0;
-/*    PATH_H_B_ITEM_ORDER (path, 0) = PATH_H_PPARENT (path, 0) ? PATH_H_B_ITEM_ORDER (path, 0) : 0;*/
-    }
-    
-    ih = 0;
-    body = (char *)bh;
-    //memmode = 0;
-
-    do_balance (&tb, ih, body, M_INTERNAL, 0);
-
-    leaf_is_in_tree_now (bh);
-}
-
-
-/* return 1 if left and right can be joined. 0 otherwise */
-int balance_condition_fails (struct buffer_head * left, struct buffer_head * right)
-{
-    if (B_FREE_SPACE (left) >= B_CHILD_SIZE (right) -
-	(are_items_mergeable (B_N_PITEM_HEAD (left, B_NR_ITEMS (left) - 1), B_N_PITEM_HEAD (right, 0), left->b_size) ? IH_SIZE : 0))
-	return 1;
-    return 0;
-}
-
-
-/* return 1 if new can be joined with last node on the path or with
-   its right neighbor, 0 otherwise */
-int balance_condition_2_fails (struct buffer_head * new, struct path * path)
-{
-    struct buffer_head * bh;
-    struct key * right_dkey;
-    int pos, used_space;
-    
-    bh = PATH_PLAST_BUFFER (path);
-    
-
-    if (balance_condition_fails (bh, new))
-	/* new node can be joined with last buffer on the path */
-	return 1;
-    
-    /* new node can not be joined with its left neighbor */
-    
-    right_dkey = uget_rkey (path);
-    if (right_dkey == 0)
-	/* there is no right neighbor */
-	return 0;
-    
-    pos = PATH_H_POSITION (path, 1);
-    if (pos == B_NR_ITEMS (bh = PATH_H_PBUFFER (path, 1))) {
-	/* we have to read parent of right neighbor. For simplicity we
-	   call search_by_key, which will read right neighbor as well */
-	INITIALIZE_PATH(path_to_right_neighbor);
-	
-	if (reiserfs_search_by_key_4 (fs, right_dkey, &path_to_right_neighbor) != ITEM_FOUND)
-	    reiserfs_panic ("%s: block %lu, pointer %d: The left delimiting key %k of the block (%lu) is wrong,"
-		"the item cannot be found", __FUNCTION__, PATH_H_PBUFFER(path, 1)->b_blocknr, pos, 
-		right_dkey, get_dc_child_blocknr(B_N_CHILD (bh, pos + 1)));
-
-	used_space =  B_CHILD_SIZE (PATH_PLAST_BUFFER (&path_to_right_neighbor));
-	pathrelse (&path_to_right_neighbor);
-    }
-    else
-	used_space = get_dc_child_size (B_N_CHILD (bh, pos + 1));
-    
-    if (B_FREE_SPACE (new) >= used_space -
-	(are_items_mergeable (B_N_PITEM_HEAD (new, B_NR_ITEMS (new) - 1), (struct item_head *)right_dkey, new->b_size) ? IH_SIZE : 0))
-	return 1;
-
-    return 0;
-}
-
-
-static void get_max_buffer_key (struct buffer_head * bh, struct key * key)
-{
-    struct item_head * ih;
-
-    ih = B_N_PITEM_HEAD (bh, B_NR_ITEMS (bh) - 1);
-    copy_key (key, &(ih->ih_key));
-
-    if (is_direntry_key (key)) {
-	/* copy deh_offset 3-rd and 4-th key components of the last entry */
-	set_offset (KEY_FORMAT_1, key, 
-		    get_deh_offset (B_I_DEH (bh, ih) + get_ih_entry_count (ih) - 1));
-
-    } else if (!is_stat_data_key (key))
-	/* get key of the last byte, which is contained in the item */
-	set_offset (key_format (key), key, get_offset (key) + get_bytes_number (ih, bh->b_size) - 1);
-}
-
-
-int tree_is_empty (void)
-{
-    return (get_sb_root_block (fs->fs_ondisk_sb) == ~(__u32)0 || 
-	    get_sb_root_block (fs->fs_ondisk_sb) == 0) ? 1 : 0;
-}
-
-
-void make_single_leaf_tree (struct buffer_head * bh)
-{
-    /* tree is empty, make tree root */
-    set_sb_root_block (fs->fs_ondisk_sb, bh->b_blocknr);
-    set_sb_tree_height (fs->fs_ondisk_sb, 2);
-    mark_buffer_dirty (fs->fs_super_bh);
-    leaf_is_in_tree_now (bh);
-}
-
-
-/* inserts pointer to leaf into tree if possible. If not, marks node as
-   uninsertable in special bitmap */
-static void try_to_insert_pointer_to_leaf (struct buffer_head * new_bh)
-{
-    INITIALIZE_PATH (path);
-    struct buffer_head * bh;			/* last path buffer */
-    struct key * first_bh_key, last_bh_key;	/* first and last keys of new buffer */
-    struct key last_path_buffer_last_key, * right_dkey;
-    int ret_value;
-
-    if (tree_is_empty () == 1) {
-	make_single_leaf_tree (new_bh);
-	return;
-    }
-
-    first_bh_key = B_N_PKEY (new_bh, 0);
-    
-    /* try to find place in the tree for the first key of the coming node */
-    ret_value = reiserfs_search_by_key_4 (fs, first_bh_key, &path);
-    if (ret_value == ITEM_FOUND)
-	goto cannot_insert;
-
-    /* get max key in the new node */
-    get_max_buffer_key (new_bh, &last_bh_key);
-
-    bh = PATH_PLAST_BUFFER (&path);
-    if (comp_keys (B_N_PKEY (bh, 0), &last_bh_key) == 1/* first is greater*/) {
-	/* new buffer falls before the leftmost leaf */
-	if (balance_condition_fails (new_bh, bh))
-	    goto cannot_insert;
-	
-	if (uget_lkey (&path) != 0 || PATH_LAST_POSITION (&path) != 0)
-	    die ("try_to_insert_pointer_to_leaf: bad search result");
-	
-	path.pos_in_item = 0;
-	goto insert;
-    }
-    
-    /* get max key of buffer, that is in tree */
-    get_max_buffer_key (bh, &last_path_buffer_last_key);
-    if (comp_keys (&last_path_buffer_last_key, first_bh_key) != -1/* second is greater */)
-	/* first key of new buffer falls in the middle of node that is in tree */
-	goto cannot_insert;
-    
-    right_dkey = uget_rkey (&path);
-    if (right_dkey && comp_keys (right_dkey, &last_bh_key) != 1 /* first is greater */)
-	goto cannot_insert;
-    
-    if (balance_condition_2_fails (new_bh, &path))
-	goto cannot_insert;
-
-
- insert:
-    insert_pointer (new_bh, &path);
-    goto out;
-    
- cannot_insert:
-    /* statistic */
-
-    mark_block_uninsertable (new_bh->b_blocknr);
-    
- out:
-    pathrelse (&path);
-    return;
-}
-
-
-
-/* everything should be correct already in the leaf but contents of indirect
-   items. So we only
-   1. zero slots pointing to a leaf
-   2. zero pointers to blocks which are pointed already
-   3. what we should do with directory entries hashed by another hash?
-   they are deleted for now
-*/
-static void pass1_correct_leaf (reiserfs_filsys_t * fs,
-				struct buffer_head * bh)
-{
-    unsigned int i, j;
-    struct item_head * ih;
-    __u32 * ind_item;
-    __u32 unfm_ptr;
-    int dirty = 0;
-
-
-    ih = B_N_PITEM_HEAD (bh, 0);
-    for (i = 0; i < B_NR_ITEMS (bh); i ++, ih ++) {
-	if (is_direntry_ih (ih)) {
-	    struct reiserfs_de_head * deh;
-	    __u32 offset;
-	    char * name;
-	    int name_len;
-	    unsigned int hash_code;
-
-	    deh = B_I_DEH (bh, ih);
-	    offset = 0;
-	    for (j = 0; j < get_ih_entry_count (ih); j ++) {
-		name = name_in_entry (deh + j, j);
-		name_len = name_in_entry_length (ih, deh + j, j);
-
-		if ((j == 0 && is_dot (name, name_len)) ||
-		    (j == 1 && is_dot_dot (name, name_len))) {
-		    continue;
-		}
-
-		hash_code = find_hash_in_use (name, name_len, get_deh_offset (deh + j),
-					      get_sb_hash_code (fs->fs_ondisk_sb));
-		if (hash_code != get_sb_hash_code (fs->fs_ondisk_sb)) {
-		    fsck_log ("pass1: block %lu, item %d, entry %d: The entry \"%.*s\" of the %k is hashed with %s "
-			"whereas proper hash is %s", bh->b_blocknr, i, j, name_len, name, &ih->ih_key,
-			      code2name (hash_code), code2name (get_sb_hash_code (fs->fs_ondisk_sb)));
-		    if (get_ih_entry_count (ih) == 1) {
-			delete_item (fs, bh, i);
-			fsck_log(" - the only entry - item was deleted\n");
-			i --;
-			ih --;
-			break;
-		    } else {
-			cut_entry (fs, bh, i, j, 1);
-			fsck_log(" - deleted\n");
-			j --;
-			deh = B_I_DEH (bh, ih);
-			continue;
-		    }
-		}
-
-		if (j && offset >= get_deh_offset (deh + j)) {
-		    fsck_log ("pass1: block %lu, item %d, entry %d: The entry "
-			      "\"%.*s\" of the %k has hash offset %lu not "
-			      "larger smaller than the previous one %lu. The "
-			      "entry is deleted.\n", bh->b_blocknr, 
-			      i, j, name_len, name, &ih->ih_key, 
-			      get_deh_offset(deh + j), offset);
-		    cut_entry (fs, bh, i, j, 1);
-		    j --;
-		    deh = B_I_DEH (bh, ih);
-		    continue;
-		}
-
-		offset = get_deh_offset (deh + j);
-	    }
-	    continue;
-	}
-
-
-	if (!is_indirect_ih (ih))
-	    continue;
-
-	/* correct indirect items */
-	ind_item = (__u32 *)B_I_PITEM (bh, ih);
-
-	for (j = 0; j < I_UNFM_NUM (ih); j ++) {
-	    unfm_ptr = d32_get (ind_item, j);
-
-	    if (!unfm_ptr)
-		continue;
-
-	    /* this corruption of indirect item had to be fixed in pass0 */
-	    if (not_data_block (fs, unfm_ptr) || unfm_ptr >= get_sb_block_count (fs->fs_ondisk_sb))
-		/*!was_block_used (unfm_ptr))*/
-		reiserfs_panic ("%s: block %lu, item %d, pointer %d: The wrong pointer (%u) in the file %K. "
-		    "Must be fixed on pass0.",  __FUNCTION__, bh->b_blocknr, i, j, unfm_ptr, &ih->ih_key);
-
-	    /* 1. zero slots pointing to a leaf */
-	    if (is_used_leaf (unfm_ptr)) {
-		dirty ++;
-		d32_put (ind_item, j, 0);
-		pass_1_stat (fs)->pointed_leaves ++;
-		continue;
-	    }
-
-	    /* 2. zero pointers to blocks which are pointed already */
-	    if (is_bad_unformatted (unfm_ptr)) {
-		/* this unformatted pointed more than once. Did we see it already? */
-		if (!is_bad_unfm_in_tree_once (unfm_ptr))
-		    /* keep first reference to it and mark about that in
-                       special bitmap */
-		    mark_bad_unfm_in_tree_once (unfm_ptr);
-		else {
-		    /* Yes, we have seen this pointer already, zero other pointers to it. */
-		    dirty ++;
-		    d32_put (ind_item, j, 0);
-		    pass_1_stat (fs)->non_unique_pointers ++;
-		    continue;
-		}
-	    } else
-		pass_1_stat (fs)->correct_pointers ++;
-	}
-    }
-
-    if (dirty)
-	mark_buffer_dirty (bh);
-}
-
-struct si * remove_saved_item (struct si * si)
-{
-    struct si * tmp = si->si_next;
-    
-    freemem (si->si_dnm_data);
-    freemem (si);
-    return tmp;
-}
-
-/* fsck starts creating of this bitmap on pass 1. It will then become
-   on-disk bitmap */
-static void init_new_bitmap (reiserfs_filsys_t * fs)
-{
-    unsigned int i;
-    unsigned long block;
-    unsigned long reserved;
-    
-
-    fsck_new_bitmap (fs) = reiserfs_create_bitmap (get_sb_block_count (fs->fs_ondisk_sb));
-
-    /* mark_block_used skips 0, set the bit explicitly */
-    reiserfs_bitmap_set_bit (fsck_new_bitmap (fs), 0);
-
-    /* mark other skipped blocks and super block used */
-    for (i = 1; i <= fs->fs_super_bh->b_blocknr; i ++)
-	mark_block_used (i, 1);
-
-    /* mark bitmap blocks as used */
-    block = fs->fs_super_bh->b_blocknr + 1;
-    for (i = 0; i < get_sb_bmap_nr (fs->fs_ondisk_sb); i ++) {
-	mark_block_used (block, 1);
-	if (spread_bitmaps (fs))
-	    block = (block / (fs->fs_blocksize * 8) + 1) * (fs->fs_blocksize * 8);
-	else
-	    block ++;
-    }
-
-    reserved = get_size_of_journal_or_reserved_area (fs->fs_ondisk_sb);
-    /* where does journal area (or reserved journal area) start from */
-
-    if (!is_new_sb_location (fs->fs_super_bh->b_blocknr, fs->fs_blocksize) &&
-    	!is_old_sb_location (fs->fs_super_bh->b_blocknr, fs->fs_blocksize))
-	die ("init_new_bitmap: Wrong super block location, you must run --rebuild-sb.");
-
-    block = get_journal_start_must (fs);
-
-    for (i = block; i < reserved + block; i ++)
-	mark_block_used (i, 1);
-	
-
-    if (fs->fs_badblocks_bm)
-    	for (i = 0; i < get_sb_block_count (fs->fs_ondisk_sb); i ++) {
-	    if (reiserfs_bitmap_test_bit (fs->fs_badblocks_bm, i)) {
-	    	if (reiserfs_bitmap_test_bit (fsck_new_bitmap (fs), i))
-	    	    reiserfs_panic ("%s: The block pointer to not data area, must be fixed on the pass0.\n",
-	    	    	__FUNCTION__);	    	
-		reiserfs_bitmap_set_bit (fsck_new_bitmap (fs), i);
-	    }
-    	}
-
-#if 0
-    /* mark journal area as used if journal is standard or it is non standard
-       and initialy has been created on a main device */
-    reserved = 0;
-    if (!is_reiserfs_jr_magic_string (fs->fs_ondisk_sb))
-	reserved = get_jp_journal_size (sb_jp (fs->fs_ondisk_sb));
-    if (get_sb_reserved_for_journal (fs->fs_ondisk_sb))
-	reserved = get_sb_reserved_for_journal (fs->fs_ondisk_sb);
-    if (reserved) {
-	for (i = 0; i <= reserved; i ++)
-	    mark_block_used (i + get_jp_journal_1st_block (sb_jp
-							   (fs->fs_ondisk_sb)));
-    }
-#endif
-}
-
-
-/* this makes a map of blocks which can be allocated when fsck will
-   continue */
-static void find_allocable_blocks (reiserfs_filsys_t * fs)
-{
-    unsigned long i;
-
-    fsck_progress ("Looking for allocable blocks .. ");
-
-    fsck_allocable_bitmap (fs) = reiserfs_create_bitmap (get_sb_block_count (fs->fs_ondisk_sb));
-    reiserfs_bitmap_fill (fsck_allocable_bitmap (fs));
-
-
-    /* find how many leaves are not pointed by any indirect items */
-    for (i = 0; i < get_sb_block_count (fs->fs_ondisk_sb); i ++) {
-	if (not_data_block (fs, i))
-	    /* journal (or reserved for it area), bitmaps, super block and
-	       blocks before it */
-	    continue;
-
-	if (is_good_unformatted (i) && is_bad_unformatted (i))
-	    die ("find_allocable_blocks: The block (%lu) is masr as good and as bad at once.", i);
-
-	if (is_good_unformatted (i) || is_bad_unformatted (i)) {
-	    /* blocks which were pointed once or more thn onec from indirect
-	       items - they will not be allocated */
-	    continue;
-	}
-
-	/* make allocable not leaves, not bad blocks */
-	if (!is_used_leaf (i) && (!fs->fs_badblocks_bm || 
-				  !reiserfs_bitmap_test_bit (fs->fs_badblocks_bm, i))) 
-	{
-	    /* this is not leaf and it is not pointed by found indirect items,
-               so it does not contains anything valuable */
-	    make_allocable (i);
-	    pass_1_stat (fs)->allocable_blocks ++;
-	}
-    }
-    fsck_progress ("finished\n");
-
-    fs->block_allocator = reiserfsck_reiserfs_new_blocknrs;
-    fs->block_deallocator = reiserfsck_reiserfs_free_block;
-}
-
-
-static void before_pass_1 (reiserfs_filsys_t * fs)
-{
-    /* this will become an on-disk bitmap */
-    init_new_bitmap (fs);
-
-    /* bitmap of leaves which could not be inserted on pass 1. FIXME:
-       no need to have 1 bit per block */
-    fsck_uninsertables (fs) = reiserfs_create_bitmap (get_sb_block_count (fs->fs_ondisk_sb));
-    reiserfs_bitmap_fill (fsck_uninsertables (fs));
-    
-    /* find blocks which can be allocated */
-    find_allocable_blocks (fs);
-
-    /* bitmap of bad unformatted nodes which are in the tree already */
-    bad_unfm_in_tree_once_bitmap = reiserfs_create_bitmap (get_sb_block_count (fs->fs_ondisk_sb));
-
-    /* pass 1 does not deal with objectid */
-}
-
-
-static void save_pass_1_result (reiserfs_filsys_t * fs)
-{
-    FILE * file;
-    int retval;
-
-    file = open_file("temp_fsck_file.deleteme", "w+");
-    if (!file)
-	return;
-
-    /* to be able to get a new bitmap on pass2 we should flush it on disk
-       new_bitmap should not be flushed on disk if run without -d option, as
-       if fsck fails on pass1 we get wrong bitmap on the next fsck start */
-    reiserfs_flush_to_ondisk_bitmap (fsck_new_bitmap (fs), fs);
-    
-    /* to be able to restart with pass 2 we need bitmap of
-       uninsertable blocks and bitmap of alocable blocks */
-    reiserfs_begin_stage_info_save(file, PASS_1_DONE);
-    reiserfs_bitmap_save (file,  fsck_uninsertables (fs));
-    reiserfs_bitmap_save (file,  fsck_allocable_bitmap(fs));
-    reiserfs_end_stage_info_save (file);
-    close_file (file);
-    retval = rename ("temp_fsck_file.deleteme", state_dump_file (fs));
-    if (retval != 0)
-	fsck_progress ("pass 1: Could not rename the temporary file temp_fsck_file.deleteme to %s",
-		       state_dump_file (fs));
-}
-
-
-void load_pass_1_result (FILE * fp, reiserfs_filsys_t * fs)
-{
-    fsck_new_bitmap (fs) = reiserfs_create_bitmap (get_sb_block_count (fs->fs_ondisk_sb));
-    reiserfs_bitmap_copy (fsck_new_bitmap (fs), fs->fs_bitmap2);
-    
-    fsck_uninsertables (fs) = reiserfs_bitmap_load (fp);
-    fsck_allocable_bitmap (fs) = reiserfs_bitmap_load (fp);
-    
-    fs->block_allocator = reiserfsck_reiserfs_new_blocknrs;
-    fs->block_deallocator = reiserfsck_reiserfs_free_block;
-
-    if (!fsck_new_bitmap (fs) || !fsck_allocable_bitmap (fs) ||
-	!fsck_allocable_bitmap (fs))
-	fsck_exit ("State dump file seems corrupted. Run without -d");
-
-
-    /* we need objectid map on pass 2 to be able to relocate files */
-    proper_id_map (fs) = id_map_init();
-    /* Not implemented yet.
-    fetch_objectid_map (proper_id_map (fs), fs);
-    */
-
-    fsck_progress ("Pass 1 result loaded. %d blocks used, %d allocable, "
-		   "still to be inserted %d\n",
-		   reiserfs_bitmap_ones (fsck_new_bitmap (fs)),
-		   reiserfs_bitmap_zeros (fsck_allocable_bitmap (fs)),
-		   reiserfs_bitmap_zeros (fsck_uninsertables (fs)));
-}
-
-
-extern reiserfs_bitmap_t * leaves_bitmap;
-
-/* reads blocks marked in leaves_bitmap and tries to insert them into
-   tree */
-static void do_pass_1 (reiserfs_filsys_t * fs)
-{
-    struct buffer_head * bh;
-    unsigned long i; 
-    int what_node;
-    unsigned long done = 0, total;
-
-
-    /* on pass0 we have found that amount of leaves */
-    total = reiserfs_bitmap_ones (leaves_bitmap);
-
-    /* read all leaves found on the pass 0 */
-    for (i = 0; i < get_sb_block_count (fs->fs_ondisk_sb); i ++) {
-	if (!is_used_leaf (i))
-	    continue;
-
-	print_how_far (fsck_progress_file (fs), &done, total, 1, fsck_quiet (fs));
-
-	/* at least one of nr_to_read blocks is to be checked */
-	bh = bread (fs->fs_dev, i, fs->fs_blocksize);
-	if (!bh) {
-	    /* we were reading one block at time, and failed, so mark
-	       block bad */
-	    fsck_progress ("pass1: Reading of the block %lu failed\n", i);
-	    continue;
-	}
-
-	what_node = who_is_this (bh->b_data, bh->b_size);
-	if ( what_node != THE_LEAF ) {
-	    check_memory_msg();
-	    die ("build_the_tree: Nothing but leaves are expected. Block %lu - %s\n", 
-		i, which_block(what_node));
-	}
-	
-	if (is_block_used (i) && !(block_of_journal (fs, i) &&
-				   fsck_data(fs)->rebuild.use_journal_area))
-	    /* block is in new tree already */
-	    die ("build_the_tree: The leaf (%lu) is in the tree already\n", i);
-		    
-	/* fprintf (block_list, "leaf %d\n", i + j);*/
-	pass_1_stat (fs)->leaves ++;
-
-	/* the leaf may still contain indirect items with wrong
-	   slots. Fix that */
-	pass1_correct_leaf (fs, bh);
-
-	if (get_blkh_nr_items (B_BLK_HEAD (bh)) == 0) {
-	    /* all items were deleted on pass 0 or pass 1 */
-	    mark_buffer_clean (bh);
-	    brelse (bh);
-	    continue;
-	}
-
-	if (is_leaf_bad (bh)) {
-	    /* FIXME: will die */
-	    fsck_log ("is_leaf_bad: WARNING: The leaf (%lu) is formatted badly. Will be handled on the the pass2.\n", 
-		bh->b_blocknr);
-	    mark_block_uninsertable (bh->b_blocknr);
-	    brelse (bh);
-	    continue;
-	}
-	
-	if (block_of_journal (fs, i) && fsck_data(fs)->rebuild.use_journal_area) {
-	    /* FIXME: temporary thing */
-	    if (tree_is_empty ()) {
-		/* we insert inot tree only first leaf of journal */
-		unsigned long block;
-		struct buffer_head * new_bh;
-		
-		block = alloc_block ();
-		if (!block)
-		    die ("could not allocate block");
-		new_bh = getblk (bh->b_dev, block, bh->b_size);
-		memcpy (new_bh->b_data, bh->b_data, bh->b_size);
-		mark_buffer_uptodate (new_bh, 1);
-		mark_buffer_dirty (new_bh);
-		make_single_leaf_tree (new_bh);
-		brelse (new_bh);
-		brelse (bh);
-		continue;
-	    }
-
-	    /* other blocks of journal will be inserted in pass 2 */
-	    mark_block_uninsertable (bh->b_blocknr);
-	    brelse (bh);
-	    continue;
-	}
-	
-	try_to_insert_pointer_to_leaf (bh);
-	brelse (bh);
-    }
-
-    fsck_progress ("\n");
-
-}
-
-
-static void after_pass_1 (reiserfs_filsys_t * fs)
-{
-    time_t t;
-
-    /* update fsck_state */
-    
-    /* we  should not flush bitmaps on disk after pass1, because
-       new_bitmap contains only those blocks which are good leaves or 
-       just allocated internal blocks. */
-       
-    set_sb_fs_state (fs->fs_ondisk_sb, PASS_1_DONE);
-    mark_buffer_dirty (fs->fs_super_bh);
-
-    /* write all dirty blocks */
-    fsck_progress ("Flushing..");
-    fs->fs_dirt = 1;
-    reiserfs_flush (fs);
-    fsck_progress ("finished\n");
-
-    stage_report (1, fs);
-
-    /* we do not need this anymore */
-    delete_aux_bitmaps ();
-    reiserfs_delete_bitmap (bad_unfm_in_tree_once_bitmap);
-
-    if (!fsck_run_one_step (fs)) {
-	if (fsck_user_confirmed (fs, "Continue? (Yes):", "Yes\n", 1))
-	    /* reiserfsck continues */
-	    return;
-    } else
-	save_pass_1_result (fs);
-
-    if (proper_id_map (fs)) {
-	/* when we run pass 1 only - we do not have proper_id_map */
-	id_map_free(proper_id_map (fs));
-	proper_id_map (fs) = 0;
-    }
-    
-    time (&t);
-    fsck_progress ("###########\n"
-		   "reiserfsck finished pass 1 at %s"
-		   "###########\n", ctime (&t));
-    fs->fs_dirt = 1;
-    reiserfs_close (fs);
-    exit(0);
-}
-
-
-void pass_1 (reiserfs_filsys_t * fs)
-{
-    fsck_progress ("\nPass 1 (will try to insert %lu leaves):\n",
-		   reiserfs_bitmap_ones (fsck_source_bitmap (fs)));
-    if (fsck_log_file (fs) != stderr)
-	fsck_log ("####### Pass 1 #######\n");
-
-
-    before_pass_1 (fs);
-
-    /* try to insert leaves found during pass 0 */
-    do_pass_1 (fs);
-
-    after_pass_1 (fs);
-}
-
diff --git a/fsck/pass2.c b/fsck/pass2.c
deleted file mode 100644
index a151369..0000000
--- a/fsck/pass2.c
+++ /dev/null
@@ -1,641 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#include "fsck.h"
-
-
-/* on pass2 we take leaves which could not be inserted into tree
-   during pass1 and insert each item separately. It is possible that
-   items of different objects with the same key can be found. We treat
-   that in the following way: we put it into tree with new key and
-   link it into /lost+found directory with name made of dir,oid. When
-   coming item is a directory - we delete object from the tree, put it
-   back with different key, link it to /lost+found directory and
-   insert directory as it is */
-
-/* relocation rules: we have an item (it is taken from "non-insertable"
-   leaf). It has original key yet. We check to see if object with this
-   key is remapped. Object can be only remapped if it is not a piece
-   of directory */
-
-
-/* in list of this structures we store what has been relocated. */
-struct relocated {
-    unsigned long old_dir_id;
-    unsigned long old_objectid;
-    
-    unsigned long new_objectid;
-    
-    struct relocated * next;
-};
-
-/* all relocated files will be linked into lost+found directory at the
-   beginning of semantic pass */
-static struct relocated * relocated_list = NULL;
-
-static __u32 get_relocated_objectid_from_list (struct key * key) {
-    struct relocated *cur = relocated_list;
-
-    while (cur) {
-	if (cur->old_dir_id == get_key_dirid (key) &&
-	    cur->old_objectid == get_key_objectid (key))
-	    /* object is relocated already */
-	    return cur->new_objectid;
-	cur = cur->next;
-    }
-    return 0;
-}
-
-/* return objectid the object has to be remapped with */
-__u32 objectid_for_relocation (struct key * key)
-{
-    struct relocated * cur;
-    __u32 cur_id;
-
-    if ((cur_id = get_relocated_objectid_from_list (key)) != 0)
-    	return cur_id;
-
-    cur = getmem (sizeof (struct relocated));
-    cur->old_dir_id = get_key_dirid (key);
-    cur->old_objectid = get_key_objectid (key);
-    cur->new_objectid = id_map_alloc(proper_id_map(fs));
-    cur->next = relocated_list;
-    relocated_list = cur;
-/*    fsck_log ("relocation: (%K) is relocated to (%lu, %lu)\n",
-	      key, get_key_dirid (key), cur->new_objectid);*/
-    return cur->new_objectid;
-}
-
-/* relocated files get added into lost+found with slightly different names */
-static __u64 link_one (struct relocated * file) {
-    char * name;
-    struct key obj_key;
-    __u64 len = 0;
-
-    asprintf (&name, "%lu,%lu", file->old_dir_id, file->new_objectid);
-    set_key_dirid (&obj_key, file->old_dir_id);
-    set_key_objectid (&obj_key, file->new_objectid);
-
-    /* 0 for fsck_need does not mean too much - it would make effect if there 
-     * were no this directory yet. But /lost_found is there already */
-    len = reiserfs_add_entry (fs, &lost_found_dir_key, name, 
-	name_length(name, lost_found_dir_format), &obj_key, 0/*fsck_need*/);
-    pass_2_stat (fs)->relocated ++;
-    free (name);
-
-    return len;
-}
-
-void linked_already(struct key *new_key /*, link_func_t link_func*/) {
-    struct relocated *cur = relocated_list;
-    struct relocated *prev = NULL;
-
-    while (cur) {
-	if (cur->old_dir_id == get_key_dirid(new_key) && 
-	    cur->new_objectid == get_key_objectid(new_key))
-	    break;
-
-	prev = cur;
-	cur = cur->next;
-    }
-
-    if (cur) {	
-	/* len = link_func(cur); */
-
-	if (prev) 
-	    prev->next = cur->next;
-	else
-	    relocated_list = cur->next;
-
-	freemem (cur);
-    }
-}
-
-void link_relocated_files (void)
-{
-    struct relocated * tmp;
-    int count;
-    
-    count = 0;
-    while (relocated_list) {
-	link_one (relocated_list);
-	tmp = relocated_list;
-	relocated_list = relocated_list->next;
-	freemem (tmp);
-	count ++;
-    }
-}
-
-/* this item is in tree. All unformatted pointer are correct. Do not
-   check them */
-void save_item (struct si ** head, struct item_head * ih, char * item, __u32 blocknr)
-{
-    struct si * si, * cur;
-
-    si = getmem (sizeof (*si));
-    si->si_dnm_data = getmem (get_ih_item_len(ih));
-    /*si->si_blocknr = blocknr;*/
-    memcpy (&(si->si_ih), ih, IH_SIZE);
-    memcpy (si->si_dnm_data, item, get_ih_item_len(ih));
-
-    if (*head == 0)
-	*head = si;
-    else {
-	cur = *head;
-	while (cur->si_next)
-	    cur = cur->si_next;
-	cur->si_next = si;
-    }
-    return;
-}
-
-
-struct si * save_and_delete_file_item (struct si * si, struct path * path)
-{
-    struct buffer_head * bh = PATH_PLAST_BUFFER (path);
-    struct item_head * ih = PATH_PITEM_HEAD (path);
-
-    save_item (&si, ih, B_I_PITEM (bh, ih), bh->b_blocknr);
-
-    /* delete item temporary - do not free unformatted nodes */
-    reiserfsck_delete_item (path, 1/*temporary*/);
-    return si;
-}
-
-
-/* check whether there are any directory items with this key */
-int should_relocate (struct item_head * ih)
-{
-    struct key key;
-    struct key * rkey;
-    struct path path;
-    struct item_head * path_ih;
-
-
-    /* starting with the leftmost item with this key */
-    key = ih->ih_key;
-    set_type_and_offset (KEY_FORMAT_1, &key, SD_OFFSET, TYPE_STAT_DATA);
-
-    while (1) {
-	reiserfs_search_by_key_4 (fs, &key, &path);
-	
-	if (get_item_pos (&path) == B_NR_ITEMS (get_bh (&path))) {
-	    rkey = uget_rkey (&path);
-	    if (rkey && !not_of_one_file (&key, rkey)) {
-		/* file continues in the right neighbor */
-		key = *rkey;
-		pathrelse (&path);
-		continue;
-	    }
-	    /* there is no more items with this key */
-	    pathrelse (&path);
-	    break;
-	}
-
-	path_ih = get_ih (&path);
-	if (not_of_one_file (&key, &(path_ih->ih_key))) {
-	    /* there are no more item with this key */
-	    pathrelse (&path);
-	    break;
-	}
-
-	if (is_stat_data_ih (path_ih)) {
-	    fix_obviously_wrong_sd_mode (&path);
-	    if (ih_checked (path_ih)) {
-		/* we have checked it already */
-		pathrelse (&path);
-
-		if (get_relocated_objectid_from_list (&path_ih->ih_key))
-		    return 1; /* it was relocated */
-		break;
-	    } else {
-		mark_ih_checked (path_ih);
-		mark_buffer_dirty (get_bh(&path));
-	    }
-	}
-	
-	/* ok, item found, but make sure that it is not a directory one */
-	if ((is_stat_data_ih (path_ih) && !not_a_directory (get_item (&path))) ||
-	    (is_direntry_ih (path_ih))) {
-	    /* item of directory found. so, we have to relocate the file */
-	    pathrelse (&path);
-	    return 1;
-	}
-	key = path_ih->ih_key;
-	set_offset (KEY_FORMAT_1, &key, get_offset (&key) + 1);
-	pathrelse (&path);
-    }
-    return 0;
-}
-
-
-/* this works for both new and old stat data */
-#define st_mode(sd) le16_to_cpu(((struct stat_data *)(sd))->sd_mode)
-
-#define st_mtime_v1(sd) le32_to_cpu(((struct stat_data_v1 *)(sd))->sd_mtime)
-#define st_mtime_v2(sd) le32_to_cpu(((struct stat_data *)(sd))->sd_mtime)
-
-
-/* either both sd-s are new of both are old */
-static void overwrite_stat_data (struct item_head * new_ih,
-				 void * new_item, struct path * path)
-{
-    __u16 new_mode, old_mode;
-
-    get_sd_mode (new_ih, new_item, &new_mode);
-    get_sd_mode (get_ih (path), get_item (path), &old_mode);
-
-
-    if (S_ISREG (new_mode) && !S_ISREG (old_mode)) {
-	/* in tree we have not regular file - overwrite its stat data
-           with stat data of regular file */
-	memcpy (get_item (path), new_item, get_ih_item_len (get_ih (path)));
-	mark_buffer_dirty (get_bh (path));
-	return;
-    }
-
-    if (S_ISREG (old_mode) && !S_ISREG (new_mode)) {
-	/* new stat data is not a stat data of regular file, keep
-           regular file stat data in tree */
-	return;
-    }
-    
-    /* if coming stat data has newer mtime - use that */
-    if (stat_data_v1 (new_ih)) {	
-	if (st_mtime_v1 (new_item) > st_mtime_v1 (get_item (path))) {
-	    memcpy (get_item (path), new_item, SD_V1_SIZE);
-	    mark_buffer_dirty (get_bh (path));
-	}
-    } else {
-	if (st_mtime_v2 (new_item) > st_mtime_v2 (get_item (path))) {
-	    memcpy (get_item (path), new_item, SD_SIZE);
-	    mark_buffer_dirty (get_bh (path));
-	}
-    }
-    return;
-}
-
-
-/* insert sd item if it does not exist, overwrite it otherwise */
-static void put_sd_into_tree (struct item_head * new_ih, char * new_item)
-{
-    struct path path;
-
-    if (!not_a_directory (new_item)) {
-	/* new item is a stat data of a directory. So we have to
-           relocate all items which have the same short key and are of
-           not a directory */
-	rewrite_file (new_ih, 1, 0/*do not change new_ih*/);
-    } else {
-	/* new item is a stat data of something else but directory. If
-           there are items of directory - we have to relocate the file */
-	if (should_relocate (new_ih))
-	    rewrite_file (new_ih, 1, 1/*change new_ih*/);
-    }
-    
-    /* if we will have to insert item into tree - it is ready */
-    zero_nlink (new_ih, new_item);
-    mark_item_unreachable (new_ih);
-    
-    /* we are sure now that if we are inserting stat data of a
-       directory - there are no items with the same key which are not
-       items of a directory, and that if we are inserting stat data is
-       of not a directory - it either has new key already or there are
-       no items with this key which are items of a directory */
-    if (reiserfs_search_by_key_4 (fs, &(new_ih->ih_key), &path) == ITEM_FOUND) {
-	/* this stat data is found */
-        if (get_ih_key_format (get_ih(&path)) != get_ih_key_format (new_ih)) {
-	    /* in tree stat data and a new one are of different
-               formats */
-	    fsck_log ("put_sd_into_tree: Inserting the StatData %K, mode (%M)...",
-		      &(new_ih->ih_key), st_mode (new_item));
-	    if (stat_data_v1 (new_ih)) {
-		/* sd to be inserted is of V1, where as sd in the tree
-                   is of V2 */
-		fsck_log ("found newer in the tree, mode (%M), insersion was skipped.\n",
-			  st_mode (get_item (&path)));
-	    	pathrelse (&path);
-	    } else {
-		/* the stat data in the tree is sd_v1 */
-		fsck_log ("older sd, mode (%M), is replaced with it.\n",
-			  st_mode (get_item (&path)));
-		reiserfsck_delete_item (&path, 0/*not temporary*/);
-		
-		reiserfs_search_by_key_4 (fs, &new_ih->ih_key, &path);
-		reiserfsck_insert_item (&path, new_ih, new_item);
-	    }
-	} else {
-	    /* both stat data are of the same version */
-	    overwrite_stat_data (new_ih, new_item, &path);
-	    pathrelse (&path);
-	}
-	return;
-    }
-    
-    /* item not found, insert a new one */
-    reiserfsck_insert_item (&path, new_ih, new_item);
-}
-
-
-/* this tries to put each item entry to the tree, if there is no items
-   of the directory, insert item containing 1 entry */
-static void put_directory_item_into_tree (struct item_head * comingih, char * item)
-{
-    struct reiserfs_de_head * deh;
-    int i;
-    char * buf;
-    char * name;
-    int namelen;
-
-    /* if there are anything with this key but a directory - move it
-       somewhere else */
-    rewrite_file (comingih, 1, 0/* do not change ih */);
-
-    deh = (struct reiserfs_de_head *)item;
-
-    for (i = 0; i < get_ih_entry_count (comingih); i ++, deh ++) {
-	name = name_in_entry (deh, i);
-	namelen = name_in_entry_length (comingih, deh, i);
-
-	if (!is_properly_hashed (fs, name, namelen, get_deh_offset (deh)))
-	    reiserfs_panic ("put_directory_item_into_tree: The entry (%d) \"%.*s\" of the directory %k has"
-		" badly hashed entry", i, namelen, name, &comingih->ih_key);
-
-	asprintf (&buf, "%.*s", namelen, name);
-	/* 1 for fsck is important: if there is no any items of this
-           directory in the tree yet - new item will be inserted
-           marked not reached */
-	reiserfs_add_entry (fs, &(comingih->ih_key), buf, entry_length (comingih, deh, i),
-			(struct key *)&(deh->deh2_dir_id), 1 << IH_Unreachable);
-	free (buf);
-    }
-}
-
-
-
-void insert_item_separately (struct item_head * ih,
-			     char * item, int was_in_tree)
-{
-    if (get_key_dirid (&ih->ih_key) == get_key_objectid (&ih->ih_key))
-	reiserfs_panic ("insert_item_separately: The item being inserted has the bad key %H", ih);
-    
-    if (is_stat_data_ih (ih)) {
-	put_sd_into_tree (ih, item);
-    } else if (is_direntry_ih (ih)) {
-	put_directory_item_into_tree (ih, item);
-    } else {
-	reiserfsck_file_write (ih, item, was_in_tree);
-    }
-}
-
-
-static void put_stat_data_items (struct buffer_head * bh) 
-{
-    int i;
-    struct item_head * ih;
-
-
-    ih = B_N_PITEM_HEAD (bh, 0);
-    for (i = 0; i < B_NR_ITEMS (bh); i ++, ih ++) {
-
-        /* this check instead of saved_items */
-        if (!is_stat_data_ih (ih) || is_bad_item (bh, ih, B_I_PITEM (bh, ih))) {
-	    continue;
-        }
-	insert_item_separately (ih, B_I_PITEM (bh, ih), 0/*was in tree*/);
-    }
-}
-
-static void put_not_stat_data_items (struct buffer_head * bh)
-{
-    int i;
-    struct item_head * ih;
-
-    ih = B_N_PITEM_HEAD (bh, 0);
-    for (i = 0; i < B_NR_ITEMS (bh); i ++, ih ++) {
-
-        if (is_stat_data_ih (ih) || is_bad_item (bh, ih, B_I_PITEM (bh, ih))) {
-	    continue;
-	}
-	insert_item_separately (ih, B_I_PITEM (bh, ih), 0/*was in tree*/);
-    }
-}
-
-
-static void before_pass_2 (reiserfs_filsys_t * fs)
-{
-    /* anything specific for pass 2 ? */
-}
-
-
-static void save_pass_2_result (reiserfs_filsys_t * fs)
-{
-    FILE * file;
-    int retval;
-
-    file = open_file("temp_fsck_file.deleteme", "w+");
-    if (!file)
-	return;
-    
-    /* to be able to restart from semantic we do not need to save
-       anything here, but two magic values */
-    reiserfs_begin_stage_info_save(file, TREE_IS_BUILT);
-    reiserfs_end_stage_info_save (file);
-    close_file (file);
-    retval = rename ("temp_fsck_file.deleteme", state_dump_file (fs));
-    if (retval != 0)
-	fsck_progress ("%s: Could not rename the temporary file temp_fsck_file.deleteme to %s",
-	    __FUNCTION__, state_dump_file (fs));
-}
-
-
-/* we have nothing to load from a state file, but we have to fetch
-   on-disk bitmap, copy it to allocable bitmap, and fetch objectid
-   map */
-void load_pass_2_result (reiserfs_filsys_t * fs)
-{
-    fsck_new_bitmap (fs) = reiserfs_create_bitmap (get_sb_block_count (fs->fs_ondisk_sb));
-    reiserfs_bitmap_copy (fsck_new_bitmap (fs), fs->fs_bitmap2);
-    
-    fsck_allocable_bitmap (fs) = reiserfs_create_bitmap (get_sb_block_count (fs->fs_ondisk_sb));
-    reiserfs_bitmap_copy (fsck_allocable_bitmap (fs), fs->fs_bitmap2);
-
-    fs->block_allocator = reiserfsck_reiserfs_new_blocknrs;
-    fs->block_deallocator = reiserfsck_reiserfs_free_block;
-
-    /* we need objectid map on semantic pass to be able to relocate files */
-    proper_id_map (fs) = id_map_init();
-    /* Not implemented yet.
-    fetch_objectid_map (proper_id_map (fs), fs);    
-    */
-}
-
-    
-/* uninsertable blocks are marked by 0s in uninsertable_leaf_bitmap
-   during the pass 1. They must be not in the tree */
-static void do_pass_2 (reiserfs_filsys_t * fs) {
-
-    struct buffer_head * bh;
-    unsigned long j;
-    int i, what_node;
-    unsigned long done = 0, total;
-
-
-    total = reiserfs_bitmap_zeros(fsck_uninsertables(fs)) * 2;
-    if (!total)
-	return;
-
-    fsck_progress ("\nPass 2:\n");
-
-    for (i = 0; i < 2; i++) {
-        j = 0;
-        while ((j < fsck_uninsertables(fs)->bm_bit_size) && 
-	       reiserfs_bitmap_find_zero_bit(fsck_uninsertables(fs), &j) == 0) 
-	{
-	    bh = bread (fs->fs_dev, j, fs->fs_blocksize);
-	    if (bh == 0) {
-	        fsck_log ("pass_2: Reading of the block (%lu) failed on the device 0x%x\n",
-		      j, fs->fs_dev);
-                goto cont;
-            }
-	
-            if (is_block_used (bh->b_blocknr) && !(block_of_journal (fs, bh->b_blocknr) &&
-					       fsck_data(fs)->rebuild.use_journal_area)) {
-		fsck_log("%s: The block (%lu) is in the tree already. Should not happen.\n", 
-		    __FUNCTION__, bh->b_blocknr);
-		goto cont;
-            }
-            /* this must be leaf */
-            what_node = who_is_this (bh->b_data, bh->b_size);
-	    if (what_node != THE_LEAF) { // || B_IS_KEYS_LEVEL(bh)) {
-	        fsck_log ("%s: The block (%b), marked as a leaf on the first two passes, "
-			  "is not a leaf! Will be skipped.\n", __FUNCTION__, bh);
-	        goto cont;
-	    }
-/*	
-	    fsck_log ("block %lu is being inserted\n", bh->b_blocknr);
-	    check_buffers_mem(fsck_log_file (fs));
-	    fflush(fsck_log_file (fs));
-*/	
-	    if (i) {
-                /* insert all not SD items */
-                put_not_stat_data_items (bh);
-                pass_2_stat (fs)->leaves ++;
-                make_allocable (j);
-            } else
-                /* insert SD items only */
-                put_stat_data_items (bh);
-
-            print_how_far (fsck_progress_file (fs), &done, total, 1, fsck_quiet (fs));
-        cont:
-	    brelse (bh);
-	    j ++;
-        }
-    }
-
-    fsck_progress ("\n");
-}
-
-
-static void after_pass_2 (reiserfs_filsys_t * fs)
-{
-    time_t t;
-
-    /* we can now flush new_bitmap on disk as tree is built and 
-       contains all data, which were found on dik at start in 
-       used bitmaps */
-    reiserfs_bitmap_copy (fs->fs_bitmap2, fsck_new_bitmap (fs));
-    
-    /* we should copy new_bitmap to allocable bitmap, becuase evth what is used 
-       for now (marked as used in new_bitmap) should not be allocablel;
-       and what is not in tree for now should be allocable.
-       these bitmaps differ because on pass2 we skip those blocks, whose SD's 
-       are not in the tree, and therefore indirect items of such bad leaves points 
-       to not used and not allocable blocks.       
-     */
-
-
-    /* DEBUG only */
-/*    if (reiserfs_bitmap_compare (fsck_allocable_bitmap (fs), fsck_new_bitmap(fs))) {
-        fsck_log ("Allocable bitmap differs from the new bitmap after pass2\n");
-	reiserfs_bitmap_copy (fsck_allocable_bitmap(fs), fsck_new_bitmap (fs));
-    }
-*/
-
-    /* update super block: objectid map, fsck state */
-    set_sb_fs_state (fs->fs_ondisk_sb, TREE_IS_BUILT);
-    mark_buffer_dirty (fs->fs_super_bh);
-  
-    /* write all dirty blocks */
-    fsck_progress ("Flushing..");
-    id_map_flush(proper_id_map (fs), fs);
-    fs->fs_dirt = 1;
-    reiserfs_flush_to_ondisk_bitmap (fs->fs_bitmap2, fs);
-    reiserfs_flush (fs);
-    fsck_progress ("finished\n");
-    
-    /* fixme: should be optional */
-/*    fsck_progress ("Tree is built. Checking it - ");
-    reiserfsck_check_pass1 ();
-    fsck_progress ("finished\n");*/
-
-    stage_report (2, fs);
-
-    /* free what we do not need anymore */
-    reiserfs_delete_bitmap (fsck_uninsertables (fs));
-
-    if (!fsck_run_one_step (fs)) {
-	if (fsck_user_confirmed (fs, "Continue? (Yes):", "Yes\n", 1))
-	    /* reiserfsck continues */
-	    return;
-    } else
-	save_pass_2_result (fs);
-
-    
-    id_map_free(proper_id_map (fs));
-    proper_id_map (fs) = 0;
-    
-    reiserfs_delete_bitmap (fsck_new_bitmap (fs));
-    reiserfs_delete_bitmap (fsck_allocable_bitmap (fs));
-    
-    time (&t);
-    fsck_progress ("###########\n"
-		   "reiserfsck finished pass 2 at %s"
-		   "###########\n", ctime (&t));
-    fs->fs_dirt = 1;
-    reiserfs_close (fs);
-    exit(0);
-}
-
-
-
-void pass_2 (reiserfs_filsys_t * fs)
-{
-    if (fsck_log_file (fs) != stderr)
-	fsck_log ("####### Pass 2 #######\n");
-    
-    before_pass_2 (fs);
-    
-    /* take blocks which were not inserted into tree yet and put each
-	item separately */
-    do_pass_2 (fs);
-    
-    after_pass_2 (fs);
-
-    if (get_sb_root_block (fs->fs_ondisk_sb) == ~(__u32)0 || 
-	get_sb_root_block (fs->fs_ondisk_sb) == 0)
-	die ( "\nNo reiserfs metadata found.  If you are sure that you had the reiserfs\n"
-		"on this partition,  then the start  of the partition  might be changed\n"
-		"or all data were wiped out. The start of the partition may get changed\n"
-		"by a partitioner  if you have used one.  Then you probably rebuilt the\n"
-		"superblock as there was no one.  Zero the block at 64K offset from the\n"
-		"start of the partition (a new super block you have just built) and try\n"
-	        "to move the start of the partition a few cylinders aside  and check if\n" 
-		"debugreiserfs /dev/xxx detects a reiserfs super block. If it does this\n"
-	        "is likely to be the right super block version.                        \n"
-		"If this makes you nervous, try  www.namesys.com/support.html,  and for\n"
-		"$25 the author of fsck,  or a colleague  if he is out,  will  step you\n"
-		"through it all.\n");
-}
diff --git a/fsck/pass4.c b/fsck/pass4.c
deleted file mode 100644
index 3ecfe83..0000000
--- a/fsck/pass4.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#include "fsck.h"
-
-void pass_4_check_unaccessed_items (void)
-{
-    struct key key;
-    struct path path;
-    int i;
-    struct buffer_head * bh;
-    struct item_head * ih;
-    unsigned long items;
-    struct key * rdkey;
-
-    path.path_length = ILLEGAL_PATH_ELEMENT_OFFSET;
-    key = root_dir_key;
-    
-    fsck_progress ("Pass 4 - ");
-    items = 0;
-
-    while (reiserfs_search_by_key_4 (fs, &key, &path) == ITEM_FOUND) {
-	bh = PATH_PLAST_BUFFER (&path);
-
-	/* print ~ how many leaves were scanned and how fast it was */
-	if (!fsck_quiet (fs))
-	    print_how_fast (items++, 0, 50, 0);
-
-	for (i = get_item_pos (&path), ih = get_ih (&path); i < B_NR_ITEMS (bh); i ++, ih ++) {
-	    if (!is_item_reachable (ih)) {
-		PATH_LAST_POSITION (&path) = i;
-		rdkey = reiserfs_next_key(&path);
-		if (rdkey)
-		    key = *rdkey;
-		else
-		    memset (&key, 0xff, KEY_SIZE);	
-		
-		pass_4_stat (fs)->deleted_items ++;
-	
-		reiserfsck_delete_item (&path, 0);
-
-		goto cont;
-	    }
-	
-	    if (get_ih_flags(ih) != 0) {
-		clean_ih_flags(ih);
-		mark_buffer_dirty(bh);
-	    }
-	    
-	}
-	PATH_LAST_POSITION(&path) = i - 1;
-	rdkey = reiserfs_next_key (&path);
-	if (rdkey)
-	    key = *rdkey;
-	else
-	    memset (&key, 0xff, KEY_SIZE);	
-	
-	pathrelse (&path);
-
-    cont:
-	/* to make gcc 3.2 do not sware here */;
-    }
-
-    pathrelse (&path);
-
-    fsck_progress ("finished\n");
-    stage_report (4, fs);
-
-    /* after pass 4 */
-
-    /* put bitmap on place */
-    reiserfs_bitmap_copy (fs->fs_bitmap2, fsck_new_bitmap (fs));
-
-    /* update super block */
-    set_sb_free_blocks (fs->fs_ondisk_sb, reiserfs_bitmap_zeros (fsck_new_bitmap (fs)));
-    mark_buffer_dirty (fs->fs_super_bh);
-
-    /* write all dirty blocks */
-    fsck_progress ("Flushing..");
-    fs->fs_dirt = 1;
-    id_map_flush(proper_id_map (fs), fs);
-    reiserfs_flush_to_ondisk_bitmap (fs->fs_bitmap2, fs);
-    reiserfs_flush (fs);
-    fsck_progress ("finished\n");
-
-    
-    return;
-}
diff --git a/fsck/semantic_check.c b/fsck/semantic_check.c
deleted file mode 100644
index 73881ce..0000000
--- a/fsck/semantic_check.c
+++ /dev/null
@@ -1,816 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by reiserfsprogs/README
- */
-
-#include "fsck.h"
-
-static struct key *trunc_links = NULL;
-static __u32 links_num = 0;
-
-int wrong_mode (struct key * key, __u16 * mode, __u64 real_size, int symlink);
-int wrong_st_blocks(struct key * key, __u32 * blocks, __u32 sd_blocks, __u16 mode, 
-		    int new_format);
-int wrong_st_size (struct key * key, unsigned long long max_file_size, int blocksize,
-		   __u64 * size, __u64 sd_size, int type);
-int wrong_first_direct_byte (struct key * key, int blocksize, __u32 * first_direct_byte,
-			     __u32 sd_first_direct_byte, __u32 size);
-void get_object_key (struct reiserfs_de_head * deh, struct key * key, 
-		     struct key * entry_key, struct item_head * ih);
-void print_name (char * name, int len);
-void erase_name (int len);
-
-
-struct path_key
-{
-    struct short_key
-    {
-        __u32 k_dir_id;
-        __u32 k_objectid;
-    } key;
-    struct path_key * next, * prev;
-};
-
-struct path_key * head_key = NULL;
-struct path_key * tail_key = NULL;
-
-static int check_path_key(struct key * key)
-{
-    struct path_key * cur = head_key;
-
-    while(cur != NULL)
-    {
-        if (!comp_short_keys(&cur->key, key)) {
-            fsck_log("\nsemantic check: The directory %k has 2 names.", key);
-            return LOOP_FOUND;
-        }
-        cur = cur->next;
-    }
-    return 0;
-}
-
-static int add_path_key(struct key * key)
-{
-    if (check_path_key(key))
-    	return LOOP_FOUND;
-
-    if (tail_key == NULL)
-    {
-        tail_key = getmem(sizeof(struct path_key));
-        head_key = tail_key;
-        tail_key->prev = NULL;
-    }else{
-        tail_key->next = getmem(sizeof(struct path_key));
-        tail_key->next->prev = tail_key;
-        tail_key = tail_key->next;
-    }
-    copy_short_key (&tail_key->key, key);
-    tail_key->next = NULL;
-
-    return 0;
-}
-
-void del_path_key()
-{
-    if (tail_key == NULL)
-        die("Wrong path_key structure");
-
-    if (tail_key->prev == NULL)
-    {
-        freemem(tail_key);
-        tail_key = head_key = NULL;
-    }else{
-        tail_key = tail_key->prev;
-        freemem(tail_key->next);
-        tail_key->next = NULL;
-    }
-}
-
-/* path is path to stat data. If file will be relocated - new_ih will contain
-   a key file was relocated with */
-static int check_check_regular_file (struct path * path, void * sd,
-                                     struct item_head * new_ih)
-{
-    int is_new_file;
-//    struct key key, sd_key;
-    __u16 mode;
-    __u32 nlink;
-    __u64 real_size, sd_size;
-    __u32 blocks, sd_blocks;	/* proper values and value in stat data */
-    __u32 first_direct_byte, sd_first_direct_byte;
-
-    struct item_head * ih, sd_ih;
-    int fix_sd;
-    int symlnk = 0;
-    int retval = OK;
-    __u32 tmp_position;
-
-
-    ih = get_ih (path);
-
-    if (new_ih) {
-	/* this objectid is used already */
-	*new_ih = *ih;
-	pathrelse (path);
-	rewrite_file (new_ih, 1, 1);
-	linked_already(&new_ih->ih_key);
-	one_less_corruption (fs, FIXABLE);
-	sem_pass_stat (fs)->oid_sharing_files_relocated ++;
-	retval = RELOCATED;
-	if (reiserfs_search_by_key_4 (fs, &(new_ih->ih_key), path) == ITEM_NOT_FOUND)
-	    reiserfs_panic ("check_check_regular_file: Could not find a StatData of "
-		"the relocated file %K", &new_ih->ih_key);
-	/* stat data is marked unreachable again due to relocation, fix that */
-	ih = get_ih (path);
-	sd = get_item (path);
-    }
-    
-
-    if (get_ih_item_len (ih) == SD_SIZE)
-	is_new_file = 1;
-    else
-	is_new_file = 0;
-
-
-    get_sd_nlink (ih, sd, &nlink);
-    get_sd_mode (ih, sd, &mode);
-    get_sd_size (ih, sd, &sd_size);
-    get_sd_blocks (ih, sd, &sd_blocks);
-
-/*	
-    if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
-    	// check and set nlink first 
-    	nlink ++;
-    	set_sd_nlink (ih, sd, &nlink);
-    	mark_buffer_dirty (bh);
-
-    	if (nlink > 1)
-	    return OK;
-    }
-*/
-
-    if (!is_new_file)
-	get_sd_first_direct_byte (ih, sd, &sd_first_direct_byte);
-
-    if (S_ISLNK (mode)) 	
-	symlnk = 1;
-    
-    sd_ih = *ih;
-//    sd_key = sd_ih.ih_key;
-    pathrelse (path);
-
-    if (are_file_items_correct (&sd_ih, sd, &real_size, &blocks, 0/* do not mark reachable */,
-	&symlnk) != 1) 
-    {
-	one_more_corruption (fs, FATAL);
-	fsck_log ("check_regular_file: The file %K with the corrupted structure found\n", 
-	    &sd_ih.ih_key);
-    } else {
-	fix_sd = 0;
-    
-	fix_sd += wrong_mode (&sd_ih.ih_key, &mode, real_size, symlnk);
-	if (!is_new_file)
-	    fix_sd += wrong_first_direct_byte (&sd_ih.ih_key, fs->fs_blocksize,
-		&first_direct_byte, sd_first_direct_byte, real_size);
-	
-	if (reiserfs_bin_search(&sd_ih.ih_key, trunc_links, links_num, sizeof(sd_ih.ih_key), 
-	    &tmp_position, comp_short_keys) != POSITION_FOUND) 
-	{
-	    fix_sd += wrong_st_size (&sd_ih.ih_key, is_new_file ? MAX_FILE_SIZE_V2 : 
-		MAX_FILE_SIZE_V1, fs->fs_blocksize, &real_size, sd_size, 
-		symlnk ? TYPE_SYMLINK : 0);
-	} else {
-	    real_size = sd_size;
-	}
-	
-	fix_sd += wrong_st_blocks (&sd_ih.ih_key, &blocks, sd_blocks, mode, is_new_file);
-
-	if (fix_sd) {
-	    if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
-    		struct buffer_head * bh;
-  	        /* find stat data and correct it */
-  	        set_type_and_offset (KEY_FORMAT_1, &sd_ih.ih_key, SD_OFFSET, TYPE_STAT_DATA);
-	        if (reiserfs_search_by_key_4 (fs, &sd_ih.ih_key, path) != ITEM_FOUND) {
-		    fsck_log ("check_regular_file: A StatData of the file %K cannot be "
-			"found\n", &sd_ih.ih_key);
-                    one_more_corruption (fs, FATAL);
-                    return STAT_DATA_NOT_FOUND;
-	        }
-	    
-	        bh = get_bh (path);
-	        ih = get_ih (path);
-	        sd = get_item (path);
-	        set_sd_size (ih, sd, &real_size);
-	        set_sd_blocks (ih, sd, &blocks);
-	        set_sd_mode (ih, sd, &mode);
-	        if (!is_new_file)
-		    set_sd_first_direct_byte (ih, sd, &first_direct_byte);
-		mark_buffer_dirty (bh);
-	    } else {
-		fsck_check_stat (fs)->fixable_corruptions += fix_sd;
-	    }
-	}
-    }    
-    return retval;
-}
-
-/* returns buffer, containing found directory item.*/
-static char * get_next_directory_item (
-	struct key * key, /* on return this will contain key of next item in the tree */
-	struct key * parent, struct item_head * ih, __u32 * pos_in_item, int dir_format)
-{
-    INITIALIZE_PATH (path);
-    char * dir_item;
-    struct key * rdkey;
-    struct buffer_head * bh;
-    struct reiserfs_de_head * deh;
-    int i;
-    int retval;
-
-
-start_again:
-
-    retval = reiserfs_search_by_entry_key (fs, key, &path);
-
-    if (retval != POSITION_FOUND && get_offset (key) != DOT_OFFSET)
-	reiserfs_panic ("get_next_directory_item: The current directory %k cannot be found", 
-	    key);
-
-    /* leaf containing directory item */
-    bh = PATH_PLAST_BUFFER (&path);
-    *pos_in_item = path.pos_in_item;
-    *ih = *get_ih (&path);
-    deh = B_I_DEH (bh, ih);
-
-    /* position was not found for '.' or there is no '..' */
-    if (retval != POSITION_FOUND || ((get_offset (key) == DOT_OFFSET) &&
-	(get_ih_entry_count (ih) < 2 || name_in_entry_length (ih, deh + 1, 1) != 2 ||
-	 strncmp (name_in_entry (deh + 1, 1), "..", 2)))) {
-
-	fsck_log ("get_next_directory_item: The %s %k cannot be found in %k", 
-	    (retval == POSITION_NOT_FOUND) ? "entry" : "directory", key, &ih->ih_key);
-	
-	if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
-	    /* add "." and ".." exist */
-	    pathrelse (&path);
-	    reiserfs_add_entry (fs, key, ".",  name_length (".", dir_format), key, 0);
-	    reiserfs_add_entry (fs, key, "..", name_length ("..", dir_format), parent, 0);
-	    fsck_log (" - entry was added\n");
-	    goto start_again;
-	} else {
-	    one_more_corruption (fs, FIXABLE);
-	    fsck_log ("\n");
-	    if (retval == DIRECTORY_NOT_FOUND)
-	        return 0;
-	}
-    }
-
-    /* make sure, that ".." exists as well */
-/*
-    if (get_offset (key) == DOT_OFFSET) {
-	if (get_ih_entry_count (ih) < 2 ||
-	    name_in_entry_length (ih, deh + 1, 1) != 2 ||
-	    strncmp (name_in_entry (deh + 1, 1), "..", 2))
-	{
-	    fsck_log ("get_next_directory_item: \"..\" not found in %H\n", ih);
-	    pathrelse (&path);
-	    return 0;
-	}
-    }
-*/
-    /* mark hidden entries as visible, set "." and ".." correctly */
-    deh += *pos_in_item;
-    for (i = *pos_in_item; i < get_ih_entry_count (ih); i ++, deh ++) {
-/*	int namelen;
-	char * name;
-
-	name = name_in_entry (deh, i);
-	namelen = name_in_entry_length (ih, deh, i);
-	if (de_hidden (deh)) // handled in check_tree
-	    reiserfs_panic ("get_next_directory_item: item %k: hidden entry %d \'%.*s\'\n",
-			    key, i, namelen, name);
-*/
-
-	if (get_deh_offset (deh) == DOT_OFFSET) {
-	    if (not_of_one_file (&(deh->deh2_dir_id), key)) {
-		/* "." must point to the directory it is in */
-		
-		//deh->deh_objectid != REISERFS_ROOT_PARENT_OBJECTID)/*????*/ {
-		fsck_log ("get_next_directory_item: The entry \".\" of the directory %K "
-		    "pointes to %K, instead of %K", key, (struct key *)(&(deh->deh2_dir_id)), 
-		    key);
-		if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
-		    set_deh_dirid (deh, get_key_dirid (key));
-		    set_deh_objectid (deh, get_key_objectid (key));
-		    mark_buffer_dirty (bh);
-		    fsck_log (" - corrected\n");
-		} else {
-		    one_more_corruption (fs, FIXABLE);
-		    fsck_log ("\n");
-		}
-	    }
-	}
-
-	if (get_deh_offset (deh) == DOT_DOT_OFFSET) {
-	    /* set ".." so that it points to the correct parent directory */
-	    if (comp_short_keys (&(deh->deh2_dir_id), parent)) {
-		fsck_log ("get_next_directory_item: The entry \"..\" of the directory %K "
-		    "pointes to %K, instead of %K", key, (struct key *)(&(deh->deh2_dir_id)));
-		if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
-		    set_deh_dirid (deh, get_key_dirid (parent));
-		    set_deh_objectid (deh, get_key_objectid (parent));
-		    mark_buffer_dirty (bh);
-		    fsck_log (" - corrected\n");
-		} else {
-		    one_more_corruption (fs, FIXABLE);
-		    fsck_log ("\n");
-		}
-	    }
-	}
-    }
-
-    /* copy directory item to the temporary buffer */
-    dir_item = getmem (get_ih_item_len (ih));
-    memcpy (dir_item, B_I_PITEM (bh, ih), get_ih_item_len (ih));
-
-
-    /* next item key */
-    if (PATH_LAST_POSITION (&path) == (B_NR_ITEMS (bh) - 1) &&
-	(rdkey = uget_rkey (&path)))
-	copy_key (key, rdkey);
-    else {
-	set_key_dirid (key, 0);
-	set_key_objectid (key, 0);
-    }
-
-    if (fsck_mode (fs) == FSCK_REBUILD)
-        mark_item_reachable (get_ih (&path), bh);
-    pathrelse (&path);
-
-    return dir_item;
-}
-
-/* semantic pass of --check */
-static int check_semantic_pass (struct key * key, struct key * parent, int dot_dot, 
-    struct item_head * new_ih)
-{
-    struct path path;
-    void * sd;
-    __u32 nlink;
-    int is_new_dir;
-    struct buffer_head * bh;
-    struct item_head * ih;
-    int retval;
-    char * dir_item;
-    __u32 pos_in_item;
-    struct item_head tmp_ih;
-    struct key next_item_key, entry_key, object_key;
-    __u64 dir_size = 0;
-    __u32 blocks;
-    __u64 sd_size;
-    __u32 sd_blocks;
-    int fix_sd;
-    /*int relocate;*/
-    int dir_format = 0;
-    __u16 mode;
-    	
-    retval = OK;
-
- /* start_again: when directory was relocated */
-
-    if (!KEY_IS_STAT_DATA_KEY (key)) {
-	fsck_log ("check_semantic_pass: The key %k must be key of a StatData\n", key);
-	one_more_corruption (fs, FATAL);
-        return STAT_DATA_NOT_FOUND;
-    }
-
-    /* look for stat data of an object */
-    if (reiserfs_search_by_key_4 (fs, key, &path) == ITEM_NOT_FOUND) {
-	pathrelse (&path);
-	return STAT_DATA_NOT_FOUND;
-    }
-
-    /* stat data has been found */
-    ih = get_ih (&path);
-    sd = get_item(&path);
-
-    get_sd_nlink (ih, sd, &nlink);
-
-    /* It seems quite difficult to relocate objects on fix-fixable - 
-     * rewrite_file calls reiserfs_file_write which can convert tails 
-     * to unfm, plus unreachable, was_tail flags, etc. */
-#if 0
-    if ((/* relocate = */ should_be_relocated(&ih->ih_key))) {
-	/*
-	if (fsck_mode(fs) == FSCK_CHECK)
-	    relocate = 0;
-	*/
-	one_more_corruption(fs, FATAL);
-    }
-#endif
-
-    if (fix_obviously_wrong_sd_mode (&path)) {
-        one_more_corruption (fs, FIXABLE);
-	pathrelse (&path);
-        return OK;
-    }
-    
-    if (nlink == 0) {
-	fsck_log ("%s: block %lu: The StatData %k has bad nlink number (%u)\n",
-            __FUNCTION__, get_bh(&path)->b_blocknr, &ih->ih_key, nlink);
-	one_more_corruption (fs, FATAL); 
-    }
-    
-    if (not_a_directory (sd)) {
-	fsck_check_stat (fs)->files ++;
-	
-	retval = check_check_regular_file (&path, sd, /* relocate ? new_ih : */ 0);
-	pathrelse (&path);
-	return retval;
-    }
-
-/*
-    if (relocate) {
-	if (!new_ih)
-	    reiserfs_panic ("check_semantic_pass: Memory is not prepared for relocation of "
-		"%K", &ih->ih_key);
-	*new_ih = *ih;
-	pathrelse (&path);
-	sem_pass_stat (fs)->oid_sharing_dirs_relocated ++;
-	relocate_dir (new_ih, 1);
-	linked_already(&new_ih->ih_key);
-	one_less_corruption (fs, FIXABLE);
-	*key = new_ih->ih_key;
-	retval = RELOCATED;
-	goto start_again;
-    }
-*/
-
-/* 
-    if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
-    	// it looks like stat data of a directory found 
-    	if (nlink) {
-	    // we saw this directory already 
-	    if (!dot_dot) {
-	    	// this name is not ".."  - and hard links are not allowed on directories 
-	    	pathrelse (&path);
-	    	return STAT_DATA_NOT_FOUND;
-	    } else {
-	    	// ".." found 
-	    	nlink ++;
-	    	set_sd_nlink (ih, sd, &nlink);
-	    	mark_buffer_dirty (get_bh (&path));
-	    	pathrelse (&path);
-	    	return OK;
-	    }
-    	} // do not run it for dot_dot on check at all
-    	
-     	nlink = 2;
-    	if (get_key_objectid (key) == REISERFS_ROOT_OBJECTID)
-	    nlink ++;
-    	set_sd_nlink (ih, sd, &nlink);
-    	mark_buffer_dirty (get_bh (&path));    
-    }
-*/
-
-    /* directory stat data found */
-    if (get_ih_item_len (ih) == SD_SIZE)
-	is_new_dir = 1;
-    else
-	is_new_dir = 0;
-
-    /* save stat data's size and st_blocks */
-    get_sd_size (ih, sd, &sd_size);
-    get_sd_blocks (ih, sd, &sd_blocks);
-    get_sd_mode (ih, sd, &mode);
-
-    dir_format = (get_ih_item_len (get_ih (&path)) == SD_SIZE) ? KEY_FORMAT_2 : KEY_FORMAT_1;
-
-    /* release path pointing to stat data */
-    pathrelse (&path);
-
-    fsck_check_stat (fs)->dirs ++;
-
-    set_key_dirid (&next_item_key, get_key_dirid (key));
-    set_key_objectid (&next_item_key, get_key_objectid (key));
-    set_key_offset_v1 (&next_item_key, DOT_OFFSET);
-    set_key_uniqueness (&next_item_key, DIRENTRY_UNIQUENESS);
-
-    dir_size = 0;
-    while ((dir_item = get_next_directory_item (&next_item_key, parent, &tmp_ih, 
-	&pos_in_item, dir_format)) != 0) 
-    {
-	/* dir_item is copy of the item in separately allocated memory,
-	   item_key is a key of next item in the tree */
-	int i;
-	char * name = 0;
-	int namelen, entry_len;
-	struct reiserfs_de_head * deh = (struct reiserfs_de_head *)dir_item + pos_in_item;
-	
-	
-	for (i = pos_in_item; i < get_ih_entry_count (&tmp_ih); i ++, deh ++) {
-	    struct item_head relocated_ih;
-	    int ret = OK;
-	    
-	    if (name) {
-		free (name);
-		name = 0;
-	    }
-	
-	    namelen = name_in_entry_length (&tmp_ih, deh, i);
-	    asprintf (&name, "%.*s", namelen, name_in_entry (deh, i));	
-	    entry_len = entry_length (&tmp_ih, deh, i);
-	
-	    get_object_key (deh, &object_key, &entry_key, &tmp_ih);
-
-	    if ((dir_format == KEY_FORMAT_2) && (entry_len % 8 != 0)) {
-		/* not alighed directory of new format - delete it */
-		if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
-		    fsck_log ("Entry %K (\"%.*s\") in the directory %K is not formated "
-			"properly - deleted\n",	(struct key *)&(deh->deh2_dir_id), 
-			namelen, name, &tmp_ih.ih_key);
-		    reiserfs_remove_entry (fs, &entry_key);
-		    entry_len = name_length (name, dir_format);
-		    reiserfs_add_entry (fs, key, name, entry_len, 
-			(struct key *)&(deh->deh2_dir_id), 0);
-		} else {
-		    fsck_log ("Entry %K (\"%.*s\") in the directory %K is not formated "
-			"properly.\n", (struct key *)&(deh->deh2_dir_id), namelen, name, 
-			&tmp_ih.ih_key);
-		    one_more_corruption (fs, FIXABLE);
-		}
-	    }
-	
-	
-	    print_name (name, namelen);
-	    
-	    if (!is_properly_hashed (fs, name, namelen, get_deh_offset (deh))) {
-		one_more_corruption (fs, FATAL);
-		fsck_log ("check_semantic_pass: Hash mismatch detected for (%.*s) in "
-		    "directory %K\n", namelen, name, &tmp_ih.ih_key);
-	    }
-	
-	    if (is_dot (name, namelen) || (is_dot_dot (name, namelen))) {
-		/* do not go through "." and ".." */
-		ret = OK;
-	    } else {
-		if ((ret = add_path_key (&object_key)) == 0) {
-		    ret = check_semantic_pass (&object_key, key, 
-			is_dot_dot(name, namelen), &relocated_ih);
-		    del_path_key ();
-		}
-	    }
-	    
-	    erase_name (namelen);
-	    
-	    /* check what check_semantic_tree returned */
-	    switch (ret) {
-	    case OK:
-		dir_size += DEH_SIZE + entry_len;
-		break;
-		
-	    case STAT_DATA_NOT_FOUND:
-		fsck_log ("check_semantic_pass: Name \"%.*s\" in directory %K points to "
-		    "nowhere\n", namelen, name, &tmp_ih.ih_key);
-	    case LOOP_FOUND:
-		if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
-		    reiserfs_remove_entry (fs, &entry_key);
-		    fsck_log (" - removed");
-		} else {
-		    one_more_corruption (fs, FIXABLE);
-		}
-		fsck_log ("\n");
-		break;
-		    
-	    case DIRECTORY_HAS_NO_ITEMS:
-		fsck_log ("check_semantic_pass: Name \"%.*s\" in directory %K points a "
-		    "directory without body\n", namelen, name, &tmp_ih.ih_key);
-		
-		/* fixme: stat data should be deleted as well */
-		/*
-		  if (fsck_fix_fixable (fs)) {
-		  reiserfs_remove_entry (fs, &entry_key);
-		  fsck_data(fs)->deleted_entries ++;
-		  fsck_log (" - removed");
-		  }
-		  fsck_log ("\n");*/
-		break;
-		
-	    case RELOCATED:
-		/* file was relocated, update key in corresponding directory entry */
-		if (reiserfs_search_by_entry_key (fs, &entry_key, &path) != POSITION_FOUND) {
-		    fsck_log("Cannot find a name of the relocated file %K in the directory "
-			"%K\n", &entry_key, &tmp_ih.ih_key);
-		} else {
-		    /* update key dir entry points to */
-		    struct reiserfs_de_head * tmp_deh;
-		    
-		    tmp_deh = B_I_DEH (get_bh (&path), get_ih (&path)) + path.pos_in_item;
-		    fsck_log ("The directory %K pointing to %K (\"%.*s\") updated to point "
-			"to ",	&tmp_ih.ih_key, &tmp_deh->deh2_dir_id, namelen, name);
-		    set_deh_dirid (tmp_deh, get_key_dirid (&relocated_ih.ih_key));
-		    set_deh_objectid (tmp_deh, get_key_objectid (&relocated_ih.ih_key));
-
-		    fsck_log ("%K (\"%.*s\")\n",  &tmp_deh->deh2_dir_id, namelen, name);
-		    mark_buffer_dirty (get_bh (&path));
-		}
-		dir_size += DEH_SIZE + entry_len;
-		pathrelse (&path);
-		break;
-	    }
-	} /* for */
-	
-	freemem (dir_item);
-	free (name);
-	name = 0;
-
-	if (not_of_one_file (&next_item_key, key))
-	    /* next key is not of this directory */
-	    break;
-	
-    } /* while (dir_item) */
-    
-    
-    if (dir_size == 0)
-	/* FIXME: is it possible? */
-	return DIRECTORY_HAS_NO_ITEMS;
-    
-    /* calc correct value of sd_blocks field of stat data */
-    blocks = dir_size2st_blocks (dir_size);
-    
-    fix_sd = 0;
-    fix_sd += wrong_st_blocks (key, &blocks, sd_blocks, mode, is_new_dir);
-    fix_sd += wrong_st_size (key, is_new_dir ? MAX_FILE_SIZE_V2 : MAX_FILE_SIZE_V1,
-			     fs->fs_blocksize, &dir_size, sd_size, TYPE_DIRENTRY);
-
-    if (fix_sd) {
-	if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
-	    /* we have to fix either sd_size or sd_blocks, so look for stat data again */
-	    if (reiserfs_search_by_key_4 (fs, key, &path) != ITEM_FOUND) {
-		fsck_log ("check_semantic_tree: The StatData of the file %K was not found\n", 
-		    key);
-		one_more_corruption(fs, FATAL);
-                return STAT_DATA_NOT_FOUND;
-	    }
-	
-	    bh = get_bh (&path);
-	    ih = get_ih (&path);
-	    sd = get_item (&path);
-	
-	    set_sd_size (ih, sd, &dir_size);
-	    set_sd_blocks (ih, sd, &blocks);
-	    mark_buffer_dirty (bh);
-	    pathrelse (&path);
-	} else {
-	    fsck_check_stat (fs)->fixable_corruptions += fix_sd;
-	}
-    }
-    
-    return retval;
-}
-
-int check_safe_links ()
-{
-    struct path safe_link_path, path;
-    struct key safe_link_key = {-1, 0, {{0, 0}}};
-    struct key key = {0, 0, {{0, 0}}};
-    struct key * rkey;
-    struct item_head * tmp_ih;
-
-    while (1) {
-        if (get_key_dirid (&safe_link_key) == 0)
-            break;
-
-	reiserfs_search_by_key_4 (fs, &safe_link_key, &safe_link_path);
-	
-	if (get_blkh_nr_items ( B_BLK_HEAD (get_bh(&safe_link_path))) <= 
-	    PATH_LAST_POSITION (&safe_link_path)) 
-	{
-	    pathrelse (&safe_link_path);
-            break;
-	}	
-	
-	tmp_ih = get_ih(&safe_link_path);
-	
-        if (get_key_dirid(&tmp_ih->ih_key) != (__u32)-1 ||
-	    get_key_objectid(&tmp_ih->ih_key) == (__u32)-1) {
-	    pathrelse (&safe_link_path);
-            break;
-	}
-
-        if (get_ih_item_len (tmp_ih) != 4)
-	    reiserfs_panic ("Safe Link %k cannot be of the size %d", 
-		&tmp_ih->ih_key, get_ih_item_len (tmp_ih));
-	
-	set_key_dirid(&key, d32_get((__u32 *)get_item(&safe_link_path), 0));
-	set_key_objectid(&key, get_key_objectid(&tmp_ih->ih_key));
-	if ((rkey = reiserfs_next_key(&safe_link_path)) == NULL)
-	    set_key_dirid (&safe_link_key, 0);
-	else
-	    safe_link_key = *rkey;
-	
-	if (reiserfs_search_by_key_4 (fs, &key, &path) == ITEM_NOT_FOUND) {
-	    /*sware on check, delete on fix-fixable*/
-	    if (fsck_mode(fs) == FSCK_CHECK) {
-		fsck_log ("Invalid safe link %k: cannot find the pointed object (%K)\n", 
-		    &tmp_ih->ih_key, &key);
-		one_more_corruption (fs, FIXABLE);
-	    } else if (fsck_mode(fs) == FSCK_FIX_FIXABLE) {
-		fsck_log ("Invalid safe link %k: cannot find the pointed object (%K) - "
-		    "safe link was deleted\n", &tmp_ih->ih_key, &key);
-		d32_put((__u32 *)get_item(&safe_link_path), 0, 0);
-		pathrelse (&path);
-		reiserfsck_delete_item (&safe_link_path, 0);		
-		continue;
-	    }
-	} else if (get_offset(&tmp_ih->ih_key) == 0x1) {
-	    /* Truncate */
-	    if (!not_a_directory (get_item(&path))) {
-		/*truncate on directory should not happen*/
-		/*sware on check, delete on fix-fixable*/
-		if (fsck_mode(fs) == FSCK_CHECK) {
-		    fsck_log ("Invalid 'truncate' safe link %k, cannot happen for "
-			"directory (%K)\n", &tmp_ih->ih_key, &key);
-		    one_more_corruption (fs, FIXABLE);
-		} else if (fsck_mode(fs) == FSCK_FIX_FIXABLE) {
-		    fsck_log ("Invalid 'truncate' safe link %k, cannot happen for "
-			"a directory (%K) - safe link was deleted\n", &tmp_ih->ih_key, &key);
-		    d32_put((__u32 *)get_item(&safe_link_path), 0, 0);
-		    pathrelse (&path);
-		    reiserfsck_delete_item (&safe_link_path, 0);		
-		    continue;
-		}
-	    } else {
-		/* save 'safe truncate links' to avoid swaring on wrong sizes. */
-		__u32 position;
-		
-		if (reiserfs_bin_search (&key, trunc_links, links_num, sizeof(key), 
-		    &position, comp_short_keys) != POSITION_FOUND) 
-		{
-		    blocklist__insert_in_position(&key, (void *)&trunc_links, &links_num, 
-			sizeof(key), &position);
-		}		
-	    }
-	}
-	pathrelse (&path);
-	pathrelse (&safe_link_path);
-    }
-
-    return OK;
-}
-
-void release_safe_links () {
-    freemem(trunc_links);
-}
-
-/* called when --check is given */
-void semantic_check (void)
-{
-    if (fsck_data (fs)->check.bad_nodes) {
-        fsck_progress ("Bad nodes were found, Semantic pass skipped\n");
-        goto clean;
-    }
-
-    if (fsck_data (fs)->check.fatal_corruptions) {
-        fsck_progress ("Fatal corruptions were found, Semantic pass skipped\n");
-        goto clean;
-    }
- 
-    fsck_progress ("Checking Semantic tree:\n");
-
-    if (fsck_mode(fs) == FSCK_FIX_FIXABLE) {
-        /*create new_bitmap, and initialize new_bitmap & allocable bitmap*/
-        fsck_new_bitmap (fs) = reiserfs_create_bitmap(get_sb_block_count(fs->fs_ondisk_sb));
-        reiserfs_bitmap_copy (fsck_new_bitmap (fs), fs->fs_bitmap2);
-        fsck_allocable_bitmap (fs) = reiserfs_create_bitmap(get_sb_block_count
-	    (fs->fs_ondisk_sb));
-        reiserfs_bitmap_copy (fsck_allocable_bitmap (fs), fs->fs_bitmap2);
-	fs->block_allocator = reiserfsck_reiserfs_new_blocknrs;
-	fs->block_deallocator = reiserfsck_reiserfs_free_block;
-    }
-    
-    check_safe_links ();
-    
-    if (check_semantic_pass (&root_dir_key, &parent_root_dir_key, 0, 0) != OK) {
-        fsck_log ("check_semantic_tree: No root directory found");
-        one_more_corruption (fs, FATAL);
-    }
-
-    release_safe_links ();
-
-    if (fsck_mode(fs) == FSCK_FIX_FIXABLE) {
-        reiserfs_delete_bitmap (fs->fs_bitmap2);
-	reiserfs_bitmap_delta (fsck_new_bitmap (fs), fsck_deallocate_bitmap (fs));	
-        fs->fs_bitmap2 = fsck_new_bitmap (fs);
-        reiserfs_delete_bitmap (fsck_allocable_bitmap (fs));	
-        fsck_allocable_bitmap (fs) = NULL;
-        set_sb_free_blocks (fs->fs_ondisk_sb, reiserfs_bitmap_zeros (fs->fs_bitmap2));
-        mark_buffer_dirty (fs->fs_super_bh);
-	add_badblock_list(fs, 1);
-    }
-    
-    fsck_progress ("finished\n");
-    
-clean:
-    if (fsck_deallocate_bitmap (fs))
-	reiserfs_delete_bitmap (fsck_deallocate_bitmap (fs));
-}
diff --git a/fsck/semantic_rebuild.c b/fsck/semantic_rebuild.c
deleted file mode 100644
index 551a2e6..0000000
--- a/fsck/semantic_rebuild.c
+++ /dev/null
@@ -1,1250 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#include "fsck.h"
-
-int screen_width;
-int screen_curr_pos;
-char *screen_savebuffer;
-int screen_savebuffer_len;
-
-#define MIN(a, b) (((a)>(b))?(b):(a))
-
-/* semantic pass progress */
-void print_name (char * name, int len)
-{
-    int i;
-
-    if (fsck_quiet (fs))
-	return;
-
-    if ( len + screen_curr_pos + 1 > screen_savebuffer_len) {
-	char *t;
-	
-	t = expandmem(screen_savebuffer, screen_savebuffer_len + 1, 
-	    len + screen_curr_pos - screen_savebuffer_len + 1);
-	if (!t) {
-	    fsck_progress("\nOut of memory\n");
-	    return; // ????
-	}
-	screen_savebuffer = t;
-	screen_savebuffer_len = len + screen_curr_pos + 1;
-    }
-    strcat(screen_savebuffer,"/");
-    strncat(screen_savebuffer,name,len);
-    i = screen_curr_pos;
-    screen_curr_pos += len+1;
-    for ( ; i<screen_curr_pos; i++)
-	if ( screen_savebuffer[i] < 32 )
-	    screen_savebuffer[i] = '?';
-    screen_savebuffer[screen_curr_pos]=0;
-
-    if ( screen_width < screen_curr_pos ) {
-	printf("\r... %.*s",screen_width - 4, 
-	    screen_savebuffer + ( screen_curr_pos - (screen_width - 4)));
-    } else
-	printf("/%.*s", len, screen_savebuffer + screen_curr_pos - len);
-
-    fflush (stdout);
-}
-
-
-void erase_name (int len)
-{
-    int i;
-
-    if (fsck_quiet (fs))
-	return;
-
-    if ( screen_curr_pos < screen_width ) {
-
-	screen_curr_pos-=len+1;
-	screen_savebuffer[screen_curr_pos]=0;
-
-	for (i = 0; i<=len; i++)
-	    printf("\b");
-	for (i = 0; i<=len+1; i++)
-	    printf(" ");
-	for (i = 0; i<=len+1; i++)
-	    printf("\b");
-    } else {
-	screen_curr_pos-=len+1;
-	if (screen_curr_pos < 0 )
-	    die("%s: Get out of buffer's data!\n", __FUNCTION__);
-
-	screen_savebuffer[screen_curr_pos]=0;
-	printf("\r");
-	if (screen_curr_pos >= screen_width ) {
-	    int t_preface=MIN(screen_curr_pos-screen_width,4);
-	    printf("%.*s%.*s", t_preface, "... ", screen_width-t_preface - 1, 
-		screen_savebuffer + ( screen_curr_pos - (screen_width - t_preface)) + 1);
-	} else {
-	    int space_used=printf("%s", screen_savebuffer);
-	    for ( i=space_used; i < screen_width; i++)
-		printf(" ");
-	    for ( i=space_used; i < screen_width; i++)
-		printf("\b");
-	}
-    }
-	    
-    fflush (stdout);
-}
-
-
-
-/* *size is "real" file size, sd_size - size from stat data */
-int wrong_st_size (struct key * key, unsigned long long max_file_size, 
-    int blocksize, __u64 * size, __u64 sd_size, int type)
-{
-    if (sd_size <= max_file_size) {
-	if (sd_size == *size)
-	    return 0;
-
-	if (type == TYPE_DIRENTRY) {
-	    /* directory size must match to the sum of length of its entries */
-	    fsck_log ("vpf-10650: The directory %K has the wrong size in the StatData "
-		"(%Lu)%s(%Lu)\n", key, sd_size, fsck_mode(fs) == FSCK_CHECK ? 
-		", should be " : " - corrected to ", *size);
-	    return 1;
-	}
-	
-	if (sd_size > *size) {
-	    /* size in stat data can be bigger than size calculated by items */
-	    if (fsck_adjust_file_size (fs) || type == TYPE_SYMLINK) {
-		/* but it -o is given - fix that */
-		fsck_log ("vpf-10660: The file %K has too big size in the StatData "
-		    "(%Lu)%s(%Lu)\n", key, sd_size, fsck_mode(fs) == FSCK_CHECK ? 
-		    ", should be " : " - corrected to ", *size);
-		sem_pass_stat (fs)->fixed_sizes ++;
-		return 1;
-	    }
-	    *size = sd_size;
-	    return 0;
-	}
-	
-	if (!(*size % blocksize)) {
-	    /* last item is indirect */
-	    if (((sd_size & ~(blocksize - 1)) == (*size - blocksize)) && 
-		sd_size % blocksize) 
-	    {
-		/* size in stat data is correct */
-		*size = sd_size;
-		return 0;
-	    }
-	} else {
-	    /* last item is a direct one */
-	    if (!(*size % 8)) {
-		if (((sd_size & ~7) == (*size - 8)) && sd_size % 8) {
-		    /* size in stat data is correct */
-		    *size = sd_size;
-		    return 0;
-		}
-	    }
-	}
-    }
-
-    fsck_log ("vpf-10670: The file %K has the wrong size in the StatData (%Lu)%s(%Lu)\n", key, 
-	sd_size, fsck_mode(fs) == FSCK_CHECK ? ", should be " : " - corrected to ", 
-	*size);
-    sem_pass_stat (fs)->fixed_sizes ++;
-    return 1;
-}
-
-
-/* sd_blocks is 32 bit only */
-/* old stat data shares sd_block and sd_dev - do not wipe sd_rdev out */
-/* we should fix it as following:
-|------------------------------------------------------------------|
-|                    |        3.6                   |       3.5    |
-|---------------------------------------------------|              |
-|                    |  blocks |  r_dev|generation  | blocks/r_dev |
-|------------------------------------------------------------------|
-|   fifo, sockets    |    0    |    generation      |      0       |
-|   chr/blk_dev      |    0    |     maj:min        |   maj:min    |
-|   file, dir, link  |  blocks |    generation      |   blocks     |
-|------------------------------------------------------------------|
-*/
-int wrong_st_blocks (struct key * key, __u32 * blocks, __u32 sd_blocks, __u16 mode, 
-    int new_format)
-{
-    int ret = 0;
-
-    if (S_ISREG (mode) || S_ISLNK (mode) || S_ISDIR (mode)) {
-	if ((!S_ISLNK(mode) && *blocks != sd_blocks) ||
-	    (S_ISLNK(mode) && *blocks != sd_blocks && (ROUND_UP(*blocks) != sd_blocks))) {
-	    fsck_log ("vpf-10680: The %s %K has the wrong block count in the StatData "
-		"(%u)%s(%u)\n", S_ISDIR (mode) ? "directory" : S_ISREG (mode) ? "file" : "link",  key, sd_blocks, 
-		fsck_mode(fs) == FSCK_CHECK ? ", should be " : " - corrected to ", *blocks);
-	    ret = 1;
-	}
-    } else if (new_format || (S_ISFIFO (mode) || S_ISSOCK (mode))) {
-	if (sd_blocks != 0) {
-	    fsck_log ("vpf-10690: The object %K has the wrong block count in the StatData "
-		"(%u)%s(%u)\n",	key, sd_blocks, fsck_mode(fs) == FSCK_CHECK ? 
-		", should be " : " - corrected to ", 0);
-	    *blocks = 0;	
-	    ret = 1;
-	}
-    }
-
-    return ret;
-}
-/*
-int wrong_st_rdev (struct key * key, __u32 * sd_rdev, __u16 mode, int new_format)
-{
-    int ret = 0;
-
-    if (!new_format)
-	return 0;
-
-    if (!S_ISCHR (mode) && !S_ISBLK (mode)) {
-	if (*sd_rdev != 0) {
-	    fsck_log ("%s %K has wrong sd_rdev %u, has to be 0\n",
-		S_ISDIR (mode) ? "dir" : "file", key, *sd_rdev);
-	    *sd_rdev = 0;
-	    ret = 1;
-	}
-    }
-    return ret;
-}
-*/
-/* only regular files and symlinks may have items but stat
-   data. Symlink should have body */
-int wrong_mode (struct key * key, __u16 * mode, __u64 real_size, int symlink)
-{
-    int retval = 0;
-    if (S_ISLNK (*mode) && !symlink) {
-	fsck_log ("The file %K (%M) is too big to be the symlink%s regfile\n", 
-	    key, *mode, fsck_mode(fs) == FSCK_CHECK ? ", should be the" : " - corrected "
-	    "to the");
-	*mode &= ~S_IFMT;
-	*mode |= S_IFREG;
-	retval = 1;
-    }
-
-    if (ftypelet (*mode) != '?') {
-	/* mode looks reasonable */
-	if (S_ISREG (*mode) || S_ISLNK (*mode))
-	    return retval;
-	
-	/* device, pipe, socket have no items */
-	if (!real_size)
-	    return retval;
-    }
-    /* there are items, so change file mode to regular file. Otherwise
-       - file bodies do not get deleted */
-    if (fsck_mode(fs) == FSCK_CHECK) {
-	fsck_log ("The object %K has wrong mode (%M)\n", key, *mode);
-    } else {
-	fsck_log("The object %K has wrong mode (%M) - corrected to %M\n", 
-	    key, *mode, (S_IFREG | 0600));
-    }
-    *mode = (S_IFREG | 0600);
-    return 1;
-}
-
-
-/* key is a key of last file item */
-int wrong_first_direct_byte (struct key * key, int blocksize, 
-			     __u32 * first_direct_byte,
-			     __u32 sd_first_direct_byte, __u32 size)
-{
-    if (!size || is_indirect_key (key)) {
-	/* there is no direct item */
-	*first_direct_byte = NO_BYTES_IN_DIRECT_ITEM;
-	if (sd_first_direct_byte != NO_BYTES_IN_DIRECT_ITEM) {
-	    if (fsck_mode(fs) == FSCK_CHECK) {
-		fsck_log ("The file %K: The wrong info about the tail in the StatData, "
-		    "first_direct_byte (%d) - should be (%d)\n", key, 
-		    sd_first_direct_byte, *first_direct_byte);
-	    } else {
-		fsck_log ("The file %K: The wrong info about the tail in the StatData, "
-		    "first_direct_byte (%d) - corrected to (%d)\n", key, 
-		    sd_first_direct_byte, *first_direct_byte);
-	    }
-	    return 1;
-	}
-	return 0;
-    }
-
-    /* there is direct item */
-    *first_direct_byte = (get_offset (key) & ~(blocksize - 1)) + 1;
-    if (*first_direct_byte != sd_first_direct_byte) {
-	if (fsck_mode(fs) == FSCK_CHECK) {
-	    fsck_log ("The file %K: The wrong info about the tail in the StatData, "
-		"first_direct_byte (%d) - should be (%d)\n", key, sd_first_direct_byte, 
-		*first_direct_byte);
-	} else {
-	    fsck_log ("The file %K: The wrong info about the tail in the StatData, "
-		"first_direct_byte (%d) - corrected to (%d)\n", key, sd_first_direct_byte, 
-		*first_direct_byte);
-	}
-	    
-	return 1;
-    }
-    return 0;
-}
-
-
-/* delete all items (but directory ones) with the same key 'ih' has
-   (including stat data of not a directory) and put them back at the
-   other place */
-void relocate_dir (struct item_head * ih, int change_ih)
-{
-    struct key key;
-    struct key * rkey;
-    struct path path;
-    struct item_head * path_ih;
-    struct si * si;
-    __u32 new_objectid;
-
-    /* starting with the leftmost one - look for all items of file,
-       store them and delete */
-    key = ih->ih_key;
-    set_type_and_offset (KEY_FORMAT_1, &key, SD_OFFSET, TYPE_STAT_DATA);
-
-    si = 0;
-    while (1) {
-	reiserfs_search_by_key_4 (fs, &key, &path);
-	
-	if (get_item_pos (&path) == B_NR_ITEMS (get_bh (&path))) {
-	    rkey = uget_rkey (&path);
-	    if (rkey && !not_of_one_file (&key, rkey)) {
-		/* file continues in the right neighbor */
-		key = *rkey;
-		pathrelse (&path);
-		continue;
-	    }
-	    /* there is no more items of a directory */
-	    pathrelse (&path);
-	    break;
-	}
-
-	if (is_stat_data_ih (get_ih(&path)))
-	    fix_obviously_wrong_sd_mode (&path);
-	
-	path_ih = get_ih (&path);
-	if (not_of_one_file (&key, &(path_ih->ih_key))) {
-	    /* there are no more item with this key */
-	    pathrelse (&path);
-	    break;
-	}
-
-	/* ok, item found, but make sure that it is not a directory one */
-	if ((is_stat_data_ih (path_ih) && not_a_directory (get_item (&path))) ||
-	    is_direct_ih (path_ih) || is_indirect_ih (path_ih)) {
-	    /* item of not a directory found. Leave it in the
-               tree. FIXME: should not happen */
-	    key = path_ih->ih_key;
-	    set_offset (KEY_FORMAT_1, &key, get_offset (&key) + 1);
-	    pathrelse (&path);
-	    continue;
-	}
-
-	/* directory stat data ro directory item */
-	si = save_and_delete_file_item (si, &path);
-    }
-
-
-    if (!si) {
-	fsck_log ("relocate_dir: WARNING: No one item of the directory %K found\n", &key);
-	return;
-    }
-
-
-    /* get new objectid for relocation or get objectid with which file
-       was relocated already */
-    new_objectid = objectid_for_relocation (&ih->ih_key);
-    set_key_objectid (&ih->ih_key, new_objectid);
-
-    /* put all items removed back into tree */
-    while (si) {
-	fsck_log ("relocate_dir: Moving %k to ", &si->si_ih.ih_key);	
-	set_key_objectid (&si->si_ih.ih_key, new_objectid);
-	fsck_log ("%k\n", &si->si_ih.ih_key);
-	if (get_offset (&(si->si_ih.ih_key)) == DOT_OFFSET) {
-	    /* fix "." entry to point to a directtory properly */
-	    struct reiserfs_de_head * deh;
-
-	    deh = (struct reiserfs_de_head *)si->si_dnm_data;
-	    set_deh_objectid (deh, new_objectid);
-	}
-	insert_item_separately (&(si->si_ih), si->si_dnm_data, 1/*was in tree*/);
-	si = remove_saved_item (si);
-    }
-}
-
-
-
-/* path is path to stat data. If file will be relocated - new_ih will contain
-   a key file was relocated with */
-int rebuild_check_regular_file (struct path * path, void * sd,
-				struct item_head * new_ih)
-{
-    int is_new_file;
-//    struct key sd_key;
-    __u16 mode;
-    __u32 nlink;
-    __u64 real_size, saved_size;
-    __u32 blocks, saved_blocks;	/* proper values and value in stat data */
-    __u32 first_direct_byte, saved_first_direct_byte;
-
-    struct buffer_head * bh;
-    struct item_head * ih, sd_ih;
-    int fix_sd;
-    int symlnk = 0;
-    int retval;
-
-    retval = OK;
-
-    /* stat data of a file */
-    ih = get_ih (path);
-    bh = get_bh (path);
-
-    if (new_ih) {
-	/* this objectid is used already */
-	*new_ih = *ih;
-	pathrelse (path);
-	rewrite_file (new_ih, 1, 1);
-	linked_already(&new_ih->ih_key);
-	sem_pass_stat (fs)->oid_sharing_files_relocated ++;
-	retval = RELOCATED;
-	if (reiserfs_search_by_key_4 (fs, &(new_ih->ih_key), path) == ITEM_NOT_FOUND)
-	    reiserfs_panic ("%s: Could not find the StatData of the relocated file %k", 
-		__FUNCTION__, &(new_ih->ih_key));
-	/* stat data is marked unreachable again due to relocation, fix that */
-	ih = get_ih (path);
-	bh = get_bh (path);
-	mark_item_reachable (ih, bh);
-	sd = get_item (path);
-	
-    }
-	
-    id_map_mark(semantic_id_map(fs), get_key_objectid (&ih->ih_key));
-
-    /* check and set nlink first */
-    get_sd_nlink (ih, sd, &nlink);
-    nlink ++;
-    set_sd_nlink (ih, sd, &nlink);
-    mark_buffer_dirty (bh);
-
-    if (nlink > 1)
-	return retval;
-
-    /* firts name of a file found */
-    if (get_ih_item_len (ih) == SD_SIZE)
-	is_new_file = 1;
-    else
-	is_new_file = 0;
-
-    get_sd_mode (ih, sd, &mode);
-    get_sd_size (ih, sd, &saved_size);
-    get_sd_blocks (ih, sd, &saved_blocks);
-    if (!is_new_file)
-	get_sd_first_direct_byte (ih, sd, &saved_first_direct_byte);
-    
-    /* we met this file first time */
-    if (S_ISREG (mode)) {
-	sem_pass_stat(fs)->regular_files ++;
-    } else if (S_ISLNK (mode)) {
-	symlnk = 1;
-	sem_pass_stat (fs)->symlinks ++;
-    } else {
-	sem_pass_stat (fs)->others ++;
-    }
-
-
-    sd_ih = *ih;
-//    sd_key = sd_ih.ih_key;
-    pathrelse (path);
-    
-    if (are_file_items_correct (&sd_ih, sd, &real_size, &blocks, 1/*mark items reachable*/, 
-	&symlnk) != 1) 
-    {
-	/* unpassed items will be deleted in pass 4 as they left unaccessed */
-	sem_pass_stat (fs)->broken_files ++;
-    }
-    
-    fix_sd = 0;
-    
-    fix_sd += wrong_mode (/*&sd_key, */ &sd_ih.ih_key, &mode, real_size, symlnk);
-
-    if (!is_new_file)
-	fix_sd += wrong_first_direct_byte (&sd_ih.ih_key, fs->fs_blocksize,
-	    &first_direct_byte, saved_first_direct_byte, real_size);
-
-    fix_sd += wrong_st_size (/*&sd_key,*/ &sd_ih.ih_key, 
-	is_new_file ? MAX_FILE_SIZE_V2 : MAX_FILE_SIZE_V1,
-	fs->fs_blocksize, &real_size, saved_size, symlnk ? TYPE_SYMLINK : 0);
-
-    fix_sd += wrong_st_blocks (&sd_ih.ih_key, &blocks, saved_blocks, mode, is_new_file);
-
-    if (fix_sd) {
-	/* find stat data and correct it */
-	set_type_and_offset (KEY_FORMAT_1, &sd_ih.ih_key, SD_OFFSET, TYPE_STAT_DATA);
-	if (reiserfs_search_by_key_4 (fs, &sd_ih.ih_key, path) != ITEM_FOUND)
-	    reiserfs_panic ("%s: The StatData of the file %k could not be found", 
-		__FUNCTION__, &sd_ih.ih_key);
-	
-	bh = get_bh (path);
-	ih = get_ih (path);
-	sd = get_item (path);
-	set_sd_size (ih, sd, &real_size);
-	set_sd_blocks (ih, sd, &blocks);
-	set_sd_mode (ih, sd, &mode);
-	if (!is_new_file)
-	    set_sd_first_direct_byte (ih, sd, &first_direct_byte);
-	mark_buffer_dirty (bh);
-    }
-
-    return retval;
-}
-
-
-static int is_rootdir_key (struct key * key)
-{
-    if (comp_keys (key, &root_dir_key))
-	return 0;
-    return 1;
-}
-
-
-/* returns buffer, containing found directory item.*/
-static char * get_next_directory_item (struct key * key, /* on return this will
-						     contain key of next item
-						     in the tree */
-				struct key * parent,
-				struct item_head * ih,/*not in tree*/
-				__u32 * pos_in_item)
-{
-    INITIALIZE_PATH (path);
-    char * dir_item;
-    struct key * rdkey;
-    struct buffer_head * bh;
-    struct reiserfs_de_head * deh;
-    int i;
-    int retval;
-
-
-    if ((retval = reiserfs_search_by_entry_key (fs, key, &path)) != POSITION_FOUND)
-	reiserfs_panic ("get_next_directory_item: The current directory %k cannot be "
-	    "found", key);
-
-    /* leaf containing directory item */
-    bh = PATH_PLAST_BUFFER (&path);
-    *pos_in_item = path.pos_in_item;
-    *ih = *get_ih (&path);
-    deh = B_I_DEH (bh, ih);
-
-    /* make sure, that ".." exists as well */
-    if (get_offset (key) == DOT_OFFSET) {
-	if (get_ih_entry_count (ih) < 2 ||
-	    name_in_entry_length (ih, deh + 1, 1) != 2 ||
-	    strncmp (name_in_entry (deh + 1, 1), "..", 2))
-	{
-	    fsck_log ("get_next_directory_item: The entry \"..\" cannot be found in %k\n", &ih->ih_key);
-	    pathrelse (&path);
-	    return 0;
-	}
-    }
-
-    /* mark hidden entries as visible, set "." and ".." correctly */
-    deh += *pos_in_item; 
-    for (i = *pos_in_item; i < get_ih_entry_count (ih); i ++, deh ++) {
-	int namelen;
-	char * name;
-
-	name = name_in_entry (deh, i);
-	namelen = name_in_entry_length (ih, deh, i);
-	if (de_hidden (deh))
-	    reiserfs_panic ("get_next_directory_item: item %k: hidden entry %d \'%.*s\'\n",
-			    key, i, namelen, name);
-
-	if (get_deh_offset (deh) == DOT_OFFSET) {
-	    if (not_of_one_file (&(deh->deh2_dir_id), key)) {
-		/* "." must point to the directory it is in */
-		
-		//deh->deh_objectid != REISERFS_ROOT_PARENT_OBJECTID)/*????*/ {
-		fsck_log ("get_next_directory_item: The entry \".\" of the directory %K pointes to %K, instead of %K", 
-		    key, (struct key *)(&(deh->deh2_dir_id)), key);
-		set_deh_dirid (deh, get_key_dirid (key));
-		set_deh_objectid (deh, get_key_objectid (key));
-		mark_buffer_dirty (bh);
-		fsck_log (" - corrected\n");
-	    }
-	}
-
-	if (get_deh_offset (deh) == DOT_DOT_OFFSET) {
-	    /* set ".." so that it points to the correct parent directory */
-	    if (comp_short_keys (&(deh->deh2_dir_id), parent)) {
-		fsck_log ("get_next_directory_item: The entry \"..\" of the directory %K pointes to %K, instead of %K", 
-		    key, (struct key *)(&(deh->deh2_dir_id)), parent);
-		set_deh_dirid (deh, get_key_dirid (parent));
-		set_deh_objectid (deh, get_key_objectid (parent));
-		mark_buffer_dirty (bh);
-		fsck_log (" - corrected\n");
-	    }
-	}
-    }
-
-    /* copy directory item to the temporary buffer */
-    dir_item = getmem (get_ih_item_len (ih)); 
-    memcpy (dir_item, B_I_PITEM (bh, ih), get_ih_item_len (ih));
-
-
-    /* next item key */
-    if (PATH_LAST_POSITION (&path) == (B_NR_ITEMS (bh) - 1) &&
-	(rdkey = uget_rkey (&path)))
-	copy_key (key, rdkey);
-    else {
-	set_key_dirid (key, 0);
-	set_key_objectid (key, 0);
-    }
-
-    if (fsck_mode (fs) == FSCK_REBUILD)
-        mark_item_reachable (get_ih (&path), bh);
-    pathrelse (&path);
-
-    return dir_item;
-}
-
-
-// get key of an object pointed by direntry and the key of the entry itself
-void get_object_key (struct reiserfs_de_head * deh, struct key * key, 
-		     struct key * entry_key, struct item_head * ih)
-{
-    /* entry points to this key */
-    set_key_dirid (key, get_deh_dirid (deh));
-    set_key_objectid (key, get_deh_objectid (deh));
-    set_key_offset_v1 (key, SD_OFFSET);
-    set_key_uniqueness (key, 0);
-
-    /* key of entry */
-    set_key_dirid (entry_key, get_key_dirid (&ih->ih_key));
-    set_key_objectid (entry_key, get_key_objectid (&ih->ih_key));
-    set_key_offset_v1 (entry_key, get_deh_offset (deh));
-    set_key_uniqueness (entry_key, DIRENTRY_UNIQUENESS);
-}
-
-int fix_obviously_wrong_sd_mode (struct path * path) {
-    struct key * next_key = NULL;
-    __u16 mode;
-    int retval = 0;
-
-    next_key = reiserfs_next_key (path);
-
-    if (!next_key || not_of_one_file (next_key, &get_ih(path)->ih_key))
-    	return 0;
-    	
-    /* next item exists and of the same file. Fix the SD mode */
-
-    if (not_a_directory (get_item (path)) && is_direntry_key (next_key)) {
-        /* make SD mode SD of dir */
-	get_sd_mode (get_ih (path), get_item (path), &mode);
-	fsck_log ("The directory %K had wrong mode %M", &get_ih(path)->ih_key, mode);
-
-	if (fsck_mode(fs) != FSCK_CHECK) {
-	    mode &= ~S_IFMT;
-	    mode |= S_IFDIR;
-	    fsck_log (" - corrected to %M\n", mode);	
-	    set_sd_mode (get_ih (path), get_item (path), &mode);
-	    mark_buffer_dirty (get_bh(path));
-	} else {
-	    fsck_log ("\n");
-	    retval = 1;
-	}
-    } else if (!not_a_directory (get_item (path)) && !is_direntry_key (next_key)) {
-        /* make SD mode SD of regular file */
-	get_sd_mode (get_ih (path), get_item (path), &mode);
-	fsck_log ("The file %K had wrong mode %M", &get_ih(path)->ih_key, mode);
-	if (fsck_mode(fs) != FSCK_CHECK) {
-	    mode &= ~S_IFMT;
-	    mode |= S_IFREG;
-	    fsck_log (" - corrected to %M\n", mode);
-	    set_sd_mode (get_ih (path), get_item (path), &mode);
-	    mark_buffer_dirty (get_bh(path));
-	} else {
-	    fsck_log ("\n");
-	    retval = 1;
-	}
-	    
-    }
-
-    return retval;
-}
-
-/* check recursively the semantic tree. Returns OK if entry points to good
-   object, STAT_DATA_NOT_FOUND if stat data was not found or RELOCATED when
-   file was relocated because its objectid was already marked as used by
-   another file */
-int rebuild_semantic_pass (struct key * key, struct key * parent, int dot_dot,
-			   struct item_head * new_ih)
-{
-    struct path path;
-    void * sd;
-    int is_new_dir;
-    __u32 nlink;
-    struct buffer_head * bh;
-    struct item_head * ih;
-    int retval, retval1;
-    char * dir_item;
-    __u32 pos_in_item;
-    struct item_head tmp_ih;
-    struct key item_key, entry_key, object_key;
-    __u64 dir_size;
-    __u32 blocks;
-    __u64 saved_size;
-    __u32 saved_blocks;
-    int fix_sd;
-    int relocate;
-    int dir_format = 0;
-    __u16 mode;
-
-
-    retval = OK;
-
- start_again: /* when directory was relocated */
-
-    if (!KEY_IS_STAT_DATA_KEY (key))
-	reiserfs_panic ("rebuild_semantic_pass: The key %k must be key of a StatData", key);
-
-    /* look for stat data of an object */
-    if (reiserfs_search_by_key_4 (fs, key, &path) == ITEM_NOT_FOUND) {
-	pathrelse (&path);
-	if (is_rootdir_key (key))
-	    /* root directory has to exist at this point */
-	    reiserfs_panic ("rebuild_semantic_pass: The root directory StatData was not found");
-
-	return STAT_DATA_NOT_FOUND;
-    }
-
-
-    /* stat data has been found */
-    bh = get_bh (&path);
-    ih = get_ih (&path);
-    sd = get_item(&path);
-
-    /* */
-    get_sd_nlink (ih, sd, &nlink);
-
-    relocate = 0;
-    if (!nlink) {
-	/* we reached the stat data for the first time */
-	if (id_map_mark(semantic_id_map(fs), get_key_objectid (&ih->ih_key))) {
-	    /* calculate number of found files/dirs who are using objectid
-	       which is used by another file */
-	    sem_pass_stat (fs)->oid_sharing ++;
-	    if (1/*fsck_adjust_file_size (fs)*/)
-		/* this works for files only */
-		relocate = 1;
-	} 
-
-	mark_item_reachable (ih, bh);
-    }
-
-    fix_obviously_wrong_sd_mode (&path);
-
-    if (not_a_directory (sd)) {
-	retval = rebuild_check_regular_file (&path, sd, relocate ? new_ih : 0);
-	pathrelse (&path);
-	return retval;
-    }
-
-    if (relocate) {
-	if (!new_ih)
-	    reiserfs_panic ("rebuild_semantic_pass: Memory is not prepared for relocation of %K",
-		   &ih->ih_key);
-	*new_ih = *ih;
-	pathrelse (&path);
-	sem_pass_stat (fs)->oid_sharing_dirs_relocated ++;
-	relocate_dir (new_ih, 1);
-	linked_already(&new_ih->ih_key);
-	*key = new_ih->ih_key;	
-	retval = RELOCATED;
-	
-	goto start_again;
-    }
-
-    /* it looks like stat data of a directory found */
-    if (nlink) {
-	/* we saw this directory already */
-	if (!dot_dot) {
-	    /* this name is not ".."  - and hard links are not allowed on
-               directories */
-	    pathrelse (&path);
-	    return STAT_DATA_NOT_FOUND;
-	} else {
-	    /* ".." found */
-	    nlink ++;
-	    set_sd_nlink (ih, sd, &nlink);
-	    mark_buffer_dirty (bh);
-	    pathrelse (&path);
-	    return OK;
-	}
-    }
-
-
-    /* we see the directory first time */
-    sem_pass_stat (fs)->directories ++;
-    nlink = 2;
-    if (get_key_objectid (key) == REISERFS_ROOT_OBJECTID)
-	nlink ++;
-    set_sd_nlink (ih, sd, &nlink);
-    mark_buffer_dirty (bh);
-    
-    if (get_ih_item_len (ih) == SD_SIZE)
-	is_new_dir = 1;
-    else
-	is_new_dir = 0;
-
-
-/*
-    {
-	struct key * tmp;
-
-	// check next item: if it is not a directory item of the same file
-	// therefore sd_mode is corrupted so we just reset it to regular file
-	// mode
-	tmp = reiserfs_next_key (&path);
-	if (tmp && !not_of_one_file (tmp, key) && !is_direntry_key (tmp)) {
-	    __u16 mode;
-
-	    get_sd_mode (ih, sd, &mode);
-	    fsck_log ("file %K had broken mode %M, ", key, mode);
-	    mode &= ~S_IFMT;
-	    mode |= S_IFREG;
-	    fsck_log ("fixed to %M\n", mode);
-	    set_sd_mode (ih, sd, &mode);
-
-	    nlink = 0;
-	    set_sd_nlink (ih, sd, &nlink);
-	    
-	    retval = rebuild_check_regular_file (&path, sd, 0); //no relocate
-	    pathrelse (&path);
-	    return retval;
-	}
-    }
-*/
-
-
-    dir_format = (get_ih_item_len (get_ih (&path)) == SD_SIZE) ? KEY_FORMAT_2 : KEY_FORMAT_1;
-    /* save stat data's size and st_blocks */
-    get_sd_size (ih, sd, &saved_size);
-    get_sd_blocks (ih, sd, &saved_blocks);	
-    get_sd_mode (ih, sd, &mode);
-
-    /* release path pointing to stat data */
-    pathrelse (&path);
-
-    /* make sure that "." and ".." exist */
-    reiserfs_add_entry (fs, key, ".",  name_length (".", dir_format), key, 1 << IH_Unreachable);
-    reiserfs_add_entry (fs, key, "..", name_length ("..", dir_format), parent, 1 << IH_Unreachable);
-
-    set_key_dirid (&item_key, get_key_dirid (key));
-    set_key_objectid (&item_key, get_key_objectid (key));
-    set_key_offset_v1 (&item_key, DOT_OFFSET);
-    set_key_uniqueness (&item_key, DIRENTRY_UNIQUENESS);
-
-
-    dir_size = 0;
-    while ((dir_item = get_next_directory_item (&item_key, parent, &tmp_ih, &pos_in_item)) != 0) {
-	/* dir_item is copy of the item in separately allocated memory,
-	   item_key is a key of next item in the tree */
-	int i;
-	char * name = 0;
-	int namelen, entry_len;
-	struct reiserfs_de_head * deh = (struct reiserfs_de_head *)dir_item + pos_in_item;	
-	
-	for (i = pos_in_item; i < get_ih_entry_count (&tmp_ih); i ++, deh ++) {
-	    struct item_head relocated_ih;
-	
-	    if (name) {
-	    	free (name);
-	    	name = 0;
-	    }
-	
-	    namelen = name_in_entry_length (&tmp_ih, deh, i);
-	    asprintf (&name, "%.*s", namelen, name_in_entry (deh, i));
-	
-	    entry_len = entry_length (&tmp_ih, deh, i);
-	
-	    get_object_key (deh, &object_key, &entry_key, &tmp_ih);
-	
-	    if ((dir_format == KEY_FORMAT_2) && (entry_len % 8 != 0)) {
-	    	/* not alighed directory of new format - delete it */
-		fsck_log ("Entry %K (\"%.*s\") in the directory %K is not formated properly - fixed.\n",
-			  (struct key *)&(deh->deh2_dir_id), namelen, name, &tmp_ih.ih_key);
-		reiserfs_remove_entry (fs, &entry_key);
-		entry_len = name_length (name, dir_format);
-		reiserfs_add_entry (fs, key, name, entry_len,
-                                (struct key *)&(deh->deh2_dir_id), 0);
-	    }
-/*	
-	    if ((dir_format == KEY_FORMAT_1) && (namelen != entry_len)) {
-	    	// aligned entry in directory of old format - remove and insert it back
-		fsck_log ("Entry %K (\"%.*s\") in the directory %K is not formated properly - deleted\n",
-		    (struct key *)&(deh->deh2_dir_id), namelen, name, &tmp_ih.ih_key);
-		reiserfs_remove_entry (fs, &entry_key);
-		entry_len = name_length (name, dir_format);
-		reiserfs_add_entry (fs, key, name, entry_len,
-				(struct key *)&(deh->deh2_dir_id), 0);
-	    }
-*/	
-	    if (is_dot (name, namelen)) {
-		dir_size += DEH_SIZE + entry_len;
-		continue;
-	    }
-	
-	    print_name (name, namelen);
-	    
-	    if (!is_properly_hashed (fs, name, namelen, get_deh_offset (deh)))
-		reiserfs_panic ("rebuild_semantic_pass: Hash mismatch detected for (\"%.*s\") in directory %K\n", 
-		    namelen, name, &tmp_ih.ih_key);
-	    
-	
-	    retval1 = rebuild_semantic_pass (&object_key, key, is_dot_dot (name, namelen), &relocated_ih);
-    
-	    erase_name (namelen);
-	    
-	    switch (retval1) {
-	    case OK:
-		dir_size += DEH_SIZE + entry_len;
-		break;
-
-	    case STAT_DATA_NOT_FOUND:
-	    case DIRECTORY_HAS_NO_ITEMS:
-		if (get_offset (&entry_key) == DOT_DOT_OFFSET && 
-		    get_key_objectid (&object_key) == REISERFS_ROOT_PARENT_OBJECTID) {
-		    /* ".." of root directory can not be found */
-		    dir_size += DEH_SIZE + entry_len;
-		    continue;
-		}
-		fsck_log ("%s: The entry %K (\"%.*s\") in directory %K points to nowhere - is removed\n",
-		    __FUNCTION__, &object_key, namelen, name, &tmp_ih.ih_key);
-		reiserfs_remove_entry (fs, &entry_key);
-		sem_pass_stat (fs)->deleted_entries ++;
-		break;
-		
-	    case RELOCATED:
-		/* file was relocated, update key in corresponding directory entry */
-		if (reiserfs_search_by_entry_key (fs, &entry_key, &path) != POSITION_FOUND) {
-		    fsck_log ("WARNING: Cannot find the name of the relocated file %K in the directory %K\n", 
-			&object_key, &tmp_ih.ih_key);
-		} else {
-		    /* update key dir entry points to */
-		    struct reiserfs_de_head * tmp_deh;
-		    
-		    tmp_deh = B_I_DEH (get_bh (&path), get_ih (&path)) + path.pos_in_item;
-		    fsck_log ("The entry %K (\"%.*s\") in directory %K updated to point to ",
-			&object_key, namelen, name, &tmp_ih.ih_key);
-		    set_deh_dirid (tmp_deh, get_key_dirid (&relocated_ih.ih_key));
-		    set_deh_objectid (tmp_deh, get_key_objectid (&relocated_ih.ih_key));
-
-		    fsck_log ("%K\n",  &tmp_deh->deh2_dir_id);
-		    mark_buffer_dirty (get_bh (&path));
-		}
-		dir_size += DEH_SIZE + entry_len;
-		pathrelse (&path);
-		break;
-	    }
-	} /* for */
-	
-	freemem (dir_item);
-    	free (name);
-    	name = 0;
-	
-	if (not_of_one_file (&item_key, key))
-	    /* next key is not of this directory */
-	    break;
-	
-    } /* while (dir_item) */
-    
-    
-    if (dir_size == 0)
-	/* FIXME: is it possible? */
-	return DIRECTORY_HAS_NO_ITEMS;
-    
-    /* calc correct value of sd_blocks field of stat data */
-    blocks = dir_size2st_blocks (dir_size);
-    
-    fix_sd = 0;
-    fix_sd += wrong_st_blocks (key, &blocks, saved_blocks, mode, is_new_dir);
-    fix_sd += wrong_st_size (key, is_new_dir ? MAX_FILE_SIZE_V2 : MAX_FILE_SIZE_V1,
-			     fs->fs_blocksize, &dir_size, saved_size, TYPE_DIRENTRY);
-
-    if (fix_sd) {
-	/* we have to fix either sd_size or sd_blocks, so look for stat data again */
-	if (reiserfs_search_by_key_4 (fs, key, &path) != ITEM_FOUND)
-	    reiserfs_panic ("rebuild_semantic_pass: The StatData of the file %K was not found", key);
-	    
-	bh = get_bh (&path);
-	ih = get_ih (&path);
-	sd = get_item (&path);
-	
-	set_sd_size (ih, sd, &dir_size);
-	set_sd_blocks (ih, sd, &blocks);
-	mark_buffer_dirty (bh);
-	pathrelse (&path);
-    }
-    
-    return retval;
-}
-
-
-int is_dot (char * name, int namelen)
-{
-    return (namelen == 1 && name[0] == '.') ? 1 : 0;
-}
-
-
-int is_dot_dot (char * name, int namelen)
-{
-    return (namelen == 2 && name[0] == '.' && name[1] == '.') ? 1 : 0;
-}
-
-
-int not_a_directory (void * sd)
-{
-    /* mode is at the same place and of the same size in both stat
-       datas (v1 and v2) */
-    struct stat_data_v1 * sd_v1 = sd;
-
-    return !(S_ISDIR (le16_to_cpu (sd_v1->sd_mode)));
-}
-
-int not_a_regfile (void * sd)
-{
-    /* mode is at the same place and of the same size in both stat
-       datas (v1 and v2) */
-    struct stat_data_v1 * sd_v1 = sd;
-
-    return !(S_ISREG (le16_to_cpu (sd_v1->sd_mode)));
-}
-
-
-
-void zero_nlink (struct item_head * ih, void * sd)
-{
-    int zero = 0;
-
-    if (get_ih_item_len (ih) == SD_V1_SIZE && get_ih_key_format (ih) != KEY_FORMAT_1) {
-	fsck_log ("zero_nlink: The StatData %k of the wrong format version (%d) - corrected to (%d)\n",
-	    ih, get_ih_key_format (ih), KEY_FORMAT_1);
-	set_ih_key_format (ih, KEY_FORMAT_1);
-    }
-    if (get_ih_item_len (ih) == SD_SIZE && get_ih_key_format (ih) != KEY_FORMAT_2) {
-	fsck_log ("zero_nlink: The StatData %k of the wrong format version (%d) - corrected to (%d)\n",
-	    ih, get_ih_key_format (ih), KEY_FORMAT_2);
-	set_ih_key_format (ih, KEY_FORMAT_2);
-    }
-
-    set_sd_nlink (ih, sd, &zero);
-}
-
-
-
-void modify_item (struct item_head * ih, void * item)
-{
-    zero_nlink (ih, item);
-    mark_item_unreachable (ih);    
-}
-
-
-/* mkreiserfs should have created this */
-static void make_sure_lost_found_exists (reiserfs_filsys_t * fs)
-{
-    int retval;
-    INITIALIZE_PATH (path);
-    unsigned int gen_counter;
-    __u32 objectid;
-    __u64 sd_size;
-    __u32 sd_blocks;
-    struct buffer_head * bh;
-    struct item_head * ih;
-    void * sd;
-    int item_len;
-
-
-    /* look for "lost+found" in the root directory */
-    retval = reiserfs_find_entry (fs, &root_dir_key,
-				  "lost+found", &gen_counter,
-				  &lost_found_dir_key);
-    if (!retval) {
-	objectid = id_map_alloc(proper_id_map(fs));
-	if (!objectid) {
-	    fsck_progress ("Could not allocate an objectid for \"/lost+found\", \
-		lost files will not be linked\n");
-	    return;
-	}
-	set_key_dirid (&lost_found_dir_key, REISERFS_ROOT_OBJECTID);
-	set_key_objectid (&lost_found_dir_key, objectid);
-    }
-
-
-    /* look for stat data of "lost+found" */
-    retval = reiserfs_search_by_key_4 (fs, &lost_found_dir_key, &path);
-    if (retval == ITEM_NOT_FOUND)
-	lost_found_dir_format = create_dir_sd (fs, &path, &lost_found_dir_key, modify_item);
-    else {
-    	struct item_head * ih = get_ih (&path);
-	
-    	if (!is_stat_data_ih (ih))
-	    reiserfs_panic ("It must be lost+found's stat data %k\n", &ih->ih_key);
-	
-	fix_obviously_wrong_sd_mode (&path);
-	
-	if (not_a_directory (get_item (&path))) {
-	    fsck_progress ("\"/lost+found\" exists, but it is not a directory, \
-		lost files will not be linked\n");
-	    set_key_objectid (&lost_found_dir_key, 0);
-	    pathrelse (&path);
-	    return;
-	}
-    	
-        lost_found_dir_format = (get_ih_item_len (get_ih (&path)) == SD_SIZE) ? KEY_FORMAT_2 : KEY_FORMAT_1;
-        	
-	pathrelse (&path);
-    }
-
-    /* add "." and ".." if any of them do not exist */
-    reiserfs_add_entry (fs, &lost_found_dir_key, ".", name_length (".", lost_found_dir_format),
-    		&lost_found_dir_key, 1 << IH_Unreachable);    		
-    reiserfs_add_entry (fs, &lost_found_dir_key, "..", name_length ("..", lost_found_dir_format),
-    		&root_dir_key, 1 << IH_Unreachable);
-
-    item_len = reiserfs_add_entry (fs, &root_dir_key, "lost+found",
-    		name_length ("lost+found", root_dir_format), &lost_found_dir_key, 1 << IH_Unreachable);
-
-    if (item_len) {
-	if (reiserfs_search_by_key_4 (fs, &root_dir_key, &path) == ITEM_NOT_FOUND)
-	    reiserfs_panic ("%s: StatData of the root directory must exists", __FUNCTION__);
-	
-	bh = get_bh (&path);
-	ih = get_ih (&path);
-	sd = get_item(&path);
-	
-	get_sd_size (ih, sd, &sd_size);
-	sd_size += item_len;
-	set_sd_size (ih, sd, &sd_size);
-	sd_blocks = dir_size2st_blocks (sd_size);
-	set_sd_blocks (ih, sd, &sd_blocks);
-	mark_buffer_dirty (bh);
-	pathrelse (&path);
-    }
-			
-    return;
-}
-
-/* Result of the rebuild pass will be saved in the state file which is needed to start 
- * fsck again from the next pass. */
-static void save_rebuild_semantic_result (reiserfs_filsys_t * fs) {
-    FILE * file;
-    int retval;
-
-    file = open_file ("temp_fsck_file.deleteme", "w+");
-    if (!file)
-	return;
-
-    reiserfs_begin_stage_info_save (file, SEMANTIC_DONE);
-    /*  Method not implemented yet.
-    reiserfs_objectid_map_save (file, semantic_id_map (fs));
-    */
-    reiserfs_end_stage_info_save (file);
-    close_file (file);
-    retval = rename ("temp_fsck_file.deleteme", state_dump_file (fs));
-    if (retval != 0)
-	fsck_progress ("%s: Could not rename the temporary file temp_fsck_file.deleteme to %s",
-	    __FUNCTION__, state_dump_file (fs));
-}
-
-/* we have nothing to load from a state file, but we have to fetch
-   on-disk bitmap, copy it to allocable bitmap, and fetch objectid
-   map */
-void load_semantic_result (FILE * file, reiserfs_filsys_t * fs)
-{
-    fsck_new_bitmap (fs) = reiserfs_create_bitmap (get_sb_block_count (fs->fs_ondisk_sb));
-    reiserfs_bitmap_copy (fsck_new_bitmap (fs), fs->fs_bitmap2);
-
-    fsck_allocable_bitmap (fs) = reiserfs_create_bitmap (get_sb_block_count (fs->fs_ondisk_sb));
-    reiserfs_bitmap_copy (fsck_allocable_bitmap (fs), fs->fs_bitmap2);
-
-    fs->block_allocator = reiserfsck_reiserfs_new_blocknrs;
-    fs->block_deallocator = reiserfsck_reiserfs_free_block;
-
-    /* we need objectid map on semantic pass to be able to relocate files */
-    proper_id_map (fs) = id_map_init();
-    /* Not implemented yet.    
-    fetch_objectid_map (proper_id_map (fs), fs);
-    semantic_id_map (fs) = reiserfs_objectid_map_load (file);
-    */
-}
-
-static void before_pass_3 (reiserfs_filsys_t * fs)
-{
-    semantic_id_map (fs) = id_map_init();
-}
-
-static void after_pass_3 (reiserfs_filsys_t * fs)
-{
-    /* update super block: objectid map, fsck state */
-    set_sb_fs_state (fs->fs_ondisk_sb, SEMANTIC_DONE);
-    mark_buffer_dirty (fs->fs_super_bh);
-
-    /* write all dirty blocks */
-    fsck_progress ("Flushing..");
-    id_map_flush(proper_id_map (fs), fs);
-    fs->fs_dirt = 1;
-    reiserfs_flush_to_ondisk_bitmap (fsck_new_bitmap(fs), fs);
-    reiserfs_flush (fs);
-    fsck_progress ("finished\n");
-
-    stage_report (3, fs);
-
-    if (!fsck_run_one_step (fs)) {
-	if (fsck_user_confirmed (fs, "Continue? (Yes):", "Yes\n", 1))
-	    /* reiserfsck continues */
-	    return;
-    }
-
-    save_rebuild_semantic_result (fs);
-
-    id_map_free(proper_id_map (fs));
-    proper_id_map (fs) = 0;
-
-    fs->fs_dirt = 1;
-    reiserfs_close (fs);
-    exit(0);
-}
-
-/* this is part of rebuild tree */
-void pass_3_semantic (reiserfs_filsys_t * fs)
-{
-    before_pass_3 (fs);
-
-    fsck_progress ("Pass 3 (semantic):\n");
-
-    /* when warnings go not to stderr - separate them in the log */
-    if (fsck_log_file (fs) != stderr)
-	fsck_log ("####### Pass 3 #########\n");
-
-
-    if (!fs->fs_hash_function)
-	reiserfs_panic ("Hash function should be selected already");
-
-    make_sure_root_dir_exists (fs, modify_item, 1 << IH_Unreachable);
-    make_sure_lost_found_exists (fs);
-
-    id_map_mark(proper_id_map(fs), get_key_objectid(&root_dir_key));
-    id_map_mark(proper_id_map(fs), get_key_objectid(&lost_found_dir_key));
-    
-    /* link all relocated files into /lost+found directory */
-    link_relocated_files ();
-
-    rebuild_semantic_pass (&root_dir_key, &parent_root_dir_key, 0/*!dot_dot*/, 0/*reloc_ih*/);
-
-    add_badblock_list(fs, 1);
-
-    after_pass_3 (fs);
-}
diff --git a/fsck/super.c b/fsck/super.c
deleted file mode 100644
index 86ffd90..0000000
--- a/fsck/super.c
+++ /dev/null
@@ -1,859 +0,0 @@
-/*
- * Copyright 2001-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#include "fsck.h"
-
-#if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)
-#    include <uuid/uuid.h>
-#endif
-
-#define fsck_conditional_log(sb_found, fmt, list...) {	\
-    if (sb_found)					\
-    	fsck_log(fmt, ## list);				\
-}
-
-int what_fs_version ()
-{
-    size_t n = 0;
-    char * answer = 0;
-    int version;
-    printf("\nwhat the version of ReiserFS do you use[1-4]\n"
-        "\t(1)   3.6.x\n"
-        "\t(2) >=3.5.9 (introduced in the middle of 1999) (if you use linux 2.2, choose this one)\n"
-        "\t(3) < 3.5.9 converted to new format (don't choose if unsure)\n"
-        "\t(4) < 3.5.9 (this is very old format, don't choose if unsure)\n"
-        "\t(X)   exit\n");
-    getline (&answer, &n, stdin);
-    version = atoi (answer);
-    if (version < 1 || version > 4)
-        die ("rebuild_sb: wrong version");
-    return version;
-}
-
-/*
-#define super_error(exit_code, text) {	\
-    fsck_log(text);			\
-    return exit_code;			\
-}
-    
-int check_sb (reiserfs_filsys_t * fs) {
-    int magic = 0, version = 0;
-    
-    if (!is_blocksize_correct (fs->fs_blocksize)) 
-	super_error(-1, "Wrong blocksize found in the super block\n");
-
-    if (is_reiserfs_3_6_magic_string (sb))
-	magic = 2;
-    else if (is_reiserfs_3_5_magic_string (sb))
-	magic = 1;
-    else if (is_reiserfs_jr_magic_string (sb))
-	magic = 3;
-    else 
-	super_error(-1, "Invalid magic found in the super block.\n");
-    
-    if (magic == 1 || magic == 2) {
-	if (fsck_data (fs)->journal_dev_name)
-            fsck_log("Reiserfs with standard journal found, but there was specified a "
-		"journal dev\n");
-	
-	standard_journal = 1;
-    } else {
-	if (!fsck_data (fs)->journal_dev_name) 
-            super_error(-1, "Reiserfs with non standard journal found, but there was not "
-		"specified any journal dev\n");
-	
-	standard_journal = 0;
-    }
-    
-    if (get_sb_version (sb) != REISERFS_FORMAT_3_6 && get_sb_version (sb) != REISERFS_FORMAT_3_5) 
-	super_error(-1, "Invalid format found in the super block.\n");
-	
-    if (is_new_sb_location(fs->fs_super_bh->b_blocknr, fs->fs_blocksize)) 
-    {
-	if (magic == 3) 
-	    version = get_sb_version (sb) == REISERFS_FORMAT_3_6 ? 1 : 2;
-	else
-	    version = magic == 2 ? 1 : 2;	
-    } else if (is_old_sb_location(fs->fs_super_bh->b_blocknr, fs->fs_blocksize)) {
-	if (magic == 3) 
-	    version = get_sb_version (sb) == REISERFS_FORMAT_3_6 ? 3 : 4;
-	else 
-	    version = magic == 2 ? 3 : 4;	
-    } else 
-	die("Super block in the wong block(%d).\n", fs->fs_super_bh->b_blocknr);
-    
-    if (version == 0) 
-	die ("FS format must be figured out here.\n");
-
-    if (get_sb_block_count (sb) > count_blocks (filename, fs->fs_blocksize)) 
-	super_error(-1, "Invalid block count found in the super block.\n");
-
-    if (get_sb_block_size (sb) != fs->fs_blocksize) 
-        super_error(-1, "Invalid block size found in the super block (%lu).\n", 
-	    get_sb_block_size (sb));
-
-//Non needed from here
-    p_oid_maxsize = (fs->fs_blocksize - reiserfs_super_block_size (sb)) / sizeof(__u32) / 2 * 2;    
-    if (get_sb_oid_maxsize (sb) != p_oid_maxsize) 
-	super_error(-1, "Invalid objectid map max size found in the super block (%lu).\n", 
-	    get_sb_oid_maxsize (sb));
-
-    if (get_sb_oid_cursize (sb) == 1 || get_sb_oid_cursize (sb) > get_sb_oid_maxsize (sb))
-        super_error(-1, "Invalid objectid map found in the super block (%lu).\n", 
-	    get_sb_oid_cursize (sb));
-
-    if (get_sb_root_block (sb) > block_count && get_sb_root_block (sb) != ~0) 
-	fsck_log("Invalid root block found in the super block (%lu).\n", 
-	    get_sb_root_block (sb));
-
-    if (get_sb_free_blocks (sb) > block_count) 
-	fsck_log ("Invalid free block count found in the super block (%lu).\n", 
-	    get_sb_free_blocks (sb));
-
-    if (get_sb_tree_height (sb) && ((get_sb_tree_height (sb) < DISK_LEAF_NODE_LEVEL + 1) ||
-	(get_sb_tree_height (sb) > MAX_HEIGHT) && (get_sb_tree_height (sb) != ~0))) 
-	super_error(-1, "Invalid tree height found in the super block (%lu).\n", 
-	    get_sb_tree_height (sb));
-
-    if (get_sb_hash_code (sb) && code2name (get_sb_hash_code (sb)) == 0) 
-	super_error(-1, "Invalid hash found in the super block (%lu).\n", 
-	    get_sb_hash_code (sb));
-
-    if (version == 1 || version == 3) {
-        if (!uuid_is_correct(sb->s_uuid)) 
-	    fsck_log ("Invalid uuid found, you should generate a new one.\n");
-
-	if (sb->s_flags & 0xfffffffe)
-	    fsck_log ("rebuild-sb: super block flags found (%u), zeroed\n", sb->s_flags);
-    }
-
-//Not needed till here.
-
-    p_bmap_nr = (block_count + (fs->fs_blocksize * 8 - 1)) / (fs->fs_blocksize * 8);
-    if (get_sb_bmap_nr (sb) != p_bmap_nr) 
-	super_error(-1, "Invalid bitmap number found in the super block (%lu).\n", 
-	    get_sb_bmap_nr (sb));
-
-    if (!fsck_skip_journal (fs) && standard_journal == 1) {
-        if (get_jp_journal_dev (sb_jp(sb)) != 0)
- 	    super_error(-1, "Invalid journal device found (%lu).\n", get_jp_journal_dev (sb_jp(sb)));
-
-        if (get_jp_journal_1st_block (sb_jp(sb)) != get_journal_start_must (fs)) 
-            super_error(-1, "Invalid journal first block found (%lu).\n", get_jp_journal_1st_block (sb_jp(sb)));
-
-        if (get_jp_journal_size (sb_jp(sb)) != journal_default_size(fs->fs_super_bh->b_blocknr, fs->fs_blocksize)) 
-	    super_error(-1, "Invalid journal size found (%lu).\n", get_jp_journal_size (sb_jp(sb)) + 1);
-        
-        
-	
-	if (get_jp_journal_max_batch (sb_jp(sb)) != advise_journal_max_batch(get_jp_journal_max_trans_len (sb_jp(sb)))) {
- 	    fsck_conditional_log (magic_was_found, "rebuild-sb: wrong journal max batch size occured (%lu), fixed (%d)\n",
- 	        get_jp_journal_max_batch (sb_jp(sb)), advise_journal_max_batch(get_jp_journal_max_trans_len (sb_jp(sb))));
- 	    set_jp_journal_max_batch (sb_jp(sb), advise_journal_max_batch(get_jp_journal_max_trans_len (sb_jp(sb))));
-        }
-        if (get_jp_journal_max_commit_age (sb_jp(sb)) != advise_journal_max_commit_age()) {
- 	    fsck_conditional_log (magic_was_found, "rebuild-sb: wrong journal  max commit age occured (%lu), fixed (%d)\n",
- 	        get_jp_journal_max_commit_age (sb_jp(sb)), advise_journal_max_commit_age());
- 	    set_jp_journal_max_commit_age (sb_jp(sb), advise_journal_max_commit_age());
-        }
-        if (get_jp_journal_max_trans_age (sb_jp(sb)) != advise_journal_max_trans_age()) {
- 	    fsck_log ("rebuild-sb: wrong journal  max commit age occured (%lu), fixed (0)\n",
- 	        get_jp_journal_max_trans_age (sb_jp(sb)), advise_journal_max_trans_age());
- 	    set_jp_journal_max_trans_age (sb_jp(sb), advise_journal_max_trans_age());
-        }
-
-        
-}
-*/
-
-void rebuild_sb (reiserfs_filsys_t * fs, char * filename, struct fsck_data * data)
-{
-    int version = 0;
-    struct reiserfs_super_block * ondisk_sb = 0;
-    struct reiserfs_super_block * sb = 0;
-    struct reiserfs_journal_header *j_head;
-
-    int magic_was_found = 0;
-    unsigned long block_count = 0;
-    __u16 p_oid_maxsize;
-    __u16 p_bmap_nr;
-    __u32 p_jp_journal_1st_block = 0;
-    __u32 p_jp_dev_size = 0;
-    int standard_journal = -1;
-    char * journal_dev_name = 0;
-    char * tmp;
-    int sb_size;
-
-    char * answer = 0;
-    size_t n = 0;
-    struct stat stat_buf;
-    int retval, exit_code = EXIT_OK;
-
-#if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)
-    char uuid[37];
-    
-    uuid[36] = '\0';
-#endif
-
-    if (!no_reiserfs_found (fs)) {
-        sb = getmem (sizeof (*sb));
-        if (!is_opened_rw (fs)) {
-            close (fs->fs_dev);
-            fs->fs_dev = open (fs->fs_file_name, O_RDWR | O_LARGEFILE);
-        }
-
-	if (!is_blocksize_correct (fs->fs_blocksize)) {
-	    printf("\nCannot find a proper blocksize, enter block size [4096]: \n");
-	    getline (&answer, &n, stdin);
-	    if (strcmp(answer, "\n")) {
-		retval = (int) strtol (answer, &tmp, 0);
-		if ((*tmp && strcmp(tmp, "\n")) || retval < 0)
-		    reiserfs_exit (EXIT_USER, "rebuild_sb: wrong block size specified\n");
-		if (!is_blocksize_correct (retval))
-		    reiserfs_exit (EXIT_USER, "rebuild_sb: wrong block size specified, "
-			"only power of 2 from 512-8192 interval are supported.\n");
-	    } else
-		retval = 4096;
-	
-	    fs->fs_blocksize = retval;
-	}
-
-        if (!(block_count = count_blocks (filename, fs->fs_blocksize)))
-		exit(EXIT_OPER);
-
-        /* save ondisk_sb somewhere and work in temp area */
-        ondisk_sb = fs->fs_ondisk_sb;
-        memcpy (sb, fs->fs_ondisk_sb, sizeof (*sb));
-        fs->fs_ondisk_sb = sb;
-
-        if (is_reiserfs_3_6_magic_string (sb)) {
-            /* 3_6 magic */
-            if (fsck_data (fs)->journal_dev_name)
-                /* journal dev must not be specified with standard journal */
-                reiserfs_exit (EXIT_USER, "ReiserFS with default journal "
-		    "is found, but there was specified a journal device.");
-
-            if (fs->fs_super_bh->b_blocknr ==
-		REISERFS_DISK_OFFSET_IN_BYTES / fs->fs_blocksize)
-                version = 1;
-	    else if (fs->fs_super_bh->b_blocknr ==
-		REISERFS_OLD_DISK_OFFSET_IN_BYTES / fs->fs_blocksize)
-                version = 3;
-	    
-            magic_was_found = 2;
-        } else if (is_reiserfs_3_5_magic_string (sb)) {
-            if (fsck_data (fs)->journal_dev_name)
-                /* journal dev must not be specified with standard journal */
-                reiserfs_exit (EXIT_USER, "ReiserFS with default journal "
-		    "is found, but there was specified a journal device.");
-
-            /* 3_5 magic */
-            if (fs->fs_super_bh->b_blocknr ==
-		REISERFS_DISK_OFFSET_IN_BYTES / fs->fs_blocksize)
-                version = 2;
-	    else if (fs->fs_super_bh->b_blocknr ==
-		REISERFS_OLD_DISK_OFFSET_IN_BYTES / fs->fs_blocksize)
-                version = 4;
-	    
-	    magic_was_found = 1;
-        } else if (is_reiserfs_jr_magic_string (sb)) {
-            if (!fsck_data (fs)->journal_dev_name && !fsck_skip_journal(fs))
-                /* journal dev must be specified with non standard journal */
-                reiserfs_exit (EXIT_USER, "ReiserFS with non default journal "
-		    "is found, but there was not specified any journal device.");
-
-            if (get_sb_version (sb) == REISERFS_FORMAT_3_6) {
-                /*non-standard magic + sb_format == 3_6*/
-		if (fs->fs_super_bh->b_blocknr ==
-		    REISERFS_DISK_OFFSET_IN_BYTES / fs->fs_blocksize)
-                    version = 1;
-		else if (fs->fs_super_bh->b_blocknr == 
-		    REISERFS_OLD_DISK_OFFSET_IN_BYTES / fs->fs_blocksize)
-                    version = 3;
-		
-                magic_was_found = 3;
-            } else if (get_sb_version (sb) == REISERFS_FORMAT_3_5) {
-                /* non-standard magic + sb_format == 3_5 */
-                if (fs->fs_super_bh->b_blocknr ==
-		    REISERFS_DISK_OFFSET_IN_BYTES / fs->fs_blocksize)
-                    version = 2;
-		else if (fs->fs_super_bh->b_blocknr ==
-		    REISERFS_OLD_DISK_OFFSET_IN_BYTES / fs->fs_blocksize)
-                    version = 4;
-		
-                magic_was_found = 3;
-            } else {
-                /* non-standard magic + bad sb_format */
-                version = 0;
-                magic_was_found = 3;
-            }
-        } else
-            reiserfs_exit (EXIT_USER, "We opened device but there is no magic "
-		"and there is no correct superblock format found.");
-
-        if (magic_was_found == 1 || magic_was_found == 2)
-            standard_journal = 1;
-        else
-            standard_journal = 0;
-
-        if (version == 0)
-            version = what_fs_version ();
-
-        if (get_sb_block_count (sb) != block_count) {
-            do {
-                printf("\nDid you use resizer(y/n)[n]: ");
-                getline (&answer, &n, stdin);
-            } while(strcmp ("y\n", answer) && 
-		    strcmp ("n\n", answer) && 
-		    strcmp ("\n", answer));
-
-            if (!strcmp ("y\n", answer)) {
-                printf("\nEnter partition size [%lu]: ", block_count);
-                getline (&answer, &n, stdin);
-                if (strcmp ("\n", answer))
-                    block_count = atoi (answer);
-            } else {
-                fsck_conditional_log (magic_was_found, "rebuild-sb: wrong block count "
-		    "occured (%lu), fixed (%lu)\n", get_sb_block_count(sb), block_count);
-            }
-
-	    set_sb_block_count (sb, block_count);
-        }
-
-        if (get_sb_block_size (sb) != fs->fs_blocksize) {
-            fsck_log("rebuild-sb: wrong block size occured (%lu), fixed (%lu)\n", 
-		    get_sb_block_size (sb), fs->fs_blocksize);
-  	    set_sb_block_size (sb, fs->fs_blocksize);
-        }
-    }
-
-    /* if no reiserfs_found or bad data found in that SB, what was checked in previous 
-     * clause */
-    if (no_reiserfs_found (fs)) {
-        int fd;
-
-        fd = open (filename, O_RDWR | O_LARGEFILE);
-
-        if (fd == -1) {
-            reiserfs_exit (EXIT_OPER, "rebuils_sb: cannot open device %s", 
-		filename);
-	}
-
-        version = what_fs_version ();
-
-        if (version == 3 || version == 4) {
-            retval = 4096;
-        } else {
-	    printf("\nEnter block size [4096]: \n");
-	    getline (&answer, &n, stdin);
-	    if (strcmp(answer, "\n")) {
-		retval = (int) strtol (answer, &tmp, 0);
-		if ((*tmp && strcmp(tmp, "\n")) || retval < 0)
-		    reiserfs_exit (EXIT_USER, "rebuild_sb: wrong block size specified\n");
-		if (!is_blocksize_correct (retval))
-		    reiserfs_exit (EXIT_USER, "rebuild_sb: wrong block size specified, "
-			"only divisible by 1024 are supported currently\n");
-	    } else
-		retval = 4096;
-	}
-
-        if (!(block_count = count_blocks (filename, retval)))
-		exit(EXIT_OPER);
-
-        switch(version){
-        case 1:
-            fs = reiserfs_create (filename, REISERFS_FORMAT_3_6, block_count, retval, 1, 1);
-            break;
-        case 2:
-            fs = reiserfs_create (filename, REISERFS_FORMAT_3_5, block_count, retval, 1, 1);
-            break;
-        case 3:
-            fs = reiserfs_create (filename, REISERFS_FORMAT_3_6, block_count, retval, 1, 0);
-            break;
-        case 4:
-            fs = reiserfs_create (filename, REISERFS_FORMAT_3_5, block_count, retval, 1, 0);
-            break;
-        }
-
-	if (fs == NULL)
-	    return;
-	
-        sb = fs->fs_ondisk_sb;
-        fs->fs_vp = data;
-
-        if (!fsck_skip_journal (fs)) {
-            if (!fsck_data (fs)->journal_dev_name) {
-                do {
-                    printf("\nNo journal device was specified. (If journal is not "
-			"available, re-run with --no-journal-available option specified).\n"
-                        "Is journal default? (y/n)[y]: ");
-		    
-                    getline (&answer, &n, stdin);
-                } while(strcmp ("y\n", answer) && 
-			strcmp ("n\n", answer) && 
-			strcmp ("\n", answer));
-		
-                if (!strcmp ("n\n", answer)) {
-                    printf("\nSpecify journal device with -j option.\n");
-                    exit(EXIT_USER);
-                }
-                standard_journal = 1;
-            } else {
-                standard_journal = 0;
-                memcpy (fs->fs_ondisk_sb->s_v1.s_magic, REISERFS_JR_SUPER_MAGIC_STRING,
-                    strlen (REISERFS_JR_SUPER_MAGIC_STRING));
-            }
-        }
-
-        do {
-            printf("\nDid you use resizer(y/n)[n]: ");
-            getline (&answer, &n, stdin);
-        } while (strcmp ("y\n", answer) && strcmp ("n\n", answer) && strcmp ("\n", answer));
-        if (!strcmp ("y\n", answer)) {
-            printf("\nEnter partition size [%lu]: ", block_count);
-            getline (&answer, &n, stdin);
-            if (strcmp ("\n", answer))
-                block_count = atoi (answer);
-            set_sb_block_count (sb, block_count);
-        }
-	
-	set_sb_fs_state (sb, FS_ERROR);
-    }
-
-
-    if (version == 1 || version == 3) {
-        if (get_reiserfs_format (sb) != REISERFS_FORMAT_3_6) {
-            fsck_log("rebuild-sb: wrong reiserfs version occured (%lu), fixed (%lu)\n", 
-		    get_reiserfs_format (sb), REISERFS_FORMAT_3_6);
-            set_sb_version (sb, REISERFS_FORMAT_3_6);
-        }
-    } else if (version == 2 || version == 4) {
-        if (get_reiserfs_format (sb) != REISERFS_FORMAT_3_5) {
-            fsck_log("rebuild-sb: wrong reiserfs version occured (%lu), fixed (%lu)\n", 
-		    get_reiserfs_format (sb), REISERFS_FORMAT_3_5);
-            set_sb_version (sb, REISERFS_FORMAT_3_5);
-        }
-    }
-
-    p_oid_maxsize = (fs->fs_blocksize - reiserfs_super_block_size (sb)) / 
-	sizeof(__u32) / 2 * 2;
-    
-    if (get_sb_oid_maxsize (sb) != p_oid_maxsize) {
-	fsck_log("rebuild-sb: wrong objectid map max size occured (%lu), fixed (%lu)\n", 
-		get_sb_oid_maxsize (sb), p_oid_maxsize);
-	set_sb_oid_maxsize (sb, p_oid_maxsize);
-    }
-
-    p_bmap_nr = (block_count + (fs->fs_blocksize * 8 - 1)) / (fs->fs_blocksize * 8);
-    if (get_sb_bmap_nr (sb) != p_bmap_nr) {
-	fsck_log("rebuild-sb: wrong bitmap number occured (%lu), fixed (%lu)\n", 
-		get_sb_bmap_nr (sb), p_bmap_nr);
-	set_sb_bmap_nr (sb, 
-		(block_count + (fs->fs_blocksize * 8 - 1)) / (fs->fs_blocksize * 8));
-    }
-
-    if (get_sb_root_block (sb) > block_count) {
-	fsck_log("rebuild-sb: wrong root block occured (%lu), zeroed\n", 
-		get_sb_root_block (sb));
-	set_sb_root_block (sb, 0);
-    }
-
-    if (get_sb_free_blocks (sb) > block_count) {
-	fsck_log ("rebuild-sb: wrong free block count occured (%lu), zeroed\n", 
-		get_sb_free_blocks (sb));
-        set_sb_free_blocks (sb, 0);
-    }
-
-    if (get_sb_umount_state (sb) != FS_CLEANLY_UMOUNTED && 
-	get_sb_umount_state (sb) != FS_NOT_CLEANLY_UMOUNTED) 
-    {
-	fsck_conditional_log (magic_was_found, "rebuild-sb: wrong umount state (%u), "
-	    "fixed to (FS_NOT_CLEANLY_UMOUNTED)\n", get_sb_umount_state (sb));
-        set_sb_umount_state (sb, FS_NOT_CLEANLY_UMOUNTED);
-    }
-
-    if (get_sb_oid_cursize (sb) == 1 || 
-	get_sb_oid_cursize (sb) > get_sb_oid_maxsize (sb)) 
-    {
-        fsck_log("rebuild-sb: wrong objectid map occured (%lu), zeroed\n", 
-	    get_sb_oid_cursize (sb));
-	
-        set_sb_oid_cursize (sb, 0);
-    }
-
-    if ( get_sb_tree_height (sb) &&
-        ((get_sb_tree_height (sb) < DISK_LEAF_NODE_LEVEL + 1) ||
-	(get_sb_tree_height (sb) > MAX_HEIGHT)) ) {
-	fsck_log("rebuild-sb: wrong tree height occured (%u), zeroed\n", 
-	    get_sb_tree_height (sb));
-
-	set_sb_tree_height (sb, 0);
-    }
-
-    if (get_sb_hash_code (sb) && code2name (get_sb_hash_code (sb)) == 0) {
-	fsck_log("rebuild-sb: wrong hash occured (%lu), zeroed\n", 
-	    get_sb_hash_code (sb));
-	
-	set_sb_hash_code (sb, 0);
-    }
-
-    if (version == 1 || version == 3) {
-#if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)
-        if (uuid_is_null(sb->s_uuid)) {
-	    uuid_generate(sb->s_uuid);
-	    fsck_log ("rebuild-sb: no uuid found, a new uuid was "
-		      "generated (%U)\n", sb->s_uuid);
-        }
-#endif
-	if (sb->s_flags != 0 && sb->s_flags != 1) {
-	    fsck_log ("rebuild-sb: super block flags found (%u), zeroed\n",
-                  sb->s_flags);
-	    sb->s_flags = 0;
-	}
-    }
-
-
-    /*
-    if we have a standard journal
-        reserved = 0
-        dev - same
-        size = journal_default_size(fs->fs_super_bh->b_blocknr, fs)
-        offset = journal_default_size(fs)
-    if we have a non standard journal
-        if we found magic string
-            try to find a jhead and comare dev, size, offset there
-            if params are not equal move to "if we did not find a magic string" clause
-        if we did not find a magic string
-            ask user about his journal
-            try to find a jhead and comare dev, size, offset there
-            if params are not equal exit with error
-    */
-
-
-    p_jp_journal_1st_block = get_journal_start_must (fs);
-
-    if (standard_journal == 1) {
-	if (get_jp_journal_dev (sb_jp(sb)) != 0) {
- 	    fsck_conditional_log (magic_was_found, "rebuild-sb: wrong journal device "
-		"occured (%lu), fixed (0)\n", get_jp_journal_dev (sb_jp(sb)));
- 	    set_jp_journal_dev (sb_jp(sb), 0);
-        }
-        if (get_sb_reserved_for_journal (sb) != 0) {
- 	    fsck_log ("rebuild-sb: wrong size reserved for default journal occured "
-		"(%lu), fixed (0)\n", get_sb_reserved_for_journal (sb));
-            set_sb_reserved_for_journal (sb, 0);
-        }
-        if (get_jp_journal_1st_block (sb_jp(sb)) != p_jp_journal_1st_block) {
-            fsck_conditional_log (magic_was_found, "rebuild-sb: wrong journal first "
-		"block occured (%lu), fixed (%lu)\n", get_jp_journal_1st_block (sb_jp(sb)),
-		p_jp_journal_1st_block);
-	    
-            set_jp_journal_1st_block (sb_jp(sb) , p_jp_journal_1st_block);
-        }
-        if (get_jp_journal_size (sb_jp(sb)) != 
-	    journal_default_size(fs->fs_super_bh->b_blocknr, fs->fs_blocksize)) 
-	{
- 	    fsck_conditional_log (magic_was_found, "rebuild-sb: wrong journal size "
-		"occured (%lu), fixed (%lu)\n", get_jp_journal_size (sb_jp(sb)) + 1,
- 	        journal_default_size (fs->fs_super_bh->b_blocknr, 
-		fs->fs_blocksize) + 1);
-	    
-            set_jp_journal_size (sb_jp(sb), 
-		journal_default_size (fs->fs_super_bh->b_blocknr, fs->fs_blocksize));
-        }
-
-	if ((retval = reiserfs_open_journal(fs, filename, O_RDWR | O_LARGEFILE))) {
-	    fsck_log("\nrebuild-sb: Failed to open the journal device (%s).\n", 
-		filename);
-
-	    exit(retval < 0 ? EXIT_OPER : EXIT_USER);
-	}	
-    } else if (!fsck_skip_journal(fs)) {
-	/* Check that specified non-standard journal device exists. */
-	    
-	journal_dev_name = fsck_data (fs)->journal_dev_name;	    
-	retval = stat(journal_dev_name, &stat_buf);
-	    
-	if (retval == -1)
-	    reiserfs_exit (EXIT_USER, "rebuild_sb: error while detecting the "
-		"specified journal device (%s): %s\n", journal_dev_name,
-		strerror(errno));
-	
-	retval = 0;
-	if (magic_was_found) {
-	    /* Super block was found. Try to open the journal on the base of its 
-	     * journal parameters. */
-	    
-	    retval = reiserfs_open_journal(fs, journal_dev_name, 
-		O_RDWR | O_LARGEFILE);
-	    
-	    if (retval == 0) {
-		j_head = (struct reiserfs_journal_header *)(fs->fs_jh_bh->b_data);
-		retval = memcmp(&j_head->jh_journal, sb_jp(sb), 
-		    sizeof(struct journal_params));
-	    
-		if (retval) {
-		    /* journal parameters from the SB and from the J_Header does not 
-		     * match. Close the jouranl, ask the user about correct journal 
-		     * parameters. */
-		    reiserfs_close_journal(fs);
-		}
-	    }
-
-	    if (!reiserfs_journal_opened(fs)) {
-		fsck_log ("Journal cannot be opened, assuming specified "
-			  "journal device is correct\n");
-	    }
-	}
-	
-	if (!reiserfs_journal_opened(fs)) {
-	    __u64 default_value;
-
-	    /* journal was not found or SB and J_Header parameters does not match. */
-	    if (magic_was_found == 0)
-                default_value = (!strcmp(fs->fs_file_name, journal_dev_name)) ? 
-		    p_jp_journal_1st_block : 0;
-            else
-                default_value = get_jp_journal_1st_block (sb_jp(sb));
-
-            printf("\nEnter journal offset on %s in blocks [%Lu]: \n",
-            		journal_dev_name, (unsigned long long)default_value);
-
-            getline (&answer, &n, stdin);
-            if (strcmp(answer, "\n")) {
-                retval = (int) strtol (answer, &tmp, 0);
-                if ((*tmp && strcmp(tmp, "\n")) || retval < 0)
-                    reiserfs_exit(EXIT_USER, "rebuild_sb: wrong offset specified\n");
-
-                set_jp_journal_1st_block (sb_jp(sb), retval);
-            } else
-                set_jp_journal_1st_block (sb_jp(sb), default_value);
-
-            if (!(p_jp_dev_size = count_blocks (journal_dev_name, fs->fs_blocksize)))
-		    exit(EXIT_OPER);
-
-            /* some checks for journal offset */
-            if (strcmp(fs->fs_file_name, journal_dev_name) != 0) {
-                if (p_jp_dev_size < get_jp_journal_1st_block (sb_jp(sb)) + 1)
-        	    reiserfs_exit(EXIT_USER, "rebuild_sb: offset is much than device size\n");
-            }
-
-            /* default size if magic was not found is device size - journal_1st_block;
-               default size if magic was found is found value + 1 block for journal 
-	       header */
-            if (magic_was_found == 0)
-                default_value = (!strcmp(fs->fs_file_name, journal_dev_name)) ?
-                    journal_default_size (fs->fs_super_bh->b_blocknr,
-					  fs->fs_blocksize) + 1 :
-                    p_jp_dev_size - get_jp_journal_1st_block (sb_jp(sb));
-            else
-                default_value = get_jp_journal_size (sb_jp(sb)) + 1;
-		
-
-            printf("\nEnter journal size (including 1 block for journal header) on "
-		"%s in blocks [%Lu]: \n", journal_dev_name, 
-		(unsigned long long)default_value);
-
-            getline (&answer, &n, stdin);
-            if (strcmp(answer, "\n")) {
-                retval = (int) strtol (answer, &tmp, 0);
-                if ((*tmp && strcmp(tmp, "\n")) || retval < 0)
-        	    reiserfs_exit(EXIT_USER, "rebuild_sb: wrong offset specified\n");
-
-                set_jp_journal_size (sb_jp(sb), retval - 1);
-            } else {
-                set_jp_journal_size (sb_jp(sb), default_value - 1);
-            }
-
-            /* some checks for journal size */
-            if (get_jp_journal_size (sb_jp(sb)) +
-                get_jp_journal_1st_block (sb_jp(sb)) + 1 > p_jp_dev_size)
-        	    reiserfs_exit(EXIT_USER, "rebuild_sb: journal offset + journal size is "
-			"greater than device size\n");
-            
-	    /* some checks for journal size */
-            if (get_jp_journal_size (sb_jp(sb)) < JOURNAL_MIN_SIZE)
-        	    reiserfs_exit(EXIT_USER, "rebuild_sb: journal size cannot be less than "
-			"%lu blocks.\n", JOURNAL_MIN_SIZE + 1);
-
-	    if ((retval = reiserfs_open_journal(fs, journal_dev_name, 
-		O_RDWR | O_LARGEFILE)))
-	    {
-		fsck_log("\nrebuild-sb: Failed to open a journal device (%s).", 
-		    journal_dev_name);
-		
-		exit(retval < 0 ? EXIT_OPER : EXIT_USER);
-	    }
-	
-	    /* SB was found, but journal params were broken and have been recovered. 
-	     * Futher work goes as SB would not be found. */
-	    magic_was_found = 0;
-	}
-	
-	if (strcmp (fs->fs_file_name, journal_dev_name))
-	    set_jp_journal_dev (sb_jp(sb), stat_buf.st_rdev);
-	else
-	    set_jp_journal_dev (sb_jp(sb), 0);
-
-    } else {
-	fsck_log ("\nJournal was specified as not available. reiserfstune is "
-	    "needed.\n\n");
-	
-	set_jp_journal_magic (sb_jp(sb), NEED_TUNE);
-    }
-
-    if (reiserfs_journal_opened(fs)) {
-	/* Journal was openned. Check/fix journal parameters and copy it the journal 
-	 * header. */
-	
-        if (get_jp_journal_max_trans_len (sb_jp(sb)) !=
-	    advise_journal_max_trans_len(   get_jp_journal_max_trans_len (sb_jp(sb)),
-					    get_jp_journal_size (sb_jp(sb)), 
-					    fs->fs_blocksize, 0))
-	{
- 	    fsck_conditional_log (magic_was_found, "rebuild-sb: wrong journal max "
-		"transaction length occured (%lu), fixed (%d)\n",
-		get_jp_journal_max_trans_len (sb_jp(sb)),
-		advise_journal_max_trans_len (	get_jp_journal_max_trans_len (sb_jp(sb)),
-        					get_jp_journal_size (sb_jp(sb)),
-        					fs->fs_blocksize, 0));
-	    
- 	    set_jp_journal_max_trans_len (sb_jp(sb),
- 	    	advise_journal_max_trans_len (	get_jp_journal_max_trans_len (sb_jp(sb)),
-						get_jp_journal_size (sb_jp(sb)),
- 	    					fs->fs_blocksize, 0));
-        }
-	
-        if (get_jp_journal_max_batch (sb_jp(sb)) != 
-	    advise_journal_max_batch(get_jp_journal_max_trans_len (sb_jp(sb)))) 
-	{
- 	    fsck_conditional_log (magic_was_found, "rebuild-sb: wrong journal max "
-		"batch size occured (%lu), fixed (%d)\n", 
-		get_jp_journal_max_batch (sb_jp(sb)), 
-		advise_journal_max_batch(get_jp_journal_max_trans_len (sb_jp(sb))));
-	    
- 	    set_jp_journal_max_batch (sb_jp(sb), 
-		advise_journal_max_batch(get_jp_journal_max_trans_len (sb_jp(sb))));
-        }
-
-        if (get_jp_journal_max_commit_age (sb_jp(sb)) != 
-	    advise_journal_max_commit_age()) 
-	{
- 	    fsck_conditional_log (magic_was_found, "rebuild-sb: wrong journal "
-		"max commit age occured (%lu), fixed (%d)\n", 
- 	        get_jp_journal_max_commit_age (sb_jp(sb)), advise_journal_max_commit_age());
-	    
- 	    set_jp_journal_max_commit_age (sb_jp(sb), advise_journal_max_commit_age());
-        }
-	
-        if (get_jp_journal_max_trans_age (sb_jp(sb)) != advise_journal_max_trans_age()) {
- 	    fsck_log ("rebuild-sb: wrong journal  max commit age occured (%u), "
-		"fixed (%u)\n", get_jp_journal_max_trans_age (sb_jp(sb)), 
-		advise_journal_max_trans_age());
-	    
- 	    set_jp_journal_max_trans_age (sb_jp(sb), advise_journal_max_trans_age());
-        }
-		
-	j_head = (struct reiserfs_journal_header *)(fs->fs_jh_bh->b_data);
-
-	if (standard_journal == 0) {
-	    if (get_jp_journal_magic (sb_jp(sb)) == 0 || 
-		get_jp_journal_magic (sb_jp(sb)) == NEED_TUNE) 
-	    {
-		int magic;
-		
-		magic = random();
-		fsck_log ("rebuild-sb: genarate the new journal magic (%d)\n", magic);
-		set_jp_journal_magic (sb_jp(sb), magic);
-		set_jp_journal_magic (&j_head->jh_journal, magic);
-
-	    }
-	}
-	
-	retval = memcmp(&j_head->jh_journal, sb_jp(sb), sizeof(struct journal_params));
-	
-	if (retval) {
-	    if (standard_journal == 1) {
-		fsck_log("\nrebuild-sb: You either have a corrupted journal or have just "
-		    "changed\nthe start of the partition with some partition table editor. "
-		    "If you are\nsure that the start of the partition is ok, rebuild the "
-		    "journal header.\n");
-	    } else if (!magic_was_found) {
-		fsck_log("\nrebuild-sb: journal header is not found. You either have "
-		    "a corrupted,\nbad configured(device/offset/size), not available "
-		    "journal or have just changed\nthe start of the journal partition "
-		    "with some partition table editor. In the \ncase of corrupted "
-		    "journal you need to use --no-journal-available. If you are\n"
-		    "sure that the start of the partition is ok and journal is "
-		    "available, rebuild\nthe journal header.\n");
-	    }
-	    
-	    if (standard_journal || !magic_was_found) {
-		if (!user_confirmed (stdout, "Do you want to rebuild the journal header? "
-		    "(y/n)[n]: ", "y\n"))
-		{
-		    exit(EXIT_USER);
-		} else 
-		    exit_code = EXIT_FIXED;
-	    }
-	    
-	    memcpy(&j_head->jh_journal, sb_jp(sb), sizeof(struct journal_params));
-	    mark_buffer_dirty(fs->fs_jh_bh);
-	    bwrite (fs->fs_jh_bh);
-	}
-    }
-    
-    /*  whether journal header contains params with the same dev, offset, size will be 
-	checked in open_journal */
-
-    if (version == 1 || version == 3)
-        sb_size = SB_SIZE;
-    else
-        sb_size = SB_SIZE_V1;
-
-    if (ondisk_sb == NULL || 
-	memcmp(ondisk_sb, sb, sb_size - ((sb_size == SB_SIZE) ? 
-	    sizeof(fs->fs_ondisk_sb->s_unused) : 0))) 
-    {
-        /* smth was changed in SB or a new one has been built */
-	set_sb_fs_state (sb, get_sb_fs_state (sb) | FS_ERROR);
-	
-	if (ondisk_sb) {
-	    /* if super_block was found, we keep sb in ondisk_sb */
-	    fs->fs_ondisk_sb = ondisk_sb;
-	    memcpy (ondisk_sb, sb, sb_size);
-	    freemem(sb);
-	}
-
-	fflush(stdout); 
-	print_block (stderr, fs, fs->fs_super_bh);
-	
-	if (user_confirmed (stderr, "Is this ok ? (y/n)[n]: ", "y\n")) {
-	    mark_buffer_uptodate (fs->fs_super_bh, 1);
-	    mark_buffer_dirty (fs->fs_super_bh);
-	    bwrite (fs->fs_super_bh);
-	    fsck_progress ("The fs may still be unconsistent. Run reiserfsck --check.\n\n");
-	    exit_code = EXIT_FIXED;
-	} else {
-	    mark_buffer_clean (fs->fs_super_bh);
-	    fsck_progress ("Super block was not written\n");
-	}
-    } else {
-	print_block (stderr, fs, fs->fs_super_bh);
-	
-	mark_buffer_clean (fs->fs_super_bh);
-	fsck_progress ("\nSuper block seems to be correct\n\n");
-    }
-
-    exit(exit_code);
-}
-
-/*	if (version == 0) {
-	    brelse (fs->fs_super_bh);
-            freemem (fs);
-            close (fs->fs_dev);
-            fs = NULL;
-	}
-*/
diff --git a/fsck/ubitmap.c b/fsck/ubitmap.c
deleted file mode 100644
index 5d1e70a..0000000
--- a/fsck/ubitmap.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#include "fsck.h"
-
-/* g_disk_bitmap initially contains copy of disk bitmaps
-   (cautious version of it);
-
-   g_new_bitmap initially has marked only super block, bitmap blocks
-   and bits after the end of bitmap
-
-   in pass 1 we go through g_disk_bitmap. 
-
-   If block does not look like formatted node, we skip it.
-
-   If block contains internal node, put 0 in g_disk_bitmap if block is
-   not used in new tree yet.
-
-   If block contains leaf and is used already (by an indirect item
-   handled already to this time) save all items. They will be inserted
-   into tree after pass 1.
-
-   If block looking like leaf is not used in the new tree, try to
-   insert in into tree. If it is not possible, mark block in
-   g_uninsertable_leaf_bitmap. Blocks marked in this bitmap will be inserted into tree in pass 2. They can not be
-
-  This means, that in pass 1 when we have
-   found block containing the internal nodes we mark it in
-   g_disk_bitmap as free (reiserfs_free_internal_block). When block
-   gets into new tree it is marked in g_new_bitmap (mark_block_used)
-   When collecting resources for do_balance, we mark new blocks with
-   mark_block_used. After do_balance we unmark unused new blocks in
-   g_new_bitmap (bitmap.c:/reiserfs_free_block)
-
-   Allocating of new blocks: look for 0 bit in g_disk_bitmap
-   (find_zero_bit_in_bitmap), make sure, that g_new_bitmap contains 0
-   at the corresponding bit (is_block_used).
-      
- */
-
-
-
-/* is blocks used (marked by 1 in new bitmap) in the tree which is being built
-   (as leaf, internal, bitmap, or unformatted node) */
-int is_block_used (unsigned long block)
-{
-    return reiserfs_bitmap_test_bit (fsck_new_bitmap (fs), block);
-}
-
-void mark_block_used (unsigned long block, int check_hardware)
-{
-    if (!block)
-	return;
-    if (is_block_used (block)) {
-	if (check_hardware)
-	    check_memory_msg();
-	die ("mark_block_used: (%lu) used already", block);
-    }
-
-    reiserfs_bitmap_set_bit (fsck_new_bitmap (fs), block);
-}
-
-
-void mark_block_free (unsigned long block)
-{
-    if (!is_block_used (block))
-	die ("mark_block_free: (%lu) is free already", block);
-
-    reiserfs_bitmap_clear_bit (fsck_new_bitmap (fs), block);
-}
-
-
-int is_block_uninsertable (unsigned long block)
-{
-    return !reiserfs_bitmap_test_bit (fsck_uninsertables (fs), block);
-}
-
-
-/* uninsertable block is marked by bit clearing */
-void mark_block_uninsertable (unsigned long block)
-{
-    if (is_block_uninsertable (block))
-	die ("mark_block_uninsertable: (%lu) is uninsertable already", block);
-
-    reiserfs_bitmap_clear_bit (fsck_uninsertables (fs), block);
-    /* we do not need thsi actually */
-    pass_1_stat (fs)->uninsertable_leaves ++;
-}
-
-
-/* FIXME: should be able to work around no disk space */
-int reiserfsck_reiserfs_new_blocknrs (reiserfs_filsys_t * fs,
-				      unsigned long * free_blocknrs,
-				      unsigned long start, int amount_needed)
-{
-    int i;
-
-    if (!are_there_allocable_blocks (amount_needed))
-	die ("out of disk space");
-    for (i = 0; i < amount_needed; i ++) {
-	free_blocknrs[i] = alloc_block ();
-	if (!free_blocknrs[i])
-	    die ("reiserfs_new_blocknrs: 0 is allocated");
-	mark_block_used (free_blocknrs[i], 0);
-    }
-    return CARRY_ON;
-}
-
-
-// FIXME: do you check readability of a block? If f_read fails - you
-// free block in bitmap or if you mark bad blocks used to avoid their
-// allocation in future you should have bad block counter in a super
-// block. Another minor issue: users of _get_new_buffer expect buffer
-// to be filled with 0s
-struct buffer_head * reiserfsck_get_new_buffer (unsigned long start)
-{
-    unsigned long blocknr = 0;
-    struct buffer_head * bh = NULL;
-
-    reiserfs_new_blocknrs (fs, &blocknr, start, 1);
-    bh = getblk (fs->fs_dev, blocknr, fs->fs_blocksize);
-    return bh;
-}
-
-
-/* free block in new bitmap */
-int reiserfsck_reiserfs_free_block (reiserfs_filsys_t * fs, unsigned long block)
-{
-    mark_block_free (block);
-
-    /* put it back to pool of blocks for allocation */
-    make_allocable (block);
-    return 0;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/fsck/ufile.c b/fsck/ufile.c
deleted file mode 100644
index 65a8533..0000000
--- a/fsck/ufile.c
+++ /dev/null
@@ -1,1222 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#include "fsck.h"
-
-static int do_items_have_the_same_type (struct item_head * ih, struct key * key)
-{
-    return (get_type (&ih->ih_key) == get_type (key)) ? 1 : 0;
-}
-
-static int are_items_in_the_same_node (struct path * path)
-{
-  return (PATH_LAST_POSITION (path) < B_NR_ITEMS (PATH_PLAST_BUFFER (path)) - 1) ? 1 : 0;
-}
-
-static void cut_last_unfm_pointer (struct path * path, struct item_head * ih)
-{
-    set_ih_free_space(ih, 0);
-    if (I_UNFM_NUM (ih) == 1)
-	reiserfsck_delete_item (path, 0);
-    else
-	reiserfsck_cut_from_item (path, -((int)UNFM_P_SIZE));
-}
-
-/*
-    if this is not a symlink - make it of_this_size;
-    otherwise find a size and return it in symlink_size;
-*/
-static unsigned long indirect_to_direct (struct path * path, __u64 len, int symlink)
-{
-    struct buffer_head * bh = PATH_PLAST_BUFFER (path);
-    struct item_head * ih = PATH_PITEM_HEAD (path);
-    __u32 unfm_ptr;
-    struct buffer_head * unfm_bh = 0;
-    struct item_head ins_ih;
-    char * buf;
-    char bad_drct[fs->fs_blocksize];
-
-    /* direct item to insert */
-    memset (&ins_ih, 0, sizeof (ins_ih));
-    if (symlink) {
-	set_ih_key_format (&ins_ih, KEY_FORMAT_1);
-    } else {
-	set_ih_key_format (&ins_ih, get_ih_key_format (ih));
-    }
-    set_key_dirid (&ins_ih.ih_key, get_key_dirid (&ih->ih_key));
-    set_key_objectid (&ins_ih.ih_key, get_key_objectid (&ih->ih_key));
-    set_type_and_offset (get_ih_key_format (&ins_ih), &ins_ih.ih_key,
-			 get_offset (&ih->ih_key) + (I_UNFM_NUM (ih) - 1) * bh->b_size, 
-			 TYPE_DIRECT);
-
-    // we do not know what length this item should be
-    unfm_ptr = d32_get ((__u32 *)get_item (path), I_UNFM_NUM (ih) - 1);
-    if (unfm_ptr && (unfm_bh = bread (bh->b_dev, unfm_ptr, bh->b_size))) {
-        /* we can read the block */
-	buf = unfm_bh->b_data;
-	
-    } else {
-        /* we cannot read the block */
- 	if (unfm_ptr)
-	    fsck_log ("indirect_to_direct: Reading of the block (%lu), pointed to by the file %K, failed\n", 
-		unfm_ptr, &ih->ih_key);
-	memset (bad_drct, 0, fs->fs_blocksize);
-	buf = bad_drct;
-    }
-/*
-    if (len > MAX_DIRECT_ITEM_LEN (fs->fs_blocksize)) {
-	fsck_log ("indirect_to_direct: canot create such a long item %d (%K), "
-	    "Cutting it down to %d byte\n", len,  &ih->ih_key, MAX_DIRECT_ITEM_LEN (fs->fs_blocksize) - 8);
-	len = MAX_DIRECT_ITEM_LEN (fs->fs_blocksize) - 8;
-    }
-    
-    if (!len) {
-	buf = bad_link;
-	len = strlen (bad_link);
-    }
-*/
-    set_ih_item_len (&ins_ih, (get_ih_key_format (ih) == KEY_FORMAT_2) ? ROUND_UP(len) : len);
-    set_ih_free_space (&ins_ih, MAX_US_INT);
-
-    mark_ih_become_tail(ih);
-    mark_buffer_dirty(bh);
-    // last last unformatted node pointer
-    path->pos_in_item = I_UNFM_NUM (ih) - 1;
-    cut_last_unfm_pointer (path, ih);
-
-    /* insert direct item */
-    if (reiserfs_search_by_key_4 (fs, &(ins_ih.ih_key), path) == ITEM_FOUND)
-	reiserfs_panic ("indirect_to_direct: The direct item %k should not exist yet.", &(ins_ih.ih_key));
-    reiserfsck_insert_item (path, &ins_ih, (const char *)(buf));
-
-    brelse (unfm_bh);
-
-    /* put to stat data offset of first byte in direct item */
-    return get_offset (&ins_ih.ih_key); //offset;
-}
-
-/*  start_key is the key after which N items need to be deleted
-    save_here is a pointer where deleted items need to be saved if save is set.
-    start_key is the first undeleted item.
-    return whether we are sure there is nothing else of this file
- */
-int delete_N_items_after_key(struct key * start_key, struct si ** save_here, int skip_dir_items, int n_to_delete) {
-    struct path path;
-//    struct key key = *start_key;
-    struct key * rkey;
-    int count = 0;
-
-    while (1) {
-	reiserfs_search_by_key_4 (fs, start_key, &path);
-	
-	if (get_item_pos (&path) == B_NR_ITEMS (get_bh (&path))) {
-	    rkey = uget_rkey (&path);
-	    if (rkey && !not_of_one_file (start_key, rkey)) {
-		/* file continues in the right neighbor */
-		copy_key (start_key, rkey);
-		pathrelse (&path);
-		continue;
-	    }
-	    /* there is no more items with this key */
-	    pathrelse (&path);
-	    return 1;
-	}
-
-	if (is_stat_data_ih (get_ih(&path)))
-	    fix_obviously_wrong_sd_mode (&path);
-	    	
-	rkey = &(get_ih (&path))->ih_key;
-	if (not_of_one_file (start_key, rkey)) {
-	    /* there are no more item with this key */
-	    pathrelse (&path);
-	    return 1;
-	}
-
-	copy_key (start_key, rkey);
-	/* ok, item found, but make sure that it is not a directory one */
-	if ((is_stat_data_key (rkey) && !not_a_directory (get_item (&path))) ||
-	    (is_direntry_key (rkey)))
-	{
-	    if (skip_dir_items) {
-	    	/* item of directory found. Leave it in the tree */
-	    	set_offset (KEY_FORMAT_1, start_key, get_offset (start_key) + 1);
-	    	pathrelse (&path);
-	    	continue;
-	    } else {
-	    	reiserfs_panic ("delete_N_items_after_key: No directory item of %K are "
-		    "expected", start_key);
-	    }
-	}
-	if (save_here != NULL)
-	    *save_here = save_and_delete_file_item (*save_here, &path);
-	else
-	    reiserfsck_delete_item (&path, 0);
-
-     	count++;
-
-    	if (count == n_to_delete)
-	    break;
-
-	pathrelse (&path);
-    }
-
-    return 0;
-}
-
-/* returns 1 when file looks correct, -1 if directory items appeared
-   there, 0 - only holes in the file found */
-/* when it returns, key->k_offset is offset of the last item of file */
-/* sd_size is zero if we do not need to convert any indirect to direct */
-int are_file_items_correct (struct item_head * sd_ih, void * sd, __u64 * size, __u32 * blocks,
-				int mark_passed_items, int * symlink)
-{
-    struct path path;
-    struct item_head * ih;
-    struct key * next_key, * key;
-    __u32 sd_first_direct_byte = 0;
-    __u64 sd_size;
-    unsigned int i;
-    int retval, was_tail = 0;
-    int had_direct = 0;
-    int key_version = get_ih_key_format (sd_ih);
-    int next_is_another_object = 0;
-    __u64 last_unfm_offset = 0;
-    int will_convert = 0;
-    int should_convert;
-
-    should_convert = (fsck_mode (fs) != FSCK_REBUILD) || mark_passed_items;
-    key = &sd_ih->ih_key;
-    get_sd_size (sd_ih, sd, &sd_size);
-
-    if (key_version == KEY_FORMAT_1)
-    	get_sd_first_direct_byte (sd_ih, sd, &sd_first_direct_byte);
-
-    set_offset (key_version, key, 1);
-    set_type (key_version, key, TYPE_DIRECT);
-
-    /* correct size and st_blocks */
-    *size = 0;
-    *blocks = 0;
-
-    path.path_length = ILLEGAL_PATH_ELEMENT_OFFSET;
-
-    do {
-	retval = usearch_by_position (fs, key, key_version, &path);
-	if (retval == POSITION_FOUND && path.pos_in_item != 0)
-	    die ("are_file_items_correct: All bytes we look for must be first items byte (position 0).");
-
-	switch (retval) {
-	case POSITION_FOUND:/**/
-
-	    ih = PATH_PITEM_HEAD (&path);
-
-	    if (ih_was_tail (ih)) {
-	    	was_tail = 1;
-	    }
-	
-	    set_type (key_version, key, get_type (&ih->ih_key));
-	
-	    if (mark_passed_items == 1) {
-		mark_item_reachable (ih, PATH_PLAST_BUFFER (&path));
-	    }
-	
-	    // does not change path
-	    next_key = reiserfs_next_key(&path);
-
-	    if (next_key == 0 || not_of_one_file (key, next_key) || 
-		(!is_indirect_key (next_key) && !is_direct_key(next_key))) 
-	    {
-		next_is_another_object = 1;
-		will_convert = (is_indirect_ih (ih) && sd_size && (I_UNFM_NUM (ih) > 0));
-		if (will_convert) {
-		    last_unfm_offset = get_offset (key) + fs->fs_blocksize * (I_UNFM_NUM (ih) - 1);
-		    /* if symlink or
-		       [ 1. sd_size points somewhere into last unfm block
-		         2. one item of the file was direct before for 3_6 || FDB points to the tail correctly for 3_5
-		         3. we can have a tail in the file of a such size ] */
-		    will_convert = will_convert && (sd_size >= last_unfm_offset) && 
-			(sd_size < last_unfm_offset + fs->fs_blocksize) && 
-			!STORE_TAIL_IN_UNFM (sd_size, sd_size - last_unfm_offset + 1, fs->fs_blocksize);
-		    
-		    will_convert = will_convert && (*symlink || ((key_version == KEY_FORMAT_1) && 
-			(sd_first_direct_byte == last_unfm_offset)) || ((key_version == KEY_FORMAT_2) && was_tail));
-		}
-	    }
-
-	    if (should_convert) {
-		*symlink = *symlink && (will_convert || is_direct_key(&ih->ih_key));
-	    
-		if (!(*symlink) && key_version != get_ih_key_format (ih)) {
-		    if (fsck_mode(fs) == FSCK_CHECK) {
-			fsck_log("are_file_items_correct: vpf-10250: block %lu, item (%d): The item format (%H)"\
-			    " is not equal to SD format (%d)\n",
-			    get_bh(&path)->b_blocknr, PATH_LAST_POSITION(&path), ih, key_version);
-			one_more_corruption (fs, FIXABLE);
-		    } else {
-			fsck_log("are_file_items_correct: vpf-10280: block %lu, item (%d): The item format (%H)"\
-			    " is not equal to SD format (%d) - fixed.\n",
-			    get_bh(&path)->b_blocknr, PATH_LAST_POSITION(&path), ih, key_version);
-		
-
-			set_type_and_offset (key_version, &ih->ih_key, get_offset (&ih->ih_key), get_type (&ih->ih_key));
-			set_ih_key_format(ih, key_version);
-			mark_buffer_dirty(get_bh(&path));
-		    }
-		}
-
-		if (*symlink && is_direct_key(&ih->ih_key)) {
-		    /* symlink. Check that it is of KEY_FORMAT_1 */
-		    if (fsck_mode(fs) == FSCK_CHECK) {
-			if ((get_ih_key_format(ih) != KEY_FORMAT_1) || (key_format(&ih->ih_key) != KEY_FORMAT_1)) {
-			    fsck_log("are_file_items_correct: vpf-10732: block %lu, item (%d): The symlink format (%H)"\
-				" is not equal to 3.5 format (%d)\n", get_bh(&path)->b_blocknr, PATH_LAST_POSITION(&path), 
-				ih, KEY_FORMAT_1);
-			    one_more_corruption (fs, FIXABLE);
-			}
-		    } else {
-			if ((get_ih_key_format(ih) != KEY_FORMAT_1) || (key_format(&ih->ih_key) != KEY_FORMAT_1)) {
-			    fsck_log("are_file_items_correct: vpf-10732: block %lu, item (%d): The symlink format (%H)"\
-				" is not equal to 3.5 format (%d)\n", get_bh(&path)->b_blocknr, PATH_LAST_POSITION(&path), 
-				ih, KEY_FORMAT_1);
-			    set_type_and_offset(KEY_FORMAT_1, &ih->ih_key, get_offset(&ih->ih_key), get_type(&ih->ih_key));
-			    set_ih_key_format(ih, KEY_FORMAT_1);
-			    mark_buffer_dirty(get_bh(&path));
-			}
-			
-		    }
-		}
-		
-		if (will_convert)
-		    *size = sd_size;
-		else
-		    *size = get_offset (&ih->ih_key) + get_bytes_number (ih, fs->fs_blocksize) - 1;
-	    
-		if (get_type (&ih->ih_key) == TYPE_INDIRECT) {
-		    if (*symlink) /* symlinks must be calculated as dirs */
-			*blocks = dir_size2st_blocks (*size);
-		    else
-			for (i = 0; i < I_UNFM_NUM (ih); i ++) {
-			    __u32 * ind = (__u32 *)get_item(&path);
-
-			    if (d32_get(ind, i) != 0)
-				*blocks += (fs->fs_blocksize >> 9);
-			}
-		} else if (get_type (&ih->ih_key) == TYPE_DIRECT) {
-		    if (*symlink) /* symlinks must be calculated as dirs */
-			*blocks = dir_size2st_blocks (*size);
-		    else if (!had_direct)
-			*blocks += (fs->fs_blocksize >> 9);
-
-		    /* calculate only the first direct byte */
-		    had_direct++;
-		}
-	    }
-
-	    if (next_is_another_object) 
-            {
-		/* next item does not exists or is of another object,
-                   therefore all items of file are correct */
-		if (will_convert) {
-		    if (fsck_mode (fs) == FSCK_CHECK) {
-			/* here it can be symlink only */
-			fsck_log ("are_file_items_correct: The indirect item should be converted back"
-			    " to direct %K\n", &ih->ih_key);
-			one_more_corruption (fs, FIXABLE);
-			pathrelse (&path);
-		    } else {
-			__u32 * ind = (__u32 *)get_item(&path);
-			/*   DEBUG message.
-			fsck_log ("are_file_items_correct: The indirect item is converted back to direct %K\n", &ih->ih_key);
-			*/
-			if (d32_get(ind, I_UNFM_NUM (ih) - 1) == 0)
-			    *blocks += (fs->fs_blocksize >> 9);
-
-			/* path is released here. */
-			sd_first_direct_byte = indirect_to_direct (&path, sd_size - last_unfm_offset + 1, *symlink);
-			/* last item of the file is direct item */
-			set_offset (key_version, key, sd_first_direct_byte);
-			set_type (key_version, key, TYPE_DIRECT);
-		    }
-		} else 
-		    pathrelse (&path);
-		
-		return 1;
-	    }
-
-	    /* next item is item of this file */
-	    if (get_offset (&ih->ih_key) + get_bytes_number(ih, fs->fs_blocksize) != get_offset (next_key))
-	    {		
-		/* next item has incorrect offset (hole or overlapping) */
-		pathrelse (&path);
-		return 0;
-	    }
-	    if (do_items_have_the_same_type (ih, next_key) == 1 && are_items_in_the_same_node (&path) == 1) 
-	    {
-		/* two indirect items or two direct items in the same leaf. FIXME: Second will be deleted */
-		pathrelse (&path);
-		return 0;
-	    }
-
-	    /* items are of different types or are in different nodes */
-/*
-	    if (get_offset (&ih->ih_key) + get_bytes_number (ih, fs->fs_blocksize) != get_offset (next_key))
-            {
-		// indirect item free space is not set properly 
-		if (!is_indirect_ih (ih) ) //|| get_ih_free_space(ih) == 0)
-		    fsck_log ("are_file_items_correct: "
-			      "item must be indirect and must have invalid free space (%H)", ih);
-	
-                if (fsck_mode (fs) == FSCK_REBUILD)
-                {		
-                    set_ih_free_space(ih, 0);
-                    mark_buffer_dirty (PATH_PLAST_BUFFER (&path));
-        	}
-	    }
-*/
-	    /* next item exists */
-	    set_type_and_offset(key_version, key, get_offset (next_key), get_type(next_key));
-	
-	    if (comp_keys (key, next_key))
-		reiserfs_panic ("are_file_items_correct: Internal tree is in inconsistent state, "
-		    "the current item key %K and the next key %K must match", key, next_key);
-	    pathrelse (&path);
-	    break;
-
-	case POSITION_NOT_FOUND:
-	    /* We always must have next key found. Exception is first byte. It does not have to exist */
-	    if (get_offset (key) != 1)
-		reiserfs_panic ("are_file_items_correct: Position (offset == %llu) in the middle of"
-		    "the file %K was not found.", get_offset(key), key);
-	    pathrelse (&path);
-	    return 0;
-      
-	case FILE_NOT_FOUND:
-	    if (get_offset (key) != 1)
-		reiserfs_panic ("are_file_items_correct: File %K must be found as we found its StatData.", key);
-	    pathrelse (&path);
-	    return 1;
-
-	case DIRECTORY_FOUND:
-	    pathrelse (&path);
-	    return -1;
-	}
-    } while (1);
-
-    die ("are_file_items_correct: Cannot reach here");
-    return 0;
-}
-
-
-/* delete all items and put them back (after that file should have
-   correct sequence of items.
-   if should_relocate is specified then it relocates items to a new id.
-   if should_change_ih is specified then the key in ih is changed also. */
-void rewrite_file (struct item_head * ih, int should_relocate, int should_change_ih)
-{
-    struct key key;
-    struct si * si;
-    __u32 new_objectid = 0;
-    int moved_items;
-    struct key old, new;
-    int nothing_else = 0;
-
-    /* starting with the leftmost one - look for all items of file,
-       store and delete and  */
-    key = ih->ih_key;
-    set_type_and_offset (KEY_FORMAT_1, &key, SD_OFFSET, TYPE_STAT_DATA);
-
-    si = 0;
-    nothing_else = 0;
-
-    nothing_else = delete_N_items_after_key (&key, &si, should_relocate /* do not skip dir items */, 10);
-
-    if (should_relocate && (si || should_change_ih)) {
-	/* get new objectid for relocation or get objectid with which file
-	   was relocated already */
-	new_objectid = objectid_for_relocation (&ih->ih_key);
-	if (should_change_ih)
-	    set_key_objectid (&ih->ih_key, new_objectid);
-	
-	if (si) {
-	   old = si->si_ih.ih_key;
-	   set_key_objectid (&(si->si_ih.ih_key), new_objectid);
-	   new = si->si_ih.ih_key;
-	}
-    }
-
-    moved_items = 0;
-
-    while (si) {
-        while (si && (nothing_else || si->si_next)) {
-            if (should_relocate) {
-	    	set_key_objectid (&(si->si_ih.ih_key), new_objectid);
-	    	moved_items ++;
-	    }
-
-	    insert_item_separately (&(si->si_ih), si->si_dnm_data, 1/*was in tree*/);
-	    si = remove_saved_item (si);
-	}
-	if (!nothing_else)
-	    nothing_else = delete_N_items_after_key (&key, &si, should_relocate /* do not skip dir items */, 10);
-    }
-
-    if (moved_items)
-	fsck_log ("rewrite_file: %d items of file %K moved to %K\n",
-	      moved_items, &old, &new);
-
-}
-
-/* file must have correct sequence of items and tail must be stored in
-   unformatted pointer;
-   pos in bh is a position of SD */
-static int make_file_writeable (struct buffer_head * bh, int pos)
-/* struct item_head * sd_ih, void * sd */
-{
-    struct item_head *sd_ih = B_N_PITEM_HEAD (bh, pos);
-    struct item_head  sd_ih_copy;
-    struct stat_data *sd = (struct stat_data *)B_N_PITEM (bh, pos);
-    struct stat_data  sd_copy;
-    __u64 size;
-    __u32 blocks;
-    __u16 mode;
-    int   retval, symlink;
-
-    sd_ih_copy = *sd_ih;
-    memcpy (&sd_copy, sd, get_ih_item_len (sd_ih));
-    get_sd_mode (sd_ih, sd, &mode);
-    symlink = S_ISLNK(mode);
-
-    if (ih_writable(sd_ih))
-	return 1;
-    else {
-    	mark_ih_writable(sd_ih);
-	mark_buffer_dirty (bh);
-    }
-
-    retval = are_file_items_correct (&sd_ih_copy, &sd_copy, &size, &blocks, 0/*do not mark accessed*/, &symlink);
-    if (retval == 1)
-	/* file looks correct */
-	return 1;
-
-    rewrite_file (sd_ih, 0, 0);
-    /*fsck_data (fs)->rebuild.rewritten ++;*/
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-    size = 0;
-
-    if (are_file_items_correct (&sd_ih_copy, &sd_copy, &size, &blocks, 0/*do not mark accessed*/, &symlink) == 0) {
-	fsck_log("WARNING: file was rewritten but still is not correct %K\n", &sd_ih->ih_key);
-	return -1;
-    }
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-    return 1;
-}
-
-
-/* this inserts __first__ indirect item (having k_offset == 1 and only
-   one unfm pointer) into tree */
-static int create_first_item_of_file (struct item_head * ih, char * item, struct path * path, int was_in_tree)
-{
-    __u32 unfm_ptr;
-    __u32 * ni = 0;
-    struct buffer_head * unbh;
-    struct item_head indih;
-    unsigned int i;
-    int retval;
-
-    mark_item_unreachable (&indih);
-
-    copy_key (&(indih.ih_key), &(ih->ih_key));
-    set_ih_item_len (&indih, UNFM_P_SIZE);
-
-    set_ih_free_space (&indih, 0);
-    if (get_offset (&ih->ih_key) > fs->fs_blocksize) {
-	/* insert indirect item containing 0 unfm pointer */
-	unfm_ptr = 0;
-	retval = 0;
-    } else {
-	if (is_direct_ih (ih)) {
-	    /* copy direct item to new unformatted node. Save information about it */
-	    int len = get_bytes_number (ih, fs->fs_blocksize);
-
-	    unbh = reiserfsck_get_new_buffer (PATH_PLAST_BUFFER (path)->b_blocknr);
-	    memset (unbh->b_data, 0, unbh->b_size);
-	    unfm_ptr = cpu_to_le32 (unbh->b_blocknr);
-	    memcpy (unbh->b_data + get_offset (&ih->ih_key) - 1, item, len);
-
-	    set_ih_free_space (&indih, fs->fs_blocksize - 
-			       len - (get_offset (&ih->ih_key) - 1));
-	    
-	    mark_ih_was_tail (&indih);
-	    mark_buffer_dirty (unbh);
-	    mark_buffer_uptodate (unbh, 1);
-	    brelse (unbh);
-
-	    retval = len;
-	} else {
-	    /* take first unformatted pointer from an indirect item */
-	    //free_sp = ih_get_free_space(0, ih, item);
-
-	    set_ih_item_len (&indih, get_ih_item_len (ih));
-	    ni = getmem (get_ih_item_len (ih));
-	    memcpy (ni, (item), get_ih_item_len (ih));
-
-	    if (!was_in_tree) {
-		for (i = 0; i < I_UNFM_NUM (ih); i++) {
-		    if (still_bad_unfm_ptr_2 (d32_get(ni, i)))
-			reiserfs_panic ("create_first_item_of_file: The file %K has a pointer to the bad block (%u)", 
-			    &ih->ih_key, d32_get(ni, i));
-		    mark_block_used (d32_get(ni, i), 0);
-		}
-	    }
-
-	    retval = fs->fs_blocksize * get_ih_item_len (ih) / UNFM_P_SIZE;
-	}
-    }
-
-    set_ih_key_format (&indih, get_ih_key_format (ih));
-    //ih_version(&indih) = ih_version(ih);
-    set_offset (key_format (&(ih->ih_key)), &indih.ih_key, 1);
-    set_type (key_format (&(ih->ih_key)), &indih.ih_key, TYPE_INDIRECT);
-
-    if (ni) {
-	reiserfsck_insert_item (path, &indih, (const char *)ni);
-	freemem (ni);
-    } else {
-	reiserfsck_insert_item (path, &indih, (const char *)&unfm_ptr);
-    }
-
-    return retval;
-}
-
-
-/* path points to first part of tail. Function copies file tail into unformatted node and returns
-   its block number. */
-/* we convert direct item that is on the path to indirect. we need a number of free block for
-   unformatted node. reiserfs_new_blocknrs will start from block number returned by this function */
-static unsigned long block_to_start (struct path * path)
-{
-  struct buffer_head * bh;
-  struct item_head * ih;
-  __u32 blk;
-
-  bh = PATH_PLAST_BUFFER (path);
-  ih = PATH_PITEM_HEAD (path);
-  if (get_offset(&ih->ih_key) == 1 || PATH_LAST_POSITION (path) == 0)
-    return bh->b_blocknr;
-
-  ih --;
-  blk = d32_get((__u32 *)B_I_PITEM(bh, ih), I_UNFM_NUM (ih) - 1);
-  return (blk ? blk : bh->b_blocknr);
-}
-
-
-static void direct2indirect2 (unsigned long unfm, struct path * path)
-{
-    struct item_head * ih;
-    struct key key;
-    struct buffer_head * unbh;
-    __u32 ni;
-    int copied = 0;
-    int file_format;
-
-    ih = PATH_PITEM_HEAD (path);
-    copy_key (&key, &(ih->ih_key));
-
-    file_format = key_format (&key);
-
-    if (get_offset (&key) % fs->fs_blocksize != 1) {
-	/* look for first part of tail */
-	pathrelse (path);
-	set_offset (file_format, &key, (get_offset (&key) & ~(fs->fs_blocksize - 1)) + 1);	
-	if (reiserfs_search_by_key_4 (fs, &key, path) != ITEM_FOUND)
-	    die ("direct2indirect: can not find first part of tail");
-    }
-
-    unbh = reiserfsck_get_new_buffer (unfm ? unfm : block_to_start (path));
-    memset (unbh->b_data, 0, unbh->b_size);
-
-    /* delete parts of tail coping their contents to new buffer */
-    do {
-	__u64 len;
-
-	ih = PATH_PITEM_HEAD (path);
-	
-	len = get_bytes_number(ih, fs->fs_blocksize);
-	
-	memcpy (unbh->b_data + copied, B_I_PITEM (PATH_PLAST_BUFFER (path), ih), len);
-
-//	save_unfm_overwriting (unbh->b_blocknr, ih);
-	copied += len;	
-	set_offset (file_format, &key, get_offset (&key) +  len);
-
-	reiserfsck_delete_item (path, 0);
-	
-    } while (reiserfs_search_by_key_4 (fs, &key, path) == ITEM_FOUND);
-
-    pathrelse (path);
-
-
-    /* paste or insert pointer to the unformatted node */
-    set_offset (file_format, &key, get_offset (&key) - copied);
-//    set_offset (ih_key_format (ih), &key, get_offset (&key) - copied);
-//  key.k_offset -= copied;
-    ni = cpu_to_le32 (unbh->b_blocknr);
-
-
-    if (usearch_by_position (fs, &key, file_format, path) == FILE_NOT_FOUND) {
-	struct item_head insih;
-
-	copy_key (&(insih.ih_key), &key);
-	set_ih_key_format (&insih, file_format);
-	set_type (get_ih_key_format (&insih), &insih.ih_key, TYPE_INDIRECT);
-	set_ih_free_space (&insih, 0);
-	mark_item_unreachable (&insih);
-	set_ih_item_len (&insih, UNFM_P_SIZE);
-	mark_ih_was_tail (&insih);
-	reiserfsck_insert_item (path, &insih, (const char *)&(ni));
-    } else {
-	ih = PATH_PITEM_HEAD (path);
-
-	if (!is_indirect_ih(ih))
-	    reiserfs_panic ("%s: The item, which is supposed to be deleted, found in the tree - %k", 
-		__FUNCTION__, &ih->ih_key);
-	if (get_bytes_number (ih, fs->fs_blocksize) + get_offset (&ih->ih_key) != get_offset (&key))	
-	    reiserfs_panic ("%s: The item %k with the wrong offset found in the block %lu block", 
-		__FUNCTION__, &ih->ih_key, PATH_PLAST_BUFFER(path)->b_blocknr);
-	
-	mark_ih_was_tail (ih);
-	mark_buffer_dirty (get_bh(path));
-	reiserfsck_paste_into_item (path, (const char *)&ni, UNFM_P_SIZE);
-    }
-
-    mark_buffer_dirty (unbh);
-    mark_buffer_uptodate (unbh, 1);
-    brelse (unbh);
-
-    if (usearch_by_position (fs, &key, file_format, path) != POSITION_FOUND ||
-	!is_indirect_ih (PATH_PITEM_HEAD (path)))
-	reiserfs_panic ("direct2indirect: The data %k, which are supposed to be converted, are not found", &key);
-    return;
-}
-
-
-
-
-static int append_to_unformatted_node (struct item_head * comingih, struct item_head * ih, char * item,
-                                        struct path * path, unsigned int coming_len)
-{
-    struct buffer_head * bh, * unbh = NULL;
-    __u64 end_of_data, free_space;
-    __u16 offset = get_offset (&comingih->ih_key) % fs->fs_blocksize - 1;
-    __u32 unfm_ptr;
-    int zero_number;
-    
-    bh = PATH_PLAST_BUFFER (path);
-    unfm_ptr = d32_get ((__u32 *)B_I_PITEM(bh, ih), I_UNFM_NUM (ih) - 1);
-
-    /* append to free space of the last unformatted node of indirect item ih */
-    free_space = get_offset (&ih->ih_key) + fs->fs_blocksize * I_UNFM_NUM (ih) - get_offset (&comingih->ih_key);
-	
-    if (free_space < coming_len)
-	reiserfs_panic ("%s: block %lu: The unformatted node %u, pointed by the file %k, does not have enough free space"
-	    "for appending %llu bytes", __FUNCTION__, bh->b_blocknr, unfm_ptr, &ih->ih_key, coming_len);
-	
-    if (fs->fs_blocksize < free_space)
-	reiserfs_panic ("%s: block %lu: The unformatted node %u, pointed by the file %k, does not have enough free space"
-	    "for appending %llu bytes", __FUNCTION__, bh->b_blocknr, &ih->ih_key, unfm_ptr, &ih->ih_key, coming_len);	
-    
-    end_of_data = fs->fs_blocksize - free_space;
-    zero_number = offset - end_of_data;
-
-    if (unfm_ptr && !not_data_block (fs, unfm_ptr)) {
-	unbh = bread (fs->fs_dev, unfm_ptr, fs->fs_blocksize);
-	if (!is_block_used (unfm_ptr))
-	    reiserfs_panic ("%s: block %lu: The unformatted node %u, pointed by the file %k, is marked as unused", 
-		__FUNCTION__, bh->b_blocknr, unfm_ptr, &ih->ih_key);
-
-	if (unbh == 0)
-	    unfm_ptr = 0;
-    }
-    
-    if (!unfm_ptr || not_data_block (fs, unfm_ptr)) {
-	/* indirect item points to block which can not be pointed or to 0, in
-           any case we have to allocate new node */
-	/*if (unfm_ptr == 0 || unfm_ptr >= SB_BLOCK_COUNT (fs)) {*/
-	unbh = reiserfsck_get_new_buffer (bh->b_blocknr);
-	memset (unbh->b_data, 0, unbh->b_size);
-	d32_put ((__u32 *)B_I_PITEM(bh, ih), I_UNFM_NUM (ih) - 1, unbh->b_blocknr);
-	/*mark_block_unformatted (unbh->b_blocknr);*/
-	mark_buffer_dirty (bh);
-    }
-    memset (unbh->b_data + end_of_data, 0, zero_number);
-    memcpy (unbh->b_data + offset, item, coming_len);
-
-//    save_unfm_overwriting (unbh->b_blocknr, comingih);
-
-    free_space -= (zero_number + coming_len);
-    set_ih_free_space(ih, get_ih_free_space(ih) - (zero_number + coming_len));
-    memset (unbh->b_data + offset + coming_len, 0, free_space);
-//  mark_buffer_uptodate (unbh, 0);
-    mark_buffer_uptodate (unbh, 1);
-    mark_buffer_dirty (unbh);
-    brelse (unbh);
-    pathrelse (path);
-    return coming_len;
-}
-
-/* this appends file with one unformatted node pointer (since balancing
-   algorithm limitation). This pointer can be 0, or new allocated block or
-   pointer from indirect item that is being inserted into tree */
-int reiserfsck_append_file (struct item_head * comingih, char * item, int pos, struct path * path,
-			    int was_in_tree)
-{
-    __u32 * ni;
-    struct buffer_head * unbh;
-    int retval;
-    struct item_head * ih = PATH_PITEM_HEAD (path);
-    __u32 bytes_number;
-    int i, count = 0;
-
-    if (!is_indirect_ih (ih))
-	reiserfs_panic ("reiserfsck_append_file: Operation is not allowed for non-indirect item %k", &ih->ih_key);
-
-    if (is_direct_ih (comingih)) {
-	unsigned int coming_len = get_bytes_number (comingih, fs->fs_blocksize);
-
-	if (get_offset (&comingih->ih_key) < get_offset (&ih->ih_key) + fs->fs_blocksize * I_UNFM_NUM (ih)) {
-	    /* direct item fits to free space of indirect item */
-	    return append_to_unformatted_node (comingih, ih, item, path, coming_len);
-	}
-
-	unbh = reiserfsck_get_new_buffer (PATH_PLAST_BUFFER (path)->b_blocknr);
-	memset (unbh->b_data, 0, unbh->b_size);
-	memcpy (unbh->b_data + get_offset (&comingih->ih_key) % unbh->b_size - 1, item, coming_len);
-
-
-	mark_buffer_dirty (unbh);
-	mark_buffer_uptodate (unbh, 1);
-
-	ni = getmem (UNFM_P_SIZE);
-	d32_put (ni, 0, unbh->b_blocknr);
-	count = 1;
-	
-	brelse (unbh);
-	retval = coming_len;
-    } else {
-	/* coming item is indirect item */
-
-	bytes_number = get_bytes_number (ih, fs->fs_blocksize);
-	if (get_offset (&comingih->ih_key) + pos * fs->fs_blocksize != get_offset (&ih->ih_key) + bytes_number)
-	    reiserfs_panic ("reiserfsck_append_file: file %K: Cannot append indirect pointers of the offset "
-		"(%LLu) at the position %LLu\n", &comingih->ih_key, get_offset (&comingih->ih_key) + pos * fs->fs_blocksize, 
-		get_offset (&ih->ih_key) + bytes_number);
-
-	/* take unformatted pointer from an indirect item */
-	count = I_UNFM_NUM(comingih) - pos;
-	ni = getmem (count * UNFM_P_SIZE);
-	memcpy (ni, (item + pos * UNFM_P_SIZE), count * UNFM_P_SIZE);
-	
-	if (!was_in_tree) {
-	    for (i = 0; i < count; i++ ) {
-		if (still_bad_unfm_ptr_2 (d32_get (ni, i)))
-		    die ("reiserfsck_append_file: Trying to insert a pointer to illegal block (%u)", d32_get (ni, i));
-		mark_block_used (d32_get (ni, i), 0);
-	    }
-	}
-
-	retval = fs->fs_blocksize * count;
-    }
-
-    reiserfsck_paste_into_item (path, (const char *)ni, count * UNFM_P_SIZE);
-    freemem (ni);
-    return retval;
-}
-
-long long int must_there_be_a_hole (struct item_head * comingih, struct path * path)
-{
-    struct item_head * ih = PATH_PITEM_HEAD (path);
-
-    if (is_direct_ih (ih)) {
-	direct2indirect2 (0, path);
-	ih = PATH_PITEM_HEAD (path);
-    }
-
-    path->pos_in_item = I_UNFM_NUM (ih);
-
-    return (get_offset (&comingih->ih_key) - get_offset (&ih->ih_key)) / fs->fs_blocksize - I_UNFM_NUM (ih);
-/*
-    if (get_offset (&ih->ih_key) + (I_UNFM_NUM (ih) + 1) * fs->fs_blocksize <= get_offset (&comingih->ih_key))
-	return 1;
-
-    return 0;*/
-}
-
-
-int reiserfs_append_zero_unfm_ptr (struct path * path, long long int p_count)
-{
-    __u32 * ni;
-    long long int count;
-
-    if (is_direct_ih (PATH_PITEM_HEAD (path)))
-	/* convert direct item to indirect */
-	direct2indirect2 (0, path);
-	
-    count = MAX_INDIRECT_ITEM_LEN (fs->fs_blocksize) / UNFM_P_SIZE;
-    	
-    if (p_count <= count)
-       count = p_count;
-
-    ni = getmem (count * UNFM_P_SIZE);
-    memset (ni, 0, count * UNFM_P_SIZE);
-
-    reiserfsck_paste_into_item (path, (const char *)ni, count * UNFM_P_SIZE);
-    freemem(ni);
-    return 0;
-}
-
-
-/* write direct item to unformatted node */
-/* coming item is direct */
-static int overwrite_by_direct_item (struct item_head * comingih, char * item, struct path * path)
-{
-    __u32 unfm_ptr;
-    struct buffer_head * unbh, * bh;
-    struct item_head * ih;
-    int offset;
-    __u64 coming_len = get_bytes_number (comingih, fs->fs_blocksize);
-
-
-    bh = PATH_PLAST_BUFFER (path);
-    ih = PATH_PITEM_HEAD (path);
-
-    unfm_ptr = d32_get ((__u32 *)B_I_PITEM(bh, ih), path->pos_in_item);
-    unbh = 0;
-
-    if (unfm_ptr != 0 && unfm_ptr < get_sb_block_count (fs->fs_ondisk_sb)) {
-	/**/
-	unbh = bread (fs->fs_dev, unfm_ptr, bh->b_size);
-	if (!is_block_used (unfm_ptr))
-	    die ("overwrite_by_direct_item: block %lu, item %d, pointer %d: The pointed block"
-		"(%u) being overwritten is marked as unused.", bh->b_blocknr, PATH_LAST_POSITION(path), 
-		path->pos_in_item, unfm_ptr);
-	if (unbh == 0)
-	    unfm_ptr = 0;
-    }
-    if (unfm_ptr == 0 || unfm_ptr >= get_sb_block_count (fs->fs_ondisk_sb)) {
-	if ((unbh = reiserfsck_get_new_buffer (bh->b_blocknr)) != NULL) {
-	    memset (unbh->b_data, 0, unbh->b_size);
-	    d32_put ((__u32 *)B_I_PITEM(bh, ih), path->pos_in_item,  unbh->b_blocknr);
-	    mark_buffer_dirty (bh);
-	} else {
-	    die ("overwrite_by_direct_item: Could not allocate a new block for new data");
-	}
-    }
-
-    offset = (get_offset (&comingih->ih_key) % bh->b_size) - 1;
-    if (offset + coming_len > bh->b_size)
-    	die ("overwrite_by_direct_item: The length of the file after insertion (offset=%lu, length=%u)"
-	    "will exceed the maximal possible length.", ( long unsigned ) get_offset (&comingih->ih_key), 
-	     ( unsigned ) coming_len);
-
-    memcpy (unbh->b_data + offset, item, coming_len);
-
-//    save_unfm_overwriting (unbh->b_blocknr, comingih);
-
-    if ((path->pos_in_item == (I_UNFM_NUM (ih) - 1)) && 
-	(bh->b_size - 0/*ih_free_space (ih)*/) < (offset + coming_len)) {
-	set_ih_free_space (ih, bh->b_size - (offset + coming_len)) ;
-	mark_buffer_dirty (bh);
-    }
-    mark_buffer_dirty (unbh);
-//  mark_buffer_uptodate (unbh, 0);
-    mark_buffer_uptodate (unbh, 1);
-    brelse (unbh);
-    return coming_len;
-}
-
-
-#if 0
-
-void overwrite_unfm_by_unfm (unsigned long unfm_in_tree, unsigned long coming_unfm, int bytes_in_unfm)
-{
-    struct overwritten_unfm_segment * unfm_os_list;/* list of overwritten segments of the unformatted node */
-    struct overwritten_unfm_segment unoverwritten_segment;
-    struct buffer_head * bh_in_tree, * coming_bh;
-
-
-    if (!test_bit (coming_unfm % (fs->fs_blocksize * 8), SB_AP_BITMAP (fs)[coming_unfm / (fs->fs_blocksize * 8)]->b_data))
-	/* block (pointed by indirect item) is free, we do not have to keep its contents */
-	return;
-    
-    /* coming block is marked as used in disk bitmap. Put its contents to
-       block in tree preserving everything, what has been overwritten there by
-       direct items */
-    unfm_os_list = find_overwritten_unfm (unfm_in_tree, bytes_in_unfm, &unoverwritten_segment);
-    if (unfm_os_list) {
-	/*    add_event (UNFM_OVERWRITING_UNFM);*/
-	bh_in_tree = bread (fs->fs_dev, unfm_in_tree, fs->fs_blocksize);
-	coming_bh = bread (fs->fs_dev, coming_unfm, fs->fs_blocksize);
-	if (bh_in_tree == 0 || coming_bh == 0)
-	    return;
-	
-	while (get_unoverwritten_segment (unfm_os_list, &unoverwritten_segment)) {
-	    if (unoverwritten_segment.ous_begin < 0 || unoverwritten_segment.ous_end > bytes_in_unfm - 1 ||
-		unoverwritten_segment.ous_begin > unoverwritten_segment.ous_end)
-		die ("overwrite_unfm_by_unfm: invalid segment found (%d %d)", unoverwritten_segment.ous_begin, unoverwritten_segment.ous_end);
-	    
-	    memcpy (bh_in_tree->b_data + unoverwritten_segment.ous_begin, coming_bh->b_data + unoverwritten_segment.ous_begin,
-		    unoverwritten_segment.ous_end - unoverwritten_segment.ous_begin + 1);
-	    mark_buffer_dirty (bh_in_tree);
-	}
-	
-	brelse (bh_in_tree);
-	brelse (coming_bh);
-    }
-}
-#endif
-
-
-/* put unformatted node pointers from incoming item over the in-tree ones */
-static int overwrite_by_indirect_item (struct item_head * comingih, __u32 * coming_item,
-				       struct path * path, int * pos_in_coming_item)
-{
-    struct buffer_head * bh = PATH_PLAST_BUFFER (path);
-    struct item_head * ih = PATH_PITEM_HEAD (path);
-    int written;
-    __u32 * item_in_tree;
-    int src_unfm_ptrs, dest_unfm_ptrs, to_copy, i, dirty = 0;
-
-    item_in_tree = (__u32 *)B_I_PITEM (bh, ih) + path->pos_in_item;
-    coming_item += *pos_in_coming_item;
-
-    dest_unfm_ptrs = I_UNFM_NUM (ih) - path->pos_in_item;
-    src_unfm_ptrs = I_UNFM_NUM (comingih) - *pos_in_coming_item;
-  
-    if (dest_unfm_ptrs >= src_unfm_ptrs) {
-	/* whole coming item (comingih) fits into item in tree (ih) starting with path->pos_in_item */
-
-	//free_sp = ih_get_free_space(0, comingih, (char *)coming_item);
-
-	written = get_bytes_number (comingih, fs->fs_blocksize) -
-	    /* free_sp - */ *pos_in_coming_item * fs->fs_blocksize;
-	*pos_in_coming_item = I_UNFM_NUM (comingih);
-	to_copy = src_unfm_ptrs;
-	if (dest_unfm_ptrs == src_unfm_ptrs)
-	    set_ih_free_space(ih, 0 /* free_sp */ );
-    } else {
-	/* only part of coming item overlaps item in the tree */
-	*pos_in_coming_item += dest_unfm_ptrs;
-	written = dest_unfm_ptrs * fs->fs_blocksize;
-	to_copy = dest_unfm_ptrs;
-	set_ih_free_space(ih, 0);
-    }
-  
-    for (i = 0; i < to_copy; i ++) {
-	if (d32_get (coming_item, i) != 0 && d32_get (item_in_tree, i) == 0) {
-	    /* overwrite holes only by correct a pointer in the coming item
-               which must be correct */
-	    d32_put (item_in_tree, i, d32_get (coming_item, i));
-	    mark_block_used (d32_get (coming_item, i), 0);
-	    dirty ++;
-	}
-    }
-    if (dirty)
-	mark_buffer_dirty (bh);
-    return written;
-}
-
-
-static int reiserfsck_overwrite_file (struct item_head * comingih, char * item,
-				      struct path * path, int * pos_in_coming_item,
-				      int was_in_tree)
-{
-    __u32 unfm_ptr;
-    int written = 0;
-    struct item_head * ih = PATH_PITEM_HEAD (path);
-
-
-    if (not_of_one_file (ih, &(comingih->ih_key)))
-	    reiserfs_panic ("reiserfsck_overwrite_file: The file to be overwritten %K must be of"
-		" the same as the new data %K", &ih->ih_key, &comingih->ih_key);
-
-    if (is_direct_ih (ih)) {
-	unfm_ptr = 0;
-	if (is_indirect_ih (comingih)) {
-	    if (get_offset (&ih->ih_key) % fs->fs_blocksize != 1)
-		reiserfs_panic ("reiserfsck_overwrite_file: The second part of the tail %k can not"
-		    " be overwritten by indirect item %k", &ih->ih_key, &comingih->ih_key);
-	    /* use pointer from coming indirect item */
-	    unfm_ptr = d32_get ((__u32 *)item, *pos_in_coming_item);
-	    if (!was_in_tree) {
-		if (still_bad_unfm_ptr_2 (unfm_ptr))
-		    die ("reiserfsck_overwrite_file: The pointer to the unformatted block (%u)"
-			" points to the bad area.", unfm_ptr);
-	    }
-	}
-	/* */
-	direct2indirect2 (unfm_ptr, path);
-    }
-    if (is_direct_ih (comingih))
-    {
-	written = overwrite_by_direct_item (comingih, item, path);
-    } else {
-	if (was_in_tree)
-	    reiserfs_panic ("reiserfsck_overwrite_file: Item %k we are going to overwrite with"
-		" %k cannot not be in the tree yet", &ih->ih_key, &comingih->ih_key);
-	written = overwrite_by_indirect_item (comingih, (__u32 *)item, path, pos_in_coming_item);
-    }
-
-    return written;
-}
-
-
-/*
- */
-int reiserfsck_file_write (struct item_head * ih, char * item, int was_in_tree) {
-    struct path path;
-    int count, pos_in_coming_item;
-    long long int retval, written;
-    struct key key;
-    int file_format = KEY_FORMAT_UNDEFINED;
-    int relocated = 0;
-
-    if (!was_in_tree) {
-	__u16 mode;
-
-        /* We already inserted all SD items. If we cannot find SD of this item - skip it */
-	memset (&key, 0, sizeof (key));
-
-check_again:
-        copy_short_key (&key, &(ih->ih_key));
-	
-        if (reiserfs_search_by_key_4 (fs, &key, &path) != ITEM_FOUND) {
-            fsck_log ("vpf-10260: The file we are inserting the new item (%H) into has no"
-		" StatData, insertion was skipped\n", ih);
-            pathrelse (&path);
-            return 0;
-        }
-
-        /*SD found*/
-        file_format = get_ih_key_format (get_ih(&path));
-        get_sd_mode (get_ih(&path), get_item(&path), &mode);
-
-        if (file_format != get_ih_key_format (ih)) {
-	    /* Not for symlinks and not for items which should be relocted. */
-	    if (((S_ISDIR(mode) && is_direntry_ih(ih)) || 
-		(!S_ISDIR(mode) && !is_direntry_ih(ih))) && 
-		!S_ISLNK(mode))
-	    {
-		set_type_and_offset (file_format, &ih->ih_key, get_offset (&ih->ih_key), get_type (&ih->ih_key));
-		set_ih_key_format(ih, file_format);		
-	    }
-        }
-
-	if (!relocated && should_relocate (ih)) {
-	    rewrite_file (ih, 1, 1/*change new_ih*/);
-	    pathrelse(&path);
-	    relocated = 1;
-	    
-	    /* object has been relocated but we should not mark it as used in semantic map,
-	       as it does not exist at pass2 and we do not get here for relocation as 
-	       was_in_tree == 1 */
-	    
-	    goto check_again;
-	}
-	
-	if (make_file_writeable (get_bh(&path), get_item_pos (&path)) == -1) {
-	    /* write was not completed. Skip that item. Maybe it should be saved to lost_found */
-	    fsck_log ("reiserfsck_file_write: WARNING: The file we are inserting the new item %k into was"
-		" not recovered and is still in inconsistent state, insertion was skipped\n", &ih->ih_key);
-	    pathrelse(&path);
-	    return 0;
-	}
-
-        pathrelse (&path);
-    }
-
-    count = get_bytes_number (ih, fs->fs_blocksize);
-    pos_in_coming_item = 0;
-
-    copy_key (&key, &(ih->ih_key));
-
-    while (count) {
-
-	retval = usearch_by_position (fs, &key, key_format (&key), &path);
-
-	/*  if there are items of bigger offset than we are looking for and
-	    there is no item between wamted offset and SD, insert first item */
-	if (retval == POSITION_NOT_FOUND &&
-	    (	PATH_LAST_POSITION (&path) >= B_NR_ITEMS (get_bh(&path)) ||
-		get_offset (&get_ih(&path)->ih_key) > get_offset (&key)))
-            retval = FILE_NOT_FOUND;	
-	
-	if (retval == DIRECTORY_FOUND)
-	    reiserfs_panic ("The directory was found at the place of the file we are going to insert"
-		" the item %k into", key);
-
-	if (retval == POSITION_FOUND) {
-	    written = reiserfsck_overwrite_file (ih, item, &path, &pos_in_coming_item, was_in_tree);
-            count -= written;
-	    set_offset (key_format (&key), &key, get_offset (&key) + written);
-	}
-	if (retval == FILE_NOT_FOUND) {
-	    written = create_first_item_of_file (ih, item, &path, was_in_tree);
-	    count -= written;
-
-	    set_offset (key_format (&key), &key, get_offset (&key) + written );
-	}
-	if (retval == POSITION_NOT_FOUND) {
-	
-	    if (is_direct_ih (ih)) {
-	        mark_ih_was_tail (get_ih(&path));
-	        mark_buffer_dirty (get_bh(&path));
-	    }
-	
-	    if ((written = must_there_be_a_hole (ih, &path)) > 0)
-	    {
-		reiserfs_append_zero_unfm_ptr (&path, written);
-	    }else {
-		written = reiserfsck_append_file (ih, item, pos_in_coming_item, &path, was_in_tree);
-		count -= written;
-		set_offset (key_format (&key), &key, get_offset (&key) + written);
-		pos_in_coming_item += written / fs->fs_blocksize;
-	    }
-	}
-	if (count < 0)
-	    reiserfs_panic ("reiserfsck_file_write: We wrote into the file %K more bytes than needed - count (%d) < 0.",
-			    &key, count);
-	pathrelse (&path);
-    }
-
-
-    /* This is a test for writing into the file. If not sure that file data are consistent after
-       reiserfsck_file_write - uncomment this clause: */
-
-/*    if (!was_in_tree && are_file_items_correct (&ih->ih_key,
-    	(file_format == KEY_FORMAT_UNDEFINED) ?	get_ih_key_format (ih) : file_format,
-    	&size, &blocks, 0, symlink, 0) == 0)
-        reiserfs_panic ("reiserfsck_file_write: item was not inserted properly\n");*/
-
-    return get_bytes_number (ih, fs->fs_blocksize);
-}
-
-
-void one_more_corruption(reiserfs_filsys_t *fs, int kind) {
-    if (kind == FATAL)
-	fsck_check_stat (fs)->fatal_corruptions++;
-    else if (kind == FIXABLE)
-	fsck_check_stat (fs)->fixable_corruptions++;
-}
-
-void one_less_corruption(reiserfs_filsys_t *fs, int kind) {
-    if (kind == FATAL)
-	fsck_check_stat (fs)->fatal_corruptions--;
-    else if (kind == FIXABLE)
-	fsck_check_stat (fs)->fixable_corruptions--;
-}
diff --git a/fsck/ustree.c b/fsck/ustree.c
deleted file mode 100644
index 7204a07..0000000
--- a/fsck/ustree.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#include "fsck.h"
-
-struct tree_balance * cur_tb = 0;
-
-void reiserfsck_paste_into_item (struct path * path, const char * body, int size)
-{
-    struct tree_balance tb;
-  
-    init_tb_struct (&tb, fs, path, size);
-    if (fix_nodes (/*tb.transaction_handle,*/ M_PASTE, &tb, 0/*ih*/) != CARRY_ON)
-	//fix_nodes(options, tree_balance, ih_to_option, body_to_option)
-	
-	die ("reiserfsck_paste_into_item: fix_nodes failed");
-    
-    do_balance (/*tb.transaction_handle,*/ &tb, 0, body, M_PASTE, 0/*zero num*/);
-}
-
-
-void reiserfsck_insert_item (struct path * path, struct item_head * ih, const char * body)
-{
-    struct tree_balance tb;
-    
-    init_tb_struct (&tb, fs, path, IH_SIZE + get_ih_item_len(ih));
-    if (fix_nodes (/*tb.transaction_handle,*/ M_INSERT, &tb, ih/*, body*/) != CARRY_ON)
-	die ("reiserfsck_insert_item: fix_nodes failed");
-    do_balance (/*tb.transaction_handle,*/ &tb, ih, body, M_INSERT, 0/*zero num*/);
-}
-
-
-static void free_unformatted_nodes (struct item_head * ih, struct buffer_head * bh)
-{
-    __u32 * punfm = (__u32 *)B_I_PITEM (bh, ih);
-    unsigned int i;
-
-    for (i = 0; i < I_UNFM_NUM (ih); i ++) {
-        __u32 unfm = d32_get (punfm, i);
-	if (unfm != 0) {
-	    struct buffer_head * to_be_forgotten;
-
-	    to_be_forgotten = find_buffer (fs->fs_dev, unfm, fs->fs_blocksize);
-	    if (to_be_forgotten) {
-		//atomic_inc(&to_be_forgotten->b_count);
-		to_be_forgotten->b_count ++;
-		bforget (to_be_forgotten);
-	    }
-
-	    reiserfs_free_block (fs, unfm);
-	}
-    }
-}
-
-void reiserfsck_delete_item (struct path * path, int temporary)
-{
-    struct tree_balance tb;
-    struct item_head * ih = PATH_PITEM_HEAD (path);
-    
-    if (is_indirect_ih (ih) && !temporary)
-	free_unformatted_nodes (ih, PATH_PLAST_BUFFER (path));
-
-    init_tb_struct (&tb, fs, path, -(IH_SIZE + get_ih_item_len(ih)));
-
-    if (fix_nodes (/*tb.transaction_handle,*/ M_DELETE, &tb, 0/*ih*/) != CARRY_ON)
-	die ("reiserfsck_delete_item: fix_nodes failed");
-    
-    do_balance (/*tb.transaction_handle,*/ &tb, 0, 0, M_DELETE, 0/*zero num*/);
-}
-
-
-void reiserfsck_cut_from_item (struct path * path, int cut_size)
-{
-    struct tree_balance tb;
-    struct item_head * ih;
-
-    if (cut_size >= 0)
-	die ("reiserfsck_cut_from_item: cut size == %d", cut_size);
-
-    if (is_indirect_ih (ih = PATH_PITEM_HEAD (path))) {
-	struct buffer_head *bh = PATH_PLAST_BUFFER (path);
-	__u32 unfm_ptr = d32_get ((__u32 *)B_I_PITEM(bh, ih), I_UNFM_NUM (ih) - 1);
-	if (unfm_ptr != 0) {
-	    struct buffer_head * to_be_forgotten;
-
-	    to_be_forgotten = find_buffer (fs->fs_dev, unfm_ptr, fs->fs_blocksize);
-	    if (to_be_forgotten) {
-		//atomic_inc(&to_be_forgotten->b_count);
-		to_be_forgotten->b_count ++;
-		bforget (to_be_forgotten);
-	    }
-	    reiserfs_free_block (fs, unfm_ptr);
-	}
-    }
-
-
-    init_tb_struct (&tb, fs, path, cut_size);
-
-    if (fix_nodes (/*tb.transaction_handle,*/ M_CUT, &tb, 0) != CARRY_ON)
-	die ("reiserfsck_cut_from_item: fix_nodes failed");
-
-    do_balance (/*tb.transaction_handle,*/ &tb, 0, 0, M_CUT, 0/*zero num*/);
-}
-
-
-/* uget_rkey is utils clone of stree.c/get_rkey */
-/*
-struct key * uget_rkey (struct path * path)
-{
-    int pos, offset = path->path_length;
-    struct buffer_head * bh;
-
-    if (offset < FIRST_PATH_ELEMENT_OFFSET)
-	die ("uget_rkey: illegal offset in the path (%d)", offset);
-
-    while (offset-- > FIRST_PATH_ELEMENT_OFFSET) {
-	if (! buffer_uptodate (PATH_OFFSET_PBUFFER (path, offset)))
-	    die ("uget_rkey: parent is not uptodate");
-
-	// Parent at the path is not in the tree now.
-	if (! B_IS_IN_TREE (bh = PATH_OFFSET_PBUFFER (path, offset)))
-	    die ("uget_rkey: buffer on the path is not in tree");
-
-	// Check whether position in the parrent is correct.
-	if ((pos = PATH_OFFSET_POSITION (path, offset)) > B_NR_ITEMS (bh))
-	    die ("uget_rkey: invalid position (%d) in the path", pos);
-
-	// Check whether parent at the path really points to the child.
-	if (get_dc_child_blocknr (B_N_CHILD (bh, pos)) != PATH_OFFSET_PBUFFER (path, offset + 1)->b_blocknr)
-	    die ("uget_rkey: invalid block number (%d). Must be %ld",
-		 get_dc_child_blocknr (B_N_CHILD (bh, pos)), PATH_OFFSET_PBUFFER (path, offset + 1)->b_blocknr);
-	
-	// Return delimiting key if position in the parent is not the last one.
-	if (pos != B_NR_ITEMS (bh))
-	    return B_N_PDELIM_KEY(bh, pos);
-    }
-
-    // there is no right delimiting key
-    return 0;
-}
-*/
-
-
-static unsigned long first_child (struct buffer_head * bh)
-{
-    return get_dc_child_blocknr (B_N_CHILD (bh, 0));
-}
-
-#if 0
-static unsigned long last_child (struct buffer_head * bh)
-{
-    return child_block_number (bh, node_item_number (bh));
-}
-#endif
-
-
-static unsigned long get_child (int pos, struct buffer_head * parent)
-{
-    if (pos == -1)
-        return -1;
-
-    if (pos > B_NR_ITEMS (parent))
-        die ("get_child: no child found, should not happen: %d of %d", pos, B_NR_ITEMS (parent));
-    return get_dc_child_blocknr (B_N_CHILD (parent, pos));
-
-}
-
-
-static void print (int cur, int total)
-{
-    if (fsck_quiet (fs))
-	return;
-    printf ("/%3d (of %3d)", cur, total);fflush (stdout);
-}
-
-
-/* erase /XXX(of XXX) */
-static void erase (void)
-{
-    if (fsck_quiet (fs))
-	return;
-    printf ("\b\b\b\b\b\b\b\b\b\b\b\b\b");
-    printf ("             ");
-    printf ("\b\b\b\b\b\b\b\b\b\b\b\b\b");
-    fflush (stdout);
-}
-
-void pass_through_tree (reiserfs_filsys_t * fs, do_after_read_t action1,
-			do_on_full_path_t action2, int depth)
-{
-    struct buffer_head * path[MAX_HEIGHT] = {0,};
-    int total[MAX_HEIGHT] = {0,};
-    int cur[MAX_HEIGHT] = {0,};
-    int h = 0;
-    unsigned long block = get_sb_root_block (fs->fs_ondisk_sb);
-    int problem;
-
-
-    if (block >= get_sb_block_count (fs->fs_ondisk_sb) || not_data_block (fs, block)) {
-	die ("\nBad root block %lu. (--rebuild-tree did not complete)\n", block);
-    }
-
-    while ( 1 ) {
-	problem = 0;
-
-        if (path[h])
-            die ("pass_through_tree: empty slot expected");
-        if (h)
-            print (cur[h - 1], total[h - 1]);
-
-	if (fs->fs_badblocks_bm && reiserfs_bitmap_test_bit (fs->fs_badblocks_bm, block)) {
-	    fsck_log ("%s: block %lu specified in badblock list found in tree, whole subtree skipped\n",
-		__FUNCTION__, block);
-	    fsck_data (fs)->check.bad_nodes++;
-	    one_more_corruption (fs, FATAL);
-
-	    if (h == 0) {
-		brelse (path[h]);
-		path[h] = 0;
-		break;
-	    }
-	    problem = 1;		
-	} else {
-	    path[h] = bread (fs->fs_dev, block, fs->fs_blocksize);
-	    if (path[h] == 0)
-		/* FIXME: handle case when read failed */
-		die ("pass_through_tree: unable to read %lu block on device 0x%x\n",
-			block, fs->fs_dev);
-
-	    if (action1)
-		if ((problem = action1 (fs, path, h))) {
-		    fsck_log (" the problem in the internal node occured (%lu), whole subtree is skipped\n", 
-			path[h]->b_blocknr);
-		    fsck_data (fs)->check.bad_nodes++;
- 
-		    if (h == 0) {
-			brelse (path[h]);
-			path[h] = 0;
-			break;
-		    }
-		}
-	}
-
-	/* Time to stop. */
-	if (h == depth)
-	    problem ++;
-
-        if (problem || is_leaf_node (path[h])) {
-            if (!problem && action2)
-                action2 (fs, path, h);
-
-	    brelse (path[h]);
-            if (h)
-		erase ();
-
-            while (h && (cur[h-1] == total[h-1] || problem)) {
-                problem = 0;
-                path[h] = 0;
-                h --;
-                brelse (path[h]);
-                if (h)
-                    erase ();
-	    }
-
-    	    if (h == 0) {
-    	    	path[h] = 0;
-		break;
-    	    }
-
-            block = get_child (cur[h - 1], path[h-1]);
-            cur[h - 1] ++;
-            path[h] = 0;
-            continue;
-	}
-        total[h] = B_NR_ITEMS (path[h]) + 1;
-        cur[h] = 1;
-        block = first_child (path[h]);
-        h ++;
-    }
-}
diff --git a/include/Makefile.am b/include/Makefile.am
index 96c1615..1d173ff 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -1 +1 @@
-noinst_HEADERS = io.h  misc.h  reiserfs_fs.h  reiserfs_lib.h swab.h
+SUBDIRS = misc reiserfs util
diff --git a/include/Makefile.in b/include/Makefile.in
index cdcccba..7c22234 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.7.6 from Makefile.am.
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
 # @configure_input@
 
-# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-# Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -13,7 +13,6 @@
 # PARTICULAR PURPOSE.
 
 @SET_MAKE@
-
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 VPATH = @srcdir@
@@ -21,7 +20,6 @@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 top_builddir = ..
-
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
@@ -35,7 +33,29 @@
 NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
+build_triplet = @build@
 host_triplet = @host@
+subdir = include
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-exec-recursive install-info-recursive \
+	install-recursive installcheck-recursive installdirs-recursive \
+	pdf-recursive ps-recursive uninstall-info-recursive \
+	uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMDEP_FALSE = @AMDEP_FALSE@
 AMDEP_TRUE = @AMDEP_TRUE@
@@ -78,6 +98,7 @@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROGS_LDFLAGS = @PROGS_LDFLAGS@
 RANLIB = @RANLIB@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -92,6 +113,8 @@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -112,6 +135,7 @@
 libexecdir = @libexecdir@
 localstatedir = @localstatedir@
 mandir = @mandir@
+mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
@@ -119,51 +143,111 @@
 sharedstatedir = @sharedstatedir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
-noinst_HEADERS = io.h  misc.h  reiserfs_fs.h  reiserfs_lib.h swab.h
-subdir = include
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES =
-DIST_SOURCES =
-HEADERS = $(noinst_HEADERS)
-
-DIST_COMMON = $(noinst_HEADERS) Makefile.am Makefile.in config.h.in
-all: config.h
-	$(MAKE) $(AM_MAKEFLAGS) all-am
+SUBDIRS = misc reiserfs util
+all: all-recursive
 
 .SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  include/Makefile'; \
 	cd $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu  include/Makefile
-Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
 
-config.h: stamp-h1
-	@if test ! -f $@; then \
-	  rm -f stamp-h1; \
-	  $(MAKE) stamp-h1; \
-	else :; fi
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
-stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
-	@rm -f stamp-h1
-	cd $(top_builddir) && $(SHELL) ./config.status include/config.h
-
-$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(top_srcdir)/configure.in $(ACLOCAL_M4) 
-	cd $(top_srcdir) && $(AUTOHEADER)
-	touch $(srcdir)/config.h.in
-
-distclean-hdr:
-	-rm -f config.h stamp-h1
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 uninstall-info-am:
 
-ETAGS = etags
-ETAGSFLAGS =
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
 
-CTAGS = ctags
-CTAGSFLAGS =
-
-tags: TAGS
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+	@failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@@ -173,27 +257,42 @@
 	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
 	mkid -fID $$unique
+tags: TAGS
 
-TAGS:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
 	tags=; \
 	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 	  done | \
 	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	test -z "$(ETAGS_ARGS)$$tags$$unique" \
-	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	     $$tags $$unique
-
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
 ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
 	tags=; \
 	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 	  done | \
@@ -210,10 +309,6 @@
 
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-
-top_distdir = ..
-distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
@@ -227,7 +322,7 @@
 	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
 	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
 	    dir="/$$dir"; \
-	    $(mkinstalldirs) "$(distdir)$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
 	  else \
 	    dir=''; \
 	  fi; \
@@ -242,23 +337,38 @@
 	    || exit 1; \
 	  fi; \
 	done
+	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(mkdir_p) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	    distdir=`$(am__cd) $(distdir) && pwd`; \
+	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$top_distdir" \
+	        distdir="$$distdir/$$subdir" \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
 check-am: all-am
-check: check-am
-all-am: Makefile $(HEADERS) config.h
-
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
 
 install-am: all-am
 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
 
-installcheck: installcheck-am
+installcheck: installcheck-recursive
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -266,24 +376,26 @@
 clean-generic:
 
 distclean-generic:
-	-rm -f Makefile $(CONFIG_CLEAN_FILES)
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
+clean: clean-recursive
 
 clean-am: clean-generic mostlyclean-am
 
-distclean: distclean-am
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
 
-distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
-
-dvi: dvi-am
+dvi: dvi-recursive
 
 dvi-am:
 
-info: info-am
+html: html-recursive
+
+info: info-recursive
 
 info-am:
 
@@ -291,38 +403,43 @@
 
 install-exec-am:
 
-install-info: install-info-am
+install-info: install-info-recursive
 
 install-man:
 
 installcheck-am:
 
-maintainer-clean: maintainer-clean-am
-
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
-mostlyclean: mostlyclean-am
+mostlyclean: mostlyclean-recursive
 
 mostlyclean-am: mostlyclean-generic
 
-pdf: pdf-am
+pdf: pdf-recursive
 
 pdf-am:
 
-ps: ps-am
+ps: ps-recursive
 
 ps-am:
 
 uninstall-am: uninstall-info-am
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic ctags \
-	distclean distclean-generic distclean-hdr distclean-tags \
-	distdir dvi dvi-am info info-am install install-am install-data \
-	install-data-am install-exec install-exec-am install-info \
-	install-info-am install-man install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
-	pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+	clean clean-generic clean-recursive ctags ctags-recursive \
+	distclean distclean-generic distclean-recursive distclean-tags \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-exec \
+	install-exec-am install-info install-info-am install-man \
+	install-strip installcheck installcheck-am installdirs \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	maintainer-clean-recursive mostlyclean mostlyclean-generic \
+	mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am uninstall-info-am
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/include/io.h b/include/io.h
deleted file mode 100644
index ae9af4c..0000000
--- a/include/io.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#ifndef REISERFSPROGS_IO_H
-#define REISERFSPROGS_IO_H
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#endif
-
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include "misc.h"
-
-struct buffer_head {
-    unsigned long b_blocknr;
-    int b_dev;
-    unsigned long b_size;
-    char * b_data;
-    unsigned long b_state;
-    unsigned int b_count;
-    unsigned int b_list ;
-    void (*b_start_io) (unsigned long);
-    void (*b_end_io)(struct buffer_head *bh, int uptodate);
-    
-    struct buffer_head * b_next;
-    struct buffer_head * b_prev;
-    struct buffer_head * b_hash_next;
-    struct buffer_head * b_hash_prev;
-};
-
-#define BH_Uptodate	0
-#define BH_Dirty	1
-#define BH_Lock		2
-#define BH_Do_not_flush 3
-
-
-#define buffer_uptodate(bh) misc_test_bit(BH_Uptodate, &(bh)->b_state)
-#define buffer_dirty(bh) misc_test_bit(BH_Dirty, &(bh)->b_state)
-#define buffer_locked(bh) misc_test_bit(BH_Lock, &(bh)->b_state)
-#define buffer_clean(bh) !misc_test_bit(BH_Dirty, &(bh)->b_state)
-#define buffer_do_not_flush(bh) misc_test_bit(BH_Do_not_flush, &(bh)->b_state)
-#define mark_buffer_dirty(bh) misc_set_bit(BH_Dirty, &(bh)->b_state)
-#define mark_buffer_uptodate(bh,i) misc_set_bit(BH_Uptodate, &(bh)->b_state)
-#define mark_buffer_clean(bh) misc_clear_bit(BH_Dirty, &(bh)->b_state)
-#define mark_buffer_do_not_flush(bh) misc_set_bit(BH_Do_not_flush, &(bh)->b_state)
-#define clear_buffer_do_not_flush(bh) misc_clear_bit(BH_Do_not_flush, &(bh)->b_state)
-
-/*
-printf ("%s:%s:%u %p %p %p\n", 
-__FILE__, __FUNCTION__, __LINE__,
-	__builtin_return_address (0),
-	__builtin_return_address (1),
-	__builtin_return_address (2));
-*/
-
-
-
-void __wait_on_buffer (struct buffer_head * bh);
-struct buffer_head * getblk (int dev, unsigned long block, int size);
-struct buffer_head * reiserfs_getblk (int dev, unsigned long block, int size, int *repeat);
-
-struct buffer_head * find_buffer (int dev, unsigned long block, unsigned long size);
-struct buffer_head * get_hash_table(dev_t dev, unsigned long block, int size);
-struct buffer_head * bread (int dev, unsigned long block, size_t size);
-struct buffer_head * reiserfs_bread (int dev, unsigned long block, int size, int *repeat);
-int bwrite (struct buffer_head * bh);
-void brelse (struct buffer_head * bh);
-void bforget (struct buffer_head * bh);
-void init_rollback_file (char * rollback_file, int *bloksize, FILE * log);
-int open_rollback_file (char * rollback_file, FILE * log);
-void close_rollback_file ();
-void do_fsck_rollback (int fd_device, int fd_journal_device, FILE * log); 
-
-void flush_buffers (int);
-void free_buffers (void);
-void invalidate_buffers (int);
-
-#endif
diff --git a/include/misc.h b/include/misc.h
deleted file mode 100644
index 6891b59..0000000
--- a/include/misc.h
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-/* nothing abount reiserfs here */
-
-#ifndef REISERFSPROGS_MISC_H
-#define REISERFSPROGS_MISC_H
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#endif
-
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <stdlib.h>
-
-#include <linux/major.h>
-
-#if MAJOR_IN_MKDEV
-#   include <sys/mkdev.h>
-#elif MAJOR_IN_SYSMACROS
-#   include <sys/sysmacros.h>
-#endif
-
-#include "swab.h"
-
-#define POSITION_FOUND          8
-#define POSITION_NOT_FOUND      9
-
-#define INVAL_PTR	(void *)-1
-
-void check_memory_msg(void);
-void die (char * fmt, ...) __attribute__ ((format (printf, 1, 2)));
-void * getmem (int size);
-void *mem_alloc(int size);
-void freemem (void * p);
-void checkmem (char * p, int size);
-void * expandmem (void * p, int size, int by);
-unsigned int get_mem_size (char * p);
-void check_and_free_mem (void);
-char * kdevname (int dev);
-
-typedef enum mount_flags {
-	MF_NOT_MOUNTED  = 0x0,
-	MF_RO		= 0x1,
-	MF_RW		= 0x2
-} mount_flags_t;
-
-typedef struct mount_hint {
-    char *point;	/* Mount point. */
-    __u32 psize;	/* Mount point buffer size. */
-    __u32 flags;	/* Mount flags. */
-} mount_hint_t;
-
-struct mntent *misc_mntent(char *device);
-int misc_device_mounted(char *device);
-	
-void misc_print_credit(FILE *out);
-
-typedef struct dma_info {
-    int fd;
-    struct stat st;
-    int support_type;
-    int dma;
-    __u64 speed;
-} dma_info_t;
-
-int prepare_dma_check(dma_info_t *dma_info);
-int get_dma_info(dma_info_t *dma_info);
-void clean_after_dma_check(int fd, dma_info_t *dma_info);
-
-int valid_offset( int fd, loff_t offset);
-unsigned long count_blocks (char * filename, int blocksize);
-
-void print_how_far (FILE * fp, unsigned long *passed, unsigned long total, unsigned int inc, int quiet);
-void print_how_fast (unsigned long total, 
-		     unsigned long passed, int cursor_pos, int reset_time);
-__u32 get_random (void);
-
-int user_confirmed (FILE * fp, char * q, char * yes);
-
-extern inline int misc_set_bit (unsigned long long nr, void * addr);
-extern inline int misc_clear_bit (unsigned long long nr, void * addr);
-extern inline int misc_test_bit(unsigned long long nr, const void * addr);
-extern inline unsigned long long misc_find_first_zero_bit (const void *vaddr, unsigned long long size);
-extern inline unsigned long long misc_find_next_zero_bit (const void *vaddr, unsigned long long size, unsigned long long offset);
-extern inline unsigned long long misc_find_next_set_bit(const void *vaddr, unsigned long long size, unsigned long long offset);
-extern inline unsigned long long misc_find_first_set_bit (const void *vaddr, unsigned long long size);
-
-#define STAT_FIELD_H(Field, Type)	\
-inline Type misc_device_##Field(char *device);
-
-STAT_FIELD_H(mode, mode_t);
-STAT_FIELD_H(rdev, dev_t);
-STAT_FIELD_H(size, off_t);
-STAT_FIELD_H(blocks, blkcnt_t);
-
-__u16 mask16 (int from, int count);
-__u32 mask32 (int from, int count);
-__u64 mask64 (int from, int count);
-
-int reiserfs_bin_search (void * key, void * base, __u32 num, int width,
-			 __u32 *ppos, __compar_fn_t comp_func);
-
-struct block_handler {
-    __u32 blocknr;
-    dev_t device;
-};
-
-int  blocklist__is_block_saved (struct block_handler ** base, __u32 * count, __u32 blocknr, 
-    dev_t device, __u32 * position);
-void blocklist__insert_in_position (void * block_h, void ** base, __u32 * count, 
-    int elem_size, __u32 * position);
-int blockdev_list_compare (const void * block1, const void * block2);
-			
-			 
-#define set_bit_field_XX(XX,vp,val,from,count) \
-{\
-    __u##XX * p, tmp;\
-\
-    /* make sure that given value can be put in 'count' bits */\
-    if (val > (1 << count))\
-	die ("set_bit_field: val %d is too big for %d bits", val, count);\
-\
-    p = (__u##XX *)vp;\
-    tmp = le##XX##_to_cpu (*p);\
-\
-    /* clear 'count' bits starting from 'from'-th one */\
-    tmp &= ~mask##XX (from, count);\
-\
-    /* put given value in proper bits */\
-    tmp |= (val << from);\
-\
-    *p = cpu_to_le##XX (tmp);\
-}
-
-
-#define get_bit_field_XX(XX,vp,from,count) \
-\
-    __u##XX * p, tmp;\
-\
-    p = (__u##XX *)vp;\
-    tmp = le##XX##_to_cpu (*p);\
-\
-    /* clear all bits but 'count' bits starting from 'from'-th one */\
-    tmp &= mask##XX (from, count);\
-\
-    /* get value written in specified bits */\
-    tmp >>= from;\
-    return tmp;
-
-
-#ifndef major
-#define major(rdev)      ((rdev)>>8)
-#define minor(rdev)      ((rdev) & 0xff)
-#endif /* major */
-
-
-
-#ifndef SCSI_DISK_MAJOR
-#define SCSI_DISK_MAJOR(maj) ((maj) == SCSI_DISK0_MAJOR || \
-			     ((maj) >= SCSI_DISK1_MAJOR && (maj) <= SCSI_DISK7_MAJOR))
-#endif /* SCSI_DISK_MAJOR */
-    
-#ifndef SCSI_BLK_MAJOR
-#define SCSI_BLK_MAJOR(maj)  (SCSI_DISK_MAJOR(maj) || (maj) == SCSI_CDROM_MAJOR)
-#endif /* SCSI_BLK_MAJOR */
-
-#ifndef IDE_DISK_MAJOR
-#ifdef IDE9_MAJOR
-#define IDE_DISK_MAJOR(maj) ((maj) == IDE0_MAJOR || (maj) == IDE1_MAJOR || \
-			     (maj) == IDE2_MAJOR || (maj) == IDE3_MAJOR || \
-			     (maj) == IDE4_MAJOR || (maj) == IDE5_MAJOR || \
-			     (maj) == IDE6_MAJOR || (maj) == IDE7_MAJOR || \
-			     (maj) == IDE8_MAJOR || (maj) == IDE9_MAJOR)
-#else
-#define IDE_DISK_MAJOR(maj) ((maj) == IDE0_MAJOR || (maj) == IDE1_MAJOR || \
-			     (maj) == IDE2_MAJOR || (maj) == IDE3_MAJOR || \
-			     (maj) == IDE4_MAJOR || (maj) == IDE5_MAJOR)
-#endif /* IDE9_MAJOR */
-#endif /* IDE_DISK_MAJOR */
-
-
-#endif /* REISERFS_MISC_H */
diff --git a/include/misc/Makefile.am b/include/misc/Makefile.am
new file mode 100644
index 0000000..2ab1624
--- /dev/null
+++ b/include/misc/Makefile.am
@@ -0,0 +1 @@
+noinst_HEADERS = types.h bitops.h malloc.h swab.h device.h misc.h unaligned.h
diff --git a/lib/Makefile.in b/include/misc/Makefile.in
similarity index 61%
copy from lib/Makefile.in
copy to include/misc/Makefile.in
index 675222a..15d93ea 100644
--- a/lib/Makefile.in
+++ b/include/misc/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.7.6 from Makefile.am.
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
 # @configure_input@
 
-# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-# Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -20,8 +20,7 @@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
-
+top_builddir = ../..
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
@@ -35,7 +34,24 @@
 NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
+build_triplet = @build@
 host_triplet = @host@
+subdir = include/misc
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMDEP_FALSE = @AMDEP_FALSE@
 AMDEP_TRUE = @AMDEP_TRUE@
@@ -78,6 +94,7 @@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROGS_LDFLAGS = @PROGS_LDFLAGS@
 RANLIB = @RANLIB@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -92,6 +109,8 @@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -112,6 +131,7 @@
 libexecdir = @libexecdir@
 localstatedir = @localstatedir@
 mandir = @mandir@
+mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
@@ -119,95 +139,41 @@
 sharedstatedir = @sharedstatedir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
-noinst_LIBRARIES = libmisc.a
-
-libmisc_a_SOURCES = io.c misc.c 
-subdir = lib
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-LIBRARIES = $(noinst_LIBRARIES)
-
-libmisc_a_AR = $(AR) cru
-libmisc_a_LIBADD =
-am_libmisc_a_OBJECTS = io.$(OBJEXT) misc.$(OBJEXT)
-libmisc_a_OBJECTS = $(am_libmisc_a_OBJECTS)
-
-DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/io.Po ./$(DEPDIR)/misc.Po
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-DIST_SOURCES = $(libmisc_a_SOURCES)
-DIST_COMMON = Makefile.am Makefile.in
-SOURCES = $(libmisc_a_SOURCES)
-
+noinst_HEADERS = types.h bitops.h malloc.h swab.h device.h misc.h unaligned.h
 all: all-am
 
 .SUFFIXES:
-.SUFFIXES: .c .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  include/misc/Makefile'; \
 	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  lib/Makefile
-Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+	  $(AUTOMAKE) --gnu  include/misc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
 
-AR = ar
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
-clean-noinstLIBRARIES:
-	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-libmisc.a: $(libmisc_a_OBJECTS) $(libmisc_a_DEPENDENCIES) 
-	-rm -f libmisc.a
-	$(libmisc_a_AR) libmisc.a $(libmisc_a_OBJECTS) $(libmisc_a_LIBADD)
-	$(RANLIB) libmisc.a
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT) core *.core
-
-distclean-compile:
-	-rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/io.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Po@am__quote@
-
-distclean-depend:
-	-rm -rf ./$(DEPDIR)
-
-.c.o:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
-
-.c.obj:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 uninstall-info-am:
 
-ETAGS = etags
-ETAGSFLAGS =
-
-CTAGS = ctags
-CTAGSFLAGS =
-
-tags: TAGS
-
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
@@ -216,6 +182,7 @@
 	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
 	mkid -fID $$unique
+tags: TAGS
 
 TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
@@ -227,10 +194,11 @@
 	  done | \
 	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	test -z "$(ETAGS_ARGS)$$tags$$unique" \
-	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	     $$tags $$unique
-
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
 ctags: CTAGS
 CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
@@ -253,10 +221,6 @@
 
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-
-top_distdir = ..
-distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
@@ -270,7 +234,7 @@
 	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
 	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
 	    dir="/$$dir"; \
-	    $(mkinstalldirs) "$(distdir)$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
 	  else \
 	    dir=''; \
 	  fi; \
@@ -287,8 +251,7 @@
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(LIBRARIES)
-
+all-am: Makefile $(HEADERS)
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -301,7 +264,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -309,24 +272,25 @@
 clean-generic:
 
 distclean-generic:
-	-rm -f Makefile $(CONFIG_CLEAN_FILES)
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
 clean: clean-am
 
-clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
+clean-am: clean-generic mostlyclean-am
 
 distclean: distclean-am
-
-distclean-am: clean-am distclean-compile distclean-depend \
-	distclean-generic distclean-tags
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
 
 dvi: dvi-am
 
 dvi-am:
 
+html: html-am
+
 info: info-am
 
 info-am:
@@ -342,12 +306,12 @@
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
-
+	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
 
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
+mostlyclean-am: mostlyclean-generic
 
 pdf: pdf-am
 
@@ -360,15 +324,13 @@
 uninstall-am: uninstall-info-am
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-noinstLIBRARIES ctags distclean distclean-compile \
-	distclean-depend distclean-generic distclean-tags distdir dvi \
-	dvi-am info info-am install install-am install-data \
-	install-data-am install-exec install-exec-am install-info \
-	install-info-am install-man install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
-	uninstall-am uninstall-info-am
+	ctags distclean distclean-generic distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-exec install-exec-am \
+	install-info install-info-am install-man install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+	pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/include/misc/bitops.h b/include/misc/bitops.h
new file mode 100644
index 0000000..16653f5
--- /dev/null
+++ b/include/misc/bitops.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifndef MISC_BITOPS_H
+#define MISC_BITOPS_H
+
+#include "misc/types.h"
+#include "misc/misc.h"
+
+extern __u16 mask16 (int from, int count);
+extern __u32 mask32 (int from, int count);
+extern __u64 mask64 (int from, int count);
+
+#define misc_set_bitfield_XX(XX,vp,val,from,count)				\
+({										\
+    __u##XX * p, tmp;								\
+										\
+    /* make sure that given value can be put in 'count' bits */			\
+    if (val > (1 << count))							\
+	misc_die ("misc_set_bitfield: val %d is too big for %d bits", val, count);	\
+										\
+    p = (__u##XX *)vp;								\
+    tmp = le##XX##_to_cpu (*p);							\
+										\
+    /* clear 'count' bits starting from 'from'-th one */			\
+    tmp &= ~mask##XX (from, count);						\
+										\
+    /* put given value in proper bits */					\
+    tmp |= (val << from);							\
+										\
+    *p = cpu_to_le##XX (tmp);							\
+})
+
+
+#define misc_get_bitfield_XX(XX,vp,from,count)					\
+({										\
+    __u##XX * p, tmp;								\
+										\
+    p = (__u##XX *)vp;								\
+    tmp = le##XX##_to_cpu (*p);							\
+										\
+    /* clear all bits but 'count' bits starting from 'from'-th one */		\
+    tmp &= mask##XX (from, count);						\
+										\
+    /* get value written in specified bits */					\
+    tmp >>= from;								\
+    tmp;									\
+})
+
+extern inline int misc_set_bit (unsigned long long nr, 
+				void * addr);
+
+extern inline int misc_clear_bit (unsigned long long nr, 
+				  void * addr);
+
+extern inline int misc_test_bit(unsigned long long nr, 
+				const void * addr);
+
+extern inline unsigned long long 
+misc_find_first_zero_bit (const void *vaddr, 
+			  unsigned long long size);
+
+extern inline unsigned long long 
+misc_find_next_zero_bit (const void *vaddr, 
+			 unsigned long long size, 
+			 unsigned long long offset);
+
+extern inline unsigned long long 
+misc_find_next_set_bit(const void *vaddr, 
+		       unsigned long long size, 
+		       unsigned long long offset);
+
+extern inline unsigned long long 
+misc_find_first_set_bit (const void *vaddr, 
+			 unsigned long long size);
+
+#endif
diff --git a/include/misc/device.h b/include/misc/device.h
new file mode 100644
index 0000000..73e7a2c
--- /dev/null
+++ b/include/misc/device.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifndef MISC_DEVICE_H
+#define MISC_DEVICE_H
+
+#include <sys/types.h>
+
+extern int misc_device_valid_offset(int fd, long long int offset);
+
+extern unsigned long misc_device_count_blocks (char * filename, 
+					       int blocksize);
+
+extern char misc_device_typec (unsigned short mode);
+
+#define STAT_FIELD_H(Field, Type)			\
+Type misc_device_##Field(char *device);
+
+STAT_FIELD_H(mode, mode_t);
+STAT_FIELD_H(rdev, dev_t);
+
+#endif
diff --git a/include/misc/malloc.h b/include/misc/malloc.h
new file mode 100644
index 0000000..cfc62a7
--- /dev/null
+++ b/include/misc/malloc.h
@@ -0,0 +1,21 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifndef MISC_MALLOC_H
+#define MISC_MALLOC_H
+
+extern void *misc_getmem (int size);
+
+extern void *misc_malloc(int size);
+
+extern void misc_freemem (void * p);
+
+extern void misc_checkmem (char * p, int size);
+
+extern void *misc_expandmem (void * p, int size, int by);
+
+extern unsigned int misc_memsize (char * p);
+
+#endif
diff --git a/include/misc/misc.h b/include/misc/misc.h
new file mode 100644
index 0000000..20c5f54
--- /dev/null
+++ b/include/misc/misc.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+/* nothing abount reiserfs here */
+
+#ifndef MISC_H
+#define MISC_H
+
+#include "misc/types.h"
+
+/* n must be power of 2 */
+#define MISC_UP(x,n)   (((x)+(n)-1u) / (n) * (n))
+#define MISC_DOWN(x,n) ((x) / (n) * (n))
+
+/* to be ok for alpha etc we have to align structures to 8 byte boundary. */
+#define MISC_ROUND_UP(x) MISC_UP(x,8LL)
+
+extern void misc_die (char * fmt, ...) __attribute__ ((format (printf, 1, 2)));
+
+typedef int (*dir_walk_func_t) (char *path, void *data);
+extern int misc_dir_walk(char *path, dir_walk_func_t func, void *data);
+
+extern __u32 misc_random (void);
+
+typedef int (*misc_comp_func_t) (const void *, const void *);
+
+extern int misc_device_rdev_match(char *path, void *data);
+
+extern int misc_bin_search (const void * key, void * base, 
+			    __u32 num, int width, int *ppos, 
+			    misc_comp_func_t comp_func);
+
+extern void blocklist__insert_in_position (void * block_h, void ** base, 
+					   __u32 * count, int elem_size, 
+					   int * position);
+
+extern int blockdev_list_compare (const void * block1, const void * block2);
+
+#endif
diff --git a/include/swab.h b/include/misc/swab.h
similarity index 77%
rename from include/swab.h
rename to include/misc/swab.h
index 06ebceb..e31a658 100644
--- a/include/swab.h
+++ b/include/misc/swab.h
@@ -3,11 +3,8 @@
  *  reiserfsprogs/README
  */
 
-#ifndef REISERFSPROGS_SWAB_H
-#define REISERFSPROGS_SWAB_H
-
-#include <endian.h>
-#include <asm/types.h>
+#ifndef MISC_SWAB_H
+#define MISC_SWAB_H
 
 #define __swab16(x) \
 ({ \
@@ -42,7 +39,7 @@
 })
 
 
-#if __BYTE_ORDER == __LITTLE_ENDIAN
+#ifndef WORDS_BIGENDIAN
 
 # define cpu_to_le16(val)                 (val)
 # define le16_to_cpu(val)                 (val)
@@ -51,7 +48,7 @@
 # define cpu_to_le64(val)                 (val)
 # define le64_to_cpu(val)                 (val)
 
-#elif __BYTE_ORDER == __BIG_ENDIAN
+#elif defined(WORDS_BIGENDIAN)
 
 # define cpu_to_le16(val)                 __swab16(val)
 # define le16_to_cpu(val)                 __swab16(val)
@@ -64,4 +61,16 @@
 # error "nuxi/pdp-endian archs are not supported"
 #endif
 
-#endif /* REISERFS_SWAB_H */
+#define get_leXX(xx,p,field)	(le##xx##_to_cpu ((p)->field))
+#define set_leXX(xx,p,field,val) do { (p)->field = cpu_to_le##xx(val); } while (0)
+
+#define get_le16(p,field)	get_leXX (16, p, field)
+#define set_le16(p,field,val)	set_leXX (16, p, field, val)
+
+#define get_le32(p,field)	get_leXX (32, p, field)
+#define set_le32(p,field,val)	set_leXX (32, p, field, val)
+
+#define get_le64(p,field)	get_leXX (64, p, field)
+#define set_le64(p,field,val)	set_leXX (64, p, field, val)
+
+#endif /* MISC_SWAB_H */
diff --git a/include/misc/types.h b/include/misc/types.h
new file mode 100644
index 0000000..d3da70e
--- /dev/null
+++ b/include/misc/types.h
@@ -0,0 +1,21 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifndef MISC_TYPES_H
+#define MISC_TYPES_H
+
+#include <string.h>
+
+typedef unsigned char           __u8;
+typedef unsigned short int      __u16;
+typedef unsigned int            __u32;
+typedef unsigned long long int  __u64;
+
+#define INVAL_PTR	(void *)-1
+#define MAX_INT		2147483647
+#define LONG_LONG_MAX	9223372036854775807LL
+#define LONG_LONG_MIN	(-LONG_LONG_MAX - 1LL)
+
+#endif
diff --git a/include/misc/unaligned.h b/include/misc/unaligned.h
new file mode 100644
index 0000000..f61c5a3
--- /dev/null
+++ b/include/misc/unaligned.h
@@ -0,0 +1,40 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef MISC_UNALIGNED_H
+#define MISC_UNALIGNED_H
+
+#ifdef HAVE_ASM_UNALIGNED_H
+#  include <asm/unaligned.h>
+#endif
+
+#ifndef get_unaligned
+#define get_unaligned(ptr)                              \
+({                                                      \
+        __typeof__(*(ptr)) __tmp;                       \
+        memcpy(&__tmp, (ptr), sizeof(*(ptr)));      \
+        __tmp;                                          \
+})
+#endif
+
+#ifndef put_unaligned
+#define put_unaligned(val, ptr)                         \
+({                                                      \
+        __typeof__(*(ptr)) __tmp = (val);               \
+        memcpy((ptr), &__tmp, sizeof(*(ptr)));      \
+        (void)0;                                        \
+})
+#endif
+
+/* these operate on extent items, where you've got an array of ints
+** at a possibly unaligned location.  These are a noop on ia32
+**
+** p is the array of __u32, i is the index into the array, v is the value
+** to store there.
+*/
+#define d32_get(p, i)	 le32_to_cpu(get_unaligned((__u32 *)(p) + (i)))
+#define d32_put(p, i, v) put_unaligned(cpu_to_le32(v), (__u32 *)(p) + (i))
+
+#endif
diff --git a/include/reiserfs/Makefile.am b/include/reiserfs/Makefile.am
new file mode 100644
index 0000000..b3cddcf
--- /dev/null
+++ b/include/reiserfs/Makefile.am
@@ -0,0 +1,6 @@
+noinst_HEADERS	= badblock.h bitmap.h buffer.h	direntry.h extent.h \
+		  filesystem.h fix_node.h hash.h internal.h \
+		  internal_balance.h journal.h key.h leaf.h \
+		  leaf_balance.h node.h objmap.h policy.h print.h \
+		  stat.h super.h tree.h tree_balance.h libreiserfs.h \
+		  types.h
diff --git a/lib/Makefile.in b/include/reiserfs/Makefile.in
similarity index 61%
rename from lib/Makefile.in
rename to include/reiserfs/Makefile.in
index 675222a..c99707f 100644
--- a/lib/Makefile.in
+++ b/include/reiserfs/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.7.6 from Makefile.am.
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
 # @configure_input@
 
-# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-# Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -20,8 +20,7 @@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
-
+top_builddir = ../..
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
@@ -35,7 +34,24 @@
 NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
+build_triplet = @build@
 host_triplet = @host@
+subdir = include/reiserfs
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMDEP_FALSE = @AMDEP_FALSE@
 AMDEP_TRUE = @AMDEP_TRUE@
@@ -78,6 +94,7 @@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROGS_LDFLAGS = @PROGS_LDFLAGS@
 RANLIB = @RANLIB@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -92,6 +109,8 @@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -112,6 +131,7 @@
 libexecdir = @libexecdir@
 localstatedir = @localstatedir@
 mandir = @mandir@
+mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
@@ -119,95 +139,47 @@
 sharedstatedir = @sharedstatedir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
-noinst_LIBRARIES = libmisc.a
-
-libmisc_a_SOURCES = io.c misc.c 
-subdir = lib
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-LIBRARIES = $(noinst_LIBRARIES)
-
-libmisc_a_AR = $(AR) cru
-libmisc_a_LIBADD =
-am_libmisc_a_OBJECTS = io.$(OBJEXT) misc.$(OBJEXT)
-libmisc_a_OBJECTS = $(am_libmisc_a_OBJECTS)
-
-DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/io.Po ./$(DEPDIR)/misc.Po
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-DIST_SOURCES = $(libmisc_a_SOURCES)
-DIST_COMMON = Makefile.am Makefile.in
-SOURCES = $(libmisc_a_SOURCES)
+noinst_HEADERS = badblock.h bitmap.h buffer.h	direntry.h extent.h \
+		  filesystem.h fix_node.h hash.h internal.h \
+		  internal_balance.h journal.h key.h leaf.h \
+		  leaf_balance.h node.h objmap.h policy.h print.h \
+		  stat.h super.h tree.h tree_balance.h libreiserfs.h \
+		  types.h
 
 all: all-am
 
 .SUFFIXES:
-.SUFFIXES: .c .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  include/reiserfs/Makefile'; \
 	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  lib/Makefile
-Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+	  $(AUTOMAKE) --gnu  include/reiserfs/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
 
-AR = ar
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
-clean-noinstLIBRARIES:
-	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-libmisc.a: $(libmisc_a_OBJECTS) $(libmisc_a_DEPENDENCIES) 
-	-rm -f libmisc.a
-	$(libmisc_a_AR) libmisc.a $(libmisc_a_OBJECTS) $(libmisc_a_LIBADD)
-	$(RANLIB) libmisc.a
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT) core *.core
-
-distclean-compile:
-	-rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/io.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Po@am__quote@
-
-distclean-depend:
-	-rm -rf ./$(DEPDIR)
-
-.c.o:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
-
-.c.obj:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 uninstall-info-am:
 
-ETAGS = etags
-ETAGSFLAGS =
-
-CTAGS = ctags
-CTAGSFLAGS =
-
-tags: TAGS
-
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
@@ -216,6 +188,7 @@
 	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
 	mkid -fID $$unique
+tags: TAGS
 
 TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
@@ -227,10 +200,11 @@
 	  done | \
 	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	test -z "$(ETAGS_ARGS)$$tags$$unique" \
-	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	     $$tags $$unique
-
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
 ctags: CTAGS
 CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
@@ -253,10 +227,6 @@
 
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-
-top_distdir = ..
-distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
@@ -270,7 +240,7 @@
 	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
 	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
 	    dir="/$$dir"; \
-	    $(mkinstalldirs) "$(distdir)$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
 	  else \
 	    dir=''; \
 	  fi; \
@@ -287,8 +257,7 @@
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(LIBRARIES)
-
+all-am: Makefile $(HEADERS)
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -301,7 +270,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -309,24 +278,25 @@
 clean-generic:
 
 distclean-generic:
-	-rm -f Makefile $(CONFIG_CLEAN_FILES)
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
 clean: clean-am
 
-clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
+clean-am: clean-generic mostlyclean-am
 
 distclean: distclean-am
-
-distclean-am: clean-am distclean-compile distclean-depend \
-	distclean-generic distclean-tags
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
 
 dvi: dvi-am
 
 dvi-am:
 
+html: html-am
+
 info: info-am
 
 info-am:
@@ -342,12 +312,12 @@
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
-
+	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
 
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
+mostlyclean-am: mostlyclean-generic
 
 pdf: pdf-am
 
@@ -360,15 +330,13 @@
 uninstall-am: uninstall-info-am
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-noinstLIBRARIES ctags distclean distclean-compile \
-	distclean-depend distclean-generic distclean-tags distdir dvi \
-	dvi-am info info-am install install-am install-data \
-	install-data-am install-exec install-exec-am install-info \
-	install-info-am install-man install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
-	uninstall-am uninstall-info-am
+	ctags distclean distclean-generic distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-exec install-exec-am \
+	install-info install-info-am install-man install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+	pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/include/reiserfs/badblock.h b/include/reiserfs/badblock.h
new file mode 100644
index 0000000..23e7fe6
--- /dev/null
+++ b/include/reiserfs/badblock.h
@@ -0,0 +1,29 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_BADBLOCK_H
+#define REISERFS_BADBLOCK_H
+
+#include "reiserfs/types.h"
+
+#define REISERFS_BAD_DID	1
+#define REISERFS_BAD_OID  (__u32)-1
+
+typedef void (*badblock_func_t) (reiserfs_filsys_t *fs, 
+				 reiserfs_path_t *badblock_path, 
+				 void *data);
+
+extern void reiserfs_badblock_extract(reiserfs_filsys_t *fs, 
+				   reiserfs_path_t *badblock_path, 
+				   void *data);
+
+extern void reiserfs_badblock_flush (reiserfs_filsys_t * fs, 
+				     int no_badblock_in_tree_yet);
+
+extern void reiserfs_badblock_traverse(reiserfs_filsys_t * fs, 
+				       badblock_func_t action, 
+				       void *data);
+
+#endif
diff --git a/include/reiserfs/bitmap.h b/include/reiserfs/bitmap.h
new file mode 100644
index 0000000..5fbbbb2
--- /dev/null
+++ b/include/reiserfs/bitmap.h
@@ -0,0 +1,89 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_BITMAP_H
+#define REISERFS_BITMAP_H
+
+#include "reiserfs/types.h"
+#include <stdio.h>
+
+#define reiserfs_bmap_nr(count, blk_size) \
+	((count - 1) / (blk_size * 8) + 1)
+
+#define reiserfs_bmap_over(nr) (nr > ((1ll << 16) - 1))
+
+extern reiserfs_bitmap_t *reiserfs_bitmap_create (unsigned int bit_count);
+
+extern int reiserfs_bitmap_open(reiserfs_filsys_t *);
+
+extern void reiserfs_bitmap_delete (reiserfs_bitmap_t * bm);
+
+extern void reiserfs_bitmap_free (reiserfs_filsys_t *);
+
+extern void reiserfs_bitmap_close (reiserfs_filsys_t *);
+
+extern int reiserfs_bitmap_flush (reiserfs_bitmap_t * bm, 
+				  reiserfs_filsys_t * fs);
+
+extern int reiserfs_bitmap_expand (reiserfs_bitmap_t * bm, 
+				   unsigned int bit_count);
+
+extern void reiserfs_bitmap_shrink (reiserfs_bitmap_t * bm, 
+				    unsigned int bit_count);
+
+extern void reiserfs_bitmap_copy (reiserfs_bitmap_t * to, 
+				  reiserfs_bitmap_t * from);
+
+extern int reiserfs_bitmap_compare (reiserfs_bitmap_t * bm1, 
+				    reiserfs_bitmap_t * bm2);
+
+extern void reiserfs_bitmap_disjunction (reiserfs_bitmap_t * disk, 
+					 reiserfs_bitmap_t * cont);
+
+extern void reiserfs_bitmap_delta (reiserfs_bitmap_t * base, 
+				   reiserfs_bitmap_t * exclude);
+
+extern void reiserfs_bitmap_set_bit (reiserfs_bitmap_t * bm, 
+				     unsigned int bit_number);
+
+extern void reiserfs_bitmap_clear_bit (reiserfs_bitmap_t * bm, 
+				       unsigned int bit_number);
+
+extern int reiserfs_bitmap_test_bit (reiserfs_bitmap_t * bm, 
+				     unsigned int bit_number);
+
+extern int reiserfs_bitmap_find_zero_bit (reiserfs_bitmap_t * bm, 
+					  unsigned long * start);
+
+extern void reiserfs_bitmap_zero (reiserfs_bitmap_t * bm);
+
+extern void reiserfs_bitmap_fill (reiserfs_bitmap_t * bm);
+
+extern void reiserfs_bitmap_invert (reiserfs_bitmap_t * bm);
+
+extern unsigned int reiserfs_bitmap_ones (reiserfs_bitmap_t * bm);
+
+extern unsigned int reiserfs_bitmap_zeros (reiserfs_bitmap_t * bm);
+
+extern int reiserfs_bitmap_spread (reiserfs_filsys_t *);
+
+extern int reiserfs_bitmap_block (reiserfs_filsys_t *, 
+				  unsigned long block);
+
+/* Backup copies. */
+extern void reiserfs_bitmap_save (FILE * fp, 
+				  reiserfs_bitmap_t *bm);
+
+extern reiserfs_bitmap_t * reiserfs_bitmap_load (FILE * fp);
+
+extern void reiserfs_bitmap_print (FILE * fp, reiserfs_filsys_t * fs, 
+				   int silent);
+
+extern void reiserfs_print_bmap_block (FILE * fp, int i, 
+				       unsigned long block, 
+				       char * map, int blocks, 
+				       int silent, int blocksize);
+
+#endif
diff --git a/include/reiserfs/buffer.h b/include/reiserfs/buffer.h
new file mode 100644
index 0000000..5b5a67c
--- /dev/null
+++ b/include/reiserfs/buffer.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifndef REISERFS_BUFFER_H
+#define REISERFS_BUFFER_H
+
+#include "reiserfs/types.h"
+
+#define BH_Uptodate	0
+#define BH_Dirty	1
+#define BH_Lock		2
+#define BH_Do_not_flush 3
+
+#define reiserfs_buffer_uptodate(bh)	 misc_test_bit(BH_Uptodate, &(bh)->b_state)
+#define reiserfs_buffer_mkuptodate(bh,i) misc_set_bit(BH_Uptodate, &(bh)->b_state)
+
+#define reiserfs_buffer_isdirty(bh)	 misc_test_bit(BH_Dirty, &(bh)->b_state)
+#define reiserfs_buffer_isclean(bh)	 !misc_test_bit(BH_Dirty, &(bh)->b_state)
+#define reiserfs_buffer_mkdirty(bh)	 misc_set_bit(BH_Dirty, &(bh)->b_state)
+#define reiserfs_buffer_mkclean(bh)	 misc_clear_bit(BH_Dirty, &(bh)->b_state)
+
+#define reiserfs_buffer_noflush(bh)	 misc_test_bit(BH_Do_not_flush, &(bh)->b_state)
+#define reiserfs_buffer_mknoflush(bh)	 misc_set_bit(BH_Do_not_flush, &(bh)->b_state)
+#define reiserfs_buffer_clnoflush(bh)	 misc_clear_bit(BH_Do_not_flush, &(bh)->b_state)
+
+extern reiserfs_bh_t * reiserfs_buffer_open (int, unsigned long, unsigned long);
+extern reiserfs_bh_t * reiserfs_buffer_find (int, unsigned long, unsigned long);
+extern reiserfs_bh_t * reiserfs_buffer_read (int, unsigned long, unsigned long);
+
+extern int reiserfs_buffer_write (reiserfs_bh_t *);
+
+extern void reiserfs_buffer_close (reiserfs_bh_t *);
+
+extern void reiserfs_buffer_forget (reiserfs_bh_t *);
+
+extern void reiserfs_buffer_flush_all(int);
+
+extern void reiserfs_buffer_free_all (void);
+
+extern void reiserfs_buffer_invalidate_all (int);
+
+#endif
diff --git a/include/reiserfs/direntry.h b/include/reiserfs/direntry.h
new file mode 100644
index 0000000..5fe22fa
--- /dev/null
+++ b/include/reiserfs/direntry.h
@@ -0,0 +1,158 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_DIRENTRY_H
+#define REISERFS_DIRENTRY_H
+
+#include "reiserfs/types.h"
+
+/***************************************************************************/
+/*                      DIRECTORY STRUCTURE                                */
+/***************************************************************************/
+/* 
+   Picture represents the structure of directory items
+   ________________________________________________
+   |  Array of     |   |     |        |       |   |
+   | directory     |N-1| N-2 | ....   |   1st |0th|
+   | entry headers |   |     |        |       |   |
+   |_______________|___|_____|________|_______|___|
+                    <----   directory entries         ------>
+
+ First directory item has k_offset component 1. We store "." and ".."
+ in one item, always, we never split "." and ".." into differing
+ items.  This makes, among other things, the code for removing
+ directories simpler. */
+
+/* Each directory entry has its header. This header has deh_dir_id and
+   deh_objectid fields, those are key of object, entry points to */
+
+/* NOT IMPLEMENTED:   
+   Directory will someday contain stat data of object */
+struct reiserfs_de_head
+{
+    __u32 deh2_offset;  /* third component of the directory entry key */
+    __u32 deh2_dir_id;  /* objectid of the parent directory of the object,
+			   that is referenced by directory entry */
+    __u32 deh2_objectid;/* objectid of the object, that is referenced by
+			   directory entry */
+    __u16 deh2_location;/* offset of name in the whole item */
+    __u16 deh2_state;   /* whether 1) entry contains stat data (for future),
+			   and 2) whether entry is hidden (unlinked) */
+} __attribute__ ((__packed__));
+
+typedef struct reiserfs_de_head reiserfs_deh_t;
+
+#define REISERFS_DEH_SIZE sizeof(reiserfs_deh_t)
+
+/* set/get fields of dir entry head these defines */
+#define reiserfs_deh_get_off(deh)	get_le32 (deh, deh2_offset)
+#define reiserfs_deh_set_off(deh,val)	set_le32 (deh, deh2_offset, val)
+
+#define reiserfs_deh_get_did(deh)	get_le32 (deh, deh2_dir_id)
+#define reiserfs_deh_set_did(deh,val)	set_le32 (deh, deh2_dir_id, val)
+
+#define reiserfs_deh_get_obid(deh)	get_le32 (deh, deh2_objectid)
+#define reiserfs_deh_set_obid(deh,val)	set_le32 (deh, deh2_objectid, val)
+
+#define reiserfs_deh_get_loc(deh)	get_le16 (deh, deh2_location)
+#define reiserfs_deh_set_loc(deh,val)	set_le16 (deh, deh2_location, val)
+
+#define reiserfs_deh_get_state(deh)	get_le16 (deh, deh2_state)
+#define reiserfs_deh_set_state(deh,val)	set_le16 (deh, deh2_state, val)
+
+#define reiserfs_deh_name(deh, pos)				\
+	((char *)(deh - pos) + reiserfs_deh_get_loc(deh))
+
+/* empty directory contains two entries "." and ".." and their headers */
+#define REISERFS_DIR_MIN					\
+	(REISERFS_DEH_SIZE * 2 +				\
+	 MISC_ROUND_UP (strlen (".")) +				\
+	 MISC_ROUND_UP (strlen ("..")))
+
+/* old format directories have this size when empty */
+#define REISERFS_DIR_MIN_V1 (REISERFS_DEH_SIZE * 2 + 3)
+
+#define DEH_Statdata 0			/* not used now */
+#define DEH_Visible2 2
+
+#define DEH_Bad_offset 4 /* fsck marks entries to be deleted with this flag */
+#define DEH_Bad_location 5
+
+#define reiserfs_deh_state_bit(deh,bit)				\
+	(reiserfs_deh_get_state (deh) & (1 << bit))
+
+#define reiserfs_deh_state_set_bit(deh,bit)			\
+{								\
+	__u16 state;						\
+	state = reiserfs_deh_get_state (deh);			\
+	state |= (1 << bit);					\
+	reiserfs_deh_set_state(deh, state);			\
+}
+
+#define reiserfs_deh_state_clear_bit(deh,bit)			\
+{								\
+	__u16 state;						\
+	state = reiserfs_deh_get_state (deh);			\
+	state &= ~(1 << bit);					\
+	reiserfs_deh_set_state(deh, state);			\
+}
+
+/* Bad means "hashed unproperly or/and invalid location" */
+#define reiserfs_deh_locbad(deh)				\
+	reiserfs_deh_state_bit (deh, DEH_Bad_location)
+#define reiserfs_deh_set_locbad(deh)				\
+	reiserfs_deh_state_set_bit (deh, DEH_Bad_location)
+#define reiserfs_deh_set_locok(deh)				\
+	reiserfs_deh_state_clear_bit (deh, DEH_Bad_location)
+
+#define reiserfs_deh_offbad(deh)				\
+	reiserfs_deh_state_bit (deh, DEH_Bad_offset)
+#define reiserfs_deh_set_offbad(deh)				\
+	reiserfs_deh_state_set_bit (deh, DEH_Bad_offset)
+
+#define reiserfs_deh_bad(deh)					\
+	(reiserfs_deh_locbad(deh) || reiserfs_deh_offbad(deh))
+
+
+/* for directories st_blocks is number of 512 byte units which fit into dir
+   size round up to blocksize */
+#define REISERFS_DIR_BLOCKS(size) ((size + 511) / 512)
+
+/* array of the entry headers */
+#define reiserfs_deh(bh,ih) ((reiserfs_deh_t *)(reiserfs_item_by_ih(bh,ih)))
+
+#define REISERFS_NAME_MAX	256
+/* #define REISERFS_NAME_MAX(block_size)				\
+	(block_size - REISERFS_NODEH_SIZE -			\
+	 REISERFS_IH_SIZE - REISERFS_DEH_SIZE)
+*/
+
+/* -REISERFS_SD_SIZE when entry will contain stat data */
+
+extern int reiserfs_direntry_loc_check (reiserfs_deh_t * deh, 
+					reiserfs_ih_t * ih, 
+					int first);
+
+extern int reiserfs_direntry_entry_len (reiserfs_ih_t * ih, 
+					reiserfs_deh_t * deh,
+					int pos_in_item);
+
+extern int reiserfs_direntry_name_len (reiserfs_ih_t * ih,
+				       reiserfs_deh_t * deh, 
+				       int pos_in_item);
+
+extern int reiserfs_direntry_entry_estimate (char * name, 
+					     int key_format);
+
+extern int reiserfs_direntry_check (reiserfs_filsys_t * fs, 
+				    reiserfs_ih_t * ih, 
+				    char * item, 
+				    int bad_dir);
+
+extern void reiserfs_direntry_print (FILE * fp, 
+				     reiserfs_filsys_t * fs,
+				     reiserfs_bh_t * bh, 
+				     reiserfs_ih_t * ih);
+#endif
diff --git a/include/reiserfs/extent.h b/include/reiserfs/extent.h
new file mode 100644
index 0000000..fc4f142
--- /dev/null
+++ b/include/reiserfs/extent.h
@@ -0,0 +1,26 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_EXTENT_H
+#define REISERFS_EXTENT_H
+
+#include "reiserfs/types.h"
+
+/* Size of pointer to the unformatted node. */
+#define REISERFS_EXT_SIZE (sizeof(__u32))
+
+/* number of blocks pointed to by the extent item */
+#define reiserfs_ext_count(p_s_ih) \
+	(reiserfs_ih_get_len(p_s_ih) / REISERFS_EXT_SIZE)
+	
+extern int reiserfs_ext_check (reiserfs_filsys_t * fs, 
+			       reiserfs_ih_t * ih, char * item,
+			       unfm_func_t func);
+
+extern void reiserfs_ext_print(FILE * fp, 
+			       reiserfs_bh_t * bh, 
+			       int item_num);
+
+#endif
diff --git a/include/reiserfs/filesystem.h b/include/reiserfs/filesystem.h
new file mode 100644
index 0000000..b556344
--- /dev/null
+++ b/include/reiserfs/filesystem.h
@@ -0,0 +1,73 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_FS_H
+#define REISERFS_FS_H
+
+#include <reiserfs/types.h>
+
+/* ReiserFS leaves the first 64k unused, so that partition labels have enough
+   space.  If someone wants to write a fancy bootloader that needs more than
+   64k, let us know, and this will be increased in size.  This number must be
+   larger than than the largest block size on any platform, or code will
+   break.  -Hans */
+#define REISERFS_DISK_OFFSET_IN_BYTES (64 * 1024)
+
+/*#define MD_RAID_SUPERBLOCKS_IN_BYTES (128 * 1024)*/
+
+/* the spot for the super in versions 3.5 - 3.5.11 (inclusive) */
+#define REISERFS_OLD_DISK_OFFSET_IN_BYTES (8 * 1024)
+
+#define reiserfs_ondisk_offset(block_of_super_block, block_size)	\
+	(block_of_super_block * block_size)
+
+#define reiserfs_new_location(block_of_super_block, block_size)		\
+    ((reiserfs_ondisk_offset(block_of_super_block, block_size) ==	\
+      REISERFS_DISK_OFFSET_IN_BYTES) ? 1 : 0)
+	
+/*only 4k blocks for old location*/
+#define reiserfs_old_location(block_of_super_block, block_size)		\
+    ((reiserfs_ondisk_offset(block_of_super_block, 4096) ==		\
+      REISERFS_OLD_DISK_OFFSET_IN_BYTES) ? 1 : 0)
+
+enum reiserfs_blktype {
+    BT_INVAL	= 0x1,
+    BT_SUPER	= 0x2,
+    BT_JOURNAL	= 0x3,
+    BT_BITMAP	= 0x4,
+    BT_UNKNOWN
+};
+
+typedef enum reiserfs_blktype reiserfs_blktype_t;
+
+extern reiserfs_filsys_t * reiserfs_fs_open (char * filename, 
+					     int flags, 
+					     int * error, 
+					     void * vp, 
+					     int skip_check);
+
+extern reiserfs_filsys_t * reiserfs_fs_create (char * filename, 
+					       int version, 
+					       unsigned long block_count,
+					       int block_size, 
+					       int default_journal, 
+					       int new_format);
+
+extern void reiserfs_fs_flush (reiserfs_filsys_t *);
+
+extern void reiserfs_fs_free (reiserfs_filsys_t *);
+
+extern void reiserfs_fs_close (reiserfs_filsys_t *);
+
+extern void reiserfs_fs_reopen (reiserfs_filsys_t *, int flags);
+
+extern int reiserfs_fs_rw (reiserfs_filsys_t * fs);
+
+extern int reiserfs_fs_blksize_check (unsigned int blocksize);
+
+extern reiserfs_blktype_t reiserfs_fs_block(reiserfs_filsys_t *fs, 
+					    unsigned long block);
+
+#endif
diff --git a/include/reiserfs/fix_node.h b/include/reiserfs/fix_node.h
new file mode 100644
index 0000000..62cd005
--- /dev/null
+++ b/include/reiserfs/fix_node.h
@@ -0,0 +1,76 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_FIX_NODE_H
+#define REISERFS_FIX_NODE_H
+
+#include <reiserfs/types.h>
+#include <reiserfs/tree_balance.h>
+
+/* maximum number of FEB blocknrs on a single level */
+#define FN_AMOUNT_MAX 2
+
+/* To make any changes in the tree we always first find node, that contains
+   item to be changed/deleted or place to insert a new item. We call this node
+   S. To do balancing we need to decide what we will shift to left/right
+   neighbor, or to a new node, where new item will be etc. To make this
+   analysis simpler we build virtual node. Virtual node is an array of items,
+   that will replace items of node S. (For instance if we are going to delete
+   an item, virtual node does not contain it). Virtual node keeps information
+   about item sizes and types, mergeability of first and last items, sizes of
+   all entries in directory item. We use this array of items when calculating
+   what we can shift to neighbors and how many nodes we have to have if we do
+   not any shiftings, if we shift to left/right neighbor or to both. */
+struct reiserfs_virtual_item
+{
+    /* item type, mergeability */
+    unsigned short vi_type;	
+    /* length of item that it will have after balancing */
+    unsigned short vi_item_len; 
+    /* offset of item that it have before balancing */
+    __u64 vi_item_offset; 
+
+    /* number of entries in directory item (including the new one if any, 
+       or excluding entry if it must be cut) */
+    short vi_entry_count;	
+    /* array of entry lengths for directory item */
+    unsigned short * vi_entry_sizes; 
+};
+
+struct reiserfs_virtual_node
+{
+    /* this is a pointer to the free space in the buffer */
+    char * vn_free_ptr;	 
+    /* number of items in virtual node */
+    unsigned short vn_nr_item;	
+    /* size of node , that node would have if it has unlimited size and no 
+       balancing is performed */
+    short vn_size; 
+    /* mode of balancing (paste, insert, delete, cut) */
+    short vn_mode;		
+    short vn_affected_item_num; 
+    short vn_pos_in_item;
+    /* item header of inserted item, 0 for other modes */
+    reiserfs_ih_t * vn_ins_ih;	
+    /* array of items (including a new one, excluding item to be deleted) */
+    struct reiserfs_virtual_item * vn_vi;	
+};
+
+extern int reiserfs_fix_nodes (int n_op_mode, 
+			       reiserfs_tb_t * p_s_tb,
+			       reiserfs_ih_t * p_s_ins_ih);
+
+extern void reiserfs_unfix_nodes (reiserfs_tb_t *);
+
+/* FIXME: move these 2 into tree.h when get rid of search_by_key */
+extern reiserfs_bh_t * reiserfs_tree_right_neighbor (reiserfs_filsys_t * s, 
+							  reiserfs_path_t * path);
+
+extern reiserfs_bh_t * reiserfs_tree_left_neighbor (reiserfs_filsys_t * s, 
+							 reiserfs_path_t * path);
+
+extern void reiserfs_fix_node_print(struct reiserfs_virtual_node * vn);
+
+#endif
diff --git a/include/reiserfs/hash.h b/include/reiserfs/hash.h
new file mode 100644
index 0000000..8d9d28c
--- /dev/null
+++ b/include/reiserfs/hash.h
@@ -0,0 +1,52 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_HASH_H
+#define REISERFS_HASH_H
+
+#include "misc/types.h"
+
+#define UNSET_HASH 0 // read_super will guess about, what hash names
+                     // in directories were sorted with
+
+enum {
+    REISERFS_HASH_TEA	= 0x1,
+    REISERFS_HASH_YURA	= 0x2,
+    REISERFS_HASH_R5	= 0x3,
+    REISERFS_HASH_LAST
+};
+
+#define DEFAULT_HASH REISERFS_HASH_R5
+
+/* hashes.c */
+extern __u32 reiserfs_hash_keyed (const char *msg, int len);
+
+extern __u32 reiserfs_hash_yura (const char *msg, int len);
+
+extern __u32 reiserfs_hash_r5 (const char *msg, int len);
+
+extern int reiserfs_hash_count (void);
+
+extern int reiserfs_hash_correct (hashf_t *func, 
+				  char * name, 
+				  int namelen, 
+				  __u32 offset);
+
+extern int reiserfs_hash_find (char * name, 
+			       int namelen, 
+			       __u32 deh_offset, 
+			       unsigned int code_to_try_first);
+
+extern char *reiserfs_hash_name (unsigned int code);
+
+extern int reiserfs_hash_code (hashf_t func);
+
+extern hashf_t reiserfs_hash_func (unsigned int code);
+
+extern hashf_t reiserfs_hash_get (char * hash);
+
+extern __u32 reiserfs_hash_value (hashf_t func, char * name, int namelen);
+
+#endif
diff --git a/include/reiserfs/internal.h b/include/reiserfs/internal.h
new file mode 100644
index 0000000..79d7748
--- /dev/null
+++ b/include/reiserfs/internal.h
@@ -0,0 +1,78 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_INTERNAL_H
+#define REISERFS_INTERNAL_H
+
+/*
+ * Picture represents an internal node of the reiserfs tree
+ *  ______________________________________________________
+ * |      |  Array of     |  Array of         |  Free     |
+ * |block |    keys       |  pointers         | space     |
+ * | head |      N        |      N+1          |           |
+ * |______|_______________|___________________|___________|
+ */
+
+
+/* Disk child pointer: The pointer from an internal node of the tree
+   to a node that is on disk. */
+struct reiserfs_dc {
+    __u32 dc2_block_number;              /* Disk child's block number. */
+    __u16 dc2_size;		            /* Disk child's used space.   */
+    __u16 dc2_reserved;
+} __attribute__ ((__packed__));
+
+typedef struct reiserfs_dc reiserfs_dc_t;
+
+#define REISERFS_DC_SIZE (sizeof(reiserfs_dc_t))
+
+/* set/get fields of disk_child with these defines */
+#define reiserfs_dc_get_nr(dc)		get_le32 (dc, dc2_block_number)
+#define reiserfs_dc_set_nr(dc,val)	set_le32 (dc, dc2_block_number, val)
+
+#define reiserfs_dc_get_size(dc)	get_le16 (dc, dc2_size)
+#define reiserfs_dc_set_size(dc,val)	set_le16 (dc, dc2_size, val)
+
+#define reiserfs_dc_init(dc, size, blocknr)				\
+({									\
+    reiserfs_dc_set_nr(dc, blocknr);					\
+    reiserfs_dc_set_size(dc, size);					\
+    set_le16(dc, dc2_reserved, 0);					\
+})
+
+/* max and min number of keys in internal node */
+#define REISERFS_INT_MAX(bh)	\
+	((REISERFS_NODE_SPACE(bh->b_size) - REISERFS_DC_SIZE) /		\
+	 (REISERFS_KEY_SIZE+REISERFS_DC_SIZE))
+
+#define REISERFS_INT_MIN(bh)	(REISERFS_INT_MAX(bh) / 2)
+
+/* get key */
+#define reiserfs_int_key_at(bh,item_num)				\
+	((reiserfs_key_t * )((bh)->b_data + REISERFS_NODEH_SIZE) +	\
+	 (item_num) )
+
+/* Get disk child by buffer header and position in the tree node. */
+#define reiserfs_int_at(p_s_bh,n_pos)					\
+	((reiserfs_dc_t *) ((p_s_bh)->b_data + REISERFS_NODEH_SIZE +	\
+			    reiserfs_node_items(p_s_bh) * REISERFS_KEY_SIZE +\
+			    REISERFS_DC_SIZE * (n_pos)))
+
+#define reiserfs_int_head(bh)						\
+	((reiserfs_nh_get_level (((reiserfs_node_head_t *)((bh)->b_data))) >	\
+	  LEAF_LEVEL) &&						\
+	 (reiserfs_nh_get_level (((reiserfs_node_head_t *)((bh)->b_data))) <=	\
+	  REISERFS_TREE_HEIGHT_MAX))
+
+extern int reiserfs_internal_correct (reiserfs_bh_t *bh);
+
+extern int reiserfs_internal_print (FILE * fp, 
+				    reiserfs_bh_t * bh, 
+				    int first, int last);
+
+extern int reiserfs_internal_get_pos (reiserfs_bh_t * bh, 
+				      unsigned long block);
+
+#endif
diff --git a/include/reiserfs/internal_balance.h b/include/reiserfs/internal_balance.h
new file mode 100644
index 0000000..fd60c7b
--- /dev/null
+++ b/include/reiserfs/internal_balance.h
@@ -0,0 +1,14 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_IB_H
+#define REISERFS_IB_H
+
+extern int reiserfs_ib_balance (reiserfs_tb_t * tb,
+				int h, int child_pos,
+				reiserfs_ih_t * insert_key,
+				reiserfs_bh_t ** insert_ptr);
+
+#endif
diff --git a/include/reiserfs/journal.h b/include/reiserfs/journal.h
new file mode 100644
index 0000000..c995bc9
--- /dev/null
+++ b/include/reiserfs/journal.h
@@ -0,0 +1,211 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_JOURNAL_H
+#define REISERFS_JOURNAL_H
+
+#define reiserfs_jp_get_start(jp)	   get_le32(jp, jp_start)
+#define reiserfs_jp_set_start(jp,val)	   set_le32(jp, jp_start, val)
+
+#define reiserfs_jp_get_dev(jp)		   get_le32 (jp, jp_dev)
+#define reiserfs_jp_set_dev(jp,val)	   set_le32 (jp, jp_dev, val)
+
+#define reiserfs_jp_get_size(jp)	   get_le32 (jp, jp_size)
+#define reiserfs_jp_set_size(jp,val)	   set_le32 (jp, jp_size, val)
+
+#define reiserfs_jp_get_tlen(jp)	   get_le32 (jp, jp_tlen)
+#define reiserfs_jp_set_tlen(jp,val)	   set_le32 (jp, jp_tlen, val)
+
+#define reiserfs_jp_get_magic(jp)	   get_le32 (jp, jp_magic)
+#define reiserfs_jp_set_magic(jp,val)	   set_le32 (jp, jp_magic, val)
+
+#define NEED_TUNE 0xffffffff
+
+#define reiserfs_jp_get_max_batch(jp)	   get_le32 (jp, jp_max_batch)
+#define reiserfs_jp_set_max_batch(jp,val)  set_le32 (jp, jp_max_batch, val)
+
+#define reiserfs_jp_get_commit_age(jp)     get_le32 (jp, jp_commit_age)
+#define reiserfs_jp_set_commit_age(jp,val) set_le32 (jp, jp_commit_age, val)
+
+#define reiserfs_jp_get_trans_age(jp)	   get_le32 (jp, jp_trans_age)
+#define reiserfs_jp_set_trans_age(jp,val)  set_le32 (jp, jp_trans_age, val)
+
+/* must be correct to keep the desc and commit structs at 4k */
+/* first block written in a commit.  BUG, not 64bit safe */
+struct reiserfs_journal_desc {
+    /* id of commit */
+    __u32 j2_trans_id ;	
+    /* length of commit. len +1 is the commit block */
+    __u32 j2_len ;	
+    /* mount id of this trans*/
+    __u32 j2_mount_id ;	
+    /* real locations for each block */    
+    __u32 j2_realblock[1] ; 
+};
+
+#define reiserfs_jd_magic(bh) (bh->b_data + bh->b_size - 12)
+
+#define reiserfs_jd_head(bh)		((struct reiserfs_journal_desc *)bh->b_data)
+
+#define reiserfs_jd_get_trans(bh)	get_le32 (reiserfs_jd_head (bh), j2_trans_id)
+#define reiserfs_jd_set_trans(bh,val)	set_le32 (reiserfs_jd_head (bh), j2_trans_id, val)
+
+#define reiserfs_jd_get_len(bh)		get_le32 (reiserfs_jd_head (bh), j2_len)
+#define reiserfs_jd_set_len(bh,val)	set_le32 (reiserfs_jd_head (bh), j2_len, val)
+
+#define reiserfs_jd_get_mount(bh)	get_le32 (reiserfs_jd_head (bh), j2_mount_id)
+#define reiserfs_jd_set_mount(bh,val)	set_le32 (reiserfs_jd_head (bh), j2_mount_id, val)
+    
+
+/* last block written in a commit BUG, not 64bit safe */
+struct reiserfs_journal_commit {
+    __u32 j3_trans_id ;	 /* must match j_trans_id from the desc block */
+    __u32 j3_len ;	 /* ditto */
+    __u32 j3_realblock[1] ; /* real locations for each block */
+} ;
+
+#define reiserfs_jc_head(bh) ((struct reiserfs_journal_commit *)bh->b_data)
+
+#define reiserfs_jc_get_trans(bh)	 get_le32 (reiserfs_jc_head(bh), j3_trans_id)
+#define reiserfs_jc_set_trans(bh,val)	 set_le32 (reiserfs_jc_head(bh), j3_trans_id, val)
+
+#define reiserfs_jc_get_len(bh)	get_le32 (reiserfs_jc_head(bh), j3_len)
+#define reiserfs_jc_set_len(bh,val)	 set_le32 (reiserfs_jc_head(bh), j3_len, val)
+
+
+/* set/get fields of journal header with these defines */
+#define reiserfs_jh_get_mount(jh)	get_le32 (jh, jh_mount_id)
+#define reiserfs_jh_set_mount(jh,val)	set_le32 (jh, jh_mount_id, val)
+
+#define reiserfs_jh_get_flushed(jh)	get_le32 (jh, jh_last_flush_trans_id)
+#define reiserfs_jh_set_flushed(jh,val)	set_le32 (jh, jh_last_flush_trans_id, val)
+
+#define reiserfs_jh_get_start(jh)	get_le32 (jh, jh_flush_offset)
+#define reiserfs_jh_set_start(jh,val)	set_le32 (jh, jh_flush_offset, val)
+
+
+/* Journal Transaction Half */
+#define reiserfs_jt_half(blocksize)				\
+	((blocksize - sizeof (struct reiserfs_journal_desc) +	\
+	  sizeof (__u32) - 12) / sizeof (__u32))
+
+
+/* journal default settings */
+#define JOURNAL_MIN_SIZE 	512
+
+/* biggest possible single transaction, don't change for now (8/3/99) */
+#define JOURNAL_TRANS_MAX 	1024
+
+/* need to check whether it works */
+#define JOURNAL_TRANS_MIN 	256
+/* default journal size / max trans length */
+#define JOURNAL_DEFAULT_RATIO 	8
+#define JOURNAL_MIN_RATIO 	2
+/* max blocks to batch into one transaction, don't make this 
+   any bigger than 900 */
+#define JOURNAL_MAX_BATCH   	900
+
+#define JOURNAL_MAX_COMMIT_AGE 	30
+#define JOURNAL_MAX_TRANS_AGE 	30
+
+/* journal max size is a maximum number of blocks pointed by first bitmap -
+   REISERFS_DISK_OFFSET - superblock - first bitmap - journal herader */
+#define reiserfs_journal_max(sb_nr,blocksize)			\
+	blocksize * 8 - (sb_nr + 1 + 1 + 1)
+
+#define reiserfs_journal_default(sb_nr,blocksize)		\
+	(unsigned long long)					\
+	((8192 > reiserfs_journal_max (sb_nr,blocksize)) ?	\
+	 reiserfs_journal_max (sb_nr,blocksize) : 8192)
+
+struct reiserfs_trans {
+    unsigned long mount_id;
+    unsigned long trans_id;
+    unsigned long desc_blocknr;
+    unsigned long trans_len;
+    unsigned long commit_blocknr;
+    unsigned long next_trans_offset;
+};
+
+typedef struct reiserfs_trans reiserfs_trans_t;
+
+extern unsigned long reiserfs_journal_hostsize (reiserfs_sb_t *sb);
+
+extern int reiserfs_journal_block (reiserfs_filsys_t *, 
+				   unsigned long block);
+
+extern int reiserfs_journal_desc_valid (reiserfs_bh_t *);
+
+extern int reiserfs_journal_get_transactions (reiserfs_filsys_t *, 
+					      reiserfs_trans_t *,
+					      reiserfs_trans_t *);
+
+typedef void (*action_on_trans_t) (reiserfs_filsys_t *, 
+				   reiserfs_trans_t *);
+
+extern void reiserfs_journal_by_transaction (reiserfs_filsys_t *, 
+					     action_on_trans_t);
+
+typedef void (*action_on_block_t) (reiserfs_filsys_t *, 
+				   reiserfs_trans_t *,
+				   unsigned int index,
+				   unsigned long in_journal,
+				   unsigned long in_place);
+
+extern void reiserfs_journal_foreach (reiserfs_filsys_t * fs, 
+				      reiserfs_trans_t * trans,
+				      action_on_block_t action);
+
+extern int reiserfs_journal_open (reiserfs_filsys_t *, 
+				  char *, int flags);
+
+extern int reiserfs_journal_params_check(reiserfs_filsys_t *fs);
+
+extern int reiserfs_journal_create (reiserfs_filsys_t * fs, 
+				    char * j_filename,
+				    unsigned long offset, 
+				    unsigned long len, 
+				    int transaction_max_size);
+
+extern int reiserfs_journal_opened (reiserfs_filsys_t *);
+
+extern void reiserfs_journal_flush (reiserfs_filsys_t * fs);
+
+extern void reiserfs_journal_free (reiserfs_filsys_t * fs);
+
+extern void reiserfs_journal_close (reiserfs_filsys_t *);
+
+extern void reiserfs_journal_reopen (reiserfs_filsys_t * fs, int flag);
+
+extern int reiserfs_journal_replay (reiserfs_filsys_t * fs);
+
+extern __u32 reiserfs_journal_trans_age (void);
+
+extern __u32 reiserfs_journal_commit_age (void);
+
+extern __u32 reiserfs_journal_batch (unsigned long journal_trans_max);
+
+extern __u32 reiserfs_journal_tlen (__u32 desired, 
+				    __u32 journal_size, 
+				    int blocksize, 
+				    int verbose);
+
+extern unsigned int reiserfs_journal_start_must (reiserfs_filsys_t * fs);
+
+extern int reiserfs_journal_fits (unsigned long sb_nr, 
+				  unsigned int block_size,
+				  unsigned long block_count, 
+				  unsigned long journal_size);
+
+extern void reiserfs_journal_print_params (FILE * fp, 
+					   reiserfs_journal_param_t * jp);
+
+extern void reiserfs_journal_print_header (reiserfs_filsys_t * fs);
+
+extern void reiserfs_journal_print (reiserfs_filsys_t *);
+
+extern int reiserfs_print_jdesc (FILE * fp, reiserfs_bh_t * bh);
+
+#endif
diff --git a/include/reiserfs/key.h b/include/reiserfs/key.h
new file mode 100644
index 0000000..55081c9
--- /dev/null
+++ b/include/reiserfs/key.h
@@ -0,0 +1,126 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_KEY_H
+#define REISERFS_KEY_H
+
+/* set/get fields of keys on disk with these defines */
+#define reiserfs_key_get_did(k)		get_le32 (k, k2_dir_id)
+#define reiserfs_key_set_did(k,val)	set_le32 (k, k2_dir_id, val)
+
+#define reiserfs_key_get_oid(k)		get_le32 (k, k2_objectid)
+#define reiserfs_key_set_oid(k,val)	set_le32 (k, k2_objectid, val)
+
+#define reiserfs_key_get_off1(k)	get_le32 (k, u.k2_offset_v1.k_offset)
+#define reiserfs_key_set_off1(k,val)	set_le32 (k, u.k2_offset_v1.k_offset, val)
+
+#define reiserfs_key_get_uni(k)		get_le32 (k, u.k2_offset_v1.k_uniqueness)
+#define reiserfs_key_set_uni(k,val)	set_le32 (k, u.k2_offset_v1.k_uniqueness, val)
+
+#define REISERFS_KEY_SIZE		(sizeof(reiserfs_key_t))
+#define REISERFS_KEY_SHSIZE		8
+
+
+// values for k_uniqueness field of the reiserfs_key_t
+#define UNI_SD		0
+#define UNI_DE		500
+#define UNI_DE		500
+#define UNI_DIRECT	0xffffffff
+#define UNI_EXT		0xfffffffe
+#define UNI_UNKN	555
+
+/* values for k_type field of the reiserfs_key_t */
+#define TYPE_STAT_DATA 0x0
+#define TYPE_EXTENT    0x1
+#define TYPE_DIRECT    0X2
+#define TYPE_DIRENTRY  0X3
+#define TYPE_LAST      0x4
+#define TYPE_UNKNOWN   0xf
+
+#define KEY_FORMAT_1 0
+#define KEY_FORMAT_2 1
+#define KEY_FORMAT_UNDEFINED 15
+
+ /* Our function for comparing keys can compare keys of different lengths.
+    It takes as a parameter the length of the keys it is to compare. These
+    defines are used in determining what is to be passed to it as that
+    parameter. */
+#define REISERFS_KEY_LEN     4
+#define REISERFS_KEY_SHORT_LEN    2
+
+/* there are 4 types of items: stat data, directory item, extent, direct.
+   FIXME: This table does not describe new key format
++-------------------+------------+--------------+------------+
+|	            |  k_offset  | k_uniqueness | mergeable? |
++-------------------+------------+--------------+------------+
+|     stat data     |	0        |      0       |   no       |
++-------------------+------------+--------------+------------+
+| 1st directory item| OFFSET_DOT |DIRENTRY_UNIQU|   no       | 
+| non 1st directory | hash value |              |   yes      |
+|     item          |            |              |            |
++-------------------+------------+--------------+------------+
+| extent item     | offset + 1 |TYPE_EXTENT | if not the first object EXT item
++-------------------+------------+--------------+------------+
+| direct item       | offset + 1 |TYPE_DIRECT   | if not the first object direct item 
++-------------------+------------+--------------+------------+
+*/
+
+#define reiserfs_key_stat(p_s_key) 	\
+	(reiserfs_key_get_type (p_s_key) == TYPE_STAT_DATA )
+#define reiserfs_key_dir(p_s_key)	\
+	(reiserfs_key_get_type (p_s_key) == TYPE_DIRENTRY )
+#define reiserfs_key_direct(p_s_key) 	\
+	(reiserfs_key_get_type (p_s_key) == TYPE_DIRECT )
+#define reiserfs_key_ext(p_s_key)	\
+	(reiserfs_key_get_type (p_s_key) == TYPE_EXTENT )
+#define reiserfs_key_unkn(p_s_key)	\
+	(reiserfs_key_get_type (p_s_key) >= TYPE_LAST)
+
+#define MAX_KEY1_OFFSET	 0xffffffff
+#define MAX_KEY2_OFFSET  0xfffffffffffffffLL
+
+/* hash value occupies 24 bits starting from 7 up to 30 */
+#define OFFSET_HASH(offset) ((offset) & 0x7fffff80)
+/* generation number occupies 7 bits starting from 0 up to 6 */
+#define OFFSET_GEN(offset) ((offset) & 0x0000007f)
+
+#define OFFSET_SD  0
+#define OFFSET_DOT 1
+#define OFFSET_DOT_DOT 2
+
+extern const reiserfs_key_t MIN_KEY;
+extern const reiserfs_key_t MAX_KEY;
+extern const reiserfs_key_t root_dir_key;
+extern const reiserfs_key_t parent_root_dir_key;
+extern reiserfs_key_t lost_found_dir_key;
+
+extern void reiserfs_key_copy (reiserfs_key_t * to, const reiserfs_key_t * from);
+extern void reiserfs_key_copy2 (reiserfs_key_t * to, const reiserfs_key_t * from);
+extern int  reiserfs_key_comp (const void * k1, const void * k2);
+extern int  reiserfs_key_comp3 (const void * k1, const void * k2);
+extern int  reiserfs_key_comp2 (const void * p_s_key1, const void * p_s_key2);
+
+extern int reiserfs_key_format (const reiserfs_key_t * key);
+
+extern unsigned long long reiserfs_key_get_off (const reiserfs_key_t * key);
+
+extern int reiserfs_key_get_type (const reiserfs_key_t * key);
+
+extern char * reiserfs_key_name (const reiserfs_key_t * key);
+
+extern void reiserfs_key_set_type (int format, 
+				   reiserfs_key_t * key, 
+				   int type);
+
+extern void reiserfs_key_set_off (int format, 
+				  reiserfs_key_t * key, 
+				  unsigned long long offset);
+
+extern void reiserfs_key_set_sec (int format, 
+				  reiserfs_key_t * key, 
+				  unsigned long long offset, 
+				  int type);
+
+#endif
diff --git a/include/reiserfs/leaf.h b/include/reiserfs/leaf.h
new file mode 100644
index 0000000..fda829f
--- /dev/null
+++ b/include/reiserfs/leaf.h
@@ -0,0 +1,197 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ *
+ * Leaf balancing method declarations.
+ *
+ */
+
+#ifndef REISERFS_LEAF_H
+#define REISERFS_LEAF_H
+
+#include <reiserfs/types.h>
+#include <misc/bitops.h>
+
+/* size of item header     */
+#define REISERFS_IH_SIZE (sizeof(reiserfs_ih_t))
+
+/* set/get fields of item head on disk with these defines */
+#define reiserfs_ih_get_entries(ih)	get_le16 (ih, u.ih2_entry_count)
+#define reiserfs_ih_set_entries(ih,val)	set_le16 (ih, u.ih2_entry_count, val)
+
+#define reiserfs_ih_get_free(ih)	get_le16 (ih, u.ih2_free_space)
+#define reiserfs_ih_set_free(ih,val)	set_le16 (ih, u.ih2_free_space, 0)
+
+#define reiserfs_ih_get_len(ih)		get_le16 (ih, ih2_item_len)
+#define reiserfs_ih_set_len(ih,val)	set_le16 (ih, ih2_item_len, val)
+
+#define reiserfs_ih_get_loc(ih)		get_le16 (ih, ih2_item_location)
+#define reiserfs_ih_set_loc(ih,val)	set_le16 (ih, ih2_item_location, val)
+
+#define reiserfs_ih_format_v1(ih) (reiserfs_ih_get_format (ih) == KEY_FORMAT_1)
+
+#define IH_Unreachable 0
+#define IH_Was_Tail    1
+#define IH_Checked     2
+#define IH_Writable    3
+
+/* Unreachable bit is set on tree rebuilding and is cleared in semantic pass */
+#define reiserfs_ih_clflags(ih)	reiserfs_ih_set_flags (ih, 0)
+
+#define reiserfs_ih_isreach(ih)						\
+	(!(reiserfs_ih_get_flags (ih) & (1 << IH_Unreachable)))
+	
+#define reiserfs_ih_clunreach(ih) reiserfs_ih_set_flags (ih,		\
+	reiserfs_ih_get_flags (ih) & ~(1 << IH_Unreachable))
+
+#define reiserfs_ih_mkunreach(ih) reiserfs_ih_set_flags (ih,		\
+	reiserfs_ih_get_flags (ih) |	(1 << IH_Unreachable))
+
+#define reiserfs_ih_wastail(ih)						\
+	(reiserfs_ih_get_flags (ih) & (1 << IH_Was_Tail))
+	
+#define reiserfs_ih_mktail(ih) reiserfs_ih_set_flags (ih,		\
+	reiserfs_ih_get_flags (ih) | (1 << IH_Was_Tail))
+
+#define reiserfs_ih_cltail(ih) reiserfs_ih_set_flags (ih,		\
+	reiserfs_ih_get_flags (ih) & ~(1 << IH_Was_Tail))
+
+#define reiserfs_ih_ischeck(ih)						\
+	(reiserfs_ih_get_flags (ih) & (1 << IH_Checked))
+	
+#define reiserfs_ih_mkcheck(ih) reiserfs_ih_set_flags (ih,		\
+	reiserfs_ih_get_flags (ih) | (1 << IH_Checked))
+
+#define reiserfs_ih_clcheck(ih) reiserfs_ih_set_flags (ih,		\
+	reiserfs_ih_get_flags (ih) & ~(1 << IH_Checked))
+
+#define reiserfs_ih_iswrite(ih)						\
+	(reiserfs_ih_get_flags (ih) & (1 << IH_Writable))
+	
+#define reiserfs_ih_mkwrite(ih) reiserfs_ih_set_flags (ih,		\
+	reiserfs_ih_get_flags (ih) | (1 << IH_Writable))
+	
+#define reiserfs_ih_clwrite(ih) reiserfs_ih_set_flags (ih,		\
+	reiserfs_ih_get_flags (ih) & ~(1 << IH_Writable))
+
+
+#define reiserfs_ih_stat(p_s_ih) 	reiserfs_key_stat(&((p_s_ih)->ih_key))
+#define reiserfs_ih_dir(p_s_ih)		reiserfs_key_dir(&((p_s_ih)->ih_key))
+#define reiserfs_ih_direct(p_s_ih) 	reiserfs_key_direct(&((p_s_ih)->ih_key))
+#define reiserfs_ih_ext(p_s_ih) 	reiserfs_key_ext(&((p_s_ih)->ih_key))
+
+
+/* maximal length of item */
+#define REISERFS_ITEM_MAX(block_size)					\
+	(block_size - REISERFS_NODEH_SIZE - REISERFS_IH_SIZE)
+
+#define REISERFS_ITEM_MIN	1
+
+#define REISERFS_DIRECT_MAX(size)					\
+	((size) - REISERFS_NODEH_SIZE - 2 * REISERFS_IH_SIZE -		\
+	 REISERFS_SD_SIZE - REISERFS_EXT_SIZE)
+
+/* get the item header */ 
+#define reiserfs_ih_at(bh,item_num)					\
+	((reiserfs_ih_t * )((bh)->b_data + REISERFS_NODEH_SIZE) + (item_num))
+
+/* get the key */
+#define reiserfs_ih_key_at(bh,item_num)					\
+	(&(reiserfs_ih_at(bh,item_num)->ih_key))
+
+/* get item body */
+#define reiserfs_item_at(bh,item_num)					\
+	( (bh)->b_data + reiserfs_ih_get_loc (reiserfs_ih_at((bh),(item_num))))
+
+ /* following defines use reiserfs buffer header and item header */
+ /* get item body */
+#define reiserfs_item_by_ih(bh,ih) ((bh)->b_data + reiserfs_ih_get_loc(ih))
+
+#define reiserfs_leaf_head(bh)						\
+	(reiserfs_nh_get_level ((reiserfs_node_head_t *)((bh)->b_data))	\
+	 == LEAF_LEVEL)
+
+/* check whether byte number 'offset' is in this item */
+#define reiserfs_item_has_off(p_s_ih, n_offset, n_blocksize)		\
+	(reiserfs_key_get_off(&(p_s_ih)->ih_key) <= (n_offset) &&	\
+	 reiserfs_key_get_off(&(p_s_ih)->ih_key) +			\
+	 reiserfs_leaf_ibytes(p_s_ih,n_blocksize) > (n_offset) )
+
+#define reiserfs_item_has_key(p_s_ih, p_s_key, n_blocksize)		\
+	(!reiserfs_key_comp2(p_s_ih, p_s_key) &&			\
+	 reiserfs_item_has_off(p_s_ih, reiserfs_key_get_off (p_s_key),	\
+			       n_blocksize))
+
+#define reiserfs_item_off_at(ih, pos, bs)				\
+	(reiserfs_key_get_off (&(ih)->ih_key) +				\
+	 (pos) * (reiserfs_ih_direct(ih) ? 1 : (bs)))
+
+#define reiserfs_dir(ih, item)						\
+	((reiserfs_ih_stat(ih) && !not_a_directory(item)) ||		\
+	 reiserfs_ih_dir(ih))
+
+#define reiserfs_item_count(ih)						\
+	(reiserfs_ih_ext(ih) ? reiserfs_ext_count(ih) :                 \
+	 reiserfs_ih_direct(ih) ? reiserfs_ih_get_len(ih) :              \
+	 reiserfs_ih_dir(ih) ? reiserfs_ih_get_entries(ih) :            \
+	 reiserfs_ih_stat(ih) ? 1 : 0)
+
+extern void reiserfs_leaf_mkempty (reiserfs_bh_t *bh);
+
+extern int reiserfs_leaf_mergeable (reiserfs_ih_t *left, 
+				    reiserfs_ih_t *right, 
+				    int bsize);
+
+extern int reiserfs_leaf_count_items(reiserfs_bh_t *bh);
+
+extern int reiserfs_leaf_free_count(reiserfs_bh_t *bh);
+
+extern int reiserfs_leaf_estimate_items(reiserfs_bh_t * bh);
+
+extern int reiserfs_leaf_valid(reiserfs_bh_t *bh);
+
+typedef void (*ih_func_t) (reiserfs_ih_t * ih);
+typedef void (*item_func_t) (reiserfs_bh_t * bh, 
+			     reiserfs_ih_t * ih);
+
+extern void reiserfs_leaf_traverse(reiserfs_bh_t * bh, 
+				   ih_func_t action,
+				   item_func_t * actions);
+
+extern void reiserfs_leaf_delete_item (reiserfs_filsys_t *, 
+				       reiserfs_bh_t * bh, 
+				       int item_num);
+
+extern void reiserfs_leaf_delete_entry (reiserfs_filsys_t *, 
+					reiserfs_bh_t * bh,
+					int item_num, 
+					int entry_num, 
+					int del_count);
+
+extern int reiserfs_leaf_correct_at (reiserfs_filsys_t *, 
+				     reiserfs_ih_t *, char *,
+				     unfm_func_t, int);
+
+extern __u32 reiserfs_leaf_ibytes (const reiserfs_ih_t * ih, 
+				   int blocksize);
+
+extern int reiserfs_leaf_print(FILE * fp, 
+			       reiserfs_filsys_t * fs, 
+			       reiserfs_bh_t * bh,
+			       int print_mode, 
+			       int first, 
+			       int last);
+
+/* key format is stored in 12 bits starting from 0-th of item_head's ih2_format*/
+extern __u16 reiserfs_ih_get_format(const reiserfs_ih_t *ih);
+extern void reiserfs_ih_set_format(reiserfs_ih_t *ih, __u16 val);
+extern __u16 reiserfs_ih_get_flags(const reiserfs_ih_t *ih);
+extern void reiserfs_ih_set_flags(reiserfs_ih_t *ih, __u16 val);
+
+enum leaf_print {
+	LP_LEAF_DETAILS = 0x1,
+	LP_DIRECT_ITEMS = 0x2,
+	LP_LAST
+};
+
+#endif
diff --git a/include/reiserfs/leaf_balance.h b/include/reiserfs/leaf_balance.h
new file mode 100644
index 0000000..8eda71e
--- /dev/null
+++ b/include/reiserfs/leaf_balance.h
@@ -0,0 +1,42 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_LB_H
+#define REISERFS_LB_H
+
+extern void reiserfs_lb_delete_item (reiserfs_filsys_t * fs,
+				     reiserfs_bufinfo_t * bi,
+				     int first, 
+				     int del_num);
+
+extern void reiserfs_lb_delete_unit (reiserfs_filsys_t * fs,
+				     reiserfs_bufinfo_t * bi, 
+				     int cut_item_num,
+				     int pos_in_item, 
+				     int cut_size);
+
+extern void reiserfs_lb_delete (reiserfs_filsys_t * fs,
+				reiserfs_bufinfo_t * cur_bi,
+				int last_first, 
+				int first, 
+				int del_num, 
+				int del_bytes);
+
+extern int reiserfs_lb_balance (reiserfs_tb_t * tb,
+				reiserfs_ih_t * ih,
+				const char * body,
+				int flag,
+				int zeros_number,
+				reiserfs_ih_t * insert_key,
+				reiserfs_bh_t ** insert_ptr);
+
+extern int reiserfs_lb_copy (reiserfs_filsys_t * fs,
+			     reiserfs_bufinfo_t * dest_bi, 
+			     reiserfs_bh_t * src,
+			     int last_first, 
+			     int cpy_num,
+			     int cpy_bytes);
+
+#endif
diff --git a/include/reiserfs/libreiserfs.h b/include/reiserfs/libreiserfs.h
new file mode 100644
index 0000000..48469ea
--- /dev/null
+++ b/include/reiserfs/libreiserfs.h
@@ -0,0 +1,46 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_LIBREISER4_H
+#define REISERFS_LIBREISER4_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <reiserfs/types.h>
+#include <reiserfs/bitmap.h>
+#include <reiserfs/buffer.h>
+#include <reiserfs/filesystem.h>
+#include <reiserfs/journal.h>
+#include <reiserfs/super.h>
+#include <reiserfs/tree.h>
+#include <reiserfs/key.h>
+#include <reiserfs/node.h>
+#include <reiserfs/leaf.h>
+#include <reiserfs/direntry.h>
+#include <reiserfs/internal.h>
+#include <reiserfs/extent.h>
+#include <reiserfs/stat.h>
+#include <reiserfs/fix_node.h>
+#include <reiserfs/tree_balance.h>
+#include <reiserfs/internal_balance.h>
+#include <reiserfs/leaf_balance.h>
+#include <reiserfs/badblock.h>
+#include <reiserfs/objmap.h>
+#include <reiserfs/policy.h>
+#include <reiserfs/print.h>
+#include <reiserfs/hash.h>
+
+#ifdef LIBREISERFS_READY
+extern const char *libreiserfs_version(void);
+extern int libreiserfs_max_interface_version(void);
+extern int libreiserfs_min_interface_version(void);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/include/reiserfs/node.h b/include/reiserfs/node.h
new file mode 100644
index 0000000..87f6d34
--- /dev/null
+++ b/include/reiserfs/node.h
@@ -0,0 +1,92 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_NODE_H
+#define REISERFS_NODE_H
+
+/* 
+ * Picture represents a leaf of internal tree
+ *  ______________________________________________________
+ * |      |  Array of     |                   |           |
+ * |Block |  Object-Item  |      F r e e      |  Objects- |
+ * | head |  Headers      |     S p a c e     |   Items   |
+ * |______|_______________|___________________|___________|
+ */
+
+/* Header of a disk block.  More precisely, header of a formatted leaf
+   or internal node, and not the header of an unformatted node. */
+struct reiserfs_node_head {       
+    __u16 blk2_level;        /* Level of a block in the tree. */
+    __u16 blk2_nr_item;      /* Number of keys/items in a block. */
+    __u16 blk2_free_space;   /* Block free space in bytes. */
+    __u16 blk_reserved;
+    __u32 reserved [4];
+};
+
+typedef struct reiserfs_node_head reiserfs_node_head_t;
+
+#define REISERFS_NODEH_SIZE (sizeof(reiserfs_node_head_t))
+
+/* set/get fields of block head on disk with these defines */
+#define reiserfs_nh_get_level(blkh)	get_le16 (blkh, blk2_level)
+#define reiserfs_nh_set_level(blkh,val)	set_le16 (blkh, blk2_level, val)
+
+#define reiserfs_nh_get_items(blkh)	get_le16 (blkh, blk2_nr_item)
+#define reiserfs_nh_set_items(blkh,val)	set_le16 (blkh, blk2_nr_item, val)
+
+#define reiserfs_nh_get_free(blkh)	get_le16 (blkh, blk2_free_space)
+#define reiserfs_nh_set_free(blkh,val)	set_le16 (blkh, blk2_free_space, val)
+
+/*
+ * values for blk_type field
+ */
+
+#define FREE_LEVEL  0 /* Node of this level is out of the tree. */
+#define LEAF_LEVEL  1 /* Leaf node level.                       */
+
+/* Given the buffer head of a formatted node, resolve to the block head of that node. */
+#define NODE_HEAD(p_s_bh)  ((reiserfs_node_head_t *)((p_s_bh)->b_data))
+
+#define reiserfs_node_items(bh)	reiserfs_nh_get_items (NODE_HEAD(bh))
+#define reiserfs_node_level(bh)	reiserfs_nh_get_level (NODE_HEAD(bh))
+#define reiserfs_node_free(bh)	reiserfs_nh_get_free (NODE_HEAD(bh))
+
+/* Does the buffer contain a disk block which is in the tree. */
+#define REISERFS_NODE_INTREE(p_s_bh) \
+	(reiserfs_nh_get_level(NODE_HEAD (p_s_bh)) != FREE_LEVEL)
+
+#define REISERFS_NODE_SPACE(blocksize)	((blocksize) - REISERFS_NODEH_SIZE)
+
+/* amount of used space in buffer (not including block head) */
+#define reiserfs_node_used(cur) (REISERFS_NODE_SPACE(cur->b_size) -	\
+				 (reiserfs_node_free(cur)))
+
+enum node_type {
+    NT_LEAF	= 0x1,
+    NT_INTERNAL = 0x2,
+    NT_SUPER	= 0x3,
+    NT_JDESC	= 0x4,
+    NT_IH_ARRAY = 0x5,
+    NT_UNKNOWN
+};
+
+typedef enum node_type node_type_t;
+
+extern void reiserfs_node_replace_key (reiserfs_bh_t * dest, int n_dest,
+				       reiserfs_bh_t * src, int n_src);
+
+extern void reiserfs_node_forget(reiserfs_filsys_t *fs, 
+				 unsigned long blk);
+
+
+extern int reiserfs_node_formatted (reiserfs_bh_t * bh, int level);
+extern int reiserfs_node_type (reiserfs_bh_t *bh);
+extern char *reiserfs_node_type_name(int code);
+
+extern void reiserfs_node_print (FILE * fp, 
+				 reiserfs_filsys_t *, 
+				 reiserfs_bh_t * bh, ...);
+
+#endif
diff --git a/include/reiserfs/objmap.h b/include/reiserfs/objmap.h
new file mode 100644
index 0000000..d40375d
--- /dev/null
+++ b/include/reiserfs/objmap.h
@@ -0,0 +1,19 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_OBJMAP_H
+#define REISERFS_OBJMAP_H
+
+/* object identifier for root dir */
+#define REISERFS_ROOT_OBJECTID 2
+#define REISERFS_ROOT_PARENT_OBJECTID 1
+
+extern int reiserfs_objmap_test (reiserfs_filsys_t * fs, __u32 objectid);
+
+extern void reiserfs_objmap_set (reiserfs_filsys_t * fs, __u32 objectid);
+
+extern void reiserfs_objmap_print (FILE * fp, reiserfs_filsys_t * fs);
+
+#endif
diff --git a/include/reiserfs/policy.h b/include/reiserfs/policy.h
new file mode 100644
index 0000000..6af3284
--- /dev/null
+++ b/include/reiserfs/policy.h
@@ -0,0 +1,25 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_POLICY_H
+#define REISERFS_POLICY_H
+
+/* this is aggressive tail suppression policy taken from the kernel */
+/* It should be REISERFS_DIRECT_MAX used here, but sometimes it is not enough,
+ * and items got deleted. */
+#define reiserfs_policy_ext(n_file_size,n_tail_size,n_block_size)	\
+(									\
+  (!(n_tail_size)) ||							\
+  (((n_tail_size) > REISERFS_ITEM_MAX(n_block_size)) ||			\
+   ( (n_file_size) >= (n_block_size) * 4 ) ||				\
+   ( ( (n_file_size) >= (n_block_size) * 3 ) &&				\
+     ( (n_tail_size) >=   (REISERFS_ITEM_MAX(n_block_size))/4) ) ||	\
+   ( ( (n_file_size) >= (n_block_size) * 2 ) &&				\
+     ( (n_tail_size) >=   (REISERFS_ITEM_MAX(n_block_size))/2) ) ||	\
+   ( ( (n_file_size) >= (n_block_size) ) &&				\
+     ( (n_tail_size) >=   (REISERFS_ITEM_MAX(n_block_size) * 3)/4) ) )	\
+)
+
+#endif
diff --git a/include/reiserfs/print.h b/include/reiserfs/print.h
new file mode 100644
index 0000000..6875c6f
--- /dev/null
+++ b/include/reiserfs/print.h
@@ -0,0 +1,29 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_PRINT_H
+#define REISERFS_PRINT_H
+
+#include <stdlib.h>
+
+extern void reiserfs_warning (FILE * fp, const char * fmt, ...);
+
+#define reiserfs_panic(fmt, list...) \
+{\
+	fflush (stdout);\
+	fprintf (stderr, "%s %d %s\n", __FILE__, __LINE__, __FUNCTION__);\
+	reiserfs_warning (stderr, (const char *)fmt, ## list);\
+        reiserfs_warning (stderr, "\n" );\
+        abort ();\
+}
+#define reiserfs_exit(val, fmt, list...) \
+{\
+	fflush (stdout);\
+	reiserfs_warning (stderr, (const char *)fmt, ## list);\
+        reiserfs_warning (stderr, "\n" );\
+        exit (val);\
+}
+
+#endif
diff --git a/include/reiserfs/stat.h b/include/reiserfs/stat.h
new file mode 100644
index 0000000..5c80d3d
--- /dev/null
+++ b/include/reiserfs/stat.h
@@ -0,0 +1,192 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_STAT_H
+#define REISERFS_STAT_H
+
+/* Stat Data on disk (reiserfs version of UFS disk inode minus the address blocks) */
+
+/* The sense of adding union to stat data is to keep a value of real number of
+   blocks used by file.  The necessity of adding such information is caused by
+   existing of files with holes.  Reiserfs should keep number of used blocks
+   for file, but not calculate it from file size (that is not correct for
+   holed files). Thus we have to add additional information to stat data.
+   When we have a device special file, there is no need to get number of used
+   blocks for them, and, accordingly, we doesn't need to keep major and minor
+   numbers for regular files, which might have holes. So this field is being
+   overloaded.  */
+
+struct reiserfs_sd_v1 {
+    __u16 sd_mode;	/* file type, permissions */
+    __u16 sd_nlink;	/* number of hard links */
+    __u16 sd_uid;		/* owner */
+    __u16 sd_gid;		/* group */
+    __u32 sd_size;	/* file size */
+    __u32 sd_atime;	/* time of last access */
+    __u32 sd_mtime;	/* time file was last modified  */
+    __u32 sd_ctime;	/* time inode (stat data) was last changed (except
+                           changes to sd_atime and sd_mtime) */
+    union {
+	__u32 sd_rdev;
+	__u32 sd_blocks;	/* number of blocks file uses */
+    } __attribute__ ((__packed__)) u;
+    __u32 sd_fdb; /* first byte of file which is stored
+				   in a direct item: except that if it
+				   equals 1 it is a symlink and if it
+				   equals MAX_KEY_OFFSET there is no
+				   direct item.  The existence of this
+				   field really grates on me. Let's
+				   replace it with a macro based on
+				   sd_size and our tail suppression
+				   policy.  Someday.  -Hans */
+} __attribute__ ((__packed__));
+
+typedef struct reiserfs_sd_v1 reiserfs_sd_v1_t;
+
+#define REISERFS_SD_SIZE_V1 (sizeof(reiserfs_sd_v1_t))
+
+/* this is used to check sd_size of stat data v1 */
+#define REISERFS_SD_SIZE_MAX_V1 0x7fffffff
+
+// sd_fdb is set to this when there are no direct items in a file
+#define REISERFS_SD_NODIRECT 0xffffffff
+
+/* Stat Data on disk (reiserfs version of UFS disk inode minus the
+   address blocks) */
+struct reiserfs_sd {
+    __u16 sd_mode;	/* file type, permissions */
+    __u16 sd_attrs;
+    __u32 sd_nlink;	/* 32 bit nlink! */
+    __u64 sd_size;	/* 64 bit size!*/
+    __u32 sd_uid;	/* 32 bit uid! */
+    __u32 sd_gid;	/* 32 bit gid! */
+    __u32 sd_atime;	/* time of last access */
+    __u32 sd_mtime;	/* time file was last modified  */
+    __u32 sd_ctime;	/* time inode (stat data) was last changed (except
+                           changes to sd_atime and sd_mtime) */
+    __u32 sd_blocks;
+    union {
+	__u32 sd_rdev;
+	__u32 sd_generation;
+      //__u32 sd_fdb; 
+      /* first byte of file which is stored in a direct item: except that if
+	 it equals 1 it is a symlink and if it equals ~(__u32)0 there is no
+	 direct item.  The existence of this field really grates on me. Let's
+	 replace it with a macro based on sd_size and our tail suppression
+	 policy? */
+  } __attribute__ ((__packed__)) u;
+} __attribute__ ((__packed__));
+//
+// this is 44 bytes long
+//
+
+typedef struct reiserfs_sd reiserfs_sd_t;
+
+#define REISERFS_SD_SIZE (sizeof(reiserfs_sd_t))
+
+/* this is used to check sd_size of stat data v2: max offset which can
+   be reached with a key of format 2 is 60 bits */
+#define REISERFS_SD_SIZE_MAX_V2 0xfffffffffffffffLL
+
+/* reiserfs_sd_v1_t* access macros */
+#define reiserfs_sd_v1_mode(sd)                 (le16_to_cpu((sd)->sd_mode))
+#define reiserfs_set_sd_v1_mode(sd,n)           ((sd)->sd_mode = cpu_to_le16((n)))
+#define reiserfs_sd_v1_nlink(sd)                (le16_to_cpu((sd)->sd_nlink))
+#define reiserfs_set_sd_v1_nlink(sd,n)          ((sd)->sd_nlink = cpu_to_le16((n))) 
+#define reiserfs_sd_v1_uid(sd)                  (le16_to_cpu((sd)->sd_uid))
+#define reiserfs_set_sd_v1_uid(sd,n)            ((sd)->sd_uid = cpu_to_le16((n)))
+#define reiserfs_sd_v1_gid(sd)                  (le16_to_cpu((sd)->sd_gid))
+#define reiserfs_set_sd_v1_gid(sd,n)            ((sd)->sd_gid = cpu_to_le16((n)))
+#define reiserfs_sd_v1_size(sd)                 (le32_to_cpu((sd)->sd_size))
+#define reiserfs_set_sd_v1_size(sd,n)           ((sd)->sd_size = cpu_to_le32((n)))
+#define reiserfs_sd_v1_atime(sd)                (le32_to_cpu((sd)->sd_atime))
+#define reiserfs_set_sd_v1_atime(sd,n)          ((sd)->sd_atime = cpu_to_le32((n)))
+#define reiserfs_sd_v1_mtime(sd)                (le32_to_cpu((sd)->sd_mtime))
+#define reiserfs_set_sd_v1_mtime(sd,n)          ((sd)->sd_mtime = cpu_to_le32((n)))
+#define reiserfs_sd_v1_ctime(sd)                (le32_to_cpu((sd)->sd_ctime))
+#define reiserfs_set_sd_v1_ctime(sd,n)          ((sd)->sd_ctime = cpu_to_le32((n)))
+#define reiserfs_sd_v1_blocks(sd)               (le32_to_cpu((sd)->u.sd_blocks))
+#define reiserfs_set_sd_v1_blocks(sd,n)         ((sd)->u.sd_blocks = cpu_to_le32((n)))
+#define reiserfs_sd_v1_rdev(sd)                 (le32_to_cpu((sd)->u.sd_rdev))
+#define reiserfs_set_sd_v1_rdev(sd,n)           ((sd)->u.sd_rdev = cpu_to_le32((n)))
+#define reiserfs_sd_v1_fdb(sd)			(le32_to_cpu((sd)->sd_fdb))
+#define reiserfs_set_sd_v1_fdb(sd,n)		((sd)->sd_fdb = cpu_to_le32((n)))
+
+/* reiserfs_sd_t */
+#define reiserfs_sd_v2_mode(sd)                 (le16_to_cpu((sd)->sd_mode))
+#define reiserfs_set_sd_v2_mode(sd,n)           ((sd)->sd_mode = cpu_to_le16((n)))
+#define reiserfs_sd_v2_attrs(sd)		(le16_to_cpu((sd)->sd_attrs))
+#define reiserfs_set_sd_v2_attrs(sd,n)		((sd)->sd_attrs = cpu_to_le16((n)))
+#define reiserfs_sd_v2_nlink(sd)                (le32_to_cpu((sd)->sd_nlink))
+#define reiserfs_set_sd_v2_nlink(sd,n)          ((sd)->sd_nlink = cpu_to_le32((n))) 
+#define reiserfs_sd_v2_size(sd)                 (le64_to_cpu((sd)->sd_size))
+#define reiserfs_set_sd_v2_size(sd,n)           ((sd)->sd_size = cpu_to_le64((n)))
+#define reiserfs_sd_v2_uid(sd)                  (le32_to_cpu((sd)->sd_uid))
+#define reiserfs_set_sd_v2_uid(sd,n)            ((sd)->sd_uid = cpu_to_le32((n)))
+#define reiserfs_sd_v2_gid(sd)                  (le32_to_cpu((sd)->sd_gid))
+#define reiserfs_set_sd_v2_gid(sd,n)            ((sd)->sd_gid = cpu_to_le32((n)))
+#define reiserfs_sd_v2_atime(sd)                (le32_to_cpu((sd)->sd_atime))
+#define reiserfs_set_sd_v2_atime(sd,n)          ((sd)->sd_atime = cpu_to_le32((n)))
+#define reiserfs_sd_v2_mtime(sd)                (le32_to_cpu((sd)->sd_mtime))
+#define reiserfs_set_sd_v2_mtime(sd,n)          ((sd)->sd_mtime = cpu_to_le32((n)))
+#define reiserfs_sd_v2_ctime(sd)                (le32_to_cpu((sd)->sd_ctime))
+#define reiserfs_set_sd_v2_ctime(sd,n)          ((sd)->sd_ctime = cpu_to_le32((n)))
+#define reiserfs_sd_v2_blocks(sd)               (le32_to_cpu((sd)->sd_blocks))
+#define reiserfs_set_sd_v2_blocks(sd,n)         ((sd)->sd_blocks = cpu_to_le32((n)))
+#define reiserfs_sd_v2_rdev(sd)                 (le32_to_cpu((sd)->u.sd_rdev))
+#define reiserfs_set_sd_v2_rdev(sd,n)           ((sd)->u.sd_rdev = cpu_to_le32((n)))
+
+extern void reiserfs_stat_init (int blocksize, int key_format, 
+				__u32 dirid, __u32 objectid, 
+				reiserfs_ih_t * ih, void * sd);
+
+extern void reiserfs_stat_set (int field, reiserfs_ih_t * ih, 
+			       void * sd, void * value);
+
+extern void reiserfs_stat_get (int field, reiserfs_ih_t * ih, 
+			       void * sd, void * value);
+
+/*  access to stat data fields */
+#define STAT_MODE	0
+#define STAT_SIZE	1
+#define STAT_NLINK	2
+#define STAT_BLOCKS	3
+#define STAT_FDB	4
+
+#define reiserfs_stat_get_mode(ih, sd, pmode)		\
+	reiserfs_stat_get(STAT_MODE, ih, sd, pmode)
+#define reiserfs_stat_set_mode(ih, sd, pmode)		\
+	reiserfs_stat_set(STAT_MODE, ih, sd, pmode)
+
+#define reiserfs_stat_get_size(ih, sd, psize)		\
+	reiserfs_stat_get(STAT_SIZE, ih, sd, psize)
+#define reiserfs_stat_set_size(ih, sd, psize)		\
+	reiserfs_stat_set(STAT_SIZE, ih, sd, psize)
+
+#define reiserfs_stat_get_blocks(ih, sd, pblocks)	\
+	reiserfs_stat_get(STAT_BLOCKS, ih, sd, pblocks)
+	
+#define reiserfs_stat_set_blocks(ih, sd, pblocks)	\
+	reiserfs_stat_set(STAT_BLOCKS, ih, sd, pblocks)
+
+#define reiserfs_stat_get_nlink(ih, sd, pnlink)		\
+	reiserfs_stat_get(STAT_NLINK, ih, sd, pnlink)
+	
+#define reiserfs_stat_set_nlink(ih, sd, pnlink)		\
+	reiserfs_stat_set(STAT_NLINK, ih, sd, pnlink)
+
+#define reiserfs_stat_get_fdb(ih, sd, pfdb)		\
+	reiserfs_stat_get(STAT_FDB, ih, sd, pfdb)
+	
+#define reiserfs_stat_set_fdb(ih, sd, pfdb)		\
+	reiserfs_stat_set(STAT_FDB, ih, sd, pfdb)
+
+
+extern int reiserfs_print_stat_data (FILE * fp, 
+				     reiserfs_bh_t * bh, 
+				     reiserfs_ih_t * ih, 
+				     int alltimes);
+
+#endif
diff --git a/include/reiserfs/super.h b/include/reiserfs/super.h
new file mode 100644
index 0000000..3598031
--- /dev/null
+++ b/include/reiserfs/super.h
@@ -0,0 +1,156 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_SUPER_H
+#define REISERFS_SUPER_H
+
+#define REISERFS_SB_SIZE_V1 (sizeof(reiserfs_sb_v1_t)) /* 76 bytes */
+
+#define reiserfs_sb_jp(sb) (&((sb)->s_v1.sb_journal))
+
+/* values for sb_version field of struct reiserfs_super_block. sb_version is
+   only reliable on filesystem with non-standard journal */
+#define REISERFS_FORMAT_3_5 0
+#define REISERFS_FORMAT_3_6 2
+#define REISERFS_FORMAT_UNKNOWN -1
+                                   
+
+/* values for sb_mount_state field */
+#define FS_CLEANLY_UMOUNTED    1 /* this was REISERFS_VALID_FS */
+#define FS_NOT_CLEANLY_UMOUNTED    2 /* this was REISERFS_ERROR. It
+                                              means that filesystem was not
+                                              cleanly unmounted */
+
+typedef enum {
+  reiserfs_attrs_cleared       = 0x00000001,
+} reiserfs_super_block_flags;
+
+#define REISERFS_SB_SIZE (sizeof(reiserfs_sb_t)) /* 204 bytes */
+
+/* set/get fields of super block with these defines */
+#define reiserfs_sb_get_blocks(sb)	get_le32 (sb, s_v1.sb_block_count)
+#define reiserfs_sb_set_blocks(sb,val)	set_le32 (sb, s_v1.sb_block_count, val)
+
+#define reiserfs_sb_get_free(sb)	get_le32 (sb, s_v1.sb_free_blocks)
+#define reiserfs_sb_set_free(sb,val)	set_le32 (sb, s_v1.sb_free_blocks, val)
+
+#define reiserfs_sb_get_root(sb)	get_le32 (sb,s_v1.sb_root_block)
+#define reiserfs_sb_set_root(sb,val)	set_le32 (sb, s_v1.sb_root_block, val)
+
+#if 0
+#define get_sb_mount_id(sb)		get_le32 (sb,s_v1.sb_mountid)
+#define set_sb_mount_id(sb,val)		set_le32 (sb, s_v1.sb_mountid, val)
+
+#define get_sb_journal_magic(sb)	get_le32 (sb, s_v1.sb_journal_magic)
+#define set_sb_journal_magic(sb,val)	set_le32 (sb, s_v1.sb_journal_magic, val)
+#endif
+
+#define reiserfs_sb_get_blksize(sb)	get_le16 (sb, s_v1.sb_blocksize)
+#define reiserfs_sb_set_blksize(sb,val)	set_le16 (sb, s_v1.sb_blocksize, val)
+
+#define reiserfs_sb_get_mapmax(sb)	get_le16 (sb, s_v1.sb_oid_maxsize)
+#define reiserfs_sb_set_mapmax(sb,val)	set_le16 (sb, s_v1.sb_oid_maxsize, val)
+
+#define reiserfs_sb_get_mapcur(sb)	get_le16 (sb, s_v1.sb_oid_cursize)
+#define reiserfs_sb_set_mapcur(sb,val)	set_le16 (sb, s_v1.sb_oid_cursize, val)
+
+#define reiserfs_sb_get_umount(sb)	get_le16 (sb, s_v1.sb_umount_state)
+#define reiserfs_sb_set_umount(sb,val)	set_le16 (sb, s_v1.sb_umount_state, val)
+
+#define reiserfs_sb_get_state(sb)	get_le16 (sb, s_v1.sb_fs_state)
+#define reiserfs_sb_set_state(sb,flag)	set_le16 (sb, s_v1.sb_fs_state, flag)
+
+#define reiserfs_sb_get_hash(sb)	get_le32 (sb, s_v1.sb_hash_function_code)
+#define reiserfs_sb_set_hash(sb,val)	set_le32 (sb, s_v1.sb_hash_function_code, val)
+
+#define reiserfs_sb_get_height(sb)	get_le16 (sb, s_v1.sb_tree_height)
+#define reiserfs_sb_set_height(sb,val)	set_le16 (sb, s_v1.sb_tree_height, val)
+
+#define reiserfs_sb_get_bmaps(sb)	get_le16 (sb, s_v1.sb_bmap_nr)
+#define reiserfs_sb_set_bmaps(sb,val)	set_le16 (sb, s_v1.sb_bmap_nr, val)
+
+#define reiserfs_sb_get_version(sb)	get_le16 (sb, s_v1.sb_version)
+#define reiserfs_sb_set_version(sb,val)	set_le16 (sb, s_v1.sb_version, val)
+
+#define reiserfs_sb_get_reserved(sb)				\
+	get_le16 (sb, s_v1.sb_reserved_for_journal)
+#define reiserfs_sb_set_reserved(sb,val)			\
+	set_le16 (sb, s_v1.sb_reserved_for_journal, val)
+
+#define reiserfs_sb_get_gen(sb)		get_le32 (sb, sb_inode_generation)
+#define reiserfs_sb_set_gen(sb,val)	set_le32 (sb, sb_inode_generation, val)
+
+#define reiserfs_sb_get_flags(sb)	get_le32 (sb, s_flags)
+#define reiserfs_sb_set_flags(sb, val)	set_le32 (sb, s_flags, val)
+
+#define reiserfs_sb_isflag(sb, flag)				\
+	(get_le32 (sb, s_flags) & flag)
+#define reiserfs_sb_mkflag(sb, flag)				\
+	set_le32 (sb, s_flags, get_le32 (sb, s_flags) | flag)
+#define reiserfs_sb_clflag(sb, flag)				\
+	set_le32 (sb, s_flags, get_le32 (sb, s_flags) & ~(flag))
+
+/* 0 does not guarantee that fs is consistent */
+#define reiserfs_sb_state_ok(fs) \
+	((reiserfs_sb_get_umount (fs->fs_ondisk_sb) == FS_CLEANLY_UMOUNTED) && \
+	 (reiserfs_sb_get_state (fs->fs_ondisk_sb) == FS_CONSISTENT))
+
+
+/* prejournalled reiserfs had signature in the other place in super block */
+#define REISERFS_SUPER_MAGIC_STRING_OFFSET_NJ 20
+
+/* f_type of struct statfs will be set at this value by statfs(2) */
+#define REISERFS_SUPER_MAGIC 0x52654973
+
+/* various reiserfs signatures. We have 3 so far. ReIsErFs for 3.5 format with
+   standard journal, ReIsEr2Fs for 3.6 (or converted 3.5) and ReIsEr3Fs for
+   filesystem with non-standard journal (formats are distinguished by
+   sb_version in that case). Those signatures should be looked for at the
+   64-th and at the 8-th 1k block of the device */
+#define REISERFS_3_5_SUPER_MAGIC_STRING "ReIsErFs"
+#define REISERFS_3_6_SUPER_MAGIC_STRING "ReIsEr2Fs"
+#define REISERFS_JR_SUPER_MAGIC_STRING "ReIsEr3Fs" /* JR stands for Journal
+						      Relocation */
+
+/* these are possible values for sb_fs_state */
+enum reiserfs_state_flags {
+	/* this is set by mkreiserfs and by reiserfsck */
+	FS_CONSISTENT   = 0x0,
+	/* this is set by the kernel when fsck is wanted. */
+	FS_ERROR	= 0x1,
+	/* this is set by fsck when fatal corruption is found */
+	FS_FATAL	= 0x2,
+	/* this is set by kernel when io error occures */
+	/* IO_ERROR	= 0x4, */
+	
+	FS_STATE_LAST   = 0x5
+};
+
+extern int reiserfs_super_35_magic (reiserfs_sb_t * rs);
+
+extern int reiserfs_super_36_magic (reiserfs_sb_t * rs);
+
+extern int reiserfs_super_jr_magic (reiserfs_sb_t * rs);
+
+extern int reiserfs_super_magic (reiserfs_sb_t * rs);
+
+extern int reiserfs_super_format (reiserfs_sb_t * sb);
+
+extern int reiserfs_super_size (reiserfs_sb_t * rs);
+
+extern int reiserfs_super_prejournaled (reiserfs_sb_t * rs);
+
+extern void reiserfs_super_print_state (FILE * fp, 
+					reiserfs_filsys_t * fs);
+
+extern int reiserfs_super_print (FILE * fp, 
+				 reiserfs_filsys_t *, 
+				 char * file_name, 
+				 reiserfs_bh_t * bh, 
+				 int short_print);
+
+extern int reiserfs_super_valid(reiserfs_bh_t *bh);
+
+#endif
diff --git a/include/reiserfs/tree.h b/include/reiserfs/tree.h
new file mode 100644
index 0000000..c868cf1
--- /dev/null
+++ b/include/reiserfs/tree.h
@@ -0,0 +1,160 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_TREE_H
+#define REISERFS_TREE_H
+
+#include <reiserfs/types.h>
+
+/* Search_by_key fills up the path from the root to the leaf as it
+   descends the tree looking for the key.  It uses reiserfs_buffer_read to
+   try to find buffers in the cache given their block number.  If it
+   does not find them in the cache it reads them from disk.  For each
+   node reiserfs_tree_search_item finds using reiserfs_buffer_read it then uses
+   bin_search to look through that node.  bin_search will find the
+   position of the block_number of the next node if it is looking
+   through an internal node.  If it is looking through a leaf node
+   bin_search will find the position of the item which has key either
+   equal to given key, or which is the maximal key less than the given
+   key. */
+
+
+#define REISERFS_PATH_INIT(var)						\
+	reiserfs_path_t var = {REISERFS_PATH_OFFILL, }
+
+/* Get path element by path and path position. */
+#define REISERFS_PATH_ELEM(p_s_path,nr_elem)				\
+	((p_s_path)->path_elements + (nr_elem))
+
+/* Get buffer header at the path by path and path position. */
+#define REISERFS_PATH_BUFFER(p_s_path,nr_elem)				\
+	(REISERFS_PATH_ELEM(p_s_path, nr_elem)->pe_buffer)
+
+/* Get position in the element at the path by path and path position. */
+#define REISERFS_PATH_POS(p_s_path,nr_elem)				\
+	(REISERFS_PATH_ELEM(p_s_path, nr_elem)->pe_position)
+
+#define REISERFS_PATH_LEAF(p_s_path)					\
+	(REISERFS_PATH_BUFFER((p_s_path), (p_s_path)->path_length))
+
+#define REISERFS_PATH_LEAF_POS(p_s_path)				\
+	(REISERFS_PATH_POS((p_s_path), (p_s_path)->path_length))
+
+#define REISERFS_PATH_IH(p_s_path)					\
+	reiserfs_ih_at(REISERFS_PATH_LEAF(p_s_path),			\
+		       REISERFS_PATH_LEAF_POS(p_s_path))
+
+/* in reiserfs_tb_balance leaf has h == 0 in contrast with path structure,
+   where root has level == 0. That is why we need these defines */
+#define REISERFS_PATH_UPBUFFER(p_s_path, h)				\
+	(REISERFS_PATH_BUFFER (p_s_path, p_s_path->path_length - (h)))
+
+/* tb->F[h] or tb->S[0]->b_parent */
+#define REISERFS_PATH_UPPARENT(path, h)					\
+	REISERFS_PATH_UPBUFFER (path, (h) + 1)
+
+#define REISERFS_PATH_UPPOS(path, h)					\
+	REISERFS_PATH_POS (path, path->path_length - (h))	
+
+/* tb->S[h]->b_item_order */
+#define REISERFS_PATH_UPPARENT_POS(path, h)				\
+	REISERFS_PATH_UPPOS(path, h + 1)
+
+#define REISERFS_PATH_LEVEL(p_s_path, n_h)				\
+	((p_s_path)->path_length - (n_h))
+
+#define REISERFS_PATH_ITEM(path)					\
+	((void *) reiserfs_item_at(REISERFS_PATH_LEAF(path),		\
+				   REISERFS_PATH_LEAF_POS (path)))
+
+extern int reiserfs_tree_search_entry (reiserfs_filsys_t *fs, 
+				       const reiserfs_key_t * key, 
+				       reiserfs_path_t * path);
+
+extern int reiserfs_tree_search_position (reiserfs_filsys_t *fs, 
+					  const reiserfs_key_t * key, 
+					  reiserfs_path_t * path);
+
+extern const reiserfs_key_t * reiserfs_tree_lkey (reiserfs_path_t * path,
+						  reiserfs_filsys_t *fs);
+
+extern const reiserfs_key_t * reiserfs_tree_rkey (reiserfs_path_t * path, 
+						  reiserfs_filsys_t *fs);
+
+extern const reiserfs_key_t *reiserfs_tree_next_key (reiserfs_path_t * path,
+						     reiserfs_filsys_t *fs);
+
+extern int reiserfs_tree_delete_entry (reiserfs_filsys_t *, 
+				       reiserfs_key_t *);
+
+extern void reiserfs_tree_delete (reiserfs_filsys_t *, 
+				  reiserfs_path_t *, int);
+
+extern void reiserfs_tree_delete_unit (reiserfs_filsys_t *, 
+				       reiserfs_path_t *, int);
+
+extern void reiserfs_tree_insert_unit (reiserfs_filsys_t *, 
+				       reiserfs_path_t * path,
+				       const void * body, 
+				       int size);
+
+extern void reiserfs_tree_insert (reiserfs_filsys_t *, 
+				  reiserfs_path_t * ,
+				  reiserfs_ih_t *, 
+				  const void *);
+
+extern int reiserfs_tree_search_name (reiserfs_filsys_t *, 
+				      const reiserfs_key_t * dir, 
+				      char * name,
+				      unsigned int * min_gen_counter, 
+				      reiserfs_key_t * key);
+
+extern int reiserfs_tree_search_body (reiserfs_filsys_t * fs, 
+				      const reiserfs_key_t * key,
+				      reiserfs_path_t * path);
+
+extern int reiserfs_tree_search_item (reiserfs_filsys_t * fs, 
+				      const reiserfs_key_t * key,
+				      reiserfs_path_t * path);
+
+extern int reiserfs_tree_scan_name (reiserfs_filsys_t *, 
+				    reiserfs_key_t * dir, 
+				    char * name,
+				    reiserfs_path_t * path);
+
+extern int reiserfs_tree_insert_entry (reiserfs_filsys_t *, 
+				       const reiserfs_key_t * dir, 
+				       char * name, 
+				       int name_len,
+				       const reiserfs_key_t * key, 
+				       __u16 fsck_need);
+
+typedef void (*item_modify_t) (reiserfs_ih_t *, void *item);
+
+extern __u16 reiserfs_tree_root (reiserfs_filsys_t * fs,
+				 item_modify_t modify,
+				 __u16 ih_flags);
+
+extern int reiserfs_tree_create_stat (reiserfs_filsys_t * fs,
+				      reiserfs_path_t * path, 
+				      const reiserfs_key_t * key,
+				      item_modify_t modify);
+
+extern void reiserfs_tree_pathrelse (reiserfs_path_t * p_s_search_path);
+
+extern int reiserfs_tree_left_mergeable (reiserfs_filsys_t * s, 
+					 reiserfs_path_t * path);
+
+extern int reiserfs_tree_right_mergeable (reiserfs_filsys_t * s, 
+					  reiserfs_path_t * path);
+
+extern int reiserfs_tree_node_mergeable (reiserfs_bh_t *left, 
+					 reiserfs_bh_t *right);
+
+extern int reiserfs_tree_merge(reiserfs_filsys_t *fs, 
+			       reiserfs_path_t *dst_path, 
+			       reiserfs_path_t *src_path);
+
+#endif
diff --git a/include/reiserfs/tree_balance.h b/include/reiserfs/tree_balance.h
new file mode 100644
index 0000000..6b052b5
--- /dev/null
+++ b/include/reiserfs/tree_balance.h
@@ -0,0 +1,202 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_TB_H
+#define REISERFS_TB_H
+
+/* This temporary structure is used in tree balance algorithms, and
+   constructed as we go to the extent that its various parts are needed.  It
+   contains arrays of nodes that can potentially be involved in the balancing
+   of node S, and parameters that define how each of the nodes must be
+   balanced.  Note that in these algorithms for balancing the worst case is to
+   need to balance the current node S and the left and right neighbors and all
+   of their parents plus create a new node.  We implement S1 balancing for the
+   leaf nodes and S0 balancing for the internal nodes (S1 and S0 are defined
+   in our papers.)*/
+
+/* size of the array of buffers to free at end of reiserfs_tb_balance */
+#define TB_2FREE_MAX 7	
+
+#define TB_FEB_MAX (REISERFS_TREE_HEIGHT_MAX + 1)
+
+/* someday somebody will prefix every field in this struct with tb_ */
+struct reiserfs_tb {
+    reiserfs_filsys_t * tb_fs;
+    
+    reiserfs_path_t * tb_path;
+
+    /* array of left neighbors of nodes in the path */
+    reiserfs_bh_t * L[REISERFS_TREE_HEIGHT_MAX];
+    
+    /* array of right neighbors of nodes in the path*/
+    reiserfs_bh_t * R[REISERFS_TREE_HEIGHT_MAX];
+    
+    /* array of fathers of the left  neighbors      */
+    reiserfs_bh_t * FL[REISERFS_TREE_HEIGHT_MAX];
+    
+    /* array of fathers of the right neighbors      */
+    reiserfs_bh_t * FR[REISERFS_TREE_HEIGHT_MAX];
+    
+    /* array of common parents of center node and its left neighbor  */
+    reiserfs_bh_t * CFL[REISERFS_TREE_HEIGHT_MAX];
+    
+    /* array of common parents of center node and its right neighbor */
+    reiserfs_bh_t * CFR[REISERFS_TREE_HEIGHT_MAX];
+    
+    /* array of blocknr's that are free and are the nearest to the left 
+       node that are usable for writing dirty formatted leaves, using 
+       the write_next_to algorithm. */
+    
+    /*unsigned long free_and_near[MAX_DIRTIABLE];*/
+    
+    /* array of empty buffers. Number of buffers in array equals cur_blknum. */
+    reiserfs_bh_t * FEB[TB_FEB_MAX]; 
+    
+    reiserfs_bh_t * used[TB_FEB_MAX];
+    
+    /* array of number of items which must be shifted to the left in order to 
+       balance the current node; for leaves includes item that will be partially
+       shifted; for internal nodes, it is the number of child pointers rather 
+       than items. It includes the new item being created. For preserve_shifted
+       purposes the code sometimes subtracts one from this number to get the
+       number of currently existing items being shifted, and even more often 
+       for leaves it subtracts one to get the number of wholly shifted items 
+       for other purposes. */
+    short int lnum[REISERFS_TREE_HEIGHT_MAX];	
+
+    /* substitute right for left in comment above */
+    short int rnum[REISERFS_TREE_HEIGHT_MAX];	
+    
+    /* array indexed by height h mapping the key delimiting L[h] and
+       S[h] to its item number within the node CFL[h] */
+    short int lkey[REISERFS_TREE_HEIGHT_MAX];
+    
+    /* substitute r for l in comment above */
+    short int rkey[REISERFS_TREE_HEIGHT_MAX];
+    
+    /* the number of bytes by we are trying to add or remove from S[h]. 
+       A negative value means removing.  */
+    short int insert_size[REISERFS_TREE_HEIGHT_MAX];
+     
+    /* number of nodes that will replace node S[h] after balancing on the level 
+       h of the tree.  If 0 then S is being deleted, if 1 then S is remaining 
+       and no new nodes are being created, if 2 or 3 then 1 or 2 new nodes is
+       being created */
+    short int blknum[REISERFS_TREE_HEIGHT_MAX];
+
+    /* fields that are used only for balancing leaves of the tree */
+    
+    /* number of empty blocks having been already allocated */
+    short int cur_blknum;
+    
+    /* number of items that fall into left most  node when S[0] splits	*/
+    short int s0num;
+    
+    /* number of items that fall into first  new node when S[0] splits	*/
+    short int s1num;
+    
+    /* number of items that fall into second new node when S[0] splits	*/
+    short int s2num;
+    
+    /* number of bytes which can flow to the left neighbor from the left */
+    short int lbytes;
+    
+    /* most liquid item that cannot be shifted from S[0] entirely
+       if -1 then nothing will be partially shifted */
+    
+    /* number of bytes which will flow to the right neighbor from the right */
+    short int rbytes;            
+    
+    /* number of bytes which flow to the first  new node when S[0] splits
+       note: if S[0] splits into 3 nodes, then items do not need to be cut */
+    short int s1bytes;
+    short int s2bytes;
+    
+    /* buffers which are to be freed after reiserfs_tb_balance finishes 
+       by reiserfs_unfix_nodes */
+    reiserfs_bh_t * buf_to_free[TB_2FREE_MAX]; 
+    
+    /* kmalloced memory. Used to create virtual node and keep map of dirtied 
+       bitmap blocks */
+    char * vn_buf;
+
+    /* size of the vn_buf */
+    int vn_buf_size;		
+    
+    /* VN starts after bitmap of bitmap blocks */
+    struct reiserfs_virtual_node * tb_vn;	
+};
+
+typedef struct reiserfs_tb reiserfs_tb_t;
+
+enum tb_return {
+	CARRY_ON		= 0x0,
+	NO_DISK_SPACE		= 0x3,
+	IO_ERROR		= 0x4,
+	NO_BALANCING_NEEDED	= 0x5,
+	ITEM_FOUND		= 0x6,
+	ITEM_NOT_FOUND		= 0x7,
+	POSITION_FOUND          = 0x8,
+	POSITION_NOT_FOUND      = 0x9,
+	GOTO_PREVIOUS_ITEM	= 0xa,
+	POSITION_FOUND_INVISIBLE= 0xb,
+	FILE_NOT_FOUND		= 0xc,
+	DIRECTORY_NOT_FOUND	= 0xd, 
+	DIRECTORY_FOUND		= 0xf,
+	LAST_SEARCH
+};
+
+/* These are modes of balancing */
+
+/* When inserting an item. */
+#define M_INSERT	'i'
+/* When inserting into (directories only) or appending onto an already
+   existant item. */
+#define M_PASTE		'p'
+/* When deleting an item. */
+#define M_DELETE	'd'
+/* When truncating an item or removing an entry from a (directory) item. */
+#define M_CUT 		'c'
+
+/* used when balancing on leaf level skipped (in reiserfsck) */
+#define M_INTERNAL	'n'
+
+#define FIRST_TO_LAST 0
+#define LAST_TO_FIRST 1
+
+/* used in reiserfs_tb_balance for passing parent of node information that 
+   has been gotten from tb struct */
+struct reiserfs_bufinfo {
+    reiserfs_bh_t * bi_bh;
+    reiserfs_bh_t * bi_parent;
+    int bi_position;
+};
+
+typedef struct reiserfs_bufinfo reiserfs_bufinfo_t;
+
+
+extern void reiserfs_tb_attach_new (reiserfs_bufinfo_t * bi);
+
+extern reiserfs_bh_t * reiserfs_tb_FEB (reiserfs_tb_t *tb);
+
+extern int reiserfs_tb_lpos (reiserfs_tb_t * tb, int h);
+
+extern int reiserfs_tb_rpos (reiserfs_tb_t * tb, int h);
+
+extern void reiserfs_tb_balance (reiserfs_tb_t * tb,
+				 reiserfs_ih_t * ih, 
+				 const char * body, 
+				 int flag, 
+				 int zeros_num);
+
+extern void reiserfs_tb_init (reiserfs_tb_t * tb, 
+			      reiserfs_filsys_t *, 
+			      reiserfs_path_t * path, 
+			      int size);
+
+extern void reiserfs_tb_print_path (reiserfs_tb_t * tb, 
+				    reiserfs_path_t * path);
+
+#endif
diff --git a/include/reiserfs/types.h b/include/reiserfs/types.h
new file mode 100644
index 0000000..bf41c5b
--- /dev/null
+++ b/include/reiserfs/types.h
@@ -0,0 +1,297 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef REISERFS_TYPES_H
+#define REISERFS_TYPES_H
+
+#include "misc/types.h"
+#include "misc/swab.h"
+
+struct reiserfs_bitmap {
+    unsigned long bm_byte_size;
+    unsigned long bm_bit_size;
+    char * bm_map;
+    unsigned long bm_set_bits;
+    int bm_dirty;  /* used for fetched bitmap */
+    unsigned long bm_first_zero;
+};
+
+typedef struct reiserfs_bitmap reiserfs_bitmap_t;
+
+
+typedef struct reiserfs_bh reiserfs_bh_t;
+
+struct reiserfs_bh {
+    unsigned long b_blocknr;
+    int b_dev;
+    unsigned long b_size;
+    char * b_data;
+    unsigned long b_state;
+    unsigned int b_count;
+    unsigned int b_list ;
+    void (*b_start_io) (unsigned long);
+    void (*b_end_io)(reiserfs_bh_t *bh, int uptodate);
+    
+    reiserfs_bh_t * b_next;
+    reiserfs_bh_t * b_prev;
+    reiserfs_bh_t * b_hash_next;
+    reiserfs_bh_t * b_hash_prev;
+};
+
+
+/* magic string to find desc blocks in the journal */
+#define JOURNAL_DESC_MAGIC "ReIsErLB" 
+
+struct reiserfs_journal_param {
+    /* where does journal start from on its device */
+    __u32 jp_start;
+    /* journal device st_rdev */
+    __u32 jp_dev;
+    /* size of the journal on FS creation. used to make sure 
+       they don't overflow it */
+    __u32 jp_size;
+    /* max number of blocks in a transaction.  */
+    __u32 jp_tlen;
+    /* random value made on fs creation (this was sb_journal_block_count) */
+    __u32 jp_magic;
+    /* max number of blocks to batch into a trans */
+    __u32 jp_max_batch;
+    /* in seconds, how old can an async commit be */
+    __u32 jp_commit_age;
+    /* in seconds, how old can a transaction be */
+    __u32 jp_trans_age;
+};
+
+typedef struct reiserfs_journal_param reiserfs_journal_param_t;
+
+/* this header block gets written whenever a transaction is considered fully
+** flushed, and is more recent than the last fully flushed transaction.  fully
+** flushed means all the log blocks and all the real blocks are on disk, and
+** this transaction does not need to be replayed.  */
+struct reiserfs_journal_header {    
+    /* id of last fully flushed transaction */
+    __u32 jh_last_flush_trans_id ;    
+    /* offset in the log of where to start replay after a crash */
+    __u32 jh_flush_offset ; 
+    
+    __u32 jh_mount_id ;
+
+    reiserfs_journal_param_t jh_journal;
+
+    /* the mount id of the fs during the last reiserfsck --check. */
+    __u32 jh_last_check_mount_id;	
+};
+
+/* this is the super from 3.5.X */
+struct reiserfs_super_block_v1
+{
+    __u32 sb_block_count; 	/* 0 number of block on data device */
+    __u32 sb_free_blocks; 	/* 4 free blocks count */
+    __u32 sb_root_block;        /* 8 root of the tree */
+
+    reiserfs_journal_param_t sb_journal; /* 12 */
+
+    __u16 sb_blocksize;         /* 44 */
+    __u16 sb_oid_maxsize;	/* 46 max size of object id array, see
+				   get_objectid() commentary */
+    __u16 sb_oid_cursize; 	/* 48 current size of object id array */
+    __u16 sb_umount_state;	/* 50 this is set to 1 when filesystem was
+				   umounted, to 2 - when not */
+    
+    char s_magic[10]; 		/* 52 reiserfs magic string indicates that
+				   file system is reiserfs: "ReIsErFs" or
+				   "ReIsEr2Fs" or "ReIsEr3Fs" */
+    __u16 sb_fs_state; 		/* 62 it is set to used by fsck to mark which phase of
+				   rebuilding is done (used for fsck debugging) */
+    __u32 sb_hash_function_code;/* 64 code of fuction which was/is/will be
+				   used to sort names in a directory. See
+				   codes in above */
+    __u16 sb_tree_height;	/* 68 height of filesytem tree. Tree
+				   consisting of only one root block has 2
+				   here */
+    __u16 sb_bmap_nr;     	/* 70 amount of bitmap blocks needed to
+				   address each block of file system */
+    __u16 sb_version; 		/* 72 this field is only reliable on
+				   filesystem with non-standard journal */
+    __u16 sb_reserved_for_journal;  /* 74 size in blocks of journal area on
+				       main device, we need to keep after
+				       non-standard journal relocation */
+};
+
+typedef struct reiserfs_super_block_v1 reiserfs_sb_v1_t;
+
+/* Structure of super block on disk */
+struct reiserfs_super_block {
+/*  0 */    reiserfs_sb_v1_t s_v1;
+/* 76 */     __u32 sb_inode_generation; 
+/* Right now used only by inode-attributes, if enabled */
+/* 80 */     __u32 s_flags;
+/* filesystem unique identifier */
+/* 84 */    unsigned char s_uuid[16];
+/* filesystem volume label */
+/*100 */    unsigned char s_label[16];
+/* zero filled by mkreiserfs and reiserfs_convert_objectid_map_v1()
+ * so any additions must be updated there as well. */ 
+/*116 */    char s_unused[88];
+/*204*/
+} __attribute__ ((__packed__));;
+
+typedef struct reiserfs_super_block reiserfs_sb_t;
+
+typedef __u32 (*hashf_t) (const char *, int);
+
+typedef struct reiserfs_filsys reiserfs_filsys_t;
+
+struct reiserfs_filsys {
+    unsigned int fs_blocksize;
+    int fs_format;	      /* on-disk format version */
+    hashf_t hash;	      /* pointer to function which is used to sort
+				 names in directory. It is set by
+				 reiserfs_fs_open if it is set in the super
+				 block, otherwise it is set by first
+				 reiserfs_hash_correct */
+    
+    char fs_file_name[4096];       /* file name of underlying device */
+    int fs_dev; /* descriptor of opened block device file */
+    reiserfs_bh_t * fs_super_bh;  /* buffer containing super block */
+    reiserfs_sb_t * fs_ondisk_sb; /* pointer to its b_data */
+
+
+    reiserfs_bitmap_t * fs_bitmap2; /* ondisk bitmap after
+				       reiserfs_bitmap_open */
+
+
+    /* opened journal fields */
+    char fs_j_file_name[4096];  /* file name of relocated journal device */
+    int fs_journal_dev;		/* descriptor of opened journal device */
+    reiserfs_bh_t * fs_jh_bh;	/* buffer containing journal header */
+
+    /* badblocks */
+    reiserfs_bitmap_t * fs_badblocks_bm;
+
+    int fs_dirt;
+    int fs_flags;
+    void * fs_vp;
+    int (*block_allocator) (reiserfs_filsys_t * fs, 
+			    unsigned long * free_blocknrs,
+			    unsigned long start, int amount_needed);
+    int (*block_deallocator) (reiserfs_filsys_t * fs, unsigned long block);
+
+    __u16 lost_format;
+};
+
+
+#define REISERFS_TREE_HEIGHT_MAX	6
+#define REISERFS_PATH_OFFINIT		2
+#define REISERFS_PATH_OFFILL		1
+#define REISERFS_PATH_MAX		(REISERFS_TREE_HEIGHT_MAX +	\
+					 REISERFS_PATH_OFFINIT)
+
+struct reiserfs_path_element  {
+    /* Pointer to the buffer at the path in the tree. */
+    reiserfs_bh_t * pe_buffer; 
+
+    /* Position in the tree node which is placed in the buffer above. */
+    int pe_position;  
+};
+
+typedef struct reiserfs_path_element reiserfs_path_element_t;
+
+
+/* We need to keep track of who the ancestors of nodes are.  When we
+   perform a search we record which nodes were visited while
+   descending the tree looking for the node we searched for. This list
+   of nodes is called the path.  This information is used while
+   performing balancing.  Note that this path information may become
+   invalid, and this means we must check it when using it to see if it
+   is still valid. You'll need to read reiserfs_tree_search_item and the 
+   comments in it, especially about decrement_counters_in_path(), 
+   to understand this structure. */
+struct reiserfs_path {
+    /* Length of the array above.   */
+    unsigned int path_length;
+    
+    /* Array of the path elements.  */
+    reiserfs_path_element_t path_elements[REISERFS_PATH_MAX];	
+    
+    int pos_in_item;
+};
+
+typedef struct reiserfs_path reiserfs_path_t;
+
+struct reiserfs_koff_v1 {
+    __u32 k_offset;
+    __u32 k_uniqueness;
+} __attribute__ ((__packed__));
+
+struct reiserfs_koff_v2 {
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+    __u64 k_offset:60;
+    __u64 k_type: 4;
+#elif __BYTE_ORDER == __BIG_ENDIAN
+    __u64 k_type: 4;
+    __u64 k_offset:60;
+#else
+# error "nuxi/pdp-endian archs are not supported"
+#endif
+} __attribute__ ((__packed__));
+
+/* Key of the object determines object's location in the tree, 
+   composed of 4 components */
+struct reiserfs_key {
+    /* packing locality: by default parent directory object id */
+    __u32 k2_dir_id;
+    
+    /* object identifier */
+    __u32 k2_objectid;
+    
+    union {
+	struct reiserfs_koff_v1 k2_offset_v1;
+	struct reiserfs_koff_v2 k2_offset_v2;
+    } __attribute__ ((__packed__)) u;
+} __attribute__ ((__packed__));
+
+typedef struct reiserfs_key reiserfs_key_t;
+
+/* Everything in the filesystem is stored as a set of items.  The item head
+   contains the key of the item, its free space (for extent items) and
+   specifies the location of the item itself within the block.  */
+
+struct reiserfs_ih {
+    reiserfs_key_t ih_key; 	/* Everything in the tree is found by searching for it
+                           based on its key.*/
+
+    union {
+	__u16 ih2_free_space; /* The free space in the last unformatted node
+				of an extent item if this is an extent
+				item.  This equals 0xFFFF iff this is a direct
+				item or stat data item. Note that the key, not
+				this field, is used to determine the item
+				type, and thus which field this union
+				contains. */
+	__u16 ih2_entry_count; /* Iff this is a directory item, this field
+				  equals the number of directory entries in
+				  the directory item. */
+    } __attribute__ ((__packed__)) u;
+    __u16 ih2_item_len;           /* total size of the item body */
+    __u16 ih2_item_location;      /* an offset to the item body within the
+                                    block */
+
+    __u16 ih_format;	/* key format is stored in bits 0-11 of this item
+			   flags are stored in bits 12-15 */
+#if 0
+    struct {
+	__u16 key_format : 12; /* KEY_FORMAT_1 or KEY_FORMAT_2. This is not
+				  necessary, but we have space, let use it */
+	__u16 flags : 4;   /* fsck set here its flag (reachable/unreachable) */
+    } __attribute__ ((__packed__)) ih2_format;
+#endif
+} __attribute__ ((__packed__));
+
+typedef struct reiserfs_ih reiserfs_ih_t;
+
+typedef int (*unfm_func_t) (reiserfs_filsys_t *, __u32);
+
+#endif 
diff --git a/include/reiserfs_fs.h b/include/reiserfs_fs.h
deleted file mode 100644
index 41046df..0000000
--- a/include/reiserfs_fs.h
+++ /dev/null
@@ -1,1588 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-/*
- *  Reiser File System constants and structures
- */
-
-/* in reading the #defines, it may help to understand that they employ the
-   following abbreviations:
-
-   B = Buffer
-   I = Item header
-   H = Height within the tree (should be changed to LEV)
-   N = Number of the item in the node
-   STAT = stat data
-   DEH = Directory Entry Header
-   EC = Entry Count
-   E = Entry number
-   UL = Unsigned Long
-   BLKH = BLocK Header
-   UNFM = UNForMatted node
-   DC = Disk Child
-   P = Path
-
-   These #defines are named by concatenating these abbreviations, where first
-   comes the arguments, and last comes the return value, of the macro.
-
-*/
-
-#ifndef REISERFSPROGS_FS_H
-#define REISERFSPRIGS_FS_H 
-
-#ifndef NO_EXTERN_INLINE
-# define extern_inline extern inline
-#else
-# define extern_inline
-#endif
-
-#include <asm/unaligned.h>
-
-#ifndef get_unaligned
-#if defined(__ppc__) || defined(ppc) || defined(__ppc) || \
-    defined(__PPC) || defined(powerpc) || defined(__powerpc__)
-#	define get_unaligned(ptr)	(*(ptr))
-#	define put_unaligned(val,ptr)	((void)(*(ptr) = (val)))
-#endif
-#endif
-
-#define get_leXX(xx,p,field)	(le##xx##_to_cpu ((p)->field))
-#define set_leXX(xx,p,field,val) do { (p)->field = cpu_to_le##xx(val); } while (0)
-
-#define get_le16(p,field)	get_leXX (16, p, field)
-#define set_le16(p,field,val)	set_leXX (16, p, field, val)
-
-#define get_le32(p,field)	get_leXX (32, p, field)
-#define set_le32(p,field,val)	set_leXX (32, p, field, val)
-
-#define get_le64(p,field)	get_leXX (64, p, field)
-#define set_le64(p,field,val)	set_leXX (64, p, field, val)
-
-
-
-/***************************************************************************/
-/*                             SUPER BLOCK                                 */
-/***************************************************************************/
-
-#define UNSET_HASH 0 // read_super will guess about, what hash names
-                     // in directories were sorted with
-#define TEA_HASH  1
-#define YURA_HASH 2
-#define R5_HASH   3
-#define DEFAULT_HASH R5_HASH
-
-
-/* super block of prejournalled version */
-struct reiserfs_super_block_v0
-{
-    __u32 s_block_count;
-    __u32 s_free_blocks;
-    __u32 s_root_block;
-    __u16 s_blocksize;
-    __u16 s_oid_maxsize;
-    __u16 s_oid_cursize;
-    __u16 s_state;
-    char s_magic[16];
-    __u16 s_tree_height;
-    __u16 s_bmap_nr;
-    __u16 s_reserved;
-};
-
-
-struct journal_params {
-    __u32 jp_journal_1st_block;	/* where does journal start from on its
-                                   device */
-    __u32 jp_journal_dev;	/* journal device st_rdev */
-    __u32 jp_journal_size;	/* size of the journal on FS creation. used to
-				   make sure they don't overflow it */
-    __u32 jp_journal_trans_max;	/* max number of blocks in a transaction.  */
-    __u32 jp_journal_magic; 	/* random value made on fs creation (this was
-				   sb_journal_block_count) */
-    __u32 jp_journal_max_batch;	/* max number of blocks to batch into a trans */
-    __u32 jp_journal_max_commit_age;      /* in seconds, how old can an async commit be */
-    __u32 jp_journal_max_trans_age;       /* in seconds, how old can a transaction be */
-};
-
-
-#define get_jp_journal_1st_block(jp)	 get_le32 (jp, jp_journal_1st_block)
-#define set_jp_journal_1st_block(jp,val) set_le32 (jp, jp_journal_1st_block, val)
-
-#define get_jp_journal_dev(jp)		get_le32 (jp, jp_journal_dev)
-#define set_jp_journal_dev(jp,val)	set_le32 (jp, jp_journal_dev, val)
-
-#define get_jp_journal_size(jp)		get_le32 (jp, jp_journal_size)
-#define set_jp_journal_size(jp,val)	set_le32 (jp, jp_journal_size, val)
-
-#define get_jp_journal_max_trans_len(jp)	get_le32 (jp, jp_journal_trans_max)
-#define set_jp_journal_max_trans_len(jp,val)	set_le32 (jp, jp_journal_trans_max, val)
-
-#define get_jp_journal_magic(jp)	get_le32 (jp, jp_journal_magic)
-#define set_jp_journal_magic(jp,val)	set_le32 (jp, jp_journal_magic, val)
-
-#define NEED_TUNE 0xffffffff
-
-#define get_jp_journal_max_batch(jp)	get_le32 (jp, jp_journal_max_batch)
-#define set_jp_journal_max_batch(jp,val)	set_le32 (jp, jp_journal_max_batch, val)
-
-#define get_jp_journal_max_commit_age(jp)	get_le32 (jp, jp_journal_max_commit_age)
-#define set_jp_journal_max_commit_age(jp,val)	set_le32 (jp, jp_journal_max_commit_age, val)
-
-#define get_jp_journal_max_trans_age(jp)	get_le32 (jp, jp_journal_max_commit_age)
-#define set_jp_journal_max_trans_age(jp,val)	set_le32 (jp, jp_journal_max_commit_age, val)
-
-
-/* this is the super from 3.5.X */
-struct reiserfs_super_block_v1
-{
-    __u32 sb_block_count; 	/* 0 number of block on data device */
-    __u32 sb_free_blocks; 	/* 4 free blocks count */
-    __u32 sb_root_block;        /* 8 root of the tree */
-
-    struct journal_params sb_journal; /* 12 */
-
-    __u16 sb_blocksize;         /* 44 */
-    __u16 sb_oid_maxsize;	/* 46 max size of object id array, see
-				   get_objectid() commentary */
-    __u16 sb_oid_cursize; 	/* 48 current size of object id array */
-    __u16 sb_umount_state;	/* 50 this is set to 1 when filesystem was
-				   umounted, to 2 - when not */
-    
-    char s_magic[10]; 		/* 52 reiserfs magic string indicates that
-				   file system is reiserfs: "ReIsErFs" or
-				   "ReIsEr2Fs" or "ReIsEr3Fs" */
-    __u16 sb_fs_state; 		/* 62 it is set to used by fsck to mark which phase of
-				   rebuilding is done (used for fsck debugging) */
-    __u32 sb_hash_function_code;/* 64 code of fuction which was/is/will be
-				   used to sort names in a directory. See
-				   codes in above */
-    __u16 sb_tree_height;	/* 68 height of filesytem tree. Tree
-				   consisting of only one root block has 2
-				   here */
-    __u16 sb_bmap_nr;     	/* 70 amount of bitmap blocks needed to
-				   address each block of file system */
-    __u16 sb_version; 		/* 72 this field is only reliable on
-				   filesystem with non-standard journal */
-    __u16 sb_reserved_for_journal;  /* 74 size in blocks of journal area on
-				       main device, we need to keep after
-				       non-standard journal relocation */
-};
-
-#define SB_SIZE_V1 (sizeof(struct reiserfs_super_block_v1)) /* 76 bytes */
-
-#define sb_jp(sb) (&((sb)->s_v1.sb_journal))
-
-/* values for sb_version field of struct reiserfs_super_block. sb_version is
-   only reliable on filesystem with non-standard journal */
-#define REISERFS_FORMAT_3_5 0
-#define REISERFS_FORMAT_3_6 2
-#define REISERFS_FORMAT_UNKNOWN -1
-                                   
-
-/* values for sb_mount_state field */
-#define FS_CLEANLY_UMOUNTED    1 /* this was REISERFS_VALID_FS */
-#define FS_NOT_CLEANLY_UMOUNTED    2 /* this was REISERFS_ERROR. It
-                                              means that filesystem was not
-                                              cleanly unmounted */
-
-/* Structure of super block on disk */
-struct reiserfs_super_block
-{
-/*  0 */    struct reiserfs_super_block_v1 s_v1;
-/* 76 */     __u32 sb_inode_generation; 
-/* 80 */     __u32 s_flags;                /* Right now used only by inode-attributes, if enabled */
-/* 84 */    unsigned char s_uuid[16];      /* filesystem unique identifier */
-/*100 */    unsigned char s_label[16];     /* filesystem volume label */
-/*116 */    char s_unused[88] ;            /* zero filled by mkreiserfs and reiserfs_convert_objectid_map_v1()
-                                            * so any additions must be updated there as well. */ 
-/*204*/
-} __attribute__ ((__packed__));;
-
-typedef enum {
-  reiserfs_attrs_cleared       = 0x00000001,
-} reiserfs_super_block_flags;
-
-
-
-#define SB_SIZE (sizeof(struct reiserfs_super_block)) /* 204 bytes */
-
-/* set/get fields of super block with these defines */
-#define get_sb_block_count(sb)		get_le32 (sb, s_v1.sb_block_count)
-#define set_sb_block_count(sb,val)	set_le32 (sb, s_v1.sb_block_count, val)
-
-#define get_sb_free_blocks(sb)		get_le32 (sb, s_v1.sb_free_blocks)
-#define set_sb_free_blocks(sb,val)	set_le32 (sb, s_v1.sb_free_blocks, val)
-
-#define get_sb_root_block(sb)		get_le32 (sb,s_v1.sb_root_block)
-#define set_sb_root_block(sb,val)	set_le32 (sb, s_v1.sb_root_block, val)
-
-#if 0
-#define get_sb_mount_id(sb)		get_le32 (sb,s_v1.sb_mountid)
-#define set_sb_mount_id(sb,val)		set_le32 (sb, s_v1.sb_mountid, val)
-
-#define get_sb_journal_magic(sb)	get_le32 (sb, s_v1.sb_journal_magic)
-#define set_sb_journal_magic(sb,val)	set_le32 (sb, s_v1.sb_journal_magic, val)
-#endif
-
-#define get_sb_block_size(sb)		get_le16 (sb, s_v1.sb_blocksize)
-#define set_sb_block_size(sb,val)	set_le16 (sb, s_v1.sb_blocksize, val)
-
-#define get_sb_oid_maxsize(sb)		get_le16 (sb, s_v1.sb_oid_maxsize)
-#define set_sb_oid_maxsize(sb,val)	set_le16 (sb, s_v1.sb_oid_maxsize, val)
-
-#define get_sb_oid_cursize(sb)		get_le16 (sb, s_v1.sb_oid_cursize)
-#define set_sb_oid_cursize(sb,val)	set_le16 (sb, s_v1.sb_oid_cursize, val)
-
-#define get_sb_umount_state(sb)		get_le16 (sb, s_v1.sb_umount_state)
-#define set_sb_umount_state(sb,val)	set_le16 (sb, s_v1.sb_umount_state, val)
-
-#define get_sb_fs_state(sb)		get_le16 (sb, s_v1.sb_fs_state)
-#define set_sb_fs_state(sb,flag)	set_le16 (sb, s_v1.sb_fs_state, flag)
-
-#define get_sb_hash_code(sb)		get_le32 (sb, s_v1.sb_hash_function_code)
-#define set_sb_hash_code(sb,val)	set_le32 (sb, s_v1.sb_hash_function_code, val)
-
-#define get_sb_tree_height(sb)		get_le16 (sb, s_v1.sb_tree_height)
-#define set_sb_tree_height(sb,val)	set_le16 (sb, s_v1.sb_tree_height, val)
-
-#define get_sb_bmap_nr(sb)		get_le16 (sb, s_v1.sb_bmap_nr)
-#define set_sb_bmap_nr(sb,val)		set_le16 (sb, s_v1.sb_bmap_nr, val)
-
-#define get_sb_version(sb)		get_le16 (sb, s_v1.sb_version)
-#define set_sb_version(sb,val)		set_le16 (sb, s_v1.sb_version, val)
-
-#define get_sb_reserved_for_journal(sb)		get_le16 (sb, s_v1.sb_reserved_for_journal)
-#define set_sb_reserved_for_journal(sb,val)	set_le16 (sb, s_v1.sb_reserved_for_journal, val)
-
-#define get_sb_v2_inode_generation(sb)		get_le32 (sb, sb_inode_generation)
-#define set_sb_v2_inode_generation(sb,val)	set_le32 (sb, sb_inode_generation, val)
-
-#define get_sb_v2_flags(sb)		get_le32 (sb, s_flags)
-#define set_sb_v2_flags(sb, val)	set_le32 (sb, s_flags, val)
-
-#define get_sb_v2_flag(sb, flag)       (get_le32 (sb, s_flags) & flag)
-#define set_sb_v2_flag(sb, flag)	set_le32 (sb, s_flags, get_le32 (sb, s_flags) | flag)
-#define clear_sb_v2_flag(sb, flag)	set_le32 (sb, s_flags, get_le32 (sb, s_flags) & ~(flag))
-
-/*
-#define journal_is_relocated(sb)        get_jp_journal_dev(sb_jp (sb))
-*/
-
-/* these are possible values for sb_fs_state */
-#define FS_CONSISTENT   0x0	    /* this is set by mkreiserfs and by reiserfsck */
-#define FS_ERROR	0x1	    /* this is set by the kernel when fsck is wanted. */
-#define FS_FATAL	0x2	    /* this is set by fsck when fatal corruption is found */
-#define IO_ERROR	0x4	    /* this is set by kernel when io error occures */
-#define PASS_0_DONE     0xfa02	    /* set by fsck when pass-by-pass (-d),
-				       FS_FATAL flag included */
-#define PASS_1_DONE     0xfb02	    /* set by fsck when pass-by-pass (-d),
-                                       FS_FATAL flag included */
-#define TREE_IS_BUILT   0xfc02	    /* set by fsck when pass-by-pass (-d),
-                                       FS_FATAL flag included */
-#define SEMANTIC_DONE   0xfd02	    /* set by fsck when pass-by-pass (-d),
-                                       FS_FATAL flag included */
-#define LOST_FOUND_DONE 0xfe02	    /* set by fsck when pass-by-pass (-d),
-                                       FS_FATAL flag included */
-
-/* struct stat_data* access macros */
-/* v1 */
-#define sd_v1_mode(sd)                 (le16_to_cpu((sd)->sd_mode))
-#define set_sd_v1_mode(sd,n)           ((sd)->sd_mode = cpu_to_le16((n)))
-#define sd_v1_nlink(sd)                (le16_to_cpu((sd)->sd_nlink))
-#define set_sd_v1_nlink(sd,n)          ((sd)->sd_nlink = cpu_to_le16((n))) 
-#define sd_v1_uid(sd)                  (le16_to_cpu((sd)->sd_uid))
-#define set_sd_v1_uid(sd,n)            ((sd)->sd_uid = cpu_to_le16((n)))
-#define sd_v1_gid(sd)                  (le16_to_cpu((sd)->sd_gid))
-#define set_sd_v1_gid(sd,n)            ((sd)->sd_gid = cpu_to_le16((n)))
-#define sd_v1_size(sd)                 (le32_to_cpu((sd)->sd_size))
-#define set_sd_v1_size(sd,n)           ((sd)->sd_size = cpu_to_le32((n)))
-#define sd_v1_atime(sd)                (le32_to_cpu((sd)->sd_atime))
-#define set_sd_v1_atime(sd,n)          ((sd)->sd_atime = cpu_to_le32((n)))
-#define sd_v1_mtime(sd)                (le32_to_cpu((sd)->sd_mtime))
-#define set_sd_v1_mtime(sd,n)          ((sd)->sd_mtime = cpu_to_le32((n)))
-#define sd_v1_ctime(sd)                (le32_to_cpu((sd)->sd_ctime))
-#define set_sd_v1_ctime(sd,n)          ((sd)->sd_ctime = cpu_to_le32((n)))
-#define sd_v1_blocks(sd)               (le32_to_cpu((sd)->u.sd_blocks))
-#define set_sd_v1_blocks(sd,n)         ((sd)->u.sd_blocks = cpu_to_le32((n)))
-#define sd_v1_rdev(sd)                 (le32_to_cpu((sd)->u.sd_rdev))
-#define set_sd_v1_rdev(sd,n)           ((sd)->u.sd_rdev = cpu_to_le32((n)))
-#define sd_v1_first_direct_byte(sd)    (le32_to_cpu((sd)->sd_first_direct_byte))
-#define set_sd_v1_first_direct_byte(sd,n) \
-                                 ((sd)->sd_first_direct_byte = cpu_to_le32((n)))
-/* v2 */
-#define sd_v2_mode(sd)                 (le16_to_cpu((sd)->sd_mode))
-#define set_sd_v2_mode(sd,n)           ((sd)->sd_mode = cpu_to_le16((n)))
-#define sd_v2_sd_attrs(sd)             (le16_to_cpu((sd)->sd_attrs))
-#define set_sd_v2_sd_attrs(sd,n)       ((sd)->sd_attrs = cpu_to_le16((n)))
-#define sd_v2_nlink(sd)                (le32_to_cpu((sd)->sd_nlink))
-#define set_sd_v2_nlink(sd,n)          ((sd)->sd_nlink = cpu_to_le32((n))) 
-#define sd_v2_size(sd)                 (le64_to_cpu((sd)->sd_size))
-#define set_sd_v2_size(sd,n)           ((sd)->sd_size = cpu_to_le64((n)))
-#define sd_v2_uid(sd)                  (le32_to_cpu((sd)->sd_uid))
-#define set_sd_v2_uid(sd,n)            ((sd)->sd_uid = cpu_to_le32((n)))
-#define sd_v2_gid(sd)                  (le32_to_cpu((sd)->sd_gid))
-#define set_sd_v2_gid(sd,n)            ((sd)->sd_gid = cpu_to_le32((n)))
-#define sd_v2_atime(sd)                (le32_to_cpu((sd)->sd_atime))
-#define set_sd_v2_atime(sd,n)          ((sd)->sd_atime = cpu_to_le32((n)))
-#define sd_v2_mtime(sd)                (le32_to_cpu((sd)->sd_mtime))
-#define set_sd_v2_mtime(sd,n)          ((sd)->sd_mtime = cpu_to_le32((n)))
-#define sd_v2_ctime(sd)                (le32_to_cpu((sd)->sd_ctime))
-#define set_sd_v2_ctime(sd,n)          ((sd)->sd_ctime = cpu_to_le32((n)))
-#define sd_v2_blocks(sd)               (le32_to_cpu((sd)->sd_blocks))
-#define set_sd_v2_blocks(sd,n)         ((sd)->sd_blocks = cpu_to_le32((n)))
-#define sd_v2_rdev(sd)                 (le32_to_cpu((sd)->u.sd_rdev))
-#define set_sd_v2_rdev(sd,n)           ((sd)->u.sd_rdev = cpu_to_le32((n)))
-
-
-/* ReiserFS leaves the first 64k unused, so that partition labels have enough
-   space.  If someone wants to write a fancy bootloader that needs more than
-   64k, let us know, and this will be increased in size.  This number must be
-   larger than than the largest block size on any platform, or code will
-   break.  -Hans */
-#define REISERFS_DISK_OFFSET_IN_BYTES (64 * 1024)
-
-/*#define MD_RAID_SUPERBLOCKS_IN_BYTES (128 * 1024)*/
-
-/* the spot for the super in versions 3.5 - 3.5.11 (inclusive) */
-#define REISERFS_OLD_DISK_OFFSET_IN_BYTES (8 * 1024)
-
-/* prejournalled reiserfs had signature in the other place in super block */
-#define REISERFS_SUPER_MAGIC_STRING_OFFSET_NJ 20
-
-/* f_type of struct statfs will be set at this value by statfs(2) */
-#define REISERFS_SUPER_MAGIC 0x52654973
-
-/* various reiserfs signatures. We have 3 so far. ReIsErFs for 3.5 format with
-   standard journal, ReIsEr2Fs for 3.6 (or converted 3.5) and ReIsEr3Fs for
-   filesystem with non-standard journal (formats are distinguished by
-   sb_version in that case). Those signatures should be looked for at the
-   64-th and at the 8-th 1k block of the device */
-#define REISERFS_3_5_SUPER_MAGIC_STRING "ReIsErFs"
-#define REISERFS_3_6_SUPER_MAGIC_STRING "ReIsEr2Fs"
-#define REISERFS_JR_SUPER_MAGIC_STRING "ReIsEr3Fs" /* JR stands for Journal
-						      Relocation */
-
-#define get_reiserfs_ondisk_offset(block_of_super_block, block_size) \
-    (block_of_super_block * block_size)
-
-#define is_new_sb_location(block_of_super_block, block_size) \
-    ((get_reiserfs_ondisk_offset(block_of_super_block, block_size) == REISERFS_DISK_OFFSET_IN_BYTES) \
-	? 1 : 0)
-	
-/*only 4k blocks for old location*/
-#define is_old_sb_location(block_of_super_block, block_size) \
-    ((get_reiserfs_ondisk_offset(block_of_super_block, 4096) == REISERFS_OLD_DISK_OFFSET_IN_BYTES) \
-	? 1 : 0)
-
-/***************************************************************************/
-/*                             JOURNAL                                     */
-/***************************************************************************/
-
-#define JOURNAL_DESC_MAGIC "ReIsErLB" /* ick.  magic string to find desc
-                                         blocks in the journal */
-
-/* journal.c see journal.c for all the comments here */
-
-//#define JOURNAL_TRANS_HALF 1018   /* must be correct to keep the desc and commit structs at 4k */
-
-/* first block written in a commit.  BUG, not 64bit safe */
-struct reiserfs_journal_desc {
-    __u32 j2_trans_id ;	/* id of commit */
-    __u32 j2_len ;	/* length of commit. len +1 is the commit block */
-    __u32 j2_mount_id ;	/* mount id of this trans*/
-    __u32 j2_realblock[1] ; /* real locations for each block */    
-};
-
-#define get_jd_magic(bh) (bh->b_data + bh->b_size - 12)
-
-
-
-#define journal_trans_half(blocksize) \
-((blocksize - sizeof (struct reiserfs_journal_desc) + sizeof (__u32) - 12) / sizeof (__u32))
-
-#define jdesc_header(bh) ((struct reiserfs_journal_desc *)bh->b_data)
-
-#define get_desc_trans_id(bh)	  get_le32 (jdesc_header (bh), j2_trans_id)
-#define set_desc_trans_id(bh,val)	  set_le32 (jdesc_header (bh), j2_trans_id, val)
-
-#define get_desc_trans_len(bh)	          get_le32 (jdesc_header (bh), j2_len)
-#define set_desc_trans_len(bh,val)	  set_le32 (jdesc_header (bh), j2_len, val)
-
-#define get_desc_mount_id(bh)	  get_le32 (jdesc_header (bh), j2_mount_id)
-#define set_desc_mount_id(bh,val)	  set_le32 (jdesc_header (bh), j2_mount_id, val)
-    
-
-/* last block written in a commit BUG, not 64bit safe */
-struct reiserfs_journal_commit {
-    __u32 j3_trans_id ;	 /* must match j_trans_id from the desc block */
-    __u32 j3_len ;	 /* ditto */
-    __u32 j3_realblock[1] ; /* real locations for each block */
-} ;
-
-#define jcommit_header(bh) ((struct reiserfs_journal_commit *)bh->b_data)
-
-#define get_commit_trans_id(bh)		get_le32 (jcommit_header(bh), j3_trans_id)
-#define set_commit_trans_id(bh,val)	set_le32 (jcommit_header(bh), j3_trans_id, val)
-
-#define get_commit_trans_len(bh)	get_le32 (jcommit_header(bh), j3_len)
-#define set_comm_trans_len(bh,val)	set_le32 (jcommit_header(bh), j3_len, val)
-
-
-/* this header block gets written whenever a transaction is considered fully
-** flushed, and is more recent than the last fully flushed transaction.  fully
-** flushed means all the log blocks and all the real blocks are on disk, and
-** this transaction does not need to be replayed.  */
-struct reiserfs_journal_header {    
-    __u32 jh_last_flush_trans_id ;    /* id of last fully flushed transaction */
-    __u32 jh_first_unflushed_offset ; /* offset in the log of where to start replay after a crash */
-    __u32 jh_mount_id ;
-
-    struct journal_params jh_journal;
-
-    __u32 jh_last_check_mount_id;	/* the mount id of the fs during the last reiserfsck --check. */
-};
-
-
-/* set/get fields of journal header with these defines */
-#define get_jh_mount_id(jh)	get_le32 (jh, jh_mount_id)
-#define set_jh_mount_id(jh,val)	set_le32 (jh, jh_mount_id, val)
-
-#define get_jh_last_flushed(jh)		get_le32 (jh, jh_last_flush_trans_id)
-#define set_jh_last_flushed(jh,val)	set_le32 (jh, jh_last_flush_trans_id, val)
-
-#define get_jh_replay_start_offset(jh)		get_le32 (jh, jh_first_unflushed_offset)
-#define set_jh_replay_start_offset(jh,val)	set_le32 (jh, jh_first_unflushed_offset, val)
-
-
-
-/* journal default settings */
-
-#define JOURNAL_MIN_SIZE 	512
-#define JOURNAL_TRANS_MAX 	1024   	/* biggest possible single transaction, don't
-                                    	change for now (8/3/99) */
-#define JOURNAL_TRANS_MIN 	256    	/* need to check whether it works */
-#define JOURNAL_DEFAULT_RATIO 	8  	/* default journal size / max trans length */
-#define JOURNAL_MIN_RATIO 	2
-#define JOURNAL_MAX_BATCH   	900 	/* max blocks to batch into one transaction,
-                                   	don't make this any bigger than 900 */
-#define JOURNAL_MAX_COMMIT_AGE 	30
-#define JOURNAL_MAX_TRANS_AGE 	30
-
-/* journal max size is a maximum number of blocks pointed by first bitmap -
-   REISERFS_DISK_OFFSET - superblock - first bitmap - journal herader */
-#define journal_max_size(block_of_super_block,blocksize) \
-	blocksize * 8 - (block_of_super_block + 1 + 1 + 1)
-
-#define journal_default_size(block_of_super_block,blocksize) \
-	(unsigned long long)((8192 > journal_max_size (block_of_super_block,blocksize)) ? \
-		journal_max_size (block_of_super_block,blocksize) : 8192)
-
-//#define JOURNAL_DEFAULT_SIZE 8192  number of blocks in the journal
-//#define JOURNAL_DEFAULT_SIZE_FOR_BS_1024 8125  number of blocks in the journal for block size 1KB
-
-#define bh_desc(bh) ((struct reiserfs_journal_desc *)((bh)->b_data))
-#define bh_commit(bh) ((struct reiserfs_journal_commit *)((bh)->b_data))
-
-
-/***************************************************************************/
-/*                       KEY & ITEM HEAD                                   */
-/***************************************************************************/
-
-struct offset_v1 {
-    __u32 k_offset;
-    __u32 k_uniqueness;
-} __attribute__ ((__packed__));
-
-struct offset_v2 {
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-    __u64 k_offset:60;
-    __u64 k_type: 4; // TYPE_STAT_DATA | TYPE_INDIRECT | TYPE_DIRECT | TYPE_DIRENTRY
-#elif __BYTE_ORDER == __BIG_ENDIAN
-    __u64 k_type: 4; // TYPE_STAT_DATA | TYPE_INDIRECT | TYPE_DIRECT | TYPE_DIRENTRY
-    __u64 k_offset:60;
-#else
-# error "nuxi/pdp-endian archs are not supported"
-#endif
-} __attribute__ ((__packed__));
-
-
-/* Key of the object determines object's location in the tree, composed of 4 components */
-struct key {
-    __u32 k2_dir_id;    /* packing locality: by default parent directory object id */
-    __u32 k2_objectid;  /* object identifier */
-    union {
-	struct offset_v1 k2_offset_v1;
-	struct offset_v2 k2_offset_v2;
-    } __attribute__ ((__packed__)) u;
-} __attribute__ ((__packed__));
-
-
-/* set/get fields of keys on disk with these defines */
-#define get_key_dirid(k)		get_le32 (k, k2_dir_id)
-#define set_key_dirid(k,val)		set_le32 (k, k2_dir_id, val)
-
-#define get_key_objectid(k)		get_le32 (k, k2_objectid)
-#define set_key_objectid(k,val)		set_le32 (k, k2_objectid, val)
-
-#define get_key_offset_v1(k)		get_le32 (k, u.k2_offset_v1.k_offset)
-#define set_key_offset_v1(k,val)	set_le32 (k, u.k2_offset_v1.k_offset, val)
-
-#define get_key_uniqueness(k)		get_le32 (k, u.k2_offset_v1.k_uniqueness)
-#define set_key_uniqueness(k,val)	set_le32 (k, u.k2_offset_v1.k_uniqueness, val)
-
-
-/*
-#define get_key_offset_v2(k)		get_le64 (k, u.k2_offset_v2.k_offset)
-#define set_key_offset_v2(k,val)	set_le64 (k, u.k2_offset_v2.k_offset, val)
-*/
-/* ??? */
-/*
-#define get_key_type(k)			get_le16 (k, u.k2_offset_v2.k_type)
-#define set_key_type(k,val)		set_le16 (k, u.k2_offset_v2.k_type, val)
-*/
-/*
-#define key_dir_id(key)                 (le32_to_cpu((key)->k_dir_id))
-#define set_key_dir_id(key,n)           ((key)->k_dir_id = cpu_to_le32((n)))
-#define key_objectid(key)               (le32_to_cpu((key)->k_objectid))
-#define set_key_objectid(key,n)         ((key)->k_objectid = cpu_to_le32((n)))
-*/
-
-#define KEY_SIZE (sizeof(struct key))
-#define SHORT_KEY_SIZE 8
-
-
-// values for k_uniqueness field of the struct key
-#define V1_SD_UNIQUENESS 0
-#define V1_DIRENTRY_UNIQUENESS 500
-#define DIRENTRY_UNIQUENESS 500
-#define V1_DIRECT_UNIQUENESS 0xffffffff
-#define V1_INDIRECT_UNIQUENESS 0xfffffffe
-#define V1_UNKNOWN_UNIQUENESS 555
-
-// values for k_type field of the struct key
-#define TYPE_STAT_DATA 0
-#define TYPE_INDIRECT 1
-#define TYPE_DIRECT 2
-#define TYPE_DIRENTRY 3 
-
-#define TYPE_UNKNOWN 15
-
-/* special type for symlink not conflicting to any of item types. */
-#define TYPE_SYMLINK	4
-
-#define KEY_FORMAT_1 0
-#define KEY_FORMAT_2 1
-#define KEY_FORMAT_UNDEFINED 15
-
- /* Our function for comparing keys can compare keys of different lengths.  It
-    takes as a parameter the length of the keys it is to compare.  These
-    defines are used in determining what is to be passed to it as that
-    parameter. */
-#define REISERFS_FULL_KEY_LEN     4
-
-#define REISERFS_SHORT_KEY_LEN    2
-
-
-/* Everything in the filesystem is stored as a set of items.  The item head
-   contains the key of the item, its free space (for indirect items) and
-   specifies the location of the item itself within the block.  */
-
-struct item_head
-{
-    struct key ih_key; 	/* Everything in the tree is found by searching for it
-                           based on its key.*/
-
-    union {
-	__u16 ih2_free_space; /* The free space in the last unformatted node
-				of an indirect item if this is an indirect
-				item.  This equals 0xFFFF iff this is a direct
-				item or stat data item. Note that the key, not
-				this field, is used to determine the item
-				type, and thus which field this union
-				contains. */
-	__u16 ih2_entry_count; /* Iff this is a directory item, this field
-				  equals the number of directory entries in
-				  the directory item. */
-    } __attribute__ ((__packed__)) u;
-    __u16 ih2_item_len;           /* total size of the item body */
-    __u16 ih2_item_location;      /* an offset to the item body within the
-                                    block */
-
-    __u16 ih_format;	/* key format is stored in bits 0-11 of this item
-			   flags are stored in bits 12-15 */
-#if 0
-    struct {
-	__u16 key_format : 12; /* KEY_FORMAT_1 or KEY_FORMAT_2. This is not
-				  necessary, but we have space, let use it */
-	__u16 flags : 4;   /* fsck set here its flag (reachable/unreachable) */
-    } __attribute__ ((__packed__)) ih2_format;
-#endif
-} __attribute__ ((__packed__));
-
-
-/* size of item header     */
-#define IH_SIZE (sizeof(struct item_head))
-
-/* set/get fields of item head on disk with these defines */
-#define get_ih_entry_count(ih)		get_le16 (ih, u.ih2_entry_count)
-#define set_ih_entry_count(ih,val)	set_le16 (ih, u.ih2_entry_count, val)
-
-#define get_ih_free_space(ih)		get_le16 (ih, u.ih2_free_space)
-#define set_ih_free_space(ih,val)	set_le16 (ih, u.ih2_free_space, 0)
-
-#define get_ih_item_len(ih)		get_le16 (ih, ih2_item_len)
-#define set_ih_item_len(ih,val)		set_le16 (ih, ih2_item_len, val)
-
-#define get_ih_location(ih)		get_le16 (ih, ih2_item_location)
-#define set_ih_location(ih,val)		set_le16 (ih, ih2_item_location, val)
-
-__u16 get_ih_flags (const struct item_head * ih);
-__u16 get_ih_key_format (const struct item_head * ih);
-void set_ih_flags (struct item_head * ih, __u16 val);
-void set_ih_key_format (struct item_head * ih, __u16 val);
-
-
-/*
-#define get_ih_key_format(ih)		get_le16 (ih, ih2_format.key_format)
-#define set_ih_key_format(ih,val)	set_le16 (ih, ih2_format.key_format, val)
-
-#define get_ih_flags(ih)		get_le16 (ih, ih2_format.flags)
-#define set_ih_flags(ih,val)		set_le16 (ih, ih2_format.flags, val)
-*/
-
-#define I_K_KEY_IN_ITEM(p_s_ih, p_s_key, n_blocksize) \
-    ( ! not_of_one_file(p_s_ih, p_s_key) && \
-          I_OFF_BYTE_IN_ITEM(p_s_ih, get_offset (p_s_key), n_blocksize) )
-
-#define IH_Unreachable 0
-#define IH_Was_Tail    1
-#define IH_Checked     2
-#define IH_Writable    3
-
-
-/* Bad item flag is set temporary by recover_leaf */
-/*
-extern_inline __u16 mark_ih_bad( struct item_head *ih )
-{
-    set_ih_flags(ih, get_ih_flags(ih) | IH_Bad );
-    return get_ih_flags(ih);
-}
-
-extern_inline __u16 ih_bad( struct item_head *ih )
-{
-    __u16 tmp = get_ih_flags(ih);
-    return test_bit(IH_Bad, &tmp );
-}
-
-extern_inline __u16 unmark_item_bad( struct item_head *ih )
-{
-    __u16 tmp = get_ih_flags(ih);
-    clear_bit( IH_Bad, &tmp );
-    set_ih_flags( ih, tmp );
-    return tmp;
-}
-*/
-
-/* Unreachable bit is set on tree rebuilding and is cleared in semantic pass */
-#define clean_ih_flags(ih) set_ih_flags (ih, 0)
-
-#define ih_reachable(ih)        (!(get_ih_flags (ih) & (1 << IH_Unreachable)))
-#define mark_ih_reachable(ih)   set_ih_flags (ih, get_ih_flags (ih) & ~(1 << IH_Unreachable))
-#define mark_ih_unreachable(ih) set_ih_flags (ih, get_ih_flags (ih) | (1 << IH_Unreachable))
-
-#define ih_was_tail(ih)         (get_ih_flags (ih) & (1 << IH_Was_Tail))
-#define mark_ih_was_tail(ih)    set_ih_flags (ih, get_ih_flags (ih) | (1 << IH_Was_Tail))
-#define mark_ih_become_tail(ih) set_ih_flags (ih, get_ih_flags (ih) & ~(1 << IH_Was_Tail))
-
-#define ih_checked(ih)          (get_ih_flags (ih) & (1 << IH_Checked))
-#define mark_ih_checked(ih)     set_ih_flags (ih, get_ih_flags (ih) | (1 << IH_Checked))
-#define clear_ih_checked(ih)    set_ih_flags (ih, get_ih_flags (ih) & ~(1 << IH_Checked))
-
-#define ih_writable(ih)         (get_ih_flags (ih) & (1 << IH_Writable))
-#define mark_ih_writable(ih)    set_ih_flags (ih, get_ih_flags (ih) | (1 << IH_Writable))
-#define clear_ih_writable(ih)   set_ih_flags (ih, get_ih_flags (ih) & ~(1 << IH_Writable))
-
-/* maximal length of item */
-#define MAX_ITEM_LEN(block_size) (block_size - BLKH_SIZE - IH_SIZE)
-#define MIN_ITEM_LEN 1
-
-
-/* object identifier for root dir */
-#define REISERFS_ROOT_OBJECTID 2
-#define REISERFS_ROOT_PARENT_OBJECTID 1
-
-
-/* 
- * Picture represents a leaf of internal tree
- *  ______________________________________________________
- * |      |  Array of     |                   |           |
- * |Block |  Object-Item  |      F r e e      |  Objects- |
- * | head |  Headers      |     S p a c e     |   Items   |
- * |______|_______________|___________________|___________|
- */
-
-/* Header of a disk block.  More precisely, header of a formatted leaf
-   or internal node, and not the header of an unformatted node. */
-struct block_head {       
-    __u16 blk2_level;        /* Level of a block in the tree. */
-    __u16 blk2_nr_item;      /* Number of keys/items in a block. */
-    __u16 blk2_free_space;   /* Block free space in bytes. */
-    __u16 blk_reserved;
-    __u32 reserved [4];
-};
-
-#define BLKH_SIZE (sizeof(struct block_head))
-
-/* set/get fields of block head on disk with these defines */
-#define get_blkh_level(blkh)		get_le16 (blkh, blk2_level)
-#define set_blkh_level(blkh,val)	set_le16 (blkh, blk2_level, val)
-
-#define get_blkh_nr_items(blkh)		get_le16 (blkh, blk2_nr_item)
-#define set_blkh_nr_items(blkh,val)	set_le16 (blkh, blk2_nr_item, val)
-
-#define get_blkh_free_space(blkh)	get_le16 (blkh, blk2_free_space)
-#define set_blkh_free_space(blkh,val)	set_le16 (blkh, blk2_free_space, val)
-
-
-
-
-
-/*
- * values for blk_type field
- */
-
-#define FREE_LEVEL        0 /* Node of this level is out of the tree. */
-#define DISK_LEAF_NODE_LEVEL  1 /* Leaf node level.                       */
-
-
-#define is_leaf_block_head(buf) (get_blkh_level ((struct block_head *)(buf)) == DISK_LEAF_NODE_LEVEL)
-#define is_internal_block_head(buf) \
-((get_blkh_level (((struct block_head *)(buf))) > DISK_LEAF_NODE_LEVEL) &&\
- (get_blkh_level (((struct block_head *)(buf))) <= MAX_HEIGHT))
-
-
-/* Given the buffer head of a formatted node, resolve to the block head of that node. */
-#define B_BLK_HEAD(p_s_bh)  ((struct block_head *)((p_s_bh)->b_data))
-
-
-#define B_NR_ITEMS(bh)		get_blkh_nr_items (B_BLK_HEAD(bh))
-#define B_LEVEL(bh)		get_blkh_level (B_BLK_HEAD(bh))
-#define B_FREE_SPACE(bh)	get_blkh_free_space (B_BLK_HEAD(bh))
-
-
-#define is_leaf_node(bh) is_leaf_block_head ((bh)->b_data)
-#define is_internal_node(bh) is_internal_block_head ((bh)->b_data)
-
-
-
-
-
-
-/***************************************************************************/
-/*                             STAT DATA                                   */
-/***************************************************************************/
-
-/* Stat Data on disk (reiserfs version of UFS disk inode minus the address blocks) */
-
-/* The sense of adding union to stat data is to keep a value of real number of
-   blocks used by file.  The necessity of adding such information is caused by
-   existing of files with holes.  Reiserfs should keep number of used blocks
-   for file, but not calculate it from file size (that is not correct for
-   holed files). Thus we have to add additional information to stat data.
-   When we have a device special file, there is no need to get number of used
-   blocks for them, and, accordingly, we doesn't need to keep major and minor
-   numbers for regular files, which might have holes. So this field is being
-   overloaded.  */
-
-struct stat_data_v1 {
-    __u16 sd_mode;	/* file type, permissions */
-    __u16 sd_nlink;	/* number of hard links */
-    __u16 sd_uid;		/* owner */
-    __u16 sd_gid;		/* group */
-    __u32 sd_size;	/* file size */
-    __u32 sd_atime;	/* time of last access */
-    __u32 sd_mtime;	/* time file was last modified  */
-    __u32 sd_ctime;	/* time inode (stat data) was last changed (except
-                           changes to sd_atime and sd_mtime) */
-    union {
-	__u32 sd_rdev;
-	__u32 sd_blocks;	/* number of blocks file uses */
-    } __attribute__ ((__packed__)) u;
-    __u32 sd_first_direct_byte; /* first byte of file which is stored
-				   in a direct item: except that if it
-				   equals 1 it is a symlink and if it
-				   equals MAX_KEY_OFFSET there is no
-				   direct item.  The existence of this
-				   field really grates on me. Let's
-				   replace it with a macro based on
-				   sd_size and our tail suppression
-				   policy.  Someday.  -Hans */
-} __attribute__ ((__packed__));
-#define SD_V1_SIZE (sizeof(struct stat_data_v1))
-
-
-/* this is used to check sd_size of stat data v1 */
-#define MAX_FILE_SIZE_V1 0x7fffffff
-
-
-// sd_first_direct_byte is set to this when there are no direct items in a
-// file
-#define NO_BYTES_IN_DIRECT_ITEM 0xffffffff
-
-
-/* Stat Data on disk (reiserfs version of UFS disk inode minus the
-   address blocks) */
-struct stat_data {
-    __u16 sd_mode;	/* file type, permissions */
-    __u16 sd_attrs;
-    __u32 sd_nlink;	/* 32 bit nlink! */
-    __u64 sd_size;	/* 64 bit size!*/
-    __u32 sd_uid;	/* 32 bit uid! */
-    __u32 sd_gid;	/* 32 bit gid! */
-    __u32 sd_atime;	/* time of last access */
-    __u32 sd_mtime;	/* time file was last modified  */
-    __u32 sd_ctime;	/* time inode (stat data) was last changed (except
-                           changes to sd_atime and sd_mtime) */
-    __u32 sd_blocks;
-    union {
-	__u32 sd_rdev;
-	__u32 sd_generation;
-      //__u32 sd_first_direct_byte; 
-      /* first byte of file which is stored in a direct item: except that if
-	 it equals 1 it is a symlink and if it equals ~(__u32)0 there is no
-	 direct item.  The existence of this field really grates on me. Let's
-	 replace it with a macro based on sd_size and our tail suppression
-	 policy? */
-  } __attribute__ ((__packed__)) u;
-} __attribute__ ((__packed__));
-//
-// this is 44 bytes long
-//
-#define SD_SIZE (sizeof(struct stat_data))
-
-// there are two ways: to check length of item or ih_format field
-// (for old stat data it is set to 0 (KEY_FORMAT_1))
-#define stat_data_v1(ih) (get_ih_key_format (ih) == KEY_FORMAT_1)
-
-/* this is used to check sd_size of stat data v2: max offset which can
-   be reached with a key of format 2 is 60 bits */
-#define MAX_FILE_SIZE_V2 0xfffffffffffffffLL
-
-
-/***************************************************************************/
-/*                      DIRECTORY STRUCTURE                                */
-/***************************************************************************/
-/* 
-   Picture represents the structure of directory items
-   ________________________________________________
-   |  Array of     |   |     |        |       |   |
-   | directory     |N-1| N-2 | ....   |   1st |0th|
-   | entry headers |   |     |        |       |   |
-   |_______________|___|_____|________|_______|___|
-                    <----   directory entries         ------>
-
- First directory item has k_offset component 1. We store "." and ".."
- in one item, always, we never split "." and ".." into differing
- items.  This makes, among other things, the code for removing
- directories simpler. */
-#define SD_OFFSET  0
-#define DOT_OFFSET 1
-#define DOT_DOT_OFFSET 2
-
-
-/* Each directory entry has its header. This header has deh_dir_id and
-   deh_objectid fields, those are key of object, entry points to */
-
-/* NOT IMPLEMENTED:   
-   Directory will someday contain stat data of object */
-struct reiserfs_de_head
-{
-    __u32 deh2_offset;  /* third component of the directory entry key */
-    __u32 deh2_dir_id;  /* objectid of the parent directory of the object,
-			   that is referenced by directory entry */
-    __u32 deh2_objectid;/* objectid of the object, that is referenced by
-			   directory entry */
-    __u16 deh2_location;/* offset of name in the whole item */
-    __u16 deh2_state;   /* whether 1) entry contains stat data (for future),
-			   and 2) whether entry is hidden (unlinked) */
-} __attribute__ ((__packed__));
-
-#define DEH_SIZE sizeof(struct reiserfs_de_head)
-
-/* set/get fields of dir entry head these defines */
-#define get_deh_offset(deh)	get_le32 (deh, deh2_offset)
-#define set_deh_offset(deh,val)	set_le32 (deh, deh2_offset, val)
-
-#define get_deh_dirid(deh)	get_le32 (deh, deh2_dir_id)
-#define set_deh_dirid(deh,val)	set_le32 (deh, deh2_dir_id, val)
-
-#define get_deh_objectid(deh)		get_le32 (deh, deh2_objectid)
-#define set_deh_objectid(deh,val)	set_le32 (deh, deh2_objectid, val)
-
-#define get_deh_location(deh)		get_le16 (deh, deh2_location)
-#define set_deh_location(deh,val)	set_le16 (deh, deh2_location, val)
-
-#define get_deh_state(deh)	get_le16 (deh, deh2_state)
-#define set_deh_state(deh,val)	set_le16 (deh, deh2_state, val)
-
-
-
-#define deh_offset(deh) (le32_to_cpu ((deh)->deh_offset))
-#define deh_dir_id(deh) (le32_to_cpu ((deh)->deh_dir_id))
-#define deh_objectid(deh) (le32_to_cpu ((deh)->deh_objectid))
-#define deh_location(deh) (le16_to_cpu ((deh)->deh_location))
-#define deh_state(deh) (le16_to_cpu ((deh)->deh_state))
-
-
-/* empty directory contains two entries "." and ".." and their headers */
-#define EMPTY_DIR_SIZE \
-(DEH_SIZE * 2 + ROUND_UP (strlen (".")) + ROUND_UP (strlen ("..")))
-
-/* old format directories have this size when empty */
-#define EMPTY_DIR_SIZE_V1 (DEH_SIZE * 2 + 3)
-
-#define DEH_Statdata 0			/* not used now */
-#define DEH_Visible2 2
-
-#define DEH_Bad_offset 4 /* fsck marks entries to be deleted with this flag */
-#define DEH_Bad_location 5
-
-
-#define test_deh_state_le_bit(deh,bit) (get_deh_state (deh) & (1 << bit))
-
-#define set_deh_state_le_bit(deh,bit) \
-{\
-	__u16 state;\
-	state = get_deh_state (deh);\
-	state |= (1 << bit);\
-	set_deh_state(deh, state);\
-}
-
-#define clear_deh_state_le_bit(deh,bit) \
-{\
-	__u16 state;\
-	state = get_deh_state (deh);\
-	state &= ~(1 << bit);\
-	set_deh_state(deh, state);\
-}
-
-
-#define mark_de_without_sd(deh)	clear_deh_state_le_bit (deh, DEH_Statdata)
-#define mark_de_visible(deh)	set_deh_state_le_bit (deh, DEH_Visible2)
-#define mark_de_hidden(deh)	clear_deh_state_le_bit (deh, DEH_Visible)
-
-#define de_with_sd(deh)		test_deh_state_le_bit (deh, DEH_Statdata)
-#define de_visible(deh)	    	test_deh_state_le_bit (deh, DEH_Visible2)
-#define de_hidden(deh)	    	!test_deh_state_le_bit (deh, DEH_Visible2)
-
-/* Bad means "hashed unproperly or/and invalid location" */
-#define de_bad_location(deh)	test_deh_state_le_bit (deh, DEH_Bad_location)
-#define mark_de_bad_location(deh) set_deh_state_le_bit (deh, DEH_Bad_location)
-#define mark_de_good_location(deh) clear_deh_state_le_bit (deh, DEH_Bad_location)
-
-#define de_bad_offset(deh)	test_deh_state_le_bit (deh, DEH_Bad_offset)
-#define mark_de_bad_offset(deh)	set_deh_state_le_bit (deh, DEH_Bad_offset)
-
-#define de_bad(deh) (de_bad_location(deh) || de_bad_offset(deh))
-
-
-/* for directories st_blocks is number of 512 byte units which fit into dir
-   size round up to blocksize */
-#define dir_size2st_blocks(size) ((size + 511) / 512)
-
-/* array of the entry headers */
-#define B_I_DEH(bh,ih) ((struct reiserfs_de_head *)(B_I_PITEM(bh,ih)))
-
-#define REISERFS_MAX_NAME_LEN(block_size) (block_size - BLKH_SIZE - IH_SIZE - DEH_SIZE)
-	/* -SD_SIZE when entry will contain stat data */
-
-
-/* hash value occupies 24 bits starting from 7 up to 30 */
-#define GET_HASH_VALUE(offset) ((offset) & 0x7fffff80)
-/* generation number occupies 7 bits starting from 0 up to 6 */
-#define GET_GENERATION_NUMBER(offset) ((offset) & 0x0000007f)
-
-
-/*
- * Picture represents an internal node of the reiserfs tree
- *  ______________________________________________________
- * |      |  Array of     |  Array of         |  Free     |
- * |block |    keys       |  pointers         | space     |
- * | head |      N        |      N+1          |           |
- * |______|_______________|___________________|___________|
- */
-
-/***************************************************************************/
-/*                      DISK CHILD                                         */
-/***************************************************************************/
-/* Disk child pointer: The pointer from an internal node of the tree
-   to a node that is on disk. */
-struct disk_child {
-    __u32 dc2_block_number;              /* Disk child's block number. */
-    __u16 dc2_size;		            /* Disk child's used space.   */
-    __u16 dc2_reserved;
-} __attribute__ ((__packed__));
-
-#define DC_SIZE (sizeof(struct disk_child))
-
-/* set/get fields of disk_child with these defines */
-#define get_dc_child_blocknr(dc)	get_le32 (dc, dc2_block_number)
-#define set_dc_child_blocknr(dc,val)	set_le32 (dc, dc2_block_number, val)
-
-#define get_dc_child_size(dc)		get_le16 (dc, dc2_size)
-#define set_dc_child_size(dc,val)	set_le16 (dc, dc2_size, val)
-
-#define set_dc(dc, size, blocknr)	\
-({					\
-    set_dc_child_blocknr(dc, blocknr);	\
-    set_dc_child_size(dc, size);	\
-    set_le16(dc, dc2_reserved, 0);	\
-})
-
-/* Get disk child by buffer header and position in the tree node. */
-#define B_N_CHILD(p_s_bh,n_pos)  ((struct disk_child *)\
-            ((p_s_bh)->b_data + BLKH_SIZE + B_NR_ITEMS(p_s_bh) \
-            * KEY_SIZE + DC_SIZE * (n_pos)))
-
-
- /* maximal value of field child_size in structure disk_child */ 
- /* child size is the combined size of all items and their headers */
-#define MAX_CHILD_SIZE(blocksize) ((blocksize) - BLKH_SIZE)
-#define MAX_FREE_SPACE(blocksize) MAX_CHILD_SIZE(blocksize)
-
-/* amount of used space in buffer (not including block head) */
-#define B_CHILD_SIZE(cur) (MAX_CHILD_SIZE(cur->b_size)-(B_FREE_SPACE(cur)))
-
-/* max and min number of keys in internal node */
-#define MAX_NR_KEY(bh) ( (MAX_CHILD_SIZE(bh->b_size)-DC_SIZE)/(KEY_SIZE+DC_SIZE) )
-#define MIN_NR_KEY(bh)    (MAX_NR_KEY(bh)/2)
-
-
-/***************************************************************************/
-/*                      PATH STRUCTURES AND DEFINES                        */
-/***************************************************************************/
-
-/* Search_by_key fills up the path from the root to the leaf as it
-   descends the tree looking for the key.  It uses reiserfs_bread to
-   try to find buffers in the cache given their block number.  If it
-   does not find them in the cache it reads them from disk.  For each
-   node search_by_key finds using reiserfs_bread it then uses
-   bin_search to look through that node.  bin_search will find the
-   position of the block_number of the next node if it is looking
-   through an internal node.  If it is looking through a leaf node
-   bin_search will find the position of the item which has key either
-   equal to given key, or which is the maximal key less than the given
-   key. */
-
-struct path_element  {
-    struct buffer_head * pe_buffer; /* Pointer to the buffer at the path in
-				       the tree. */
-    int pe_position;  /* Position in the tree node which is placed in the
-			 buffer above. */
-};
-
-
-#define MAX_HEIGHT 6
-#define FIRST_PATH_ELEMENT_OFFSET   2
-#define EXTENDED_MAX_HEIGHT         (MAX_HEIGHT + FIRST_PATH_ELEMENT_OFFSET)
-
-#define ILLEGAL_PATH_ELEMENT_OFFSET 1
-#define MAX_FEB_SIZE (MAX_HEIGHT + 1)
-
-
-
-/* We need to keep track of who the ancestors of nodes are.  When we
-   perform a search we record which nodes were visited while
-   descending the tree looking for the node we searched for. This list
-   of nodes is called the path.  This information is used while
-   performing balancing.  Note that this path information may become
-   invalid, and this means we must check it when using it to see if it
-   is still valid. You'll need to read search_by_key and the comments
-   in it, especially about decrement_counters_in_path(), to understand
-   this structure. */
-struct path {
-  unsigned int          path_length;                      	/* Length of the array above.   */
-  struct  path_element  path_elements[EXTENDED_MAX_HEIGHT];	/* Array of the path elements.  */
-  unsigned int		pos_in_item;
-};
-
-#define INITIALIZE_PATH(var) \
-struct path var = {ILLEGAL_PATH_ELEMENT_OFFSET, }
-
-/* Get path element by path and path position. */
-#define PATH_OFFSET_PELEMENT(p_s_path,n_offset)  ((p_s_path)->path_elements +(n_offset))
-
-/* Get buffer header at the path by path and path position. */
-#define PATH_OFFSET_PBUFFER(p_s_path,n_offset)   (PATH_OFFSET_PELEMENT(p_s_path,n_offset)->pe_buffer)
-
-/* Get position in the element at the path by path and path position. */
-#define PATH_OFFSET_POSITION(p_s_path,n_offset) (PATH_OFFSET_PELEMENT(p_s_path,n_offset)->pe_position)
-
-
-#define PATH_PLAST_BUFFER(p_s_path) (PATH_OFFSET_PBUFFER((p_s_path), (p_s_path)->path_length))
-#define PATH_LAST_POSITION(p_s_path) (PATH_OFFSET_POSITION((p_s_path), (p_s_path)->path_length))
-
-
-#define PATH_PITEM_HEAD(p_s_path)    B_N_PITEM_HEAD(PATH_PLAST_BUFFER(p_s_path),PATH_LAST_POSITION(p_s_path))
-
-/* in do_balance leaf has h == 0 in contrast with path structure,
-   where root has level == 0. That is why we need these defines */
-#define PATH_H_PBUFFER(p_s_path, h) PATH_OFFSET_PBUFFER (p_s_path, p_s_path->path_length - (h))	/* tb->S[h] */
-#define PATH_H_PPARENT(path, h) PATH_H_PBUFFER (path, (h) + 1)			/* tb->F[h] or tb->S[0]->b_parent */
-#define PATH_H_POSITION(path, h) PATH_OFFSET_POSITION (path, path->path_length - (h))	
-#define PATH_H_B_ITEM_ORDER(path, h) PATH_H_POSITION(path, h + 1)		/* tb->S[h]->b_item_order */
-
-#define PATH_H_PATH_OFFSET(p_s_path, n_h) ((p_s_path)->path_length - (n_h))
-
-#define get_bh(path) PATH_PLAST_BUFFER(path)
-#define get_ih(path) PATH_PITEM_HEAD(path)
-#define get_item_pos(path) PATH_LAST_POSITION(path)
-#define get_item(path) ((void *)B_N_PITEM(PATH_PLAST_BUFFER(path), PATH_LAST_POSITION (path)))
-#define item_moved(ih,path) comp_items(ih, path)
-#define path_changed(ih,path) comp_items (ih, path)
-
-
-/***************************************************************************/
-/*                       MISC                                              */
-/***************************************************************************/
-
-/* n must be power of 2 */
-#define _ROUND_UP(x,n) (((x)+(n)-1u) & ~((n)-1u))
-
-// to be ok for alpha and others we have to align structures to 8 byte
-// boundary.
-// FIXME: do not change 4 by anything else: there is code which relies on that
-#define ROUND_UP(x) _ROUND_UP(x,8LL)
-
-
-// search_by_key (and clones) and fix_nodes error code
-#define CARRY_ON		    0
-
-#define NO_DISK_SPACE		    3
-/* #define IO_ERROR		    0x4 - defined above as 0x4 */
-#define NO_BALANCING_NEEDED	    5
-#define ITEM_FOUND		    6
-#define ITEM_NOT_FOUND		    7
-#define GOTO_PREVIOUS_ITEM	    10
-#define POSITION_FOUND_INVISIBLE    11
-#define FILE_NOT_FOUND		    12
-
-// used by fsck
-#define DIRECTORY_NOT_FOUND	    13 
-#define REGULAR_FILE_FOUND	    14
-#define DIRECTORY_FOUND		    15
-
-
-struct unfm_nodeinfo {
-    __u32	 unfm_nodenum;
-    __u16 unfm_freespace;
-};
-
-
-/* Size of pointer to the unformatted node. */
-#define UNFM_P_SIZE (sizeof(__u32))
-
-
-#define MAX_KEY1_OFFSET	 0xffffffff
-#define MAX_KEY2_OFFSET  0xfffffffffffffffLL
-
-/* this is aggressive tail suppression policy taken from the kernel */
-/* It should be MAX_DIRECT_ITEM_LEN used here, but sometimes it is not enough,
- * and items got deleted. */
-#define STORE_TAIL_IN_UNFM(n_file_size,n_tail_size,n_block_size) \
-(\
-  (!(n_tail_size)) || \
-  (((n_tail_size) > MAX_ITEM_LEN(n_block_size)) || \
-   ( (n_file_size) >= (n_block_size) * 4 ) || \
-   ( ( (n_file_size) >= (n_block_size) * 3 ) && \
-     ( (n_tail_size) >=   (MAX_ITEM_LEN(n_block_size))/4) ) || \
-   ( ( (n_file_size) >= (n_block_size) * 2 ) && \
-     ( (n_tail_size) >=   (MAX_ITEM_LEN(n_block_size))/2) ) || \
-   ( ( (n_file_size) >= (n_block_size) ) && \
-     ( (n_tail_size) >=   (MAX_ITEM_LEN(n_block_size) * 3)/4) ) ) \
-)
-
-
-/***************************************************************************/
-/*                  FIXATE NODES                                           */
-/***************************************************************************/
-
-#define VI_TYPE_STAT_DATA 1
-#define VI_TYPE_DIRECT 2
-#define VI_TYPE_INDIRECT 4
-#define VI_TYPE_DIRECTORY 8
-#define VI_TYPE_FIRST_DIRECTORY_ITEM 16
-#define VI_TYPE_INSERTED_DIRECTORY_ITEM 32
-
-#define VI_TYPE_LEFT_MERGEABLE 64
-#define VI_TYPE_RIGHT_MERGEABLE 128
-
-/* To make any changes in the tree we always first find node, that contains
-   item to be changed/deleted or place to insert a new item. We call this node
-   S. To do balancing we need to decide what we will shift to left/right
-   neighbor, or to a new node, where new item will be etc. To make this
-   analysis simpler we build virtual node. Virtual node is an array of items,
-   that will replace items of node S. (For instance if we are going to delete
-   an item, virtual node does not contain it). Virtual node keeps information
-   about item sizes and types, mergeability of first and last items, sizes of
-   all entries in directory item. We use this array of items when calculating
-   what we can shift to neighbors and how many nodes we have to have if we do
-   not any shiftings, if we shift to left/right neighbor or to both. */
-struct virtual_item
-{
-    unsigned short vi_type;	/* item type, mergeability */
-    unsigned short vi_item_len; /* length of item that it will have after balancing */
-    __u64 vi_item_offset; /* offset of item that it have before balancing */
-
-    short vi_entry_count;	/* number of entries in directory item
-				   (including the new one if any, or excluding
-				   entry if it must be cut) */
-    unsigned short * vi_entry_sizes; /* array of entry lengths for directory item */
-};
-
-struct virtual_node
-{
-    char * vn_free_ptr;	 /* this is a pointer to the free space in the buffer */
-    unsigned short vn_nr_item;	/* number of items in virtual node */
-    short vn_size; /* size of node , that node would have if it has unlimited
-		      size and no balancing is performed */
-    short vn_mode;		/* mode of balancing (paste, insert, delete, cut) */
-    short vn_affected_item_num; 
-    short vn_pos_in_item;
-    struct item_head * vn_ins_ih;	/* item header of inserted item, 0 for other modes */
-    struct virtual_item * vn_vi;	/* array of items (including a new one, excluding item to be deleted) */
-};
-
-
-/***************************************************************************/
-/*                  TREE BALANCE                                           */
-/***************************************************************************/
-
-/* This temporary structure is used in tree balance algorithms, and
-   constructed as we go to the extent that its various parts are needed.  It
-   contains arrays of nodes that can potentially be involved in the balancing
-   of node S, and parameters that define how each of the nodes must be
-   balanced.  Note that in these algorithms for balancing the worst case is to
-   need to balance the current node S and the left and right neighbors and all
-   of their parents plus create a new node.  We implement S1 balancing for the
-   leaf nodes and S0 balancing for the internal nodes (S1 and S0 are defined
-   in our papers.)*/
-
-#define MAX_FREE_BLOCK 7	/* size of the array of buffers to free at end of do_balance */
-
-/* maximum number of FEB blocknrs on a single level */
-#define MAX_AMOUNT_NEEDED 2
-
-/* someday somebody will prefix every field in this struct with tb_ */
-struct tree_balance
-{
-    struct reiserfs_transaction_handle *transaction_handle ;
-    reiserfs_filsys_t * tb_fs;
-    struct path * tb_path;
-    struct buffer_head * L[MAX_HEIGHT];        /* array of left neighbors of nodes in the path */
-    struct buffer_head * R[MAX_HEIGHT];        /* array of right neighbors of nodes in the path*/
-    struct buffer_head * FL[MAX_HEIGHT];       /* array of fathers of the left  neighbors      */
-    struct buffer_head * FR[MAX_HEIGHT];       /* array of fathers of the right neighbors      */
-    struct buffer_head * CFL[MAX_HEIGHT];      /* array of common parents of center node and its left neighbor  */
-    struct buffer_head * CFR[MAX_HEIGHT];      /* array of common parents of center node and its right neighbor */
-    
-    /* array of blocknr's that are free and are the nearest to the left node that are usable
-       for writing dirty formatted leaves, using the write_next_to algorithm. */
-    /*unsigned long free_and_near[MAX_DIRTIABLE];*/
-    
-    struct buffer_head * FEB[MAX_FEB_SIZE]; /* array of empty buffers. Number of buffers in array equals
-					       cur_blknum. */
-    struct buffer_head * used[MAX_FEB_SIZE];
-    short int lnum[MAX_HEIGHT];	/* array of number of items which must be shifted to the left in
-				   order to balance the current node; for leaves includes item
-				   that will be partially shifted; for internal nodes, it is
-				   the number of child pointers rather than items. It includes
-				   the new item being created.  For preserve_shifted() purposes
-				   the code sometimes subtracts one from this number to get the
-				   number of currently existing items being shifted, and even
-				   more often for leaves it subtracts one to get the number of
-				   wholly shifted items for other purposes. */
-    short int rnum[MAX_HEIGHT];	/* substitute right for left in comment above */
-    short int lkey[MAX_HEIGHT];               /* array indexed by height h mapping the key delimiting L[h] and
-					       S[h] to its item number within the node CFL[h] */
-    short int rkey[MAX_HEIGHT];               /* substitute r for l in comment above */
-    short int insert_size[MAX_HEIGHT];        /* the number of bytes by we are trying to add or remove from
-						 S[h]. A negative value means removing.  */
-    short int blknum[MAX_HEIGHT];             /* number of nodes that will replace node S[h] after
-						 balancing on the level h of the tree.  If 0 then S is
-						 being deleted, if 1 then S is remaining and no new nodes
-						 are being created, if 2 or 3 then 1 or 2 new nodes is
-						 being created */
-    
-    /* fields that are used only for balancing leaves of the tree */
-    short int cur_blknum;	/* number of empty blocks having been already allocated			*/
-    short int s0num;             /* number of items that fall into left most  node when S[0] splits	*/
-    short int s1num;             /* number of items that fall into first  new node when S[0] splits	*/
-    short int s2num;             /* number of items that fall into second new node when S[0] splits	*/
-    short int lbytes;            /* number of bytes which can flow to the left neighbor from the	left	*/
-    /* most liquid item that cannot be shifted from S[0] entirely		*/
-    /* if -1 then nothing will be partially shifted */
-    short int rbytes;            /* number of bytes which will flow to the right neighbor from the right	*/
-    /* most liquid item that cannot be shifted from S[0] entirely		*/
-    /* if -1 then nothing will be partially shifted                           */
-    short int s1bytes;		/* number of bytes which flow to the first  new node when S[0] splits	*/
-            			/* note: if S[0] splits into 3 nodes, then items do not need to be cut	*/
-    short int s2bytes;
-    struct buffer_head * buf_to_free[MAX_FREE_BLOCK]; /* buffers which are to be freed after do_balance finishes by unfix_nodes */
-    char * vn_buf;		/* kmalloced memory. Used to create
-				   virtual node and keep map of
-				   dirtied bitmap blocks */
-    int vn_buf_size;		/* size of the vn_buf */
-    struct virtual_node * tb_vn;	/* VN starts after bitmap of bitmap blocks */
-} ;
-
-
-
-/* These are modes of balancing */
-
-/* When inserting an item. */
-#define M_INSERT	'i'
-/* When inserting into (directories only) or appending onto an already
-   existant item. */
-#define M_PASTE		'p'
-/* When deleting an item. */
-#define M_DELETE	'd'
-/* When truncating an item or removing an entry from a (directory) item. */
-#define M_CUT 		'c'
-
-/* used when balancing on leaf level skipped (in reiserfsck) */
-#define M_INTERNAL	'n'
-
-/* When further balancing is not needed, then do_balance does not need
-   to be called. */
-#define M_SKIP_BALANCING 		's'
-#define M_CONVERT	'v'
-
-/* modes of leaf_move_items */
-#define LEAF_FROM_S_TO_L 0
-#define LEAF_FROM_S_TO_R 1
-#define LEAF_FROM_R_TO_L 2
-#define LEAF_FROM_L_TO_R 3
-#define LEAF_FROM_S_TO_SNEW 4
-
-#define FIRST_TO_LAST 0
-#define LAST_TO_FIRST 1
-
-/* used in do_balance for passing parent of node information that has been
-   gotten from tb struct */
-struct buffer_info {
-    struct buffer_head * bi_bh;
-    struct buffer_head * bi_parent;
-    int bi_position;
-};
-
-
-/* there are 4 types of items: stat data, directory item, indirect, direct.
-   FIXME: This table does not describe new key format
-+-------------------+------------+--------------+------------+
-|	            |  k_offset  | k_uniqueness | mergeable? |
-+-------------------+------------+--------------+------------+
-|     stat data     |	0        |      0       |   no       |
-+-------------------+------------+--------------+------------+
-| 1st directory item| DOT_OFFSET |DIRENTRY_UNIQUENESS|   no       | 
-| non 1st directory | hash value |              |   yes      |
-|     item          |            |              |            |
-+-------------------+------------+--------------+------------+
-| indirect item     | offset + 1 |TYPE_INDIRECT |   if this is not the first indirect item of the object
-+-------------------+------------+--------------+------------+
-| direct item       | offset + 1 |TYPE_DIRECT   | if not this is not the first direct item of the object
-+-------------------+------------+--------------+------------+
-*/
-
-
-
-#define KEY_IS_STAT_DATA_KEY(p_s_key) 	( get_type (p_s_key) == TYPE_STAT_DATA )
-#define KEY_IS_DIRECTORY_KEY(p_s_key)	( get_type (p_s_key) == TYPE_DIRENTRY )
-#define KEY_IS_DIRECT_KEY(p_s_key) 	( get_type (p_s_key) == TYPE_DIRECT )
-#define KEY_IS_INDIRECT_KEY(p_s_key)	( get_type (p_s_key) == TYPE_INDIRECT )
-
-#define I_IS_STAT_DATA_ITEM(p_s_ih) 	KEY_IS_STAT_DATA_KEY(&((p_s_ih)->ih_key))
-#define I_IS_DIRECTORY_ITEM(p_s_ih) 	KEY_IS_DIRECTORY_KEY(&((p_s_ih)->ih_key))
-#define I_IS_DIRECT_ITEM(p_s_ih) 	KEY_IS_DIRECT_KEY(&((p_s_ih)->ih_key))
-#define I_IS_INDIRECT_ITEM(p_s_ih) 	KEY_IS_INDIRECT_KEY(&((p_s_ih)->ih_key))
-
-#define is_indirect_ih(ih) I_IS_INDIRECT_ITEM(ih)
-#define is_direct_ih(ih) I_IS_DIRECT_ITEM(ih)
-#define is_direntry_ih(ih) I_IS_DIRECTORY_ITEM(ih)
-#define is_stat_data_ih(ih) I_IS_STAT_DATA_ITEM(ih)
-
-#define is_indirect_key(key) KEY_IS_INDIRECT_KEY(key)
-#define is_direct_key(key) KEY_IS_DIRECT_KEY(key)
-#define is_direntry_key(key) KEY_IS_DIRECTORY_KEY(key)
-#define is_stat_data_key(key) KEY_IS_STAT_DATA_KEY(key)
-
-#define COMP_KEYS comp_keys
-
-//#define COMP_SHORT_KEYS comp_short_keys
-#define not_of_one_file comp_short_keys
-
-/* number of blocks pointed to by the indirect item */
-#define I_UNFM_NUM(p_s_ih)	( get_ih_item_len(p_s_ih) / UNFM_P_SIZE )
-
-/* the used space within the unformatted node corresponding to pos within the item pointed to by ih */
-#define I_POS_UNFM_SIZE(ih,pos,size) (((pos) == I_UNFM_NUM(ih) - 1 ) ? (size) - ih_free_space (ih) : (size))
-
-/* check whether byte number 'offset' is in this item */
-#define I_OFF_BYTE_IN_ITEM(p_s_ih, n_offset, n_blocksize) \
-                  ( get_offset(&(p_s_ih)->ih_key) <= (n_offset) && \
-                    get_offset(&(p_s_ih)->ih_key) + get_bytes_number(p_s_ih,n_blocksize) > (n_offset) )
-
-/* these operate on indirect items, where you've got an array of ints
-** at a possibly unaligned location.  These are a noop on ia32
-**
-** p is the array of __u32, i is the index into the array, v is the value
-** to store there.
-*/
-#define d32_get(p, i) le32_to_cpu(get_unaligned((p) + (i)))
-#define d32_put(p, i, v) put_unaligned(cpu_to_le32(v), (p) + (i))
-
-
-/* get the item header */ 
-#define B_N_PITEM_HEAD(bh,item_num) ( (struct item_head * )((bh)->b_data + BLKH_SIZE) + (item_num) )
-
-/* get key */
-#define B_N_PDELIM_KEY(bh,item_num) ( (struct key * )((bh)->b_data + BLKH_SIZE) + (item_num) )
-
-/* get the key */
-#define B_N_PKEY(bh,item_num) ( &(B_N_PITEM_HEAD(bh,item_num)->ih_key) )
-
-/* get item body */
-#define B_N_PITEM(bh,item_num) ( (bh)->b_data + get_ih_location (B_N_PITEM_HEAD((bh),(item_num))))
-
-/* get the stat data by the buffer header and the item order */
-#define B_N_STAT_DATA(bh,nr) \
-( (struct stat_data *)((bh)->b_data+get_ih_location(B_N_PITEM_HEAD((bh),(nr))) ) )
-
- /* following defines use reiserfs buffer header and item header */
- /* get item body */
-#define B_I_PITEM(bh,ih) ( (bh)->b_data + get_ih_location(ih))
-
-/* get stat-data */
-#define B_I_STAT_DATA(bh, ih) ( (struct stat_data * )B_I_PITEM(bh,ih) )
-
-#define MAX_DIRECT_ITEM_LEN(size) ((size) - BLKH_SIZE - 2*IH_SIZE - SD_SIZE - UNFM_P_SIZE)
-#define MAX_INDIRECT_ITEM_LEN(size) MAX_ITEM_LEN(size)
-
-/***************************************************************************/
-/*                    FUNCTION DECLARATIONS                                */
-/***************************************************************************/
-
-
-
-/* stree.c */
-void padd_item (char * item, int total_length, int length);
-int B_IS_IN_TREE(struct buffer_head *);
-struct key * get_rkey (struct path * p_s_chk_path, reiserfs_filsys_t *);
-int bin_search (void * p_v_key, void * p_v_base, int p_n_num, int p_n_width, int * p_n_pos);
-int search_by_key (reiserfs_filsys_t *, struct key *, struct path *, int);
-int search_by_entry_key (reiserfs_filsys_t *, struct key *, struct path *);
-int search_for_position_by_key (reiserfs_filsys_t *, struct key *, struct path *);
-int search_by_objectid (reiserfs_filsys_t *, struct key *, struct path *, int *);
-void decrement_counters_in_path (struct path * p_s_search_path);
-void pathrelse (struct path * p_s_search_path);
-
-
-int is_left_mergeable (reiserfs_filsys_t * s, struct path * path);
-int is_right_mergeable (reiserfs_filsys_t * s, struct path * path);
-int are_items_mergeable (struct item_head * left, struct item_head * right, int bsize);
-
-
-/* fix_nodes.c */
-void * reiserfs_kmalloc (size_t size, int flags, reiserfs_filsys_t * s);
-void reiserfs_kfree (/*const*/ void * vp, size_t size, reiserfs_filsys_t * s);
-int fix_nodes (/*struct reiserfs_transaction_handle *th,*/ int n_op_mode, struct tree_balance * p_s_tb, 
-               /*int n_pos_in_item,*/ struct item_head * p_s_ins_ih);
-void unfix_nodes (/*struct reiserfs_transaction_handle *th,*/ struct tree_balance *);
-void free_buffers_in_tb (struct tree_balance * p_s_tb);
-void init_path (struct path *);
-
-/* prints.c */
-/* options */
-#define PRINT_TREE_DETAILS 	0x1	/* print all items from internal tree */
-#define PRINT_DETAILS 		0x2       /* print all items from bitmap */
-#define PRINT_ITEM_DETAILS 	0x4 	/* print contents of directory items and stat
-                                	   data items and indirect items */
-#define PRINT_DIRECT_ITEMS 	0x8 	/* print contents of direct items */
-
-void print_tb (int mode, int item_pos, int pos_in_item, struct tree_balance * tb, char * mes);
-
-
-void print_bmap (FILE * fp, reiserfs_filsys_t * fs, int silent);
-void print_objectid_map (FILE * fp, reiserfs_filsys_t * fs);
-
-
-
-/* lbalance.c */
-int leaf_move_items (int shift_mode, struct tree_balance * tb, 
-                     int mov_num, int mov_bytes, struct buffer_head * Snew);
-int leaf_shift_left (struct tree_balance * tb, int shift_num, int shift_bytes);
-int leaf_shift_right (struct tree_balance * tb, int shift_num, int shift_bytes);
-void leaf_delete_items (reiserfs_filsys_t *, struct buffer_info * cur_bi, 
-                        int last_first, int first, int del_num, int del_bytes);
-void leaf_insert_into_buf (reiserfs_filsys_t *, struct buffer_info * bi, 
-			   int before, struct item_head * inserted_item_ih, const char * inserted_item_body, 
-			   int zeros_number);
-void leaf_paste_in_buffer (reiserfs_filsys_t *, struct buffer_info * bi, int pasted_item_num, 
-			   int pos_in_item, int paste_size, const char * body, int zeros_number);
-void leaf_cut_from_buffer (reiserfs_filsys_t *, struct buffer_info * bi, int cut_item_num, 
-                           int pos_in_item, int cut_size);
-void leaf_paste_entries (struct buffer_head * bh, int item_num, int before, int new_entry_count,
-			 struct reiserfs_de_head * new_dehs, const char * records,
-			 int paste_size);
-void delete_item (reiserfs_filsys_t *, struct buffer_head * bh, int item_num);
-void cut_entry (reiserfs_filsys_t *, struct buffer_head * bh,
-		int item_num, int entry_num, int del_count);
-
-
-/* ibalance.c */
-int balance_internal (struct tree_balance * , int, int, struct item_head * , 
-                      struct buffer_head **);
-
-/* do_balance.c */
-void do_balance (struct tree_balance * tb,
-                 struct item_head * ih, const char * body, int flag, int zeros_num);
-void reiserfs_invalidate_buffer (struct tree_balance * tb, struct buffer_head * bh, int);
-int get_left_neighbor_position (struct tree_balance * tb, int h);
-int get_right_neighbor_position (struct tree_balance * tb, int h);
-void replace_key (reiserfs_filsys_t *, struct buffer_head *, int, struct buffer_head *, int);
-void replace_lkey (struct tree_balance *, int, struct item_head *);
-void replace_rkey (struct tree_balance *, int, struct item_head *);
-void make_empty_node (struct buffer_info *);
-void make_empty_leaf (struct buffer_head *);
-struct buffer_head * get_FEB (struct tree_balance *);
-
-
-__u32 get_bytes_number (struct item_head * ih, int blocksize);
-
-
-
-
-/* hashes.c */
-__u32 keyed_hash (const char *msg, int len);
-__u32 yura_hash (const char *msg, int len);
-__u32 r5_hash (const char *msg, int len);
-
-
-
-/* node_format.c */
-extern unsigned int get_journal_old_start_must (reiserfs_filsys_t * fs);
-extern unsigned int get_journal_new_start_must (reiserfs_filsys_t * fs);
-extern unsigned int get_journal_start_must (reiserfs_filsys_t * fs);
-/*extern hashf_t hashes [];*/
-
-#endif
-
-/*
- * Local variables:
- * c-indentation-style: "bsd"
- * c-basic-offset: 4
- * tab-width: 8
- * fill-column: 78
- * End:
- */
diff --git a/include/reiserfs_lib.h b/include/reiserfs_lib.h
deleted file mode 100644
index 2ad8034..0000000
--- a/include/reiserfs_lib.h
+++ /dev/null
@@ -1,407 +0,0 @@
-/*
- *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
- *  reiserfsprogs/README
- */
-
-#ifndef REISERFSPROGS_LIB_H
-#define REISERFSPROGS_LIB_H
-
-#define BADBLOCK_DIRID	1
-#define BADBLOCK_OBJID  (__u32)-1
-
-typedef struct reiserfs_filsys reiserfs_filsys_t;
-
-#include "reiserfs_fs.h"
-
-struct _bitmap {
-    unsigned long bm_byte_size;
-    unsigned long bm_bit_size;
-    char * bm_map;
-    unsigned long bm_set_bits;
-    int bm_dirty;  /* used for fetched bitmap */
-};
-
-typedef struct _bitmap reiserfs_bitmap_t;
-
-typedef __u32 (*hashf_t) (const char *, int);
-
-struct reiserfs_filsys {
-    unsigned int fs_blocksize;
-    int fs_format;	      /* on-disk format version */
-    hashf_t fs_hash_function; /* pointer to function which is used to sort
-				 names in directory. It is set by
-				 reiserfs_open if it is set in the super
-				 block, otherwise it is set by first
-				 is_properly_hashed */
-    
-    char * fs_file_name;       /* file name of underlying device */
-    int fs_dev; /* descriptor of opened block device file */
-    struct buffer_head * fs_super_bh;  /* buffer containing super block */
-    struct reiserfs_super_block * fs_ondisk_sb; /* pointer to its b_data */
-
-
-    reiserfs_bitmap_t * fs_bitmap2; /* ondisk bitmap after
-				       reiserfs_open_ondisk_bitmap */
-
-
-    /* opened journal fields */
-    char * fs_j_file_name;  /* file name of relocated journal device */
-    int fs_journal_dev;		/* descriptor of opened journal device */
-    struct buffer_head * fs_jh_bh;	/* buffer containing journal header */
-
-    /* badblocks */
-    reiserfs_bitmap_t * fs_badblocks_bm;
-
-    int fs_dirt;
-    int fs_flags;
-    void * fs_vp;
-    int (*block_allocator) (reiserfs_filsys_t * fs, 
-			    unsigned long * free_blocknrs,
-			    unsigned long start, int amount_needed);
-    int (*block_deallocator) (reiserfs_filsys_t * fs, unsigned long block);
-};
-
-
-struct _transaction {
-    unsigned long mount_id;
-    unsigned long trans_id;
-    unsigned long desc_blocknr;
-    unsigned long trans_len;
-    unsigned long commit_blocknr;
-    unsigned long next_trans_offset;
-};
-
-typedef struct _transaction reiserfs_trans_t;
-
-
-/* reiserfslib.c */
-
-void init_tb_struct (struct tree_balance * tb, reiserfs_filsys_t *, struct path * path, int size);
-
-reiserfs_filsys_t * reiserfs_open (char * filename, int flags, int * error, void * vp, int skip_check);
-reiserfs_filsys_t * reiserfs_create (char * filename, int version, unsigned long block_count,
-				     int block_size, int default_journal, int new_format);
-void reiserfs_flush (reiserfs_filsys_t *);
-void reiserfs_free (reiserfs_filsys_t *);
-void reiserfs_close (reiserfs_filsys_t *);
-void reiserfs_reopen (reiserfs_filsys_t *, int flags);
-int is_opened_rw (reiserfs_filsys_t * fs);
-
-/*
-void reiserfs_read_bitmap_blocks (reiserfs_filsys_t *);
-void reiserfs_free_bitmap_blocks (reiserfs_filsys_t *);
-*/
-int no_reiserfs_found (reiserfs_filsys_t *);
-int is_block_count_correct (unsigned long block_of_super_block, unsigned int block_size,
-	unsigned long block_count, unsigned long journal_size);
-//unsigned long min_block_amount (int block_size, unsigned long journal_size);
-unsigned long get_size_of_journal_or_reserved_area (struct reiserfs_super_block * sb);
-
-int reiserfs_new_blocknrs (reiserfs_filsys_t *, 
-			   unsigned long * free_blocknrs, unsigned long start,
-			   int amount_needed);
-int reiserfs_free_block (reiserfs_filsys_t *, unsigned long block);
-int spread_bitmaps (reiserfs_filsys_t *);
-int filesystem_dirty (reiserfs_filsys_t *);
-void mark_filesystem_dirty (reiserfs_filsys_t *);
-
-void reiserfs_paste_into_item (reiserfs_filsys_t *, struct path * path,
-			       const void * body, int size);
-void reiserfs_insert_item (reiserfs_filsys_t *, struct path * path,
-			   struct item_head * ih, const void * body);
-
-int reiserfs_locate_entry (reiserfs_filsys_t *, struct key * dir, char * name,
-			   struct path * path);
-int reiserfs_find_entry (reiserfs_filsys_t *, struct key * dir, char * name,
-			 unsigned int * min_gen_counter, struct key * key);
-int reiserfs_add_entry (reiserfs_filsys_t *, struct key * dir, char * name, int name_len,
-			struct key * key, __u16 fsck_need);
-
-struct key * uget_lkey (struct path * path);
-struct key * uget_rkey (struct path * path);
-int reiserfs_search_by_key_3 (reiserfs_filsys_t *, struct key * key,
-			    struct path * path);
-int reiserfs_search_by_key_4 (reiserfs_filsys_t *, struct key * key, 
-			    struct path * path);
-int reiserfs_search_by_entry_key (reiserfs_filsys_t *, struct key * key, 
-				  struct path * path);
-int usearch_by_position (reiserfs_filsys_t *, struct key * key, int version, struct path * path);
-struct key * reiserfs_next_key (struct path * path);
-void copy_key (void * to, void * from);
-void copy_short_key (void * to, void * from);
-void copy_item_head(void * p_v_to, void * p_v_from);
-int comp_keys (const void * k1, const void * k2);
-int comp_keys_3 (const void * k1, const void * k2);
-int  comp_short_keys (const void * p_s_key1, const void * p_s_key2);
-int comp_items (struct item_head  * p_s_ih, struct path * p_s_path);
-
-__u32 hash_value (hashf_t func, char * name, int namelen);
-
-int create_dir_sd (reiserfs_filsys_t * fs,
-		    struct path * path, struct key * key,
-		    void (*modify_item)(struct item_head *, void *));
-void make_sure_root_dir_exists (reiserfs_filsys_t * fs,
-				void (*modyfy_item)(struct item_head *, void *),
-				int ih_flags);
-
-typedef void (*badblock_func_t) (reiserfs_filsys_t *fs, 
-				 struct path *badblock_path, 
-				 void *data);
-
-void mark_badblock(reiserfs_filsys_t *fs, struct path *badblock_path, void *data);
-int create_badblock_bitmap (reiserfs_filsys_t * fs, char * badblocks_file);
-void add_badblock_list (reiserfs_filsys_t * fs, int no_badblock_in_tree_yet);
-void badblock_list(reiserfs_filsys_t * fs, badblock_func_t action, void *data);
-
-extern struct key root_dir_key;
-extern struct key parent_root_dir_key;
-extern struct key lost_found_dir_key;
-extern __u16 root_dir_format;
-extern __u16 lost_found_dir_format;
-
-
-/* bitmap.c */
-int reiserfs_open_ondisk_bitmap (reiserfs_filsys_t *);
-int reiserfs_create_ondisk_bitmap (reiserfs_filsys_t *);
-void reiserfs_free_ondisk_bitmap (reiserfs_filsys_t *);
-void reiserfs_close_ondisk_bitmap (reiserfs_filsys_t *);
-int reiserfs_flush_to_ondisk_bitmap (reiserfs_bitmap_t * bm, reiserfs_filsys_t * fs);
-
-reiserfs_bitmap_t * reiserfs_create_bitmap (unsigned int bit_count);
-int reiserfs_expand_bitmap (reiserfs_bitmap_t * bm, unsigned int bit_count);
-void reiserfs_shrink_bitmap (reiserfs_bitmap_t * bm, unsigned int bit_count);
-void reiserfs_delete_bitmap (reiserfs_bitmap_t * bm);
-void reiserfs_bitmap_copy (reiserfs_bitmap_t * to, reiserfs_bitmap_t * from);
-int reiserfs_bitmap_compare (reiserfs_bitmap_t * bm1, reiserfs_bitmap_t * bm2);
-void reiserfs_bitmap_disjunction (reiserfs_bitmap_t * disk, reiserfs_bitmap_t * cont);
-void reiserfs_bitmap_delta (reiserfs_bitmap_t * base, reiserfs_bitmap_t * exclude);
-void reiserfs_bitmap_set_bit (reiserfs_bitmap_t * bm, unsigned int bit_number);
-void reiserfs_bitmap_clear_bit (reiserfs_bitmap_t * bm, unsigned int bit_number);
-
-int reiserfs_bitmap_test_bit (reiserfs_bitmap_t * bm, unsigned int bit_number);
-int reiserfs_bitmap_find_zero_bit (reiserfs_bitmap_t * bm, unsigned long * start);
-/*int reiserfs_fetch_ondisk_bitmap (reiserfs_bitmap_t * bm, reiserfs_filsys_t *);*/
-/*int reiserfs_flush_bitmap (reiserfs_bitmap_t * bm, reiserfs_filsys_t *);*/
-void reiserfs_bitmap_zero (reiserfs_bitmap_t * bm);
-void reiserfs_bitmap_fill (reiserfs_bitmap_t * bm);
-unsigned int reiserfs_bitmap_ones (reiserfs_bitmap_t * bm);
-unsigned int reiserfs_bitmap_zeros (reiserfs_bitmap_t * bm);
-
-FILE * open_file(char * filename, char * option);
-void close_file(FILE * fp);
-void reiserfs_bitmap_save (FILE * fp, reiserfs_bitmap_t * bm);
-
-/* this probably should be in fsck */
-void reiserfs_begin_stage_info_save(FILE * file, unsigned long stage);
-void reiserfs_end_stage_info_save(FILE * file);
-int is_stage_magic_correct (FILE * fp);
-//void reiserfs_stage_info_save(struct fsck_data *, FILE * file);
-
-reiserfs_bitmap_t * reiserfs_bitmap_load (FILE * fp);
-void reiserfs_bitmap_invert (reiserfs_bitmap_t * bm);
-
-
-int reiserfs_remove_entry (reiserfs_filsys_t *, struct key * key);
-
-
-
-/* node_formats.c */
-
-#define THE_LEAF 1
-#define THE_INTERNAL 2
-#define THE_SUPER 3
-#define THE_JDESC 4
-#define HAS_IH_ARRAY 5
-#define THE_UNKNOWN 6
-
-int is_blocksize_correct (unsigned int blocksize);
-int is_reiserfs_3_5_magic_string (struct reiserfs_super_block * rs);
-int is_reiserfs_3_6_magic_string (struct reiserfs_super_block * rs);
-int is_reiserfs_jr_magic_string (struct reiserfs_super_block * rs);
-int does_look_like_super_block (struct reiserfs_super_block * rs);
-int is_any_reiserfs_magic_string (struct reiserfs_super_block * rs);
-int get_reiserfs_format (struct reiserfs_super_block * sb);
-int reiserfs_super_block_size (struct reiserfs_super_block * rs);
-/*int magic_2_version (struct reiserfs_super_block * rs);*/
-int is_prejournaled_reiserfs (struct reiserfs_super_block * rs);
-int who_is_this (char * buf, int blocksize);
-
-int leaf_count_ih(char * buf, int blocksize);
-int leaf_free_space_estimate(char * buf, int blocksize);
-int is_a_leaf(char * buf, int blocksize);
-int leaf_item_number_estimate(struct buffer_head * bh);
-
-char * which_block (int code);
-int get_journal_size (reiserfs_filsys_t *);
-int not_data_block (reiserfs_filsys_t *, unsigned long block);
-int not_journalable (reiserfs_filsys_t *, unsigned long block);
-int block_of_bitmap (reiserfs_filsys_t *, unsigned long block);
-int block_of_journal (reiserfs_filsys_t *, unsigned long block);
-int is_tree_node (struct buffer_head * bh, int level);
-int is_properly_hashed (reiserfs_filsys_t *,
-			char * name, int namelen, __u32 offset);
-int dir_entry_bad_location (struct reiserfs_de_head * deh, 
-			    struct item_head * ih, int first);
-void make_dir_stat_data (int blocksize, int key_format, 
-			 __u32 dirid, __u32 objectid, 
-			 struct item_head * ih, void * sd);
-void make_empty_dir_item_v1 (char * body, __u32 dirid, __u32 objid,
-			     __u32 par_dirid, __u32 par_objid);
-void make_empty_dir_item (char * body, __u32 dirid, __u32 objid,
-			  __u32 par_dirid, __u32 par_objid);
-int reiserfs_is_fs_consistent (reiserfs_filsys_t * fs);
-
-
-typedef void (*item_action_t) (struct buffer_head * bh, struct item_head * ih);
-typedef void (*item_head_action_t) (struct item_head * ih);
-
-void for_every_item (struct buffer_head * bh, item_head_action_t action,
-		     item_action_t * actions);
-int key_format (const struct key * key);
-unsigned long long get_offset (const struct key * key);
-int uniqueness2type (__u32 uniqueness);
-__u32 type2uniqueness (int type);
-int get_type (const struct key * key);
-char * key_of_what (const struct key * key);
-int type_unknown (struct key * key);
-void set_type (int format, struct key * key, int type);
-void set_offset (int format, struct key * key, loff_t offset);
-void set_type_and_offset (int format, struct key * key, loff_t offset, int type);
-
-
-typedef int (*check_unfm_func_t) (reiserfs_filsys_t *, __u32);
-int is_it_bad_item (reiserfs_filsys_t *, struct item_head *, char *,
-		    check_unfm_func_t, int bad_dir);
-
-#define hash_func_is_unknown(fs) ((fs)->fs_hash_function == 0)
-#define reiserfs_hash(fs) ((fs)->fs_hash_function)
-
-int known_hashes (void);
-char *code2name (unsigned int code);
-int func2code (hashf_t func);
-hashf_t code2func (unsigned int code);
-hashf_t name2func (char * hash);
-int find_hash_in_use (char * name, int namelen, __u32 deh_offset, unsigned int code_to_try_first);
-
-int entry_length (struct item_head * ih, struct reiserfs_de_head * deh,
-		  int pos_in_item);
-char * name_in_entry (struct reiserfs_de_head * deh, int pos_in_item);
-int name_in_entry_length (struct item_head * ih,
-		 struct reiserfs_de_head * deh, int pos_in_item);
-int name_length (char * name, int key_format);
-
-/*  access to stat data fields */
-void get_set_sd_field (int field, struct item_head * ih, void * sd,
-		       void * value, int set);
-#define GET_SD_MODE 0
-#define GET_SD_SIZE 1
-#define GET_SD_NLINK 2
-#define GET_SD_BLOCKS 3
-#define GET_SD_FIRST_DIRECT_BYTE 4
-
-#define get_sd_mode(ih,sd,pmode) get_set_sd_field (GET_SD_MODE, ih, sd, pmode, 0/*get*/)
-#define set_sd_mode(ih,sd,pmode) get_set_sd_field (GET_SD_MODE, ih, sd, pmode, 1/*set*/)
-
-#define get_sd_size(ih,sd,psize) get_set_sd_field (GET_SD_SIZE, ih, sd, psize, 0/*get*/)
-#define set_sd_size(ih,sd,psize) get_set_sd_field (GET_SD_SIZE, ih, sd, psize, 1/*set*/)
-
-#define get_sd_blocks(ih,sd,pblocks) get_set_sd_field (GET_SD_BLOCKS, ih, sd, pblocks, 0/*get*/)
-#define set_sd_blocks(ih,sd,pblocks) get_set_sd_field (GET_SD_BLOCKS, ih, sd, pblocks, 1/*set*/)
-
-//#define get_sd_rdev(ih,sd,pblocks) get_set_sd_field (GET_SD_RDEV, ih, sd, pblocks, 0/*get*/)
-//#define set_sd_rdev(ih,sd,pblocks) get_set_sd_field (GET_SD_RDEV, ih, sd, pblocks, 1/*set*/)
-
-//#define get_sd_generation(ih,sd,pblocks) get_set_sd_field (GET_SD_GENER, ih, sd, pblocks, 0/*get*/)
-//#define set_sd_generation(ih,sd,pblocks) get_set_sd_field (GET_SD_GENER, ih, sd, pblocks, 1/*set*/)
-
-#define get_sd_nlink(ih,sd,pnlink) get_set_sd_field (GET_SD_NLINK, ih, sd, pnlink, 0/*get*/)
-#define set_sd_nlink(ih,sd,pnlink) get_set_sd_field (GET_SD_NLINK, ih, sd, pnlink, 1/*set*/)
-
-#define get_sd_first_direct_byte(ih,sd,pfdb) get_set_sd_field (GET_SD_FIRST_DIRECT_BYTE, ih, sd, pfdb, 0/*get*/)
-#define set_sd_first_direct_byte(ih,sd,pfdb) get_set_sd_field (GET_SD_FIRST_DIRECT_BYTE, ih, sd, pfdb, 1/*set*/)
-
-int is_objectid_used (reiserfs_filsys_t * fs, __u32 objectid);
-void mark_objectid_used (reiserfs_filsys_t * fs, __u32 objectid);
-
-
-
-/* journal.c */
-int get_boundary_transactions (reiserfs_filsys_t *, reiserfs_trans_t *,
-			       reiserfs_trans_t *);
-int next_transaction (reiserfs_filsys_t *, reiserfs_trans_t *, reiserfs_trans_t);
-
-int replay_one_transaction (reiserfs_filsys_t *, reiserfs_trans_t *);
-
-typedef void (*action_on_trans_t) (reiserfs_filsys_t *, reiserfs_trans_t *);
-void for_each_transaction (reiserfs_filsys_t *, action_on_trans_t);
-
-typedef void (*action_on_block_t) (reiserfs_filsys_t *, reiserfs_trans_t *,
-				   unsigned int index,
-				   unsigned long in_journal,
-				   unsigned long in_place);
-void for_each_block (reiserfs_filsys_t * fs, reiserfs_trans_t * trans,
-		     action_on_block_t action);
-
-int reiserfs_open_journal (reiserfs_filsys_t *, char *, int flags);
-int reiserfs_journal_params_check(reiserfs_filsys_t *fs);
-int reiserfs_create_journal (reiserfs_filsys_t * fs, char * j_filename,
-			     unsigned long offset, unsigned long len, 
-			     int transaction_max_size);
-int reiserfs_journal_opened (reiserfs_filsys_t *);
-void reiserfs_flush_journal (reiserfs_filsys_t * fs);
-void reiserfs_free_journal (reiserfs_filsys_t * fs);
-void reiserfs_close_journal (reiserfs_filsys_t *);
-void reiserfs_reopen_journal (reiserfs_filsys_t * fs, int flag);
-__u32 advise_journal_max_trans_age (void);
-__u32 advise_journal_max_commit_age (void);
-__u32 advise_journal_max_batch (unsigned long journal_trans_max);
-__u32 advise_journal_max_trans_len (__u32 desired, __u32 journal_size, int blocksize, int verbose);
-
-
-
-/* prints.c */
-void print_indirect_item (FILE * fp, struct buffer_head * bh, int item_num);
-void print_block (FILE * fp, reiserfs_filsys_t *, struct buffer_head * bh, ...);//int print_mode, int first, int last);
-int print_super_block (FILE * fp, reiserfs_filsys_t *, char * file_name, struct buffer_head * bh, int short_print);
-void print_journal (reiserfs_filsys_t *);
-void print_journal_header (reiserfs_filsys_t * fs);
-void reiserfs_warning (FILE * fp, const char * fmt, ...);
-char ftypelet (mode_t mode);
-void reiserfs_print_item (FILE * fp, struct buffer_head * bh,
-			  struct item_head * ih);
-void print_filesystem_state (FILE * fp, reiserfs_filsys_t * fs);
-void print_one_transaction (reiserfs_filsys_t * fs, reiserfs_trans_t * trans);
-void print_journal_params (FILE * fp, struct journal_params * jp);
-char * get_reiserfs_version (__u16 version);
-int can_we_format_it (char * device_name, int force);
-
-
-#define reiserfs_panic(fmt, list...) \
-{\
-	fflush (stdout);\
-	fprintf (stderr, "%s %d %s\n", __FILE__, __LINE__, __FUNCTION__);\
-	reiserfs_warning (stderr, (const char *)fmt, ## list);\
-        reiserfs_warning (stderr, "\n" );\
-        abort ();\
-}
-#define reiserfs_exit(val, fmt, list...) \
-{\
-	fflush (stdout);\
-	reiserfs_warning (stderr, (const char *)fmt, ## list);\
-        reiserfs_warning (stderr, "\n" );\
-        exit (val);\
-}
-
-#define check_forcing_ask_confirmation(force) \
-	if (force < 1) {\
-	    /* avoid formatting it without being forced */\
-	    reiserfs_warning (stderr, "Use -f to force over\n");\
-	    return 0;\
-	}\
-	if (force < 2) {\
-	    if (!user_confirmed (stderr, "Continue (y/n):", "y\n"))\
-		return 0;\
-	}\
-
-
-#endif /* REISERFSPROGS_LIB_H */
diff --git a/include/util/Makefile.am b/include/util/Makefile.am
new file mode 100644
index 0000000..c9def40
--- /dev/null
+++ b/include/util/Makefile.am
@@ -0,0 +1 @@
+noinst_HEADERS = badblock.h misc.h print.h device.h mntent.h
diff --git a/lib/Makefile.in b/include/util/Makefile.in
similarity index 61%
copy from lib/Makefile.in
copy to include/util/Makefile.in
index 675222a..7f1b63a 100644
--- a/lib/Makefile.in
+++ b/include/util/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.7.6 from Makefile.am.
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
 # @configure_input@
 
-# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-# Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -20,8 +20,7 @@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
-
+top_builddir = ../..
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
@@ -35,7 +34,24 @@
 NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
+build_triplet = @build@
 host_triplet = @host@
+subdir = include/util
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMDEP_FALSE = @AMDEP_FALSE@
 AMDEP_TRUE = @AMDEP_TRUE@
@@ -78,6 +94,7 @@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROGS_LDFLAGS = @PROGS_LDFLAGS@
 RANLIB = @RANLIB@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -92,6 +109,8 @@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -112,6 +131,7 @@
 libexecdir = @libexecdir@
 localstatedir = @localstatedir@
 mandir = @mandir@
+mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
@@ -119,95 +139,41 @@
 sharedstatedir = @sharedstatedir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
-noinst_LIBRARIES = libmisc.a
-
-libmisc_a_SOURCES = io.c misc.c 
-subdir = lib
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-LIBRARIES = $(noinst_LIBRARIES)
-
-libmisc_a_AR = $(AR) cru
-libmisc_a_LIBADD =
-am_libmisc_a_OBJECTS = io.$(OBJEXT) misc.$(OBJEXT)
-libmisc_a_OBJECTS = $(am_libmisc_a_OBJECTS)
-
-DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/io.Po ./$(DEPDIR)/misc.Po
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-DIST_SOURCES = $(libmisc_a_SOURCES)
-DIST_COMMON = Makefile.am Makefile.in
-SOURCES = $(libmisc_a_SOURCES)
-
+noinst_HEADERS = badblock.h misc.h print.h device.h mntent.h
 all: all-am
 
 .SUFFIXES:
-.SUFFIXES: .c .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  include/util/Makefile'; \
 	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  lib/Makefile
-Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+	  $(AUTOMAKE) --gnu  include/util/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
 
-AR = ar
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
-clean-noinstLIBRARIES:
-	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-libmisc.a: $(libmisc_a_OBJECTS) $(libmisc_a_DEPENDENCIES) 
-	-rm -f libmisc.a
-	$(libmisc_a_AR) libmisc.a $(libmisc_a_OBJECTS) $(libmisc_a_LIBADD)
-	$(RANLIB) libmisc.a
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT) core *.core
-
-distclean-compile:
-	-rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/io.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Po@am__quote@
-
-distclean-depend:
-	-rm -rf ./$(DEPDIR)
-
-.c.o:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
-
-.c.obj:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 uninstall-info-am:
 
-ETAGS = etags
-ETAGSFLAGS =
-
-CTAGS = ctags
-CTAGSFLAGS =
-
-tags: TAGS
-
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
@@ -216,6 +182,7 @@
 	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
 	mkid -fID $$unique
+tags: TAGS
 
 TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
@@ -227,10 +194,11 @@
 	  done | \
 	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	test -z "$(ETAGS_ARGS)$$tags$$unique" \
-	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	     $$tags $$unique
-
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
 ctags: CTAGS
 CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
@@ -253,10 +221,6 @@
 
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-
-top_distdir = ..
-distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
@@ -270,7 +234,7 @@
 	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
 	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
 	    dir="/$$dir"; \
-	    $(mkinstalldirs) "$(distdir)$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
 	  else \
 	    dir=''; \
 	  fi; \
@@ -287,8 +251,7 @@
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(LIBRARIES)
-
+all-am: Makefile $(HEADERS)
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -301,7 +264,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -309,24 +272,25 @@
 clean-generic:
 
 distclean-generic:
-	-rm -f Makefile $(CONFIG_CLEAN_FILES)
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
 clean: clean-am
 
-clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
+clean-am: clean-generic mostlyclean-am
 
 distclean: distclean-am
-
-distclean-am: clean-am distclean-compile distclean-depend \
-	distclean-generic distclean-tags
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
 
 dvi: dvi-am
 
 dvi-am:
 
+html: html-am
+
 info: info-am
 
 info-am:
@@ -342,12 +306,12 @@
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
-
+	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
 
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
+mostlyclean-am: mostlyclean-generic
 
 pdf: pdf-am
 
@@ -360,15 +324,13 @@
 uninstall-am: uninstall-info-am
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-noinstLIBRARIES ctags distclean distclean-compile \
-	distclean-depend distclean-generic distclean-tags distdir dvi \
-	dvi-am info info-am install install-am install-data \
-	install-data-am install-exec install-exec-am install-info \
-	install-info-am install-man install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
-	uninstall-am uninstall-info-am
+	ctags distclean distclean-generic distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-exec install-exec-am \
+	install-info install-info-am install-man install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+	pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/include/util/badblock.h b/include/util/badblock.h
new file mode 100644
index 0000000..d2be8cf
--- /dev/null
+++ b/include/util/badblock.h
@@ -0,0 +1,14 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef UTIL_BADBLOCK_H
+#define UTIL_BADBLOCK_H
+
+#include "reiserfs/libreiserfs.h"
+
+extern int util_badblock_load (reiserfs_filsys_t * fs, 
+			       char * badblocks_file);
+
+#endif
diff --git a/include/util/device.h b/include/util/device.h
new file mode 100644
index 0000000..9661070
--- /dev/null
+++ b/include/util/device.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifndef UTIL_DEVICE_H
+#define UTIL_DEVICE_H
+
+#include "misc/types.h"
+#include <linux/major.h>
+#include <sys/types.h>
+#include <stdio.h>
+
+#ifndef major
+#define major(rdev)      ((rdev)>>8)
+#define minor(rdev)      ((rdev) & 0xff)
+#endif /* major */
+
+#ifndef SCSI_DISK_MAJOR
+#define SCSI_DISK_MAJOR(maj) ((maj) == SCSI_DISK0_MAJOR || \
+			     ((maj) >= SCSI_DISK1_MAJOR && (maj) <= SCSI_DISK7_MAJOR))
+#endif /* SCSI_DISK_MAJOR */
+    
+#ifndef SCSI_BLK_MAJOR
+#define SCSI_BLK_MAJOR(maj)  (SCSI_DISK_MAJOR(maj) || (maj) == SCSI_CDROM_MAJOR)
+#endif /* SCSI_BLK_MAJOR */
+
+#ifndef IDE_DISK_MAJOR
+#ifdef IDE9_MAJOR
+#define IDE_DISK_MAJOR(maj) ((maj) == IDE0_MAJOR || (maj) == IDE1_MAJOR || \
+			     (maj) == IDE2_MAJOR || (maj) == IDE3_MAJOR || \
+			     (maj) == IDE4_MAJOR || (maj) == IDE5_MAJOR || \
+			     (maj) == IDE6_MAJOR || (maj) == IDE7_MAJOR || \
+			     (maj) == IDE8_MAJOR || (maj) == IDE9_MAJOR)
+#else
+#define IDE_DISK_MAJOR(maj) ((maj) == IDE0_MAJOR || (maj) == IDE1_MAJOR || \
+			     (maj) == IDE2_MAJOR || (maj) == IDE3_MAJOR || \
+			     (maj) == IDE4_MAJOR || (maj) == IDE5_MAJOR)
+#endif /* IDE9_MAJOR */
+#endif /* IDE_DISK_MAJOR */
+
+typedef enum mount_flags {
+	MF_NOT_MOUNTED  = 0x0,
+	MF_RO		= 0x1,
+	MF_RW		= 0x2
+} mount_flags_t;
+
+extern FILE * util_file_open (char * filename, char * option);
+
+typedef struct util_device_dma {
+    int fd;
+    int support_type;
+    int dma;
+    __u64 speed;
+    dev_t st_rdev;
+} util_device_dma_t;
+
+extern int util_device_dma_prep(util_device_dma_t *dma_info);
+
+extern int util_device_get_dma(util_device_dma_t *dma_info);
+
+extern void util_device_dma_fini(int fd, util_device_dma_t *dma_info);
+
+extern int util_device_formatable (char * device_name, int force);
+
+extern int util_root_mounted(char *device);
+
+extern int util_device_mounted(char *device);
+
+extern int util_file_ro(char *file);
+
+#endif
diff --git a/include/util/misc.h b/include/util/misc.h
new file mode 100644
index 0000000..7f49c1a
--- /dev/null
+++ b/include/util/misc.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifndef UTIL_MISC_H
+#define UTIL_MISC_H
+
+#include <stdio.h>
+
+extern void util_misc_progress (FILE * fp, 
+				unsigned long *passed, 
+				unsigned long total, 
+				unsigned int inc, 
+				int forward);
+
+extern void util_misc_speed (FILE *fp, 
+			     unsigned long total, 
+			     unsigned long passed, 
+			     int cursor_pos, 
+			     int reset_time);
+
+
+extern void util_misc_print_name (FILE * fp, char * name, int len);
+
+extern void util_misc_erase_name (FILE * fp, int len);
+
+extern void util_misc_fini_name (FILE *fp);
+
+#endif
diff --git a/include/util/mntent.h b/include/util/mntent.h
new file mode 100644
index 0000000..8ccad06
--- /dev/null
+++ b/include/util/mntent.h
@@ -0,0 +1,11 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifndef UTIL_MNTENT_H
+#define UTIL_MNTENT_H
+
+extern struct mntent *util_mntent(char *device);
+
+#endif
diff --git a/include/util/print.h b/include/util/print.h
new file mode 100644
index 0000000..62ee70f
--- /dev/null
+++ b/include/util/print.h
@@ -0,0 +1,15 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifndef UTIL_PRINT_H
+#define UTIL_PRINT_H
+
+#include <stdio.h>
+
+extern int util_user_confirmed(FILE * fp, char * q, char * yes);
+
+extern void util_print_banner(char *name);
+
+#endif
diff --git a/install-sh b/install-sh
index e9de238..1a83534 100755
--- a/install-sh
+++ b/install-sh
@@ -1,19 +1,38 @@
 #!/bin/sh
-#
 # install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
+
+scriptversion=2005-02-02.21
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
 #
-# Copyright 1991 by the Massachusetts Institute of Technology
+# Copyright (C) 1994 X Consortium
 #
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of M.I.T. not be used in advertising or
-# publicity pertaining to distribution of the software without specific,
-# written prior permission.  M.I.T. makes no representations about the
-# suitability of this software for any purpose.  It is provided "as is"
-# without express or implied warranty.
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
 #
 # Calling this script install-sh is preferred over install.sh, to prevent
 # `make' implicit rules from creating a file called install from it
@@ -23,13 +42,11 @@
 # from scratch.  It can only install one file at a time, a restriction
 # shared with many OS's install programs.
 
-
 # set DOITPROG to echo to test this script
 
 # Don't use :- since 4.3BSD and earlier shells don't like it.
 doit="${DOITPROG-}"
 
-
 # put in absolute paths if you don't have them in your path; or use env. vars.
 
 mvprog="${MVPROG-mv}"
@@ -41,211 +58,266 @@
 rmprog="${RMPROG-rm}"
 mkdirprog="${MKDIRPROG-mkdir}"
 
-transformbasename=""
-transform_arg=""
-instcmd="$mvprog"
 chmodcmd="$chmodprog 0755"
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
+chowncmd=
+chgrpcmd=
+stripcmd=
 rmcmd="$rmprog -f"
 mvcmd="$mvprog"
-src=""
-dst=""
-dir_arg=""
+src=
+dst=
+dir_arg=
+dstarg=
+no_target_directory=
 
-while [ x"$1" != x ]; do
-    case $1 in
-	-c) instcmd="$cpprog"
-	    shift
-	    continue;;
+usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
 
-	-d) dir_arg=true
-	    shift
-	    continue;;
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
 
-	-m) chmodcmd="$chmodprog $2"
-	    shift
-	    shift
-	    continue;;
+Options:
+-c         (ignored)
+-d         create directories instead of installing files.
+-g GROUP   $chgrpprog installed files to GROUP.
+-m MODE    $chmodprog installed files to MODE.
+-o USER    $chownprog installed files to USER.
+-s         $stripprog installed files.
+-t DIRECTORY  install into DIRECTORY.
+-T         report an error if DSTFILE is a directory.
+--help     display this help and exit.
+--version  display version info and exit.
 
-	-o) chowncmd="$chownprog $2"
-	    shift
-	    shift
-	    continue;;
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+"
 
-	-g) chgrpcmd="$chgrpprog $2"
-	    shift
-	    shift
-	    continue;;
+while test -n "$1"; do
+  case $1 in
+    -c) shift
+        continue;;
 
-	-s) stripcmd="$stripprog"
-	    shift
-	    continue;;
+    -d) dir_arg=true
+        shift
+        continue;;
 
-	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
-	    shift
-	    continue;;
+    -g) chgrpcmd="$chgrpprog $2"
+        shift
+        shift
+        continue;;
 
-	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
-	    shift
-	    continue;;
+    --help) echo "$usage"; exit $?;;
 
-	*)  if [ x"$src" = x ]
-	    then
-		src=$1
-	    else
-		# this colon is to work around a 386BSD /bin/sh bug
-		:
-		dst=$1
-	    fi
-	    shift
-	    continue;;
-    esac
-done
+    -m) chmodcmd="$chmodprog $2"
+        shift
+        shift
+        continue;;
 
-if [ x"$src" = x ]
-then
-	echo "install:	no input file specified"
-	exit 1
-else
-	true
-fi
+    -o) chowncmd="$chownprog $2"
+        shift
+        shift
+        continue;;
 
-if [ x"$dir_arg" != x ]; then
-	dst=$src
-	src=""
-	
-	if [ -d $dst ]; then
-		instcmd=:
-		chmodcmd=""
-	else
-		instcmd=mkdir
-	fi
-else
+    -s) stripcmd=$stripprog
+        shift
+        continue;;
 
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad 
-# if $src (and thus $dsttmp) contains '*'.
-
-	if [ -f $src -o -d $src ]
-	then
-		true
-	else
-		echo "install:  $src does not exist"
-		exit 1
-	fi
-	
-	if [ x"$dst" = x ]
-	then
-		echo "install:	no destination specified"
-		exit 1
-	else
-		true
-	fi
-
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
-
-	if [ -d $dst ]
-	then
-		dst="$dst"/`basename $src`
-	else
-		true
-	fi
-fi
-
-## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
-
-# Make sure that the destination directory exists.
-#  this part is taken from Noah Friedman's mkinstalldirs script
-
-# Skip lots of stat calls in the usual case.
-if [ ! -d "$dstdir" ]; then
-defaultIFS='	
-'
-IFS="${IFS-${defaultIFS}}"
-
-oIFS="${IFS}"
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
-
-pathcomp=''
-
-while [ $# -ne 0 ] ; do
-	pathcomp="${pathcomp}${1}"
+    -t) dstarg=$2
 	shift
+	shift
+	continue;;
 
-	if [ ! -d "${pathcomp}" ] ;
-        then
-		$mkdirprog "${pathcomp}"
-	else
-		true
-	fi
+    -T) no_target_directory=true
+	shift
+	continue;;
 
-	pathcomp="${pathcomp}/"
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    *)  # When -d is used, all remaining arguments are directories to create.
+	# When -t is used, the destination is already specified.
+	test -n "$dir_arg$dstarg" && break
+        # Otherwise, the last argument is the destination.  Remove it from $@.
+	for arg
+	do
+          if test -n "$dstarg"; then
+	    # $@ is not empty: it contains at least $arg.
+	    set fnord "$@" "$dstarg"
+	    shift # fnord
+	  fi
+	  shift # arg
+	  dstarg=$arg
+	done
+	break;;
+  esac
 done
+
+if test -z "$1"; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call `install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
 fi
 
-if [ x"$dir_arg" != x ]
-then
-	$doit $instcmd $dst &&
+for src
+do
+  # Protect names starting with `-'.
+  case $src in
+    -*) src=./$src ;;
+  esac
 
-	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
-	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
-	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
-	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
-else
+  if test -n "$dir_arg"; then
+    dst=$src
+    src=
 
-# If we're going to rename the final executable, determine the name now.
+    if test -d "$dst"; then
+      mkdircmd=:
+      chmodcmd=
+    else
+      mkdircmd=$mkdirprog
+    fi
+  else
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
 
-	if [ x"$transformarg" = x ] 
-	then
-		dstfile=`basename $dst`
-	else
-		dstfile=`basename $dst $transformbasename | 
-			sed $transformarg`$transformbasename
-	fi
+    if test -z "$dstarg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
 
-# don't allow the sed command to completely eliminate the filename
+    dst=$dstarg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst ;;
+    esac
 
-	if [ x"$dstfile" = x ] 
-	then
-		dstfile=`basename $dst`
-	else
-		true
-	fi
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+	echo "$0: $dstarg: Is a directory" >&2
+	exit 1
+      fi
+      dst=$dst/`basename "$src"`
+    fi
+  fi
 
-# Make a temp file name in the proper directory.
+  # This sed command emulates the dirname command.
+  dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
 
-	dsttmp=$dstdir/#inst.$$#
+  # Make sure that the destination directory exists.
 
-# Move or copy the file name to the temp name
+  # Skip lots of stat calls in the usual case.
+  if test ! -d "$dstdir"; then
+    defaultIFS='
+	 '
+    IFS="${IFS-$defaultIFS}"
 
-	$doit $instcmd $src $dsttmp &&
+    oIFS=$IFS
+    # Some sh's can't handle IFS=/ for some reason.
+    IFS='%'
+    set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+    shift
+    IFS=$oIFS
 
-	trap "rm -f ${dsttmp}" 0 &&
+    pathcomp=
 
-# and set any options; do chmod last to preserve setuid bits
+    while test $# -ne 0 ; do
+      pathcomp=$pathcomp$1
+      shift
+      if test ! -d "$pathcomp"; then
+        $mkdirprog "$pathcomp"
+	# mkdir can fail with a `File exist' error in case several
+	# install-sh are creating the directory concurrently.  This
+	# is OK.
+	test -d "$pathcomp" || exit
+      fi
+      pathcomp=$pathcomp/
+    done
+  fi
 
-# If any of these fail, we abort the whole thing.  If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
+  if test -n "$dir_arg"; then
+    $doit $mkdircmd "$dst" \
+      && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
+      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
+      && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
+      && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
 
-	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
-	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
-	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
-	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+  else
+    dstfile=`basename "$dst"`
 
-# Now rename the file to the real destination.
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
 
-	$doit $rmcmd -f $dstdir/$dstfile &&
-	$doit $mvcmd $dsttmp $dstdir/$dstfile 
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+    trap '(exit $?); exit' 1 2 13 15
 
-fi &&
+    # Copy the file name to the temp name.
+    $doit $cpprog "$src" "$dsttmp" &&
 
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
+      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
+      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
+      && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
 
-exit 0
+    # Now rename the file to the real destination.
+    { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
+      || {
+	   # The rename failed, perhaps because mv can't rename something else
+	   # to itself, or perhaps because mv is so ancient that it does not
+	   # support -f.
+
+	   # Now remove or move aside any old file at destination location.
+	   # We try this two ways since rm can't unlink itself on some
+	   # systems and the destination file might be busy for other
+	   # reasons.  In this case, the final cleanup might fail but the new
+	   # file should still install successfully.
+	   {
+	     if test -f "$dstdir/$dstfile"; then
+	       $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
+	       || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
+	       || {
+		 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+		 (exit 1); exit 1
+	       }
+	     else
+	       :
+	     fi
+	   } &&
+
+	   # Now rename the file to the real destination.
+	   $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+	 }
+    }
+  fi || { (exit 1); exit 1; }
+done
+
+# The final little trick to "correctly" pass the exit status to the exit trap.
+{
+  (exit 0); exit 0
+}
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/lib/Makefile.am b/lib/Makefile.am
deleted file mode 100644
index 3858b2d..0000000
--- a/lib/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-noinst_LIBRARIES = libmisc.a
-
-libmisc_a_SOURCES = io.c misc.c 
-##reiserfs.c
-
diff --git a/lib/io.c b/lib/io.c
deleted file mode 100644
index 54b764d..0000000
--- a/lib/io.c
+++ /dev/null
@@ -1,960 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#include "io.h"
-
-#include <string.h>
-#include <errno.h>
-#include <asm/types.h>
-
-void check_memory_msg (void) {
-    fprintf(stderr, 
-	"\nThe problem has occurred looks like a hardware problem (perhaps\n"
-        "memory). Send us the bug report only if the second run dies at\n"
-	"the same place with the same block number.\n");
-}
-
-void check_hd_msg (void) {
-    fprintf(stderr, 
-	"\nThe problem has occurred looks like a hardware problem. If you have\n"
-	"bad blocks, we advise you to get a new hard drive, because once you\n"
-	"get one bad block  that the disk  drive internals  cannot hide from\n"
-        "your sight,the chances of getting more are generally said to become\n"
-        "much higher  (precise statistics are unknown to us), and  this disk\n"
-        "drive is probably not expensive enough  for you to you to risk your\n"
-        "time and  data on it.  If you don't want to follow that follow that\n"
-        "advice then  if you have just a few bad blocks,  try writing to the\n"
-	"bad blocks  and see if the drive remaps  the bad blocks (that means\n"
-	"it takes a block  it has  in reserve  and allocates  it for use for\n"
-	"of that block number).  If it cannot remap the block,  use badblock\n"
-	"option (-B) with  reiserfs utils to handle this block correctly.\n");
-}
-
-static int is_bad_block (unsigned long block)
-{
-#ifdef IO_FAILURE_EMULATION
-    
-    /* this array similates bad blocks on the device */
-    unsigned long bad_blocks [] =
-	{
-	    8208, 8209, 8210
-/*, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19*/
-	};
-    int i;
-    
-    for (i = 0; i < sizeof (bad_blocks) / sizeof (bad_blocks[0]); i ++)
-	if (bad_blocks [i] == block)
-	    return 1;
-
-#endif
-
-    return 0;
-}
-
-
-
-/* All buffers are in double linked cycled list.  If getblk found buffer with
-   wanted block number in hash queue it moves buffer to the end of list. */
-
-static int g_nr_buffers;
-
-
-static unsigned long buffers_memory;
-
-/* create buffers until we spend this fraction of system memory, this
-** is a hard limit on the amount of buffer ram used
-*/
-#define BUFFER_MEMORY_FRACTION 10
-
-/* number of bytes in local buffer cache before we start forcing syncs
-** of dirty data and reusing unused buffers instead of allocating new
-** ones.  If a flush doesn't find reusable buffers, new ones are
-** still allocated up to the BUFFER_MEMORY_FRACTION percentage
-**
-*/
-#define BUFFER_SOFT_LIMIT (500 * 1024)
-static unsigned long buffer_soft_limit = BUFFER_SOFT_LIMIT;
-
-
-#define NR_HASH_QUEUES 4096
-static struct buffer_head * g_a_hash_queues [NR_HASH_QUEUES];
-static struct buffer_head * Buffer_list_head;
-static struct buffer_head * g_free_buffers = NULL ;
-static struct buffer_head * g_buffer_heads;
-static int buffer_hits = 0 ;
-static int buffer_misses = 0 ;
-static int buffer_reads = 0 ;
-static int buffer_writes = 0 ;
-
-
-
-static void _show_buffers(struct buffer_head **list, int dev, unsigned long size) {
-    int all = 0;
-    int dirty = 0;
-    int in_use = 0; /* count != 0 */
-    int free = 0;
-    struct buffer_head * next;
-
-    next = *list;
-    if (!next)
-        return ;
-
-    for (;;) {
-	if (next->b_dev == dev && next->b_size == size) {
-	    all ++;
-	    if (next->b_count != 0) {
-		in_use ++;
-	    }
-	    if (buffer_dirty (next)) {
-		dirty ++;
-	    }
-	    if (buffer_clean (next) && next->b_count == 0) {
-		free ++;
-	    }
-	}
-	next = next->b_next;
-	if (next == *list)
-	    break;
-    }
-
-    printf("show_buffers (dev %d, size %lu): free %d, count != 0 %d, dirty %d, "
-	"all %d\n", dev, size, free, in_use, dirty, all);
-}
-
-
-static void show_buffers (int dev, int size)
-{
-    _show_buffers(&Buffer_list_head, dev, size) ;
-    _show_buffers(&g_free_buffers, dev, size) ;
-}
-
-
-static void insert_into_hash_queue (struct buffer_head * bh)
-{
-    int index = bh->b_blocknr % NR_HASH_QUEUES;
-
-    if (bh->b_hash_prev || bh->b_hash_next)
-	die ("insert_into_hash_queue: hash queue corrupted");
-
-    if (g_a_hash_queues[index]) {
-	g_a_hash_queues[index]->b_hash_prev = bh;
-	bh->b_hash_next = g_a_hash_queues[index];
-    }
-    g_a_hash_queues[index] = bh;
-}
-
-
-static void remove_from_hash_queue (struct buffer_head * bh)
-{
-    if (bh->b_hash_next == 0 && bh->b_hash_prev == 0 && bh != g_a_hash_queues[bh->b_blocknr % NR_HASH_QUEUES])
-	/* (b_dev == -1) ? */
-	return;
-
-    if (bh == g_a_hash_queues[bh->b_blocknr % NR_HASH_QUEUES]) {
-	if (bh->b_hash_prev != 0)
-	    die ("remove_from_hash_queue: hash queue corrupted");
-	g_a_hash_queues[bh->b_blocknr % NR_HASH_QUEUES] = bh->b_hash_next;
-    }
-    if (bh->b_hash_next)
-	bh->b_hash_next->b_hash_prev = bh->b_hash_prev;
-
-    if (bh->b_hash_prev)
-	bh->b_hash_prev->b_hash_next = bh->b_hash_next;
-
-    bh->b_hash_prev = bh->b_hash_next = 0;
-}
-
-
-static void put_buffer_list_end (struct buffer_head **list,
-                                 struct buffer_head * bh)
-{
-    struct buffer_head * last = 0;
-
-    if (bh->b_prev || bh->b_next)
-	die ("put_buffer_list_end: buffer list corrupted");
-
-    if (*list == 0) {
-	bh->b_next = bh;
-	bh->b_prev = bh;
-	*list = bh;
-    } else {
-	last = (*list)->b_prev;
-
-	bh->b_next = last->b_next;
-	bh->b_prev = last;
-	last->b_next->b_prev = bh;
-	last->b_next = bh;
-    }
-}
-
-
-static void remove_from_buffer_list (struct buffer_head **list,
-                                     struct buffer_head * bh)
-{
-    if (bh == bh->b_next) {
-	*list = 0;
-    } else {
-	bh->b_prev->b_next = bh->b_next;
-	bh->b_next->b_prev = bh->b_prev;
-	if (bh == *list)
-	    *list = bh->b_next;
-    }
-
-    bh->b_next = bh->b_prev = 0;
-}
-
-
-static void put_buffer_list_head (struct buffer_head **list,
-                                  struct buffer_head * bh)
-{
-    put_buffer_list_end (list, bh);
-    *list = bh;
-}
-
-/*
-#include <sys/mman.h>
-
-static size_t estimate_memory_amount (void)
-{
-    size_t len = 1;
-    size_t max = 0;
-    void * addr;
-
-    while (len > 0) {
-	addr = mmap (0, len, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-	if (addr == MAP_FAILED) {
-	    if (errno != ENOMEM)
-		die ("mmap failed: %s\n", strerror(errno));
-	    break;
-	}
-	if (mlock (addr, len) != 0) {
-	    if (errno == EPERM)
-		die ("No permission to run mlock");
-	    break;
-	}
-
-	munlock (addr, len);
-	munmap (addr, len);
-	max = len;
-	len *= 2;
-    }
-
-    // * If we've looped, we don't want to return 0, we want to return the
-    // * last successful len before we looped. In the event that mmap/mlock
-    // * failed for len = 1, max will still be 0, so we don't get an invalid
-    // * result
-    return max;
-}
-*/
-
-#define GROW_BUFFERS__NEW_BUFERS_PER_CALL 10
-
-/* creates number of new buffers and insert them into head of buffer list */
-static int grow_buffers (int size)
-{
-    int i;
-    struct buffer_head * bh, * tmp;
-
-
-    /* get memory for array of buffer heads */
-    bh = (struct buffer_head *)getmem (GROW_BUFFERS__NEW_BUFERS_PER_CALL * 
-				       sizeof (struct buffer_head) + sizeof (struct buffer_head *));
-    if (g_buffer_heads == 0)
-	g_buffer_heads = bh;
-    else {
-	/* link new array to the end of array list */
-	tmp = g_buffer_heads;
-	while (*(struct buffer_head **)(tmp + GROW_BUFFERS__NEW_BUFERS_PER_CALL) != 0)
-	    tmp = *(struct buffer_head **)(tmp + GROW_BUFFERS__NEW_BUFERS_PER_CALL);
-	*(struct buffer_head **)(tmp + GROW_BUFFERS__NEW_BUFERS_PER_CALL) = bh;
-    }
-
-    for (i = 0; i < GROW_BUFFERS__NEW_BUFERS_PER_CALL; i ++) {
-
-	tmp = bh + i;
-	memset (tmp, 0, sizeof (struct buffer_head));
-	tmp->b_data = getmem (size);
-	if (tmp->b_data == 0)
-	    die ("grow_buffers: no memory for new buffer data");
-	tmp->b_dev = -1;
-	tmp->b_size = size;
-	put_buffer_list_head (&g_free_buffers, tmp);
-    }
-    buffers_memory += GROW_BUFFERS__NEW_BUFERS_PER_CALL * size;
-    g_nr_buffers += GROW_BUFFERS__NEW_BUFERS_PER_CALL;
-    return GROW_BUFFERS__NEW_BUFERS_PER_CALL;
-}
-
-
-struct buffer_head *find_buffer(int dev, unsigned long block, unsigned long size)
-{		
-    struct buffer_head * next;
-
-    next = g_a_hash_queues[block % NR_HASH_QUEUES];
-    for (;;) {
-	struct buffer_head *tmp = next;
-	if (!next)
-	    break;
-	next = tmp->b_hash_next;
-	if (tmp->b_blocknr != block || tmp->b_size != size || tmp->b_dev != dev)
-	    continue;
-	next = tmp;
-	break;
-    }
-    return next;
-}
-
-
-static struct buffer_head * get_free_buffer (struct buffer_head **list,
-                                             unsigned long size)
-{
-    struct buffer_head * next;
-
-    next = *list;
-    if (!next)
-	return 0;
-
-    for (;;) {
-	if (!next)
-	    die ("get_free_buffer: buffer list is corrupted");
-	if (next->b_count == 0 && buffer_clean (next) && next->b_size == size) {
-	    remove_from_hash_queue (next);
-	    remove_from_buffer_list (list, next);
-	    return next;
-	}
-	next = next->b_next;
-	if (next == *list)
-	    break;
-    }
-    return 0;
-}
-
-
-/* to_write == 0 when all blocks have to be flushed. Otherwise - write only
-   buffers with b_count == 0 */
-static int sync_buffers (struct buffer_head **list, int dev, int to_write) {
-    struct buffer_head * next;
-    int written = 0;
-
-
-restart:
-    next = *list;
-    if (!next)
-	return 0;
-    for (;;) {
-	if (!next)
-	    die ("sync_buffers: buffer list is corrupted");
- 
-	if (next->b_dev == dev && buffer_dirty (next) && buffer_uptodate (next)) {
-	    if ((to_write == 0 || next->b_count == 0) && !buffer_do_not_flush (next)) {
-		bwrite (next);
-	    }
-	}
-    
-	/* if this buffer is reusable, put it onto the end of the free list */
-	if (next->b_count == 0 && buffer_clean(next)) {
-	    remove_from_hash_queue (next);
-	    remove_from_buffer_list (list, next);
-	    put_buffer_list_end (&g_free_buffers, next);
-	    written++ ;
-	    if (written == to_write)
-		return written;
-	    goto restart;
-	}
-	if (to_write && written >= to_write)
-	    return written;
-
-	next = next->b_next;
-	if (next == *list)
-	    break;
-    }
-
-    return written;
-}
-
-
-void flush_buffers (int dev)
-{
-    if (dev == -1)
-	die ("flush_buffers: device is not specified");
-
-    sync_buffers (&Buffer_list_head, dev, 0/*all*/);
-    buffer_soft_limit = BUFFER_SOFT_LIMIT;
-}
-
-
-struct buffer_head * getblk (int dev, unsigned long block, int size)
-{
-    struct buffer_head * bh;
-
-    bh = find_buffer (dev, block, size);
-    if (bh) {
-	/* move the buffer to the end of list */
-
-	/*checkmem (bh->b_data, bh->b_size);*/
-
-	remove_from_buffer_list (&Buffer_list_head, bh);
-	put_buffer_list_end (&Buffer_list_head, bh);
-	bh->b_count ++;
-	buffer_hits++ ;
-	return bh;
-    }
-    buffer_misses++ ;
-
-    bh = get_free_buffer (&g_free_buffers, size);
-    if (bh == NULL) {
-	if (buffers_memory >= buffer_soft_limit) {
-	    if (sync_buffers (&Buffer_list_head, dev, 32) == 0) {
-		grow_buffers(size);
-		buffer_soft_limit = buffers_memory + 
-			GROW_BUFFERS__NEW_BUFERS_PER_CALL * size;
-	    }
-	} else {
-	    if (grow_buffers(size) == 0)
-		sync_buffers (&Buffer_list_head, dev, 32);
-	}
-
-	bh = get_free_buffer (&g_free_buffers, size);
-	if (bh == NULL) {
-	    show_buffers (dev, size);
-	    die ("getblk: no free buffers after grow_buffers "
-		 "and refill (%d)", g_nr_buffers);
-	}
-    }
-
-    bh->b_count = 1;
-    bh->b_dev = dev;
-    bh->b_size = size;
-    bh->b_blocknr = block;
-    bh->b_end_io = NULL ;
-    memset (bh->b_data, 0, size);
-    misc_clear_bit(BH_Dirty, &bh->b_state);
-    misc_clear_bit(BH_Uptodate, &bh->b_state);
-
-    put_buffer_list_end (&Buffer_list_head, bh);
-    insert_into_hash_queue (bh);
-    /*checkmem (bh->b_data, bh->b_size);*/
-
-    return bh;
-}
-
-
-void brelse (struct buffer_head * bh)
-{
-    if (bh == 0)
-	return;
-    
-    if (bh->b_count == 0)
-	die ("brelse: can not free a free buffer %lu", bh->b_blocknr);
-    
-    /*checkmem (bh->b_data, get_mem_size (bh->b_data));*/
-    
-    bh->b_count --;
-}
-
-
-void bforget (struct buffer_head * bh)
-{
-    if (bh) {
-	bh->b_state = 0;
-	brelse (bh);
-	remove_from_hash_queue (bh);
-	remove_from_buffer_list(&Buffer_list_head, bh);
-	put_buffer_list_head(&Buffer_list_head, bh);
-    }
-}
-
-/* Returns 0 on success; 1 - end of file; 0 - OK. */
-static int f_read(struct buffer_head * bh)
-{
-    unsigned long long offset;
-    ssize_t bytes;
-
-    buffer_reads++ ;
-
-    offset = (unsigned long long)bh->b_size * bh->b_blocknr;
-    if (lseek (bh->b_dev, offset, SEEK_SET) < 0)
-	return -1;
-
-    bytes = read (bh->b_dev, bh->b_data, bh->b_size);
-    
-    return bytes < 0 ? -1 : (bytes != (ssize_t)bh->b_size ? 1 : 0);
-}
-
-
-struct buffer_head * bread (int dev, unsigned long block, size_t size)
-{
-    struct buffer_head * bh;
-    int ret;
-
-    if (is_bad_block (block))
-	return 0;
-
-    bh = getblk (dev, block, size);
-    
-    /*checkmem (bh->b_data, get_mem_size(bh->b_data));*/
-    
-    if (buffer_uptodate (bh))
-	return bh;
-
-    ret = f_read(bh);
-    
-    if (ret > 0) {
-	die ("%s: End of file, cannot read the block (%lu).\n", 
-	     __FUNCTION__, block);
-    } else if (ret < 0) {
-	/* BAD BLOCK LIST SUPPORT
-	 * die ("%s: Cannot read a block # %lu. Specify list of badblocks\n",*/
-
-	if (errno == EIO) {
-	    check_hd_msg();
-	    die ("%s: Cannot read the block (%lu): (%s).\n", 
-		 __FUNCTION__, block, strerror(errno));
-	} else	{
-	    fprintf (stderr, "%s: Cannot read the block (%lu): (%s).\n", 
-		     __FUNCTION__, block, strerror(errno));
-	    return NULL;
-	}
-    }
-       
-    mark_buffer_uptodate (bh, 0);
-    return bh;
-}
-
-#define ROLLBACK_FILE_START_MAGIC       "_RollBackFileForReiserfsFSCK"
-
-static struct block_handler * rollback_blocks_array;
-static __u32 rollback_blocks_number = 0;
-static FILE * s_rollback_file = 0;
-static FILE * log_file;
-static int do_rollback = 0;
-
-static char * rollback_data;
-static int rollback_blocksize;
-
-void init_rollback_file (char * rollback_file, int *blocksize, FILE * log) {
-    char * string;
-    struct stat buf;
-    
-    if (rollback_file == NULL)
-        return;
-        
-    stat(rollback_file, &buf);
-    
-    s_rollback_file = fopen (rollback_file, "w+");    
-    if (s_rollback_file == NULL) {
-	fprintf (stderr, "Cannot create file %s, work without a rollback file\n", rollback_file);
-        return;
-    }
-
-    rollback_blocksize = *blocksize;
-
-    string = ROLLBACK_FILE_START_MAGIC;
-    fwrite (string, 28, 1, s_rollback_file);
-    fwrite (&rollback_blocksize, sizeof (rollback_blocksize), 1, s_rollback_file);
-    fwrite (&rollback_blocks_number, sizeof (rollback_blocks_number), 1, s_rollback_file);
-    fflush(s_rollback_file);
-        
-    rollback_data = getmem(rollback_blocksize);
-    
-//    printf("\ncheckmem1");
-//    fflush (stdout);
-//    checkmem (rollback_data, get_mem_size((char *)rollback_data));
-//    printf(" OK");
-    
-    log_file = log;
-    if (log_file)
-        fprintf (log_file, "rollback: file (%s) initialize\n", rollback_file);
-
-    do_rollback = 0;
-}
-
-#if 0
-static void erase_rollback_file (char * rollback_file) {
-    close_rollback_file ();
-    unlink (rollback_file);    
-}
-#endif
-
-int open_rollback_file (char * rollback_file, FILE * log) {
-    char string [28];
-    struct stat buf;
-    
-    if (rollback_file == NULL)
-        return -1;
-    
-    if (stat(rollback_file, &buf)) {
-	fprintf (stderr, "Cannot stat rollback file (%s)\n", rollback_file);
-	return -1;
-    }
-        
-    s_rollback_file = fopen (rollback_file, "r+");
-    if (s_rollback_file == NULL) {
-	fprintf (stderr, "Cannot open file (%s)\n", rollback_file);
-	return -1;
-    }
-    
-    fread (string, 28, 1, s_rollback_file);
-    if (!strcmp (string, ROLLBACK_FILE_START_MAGIC)) {
-        fprintf (stderr, "Specified file (%s) does not look like a rollback file\n", rollback_file);
-        fclose (s_rollback_file);
-        s_rollback_file = 0;
-        return -1;
-    }
-    
-    fread (&rollback_blocksize, sizeof (rollback_blocksize), 1, s_rollback_file);
-    
-    if (rollback_blocksize <= 0) {
-        fprintf(stderr, "rollback: wrong rollback blocksize, exit\n");
-        return -1;
-    }
-    
-    log_file = log;
-    if (log_file)
-        fprintf (log_file, "rollback: file (%s) opened\n", rollback_file);
-    
-    do_rollback = 1;
-    return 0;
-}
-
-void close_rollback_file () {
-    if (s_rollback_file == 0)
-        return;   
-
-    if (!do_rollback) {
-        if (fseek (s_rollback_file, 28 + sizeof(int), SEEK_SET) == (loff_t)-1)
-            return;
-        fwrite (&rollback_blocks_number, sizeof (rollback_blocksize), 1, s_rollback_file);
-        if (log_file != 0) 
-            fprintf (log_file, "rollback: %d blocks backed up\n", rollback_blocks_number);
-    }
-        
-    fclose (s_rollback_file);
-
-    freemem (rollback_data);
-    freemem (rollback_blocks_array);
-
-//    fprintf (stdout, "rollback: (%u) blocks saved, \n", rollback_blocks_number);
-    
-/*    for (i = 0; i < rollback_blocks_number; i++) 
-        fprintf(stdout, "device (%Lu), block number (%u)\n", 
-                rollback_blocks_array [i].device, 
-                rollback_blocks_array [i].blocknr);
-    fprintf(stdout, "\n");
-    */
-}
-
-void do_fsck_rollback (int fd_device, int fd_journal_device, FILE * progress) {
-    long long int offset;
-    
-    struct stat buf;
-    int descriptor;
-    ssize_t retval;
-    int count_failed = 0;
-    int count_rollbacked = 0;
-    
-    int b_dev;
-    int n_dev = 0;
-    int n_journal_dev = 0;
-    unsigned long total, done = 0;
-
-    if (fd_device == 0) {
-        fprintf(stderr, "rollback: unspecified device, exit\n");
-        return;
-    }
-        
-    if (fd_journal_device) {
-        if (!fstat (fd_journal_device, &buf)) {
-            n_journal_dev = buf.st_rdev;
-        } else {
-            fprintf(stderr, "rollback: specified journal device cannot be stated\n");
-        }
-    }
-    
-    if (!fstat (fd_device, &buf)) {
-        n_dev = buf.st_rdev;
-    } else {
-        fprintf(stderr, "rollback: specified device cannot be stated, exit\n");
-        return;
-    }
-    
-    rollback_data = getmem (rollback_blocksize);
-//    printf("\ncheckmem2");
-//    fflush (stdout);
-//    checkmem (rollback_data, get_mem_size((char *)rollback_data));
-//   printf(" OK");
-    
-    fread (&rollback_blocks_number, sizeof (rollback_blocks_number), 1, s_rollback_file);
-
-    total = rollback_blocks_number;
-    
-    while (1) {
-        print_how_far (progress, &done, rollback_blocks_number, 1, 0/*not quiet*/);
-	
-        descriptor = 0;
-        if ((retval = fread (&b_dev, sizeof (b_dev), 1, s_rollback_file)) <= 0) {
-            if (retval) 
-                fprintf (stderr, "rollback: fread: %s\n", strerror (errno));
-            break;            
-        }
-        if ((retval = fread (&offset, sizeof (offset), 1, s_rollback_file)) <= 0) {
-            if (retval) 
-                fprintf (stderr, "rollback: fread: %s\n", strerror (errno));
-            break;
-        }
-
-        if ((retval = fread (rollback_data, rollback_blocksize, 1, s_rollback_file)) <= 0) {
-            if (retval) 
-                fprintf (stderr, "rollback: fread: %s\n", strerror (errno));
-            break;
-        }
-                
-        if (n_dev == b_dev)
-            descriptor = fd_device;
-        if ((n_journal_dev) && (n_journal_dev == b_dev))
-            descriptor = fd_journal_device;
-        
-        if (descriptor == 0) {
-            fprintf(stderr, "rollback: block from unknown device, skip block\n");
-            count_failed ++;
-            continue;
-        }
-        
-        if (lseek (descriptor, offset, SEEK_SET) == (loff_t)-1) {
-            fprintf(stderr, "device cannot be lseeked, skip block\n");
-            count_failed ++;
-            continue;
-        }
-        
-        if (write (descriptor, rollback_data, rollback_blocksize) == -1) {
-            fprintf (stderr, "rollback: write %d bytes returned error "
-		"(block=%lld, dev=%d): %s\n", rollback_blocksize, 
-		offset/rollback_blocksize, b_dev, strerror (errno));
-            count_failed ++;
-        } else {
-            count_rollbacked ++;
-              /*if you want to know what gets rollbacked, uncomment it*/
-/*            if (log_file != 0 && log_file != stdout) 
-                fprintf (log_file, "rollback: block %Lu of device %Lu was restored\n", 
-                        (loff_t)offset/rollback_blocksize, b_dev);
-*/
-//            fprintf (stdout, "rollback: block (%Ld) written\n", (loff_t)offset/rollback_blocksize);
-        }
-    }
-    
-    printf ("\n");
-    if (log_file != 0) 
-        fprintf (log_file, "rollback: (%u) blocks restored\n", count_rollbacked);
-}
-
-/*
-static void rollback__mark_block_saved (struct block_handler * rb_e) {
-    if (rollback_blocks_array == NULL)
-        rollback_blocks_array = getmem (ROLLBACK__INCREASE_BLOCK_NUMBER * sizeof (*rb_e));
-    
-    if (rollback_blocks_number == get_mem_size ((void *)rollback_blocks_array) / sizeof (*rb_e))
-        rollback_blocks_array = expandmem (rollback_blocks_array, get_mem_size((void *)rollback_blocks_array), 
-                        ROLLBACK__INCREASE_BLOCK_NUMBER * sizeof (*rb_e));
-
-//    checkmem ((char *)rollback_blocks_array, get_mem_size((char *)rollback_blocks_array));
-
-    rollback_blocks_array[rollback_blocks_number] = *rb_e;
-    rollback_blocks_number ++;
-    qsort (rollback_blocks_array, rollback_blocks_number, sizeof (*rb_e), rollback_compare);
-    
-//    printf("\ncheckmem3");
-//    fflush (stdout);
-//   checkmem ((char *)rollback_blocks_array, get_mem_size((char *)rollback_blocks_array));
-//    printf(" OK");
-}
-*/
-/* for now - just make sure that bad blocks did not get here */
-int bwrite (struct buffer_head * bh)
-{
-    unsigned long long offset;
-    long long bytes, size;
-
-    if (is_bad_block (bh->b_blocknr)) {
-	fprintf (stderr, "bwrite: bad block is going to be written: %lu\n",
-		 bh->b_blocknr);
-	exit(8);
-    }
-
-    if (!buffer_dirty (bh) || !buffer_uptodate (bh))
-	return 0;
-
-    buffer_writes++ ;
-    if (bh->b_start_io)
-	/* this is used by undo feature of reiserfsck */
-	bh->b_start_io (bh->b_blocknr);
-
-    size = bh->b_size;
-    offset = (loff_t)size * (loff_t)bh->b_blocknr;
-
-    if (lseek (bh->b_dev, offset, SEEK_SET) == (loff_t)-1){
-	fprintf (stderr, "bwrite: lseek to position %llu (block=%lu, dev=%d): %s\n",
-	    offset, bh->b_blocknr, bh->b_dev, strerror(errno));
-	exit(8); /* File system errors left uncorrected */
-    }
-
-    if (s_rollback_file != NULL && bh->b_size == (unsigned long)rollback_blocksize) {
-        struct stat buf;
-        __u32 position;
-	struct block_handler block_h;
-        
-        /*log previous content into the log*/
-        if (!fstat (bh->b_dev, &buf)) {
-	    block_h.blocknr = bh->b_blocknr;
-	    block_h.device = buf.st_rdev;
-	    if (reiserfs_bin_search(&block_h, rollback_blocks_array, 
-				    rollback_blocks_number, sizeof (block_h), 
-				    &position, blockdev_list_compare)
-		!= POSITION_FOUND)
-	    {
-                /*read initial data from the disk*/
-                if (read(bh->b_dev, rollback_data, bh->b_size) == (long long)bh->b_size) {
-                    fwrite(&buf.st_rdev, sizeof (buf.st_rdev), 1, s_rollback_file);
-                    fwrite(&offset, sizeof (offset), 1, s_rollback_file);
-                    fwrite(rollback_data, rollback_blocksize, 1, s_rollback_file);
-                    fflush(s_rollback_file);
-                    blocklist__insert_in_position(&block_h, (void *)(&rollback_blocks_array),
-			&rollback_blocks_number, sizeof(block_h), &position);
-		    
-                    /*if you want to know what gets saved, uncomment it*/
-/*                    if (log_file != 0 && log_file != stdout) {
-                        fprintf (log_file, "rollback: block %lu of device %Lu was "
-			    "backed up\n", bh->b_blocknr, buf.st_rdev);
-                    }
-*/
-                    
-                } else {
-                    fprintf (stderr, "bwrite: read (block=%lu, dev=%d): %s\n", 
-			bh->b_blocknr, bh->b_dev, strerror (errno));
-                    exit(8);
-                }
-		
-                if (lseek (bh->b_dev, offset, SEEK_SET) == (loff_t)-1) {
-                    fprintf (stderr, "bwrite: lseek to position %llu (block=%lu, "
-			"dev=%d): %s\n", offset, bh->b_blocknr, bh->b_dev, 
-			strerror(errno));
-                    exit(8);
-                }
-            }
-        } else {
-            fprintf (stderr, "bwrite: fstat of (%d) returned -1: %s\n", 
-		bh->b_dev, strerror(errno));
-        }
-    } else if (s_rollback_file != NULL) {
-	fprintf (stderr, "rollback: block (%lu) has the size different from "
-	    "the fs uses, block skipped\n", bh->b_blocknr);
-    }
-    
-    bytes = write(bh->b_dev, bh->b_data, size);
-    if (bytes != size) {
-	fprintf (stderr, "bwrite: write %lld bytes returned %lld (block=%ld, "
-	    "dev=%d): %s\n", size, bytes, bh->b_blocknr, bh->b_dev, 
-	    strerror(errno));
-	exit(8);
-    }
-
-    mark_buffer_clean (bh);
-
-    if (bh->b_end_io) {
-	bh->b_end_io(bh, 1) ;
-    }
-
-    return 0;
-}
-
-
-static int _check_and_free_buffer_list(struct buffer_head *list) {
-    struct buffer_head *next = list ;
-    int count = 0 ;
-    if (!list)
-	return 0 ;
-
-    for(;;) {
-	if (next->b_count != 0)
-	    fprintf (stderr, "check_and_free_buffer_mem: not free buffer "
-		"(%d, %ld, %ld, %d)\n", next->b_dev, next->b_blocknr, 
-		next->b_size, next->b_count);
-
-	if (buffer_dirty (next) && buffer_uptodate (next))
-	    fprintf (stderr, "check_and_free_buffer_mem: dirty buffer "
-		"(%d %lu) found\n", next->b_dev, next->b_blocknr);
-
-	freemem (next->b_data);
-	count++;
-	next = next->b_next;
-	if (next == list)
-            break;
-    }
-    return count;
-}
-
-static void check_and_free_buffer_mem (void)
-{
-    int count = 0;
-    struct buffer_head * next ;
-
-//    printf("check and free buffer mem, hits %d misses %d reads %d writes %d\n", 
-//	    buffer_hits, buffer_misses, buffer_reads, buffer_writes) ;
-    /*sync_buffers (0, 0);*/
-
-    count = _check_and_free_buffer_list(Buffer_list_head);
-    count += _check_and_free_buffer_list(g_free_buffers);
-
-    if (count != g_nr_buffers)
-       die ("check_and_free_buffer_mem: found %d buffers, must be %d", 
-	    count, g_nr_buffers);
-
-    /* free buffer heads */
-    while ((next = g_buffer_heads)) {
-	g_buffer_heads = *(struct buffer_head **)
-		(next + GROW_BUFFERS__NEW_BUFERS_PER_CALL);
-
-	freemem (next);
-    }
-  
-    return;
-}
-
-
-/* */
-void free_buffers (void)
-{
-    check_and_free_buffer_mem ();
-}
-
-
-static void _invalidate_buffer_list(struct buffer_head *list, int dev)
-{
-    struct buffer_head * next;
-
-    if (!list)
-	return;
-
-    next = list;
-
-    for (;;) {
-	if (next->b_dev == dev) {
-	    if (buffer_dirty (next) || next->b_count)
-		fprintf (stderr, "invalidate_buffers: dirty buffer or used buffer (%d %lu) found\n",
-			 next->b_count, next->b_blocknr);
-	    next->b_state = 0;
-	    remove_from_hash_queue (next);
-	}
-	next = next->b_next;
-	if (next == list)
-	    break;
-    }
-}
-
-/* forget all buffers of the given device */
-void invalidate_buffers (int dev)
-{
-    _invalidate_buffer_list(Buffer_list_head, dev) ;
-    _invalidate_buffer_list(g_free_buffers, dev) ;
-}
diff --git a/lib/misc.c b/lib/misc.c
deleted file mode 100644
index 04a4d88..0000000
--- a/lib/misc.c
+++ /dev/null
@@ -1,986 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#define _GNU_SOURCE
-
-#include "misc.h"
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <string.h>
-#include <errno.h>
-#include <mntent.h>
-#include <sys/vfs.h>
-#include <time.h>
-#include <utime.h>
-#include <ctype.h>
-#include <linux/hdreg.h>
-#include <dirent.h>
-#include <assert.h>
-
-#include <sys/ioctl.h>
-#include <signal.h>
-
-
-/* Debian modifications by Ed Boraas <ed@debian.org> */
-#include <sys/mount.h>
-/* End Debian mods */
-
-#define STAT_FIELD(Field, Type)						\
-inline Type misc_device_##Field(char *device) {				\
-	struct stat st;							\
-									\
-	if (stat(device, &st) == 0)					\
-		return st.st_##Field;					\
-									\
-	fprintf(stderr, "Stat of the device '%s' failed.", device);	\
-	exit(8);							\
-}
-
-STAT_FIELD(mode, mode_t);
-STAT_FIELD(rdev, dev_t);
-STAT_FIELD(size, off_t);
-STAT_FIELD(blocks, blkcnt_t);
-
-void die (char * fmt, ...)
-{
-    static char buf[1024];
-    va_list args;
-
-    va_start (args, fmt);
-    vsprintf (buf, fmt, args);
-    va_end (args);
-
-    fprintf (stderr, "\n%s\n", buf);
-    abort ();
-}
-
-
-#define MEM_BEGIN "_mem_begin_"
-#define MEM_END "mem_end"
-#define MEM_FREED "__free_"
-#define CONTROL_SIZE (strlen (MEM_BEGIN) + 1 + sizeof (int) + strlen (MEM_END) + 1)
-
-
-unsigned int get_mem_size(char *p) {
-    char *begin;
-    
-    begin = p - strlen (MEM_BEGIN) - 1 - sizeof(int);
-    return *(int *)(begin + strlen (MEM_BEGIN) + 1);
-}
-
-
-void checkmem (char * p, int size)
-{
-    char * begin;
-    char * end;
-  
-    begin = p - strlen (MEM_BEGIN) - 1 - sizeof (int);
-    if (strcmp (begin, MEM_BEGIN))
-	die ("checkmem: memory corrupted - invalid head sign");
-
-    if (*(int *)(begin + strlen (MEM_BEGIN) + 1) != size)
-	die ("checkmem: memory corrupted - invalid size");
-
-    end = begin + size + CONTROL_SIZE - strlen (MEM_END) - 1;
-    if (strcmp (end, MEM_END))
-	die ("checkmem: memory corrupted - invalid end sign");
-}
-
-
-void *getmem (int size)
-{
-    char * mem;
-
-    if ((mem = mem_alloc(size)) == NULL)
-	die ("getmem: no more memory (%d)", size);
-    
-    memset (mem, 0, size);
-//    checkmem (mem, size);
-
-    return mem;
-}
-
-void *mem_alloc(int size) {
-    char * p;
-    char * mem;
-
-    p = (char *)malloc (CONTROL_SIZE + size);
-    if (!p)
-	die ("getmem: no more memory (%d)", size);
-
-    /* Write the MEM_BEGIN magic in the beginning of allocated memory. */
-    strcpy (p, MEM_BEGIN);
-    p += strlen (MEM_BEGIN) + 1;
-    /* Write the size after the magic. */
-    *(int *)p = size;
-    p += sizeof (int);
-    mem = p;
-    p += size;
-    strcpy (p, MEM_END);
-
-    return mem;
-}
-
-void * expandmem (void * vp, int size, int by)
-{
-    int allocated;
-    char * mem, * p = vp;
-    int expand_by = by;
-
-    if (p) {
-	checkmem (p, size);
-	allocated = CONTROL_SIZE + size;
-	p -= (strlen (MEM_BEGIN) + 1 + sizeof (int));
-    } else {
-	allocated = 0;
-	/* add control bytes to the new allocated area */
-	expand_by += CONTROL_SIZE;
-    }
-    p = realloc (p, allocated + expand_by);
-    if (!p)
-	die ("expandmem: no more memory (%d)", size);
-    if (!vp) {
-	strcpy (p, MEM_BEGIN);
-    }
-    mem = p + strlen (MEM_BEGIN) + 1 + sizeof (int);
-
-    *(int *)(p + strlen (MEM_BEGIN) + 1) = size + by;
-    /* fill new allocated area by 0s */
-    if(by > 0)
-        memset (mem + size, 0, by);
-    strcpy (mem + size + by, MEM_END);
-//    checkmem (mem, size + by);
-
-    return mem;
-}
-
-
-void freemem (void * vp)
-{
-    char * p = vp;
-    int size;
-  
-    if (!p)
-	return;
-    size = get_mem_size (vp);
-    checkmem (p, size);
-
-    p -= (strlen (MEM_BEGIN) + 1 + sizeof (int));
-    strcpy (p, MEM_FREED);
-    strcpy (p + size + CONTROL_SIZE - strlen (MEM_END) - 1, MEM_FREED);
-    free (p);
-}
-
-
-typedef int (*func_t) (char *);
-
-/* Lookup the @file in the @mntfile. @file is mntent.mnt_fsname if @fsname 
-   is set; mntent.mnt_dir otherwise. Return the mnt entry from the @mntfile.
-   
-   Warning: if the root fs is mounted RO, the content of /etc/mtab may be 
-   not correct. */
-static struct mntent *misc_mntent_lookup(char *mntfile, 
-					 char *file, 
-					 int path) 
-{
-	struct mntent *mnt;
-	int name_match = 0;
-	struct stat st;
-	dev_t rdev = 0;
-	dev_t dev = 0;
-	ino_t ino = 0;
-	char *name;
-	FILE *fp;
-	
-	assert(mntfile != NULL);
-	assert(file != NULL);
-
-	if (stat(file, &st) == 0) {
-		/* Devices is stated. */
-		if (S_ISBLK(st.st_mode)) {
-			rdev = st.st_rdev;
-		} else {
-			dev = st.st_dev;
-			ino = st.st_ino;
-		}
-	}
-
-	if ((fp = setmntent(mntfile, "r")) == NULL)
-		return INVAL_PTR;
-
-	while ((mnt = getmntent(fp)) != NULL) {
-		/* Check if names match. */
-		name = path ? mnt->mnt_dir : mnt->mnt_fsname;
-		
-		if (strcmp(file, name) == 0)
-			name_match = 1;
-
-		if (stat(name, &st))
-			continue;
-		
-		/* If names do not match, check if stats match. */
-		if (!name_match) {
-			if (rdev && S_ISBLK(st.st_mode)) {
-				if (rdev != st.st_rdev)
-					continue;
-			} else if (dev && !S_ISBLK(st.st_mode)) {
-				if (dev != st.st_dev ||
-				    ino != st.st_ino)
-					continue;
-			} else {
-				continue;
-			}
-		}
-
-		/* If not path and not block device do not check anything more. */
-		if (!path && !rdev) 
-			break;
-
-		if (path) {
-			/* Either names or stats match. Make sure the st_dev of 
-			   the path is same as @mnt_fsname device rdev. */
-			if (stat(mnt->mnt_fsname, &st) == 0 && 
-			    dev == st.st_rdev)
-				break;
-		} else {
-			/* Either names or stats match. Make sure the st_dev of 
-			   the mount entry is same as the given device rdev. */
-			if (stat(mnt->mnt_dir, &st) == 0 && 
-			    rdev == st.st_dev)
-				break;
-		}
-	}
-
-	endmntent (fp);
-        return mnt;
-}
-
-static int misc_root_mounted(char *device) {
-	struct stat rootst, devst;
-	
-	assert(device != NULL);
-
-	if (stat("/", &rootst) != 0) 
-		return -1;
-
-	if (stat(device, &devst) != 0)
-		return -1;
-
-	if (!S_ISBLK(devst.st_mode) || 
-	    devst.st_rdev != rootst.st_dev)
-		return 0;
-
-	return 1;
-}
-
-static int misc_file_ro(char *file) {
-	if (utime(file, 0) == -1) {
-		if (errno == EROFS)
-			return 1;
-	}
-
-	return 0;
-}
-
-struct mntent *misc_mntent(char *device) {
-	int proc = 0, path = 0, root = 0;
-	
-	struct mntent *mnt;
-	struct statfs stfs;
-
-	assert(device != NULL);
-	
-	/* Check if the root. */
-	if (misc_root_mounted(device) == 1)
-		root = 1;
-	
-#ifdef __linux__
-	/* Check if /proc is procfs. */
-	if (statfs("/proc", &stfs) == 0 && stfs.f_type == 0x9fa0) {
-		proc = 1;
-		
-		if (root) {
-			/* Lookup the "/" entry in /proc/mounts. Special 
-			   case as root entry can present as:
-				rootfs / rootfs rw 0 0
-			   Look up the mount point in this case. */
-			mnt = misc_mntent_lookup("/proc/mounts", "/", 1);
-		} else {
-			/* Lookup the @device /proc/mounts */
-			mnt = misc_mntent_lookup("/proc/mounts", device, 0);
-		}
-		
-		if (mnt == INVAL_PTR) 
-			proc = 0;
-		else if (mnt)
-			return mnt;
-	}
-#endif /* __linux__ */
-
-#if defined(MOUNTED) || defined(_PATH_MOUNTED)
-
-#ifndef MOUNTED
-    #define MOUNTED _PATH_MOUNTED
-#endif
-	/* Check in MOUNTED (/etc/mtab) if RW. */
-	if (!misc_file_ro(MOUNTED)) {
-		path = 1;
-
-		if (root) {
-			mnt = misc_mntent_lookup(MOUNTED, "/", 1);
-		} else {
-			mnt = misc_mntent_lookup(MOUNTED, device, 0);
-		}
-
-		if (mnt == INVAL_PTR) 
-			path = 0;
-		else if (mnt)
-			return mnt;
-	}
-#endif /* defined(MOUNTED) || defined(_PATH_MOUNTED) */
-	
-	/* If has not been checked in neither /proc/mounts nor /etc/mtab (or 
-	   errors have occured), return INVAL_PTR, NULL otherwise. */
-	return (!proc && !path) ? INVAL_PTR : NULL;
-}
-
-int misc_device_mounted(char *device) {
-	struct mntent *mnt;
-	
-	/* Check for the "/" first to avoid any possible problem with 
-	   reflecting the root fs info in mtab files. */
-	if (misc_root_mounted(device) == 1) {
-		return misc_file_ro("/") ? MF_RO : MF_RW;
-	}
-	
-	/* Lookup the mount entry. */
-	if ((mnt = misc_mntent(device)) == NULL) {
-		return MF_NOT_MOUNTED;
-	} else if (mnt == INVAL_PTR) {
-		return 0;
-	}
-
-	return hasmntopt(mnt, MNTOPT_RO) ? MF_RO : MF_RW;
-}
-
-char buf1 [100];
-char buf2 [100];
-
-void print_how_fast (unsigned long passed, unsigned long total,
-		     int cursor_pos, int reset_time)
-{
-    static time_t t0 = 0, t1 = 0, t2 = 0;
-    int speed;
-    int indent;
-
-    if (reset_time)
-	time (&t0);
-
-    time (&t1);
-    if (t1 != t0) {
-	speed = passed / (t1 - t0);
-	if (total - passed) {
-	    if (t1 - t2 < 1)
-	        return;
-	    t2 = t1;
-	}	
-    } else
-	speed = 0;
-
-    /* what has to be written */
-    if (total)
-      sprintf (buf1, "left %lu, %d /sec", total - passed, speed);
-    else {
-	/*(*passed) ++;*/
-	sprintf (buf1, "done %lu, %d /sec", passed, speed);
-    }
-    
-    /* make indent */
-    indent = 79 - cursor_pos - strlen (buf1);
-    memset (buf2, ' ', indent);
-    buf2[indent] = 0;
-    fprintf (stderr, "%s%s", buf2, buf1);
-
-    memset (buf2, '\b', indent + strlen (buf1));
-    buf2 [indent + strlen (buf1)] = 0;
-    fprintf (stderr, "%s", buf2);
-    fflush (stderr);
-}
-
-
-static char * strs[] =
-{"0%",".",".",".",".","20%",".",".",".",".","40%",".",".",".",".","60%",".",".",".",".","80%",".",".",".",".","100%"};
-
-static char progress_to_be[1024];
-static char current_progress[1024];
-
-static void str_to_be (char * buf, int prosents)
-{
-    int i;
-    prosents -= prosents % 4;
-    buf[0] = 0;
-    for (i = 0; i <= prosents / 4; i ++)
-	strcat (buf, strs[i]);
-}
-
-
-void print_how_far (FILE * fp,
-		    unsigned long * passed, unsigned long total,
-		    unsigned int inc, int quiet)
-{
-    int percent;
-
-    if (*passed == 0)
-	current_progress[0] = 0;
-
-    (*passed) += inc;
-    if (*passed > total) {
-/*	fprintf (fp, "\nprint_how_far: total %lu has been reached already. cur=%lu\n",
-	total, *passed);*/
-	return;
-    }
-
-    percent = ((*passed) * 100) / total;
-
-    str_to_be (progress_to_be, percent);
-
-    if (strlen (current_progress) != strlen (progress_to_be)) {
-	fprintf (fp, "%s", progress_to_be + strlen (current_progress));
-    }
-
-    strcat (current_progress, progress_to_be + strlen (current_progress));
-
-    if (!quiet) {
-	print_how_fast(*passed /* - inc*/, total, strlen (progress_to_be),
-	    (*passed == inc) ? 1 : 0);
-    }
-
-    fflush (fp);
-}
-
-#if defined(__linux__) && defined(_IOR) && !defined(BLKGETSIZE64)
-/* Note! Despite this call being called with *64, it must be encoded to
- * return only sizeof(size_t), since in earlier kernel versions it was
- * declared _IOR(0x12, 114, sizeof(u64)), making it use sizeof(sizeof(u64)).
- *
- * However, the call itself does always return 64bit!
- */
-#   define BLKGETSIZE64 _IOR(0x12, 114, size_t)
-#endif
-
-/* To not have problem with last sectors on the block device when switching 
-   to smaller one. */
-#define MAX_BS (64 * 1024)
-
-int valid_offset( int fd, loff_t offset) {
-    char ch;
-    loff_t res;
-
-    /*res = reiserfs_llseek (fd, offset, 0);*/
-    res = lseek (fd, offset, SEEK_SET);
-    if (res < 0)
-	return 0;
-
-    /* if (read (fd, &ch, 1) < 0) does not wirk on files */
-    if (read (fd, &ch, 1) < 1)
-	return 0;
-
-
-    return 1;
-}
-
-/* calculates number of blocks in a file. Returns 0 for "sparse"
-   regular files and files other than regular files and block devices */
-unsigned long count_blocks (char * filename, int blocksize)
-{
-    loff_t high, low;
-    unsigned long sz;
-    __u64 size;
-    int fd;
-
-    if (!S_ISBLK(misc_device_mode(filename)) && 
-	!S_ISREG(misc_device_mode(filename)))
-	return 0;
-
-    fd = open (filename, O_RDONLY);
-    if (fd == -1) {
-	fprintf(stderr, "Failed to open '%s': %s.\n", filename, strerror(errno));
-	return 0;
-    }
-
-#ifdef BLKGETSIZE64
-    {
-	if (ioctl (fd, BLKGETSIZE64, &size) >= 0) {
-	    size = (size / MAX_BS) * MAX_BS / blocksize;
-	    sz = size;
-	    if ((__u64)sz != size)
-		    die ("count_blocks: block device too large");
-
-	    close(fd);
-	    return sz;
-	}
-    }
-#endif
-
-
-#ifdef BLKGETSIZE
-    {
-	if (ioctl (fd, BLKGETSIZE, &sz) >= 0) {
-	    size = sz;
-
-	    close(fd);
-	    return (size * 512 / MAX_BS) * MAX_BS / blocksize;
-	}
-    }
-#endif
-
-    low = 0;
-    for( high = 1; valid_offset (fd, high); high *= 2 )
-	low = high;
-    while (low < high - 1) {
-	const loff_t mid = ( low + high ) / 2;
-
-	if (valid_offset (fd, mid))
-	    low = mid;
-	else
-	    high = mid;
-    }
-    
-    valid_offset (fd, 0);
-
-    close (fd);
-    return (low + 1) * MAX_BS / MAX_BS / blocksize;
-}
-
-/* there are masks for certain bits  */
-__u16 mask16 (int from, int count)
-{
-    __u16 mask;
-
-
-    mask = (0xffff >> from);
-    mask <<= from;
-    mask <<= (16 - from - count);
-    mask >>= (16 - from - count);
-    return mask;
-}
-
-
-__u32 mask32 (int from, int count)
-{
-    __u32 mask;
-
-
-    mask = (0xffffffff >> from);
-    mask <<= from;
-    mask <<= (32 - from - count);
-    mask >>= (32 - from - count);
-    return mask;
-}
-
-
-__u64 mask64 (int from, int count)
-{
-    __u64 mask;
-
-
-    mask = (0xffffffffffffffffLL >> from);
-    mask <<= from;
-    mask <<= (64 - from - count);
-    mask >>= (64 - from - count);
-    return mask;
-}
-
-
-__u32 get_random (void)
-{
-    srandom (time (0));
-    return random ();
-}
-
-/* this implements binary search in the array 'base' among 'num' elements each
-   of those is 'width' bytes long. 'comp_func' is used to compare keys */
-int reiserfs_bin_search (void * key, void * base, __u32 num, int width,
-			 __u32 * ppos, comparison_fn_t comp_func)
-{
-    __u32 rbound, lbound, j;
-    int ret;
-
-    if (num == 0 || base == NULL) {
-	/* objectid map may be 0 elements long */
-	*ppos = 0;
-	return POSITION_NOT_FOUND;
-    }
-
-    lbound = 0;
-    rbound = num - 1;
-
-    for (j = (rbound + lbound) / 2; lbound <= rbound; j = (rbound + lbound) / 2) {
-	ret =  comp_func ((void *)((char *)base + j * width), key ) ;
-	if (ret < 0) { /* second is greater */
-	    lbound = j + 1;
-	    continue;
-
-	} else if (ret > 0) { /* first is greater */
-	    if (j == 0)
-	    	break;
-	    rbound = j - 1;
-	    continue;
-	} else { /* equal */
-	    *ppos = j;
-	    return POSITION_FOUND;
-	}
-    }
-
-    *ppos = lbound;
-    return POSITION_NOT_FOUND;
-}
-
-
-#define BLOCKLIST__ELEMENT_NUMBER 10
-
-/*element is block number and device*/
-int blockdev_list_compare (const void * block1, const void * block2) {
-    if (*(__u32 *)block1 < *(__u32 *)block2)
-        return -1;
-    if (*(__u32 *)block1 > *(__u32 *)block2)
-        return 1;
-        
-    if (*((__u32 *)block1 + 1) < *((__u32 *)block2 + 1))
-        return -1;        
-    if (*((__u32 *)block1 + 1) > *((__u32 *)block2 + 1))
-        return 1;
-        
-    return 0;
-}
-
-void blocklist__insert_in_position (void *elem, void **base, __u32 *count, 
-    int elem_size, __u32 *position) 
-{
-    if (elem_size == 0)
-    	return;
-    	
-    if (*base == NULL)
-        *base = getmem (BLOCKLIST__ELEMENT_NUMBER * elem_size);
-    
-    if (*count == get_mem_size((void *)*base) / elem_size)
-        *base = expandmem (*base, get_mem_size((void *)*base), 
-                        BLOCKLIST__ELEMENT_NUMBER * elem_size);
-    
-    if (*position < *count) {
-        memmove (*base + (*position + 1), 
-                 *base + (*position),
-                 (*count - *position) * elem_size);
-    }
-
-    memcpy (*base + (char) *position * elem_size, elem, elem_size);
-    *count+=1;
-}
-
-/* 0 - dma is not supported, scsi or regular file */
-/* 1 - xt drive                                   */
-/* 2 - ide drive */
-static void get_dma_support(dma_info_t *dma_info){
-    if (S_ISREG(dma_info->st.st_mode))
-	dma_info->st.st_rdev = dma_info->st.st_dev;
-
-    if (IDE_DISK_MAJOR(major(dma_info->st.st_rdev))) {
-        dma_info->support_type = 2;
-	return;
-    }
-    
-#ifdef XT_DISK_MAJOR
-    if (major(dma_info->st.st_rdev) == XT_DISK_MAJOR) {
-	dma_info->support_type = 1;
-	return;
-    }
-#endif    
-    dma_info->support_type = 0;
-}
-
-/* 
- * Return values: 
- * 0 - ok;
- * 1 - preparation cannot be done 
- * -1 - preparation failed
- */
-
-int prepare_dma_check(dma_info_t *dma_info) {
-    DIR *dir;
-    struct dirent *dirent;
-    struct stat st;
-    dev_t rdev;
-    int rem;
-    char buf[256];
-
-#ifndef HDIO_GET_DMA
-        return -1;
-#endif
-	
-    if (fstat(dma_info->fd, &dma_info->st))
-	die("stat on device failed\n");
-   
-    get_dma_support(dma_info);
-   
-    /* dma should be supported */
-    if (dma_info->support_type == 0)
-	return 1;
-    
-    if (dma_info->support_type == 2) {
-	rdev = dma_info->st.st_rdev;
-
-	if ((rem = (minor(rdev) % 64)) != 0) {
-	    rdev -= rem;
-	    if(!(dir = opendir("/dev/"))) {
-		dma_info->support_type = 1;
-		return 0;
-	    }
-	    
-	    while ((dirent = readdir(dir)) != NULL) {
-		if (strncmp(dirent->d_name, ".", 1) == 0 || strncmp(dirent->d_name, "..", 2) == 0)
-		    continue;
-		memset(buf, 0, 256);
-		strncat(buf, "/dev/", 5);
-		strncat(buf, dirent->d_name, strlen(dirent->d_name));
-		
-		if (stat(buf, &st))
-		    break;
-		
-		if (S_ISBLK(st.st_mode) && st.st_rdev == rdev) 
-		{
-		    dma_info->st = st;
-		    dma_info->fd = open(buf, O_RDONLY
-#if defined(O_LARGEFILE)
-					| O_LARGEFILE
-#endif
-					);
-		    closedir(dir);
-		    return 0;
-		}
-	    }
-	    closedir(dir);
-	    dma_info->support_type = 1;
-	    return 1;
-	}
-    }
-    
-    return 0;
-}
-
-static int is_dma_on (int fd) {
-#ifdef HDIO_GET_DMA    
-    static long parm;
-    if (ioctl(fd, HDIO_GET_DMA, &parm))
-	return -1;
-    else 
-	return parm;
-#endif
-    return 0;
-}
-
-
-static __u64 dma_speed(int fd, int support_type) {
-    static struct hd_driveid id;
-    __u64 speed = 0;
-            
-    if (support_type != 2) 
-	return 0;
-
-#ifdef HDIO_OBSOLETE_IDENTITY
-    if (!ioctl(fd, HDIO_GET_IDENTITY, &id) || 
-	!ioctl(fd, HDIO_OBSOLETE_IDENTITY)) {
-#else
-    if (!ioctl(fd, HDIO_GET_IDENTITY, &id)) {
-#endif
-	speed |= (__u64)id.dma_1word &  ~(__u64)0xff;
-	speed |= ((__u64)id.dma_mword & ~(__u64)0xff) << 16;
-	speed |= ((__u64)id.dma_ultra & ~(__u64)0xff) << 32;
-    } else if (errno == -ENOMSG)
-	return -1;
-    else 
-	return -1;
-    
-    return speed;
-}
-
-int get_dma_info(dma_info_t *dma_info) {
-    if ((dma_info->dma = is_dma_on(dma_info->fd)) == -1)
-	return -1;
-    if ((dma_info->speed = dma_speed(dma_info->fd, dma_info->support_type)) == (__u64)-1) 
-	return -1;
-    return 0;
-}
-
-void clean_after_dma_check(int fd, dma_info_t *dma_info) {
-    signal(SIGALRM, SIG_IGN);
-    if (dma_info->fd && fd != dma_info->fd)
-	close(dma_info->fd);
-}
-
-/* Only le bitops operations are used. */
-
-inline int misc_set_bit (unsigned long long nr, void * addr) {
-    __u8 * p, mask;
-    int retval;
-
-    p = (__u8 *)addr;
-    p += nr >> 3;
-    mask = 1 << (nr & 0x7);
-    /*cli();*/
-    retval = (mask & *p) != 0;
-    *p |= mask;
-    /*sti();*/
-    return retval;
-}
-
-
-inline int misc_clear_bit (unsigned long long nr, void * addr) {
-    __u8 * p, mask;
-    int retval;
-
-    p = (__u8 *)addr;
-    p += nr >> 3;
-    mask = 1 << (nr & 0x7);
-    /*cli();*/
-    retval = (mask & *p) != 0;
-    *p &= ~mask;
-    /*sti();*/
-    return retval;
-}
-
-inline int misc_test_bit(unsigned long long nr, const void * addr) {
-    __u8 * p, mask;
-
-    p = (__u8 *)addr;
-    p += nr >> 3;
-    mask = 1 << (nr & 0x7);
-    return ((mask & *p) != 0);
-}
-
-inline unsigned long long misc_find_first_zero_bit (const void *vaddr, 
-    unsigned long long size) 
-{
-    const __u8 *p = vaddr, *addr = vaddr;
-    unsigned long long res;
-
-    if (!size)
-        return 0;
-
-    size = (size >> 3) + ((size & 0x7) > 0);
-    while (*p++ == 255) {
-        if (--size == 0)
-            return (unsigned long long)(p - addr) << 3;
-    }
-
-    --p;
-    for (res = 0; res < 8; res++)
-        if (!misc_test_bit (res, p))
-            break;
-    return res + (p - addr) * 8;
-}
-
-
-inline unsigned long long misc_find_next_zero_bit (const void *vaddr, 
-    unsigned long long size, unsigned long long offset) 
-{
-    const __u8 *addr = vaddr;
-    const __u8 *p = addr + (offset >> 3);
-    int bit = offset & 7;
-    unsigned long long res;
-
-    if (offset >= size)
-        return size;
-
-    if (bit) {
-        /* Look for zero in first char */
-        for (res = bit; res < 8; res++)
-            if (!misc_test_bit (res, p))
-                return res + (p - addr) * 8;
-        p++;
-    }
-    /* No zero yet, search remaining full bytes for a zero */
-    res = misc_find_first_zero_bit (p, size - 8 * (p - addr));
-    return res + (p - addr) * 8;
-}
-
-inline unsigned long long misc_find_first_set_bit (const void *vaddr, 
-    unsigned long long size) 
-{
-    const __u8 *p = vaddr, *addr = vaddr;
-    unsigned long long res;
-
-    if (!size)
-        return 0;
-
-    size = (size >> 3) + ((size & 0x7) > 0);
-    while (*p++ == 0) {
-        if (--size == 0)
-            return (unsigned long long)(p - addr) << 3;
-    }
-
-    --p;
-    for (res = 0; res < 8; res++)
-        if (misc_test_bit (res, p))
-            break;
-
-    return res + (p - addr) * 8;
-}
-
-inline unsigned long long misc_find_next_set_bit(const void *vaddr, 
-    unsigned long long size, unsigned long long offset)
-{
-    const __u8 *addr = vaddr;
-    const __u8 *p = addr + (offset >> 3);
-    int bit = offset & 7;
-    unsigned long long res;
-
-    if (offset >= size)
-        return size;
-
-    if (bit) {
-        /* Look for zero in first char */
-        for (res = bit; res < 8; res++)
-            if (misc_test_bit (res, p))
-                return res + (p - addr) * 8;
-        p++;
-    }
-    /* No set bit yet, search remaining full bytes for a 1 */
-    res = misc_find_first_set_bit (p, size - 8 * (p - addr));
-    return res + (p - addr) * 8;
-}
-
-#include "credits.h"
-
-/* Reads the "CREDITS" file and prints one paragraph from it. */
-void misc_print_credit(FILE *out) {
-    char *line;
-    __u32 num1, num2;
-    
-    fprintf(out, "A pair of credits:\n");
-    
-    srandom (time (0));
-    
-    num1 = random() % CREDITS_COUNT;
-    line = credits[num1];
-    fprintf(out, "%s\n", line);
-    
-    while ((num1 == (num2 = random() % CREDITS_COUNT))) {}
-    
-    line = credits[num2];
-    
-    fprintf(out, "%s\n", line);
-}
-
-int user_confirmed (FILE * fp, char * q, char * yes) {
-    char * answer = 0;
-    size_t n = 0;
-
-    fprintf (fp, "%s", q);
-    if (getline (&answer, &n, stdin) != (ssize_t)strlen (yes) || strcmp (yes, answer))
-	return 0;
-
-    return 1;
-}
diff --git a/libmisc/Makefile.am b/libmisc/Makefile.am
new file mode 100644
index 0000000..1af1535
--- /dev/null
+++ b/libmisc/Makefile.am
@@ -0,0 +1,6 @@
+noinst_LIBRARIES		= libmisc-static.a
+
+libmisc_static_a_SOURCES	= bitops.c device.c malloc.c misc.c
+libmisc_static_a_CFLAGS		= @CFLAGS@
+
+INCLUDES			= -I$(top_srcdir)/include
diff --git a/libmisc/Makefile.in b/libmisc/Makefile.in
new file mode 100644
index 0000000..9614f14
--- /dev/null
+++ b/libmisc/Makefile.in
@@ -0,0 +1,451 @@
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+SOURCES = $(libmisc_static_a_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = libmisc
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+AR = ar
+ARFLAGS = cru
+libmisc_static_a_AR = $(AR) $(ARFLAGS)
+libmisc_static_a_LIBADD =
+am_libmisc_static_a_OBJECTS = libmisc_static_a-bitops.$(OBJEXT) \
+	libmisc_static_a-device.$(OBJEXT) \
+	libmisc_static_a-malloc.$(OBJEXT) \
+	libmisc_static_a-misc.$(OBJEXT)
+libmisc_static_a_OBJECTS = $(am_libmisc_static_a_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libmisc_static_a_SOURCES)
+DIST_SOURCES = $(libmisc_static_a_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PROGS_LDFLAGS = @PROGS_LDFLAGS@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+noinst_LIBRARIES = libmisc-static.a
+libmisc_static_a_SOURCES = bitops.c device.c malloc.c misc.c
+libmisc_static_a_CFLAGS = @CFLAGS@
+INCLUDES = -I$(top_srcdir)/include
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  libmisc/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  libmisc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLIBRARIES:
+	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libmisc-static.a: $(libmisc_static_a_OBJECTS) $(libmisc_static_a_DEPENDENCIES) 
+	-rm -f libmisc-static.a
+	$(libmisc_static_a_AR) libmisc-static.a $(libmisc_static_a_OBJECTS) $(libmisc_static_a_LIBADD)
+	$(RANLIB) libmisc-static.a
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmisc_static_a-bitops.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmisc_static_a-device.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmisc_static_a-malloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmisc_static_a-misc.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+libmisc_static_a-bitops.o: bitops.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmisc_static_a_CFLAGS) $(CFLAGS) -MT libmisc_static_a-bitops.o -MD -MP -MF "$(DEPDIR)/libmisc_static_a-bitops.Tpo" -c -o libmisc_static_a-bitops.o `test -f 'bitops.c' || echo '$(srcdir)/'`bitops.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libmisc_static_a-bitops.Tpo" "$(DEPDIR)/libmisc_static_a-bitops.Po"; else rm -f "$(DEPDIR)/libmisc_static_a-bitops.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='bitops.c' object='libmisc_static_a-bitops.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmisc_static_a_CFLAGS) $(CFLAGS) -c -o libmisc_static_a-bitops.o `test -f 'bitops.c' || echo '$(srcdir)/'`bitops.c
+
+libmisc_static_a-bitops.obj: bitops.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmisc_static_a_CFLAGS) $(CFLAGS) -MT libmisc_static_a-bitops.obj -MD -MP -MF "$(DEPDIR)/libmisc_static_a-bitops.Tpo" -c -o libmisc_static_a-bitops.obj `if test -f 'bitops.c'; then $(CYGPATH_W) 'bitops.c'; else $(CYGPATH_W) '$(srcdir)/bitops.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libmisc_static_a-bitops.Tpo" "$(DEPDIR)/libmisc_static_a-bitops.Po"; else rm -f "$(DEPDIR)/libmisc_static_a-bitops.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='bitops.c' object='libmisc_static_a-bitops.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmisc_static_a_CFLAGS) $(CFLAGS) -c -o libmisc_static_a-bitops.obj `if test -f 'bitops.c'; then $(CYGPATH_W) 'bitops.c'; else $(CYGPATH_W) '$(srcdir)/bitops.c'; fi`
+
+libmisc_static_a-device.o: device.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmisc_static_a_CFLAGS) $(CFLAGS) -MT libmisc_static_a-device.o -MD -MP -MF "$(DEPDIR)/libmisc_static_a-device.Tpo" -c -o libmisc_static_a-device.o `test -f 'device.c' || echo '$(srcdir)/'`device.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libmisc_static_a-device.Tpo" "$(DEPDIR)/libmisc_static_a-device.Po"; else rm -f "$(DEPDIR)/libmisc_static_a-device.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='device.c' object='libmisc_static_a-device.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmisc_static_a_CFLAGS) $(CFLAGS) -c -o libmisc_static_a-device.o `test -f 'device.c' || echo '$(srcdir)/'`device.c
+
+libmisc_static_a-device.obj: device.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmisc_static_a_CFLAGS) $(CFLAGS) -MT libmisc_static_a-device.obj -MD -MP -MF "$(DEPDIR)/libmisc_static_a-device.Tpo" -c -o libmisc_static_a-device.obj `if test -f 'device.c'; then $(CYGPATH_W) 'device.c'; else $(CYGPATH_W) '$(srcdir)/device.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libmisc_static_a-device.Tpo" "$(DEPDIR)/libmisc_static_a-device.Po"; else rm -f "$(DEPDIR)/libmisc_static_a-device.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='device.c' object='libmisc_static_a-device.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmisc_static_a_CFLAGS) $(CFLAGS) -c -o libmisc_static_a-device.obj `if test -f 'device.c'; then $(CYGPATH_W) 'device.c'; else $(CYGPATH_W) '$(srcdir)/device.c'; fi`
+
+libmisc_static_a-malloc.o: malloc.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmisc_static_a_CFLAGS) $(CFLAGS) -MT libmisc_static_a-malloc.o -MD -MP -MF "$(DEPDIR)/libmisc_static_a-malloc.Tpo" -c -o libmisc_static_a-malloc.o `test -f 'malloc.c' || echo '$(srcdir)/'`malloc.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libmisc_static_a-malloc.Tpo" "$(DEPDIR)/libmisc_static_a-malloc.Po"; else rm -f "$(DEPDIR)/libmisc_static_a-malloc.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='malloc.c' object='libmisc_static_a-malloc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmisc_static_a_CFLAGS) $(CFLAGS) -c -o libmisc_static_a-malloc.o `test -f 'malloc.c' || echo '$(srcdir)/'`malloc.c
+
+libmisc_static_a-malloc.obj: malloc.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmisc_static_a_CFLAGS) $(CFLAGS) -MT libmisc_static_a-malloc.obj -MD -MP -MF "$(DEPDIR)/libmisc_static_a-malloc.Tpo" -c -o libmisc_static_a-malloc.obj `if test -f 'malloc.c'; then $(CYGPATH_W) 'malloc.c'; else $(CYGPATH_W) '$(srcdir)/malloc.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libmisc_static_a-malloc.Tpo" "$(DEPDIR)/libmisc_static_a-malloc.Po"; else rm -f "$(DEPDIR)/libmisc_static_a-malloc.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='malloc.c' object='libmisc_static_a-malloc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmisc_static_a_CFLAGS) $(CFLAGS) -c -o libmisc_static_a-malloc.obj `if test -f 'malloc.c'; then $(CYGPATH_W) 'malloc.c'; else $(CYGPATH_W) '$(srcdir)/malloc.c'; fi`
+
+libmisc_static_a-misc.o: misc.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmisc_static_a_CFLAGS) $(CFLAGS) -MT libmisc_static_a-misc.o -MD -MP -MF "$(DEPDIR)/libmisc_static_a-misc.Tpo" -c -o libmisc_static_a-misc.o `test -f 'misc.c' || echo '$(srcdir)/'`misc.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libmisc_static_a-misc.Tpo" "$(DEPDIR)/libmisc_static_a-misc.Po"; else rm -f "$(DEPDIR)/libmisc_static_a-misc.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='misc.c' object='libmisc_static_a-misc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmisc_static_a_CFLAGS) $(CFLAGS) -c -o libmisc_static_a-misc.o `test -f 'misc.c' || echo '$(srcdir)/'`misc.c
+
+libmisc_static_a-misc.obj: misc.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmisc_static_a_CFLAGS) $(CFLAGS) -MT libmisc_static_a-misc.obj -MD -MP -MF "$(DEPDIR)/libmisc_static_a-misc.Tpo" -c -o libmisc_static_a-misc.obj `if test -f 'misc.c'; then $(CYGPATH_W) 'misc.c'; else $(CYGPATH_W) '$(srcdir)/misc.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libmisc_static_a-misc.Tpo" "$(DEPDIR)/libmisc_static_a-misc.Po"; else rm -f "$(DEPDIR)/libmisc_static_a-misc.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='misc.c' object='libmisc_static_a-misc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmisc_static_a_CFLAGS) $(CFLAGS) -c -o libmisc_static_a-misc.obj `if test -f 'misc.c'; then $(CYGPATH_W) 'misc.c'; else $(CYGPATH_W) '$(srcdir)/misc.c'; fi`
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-noinstLIBRARIES ctags distclean distclean-compile \
+	distclean-generic distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-man install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libmisc/bitops.c b/libmisc/bitops.c
new file mode 100644
index 0000000..d70a73b
--- /dev/null
+++ b/libmisc/bitops.c
@@ -0,0 +1,181 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "misc/bitops.h"
+#include "misc/types.h"
+
+/* Only le bitops operations are used. */
+inline int misc_set_bit (unsigned long long nr, void * addr) {
+    __u8 * p, mask;
+    int retval;
+
+    p = (__u8 *)addr;
+    p += nr >> 3;
+    mask = 1 << (nr & 0x7);
+    /*cli();*/
+    retval = (mask & *p) != 0;
+    *p |= mask;
+    /*sti();*/
+    return retval;
+}
+
+
+inline int misc_clear_bit (unsigned long long nr, void * addr) {
+    __u8 * p, mask;
+    int retval;
+
+    p = (__u8 *)addr;
+    p += nr >> 3;
+    mask = 1 << (nr & 0x7);
+    /*cli();*/
+    retval = (mask & *p) != 0;
+    *p &= ~mask;
+    /*sti();*/
+    return retval;
+}
+
+inline int misc_test_bit(unsigned long long nr, const void * addr) {
+    __u8 * p, mask;
+
+    p = (__u8 *)addr;
+    p += nr >> 3;
+    mask = 1 << (nr & 0x7);
+    return ((mask & *p) != 0);
+}
+
+inline unsigned long long misc_find_first_zero_bit (const void *vaddr, 
+    unsigned long long size) 
+{
+    const __u8 *p = vaddr, *addr = vaddr;
+    unsigned long long res;
+
+    if (!size)
+        return 0;
+
+    size = (size >> 3) + ((size & 0x7) > 0);
+    while (*p++ == 255) {
+        if (--size == 0)
+            return (unsigned long long)(p - addr) << 3;
+    }
+
+    --p;
+    for (res = 0; res < 8; res++)
+        if (!misc_test_bit (res, p))
+            break;
+    return res + (p - addr) * 8;
+}
+
+
+inline unsigned long long misc_find_next_zero_bit (const void *vaddr, 
+    unsigned long long size, unsigned long long offset) 
+{
+    const __u8 *addr = vaddr;
+    const __u8 *p = addr + (offset >> 3);
+    int bit = offset & 7;
+    unsigned long long res;
+
+    if (offset >= size)
+        return size;
+
+    if (bit) {
+        /* Look for zero in first char */
+        for (res = bit; res < 8; res++)
+            if (!misc_test_bit (res, p))
+                return res + (p - addr) * 8;
+        p++;
+    }
+    /* No zero yet, search remaining full bytes for a zero */
+    res = misc_find_first_zero_bit (p, size - 8 * (p - addr));
+    return res + (p - addr) * 8;
+}
+
+inline unsigned long long misc_find_first_set_bit (const void *vaddr, 
+    unsigned long long size) 
+{
+    const __u8 *p = vaddr, *addr = vaddr;
+    unsigned long long res;
+
+    if (!size)
+        return 0;
+
+    size = (size >> 3) + ((size & 0x7) > 0);
+    while (*p++ == 0) {
+        if (--size == 0)
+            return (unsigned long long)(p - addr) << 3;
+    }
+
+    --p;
+    for (res = 0; res < 8; res++)
+        if (misc_test_bit (res, p))
+            break;
+
+    return res + (p - addr) * 8;
+}
+
+inline unsigned long long misc_find_next_set_bit(const void *vaddr, 
+    unsigned long long size, unsigned long long offset)
+{
+    const __u8 *addr = vaddr;
+    const __u8 *p = addr + (offset >> 3);
+    int bit = offset & 7;
+    unsigned long long res;
+
+    if (offset >= size)
+        return size;
+
+    if (bit) {
+        /* Look for zero in first char */
+        for (res = bit; res < 8; res++)
+            if (misc_test_bit (res, p))
+                return res + (p - addr) * 8;
+        p++;
+    }
+    /* No set bit yet, search remaining full bytes for a 1 */
+    res = misc_find_first_set_bit (p, size - 8 * (p - addr));
+    return res + (p - addr) * 8;
+}
+
+/* there are masks for certain bits  */
+__u16 mask16 (int from, int count)
+{
+    __u16 mask;
+
+
+    mask = (0xffff >> from);
+    mask <<= from;
+    mask <<= (16 - from - count);
+    mask >>= (16 - from - count);
+    return mask;
+}
+
+
+__u32 mask32 (int from, int count)
+{
+    __u32 mask;
+
+
+    mask = (0xffffffff >> from);
+    mask <<= from;
+    mask <<= (32 - from - count);
+    mask >>= (32 - from - count);
+    return mask;
+}
+
+
+__u64 mask64 (int from, int count)
+{
+    __u64 mask;
+
+
+    mask = (0xffffffffffffffffLL >> from);
+    mask <<= from;
+    mask <<= (64 - from - count);
+    mask >>= (64 - from - count);
+    return mask;
+}
diff --git a/libmisc/device.c b/libmisc/device.c
new file mode 100644
index 0000000..0b37fb8
--- /dev/null
+++ b/libmisc/device.c
@@ -0,0 +1,145 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "misc/device.h"
+#include "misc/misc.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mount.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+
+#define MISC_DEVICE_STAT(Field, Type)					\
+Type misc_device_##Field(char *device) {				\
+	struct stat st;							\
+									\
+	if (stat(device, &st) == 0)					\
+		return st.st_##Field;					\
+									\
+	fprintf(stderr, "Stat of the device '%s' failed.\n", device);	\
+	return (Type)-1;						\
+}
+
+MISC_DEVICE_STAT(mode, mode_t);
+MISC_DEVICE_STAT(rdev, dev_t);
+
+int misc_device_valid_offset(int fd, long long int offset) {
+    long long int res;
+    char ch;
+
+    /*res = reiserfs_llseek (fd, offset, 0);*/
+    res = lseek (fd, (off_t)offset, SEEK_SET);
+    if (res < 0)
+	return 0;
+
+    /* if (read (fd, &ch, 1) < 0) does not wirk on files */
+    if (read (fd, &ch, 1) < 1)
+	return 0;
+
+
+    return 1;
+}
+
+/* To not have problem with last sectors on the block device when switching 
+   to smaller one. */
+#define MAX_BS (64 * 1024)
+
+/* calculates number of blocks in a file. Returns 0 for "sparse"
+   regular files and files other than regular files and block devices */
+unsigned long misc_device_count_blocks (char * filename, int blocksize)
+{
+    long long int high, low;
+    int fd;
+
+    fd = open (filename, O_RDONLY);
+    if (fd == -1) {
+	fprintf(stderr, "Failed to open '%s': %s.\n", filename, strerror(errno));
+	return 0;
+    }
+
+    if (!S_ISBLK(misc_device_mode(filename)) && 
+	!S_ISREG(misc_device_mode(filename))) 
+    {
+	close(fd);
+	return 0;
+    }
+
+#ifdef BLKGETSIZE64
+    {
+	unsigned long long size;
+	unsigned long sz;
+	
+	if (ioctl (fd, BLKGETSIZE64, &size) >= 0) {
+	    size = (size / MAX_BS) * MAX_BS / blocksize;
+	    sz = size;
+	    if ((unsigned long long)sz != size)
+		    misc_die ("misc_device_count_blocks: block device too large");
+
+	    close(fd);
+	    return sz;
+	}
+    }
+#endif
+
+
+#ifdef BLKGETSIZE
+    {
+	unsigned long long size;
+	unsigned long sz;
+	
+	if (ioctl (fd, BLKGETSIZE, &sz) >= 0) {
+	    size = sz;
+
+	    close(fd);
+	    return (size * 512 / MAX_BS) * MAX_BS / blocksize;
+	}
+    }
+#endif
+
+    low = 0;
+    for( high = 1; misc_device_valid_offset (fd, high); high *= 2 )
+	low = high;
+    while (low < high - 1) {
+	const long long int mid = ( low + high ) / 2;
+
+	if (misc_device_valid_offset (fd, mid))
+	    low = mid;
+	else
+	    high = mid;
+    }
+    
+    misc_device_valid_offset (fd, 0);
+
+    close (fd);
+    return (low + 1) * MAX_BS / MAX_BS / blocksize;
+}
+
+char misc_device_typec (unsigned short mode)
+{
+    if (S_ISBLK ((mode_t)mode))
+	return 'b';
+    if (S_ISCHR (mode))
+	return 'c';
+    if (S_ISDIR (mode))
+	return 'd';
+    if (S_ISREG (mode))
+	return '-';
+    if (S_ISFIFO (mode))
+	return 'p';
+    if (S_ISLNK (mode))
+	return 'l';
+    if (S_ISSOCK (mode))
+	return 's';
+    return '?';
+}
+
diff --git a/libmisc/malloc.c b/libmisc/malloc.c
new file mode 100644
index 0000000..8ed3679
--- /dev/null
+++ b/libmisc/malloc.c
@@ -0,0 +1,132 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "misc/malloc.h"
+#include "misc/misc.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+#define MEM_BEGIN "_mem_begin_"
+#define MEM_END "mem_end"
+#define MEM_FREED "__free_"
+#define CONTROL_SIZE (strlen (MEM_BEGIN) + 1 + sizeof (int) + strlen (MEM_END) + 1)
+
+
+unsigned int misc_memsize(char *p) {
+    char *begin;
+    
+    begin = p - strlen (MEM_BEGIN) - 1 - sizeof(int);
+    return *(int *)(begin + strlen (MEM_BEGIN) + 1);
+}
+
+
+void misc_checkmem (char * p, int size)
+{
+    char * begin;
+    char * end;
+  
+    begin = p - strlen (MEM_BEGIN) - 1 - sizeof (int);
+    if (strcmp (begin, MEM_BEGIN))
+	misc_die ("misc_checkmem: memory corrupted - invalid head sign");
+
+    if (*(int *)(begin + strlen (MEM_BEGIN) + 1) != size)
+	misc_die ("misc_checkmem: memory corrupted - invalid size");
+
+    end = begin + size + CONTROL_SIZE - strlen (MEM_END) - 1;
+    if (strcmp (end, MEM_END))
+	misc_die ("misc_checkmem: memory corrupted - invalid end sign");
+}
+
+
+void *misc_getmem (int size)
+{
+    char * mem;
+
+    if ((mem = misc_malloc(size)) == NULL)
+	misc_die ("misc_getmem: no more memory (%d)", size);
+    
+    memset (mem, 0, size);
+//    misc_checkmem (mem, size);
+
+    return mem;
+}
+
+void *misc_malloc(int size) {
+    char * p;
+    char * mem;
+
+    p = (char *)malloc (CONTROL_SIZE + size);
+    if (!p)
+	misc_die ("misc_getmem: no more memory (%d)", size);
+
+    /* Write the MEM_BEGIN magic in the beginning of allocated memory. */
+    strcpy (p, MEM_BEGIN);
+    p += strlen (MEM_BEGIN) + 1;
+    /* Write the size after the magic. */
+    *(int *)p = size;
+    p += sizeof (int);
+    mem = p;
+    p += size;
+    strcpy (p, MEM_END);
+
+    return mem;
+}
+
+void * misc_expandmem (void * vp, int size, int by)
+{
+    int allocated;
+    char * mem, * p = vp;
+    int expand_by = by;
+
+    if (p) {
+	misc_checkmem (p, size);
+	allocated = CONTROL_SIZE + size;
+	p -= (strlen (MEM_BEGIN) + 1 + sizeof (int));
+    } else {
+	allocated = 0;
+	/* add control bytes to the new allocated area */
+	expand_by += CONTROL_SIZE;
+    }
+    p = realloc (p, allocated + expand_by);
+    if (!p)
+	misc_die ("misc_expandmem: no more memory (%d)", size);
+    if (!vp) {
+	strcpy (p, MEM_BEGIN);
+    }
+    mem = p + strlen (MEM_BEGIN) + 1 + sizeof (int);
+
+    *(int *)(p + strlen (MEM_BEGIN) + 1) = size + by;
+    /* fill new allocated area by 0s */
+    if(by > 0)
+        memset (mem + size, 0, by);
+    strcpy (mem + size + by, MEM_END);
+//    misc_checkmem (mem, size + by);
+
+    return mem;
+}
+
+
+void misc_freemem (void * vp)
+{
+    char * p = vp;
+    int size;
+  
+    if (!p)
+	return;
+    size = misc_memsize (vp);
+    misc_checkmem (p, size);
+
+    p -= (strlen (MEM_BEGIN) + 1 + sizeof (int));
+    strcpy (p, MEM_FREED);
+    strcpy (p + size + CONTROL_SIZE - strlen (MEM_END) - 1, MEM_FREED);
+    free (p);
+}
+
+
diff --git a/libmisc/misc.c b/libmisc/misc.c
new file mode 100644
index 0000000..b5f50d3
--- /dev/null
+++ b/libmisc/misc.c
@@ -0,0 +1,200 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "misc/malloc.h"
+#include "misc/misc.h"
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <time.h>
+#include <dirent.h>
+#include <sys/stat.h>
+#include <string.h>
+
+void misc_die (char * fmt, ...)
+{
+    static char buf[4096];
+    va_list args;
+
+    va_start (args, fmt);
+    vsprintf (buf, fmt, args);
+    va_end (args);
+
+    fprintf (stderr, "\n%s\n", buf);
+    abort ();
+}
+
+
+__u32 misc_random (void)
+{
+    srandom (time (0));
+    return random ();
+}
+
+/* this implements binary search in the array 'base' among 'num' elements each
+   of those is 'width' bytes long. 'comp_func' is used to compare keys */
+int misc_bin_search (const void * key, void * base, __u32 num, int width,
+		     int * ppos, misc_comp_func_t comp_func)
+{
+    __u32 rbound, lbound, j;
+    int ret;
+
+    if (num == 0 || base == NULL) {
+	/* objectid map may be 0 elements long */
+	*ppos = 0;
+	return 0;
+    }
+
+    lbound = 0;
+    rbound = num - 1;
+
+    for (j = (rbound + lbound) / 2; lbound <= rbound; j = (rbound + lbound) / 2) {
+	ret =  comp_func ((void *)((char *)base + j * width), key ) ;
+	if (ret < 0) { /* second is greater */
+	    lbound = j + 1;
+	    continue;
+
+	} else if (ret > 0) { /* first is greater */
+	    if (j == 0)
+	    	break;
+	    rbound = j - 1;
+	    continue;
+	} else { /* equal */
+	    *ppos = j;
+	    return 1;
+	}
+    }
+
+    *ppos = lbound;
+    return 0;
+}
+
+
+#define BLOCKLIST__ELEMENT_NUMBER 10
+
+/*element is block number and device*/
+int blockdev_list_compare (const void * block1, const void * block2) {
+    if (*(__u32 *)block1 < *(__u32 *)block2)
+        return -1;
+    if (*(__u32 *)block1 > *(__u32 *)block2)
+        return 1;
+        
+    if (*((__u32 *)block1 + 1) < *((__u32 *)block2 + 1))
+        return -1;        
+    if (*((__u32 *)block1 + 1) > *((__u32 *)block2 + 1))
+        return 1;
+        
+    return 0;
+}
+
+void blocklist__insert_in_position (void *elem, void **base, __u32 *count, 
+    int elem_size, int *position) 
+{
+    if (elem_size == 0)
+    	return;
+    	
+    if (*base == NULL)
+        *base = misc_getmem (BLOCKLIST__ELEMENT_NUMBER * elem_size);
+    
+    if (*count == misc_memsize((void *)*base) / elem_size)
+        *base = misc_expandmem (*base, misc_memsize((void *)*base), 
+                        BLOCKLIST__ELEMENT_NUMBER * elem_size);
+    
+    if (*position < *count) {
+        memmove (*base + (*position + 1), 
+                 *base + (*position),
+                 (*count - *position) * elem_size);
+    }
+
+    memcpy (*base + (char) *position * elem_size, elem, elem_size);
+    *count+=1;
+}
+
+int misc_device_rdev_match(char *path, void *data) {
+    dev_t *rdev = (dev_t *)data;
+    struct stat st;
+
+    /* If stat fails just continue walking. */
+    if (stat(path, &st))
+	return 0;
+
+    /* Only block files are interesting. */
+    if (!S_ISBLK(st.st_mode))
+	return 0;
+
+    /* Matched rdev wanted. */
+    if (st.st_rdev != *rdev)
+	return 0;
+
+    /* Stop walking. */
+    return 1;
+}
+
+
+/* The method walks through all subtree of the path, 
+   open all directories and walk through them recursevely.
+
+   Return values:
+   positive: stop walking;
+   negative: error occured.
+ */
+int misc_dir_walk(char *path, dir_walk_func_t func, void *data) {
+	struct dirent *dirent;
+	struct stat st;
+	off_t pos;
+	DIR *dir;
+	int len;
+	int res;
+
+	strcat(path, "/");
+
+	if (!(dir = opendir(path)))
+		return 0;
+	
+	len = strlen(path);
+	
+	while ((dirent = readdir(dir)) != NULL) {
+		path[len] = 0;
+
+		if (strcmp(dirent->d_name, ".") == 0 || 
+		    strcmp(dirent->d_name, "..") == 0)
+		{
+			continue;
+		}
+
+		strcat(path, dirent->d_name);
+
+		if ((res = func(path, data))) {
+			closedir(dir);
+			return res;
+		}
+
+		if (stat(path, &st) != 0)
+			continue;
+
+		if ((S_ISDIR(st.st_mode))) {
+			pos = telldir(dir);
+			closedir(dir);
+			
+			if ((res = misc_dir_walk(path, func, data)))
+				return res;
+
+			path[len] = 0;
+			if (!(dir = opendir(path)))
+				return -1;
+
+			seekdir(dir, pos);
+		}
+	}
+
+	closedir(dir);
+	return 0;
+}
+
diff --git a/libreiserfs/Makefile.am b/libreiserfs/Makefile.am
new file mode 100644
index 0000000..1db9362
--- /dev/null
+++ b/libreiserfs/Makefile.am
@@ -0,0 +1,22 @@
+libreiserfs_sources		= badblock.c    fix_node.c     leaf.c               stat.c	 \
+				  bitmap.c      hash.c         leaf_balance.c       buffer.c     \
+				  internal.c    libreiserfs.c  internal_balance.c   super.c	 \
+				  direntry.c    node.c         tree.c	            extent.c	 \
+				  journal.c     objmap.c       tree_balance.c       filesystem.c \
+				  key.c         prints.c
+
+#lib_LIBRARIES			= libreiserfs.la
+noinst_LIBRARIES		= libreiserfs-static.a
+
+#libreiserfs_la_LIBADD		= $(top_builddir)/libmisc/libmisc-static.la
+#libreiserfs_la_SOURCES		= $(libreiserfs_sources)
+# libreiserfs_la_LDFLAGS	= -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+#				  -release $(LT_RELEASE)
+#libreiserfs_la_CFLAGS		= @CFLAGS@
+
+libreiserfs_static_a_LIBADD	= $(top_builddir)/libmisc/libmisc-static.a 
+libreiserfs_static_a_SOURCES	= $(libreiserfs_sources)
+#libreiserfs_static_a_LDFLAGS	= -static
+libreiserfs_static_a_CFLAGS	= @CFLAGS@
+
+INCLUDES			= -I$(top_srcdir)/include
diff --git a/libreiserfs/Makefile.in b/libreiserfs/Makefile.in
new file mode 100644
index 0000000..eb6b189
--- /dev/null
+++ b/libreiserfs/Makefile.in
@@ -0,0 +1,758 @@
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+SOURCES = $(libreiserfs_static_a_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = libreiserfs
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+AR = ar
+ARFLAGS = cru
+libreiserfs_static_a_AR = $(AR) $(ARFLAGS)
+libreiserfs_static_a_DEPENDENCIES =  \
+	$(top_builddir)/libmisc/libmisc-static.a
+am__objects_1 = libreiserfs_static_a-badblock.$(OBJEXT) \
+	libreiserfs_static_a-fix_node.$(OBJEXT) \
+	libreiserfs_static_a-leaf.$(OBJEXT) \
+	libreiserfs_static_a-stat.$(OBJEXT) \
+	libreiserfs_static_a-bitmap.$(OBJEXT) \
+	libreiserfs_static_a-hash.$(OBJEXT) \
+	libreiserfs_static_a-leaf_balance.$(OBJEXT) \
+	libreiserfs_static_a-buffer.$(OBJEXT) \
+	libreiserfs_static_a-internal.$(OBJEXT) \
+	libreiserfs_static_a-libreiserfs.$(OBJEXT) \
+	libreiserfs_static_a-internal_balance.$(OBJEXT) \
+	libreiserfs_static_a-super.$(OBJEXT) \
+	libreiserfs_static_a-direntry.$(OBJEXT) \
+	libreiserfs_static_a-node.$(OBJEXT) \
+	libreiserfs_static_a-tree.$(OBJEXT) \
+	libreiserfs_static_a-extent.$(OBJEXT) \
+	libreiserfs_static_a-journal.$(OBJEXT) \
+	libreiserfs_static_a-objmap.$(OBJEXT) \
+	libreiserfs_static_a-tree_balance.$(OBJEXT) \
+	libreiserfs_static_a-filesystem.$(OBJEXT) \
+	libreiserfs_static_a-key.$(OBJEXT) \
+	libreiserfs_static_a-prints.$(OBJEXT)
+am_libreiserfs_static_a_OBJECTS = $(am__objects_1)
+libreiserfs_static_a_OBJECTS = $(am_libreiserfs_static_a_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libreiserfs_static_a_SOURCES)
+DIST_SOURCES = $(libreiserfs_static_a_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PROGS_LDFLAGS = @PROGS_LDFLAGS@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+libreiserfs_sources = badblock.c    fix_node.c     leaf.c               stat.c	 \
+				  bitmap.c      hash.c         leaf_balance.c       buffer.c     \
+				  internal.c    libreiserfs.c  internal_balance.c   super.c	 \
+				  direntry.c    node.c         tree.c	            extent.c	 \
+				  journal.c     objmap.c       tree_balance.c       filesystem.c \
+				  key.c         prints.c
+
+
+#lib_LIBRARIES			= libreiserfs.la
+noinst_LIBRARIES = libreiserfs-static.a
+
+#libreiserfs_la_LIBADD		= $(top_builddir)/libmisc/libmisc-static.la
+#libreiserfs_la_SOURCES		= $(libreiserfs_sources)
+# libreiserfs_la_LDFLAGS	= -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+#				  -release $(LT_RELEASE)
+#libreiserfs_la_CFLAGS		= @CFLAGS@
+libreiserfs_static_a_LIBADD = $(top_builddir)/libmisc/libmisc-static.a 
+libreiserfs_static_a_SOURCES = $(libreiserfs_sources)
+#libreiserfs_static_a_LDFLAGS	= -static
+libreiserfs_static_a_CFLAGS = @CFLAGS@
+INCLUDES = -I$(top_srcdir)/include
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  libreiserfs/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  libreiserfs/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLIBRARIES:
+	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libreiserfs-static.a: $(libreiserfs_static_a_OBJECTS) $(libreiserfs_static_a_DEPENDENCIES) 
+	-rm -f libreiserfs-static.a
+	$(libreiserfs_static_a_AR) libreiserfs-static.a $(libreiserfs_static_a_OBJECTS) $(libreiserfs_static_a_LIBADD)
+	$(RANLIB) libreiserfs-static.a
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-badblock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-bitmap.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-buffer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-direntry.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-extent.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-filesystem.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-fix_node.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-hash.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-internal.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-internal_balance.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-journal.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-key.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-leaf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-leaf_balance.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-libreiserfs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-node.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-objmap.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-prints.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-stat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-super.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-tree.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libreiserfs_static_a-tree_balance.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+libreiserfs_static_a-badblock.o: badblock.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-badblock.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-badblock.Tpo" -c -o libreiserfs_static_a-badblock.o `test -f 'badblock.c' || echo '$(srcdir)/'`badblock.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-badblock.Tpo" "$(DEPDIR)/libreiserfs_static_a-badblock.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-badblock.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='badblock.c' object='libreiserfs_static_a-badblock.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-badblock.o `test -f 'badblock.c' || echo '$(srcdir)/'`badblock.c
+
+libreiserfs_static_a-badblock.obj: badblock.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-badblock.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-badblock.Tpo" -c -o libreiserfs_static_a-badblock.obj `if test -f 'badblock.c'; then $(CYGPATH_W) 'badblock.c'; else $(CYGPATH_W) '$(srcdir)/badblock.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-badblock.Tpo" "$(DEPDIR)/libreiserfs_static_a-badblock.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-badblock.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='badblock.c' object='libreiserfs_static_a-badblock.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-badblock.obj `if test -f 'badblock.c'; then $(CYGPATH_W) 'badblock.c'; else $(CYGPATH_W) '$(srcdir)/badblock.c'; fi`
+
+libreiserfs_static_a-fix_node.o: fix_node.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-fix_node.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-fix_node.Tpo" -c -o libreiserfs_static_a-fix_node.o `test -f 'fix_node.c' || echo '$(srcdir)/'`fix_node.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-fix_node.Tpo" "$(DEPDIR)/libreiserfs_static_a-fix_node.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-fix_node.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fix_node.c' object='libreiserfs_static_a-fix_node.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-fix_node.o `test -f 'fix_node.c' || echo '$(srcdir)/'`fix_node.c
+
+libreiserfs_static_a-fix_node.obj: fix_node.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-fix_node.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-fix_node.Tpo" -c -o libreiserfs_static_a-fix_node.obj `if test -f 'fix_node.c'; then $(CYGPATH_W) 'fix_node.c'; else $(CYGPATH_W) '$(srcdir)/fix_node.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-fix_node.Tpo" "$(DEPDIR)/libreiserfs_static_a-fix_node.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-fix_node.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fix_node.c' object='libreiserfs_static_a-fix_node.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-fix_node.obj `if test -f 'fix_node.c'; then $(CYGPATH_W) 'fix_node.c'; else $(CYGPATH_W) '$(srcdir)/fix_node.c'; fi`
+
+libreiserfs_static_a-leaf.o: leaf.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-leaf.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-leaf.Tpo" -c -o libreiserfs_static_a-leaf.o `test -f 'leaf.c' || echo '$(srcdir)/'`leaf.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-leaf.Tpo" "$(DEPDIR)/libreiserfs_static_a-leaf.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-leaf.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='leaf.c' object='libreiserfs_static_a-leaf.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-leaf.o `test -f 'leaf.c' || echo '$(srcdir)/'`leaf.c
+
+libreiserfs_static_a-leaf.obj: leaf.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-leaf.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-leaf.Tpo" -c -o libreiserfs_static_a-leaf.obj `if test -f 'leaf.c'; then $(CYGPATH_W) 'leaf.c'; else $(CYGPATH_W) '$(srcdir)/leaf.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-leaf.Tpo" "$(DEPDIR)/libreiserfs_static_a-leaf.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-leaf.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='leaf.c' object='libreiserfs_static_a-leaf.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-leaf.obj `if test -f 'leaf.c'; then $(CYGPATH_W) 'leaf.c'; else $(CYGPATH_W) '$(srcdir)/leaf.c'; fi`
+
+libreiserfs_static_a-stat.o: stat.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-stat.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-stat.Tpo" -c -o libreiserfs_static_a-stat.o `test -f 'stat.c' || echo '$(srcdir)/'`stat.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-stat.Tpo" "$(DEPDIR)/libreiserfs_static_a-stat.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-stat.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='stat.c' object='libreiserfs_static_a-stat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-stat.o `test -f 'stat.c' || echo '$(srcdir)/'`stat.c
+
+libreiserfs_static_a-stat.obj: stat.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-stat.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-stat.Tpo" -c -o libreiserfs_static_a-stat.obj `if test -f 'stat.c'; then $(CYGPATH_W) 'stat.c'; else $(CYGPATH_W) '$(srcdir)/stat.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-stat.Tpo" "$(DEPDIR)/libreiserfs_static_a-stat.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-stat.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='stat.c' object='libreiserfs_static_a-stat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-stat.obj `if test -f 'stat.c'; then $(CYGPATH_W) 'stat.c'; else $(CYGPATH_W) '$(srcdir)/stat.c'; fi`
+
+libreiserfs_static_a-bitmap.o: bitmap.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-bitmap.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-bitmap.Tpo" -c -o libreiserfs_static_a-bitmap.o `test -f 'bitmap.c' || echo '$(srcdir)/'`bitmap.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-bitmap.Tpo" "$(DEPDIR)/libreiserfs_static_a-bitmap.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-bitmap.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='bitmap.c' object='libreiserfs_static_a-bitmap.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-bitmap.o `test -f 'bitmap.c' || echo '$(srcdir)/'`bitmap.c
+
+libreiserfs_static_a-bitmap.obj: bitmap.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-bitmap.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-bitmap.Tpo" -c -o libreiserfs_static_a-bitmap.obj `if test -f 'bitmap.c'; then $(CYGPATH_W) 'bitmap.c'; else $(CYGPATH_W) '$(srcdir)/bitmap.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-bitmap.Tpo" "$(DEPDIR)/libreiserfs_static_a-bitmap.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-bitmap.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='bitmap.c' object='libreiserfs_static_a-bitmap.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-bitmap.obj `if test -f 'bitmap.c'; then $(CYGPATH_W) 'bitmap.c'; else $(CYGPATH_W) '$(srcdir)/bitmap.c'; fi`
+
+libreiserfs_static_a-hash.o: hash.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-hash.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-hash.Tpo" -c -o libreiserfs_static_a-hash.o `test -f 'hash.c' || echo '$(srcdir)/'`hash.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-hash.Tpo" "$(DEPDIR)/libreiserfs_static_a-hash.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-hash.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='hash.c' object='libreiserfs_static_a-hash.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-hash.o `test -f 'hash.c' || echo '$(srcdir)/'`hash.c
+
+libreiserfs_static_a-hash.obj: hash.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-hash.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-hash.Tpo" -c -o libreiserfs_static_a-hash.obj `if test -f 'hash.c'; then $(CYGPATH_W) 'hash.c'; else $(CYGPATH_W) '$(srcdir)/hash.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-hash.Tpo" "$(DEPDIR)/libreiserfs_static_a-hash.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-hash.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='hash.c' object='libreiserfs_static_a-hash.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-hash.obj `if test -f 'hash.c'; then $(CYGPATH_W) 'hash.c'; else $(CYGPATH_W) '$(srcdir)/hash.c'; fi`
+
+libreiserfs_static_a-leaf_balance.o: leaf_balance.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-leaf_balance.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-leaf_balance.Tpo" -c -o libreiserfs_static_a-leaf_balance.o `test -f 'leaf_balance.c' || echo '$(srcdir)/'`leaf_balance.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-leaf_balance.Tpo" "$(DEPDIR)/libreiserfs_static_a-leaf_balance.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-leaf_balance.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='leaf_balance.c' object='libreiserfs_static_a-leaf_balance.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-leaf_balance.o `test -f 'leaf_balance.c' || echo '$(srcdir)/'`leaf_balance.c
+
+libreiserfs_static_a-leaf_balance.obj: leaf_balance.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-leaf_balance.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-leaf_balance.Tpo" -c -o libreiserfs_static_a-leaf_balance.obj `if test -f 'leaf_balance.c'; then $(CYGPATH_W) 'leaf_balance.c'; else $(CYGPATH_W) '$(srcdir)/leaf_balance.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-leaf_balance.Tpo" "$(DEPDIR)/libreiserfs_static_a-leaf_balance.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-leaf_balance.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='leaf_balance.c' object='libreiserfs_static_a-leaf_balance.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-leaf_balance.obj `if test -f 'leaf_balance.c'; then $(CYGPATH_W) 'leaf_balance.c'; else $(CYGPATH_W) '$(srcdir)/leaf_balance.c'; fi`
+
+libreiserfs_static_a-buffer.o: buffer.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-buffer.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-buffer.Tpo" -c -o libreiserfs_static_a-buffer.o `test -f 'buffer.c' || echo '$(srcdir)/'`buffer.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-buffer.Tpo" "$(DEPDIR)/libreiserfs_static_a-buffer.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-buffer.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='buffer.c' object='libreiserfs_static_a-buffer.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-buffer.o `test -f 'buffer.c' || echo '$(srcdir)/'`buffer.c
+
+libreiserfs_static_a-buffer.obj: buffer.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-buffer.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-buffer.Tpo" -c -o libreiserfs_static_a-buffer.obj `if test -f 'buffer.c'; then $(CYGPATH_W) 'buffer.c'; else $(CYGPATH_W) '$(srcdir)/buffer.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-buffer.Tpo" "$(DEPDIR)/libreiserfs_static_a-buffer.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-buffer.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='buffer.c' object='libreiserfs_static_a-buffer.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-buffer.obj `if test -f 'buffer.c'; then $(CYGPATH_W) 'buffer.c'; else $(CYGPATH_W) '$(srcdir)/buffer.c'; fi`
+
+libreiserfs_static_a-internal.o: internal.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-internal.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-internal.Tpo" -c -o libreiserfs_static_a-internal.o `test -f 'internal.c' || echo '$(srcdir)/'`internal.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-internal.Tpo" "$(DEPDIR)/libreiserfs_static_a-internal.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-internal.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='internal.c' object='libreiserfs_static_a-internal.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-internal.o `test -f 'internal.c' || echo '$(srcdir)/'`internal.c
+
+libreiserfs_static_a-internal.obj: internal.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-internal.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-internal.Tpo" -c -o libreiserfs_static_a-internal.obj `if test -f 'internal.c'; then $(CYGPATH_W) 'internal.c'; else $(CYGPATH_W) '$(srcdir)/internal.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-internal.Tpo" "$(DEPDIR)/libreiserfs_static_a-internal.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-internal.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='internal.c' object='libreiserfs_static_a-internal.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-internal.obj `if test -f 'internal.c'; then $(CYGPATH_W) 'internal.c'; else $(CYGPATH_W) '$(srcdir)/internal.c'; fi`
+
+libreiserfs_static_a-libreiserfs.o: libreiserfs.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-libreiserfs.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-libreiserfs.Tpo" -c -o libreiserfs_static_a-libreiserfs.o `test -f 'libreiserfs.c' || echo '$(srcdir)/'`libreiserfs.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-libreiserfs.Tpo" "$(DEPDIR)/libreiserfs_static_a-libreiserfs.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-libreiserfs.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libreiserfs.c' object='libreiserfs_static_a-libreiserfs.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-libreiserfs.o `test -f 'libreiserfs.c' || echo '$(srcdir)/'`libreiserfs.c
+
+libreiserfs_static_a-libreiserfs.obj: libreiserfs.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-libreiserfs.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-libreiserfs.Tpo" -c -o libreiserfs_static_a-libreiserfs.obj `if test -f 'libreiserfs.c'; then $(CYGPATH_W) 'libreiserfs.c'; else $(CYGPATH_W) '$(srcdir)/libreiserfs.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-libreiserfs.Tpo" "$(DEPDIR)/libreiserfs_static_a-libreiserfs.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-libreiserfs.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libreiserfs.c' object='libreiserfs_static_a-libreiserfs.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-libreiserfs.obj `if test -f 'libreiserfs.c'; then $(CYGPATH_W) 'libreiserfs.c'; else $(CYGPATH_W) '$(srcdir)/libreiserfs.c'; fi`
+
+libreiserfs_static_a-internal_balance.o: internal_balance.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-internal_balance.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-internal_balance.Tpo" -c -o libreiserfs_static_a-internal_balance.o `test -f 'internal_balance.c' || echo '$(srcdir)/'`internal_balance.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-internal_balance.Tpo" "$(DEPDIR)/libreiserfs_static_a-internal_balance.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-internal_balance.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='internal_balance.c' object='libreiserfs_static_a-internal_balance.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-internal_balance.o `test -f 'internal_balance.c' || echo '$(srcdir)/'`internal_balance.c
+
+libreiserfs_static_a-internal_balance.obj: internal_balance.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-internal_balance.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-internal_balance.Tpo" -c -o libreiserfs_static_a-internal_balance.obj `if test -f 'internal_balance.c'; then $(CYGPATH_W) 'internal_balance.c'; else $(CYGPATH_W) '$(srcdir)/internal_balance.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-internal_balance.Tpo" "$(DEPDIR)/libreiserfs_static_a-internal_balance.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-internal_balance.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='internal_balance.c' object='libreiserfs_static_a-internal_balance.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-internal_balance.obj `if test -f 'internal_balance.c'; then $(CYGPATH_W) 'internal_balance.c'; else $(CYGPATH_W) '$(srcdir)/internal_balance.c'; fi`
+
+libreiserfs_static_a-super.o: super.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-super.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-super.Tpo" -c -o libreiserfs_static_a-super.o `test -f 'super.c' || echo '$(srcdir)/'`super.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-super.Tpo" "$(DEPDIR)/libreiserfs_static_a-super.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-super.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='super.c' object='libreiserfs_static_a-super.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-super.o `test -f 'super.c' || echo '$(srcdir)/'`super.c
+
+libreiserfs_static_a-super.obj: super.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-super.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-super.Tpo" -c -o libreiserfs_static_a-super.obj `if test -f 'super.c'; then $(CYGPATH_W) 'super.c'; else $(CYGPATH_W) '$(srcdir)/super.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-super.Tpo" "$(DEPDIR)/libreiserfs_static_a-super.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-super.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='super.c' object='libreiserfs_static_a-super.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-super.obj `if test -f 'super.c'; then $(CYGPATH_W) 'super.c'; else $(CYGPATH_W) '$(srcdir)/super.c'; fi`
+
+libreiserfs_static_a-direntry.o: direntry.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-direntry.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-direntry.Tpo" -c -o libreiserfs_static_a-direntry.o `test -f 'direntry.c' || echo '$(srcdir)/'`direntry.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-direntry.Tpo" "$(DEPDIR)/libreiserfs_static_a-direntry.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-direntry.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='direntry.c' object='libreiserfs_static_a-direntry.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-direntry.o `test -f 'direntry.c' || echo '$(srcdir)/'`direntry.c
+
+libreiserfs_static_a-direntry.obj: direntry.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-direntry.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-direntry.Tpo" -c -o libreiserfs_static_a-direntry.obj `if test -f 'direntry.c'; then $(CYGPATH_W) 'direntry.c'; else $(CYGPATH_W) '$(srcdir)/direntry.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-direntry.Tpo" "$(DEPDIR)/libreiserfs_static_a-direntry.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-direntry.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='direntry.c' object='libreiserfs_static_a-direntry.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-direntry.obj `if test -f 'direntry.c'; then $(CYGPATH_W) 'direntry.c'; else $(CYGPATH_W) '$(srcdir)/direntry.c'; fi`
+
+libreiserfs_static_a-node.o: node.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-node.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-node.Tpo" -c -o libreiserfs_static_a-node.o `test -f 'node.c' || echo '$(srcdir)/'`node.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-node.Tpo" "$(DEPDIR)/libreiserfs_static_a-node.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-node.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='node.c' object='libreiserfs_static_a-node.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-node.o `test -f 'node.c' || echo '$(srcdir)/'`node.c
+
+libreiserfs_static_a-node.obj: node.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-node.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-node.Tpo" -c -o libreiserfs_static_a-node.obj `if test -f 'node.c'; then $(CYGPATH_W) 'node.c'; else $(CYGPATH_W) '$(srcdir)/node.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-node.Tpo" "$(DEPDIR)/libreiserfs_static_a-node.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-node.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='node.c' object='libreiserfs_static_a-node.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-node.obj `if test -f 'node.c'; then $(CYGPATH_W) 'node.c'; else $(CYGPATH_W) '$(srcdir)/node.c'; fi`
+
+libreiserfs_static_a-tree.o: tree.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-tree.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-tree.Tpo" -c -o libreiserfs_static_a-tree.o `test -f 'tree.c' || echo '$(srcdir)/'`tree.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-tree.Tpo" "$(DEPDIR)/libreiserfs_static_a-tree.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-tree.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tree.c' object='libreiserfs_static_a-tree.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-tree.o `test -f 'tree.c' || echo '$(srcdir)/'`tree.c
+
+libreiserfs_static_a-tree.obj: tree.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-tree.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-tree.Tpo" -c -o libreiserfs_static_a-tree.obj `if test -f 'tree.c'; then $(CYGPATH_W) 'tree.c'; else $(CYGPATH_W) '$(srcdir)/tree.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-tree.Tpo" "$(DEPDIR)/libreiserfs_static_a-tree.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-tree.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tree.c' object='libreiserfs_static_a-tree.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-tree.obj `if test -f 'tree.c'; then $(CYGPATH_W) 'tree.c'; else $(CYGPATH_W) '$(srcdir)/tree.c'; fi`
+
+libreiserfs_static_a-extent.o: extent.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-extent.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-extent.Tpo" -c -o libreiserfs_static_a-extent.o `test -f 'extent.c' || echo '$(srcdir)/'`extent.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-extent.Tpo" "$(DEPDIR)/libreiserfs_static_a-extent.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-extent.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='extent.c' object='libreiserfs_static_a-extent.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-extent.o `test -f 'extent.c' || echo '$(srcdir)/'`extent.c
+
+libreiserfs_static_a-extent.obj: extent.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-extent.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-extent.Tpo" -c -o libreiserfs_static_a-extent.obj `if test -f 'extent.c'; then $(CYGPATH_W) 'extent.c'; else $(CYGPATH_W) '$(srcdir)/extent.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-extent.Tpo" "$(DEPDIR)/libreiserfs_static_a-extent.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-extent.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='extent.c' object='libreiserfs_static_a-extent.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-extent.obj `if test -f 'extent.c'; then $(CYGPATH_W) 'extent.c'; else $(CYGPATH_W) '$(srcdir)/extent.c'; fi`
+
+libreiserfs_static_a-journal.o: journal.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-journal.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-journal.Tpo" -c -o libreiserfs_static_a-journal.o `test -f 'journal.c' || echo '$(srcdir)/'`journal.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-journal.Tpo" "$(DEPDIR)/libreiserfs_static_a-journal.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-journal.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='journal.c' object='libreiserfs_static_a-journal.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-journal.o `test -f 'journal.c' || echo '$(srcdir)/'`journal.c
+
+libreiserfs_static_a-journal.obj: journal.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-journal.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-journal.Tpo" -c -o libreiserfs_static_a-journal.obj `if test -f 'journal.c'; then $(CYGPATH_W) 'journal.c'; else $(CYGPATH_W) '$(srcdir)/journal.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-journal.Tpo" "$(DEPDIR)/libreiserfs_static_a-journal.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-journal.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='journal.c' object='libreiserfs_static_a-journal.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-journal.obj `if test -f 'journal.c'; then $(CYGPATH_W) 'journal.c'; else $(CYGPATH_W) '$(srcdir)/journal.c'; fi`
+
+libreiserfs_static_a-objmap.o: objmap.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-objmap.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-objmap.Tpo" -c -o libreiserfs_static_a-objmap.o `test -f 'objmap.c' || echo '$(srcdir)/'`objmap.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-objmap.Tpo" "$(DEPDIR)/libreiserfs_static_a-objmap.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-objmap.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='objmap.c' object='libreiserfs_static_a-objmap.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-objmap.o `test -f 'objmap.c' || echo '$(srcdir)/'`objmap.c
+
+libreiserfs_static_a-objmap.obj: objmap.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-objmap.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-objmap.Tpo" -c -o libreiserfs_static_a-objmap.obj `if test -f 'objmap.c'; then $(CYGPATH_W) 'objmap.c'; else $(CYGPATH_W) '$(srcdir)/objmap.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-objmap.Tpo" "$(DEPDIR)/libreiserfs_static_a-objmap.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-objmap.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='objmap.c' object='libreiserfs_static_a-objmap.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-objmap.obj `if test -f 'objmap.c'; then $(CYGPATH_W) 'objmap.c'; else $(CYGPATH_W) '$(srcdir)/objmap.c'; fi`
+
+libreiserfs_static_a-tree_balance.o: tree_balance.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-tree_balance.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-tree_balance.Tpo" -c -o libreiserfs_static_a-tree_balance.o `test -f 'tree_balance.c' || echo '$(srcdir)/'`tree_balance.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-tree_balance.Tpo" "$(DEPDIR)/libreiserfs_static_a-tree_balance.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-tree_balance.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tree_balance.c' object='libreiserfs_static_a-tree_balance.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-tree_balance.o `test -f 'tree_balance.c' || echo '$(srcdir)/'`tree_balance.c
+
+libreiserfs_static_a-tree_balance.obj: tree_balance.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-tree_balance.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-tree_balance.Tpo" -c -o libreiserfs_static_a-tree_balance.obj `if test -f 'tree_balance.c'; then $(CYGPATH_W) 'tree_balance.c'; else $(CYGPATH_W) '$(srcdir)/tree_balance.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-tree_balance.Tpo" "$(DEPDIR)/libreiserfs_static_a-tree_balance.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-tree_balance.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tree_balance.c' object='libreiserfs_static_a-tree_balance.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-tree_balance.obj `if test -f 'tree_balance.c'; then $(CYGPATH_W) 'tree_balance.c'; else $(CYGPATH_W) '$(srcdir)/tree_balance.c'; fi`
+
+libreiserfs_static_a-filesystem.o: filesystem.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-filesystem.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-filesystem.Tpo" -c -o libreiserfs_static_a-filesystem.o `test -f 'filesystem.c' || echo '$(srcdir)/'`filesystem.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-filesystem.Tpo" "$(DEPDIR)/libreiserfs_static_a-filesystem.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-filesystem.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='filesystem.c' object='libreiserfs_static_a-filesystem.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-filesystem.o `test -f 'filesystem.c' || echo '$(srcdir)/'`filesystem.c
+
+libreiserfs_static_a-filesystem.obj: filesystem.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-filesystem.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-filesystem.Tpo" -c -o libreiserfs_static_a-filesystem.obj `if test -f 'filesystem.c'; then $(CYGPATH_W) 'filesystem.c'; else $(CYGPATH_W) '$(srcdir)/filesystem.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-filesystem.Tpo" "$(DEPDIR)/libreiserfs_static_a-filesystem.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-filesystem.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='filesystem.c' object='libreiserfs_static_a-filesystem.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-filesystem.obj `if test -f 'filesystem.c'; then $(CYGPATH_W) 'filesystem.c'; else $(CYGPATH_W) '$(srcdir)/filesystem.c'; fi`
+
+libreiserfs_static_a-key.o: key.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-key.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-key.Tpo" -c -o libreiserfs_static_a-key.o `test -f 'key.c' || echo '$(srcdir)/'`key.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-key.Tpo" "$(DEPDIR)/libreiserfs_static_a-key.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-key.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='key.c' object='libreiserfs_static_a-key.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-key.o `test -f 'key.c' || echo '$(srcdir)/'`key.c
+
+libreiserfs_static_a-key.obj: key.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-key.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-key.Tpo" -c -o libreiserfs_static_a-key.obj `if test -f 'key.c'; then $(CYGPATH_W) 'key.c'; else $(CYGPATH_W) '$(srcdir)/key.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-key.Tpo" "$(DEPDIR)/libreiserfs_static_a-key.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-key.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='key.c' object='libreiserfs_static_a-key.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-key.obj `if test -f 'key.c'; then $(CYGPATH_W) 'key.c'; else $(CYGPATH_W) '$(srcdir)/key.c'; fi`
+
+libreiserfs_static_a-prints.o: prints.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-prints.o -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-prints.Tpo" -c -o libreiserfs_static_a-prints.o `test -f 'prints.c' || echo '$(srcdir)/'`prints.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-prints.Tpo" "$(DEPDIR)/libreiserfs_static_a-prints.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-prints.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='prints.c' object='libreiserfs_static_a-prints.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-prints.o `test -f 'prints.c' || echo '$(srcdir)/'`prints.c
+
+libreiserfs_static_a-prints.obj: prints.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -MT libreiserfs_static_a-prints.obj -MD -MP -MF "$(DEPDIR)/libreiserfs_static_a-prints.Tpo" -c -o libreiserfs_static_a-prints.obj `if test -f 'prints.c'; then $(CYGPATH_W) 'prints.c'; else $(CYGPATH_W) '$(srcdir)/prints.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libreiserfs_static_a-prints.Tpo" "$(DEPDIR)/libreiserfs_static_a-prints.Po"; else rm -f "$(DEPDIR)/libreiserfs_static_a-prints.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='prints.c' object='libreiserfs_static_a-prints.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libreiserfs_static_a_CFLAGS) $(CFLAGS) -c -o libreiserfs_static_a-prints.obj `if test -f 'prints.c'; then $(CYGPATH_W) 'prints.c'; else $(CYGPATH_W) '$(srcdir)/prints.c'; fi`
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-noinstLIBRARIES ctags distclean distclean-compile \
+	distclean-generic distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-man install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libreiserfs/badblock.c b/libreiserfs/badblock.c
new file mode 100644
index 0000000..c2a8cec
--- /dev/null
+++ b/libreiserfs/badblock.c
@@ -0,0 +1,202 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+#include "misc/unaligned.h"
+#include "misc/misc.h"
+
+reiserfs_key_t badblock_key = {REISERFS_BAD_DID, REISERFS_BAD_OID, {{0, 0},}};
+
+void reiserfs_badblock_traverse(reiserfs_filsys_t * fs, 
+				badblock_func_t action, 
+				void *data) 
+{
+    reiserfs_path_t badblock_path;
+    reiserfs_key_t rd_key = badblock_key;
+    const reiserfs_key_t *key;
+    
+    badblock_path.path_length = REISERFS_PATH_OFFILL;
+    reiserfs_key_set_sec (KEY_FORMAT_2, &badblock_key, 1, TYPE_EXTENT);
+    
+    while (1) {
+	    if (reiserfs_tree_search_item (fs, &rd_key, &badblock_path) == IO_ERROR) {
+		fprintf (stderr, "%s: Some problems while searching by the key "
+			 "occured. Probably due to tree corruptions.\n",
+			 __FUNCTION__);
+		reiserfs_tree_pathrelse (&badblock_path);
+		break;
+	    }
+		    
+
+	    if (reiserfs_nh_get_items (NODE_HEAD (REISERFS_PATH_LEAF (&badblock_path))) <= 
+		REISERFS_PATH_LEAF_POS (&badblock_path)) 
+	    {
+		reiserfs_tree_pathrelse (&badblock_path);
+		break;
+	    }
+
+	    rd_key = REISERFS_PATH_IH(&badblock_path)->ih_key;
+
+	    if (reiserfs_key_get_did(&rd_key) != REISERFS_BAD_DID || 
+		reiserfs_key_get_oid(&rd_key) != REISERFS_BAD_OID ||
+		!reiserfs_key_ext(&rd_key)) 
+	    {
+		reiserfs_tree_pathrelse (&badblock_path);
+		break;
+	    }
+	
+	    if ((key = reiserfs_tree_next_key(&badblock_path, fs)))
+		rd_key = *key;
+	    else
+	        memset(&rd_key, 0, sizeof(rd_key));
+	    
+	    action(fs, &badblock_path, data);
+
+	    if (reiserfs_key_get_did(&rd_key) == 0)
+		break;
+    }
+}
+
+static void callback_badblock_rm(reiserfs_filsys_t *fs,
+				 reiserfs_path_t *badblock_path, 
+				 void *data) 
+{
+	reiserfs_tb_t tb;
+	reiserfs_ih_t * tmp_ih;
+
+	tmp_ih = REISERFS_PATH_IH(badblock_path);
+	memset (REISERFS_PATH_ITEM (badblock_path), 
+		0, reiserfs_ih_get_len (tmp_ih));
+
+	reiserfs_tb_init (&tb, fs, badblock_path, 
+			-(REISERFS_IH_SIZE + 
+			  reiserfs_ih_get_len(REISERFS_PATH_IH(badblock_path))));
+
+	if (reiserfs_fix_nodes (M_DELETE, &tb, 0) != CARRY_ON)
+		misc_die ("%s: reiserfs_fix_nodes failed", __FUNCTION__);
+
+	reiserfs_tb_balance (&tb, 0, 0, M_DELETE, 0/*zero num*/);
+}
+
+void reiserfs_badblock_extract(reiserfs_filsys_t *fs, 
+			       reiserfs_path_t *badblock_path, 
+			       void *data) 
+{
+	reiserfs_ih_t *tmp_ih;
+	__u32 *ind_item;
+	__u32 i;
+
+	if (!fs->fs_badblocks_bm) {
+		fs->fs_badblocks_bm = 
+			reiserfs_bitmap_create(reiserfs_sb_get_blocks(fs->fs_ondisk_sb));
+    
+		reiserfs_bitmap_zero (fs->fs_badblocks_bm);
+	}
+	
+	tmp_ih = REISERFS_PATH_IH(badblock_path);
+	ind_item = (__u32 *)REISERFS_PATH_ITEM(badblock_path);
+
+	for (i = 0; i < reiserfs_ext_count(tmp_ih); i++) {
+		reiserfs_bitmap_set_bit(fs->fs_badblocks_bm, 
+					d32_get(ind_item, i));
+	}
+	
+	reiserfs_tree_pathrelse (badblock_path);
+}
+
+static int reiserfs_alloc_blocks (reiserfs_filsys_t * fs,
+				  unsigned long *blknr,
+				  unsigned long start,
+				  int count)
+{
+    int i;
+    
+    for (i = 0; i < count; i ++) {
+	blknr[i] = 0;
+	if (reiserfs_bitmap_find_zero_bit(fs->fs_bitmap2, blknr + i))
+	    misc_die ("%s: failed to allocate a block.", __FUNCTION__);
+	
+	reiserfs_bitmap_set_bit(fs->fs_bitmap2, blknr[i]);
+    }
+    
+    return CARRY_ON;
+}
+
+void reiserfs_badblock_flush (reiserfs_filsys_t * fs, int replace) {
+    reiserfs_tb_t tb;
+    reiserfs_path_t badblock_path;
+    reiserfs_ih_t badblock_ih;
+    __u32 ni;
+
+    __u64 offset;
+    __u32 i, j;
+
+    if (fs->fs_badblocks_bm == NULL)
+    	return;
+
+    /* delete all items with badblock_key */
+    if (replace)
+	reiserfs_badblock_traverse(fs, callback_badblock_rm, NULL);
+
+    memset(&badblock_ih, 0, sizeof(badblock_ih));
+    reiserfs_ih_set_format (&badblock_ih, KEY_FORMAT_2);
+    reiserfs_ih_set_len (&badblock_ih, REISERFS_EXT_SIZE);
+    reiserfs_ih_set_free (&badblock_ih, 0);
+    reiserfs_ih_set_loc (&badblock_ih, 0);
+    reiserfs_key_set_did (&badblock_ih.ih_key, REISERFS_BAD_DID);
+    reiserfs_key_set_oid (&badblock_ih.ih_key, REISERFS_BAD_OID);
+    reiserfs_key_set_type (KEY_FORMAT_2, &badblock_ih.ih_key, TYPE_EXTENT);
+
+    j = 0;
+    
+    fs->block_allocator = reiserfs_alloc_blocks;
+    
+    /* insert all badblock pointers */
+    for (i = 0; i < fs->fs_badblocks_bm->bm_bit_size; i++) {
+        int retval;
+
+	if (!reiserfs_bitmap_test_bit (fs->fs_badblocks_bm, i))	
+	    continue;
+	
+	offset = j * fs->fs_blocksize + 1;
+	reiserfs_key_set_off (KEY_FORMAT_2, &badblock_ih.ih_key, offset);
+	ni = cpu_to_le32 (i);
+	
+	retval = reiserfs_tree_search_position (fs, &badblock_ih.ih_key, 
+					      &badblock_path);
+
+	switch (retval) {
+	case (FILE_NOT_FOUND):
+		reiserfs_tb_init (&tb, fs, &badblock_path, 
+				  REISERFS_IH_SIZE + reiserfs_ih_get_len(&badblock_ih));
+		
+		if (reiserfs_fix_nodes (M_INSERT, &tb, &badblock_ih) != CARRY_ON)
+		    misc_die ("reiserfs_badblock_flush: reiserfs_fix_nodes failed");
+		
+		reiserfs_tb_balance (&tb, &badblock_ih, (void *)&ni , M_INSERT, 0);
+
+		break;
+	
+	case (POSITION_NOT_FOUND):
+	case (POSITION_FOUND):
+		/* Insert the new item to the found position. */
+	
+		reiserfs_tb_init (&tb, fs, &badblock_path, REISERFS_EXT_SIZE);
+		
+		if (reiserfs_fix_nodes (M_PASTE, &tb, 0) != CARRY_ON)
+		    misc_die ("reiserfs_badblock_flush: reiserfs_fix_nodes failed");
+
+		reiserfs_tb_balance (&tb, 0, (const char *)&ni, M_PASTE, 0);
+		break;
+	}
+	
+	j++;
+    }
+}
+
diff --git a/reiserfscore/bitmap.c b/libreiserfs/bitmap.c
similarity index 61%
rename from reiserfscore/bitmap.c
rename to libreiserfs/bitmap.c
index 771b037..d6cbac8 100644
--- a/reiserfscore/bitmap.c
+++ b/libreiserfs/bitmap.c
@@ -3,243 +3,48 @@
  * reiserfsprogs/README
  */
 
-/*
- * 2000/10/26 - Initial version.
- */
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
 
-#include "includes.h"
+#include "reiserfs/libreiserfs.h"
+#include "misc/malloc.h"
+
 #include <assert.h>
-
+#include <errno.h>
 
 /* create clean bitmap */
-reiserfs_bitmap_t * reiserfs_create_bitmap (unsigned int bit_count)
+reiserfs_bitmap_t * reiserfs_bitmap_create (unsigned int bit_count)
 {
     reiserfs_bitmap_t * bm;
 
-    bm = getmem (sizeof (*bm));
+    bm = misc_getmem (sizeof (*bm));
     if (!bm)
 	return 0;
     bm->bm_bit_size = bit_count;
     bm->bm_byte_size = ((unsigned long long)bit_count + 7) / 8;
-    bm->bm_set_bits = 0;
-    bm->bm_map = getmem (bm->bm_byte_size);
+    bm->bm_map = misc_getmem (bm->bm_byte_size);
     if (!bm->bm_map) {
-	freemem (bm);
+	misc_freemem (bm);
 	return 0;
     }
 
     return bm;
 }
 
-/* Expand existing bitmap.  Return non-zero if can't. FIXME: it is
-   assumed that bit_count is new number of blocks to be addressed */
-int reiserfs_expand_bitmap (reiserfs_bitmap_t * bm, unsigned int bit_count)
-{
-    unsigned int byte_count = ((bit_count + 7) / 8);
-    char * new_map;
-
-    new_map = expandmem (bm->bm_map, bm->bm_byte_size,
-			 byte_count - bm->bm_byte_size);
-
-    if (!new_map) {
-	return 1;
-    }
-    
-    bm->bm_map = new_map;
-    bm->bm_byte_size = byte_count;
-    bm->bm_bit_size = bit_count;
-
-    bm->bm_dirty = 1;
-
-    return 0;
-}
-
-void reiserfs_shrink_bitmap (reiserfs_bitmap_t * bm, unsigned int bit_count)
-{
-    unsigned long i;
-    
-    assert (bm->bm_bit_size >= bit_count);
-
-    bm->bm_byte_size = (bit_count + 7) / 8;
-    bm->bm_bit_size = bit_count;
-    bm->bm_set_bits = 0;
-    
-    bm->bm_dirty = 1;
-    
-    for (i = 0; i < bm->bm_bit_size; i++) {
-	if (reiserfs_bitmap_test_bit(bm, i))
-	    bm->bm_set_bits++;
-    }
-}
-
-/* bitmap destructor */
-void reiserfs_delete_bitmap (reiserfs_bitmap_t * bm)
-{
-    freemem(bm->bm_map);
-    bm->bm_map = NULL;		/* to not reuse bitmap handle */
-    bm->bm_bit_size = 0;
-    bm->bm_byte_size = 0;
-    freemem(bm);
-}
-
-
-void reiserfs_bitmap_copy (reiserfs_bitmap_t * to, reiserfs_bitmap_t * from)
-{
-    assert (to->bm_byte_size == from->bm_byte_size);
-    memcpy (to->bm_map, from->bm_map, from->bm_byte_size);
-    to->bm_bit_size = from->bm_bit_size;
-    to->bm_set_bits = from->bm_set_bits;
-    to->bm_dirty = 1;
-}
-
-int reiserfs_bitmap_compare (reiserfs_bitmap_t * bm1, reiserfs_bitmap_t * bm2)
-{
-    unsigned long i, diff;
-    unsigned long int bytes, bits;
-
-    assert (bm1->bm_byte_size == bm2->bm_byte_size &&
-	    bm1->bm_bit_size == bm2->bm_bit_size);
-
-    diff = 0;
-
-    /* compare full bytes */
-    bytes = bm1->bm_bit_size / 8;
-    bits = bytes * 8;
-    if (memcmp (bm1->bm_map, bm2->bm_map, bytes)) {
-	for (i = 0; i < bits; i ++)
-	    if (reiserfs_bitmap_test_bit(bm1, i) != reiserfs_bitmap_test_bit(bm2, i))
-		diff ++;
-    }
-    
-    /* compare last byte of bitmap which can be used partially */
-    bits = bm1->bm_bit_size % 8;
-    for (i = bm1->bm_bit_size / 8 * 8; i < bm1->bm_bit_size / 8 * 8 + bits; i ++)
-	if (reiserfs_bitmap_test_bit(bm1, i) != reiserfs_bitmap_test_bit(bm2, i))
-            diff ++;
-
-/*	int mask;
-
-	mask = 255 >> (8 - bits);
-	if ((bm1->bm_map [bytes] & mask) != (bm2->bm_map [bytes] & mask)) {
-	    diff ++;
-	}
-    }*/
-    return diff;
-}
-
-/* 
-    Does X | Y for every bit of the bitmap `to`, where 
-    X - bit of the `to` bitmap, 
-    Y - `from` bitmap. 
-    Save result in the `to` bitmap.
-*/
-void reiserfs_bitmap_disjunction (reiserfs_bitmap_t * to, 
-    reiserfs_bitmap_t * from) 
-{
-    unsigned int i;
-
-    assert (to->bm_byte_size == from->bm_byte_size &&
-	    to->bm_bit_size == from->bm_bit_size);
-
-    for (i = 0; i < to->bm_bit_size; i++) {
-	if (misc_test_bit(i, from->bm_map) && !misc_test_bit(i, to->bm_map)) {
-	    misc_set_bit(i, to->bm_map);
-	    to->bm_set_bits ++;
-	    to->bm_dirty = 1;	
-	}
-    }
-}
-
-/* 
-    Does X & !Y for every bit of the bitmap `base`, where 
-    X - bit of the `base` bitmap, 
-    Y - `exclude` bitmap. 
-    Save result in the `base` bitmap.
-*/
-void reiserfs_bitmap_delta (reiserfs_bitmap_t * base, reiserfs_bitmap_t * exclude) {
-   unsigned int i;
-
-    assert (base->bm_byte_size == exclude->bm_byte_size &&
-	    base->bm_bit_size == exclude->bm_bit_size);
-
-    for (i = 0; i < base->bm_bit_size; i++) {
-	if (misc_test_bit(i, exclude->bm_map) && misc_test_bit(i, base->bm_map)) {
-	    misc_clear_bit(i, base->bm_map);
-	    base->bm_set_bits --;
-	    base->bm_dirty = 1;
-	}
-    }
-}
-
-void reiserfs_bitmap_set_bit (reiserfs_bitmap_t * bm, unsigned int bit_number)
-{
-    assert(bit_number < bm->bm_bit_size);
-    if (misc_test_bit (bit_number, bm->bm_map))
-	return;
-    misc_set_bit(bit_number, bm->bm_map);
-    bm->bm_set_bits ++;
-    bm->bm_dirty = 1;
-}
-
-
-void reiserfs_bitmap_clear_bit (reiserfs_bitmap_t * bm, unsigned int bit_number)
-{
-    assert(bit_number < bm->bm_bit_size);
-    if (!misc_test_bit (bit_number, bm->bm_map))
-	return;
-    misc_clear_bit (bit_number, bm->bm_map);
-    bm->bm_set_bits --;
-    bm->bm_dirty = 1;
-}
-
-
-int reiserfs_bitmap_test_bit (reiserfs_bitmap_t * bm, unsigned int bit_number)
-{
-    if (bit_number >= bm->bm_bit_size)
-	printf ("bit %u, bitsize %lu\n", bit_number, bm->bm_bit_size);
-    assert(bit_number < bm->bm_bit_size);
-    return misc_test_bit(bit_number, bm->bm_map);
-}
-
-
-unsigned int reiserfs_bitmap_zeros (reiserfs_bitmap_t * bm) {
-    return bm->bm_bit_size - bm->bm_set_bits;
-}
-
-
-unsigned int reiserfs_bitmap_ones (reiserfs_bitmap_t * bm) {
-    return bm->bm_set_bits;
-}
-
-
-int reiserfs_bitmap_find_zero_bit (reiserfs_bitmap_t * bm, unsigned long * first)
-{
-    unsigned long bit_nr = *first;
-    assert(*first < bm->bm_bit_size);
-
-    bit_nr = misc_find_next_zero_bit(bm->bm_map, bm->bm_bit_size, *first);
-
-    if (bit_nr >= bm->bm_bit_size) { /* search failed */	
-	return 1;
-    }
-
-    *first = bit_nr;
-    return 0;
-}
-
-
 /* read every bitmap block and copy their content into bitmap 'bm' */
-static int reiserfs_fetch_ondisk_bitmap (reiserfs_bitmap_t * bm, reiserfs_filsys_t * fs)
+static int reiserfs_bitmap_fetch (reiserfs_bitmap_t * bm, 
+				  reiserfs_filsys_t * fs)
 {
     unsigned int last_byte_unused_bits;
     unsigned long block, to_copy;
-    struct buffer_head * bh;
+    reiserfs_bh_t * bh;
     unsigned int i;
     int copied;
     int ret = 0;
     char * p;
 
-    to_copy = (get_sb_block_count (fs->fs_ondisk_sb) + 7) / 8;
+    to_copy = (reiserfs_sb_get_blocks (fs->fs_ondisk_sb) + 7) / 8;
 
     /*reiserfs_warning (stderr, "Fetching on-disk bitmap..");*/
     assert (bm->bm_byte_size == to_copy);
@@ -249,19 +54,20 @@
     block = fs->fs_super_bh->b_blocknr + 1;
 
     while (to_copy) {
-	bh = bread (fs->fs_dev, block, fs->fs_blocksize);
+	bh = reiserfs_buffer_read (fs->fs_dev, block, fs->fs_blocksize);
 	if (!bh) {
-	    reiserfs_warning (stderr, "reiserfs_fetch_ondisk_bitmap: "
-			      "bread failed reading bitmap (%lu)\n", block);
+	    reiserfs_warning (stderr, "reiserfs_bitmap_fetch: "
+			      "reiserfs_buffer_read failed reading bitmap "
+			      "(%lu)\n", block);
 	    
-	    bh = getblk (fs->fs_dev, block, fs->fs_blocksize); 
+	    bh = reiserfs_buffer_open (fs->fs_dev, block, fs->fs_blocksize); 
 	    if (!bh) {
-		reiserfs_exit (1, "reiserfs_fetch_ondisk_bitmap: "
-			       "getblk failed");
+		reiserfs_exit (1, "reiserfs_bitmap_fetch: "
+			       "reiserfs_buffer_open failed");
 	    }
 
 	    memset (bh->b_data, 0xff, bh->b_size);
-	    mark_buffer_uptodate (bh, 1);
+	    reiserfs_buffer_mkuptodate (bh, 1);
 	}
 
 	if (to_copy < fs->fs_blocksize) {
@@ -275,13 +81,14 @@
 	    copied = to_copy;
 	}
 	memcpy (p, bh->b_data, copied); 
-	brelse (bh);
+	reiserfs_buffer_close (bh);
 	p += copied;
 	to_copy -= copied;
 
 	/* next bitmap block */
-	if (spread_bitmaps (fs))
-	    block = (block / (fs->fs_blocksize * 8) + 1) * (fs->fs_blocksize * 8);
+	if (reiserfs_bitmap_spread (fs))
+	    block = (block / (fs->fs_blocksize * 8) + 1) * 
+		    (fs->fs_blocksize * 8);
 	else
 	    block ++;
     }
@@ -308,30 +115,85 @@
     return ret;
 }
 
+/* read bitmap blocks */
+int reiserfs_bitmap_open (reiserfs_filsys_t * fs) {
+    unsigned int bmap_nr, count;
+    
+    if (fs->fs_bitmap2)
+	reiserfs_panic ("bitmap is initiaized already");
+
+    count = reiserfs_sb_get_blocks (fs->fs_ondisk_sb);
+    
+    fs->fs_bitmap2 = reiserfs_bitmap_create (count);
+    
+    if (!fs->fs_bitmap2)
+	return -1;
+
+    bmap_nr = reiserfs_bmap_nr(count, fs->fs_blocksize);
+    bmap_nr = reiserfs_bmap_over(bmap_nr) ? 0 : bmap_nr;
+    
+    if (bmap_nr != reiserfs_sb_get_bmaps (fs->fs_ondisk_sb)) {
+	reiserfs_warning (stderr, "%s: wrong either bitmaps number,\n", 
+			  __FUNCTION__);
+	
+	reiserfs_warning (stderr, "count of blocks or blocksize, run "
+			  "with --rebuild-sb to fix it\n");
+	return -1;
+    }    	
+
+    return reiserfs_bitmap_fetch (fs->fs_bitmap2, fs);
+}
+
+/* bitmap destructor */
+void reiserfs_bitmap_delete (reiserfs_bitmap_t * bm)
+{
+    misc_freemem(bm->bm_map);
+    bm->bm_map = NULL;		/* to not reuse bitmap handle */
+    bm->bm_bit_size = 0;
+    bm->bm_byte_size = 0;
+    misc_freemem(bm);
+}
+
+void reiserfs_bitmap_free (reiserfs_filsys_t * fs)
+{
+    if (fs->fs_bitmap2) {
+	reiserfs_bitmap_delete (fs->fs_bitmap2);
+	fs->fs_bitmap2 = 0;
+    }
+}
+
+void reiserfs_bitmap_close (reiserfs_filsys_t * fs)
+{
+    if (!fs->fs_bitmap2)
+	return;
+    reiserfs_bitmap_flush (fs->fs_bitmap2, fs);
+    reiserfs_bitmap_free (fs);
+}
 
 /* copy bitmap 'bm' to buffers which hold on-disk bitmap if bitmap was ever
    changed and return 1. Otherwise - return 0 */
-int reiserfs_flush_to_ondisk_bitmap (reiserfs_bitmap_t * bm, reiserfs_filsys_t * fs)
+int reiserfs_bitmap_flush (reiserfs_bitmap_t * bm, reiserfs_filsys_t * fs)
 {
     unsigned int last_byte_unused_bits, i;
     unsigned long to_copy, copied, block;
-    struct buffer_head * bh;
+    reiserfs_bh_t * bh;
     char * p;
 
     /* make sure that the device is big enough */
-    bh = bread (fs->fs_dev, bm->bm_bit_size - 1, fs->fs_blocksize);
+    bh = reiserfs_buffer_read (fs->fs_dev, bm->bm_bit_size - 1, fs->fs_blocksize);
     if (!bh) {
-	reiserfs_warning (stderr, "reiserfs_flush_to_ondisk_bitmap: bread failed for block %lu\n",
-			  bm->bm_bit_size - 1);
+	reiserfs_warning (stderr, "reiserfs_bitmap_flush: reiserfs_buffer_read "
+			  "failed for block %lu\n", bm->bm_bit_size - 1);
 /*
-	bh = getblk (fs->fs_dev, bm->bm_bit_size - 1, fs->fs_blocksize);
+	bh = reiserfs_buffer_open (fs->fs_dev, bm->bm_bit_size - 1, 
+			     fs->fs_blocksize);
 	if (!bh)
-	    reiserfs_panic ("reiserfs_flush_to_ondisk_bitmap: getblk failed");
-	mark_buffer_uptodate (bh, 1);
-	mark_buffer_dirty (bh);
-	bwrite (bh);*/
+	    reiserfs_panic ("reiserfs_bitmap_flush: reiserfs_buffer_open failed");
+	reiserfs_buffer_mkuptodate (bh, 1);
+	reiserfs_buffer_mkdirty (bh);
+	reiserfs_buffer_write (bh);*/
     }
-    brelse (bh);
+    reiserfs_buffer_close (bh);
 
     if (!bm->bm_dirty)
 	return 0;
@@ -343,14 +205,15 @@
     block = fs->fs_super_bh->b_blocknr + 1;
 
     while (to_copy) {
-	/* we bread to make sure that filesystem contains enough blocks */
-	bh = getblk (fs->fs_dev, block, fs->fs_blocksize);
+	/* we reiserfs_buffer_read to make sure that filesystem contains 
+	   enough blocks */
+	bh = reiserfs_buffer_open (fs->fs_dev, block, fs->fs_blocksize);
 	if (!bh) {
 	    reiserfs_exit (1, "Getblk failed for (%lu)\n", block);
 	}
 	
 	memset (bh->b_data, 0xff, bh->b_size);
-	mark_buffer_uptodate (bh, 1);
+	reiserfs_buffer_mkuptodate (bh, 1);
 
 	if (to_copy < fs->fs_blocksize)
 	    copied = to_copy;
@@ -360,16 +223,19 @@
 	    last_byte_unused_bits = bm->bm_byte_size * 8 - bm->bm_bit_size;
 
 	    for (i = 0; i < last_byte_unused_bits; i ++)
-		misc_set_bit ((bm->bm_bit_size % (fs->fs_blocksize * 8)) + i, bh->b_data);
+		misc_set_bit ((bm->bm_bit_size % (fs->fs_blocksize * 8)) + i,
+			      bh->b_data);
 	}
-	mark_buffer_dirty (bh);
-	brelse (bh);
+	
+	reiserfs_buffer_mkdirty (bh);
+	reiserfs_buffer_close (bh);
 	p += copied;
 	to_copy -= copied;
 
 	/* next bitmap block */
-	if (spread_bitmaps (fs))
-	    block = (block / (fs->fs_blocksize * 8) + 1) * (fs->fs_blocksize * 8);
+	if (reiserfs_bitmap_spread (fs))
+	    block = (block / (fs->fs_blocksize * 8) + 1) * 
+		    (fs->fs_blocksize * 8);
 	else
 	    block ++;
     }
@@ -378,12 +244,223 @@
     return 1;
 }
 
+/* Expand existing bitmap.  Return non-zero if can't. FIXME: it is
+   assumed that bit_count is new number of blocks to be addressed */
+int reiserfs_bitmap_expand (reiserfs_bitmap_t * bm, 
+			    unsigned int bit_count)
+{
+    unsigned int byte_count = ((bit_count + 7) / 8);
+    char * new_map;
+
+    new_map = misc_expandmem (bm->bm_map, bm->bm_byte_size,
+			 byte_count - bm->bm_byte_size);
+
+    if (!new_map) {
+	return 1;
+    }
+    
+    bm->bm_map = new_map;
+    bm->bm_byte_size = byte_count;
+    bm->bm_bit_size = bit_count;
+
+    bm->bm_dirty = 1;
+
+    return 0;
+}
+
+void reiserfs_bitmap_shrink (reiserfs_bitmap_t * bm, 
+			     unsigned int bit_count)
+{
+    unsigned long i;
+    
+    assert (bm->bm_bit_size >= bit_count);
+
+    bm->bm_byte_size = (bit_count + 7) / 8;
+    bm->bm_bit_size = bit_count;
+    bm->bm_set_bits = 0;
+    if (bm->bm_first_zero > bm->bm_bit_size)
+	bm->bm_first_zero = bm->bm_bit_size;
+    
+    bm->bm_dirty = 1;
+    
+    for (i = 0; i < bm->bm_bit_size; i++) {
+	if (reiserfs_bitmap_test_bit(bm, i))
+	    bm->bm_set_bits++;
+    }
+}
+
+void reiserfs_bitmap_copy (reiserfs_bitmap_t * to, 
+			   reiserfs_bitmap_t * from)
+{
+    assert (to->bm_byte_size == from->bm_byte_size);
+    memcpy (to->bm_map, from->bm_map, from->bm_byte_size);
+    to->bm_bit_size = from->bm_bit_size;
+    to->bm_set_bits = from->bm_set_bits;
+    to->bm_first_zero = from->bm_first_zero;
+    to->bm_dirty = 1;
+}
+
+int reiserfs_bitmap_compare (reiserfs_bitmap_t * bm1, 
+			     reiserfs_bitmap_t * bm2)
+{
+    unsigned long i, diff;
+    unsigned long int bytes, bits;
+
+    assert (bm1->bm_byte_size == bm2->bm_byte_size &&
+	    bm1->bm_bit_size == bm2->bm_bit_size);
+
+    diff = 0;
+
+    /* compare full bytes */
+    bytes = bm1->bm_bit_size / 8;
+    bits = bytes * 8;
+    if (memcmp (bm1->bm_map, bm2->bm_map, bytes)) {
+	for (i = 0; i < bits; i ++)
+	    if (reiserfs_bitmap_test_bit(bm1, i) != 
+		reiserfs_bitmap_test_bit(bm2, i))
+	    {
+		diff ++;
+	    }
+    }
+    
+    /* compare last byte of bitmap which can be used partially */
+    bits = bm1->bm_bit_size % 8;
+    for (i = bm1->bm_bit_size / 8 * 8; 
+	 i < bm1->bm_bit_size / 8 * 8 + bits; 
+	 i ++)
+    {
+	if (reiserfs_bitmap_test_bit(bm1, i) != 
+	    reiserfs_bitmap_test_bit(bm2, i))
+	{
+            diff ++;
+	}
+
+/*	int mask;
+
+	mask = 255 >> (8 - bits);
+	if ((bm1->bm_map [bytes] & mask) != (bm2->bm_map [bytes] & mask)) {
+	    diff ++;
+	} */
+    }
+
+    return diff;
+}
+
+/* 
+    Does X | Y for every bit of the bitmap `to`, where 
+    X - bit of the `to` bitmap, 
+    Y - `from` bitmap. 
+    Save result in the `to` bitmap.
+*/
+void reiserfs_bitmap_disjunction (reiserfs_bitmap_t * to, 
+    reiserfs_bitmap_t * from) 
+{
+    unsigned int i;
+
+    assert (to->bm_byte_size == from->bm_byte_size &&
+	    to->bm_bit_size == from->bm_bit_size);
+
+    for (i = 0; i < to->bm_bit_size; i++) {
+	if (misc_test_bit(i, from->bm_map) && 
+	    !misc_test_bit(i, to->bm_map)) 
+	{
+	    misc_set_bit(i, to->bm_map);
+	    to->bm_set_bits ++;
+	    to->bm_dirty = 1;	
+	}
+    }
+}
+
+/* 
+    Does X & !Y for every bit of the bitmap `base`, where 
+    X - bit of the `base` bitmap, 
+    Y - `exclude` bitmap. 
+    Save result in the `base` bitmap.
+*/
+void reiserfs_bitmap_delta (reiserfs_bitmap_t * base, 
+			    reiserfs_bitmap_t * exclude) 
+{
+   unsigned int i;
+
+    assert (base->bm_byte_size == exclude->bm_byte_size &&
+	    base->bm_bit_size == exclude->bm_bit_size);
+
+    for (i = 0; i < base->bm_bit_size; i++) {
+	if (misc_test_bit(i, exclude->bm_map) && 
+	    misc_test_bit(i, base->bm_map)) 
+	{
+	    misc_clear_bit(i, base->bm_map);
+	    base->bm_set_bits --;
+	    base->bm_dirty = 1;
+	}
+    }
+}
+
+void reiserfs_bitmap_set_bit (reiserfs_bitmap_t * bm, 
+			      unsigned int bit_number)
+{
+    assert(bit_number < bm->bm_bit_size);
+    if (misc_test_bit (bit_number, bm->bm_map))
+	return;
+    misc_set_bit(bit_number, bm->bm_map);
+    bm->bm_set_bits ++;
+    bm->bm_dirty = 1;
+}
+
+
+void reiserfs_bitmap_clear_bit (reiserfs_bitmap_t * bm, 
+				unsigned int bit_number)
+{
+    assert(bit_number < bm->bm_bit_size);
+    if (!misc_test_bit (bit_number, bm->bm_map))
+	return;
+    misc_clear_bit (bit_number, bm->bm_map);
+    bm->bm_set_bits --;
+    bm->bm_dirty = 1;
+    if (bm->bm_first_zero > bit_number)
+	bm->bm_first_zero = bit_number;
+}
+
+
+int reiserfs_bitmap_test_bit (reiserfs_bitmap_t * bm, 
+			      unsigned int bit_number)
+{
+    if (bit_number >= bm->bm_bit_size)
+	printf ("bit %u, bitsize %lu\n", bit_number, bm->bm_bit_size);
+    assert(bit_number < bm->bm_bit_size);
+    return misc_test_bit(bit_number, bm->bm_map);
+}
+
+
+int reiserfs_bitmap_find_zero_bit (reiserfs_bitmap_t * bm, 
+				   unsigned long * first)
+{
+    unsigned long bit_nr;
+    int upd;
+    
+    assert(*first < bm->bm_bit_size);
+    
+    upd = (bm->bm_first_zero >= *first) ? 1 : 0;
+    bit_nr = misc_find_next_zero_bit(bm->bm_map, bm->bm_bit_size, 
+				     upd ? bm->bm_first_zero : *first);
+
+    if (upd)
+	bm->bm_first_zero = bit_nr;
+    
+    if (bit_nr >= bm->bm_bit_size) 
+	/* search failed */	
+	return 1;
+
+    *first = bit_nr;
+    return 0;
+}
 
 void reiserfs_bitmap_zero (reiserfs_bitmap_t * bm)
 {
     memset (bm->bm_map, 0, bm->bm_byte_size);
     bm->bm_set_bits = 0;
     bm->bm_dirty = 1;
+    bm->bm_first_zero = 0;
 }
 
 
@@ -392,8 +469,36 @@
     memset (bm->bm_map, 0xff, bm->bm_byte_size);
     bm->bm_set_bits = bm->bm_bit_size;
     bm->bm_dirty = 1;
+    bm->bm_first_zero = bm->bm_set_bits;
 }
 
+void reiserfs_bitmap_invert (reiserfs_bitmap_t * bm)
+{
+    unsigned int i;
+
+    /*reiserfs_warning (stderr, "Bitmap inverting..");fflush (stderr);*/
+    for (i = 0; i < bm->bm_bit_size; i ++) {
+	if (reiserfs_bitmap_test_bit (bm, i))
+	    reiserfs_bitmap_clear_bit (bm, i);
+	else
+	    reiserfs_bitmap_set_bit (bm, i);
+    }
+
+    /*reiserfs_warning (stderr, "done\n");*/
+}
+
+unsigned int reiserfs_bitmap_zeros (reiserfs_bitmap_t * bm) {
+    return bm->bm_bit_size - bm->bm_set_bits;
+}
+
+
+unsigned int reiserfs_bitmap_ones (reiserfs_bitmap_t * bm) {
+    return bm->bm_set_bits;
+}
+
+int reiserfs_bitmap_spread (reiserfs_filsys_t * fs) {
+    return fs->fs_super_bh->b_blocknr != 2;
+}
 
 /* format of bitmap saved in a file:
    magic number (32 bits)
@@ -405,26 +510,6 @@
 #define BITMAP_START_MAGIC 374031
 #define BITMAP_END_MAGIC 7786472
 
-
-FILE * open_file (char * filename, char * option)
-{
-    FILE * fp = fopen (filename, option);
-    if (!fp) {
-	reiserfs_warning (stderr, "open_file: could not open file %s\n", filename);
-	return 0;
-    }
-    reiserfs_warning (stderr, "Temp file opened by fsck: \"%s\" .. \n", filename);
-    return fp;
-}
-
-
-void close_file (FILE * fp)
-{
-    fclose (fp);
-    /*reiserfs_warning (stderr, "done\n"); fflush (stderr);*/
-}
-
-
 void reiserfs_bitmap_save (FILE * fp, reiserfs_bitmap_t * bm)
 {
 //    FILE * fp;
@@ -437,15 +522,14 @@
 
   /*  fp = fopen (filename, "w+");
     if (!fp) {
-	reiserfs_warning (stderr, "reiserfs_bitmap_save: could not save bitmap in %s: %s",
-			  filename, strerror(errno));
+	reiserfs_warning (stderr, "reiserfs_bitmap_save: could not save "
+			  "bitmap in %s: %s", filename, strerror(errno));
 	return;
     }*/
 
 
-//    reiserfs_warning (stderr, "Saving bitmap in \"%s\" .. ", filename); fflush (stderr);
-
-	
+/*  reiserfs_warning (stderr, "Saving bitmap in \"%s\" .. ", filename); 
+    fflush (stderr);*/	
 
     v = BITMAP_START_MAGIC;
     fwrite (&v, 4, 1, fp);
@@ -458,7 +542,8 @@
     position = ftell(fp);
 
     if (fseek (fp, 4, SEEK_CUR)) {
-	reiserfs_warning (stderr, "reiserfs_bitmap_save: fseek failed: %s\n", strerror(errno));
+	reiserfs_warning (stderr, "reiserfs_bitmap_save: fseek failed: %s\n", 
+			  strerror(errno));
 //	fclose (fp);
 	return;
     }
@@ -509,14 +594,16 @@
     fwrite (&v, 4, 1, fp);
 
     if (fseek (fp, position, SEEK_SET)) {
-	reiserfs_warning (stderr, "reiserfs_bitmap_save: fseek failed: %s", strerror(errno));
+	reiserfs_warning (stderr, "reiserfs_bitmap_save: fseek failed: %s", 
+			  strerror(errno));
 	return;
     }
 
     fwrite (&extents, 4, 1, fp);
 
     if (fseek (fp, 0, SEEK_END)) {
-	reiserfs_warning (stderr, "reiserfs_bitmap_save: fseek failed: %s", strerror(errno));
+	reiserfs_warning (stderr, "reiserfs_bitmap_save: fseek failed: %s", 
+			  strerror(errno));
 	return;
     }
 }
@@ -531,62 +618,6 @@
    bitmap of bad_unfm
    magic number                 (32 bits) */
 
-#define FSCK_DUMP_START_MAGIC 374033
-#define FSCK_DUMP_END_MAGIC 7786470
-
-
-void reiserfs_begin_stage_info_save(FILE * file, unsigned long stage)
-{
-    __u32 v = FSCK_DUMP_START_MAGIC;
-    fwrite (&v, 4, 1, file);
-    fwrite (&stage, 4, 1, file);
-}
-
-
-void reiserfs_end_stage_info_save(FILE * file)
-{
-    __u32 v = FSCK_DUMP_END_MAGIC;
-    fwrite (&v, 4, 1, file);
-}
-
-
-/*return last passed stage*/
-int is_stage_magic_correct (FILE * fp)
-{
-    __u32 v;
-
-    if (fseek (fp, -4, SEEK_END)) {
-	reiserfs_warning (stderr, "is_stage_magic_correct: fseek failed: %s\n", 
-	    strerror(errno));
-	return -1;
-    }
-
-    fread (&v, 4, 1, fp);
-    if (v != FSCK_DUMP_END_MAGIC) {
-	reiserfs_warning (stderr, "is_stage_magic_correct: no magic found\n");	
-	return -1;
-    }
-
-    if (fseek (fp, 0, SEEK_SET)) {
-	reiserfs_warning (stderr, "is_stage_magic_correct: fseek failed: %s\n", 
-	    strerror(errno));
-	return -1;
-    }
-
-    fread (&v, 4, 1, fp);
-    if (v != FSCK_DUMP_START_MAGIC) {
-	reiserfs_warning (stderr, "is_stage_magic_correct: no magic found\n");	
-	return -1;
-    }
-
-    fread (&v, 4, 1, fp);
-    if (v != PASS_0_DONE && v != PASS_1_DONE && v != TREE_IS_BUILT && v != SEMANTIC_DONE && v != LOST_FOUND_DONE) {
-	reiserfs_warning (stderr, "is_stage_magic_correct: wrong pass found");	
-	return -1;
-    }
-
-    return (__u16)v;
-}
 
 
 reiserfs_bitmap_t * reiserfs_bitmap_load (FILE * fp)
@@ -601,7 +632,8 @@
     
 /*    fp = fopen (filename, "r");
     if (!fp) {
-	reiserfs_warning (stderr, "reiserfs_bitmap_load: fopen failed: %s\n", strerror(errno));
+	reiserfs_warning (stderr, "reiserfs_bitmap_load: fopen failed: %s\n", 
+			  strerror(errno));
 	return 0;
     }*/
 
@@ -616,7 +648,7 @@
     /* read bit size of bitmap */
     fread (&v, 4, 1, fp);
 
-    bm = reiserfs_create_bitmap (v);
+    bm = reiserfs_bitmap_create (v);
     if (!bm) {
 	reiserfs_warning (stderr, "reiserfs_bitmap_load: creation failed");	
 //	fclose (fp);
@@ -655,76 +687,73 @@
 	return 0;
     }
 
-    /*    reiserfs_warning (stderr, "%d bits set - done\n", reiserfs_bitmap_ones (bm));*/
+/*    reiserfs_warning (stderr, "%d bits set - done\n", 
+			reiserfs_bitmap_ones (bm));*/
     fflush (stderr);
     return bm;
 }
 
 
-void reiserfs_bitmap_invert (reiserfs_bitmap_t * bm)
-{
-    unsigned int i;
-
-    /*reiserfs_warning (stderr, "Bitmap inverting..");fflush (stderr);*/
-    for (i = 0; i < bm->bm_bit_size; i ++) {
-	if (reiserfs_bitmap_test_bit (bm, i))
-	    reiserfs_bitmap_clear_bit (bm, i);
-	else
-	    reiserfs_bitmap_set_bit (bm, i);
+int reiserfs_bitmap_block (reiserfs_filsys_t * fs, unsigned long block) {
+    unsigned int bmap_nr;
+    
+    if (reiserfs_bitmap_spread (fs)) {
+	if (!(block % (fs->fs_blocksize * 8)))
+	    /* bitmap block */
+	    return 1;
+	return ((REISERFS_DISK_OFFSET_IN_BYTES / fs->fs_blocksize + 1) 
+		== block);
+    } else {
+	bmap_nr = reiserfs_bmap_nr(reiserfs_sb_get_blocks(fs->fs_ondisk_sb),
+				   fs->fs_blocksize);
+	
+	/* bitmap in */
+	return (block > 2ul && block < 3ul + bmap_nr) ? 1 : 0;
     }
-
-    /*reiserfs_warning (stderr, "done\n");*/
+    
+    return 0;
 }
 
-
-void reiserfs_free_ondisk_bitmap (reiserfs_filsys_t * fs)
+/* read bitmap of disk and print details */
+void reiserfs_bitmap_print (FILE * fp, reiserfs_filsys_t * fs, int silent)
 {
-    if (fs->fs_bitmap2) {
-	reiserfs_delete_bitmap (fs->fs_bitmap2);
-	fs->fs_bitmap2 = 0;
+    reiserfs_sb_t * sb;
+    int bmap_nr;
+    int i;
+    int bits_per_block;
+    int blocks;
+    unsigned long block;
+    reiserfs_bh_t * bh;
+
+
+    sb = fs->fs_ondisk_sb;
+    bits_per_block = fs->fs_blocksize * 8;
+    blocks = bits_per_block;
+    bmap_nr = reiserfs_bmap_nr(reiserfs_sb_get_blocks(fs->fs_ondisk_sb),
+			       fs->fs_blocksize);
+
+    reiserfs_warning (fp, "Bitmap blocks are:\n");
+    block = fs->fs_super_bh->b_blocknr + 1;
+    for (i = 0; i < bmap_nr; i ++) {
+	bh = reiserfs_buffer_read (fs->fs_dev, block, fs->fs_blocksize);
+	if (!bh) {
+	    reiserfs_warning (stderr, "reiserfs_bitmap_print: reiserfs_buffer_read "
+			      "failed for %d: %lu\n", i, block);
+	    continue;
+	}
+	if (i == bmap_nr - 1)
+	    if (reiserfs_sb_get_blocks (sb) % bits_per_block)
+		blocks = reiserfs_sb_get_blocks (sb) % bits_per_block;
+	reiserfs_print_bmap_block (fp, i, block, bh->b_data, blocks, 
+				   silent, fs->fs_blocksize);
+	
+	reiserfs_buffer_close (bh);
+
+	if (reiserfs_bitmap_spread (fs))
+	    block = (block / (fs->fs_blocksize * 8) + 1) * 
+		    (fs->fs_blocksize * 8);
+	else {
+	    block ++;
+	}
     }
 }
-
-
-/* read bitmap blocks */
-int reiserfs_open_ondisk_bitmap (reiserfs_filsys_t * fs)
-{
-    if (fs->fs_bitmap2)
-	reiserfs_panic ("bitmap is initiaized already");
-
-    fs->fs_bitmap2 = reiserfs_create_bitmap (get_sb_block_count (fs->fs_ondisk_sb));
-    if (!fs->fs_bitmap2)
-	return -1;
-
-    if ((get_sb_block_count (fs->fs_ondisk_sb) + fs->fs_blocksize * 8 - 1) / 
-	(fs->fs_blocksize * 8) != get_sb_bmap_nr (fs->fs_ondisk_sb)) 
-    {
-	reiserfs_warning (stderr, "%s: wrong either bitmaps number,\n", __FUNCTION__);
-	reiserfs_warning (stderr, "count of blocks or blocksize, run with --rebuild-sb "
-	    "to fix it\n");
-	return -1;
-    }    	
-
-    return reiserfs_fetch_ondisk_bitmap (fs->fs_bitmap2, fs);
-}
-
-int reiserfs_create_ondisk_bitmap (reiserfs_filsys_t * fs)
-{
-    if (fs->fs_bitmap2)
-	reiserfs_panic ("bitmap is initiaized already");
-
-    fs->fs_bitmap2 = reiserfs_create_bitmap (get_sb_block_count (fs->fs_ondisk_sb));
-    if (!fs->fs_bitmap2)
-	return 0;
-
-    return 1;
-}
-
-
-void reiserfs_close_ondisk_bitmap (reiserfs_filsys_t * fs)
-{
-    if (!fs->fs_bitmap2)
-	return;
-    reiserfs_flush_to_ondisk_bitmap (fs->fs_bitmap2, fs);
-    reiserfs_free_ondisk_bitmap (fs);
-}
diff --git a/libreiserfs/buffer.c b/libreiserfs/buffer.c
new file mode 100644
index 0000000..b2762ac
--- /dev/null
+++ b/libreiserfs/buffer.c
@@ -0,0 +1,707 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+#include "misc/malloc.h"
+
+#include <sys/types.h>
+#include <unistd.h>
+#include <errno.h>
+
+static int is_bad_block (unsigned long block)
+{
+#ifdef IO_FAILURE_EMULATION
+    
+    /* this array similates bad blocks on the device */
+    unsigned long bad_blocks [] =
+	{
+	    8208, 8209, 8210
+/*, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19*/
+	};
+    int i;
+    
+    for (i = 0; i < sizeof (bad_blocks) / sizeof (bad_blocks[0]); i ++)
+	if (bad_blocks [i] == block)
+	    return 1;
+
+#endif
+
+    return 0;
+}
+
+
+
+/* All buffers are in double linked cycled list.  If reiserfs_buffer_open found buffer with
+   wanted block number in hash queue it moves buffer to the end of list. */
+
+static int g_nr_buffers;
+
+
+static unsigned long buffers_memory;
+
+/* create buffers until we spend this fraction of system memory, this
+** is a hard limit on the amount of buffer ram used
+*/
+#define BUFFER_MEMORY_FRACTION 10
+
+/* number of bytes in local buffer cache before we start forcing syncs
+** of dirty data and reusing unused buffers instead of allocating new
+** ones.  If a flush doesn't find reusable buffers, new ones are
+** still allocated up to the BUFFER_MEMORY_FRACTION percentage
+**
+*/
+#define BUFFER_SOFT_LIMIT (500 * 1024)
+static unsigned long buffer_soft_limit = BUFFER_SOFT_LIMIT;
+
+
+#define NR_HASH_QUEUES 4096
+static reiserfs_bh_t * g_a_hash_queues [NR_HASH_QUEUES];
+static reiserfs_bh_t * Buffer_list_head;
+static reiserfs_bh_t * g_free_buffers = NULL ;
+static reiserfs_bh_t * g_buffer_heads;
+static int buffer_hits = 0 ;
+static int buffer_misses = 0 ;
+static int buffer_reads = 0 ;
+static int buffer_writes = 0 ;
+
+
+
+static void _show_buffers(reiserfs_bh_t **list, int dev, unsigned long size) {
+    int all = 0;
+    int dirty = 0;
+    int in_use = 0; /* count != 0 */
+    int free = 0;
+    reiserfs_bh_t * next;
+
+    next = *list;
+    if (!next)
+        return ;
+
+    for (;;) {
+	if (next->b_dev == dev && next->b_size == size) {
+	    all ++;
+	    if (next->b_count != 0) {
+		in_use ++;
+	    }
+	    if (reiserfs_buffer_isdirty (next)) {
+		dirty ++;
+	    }
+	    if (reiserfs_buffer_isclean (next) && next->b_count == 0) {
+		free ++;
+	    }
+	}
+	next = next->b_next;
+	if (next == *list)
+	    break;
+    }
+
+    printf("show_buffers (dev %d, size %lu): free %d, count != 0 %d, dirty %d, "
+	"all %d\n", dev, size, free, in_use, dirty, all);
+}
+
+
+static void show_buffers (int dev, int size)
+{
+    _show_buffers(&Buffer_list_head, dev, size) ;
+    _show_buffers(&g_free_buffers, dev, size) ;
+}
+
+
+static void insert_into_hash_queue (reiserfs_bh_t * bh)
+{
+    int index = bh->b_blocknr % NR_HASH_QUEUES;
+
+    if (bh->b_hash_prev || bh->b_hash_next)
+	misc_die ("insert_into_hash_queue: hash queue corrupted");
+
+    if (g_a_hash_queues[index]) {
+	g_a_hash_queues[index]->b_hash_prev = bh;
+	bh->b_hash_next = g_a_hash_queues[index];
+    }
+    g_a_hash_queues[index] = bh;
+}
+
+
+static void remove_from_hash_queue (reiserfs_bh_t * bh)
+{
+    if (bh->b_hash_next == 0 && 
+	bh->b_hash_prev == 0 && 
+	bh != g_a_hash_queues[bh->b_blocknr % NR_HASH_QUEUES])
+    {
+	/* (b_dev == -1) ? */
+	return;
+    }
+
+    if (bh == g_a_hash_queues[bh->b_blocknr % NR_HASH_QUEUES]) {
+	if (bh->b_hash_prev != 0)
+	    misc_die ("remove_from_hash_queue: hash queue corrupted");
+	g_a_hash_queues[bh->b_blocknr % NR_HASH_QUEUES] = bh->b_hash_next;
+    }
+    if (bh->b_hash_next)
+	bh->b_hash_next->b_hash_prev = bh->b_hash_prev;
+
+    if (bh->b_hash_prev)
+	bh->b_hash_prev->b_hash_next = bh->b_hash_next;
+
+    bh->b_hash_prev = bh->b_hash_next = 0;
+}
+
+
+static void put_buffer_list_end (reiserfs_bh_t **list,
+                                 reiserfs_bh_t * bh)
+{
+    reiserfs_bh_t * last = 0;
+
+    if (bh->b_prev || bh->b_next)
+	misc_die ("put_buffer_list_end: buffer list corrupted");
+
+    if (*list == 0) {
+	bh->b_next = bh;
+	bh->b_prev = bh;
+	*list = bh;
+    } else {
+	last = (*list)->b_prev;
+
+	bh->b_next = last->b_next;
+	bh->b_prev = last;
+	last->b_next->b_prev = bh;
+	last->b_next = bh;
+    }
+}
+
+
+static void remove_from_buffer_list (reiserfs_bh_t **list,
+                                     reiserfs_bh_t * bh)
+{
+    if (bh == bh->b_next) {
+	*list = 0;
+    } else {
+	bh->b_prev->b_next = bh->b_next;
+	bh->b_next->b_prev = bh->b_prev;
+	if (bh == *list)
+	    *list = bh->b_next;
+    }
+
+    bh->b_next = bh->b_prev = 0;
+}
+
+
+static void put_buffer_list_head (reiserfs_bh_t **list,
+                                  reiserfs_bh_t * bh)
+{
+    put_buffer_list_end (list, bh);
+    *list = bh;
+}
+
+/*
+#include <sys/mman.h>
+
+static size_t estimate_memory_amount (void)
+{
+    size_t len = 1;
+    size_t max = 0;
+    void * addr;
+
+    while (len > 0) {
+	addr = mmap (0, len, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+	if (addr == MAP_FAILED) {
+	    if (errno != ENOMEM)
+		misc_die ("mmap failed: %s\n", strerror(errno));
+	    break;
+	}
+	if (mlock (addr, len) != 0) {
+	    if (errno == EPERM)
+		misc_die ("No permission to run mlock");
+	    break;
+	}
+
+	munlock (addr, len);
+	munmap (addr, len);
+	max = len;
+	len *= 2;
+    }
+
+    // * If we've looped, we don't want to return 0, we want to return the
+    // * last successful len before we looped. In the event that mmap/mlock
+    // * failed for len = 1, max will still be 0, so we don't get an invalid
+    // * result
+    return max;
+}
+*/
+
+#define GROW_BUFFERS__NEW_BUFERS_PER_CALL 10
+
+/* creates number of new buffers and insert them into head of buffer list */
+static int grow_buffers (int size)
+{
+    int i;
+    reiserfs_bh_t * bh, * tmp;
+
+
+    /* get memory for array of buffer heads */
+    bh = (reiserfs_bh_t *)misc_getmem (GROW_BUFFERS__NEW_BUFERS_PER_CALL * 
+				       sizeof (reiserfs_bh_t) + sizeof (reiserfs_bh_t *));
+    if (g_buffer_heads == 0)
+	g_buffer_heads = bh;
+    else {
+	/* link new array to the end of array list */
+	tmp = g_buffer_heads;
+	while (*(reiserfs_bh_t **)(tmp + GROW_BUFFERS__NEW_BUFERS_PER_CALL) != 0)
+	    tmp = *(reiserfs_bh_t **)(tmp + GROW_BUFFERS__NEW_BUFERS_PER_CALL);
+	*(reiserfs_bh_t **)(tmp + GROW_BUFFERS__NEW_BUFERS_PER_CALL) = bh;
+    }
+
+    for (i = 0; i < GROW_BUFFERS__NEW_BUFERS_PER_CALL; i ++) {
+
+	tmp = bh + i;
+	memset (tmp, 0, sizeof (reiserfs_bh_t));
+	tmp->b_data = misc_getmem (size);
+	if (tmp->b_data == 0)
+	    misc_die ("grow_buffers: no memory for new buffer data");
+	tmp->b_dev = -1;
+	tmp->b_size = size;
+	put_buffer_list_head (&g_free_buffers, tmp);
+    }
+    buffers_memory += GROW_BUFFERS__NEW_BUFERS_PER_CALL * size;
+    g_nr_buffers += GROW_BUFFERS__NEW_BUFERS_PER_CALL;
+    return GROW_BUFFERS__NEW_BUFERS_PER_CALL;
+}
+
+
+reiserfs_bh_t *reiserfs_buffer_find (int dev, 
+				     unsigned long block, 
+				     unsigned long size)
+{
+    reiserfs_bh_t * next;
+
+    next = g_a_hash_queues[block % NR_HASH_QUEUES];
+    for (;;) {
+	reiserfs_bh_t *tmp = next;
+	if (!next)
+	    break;
+	next = tmp->b_hash_next;
+	if (tmp->b_blocknr != block || tmp->b_size != size || tmp->b_dev != dev)
+	    continue;
+	next = tmp;
+	break;
+    }
+    return next;
+}
+
+
+static reiserfs_bh_t * get_free_buffer (reiserfs_bh_t **list,
+					unsigned long size)
+{
+    reiserfs_bh_t * next;
+
+    next = *list;
+    if (!next)
+	return 0;
+
+    for (;;) {
+	if (!next)
+	    misc_die ("get_free_buffer: buffer list is corrupted");
+	if (next->b_count == 0 && reiserfs_buffer_isclean (next) && next->b_size == size) {
+	    remove_from_hash_queue (next);
+	    remove_from_buffer_list (list, next);
+	    return next;
+	}
+	next = next->b_next;
+	if (next == *list)
+	    break;
+    }
+    return 0;
+}
+
+
+/* to_write == 0 when all blocks have to be flushed. Otherwise - write only
+   buffers with b_count == 0 */
+static int sync_buffers (reiserfs_bh_t **list, int dev, int to_write) {
+    reiserfs_bh_t * next;
+    int written = 0;
+
+
+restart:
+    next = *list;
+    if (!next)
+	return 0;
+    for (;;) {
+	if (!next)
+	    misc_die ("sync_buffers: buffer list is corrupted");
+ 
+	if (next->b_dev == dev && reiserfs_buffer_isdirty (next) && reiserfs_buffer_uptodate (next)) {
+	    if ((to_write == 0 || next->b_count == 0) && !reiserfs_buffer_noflush (next)) {
+		reiserfs_buffer_write (next);
+	    }
+	}
+    
+	/* if this buffer is reusable, put it onto the end of the free list */
+	if (next->b_count == 0 && reiserfs_buffer_isclean(next)) {
+	    remove_from_hash_queue (next);
+	    remove_from_buffer_list (list, next);
+	    put_buffer_list_end (&g_free_buffers, next);
+	    written++ ;
+	    if (written == to_write)
+		return written;
+	    goto restart;
+	}
+	if (to_write && written >= to_write)
+	    return written;
+
+	next = next->b_next;
+	if (next == *list)
+	    break;
+    }
+
+    return written;
+}
+
+void reiserfs_buffer_flush_all (int dev) {
+    if (dev == -1)
+	misc_die ("reiserfs_buffer_flush_all: device is not specified");
+
+    sync_buffers (&Buffer_list_head, dev, 0/*all*/);
+    buffer_soft_limit = BUFFER_SOFT_LIMIT;
+}
+
+
+reiserfs_bh_t * reiserfs_buffer_open (int dev, unsigned long block, 
+				      unsigned long size)
+{
+    reiserfs_bh_t * bh;
+
+    bh = reiserfs_buffer_find (dev, block, size);
+    if (bh) {
+	/* move the buffer to the end of list */
+
+	/*checkmem (bh->b_data, bh->b_size);*/
+
+	remove_from_buffer_list (&Buffer_list_head, bh);
+	put_buffer_list_end (&Buffer_list_head, bh);
+	bh->b_count ++;
+	buffer_hits++ ;
+	return bh;
+    }
+    buffer_misses++ ;
+
+    bh = get_free_buffer (&g_free_buffers, size);
+    if (bh == NULL) {
+	if (buffers_memory >= buffer_soft_limit) {
+	    if (sync_buffers (&Buffer_list_head, dev, 32) == 0) {
+		grow_buffers(size);
+		buffer_soft_limit = buffers_memory + 
+			GROW_BUFFERS__NEW_BUFERS_PER_CALL * size;
+	    }
+	} else {
+	    if (grow_buffers(size) == 0)
+		sync_buffers (&Buffer_list_head, dev, 32);
+	}
+
+	bh = get_free_buffer (&g_free_buffers, size);
+	if (bh == NULL) {
+	    show_buffers (dev, size);
+	    misc_die ("reiserfs_buffer_open: no free buffers after grow_buffers "
+		 "and refill (%d)", g_nr_buffers);
+	}
+    }
+
+    bh->b_count = 1;
+    bh->b_dev = dev;
+    bh->b_size = size;
+    bh->b_blocknr = block;
+    bh->b_end_io = NULL ;
+    memset (bh->b_data, 0, size);
+    misc_clear_bit(BH_Dirty, &bh->b_state);
+    misc_clear_bit(BH_Uptodate, &bh->b_state);
+
+    put_buffer_list_end (&Buffer_list_head, bh);
+    insert_into_hash_queue (bh);
+    /*checkmem (bh->b_data, bh->b_size);*/
+
+    return bh;
+}
+
+
+void reiserfs_buffer_close (reiserfs_bh_t * bh)
+{
+    if (bh == 0)
+	return;
+    
+    if (bh->b_count == 0)
+	misc_die ("reiserfs_buffer_close: can not free a free buffer %lu", bh->b_blocknr);
+    
+    /*checkmem (bh->b_data, misc_memsize (bh->b_data));*/
+    
+    bh->b_count --;
+}
+
+
+void reiserfs_buffer_forget (reiserfs_bh_t * bh) {
+    if (bh) {
+	bh->b_state = 0;
+	reiserfs_buffer_close (bh);
+	remove_from_hash_queue (bh);
+	remove_from_buffer_list(&Buffer_list_head, bh);
+	put_buffer_list_head(&Buffer_list_head, bh);
+    }
+}
+
+/* Returns 0 on success; 1 - end of file; 0 - OK. */
+static int f_read(reiserfs_bh_t * bh)
+{
+    unsigned long long offset;
+    ssize_t bytes;
+
+    buffer_reads++ ;
+
+    offset = (unsigned long long)bh->b_size * bh->b_blocknr;
+    if (lseek (bh->b_dev, offset, SEEK_SET) < 0)
+	return -1;
+
+    bytes = read (bh->b_dev, bh->b_data, bh->b_size);
+    
+    return bytes < 0 ? -1 : (bytes != (ssize_t)bh->b_size ? 1 : 0);
+}
+
+#define check_hd_msg								\
+"\nThe problem has occurred looks like a hardware problem. If you have\n"	\
+"bad blocks, we advise you to get a new hard drive, because once you\n"		\
+"get one bad block  that the disk  drive internals  cannot hide from\n"		\
+"your sight,the chances of getting more are generally said to become\n"		\
+"much higher  (precise statistics are unknown to us), and  this disk\n"		\
+"drive is probably not expensive enough  for you to you to risk your\n"		\
+"time and  data on it.  If you don't want to follow that follow that\n"		\
+"advice then  if you have just a few bad blocks,  try writing to the\n"		\
+"bad blocks  and see if the drive remaps  the bad blocks (that means\n"		\
+"it takes a block  it has  in reserve  and allocates  it for use for\n"		\
+"of that block number).  If it cannot remap the block,  use badblock\n"		\
+"option (-B) with  reiserfs utils to handle this block correctly.\n"		\
+
+reiserfs_bh_t *reiserfs_buffer_read (int dev, unsigned long block, 
+				     unsigned long size)
+{
+    reiserfs_bh_t * bh;
+    int ret;
+
+    if (is_bad_block (block))
+	return 0;
+
+    bh = reiserfs_buffer_open (dev, block, size);
+    
+    /*checkmem (bh->b_data, misc_memsize(bh->b_data));*/
+    
+    if (reiserfs_buffer_uptodate (bh))
+	return bh;
+
+    ret = f_read(bh);
+    
+    if (ret > 0) {
+	misc_die ("%s: End of file, cannot read the block (%lu).\n", 
+	     __FUNCTION__, block);
+    } else if (ret < 0) {
+	/* BAD BLOCK LIST SUPPORT
+	 * misc_die ("%s: Cannot read a block # %lu. Specify list of badblocks\n",*/
+
+	if (errno == EIO) {
+	    fprintf(stderr, check_hd_msg);
+	    misc_die ("%s: Cannot read the block (%lu): (%s).\n", 
+		 __FUNCTION__, block, strerror(errno));
+	} else	{
+	    fprintf (stderr, "%s: Cannot read the block (%lu): (%s).\n", 
+		     __FUNCTION__, block, strerror(errno));
+	    return NULL;
+	}
+    }
+       
+    reiserfs_buffer_mkuptodate (bh, 0);
+    return bh;
+}
+
+/* for now - just make sure that bad blocks did not get here */
+int reiserfs_buffer_write (reiserfs_bh_t * bh)
+{
+    off_t offset;
+    long long bytes, size;
+
+    if (is_bad_block (bh->b_blocknr)) {
+	fprintf (stderr, "reiserfs_buffer_write: bad block is going to be written: %lu\n",
+		 bh->b_blocknr);
+	exit(8);
+    }
+
+    if (!reiserfs_buffer_isdirty (bh) || !reiserfs_buffer_uptodate (bh))
+	return 0;
+
+    buffer_writes++ ;
+    if (bh->b_start_io)
+	/* this is used by undo feature of reiserfsck */
+	bh->b_start_io (bh->b_blocknr);
+
+    size = bh->b_size;
+    offset = (off_t)size * bh->b_blocknr;
+
+    if (lseek (bh->b_dev, offset, SEEK_SET) == (long long int)-1){
+	fprintf (stderr, "reiserfs_buffer_write: lseek to position %llu (block=%lu, dev=%d): %s\n",
+	    offset, bh->b_blocknr, bh->b_dev, strerror(errno));
+	exit(8); /* File system errors left uncorrected */
+    }
+
+#ifdef ROLLBACK_READY
+    if (s_rollback_file != NULL && bh->b_size == (unsigned long)rollback_blocksize) {
+        struct stat buf;
+        int position;
+	struct block_handler block_h;
+        
+        /*log previous content into the log*/
+        if (!fstat (bh->b_dev, &buf)) {
+	    block_h.blocknr = bh->b_blocknr;
+	    block_h.device = buf.st_rdev;
+	    if (misc_bin_search(&block_h, rollback_blocks_array, 
+				rollback_blocks_number, sizeof (block_h), 
+				&position, blockdev_list_compare) != 1)
+	    {
+                /*read initial data from the disk*/
+                if (read(bh->b_dev, rollback_data, bh->b_size) == (long long)bh->b_size) {
+                    fwrite(&buf.st_rdev, sizeof (buf.st_rdev), 1, s_rollback_file);
+                    fwrite(&offset, sizeof (offset), 1, s_rollback_file);
+                    fwrite(rollback_data, rollback_blocksize, 1, s_rollback_file);
+                    fflush(s_rollback_file);
+                    blocklist__insert_in_position(&block_h, (void *)(&rollback_blocks_array),
+			&rollback_blocks_number, sizeof(block_h), &position);
+		    
+                    /*if you want to know what gets saved, uncomment it*/
+/*                    if (log_file != 0 && log_file != stdout) {
+                        fprintf (log_file, "rollback: block %lu of device %Lu was "
+			    "backed up\n", bh->b_blocknr, buf.st_rdev);
+                    }
+*/
+                    
+                } else {
+                    fprintf (stderr, "reiserfs_buffer_write: read (block=%lu, dev=%d): %s\n", 
+			bh->b_blocknr, bh->b_dev, strerror (errno));
+                    exit(8);
+                }
+		
+                if (lseek (bh->b_dev, offset, SEEK_SET) == (long long int)-1) {
+                    fprintf (stderr, "reiserfs_buffer_write: lseek to position %llu (block=%lu, "
+			"dev=%d): %s\n", offset, bh->b_blocknr, bh->b_dev, 
+			strerror(errno));
+                    exit(8);
+                }
+            }
+        } else {
+            fprintf (stderr, "reiserfs_buffer_write: fstat of (%d) returned -1: %s\n", 
+		bh->b_dev, strerror(errno));
+        }
+    } else if (s_rollback_file != NULL) {
+	fprintf (stderr, "rollback: block (%lu) has the size different from "
+	    "the fs uses, block skipped\n", bh->b_blocknr);
+    }
+#endif
+
+    bytes = write(bh->b_dev, bh->b_data, size);
+    if (bytes != size) {
+	fprintf (stderr, "reiserfs_buffer_write: write %lld bytes returned %lld (block=%ld, "
+	    "dev=%d): %s\n", size, bytes, bh->b_blocknr, bh->b_dev, 
+	    strerror(errno));
+	exit(8);
+    }
+
+    reiserfs_buffer_mkclean (bh);
+
+    if (bh->b_end_io) {
+	bh->b_end_io(bh, 1) ;
+    }
+
+    return 0;
+}
+
+
+static int _check_and_free_buffer_list(reiserfs_bh_t *list) {
+    reiserfs_bh_t *next = list ;
+    int count = 0 ;
+    if (!list)
+	return 0 ;
+
+    for(;;) {
+	if (next->b_count != 0)
+	    fprintf (stderr, "check_and_free_buffer_mem: not free buffer "
+		"(%d, %ld, %ld, %d)\n", next->b_dev, next->b_blocknr, 
+		next->b_size, next->b_count);
+
+	if (reiserfs_buffer_isdirty (next) && reiserfs_buffer_uptodate (next))
+	    fprintf (stderr, "check_and_free_buffer_mem: dirty buffer "
+		"(%d %lu) found\n", next->b_dev, next->b_blocknr);
+
+	misc_freemem (next->b_data);
+	count++;
+	next = next->b_next;
+	if (next == list)
+            break;
+    }
+    return count;
+}
+
+void reiserfs_buffer_free_all (void) {
+    int count = 0;
+    reiserfs_bh_t * next ;
+
+//    printf("check and free buffer mem, hits %d misses %d reads %d writes %d\n", 
+//	    buffer_hits, buffer_misses, buffer_reads, buffer_writes) ;
+    /*sync_buffers (0, 0);*/
+
+    count = _check_and_free_buffer_list(Buffer_list_head);
+    count += _check_and_free_buffer_list(g_free_buffers);
+
+    if (count != g_nr_buffers)
+       misc_die ("check_and_free_buffer_mem: found %d buffers, must be %d", 
+	    count, g_nr_buffers);
+
+    /* free buffer heads */
+    while ((next = g_buffer_heads)) {
+	g_buffer_heads = *(reiserfs_bh_t **)
+		(next + GROW_BUFFERS__NEW_BUFERS_PER_CALL);
+
+	misc_freemem (next);
+    }
+  
+    return;
+}
+
+static void _invalidate_buffer_list(reiserfs_bh_t *list, int dev)
+{
+    reiserfs_bh_t * next;
+
+    if (!list)
+	return;
+
+    next = list;
+
+    for (;;) {
+	if (next->b_dev == dev) {
+	    if (reiserfs_buffer_isdirty (next) || next->b_count)
+		fprintf (stderr, "invalidate_buffer_list: dirty "
+			 "buffer or used buffer (%d %lu) found\n", 
+			 next->b_count, next->b_blocknr);
+	    
+	    next->b_state = 0;
+	    remove_from_hash_queue (next);
+	}
+	
+	next = next->b_next;
+	if (next == list)
+	    break;
+    }
+}
+
+/* forget all buffers of the given device */
+void reiserfs_buffer_invalidate_all (int dev) {
+    _invalidate_buffer_list(Buffer_list_head, dev) ;
+    _invalidate_buffer_list(g_free_buffers, dev) ;
+}
diff --git a/libreiserfs/direntry.c b/libreiserfs/direntry.c
new file mode 100644
index 0000000..b6c4092
--- /dev/null
+++ b/libreiserfs/direntry.c
@@ -0,0 +1,166 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+/* length of the directory entry in directory item. This define calculates
+   length of i-th directory entry using directory entry locations from dir
+   entry head. When it calculates length of 0-th directory entry, it uses
+   length of whole item in place of entry location of the non-existent
+   following entry in the calculation.  See picture above.*/
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+
+// NOTE: this is not name length. This is length of whole entry
+int reiserfs_direntry_entry_len (reiserfs_ih_t * ih, 
+				 reiserfs_deh_t * deh, 
+				 int pos_in_item)
+{
+    if (pos_in_item)
+	return (reiserfs_deh_get_loc (deh - 1) - reiserfs_deh_get_loc (deh));
+    return (reiserfs_ih_get_len (ih) - reiserfs_deh_get_loc (deh));
+}
+
+
+int reiserfs_direntry_name_len (reiserfs_ih_t * ih,
+				reiserfs_deh_t * deh, 
+				int pos_in_item)
+{
+    int len, i;
+    char * name;
+
+    len = reiserfs_direntry_entry_len (ih, deh, pos_in_item);
+    name = reiserfs_deh_name (deh, pos_in_item);
+
+    // name might be padded with 0s
+    i = 0;
+    while (name[i] && i < len)
+	i++;
+
+    return i;
+}
+
+int reiserfs_direntry_entry_estimate (char * name, int key_format) {
+    if (key_format == KEY_FORMAT_2)
+    	return MISC_ROUND_UP (strlen(name));
+    else if (key_format == KEY_FORMAT_1)
+    	return strlen(name);
+
+    return -1;
+}
+
+/* the only corruption which is not considered fatal - is hash mismatching. If
+   bad_dir is set - directory item having such names is considered bad */
+int reiserfs_direntry_check (reiserfs_filsys_t * fs, 
+			     reiserfs_ih_t * ih, 
+			     char * item, 
+			     int bad_dir)
+{
+    int i;
+    int namelen;
+    reiserfs_deh_t * deh = (reiserfs_deh_t *)item;
+    __u32 prev_offset = 0;
+    __u16 prev_location = reiserfs_ih_get_len (ih);
+    
+    for (i = 0; i < reiserfs_ih_get_entries (ih); i ++, deh ++) {
+	if (reiserfs_deh_get_loc (deh) >= prev_location)
+	    return 1;
+	prev_location = reiserfs_deh_get_loc (deh);
+	    
+	namelen = reiserfs_direntry_name_len (ih, deh, i);
+	if (namelen > REISERFS_NAME_MAX)
+	    return 1;
+	
+	if (reiserfs_deh_get_off (deh) <= prev_offset)
+	    return 1;
+	prev_offset = reiserfs_deh_get_off (deh);
+	
+	/* check hash value */
+	if (!reiserfs_hash_correct (&fs->hash, 
+				    item + prev_location, 
+				    namelen, prev_offset)) 
+	{
+	    if (bad_dir)
+		/* make is_bad_leaf to not insert whole leaf. Node will be
+		   marked not-insertable and put into tree item by item in
+		   pass 2 */
+		return 1;
+	}
+    }
+
+    return 0;
+}
+
+int reiserfs_direntry_loc_check (reiserfs_deh_t * deh, 
+				 reiserfs_ih_t * ih, 
+				 int first)
+{
+    if (reiserfs_deh_get_loc (deh) < 
+	REISERFS_DEH_SIZE * reiserfs_ih_get_entries (ih))
+    {
+	return 1;
+    }
+    
+    if (reiserfs_deh_get_loc (deh) >= reiserfs_ih_get_len (ih))
+	return 1;
+
+    if (!first) {
+	if (reiserfs_deh_get_loc (deh) >= reiserfs_deh_get_loc (deh - 1))
+	    return 1;
+    }
+
+    return 0;
+}
+
+void reiserfs_direntry_print (FILE * fp, reiserfs_filsys_t * fs,
+			      reiserfs_bh_t * bh, reiserfs_ih_t * ih)
+{
+    int i;
+    int namelen;
+    reiserfs_deh_t * deh;
+    char * name;
+/*    static char namebuf [80];*/
+
+    if (!reiserfs_ih_dir (ih))
+	return;
+
+    /*printk ("\n%2%-25s%-30s%-15s%-15s%-15s\n", "    Name", "length", 
+		"Object key", "Hash", "Gen number", "Status"); */
+    
+    reiserfs_warning (fp, "%3s: %-25s%s%-22s%-12s%s\n", "###", "Name", 
+		      "length", "    Object key", "   Hash", "Gen number");
+    
+    deh = reiserfs_deh (bh, ih);
+    for (i = 0; i < reiserfs_ih_get_entries (ih); i ++, deh ++) {
+	if (reiserfs_direntry_loc_check (deh, ih, i == 0 ? 1 : 0)) {
+	    reiserfs_warning (fp, "%3d: wrong entry location %u, deh_offset %u\n",
+			      i, reiserfs_deh_get_loc (deh), reiserfs_deh_get_off (deh));
+	    continue;
+	}
+	if (i && reiserfs_direntry_loc_check (deh - 1, ih, ((i - 1) == 0) ? 1 : 0))
+	    /* previous entry has bad location so we can not calculate entry
+               length */
+	    namelen = 25;
+	else
+	    namelen = reiserfs_direntry_name_len (ih, deh, i);
+
+	name = reiserfs_deh_name (deh, i);
+	reiserfs_warning (fp, "%3d: \"%-25.*s\"(%3d)%20K%12d%5d, loc %u, "
+			  "state %x %s\n", i, namelen, name, namelen,
+			  (reiserfs_key_t *)&(deh->deh2_dir_id),
+			  OFFSET_HASH (reiserfs_deh_get_off (deh)),
+			  OFFSET_GEN (reiserfs_deh_get_off (deh)),
+			  reiserfs_deh_get_loc (deh), reiserfs_deh_get_state (deh),
+			  reiserfs_hash_name (reiserfs_hash_find (
+				name, namelen, reiserfs_deh_get_off (deh), 
+				fs ? reiserfs_sb_get_hash (fs->fs_ondisk_sb) : 
+				UNSET_HASH)));
+	
+	/*fs ? (reiserfs_hash_correct (&fs->hash, name, 
+		namelen, deh_offset (deh)) ? "" : "(BROKEN)") : "??");*/
+    }
+}
diff --git a/libreiserfs/extent.c b/libreiserfs/extent.c
new file mode 100644
index 0000000..a52ea38
--- /dev/null
+++ b/libreiserfs/extent.c
@@ -0,0 +1,103 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+#include "misc/unaligned.h"
+
+/* check item length, ih_free_space for pure 3.5 format, unformatted node
+   pointers */
+int reiserfs_ext_check (reiserfs_filsys_t * fs, 
+			     reiserfs_ih_t * ih, 
+			     char * item,
+			     unfm_func_t func)
+{
+    unsigned int i;
+    __u32 * ind = (__u32 *)item;
+
+    if (reiserfs_ih_get_len (ih) % REISERFS_EXT_SIZE)
+	return 1;
+
+    for (i = 0; i < reiserfs_ext_count (ih); i ++) {
+	if (!ind [i])
+	    continue;
+	if (func && func (fs, d32_get (ind, i)))
+	    return 1;
+    }
+
+    if (fs->fs_format == REISERFS_FORMAT_3_5) {
+	/* check ih_free_space for 3.5 format only */
+	if (reiserfs_ih_get_free (ih) > fs->fs_blocksize - 1)
+	    return 1;
+    }
+    
+    return 0;
+}
+
+//
+// printing of extent item
+//
+static void start_new_sequence (__u32 * start, int * len, __u32 new)
+{
+    *start = new;
+    *len = 1;
+}
+
+static int sequence_finished (__u32 start, int * len, __u32 new)
+{
+    if (le32_to_cpu (start) == MAX_INT)
+	return 1;
+
+    if (start == 0 && new == 0) {
+	(*len) ++;
+	return 0;
+    }
+    if (start != 0 && (le32_to_cpu (start) + *len) == le32_to_cpu (new)) {
+	(*len) ++;
+	return 0;
+    }
+    return 1;
+}
+
+static void print_sequence (FILE * fp, __u32 start, int len)
+{
+    if (start == MAX_INT)
+	return;
+
+    if (len == 1)
+	reiserfs_warning (fp, " %d", le32_to_cpu (start));
+    else
+	reiserfs_warning (fp, " %d(%d)", le32_to_cpu (start), len);
+}
+
+void reiserfs_ext_print(FILE * fp, 
+			     reiserfs_bh_t * bh, 
+			     int item_num)
+{
+    reiserfs_ih_t * ih;
+    unsigned int j;
+    __u32 * unp, prev = MAX_INT;
+    int num = 0;
+
+    ih = reiserfs_ih_at (bh, item_num);
+    unp = (__u32 *)reiserfs_item_by_ih (bh, ih);
+
+    if (reiserfs_ih_get_len (ih) % REISERFS_EXT_SIZE)
+	reiserfs_warning (fp, "reiserfs_ext_print: invalid item len");  
+
+    reiserfs_warning (fp, "%d pointer%s\n[", reiserfs_ext_count (ih),
+                      reiserfs_ext_count (ih) != 1 ? "s" : "" );
+    for (j = 0; j < reiserfs_ext_count (ih); j ++) {
+	if (sequence_finished (prev, &num, d32_get(unp, j))) {
+	    print_sequence (fp, prev, num);
+	    start_new_sequence (&prev, &num, d32_get(unp, j));
+	}
+    }
+    print_sequence (fp, prev, num);
+    reiserfs_warning (fp, "]\n");
+}
diff --git a/libreiserfs/filesystem.c b/libreiserfs/filesystem.c
new file mode 100644
index 0000000..960c0d6
--- /dev/null
+++ b/libreiserfs/filesystem.c
@@ -0,0 +1,480 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+#include "misc/malloc.h"
+#include "misc/device.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+int reiserfs_fs_blksize_check (unsigned int blocksize)
+{
+    return ((((blocksize & -blocksize) == blocksize) 
+	&& (blocksize >= 512) && (blocksize <= 8192)));
+}
+
+reiserfs_blktype_t reiserfs_fs_block(reiserfs_filsys_t *fs, 
+				     unsigned long block) 
+{
+    if (block < fs->fs_super_bh->b_blocknr ||
+	block >= reiserfs_sb_get_blocks (fs->fs_ondisk_sb))
+    {
+	return BT_INVAL;
+    }
+
+    if (block == fs->fs_super_bh->b_blocknr)
+	return BT_SUPER;
+
+    if (reiserfs_journal_block (fs, block))
+	return BT_JOURNAL;
+
+    if (reiserfs_bitmap_block(fs, block))
+	return BT_BITMAP;
+
+    return BT_UNKNOWN;
+}
+
+
+/* read super block. fixme: only 4k blocks, pre-journaled format
+   is refused. Journal and bitmap are to be opened separately.
+   skip_check is set to 1 if checks of openned SB should be omitted.*/
+reiserfs_filsys_t * reiserfs_fs_open (char * filename, int flags, 
+				      int *error, void * vp, int check)
+{
+    reiserfs_filsys_t * fs;
+    reiserfs_bh_t * bh;
+    reiserfs_sb_t * sb;
+    int fd, i;
+
+    if (error) 
+	*error = 0;
+
+    fd = open (filename, flags 
+#if defined(O_LARGEFILE)
+	       | O_LARGEFILE
+#endif
+	       );
+    if (fd == -1) {
+	if (error)
+	    *error = errno;
+	return 0;
+    }
+
+    fs = misc_getmem (sizeof (*fs));
+    fs->fs_dev = fd;
+    fs->fs_vp = vp;
+    strncpy(fs->fs_file_name, filename, sizeof(fs->fs_file_name));
+    
+    /* reiserfs super block is either in 16-th or in 2-nd 4k block of the
+       device */
+    for (i = 2; i < 17; i += 14) {
+	bh = reiserfs_buffer_read (fd, i, 4096);
+	if (!bh) {
+	    reiserfs_warning (stderr, "reiserfs_fs_open: reiserfs_buffer_read "
+			      "failed reading block %d\n", i);
+	} else {
+	    sb = (reiserfs_sb_t *)bh->b_data;
+	    
+	    if (reiserfs_super_magic(sb))
+		goto found;
+
+	    /* reiserfs signature is not found at the i-th 4k block */
+	    reiserfs_buffer_close (bh);
+	}
+    }
+
+    reiserfs_warning(stderr, "\nreiserfs_fs_open: the reiserfs superblock "
+		     "cannot be found on %s.\n", filename);
+    
+    misc_freemem (fs);
+    close (fd);
+    fs = NULL;
+    return fs;
+
+ found:
+
+    if (!reiserfs_fs_blksize_check(reiserfs_sb_get_blksize(sb))) {
+	reiserfs_warning(stderr, "reiserfs_fs_open: a superblock with "
+			 "wrong parameters was found in the block (%d).\n", i);
+	misc_freemem (fs);
+	close (fd);
+	reiserfs_buffer_close(bh);
+	return NULL;
+    }
+
+    if (check) {
+	/* A few checks of found super block. */
+	reiserfs_bh_t *tmp_bh;
+	
+	tmp_bh = reiserfs_buffer_read (fd, reiserfs_sb_get_blocks(sb) - 1, 
+				 reiserfs_sb_get_blksize(sb));
+	
+	if (!tmp_bh) {
+	    reiserfs_warning (stderr, "\n%s: Your partition is not big enough "
+			      "to contain the \nfilesystem of (%lu) blocks as "
+			      "was specified in the found super block.\n", 
+			      __FUNCTION__,  reiserfs_sb_get_blocks(sb) - 1);
+	    
+	    misc_freemem (fs);
+	    close (fd);
+	    reiserfs_buffer_close(bh);
+	    return NULL;
+	}
+	
+	reiserfs_buffer_close(tmp_bh);
+    }
+   
+    fs->fs_blocksize = reiserfs_sb_get_blksize (sb);
+    
+    /* check block size on the filesystem */
+    if (fs->fs_blocksize != 4096) {
+	i = bh->b_blocknr * 4096 / fs->fs_blocksize;
+	reiserfs_buffer_close (bh);
+	bh = reiserfs_buffer_read (fd, i, fs->fs_blocksize);
+	if (!bh) {
+	    reiserfs_warning (stderr, "reiserfs_fs_open: reiserfs_buffer_read "
+			      "failed reading block %d, size %d\n",
+			      i, fs->fs_blocksize);
+	    misc_freemem (fs);
+	    return 0;
+	}
+	sb = (reiserfs_sb_t *)bh->b_data;
+    }
+
+    fs->hash = reiserfs_hash_func (reiserfs_sb_get_hash (sb));
+    fs->fs_super_bh = bh;
+    fs->fs_ondisk_sb = sb;
+    fs->fs_flags = flags; /* O_RDONLY or O_RDWR */
+
+    fs->fs_format = reiserfs_super_format (sb);
+    
+    /*reiserfs_read_bitmap_blocks(fs);*/
+    if (flags & O_RDWR)
+	fs->fs_dirt  = 1;
+    else
+	fs->fs_dirt = 0;
+
+    return fs;
+}
+
+
+/* creates buffer for super block and fills it up with fields which are
+   constant for given size and version of a filesystem */
+reiserfs_filsys_t * reiserfs_fs_create (char * filename,
+					int version,
+					unsigned long block_count, 
+					int block_size, 
+					int default_journal, 
+					int new_format)
+{
+    reiserfs_filsys_t * fs;
+    unsigned long bmap_nr;
+
+    if (misc_device_count_blocks (filename, block_size) < block_count) {
+	reiserfs_warning (stderr, "reiserfs_fs_create: no enough "
+			  "blocks on device\n");
+	return 0;
+    }
+
+    if (!reiserfs_journal_fits (REISERFS_DISK_OFFSET_IN_BYTES / block_size, 
+				block_size, block_count, 0))
+    {
+	reiserfs_warning (stderr, "reiserfs_fs_create: can not create that "
+			  "small (%d blocks) filesystem\n", block_count);
+	return 0;
+    }
+
+    fs = misc_getmem (sizeof (*fs));
+    if (!fs) {
+	reiserfs_warning (stderr, "reiserfs_fs_create: misc_getmem failed\n");
+	return 0;
+    }
+
+    fs->fs_dev = open (filename, O_RDWR 
+#if defined(O_LARGEFILE)
+		       | O_LARGEFILE
+#endif
+		       );
+    if (fs->fs_dev == -1) {
+	reiserfs_warning (stderr, "reiserfs_fs_create: could not open %s: %s\n",
+			  filename, strerror(errno));
+	
+	misc_freemem (fs);
+	return 0;
+    }
+
+    fs->fs_blocksize = block_size;
+    sprintf(fs->fs_file_name, filename);
+    fs->fs_format = version;
+
+    if (new_format)
+        fs->fs_super_bh = reiserfs_buffer_open (fs->fs_dev, 
+	    REISERFS_DISK_OFFSET_IN_BYTES / block_size, block_size);
+    else 
+        fs->fs_super_bh = reiserfs_buffer_open (fs->fs_dev, 
+	    REISERFS_OLD_DISK_OFFSET_IN_BYTES / block_size, block_size);
+    
+    if (!fs->fs_super_bh) {
+	reiserfs_warning (stderr, "reiserfs_fs_create: "
+			  "reiserfs_buffer_open failed\n");
+	return 0;
+    }
+
+    reiserfs_buffer_mkuptodate (fs->fs_super_bh, 1);
+    
+    fs->fs_ondisk_sb = (reiserfs_sb_t *)fs->fs_super_bh->b_data;
+    memset (fs->fs_ondisk_sb, 0, block_size);
+    
+    /* fill super block fields which are constant for given version 
+       and block count */
+    reiserfs_sb_set_blocks (fs->fs_ondisk_sb, block_count);
+    /* sb_free_blocks */
+    /* sb_root_block */
+    /* sb_journal_1st_block */
+    /* sb_journal_dev */
+    /* sb_orig_journal_size */
+    /* sb_joural_magic */
+    /* sb_journal magic_F */
+    /* sb_mount_id */
+    /* sb_not_used0 */
+    /* sb_generation_number */    
+    reiserfs_sb_set_blksize (fs->fs_ondisk_sb, block_size);
+    switch (version) {
+    case REISERFS_FORMAT_3_5:
+	reiserfs_sb_set_mapmax (fs->fs_ondisk_sb, 
+	    (block_size - REISERFS_SB_SIZE_V1) / sizeof(__u32) / 2 * 2);
+	/* sb_oid_cursize */
+	/* sb_state */
+	memcpy (fs->fs_ondisk_sb->s_v1.s_magic, 
+		REISERFS_3_5_SUPER_MAGIC_STRING,
+		strlen (REISERFS_3_5_SUPER_MAGIC_STRING));
+	break;
+
+    case REISERFS_FORMAT_3_6:
+	reiserfs_sb_set_mapmax (fs->fs_ondisk_sb, 
+	    (block_size - REISERFS_SB_SIZE) / sizeof(__u32) / 2 * 2);
+	/* sb_oid_cursize */
+	/* sb_state */
+        memcpy (fs->fs_ondisk_sb->s_v1.s_magic, 
+		REISERFS_3_6_SUPER_MAGIC_STRING,
+                strlen (REISERFS_3_6_SUPER_MAGIC_STRING));
+	break;
+    }
+    if (!default_journal)
+        memcpy (fs->fs_ondisk_sb->s_v1.s_magic, 
+		REISERFS_JR_SUPER_MAGIC_STRING,
+                strlen (REISERFS_JR_SUPER_MAGIC_STRING));
+
+    /* sb_fsck_state */
+    /* sb_hash_function_code */
+    /* sb_tree_height */
+    bmap_nr = reiserfs_bmap_nr(block_count, block_size);
+
+    reiserfs_sb_set_version (fs->fs_ondisk_sb, version);
+    reiserfs_sb_set_bmaps (fs->fs_ondisk_sb, 
+			   reiserfs_bmap_over(bmap_nr) ? 0 : bmap_nr);
+    
+    /* sb_not_used1 */
+    reiserfs_buffer_mkdirty (fs->fs_super_bh);
+    fs->fs_dirt = 1;
+
+    return fs;
+}
+
+/* flush bitmap, reiserfs_buffer_close super block, flush all dirty buffers, 
+   close and open again the device, read super block */
+static void reiserfs_only_reopen (reiserfs_filsys_t * fs, int flag)
+{
+    unsigned long super_block;
+
+
+    /*  reiserfs_bitmap_flush (fs->fs_bitmap2, fs);*/
+    super_block = fs->fs_super_bh->b_blocknr;                
+    reiserfs_buffer_close (fs->fs_super_bh);
+    reiserfs_buffer_flush_all(fs->fs_dev);
+    
+    reiserfs_buffer_invalidate_all (fs->fs_dev);
+    if (close (fs->fs_dev))
+	misc_die ("reiserfs_fs_reopen: closed failed: %s", strerror(errno));
+    
+    fs->fs_dev = open (fs->fs_file_name, flag 
+#if defined(O_LARGEFILE)
+		       | O_LARGEFILE
+#endif
+		       );
+    if (fs->fs_dev == -1)
+	misc_die ("reiserfs_fs_reopen: could not reopen device: %s", 
+	     strerror(errno));
+
+    fs->fs_super_bh = reiserfs_buffer_read (fs->fs_dev, super_block, 
+				      fs->fs_blocksize);
+    
+    if (!fs->fs_super_bh)
+	misc_die ("reiserfs_fs_reopen: reading super block failed");
+    
+    fs->fs_ondisk_sb = (reiserfs_sb_t *)fs->fs_super_bh->b_data;
+    fs->fs_flags = flag; /* O_RDONLY or O_RDWR */
+    
+    if (flag & O_RDWR)
+	fs->fs_dirt  = 1;
+    else
+	fs->fs_dirt = 0;
+}
+
+void reiserfs_fs_reopen (reiserfs_filsys_t * fs, int flag)
+{
+    reiserfs_only_reopen (fs, flag);
+    reiserfs_journal_reopen (fs, flag);
+}
+
+int reiserfs_fs_rw (reiserfs_filsys_t * fs)
+{
+    if ((fs->fs_flags) & O_RDWR)
+	return 1;
+    return 0;
+}
+
+
+/* flush all changes made on a filesystem */
+void reiserfs_fs_flush (reiserfs_filsys_t * fs)
+{
+    if (fs->fs_dirt) {
+	reiserfs_journal_flush (fs);
+	reiserfs_buffer_flush_all(fs->fs_dev);
+    }
+    fs->fs_dirt = 0;
+}
+
+
+/* free all memory involved into manipulating with filesystem */
+void reiserfs_fs_free (reiserfs_filsys_t * fs)
+{
+    reiserfs_journal_free (fs);
+    reiserfs_bitmap_free (fs);
+
+    /* release super block and memory used by filesystem handler */
+    reiserfs_buffer_close (fs->fs_super_bh);
+    fs->fs_super_bh = 0;
+
+    reiserfs_buffer_free_all ();
+    misc_freemem (fs);
+}
+
+
+/* this closes everything: journal. bitmap and the fs itself */
+void reiserfs_fs_close (reiserfs_filsys_t * fs)
+{
+    reiserfs_journal_close (fs);
+    reiserfs_bitmap_close (fs);
+
+    reiserfs_fs_flush (fs);
+    fsync(fs->fs_dev);
+    reiserfs_fs_free (fs);
+}
+
+void reiserfs_print_bmap_block (FILE * fp, int i, unsigned long block, 
+				char * map, int blocks, int silent, 
+				int blocksize)
+{
+    int j, k;
+    int bits = blocksize * 8;
+    int zeros = 0, ones = 0;
+  
+
+    reiserfs_warning (fp, "#%d: block %lu: ", i, block);
+
+    blocks = blocksize * 8;
+
+    if (misc_test_bit (0, map)) {
+	/* first block addressed by this bitmap block is used */
+	ones ++;
+	if (!silent)
+	    reiserfs_warning (fp, "Busy (%d-", i * bits);
+	for (j = 1; j < blocks; j ++) {
+	    while (misc_test_bit (j, map)) {
+		ones ++;
+		if (j == blocks - 1) {
+		    if (!silent)
+			reiserfs_warning (fp, "%d)\n", j + i * bits);
+		    goto end;
+		}
+		j++;
+	    }
+	    if (!silent)
+		reiserfs_warning (fp, "%d) Free(%d-", 
+				  j - 1 + i * bits, j + i * bits);
+
+	    while (!misc_test_bit (j, map)) {
+		zeros ++;
+		if (j == blocks - 1) {
+		    if (!silent)
+			reiserfs_warning (fp, "%d)\n", j + i * bits);
+		    goto end;
+		}
+		j++;
+	    }
+	    if (!silent)
+		reiserfs_warning (fp, "%d) Busy(%d-", 
+				  j - 1 + i * bits, j + i * bits);
+
+	    j --;
+	end:
+	    /* to make gcc 3.2 do not sware here */;
+	}
+    } else {
+	/* first block addressed by this bitmap is free */
+	zeros ++;
+	if (!silent)
+	    reiserfs_warning (fp, "Free (%d-", i * bits);
+	for (j = 1; j < blocks; j ++) {
+	    k = 0;
+	    while (!misc_test_bit (j, map)) {
+		k ++;
+		if (j == blocks - 1) {
+		    if (!silent)
+			reiserfs_warning (fp, "%d)\n", j + i * bits);
+		    zeros += k;
+		    goto end2;
+		}
+		j++;
+	    }
+	    zeros += k;
+	    if (!silent)
+		reiserfs_warning (fp, "%d) Busy(%d-", 
+				  j - 1 + i * bits, j + i * bits);
+	    
+	    k = 0;
+	    while (misc_test_bit (j, map)) {
+		ones ++;
+		if (j == blocks - 1) {
+		    if (!silent)
+			reiserfs_warning (fp, "%d)\n", j + i * bits);
+		    ones += k;
+		    goto end2;
+		}
+		j++;
+	    }
+	    ones += k;
+	    if (!silent)
+		reiserfs_warning (fp, "%d) Free(%d-", 
+				  j - 1 + i * bits, j + i * bits);
+	
+	    j --;
+	end2:
+	    /* to make gcc 3.2 do not sware here */;
+	}
+    }
+
+    reiserfs_warning (fp, "used %d, free %d\n", ones, zeros);
+}
+
diff --git a/reiserfscore/fix_node.c b/libreiserfs/fix_node.c
similarity index 68%
rename from reiserfscore/fix_node.c
rename to libreiserfs/fix_node.c
index 92ef814..b3a08da 100644
--- a/reiserfscore/fix_node.c
+++ b/libreiserfs/fix_node.c
@@ -3,41 +3,161 @@
  * reiserfsprogs/README
  */
 
-/**
- ** old_item_num
- ** old_entry_num
- ** set_entry_sizes
- ** create_virtual_node
- ** check_left
- ** check_right
- ** directory_part_size
- ** get_num_ver
- ** item_length
- ** set_parameters
- ** is_leaf_removable
- ** are_leaves_removable
- ** get_empty_nodes
- ** get_lfree
- ** get_rfree
- ** is_left_neighbor_in_cache
- ** decrement_key
- ** get_far_parent
- ** get_parents
- ** can_node_be_removed
- ** ip_check_balance
- ** dc_check_balance_internal
- ** dc_check_balance_leaf
- ** dc_check_balance
- ** check_balance
- ** get_direct_parent
- ** get_neighbors
- ** fix_nodes
- ** 
- ** 
- **/
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+#include "misc/misc.h"
+#include "misc/malloc.h"
+
+#include <assert.h>
+
+#define VI_TYPE_STAT_DATA 1
+#define VI_TYPE_DIRECT 2
+#define VI_TYPE_EXTENT 4
+#define VI_TYPE_DIRECTORY 8
+#define VI_TYPE_FIRST_DIRECTORY_ITEM 16
+#define VI_TYPE_INSERTED_DIRECTORY_ITEM 32
+
+#define VI_TYPE_LEFT_MERGEABLE 64
+#define VI_TYPE_RIGHT_MERGEABLE 128
+
+/* Check whether a key is contained in the tree rooted from a buffer at a
+   path.  This works by looking at the left and right delimiting keys for the
+   buffer in the last path_element in the path.  These delimiting keys are
+   stored at least one level above that buffer in the tree. If the buffer is
+   the first or last node in the tree order then one of the delimiting keys
+   may be absent, and in this case get_lkey and get_rkey return a special key
+   which is MIN_KEY or MAX_KEY. */
+static inline int key_in_buffer (
+    reiserfs_path_t         * p_s_chk_path, /* Path which should be checked.  */
+    reiserfs_key_t          * p_s_key,      /* Key which should be checked.   */
+    reiserfs_filsys_t  * fs        /* Super block pointer.           */
+    ) {
+
+    if (reiserfs_key_comp(reiserfs_tree_lkey(p_s_chk_path, fs), p_s_key) == 1)
+	return 0;
+    
+    if (reiserfs_key_comp(p_s_key, reiserfs_tree_rkey(p_s_chk_path, fs)) != -1)
+	return 0;
+    
+    return 1;
+}
+
+/**************************************************************************
+ * Algorithm   SearchByKey                                                *
+ *             look for item in internal tree on the disk by its key      *
+ * Input:  p_s_sb   -  super block                                        *
+ *         p_s_key  - pointer to the key to search                        *
+ * Output: true value -  1 - found,  0 - not found                        *
+ *         p_s_search_path - path from the root to the needed leaf        *
+ **************************************************************************/
+
+/* This function fills up the path from the root to the leaf as it
+   descends the tree looking for the key.  It uses reiserfs_reiserfs_buffer_read to
+   try to find buffers in the cache given their block number.  If it
+   does not find them in the cache it reads them from disk.  For each
+   node search_by_key finds using reiserfs_reiserfs_buffer_read it then uses
+   bin_search to look through that node.  bin_search will find the
+   position of the block_number of the next node if it is looking
+   through an internal node.  If it is looking through a leaf node
+   bin_search will find the position of the item which has key either
+   equal to given key, or which is the maximal key less than the given
+   key.  search_by_key returns a path that must be checked for the
+   correctness of the top of the path but need not be checked for the
+   correctness of the bottom of the path */
+static int search_by_key (reiserfs_filsys_t * fs,
+			  reiserfs_key_t * p_s_key,        /* Key to search */
+			  reiserfs_path_t * p_s_search_path,/* This structure was
+							   allocated and
+							   initialized by the
+							   calling
+							   function. It is
+							   filled up by this
+							   function.  */
+		   int  n_stop_level)   /* How far down the tree to search.*/
+{
+    reiserfs_sb_t * sb;
+    int n_block_number,
+	expected_level,
+	n_block_size    = fs->fs_blocksize;
+    reiserfs_bh_t  *       p_s_bh;
+    reiserfs_path_element_t *   p_s_last_element;
+    int				n_retval;
 
 
-#include "includes.h"
+    sb = fs->fs_ondisk_sb;
+    n_block_number = reiserfs_sb_get_root (sb);
+    expected_level = reiserfs_sb_get_height (sb);
+    
+    /* As we add each node to a path we increase its count.  This
+       means that we must be careful to release all nodes in a path
+       before we either discard the path struct or re-use the path
+       struct, as we do here. */
+    reiserfs_tree_pathrelse (p_s_search_path);
+
+
+    /* With each iteration of this loop we search through the items in
+       the current node, and calculate the next current node(next path
+       element) for the next iteration of this loop.. */
+    while ( 1 ) {
+
+	/* prep path to have another element added to it. */
+	p_s_last_element = REISERFS_PATH_ELEM(p_s_search_path, ++p_s_search_path->path_length);
+	expected_level --;
+
+	/* Read the next tree node, and set the last element in the
+           path to have a pointer to it. */
+	if ( ! (p_s_bh = p_s_last_element->pe_buffer =
+		reiserfs_buffer_read (fs->fs_dev, n_block_number, n_block_size)) ) {
+	    p_s_search_path->path_length --;
+	    reiserfs_tree_pathrelse(p_s_search_path);
+	    return IO_ERROR;
+	}
+
+	/* It is possible that schedule occured. We must check whether
+	   the key to search is still in the tree rooted from the
+	   current buffer. If not then repeat search from the root. */
+	if (!REISERFS_NODE_INTREE (p_s_bh) || 
+	    ! key_in_buffer(p_s_search_path, p_s_key, fs))
+	    reiserfs_panic ("search_by_key: something wrong with the tree");
+
+	/* make sure, that the node contents look like a node of
+           certain level */
+	if (!reiserfs_node_formatted (p_s_bh, expected_level)) {
+	    reiserfs_node_print (stderr, 0, p_s_bh, 3, -1, -1);
+	    reiserfs_panic ("search_by_key: expected level %d", expected_level);
+	}
+
+	/* ok, we have acquired next formatted node in the tree */
+	n_retval = misc_bin_search (p_s_key, reiserfs_ih_at(p_s_bh, 0), 
+				    reiserfs_node_items(p_s_bh), 
+				    reiserfs_leaf_head (p_s_bh) 
+				    ? REISERFS_IH_SIZE : REISERFS_KEY_SIZE, 
+				    &(p_s_last_element->pe_position),
+				    reiserfs_key_comp);
+	if (reiserfs_nh_get_level (NODE_HEAD (p_s_bh)) == n_stop_level)
+	    return n_retval == 1 ? POSITION_FOUND : POSITION_NOT_FOUND;
+
+	/* we are not in the stop level */
+	if (n_retval == 1)
+	    /* item has been found, so we choose the pointer which is
+               to the right of the found one */
+	    p_s_last_element->pe_position++;
+
+	/* if item was not found we choose the position which is to
+	   the left of the found item. This requires no code,
+	   bin_search did it already.*/
+
+	/* So we have chosen a position in the current node which is
+	   an internal node.  Now we calculate child block number by
+	   position in the node. */
+	n_block_number = reiserfs_dc_get_nr (
+		reiserfs_int_at (p_s_bh, p_s_last_element->pe_position));
+    }
+}
+
 
 
 /* To make any changes in the tree we find a node, that contains item to be
@@ -95,23 +215,23 @@
 /*
  * Create an array of sizes of directory entries for virtual item
  */
-static void set_entry_sizes (struct tree_balance * tb,
+static void set_entry_sizes (reiserfs_tb_t * tb,
 			     int old_num, int new_num,
-			     struct buffer_head * bh,
-			     struct item_head * ih)
+			     reiserfs_bh_t * bh,
+			     reiserfs_ih_t * ih)
 {
-    struct virtual_node * vn = tb->tb_vn;
+    struct reiserfs_virtual_node * vn = tb->tb_vn;
     int i;
-    struct reiserfs_de_head * deh;
-    struct virtual_item * vi;
+    reiserfs_deh_t * deh;
+    struct reiserfs_virtual_item * vi;
   
-    deh = B_I_DEH (bh, ih);
+    deh = reiserfs_deh (bh, ih);
 
     /* seek to given virtual item in array of virtual items */
     vi = vn->vn_vi + new_num;
 
     /* virtual directory item have this amount of entry after */
-    vi->vi_entry_count = get_ih_entry_count (ih) + 
+    vi->vi_entry_count = reiserfs_ih_get_entries (ih) + 
 	((old_num == vn->vn_affected_item_num) ? ((vn->vn_mode == M_CUT) ? -1 :
 						  (vn->vn_mode == M_PASTE ? 1 : 0)) : 0);
     vi->vi_entry_sizes = (__u16 *)vn->vn_free_ptr;
@@ -122,7 +242,8 @@
 	int j;
     
 	j = old_entry_num (old_num, vn->vn_affected_item_num, i, vn->vn_pos_in_item, vn->vn_mode);
-	vi->vi_entry_sizes[i] = entry_length (ih, &(deh[j]), j) + DEH_SIZE;
+	vi->vi_entry_sizes[i] = 
+		reiserfs_direntry_entry_len (ih, &(deh[j]), j) + REISERFS_DEH_SIZE;
     }
   
     /* set size of pasted entry */
@@ -131,39 +252,47 @@
 }
 
 
-static void create_virtual_node (struct tree_balance * tb, int h)
+static void create_reiserfs_virtual_node (reiserfs_tb_t * tb, int h)
 {
-    struct item_head * ih;
-    struct virtual_node * vn = tb->tb_vn;
+    reiserfs_ih_t * ih;
+    struct reiserfs_virtual_node * vn = tb->tb_vn;
     int new_num;
-    struct buffer_head * Sh;	/* this comes from tb->S[h] */
+    reiserfs_bh_t * Sh;	/* this comes from tb->S[h] */
 
-    Sh = PATH_H_PBUFFER (tb->tb_path, h);
+    Sh = REISERFS_PATH_UPBUFFER (tb->tb_path, h);
 
     /* size of changed node */
-    vn->vn_size = MAX_CHILD_SIZE (Sh->b_size) - get_blkh_free_space (B_BLK_HEAD (Sh)) + tb->insert_size[h];
+    vn->vn_size = REISERFS_NODE_SPACE (Sh->b_size) - 
+	    reiserfs_nh_get_free (NODE_HEAD (Sh)) + tb->insert_size[h];
 
     /* for internal nodes array if virtual items is not created */
     if (h) {
-	vn->vn_nr_item = (vn->vn_size - DC_SIZE) / (DC_SIZE + KEY_SIZE);
+	vn->vn_nr_item = (vn->vn_size - REISERFS_DC_SIZE) / 
+		(REISERFS_DC_SIZE + REISERFS_KEY_SIZE);
+	
 	return;
     }
 
     /* number of items in virtual node  */
-    vn->vn_nr_item = B_NR_ITEMS (Sh) + ((vn->vn_mode == M_INSERT)? 1 : 0) - ((vn->vn_mode == M_DELETE)? 1 : 0);
+    vn->vn_nr_item = reiserfs_node_items (Sh) + 
+	    ((vn->vn_mode == M_INSERT)? 1 : 0) - 
+	    ((vn->vn_mode == M_DELETE)? 1 : 0);
 
     /* first virtual item */
-    vn->vn_vi = (struct virtual_item *)(tb->tb_vn + 1);
-    memset (vn->vn_vi, 0, vn->vn_nr_item * sizeof (struct virtual_item));
-    vn->vn_free_ptr += vn->vn_nr_item * sizeof (struct virtual_item);
+    vn->vn_vi = (struct reiserfs_virtual_item *)(tb->tb_vn + 1);
+    memset (vn->vn_vi, 0, vn->vn_nr_item * sizeof (struct reiserfs_virtual_item));
+    vn->vn_free_ptr += vn->vn_nr_item * sizeof (struct reiserfs_virtual_item);
 
 
     /* first item in the node */
-    ih = B_N_PITEM_HEAD (Sh, 0);
+    ih = reiserfs_ih_at (Sh, 0);
 
     /* define the mergeability for 0-th item (if it is not being deleted) */
-    if (is_left_mergeable (tb->tb_fs, tb->tb_path) == 1 && (vn->vn_mode != M_DELETE || vn->vn_affected_item_num))
+    if (reiserfs_tree_left_mergeable (tb->tb_fs, tb->tb_path) == 1 && 
+	(vn->vn_mode != M_DELETE || vn->vn_affected_item_num))
+    {
 	vn->vn_vi[0].vi_type |= VI_TYPE_LEFT_MERGEABLE;
+    }
 
     /* go through all items those remain in the virtual node (except for the new (inserted) one) */
     for (new_num = 0; new_num < vn->vn_nr_item; new_num ++) {
@@ -175,28 +304,29 @@
 	/* get item number in source node */
 	j = old_item_num (new_num, vn->vn_affected_item_num, vn->vn_mode);
     
-	vn->vn_vi[new_num].vi_item_len += get_ih_item_len (&ih[j]) + IH_SIZE;
+	vn->vn_vi[new_num].vi_item_len += reiserfs_ih_get_len (&ih[j]) + REISERFS_IH_SIZE;
     
-	if (I_IS_STAT_DATA_ITEM (ih + j)) {
+	if (reiserfs_ih_stat (ih + j)) {
 	    vn->vn_vi[new_num].vi_type |= VI_TYPE_STAT_DATA;
 	    continue;
 	}
 
 	/* set type of item */
-	if (I_IS_DIRECT_ITEM (ih + j))
+	if (reiserfs_ih_direct (ih + j))
 	    vn->vn_vi[new_num].vi_type |= VI_TYPE_DIRECT;
     
-	if (I_IS_INDIRECT_ITEM (ih + j))
-	    vn->vn_vi[new_num].vi_type |= VI_TYPE_INDIRECT;
+	if (reiserfs_ih_ext (ih + j))
+	    vn->vn_vi[new_num].vi_type |= VI_TYPE_EXTENT;
 
-	if (I_IS_DIRECTORY_ITEM (ih + j)) {
+	if (reiserfs_ih_dir (ih + j)) {
 	    set_entry_sizes (tb, j, new_num, Sh, ih + j);
 	    vn->vn_vi[new_num].vi_type |= VI_TYPE_DIRECTORY;
-	    if (get_key_offset_v1 (&ih[j].ih_key) == DOT_OFFSET)
+	    if (reiserfs_key_get_off1 (&ih[j].ih_key) == OFFSET_DOT)
 		vn->vn_vi[new_num].vi_type |= VI_TYPE_FIRST_DIRECTORY_ITEM;
 	}
     
-	vn->vn_vi[new_num].vi_item_offset = get_offset (&(ih + j)->ih_key);
+	vn->vn_vi[new_num].vi_item_offset = 
+		reiserfs_key_get_off (&(ih + j)->ih_key);
 	
 	if (new_num != vn->vn_affected_item_num)
 	    /* this is not being changed */
@@ -210,17 +340,18 @@
     /* virtual inserted item is not defined yet */
     if (vn->vn_mode == M_INSERT) {
 	vn->vn_vi[vn->vn_affected_item_num].vi_item_len = tb->insert_size[0];
-	vn->vn_vi[vn->vn_affected_item_num].vi_item_offset = get_offset (&vn->vn_ins_ih->ih_key);
+	vn->vn_vi[vn->vn_affected_item_num].vi_item_offset = 
+		reiserfs_key_get_off (&vn->vn_ins_ih->ih_key);
 
-	switch (get_type (&vn->vn_ins_ih->ih_key)) {
+	switch (reiserfs_key_get_type (&vn->vn_ins_ih->ih_key)) {
 	case TYPE_STAT_DATA:
 	    vn->vn_vi[vn->vn_affected_item_num].vi_type |= VI_TYPE_STAT_DATA;
 	    break;
 	case TYPE_DIRECT:
 	    vn->vn_vi[vn->vn_affected_item_num].vi_type |= VI_TYPE_DIRECT;
 	    break;
-	case TYPE_INDIRECT:
-	    vn->vn_vi[vn->vn_affected_item_num].vi_type |= VI_TYPE_INDIRECT;
+	case TYPE_EXTENT:
+	    vn->vn_vi[vn->vn_affected_item_num].vi_type |= VI_TYPE_EXTENT;
 	    break;
 	default:
 	    /* inseted item is directory (it must be item with "." and "..") */
@@ -234,9 +365,9 @@
   
     /* set right merge flag we take right delimiting key and check whether it is a mergeable item */
     if (tb->CFR[0]) {
-	ih = (struct item_head *)B_N_PDELIM_KEY (tb->CFR[0], tb->rkey[0]);
-	if (is_right_mergeable (tb->tb_fs, tb->tb_path) == 1 &&
-		(vn->vn_mode != M_DELETE || vn->vn_affected_item_num != B_NR_ITEMS (Sh) - 1))
+	ih = (reiserfs_ih_t *)reiserfs_int_key_at (tb->CFR[0], tb->rkey[0]);
+	if (reiserfs_tree_right_mergeable (tb->tb_fs, tb->tb_path) == 1 &&
+		(vn->vn_mode != M_DELETE || vn->vn_affected_item_num != reiserfs_node_items (Sh) - 1))
 	    vn->vn_vi[vn->vn_nr_item-1].vi_type |= VI_TYPE_RIGHT_MERGEABLE;
     }
 }
@@ -244,10 +375,10 @@
 
 /* using virtual node check, how many items can be shifted to left
    neighbor */
-static  int check_left (struct tree_balance * tb, int h, int cur_free)
+static  int check_left (reiserfs_tb_t * tb, int h, int cur_free)
 {
     int i;
-    struct virtual_node * vn = tb->tb_vn;
+    struct reiserfs_virtual_node * vn = tb->tb_vn;
     int d_size, ih_size, bytes = -1;
 
     /* internal level */
@@ -256,7 +387,7 @@
 	    tb->lnum[h] = 0; 
 	    return 0;
 	}
-	tb->lnum[h] = cur_free / (DC_SIZE + KEY_SIZE);
+	tb->lnum[h] = cur_free / (REISERFS_DC_SIZE + REISERFS_KEY_SIZE);
 	return -1;
     }
 
@@ -269,21 +400,21 @@
 	return 0;
     }
 
-    if ((unsigned int)cur_free >= (vn->vn_size - ((vn->vn_vi[0].vi_type & VI_TYPE_LEFT_MERGEABLE) ? IH_SIZE : 0))) {
+    if ((unsigned int)cur_free >= (vn->vn_size - ((vn->vn_vi[0].vi_type & VI_TYPE_LEFT_MERGEABLE) ? REISERFS_IH_SIZE : 0))) {
 	/* all contents of S[0] fits into L[0] */
 	tb->lnum[0] = vn->vn_nr_item;
 	tb->lbytes = -1;
 	return -1;
     }
   
-    d_size = 0, ih_size = IH_SIZE;
+    d_size = 0, ih_size = REISERFS_IH_SIZE;
 
     /* first item may be merge with last item in left neighbor */
     if (vn->vn_vi[0].vi_type & VI_TYPE_LEFT_MERGEABLE)
-	d_size = -((int)IH_SIZE), ih_size = 0;
+	d_size = -((int)REISERFS_IH_SIZE), ih_size = 0;
 
     tb->lnum[0] = 0;
-    for (i = 0; i < vn->vn_nr_item; i ++, ih_size = IH_SIZE, d_size = 0) {
+    for (i = 0; i < vn->vn_nr_item; i ++, ih_size = REISERFS_IH_SIZE, d_size = 0) {
 	d_size += vn->vn_vi[i].vi_item_len;
 	if (cur_free >= d_size) {	
 	    /* the item can be shifted entirely */
@@ -317,9 +448,9 @@
 //	    	vn->vn_vi[i].vi_item_offset, bytes, vn->vn_vi[i].vi_item_offset + bytes);
 	}
 
-	if (vn->vn_vi[i].vi_type & VI_TYPE_INDIRECT)
-	    /* body of a indirect item can be split at unformatted pointer bound */
-	    tb->lbytes = bytes = cur_free - cur_free % UNFM_P_SIZE;
+	if (vn->vn_vi[i].vi_type & VI_TYPE_EXTENT)
+	    /* body of a extent item can be split at unformatted pointer bound */
+	    tb->lbytes = bytes = cur_free - cur_free % REISERFS_EXT_SIZE;
     
 	/* item is of directory type */     
 	if (vn->vn_vi[i].vi_type & VI_TYPE_DIRECTORY) {
@@ -329,7 +460,7 @@
 	    /* calculate number of dir entries that can be shifted, and
 	       their total size */
 	    int j;
-	    struct virtual_item * vi;
+	    struct reiserfs_virtual_item * vi;
       
 	    tb->lbytes = 0;
 	    bytes = 0;
@@ -370,10 +501,10 @@
 
 /* using virtual node check, how many items can be shifted to right
    neighbor */
-static int check_right (struct tree_balance * tb, int h, int cur_free)
+static int check_right (reiserfs_tb_t * tb, int h, int cur_free)
 {
     int i;
-    struct virtual_node * vn = tb->tb_vn;
+    struct reiserfs_virtual_node * vn = tb->tb_vn;
     int d_size, ih_size, bytes = -1;
 
     /* internal level */
@@ -382,7 +513,7 @@
 	    tb->rnum[h] = 0; 
 	    return 0;
 	}
-	tb->rnum[h] = cur_free / (DC_SIZE + KEY_SIZE);
+	tb->rnum[h] = cur_free / (REISERFS_DC_SIZE + REISERFS_KEY_SIZE);
 	return -1;
     }
     
@@ -395,7 +526,7 @@
 	return 0;
     }
   
-    if ((unsigned int)cur_free >= (vn->vn_size - ((vn->vn_vi[vn->vn_nr_item-1].vi_type & VI_TYPE_RIGHT_MERGEABLE) ? IH_SIZE : 0)))
+    if ((unsigned int)cur_free >= (vn->vn_size - ((vn->vn_vi[vn->vn_nr_item-1].vi_type & VI_TYPE_RIGHT_MERGEABLE) ? REISERFS_IH_SIZE : 0)))
     {
 	/* all contents of S[0] fits into R[0] */
 	tb->rnum[h] = vn->vn_nr_item;
@@ -403,14 +534,14 @@
 	return -1;
     }
     
-    d_size = 0, ih_size = IH_SIZE;
+    d_size = 0, ih_size = REISERFS_IH_SIZE;
     
     /* last item may be merge with first item in right neighbor */
     if (vn->vn_vi[vn->vn_nr_item - 1].vi_type & VI_TYPE_RIGHT_MERGEABLE)
-	d_size = -(int)IH_SIZE, ih_size = 0;
+	d_size = -(int)REISERFS_IH_SIZE, ih_size = 0;
     
     tb->rnum[0] = 0;
-    for (i = vn->vn_nr_item - 1; i >= 0; i --, d_size = 0, ih_size = IH_SIZE) {
+    for (i = vn->vn_nr_item - 1; i >= 0; i --, d_size = 0, ih_size = REISERFS_IH_SIZE) {
 	d_size += vn->vn_vi[i].vi_item_len;
 	if (cur_free >= d_size)	{	
 	    /* the item can be shifted entirely */
@@ -450,16 +581,16 @@
 //	    	vn->vn_vi[i].vi_item_offset + vn->vn_vi[i].vi_item_len - bytes);
 	}
 	
-	/* item is of indirect type */
-	if (vn->vn_vi[i].vi_type & VI_TYPE_INDIRECT)
+	/* item is of extent type */
+	if (vn->vn_vi[i].vi_type & VI_TYPE_EXTENT)
 	    /* an unformatted node pointer (having size long) is a solid
                granule of the item */
-	    tb->rbytes = bytes = cur_free - cur_free % UNFM_P_SIZE;
+	    tb->rbytes = bytes = cur_free - cur_free % REISERFS_EXT_SIZE;
 	
 	/* item is of directory type */
 	if (vn->vn_vi[i].vi_type & VI_TYPE_DIRECTORY) {
 	    int j;
-	    struct virtual_item * vi;
+	    struct reiserfs_virtual_item * vi;
 	    
 	    tb->rbytes = 0;
 	    bytes = 0;
@@ -498,7 +629,7 @@
 
 
 /* sum of entry sizes between from-th and to-th entries including both edges */
-static int directory_part_size (struct virtual_item * vi, int from, int to)
+static int directory_part_size (struct reiserfs_virtual_item * vi, int from, int to)
 {
     int i, retval;
     
@@ -518,7 +649,7 @@
  * to_bytes - number of bytes of boundary item (or directory entries) which
  * are shifted to right neighbor */
 
-static int get_num_ver (int mode, struct tree_balance * tb, int h,
+static int get_num_ver (int mode, reiserfs_tb_t * tb, int h,
 			int from, int from_bytes,
 			int to,   int to_bytes,
 			short * snum012, int flow
@@ -526,8 +657,8 @@
 {
     int i;
     int bytes;
-    struct virtual_node * vn = tb->tb_vn;
-    struct virtual_item * vi;
+    struct reiserfs_virtual_node * vn = tb->tb_vn;
+    struct reiserfs_virtual_item * vi;
     
     int total_node_size, max_node_size, current_item_size;
     int needed_nodes;
@@ -540,7 +671,7 @@
     int splitted_item_positions[2];	/* these are positions in virtual item of items, 
 					   that are splitted between S[0] and S1new and S1new and S2new */
 
-    max_node_size = MAX_CHILD_SIZE (tb->tb_fs->fs_blocksize);
+    max_node_size = REISERFS_NODE_SPACE (tb->tb_fs->fs_blocksize);
     
     /* snum012 [0-2] - number of items, that lay to S[0], first new node and
        second new node */
@@ -550,7 +681,7 @@
 
     /* internal level */
     if (h > 0) {
-	i = ((to - from) * (KEY_SIZE + DC_SIZE) + DC_SIZE);
+	i = ((to - from) * (REISERFS_KEY_SIZE + REISERFS_DC_SIZE) + REISERFS_DC_SIZE);
 	if (i == max_node_size)
 	    return 1;
 	return (i / max_node_size + 1);
@@ -611,7 +742,7 @@
 	    continue;
 	}
 	
-	if (total_node_size + (int)IH_SIZE >= max_node_size) {
+	if (total_node_size + (int)REISERFS_IH_SIZE >= max_node_size) {
 	    /* even minimal item does not fit into current node, take new node
                and continue */
 	    needed_nodes ++, i--, total_node_size = 0;
@@ -624,7 +755,7 @@
 	}
 	
 	/*bytes is free space in filled node*/
-	bytes = max_node_size - total_node_size - IH_SIZE;
+	bytes = max_node_size - total_node_size - REISERFS_IH_SIZE;
 	
 	if (vi->vi_type & VI_TYPE_DIRECT) {
 	    /* body of a direct item can be split by 8 bytes. */
@@ -637,12 +768,12 @@
 	}
 
 
-	/* item is of indirect type */
-	if (vi->vi_type & VI_TYPE_INDIRECT)
+	/* item is of extent type */
+	if (vi->vi_type & VI_TYPE_EXTENT)
 	    /* an unformatted node pointer (having size long) is a solid
 	       granule of the item. bytes of unformatted node pointers fits
 	       into free space of filled node */
-	    bytes -= (bytes) % UNFM_P_SIZE;
+	    bytes -= (bytes) % REISERFS_EXT_SIZE;
 	
 	/* S1bytes or S2bytes. It depends from needed_nodes */
 	snum012[needed_nodes - 1 + 3] = bytes;
@@ -655,7 +786,7 @@
 	    
 	    snum012[needed_nodes - 1 + 3] = 0;
 
-	    total_node_size += IH_SIZE;
+	    total_node_size += REISERFS_IH_SIZE;
 	    if (start_bytes == -1 || i != start_item)
 		start_bytes = 0;
 	    
@@ -729,7 +860,7 @@
 	    /* item is not of directory type */
 	    int bytes_to_S2new;
 	    
-	    bytes_to_S2new = vn->vn_vi[split_item_num].vi_item_len - IH_SIZE - snum012[4] - bytes_to_r - bytes_to_l;
+	    bytes_to_S2new = vn->vn_vi[split_item_num].vi_item_len - REISERFS_IH_SIZE - snum012[4] - bytes_to_r - bytes_to_l;
 	    snum012[4] = bytes_to_S2new;
 	}
     }
@@ -748,7 +879,7 @@
 	    snum012[3] =  vn->vn_vi[split_item_num].vi_entry_count - snum012[3] - bytes_to_r - bytes_to_l;
 	} else
 	    /* bytes, who go to S1new node (not including HI_SIZE) */
-	    snum012[3] = vn->vn_vi[split_item_num].vi_item_len - IH_SIZE - snum012[3] - bytes_to_r - bytes_to_l;
+	    snum012[3] = vn->vn_vi[split_item_num].vi_item_len - REISERFS_IH_SIZE - snum012[3] - bytes_to_r - bytes_to_l;
     }
     
     return needed_nodes;
@@ -756,14 +887,14 @@
 
 /* size of item_num-th item in bytes when regular and in entries when item is
    directory */
-static int item_length (struct tree_balance * tb, int item_num)
+static int item_length (reiserfs_tb_t * tb, int item_num)
 {
-    struct virtual_node * vn = tb->tb_vn;
+    struct reiserfs_virtual_node * vn = tb->tb_vn;
 
     if (vn->vn_vi[item_num].vi_type & VI_TYPE_DIRECTORY)
 	return vn->vn_vi[item_num].vi_entry_count;
 
-    return vn->vn_vi[item_num].vi_item_len - IH_SIZE;
+    return vn->vn_vi[item_num].vi_item_len - REISERFS_IH_SIZE;
 }
 
 
@@ -784,7 +915,7 @@
  *	s1bytes	number of bytes which flow to the first  new node when S[0] splits (this number is contained in s012 array)
  */
 
-static void set_parameters (struct tree_balance * tb, int h, int lnum,
+static void set_parameters (reiserfs_tb_t * tb, int h, int lnum,
 			    int rnum, int blk_num, short * s012, int lb, int rb)
 {
 
@@ -807,24 +938,27 @@
     }
 }
 
-static void decrement_key (struct key * p_s_key) 
+static void decrement_key (reiserfs_key_t * p_s_key) 
 {
     int type;
 
-    type = get_type (p_s_key);
+    type = reiserfs_key_get_type (p_s_key);
     switch (type) {
     case TYPE_STAT_DATA:
-	set_key_objectid (p_s_key, get_key_objectid (p_s_key) - 1);
-	set_type_and_offset (key_format (p_s_key), p_s_key,
-			     (loff_t)MAX_FILE_SIZE_V2, TYPE_INDIRECT);
+	reiserfs_key_set_oid (p_s_key, reiserfs_key_get_oid (p_s_key) - 1);
+	reiserfs_key_set_sec (reiserfs_key_format (p_s_key), p_s_key,
+			      REISERFS_SD_SIZE_MAX_V2, TYPE_EXTENT);
 	return;
 
-    case TYPE_INDIRECT:
+    case TYPE_EXTENT:
     case TYPE_DIRECT:
     case TYPE_DIRENTRY:
-	set_offset (key_format (p_s_key), p_s_key, get_offset (p_s_key) - 1);
-	if (get_offset (p_s_key) == 0)
-	    set_type (key_format (p_s_key), p_s_key, TYPE_STAT_DATA);
+	reiserfs_key_set_off (reiserfs_key_format (p_s_key), p_s_key, 
+				 reiserfs_key_get_off (p_s_key) - 1);
+	
+	if (reiserfs_key_get_off (p_s_key) == 0)
+	    reiserfs_key_set_type (reiserfs_key_format (p_s_key), 
+				   p_s_key, TYPE_STAT_DATA);
 	return;
     }
     reiserfs_warning (stderr, "vs-8125: decrement_key: item of wrong type found %k",
@@ -832,118 +966,65 @@
 }
 
 
-int are_items_mergeable (struct item_head * left, struct item_head * right, int bsize)
-{
-    if (comp_keys (&left->ih_key, &right->ih_key) != -1) {
-	reiserfs_panic ("vs-16070: are_items_mergeable: left %k, right %k", &(left->ih_key), &(right->ih_key));
-    }
-
-    if (not_of_one_file (&left->ih_key, &right->ih_key))
-	return 0;
-
-    if (I_IS_DIRECTORY_ITEM (left)) {
-	return 1;
-    }
-
-    if ((I_IS_DIRECT_ITEM (left) && I_IS_DIRECT_ITEM (right)) || 
-	(I_IS_INDIRECT_ITEM (left) && I_IS_INDIRECT_ITEM (right)))
-	return (get_offset (&left->ih_key) + get_bytes_number (left, bsize) == get_offset (&right->ih_key)) ? 1 : 0;
-
-    return 0;
-}
-
 /* get left neighbor of the leaf node */
-static struct buffer_head * get_left_neighbor (reiserfs_filsys_t * s, struct path * path)
+/* FIXME: move this to tree.c when get rid of fix_node.c:search_by_key. */
+reiserfs_bh_t * reiserfs_tree_left_neighbor (reiserfs_filsys_t * s, 
+						  reiserfs_path_t * path)
 {
-    struct key key;
-    struct path path_to_left_neighbor;
-    struct buffer_head * bh;
+    reiserfs_key_t key;
+    reiserfs_path_t path_to_left_neighbor;
+    reiserfs_bh_t * bh;
 
-    copy_key (&key, B_N_PKEY (PATH_PLAST_BUFFER (path), 0));
+    reiserfs_key_copy (&key, reiserfs_ih_key_at (REISERFS_PATH_LEAF (path), 0));
     decrement_key (&key);
 
-    init_path (&path_to_left_neighbor);
-    search_by_key (s, &key, &path_to_left_neighbor, DISK_LEAF_NODE_LEVEL);
-    if (PATH_LAST_POSITION (&path_to_left_neighbor) == 0) {
-	pathrelse (&path_to_left_neighbor);
+    path_to_left_neighbor.path_length = REISERFS_PATH_OFFILL;
+    search_by_key (s, &key, &path_to_left_neighbor, LEAF_LEVEL);
+    if (REISERFS_PATH_LEAF_POS (&path_to_left_neighbor) == 0) {
+	reiserfs_tree_pathrelse (&path_to_left_neighbor);
 	return 0;
     }
-    bh = PATH_PLAST_BUFFER (&path_to_left_neighbor);
+    bh = REISERFS_PATH_LEAF (&path_to_left_neighbor);
     bh->b_count ++;
-    pathrelse (&path_to_left_neighbor);
+    reiserfs_tree_pathrelse (&path_to_left_neighbor);
     return bh;
 }
 
-
-extern struct key  MIN_KEY;
-static struct buffer_head * get_right_neighbor (reiserfs_filsys_t * s, struct path * path)
+/* FIXME: move this to tree.c when get rid of fix_node.c:search_by_key. */
+reiserfs_bh_t * reiserfs_tree_right_neighbor (reiserfs_filsys_t * s, 
+						   reiserfs_path_t * path)
 {
-    struct key key;
-    struct key * rkey;
-    struct path path_to_right_neighbor;
-    struct buffer_head * bh;
+    reiserfs_key_t key;
+    const reiserfs_key_t *rkey;
+    reiserfs_path_t path_to_right_neighbor;
+    reiserfs_bh_t * bh;
     
-    rkey = get_rkey (path, s);
-    if (comp_keys (rkey, &MIN_KEY) == 0)
-	reiserfs_panic ("vs-16080: get_right_neighbor: get_rkey returned min key (path has changed)");
-    copy_key (&key, rkey);
-    
-  
-    init_path (&path_to_right_neighbor);
-    search_by_key (s, &key, &path_to_right_neighbor, DISK_LEAF_NODE_LEVEL);
-    if (PATH_PLAST_BUFFER (&path_to_right_neighbor) == PATH_PLAST_BUFFER (path)) {
-	pathrelse (&path_to_right_neighbor);
+    rkey = reiserfs_tree_rkey (path, s);
+    if (reiserfs_key_comp (rkey, &MIN_KEY) == 0) {
+	reiserfs_panic ("vs-16080: reiserfs_tree_right_neighbor: "
+			"reiserfs_tree_rkey returned min key (path "
+			"has changed)");
+    }
+
+    reiserfs_key_copy (&key, rkey);
+ 
+    path_to_right_neighbor.path_length = REISERFS_PATH_OFFILL;
+    search_by_key (s, &key, &path_to_right_neighbor, LEAF_LEVEL);
+    if (REISERFS_PATH_LEAF (&path_to_right_neighbor) == REISERFS_PATH_LEAF (path)) {
+	reiserfs_tree_pathrelse (&path_to_right_neighbor);
 	return 0;
     }
-    bh = PATH_PLAST_BUFFER (&path_to_right_neighbor);
+    bh = REISERFS_PATH_LEAF (&path_to_right_neighbor);
     bh->b_count ++;
-    pathrelse (&path_to_right_neighbor);
+    reiserfs_tree_pathrelse (&path_to_right_neighbor);
     return bh;
 }
 
-
-int is_left_mergeable (reiserfs_filsys_t * s, struct path * path)
-{
-    struct item_head * right;
-    struct buffer_head * bh;
-    int retval;
-    
-    right = B_N_PITEM_HEAD (PATH_PLAST_BUFFER (path), 0);
-    
-    bh = get_left_neighbor (s, path);
-    if (bh == 0) {
-	return 0;
-    }
-    retval = are_items_mergeable (B_N_PITEM_HEAD (bh, B_NR_ITEMS (bh) - 1), right, bh->b_size);
-    brelse (bh);
-    return retval;
-}
-
-
-int is_right_mergeable (reiserfs_filsys_t * s, struct path * path)
-{
-    struct item_head * left;
-    struct buffer_head * bh;
-    int retval;
-    
-    left = B_N_PITEM_HEAD (PATH_PLAST_BUFFER (path), B_NR_ITEMS (PATH_PLAST_BUFFER (path)) - 1);
-    
-    bh = get_right_neighbor (s, path);
-    if (bh == 0) {
-	return 0;
-    }
-    retval = are_items_mergeable (left, B_N_PITEM_HEAD (bh, 0), bh->b_size);
-    brelse (bh);
-    return retval;
-}
-
-
-
 /* check, does node disappear if we shift tb->lnum[0] items to left neighbor
    and tb->rnum[0] to the right one. */
-static int is_leaf_removable (struct tree_balance * tb)
+static int is_leaf_removable (reiserfs_tb_t * tb)
 {
-    struct virtual_node * vn = tb->tb_vn;
+    struct reiserfs_virtual_node * vn = tb->tb_vn;
     int to_left, to_right;
     int size;
     int remain_items;
@@ -981,52 +1062,55 @@
 
 
 /* check whether L, S, R can be joined in one node */
-static int are_leaves_removable (struct tree_balance * tb, int lfree, int rfree)
+static int are_leaves_removable (reiserfs_tb_t * tb, int lfree, int rfree)
 {
-    struct virtual_node * vn = tb->tb_vn;
+    struct reiserfs_virtual_node * vn = tb->tb_vn;
     int ih_size;
-    struct buffer_head *S0;
+    reiserfs_bh_t *S0;
 
-    S0 = PATH_H_PBUFFER (tb->tb_path, 0);
+    S0 = REISERFS_PATH_UPBUFFER (tb->tb_path, 0);
 
     ih_size = 0;
     if (vn->vn_nr_item) {
 	if (vn->vn_vi[0].vi_type & VI_TYPE_LEFT_MERGEABLE)
-	    ih_size += IH_SIZE;
+	    ih_size += REISERFS_IH_SIZE;
     
 	if (vn->vn_vi[vn->vn_nr_item-1].vi_type & VI_TYPE_RIGHT_MERGEABLE)
-	    ih_size += IH_SIZE;
+	    ih_size += REISERFS_IH_SIZE;
     } else {
 	/* there was only one item and it will be deleted */
-	struct item_head * ih;
+	reiserfs_ih_t * ih;
     
-	ih = B_N_PITEM_HEAD (S0, 0);
-	if (tb->CFR[0] && !not_of_one_file (&(ih->ih_key), B_N_PDELIM_KEY (tb->CFR[0], tb->rkey[0])))
-	    if (I_IS_DIRECTORY_ITEM(ih)) {
+	ih = reiserfs_ih_at (S0, 0);
+	if (tb->CFR[0] && 
+	    !reiserfs_key_comp2 (&(ih->ih_key), 
+				 reiserfs_int_key_at (tb->CFR[0], tb->rkey[0])))
+	{
+	    if (reiserfs_ih_dir(ih)) {
 		/* we can delete any directory item in fsck (if it is unreachable) */
-		if (get_offset (&ih->ih_key) != DOT_OFFSET) {
+		if (reiserfs_key_get_off (&ih->ih_key) != OFFSET_DOT) {
 		    /* must get left neighbor here to make sure, that
                        left neighbor is of the same directory */
-		    struct buffer_head * left;
+		    reiserfs_bh_t * left;
 		    
-		    left = get_left_neighbor (tb->tb_fs, tb->tb_path);
+		    left = reiserfs_tree_left_neighbor (tb->tb_fs, tb->tb_path);
 		    if (left) {
-			struct item_head * last;
+			reiserfs_ih_t * last;
 
-			if (B_NR_ITEMS (left) == 0)
+			if (reiserfs_node_items (left) == 0)
 			    reiserfs_panic ("vs-8135: are_leaves_removable: "
 					    "empty node in the tree");
-			last = B_N_PITEM_HEAD (left, B_NR_ITEMS (left) - 1);
-			if (!comp_short_keys (&last->ih_key, &ih->ih_key))
-			    ih_size = IH_SIZE;
-			brelse (left);
+			last = reiserfs_ih_at (left, reiserfs_node_items (left) - 1);
+			if (!reiserfs_key_comp2 (&last->ih_key, &ih->ih_key))
+			    ih_size = REISERFS_IH_SIZE;
+			reiserfs_buffer_close (left);
 		    }
 		}
 	    }
-    
+	}
     }
 
-    if ((int)MAX_CHILD_SIZE(S0->b_size) + vn->vn_size <= rfree + lfree + ih_size) {
+    if ((int)REISERFS_NODE_SPACE(S0->b_size) + vn->vn_size <= rfree + lfree + ih_size) {
 	set_parameters (tb, 0, -1, -1, -1, NULL, -1, -1);
 	return 1;  
     }
@@ -1042,8 +1126,8 @@
 {\
    int to_l;\
    \
-   to_l = (MAX_NR_KEY(Sh)+1 - lpar + vn->vn_nr_item + 1) / 2 -\
-	      (MAX_NR_KEY(Sh) + 1 - lpar);\
+   to_l = (REISERFS_INT_MAX(Sh)+1 - lpar + vn->vn_nr_item + 1) / 2 -\
+	      (REISERFS_INT_MAX(Sh) + 1 - lpar);\
 	      \
 	      set_parameters (tb, h, to_l, 0, lnver, NULL, -1, -1);\
 }\
@@ -1063,7 +1147,7 @@
 {\
    int to_r;\
    \
-   to_r = (MAX_NR_KEY(Sh)+1 - rpar + vn->vn_nr_item + 1) / 2 - (MAX_NR_KEY(Sh) + 1 - rpar);\
+   to_r = (REISERFS_INT_MAX(Sh)+1 - rpar + vn->vn_nr_item + 1) / 2 - (REISERFS_INT_MAX(Sh) + 1 - rpar);\
    \
    set_parameters (tb, h, 0, to_r, rnver, NULL, -1, -1);\
 }\
@@ -1084,13 +1168,13 @@
  *	        CARRY_ON - schedule didn't occur while the function worked;
  *	        NO_DISK_SPACE - no disk space.
  */
-static int  get_empty_nodes (struct tree_balance * p_s_tb,
+static int  get_empty_nodes (reiserfs_tb_t * p_s_tb,
 			     int n_h)
 {
-    struct buffer_head  * p_s_new_bh,
-	*	p_s_Sh = PATH_H_PBUFFER (p_s_tb->tb_path, n_h);
+    reiserfs_bh_t  * p_s_new_bh,
+	*	p_s_Sh = REISERFS_PATH_UPBUFFER (p_s_tb->tb_path, n_h);
     unsigned long	      *	p_n_blocknr,
-	a_n_blocknrs[MAX_AMOUNT_NEEDED] = {0, };
+	a_n_blocknrs[FN_AMOUNT_MAX] = {0, };
     int       		n_counter,
 	n_number_of_freeblk,
 	n_amount_needed,/* number of needed empty blocks */
@@ -1130,17 +1214,20 @@
     else /* If we have enough already then there is nothing to do. */
 	return CARRY_ON;
 
-    if ( (n_repeat = reiserfs_new_blocknrs (p_s_tb->tb_fs, a_n_blocknrs,
-					    PATH_PLAST_BUFFER(p_s_tb->tb_path)->b_blocknr, n_amount_needed)) != CARRY_ON ) {
+    assert(fs->block_allocator != NULL);
+    if ( (n_repeat = fs->block_allocator (p_s_tb->tb_fs, a_n_blocknrs,
+					    REISERFS_PATH_LEAF(p_s_tb->tb_path)->b_blocknr,
+					    n_amount_needed)) != CARRY_ON ) 
+    {
 	return n_repeat; /* Out of disk space. */ 
     }
 
     /* for each blocknumber we just got, get a buffer and stick it on FEB */
     for ( p_n_blocknr = a_n_blocknrs, n_counter = 0; n_counter < n_amount_needed;
 	  p_n_blocknr++, n_counter++ ) { 
-	p_s_new_bh = getblk (fs->fs_dev, *p_n_blocknr, fs->fs_blocksize);
+	p_s_new_bh = reiserfs_buffer_open (fs->fs_dev, *p_n_blocknr, fs->fs_blocksize);
 	if (p_s_new_bh->b_count > 1) {
-	    die ("get_empty_nodes: not free empty buffer");
+	    misc_die ("get_empty_nodes: not free empty buffer");
 	}
 	
 	/* Put empty buffers into the array. */
@@ -1154,56 +1241,56 @@
 /* Get free space of the left neighbor,
  * which is stored in the parent node of the left neighbor.
  */
-static int get_lfree (struct tree_balance * tb, int h)
+static int get_lfree (reiserfs_tb_t * tb, int h)
 {
-    struct buffer_head * l, * f;
+    reiserfs_bh_t * l, * f;
     int order;
 
-    if ((f = PATH_H_PPARENT (tb->tb_path, h)) == 0 || (l = tb->FL[h]) == 0)
+    if ((f = REISERFS_PATH_UPPARENT (tb->tb_path, h)) == 0 || (l = tb->FL[h]) == 0)
 	return 0;
 
     if (f == l)
-	order = PATH_H_B_ITEM_ORDER (tb->tb_path, h) - 1;
+	order = REISERFS_PATH_UPPARENT_POS (tb->tb_path, h) - 1;
     else {
-	order = get_blkh_nr_items (B_BLK_HEAD(l));
+	order = reiserfs_nh_get_items (NODE_HEAD(l));
 	f = l;
     }
 
-    if (get_dc_child_size (B_N_CHILD(f,order)) == 0) {
+    if (reiserfs_dc_get_size (reiserfs_int_at(f,order)) == 0) {
 	reiserfs_warning (stderr, "get_lfree: block %u block_head %z has bad child pointer %y, order %d\n",
-			  l->b_blocknr, l, B_N_CHILD(f,order), order);
+			  l->b_blocknr, l, reiserfs_int_at(f,order), order);
     }
-    return (MAX_CHILD_SIZE(f->b_size) - get_dc_child_size (B_N_CHILD(f,order)));
+    return (REISERFS_NODE_SPACE(f->b_size) - reiserfs_dc_get_size (reiserfs_int_at(f,order)));
 }
 
 
 /* Get free space of the right neighbor, which is stored in the parent node of
  * the right neighbor.  */
-static int get_rfree (struct tree_balance * tb, int h)
+static int get_rfree (reiserfs_tb_t * tb, int h)
 {
-    struct buffer_head * r, * f;
+    reiserfs_bh_t * r, * f;
     int order;
 
-    if ((f = PATH_H_PPARENT (tb->tb_path, h)) == 0 || (r = tb->FR[h]) == 0)
+    if ((f = REISERFS_PATH_UPPARENT (tb->tb_path, h)) == 0 || (r = tb->FR[h]) == 0)
 	return 0;
 
     if (f == r)
-	order = PATH_H_B_ITEM_ORDER (tb->tb_path, h) + 1;
+	order = REISERFS_PATH_UPPARENT_POS (tb->tb_path, h) + 1;
     else {
 	order = 0;
 	f = r;
     }
 
-    return (MAX_CHILD_SIZE(f->b_size) - get_dc_child_size (B_N_CHILD(f,order)));
+    return (REISERFS_NODE_SPACE(f->b_size) - reiserfs_dc_get_size (reiserfs_int_at(f,order)));
 
 }
 
 
 /* Check whether left neighbor is in memory. */
-static int  is_left_neighbor_in_cache (struct tree_balance * p_s_tb,
+static int  is_left_neighbor_in_cache (reiserfs_tb_t * p_s_tb,
 				       int n_h)
 {
-    struct buffer_head  * p_s_father;
+    reiserfs_bh_t  * p_s_father;
     reiserfs_filsys_t * fs = p_s_tb->tb_fs;
     unsigned long         n_left_neighbor_blocknr;
     int                   n_left_neighbor_position;
@@ -1212,15 +1299,18 @@
 	return 0;
 
     /* Calculate father of the node to be balanced. */
-    p_s_father = PATH_H_PBUFFER(p_s_tb->tb_path, n_h + 1);
+    p_s_father = REISERFS_PATH_UPBUFFER(p_s_tb->tb_path, n_h + 1);
     /* Get position of the pointer to the left neighbor into the left father. */
     n_left_neighbor_position = ( p_s_father == p_s_tb->FL[n_h] ) ?
-	p_s_tb->lkey[n_h] : get_blkh_nr_items (B_BLK_HEAD(p_s_tb->FL[n_h]));
+	p_s_tb->lkey[n_h] : reiserfs_nh_get_items (NODE_HEAD(p_s_tb->FL[n_h]));
     /* Get left neighbor block number. */
-    n_left_neighbor_blocknr = get_dc_child_blocknr (B_N_CHILD (p_s_tb->FL[n_h], n_left_neighbor_position));
+    n_left_neighbor_blocknr = reiserfs_dc_get_nr (reiserfs_int_at (p_s_tb->FL[n_h], n_left_neighbor_position));
     /* Look for the left neighbor in the cache. */
-    if ( (p_s_father = find_buffer(fs->fs_dev, n_left_neighbor_blocknr, fs->fs_blocksize)) )
+    if ( (p_s_father = reiserfs_buffer_find(fs->fs_dev, n_left_neighbor_blocknr,
+				      fs->fs_blocksize)) )
+    {
 	return 1;
+    }
 
     return 0;
 }
@@ -1230,13 +1320,6 @@
 #define RIGHT_PARENTS 'r'
 
 
-
-void init_path (struct path * path)
-{
-    path->path_length = ILLEGAL_PATH_ELEMENT_OFFSET;
-}
-
-
 /* Calculate far left/right parent of the left/right neighbor of the current node, that
  * is calculate the left/right (FL[h]/FR[h]) neighbor of the parent F[h].
  * Calculate left/right common parent of the current node and L[h]/R[h].
@@ -1245,43 +1328,43 @@
  		SCHEDULE_OCCURRED - schedule occured while the function worked;
  *	        CARRY_ON         - schedule didn't occur while the function worked;
  */
-static int get_far_parent (struct tree_balance *   p_s_tb,
+static int get_far_parent (reiserfs_tb_t *   p_s_tb,
 			   int n_h,
-			   struct buffer_head  **  pp_s_father,
-			   struct buffer_head  **  pp_s_com_father,
+			   reiserfs_bh_t  **  pp_s_father,
+			   reiserfs_bh_t  **  pp_s_com_father,
 			   char c_lr_par)
 {
-    struct buffer_head  * p_s_parent;
-    struct path         	s_path_to_neighbor_father,
+    reiserfs_bh_t  * p_s_parent;
+    reiserfs_path_t         	s_path_to_neighbor_father,
 	* p_s_path = p_s_tb->tb_path;
-    struct key		s_lr_father_key;
+    reiserfs_key_t		s_lr_father_key;
     int                   n_counter,
 	n_position = -1,
 	n_first_last_position = 0,
-	n_path_offset = PATH_H_PATH_OFFSET(p_s_path, n_h);
+	n_path_offset = REISERFS_PATH_LEVEL(p_s_path, n_h);
     
     /* Starting from F[n_h] go upwards in the tree, and look for the common
        ancestor of F[n_h], and its neighbor l/r, that should be obtained. */
     
     n_counter = n_path_offset;
     
-    for ( ; n_counter > FIRST_PATH_ELEMENT_OFFSET; n_counter--  )  {
+    for ( ; n_counter > REISERFS_PATH_OFFINIT; n_counter--  )  {
 	/* Check whether parent of the current buffer in the path is really parent in the tree. */
-	if ( ! B_IS_IN_TREE(p_s_parent = PATH_OFFSET_PBUFFER(p_s_path, n_counter - 1)) )
+	if ( ! REISERFS_NODE_INTREE(p_s_parent = REISERFS_PATH_BUFFER(p_s_path, n_counter - 1)) )
 	    reiserfs_panic ("get_far_parent: buffer of path is notin the tree");
 
 	/* Check whether position in the parent is correct. */
-	if ( (n_position = PATH_OFFSET_POSITION(p_s_path, n_counter - 1)) > B_NR_ITEMS(p_s_parent) )
+	if ( (n_position = REISERFS_PATH_POS(p_s_path, n_counter - 1)) > reiserfs_node_items(p_s_parent) )
 	    reiserfs_panic ("get_far_parent: incorrect position in the parent");
 
 	/* Check whether parent at the path really points to the child. */
-	if ( get_dc_child_blocknr (B_N_CHILD (p_s_parent, n_position)) !=
-	     PATH_OFFSET_PBUFFER(p_s_path, n_counter)->b_blocknr )
+	if ( reiserfs_dc_get_nr (reiserfs_int_at (p_s_parent, n_position)) !=
+	     REISERFS_PATH_BUFFER(p_s_path, n_counter)->b_blocknr )
 	    reiserfs_panic ("get_far_parent: incorrect disk child in the parent");
 
 	/* Return delimiting key if position in the parent is not equal to first/last one. */
 	if ( c_lr_par == RIGHT_PARENTS )
-	    n_first_last_position = get_blkh_nr_items (B_BLK_HEAD(p_s_parent));
+	    n_first_last_position = reiserfs_nh_get_items (NODE_HEAD(p_s_parent));
 	if ( n_position != n_first_last_position ) {
 	    (*pp_s_com_father = p_s_parent)->b_count++;
 	    break;
@@ -1289,14 +1372,14 @@
     }
     
     /* we are in the root of the tree. */
-    if ( n_counter == FIRST_PATH_ELEMENT_OFFSET ) {
-	struct reiserfs_super_block * sb;
+    if ( n_counter == REISERFS_PATH_OFFINIT ) {
+	reiserfs_sb_t * sb;
 
 	sb = p_s_tb->tb_fs->fs_ondisk_sb;
 
 	/* Check whether first buffer in the path is the root of the tree. */
-	if ( PATH_OFFSET_PBUFFER(p_s_tb->tb_path, FIRST_PATH_ELEMENT_OFFSET)->b_blocknr ==
-	     get_sb_root_block (sb) ) {
+	if ( REISERFS_PATH_BUFFER(p_s_tb->tb_path, REISERFS_PATH_OFFINIT)->b_blocknr ==
+	     reiserfs_sb_get_root (sb) ) {
 	    *pp_s_father = *pp_s_com_father = NULL;
 	    return CARRY_ON;
 	}
@@ -1310,7 +1393,7 @@
        neighbor.  Now we are geting the parent of the left/right neighbor. */
 
     /* Form key to get parent of the left/right neighbor. */
-    copy_key(&s_lr_father_key, B_N_PDELIM_KEY(*pp_s_com_father, ( c_lr_par == LEFT_PARENTS ) ?
+    reiserfs_key_copy(&s_lr_father_key, reiserfs_int_key_at(*pp_s_com_father, ( c_lr_par == LEFT_PARENTS ) ?
 					      (p_s_tb->lkey[n_h - 1] = n_position - 1) : (p_s_tb->rkey[n_h - 1] = n_position)));
 
     if ( c_lr_par == LEFT_PARENTS ) {
@@ -1319,14 +1402,14 @@
 	//reiserfs_warning ("done: %k\n", &s_lr_father_key);
     }
 
-    init_path (&s_path_to_neighbor_father);
+    s_path_to_neighbor_father.path_length = REISERFS_PATH_OFFILL;
     
     if (search_by_key(p_s_tb->tb_fs, &s_lr_father_key, &s_path_to_neighbor_father, n_h + 1) == IO_ERROR)
 	return IO_ERROR;
     
-    *pp_s_father = PATH_PLAST_BUFFER(&s_path_to_neighbor_father);
+    *pp_s_father = REISERFS_PATH_LEAF(&s_path_to_neighbor_father);
     s_path_to_neighbor_father.path_length--;
-    pathrelse (&s_path_to_neighbor_father);
+    reiserfs_tree_pathrelse (&s_path_to_neighbor_father);
     //decrement_counters_in_path(&s_path_to_neighbor_father);
     return CARRY_ON;
 }
@@ -1339,23 +1422,23 @@
  * Returns:	SCHEDULE_OCCURRED - schedule occured while the function worked;
  *	        CARRY_ON - schedule didn't occur while the function worked;
  */
-static int  get_parents (struct tree_balance * p_s_tb, int n_h)
+static int  get_parents (reiserfs_tb_t * p_s_tb, int n_h)
 {
-    struct path         * p_s_path = p_s_tb->tb_path;
+    reiserfs_path_t         * p_s_path = p_s_tb->tb_path;
     int                   n_position,
 	n_ret_value,
-	n_path_offset = PATH_H_PATH_OFFSET(p_s_tb->tb_path, n_h);
-    struct buffer_head  * p_s_curf,
+	n_path_offset = REISERFS_PATH_LEVEL(p_s_tb->tb_path, n_h);
+    reiserfs_bh_t  * p_s_curf,
 	* p_s_curcf;
 
     /* Current node is the root of the tree or will be root of the tree */
-    if ( n_path_offset <= FIRST_PATH_ELEMENT_OFFSET ) {
+    if ( n_path_offset <= REISERFS_PATH_OFFINIT ) {
 	/* The root can not have parents.
 	   Release nodes which previously were obtained as parents of the current node neighbors. */
-	brelse(p_s_tb->FL[n_h]);
-	brelse(p_s_tb->CFL[n_h]);
-	brelse(p_s_tb->FR[n_h]);
-	brelse(p_s_tb->CFR[n_h]);
+	reiserfs_buffer_close(p_s_tb->FL[n_h]);
+	reiserfs_buffer_close(p_s_tb->CFL[n_h]);
+	reiserfs_buffer_close(p_s_tb->FR[n_h]);
+	reiserfs_buffer_close(p_s_tb->CFR[n_h]);
 	//decrement_bcount(p_s_tb->FL[n_h]);
 	//decrement_bcount(p_s_tb->CFL[n_h]);
 	//decrement_bcount(p_s_tb->FR[n_h]);
@@ -1365,9 +1448,9 @@
     }
   
     /* Get parent FL[n_path_offset] of L[n_path_offset]. */
-    if ( (n_position = PATH_OFFSET_POSITION(p_s_path, n_path_offset - 1)) )  {
+    if ( (n_position = REISERFS_PATH_POS(p_s_path, n_path_offset - 1)) )  {
 	/* Current node is not the first child of its parent. */
-	(p_s_curf = p_s_curcf = PATH_OFFSET_PBUFFER(p_s_path, n_path_offset - 1))->b_count += 2;
+	(p_s_curf = p_s_curcf = REISERFS_PATH_BUFFER(p_s_path, n_path_offset - 1))->b_count += 2;
 	p_s_tb->lkey[n_h] = n_position - 1;
     }
     else  {
@@ -1380,16 +1463,16 @@
 	    return n_ret_value; /*schedule() occured or path is not correct*/
     }
 
-    brelse(p_s_tb->FL[n_h]);	
+    reiserfs_buffer_close(p_s_tb->FL[n_h]);	
     p_s_tb->FL[n_h] = p_s_curf; /* New initialization of FL[n_h]. */
  
-    brelse(p_s_tb->CFL[n_h]);
+    reiserfs_buffer_close(p_s_tb->CFL[n_h]);
     p_s_tb->CFL[n_h] = p_s_curcf; /* New initialization of CFL[n_h]. */
 
 /* Get parent FR[n_h] of R[n_h]. */
 
 /* Current node is the last child of F[n_h]. FR[n_h] != F[n_h]. */
-    if ( n_position == get_blkh_nr_items (B_BLK_HEAD(PATH_H_PBUFFER(p_s_path, n_h + 1))) ) {
+    if ( n_position == reiserfs_nh_get_items (NODE_HEAD(REISERFS_PATH_UPBUFFER(p_s_path, n_h + 1))) ) {
 /* Calculate current parent of R[n_h], which is the right neighbor of F[n_h].
    Calculate current common parent of R[n_h] and current node. Note that CFR[n_h]
    not equal FR[n_path_offset] and CFR[n_h] not equal F[n_h]. */
@@ -1398,14 +1481,14 @@
     }
     else {
 /* Current node is not the last child of its parent F[n_h]. */
-	(p_s_curf = p_s_curcf = PATH_OFFSET_PBUFFER(p_s_path, n_path_offset - 1))->b_count += 2;
+	(p_s_curf = p_s_curcf = REISERFS_PATH_BUFFER(p_s_path, n_path_offset - 1))->b_count += 2;
 	p_s_tb->rkey[n_h] = n_position;
     }	
 
-    brelse/*decrement_bcount*/(p_s_tb->FR[n_h]);
+    reiserfs_buffer_close/*decrement_bcount*/(p_s_tb->FR[n_h]);
     p_s_tb->FR[n_h] = p_s_curf; /* New initialization of FR[n_path_offset]. */
 
-    brelse/*decrement_bcount*/(p_s_tb->CFR[n_h]);
+    reiserfs_buffer_close/*decrement_bcount*/(p_s_tb->CFR[n_h]);
     p_s_tb->CFR[n_h] = p_s_curcf; /* New initialization of CFR[n_path_offset]. */
 
     return CARRY_ON; /* schedule not occured while get_parents() worked. */
@@ -1414,26 +1497,26 @@
 
 /* it is possible to remove node as result of shiftings to
    neighbors even when we insert or paste item. */
-static inline int can_node_be_removed (int mode, int lfree, int sfree, int rfree, struct tree_balance * tb, int h)
+static inline int can_node_be_removed (int mode, int lfree, int sfree, int rfree, reiserfs_tb_t * tb, int h)
 {
-    struct buffer_head * Sh = PATH_H_PBUFFER (tb->tb_path, h);
+    reiserfs_bh_t * Sh = REISERFS_PATH_UPBUFFER (tb->tb_path, h);
     int levbytes = tb->insert_size[h];
-    struct item_head * r_ih = NULL;
+    reiserfs_ih_t * r_ih = NULL;
   
     if ( tb->CFR[h] )
-	r_ih = (struct item_head *)B_N_PDELIM_KEY(tb->CFR[h],tb->rkey[h]);
+	r_ih = (reiserfs_ih_t *)reiserfs_int_key_at(tb->CFR[h],tb->rkey[h]);
   
-    if (lfree + rfree + sfree < (int)(MAX_CHILD_SIZE(Sh->b_size) + levbytes
+    if (lfree + rfree + sfree < (int)(REISERFS_NODE_SPACE(Sh->b_size) + levbytes
 	/* shifting may merge items which might save space */
-	- (( ! h && is_left_mergeable (tb->tb_fs, tb->tb_path) == 1 ) ? IH_SIZE : 0)
-	- (( ! h && r_ih && is_right_mergeable (tb->tb_fs, tb->tb_path) == 1 ) ? IH_SIZE : 0)
-	+ (( h ) ? KEY_SIZE : 0)))
+	- (( ! h && reiserfs_tree_left_mergeable (tb->tb_fs, tb->tb_path) == 1 ) ? REISERFS_IH_SIZE : 0)
+	- (( ! h && r_ih && reiserfs_tree_right_mergeable (tb->tb_fs, tb->tb_path) == 1 ) ? REISERFS_IH_SIZE : 0)
+	+ (( h ) ? REISERFS_KEY_SIZE : 0)))
     {
 	/* node can not be removed */
 	if (sfree >= levbytes ) /* new item fits into node S[h] without any shifting */
 	{
 	    if ( ! h )
-		tb->s0num = B_NR_ITEMS(Sh) + ((mode == M_INSERT ) ? 1 : 0);
+		tb->s0num = reiserfs_node_items(Sh) + ((mode == M_INSERT ) ? 1 : 0);
 	    set_parameters (tb, h, 0, 0, 1, NULL, -1, -1);
 	    return NO_BALANCING_NEEDED;
 	}
@@ -1457,9 +1540,9 @@
  *	       -2 - no disk space.
  */
 /* ip means Inserting or Pasting */
-static int ip_check_balance (/*struct reiserfs_transaction_handle *th,*/ struct tree_balance * tb, int h)
+static int ip_check_balance (reiserfs_tb_t * tb, int h)
 {
-    struct virtual_node * vn = tb->tb_vn;
+    struct reiserfs_virtual_node * vn = tb->tb_vn;
     int levbytes,  /* Number of bytes that must be inserted into (value is
 		      negative if bytes are deleted) buffer which contains
 		      node being balanced.  The mnemonic is that the attempted
@@ -1492,7 +1575,7 @@
 				   */
 
     /* Sh is the node whose balance is currently being checked */
-    struct buffer_head * Sh;
+    reiserfs_bh_t * Sh;
   
     /* special mode for insert pointer to the most low internal node */
     if (h == 0 && vn->vn_mode == M_INTERNAL) {
@@ -1501,7 +1584,7 @@
 	return 0;
     }
 
-    Sh = PATH_H_PBUFFER (tb->tb_path, h);
+    Sh = REISERFS_PATH_UPBUFFER (tb->tb_path, h);
     levbytes = tb->insert_size[h];
     
     /* Calculate balance parameters for creating new root. */
@@ -1524,7 +1607,7 @@
     if ( (n_ret_value = get_parents (tb, h)) != CARRY_ON ) /* get parents of S[h] neighbors. */
 	return n_ret_value;
     
-    sfree = get_blkh_free_space (B_BLK_HEAD(Sh));
+    sfree = reiserfs_nh_get_free (NODE_HEAD(Sh));
     
     /* get free space of neighbors */
     rfree = get_rfree (tb, h);
@@ -1534,7 +1617,7 @@
 	/* and new item fits into node S[h] without any shifting */
 	return NO_BALANCING_NEEDED;
     
-    create_virtual_node (tb, h);
+    create_reiserfs_virtual_node (tb, h);
     
      /* determine maximal number of items we can shift to the left neighbor
 	(in tb structure) and the maximal number of bytes that can flow to the
@@ -1559,8 +1642,8 @@
 	  rather than the space they consume.  In this routine we set the left
 	  node equal to the right node, allowing a difference of less than or
 	  equal to 1 child pointer. */
-	to_r = ((MAX_NR_KEY(Sh)<<1)+2-tb->lnum[h]-tb->rnum[h]+vn->vn_nr_item+1)/2 - 
-	    (MAX_NR_KEY(Sh) + 1 - tb->rnum[h]);
+	to_r = ((REISERFS_INT_MAX(Sh)<<1)+2-tb->lnum[h]-tb->rnum[h]+vn->vn_nr_item+1)/2 - 
+	    (REISERFS_INT_MAX(Sh) + 1 - tb->rnum[h]);
 	set_parameters (tb, h, vn->vn_nr_item + 1 - to_r, to_r, 0, NULL, -1, -1);
 	return CARRY_ON;
     }
@@ -1763,23 +1846,23 @@
  * Note: Items of internal nodes have fixed size, so the balance condition for
  * the internal part of internal tree is as for the B-trees.
  */
-static int dc_check_balance_internal (struct tree_balance * tb, int h)
+static int dc_check_balance_internal (reiserfs_tb_t * tb, int h)
 {
-    struct virtual_node * vn = tb->tb_vn;
+    struct reiserfs_virtual_node * vn = tb->tb_vn;
 
   /* Sh is the node whose balance is currently being checked,
      and Fh is its father.  */
-    struct buffer_head * Sh, * Fh;
+    reiserfs_bh_t * Sh, * Fh;
     int n_ret_value;
     int lfree, rfree /* free space in L and R */;
 
-    Sh = PATH_H_PBUFFER (tb->tb_path, h); 
-    Fh = PATH_H_PPARENT (tb->tb_path, h); 
+    Sh = REISERFS_PATH_UPBUFFER (tb->tb_path, h); 
+    Fh = REISERFS_PATH_UPPARENT (tb->tb_path, h); 
 
     /* using tb->insert_size[h], which is negative in this case,
-       create_virtual_node calculates: new_nr_item = number of items node
+       create_reiserfs_virtual_node calculates: new_nr_item = number of items node
        would have if operation is performed without balancing (new_nr_item); */
-    create_virtual_node (tb, h);
+    create_reiserfs_virtual_node (tb, h);
 
     if ( ! Fh ) {
 	/* S[h] is the root. */
@@ -1806,10 +1889,10 @@
     check_left (tb, h, lfree);
     check_right (tb, h, rfree);
     
-    if ( vn->vn_nr_item >= MIN_NR_KEY(Sh) ) {
+    if ( vn->vn_nr_item >= REISERFS_INT_MIN(Sh) ) {
 	/* Balance condition for the internal node is valid. In this case we
 	 * balance only if it leads to better packing. */
-	if ( vn->vn_nr_item == MIN_NR_KEY(Sh) ) {
+	if ( vn->vn_nr_item == REISERFS_INT_MIN(Sh) ) {
 	    /* Here we join S[h] with one of its neighbors, which is
 	     * impossible with greater values of new_nr_item. */
 	    if ( tb->lnum[h] >= vn->vn_nr_item + 1 ) {
@@ -1817,8 +1900,8 @@
 		int n;
 		int order_L;
 		
-		order_L = ((n=PATH_H_B_ITEM_ORDER(tb->tb_path, h))==0) ? B_NR_ITEMS(tb->FL[h]) : n - 1;
-		n = get_dc_child_size (B_N_CHILD(tb->FL[h],order_L)) / (DC_SIZE + KEY_SIZE);
+		order_L = ((n=REISERFS_PATH_UPPARENT_POS(tb->tb_path, h))==0) ? reiserfs_node_items(tb->FL[h]) : n - 1;
+		n = reiserfs_dc_get_size (reiserfs_int_at(tb->FL[h],order_L)) / (REISERFS_DC_SIZE + REISERFS_KEY_SIZE);
 		set_parameters (tb, h, -n-1, 0, 0, NULL, -1, -1);
 		return CARRY_ON;
 	    }
@@ -1828,8 +1911,8 @@
 		int n;
 		int order_R;
 		
-		order_R = ((n=PATH_H_B_ITEM_ORDER(tb->tb_path, h))==B_NR_ITEMS(Fh)) ? 0 : n + 1;
-		n = get_dc_child_size (B_N_CHILD(tb->FR[h],order_R)) / (DC_SIZE + KEY_SIZE);
+		order_R = ((n=REISERFS_PATH_UPPARENT_POS(tb->tb_path, h))==reiserfs_node_items(Fh)) ? 0 : n + 1;
+		n = reiserfs_dc_get_size (reiserfs_int_at(tb->FR[h],order_R)) / (REISERFS_DC_SIZE + REISERFS_KEY_SIZE);
 		set_parameters (tb, h, 0, -n-1, 0, NULL, -1, -1);
 		return CARRY_ON;   
 	    }
@@ -1840,8 +1923,8 @@
                R[h]). */
 	    int to_r;
 	    
-	    to_r = ((MAX_NR_KEY(Sh)<<1)+2-tb->lnum[h]-tb->rnum[h]+vn->vn_nr_item+1)/2 - 
-		(MAX_NR_KEY(Sh) + 1 - tb->rnum[h]);
+	    to_r = ((REISERFS_INT_MAX(Sh)<<1)+2-tb->lnum[h]-tb->rnum[h]+vn->vn_nr_item+1)/2 - 
+		(REISERFS_INT_MAX(Sh) + 1 - tb->rnum[h]);
 	    set_parameters (tb, h, vn->vn_nr_item + 1 - to_r, to_r, 0, NULL, -1, -1);
 	    return CARRY_ON;
 	}
@@ -1858,8 +1941,8 @@
 	    int n;
 	    int order_L;
 	    
-	    order_L = ((n=PATH_H_B_ITEM_ORDER(tb->tb_path, h))==0) ? B_NR_ITEMS(tb->FL[h]) : n - 1;
-	    n = get_dc_child_size (B_N_CHILD(tb->FL[h],order_L)) / (DC_SIZE + KEY_SIZE);
+	    order_L = ((n=REISERFS_PATH_UPPARENT_POS(tb->tb_path, h))==0) ? reiserfs_node_items(tb->FL[h]) : n - 1;
+	    n = reiserfs_dc_get_size (reiserfs_int_at(tb->FL[h],order_L)) / (REISERFS_DC_SIZE + REISERFS_KEY_SIZE);
 	    set_parameters (tb, h, -n-1, 0, 0, NULL, -1, -1);
 	    return CARRY_ON;
 	}
@@ -1869,8 +1952,8 @@
 	int n;
 	int order_R;
 	
-	order_R = ((n=PATH_H_B_ITEM_ORDER(tb->tb_path, h))==B_NR_ITEMS(Fh)) ? 0 : (n + 1);
-	n = get_dc_child_size (B_N_CHILD(tb->FR[h],order_R)) / (DC_SIZE + KEY_SIZE);
+	order_R = ((n=REISERFS_PATH_UPPARENT_POS(tb->tb_path, h))==reiserfs_node_items(Fh)) ? 0 : (n + 1);
+	n = reiserfs_dc_get_size (reiserfs_int_at(tb->FR[h],order_R)) / (REISERFS_DC_SIZE + REISERFS_KEY_SIZE);
 	set_parameters (tb, h, 0, -n-1, 0, NULL, -1, -1);
 	return CARRY_ON;   
     }
@@ -1879,8 +1962,8 @@
     if (tb->rnum[h] + tb->lnum[h] >= vn->vn_nr_item + 1) {
 	int to_r;
 	
-	to_r = ((MAX_NR_KEY(Sh)<<1)+2-tb->lnum[h]-tb->rnum[h]+vn->vn_nr_item+1)/2 - 
-	    (MAX_NR_KEY(Sh) + 1 - tb->rnum[h]);
+	to_r = ((REISERFS_INT_MAX(Sh)<<1)+2-tb->lnum[h]-tb->rnum[h]+vn->vn_nr_item+1)/2 - 
+	    (REISERFS_INT_MAX(Sh) + 1 - tb->rnum[h]);
 	set_parameters (tb, h, vn->vn_nr_item + 1 - to_r, to_r, 0, NULL, -1, -1);
 	return CARRY_ON;
     }
@@ -1890,12 +1973,12 @@
     if (is_left_neighbor_in_cache (tb,h) || !tb->FR[h]) {
 	int from_l;
 		
-	from_l = (MAX_NR_KEY(Sh) + 1 - tb->lnum[h] + vn->vn_nr_item + 1) / 2 -  (vn->vn_nr_item + 1);
+	from_l = (REISERFS_INT_MAX(Sh) + 1 - tb->lnum[h] + vn->vn_nr_item + 1) / 2 -  (vn->vn_nr_item + 1);
 	set_parameters (tb, h, -from_l, 0, 1, NULL, -1, -1);
 	return CARRY_ON;
     }
     
-    set_parameters (tb, h, 0, -((MAX_NR_KEY(Sh)+1-tb->rnum[h]+vn->vn_nr_item+1)/2-(vn->vn_nr_item+1)), 1, 
+    set_parameters (tb, h, 0, -((REISERFS_INT_MAX(Sh)+1-tb->rnum[h]+vn->vn_nr_item+1)/2-(vn->vn_nr_item+1)), 1, 
 		    NULL, -1, -1);
     return CARRY_ON;
 }
@@ -1914,9 +1997,9 @@
  *	       -1 - no balancing for higher levels needed;
  *	       -2 - no disk space.
  */
-static int dc_check_balance_leaf (struct tree_balance * tb, int h)
+static int dc_check_balance_leaf (reiserfs_tb_t * tb, int h)
 {
-    struct virtual_node * vn = tb->tb_vn;
+    struct reiserfs_virtual_node * vn = tb->tb_vn;
 
     /* Number of bytes that must be deleted from (value is negative if bytes
        are deleted) buffer which contains node being balanced.  The mnemonic
@@ -1926,10 +2009,10 @@
     /* the maximal item size */
     int n_ret_value;
     /* F0 is the parent of the node whose balance is currently being checked */
-    struct buffer_head * F0;
+    reiserfs_bh_t * F0;
     int lfree, rfree /* free space in L and R */;
     
-    F0 = PATH_H_PPARENT (tb->tb_path, 0);
+    F0 = REISERFS_PATH_UPPARENT (tb->tb_path, 0);
 
     levbytes = tb->insert_size[h];
 
@@ -1946,7 +2029,7 @@
     rfree = get_rfree (tb, h);
     lfree = get_lfree (tb, h);		
 
-    create_virtual_node (tb, h);
+    create_reiserfs_virtual_node (tb, h);
     
     /* if 3 leaves can be merge to one, set parameters and return */
     if (are_leaves_removable (tb, lfree, rfree))
@@ -2001,7 +2084,7 @@
  *	       -1 - no balancing for higher levels needed;
  *	       -2 - no disk space.
  */
-static int dc_check_balance (struct tree_balance * tb, int h)
+static int dc_check_balance (reiserfs_tb_t * tb, int h)
 {
     if ( h )
 	return dc_check_balance_internal (tb, h);
@@ -2029,13 +2112,13 @@
  *	       -1 - no balancing for higher levels needed;
  *	       -2 - no disk space.
  */
-static int check_balance (int mode, struct tree_balance * tb,
+static int check_balance (int mode, reiserfs_tb_t * tb,
 			  int h, int inum, int pos_in_item,
-			  struct item_head * ins_ih)
+			  reiserfs_ih_t * ins_ih)
 {
-    struct virtual_node * vn;
+    struct reiserfs_virtual_node * vn;
     
-    vn = tb->tb_vn = (struct virtual_node *)(tb->vn_buf);// + ROUND_UP(SB_BMAP_NR (tb->tb_fs) * 2 / 8 + 1, 4));
+    vn = tb->tb_vn = (struct reiserfs_virtual_node *)(tb->vn_buf);// + MISC_ROUND_UP(SB_BMAP_NR (tb->tb_fs) * 2 / 8 + 1, 4));
     vn->vn_free_ptr = (char *)(tb->tb_vn + 1);
     vn->vn_mode = mode;
     vn->vn_affected_item_num = inum;
@@ -2052,38 +2135,38 @@
 
 
 /* Check whether parent at the path is the really parent of the current node.*/
-static void get_direct_parent (struct tree_balance * p_s_tb, int n_h)
+static void get_direct_parent (reiserfs_tb_t * p_s_tb, int n_h)
 {
-    struct buffer_head  * p_s_bh;
-    struct path         * p_s_path      = p_s_tb->tb_path;
+    reiserfs_bh_t  * p_s_bh;
+    reiserfs_path_t         * p_s_path      = p_s_tb->tb_path;
     int                   n_position,
-	n_path_offset = PATH_H_PATH_OFFSET(p_s_tb->tb_path, n_h);
+	n_path_offset = REISERFS_PATH_LEVEL(p_s_tb->tb_path, n_h);
     
     /* We are in the root or in the new root. */
-    if ( n_path_offset <= FIRST_PATH_ELEMENT_OFFSET ) {
-	struct reiserfs_super_block * sb;
+    if ( n_path_offset <= REISERFS_PATH_OFFINIT ) {
+	reiserfs_sb_t * sb;
 	
-	if ( n_path_offset < FIRST_PATH_ELEMENT_OFFSET - 1 )
+	if ( n_path_offset < REISERFS_PATH_OFFINIT - 1 )
 	    reiserfs_panic ("PAP-8260: get_direct_parent: illegal offset in the path");
 
 	sb = p_s_tb->tb_fs->fs_ondisk_sb;
-	if ( PATH_OFFSET_PBUFFER(p_s_path, FIRST_PATH_ELEMENT_OFFSET)->b_blocknr ==
-	     get_sb_root_block (sb) ) {
+	if ( REISERFS_PATH_BUFFER(p_s_path, REISERFS_PATH_OFFINIT)->b_blocknr ==
+	     reiserfs_sb_get_root (sb) ) {
 	    /* Root is not changed. */
-	    PATH_OFFSET_PBUFFER(p_s_path, n_path_offset - 1) = NULL;
-	    PATH_OFFSET_POSITION(p_s_path, n_path_offset - 1) = 0;
+	    REISERFS_PATH_BUFFER(p_s_path, n_path_offset - 1) = NULL;
+	    REISERFS_PATH_POS(p_s_path, n_path_offset - 1) = 0;
 	    return;
 	}
 	reiserfs_panic ("get_direct_parent: root changed");
     }
     
-    if ( ! B_IS_IN_TREE(p_s_bh = PATH_OFFSET_PBUFFER(p_s_path, n_path_offset - 1)) )
+    if ( ! REISERFS_NODE_INTREE(p_s_bh = REISERFS_PATH_BUFFER(p_s_path, n_path_offset - 1)) )
 	reiserfs_panic ("get_direct_parent: parent in the path is not in the tree");
     
-    if ( (n_position = PATH_OFFSET_POSITION(p_s_path, n_path_offset - 1)) > B_NR_ITEMS(p_s_bh) )
+    if ( (n_position = REISERFS_PATH_POS(p_s_path, n_path_offset - 1)) > reiserfs_node_items(p_s_bh) )
 	reiserfs_panic ("get_direct_parent: wrong position in the path");
     
-    if ( get_dc_child_blocknr (B_N_CHILD(p_s_bh, n_position)) != PATH_OFFSET_PBUFFER(p_s_path, n_path_offset)->b_blocknr )
+    if ( reiserfs_dc_get_nr (reiserfs_int_at(p_s_bh, n_position)) != REISERFS_PATH_BUFFER(p_s_path, n_path_offset)->b_blocknr )
 	reiserfs_panic ("get_direct_parent: parent in the path is not parent "
 			"of the current node in the tree");
     
@@ -2097,77 +2180,53 @@
  * Returns:	SCHEDULE_OCCURRED - schedule occured while the function worked;
  *	        CARRY_ON - schedule didn't occur while the function worked;
  */
-static int get_neighbors(struct tree_balance * p_s_tb, int n_h)
+static int get_neighbors(reiserfs_tb_t * p_s_tb, int n_h)
 {
     int		 	n_child_position,
-	n_path_offset = PATH_H_PATH_OFFSET(p_s_tb->tb_path, n_h + 1);
+	n_path_offset = REISERFS_PATH_LEVEL(p_s_tb->tb_path, n_h + 1);
     unsigned long		n_son_number;
     reiserfs_filsys_t * fs = p_s_tb->tb_fs;
-    struct buffer_head  * p_s_bh;
-    /*struct virtual_node * vn = p_s_tb->tb_vn;*/
+    reiserfs_bh_t  * p_s_bh;
+    /*struct reiserfs_virtual_node * vn = p_s_tb->tb_vn;*/
     
     if ( p_s_tb->lnum[n_h] ) {
 	/* We need left neighbor to balance S[n_h]. */
-	p_s_bh = PATH_OFFSET_PBUFFER(p_s_tb->tb_path, n_path_offset);
+	p_s_bh = REISERFS_PATH_BUFFER(p_s_tb->tb_path, n_path_offset);
 	
 	n_child_position = ( p_s_bh == p_s_tb->FL[n_h] ) ? p_s_tb->lkey[n_h] :
-	    get_blkh_nr_items (B_BLK_HEAD(p_s_tb->FL[n_h]));
-	n_son_number = get_dc_child_blocknr (B_N_CHILD (p_s_tb->FL[n_h], n_child_position));
-	p_s_bh = bread(fs->fs_dev, n_son_number, fs->fs_blocksize);
+	    reiserfs_nh_get_items (NODE_HEAD(p_s_tb->FL[n_h]));
+	n_son_number = reiserfs_dc_get_nr (reiserfs_int_at (p_s_tb->FL[n_h], n_child_position));
+	p_s_bh = reiserfs_buffer_read(fs->fs_dev, n_son_number, fs->fs_blocksize);
 	if (!p_s_bh)
 	    return IO_ERROR;
-	brelse (p_s_tb->L[n_h]);
+	reiserfs_buffer_close (p_s_tb->L[n_h]);
 	p_s_tb->L[n_h] = p_s_bh;
     }
 
     if ( p_s_tb->rnum[n_h] ) { /* We need right neighbor to balance S[n_path_offset]. */
-	p_s_bh = PATH_OFFSET_PBUFFER(p_s_tb->tb_path, n_path_offset);
+	p_s_bh = REISERFS_PATH_BUFFER(p_s_tb->tb_path, n_path_offset);
 	n_child_position = ( p_s_bh == p_s_tb->FR[n_h] ) ? p_s_tb->rkey[n_h] + 1 : 0;
-	n_son_number = get_dc_child_blocknr (B_N_CHILD (p_s_tb->FR[n_h], n_child_position));
-	p_s_bh = bread(fs->fs_dev, n_son_number, fs->fs_blocksize);
+	n_son_number = reiserfs_dc_get_nr (reiserfs_int_at (p_s_tb->FR[n_h], n_child_position));
+	p_s_bh = reiserfs_buffer_read(fs->fs_dev, n_son_number, fs->fs_blocksize);
 	if (!p_s_bh)
 	    return IO_ERROR;
 
-	brelse (p_s_tb->R[n_h]);
+	reiserfs_buffer_close (p_s_tb->R[n_h]);
 	p_s_tb->R[n_h] = p_s_bh;
     }
     return CARRY_ON;
 }
 
-#if 0
-void * reiserfs_kmalloc (size_t size, int flags, struct super_block * s)
+static int get_mem_for_reiserfs_virtual_node (reiserfs_tb_t * tb)
 {
-  void * vp;
-
-  vp = getmem (size);
-  return vp;
-}
-
-void reiserfs_kfree (/*const */void * vp, size_t size, struct super_block * s)
-{
-  freemem (vp);
-
-
-  kfree (vp);
-  
-  s->u.reiserfs_sb.s_kmallocs -= size;
-  if (s->u.reiserfs_sb.s_kmallocs < 0)
-    reiserfs_warning ("vs-8302: reiserfs_kfree: allocated memory %d\n", s->u.reiserfs_sb.s_kmallocs);
-
-}
-#endif
-
-
-static int get_mem_for_virtual_node (struct tree_balance * tb)
-{
-    tb->vn_buf = getmem (tb->tb_fs->fs_blocksize);
+    tb->vn_buf = misc_getmem (tb->tb_fs->fs_blocksize);
     return CARRY_ON;
 }
 
 
-static void free_virtual_node_mem (struct tree_balance * tb)
+static void free_reiserfs_virtual_node_mem (reiserfs_tb_t * tb)
 {
-    freemem (tb->vn_buf);
+    misc_freemem (tb->vn_buf);
 }
 
 
@@ -2200,22 +2259,23 @@
  */
 
 
-int fix_nodes (int n_op_mode, struct tree_balance * p_s_tb,
-	       struct item_head * p_s_ins_ih)
+int reiserfs_fix_nodes (int n_op_mode, 
+			reiserfs_tb_t * p_s_tb,
+			reiserfs_ih_t * p_s_ins_ih)
 {
     int n_pos_in_item = p_s_tb->tb_path->pos_in_item;
     int	n_ret_value,
     	n_h,
-    	n_item_num = get_item_pos (p_s_tb->tb_path);
-    /*    struct buffer_head  * p_s_tbS0 = get_bh (p_s_tb->tb_path);*/
-    /*    struct item_head * ih = get_ih (p_s_tb->tb_path);*/
+    	n_item_num = REISERFS_PATH_LEAF_POS (p_s_tb->tb_path);
+    /*    reiserfs_bh_t  * p_s_tbS0 = REISERFS_PATH_LEAF (p_s_tb->tb_path);*/
+    /*    reiserfs_ih_t * ih = REISERFS_PATH_IH (p_s_tb->tb_path);*/
 
 
-    if (get_mem_for_virtual_node (p_s_tb) != CARRY_ON)
-	reiserfs_panic ("fix_nodes: no memory for virtual node");
+    if (get_mem_for_reiserfs_virtual_node (p_s_tb) != CARRY_ON)
+	reiserfs_panic ("reiserfs_fix_nodes: no memory for virtual node");
 
     /* Starting from the leaf level; for all levels n_h of the tree. */
-    for ( n_h = 0; n_h < MAX_HEIGHT && p_s_tb->insert_size[n_h]; n_h++ ) { 
+    for ( n_h = 0; n_h < REISERFS_TREE_HEIGHT_MAX && p_s_tb->insert_size[n_h]; n_h++ ) { 
 	get_direct_parent(p_s_tb, n_h);
 
 	if ( (n_ret_value = check_balance (/*th,*/ n_op_mode, p_s_tb, n_h, n_item_num,
@@ -2225,7 +2285,7 @@
 		if ( (n_ret_value = get_neighbors(p_s_tb, n_h)) != CARRY_ON ) {
 		    return n_ret_value;
 		}
-		if ( n_h != MAX_HEIGHT - 1 )  
+		if ( n_h != REISERFS_TREE_HEIGHT_MAX - 1 )  
 		    p_s_tb->insert_size[n_h + 1] = 0;
 		/* ok, analysis and resource gathering are complete */
 		break;
@@ -2242,72 +2302,113 @@
 	    return n_ret_value; /* No disk space */
 	}
     
-	if ( ! PATH_H_PBUFFER(p_s_tb->tb_path, n_h) ) {
+	if ( ! REISERFS_PATH_UPBUFFER(p_s_tb->tb_path, n_h) ) {
 	    /* We have a positive insert size but no nodes exist on this
 	       level, this means that we are creating a new root. */
-	    if ( n_h < MAX_HEIGHT - 1 )
+	    if ( n_h < REISERFS_TREE_HEIGHT_MAX - 1 )
 		p_s_tb->insert_size[n_h + 1] = 0;
 	}
 	else
-	    if ( ! PATH_H_PBUFFER(p_s_tb->tb_path, n_h + 1) ) {
+	    if ( ! REISERFS_PATH_UPBUFFER(p_s_tb->tb_path, n_h + 1) ) {
 		if ( p_s_tb->blknum[n_h] > 1 ) {
 		    /* The tree needs to be grown, so this node S[n_h] which
 		       is the root node is split into two nodes, and a new
 		       node (S[n_h+1]) will be created to become the root
 		       node.  */
-		    p_s_tb->insert_size[n_h + 1] = (DC_SIZE + KEY_SIZE) * (p_s_tb->blknum[n_h] - 1) + DC_SIZE;
+		    p_s_tb->insert_size[n_h + 1] = (REISERFS_DC_SIZE + REISERFS_KEY_SIZE) * 
+			    (p_s_tb->blknum[n_h] - 1) + REISERFS_DC_SIZE;
 		}
 		else
-		    if ( n_h < MAX_HEIGHT - 1 )
+		    if ( n_h < REISERFS_TREE_HEIGHT_MAX - 1 )
 			p_s_tb->insert_size[n_h + 1] = 0;
 	    }
 	    else
-		p_s_tb->insert_size[n_h + 1] = (DC_SIZE + KEY_SIZE) * (p_s_tb->blknum[n_h] - 1);
+		p_s_tb->insert_size[n_h + 1] = (REISERFS_DC_SIZE + REISERFS_KEY_SIZE) * 
+			(p_s_tb->blknum[n_h] - 1);
     }
 
     return CARRY_ON; /* go ahead and balance */
 }
 
 
-void unfix_nodes (struct tree_balance * p_s_tb)
+void reiserfs_unfix_nodes (reiserfs_tb_t * p_s_tb)
 {
-    struct path * p_s_path = p_s_tb->tb_path;
+    reiserfs_path_t * p_s_path = p_s_tb->tb_path;
     int		n_counter;
     //  int i, j;
-    //struct buffer_head * bh;
+    //reiserfs_bh_t * bh;
 
     /* Release path buffers. */
-    pathrelse(p_s_path);
+    reiserfs_tree_pathrelse(p_s_path);
 
 
-    for ( n_counter = 0; n_counter < MAX_HEIGHT; n_counter++ ) {
+    for ( n_counter = 0; n_counter < REISERFS_TREE_HEIGHT_MAX; n_counter++ ) {
 	/* Release fathers and neighbors. */
-	brelse(p_s_tb->L[n_counter]);
-	brelse(p_s_tb->R[n_counter]);
-	brelse(p_s_tb->FL[n_counter]);
-	brelse(p_s_tb->FR[n_counter]);
-	brelse(p_s_tb->CFL[n_counter]);
-	brelse(p_s_tb->CFR[n_counter]);
+	reiserfs_buffer_close(p_s_tb->L[n_counter]);
+	reiserfs_buffer_close(p_s_tb->R[n_counter]);
+	reiserfs_buffer_close(p_s_tb->FL[n_counter]);
+	reiserfs_buffer_close(p_s_tb->FR[n_counter]);
+	reiserfs_buffer_close(p_s_tb->CFL[n_counter]);
+	reiserfs_buffer_close(p_s_tb->CFR[n_counter]);
     }
 
     /* Could be optimized. Will be done by PAP someday */
-    for ( n_counter = 0; n_counter < MAX_FEB_SIZE; n_counter++ ) {
+    for ( n_counter = 0; n_counter < TB_FEB_MAX; n_counter++ ) {
 	if ( p_s_tb->FEB[n_counter] ) {
 	    /* release what was not used */
-	    reiserfs_free_block(p_s_tb->tb_fs, p_s_tb->FEB[n_counter]->b_blocknr);
+	    assert (p_s_tb->tb_fs->block_deallocator != NULL);
+	    p_s_tb->tb_fs->block_deallocator(p_s_tb->tb_fs, 
+					     p_s_tb->FEB[n_counter]->b_blocknr);
 
-	    bforget(p_s_tb->FEB[n_counter]);
+	    reiserfs_buffer_forget(p_s_tb->FEB[n_counter]);
 	    /* tree balance bitmap of bitmaps has bit set already */
 	}
 	/* release used as new nodes including a new root */
-	brelse (p_s_tb->used[n_counter]);
+	reiserfs_buffer_close (p_s_tb->used[n_counter]);
     }
 
-    free_virtual_node_mem (p_s_tb);
+    free_reiserfs_virtual_node_mem (p_s_tb);
 } 
 
+static char * vi_type (struct reiserfs_virtual_item * vi) {
+    static char *types[]={"directory", "direct", "extent", "stat data"};
 
+    if (vi->vi_type & VI_TYPE_STAT_DATA)
+	return types[3];
+    if (vi->vi_type & VI_TYPE_EXTENT)
+	return types[2];
+    if (vi->vi_type & VI_TYPE_DIRECT)
+	return types[1];
+    if (vi->vi_type & VI_TYPE_DIRECTORY)
+	return types[0];
 
+    reiserfs_panic ("vi_type: 6000: unknown type (0x%x)", vi->vi_type);
+    return NULL;
+}
 
+void reiserfs_fix_node_print(struct reiserfs_virtual_node * vn) {
+    int i, j;
+  
+    printf ("VIRTUAL NODE CONTAINS %d items, has size %d,%s,%s, ITEM_POS=%d "
+	    "POS_IN_ITEM=%d MODE=\'%c\'\n", vn->vn_nr_item, vn->vn_size,
+	    (vn->vn_vi[0].vi_type & VI_TYPE_LEFT_MERGEABLE )? "left mergeable" :
+	    "", (vn->vn_vi[vn->vn_nr_item - 1].vi_type & VI_TYPE_RIGHT_MERGEABLE) ? 
+	    "right mergeable" : "", vn->vn_affected_item_num, vn->vn_pos_in_item, 
+	    vn->vn_mode);
 
+    for (i = 0; i < vn->vn_nr_item; i ++) {
+	printf ("%s %d %d", vi_type (&vn->vn_vi[i]), i, 
+		vn->vn_vi[i].vi_item_len);
+	
+	if (vn->vn_vi[i].vi_entry_sizes) {
+	    printf ("It is directory with %d entries: ", 
+		    vn->vn_vi[i].vi_entry_count);
+	    
+	    for (j = 0; j < vn->vn_vi[i].vi_entry_count; j ++)
+		printf ("%d ", vn->vn_vi[i].vi_entry_sizes[j]);
+	}
+	
+	printf ("\n");
+    }
+}
 
diff --git a/libreiserfs/hash.c b/libreiserfs/hash.c
new file mode 100644
index 0000000..fda860f
--- /dev/null
+++ b/libreiserfs/hash.c
@@ -0,0 +1,358 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+/*
+ * Keyed 32-bit hash function using TEA in a Davis-Meyer function
+ *   H0 = Key
+ *   Hi = E Mi(Hi-1) + Hi-1
+ *
+ * (see Applied Cryptography, 2nd edition, p448).
+ *
+ * Jeremy Fitzhardinge <jeremy@zip.com.au> 1998
+ * 
+ * Jeremy has agreed to the contents of reiserfs/README. -Hans
+ * Yura's function is added (04/07/2000)
+ */
+
+//
+// reiserfs_hash_keyed
+// reiserfs_hash_yura
+// r5
+//
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+
+#define DELTA 0x9E3779B9
+#define FULLROUNDS 10		/* 32 is overkill, 16 is strong crypto */
+#define PARTROUNDS 6		/* 6 gets complete mixing */
+
+/* a, b, c, d - data; h0, h1 - accumulated hash */
+#define TEACORE(rounds)							\
+	do {								\
+		__u32 sum = 0;						\
+		int n = rounds;						\
+		__u32 b0, b1;						\
+									\
+		b0 = h0;						\
+		b1 = h1;						\
+									\
+		do							\
+		{							\
+			sum += DELTA;					\
+			b0 += ((b1 << 4)+a) ^ (b1+sum) ^ ((b1 >> 5)+b);	\
+			b1 += ((b0 << 4)+c) ^ (b0+sum) ^ ((b0 >> 5)+d);	\
+		} while(--n);						\
+									\
+		h0 += b0;						\
+		h1 += b1;						\
+	} while(0);
+
+
+__u32 reiserfs_hash_keyed(const char *msg, int len)
+{
+	__u32 k[] = { 0x9464a485, 0x542e1a94, 0x3e846bff, 0xb75bcfc3}; 
+
+	__u32 h0 = k[0], h1 = k[1];
+	__u32 a, b, c, d;
+	__u32 pad;
+	int i;
+ 
+
+	pad = (__u32)len | ((__u32)len << 8);
+	pad |= pad << 16;
+
+	while(len >= 16)
+	{
+		a = (__u32)msg[ 0]      |
+		    (__u32)msg[ 1] << 8 |
+		    (__u32)msg[ 2] << 16|
+		    (__u32)msg[ 3] << 24;
+		b = (__u32)msg[ 4]      |
+		    (__u32)msg[ 5] << 8 |
+		    (__u32)msg[ 6] << 16|
+		    (__u32)msg[ 7] << 24;
+		c = (__u32)msg[ 8]      |
+		    (__u32)msg[ 9] << 8 |
+		    (__u32)msg[10] << 16|
+		    (__u32)msg[11] << 24;
+		d = (__u32)msg[12]      |
+		    (__u32)msg[13] << 8 |
+		    (__u32)msg[14] << 16|
+		    (__u32)msg[15] << 24;
+		
+		TEACORE(PARTROUNDS);
+
+		len -= 16;
+		msg += 16;
+	}
+
+	if (len >= 12)
+	{
+		if (len >= 16)
+		    *(int *)0 = 0;
+
+		a = (__u32)msg[ 0]      |
+		    (__u32)msg[ 1] << 8 |
+		    (__u32)msg[ 2] << 16|
+		    (__u32)msg[ 3] << 24;
+		b = (__u32)msg[ 4]      |
+		    (__u32)msg[ 5] << 8 |
+		    (__u32)msg[ 6] << 16|
+		    (__u32)msg[ 7] << 24;
+		c = (__u32)msg[ 8]      |
+		    (__u32)msg[ 9] << 8 |
+		    (__u32)msg[10] << 16|
+		    (__u32)msg[11] << 24;
+
+		d = pad;
+		for(i = 12; i < len; i++)
+		{
+			d <<= 8;
+			d |= msg[i];
+		}
+	}
+	else if (len >= 8)
+	{
+		if (len >= 12)
+		    *(int *)0 = 0;
+		a = (__u32)msg[ 0]      |
+		    (__u32)msg[ 1] << 8 |
+		    (__u32)msg[ 2] << 16|
+		    (__u32)msg[ 3] << 24;
+		b = (__u32)msg[ 4]      |
+		    (__u32)msg[ 5] << 8 |
+		    (__u32)msg[ 6] << 16|
+		    (__u32)msg[ 7] << 24;
+
+		c = d = pad;
+		for(i = 8; i < len; i++)
+		{
+			c <<= 8;
+			c |= msg[i];
+		}
+	}
+	else if (len >= 4)
+	{
+		if (len >= 8)
+		    *(int *)0 = 0;
+		a = (__u32)msg[ 0]      |
+		    (__u32)msg[ 1] << 8 |
+		    (__u32)msg[ 2] << 16|
+		    (__u32)msg[ 3] << 24;
+
+		b = c = d = pad;
+		for(i = 4; i < len; i++)
+		{
+			b <<= 8;
+			b |= msg[i];
+		}
+	}
+	else
+	{
+		if (len >= 4)
+		    *(int *)0 = 0;
+		a = b = c = d = pad;
+		for(i = 0; i < len; i++)
+		{
+			a <<= 8;
+			a |= msg[i];
+		}
+	}
+
+	TEACORE(FULLROUNDS);
+
+	return h0^h1;
+}
+
+
+__u32 reiserfs_hash_yura (const char *msg, int len)
+{
+    int j, pow;
+    __u32 a, c;
+    int i;
+    
+    for (pow=1,i=1; i < len; i++) pow = pow * 10; 
+    
+    if (len == 1) 
+	a = msg[0]-48;
+    else
+	a = (msg[0] - 48) * pow;
+    
+    for (i=1; i < len; i++) {
+	c = msg[i] - 48; 
+	for (pow=1,j=i; j < len-1; j++) pow = pow * 10; 
+	a = a + c * pow;
+    }
+    
+    for (; i < 40; i++) {
+	c = '0' - 48; 
+	for (pow=1,j=i; j < len-1; j++) pow = pow * 10; 
+	a = a + c * pow;
+    }
+    
+    for (; i < 256; i++) {
+	c = i; 
+	for (pow=1,j=i; j < len-1; j++) pow = pow * 10; 
+	a = a + c * pow;
+    }
+    
+    a = a << 7;
+    return a;
+}
+
+
+__u32 reiserfs_hash_r5 (const char *msg, int len)
+{
+    __u32 a=0;
+    int i;
+    
+    for (i = 0; i < len; i ++) {
+	a += msg[i] << 4;
+	a += msg[i] >> 4;
+	a *= 11;
+    } 
+    return a;
+}
+
+static const struct {
+    hashf_t func;
+    char * name;
+} hashes[REISERFS_HASH_LAST] = {{0, "not set"},
+				{reiserfs_hash_keyed, "\"tea\""},
+				{reiserfs_hash_yura, "\"rupasov\""},
+				{reiserfs_hash_r5, "\"r5\""}};        
+
+#define HASH_AMOUNT (sizeof (hashes) / sizeof (hashes [0]))
+
+#define good_name(hashfn,name,namelen,deh_offset) \
+	(reiserfs_hash_value (hashfn, name, namelen) == OFFSET_HASH (deh_offset))
+
+
+/* this also sets hash function */
+int reiserfs_hash_correct (hashf_t *func, char * name, 
+			   int namelen, __u32 offset)
+{
+    unsigned int i;
+
+    if (namelen == 1 && name[0] == '.') {
+	if (offset == OFFSET_DOT)
+	    return 1;
+	return 0;
+    }
+
+    if (namelen == 2 && name[0] == '.' && name[1] == '.') {
+	if (offset == OFFSET_DOT_DOT)
+	    return 1;
+	return 0;
+    }
+
+    if (*func == 0) {
+	/* try to find what hash function the name is sorted with */
+	for (i = 1; i < HASH_AMOUNT; i ++) {
+	    if (good_name (hashes [i].func, name, namelen, offset)) {
+		if (*func) {
+		    /* two or more hash functions give ok for this name */
+		    fprintf (stderr, "Detecting hash code: could not detect "
+			     "hash with name \"%.*s\"\n", namelen, name);
+		    *func = 0;
+		    return 0;
+		}
+
+		/* set hash function */
+ 		*func = hashes [i].func;
+ 	    }
+ 	}
+
+        if (*func == 0)
+            return 0;
+    }
+
+    if (good_name (*func, name, namelen, offset))
+	return 1;
+
+    return 0;
+}
+
+
+int reiserfs_hash_find (char * name, int namelen, __u32 offset, 
+			unsigned int code_to_try_first)
+{
+    unsigned int i;
+
+    if (!namelen || !name[0])
+	return UNSET_HASH;
+
+    if (code_to_try_first) {
+	if (good_name (hashes [code_to_try_first].func, name, namelen, offset))
+	    return code_to_try_first;
+    }
+    
+    for (i = 1; i < HASH_AMOUNT; i ++) {
+	if (i == code_to_try_first)
+	    continue;
+	if (good_name (hashes [i].func, name, namelen, offset))
+	    return i;
+    }
+
+    /* not matching hash found */
+    return UNSET_HASH;
+}
+
+
+char * reiserfs_hash_name(unsigned int code) {
+    if (code >= HASH_AMOUNT || code < 0)
+        return 0;
+    return hashes [code].name;
+}
+
+
+int reiserfs_hash_code (hashf_t func)
+{
+    unsigned int i;
+    
+    for (i = 0; i < HASH_AMOUNT; i ++)
+	if (func == hashes [i].func)
+	    return i;
+
+    reiserfs_panic ("reiserfs_hash_code: no hashes matches this function\n");
+    return 0;
+}
+
+
+hashf_t reiserfs_hash_func(unsigned int code) {
+    if (code >= HASH_AMOUNT) {
+	reiserfs_warning (stderr, "reiserfs_hash_func: wrong hash code %d.\n"
+			  "Using default %s hash function\n", code,
+			  reiserfs_hash_name (DEFAULT_HASH));
+	code = DEFAULT_HASH;
+    }
+    return hashes [code].func;
+}
+
+
+hashf_t reiserfs_hash_get (char * hash) {
+    unsigned int i;
+ 
+    for (i = 0; i < HASH_AMOUNT; i ++)
+	if (!strcmp (hash, hashes [i].name))
+	    return hashes [i].func;
+    return 0;
+}
+
+__u32 reiserfs_hash_value (hashf_t func, char * name, int namelen) {
+    __u32 res;
+
+    res = func (name, namelen);
+    res = OFFSET_HASH(res);
+    if (res == 0)
+	res = 128;
+
+    return res;
+}
+
diff --git a/libreiserfs/internal.c b/libreiserfs/internal.c
new file mode 100644
index 0000000..875bdbb
--- /dev/null
+++ b/libreiserfs/internal.c
@@ -0,0 +1,99 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+
+/* returns 1 if buf looks like an internal node, 0 otherwise */
+int reiserfs_internal_correct (reiserfs_bh_t *bh) {
+    reiserfs_node_head_t * blkh;
+    unsigned int nr;
+    int used_space;
+
+    blkh = (reiserfs_node_head_t *)bh->b_data;
+
+    if (!reiserfs_int_head (bh))
+	return 0;
+    
+    nr = reiserfs_nh_get_items (blkh);
+    if (nr > (bh->b_size - REISERFS_NODEH_SIZE - REISERFS_DC_SIZE) / 
+	(REISERFS_KEY_SIZE + REISERFS_DC_SIZE))
+    {
+	/* for internal which is not root we might check min number of keys */
+	return 0;
+    }
+
+    used_space = REISERFS_NODEH_SIZE + REISERFS_KEY_SIZE * nr + 
+	    REISERFS_DC_SIZE * (nr + 1);
+    
+    if (used_space != bh->b_size - reiserfs_nh_get_free (blkh))
+	return 0;
+
+    // one may imagine much more checks
+    return 1;
+}
+
+/* this prints internal nodes (4 keys/items in line) (dc_number,
+   dc_size)[k_dirid, k_objectid, k_offset, k_uniqueness](dc_number,
+   dc_size)...*/
+int reiserfs_internal_print (FILE * fp, 
+			     reiserfs_bh_t * bh, 
+			     int first, int last)
+{
+    reiserfs_key_t * key;
+    reiserfs_dc_t * dc;
+    int i;
+    int from, to;
+
+    if (!reiserfs_int_head (bh))
+	return 1;
+
+    if (first == -1) {
+	from = 0;
+	to = reiserfs_node_items (bh);
+    } else {
+	from = first;
+	to = last < reiserfs_node_items (bh) ? last : reiserfs_node_items (bh);
+    }
+
+    reiserfs_warning (fp, "INTERNAL NODE (%ld) contains %b\n",  
+		      bh->b_blocknr, bh);
+
+    dc = reiserfs_int_at (bh, from);
+    reiserfs_warning (fp, "PTR %d: %y ", from, dc);
+
+    for (i = from, key = reiserfs_int_key_at (bh, from), dc ++; 
+	 i < to; i ++, key ++, dc ++) 
+    {
+	reiserfs_warning (fp, "KEY %d: %20k PTR %d: %20y ", 
+			  i, key, i + 1, dc);
+	
+	if (i && i % 4 == 0)
+	    reiserfs_warning (fp, "\n");
+    }
+
+    reiserfs_warning (fp, "\n");
+    return 0;
+}
+
+/* internal node bh must point to block */
+int reiserfs_internal_get_pos (reiserfs_bh_t * bh, 
+			       unsigned long block) 
+{
+    int i;
+
+    for (i = 0; i <= reiserfs_node_items (bh); i ++) {
+	if (reiserfs_dc_get_nr (reiserfs_int_at (bh, i)) == block)
+	    return i;
+    }
+    
+    misc_die ("An internal pointer to the block (%lu) cannot be "
+	      "found in the node (%lu)", block, bh->b_blocknr);
+    
+    return 0;
+}
diff --git a/libreiserfs/internal_balance.c b/libreiserfs/internal_balance.c
new file mode 100644
index 0000000..2dbc68e
--- /dev/null
+++ b/libreiserfs/internal_balance.c
@@ -0,0 +1,971 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+
+/* modes of reiserfs_ib_shift_left, reiserfs_ib_shift_right and 
+   reiserfs_ib_insert */
+#define INTERNAL_SHIFT_FROM_S_TO_L 0
+#define INTERNAL_SHIFT_FROM_R_TO_S 1
+#define INTERNAL_SHIFT_FROM_L_TO_S 2
+#define INTERNAL_SHIFT_FROM_S_TO_R 3
+#define INTERNAL_INSERT_TO_S 4
+#define INTERNAL_INSERT_TO_L 5
+#define INTERNAL_INSERT_TO_R 6
+
+static void reiserfs_ib_shift_prep (int shift_mode,
+				    reiserfs_tb_t * tb,
+				    int h,
+				    reiserfs_bufinfo_t * dest_bi,
+				    reiserfs_bufinfo_t * src_bi,
+				    int * d_key,
+				    reiserfs_bh_t ** cf)
+{
+  /* define dest, src, dest parent, dest position */
+  switch (shift_mode) {
+  case INTERNAL_SHIFT_FROM_S_TO_L:	
+    /* used in reiserfs_ib_shift_left */
+    src_bi->bi_bh = REISERFS_PATH_UPBUFFER (tb->tb_path, h);
+    src_bi->bi_parent = REISERFS_PATH_UPPARENT (tb->tb_path, h);
+    src_bi->bi_position = REISERFS_PATH_UPPOS (tb->tb_path, h + 1);
+    dest_bi->bi_bh = tb->L[h];
+    dest_bi->bi_parent = tb->FL[h];
+    dest_bi->bi_position = reiserfs_tb_lpos (tb, h);
+    *d_key = tb->lkey[h];
+    *cf = tb->CFL[h];
+    break;
+  case INTERNAL_SHIFT_FROM_L_TO_S:
+    src_bi->bi_bh = tb->L[h];
+    src_bi->bi_parent = tb->FL[h];
+    src_bi->bi_position = reiserfs_tb_lpos (tb, h);
+    dest_bi->bi_bh = REISERFS_PATH_UPBUFFER (tb->tb_path, h);
+    dest_bi->bi_parent = REISERFS_PATH_UPPARENT (tb->tb_path, h);
+    /* dest position is analog of dest->b_item_order */
+    dest_bi->bi_position = REISERFS_PATH_UPPOS (tb->tb_path, h + 1); 
+    *d_key = tb->lkey[h];
+    *cf = tb->CFL[h];
+    break;
+
+  case INTERNAL_SHIFT_FROM_R_TO_S:	
+    /* used in reiserfs_ib_shift_left */
+    src_bi->bi_bh = tb->R[h];
+    src_bi->bi_parent = tb->FR[h];
+    src_bi->bi_position = reiserfs_tb_rpos (tb, h);
+    dest_bi->bi_bh = REISERFS_PATH_UPBUFFER (tb->tb_path, h);
+    dest_bi->bi_parent = REISERFS_PATH_UPPARENT (tb->tb_path, h);
+    dest_bi->bi_position = REISERFS_PATH_UPPOS (tb->tb_path, h + 1);
+    *d_key = tb->rkey[h];
+    *cf = tb->CFR[h];
+    break;
+  case INTERNAL_SHIFT_FROM_S_TO_R:
+    src_bi->bi_bh = REISERFS_PATH_UPBUFFER (tb->tb_path, h);
+    src_bi->bi_parent = REISERFS_PATH_UPPARENT (tb->tb_path, h);
+    src_bi->bi_position = REISERFS_PATH_UPPOS (tb->tb_path, h + 1);
+    dest_bi->bi_bh = tb->R[h];
+    dest_bi->bi_parent = tb->FR[h];
+    dest_bi->bi_position = reiserfs_tb_rpos (tb, h);
+    *d_key = tb->rkey[h];
+    *cf = tb->CFR[h];
+    break;
+
+  case INTERNAL_INSERT_TO_L:
+    dest_bi->bi_bh = tb->L[h];
+    dest_bi->bi_parent = tb->FL[h];
+    dest_bi->bi_position = reiserfs_tb_lpos (tb, h);
+    break;
+
+  case INTERNAL_INSERT_TO_S:
+    dest_bi->bi_bh = REISERFS_PATH_UPBUFFER (tb->tb_path, h);
+    dest_bi->bi_parent = REISERFS_PATH_UPPARENT (tb->tb_path, h);
+    dest_bi->bi_position = REISERFS_PATH_UPPOS (tb->tb_path, h + 1);
+    break;
+
+  case INTERNAL_INSERT_TO_R:
+    dest_bi->bi_bh = tb->R[h];
+    dest_bi->bi_parent = tb->FR[h];
+    dest_bi->bi_position = reiserfs_tb_rpos (tb, h);
+    break;
+
+  default:
+      reiserfs_panic ("reiserfs_ib_shift_prep", 
+		      "shift type is unknown (%d)", shift_mode);
+  }
+}
+
+
+
+/* Insert 'count' node pointers into buffer cur before position 'to' + 1.
+ * Insert count items into buffer cur before position to.
+ * Items and node pointers are specified by inserted and bh respectively.
+ */ 
+static void reiserfs_ib_insert (reiserfs_filsys_t * fs, 
+				reiserfs_bufinfo_t * cur_bi,
+				int to, int count,
+				reiserfs_ih_t * inserted,
+				reiserfs_bh_t ** bh)
+{
+    reiserfs_bh_t * cur = cur_bi->bi_bh;
+    reiserfs_node_head_t * blkh;
+    int nr;
+    reiserfs_key_t * key;
+    reiserfs_dc_t new_dc[2];
+    reiserfs_dc_t * dc;
+    int i;
+    int from;
+    
+    if (count <= 0)
+	return;
+    
+    blkh = NODE_HEAD (cur);
+    nr = reiserfs_nh_get_items (blkh);
+    
+    /* prepare space for count disk_child */
+    dc = reiserfs_int_at (cur,to+1);
+    
+    memmove (dc + count, dc, (nr+1-(to+1)) * REISERFS_DC_SIZE);
+    
+    /* make disk child array for insertion */
+    for (i = 0; i < count; i ++) {
+	reiserfs_dc_init(new_dc + i, REISERFS_NODE_SPACE(bh[i]->b_size) - 
+	       reiserfs_nh_get_free (NODE_HEAD (bh[i])),
+	       bh[i]->b_blocknr);
+	/*
+	reiserfs_dc_set_size (new_dc + i,
+			   REISERFS_NODE_SPACE(bh[i]->b_size) - 
+			   reiserfs_nh_get_free (NODE_HEAD (bh[i])));
+	reiserfs_dc_set_nr (new_dc + i, bh[i]->b_blocknr);*/
+    }
+    memcpy (dc, new_dc, REISERFS_DC_SIZE * count);
+    
+    /* prepare space for 'count' items  */
+    from = ((to == -1) ? 0 : to);
+    key = reiserfs_int_key_at (cur, from);
+    
+    memmove (key + count, key, (nr - from/*to*/) * REISERFS_KEY_SIZE + 
+	     (nr + 1 + count) * REISERFS_DC_SIZE);
+
+    /* copy keys */
+    memcpy (key, inserted, REISERFS_KEY_SIZE);
+    if ( count > 1 )
+	memcpy (key + 1, inserted + 1, REISERFS_KEY_SIZE);
+    
+    /* sizes, item number */
+    reiserfs_nh_set_items (blkh, nr + count);
+    reiserfs_nh_set_free (blkh, reiserfs_nh_get_free (blkh) - 
+			 count * (REISERFS_DC_SIZE + REISERFS_KEY_SIZE));
+
+    reiserfs_buffer_mkdirty (cur);
+    
+    if (cur_bi->bi_parent) {
+	dc = reiserfs_int_at (cur_bi->bi_parent,cur_bi->bi_position);
+	reiserfs_dc_set_size (dc, reiserfs_dc_get_size (dc) + 
+			   count * (REISERFS_DC_SIZE + REISERFS_KEY_SIZE));
+	reiserfs_buffer_mkdirty (cur_bi->bi_parent);
+    }
+    
+}
+
+/* Delete del_num items and node pointers from buffer cur starting from *
+ * the first_i'th item and first_p'th pointers respectively.		*/
+static void reiserfs_ib_delete (reiserfs_filsys_t * fs,
+				reiserfs_bufinfo_t * cur_bi,
+				int first_p, 
+				int first_i, 
+				int del_num)
+{
+    reiserfs_bh_t * cur = cur_bi->bi_bh;
+    int nr;
+    reiserfs_node_head_t * blkh;
+    reiserfs_key_t * key;
+    reiserfs_dc_t * dc;
+
+    if ( del_num == 0 )
+	return;
+
+    blkh = NODE_HEAD(cur);
+    nr = reiserfs_nh_get_items (blkh);
+
+    if ( first_p == 0 && del_num == nr + 1 ) {
+	reiserfs_tb_attach_new(cur_bi);
+	return;
+    }
+
+    /* deleting */
+    dc = reiserfs_int_at (cur, first_p);
+
+    memmove (dc, dc + del_num, (nr + 1 - first_p - del_num) * 
+	     REISERFS_DC_SIZE);
+    key = reiserfs_int_key_at (cur, first_i);
+    memmove (key, key + del_num, (nr - first_i - del_num) * REISERFS_KEY_SIZE + 
+	     (nr + 1 - del_num) * REISERFS_DC_SIZE);
+
+
+    /* sizes, item number */
+    reiserfs_nh_set_items (blkh, reiserfs_nh_get_items (blkh) - del_num);
+    reiserfs_nh_set_free (blkh, reiserfs_nh_get_free (blkh) +
+			 del_num * (REISERFS_KEY_SIZE +  REISERFS_DC_SIZE));
+
+    reiserfs_buffer_mkdirty (cur);
+ 
+    if (cur_bi->bi_parent) {
+	dc = reiserfs_int_at (cur_bi->bi_parent, cur_bi->bi_position);
+	reiserfs_dc_set_size (dc, reiserfs_dc_get_size (dc) - 
+			   del_num * (REISERFS_KEY_SIZE +  REISERFS_DC_SIZE));
+	reiserfs_buffer_mkdirty (cur_bi->bi_parent);
+    }
+}
+
+/* copy cpy_num node pointers and cpy_num - 1 items from buffer src to buffer 
+   dest last_first == FIRST_TO_LAST means, that we copy first items from src 
+   to tail of dest last_first == LAST_TO_FIRST means, that we copy last items 
+   from src to head of dest */
+static void reiserfs_ib_copy (reiserfs_filsys_t * fs,
+			      reiserfs_bufinfo_t * dest_bi,
+			      reiserfs_bh_t * src,
+			      int last_first, 
+			      int cpy_num)
+{
+    /* ATTENTION! Number of node pointers in DEST is equal to number of 
+       items in DEST as delimiting key have already inserted to buffer dest.*/
+    reiserfs_bh_t * dest = dest_bi->bi_bh;
+    int nr_dest, nr_src;
+    int dest_order, src_order;
+    reiserfs_node_head_t * blkh;
+    reiserfs_key_t * key;
+    reiserfs_dc_t * dc;
+
+    nr_src = reiserfs_node_items (src);
+
+    if ( cpy_num == 0 )
+	return;
+
+    /* coping */
+    blkh = NODE_HEAD (dest);
+    nr_dest = reiserfs_nh_get_items (blkh);
+
+    /*dest_order = (last_first == LAST_TO_FIRST) ? 0 : nr_dest;*/
+    /*src_order = (last_first == LAST_TO_FIRST) ? (nr_src - cpy_num + 1) : 0;*/
+    (last_first == LAST_TO_FIRST) ? 
+	    (dest_order = 0, src_order = nr_src - cpy_num + 1) :
+	    (dest_order = nr_dest, src_order = 0);
+
+    /* prepare space for cpy_num pointers */
+    dc = reiserfs_int_at (dest, dest_order);
+
+    memmove (dc + cpy_num, dc, (nr_dest - dest_order) * REISERFS_DC_SIZE);
+
+    /* insert pointers */
+    memcpy (dc, reiserfs_int_at (src, src_order), REISERFS_DC_SIZE * cpy_num);
+
+    /* prepare space for cpy_num - 1 item headers */
+    key = reiserfs_int_key_at(dest, dest_order);
+    memmove (key + cpy_num - 1, key, REISERFS_KEY_SIZE * (nr_dest - dest_order) + 
+	     REISERFS_DC_SIZE * (nr_dest + cpy_num));
+
+
+    /* insert headers */
+    memcpy (key, reiserfs_int_key_at (src, src_order), REISERFS_KEY_SIZE * (cpy_num - 1));
+
+    /* sizes, item number */
+    reiserfs_nh_set_items (blkh, reiserfs_nh_get_items (blkh) + cpy_num - 1);
+    reiserfs_nh_set_free (blkh, reiserfs_nh_get_free (blkh) -
+			 (REISERFS_KEY_SIZE * (cpy_num - 1) + 
+			  REISERFS_DC_SIZE * cpy_num));
+
+    reiserfs_buffer_mkdirty (dest);
+    
+    if (dest_bi->bi_parent) {
+	dc = reiserfs_int_at(dest_bi->bi_parent,dest_bi->bi_position);
+	reiserfs_dc_set_size (dc, reiserfs_dc_get_size (dc) + 
+			   REISERFS_KEY_SIZE * (cpy_num - 1) + 
+			   REISERFS_DC_SIZE * cpy_num);
+	reiserfs_buffer_mkdirty (dest_bi->bi_parent);
+    }
+}
+
+
+/* Copy cpy_num node pointers and cpy_num - 1 items from buffer src to 
+   buffer dest. Delete cpy_num - del_par items and node pointers from 
+   buffer src. last_first == FIRST_TO_LAST means, that we copy/delete 
+   first items from src. last_first == LAST_TO_FIRST means, that we 
+   copy/delete last items from src. */
+static void reiserfs_ib_move (reiserfs_filsys_t * fs,
+			      reiserfs_bufinfo_t * dest_bi, 
+			      reiserfs_bufinfo_t * src_bi,
+			      int last_first, 
+			      int cpy_num, 
+			      int del_par)
+{
+    int first_pointer;
+    int first_item;
+    
+    reiserfs_ib_copy (fs, dest_bi, src_bi->bi_bh, last_first, cpy_num);
+    
+    if (last_first == FIRST_TO_LAST) {	/* shift_left occurs */
+	first_pointer = 0;
+	first_item = 0;
+	/* delete cpy_num - del_par pointers and keys starting for pointers 
+	   with first_pointer, for key - with first_item */
+	reiserfs_ib_delete (fs, src_bi, first_pointer, 
+			    first_item, cpy_num - del_par);
+    } else {			
+	/* shift_right occurs */
+	int i, j;
+	
+	i = ( cpy_num - del_par == ( j = reiserfs_node_items(src_bi->bi_bh)) + 1 ) ? 
+		0 : j - cpy_num + del_par;
+	
+	reiserfs_ib_delete (fs, src_bi, j + 1 - cpy_num + del_par, 
+			    i, cpy_num - del_par);
+    }
+}
+
+/* Insert n_src'th key of buffer src before n_dest'th key of buffer dest. */
+static void reiserfs_ib_insert_key (reiserfs_filsys_t * fs,
+				    reiserfs_bufinfo_t * dest_bi, 
+				    /* insert key before key with 
+				       n_dest number */
+				    int dest_position_before,                 
+				    reiserfs_bh_t * src, 
+				    int src_position )
+{
+    reiserfs_bh_t * dest = dest_bi->bi_bh;
+    int nr;
+    reiserfs_node_head_t * blkh;
+    reiserfs_key_t * key;
+
+    blkh = NODE_HEAD(dest);
+    nr = reiserfs_nh_get_items (blkh);
+
+    /* prepare space for inserting key */
+    key = reiserfs_int_key_at (dest, dest_position_before);
+    memmove (key + 1, key, (nr - dest_position_before) * REISERFS_KEY_SIZE + 
+	     (nr + 1) * REISERFS_DC_SIZE);
+
+    /* insert key */
+    memcpy (key, reiserfs_int_key_at(src, src_position), REISERFS_KEY_SIZE);
+
+    /* Change dirt, free space, item number fields. */
+    reiserfs_nh_set_items (blkh, reiserfs_nh_get_items (blkh) + 1);
+    reiserfs_nh_set_free (blkh, reiserfs_nh_get_free (blkh) - REISERFS_KEY_SIZE);
+
+    reiserfs_buffer_mkdirty (dest);
+
+    if (dest_bi->bi_parent) {
+	reiserfs_dc_t * dc;
+	
+	dc = reiserfs_int_at(dest_bi->bi_parent,dest_bi->bi_position);
+	reiserfs_dc_set_size (dc, reiserfs_dc_get_size (dc) + REISERFS_KEY_SIZE);
+	reiserfs_buffer_mkdirty (dest_bi->bi_parent);
+    }
+}
+
+/* Insert d_key'th (delimiting) key from buffer cfl to tail of dest. 
+ * Copy pointer_amount node pointers and pointer_amount - 1 items from 
+ * buffer src to buffer dest.
+ * Replace  d_key'th key in buffer cfl.
+ * Delete pointer_amount items and node pointers from buffer src. */
+/* this can be invoked both to shift from S to L and from R to S */
+static void reiserfs_ib_shift_left (/* INTERNAL_FROM_S_TO_L | 
+				       INTERNAL_FROM_R_TO_S */
+				    int mode,	
+				    reiserfs_tb_t * tb, 
+				    int h, int pointer_amount)
+{
+    reiserfs_bufinfo_t dest_bi, src_bi;
+    reiserfs_bh_t * cf;
+    int d_key_position;
+
+    reiserfs_ib_shift_prep (mode, tb, h, &dest_bi, &src_bi, 
+			    &d_key_position, &cf);
+
+    /*printk("pointer_amount = %d\n",pointer_amount);*/
+
+    if (pointer_amount) {
+	/* insert delimiting key from common father of dest and src 
+	   to node dest into position B_NR_ITEM(dest) */
+	reiserfs_ib_insert_key (tb->tb_fs, &dest_bi, 
+				reiserfs_node_items(dest_bi.bi_bh), 
+				cf, d_key_position);
+
+	if (reiserfs_node_items(src_bi.bi_bh) == pointer_amount - 1) {
+	    if (src_bi.bi_position/*src->b_item_order*/ == 0)
+		reiserfs_node_replace_key (cf, d_key_position, 
+					   src_bi.bi_parent, 0);
+	} else {
+	    reiserfs_node_replace_key (cf, d_key_position, 
+				       src_bi.bi_bh, pointer_amount - 1);
+	}
+    }
+    
+    /* last parameter is del_parameter */
+    reiserfs_ib_move (tb->tb_fs, &dest_bi, &src_bi, 
+		      FIRST_TO_LAST, pointer_amount, 0);
+}
+
+/* Insert delimiting key to L[h].
+ * Copy n node pointers and n - 1 items from buffer S[h] to L[h].
+ * Delete n - 1 items and node pointers from buffer S[h].
+ */
+/* it always shifts from S[h] to L[h] */
+static void reiserfs_ib_shift1_left (reiserfs_tb_t * tb, 
+				     int h, int pointer_amount)
+{
+    reiserfs_bufinfo_t dest_bi, src_bi;
+    reiserfs_bh_t * cf;
+    int d_key_position;
+    
+    reiserfs_ib_shift_prep (INTERNAL_SHIFT_FROM_S_TO_L, tb, h, 
+			    &dest_bi, &src_bi, &d_key_position, &cf);
+    
+    if ( pointer_amount > 0 ) 
+	    /* insert lkey[h]-th key  from CFL[h] to left neighbor L[h] */
+	reiserfs_ib_insert_key (tb->tb_fs, &dest_bi, 
+				reiserfs_node_items(dest_bi.bi_bh), 
+				cf, d_key_position);
+    
+    /* last parameter is del_parameter */
+    reiserfs_ib_move (tb->tb_fs, &dest_bi, &src_bi, 
+		      FIRST_TO_LAST, pointer_amount, 1);
+}
+
+
+/* Insert d_key'th (delimiting) key from buffer cfr to head of dest. 
+ * Copy n node pointers and n - 1 items from buffer src to buffer dest.
+ * Replace  d_key'th key in buffer cfr.
+ * Delete n items and node pointers from buffer src.
+ */
+static void reiserfs_ib_shift_right (/* INTERNAL_FROM_S_TO_R | 
+					INTERNAL_FROM_L_TO_S */
+				     int mode,	
+				     reiserfs_tb_t * tb, 
+				     int h, int pointer_amount)
+{
+    reiserfs_bufinfo_t dest_bi, src_bi;
+    reiserfs_bh_t * cf;
+    int d_key_position;
+    int nr;
+
+
+    reiserfs_ib_shift_prep (mode, tb, h, &dest_bi, &src_bi, 
+			    &d_key_position, &cf);
+
+    nr = reiserfs_node_items (src_bi.bi_bh);
+
+    if (pointer_amount > 0) {
+	/* insert delimiting key from common father of dest and src 
+	   to dest node into position 0 */
+	reiserfs_ib_insert_key (tb->tb_fs, &dest_bi, 
+				0, cf, d_key_position);
+	if (nr == pointer_amount - 1) {
+	    /* when S[h] disappers replace left delemiting key as well */
+	    if (tb->CFL[h]) {
+		reiserfs_node_replace_key(cf, d_key_position, 
+					  tb->CFL[h], tb->lkey[h]);
+	    }
+	} else {
+	    reiserfs_node_replace_key(cf, d_key_position, 
+				      src_bi.bi_bh, nr - pointer_amount);
+	}
+    }      
+
+    /* last parameter is del_parameter */
+    reiserfs_ib_move (tb->tb_fs, &dest_bi, &src_bi, 
+		      LAST_TO_FIRST, pointer_amount, 0);
+}
+
+/* Insert delimiting key to R[h].
+ * Copy n node pointers and n - 1 items from buffer S[h] to R[h].
+ * Delete n - 1 items and node pointers from buffer S[h].
+ */
+/* it always shift from S[h] to R[h] */
+static void reiserfs_ib_shift1_right (reiserfs_tb_t * tb, 
+				      int h, int pointer_amount)
+{
+    reiserfs_bufinfo_t dest_bi, src_bi;
+    reiserfs_bh_t * cf;
+    int d_key_position;
+
+    reiserfs_ib_shift_prep (INTERNAL_SHIFT_FROM_S_TO_R, tb, h, 
+			    &dest_bi, &src_bi, &d_key_position, &cf);
+    
+    if (pointer_amount > 0) /* insert rkey from CFR[h] to right neighbor R[h] */
+	reiserfs_ib_insert_key (tb->tb_fs, &dest_bi, 
+				0, cf, d_key_position);
+
+    /* last parameter is del_parameter */
+    reiserfs_ib_move (tb->tb_fs, &dest_bi, &src_bi, 
+		      LAST_TO_FIRST, pointer_amount, 1);
+}
+
+
+/* Delete insert_num node pointers together with their left items
+ * and balance current node.*/
+static void reiserfs_ib_balance_delete (reiserfs_tb_t * tb, 
+					int h, int child_pos)
+{
+    int insert_num;
+    int n;
+    reiserfs_bh_t * tbSh = REISERFS_PATH_UPBUFFER (tb->tb_path, h);
+    reiserfs_bufinfo_t bi;
+
+    insert_num = tb->insert_size[h] / ((int)(REISERFS_DC_SIZE + REISERFS_KEY_SIZE));
+  
+    /* delete child-node-pointer(s) together with their left item(s) */
+    bi.bi_bh = tbSh;
+
+    bi.bi_parent = REISERFS_PATH_UPPARENT (tb->tb_path, h);
+
+    bi.bi_position = REISERFS_PATH_UPPOS (tb->tb_path, h + 1);
+
+    reiserfs_ib_delete (tb->tb_fs, &bi, child_pos, 
+			(child_pos == 0) ? child_pos : child_pos - 1, 
+			-insert_num);
+
+    n = reiserfs_node_items(tbSh);
+
+    if ( tb->lnum[h] == 0 && tb->rnum[h] == 0 ) {
+	if ( tb->blknum[h] == 0 ) {
+	    /* node S[h] (root of the tree) is empty now */
+	    reiserfs_bh_t *new_root;
+	    reiserfs_sb_t * sb;
+
+	    /* choose a new root */
+	    if ( ! tb->L[h-1] || ! reiserfs_node_items(tb->L[h-1]) )
+		new_root = tb->R[h-1];
+	    else
+		new_root = tb->L[h-1];
+
+	    /* update super block's tree height and pointer to a root block */
+	    sb = tb->tb_fs->fs_ondisk_sb;
+	    reiserfs_sb_set_root (sb, new_root->b_blocknr);
+	    reiserfs_sb_set_height (sb, reiserfs_sb_get_height (sb) - 1);
+
+	    reiserfs_buffer_mkdirty (tb->tb_fs->fs_super_bh);
+	    tb->tb_fs->fs_dirt = 1;
+
+	    /* mark buffer S[h] not uptodate and put it in free list */
+	    reiserfs_node_forget(tb->tb_fs, tbSh->b_blocknr);
+	    return;
+	}
+	return;
+    }
+
+    if ( tb->L[h] && tb->lnum[h] == -reiserfs_node_items(tb->L[h]) - 1 ) { 
+	/* join S[h] with L[h] */
+	/*tb->L[h], tb->CFL[h], tb->lkey[h], tb->S[h], n+1);*/
+	reiserfs_ib_shift_left (INTERNAL_SHIFT_FROM_S_TO_L, 
+				tb, h, n + 1);
+	/* preserve not needed, internal, 1 mean free block */
+	reiserfs_node_forget(tb->tb_fs, tbSh->b_blocknr);
+	return;
+    }
+
+    if ( tb->R[h] &&  tb->rnum[h] == -reiserfs_node_items(tb->R[h]) - 1 ) { 
+	/* join S[h] with R[h] */
+	reiserfs_ib_shift_right (INTERNAL_SHIFT_FROM_S_TO_R, 
+				 tb, h, n + 1);
+	reiserfs_node_forget(tb->tb_fs, tbSh->b_blocknr);
+	return;
+    }
+
+    if ( tb->lnum[h] < 0 ) { 
+	/* borrow from left neighbor L[h] */
+	reiserfs_ib_shift_right (INTERNAL_SHIFT_FROM_L_TO_S, 
+				 tb, h, -tb->lnum[h]);
+	return;
+    }
+
+    if ( tb->rnum[h] < 0 ) { 
+	/* borrow from right neighbor R[h] */
+	/*tb->S[h], tb->CFR[h], tb->rkey[h], tb->R[h], -tb->rnum[h]);*/
+	reiserfs_ib_shift_left (INTERNAL_SHIFT_FROM_R_TO_S, 
+				tb, h, -tb->rnum[h]);
+	return;
+    }
+
+    if ( tb->lnum[h] > 0 ) { 
+	/* split S[h] into two parts and put them into neighbors */
+	/*tb->L[h], tb->CFL[h], tb->lkey[h], tb->S[h], tb->lnum[h]);*/
+	reiserfs_ib_shift_left (INTERNAL_SHIFT_FROM_S_TO_L, 
+				tb, h, tb->lnum[h]);
+	reiserfs_ib_shift_right (INTERNAL_SHIFT_FROM_S_TO_R, 
+				 tb, h, tb->rnum[h]);
+	reiserfs_node_forget(tb->tb_fs, tbSh->b_blocknr);
+	return;
+    }
+    
+    reiserfs_panic ("reiserfs_ib_balance_delete", "unexpected "
+		    "tb->lnum[%d]==%d or tb->rnum[%d]==%d",
+		    h, tb->lnum[h], h, tb->rnum[h]);
+}
+
+/* Replace delimiting key of buffers L[h] and S[h] by the given key.*/
+static void reiserfs_ib_set_lkey (reiserfs_tb_t * tb,
+				  int h, reiserfs_ih_t * key)
+{
+    if (reiserfs_node_items(REISERFS_PATH_UPBUFFER(tb->tb_path, h)) == 0)
+	return;
+
+    memcpy (reiserfs_int_key_at(tb->CFL[h],tb->lkey[h]), key, REISERFS_KEY_SIZE);
+    reiserfs_buffer_mkdirty (tb->CFL[h]);
+}
+
+
+/* Replace delimiting key of buffers S[h] and R[h] by the given key.*/
+static void reiserfs_ib_set_rkey (reiserfs_tb_t * tb,
+				  int h, reiserfs_ih_t * key)
+{
+    memcpy (reiserfs_int_key_at(tb->CFR[h],tb->rkey[h]), key, REISERFS_KEY_SIZE);
+    reiserfs_buffer_mkdirty (tb->CFR[h]);
+}
+
+int reiserfs_ib_balance (reiserfs_tb_t * tb,
+			 /* level of the tree */
+			 int h,
+			 int child_pos,
+			 /* key for insertion on higher level */
+			 reiserfs_ih_t * insert_key,
+			 /* node for insertion on higher level*/
+			 reiserfs_bh_t ** insert_ptr)
+  /* if inserting/pasting
+   {
+   child_pos is the position of the node-pointer in S[h] that	 *
+   pointed to S[h-1] before balancing of the h-1 level;		 *
+   this means that new pointers and items must be inserted AFTER *
+   child_pos
+   }
+   else 
+   {
+   it is the position of the leftmost pointer that must be deleted (together with
+   its corresponding key to the left of the pointer)
+   as a result of the previous level's balancing.
+   }
+*/
+{
+    reiserfs_bh_t * tbSh = REISERFS_PATH_UPBUFFER (tb->tb_path, h);
+    reiserfs_bufinfo_t bi;
+    
+    /* we return this: it is 0 if there is no S[h], 
+       else it is tb->S[h]->b_item_order */
+    int order;
+    
+    int insert_num, n, k;
+    reiserfs_bh_t * S_new;
+    reiserfs_ih_t new_insert_key;
+    reiserfs_bh_t * new_insert_ptr = NULL;
+    reiserfs_ih_t * new_insert_key_addr = insert_key;
+
+    order = ( tbSh ) ? REISERFS_PATH_UPPOS (tb->tb_path, h + 1)
+	    /*tb->S[h]->b_item_order*/ : 0;
+
+  /* Using insert_size[h] calculate the number insert_num of items
+     that must be inserted to or deleted from S[h]. */
+    insert_num = tb->insert_size[h]/((int)(REISERFS_KEY_SIZE + REISERFS_DC_SIZE));
+
+    /* Check whether insert_num is proper **/
+    /* Make balance in case insert_num < 0 */
+    if ( insert_num < 0 ) {
+	reiserfs_ib_balance_delete (tb, h, child_pos);
+	return order;
+    }
+ 
+    k = 0;
+    if ( tb->lnum[h] > 0 ) {
+	/* shift lnum[h] items from S[h] to the left neighbor L[h]. check 
+	   how many of new items fall into L[h] or CFL[h] after shifting */
+	
+	/* number of items in L[h] */
+	n = reiserfs_nh_get_items (NODE_HEAD(tb->L[h])); 
+	if ( tb->lnum[h] <= child_pos ) {
+	    /* new items don't fall into L[h] or CFL[h] */
+	    reiserfs_ib_shift_left (INTERNAL_SHIFT_FROM_S_TO_L, 
+				    tb, h, tb->lnum[h]);
+	    child_pos -= tb->lnum[h];
+	} else if ( tb->lnum[h] > child_pos + insert_num ) {
+	    /* all new items fall into L[h] */
+	    reiserfs_ib_shift_left (INTERNAL_SHIFT_FROM_S_TO_L, 
+				    tb, h, tb->lnum[h] - insert_num);
+
+	    /* insert insert_num keys and node-pointers into L[h] */
+	    bi.bi_bh = tb->L[h];
+	    bi.bi_parent = tb->FL[h];
+	    bi.bi_position = reiserfs_tb_lpos (tb, h);
+	    reiserfs_ib_insert (tb->tb_fs, &bi,
+				/*tb->L[h], tb->S[h-1]->b_next*/ 
+				n + child_pos + 1,
+				insert_num,insert_key,insert_ptr);
+
+	    insert_num = 0; 
+	} else {
+	    reiserfs_dc_t * dc;
+
+	    /* some items fall into L[h] or CFL[h], but some don't fall */
+	    reiserfs_ib_shift1_left (tb, h, child_pos + 1);
+	    /* calculate number of new items that fall into L[h] */
+	    k = tb->lnum[h] - child_pos - 1;
+
+	    bi.bi_bh = tb->L[h];
+	    bi.bi_parent = tb->FL[h];
+	    bi.bi_position = reiserfs_tb_lpos (tb, h);
+	    reiserfs_ib_insert (tb->tb_fs, &bi,
+				/*tb->L[h], tb->S[h-1]->b_next,*/ 
+				n + child_pos + 1,k,
+				insert_key,insert_ptr);
+
+	    reiserfs_ib_set_lkey(tb, h, insert_key + k);
+
+	    /* replace the first node-ptr in S[h] by 
+	       node-ptr to insert_ptr[k] */
+	    dc = reiserfs_int_at(tbSh, 0);
+
+	    reiserfs_dc_init(dc, REISERFS_NODE_SPACE(insert_ptr[k]->b_size) - 
+		   reiserfs_nh_get_free (NODE_HEAD(insert_ptr[k])), 
+		   insert_ptr[k]->b_blocknr);
+	/*  reiserfs_dc_set_size (dc, REISERFS_NODE_SPACE(insert_ptr[k]->b_size) -
+			       reiserfs_nh_get_free (NODE_HEAD(insert_ptr[k])));
+	    reiserfs_dc_set_nr (dc, insert_ptr[k]->b_blocknr); */
+	    reiserfs_buffer_mkdirty (tbSh);
+
+	    k++;
+	    insert_key += k;
+	    insert_ptr += k;
+	    insert_num -= k;
+	    child_pos = 0;
+	}
+    }	/* tb->lnum[h] > 0 */
+
+    if ( tb->rnum[h] > 0 ) {
+	/*shift rnum[h] items from S[h] to the right neighbor R[h]*/
+	/* check how many of new items fall into R or CFR after shifting */
+	n = reiserfs_nh_get_items (NODE_HEAD (tbSh)); /* number of items in S[h] */
+	if ( n - tb->rnum[h] >= child_pos )
+	    /* new items fall into S[h] */
+	    /*reiserfs_ib_shift_right(tb,h,tbSh,tb->CFR[h],
+			tb->rkey[h],tb->R[h], tb->rnum[h]);*/
+	    reiserfs_ib_shift_right (INTERNAL_SHIFT_FROM_S_TO_R, 
+				     tb, h, tb->rnum[h]);
+	else
+	    if ( n + insert_num - tb->rnum[h] < child_pos ) {
+		/* all new items fall into R[h] */
+		reiserfs_ib_shift_right (INTERNAL_SHIFT_FROM_S_TO_R, 
+					 tb, h, tb->rnum[h] - insert_num);
+
+		/* insert insert_num keys and node-pointers into R[h] */
+		bi.bi_bh = tb->R[h];
+		bi.bi_parent = tb->FR[h];
+		bi.bi_position = reiserfs_tb_rpos (tb, h);
+		reiserfs_ib_insert (tb->tb_fs, &bi, 
+				    /*tb->R[h],tb->S[h-1]->b_next*/ 
+				    child_pos - n - insert_num + 
+				    tb->rnum[h] - 1, insert_num,
+				    insert_key,insert_ptr);
+		insert_num = 0;
+	    } else {
+		reiserfs_dc_t * dc;
+
+		/* one of the items falls into CFR[h] */
+		reiserfs_ib_shift1_right(tb, h, n - child_pos + 1);
+		/* calculate number of new items that fall into R[h] */
+		k = tb->rnum[h] - n + child_pos - 1;
+
+		bi.bi_bh = tb->R[h];
+		bi.bi_parent = tb->FR[h];
+		bi.bi_position = reiserfs_tb_rpos (tb, h);
+		reiserfs_ib_insert (tb->tb_fs, &bi, 
+				    /*tb->R[h], tb->R[h]->b_child,*/ 0, 
+				    k, insert_key + 1, insert_ptr + 1);
+
+		reiserfs_ib_set_rkey(tb, h, insert_key + 
+				     insert_num - k - 1);
+
+		/* replace the first node-ptr in R[h] by node-ptr 
+		   insert_ptr[insert_num-k-1]*/
+		dc = reiserfs_int_at(tb->R[h], 0);
+		reiserfs_dc_init(dc, REISERFS_NODE_SPACE(
+			insert_ptr[insert_num-k-1]->b_size) -
+			reiserfs_nh_get_free(NODE_HEAD(insert_ptr[insert_num-k-1])),
+			insert_ptr[insert_num-k-1]->b_blocknr);
+		/*
+		reiserfs_dc_set_size (dc, 
+			REISERFS_NODE_SPACE(insert_ptr[insert_num-k-1]->b_size) -
+			reiserfs_nh_get_free (NODE_HEAD(insert_ptr[insert_num-k-1])));
+		reiserfs_dc_set_nr (dc, insert_ptr[insert_num-k-1]->b_blocknr);
+		*/
+		reiserfs_buffer_mkdirty (tb->R[h]);
+		    
+		insert_num -= (k + 1);
+	    }
+    }
+
+    /** Fill new node that appears instead of S[h] **/
+    if ( ! tb->blknum[h] )
+    { /* node S[h] is empty now */
+	/* Mark buffer as invalid and put it to head of free list. */
+	/* do not preserve, internal node*/
+	reiserfs_node_forget(tb->tb_fs, tbSh->b_blocknr);
+	return order;
+    }
+
+    if ( ! tbSh ) {
+	/* create new root */
+	reiserfs_dc_t  * dc;
+	reiserfs_bh_t * tbSh_1 = REISERFS_PATH_UPBUFFER (tb->tb_path, h - 1);
+	reiserfs_sb_t * sb;
+
+	if ( tb->blknum[h] != 1 )
+	    reiserfs_panic(0, "reiserfs_ib_balance", 
+			   "One new node required for creating the new root");
+	/* S[h] = empty buffer from the list FEB. */
+	tbSh = reiserfs_tb_FEB (tb);
+	reiserfs_nh_set_level (NODE_HEAD(tbSh), h + 1);
+	
+	/* Put the unique node-pointer to S[h] that points to S[h-1]. */
+
+	dc = reiserfs_int_at(tbSh, 0);
+
+	reiserfs_dc_init(dc, REISERFS_NODE_SPACE (tbSh_1->b_size) - 
+	       reiserfs_nh_get_free (NODE_HEAD(tbSh_1)),
+	       tbSh_1->b_blocknr);
+	/*
+	reiserfs_dc_set_size (dc, REISERFS_NODE_SPACE (tbSh_1->b_size) - 
+		reiserfs_nh_get_free (NODE_HEAD(tbSh_1)));
+	reiserfs_dc_set_nr (dc, tbSh_1->b_blocknr); */
+	tb->insert_size[h] -= REISERFS_DC_SIZE;
+	reiserfs_nh_set_free (NODE_HEAD(tbSh),
+			     reiserfs_nh_get_free (NODE_HEAD(tbSh)) - 
+			     REISERFS_DC_SIZE);
+
+	reiserfs_buffer_mkdirty (tbSh);
+	
+	/* put new root into path structure */
+	REISERFS_PATH_BUFFER(tb->tb_path, REISERFS_PATH_OFFILL) = tbSh;
+	
+	/* Change root in structure super block. */
+	sb = tb->tb_fs->fs_ondisk_sb;
+	reiserfs_sb_set_root (sb, tbSh->b_blocknr);
+	reiserfs_sb_set_height (sb, reiserfs_sb_get_height (sb) + 1);
+	
+	reiserfs_buffer_mkdirty (tb->tb_fs->fs_super_bh);
+	tb->tb_fs->fs_dirt = 1;
+    }
+    
+    if ( tb->blknum[h] == 2 ) {
+	int snum;
+	reiserfs_bufinfo_t dest_bi, src_bi;
+
+
+	/* S_new = free buffer from list FEB */
+	S_new = reiserfs_tb_FEB(tb);
+
+	reiserfs_nh_set_level (NODE_HEAD(S_new), h + 1);
+
+	dest_bi.bi_bh = S_new;
+	dest_bi.bi_parent = 0;
+	dest_bi.bi_position = 0;
+	src_bi.bi_bh = tbSh;
+	src_bi.bi_parent = REISERFS_PATH_UPPARENT (tb->tb_path, h);
+	src_bi.bi_position = REISERFS_PATH_UPPOS (tb->tb_path, h + 1);
+		
+	n = reiserfs_nh_get_items (NODE_HEAD(tbSh)); /* number of items in S[h] */
+	snum = (insert_num + n + 1)/2;
+	if ( n - snum >= child_pos ) {
+	    /* new items don't fall into S_new */
+	    /*	store the delimiting key for the next level */
+	    /* new_insert_key = (n - snum)'th key in S[h] */
+	    memcpy (&new_insert_key,reiserfs_int_key_at(tbSh,n - snum),
+		    REISERFS_KEY_SIZE);
+	    /* last parameter is del_par */
+	    reiserfs_ib_move (tb->tb_fs, &dest_bi, &src_bi, 
+			      LAST_TO_FIRST, snum, 0);
+	} else if ( n + insert_num - snum < child_pos ) {
+	    /* all new items fall into S_new */
+	    /*	store the delimiting key for the next level */
+	    /* new_insert_key = (n + insert_item - snum)'th key in S[h] */
+	    memcpy(&new_insert_key,reiserfs_int_key_at(tbSh,n + insert_num - snum),
+		   REISERFS_KEY_SIZE);
+	    /* last parameter is del_par */
+	    reiserfs_ib_move (tb->tb_fs, &dest_bi, &src_bi, 
+			      LAST_TO_FIRST, snum - insert_num, 0);
+	    
+	    /* reiserfs_ib_move(S_new,tbSh,1,snum - insert_num,0);*/
+
+	    /* insert insert_num keys and node-pointers into S_new */
+	    reiserfs_ib_insert (tb->tb_fs, &dest_bi, 
+				/*S_new,tb->S[h-1]->b_next,*/
+				child_pos - n - insert_num + snum - 1,
+				insert_num,insert_key,insert_ptr);
+	    insert_num = 0;
+	} else {
+	    reiserfs_dc_t * dc;
+
+	    /* some items fall into S_new, but some don't fall */
+	    /* last parameter is del_par */
+	    reiserfs_ib_move (tb->tb_fs, &dest_bi, &src_bi, 
+			      LAST_TO_FIRST, n - child_pos + 1, 1);
+	    /* reiserfs_ib_move(S_new,tbSh,1,n - child_pos + 1,1);*/
+	    /* calculate number of new items that fall into S_new */
+	    k = snum - n + child_pos - 1;
+
+	    reiserfs_ib_insert (tb->tb_fs, &dest_bi, 
+				/*S_new,*/ 0, k, insert_key + 1, 
+				insert_ptr+1);
+
+	    /* new_insert_key = insert_key[insert_num - k - 1] */
+	    memcpy(&new_insert_key,insert_key + insert_num - k - 1, REISERFS_KEY_SIZE);
+	    /* replace first node-ptr in S_new by node-ptr to 
+	       insert_ptr[insert_num-k-1] */
+
+	    dc = reiserfs_int_at(S_new,0);
+	    reiserfs_dc_init(dc, REISERFS_NODE_SPACE(
+		   insert_ptr[insert_num-k-1]->b_size) -
+		   reiserfs_nh_get_free (NODE_HEAD(insert_ptr[insert_num-k-1])),
+		   insert_ptr[insert_num-k-1]->b_blocknr);
+	    /*
+	    reiserfs_dc_set_size (dc, REISERFS_NODE_SPACE(insert_ptr[insert_num-k-1]->b_size) -
+		reiserfs_nh_get_free (NODE_HEAD(insert_ptr[insert_num-k-1])));
+	    reiserfs_dc_set_nr (dc, insert_ptr[insert_num-k-1]->b_blocknr);
+	    */
+	    reiserfs_buffer_mkdirty (S_new);
+			
+	    insert_num -= (k + 1);
+	}
+	/* new_insert_ptr = node_pointer to S_new */
+	new_insert_ptr = S_new;
+	
+	// S_new->b_count --;
+    }
+
+    n = reiserfs_nh_get_items (NODE_HEAD(tbSh)); /*number of items in S[h] */
+
+    if ( -1 <= child_pos && child_pos <= n && insert_num > 0 ) {
+	bi.bi_bh = tbSh;
+	bi.bi_parent = REISERFS_PATH_UPPARENT (tb->tb_path, h);
+	bi.bi_position = REISERFS_PATH_UPPOS (tb->tb_path, h + 1);
+	if (child_pos == -1) {
+	    /* this is a little different from original do_balance:
+	       here we insert the minimal keys in the tree, that has never 
+	       happened when file system works */
+	    if (tb->CFL[h-1] || insert_num != 1 || h != 1)
+		misc_die ("reiserfs_ib_balance: invalid child_pos");
+	    /* insert_child (tb->S[h], tb->S[h-1], child_pos, insert_num, 
+			B_N_ITEM_HEAD(tb->S[0],0), insert_ptr);*/
+	    reiserfs_ib_insert (tb->tb_fs, &bi, child_pos, insert_num, 
+				reiserfs_ih_at(REISERFS_PATH_LEAF (tb->tb_path), 0), 
+				insert_ptr);
+	} else
+	    reiserfs_ib_insert (tb->tb_fs, &bi, child_pos,insert_num,
+				insert_key,insert_ptr);
+    }
+
+    memcpy (new_insert_key_addr,&new_insert_key,REISERFS_KEY_SIZE);
+    insert_ptr[0] = new_insert_ptr;
+
+    return order;
+}
diff --git a/libreiserfs/journal.c b/libreiserfs/journal.c
new file mode 100644
index 0000000..9474fab
--- /dev/null
+++ b/libreiserfs/journal.c
@@ -0,0 +1,1085 @@
+/*
+ * Copyright 2002-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+#include "misc/device.h"
+
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+
+/* check whether 'block' can be logged */
+static int not_journalable (reiserfs_filsys_t * fs, unsigned long block)
+{
+    reiserfs_blktype_t type;
+    
+    type = reiserfs_fs_block(fs, block);
+    return (type == BT_INVAL || type == BT_JOURNAL);
+}
+
+/* compares description block with commit block. returns 0 if they differ, 1
+   if they match */
+static int does_desc_match_commit (reiserfs_bh_t *d_bh, 
+			    reiserfs_bh_t *c_bh) 
+{
+    return (reiserfs_jc_get_trans (c_bh) == reiserfs_jd_get_trans (d_bh) &&
+	    reiserfs_jc_get_len (c_bh) == reiserfs_jd_get_len (d_bh));
+}
+
+
+/* d_bh is descriptor, return number of block where commit block of this
+   transaction is to be */
+static unsigned long commit_expected (reiserfs_filsys_t * fs, 
+				      reiserfs_bh_t * d_bh)
+{
+    unsigned long offset;
+    reiserfs_journal_param_t * sb_jp;
+
+
+    sb_jp = reiserfs_sb_jp (fs->fs_ondisk_sb);
+    //desc = (struct reiserfs_journal_desc *)d_bh->b_data;
+    offset = d_bh->b_blocknr - reiserfs_jp_get_start (sb_jp);
+    return reiserfs_jp_get_start (sb_jp) + 
+	((offset + reiserfs_jd_get_len (d_bh) + 1) % reiserfs_jp_get_size (sb_jp));
+}
+
+
+/* d_bh contains journal descriptor, returns number of block where descriptor
+   block of next transaction should be */
+static unsigned long next_desc_expected (reiserfs_filsys_t * fs, 
+					 reiserfs_bh_t * d_bh)
+{
+    unsigned long offset;
+    reiserfs_journal_param_t * sb_jp;
+
+
+    sb_jp = reiserfs_sb_jp (fs->fs_ondisk_sb);
+    //desc = (struct reiserfs_journal_desc *)d_bh->b_data;
+    offset = d_bh->b_blocknr - reiserfs_jp_get_start (sb_jp);
+    return reiserfs_jp_get_start (sb_jp) + 
+	((offset + reiserfs_jd_get_len (d_bh) + 2) % reiserfs_jp_get_size (sb_jp));
+}
+
+/* common checks for validness of a transaction */
+static int transaction_check_content (reiserfs_filsys_t * fs, 
+				      reiserfs_trans_t * trans) 
+{
+    reiserfs_bh_t *d_bh, *c_bh;
+    struct reiserfs_journal_desc * desc;
+    struct reiserfs_journal_commit * commit;
+    unsigned long block;
+    unsigned int trans_half, i;
+
+    d_bh = reiserfs_buffer_read (fs->fs_journal_dev, trans->desc_blocknr, fs->fs_blocksize);
+
+    if (!d_bh || reiserfs_node_type (d_bh) != NT_JDESC)
+	goto error_desc_brelse;
+
+    /* read expected commit block and compare with descriptor block */
+    c_bh = reiserfs_buffer_read (fs->fs_journal_dev, 
+		  commit_expected (fs, d_bh), 
+		  fs->fs_blocksize);
+    
+    if (!c_bh)
+	goto error_desc_brelse;
+ 
+    if (!does_desc_match_commit (d_bh, c_bh)) 
+	goto error_commit_brelse;
+
+    /* Check that all target blocks are journalable */
+    desc = (struct reiserfs_journal_desc *)(d_bh->b_data);
+    commit = (struct reiserfs_journal_commit *)(c_bh->b_data);
+
+    trans_half = reiserfs_jt_half (d_bh->b_size);
+    for (i = 0; i < reiserfs_jd_get_len(d_bh); i++) {
+	if (i < trans_half)
+	    block = le32_to_cpu (desc->j2_realblock[i]);
+	else
+	    block = le32_to_cpu (commit->j3_realblock[i - trans_half]);
+
+	if (not_journalable(fs, block)) 
+	    goto error_commit_brelse;
+    }
+    
+    reiserfs_buffer_close (d_bh);
+    reiserfs_buffer_close (c_bh);
+    return 1;
+    
+error_commit_brelse:
+    reiserfs_buffer_close (c_bh);
+error_desc_brelse:
+    reiserfs_buffer_close(d_bh);
+    return 0;
+}
+
+/* common checks for validness of a transaction */
+static int transaction_check_desc(reiserfs_filsys_t * fs, 
+				  reiserfs_bh_t * d_bh) 
+{
+    reiserfs_bh_t * c_bh;
+    int ret = 1;
+
+    if (!d_bh || reiserfs_node_type (d_bh) != NT_JDESC)
+	return 0;
+
+    /* read expected commit block and compare with descriptor block */
+    c_bh = reiserfs_buffer_read (fs->fs_journal_dev, commit_expected (fs, d_bh), fs->fs_blocksize);
+    if (!c_bh)
+	return 0;
+ 
+    if (!does_desc_match_commit (d_bh, c_bh)) 
+	ret = 0;
+
+    reiserfs_buffer_close (c_bh);
+    return ret;
+}
+
+
+/* read the journal and find the oldest and newest transactions, return number
+   of transactions found */
+int reiserfs_journal_get_transactions (reiserfs_filsys_t * fs,
+				       reiserfs_trans_t * oldest,
+				       reiserfs_trans_t * newest)
+{
+    reiserfs_sb_t * sb;
+    unsigned long j_cur;
+    unsigned long j_start;
+    unsigned long j_size;
+    reiserfs_bh_t * d_bh;
+    __u32 newest_trans_id, oldest_trans_id, trans_id;
+    int trans_nr;
+
+    sb = fs->fs_ondisk_sb;
+    
+    j_start = reiserfs_jp_get_start (reiserfs_sb_jp (sb));
+    j_size = reiserfs_jp_get_size (reiserfs_sb_jp (sb));
+    
+    oldest_trans_id = 0xffffffff;
+    newest_trans_id = 0;
+
+    trans_nr = 0;
+    for (j_cur = 0; j_cur < j_size; j_cur ++) {
+	d_bh = reiserfs_buffer_read (fs->fs_journal_dev, j_start + j_cur, fs->fs_blocksize);
+	if (!transaction_check_desc (fs, d_bh)) {
+	    reiserfs_buffer_close (d_bh);
+	    continue;
+	}
+
+	trans_nr ++;
+
+	trans_id = reiserfs_jd_get_trans (d_bh);
+	if (trans_id < oldest_trans_id) {
+	    oldest_trans_id = trans_id;
+
+	    oldest->mount_id = reiserfs_jd_get_mount (d_bh);
+	    oldest->trans_id = reiserfs_jd_get_trans (d_bh);
+	    oldest->desc_blocknr = d_bh->b_blocknr;
+	    oldest->trans_len = reiserfs_jd_get_len (d_bh);
+	    oldest->commit_blocknr = commit_expected (fs, d_bh);
+	    oldest->next_trans_offset = next_desc_expected (fs, d_bh) - j_start;
+	}
+
+	if (trans_id > newest_trans_id) {
+	    newest_trans_id = trans_id;
+
+	    newest->mount_id = reiserfs_jd_get_mount (d_bh);
+	    newest->trans_id = reiserfs_jd_get_trans (d_bh);
+	    newest->desc_blocknr = d_bh->b_blocknr;
+	    newest->trans_len = reiserfs_jd_get_len (d_bh);
+	    newest->commit_blocknr = commit_expected (fs, d_bh);
+	    newest->next_trans_offset = next_desc_expected (fs, d_bh) - j_start;
+	}
+
+	j_cur += reiserfs_jd_get_len (d_bh) + 1;
+	reiserfs_buffer_close (d_bh);
+    }
+
+    return trans_nr;
+}
+
+#define TRANS_FOUND     1
+#define TRANS_NOT_FOUND 0
+
+/* trans is a valid transaction. Look for valid transaction with smallest
+   trans id which is greater than the id of the current one */
+static int next_transaction (reiserfs_filsys_t * fs, 
+			     reiserfs_trans_t * trans, 
+			     reiserfs_trans_t break_trans)
+{
+    reiserfs_bh_t * d_bh, * next_d_bh;
+    int found;
+    unsigned long j_start;
+    unsigned long j_offset;
+    unsigned long block;
+
+
+    j_start = reiserfs_jp_get_start (reiserfs_sb_jp (fs->fs_ondisk_sb));
+
+    found = TRANS_NOT_FOUND;
+
+    if (trans->trans_id == break_trans.trans_id)
+	return found;
+	
+    /* make sure that 'trans' is a valid transaction */
+    d_bh = reiserfs_buffer_read (fs->fs_journal_dev, trans->desc_blocknr, fs->fs_blocksize);
+    if (!transaction_check_desc (fs, d_bh))
+	misc_die ("next_transaction: valid transaction is expected");
+
+    block = next_desc_expected (fs, d_bh);
+    j_offset = block - j_start;
+
+    while (1) {
+	next_d_bh = reiserfs_buffer_read (fs->fs_journal_dev, block, fs->fs_blocksize);
+	if (transaction_check_desc (fs, next_d_bh))
+	    break;
+
+	reiserfs_buffer_close (next_d_bh);
+	j_offset ++;
+	block = j_start + 
+		(j_offset % reiserfs_jp_get_size (reiserfs_sb_jp (fs->fs_ondisk_sb)));
+    }
+
+    //next_desc = (struct reiserfs_journal_desc *)next_d_bh->b_data;
+    
+    if (break_trans.trans_id >= reiserfs_jd_get_trans (next_d_bh)) {
+	/* found transaction is newer */
+	trans->mount_id = reiserfs_jd_get_mount (next_d_bh);
+	trans->trans_id = reiserfs_jd_get_trans (next_d_bh);
+	trans->desc_blocknr = next_d_bh->b_blocknr;
+	trans->trans_len = reiserfs_jd_get_len (next_d_bh);
+	trans->commit_blocknr = commit_expected (fs, next_d_bh);
+	trans->next_trans_offset = next_desc_expected (fs, next_d_bh) - j_start;
+	found = TRANS_FOUND;
+    }
+
+    reiserfs_buffer_close (d_bh);
+    reiserfs_buffer_close (next_d_bh);
+    return found;
+}
+
+static void read_journal_write_in_place (reiserfs_filsys_t * fs, 
+					 reiserfs_trans_t * trans, 
+					 unsigned int index, 
+                                         unsigned long in_journal, 
+					 unsigned long in_place)
+{
+    reiserfs_bh_t * j_bh, * bh;
+
+    j_bh = reiserfs_buffer_read (fs->fs_journal_dev, in_journal, fs->fs_blocksize);
+    if (!j_bh) {
+	fprintf (stderr, "replay_one_transaction: transaction %lu: reading "
+		 "%lu block failed\n", trans->trans_id, in_journal);
+	return;
+    }
+    if (not_journalable (fs, in_place)) {
+	fprintf (stderr, "replay_one_transaction: transaction %lu: block "
+		 "%ld should not be journalled (%lu)\n",
+		 trans->trans_id, in_journal, in_place);
+	reiserfs_buffer_close (j_bh);
+	return;
+    }
+
+    bh = reiserfs_buffer_open (fs->fs_dev, in_place, fs->fs_blocksize);
+    
+    memcpy (bh->b_data, j_bh->b_data, bh->b_size);
+    reiserfs_buffer_mkdirty (bh);
+    reiserfs_buffer_mkuptodate (bh, 1);
+    reiserfs_buffer_write (bh);
+    reiserfs_buffer_close (bh);
+    reiserfs_buffer_close (j_bh);
+    
+}
+
+
+/* go through all blocks of transaction and call 'action' each of them */
+void reiserfs_journal_foreach (reiserfs_filsys_t * fs, 
+			       reiserfs_trans_t * trans,
+			       action_on_block_t action)
+{
+    reiserfs_bh_t * d_bh, * c_bh;
+    struct reiserfs_journal_desc * desc;
+    struct reiserfs_journal_commit * commit;
+    unsigned long j_start, j_offset, j_size;
+    unsigned int i, trans_half;
+    unsigned long block;
+ 
+    d_bh = reiserfs_buffer_read (fs->fs_journal_dev, trans->desc_blocknr, fs->fs_blocksize);
+    if (!d_bh) {
+	reiserfs_warning (stdout, "reading descriptor block %lu failed\n", 
+			  trans->desc_blocknr);
+	return;
+    }
+
+    c_bh = reiserfs_buffer_read (fs->fs_journal_dev, trans->commit_blocknr, fs->fs_blocksize);
+    if (!c_bh) {
+	reiserfs_warning (stdout, "reading commit block %lu failed\n", 
+			  trans->commit_blocknr);
+	reiserfs_buffer_close (d_bh);
+	return;
+    }
+
+    desc = (struct reiserfs_journal_desc *)(d_bh->b_data);
+    commit = (struct reiserfs_journal_commit *)(c_bh->b_data);
+
+    /* first block of journal and size of journal */
+    j_start = reiserfs_jp_get_start (reiserfs_sb_jp (fs->fs_ondisk_sb));
+    j_size = reiserfs_jp_get_size (reiserfs_sb_jp (fs->fs_ondisk_sb));
+
+    /* offset in the journal where the transaction starts */
+    j_offset = trans->desc_blocknr - j_start + 1;
+
+    trans_half = reiserfs_jt_half (d_bh->b_size);
+    for (i = 0; i < trans->trans_len; i ++, j_offset ++) {
+	if (i < trans_half)
+	    block = le32_to_cpu (desc->j2_realblock[i]);
+	else
+	    block = le32_to_cpu (commit->j3_realblock[i - trans_half]);
+	action (fs, trans, i, j_start + (j_offset % j_size), block);
+    }
+
+    reiserfs_buffer_close (d_bh);
+    reiserfs_buffer_close (c_bh);
+}
+
+
+/* transaction is supposed to be valid */
+static int replay_one_transaction (reiserfs_filsys_t * fs,
+				   reiserfs_trans_t * trans)
+{
+    reiserfs_journal_foreach (fs, trans, read_journal_write_in_place);
+    fsync(fs->fs_dev);
+    return 0;
+}
+
+
+void reiserfs_journal_by_transaction (reiserfs_filsys_t * fs, 
+				      action_on_trans_t action)
+{
+    reiserfs_trans_t oldest, newest;
+    int ret = 0;
+
+    if (!reiserfs_journal_get_transactions (fs, &oldest, &newest))
+	return;
+
+    while (1) {
+	action (fs, &oldest);	
+	if ((ret = next_transaction (fs, &oldest, newest)) == TRANS_NOT_FOUND)
+	    break;
+    }
+}
+
+/* Get the size of the journal or reserved area. */
+unsigned long reiserfs_journal_hostsize(reiserfs_sb_t * sb)
+{
+	if (reiserfs_super_jr_magic (sb))
+		return reiserfs_sb_get_reserved (sb);
+
+	/* with standard journal */
+	return reiserfs_jp_get_size (reiserfs_sb_jp (sb)) + 1;
+}
+
+
+__u32 reiserfs_journal_tlen (__u32 desired, __u32 journal_size, 
+			     int blocksize, int verbose)
+{
+    __u32 saved;
+    __u32 ratio = 1;
+
+    if (blocksize < 4096)
+	ratio = 4096/blocksize;
+	
+    saved = desired;
+    if (!desired)
+		desired = JOURNAL_TRANS_MAX/ratio;
+    
+    if (journal_size / desired < JOURNAL_MIN_RATIO)
+		desired = journal_size / JOURNAL_MIN_RATIO;
+    
+    if (desired > JOURNAL_TRANS_MAX/ratio)
+		desired = JOURNAL_TRANS_MAX/ratio;
+    
+    if (desired < JOURNAL_TRANS_MIN/ratio)
+		desired = JOURNAL_TRANS_MIN/ratio;
+
+    if (verbose) {
+	if (saved && saved != desired)
+		reiserfs_warning (stderr,
+		    "WARNING: wrong transaction max size (%u). Changed to %u\n", 
+		    saved, desired);
+    }
+
+    return desired;
+}
+#if 0
+    __u32 ret_val;
+    ret_val = 0;
+    if (!desired)                   ret_val = JOURNAL_TRANS_MAX;
+    if (desired<journal_size/8)     ret_val = journal_size/8;
+    if (desired>journal_size/2)     ret_val = journal_size/2;
+    if (desired>JOURNAL_TRANS_MAX)  ret_val = JOURNAL_TRANS_MAX;
+    if (ret_val) {
+        reiserfs_warning (stderr, "WARNING: Journal max trans length "
+			  "is wrong seting: %u, resetting to available "
+			  "possible %u\n", desired, ret_val);
+    } else {
+        ret_val = desired;
+    }
+    return ret_val;
+}
+#endif
+
+__u32 reiserfs_journal_batch (unsigned long journal_trans_max) {
+    return journal_trans_max*JOURNAL_MAX_BATCH/JOURNAL_TRANS_MAX;
+}
+
+__u32 reiserfs_journal_commit_age (void) {
+    return JOURNAL_MAX_COMMIT_AGE;
+}
+
+
+__u32 reiserfs_journal_trans_age (void) {
+    return JOURNAL_MAX_TRANS_AGE;
+}
+
+int reiserfs_journal_params_check (reiserfs_filsys_t * fs) {
+    struct reiserfs_journal_header * j_head;
+    reiserfs_sb_t * sb = fs->fs_ondisk_sb;
+    
+    j_head = (struct reiserfs_journal_header *)(fs->fs_jh_bh->b_data);
+	
+    /* Check the superblock's journal parameters. */
+    if (!reiserfs_super_jr_magic (sb)) {    
+	if ((reiserfs_jp_get_dev (reiserfs_sb_jp(sb)) != 0) || 
+	    (reiserfs_jp_get_start (reiserfs_sb_jp(sb)) != 
+	     reiserfs_journal_start_must (fs)) || 
+	    (reiserfs_jp_get_size (reiserfs_sb_jp(sb)) != 
+	     reiserfs_journal_default(fs->fs_super_bh->b_blocknr, fs->fs_blocksize)))
+	{
+	    reiserfs_warning (stderr, 
+		"\nreiserfs_journal_open: wrong journal parameters found in the "
+		"super block. \nYou should run reiserfsck with --rebuild-sb to "
+		"check your superblock consistency.\n\n");
+		
+	    return 1;
+	}
+    }
+	
+    if (memcmp(&j_head->jh_journal, reiserfs_sb_jp (sb), sizeof(reiserfs_journal_param_t))) {
+	if (!reiserfs_super_jr_magic (sb)) {
+	    reiserfs_warning (stderr, "\nreiserfs_journal_open: journal "
+			      "parameters from the superblock does not "
+			      "match \nto the journal headers ones. It "
+			      "looks like that you created your fs with "
+			      "old\nreiserfsprogs. Journal header is "
+			      "fixed.\n\n", fs->fs_j_file_name);
+		
+	    memcpy(&j_head->jh_journal, reiserfs_sb_jp(sb), 
+		   sizeof(reiserfs_journal_param_t));
+	    
+	    reiserfs_buffer_mkdirty(fs->fs_jh_bh);
+	    reiserfs_buffer_write(fs->fs_jh_bh);
+	} else {
+	    reiserfs_warning (stderr, "\nreiserfs_journal_open: journal "
+			      "parameters from the super block does not "
+			      "match \nto journal parameters from the "
+			      "journal. You should run  reiserfsck with "
+			      "--rebuild-sb to check your superblock "
+			      "consistency.\n\n");
+	    return 1;	
+	}
+    }
+    
+    return 0;
+}
+
+/* read journal header and make sure that it matches with the filesystem
+   opened */
+int reiserfs_journal_open (reiserfs_filsys_t * fs, char * j_filename, int flags) {
+    reiserfs_sb_t * sb;
+    char buf[4096];
+    __u64 count;
+    dev_t rdev;
+    
+    sb = fs->fs_ondisk_sb;
+
+    if (j_filename && j_filename[0] != '\0') {
+	if (!reiserfs_super_jr_magic (sb) && 
+	    strcmp (j_filename, fs->fs_file_name)) 
+	{
+	    reiserfs_warning (stderr, "Filesystem with standard journal found, "
+			      "wrong name of specified journal device %s \n", 
+			      j_filename);
+	    return 2;
+	}
+    } else {
+	if (!reiserfs_super_jr_magic (sb)) {
+	    j_filename = fs->fs_file_name;
+	} else {
+	    /* Not standard journal and no device is specified.
+	       Find the device by rdev. */
+	    strcpy(buf, "/dev");
+
+	    rdev = reiserfs_sb_jp(sb)->jp_dev;
+	    if ((misc_dir_walk(buf, misc_device_rdev_match, &rdev)) <= 0) {
+		reiserfs_warning (stderr, "Filesystem with non-standard "
+				  "journal found, failed to find a block "
+				  "device (%u:%u) in /dev.\nCreate such "
+				  "a device in /dev or specify the journal "
+				  "device with -j option.\n",
+				  major(rdev), minor(rdev));
+
+		return 2;
+	    }
+
+	    j_filename = buf;
+	}
+    }
+    
+    fs->fs_journal_dev = open (j_filename, flags 
+#if defined(O_LARGEFILE)
+			       | O_LARGEFILE
+#endif
+			       );
+    if (fs->fs_journal_dev == -1) 
+        return -1;
+    
+    strncpy(fs->fs_j_file_name, j_filename, sizeof(fs->fs_j_file_name));
+    
+    if (reiserfs_jp_get_size(reiserfs_sb_jp(sb)) < JOURNAL_MIN_SIZE) {
+	reiserfs_warning (stderr, "Journal of (%lu) block size found on "
+	    "specified journal device %s.\nMust be not less than (%lu).\n",
+	    reiserfs_jp_get_size (reiserfs_sb_jp (sb)) + 1, j_filename, 
+	    JOURNAL_MIN_SIZE + 1);
+	close(fs->fs_journal_dev);
+	return 1;
+    }
+    
+    if (!(count = misc_device_count_blocks (j_filename, fs->fs_blocksize))) {
+	close(fs->fs_journal_dev);
+	return -1;
+    }
+
+    if (reiserfs_jp_get_start (reiserfs_sb_jp (sb)) + 
+	reiserfs_jp_get_size (reiserfs_sb_jp (sb)) + 1 > count) 
+    {
+	reiserfs_warning (stderr, "Detected journal on specified device %s "
+			  "does not fit to the device.\nStart block (%lu) + "
+			  "size (%lu) less than device size (%lu).\n", 
+			  j_filename, reiserfs_jp_get_start(reiserfs_sb_jp (sb)), 
+			  reiserfs_jp_get_size(reiserfs_sb_jp (sb)) + 1, count);
+	close(fs->fs_journal_dev);
+	return 1;
+    }
+    
+    /* read journal header */
+    fs->fs_jh_bh = reiserfs_buffer_read (fs->fs_journal_dev, 
+			  reiserfs_jp_get_start (reiserfs_sb_jp (sb)) + 
+			  reiserfs_jp_get_size (reiserfs_sb_jp (sb)), 
+			  fs->fs_blocksize);
+
+    if (!fs->fs_jh_bh) {
+	reiserfs_warning (stderr, "reiserfs_journal_open: reiserfs_buffer_read failed "
+			  "reading journal  header.\n");
+	close(fs->fs_journal_dev);
+	return -1;
+    }
+
+    return 0;
+}
+
+/* initialize super block's journal related fields and journal header fields. 
+ * If len is 0 - make journal of default size */
+int reiserfs_journal_create(
+    reiserfs_filsys_t * fs, 
+    char * j_device,		/* journal device name */
+    unsigned long offset,	/* journal offset on the j_device */
+    unsigned long len,		/* including journal header */
+    int transaction_max_size)
+{
+    struct stat st;
+    reiserfs_bh_t * bh;
+    struct reiserfs_journal_header * jh;
+    reiserfs_sb_t * sb;
+    unsigned long blocks;
+
+    sb = fs->fs_ondisk_sb;
+    
+    if (!j_device || !strcmp (j_device, fs->fs_file_name)) {
+	/* Journal is to be on the host device, check the amount space for the 
+	 * journal on it. */
+	len = len ? len : reiserfs_journal_default(fs->fs_super_bh->b_blocknr, 
+	    fs->fs_blocksize) + 1;
+		
+	offset = offset ? offset : reiserfs_journal_start_must(fs);
+	
+	if (offset < reiserfs_journal_start_must(fs)) {
+	    reiserfs_warning (stderr, "reiserfs_journal_create: offset is "
+		"%lu, but it cannot be less then %llu on the device %s\n", 
+		offset, reiserfs_journal_start_must(fs), j_device);
+	    return 0;
+	}
+	
+	if (!reiserfs_journal_fits(offset, fs->fs_blocksize, 
+				   reiserfs_sb_get_blocks(sb), len))
+	{
+	    /* host device does not contain enough blocks */
+	    reiserfs_warning (stderr, "reiserfs_journal_create: cannot create "
+		"a journal of %lu blocks with %lu offset on %d blocks\n", 
+		len, offset, reiserfs_sb_get_blocks(sb));
+		return 0;
+	}
+	
+	j_device = fs->fs_file_name;
+	
+	
+	st.st_rdev = 0;
+    } else {
+	/* journal is to be on separate device */
+	if (!(blocks = misc_device_count_blocks (j_device, fs->fs_blocksize)))
+		return 0;
+
+	if (!len) {
+	    /* default size of a journal on a separate device is whole device */
+	    if (blocks < offset) {
+		reiserfs_warning (stderr, "reiserfs_journal_create: offset is "
+		    "%lu, blocks on device %lu\n", offset, blocks);
+		return 0;
+	    }
+	    len = blocks - offset;
+	}
+
+	if (len > reiserfs_journal_default (fs->fs_super_bh->b_blocknr, 
+	    fs->fs_blocksize) + 1) 
+	{
+	    fflush(stderr);
+	    
+	    reiserfs_warning (stdout, "NOTE: journal new size %lu is greater "
+		"than default size %lu:\nthis may slow down initializing and "
+		"mounting of the journal. Hope it is ok.\n\n", len, 
+		reiserfs_journal_default(fs->fs_super_bh->b_blocknr, 
+		fs->fs_blocksize) + 1);
+	}
+
+	if (blocks < offset + len) {
+	    reiserfs_warning (stderr, "reiserfs_journal_create: no enough "
+		"blocks on device %lu, needed %lu\n", blocks, offset + len);
+	    return 0;
+	}
+	
+	if (stat (j_device, &st) == -1) {
+	    reiserfs_warning (stderr, "reiserfs_journal_create: stat %s failed"
+		": %s\n", j_device, strerror(errno));
+	    return 0;
+	}
+/*
+	if (!S_ISBLK (st.st_mode)) {
+		reiserfs_warning (stderr, "reiserfs_journal_create: "
+		"%s is not a block device (%x)\n", j_device, st.st_rdev);
+		return 0;
+	}
+*/
+    }
+
+    fs->fs_journal_dev = open (j_device, O_RDWR 
+#if defined(O_LARGEFILE)
+			       | O_LARGEFILE
+#endif
+			       );
+    if (fs->fs_journal_dev == -1) {
+	reiserfs_warning (stderr, "reiserfs_journal_create: could not open "
+	    "%s: %s\n", j_device, strerror(errno));
+	return 0;
+    }
+
+    strncpy(fs->fs_j_file_name, j_device, sizeof(fs->fs_j_file_name));
+
+    if (len < JOURNAL_MIN_SIZE + 1) {
+	reiserfs_warning (stderr, "WARNING: Journal size (%u) is less, than "
+	    "minimal supported journal size (%u).\n", len, JOURNAL_MIN_SIZE + 1);
+        return 0;
+    }
+    /* get journal header */
+    bh = reiserfs_buffer_open (fs->fs_journal_dev, offset + len - 1, fs->fs_blocksize);
+    if (!bh) {
+	reiserfs_warning (stderr, "reiserfs_journal_create: reiserfs_buffer_open failed\n");
+	return 0;
+    }
+
+    /* fill journal header */
+    jh = (struct reiserfs_journal_header *)bh->b_data;
+    reiserfs_jp_set_start(&jh->jh_journal, offset);
+    reiserfs_jp_set_dev(&jh->jh_journal, st.st_rdev);
+    reiserfs_jp_set_magic(&jh->jh_journal, misc_random());
+
+    reiserfs_jp_set_size(&jh->jh_journal, len - 1);
+    reiserfs_jp_set_tlen(&jh->jh_journal, reiserfs_journal_tlen(
+	transaction_max_size, len - 1, fs->fs_blocksize, 1));
+    reiserfs_jp_set_max_batch(&jh->jh_journal, reiserfs_journal_batch(
+	reiserfs_jp_get_tlen(&jh->jh_journal)));
+    reiserfs_jp_set_commit_age(&jh->jh_journal, 
+	reiserfs_journal_commit_age());
+    reiserfs_jp_set_trans_age(&jh->jh_journal, 
+	reiserfs_journal_trans_age ());
+
+    reiserfs_buffer_mkuptodate (bh, 1);
+    reiserfs_buffer_mkdirty (bh);
+    
+    fs->fs_jh_bh = bh;
+    
+    /* make a copy of journal header in the super block */
+    memcpy (reiserfs_sb_jp (sb), &jh->jh_journal, sizeof (reiserfs_journal_param_t));
+    reiserfs_buffer_mkdirty (fs->fs_super_bh);
+
+    return 1;
+}
+
+/* reiserfs_buffer_close journal header, flush all dirty buffers, close device, open, read
+   journal header */
+void reiserfs_journal_reopen (reiserfs_filsys_t * fs, int flag)
+{
+    unsigned long jh_block;
+
+
+    if (!reiserfs_journal_opened (fs))
+	return;
+
+    jh_block = fs->fs_jh_bh->b_blocknr;
+    reiserfs_buffer_close (fs->fs_jh_bh);
+    reiserfs_buffer_flush_all (fs->fs_journal_dev);
+    reiserfs_buffer_invalidate_all(fs->fs_journal_dev);
+    if (close (fs->fs_journal_dev))
+	misc_die ("reiserfs_journal_reopen: closed failed: %s", strerror(errno));
+
+    fs->fs_journal_dev = open (fs->fs_j_file_name, flag 
+#if defined(O_LARGEFILE)
+			       | O_LARGEFILE
+#endif
+			       );
+    if (fs->fs_journal_dev == -1)
+	misc_die ("reiserfs_journal_reopen: could not reopen journal device");
+
+    fs->fs_jh_bh = reiserfs_buffer_read (fs->fs_journal_dev, jh_block, fs->fs_blocksize);
+    if (!fs->fs_jh_bh)
+	misc_die ("reiserfs_journal_reopen: reading journal header failed");
+}
+
+
+int reiserfs_journal_opened (reiserfs_filsys_t * fs)
+{
+    return fs->fs_jh_bh ? 1 : 0;
+}
+
+
+void reiserfs_journal_flush (reiserfs_filsys_t * fs)
+{
+    if (!reiserfs_journal_opened (fs))
+		return;
+    reiserfs_buffer_flush_all(fs->fs_journal_dev);
+}
+
+
+void reiserfs_journal_free (reiserfs_filsys_t * fs)
+{
+    if (!reiserfs_journal_opened (fs))
+		return;
+    reiserfs_buffer_close (fs->fs_jh_bh);
+    fs->fs_jh_bh = 0;
+    fs->fs_j_file_name[0] = '\0';
+}
+
+
+void reiserfs_journal_close (reiserfs_filsys_t * fs)
+{
+    reiserfs_journal_flush (fs);
+    reiserfs_journal_free (fs);
+
+}
+
+/* update journal header */
+static void update_journal_header (reiserfs_filsys_t * fs, 
+				   reiserfs_bh_t * bh_jh, 
+				   reiserfs_trans_t *trans) 
+{
+    struct reiserfs_journal_header * j_head;
+	
+    j_head = (struct reiserfs_journal_header *)(bh_jh->b_data);
+
+    /* update journal header */
+    reiserfs_jh_set_flushed (j_head, trans->trans_id);
+    reiserfs_jh_set_mount (j_head, trans->mount_id);
+    reiserfs_jh_set_start (j_head, trans->next_trans_offset);
+    reiserfs_buffer_mkdirty (bh_jh);
+    reiserfs_buffer_write (bh_jh);
+    fsync(fs->fs_journal_dev);
+}
+
+/* FIXME: what should be done when not all transactions can be replayed in 
+   proper order? */
+int reiserfs_journal_replay (reiserfs_filsys_t * fs)
+{
+    reiserfs_bh_t * bh;
+    struct reiserfs_journal_header * j_head;
+    reiserfs_trans_t cur, newest, control;
+    int replayed, ret;
+
+    if (!reiserfs_journal_opened (fs))
+        reiserfs_panic ("reiserfs_journal_replay: journal is not opened");
+    
+    if (!reiserfs_fs_rw (fs)) {
+        reiserfs_panic ("reiserfs_journal_replay: fs is not opened with "
+			"write perms");
+    }
+
+    reiserfs_warning (stderr, "Replaying journal..\n");
+    bh = fs->fs_jh_bh;
+	
+    j_head = (struct reiserfs_journal_header *)(bh->b_data);
+    control.mount_id = reiserfs_jh_get_mount (j_head);
+    control.trans_id = reiserfs_jh_get_flushed (j_head);
+    control.desc_blocknr = reiserfs_jh_get_start (j_head);
+
+    if (!reiserfs_journal_get_transactions (fs, &cur, &newest)) {
+	reiserfs_warning (stderr, "No transactions found\n");
+	return 0;
+    }
+
+    /*  Smth strange with journal header or journal. We cannot say for sure 
+	what was the last replaied transaction, but relying on JH data is 
+	preferable. */
+
+    replayed = 0;
+    ret = TRANS_FOUND;
+    
+    /* Looking to the first valid not replayed transaction. */
+    while (1) {
+	if (cur.mount_id == control.mount_id && 
+	    cur.trans_id > control.trans_id)
+	    break;
+
+	if ((ret = next_transaction (fs, &cur, newest)) != TRANS_FOUND)
+	    break;
+    }
+    
+    while (ret == TRANS_FOUND) {
+	/* If not the next transaction to be replayed, break out here. */
+	if ((cur.mount_id != control.mount_id) || 
+	    (cur.trans_id != control.trans_id + 1 && control.trans_id))
+	    break;
+	
+	if (!transaction_check_content(fs, &cur)) {
+	    reiserfs_warning (stderr, "Trans broken: mountid %lu, transid %lu, "
+			      "desc %lu, len %lu, commit %lu, next trans "
+			      "offset %lu\n", cur.mount_id, cur.trans_id, 
+			      cur.desc_blocknr, cur.trans_len, 
+			      cur.commit_blocknr, cur.next_trans_offset);
+	    break;
+	}
+
+        reiserfs_warning (stderr, "Trans replayed: mountid %lu, transid %lu, "
+			  "desc %lu, len %lu, commit %lu, next trans offset "
+			  "%lu\n", cur.mount_id, cur.trans_id, 
+			  cur.desc_blocknr, cur.trans_len, 
+			  cur.commit_blocknr, cur.next_trans_offset);
+	replay_one_transaction (fs, &cur);
+	update_journal_header (fs, bh, &cur);
+	control = cur;
+        replayed ++;
+
+	ret = next_transaction (fs, &cur, newest);
+    }
+
+    reiserfs_warning (stderr, "Reiserfs journal '%s' in blocks [%u..%u]: %d "
+		      "transactions replayed\n", fs->fs_j_file_name, 
+		      reiserfs_jp_get_start(reiserfs_sb_jp(fs->fs_ondisk_sb)),
+		      reiserfs_jp_get_start(reiserfs_sb_jp(fs->fs_ondisk_sb)) + 
+		      reiserfs_jp_get_size(reiserfs_sb_jp(fs->fs_ondisk_sb)) + 1,
+		      replayed);
+	
+    reiserfs_buffer_mkdirty (fs->fs_super_bh);
+    reiserfs_buffer_write (fs->fs_super_bh);
+	
+    update_journal_header (fs, bh, &newest);
+
+    return 0;
+}
+
+int reiserfs_journal_desc_valid (reiserfs_bh_t *bh) {
+    struct reiserfs_journal_desc *desc;
+    
+    desc = (struct reiserfs_journal_desc *)bh->b_data;
+    
+    if (!memcmp(bh->b_data + bh->b_size - 12, JOURNAL_DESC_MAGIC, 8) &&
+	le32_to_cpu (desc->j2_len) > 0)
+    {
+	return 1;
+    }
+
+    return 0;
+}
+
+int reiserfs_journal_block (reiserfs_filsys_t * fs, unsigned long block) {
+    unsigned long start;
+
+    start = reiserfs_journal_start_must(fs);
+    
+    if (!reiserfs_super_jr_magic (fs->fs_ondisk_sb)) {
+	/* standard journal */
+	if (block >= start && 
+	    block <= start + reiserfs_jp_get_size (reiserfs_sb_jp (fs->fs_ondisk_sb)))
+	{
+	    return 1;
+	}
+	
+	return 0;
+    }
+    
+    if (reiserfs_sb_get_reserved (fs->fs_ondisk_sb)) {
+	/* there is space reserved for the journal on the host device */
+	if (block >= start && 
+	    block < start + reiserfs_sb_get_reserved (fs->fs_ondisk_sb))
+	{
+	    return 1;
+	}
+    }
+
+    return 0;
+}
+
+// in reiserfs version 0 (undistributed bitmap)
+// FIXME: what if number of bitmaps is 15?
+static unsigned int reiserfs_journal_oldstart_must (reiserfs_filsys_t * fs) {
+    unsigned int bmap_nr;
+    
+    bmap_nr = reiserfs_bmap_nr(reiserfs_sb_get_blocks(fs->fs_ondisk_sb),
+			       fs->fs_blocksize);
+    
+    return (REISERFS_OLD_DISK_OFFSET_IN_BYTES / fs->fs_blocksize) + 1 + bmap_nr;
+}
+
+static unsigned int reiserfs_journal_newstart_must (reiserfs_filsys_t * fs) {
+    return (REISERFS_DISK_OFFSET_IN_BYTES / fs->fs_blocksize) + 2;
+}
+
+unsigned int reiserfs_journal_start_must (reiserfs_filsys_t * fs) {
+    if (reiserfs_old_location(fs->fs_super_bh->b_blocknr, fs->fs_blocksize))
+    	return reiserfs_journal_oldstart_must (fs);
+
+    return reiserfs_journal_newstart_must(fs);
+}
+
+
+
+void reiserfs_journal_print_params (FILE * fp, reiserfs_journal_param_t * jp)
+{
+    reiserfs_warning (fp, "\tDevice [0x%x]\n", reiserfs_jp_get_dev (jp));
+    reiserfs_warning (fp, "\tMagic [0x%x]\n", reiserfs_jp_get_magic (jp));
+
+    reiserfs_warning (fp, "\tSize %u blocks (including 1 for journal header) (first block %u)\n",
+		      reiserfs_jp_get_size (jp) + 1,
+		      reiserfs_jp_get_start (jp));
+    reiserfs_warning (fp, "\tMax transaction length %u blocks\n", reiserfs_jp_get_tlen (jp));
+    reiserfs_warning (fp, "\tMax batch size %u blocks\n", reiserfs_jp_get_max_batch (jp));
+    reiserfs_warning (fp, "\tMax commit age %u\n", reiserfs_jp_get_commit_age (jp));
+    reiserfs_warning (fp, "\tMax transaction age %u\n", reiserfs_jp_get_trans_age (jp));
+}
+
+
+
+void reiserfs_journal_print_header (reiserfs_filsys_t * fs) {
+    struct reiserfs_journal_header * j_head;
+
+
+    j_head = (struct reiserfs_journal_header *)(fs->fs_jh_bh->b_data);
+    reiserfs_warning (stdout, "Journal header (block #%lu of %s):\n"
+		      "\tj_last_flush_trans_id %ld\n"
+		      "\tj_first_unflushed_offset %ld\n"
+		      "\tj_mount_id %ld\n", 
+		      fs->fs_jh_bh->b_blocknr, fs->fs_j_file_name,
+		      reiserfs_jh_get_flushed (j_head),
+		      reiserfs_jh_get_start (j_head),
+		      reiserfs_jh_get_mount (j_head));
+    reiserfs_journal_print_params (stdout, &j_head->jh_journal);
+}
+
+static void print_trans_element (reiserfs_filsys_t * fs, 
+				 reiserfs_trans_t * trans,
+				 unsigned int index, 
+				 unsigned long in_journal, 
+				 unsigned long in_place)
+{
+    if (index % 8 == 0)
+	reiserfs_warning (stdout, "#%d\t", index);
+
+    reiserfs_warning (stdout, "%lu->%lu%s ",  in_journal, in_place,
+		      reiserfs_bitmap_block (fs, in_place) ? "B" : "");
+    if ((index + 1) % 8 == 0 || index == trans->trans_len - 1)
+	reiserfs_warning (stdout, "\n");
+}
+
+
+static void print_one_transaction (reiserfs_filsys_t * fs, 
+				   reiserfs_trans_t * trans)
+{
+    reiserfs_warning (stdout, "Mountid %u, transid %u, desc %lu, length %u, "
+		      "commit %lu\n", trans->mount_id, trans->trans_id,
+		      trans->desc_blocknr, trans->trans_len, 
+		      trans->commit_blocknr);
+    
+    reiserfs_journal_foreach (fs, trans, print_trans_element);
+}
+
+
+/* print all valid transactions and found dec blocks */
+void reiserfs_journal_print (reiserfs_filsys_t * fs)
+{
+    if (!reiserfs_journal_opened (fs)) {
+	reiserfs_warning (stderr, "reiserfs_journal_print: journal is not opened\n");
+	return;
+    }
+    reiserfs_journal_print_header (fs);
+
+    reiserfs_journal_by_transaction (fs, print_one_transaction);
+}
+
+int reiserfs_print_jdesc (FILE * fp, reiserfs_bh_t * bh) {
+    if (memcmp(reiserfs_jd_magic (bh), JOURNAL_DESC_MAGIC, 8))
+	return 1;
+
+    reiserfs_warning (fp, "Desc block %lu (j_trans_id %ld, j_mount_id %ld, j_len %ld)\n",
+		      bh->b_blocknr, reiserfs_jd_get_trans (bh),
+		      reiserfs_jd_get_mount (bh), reiserfs_jd_get_len (bh));
+
+    return 0;
+}
+
+/* reiserfs needs at least: enough blocks for journal, 64 k at the beginning,
+   one block for super block, bitmap block and root block. Note that first
+   bitmap block must point to all of them */
+int reiserfs_journal_fits(unsigned long journal_offset, 
+			  unsigned int block_size,
+			  unsigned long block_count, 
+			  unsigned long journal_size) 
+{
+	unsigned long blocks;
+
+    /* RESERVED, MD RAID SBs, super block, bitmap, root, journal size with journal header */
+    blocks = journal_offset + journal_size;
+
+    /* we have a limit: skipped area, super block, journal and root block
+    all have to be addressed by one first bitmap */
+    if (blocks > block_size * 8)
+    	return 0;
+    	
+    if (blocks > block_count)
+    	return 0;
+    	
+    return 1;
+}
diff --git a/libreiserfs/key.c b/libreiserfs/key.c
new file mode 100644
index 0000000..0e394d5
--- /dev/null
+++ b/libreiserfs/key.c
@@ -0,0 +1,273 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+#include "misc/unaligned.h"
+
+const reiserfs_key_t root_dir_key = 
+	{cpu_to_le32(REISERFS_ROOT_PARENT_OBJECTID),
+	 cpu_to_le32(REISERFS_ROOT_OBJECTID), 
+	 {{0, 0},}};
+
+const reiserfs_key_t parent_root_dir_key = {
+	0, cpu_to_le32(REISERFS_ROOT_PARENT_OBJECTID), 
+	{{0, 0},}};
+
+reiserfs_key_t lost_found_dir_key = 
+	{0, 0, {{0, 0}, }};
+
+/* Minimal possible key. It is never in the tree. */
+const reiserfs_key_t MIN_KEY = {0, 0, {{0, 0},}};
+
+/* Maximal possible key. It is never in the tree. */
+const reiserfs_key_t MAX_KEY = 
+	{0xffffffff, 0xffffffff, 
+	 {{0xffffffff, 0xffffffff},}};
+
+void reiserfs_key_copy (reiserfs_key_t * to, const reiserfs_key_t * from) {
+    memcpy (to, from, REISERFS_KEY_SIZE);
+}
+
+void reiserfs_key_copy2 (reiserfs_key_t * to, const reiserfs_key_t * from) {
+    memcpy (to, from, REISERFS_KEY_SHSIZE);
+}
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+# define get_key_offset_v2(key)     (__u64)((key->u.k2_offset_v2.k_offset))
+# define set_key_offset_v2(key,val) (void)(key->u.k2_offset_v2.k_offset = (val))
+# define get_key_type_v2(key)       (__u16)((key->u.k2_offset_v2.k_type))
+# define set_key_type_v2(key,val)   (void)(key->u.k2_offset_v2.k_type = (val))
+#elif __BYTE_ORDER == __BIG_ENDIAN
+typedef union {
+    struct offset_v2 offset_v2;
+    __u64 linear;
+} __attribute__ ((__packed__)) offset_v2_esafe_overlay;
+
+static inline __u64 get_key_offset_v2 (const reiserfs_key_t *key)
+{
+    offset_v2_esafe_overlay tmp =
+                        *(offset_v2_esafe_overlay *) (&(key->u.k2_offset_v2));
+    tmp.linear = le64_to_cpu( tmp.linear );
+    return tmp.offset_v2.k_offset;
+}
+
+static inline __u32 get_key_type_v2 (const reiserfs_key_t *key)
+{
+    offset_v2_esafe_overlay tmp =
+                        *(offset_v2_esafe_overlay *) (&(key->u.k2_offset_v2));
+    tmp.linear = le64_to_cpu( tmp.linear );
+    return tmp.offset_v2.k_type;
+}
+
+static inline void set_key_offset_v2 (reiserfs_key_t *key, __u64 offset)
+{
+    offset_v2_esafe_overlay *tmp =
+                        (offset_v2_esafe_overlay *)(&(key->u.k2_offset_v2));
+    tmp->linear = le64_to_cpu(tmp->linear);
+    tmp->offset_v2.k_offset = offset;
+    tmp->linear = cpu_to_le64(tmp->linear);
+}
+
+static inline void set_key_type_v2 (reiserfs_key_t *key, __u32 type)
+{
+    offset_v2_esafe_overlay *tmp =
+                        (offset_v2_esafe_overlay *)(&(key->u.k2_offset_v2));
+    if (type > 15)
+        reiserfs_panic ("set_key_type_v2: type is too big %d", type);
+
+    tmp->linear = le64_to_cpu(tmp->linear);
+    tmp->offset_v2.k_type = type;
+    tmp->linear = cpu_to_le64(tmp->linear);
+}
+#else
+# error "nuxi/pdp-endian archs are not supported"
+#endif
+
+static inline int is_key_format_1 (int type) {
+    return ( (type == 0 || type == 15) ? 1 : 0);
+}
+
+/* old keys (on i386) have k_offset_v2.k_type == 15 (direct and
+   extent) or == 0 (dir items and stat data) */
+
+/* */
+int reiserfs_key_format (const reiserfs_key_t * key)
+{
+    int type;
+
+    type = get_key_type_v2 (key);
+
+    if (is_key_format_1 (type))
+	return KEY_FORMAT_1;
+
+    return KEY_FORMAT_2;
+}
+
+
+unsigned long long reiserfs_key_get_off (const reiserfs_key_t * key) {
+    if (reiserfs_key_format (key) == KEY_FORMAT_1)
+	return reiserfs_key_get_off1 (key);
+
+    return get_key_offset_v2 (key);
+}
+
+
+static int uniqueness2type (__u32 uniqueness) {
+    switch (uniqueness) {
+    case UNI_SD: return TYPE_STAT_DATA;
+    case UNI_EXT: return TYPE_EXTENT;
+    case UNI_DIRECT: return TYPE_DIRECT;
+    case UNI_DE: return TYPE_DIRENTRY;
+    }
+    return TYPE_UNKNOWN;
+}
+
+
+static __u32 type2uniqueness (int type) {
+    switch (type) {
+    case TYPE_STAT_DATA: return UNI_SD;
+    case TYPE_EXTENT: return UNI_EXT;
+    case TYPE_DIRECT: return UNI_DIRECT;
+    case TYPE_DIRENTRY: return UNI_DE;
+    } 
+    return UNI_UNKN;
+}
+
+
+int reiserfs_key_get_type (const reiserfs_key_t * key)
+{
+    int type_v2 = get_key_type_v2 (key);
+
+    if (is_key_format_1 (type_v2))
+	return uniqueness2type (reiserfs_key_get_uni (key));
+
+    return type_v2;
+}
+
+char *key_type_name[TYPE_UNKNOWN + 1] = {
+	[TYPE_STAT_DATA] = "SD",
+	[TYPE_EXTENT] = "EXT",
+	[TYPE_DIRECT] = "DRCT",
+	[TYPE_DIRENTRY] = "DIR",
+	[TYPE_UNKNOWN] = "???"
+};
+
+char * reiserfs_key_name (const reiserfs_key_t * key)
+{
+    __u32 type = reiserfs_key_get_type (key);
+    return key_type_name[type <= TYPE_DIRENTRY ? type : TYPE_UNKNOWN];
+}
+
+/* this sets key format as well as type of item key belongs to */
+void reiserfs_key_set_type (int format, reiserfs_key_t * key, int type)
+{
+    if (format == KEY_FORMAT_1)
+	reiserfs_key_set_uni (key, type2uniqueness (type));
+    else
+	set_key_type_v2 (key, type);
+}
+
+
+void reiserfs_key_set_off (int format, reiserfs_key_t * key, 
+			   unsigned long long offset)
+{
+    if (format == KEY_FORMAT_1)
+	reiserfs_key_set_off1 (key, offset);
+    else
+	set_key_offset_v2 (key, offset);
+	
+}
+
+/* Set secondary fields. */
+void reiserfs_key_set_sec (int format, reiserfs_key_t * key, 
+			   unsigned long long offset, int type)
+{
+    reiserfs_key_set_type (format, key, type);
+    reiserfs_key_set_off (format, key, offset);
+}
+
+/*
+ Compare keys using REISERFS_KEY_SHORT_LEN fields.
+ Returns:  -1 if key1 < key2
+            0 if key1 = key2
+            1 if key1 > key2
+*/
+
+int reiserfs_key_comp2 (const void * k1, const void * k2)
+{
+    int n_key_length = REISERFS_KEY_SHORT_LEN;
+    __u32 * p_s_key1 = (__u32 *)k1;
+    __u32 * p_s_key2 = (__u32 *)k2;
+    __u32 u1, u2;
+
+    for( ; n_key_length--; ++p_s_key1, ++p_s_key2 ) {
+	u1 = d32_get(p_s_key1, 0) ;
+	u2 = d32_get(p_s_key2, 0) ;
+	if ( u1 < u2 )
+	    return -1;
+	if ( u1 > u2 )
+	    return 1;
+    }
+
+    return 0;
+}
+
+
+int reiserfs_key_comp3 (const void * p1, const void * p2)
+{
+    int retval;
+    const reiserfs_key_t * k1 = p1;
+    const reiserfs_key_t * k2 = p2;
+    unsigned long long off1, off2;
+
+    retval = reiserfs_key_comp2 (k1, k2);
+    if (retval)
+	return retval;
+    off1 = reiserfs_key_get_off(k1) ;
+    off2 = reiserfs_key_get_off(k2) ;
+    if (off1 < off2)
+	return -1;
+
+    if (off1 > off2)
+	return 1;
+
+    return 0;
+}
+
+
+/*
+ Compare keys using all 4 key fields.
+ Returns:  -1 if key1 < key2
+            0 if key1 = key2
+            1 if key1 > key2
+*/
+int reiserfs_key_comp (const void * p1, const void * p2)
+{
+    int retval;
+    const reiserfs_key_t * k1 = p1;
+    const reiserfs_key_t * k2 = p2;
+    __u32 u1, u2;
+
+    retval = reiserfs_key_comp3 (k1, k2);
+    if (retval)
+	return retval;
+
+    u1 = reiserfs_key_get_type (k1);
+    u2 = reiserfs_key_get_type (k2);
+
+    if (u1 < u2)
+        return -1;
+
+    if (u1 > u2)
+        return 1;
+
+    return 0;
+}
+
+
diff --git a/libreiserfs/leaf.c b/libreiserfs/leaf.c
new file mode 100644
index 0000000..bbfb30f
--- /dev/null
+++ b/libreiserfs/leaf.c
@@ -0,0 +1,373 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+#include "misc/bitops.h"
+
+void reiserfs_leaf_mkempty (reiserfs_bh_t * bh)
+{
+    reiserfs_nh_set_items (NODE_HEAD (bh), 0);
+    reiserfs_nh_set_free (NODE_HEAD (bh), REISERFS_NODE_SPACE (bh->b_size));
+    reiserfs_nh_set_level (NODE_HEAD (bh), LEAF_LEVEL);
+}
+
+__u32 reiserfs_leaf_ibytes (const reiserfs_ih_t * ih, int blocksize) {
+    switch (reiserfs_key_get_type (&ih->ih_key)) {
+    case TYPE_DIRECT:
+	return reiserfs_ih_get_len (ih);
+    case TYPE_EXTENT:
+	return reiserfs_ext_count(ih) * blocksize;// - reiserfs_ih_get_free (ih);
+    case TYPE_STAT_DATA:
+    case TYPE_DIRENTRY:
+	return 0;
+    }
+    
+    reiserfs_warning (stderr, "reiserfs_leaf_ibytes: called for wrong "
+		      "type of item %h", ih);
+    return 0;
+}
+
+int reiserfs_leaf_mergeable (reiserfs_ih_t * left, 
+			     reiserfs_ih_t * right, 
+			     int bsize)
+{
+    if (reiserfs_key_comp (&left->ih_key, &right->ih_key) != -1) {
+	reiserfs_panic ("vs-16070: reiserfs_leaf_mergeable: left %k, "
+			"right %k", &(left->ih_key), &(right->ih_key));
+    }
+
+    if (reiserfs_key_comp2 (&left->ih_key, &right->ih_key))
+	return 0;
+    
+    if (reiserfs_key_get_type (&left->ih_key) != 
+	reiserfs_key_get_type (&right->ih_key))
+    {
+	    return 0;
+    }
+
+    /* Directories are always mergeable. If fsck will need to handle dir items 
+       separaely too, move it lower. */
+    if (reiserfs_ih_dir (left))
+	return 1;
+
+    /* Merge only items with the same flags. */
+    if (reiserfs_ih_get_flags(left) != reiserfs_ih_get_flags(right))
+	return 0;
+    
+    if ((reiserfs_ih_direct (left) || reiserfs_ih_ext (left))) {
+	return (reiserfs_key_get_off (&left->ih_key) + 
+		reiserfs_leaf_ibytes (left, bsize) == 
+		reiserfs_key_get_off (&right->ih_key)) ? 1 : 0;
+    }
+    
+    return 0;
+}
+int reiserfs_leaf_count_items(reiserfs_bh_t *bh) {
+    reiserfs_ih_t * ih;
+    int prev_location;
+    int nr;
+
+    /* look at the table of item head */
+    prev_location = bh->b_size;
+    ih = reiserfs_ih_at(bh, 0);
+    nr = 0;
+    while (1) {
+	if (reiserfs_ih_get_loc (ih) + reiserfs_ih_get_len (ih) != prev_location)
+	    break;
+	
+	if (reiserfs_ih_get_loc (ih) < 
+	    REISERFS_IH_SIZE * (nr + 1) + REISERFS_NODEH_SIZE)
+	{
+	    break;
+	}
+	
+	if (reiserfs_ih_get_len (ih) > REISERFS_ITEM_MAX (bh->b_size))
+	    break;
+	
+	prev_location = reiserfs_ih_get_loc (ih);
+	ih ++;
+	nr ++;
+    }
+    
+    return nr;
+}
+
+int reiserfs_leaf_free_count(reiserfs_bh_t *bh) {
+    reiserfs_ih_t * ih;
+    int nr;
+    
+    nr = reiserfs_nh_get_items(NODE_HEAD(bh));
+    ih = reiserfs_ih_at(bh, nr - 1);
+    
+    return (nr ? reiserfs_ih_get_loc (ih) : bh->b_size) - 
+	    REISERFS_NODEH_SIZE - REISERFS_IH_SIZE * nr;
+}
+
+static int leaf_blkh_correct(reiserfs_bh_t * bh) {
+    unsigned int nr;
+
+    nr = reiserfs_nh_get_items(NODE_HEAD(bh));
+    if (nr > ((bh->b_size - REISERFS_NODEH_SIZE) / 
+	      (REISERFS_IH_SIZE + REISERFS_ITEM_MIN)))
+    {
+	/* item number is too big or too small */
+	return 0;
+    }
+
+    return reiserfs_leaf_free_count(bh) == 
+	    reiserfs_nh_get_free (NODE_HEAD(bh));
+}
+
+int reiserfs_leaf_estimate_items(reiserfs_bh_t * bh) {
+    int nr = reiserfs_leaf_count_items(bh);
+
+    return nr >= reiserfs_nh_get_items (NODE_HEAD(bh)) ? 
+	    reiserfs_nh_get_items (NODE_HEAD(bh)) : nr;
+}
+
+/* for every item call common action and an action corresponding to
+   item type */
+void reiserfs_leaf_traverse(reiserfs_bh_t * bh, 
+			    ih_func_t action,
+			    item_func_t * actions)
+{
+    int i;
+    reiserfs_ih_t * ih;
+    item_func_t iaction;
+
+    ih = reiserfs_ih_at (bh, 0);
+    for (i = 0; i < reiserfs_nh_get_items (NODE_HEAD (bh)); i ++, ih ++) {
+	if (action)
+	    action (ih);
+
+	iaction = actions[reiserfs_key_get_type (&ih->ih_key)];
+	if (iaction)
+	    iaction (bh, ih);
+    }
+}
+
+/* Returns 0 if not leaf, NT_LEAF if looks correct, NT_IH_ARRAY if 
+   looks like corrupted leaf. */
+int reiserfs_leaf_valid(reiserfs_bh_t *bh) {
+    int counted;
+    int num;
+    
+    if (!reiserfs_leaf_head (bh))
+	return 0;
+
+    counted = reiserfs_leaf_count_items(bh);
+    
+    /* if leaf block header is ok, check item count also. */
+    if (leaf_blkh_correct(bh)) {
+	num = reiserfs_nh_get_items (NODE_HEAD(bh));
+	return counted >= num ? NT_LEAF : NT_IH_ARRAY;
+    }
+    
+    /* leaf block header is corrupted, it is ih_array if 
+       some items were detected.*/
+    return counted ? NT_IH_ARRAY : 0;
+}
+
+/* wrappers for operations on one separated leaf */
+void reiserfs_leaf_delete_item (reiserfs_filsys_t * fs,
+				reiserfs_bh_t * bh, 
+				int item_num)
+{
+    reiserfs_bufinfo_t bi;
+
+    bi.bi_bh = bh;
+    bi.bi_parent = 0;
+    bi.bi_position = 0;
+    reiserfs_lb_delete_item (fs, &bi, item_num, 1);
+}
+
+void reiserfs_leaf_delete_entry (reiserfs_filsys_t * fs, 
+				 reiserfs_bh_t * bh,
+				 int item_num, 
+				 int entry_num, 
+				 int del_count)
+{
+    reiserfs_bufinfo_t bi;
+
+    bi.bi_bh = bh;
+    bi.bi_parent = 0;
+    bi.bi_position = 0;
+    reiserfs_lb_delete_unit (fs, &bi, item_num, entry_num, del_count);
+}
+
+/* ih_key, ih_location and ih_item_len seem correct, check other fields */
+static int reiserfs_leaf_ih_correct (reiserfs_ih_t * ih) {
+    int ih_format;
+    int format;
+
+    /* key format from item_head */
+    ih_format = reiserfs_ih_get_format (ih);
+    if (ih_format != KEY_FORMAT_1 && ih_format != KEY_FORMAT_2)
+	return 0;
+
+    /* key format calculated on key */
+    format = reiserfs_key_format (&ih->ih_key);
+    if (reiserfs_ih_stat (ih)) {
+	/* for stat data we can not find key format from a key itself, so look at
+           the item length */
+	if (reiserfs_ih_get_len (ih) == REISERFS_SD_SIZE)
+	    format = KEY_FORMAT_2;
+	else if (reiserfs_ih_get_len (ih) == REISERFS_SD_SIZE_V1)
+	    format = KEY_FORMAT_1;
+	else
+	    return 0;
+    }
+    if (format != ih_format)
+	return 0;
+
+    /* we do not check ih_format.fsck_need as fsck might change it. So,
+       debugreiserfs -p will have to dump it */
+    return 1;
+}
+
+/* used by debugreisrefs -p only yet */
+int reiserfs_leaf_correct_at (reiserfs_filsys_t * fs, 
+				reiserfs_ih_t * ih, char * item,
+				unfm_func_t func, int bad_dir)
+{
+/*
+    if (!does_key_look_correct (fs, &ih->ih_key))
+	return 1;
+
+    if (!reiserfs_leaf_ih_correct (ih))
+	return 1;
+*/
+    if (!reiserfs_leaf_ih_correct (ih))
+	return 1;
+
+    
+    if (reiserfs_ih_stat (ih) || reiserfs_ih_direct (ih))
+	return 0;
+
+    if (reiserfs_ih_dir (ih)) {
+	return reiserfs_direntry_check (fs, ih, item, bad_dir);
+    }
+    
+    if (reiserfs_ih_ext (ih)) {
+	return reiserfs_ext_check (fs, ih, item, func);
+    }
+
+    return 1;
+}
+
+
+static int is_symlink = 0;
+int reiserfs_leaf_print(FILE * fp, 
+			reiserfs_filsys_t * fs, 
+			reiserfs_bh_t * bh,
+			int print_mode, 
+			int first, 
+			int last)
+{
+    reiserfs_ih_t * ih;
+    int i;
+    int from, to;
+    int real_nr, nr;
+
+    if (!reiserfs_node_formatted (bh, LEAF_LEVEL))
+	return 1;
+    
+    ih = reiserfs_ih_at (bh,0);
+    real_nr = reiserfs_leaf_count_items(bh);
+    nr = reiserfs_nh_get_items(NODE_HEAD(bh));
+
+    reiserfs_warning (fp, "\n==========================================="
+		      "========================\n");
+    
+    reiserfs_warning (fp, "LEAF NODE (%ld) contains %b (real items %d)\n",
+		      bh->b_blocknr, bh, real_nr);
+
+    if (!(misc_test_bit(LP_LEAF_DETAILS, &print_mode))) {
+	reiserfs_warning (fp, "FIRST ITEM_KEY: %k, LAST ITEM KEY: %k\n",
+			   &(ih->ih_key), &((ih + real_nr - 1)->ih_key));
+	return 0;
+    }
+
+    if (first < 0 || first > real_nr - 1) 
+	from = 0;
+    else 
+	from = first;
+
+    if (last < 0 || last > real_nr)
+	to = real_nr;
+    else
+	to = last;
+
+
+    reiserfs_warning (fp, "---------------------------------------------"
+		      "----------------------------------\n"
+		      "|###|type|ilen|f/sp| loc|fmt|fsck|               "
+		      "    key                      |\n"
+		       "|   |    |    |e/cn|    |   |need|              "
+		       "                              |\n");
+    
+    for (i = from; i < to; i++) {
+	reiserfs_warning (fp, "-----------------------------------------"
+			  "--------------------------------------\n"
+			  "|%3d|%30H|%s\n", i, ih + i, i >= nr ? 
+			  " DELETED" : "");
+
+	if (reiserfs_ih_stat(ih+i)) {
+	    is_symlink = reiserfs_print_stat_data (fp, bh, ih + i, 0/*all times*/);
+	    continue;
+	}
+
+	if (reiserfs_ih_dir(ih+i)) {
+	    reiserfs_direntry_print (fp, fs, bh, ih+i);
+	    continue;
+	}
+
+	if (reiserfs_ih_ext(ih+i)) {
+	    reiserfs_ext_print (fp, bh, i);
+	    continue;
+	}
+
+	if (reiserfs_ih_direct(ih+i)) {
+	    int j = 0;
+	    if (is_symlink || misc_test_bit(LP_DIRECT_ITEMS, &print_mode)) {
+		reiserfs_warning (fp, "\"");
+		while (j < reiserfs_ih_get_len (&ih[i])) {
+		    if (reiserfs_item_by_ih(bh,ih+i)[j] == 10)
+			reiserfs_warning (fp, "\\n");
+		    else
+			reiserfs_warning (fp, "%c", reiserfs_item_by_ih(bh,ih+i)[j]);
+		    j ++;
+		}
+		reiserfs_warning (fp, "\"\n");
+	    }
+	    continue;
+	}
+    }
+    reiserfs_warning (fp, "============================================="
+		      "======================\n");
+    
+    return 0;
+}
+
+__u16 reiserfs_ih_get_format(const reiserfs_ih_t *ih) {
+	return misc_get_bitfield_XX (16, &ih->ih_format, 0, 12);
+}
+
+void reiserfs_ih_set_format(reiserfs_ih_t *ih, __u16 val) {
+	misc_set_bitfield_XX (16, &ih->ih_format, val, 0, 12);
+}
+
+__u16 reiserfs_ih_get_flags(const reiserfs_ih_t *ih) {
+	return misc_get_bitfield_XX (16, &ih->ih_format, 12, 4);
+}
+
+void reiserfs_ih_set_flags(reiserfs_ih_t *ih, __u16 val) {
+	misc_set_bitfield_XX (16, &ih->ih_format, val, 12, 4);
+}
+
diff --git a/libreiserfs/leaf_balance.c b/libreiserfs/leaf_balance.c
new file mode 100644
index 0000000..9bc802e
--- /dev/null
+++ b/libreiserfs/leaf_balance.c
@@ -0,0 +1,2422 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+/* Now we have all buffers that must be used in balancing of the tree 	*/
+/* Further calculations can not cause schedule(), and thus the buffer 	*/
+/* tree will be stable until the balancing will be finished 		*/
+/* balance the tree according to the analysis made before,		*/
+/* and using buffers obtained after all above.				*/
+
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+
+/* modes of reiserfs_lb_move */
+#define LEAF_FROM_S_TO_L 0
+#define LEAF_FROM_S_TO_R 1
+#define LEAF_FROM_R_TO_L 2
+#define LEAF_FROM_L_TO_R 3
+#define LEAF_FROM_S_TO_SNEW 4
+
+
+/* summary:
+ if deleting something ( tb->insert_size[0] < 0 )
+   return(reiserfs_lb_balance_delete()); (flag d handled here)
+ else
+   if lnum is larger than 0 we put items into the left node
+   if rnum is larger than 0 we put items into the right node
+   if snum1 is larger than 0 we put items into the new node s1
+   if snum2 is larger than 0 we put items into the new node s2 
+Note that all *num* count new items being created.
+
+It would be easier to read reiserfs_lb_balance() if each of these summary
+lines was a separate procedure rather than being inlined.  I think
+that there are many passages here and in reiserfs_lb_balance_delete() in
+which two calls to one procedure can replace two passages, and it
+might save cache space and improve software maintenance costs to do so.  
+
+Vladimir made the perceptive comment that we should offload most of
+the decision making in this function into reiserfs_fix_nodes/check_balance, 
+and then create some sort of structure in tb that says what actions should
+be performed by reiserfs_tb_balance.
+
+-Hans */
+
+static void print_tb (int mode, int item_pos, int pos_in_item, 
+		      reiserfs_tb_t * tb, char * mes);
+
+/* insert item into the leaf node in position before */
+static void reiserfs_lb_insert (reiserfs_filsys_t * s,
+				reiserfs_bufinfo_t * bi,
+				int before,
+				reiserfs_ih_t * inserted_item_ih,
+				const char * inserted_item_body,
+				int zeros_number)
+{
+    reiserfs_bh_t * bh = bi->bi_bh;
+    int nr;
+    reiserfs_node_head_t * blkh;
+    reiserfs_ih_t * ih;
+    int i;
+    int last_loc, unmoved_loc;
+    char * to;
+
+    blkh = NODE_HEAD (bh);
+    nr = reiserfs_nh_get_items (blkh);
+
+    /* get item new item must be inserted before */
+    ih = reiserfs_ih_at (bh, before);
+
+    /* prepare space for the body of new item */
+    last_loc = nr ? reiserfs_ih_get_loc (&ih[nr - before - 1]) : bh->b_size;
+    unmoved_loc = before ? reiserfs_ih_get_loc (ih-1) : bh->b_size;
+
+    memmove (bh->b_data + last_loc - reiserfs_ih_get_len (inserted_item_ih), 
+	     bh->b_data + last_loc, unmoved_loc - last_loc);
+
+    to = bh->b_data + unmoved_loc - reiserfs_ih_get_len (inserted_item_ih);
+    memset (to, 0, zeros_number);
+    to += zeros_number;
+
+    /* copy body to prepared space */
+    if (inserted_item_body)
+	/* if (mem_mode == REISERFS_USER_MEM)
+	    copy_from_user (to, inserted_item_body, 
+			    inserted_item_ih->ih_item_len - zeros_number);
+	else { */
+	memmove (to, inserted_item_body, 
+		 reiserfs_ih_get_len (inserted_item_ih) - zeros_number);
+    //}
+    else
+	memset(to, '\0', reiserfs_ih_get_len (inserted_item_ih) - zeros_number);
+  
+    /* insert item header */
+    memmove (ih + 1, ih, REISERFS_IH_SIZE * (nr - before));
+    memmove (ih, inserted_item_ih, REISERFS_IH_SIZE);
+  
+    /* change locations */
+    for (i = before; i < nr + 1; i ++) {
+	unmoved_loc -= reiserfs_ih_get_len (&ih[i-before]);
+	reiserfs_ih_set_loc (&ih[i-before], unmoved_loc);
+    }
+  
+    /* sizes, free space, item number */
+    reiserfs_nh_set_items (blkh, reiserfs_nh_get_items (blkh) + 1);
+    reiserfs_nh_set_free (blkh, reiserfs_nh_get_free (blkh) -
+			 (REISERFS_IH_SIZE + reiserfs_ih_get_len (inserted_item_ih)));
+
+    reiserfs_buffer_mkdirty(bh) ;
+
+    if (bi->bi_parent) { 
+	reiserfs_dc_t * dc;
+
+	dc = reiserfs_int_at (bi->bi_parent, bi->bi_position);
+	reiserfs_dc_set_size (dc, reiserfs_dc_get_size (dc) + REISERFS_IH_SIZE + 
+			   reiserfs_ih_get_len (inserted_item_ih));
+	reiserfs_buffer_mkdirty(bi->bi_parent) ;
+    }
+
+    if (reiserfs_leaf_valid(bh) != NT_LEAF)
+	reiserfs_panic ("reiserfs_lb_insert: bad leaf %lu: %b", 
+			bh->b_blocknr, bh);
+}
+
+
+/* paste paste_size bytes to affected_item_num-th item. 
+   When item is a directory, this only prepare space for new entries */
+static void reiserfs_lb_insert_unit (reiserfs_filsys_t * fs,
+				     reiserfs_bufinfo_t * bi,
+				     int affected_item_num,
+				     int pos_in_item,
+				     int paste_size,
+				     const char * body,
+				     int zeros_number)
+{
+    reiserfs_bh_t * bh = bi->bi_bh;
+    int nr;
+    reiserfs_node_head_t * blkh;
+    reiserfs_ih_t * ih;
+    int i;
+    int last_loc, unmoved_loc;
+
+
+    blkh = NODE_HEAD (bh);
+    nr = reiserfs_nh_get_items (blkh);
+
+    /* item to be appended */
+    ih = reiserfs_ih_at(bh, affected_item_num);
+
+    last_loc = reiserfs_ih_get_loc (&ih[nr - affected_item_num - 1]);
+    unmoved_loc = affected_item_num ? reiserfs_ih_get_loc (ih-1) : bh->b_size;  
+
+    /* prepare space */
+    memmove (bh->b_data + last_loc - paste_size, bh->b_data + last_loc,
+	     unmoved_loc - last_loc);
+
+
+    /* change locations */
+    for (i = affected_item_num; i < nr; i ++)
+	reiserfs_ih_set_loc (&ih[i-affected_item_num], 
+			 reiserfs_ih_get_loc (&ih[i-affected_item_num]) - 
+			 paste_size);
+
+    if ( body ) {
+	if (!reiserfs_ih_dir(ih)) {
+	    /*if (mem_mode == REISERFS_USER_MEM) {
+	        memset (bh->b_data + unmoved_loc - paste_size, 0, zeros_number);
+		copy_from_user (bh->b_data + unmoved_loc - paste_size + 
+				zeros_number, body, paste_size - zeros_number);
+	    } else */
+	    {
+		if (!pos_in_item) {
+		    /* shift data to right */
+		    memmove (bh->b_data + reiserfs_ih_get_loc (ih) + paste_size,
+			     bh->b_data + reiserfs_ih_get_loc (ih), 
+			     reiserfs_ih_get_len (ih));
+		    /* paste data in the head of item */
+		    memset (bh->b_data + reiserfs_ih_get_loc (ih), 0, zeros_number);
+		    memcpy (bh->b_data + reiserfs_ih_get_loc (ih) + zeros_number, 
+			    body, paste_size - zeros_number);
+		} else {
+		    memset (bh->b_data + unmoved_loc - paste_size, 
+			    0, zeros_number);
+		    memcpy (bh->b_data + unmoved_loc - paste_size + zeros_number,
+			    body, paste_size - zeros_number);
+		}
+	    }
+	}
+    }
+    else
+	memset(bh->b_data + unmoved_loc - paste_size,'\0',paste_size);
+
+    reiserfs_ih_set_len (ih, reiserfs_ih_get_len (ih) + paste_size);
+
+    /* change free space */
+    reiserfs_nh_set_free (blkh, reiserfs_nh_get_free (blkh) - paste_size);
+
+    reiserfs_buffer_mkdirty(bh) ;
+
+    if (bi->bi_parent) { 
+	reiserfs_dc_t * dc;
+
+	dc = reiserfs_int_at (bi->bi_parent, bi->bi_position);
+	reiserfs_dc_set_size (dc, reiserfs_dc_get_size (dc) + paste_size);
+	reiserfs_buffer_mkdirty(bi->bi_parent);
+    }
+    if (reiserfs_leaf_valid(bh) != NT_LEAF)
+	reiserfs_panic ("reiserfs_lb_insert_unit: bad leaf %lu: %b", 
+			bh->b_blocknr, bh);
+}
+
+/* paste new_entry_count entries (new_dehs, records) into position before 
+   to item_num-th item */
+static void reiserfs_lb_insert_entry (reiserfs_bh_t * bh,
+				      int item_num, int before, 
+				      int new_entry_count,
+				      reiserfs_deh_t * new_dehs,
+				      const char * records, 
+				      int paste_size)
+{
+    reiserfs_ih_t * ih;
+    char * item;
+    reiserfs_deh_t * deh;
+    char * insert_point;
+    int i, old_entry_num;
+
+    if (new_entry_count == 0)
+        return;
+
+    ih = reiserfs_ih_at(bh, item_num);
+
+    /* first byte of dest item */
+    item = reiserfs_item_by_ih (bh, ih);
+
+    /* entry head array */
+    deh = reiserfs_deh (bh, ih);
+
+    /* new records will be pasted at this point */
+    insert_point = item + (before ? reiserfs_deh_get_loc (&deh[before - 1]) : 
+			   (reiserfs_ih_get_len (ih) - paste_size));
+
+    /* adjust locations of records that will be AFTER new records */
+    for (i = reiserfs_ih_get_entries (ih) - 1; i >= before; i --)
+	reiserfs_deh_set_loc (deh + i, reiserfs_deh_get_loc (deh + i) + 
+			  REISERFS_DEH_SIZE * new_entry_count);
+
+    /* adjust locations of records that will be BEFORE new records */
+    for (i = 0; i < before; i ++)
+	reiserfs_deh_set_loc (deh + i, reiserfs_deh_get_loc (deh + i) + paste_size);
+
+    old_entry_num = reiserfs_ih_get_entries (ih);
+    //I_ENTRY_COUNT(ih) += new_entry_count;
+    reiserfs_ih_set_entries (ih, old_entry_num + new_entry_count);
+
+    /* prepare space for pasted records */
+    memmove (insert_point + paste_size, insert_point, 
+	     item + (reiserfs_ih_get_len (ih) - paste_size) - insert_point);
+
+    /* copy new records */
+    memcpy (insert_point + REISERFS_DEH_SIZE * new_entry_count, records,
+	    paste_size - REISERFS_DEH_SIZE * new_entry_count);
+  
+    /* prepare space for new entry heads */
+    deh += before;
+    memmove ((char *)(deh + new_entry_count), deh, insert_point - (char *)deh);
+
+    /* copy new entry heads */
+    memcpy (deh, new_dehs, REISERFS_DEH_SIZE * new_entry_count);
+
+    /* set locations of new records */
+    for (i = 0; i < new_entry_count; i ++)
+	reiserfs_deh_set_loc (deh + i, reiserfs_deh_get_loc (deh + i) + 
+			  (- reiserfs_deh_get_loc (&new_dehs[new_entry_count - 1]) +
+			   insert_point + REISERFS_DEH_SIZE * new_entry_count - item));
+
+
+    /* change item key if neccessary (when we paste before 0-th entry */
+    if (!before)
+	reiserfs_key_set_off1 (&ih->ih_key, reiserfs_deh_get_off (new_dehs));
+}
+
+
+
+/* copy copy_count entries from source directory item to dest buffer 
+   (creating new item if needed) */
+static void reiserfs_lb_copy_entry (reiserfs_filsys_t * fs,
+				    reiserfs_bufinfo_t * dest_bi, 
+				    reiserfs_bh_t * source, 
+				    int last_first, int item_num, 
+				    int from, int copy_count)
+{
+    reiserfs_bh_t * dest = dest_bi->bi_bh;
+    int ditem_num;			/* either the number of target item,
+					   or if we must create a new item,
+					   the number of the item we will
+					   create it next to */
+    reiserfs_ih_t * ih;
+    reiserfs_deh_t * deh;
+    
+    /* length of all records in item to be copied */
+    int copy_records_len;	
+    char * records;
+
+    ih = reiserfs_ih_at (source, item_num);
+
+    /* length of all record to be copied and first byte of the last of them */
+    deh = reiserfs_deh (source, ih);
+    if (copy_count) {
+	copy_records_len = (from ? 
+			    reiserfs_deh_get_loc (&deh[from - 1]) : 
+			    reiserfs_ih_get_len (ih)) - 
+		reiserfs_deh_get_loc (&deh[from + copy_count - 1]);
+	
+	records = source->b_data + reiserfs_ih_get_loc (ih) + 
+		reiserfs_deh_get_loc (&deh[from + copy_count - 1]);
+    } else {
+	copy_records_len = 0;
+	records = 0;
+    }
+
+    /* when copy last to first, dest buffer can contain 0 items */
+    ditem_num = (last_first == LAST_TO_FIRST) ? 
+	    (( reiserfs_node_items(dest) ) ? 0 : -1) : (reiserfs_node_items(dest) - 1);
+
+    /* if there are no items in dest or the first/last item in dest 
+       is not item of the same directory */
+    if ( (ditem_num == - 1) ||
+	 (last_first == FIRST_TO_LAST && 
+	  reiserfs_leaf_mergeable (reiserfs_ih_at (dest, ditem_num), 
+				   ih, dest->b_size) == 0) ||
+	 (last_first == LAST_TO_FIRST && 
+	  reiserfs_leaf_mergeable (ih, reiserfs_ih_at (dest, ditem_num), 
+				   dest->b_size) == 0)) 
+    {
+	/* create new item in dest */
+	reiserfs_ih_t new_ih;
+
+	/* form item header */
+	memcpy (&new_ih.ih_key, &ih->ih_key, REISERFS_KEY_SIZE);
+
+	/* calculate item len */
+	reiserfs_ih_set_len (&new_ih, REISERFS_DEH_SIZE * copy_count + copy_records_len);
+	reiserfs_ih_set_entries (&new_ih, 0);
+    
+	if (last_first == LAST_TO_FIRST) {
+	    /* form key by the following way */
+	    if (from < reiserfs_ih_get_entries (ih)) {
+		reiserfs_key_set_off1 (&new_ih.ih_key, reiserfs_deh_get_off (&deh[from]));
+	    } else {
+		/* no entries will be copied to this item in this function */
+		reiserfs_key_set_off1 (&new_ih.ih_key, MAX_KEY1_OFFSET);
+	    }
+	    reiserfs_key_set_uni (&new_ih.ih_key, UNI_DE);
+	}
+	reiserfs_ih_set_format (&new_ih, reiserfs_ih_get_format (ih));
+	reiserfs_ih_set_flags (&new_ih, reiserfs_ih_get_flags (ih));
+    
+	/* insert item into dest buffer */
+	reiserfs_lb_insert (fs, dest_bi, (last_first == LAST_TO_FIRST)
+			    ? 0 : reiserfs_node_items(dest), &new_ih, NULL, 0);
+    } else {
+	/* prepare space for entries */
+	reiserfs_lb_insert_unit (fs, dest_bi, (last_first == FIRST_TO_LAST) ?
+				 (reiserfs_node_items(dest) - 1) : 0, 0xffff,
+				 REISERFS_DEH_SIZE * copy_count + copy_records_len, 
+				 records, 0);
+    }
+  
+    ditem_num = (last_first == FIRST_TO_LAST) ? 
+	    (reiserfs_node_items(dest)-1) : 0;
+  
+    reiserfs_lb_insert_entry (dest_bi->bi_bh, ditem_num, 
+			      (last_first == FIRST_TO_LAST) ?
+			      reiserfs_ih_get_entries (reiserfs_ih_at (dest, ditem_num))
+			      : 0, copy_count, deh + from, records, 
+			      REISERFS_DEH_SIZE * copy_count + copy_records_len);
+}
+
+
+/* Copy the first (if last_first == FIRST_TO_LAST) or last 
+   (last_first == LAST_TO_FIRST) item or part of it or nothing 
+   (see the return 0 below) from SOURCE to the end (if last_first) 
+   or beginning (!last_first) of the DEST */
+/* returns 1 if anything was copied, else 0 */
+static int reiserfs_lb_copy_boundary (reiserfs_filsys_t * fs,
+				      reiserfs_bufinfo_t * dest_bi, 
+				      reiserfs_bh_t * src, 
+				      int last_first,
+				      int bytes_or_entries)
+{
+    reiserfs_bh_t * dest = dest_bi->bi_bh;
+    
+    /* number of items in the source and destination buffers */
+    int dest_nr_item, src_nr_item; 
+    reiserfs_ih_t * ih;
+    reiserfs_ih_t * dih;
+  
+    dest_nr_item = reiserfs_node_items(dest);
+  
+    if ( last_first == FIRST_TO_LAST ) {
+	/* if ( DEST is empty or first item of SOURCE and last item of DEST 
+	   are the items of different objects or of different types ) then 
+	   there is no need to treat this item differently from the other 
+	   items that we copy, so we return */
+	ih = reiserfs_ih_at (src, 0);
+	dih = reiserfs_ih_at (dest, dest_nr_item - 1);
+	if (!dest_nr_item || 
+	    reiserfs_leaf_mergeable (dih, ih, src->b_size) == 0)
+	{
+	    /* there is nothing to merge */
+	    return 0;
+	}
+      
+	if ( reiserfs_ih_dir(ih) ) {
+	    if ( bytes_or_entries == -1 )
+		/* copy all entries to dest */
+		bytes_or_entries = reiserfs_ih_get_entries(ih);
+	    
+	    reiserfs_lb_copy_entry (fs, dest_bi, src, FIRST_TO_LAST, 
+				    0, 0, bytes_or_entries);
+	    return 1;
+	}
+      
+	/* copy part of the body of the first item of SOURCE to the end of 
+	   the body of the last item of the DEST part defined by 
+	   'bytes_or_entries'; if bytes_or_entries == -1 copy whole body; 
+	   don't create new item header */
+	if ( bytes_or_entries == -1 )
+	    bytes_or_entries = reiserfs_ih_get_len (ih);
+
+	/* merge first item (or its part) of src buffer with the last
+	   item of dest buffer. Both are of the same file */
+	reiserfs_lb_insert_unit (fs, dest_bi, dest_nr_item - 1, 
+				 reiserfs_ih_get_len (dih),
+				 bytes_or_entries, 
+				 reiserfs_item_by_ih(src,ih), 0);
+      
+	if (reiserfs_ih_ext(dih)) {
+	    if (bytes_or_entries == reiserfs_ih_get_len (ih))
+		//dih->u.ih_free_space = ih->u.ih_free_space;
+		reiserfs_ih_set_free (dih, reiserfs_ih_get_free (ih));
+	}
+    
+	return 1;
+    }
+  
+
+    /* copy boundary item to right (last_first == LAST_TO_FIRST) */
+
+    /* ( DEST is empty or last item of SOURCE and first item of DEST
+       are the items of different object or of different types )
+    */
+    src_nr_item = reiserfs_node_items (src);
+    ih = reiserfs_ih_at (src, src_nr_item - 1);
+    dih = reiserfs_ih_at (dest, 0);
+
+    if (!dest_nr_item || reiserfs_leaf_mergeable (ih, dih, src->b_size) == 0)
+	return 0;
+  
+    if ( reiserfs_ih_dir(ih)) {
+	if ( bytes_or_entries == -1 )
+	    /* bytes_or_entries = entries number in last item body of SOURCE */
+	    bytes_or_entries = reiserfs_ih_get_entries(ih);
+    
+	reiserfs_lb_copy_entry (fs, dest_bi, src, LAST_TO_FIRST, 
+				src_nr_item - 1, reiserfs_ih_get_entries(ih) - 
+				bytes_or_entries, bytes_or_entries);
+	return 1;
+    }
+
+    /* copy part of the body of the last item of SOURCE to the begin of the 
+       body of the first item of the DEST; part defined by 'bytes_or_entries';
+       if byte_or_entriess == -1 copy whole body; change first item key of the 
+       DEST; don't create new item header */
+  
+    if ( bytes_or_entries == -1 ) {
+	/* bytes_or_entries = length of last item body of SOURCE */
+	bytes_or_entries = reiserfs_ih_get_len (ih);
+
+	/* change first item key of the DEST */
+	//dih->ih_key.k_offset = ih->ih_key.k_offset;
+	reiserfs_key_set_off (reiserfs_key_format (&dih->ih_key), 
+				 &dih->ih_key, 
+				 reiserfs_key_get_off (&ih->ih_key));
+
+	/* item becomes non-mergeable */
+	/* or mergeable if left item was */
+	//dih->ih_key.k_uniqueness = ih->ih_key.k_uniqueness;
+	reiserfs_key_set_type (reiserfs_key_format (&dih->ih_key), 
+			       &dih->ih_key, 
+			       reiserfs_key_get_type (&ih->ih_key));
+    } else {
+	/* merge to right only part of item */
+	/* change first item key of the DEST */
+	if ( reiserfs_ih_direct(dih) ) {
+	    //dih->ih_key.k_offset -= bytes_or_entries;
+	    reiserfs_key_set_off (reiserfs_key_format (&dih->ih_key), 
+				     &dih->ih_key, 
+				     reiserfs_key_get_off (&dih->ih_key) -
+				     bytes_or_entries);
+	} else {
+	    //dih->ih_key.k_offset -= ((bytes_or_entries/REISERFS_EXT_SIZE)*dest->b_size);
+	    reiserfs_key_set_off (reiserfs_key_format (&dih->ih_key), 
+				     &dih->ih_key, 
+				     reiserfs_key_get_off (&dih->ih_key) - 
+				     ((bytes_or_entries/REISERFS_EXT_SIZE) * 
+				      dest->b_size));
+	}
+    }
+  
+    reiserfs_lb_insert_unit (fs, dest_bi, 0, 0, bytes_or_entries, 
+			     reiserfs_item_by_ih(src,ih) + reiserfs_ih_get_len (ih) 
+			     - bytes_or_entries, 0);
+    return 1;
+}
+
+/* This function splits the (liquid) item into two items (useful when
+   shifting part of an item into another node.) */
+static void reiserfs_lb_split (reiserfs_filsys_t * fs,
+			       reiserfs_bufinfo_t * dest_bi, 
+			       reiserfs_bh_t * src, 
+			       int last_first,
+			       int item_num, 
+			       int cpy_bytes)
+{
+    reiserfs_bh_t * dest = dest_bi->bi_bh;
+    reiserfs_ih_t * ih;
+  
+    if ( last_first == FIRST_TO_LAST ) {
+	/* if ( if item in position item_num in buffer 
+	   SOURCE is directory item ) */
+	if (reiserfs_ih_dir(ih = reiserfs_ih_at(src,item_num)))
+	    reiserfs_lb_copy_entry (fs, dest_bi, src, FIRST_TO_LAST, 
+				    item_num, 0, cpy_bytes);
+	else {
+	    reiserfs_ih_t n_ih;
+      
+	    /* copy part of the body of the item number 'item_num' of SOURCE 
+	       to the end of the DEST part defined by 'cpy_bytes'; create new 
+	       item header; change old item_header (????);
+	       n_ih = new item_header;
+	    */
+	    memcpy (&n_ih, ih, REISERFS_IH_SIZE);
+	    reiserfs_ih_set_len (&n_ih, cpy_bytes);
+	    if (reiserfs_ih_ext(ih)) {
+		//n_ih.u.ih_free_space = 0;
+		reiserfs_ih_set_free (&n_ih, 0);;
+	    }
+
+	    //n_ih.ih_version = ih->ih_version;
+	    reiserfs_ih_set_format (&n_ih, reiserfs_ih_get_format (ih));
+	    reiserfs_ih_set_flags (&n_ih, reiserfs_ih_get_flags (ih));
+	    reiserfs_lb_insert (fs, dest_bi, reiserfs_node_items(dest), &n_ih, 
+				reiserfs_item_at (src, item_num), 0);
+	}
+    } else {
+	/*  if ( if item in position item_num in buffer 
+	    SOURCE is directory item ) */
+	if (reiserfs_ih_dir(ih = reiserfs_ih_at (src, item_num)))
+	    reiserfs_lb_copy_entry (fs, dest_bi, src, LAST_TO_FIRST, 
+				    item_num, reiserfs_ih_get_entries(ih) - 
+				    cpy_bytes, cpy_bytes);
+	else {
+	    reiserfs_ih_t n_ih;
+      
+	    /* copy part of the body of the item number 'item_num' of 
+	       SOURCE to the begin of the DEST part defined by 'cpy_bytes'; 
+	       create new item header;
+	       
+	       n_ih = new item_header;
+	    */
+	    memcpy (&n_ih, ih, REISERFS_KEY_SHSIZE);
+      
+	    if (reiserfs_ih_direct(ih)) {
+		/*n_ih.ih_key.k_offset = ih->ih_key.k_offset + 
+			ih->ih_item_len - cpy_bytes; */
+		reiserfs_key_set_off (reiserfs_key_format (&ih->ih_key), 
+					 &n_ih.ih_key, 
+					 reiserfs_key_get_off (&ih->ih_key)
+					 + reiserfs_ih_get_len (ih) - cpy_bytes);
+		
+		//n_ih.ih_key.k_uniqueness = TYPE_DIRECT;
+		reiserfs_key_set_type (reiserfs_key_format (&ih->ih_key), 
+				       &n_ih.ih_key, TYPE_DIRECT);
+		//n_ih.u.ih_free_space = USHRT_MAX;
+		reiserfs_ih_set_free (&n_ih, USHRT_MAX);
+	    } else {
+		/* extent item */
+		/*n_ih.ih_key.k_offset = ih->ih_key.k_offset + 
+		    (ih->ih_item_len - cpy_bytes) / REISERFS_EXT_SIZE * dest->b_size;*/
+		reiserfs_key_set_off (reiserfs_key_format (&ih->ih_key), 
+					 &n_ih.ih_key,
+					 reiserfs_key_get_off (&ih->ih_key) 
+					 + (reiserfs_ih_get_len (ih) - cpy_bytes) / 
+					 REISERFS_EXT_SIZE * dest->b_size);
+		
+		//n_ih.ih_key.k_uniqueness = TYPE_EXTENT;
+		reiserfs_key_set_type (reiserfs_key_format (&ih->ih_key), 
+				       &n_ih.ih_key, TYPE_EXTENT);
+		//n_ih.u.ih_free_space = ih->u.ih_free_space;
+		reiserfs_ih_set_free (&n_ih, reiserfs_ih_get_free (ih));
+	    }
+      
+	    /* set item length */
+	    reiserfs_ih_set_len (&n_ih, cpy_bytes);
+	    //n_ih.ih_version = ih->ih_version;
+	    reiserfs_ih_set_format (&n_ih, reiserfs_ih_get_format (ih));
+	    reiserfs_ih_set_flags (&n_ih, reiserfs_ih_get_flags (ih));
+	    reiserfs_lb_insert (fs, dest_bi, 0, &n_ih, 
+				reiserfs_item_at(src,item_num) + 
+				reiserfs_ih_get_len (ih) - cpy_bytes, 0);
+	}
+    }
+}
+
+/* copy cpy_mun items from buffer src to buffer dest
+ * last_first == FIRST_TO_LAST means, that we copy cpy_num  
+   items beginning from first-th item in src to tail of dest
+ * last_first == LAST_TO_FIRST means, that we copy cpy_num  items 
+   beginning from first-th item in src to head of dest
+ */
+static void reiserfs_lb_copy_item (reiserfs_filsys_t * fs, 
+				   reiserfs_bufinfo_t * dest_bi, 
+				   reiserfs_bh_t * src, 
+				   int last_first, 
+				   int first, 
+				   int cpy_num)
+{
+    reiserfs_bh_t * dest;
+    int nr;
+    int dest_before;
+    int last_loc, last_inserted_loc, location;
+    int i, j;
+    reiserfs_node_head_t * blkh;
+    reiserfs_ih_t * ih;
+
+    dest = dest_bi->bi_bh;
+
+    if (cpy_num == 0)
+	return;
+
+    blkh = NODE_HEAD(dest);
+    nr = reiserfs_nh_get_items (blkh);
+  
+    /* we will insert items before 0-th or nr-th item in dest buffer. 
+       It depends of last_first parameter */
+    dest_before = (last_first == LAST_TO_FIRST) ? 0 : nr;
+
+    /* location of head of first new item */
+    ih = reiserfs_ih_at (dest, dest_before);
+
+    /* prepare space for headers */
+    memmove (ih + cpy_num, ih, (nr-dest_before) * REISERFS_IH_SIZE);
+
+    /* copy item headers */
+    memcpy (ih, reiserfs_ih_at (src, first), cpy_num * REISERFS_IH_SIZE);
+
+    reiserfs_nh_set_free (blkh, reiserfs_nh_get_free (blkh) - REISERFS_IH_SIZE * cpy_num);
+
+    /* location of unmovable item */
+    j = location = (dest_before == 0) ? dest->b_size : reiserfs_ih_get_loc (ih-1);
+    for (i = dest_before; i < nr + cpy_num; i ++) {
+	location -= reiserfs_ih_get_len (&ih[i-dest_before]);
+	reiserfs_ih_set_loc (&ih[i-dest_before], location);
+    }
+
+    /* prepare space for items */
+    last_loc = reiserfs_ih_get_loc (&ih[nr+cpy_num-1-dest_before]);
+    last_inserted_loc = reiserfs_ih_get_loc (&ih[cpy_num-1]);
+
+    /* check free space */
+    memmove (dest->b_data + last_loc,
+	     dest->b_data + last_loc + j - last_inserted_loc,
+	     last_inserted_loc - last_loc);
+
+    /* copy items */
+    memcpy (dest->b_data + last_inserted_loc, 
+	    reiserfs_item_at(src,(first + cpy_num - 1)),
+	    j - last_inserted_loc);
+
+    /* sizes, item number */
+    reiserfs_nh_set_items (blkh, reiserfs_nh_get_items (blkh) + cpy_num);
+    reiserfs_nh_set_free (blkh, reiserfs_nh_get_free (blkh) - 
+			 (j - last_inserted_loc));
+    reiserfs_buffer_mkdirty (dest);
+
+    if (dest_bi->bi_parent) {
+	reiserfs_dc_t * dc;
+	dc = reiserfs_int_at (dest_bi->bi_parent, dest_bi->bi_position);
+	reiserfs_dc_set_size (dc, reiserfs_dc_get_size (dc) + j - 
+			   last_inserted_loc + REISERFS_IH_SIZE * cpy_num);
+	reiserfs_buffer_mkdirty(dest_bi->bi_parent);
+    }
+}
+
+/* If cpy_bytes equals minus one than copy cpy_num whole items from SOURCE 
+   to DEST. If cpy_bytes not equal to minus one than copy cpy_num-1 whole 
+   items from SOURCE to DEST. From last item copy cpy_num bytes for regular 
+   item and cpy_num directory entries for directory item. */
+int reiserfs_lb_copy (reiserfs_filsys_t * fs,
+		      reiserfs_bufinfo_t * dest_bi, 
+		      reiserfs_bh_t * src,
+		      int last_first, 
+		      int cpy_num,
+		      int cpy_bytes)
+{
+    reiserfs_bh_t * dest;
+    int pos, i, src_nr_item, bytes;
+
+    dest = dest_bi->bi_bh;
+    if ( cpy_num == 0 )
+	return 0;
+ 
+    if ( last_first == FIRST_TO_LAST ) {
+	/* copy items to left */
+	pos = 0;
+	if ( cpy_num == 1 )
+	    bytes = cpy_bytes;
+	else
+	    bytes = -1;
+   
+	/* copy the first item or it part or nothing to the end of 
+	   the DEST (i = reiserfs_lb_copy_boundary(DEST,SOURCE,0,bytes)) */
+	i = reiserfs_lb_copy_boundary (fs, dest_bi, src, 
+				       FIRST_TO_LAST, bytes);
+	cpy_num -= i;
+	if ( cpy_num == 0 )
+	    return i;
+	pos += i;
+	if ( cpy_bytes == -1 )
+	    /* copy first cpy_num items starting from position 'pos' of 
+	       SOURCE to end of DEST */
+	    reiserfs_lb_copy_item(fs, dest_bi, src, FIRST_TO_LAST, 
+				  pos, cpy_num);
+	else {
+	    /* copy first cpy_num-1 items starting from position 'pos-1' 
+	       of the SOURCE to the end of the DEST */
+	    reiserfs_lb_copy_item(fs, dest_bi, src, FIRST_TO_LAST, 
+				  pos, cpy_num-1);
+	     
+	    /* copy part of the item which number is cpy_num+pos-1 
+	       to the end of the DEST */
+	    reiserfs_lb_split (fs, dest_bi, src, FIRST_TO_LAST, 
+			       cpy_num+pos-1, cpy_bytes);
+	} 
+    } else {
+	/* copy items to right */
+	src_nr_item = reiserfs_node_items (src);
+	if ( cpy_num == 1 )
+	    bytes = cpy_bytes;
+	else
+	    bytes = -1;
+   
+	/* copy the last item or it part or nothing to the begin of 
+	   the DEST (i = reiserfs_lb_copy_boundary(DEST,SOURCE,1,bytes)); */
+	i = reiserfs_lb_copy_boundary (fs, dest_bi, src, 
+				       LAST_TO_FIRST, bytes);
+   
+	cpy_num -= i;
+	if ( cpy_num == 0 )
+	    return i;
+   
+	pos = src_nr_item - cpy_num - i;
+	if ( cpy_bytes == -1 ) {
+	    /* starting from position 'pos' copy last cpy_num 
+	       items of SOURCE to begin of DEST */
+	    reiserfs_lb_copy_item(fs, dest_bi, src, 
+				  LAST_TO_FIRST, 
+				  pos, cpy_num);
+	} else {
+	    /* copy last cpy_num-1 items starting from position 'pos+1' 
+	       of the SOURCE to the begin of the DEST; */
+	    reiserfs_lb_copy_item(fs, dest_bi, src, 
+				  LAST_TO_FIRST, 
+				  pos+1, cpy_num-1);
+
+	    /* copy part of the item which number 
+	       is pos to the begin of the DEST */
+	    reiserfs_lb_split (fs, dest_bi, src, 
+			       LAST_TO_FIRST, 
+			       pos, cpy_bytes);
+	}
+    }
+    return i;
+}
+
+
+
+
+/* there are types of coping: from S[0] to L[0], from S[0] to R[0],
+   from R[0] to L[0]. for each of these we have to define parent and
+   positions of destination and source buffers */
+static void reiserfs_lb_move_prep (int shift_mode, 
+				   reiserfs_tb_t * tb, 
+				   reiserfs_bufinfo_t * dest_bi,
+				   reiserfs_bufinfo_t * src_bi, 
+				   int * first_last,
+				   reiserfs_bh_t * Snew)
+{
+    /* define dest, src, dest parent, dest position */
+    switch (shift_mode) {
+    case LEAF_FROM_S_TO_L:    /* it is used in reiserfs_lb_shift_left */
+	src_bi->bi_bh = REISERFS_PATH_LEAF (tb->tb_path);
+	src_bi->bi_parent = REISERFS_PATH_UPPARENT (tb->tb_path, 0);
+	/* src->b_item_order */
+	src_bi->bi_position = REISERFS_PATH_UPPARENT_POS (tb->tb_path, 0);	
+	dest_bi->bi_bh = tb->L[0];
+	dest_bi->bi_parent = tb->FL[0];
+	dest_bi->bi_position = reiserfs_tb_lpos (tb, 0);
+	*first_last = FIRST_TO_LAST;
+	break;
+
+    case LEAF_FROM_S_TO_R:  /* it is used in reiserfs_lb_shift_right */
+	src_bi->bi_bh = REISERFS_PATH_LEAF (tb->tb_path);
+	src_bi->bi_parent = REISERFS_PATH_UPPARENT (tb->tb_path, 0);
+	src_bi->bi_position = REISERFS_PATH_UPPARENT_POS (tb->tb_path, 0);
+	dest_bi->bi_bh = tb->R[0];
+	dest_bi->bi_parent = tb->FR[0];
+	dest_bi->bi_position = reiserfs_tb_rpos (tb, 0);
+	*first_last = LAST_TO_FIRST;
+	break;
+
+    case LEAF_FROM_R_TO_L:  /* it is used in balance_leaf_when_delete */
+	src_bi->bi_bh = tb->R[0];
+	src_bi->bi_parent = tb->FR[0];
+	src_bi->bi_position = reiserfs_tb_rpos (tb, 0);
+	dest_bi->bi_bh = tb->L[0];
+	dest_bi->bi_parent = tb->FL[0];
+	dest_bi->bi_position = reiserfs_tb_lpos (tb, 0);
+	*first_last = FIRST_TO_LAST;
+	break;
+    
+    case LEAF_FROM_L_TO_R:  /* it is used in balance_leaf_when_delete */
+	src_bi->bi_bh = tb->L[0];
+	src_bi->bi_parent = tb->FL[0];
+	src_bi->bi_position = reiserfs_tb_lpos (tb, 0);
+	dest_bi->bi_bh = tb->R[0];
+	dest_bi->bi_parent = tb->FR[0];
+	dest_bi->bi_position = reiserfs_tb_rpos (tb, 0);
+	*first_last = LAST_TO_FIRST;
+	break;
+
+    case LEAF_FROM_S_TO_SNEW:
+	src_bi->bi_bh = REISERFS_PATH_LEAF (tb->tb_path);
+	src_bi->bi_parent = REISERFS_PATH_UPPARENT (tb->tb_path, 0);
+	src_bi->bi_position = REISERFS_PATH_UPPARENT_POS (tb->tb_path, 0);
+	dest_bi->bi_bh = Snew;
+	dest_bi->bi_parent = 0;
+	dest_bi->bi_position = 0;
+	*first_last = LAST_TO_FIRST;
+	break;
+    
+    default:
+	reiserfs_panic (0, "vs-10250: reiserfs_lb_move_prep: "
+			"shift type is unknown (%d)", shift_mode);
+    }
+}
+
+/* cuts DEL_COUNT entries beginning from FROM-th entry. Directory item
+   does not have free space, so it moves DEHs and remaining records as
+   necessary. Return value is size of removed part of directory item
+   in bytes. */
+static int reiserfs_lb_delete_entry (reiserfs_bh_t * bh,
+				     reiserfs_ih_t * ih, 
+				     int from, 
+				     int del_count)
+{
+    char * item;
+    reiserfs_deh_t * deh;
+    int prev_record_offset;	/* offset of record, that is (from-1)th */
+    char * prev_record;		/* */
+    int cut_records_len;		/* length of all removed records */
+    int i;
+    int entry_count;
+
+
+    /* first byte of item */
+    item = reiserfs_item_by_ih (bh, ih);
+
+    /* entry head array */
+    deh = reiserfs_deh (bh, ih);
+    entry_count = reiserfs_ih_get_entries (ih);
+
+    if (del_count == 0) {
+	int shift;
+	int last_location;
+
+	last_location = reiserfs_deh_get_loc (deh + entry_count - 1);
+	shift = last_location - REISERFS_DEH_SIZE * entry_count;
+	
+	memmove (deh + entry_count, item + last_location,
+		 reiserfs_ih_get_len (ih) - last_location);
+	for (i = 0; i < entry_count; i ++)
+	    reiserfs_deh_set_loc (&deh[i], reiserfs_deh_get_loc (&deh[i]) - shift);
+
+	return shift;
+    }
+
+    /* first byte of remaining entries, those are BEFORE cut entries
+       (prev_record) and length of all removed records (cut_records_len) */
+    prev_record_offset = (from ? reiserfs_deh_get_loc (&deh[from - 1]) : 
+			  reiserfs_ih_get_len (ih));
+    
+    if (from + del_count == entry_count) {
+	cut_records_len = prev_record_offset/*from_record*/ - 
+		REISERFS_DEH_SIZE * entry_count;
+    } else {
+	cut_records_len = prev_record_offset/*from_record*/ - 
+		reiserfs_deh_get_loc (&deh[from + del_count - 1]);
+    }
+    
+    prev_record = item + prev_record_offset;
+
+
+    /* adjust locations of remaining entries */
+    for (i = reiserfs_ih_get_entries (ih) - 1; i > from + del_count - 1; i --) {
+	reiserfs_deh_set_loc (deh + i, reiserfs_deh_get_loc (deh + i) - 
+			  (REISERFS_DEH_SIZE * del_count));
+    }
+
+    for (i = 0; i < from; i ++) {
+	reiserfs_deh_set_loc (deh + i, reiserfs_deh_get_loc (deh + i) - 
+			  (REISERFS_DEH_SIZE * del_count + cut_records_len));
+    }
+
+    reiserfs_ih_set_entries (ih, reiserfs_ih_get_entries (ih) - del_count);
+
+    /* shift entry head array and entries those are AFTER removed entries */
+    memmove ((char *)(deh + from),
+	     deh + from + del_count, 
+	     prev_record - cut_records_len - (char *)(deh + from + del_count));
+  
+    /* shift records, those are BEFORE removed entries */
+    memmove (prev_record - cut_records_len - REISERFS_DEH_SIZE * del_count,
+	     prev_record, item + reiserfs_ih_get_len (ih) - prev_record);
+
+    return REISERFS_DEH_SIZE * del_count + cut_records_len;
+}
+
+
+/*  when cut item is part of regular file
+        pos_in_item - first byte that must be cut
+        cut_size - number of bytes to be cut beginning from pos_in_item
+ 
+   when cut item is part of directory
+        pos_in_item - number of first deleted entry
+        cut_size - count of deleted entries
+    */
+void reiserfs_lb_delete_unit (reiserfs_filsys_t * fs,
+			      reiserfs_bufinfo_t * bi, 
+			      int cut_item_num,
+			      int pos_in_item, 
+			      int cut_size)
+{
+    int nr;
+    reiserfs_bh_t * bh = bi->bi_bh;
+    reiserfs_node_head_t * blkh;
+    reiserfs_ih_t * ih;
+    int last_loc, unmoved_loc;
+    int i;
+
+    blkh = NODE_HEAD (bh);
+    nr = reiserfs_nh_get_items (blkh);
+
+    /* item head of truncated item */
+    ih = reiserfs_ih_at (bh, cut_item_num);
+
+    if (reiserfs_ih_dir (ih)) {
+        /* first cut entry ()*/
+        cut_size = reiserfs_lb_delete_entry (bh, ih, pos_in_item, cut_size);
+        if (pos_in_item == 0) {
+            /* change item key by key of first entry in the item */
+	    reiserfs_key_set_off1 (&ih->ih_key, reiserfs_deh_get_off (reiserfs_deh (bh, ih)));
+            /*memcpy (&ih->ih_key.k_offset, 
+		      &(reiserfs_deh (bh, ih)->deh_offset), 
+		      REISERFS_KEY_SHSIZE);*/
+	}
+    } else {
+        /* item is direct or extent */
+        /* shift item body to left if cut is from the head of item */
+        if (pos_in_item == 0) {
+	    memmove (bh->b_data + reiserfs_ih_get_loc (ih),
+		     bh->b_data + reiserfs_ih_get_loc (ih) + cut_size,
+		     reiserfs_ih_get_len (ih) - cut_size);
+
+            /* change key of item */
+            if (reiserfs_ih_direct(ih)) {
+                //ih->ih_key.k_offset += cut_size;
+                reiserfs_key_set_off (reiserfs_key_format (&ih->ih_key), 
+					 &ih->ih_key, 
+					 reiserfs_key_get_off (&ih->ih_key)
+					 + cut_size);
+            } else {
+                //ih->ih_key.k_offset += (cut_size / REISERFS_EXT_SIZE) * bh->b_size;
+                reiserfs_key_set_off (reiserfs_key_format (&ih->ih_key), 
+					 &ih->ih_key, 
+					 reiserfs_key_get_off (&ih->ih_key) + 
+					 (cut_size / REISERFS_EXT_SIZE) * bh->b_size);
+	    }
+	}
+    }
+  
+
+    /* location of the last item */
+    last_loc = reiserfs_ih_get_loc (&ih[nr - cut_item_num - 1]);
+
+    /* location of the item, which is remaining at the same place */
+    unmoved_loc = cut_item_num ? reiserfs_ih_get_loc (ih-1) : bh->b_size;
+
+
+    /* shift */
+    memmove (bh->b_data + last_loc + cut_size, bh->b_data + last_loc,
+	       unmoved_loc - last_loc - cut_size);
+
+    /* change item length */
+    reiserfs_ih_set_len (ih, reiserfs_ih_get_len (ih) - cut_size);
+  
+    if (reiserfs_ih_ext(ih)) {
+        if (pos_in_item)
+            //ih->u.ih_free_space = 0;
+            reiserfs_ih_set_free (ih, 0);
+    }
+
+    /* change locations */
+    for (i = cut_item_num; i < nr; i ++) {
+	reiserfs_ih_set_loc (&ih[i-cut_item_num], 
+			 reiserfs_ih_get_loc (&ih[i-cut_item_num]) + cut_size);
+    }
+
+    /* size, free space */
+    reiserfs_nh_set_free (blkh, reiserfs_nh_get_free (blkh) + cut_size);
+
+    reiserfs_buffer_mkdirty(bh);
+    
+    if (bi->bi_parent) {
+	reiserfs_dc_t * dc;
+
+	dc = reiserfs_int_at (bi->bi_parent, bi->bi_position);
+	reiserfs_dc_set_size (dc, reiserfs_dc_get_size (dc) - cut_size);
+	reiserfs_buffer_mkdirty(bi->bi_parent);
+    }
+    if (reiserfs_leaf_valid(bh) != NT_LEAF && 
+	reiserfs_leaf_valid(bh) != NT_IH_ARRAY)
+    {
+	reiserfs_panic ("reiserfs_lb_delete_unit: bad leaf %lu: %b",
+			bh->b_blocknr, bh);
+    }
+}
+
+
+/* delete del_num items from buffer starting from the first'th item */
+void reiserfs_lb_delete_item (reiserfs_filsys_t * fs,
+			      reiserfs_bufinfo_t * bi,
+			      int first, 
+			      int del_num)
+{
+    reiserfs_bh_t * bh = bi->bi_bh;
+    int nr;
+    int i, j;
+    int last_loc, last_removed_loc;
+    reiserfs_node_head_t * blkh;
+    reiserfs_ih_t * ih;
+
+    if (del_num == 0)
+	return;
+    
+    blkh = NODE_HEAD (bh);
+    nr = reiserfs_nh_get_items (blkh);
+
+    if (first == 0 && del_num == nr) {
+	/* this does not work */
+	reiserfs_tb_attach_new (bi);
+	
+	reiserfs_buffer_mkdirty(bh);
+	return;
+    }
+    
+    ih = reiserfs_ih_at (bh, first);
+    
+    /* location of unmovable item */
+    j = (first == 0) ? bh->b_size : reiserfs_ih_get_loc (ih-1);
+    
+    /* delete items */
+    last_loc = reiserfs_ih_get_loc (&ih[nr - 1 - first]);
+    last_removed_loc = reiserfs_ih_get_loc (&ih[del_num-1]);
+    
+    memmove (bh->b_data + last_loc + j - last_removed_loc,
+	     bh->b_data + last_loc, last_removed_loc - last_loc);
+    
+    /* delete item headers */
+    memmove (ih, ih + del_num, (nr - first - del_num) * REISERFS_IH_SIZE);
+    
+    /* change item location */
+    for (i = first; i < nr - del_num; i ++) {
+	reiserfs_ih_set_loc (&ih[i-first], 
+			 reiserfs_ih_get_loc (&ih[i-first]) + j - last_removed_loc);
+    }
+    
+    /* sizes, item number */
+    reiserfs_nh_set_items (blkh, reiserfs_nh_get_items (blkh)/*nr*/ - del_num);
+    reiserfs_nh_set_free (blkh, reiserfs_nh_get_free (blkh) + j - 
+			 last_removed_loc + REISERFS_IH_SIZE * del_num);
+    
+    reiserfs_buffer_mkdirty(bh);
+    
+    if (bi->bi_parent) {
+	reiserfs_dc_t * dc;
+
+	dc = reiserfs_int_at (bi->bi_parent, bi->bi_position);
+	reiserfs_dc_set_size (dc, reiserfs_dc_get_size (dc) - 
+	    (j - last_removed_loc + REISERFS_IH_SIZE * del_num));
+	reiserfs_buffer_mkdirty(bi->bi_parent);
+    }
+    if (reiserfs_leaf_valid(bh) != NT_LEAF && 
+	reiserfs_leaf_valid(bh) != NT_IH_ARRAY)
+    {
+	reiserfs_panic ("reiserfs_lb_delete_item: bad leaf %lu: %b", 
+			bh->b_blocknr, bh);
+    }
+}
+
+/*  If del_bytes == -1, starting from position 'first' delete del_num items in 
+    whole in buffer CUR. If not. If last_first == 0. Starting from position 
+    'first' delete del_num-1 items in whole. Delete part of body of the first 
+    item. Part defined by del_bytes. Don't delete first item header If 
+    last_first == 1. Starting from position 'first+1' delete del_num-1 items 
+    in whole. Delete part of body of the last item . Part defined by del_bytes.
+    Don't delete last item header. */
+void reiserfs_lb_delete (reiserfs_filsys_t * fs,
+			 reiserfs_bufinfo_t * cur_bi,
+			 int last_first, 
+			 int first, 
+			 int del_num, 
+			 int del_bytes)
+{
+    reiserfs_bh_t * bh;
+    int item_amount = reiserfs_node_items (bh = cur_bi->bi_bh);
+    
+    if ( del_num == 0 )
+	return;
+    
+    if ( first == 0 && del_num == item_amount && del_bytes == -1 ) {
+	reiserfs_tb_attach_new (cur_bi);
+	reiserfs_buffer_mkdirty (bh);
+	return;
+    }
+    
+    if ( del_bytes == -1 )
+	/* delete del_num items beginning from item in position first */
+	reiserfs_lb_delete_item (fs, cur_bi, first, del_num);
+    else {
+	if ( last_first == FIRST_TO_LAST ) {
+	    /* delete del_num-1 items beginning from item in position first  */
+	    reiserfs_lb_delete_item (fs, cur_bi, first, del_num-1);
+	    
+	    /* delete the part of the first item of the bh do not
+	       delete item header */
+	    reiserfs_lb_delete_unit (fs, cur_bi, 0, 0, del_bytes);
+	} else  {
+	    reiserfs_ih_t * ih;
+	    int len;
+	    
+	    /* delete del_num-1 items beginning from item in position first+1  */
+	    reiserfs_lb_delete_item (fs, cur_bi, first+1, del_num-1);
+	    
+	    /* the last item is directory  */
+	    if (reiserfs_ih_dir(ih = reiserfs_ih_at(bh, reiserfs_node_items(bh)-1))) 	
+	        /* len = numbers of directory entries in this item */
+	        len = reiserfs_ih_get_entries(ih);
+	    else
+		/* len = body len of item */
+ 	        len = reiserfs_ih_get_len (ih);
+	    
+	    /* delete the part of the last item of the bh 
+	       do not delete item header */
+	    reiserfs_lb_delete_unit (fs, cur_bi, reiserfs_node_items(bh) - 1, 
+				     len - del_bytes, del_bytes);
+	}
+    }
+}
+
+/* copy mov_num items and mov_bytes of the (mov_num-1)th item to
+   neighbor. Delete them from source */
+int reiserfs_lb_move (int shift_mode, 
+		      reiserfs_tb_t * tb, 
+		      int mov_num, 
+		      int mov_bytes, 
+		      reiserfs_bh_t * Snew)
+{
+    int ret_value;
+    reiserfs_bufinfo_t dest_bi, src_bi;
+    int first_last;
+
+    reiserfs_lb_move_prep (shift_mode, tb, &dest_bi, 
+			   &src_bi, &first_last, Snew);
+
+    ret_value = reiserfs_lb_copy (tb->tb_fs, &dest_bi, src_bi.bi_bh, 
+				  first_last, mov_num, mov_bytes);
+
+    reiserfs_lb_delete (tb->tb_fs, &src_bi, first_last, 
+			(first_last == FIRST_TO_LAST) ? 0 : 
+			(reiserfs_node_items(src_bi.bi_bh) - mov_num), 
+			mov_num, mov_bytes);
+
+    return ret_value;
+}
+
+
+/* Shift shift_num items (and shift_bytes of last shifted item if 
+   shift_bytes != -1) from S[0] to L[0] and replace the delimiting key */
+int reiserfs_lb_shift_left (reiserfs_tb_t * tb, 
+			    int shift_num, 
+			    int shift_bytes)
+{
+    reiserfs_bh_t * S0 = REISERFS_PATH_LEAF (tb->tb_path);
+    int i;
+
+    /* move shift_num (and shift_bytes bytes) items from S[0] to 
+       left neighbor L[0] */
+    i = reiserfs_lb_move (LEAF_FROM_S_TO_L, tb, shift_num, shift_bytes, 0);
+
+    if ( shift_num ) {
+	if (reiserfs_node_items (S0) == 0) { 
+	    /* everything is moved from S[0] */
+	    if (REISERFS_PATH_UPPOS (tb->tb_path, 1) == 0)
+		reiserfs_node_replace_key(tb->CFL[0], tb->lkey[0], 
+					  REISERFS_PATH_UPPARENT (tb->tb_path, 0), 0);
+	} else {
+	    /* replace lkey in CFL[0] by 0-th key from S[0]; */
+	    reiserfs_node_replace_key(tb->CFL[0], tb->lkey[0], S0, 0);
+	}
+    }
+
+    return i;
+}
+
+/* Shift shift_num (shift_bytes) items from S[0] to the right neighbor, 
+   and replace the delimiting key */
+int reiserfs_lb_shift_right (reiserfs_tb_t * tb, 
+			     int shift_num, 
+			     int shift_bytes)
+{
+    int ret_value;
+
+    /* move shift_num (and shift_bytes) items from S[0] 
+       to right neighbor R[0] */
+    ret_value = reiserfs_lb_move (LEAF_FROM_S_TO_R, tb, 
+				    shift_num, shift_bytes, 0);
+
+    /* replace rkey in CFR[0] by the 0-th key from R[0] */
+    if (shift_num) {
+	reiserfs_node_replace_key(tb->CFR[0], tb->rkey[0], tb->R[0], 0);
+    }
+
+    return ret_value;
+}
+
+/* Balance leaf node in case of delete or cut: insert_size[0] < 0
+ *
+ * lnum, rnum can have values >= -1
+ *	-1 means that the neighbor must be joined with S
+ *	 0 means that nothing should be done with the neighbor
+ *	>0 means to shift entirely or partly the specified number of 
+ *         items to the neighbor
+ */
+static int reiserfs_lb_balance_delete(reiserfs_tb_t * tb, int flag)
+{
+    reiserfs_bh_t * tbS0 = REISERFS_PATH_LEAF (tb->tb_path);
+    int item_pos = REISERFS_PATH_LEAF_POS (tb->tb_path);
+    int pos_in_item = tb->tb_path->pos_in_item;
+    reiserfs_bufinfo_t bi;
+    int n;
+    reiserfs_ih_t * ih;
+
+    ih = reiserfs_ih_at (tbS0, item_pos);
+
+    /* Delete or truncate the item */
+
+    switch (flag) {
+    case M_DELETE:   /* delete item in S[0] */
+
+	bi.bi_bh = tbS0;
+	bi.bi_parent = REISERFS_PATH_UPPARENT (tb->tb_path, 0);
+	bi.bi_position = REISERFS_PATH_UPPOS (tb->tb_path, 1);
+	reiserfs_lb_delete (tb->tb_fs, &bi, 0, item_pos, 1, -1);
+
+	if ( ! item_pos ) {
+	    /* we have removed first item in the node - 
+		update left delimiting key */
+	    if ( reiserfs_node_items(tbS0) ) {
+		reiserfs_node_replace_key(tb->CFL[0], tb->lkey[0], tbS0, 0);
+	    } else {
+		if ( ! REISERFS_PATH_UPPOS (tb->tb_path, 1) ) {
+		    reiserfs_node_replace_key(tb->CFL[0], tb->lkey[0],
+					      REISERFS_PATH_UPPARENT(tb->tb_path, 0),0);
+		}
+	    }
+	} 
+    
+	break;
+
+    case M_CUT: {  /* cut item in S[0] */
+	bi.bi_bh = tbS0;
+	bi.bi_parent = REISERFS_PATH_UPPARENT (tb->tb_path, 0);
+	bi.bi_position = REISERFS_PATH_UPPOS (tb->tb_path, 1);
+	if (reiserfs_ih_dir (ih)) {
+	    /* UFS unlink semantics are such that you can only delete
+               one directory entry at a time. */
+	    /* when we cut a directory tb->insert_size[0] means number
+               of entries to be cut (always 1) */
+	    tb->insert_size[0] = -1;
+	    reiserfs_lb_delete_unit (tb->tb_fs, &bi, item_pos, 
+				     pos_in_item, -tb->insert_size[0]);
+
+	    if ( ! item_pos && ! pos_in_item ) {
+		reiserfs_node_replace_key(tb->CFL[0], tb->lkey[0], tbS0, 0);
+	    }
+	} else {
+	    reiserfs_lb_delete_unit (tb->tb_fs, &bi, item_pos, 
+				     pos_in_item, -tb->insert_size[0]);
+	}
+	break;
+    }
+
+    default:
+	print_tb(flag, item_pos, pos_in_item, tb,"when_del");
+	reiserfs_panic ("PAP-12040: reiserfs_lb_balance_delete: "
+			"unexpectable mode: %s(%d)", 
+			(flag == M_PASTE) ? "PASTE" : 
+			((flag == M_INSERT) ? "INSERT" : "UNKNOWN"), flag);
+    }
+
+    /* the rule is that no shifting occurs unless by 
+       shifting a node can be freed */
+    n = reiserfs_node_items(tbS0);
+    if ( tb->lnum[0] )     /* L[0] takes part in balancing */
+    {
+	if ( tb->lnum[0] == -1 )    /* L[0] must be joined with S[0] */
+	{
+	    if ( tb->rnum[0] == -1 )    /* R[0] must be also joined with S[0] */
+	    {			
+		if ( tb->FR[0] == REISERFS_PATH_UPPARENT(tb->tb_path, 0) )
+		{
+		    /* all contents of all the 3 buffers will be in L[0] */
+		    if ((REISERFS_PATH_UPPOS (tb->tb_path, 1) == 0) && 
+			(1 < reiserfs_node_items(tb->FR[0])))
+		    {
+			reiserfs_node_replace_key(tb->CFL[0], tb->lkey[0],
+						  tb->FR[0], 1);
+		    }
+
+		    reiserfs_lb_move (LEAF_FROM_S_TO_L, tb, n, -1, 0);
+		    reiserfs_lb_move (LEAF_FROM_R_TO_L, tb, 
+					reiserfs_node_items(tb->R[0]), -1, 0);
+
+		    reiserfs_node_forget (tb->tb_fs, tbS0->b_blocknr);
+		    reiserfs_node_forget (tb->tb_fs, tb->R[0]->b_blocknr);
+
+		    return 0;
+		}
+		/* all contents of all the 3 buffers will be in R[0] */
+		reiserfs_lb_move(LEAF_FROM_S_TO_R, tb, n, -1, 0);
+		reiserfs_lb_move(LEAF_FROM_L_TO_R, tb, 
+				   reiserfs_node_items(tb->L[0]), -1, 0);
+
+		/* right_delimiting_key is correct in R[0] */
+		reiserfs_node_replace_key(tb->CFR[0], tb->rkey[0], tb->R[0], 0);
+
+		reiserfs_node_forget (tb->tb_fs, tbS0->b_blocknr);
+		reiserfs_node_forget (tb->tb_fs, tb->L[0]->b_blocknr);
+
+		return -1;
+	    }
+
+	    /* all contents of L[0] and S[0] will be in L[0] */
+	    reiserfs_lb_shift_left(tb, n, -1);
+
+	    reiserfs_node_forget (tb->tb_fs, tbS0->b_blocknr);
+
+	    return 0;
+	}
+	/* a part of contents of S[0] will be in L[0] and the rest 
+	   part of S[0] will be in R[0] */
+
+	reiserfs_lb_shift_left (tb, tb->lnum[0], tb->lbytes);
+	reiserfs_lb_shift_right(tb, tb->rnum[0], tb->rbytes);
+
+	reiserfs_node_forget (tb->tb_fs, tbS0->b_blocknr);
+
+	return 0;
+    }
+
+    if ( tb->rnum[0] == -1 ) {
+	/* all contents of R[0] and S[0] will be in R[0] */
+	reiserfs_lb_shift_right(tb, n, -1);
+	reiserfs_node_forget (tb->tb_fs, tbS0->b_blocknr);
+	return 0;
+    }
+    return 0;
+}
+
+int reiserfs_lb_balance(reiserfs_tb_t * tb,
+			  /* item header of inserted item */
+			  reiserfs_ih_t * ih, 
+			  /* body  of inserted item or bytes to paste */
+			  const char * body,		
+			  /* i - insert, d - delete, c - cut, p - paste
+			     (see comment to reiserfs_tb_balance) */
+			  int flag,			
+			  /* it is always 0 */
+			  int zeros_number,
+			  /* in our processing of one level we sometimes 
+			     determine what must be inserted into the next 
+			     higher level.  This insertion consists of a 
+			     key or two keys and their corresponding
+			     pointers */
+			  reiserfs_ih_t * insert_key,  
+			  /* inserted node-ptrs for the next level */
+			  reiserfs_bh_t ** insert_ptr)
+{
+    /* position in item, in bytes for direct and
+       extent items, in entries for directories (for
+       which it is an index into the array of directory
+       entry headers.) */
+    int pos_in_item = tb->tb_path->pos_in_item; 
+    reiserfs_bh_t * tbS0 = REISERFS_PATH_LEAF (tb->tb_path);
+/*  reiserfs_bh_t * tbF0 = REISERFS_PATH_UPPARENT (tb->tb_path, 0);
+    int S0_b_item_order = REISERFS_PATH_UPPARENT_POS (tb->tb_path, 0);*/
+    /*  index into the array of item headers in S[0] 
+	of the affected item */
+    int item_pos = REISERFS_PATH_LEAF_POS (tb->tb_path);	
+    reiserfs_bufinfo_t bi;
+    /* new nodes allocated to hold what could not fit into S */
+    reiserfs_bh_t *S_new[2];  
+    /* number of items that will be placed into S_new (includes partially 
+       shifted items) */
+    int snum[2];
+    /* if an item is partially shifted into S_new then 
+       if it is a directory item 
+       it is the number of entries from the item that are shifted into S_new
+       else
+       it is the number of bytes from the item that are shifted into S_new */
+    int sbytes[2];
+    int n, i;
+    int ret_val;
+
+    /* Make balance in case insert_size[0] < 0 */
+    if ( tb->insert_size[0] < 0 )
+	return reiserfs_lb_balance_delete (/*th,*/ tb, flag);
+  
+    /* for extent item pos_in_item is measured in unformatted node
+       pointers. Recalculate to bytes */
+    if (flag != M_INSERT && reiserfs_ih_ext (reiserfs_ih_at (tbS0, item_pos)))
+	pos_in_item *= REISERFS_EXT_SIZE;
+
+    if ( tb->lnum[0] > 0 ) {
+	/* Shift lnum[0] items from S[0] to the left neighbor L[0] */
+	if ( item_pos < tb->lnum[0] ) {
+	    /* new item or it part falls to L[0], shift it too */
+	    n = reiserfs_node_items(tb->L[0]);
+
+	    switch (flag) {
+	    case M_INSERT:   /* insert item into L[0] */
+
+		if ( item_pos == tb->lnum[0] - 1 && tb->lbytes != -1 ) {
+		    /* part of new item falls into L[0] */
+		    int new_item_len;
+
+		    ret_val = reiserfs_lb_shift_left (tb, tb->lnum[0]-1, -1);
+		    /* Calculate item length to insert to S[0] */
+		    new_item_len = reiserfs_ih_get_len (ih) - tb->lbytes;
+		    /* Calculate and check item length to insert to L[0] */
+		    reiserfs_ih_set_len (ih, reiserfs_ih_get_len (ih) - new_item_len);
+		    /* Insert new item into L[0] */
+		    bi.bi_bh = tb->L[0];
+		    bi.bi_parent = tb->FL[0];
+		    bi.bi_position = reiserfs_tb_lpos (tb, 0);
+		    reiserfs_lb_insert (tb->tb_fs, &bi, n + 
+					item_pos - ret_val, ih, body,
+					zeros_number > reiserfs_ih_get_len (ih) ? 
+					reiserfs_ih_get_len (ih) : zeros_number);
+
+		    /* Calculate key component, item length and body to insert 
+		       into S[0] */
+		    //ih->ih_key.k_offset += tb->lbytes;
+		    reiserfs_key_set_off (
+			reiserfs_key_format (&ih->ih_key), &ih->ih_key, 
+			reiserfs_key_get_off (&ih->ih_key) + tb->lbytes * 
+			(reiserfs_ih_ext(ih) ? tb->tb_fs->fs_blocksize / 
+			 REISERFS_EXT_SIZE : 1) );
+		    
+		    reiserfs_ih_set_len (ih, new_item_len);
+		    if ( tb->lbytes >  zeros_number ) {
+			body += (tb->lbytes - zeros_number);
+			zeros_number = 0;
+		    }
+		    else
+			zeros_number -= tb->lbytes;
+		} else {
+		    /* new item in whole falls into L[0] */
+		    /* Shift lnum[0]-1 items to L[0] */
+		    ret_val = reiserfs_lb_shift_left(tb, tb->lnum[0]-1, 
+						       tb->lbytes);
+
+		    /* Insert new item into L[0] */
+		    bi.bi_bh = tb->L[0];
+		    bi.bi_parent = tb->FL[0];
+		    bi.bi_position = reiserfs_tb_lpos (tb, 0);
+		    reiserfs_lb_insert (tb->tb_fs, &bi, n + item_pos - ret_val,
+					ih, body, zeros_number);
+
+		    tb->insert_size[0] = 0;
+		    zeros_number = 0;
+		}
+		break;
+
+	    case M_PASTE:   /* append item in L[0] */
+
+		if ( item_pos == tb->lnum[0] - 1 && tb->lbytes != -1 ) {
+		    /* we must shift the part of the appended item */
+		    if ( reiserfs_ih_dir (reiserfs_ih_at (tbS0, item_pos))) {
+			/* directory item */
+			if ( tb->lbytes > pos_in_item ) {
+			    /* new directory entry falls into L[0] */
+			    reiserfs_ih_t * pasted;
+			    int l_pos_in_item = pos_in_item;
+							  
+			    /* Shift lnum[0] - 1 items in whole. Shift 
+			       lbytes - 1 entries from given directory item */
+			    ret_val = reiserfs_lb_shift_left(tb, tb->lnum[0], 
+							       tb->lbytes - 1);
+			    if ( ret_val && ! item_pos ) {
+				pasted =  reiserfs_ih_at(tb->L[0],
+						     reiserfs_node_items(tb->L[0])-1);
+				
+				l_pos_in_item += reiserfs_ih_get_entries(pasted) - 
+					(tb->lbytes-1);
+			    }
+
+			    /* Append given directory entry to directory item */
+			    bi.bi_bh = tb->L[0];
+			    bi.bi_parent = tb->FL[0];
+			    bi.bi_position = reiserfs_tb_lpos(tb, 0);
+			    reiserfs_lb_insert_unit (tb->tb_fs, &bi, n + 
+						     item_pos - ret_val, 
+						     l_pos_in_item,
+						     tb->insert_size[0], 
+						     body, zeros_number);
+
+			    /* previous string prepared space for pasting new 
+			       entry, following string pastes this entry */
+			    /* when we have merge directory item, pos_in_item 
+			       has been changed too */
+			    /* paste new directory entry. 1 is entry number */
+			    reiserfs_lb_insert_entry (bi.bi_bh, n + item_pos - 
+						      ret_val, l_pos_in_item, 1,
+						      (reiserfs_deh_t *)body,
+						      body + REISERFS_DEH_SIZE, 
+						      tb->insert_size[0]
+				);
+			    tb->insert_size[0] = 0;
+			} else {
+			    /* new directory item doesn't fall into L[0] */
+			    /* Shift lnum[0]-1 items in whole. Shift lbytes 
+			       directory entries from directory item number 
+			       lnum[0] */
+			    reiserfs_lb_shift_left (tb, tb->lnum[0], 
+						      tb->lbytes);
+			}
+			/* Calculate new position to append in item body */
+			pos_in_item -= tb->lbytes;
+		    }
+		    else {
+			/* regular object */
+			if ( tb->lbytes >= pos_in_item ) {
+			    /* appended item will be in L[0] in whole */
+			    int l_n, temp_n;
+                            reiserfs_key_t * key;
+
+			    /* this bytes number must be appended to the last 
+			       item of L[h] */
+			    l_n = tb->lbytes - pos_in_item;
+
+			    /* Calculate new insert_size[0] */
+			    tb->insert_size[0] -= l_n;
+
+			    ret_val = reiserfs_lb_shift_left(tb, tb->lnum[0],
+					reiserfs_ih_get_len(reiserfs_ih_at(tbS0, item_pos)));
+			    
+			    /* Append to body of item in L[0] */
+			    bi.bi_bh = tb->L[0];
+			    bi.bi_parent = tb->FL[0];
+			    bi.bi_position = reiserfs_tb_lpos (tb, 0);
+			    reiserfs_lb_insert_unit(tb->tb_fs, 
+					&bi,n + item_pos - ret_val,
+					reiserfs_ih_get_len (reiserfs_ih_at(tb->L[0], 
+							n+item_pos-ret_val)),
+					l_n,body, zeros_number > l_n ? 
+					l_n : zeros_number);
+
+
+			    /* 0-th item in S0 can be only of DIRECT type 
+			       when l_n != 0*/
+			    //reiserfs_ih_key_at (tbS0, 0)->k_offset += l_n;z
+			    key = reiserfs_ih_key_at (tbS0, 0);
+                            temp_n = reiserfs_ih_ext(reiserfs_ih_at (tb->L[0], 
+					n + item_pos - ret_val)) ?
+				    (int)((l_n / REISERFS_EXT_SIZE) * 
+					  tb->tb_fs->fs_blocksize) : l_n;
+
+			    reiserfs_key_set_off (
+				reiserfs_key_format (key), key, 
+				reiserfs_key_get_off (key) + temp_n);
+
+			    /*reiserfs_int_key_at(tb->CFL[0],
+				tb->lkey[0])->k_offset += l_n; */
+			    key = reiserfs_int_key_at(tb->CFL[0],tb->lkey[0]);
+			    reiserfs_key_set_off (
+				reiserfs_key_format (key), key, 
+				reiserfs_key_get_off (key) + temp_n);
+
+			    /* Calculate new body, position in item and 
+			       insert_size[0] */
+			    if ( l_n > zeros_number ) {
+				body += (l_n - zeros_number);
+				zeros_number = 0;
+			    }
+			    else
+				zeros_number -= l_n;
+			    pos_in_item = 0;	
+			}
+			else {
+			    /* only part of the appended item will be in L[0] */
+
+			    /* Calculate position in item for append in S[0] */
+			    pos_in_item -= tb->lbytes;
+
+			    /* Shift lnum[0] - 1 items in whole. Shift 
+			       lbytes - 1 byte from item number lnum[0] */
+			    reiserfs_lb_shift_left(tb,tb->lnum[0],
+						     tb->lbytes);
+			}
+		    }
+		} else {
+		    /* appended item will be in L[0] in whole */
+		    reiserfs_ih_t * pasted;
+		
+		    if ( ! item_pos  && 
+			 reiserfs_tree_left_mergeable (tb->tb_fs, 
+						       tb->tb_path) == 1 )
+			{ /* if we paste into first item of S[0] and it 
+			     is left mergable then increment pos_in_item 
+			     by the size of the last item in L[0] */
+			    pasted = reiserfs_ih_at(tb->L[0],n-1);
+			    if ( reiserfs_ih_dir(pasted) )
+				pos_in_item += reiserfs_ih_get_entries (pasted);
+			    else
+				pos_in_item += reiserfs_ih_get_len (pasted);
+			}
+
+		    /* Shift lnum[0] - 1 items in whole. Shift lbytes - 1 
+		       byte from item number lnum[0] */
+		    ret_val = reiserfs_lb_shift_left(tb, tb->lnum[0], 
+						       tb->lbytes);
+		    /* Append to body of item in L[0] */
+		    bi.bi_bh = tb->L[0];
+		    bi.bi_parent = tb->FL[0];
+		    bi.bi_position = reiserfs_tb_lpos (tb, 0);
+		    reiserfs_lb_insert_unit (tb->tb_fs, &bi, n + item_pos - 
+					     ret_val, pos_in_item, 
+					     tb->insert_size[0],
+					     body, zeros_number);
+
+		    /* if appended item is directory, paste entry */
+		    pasted = reiserfs_ih_at (tb->L[0], n + item_pos - ret_val);
+		    if (reiserfs_ih_dir (pasted))
+			reiserfs_lb_insert_entry (bi.bi_bh, n + item_pos - 
+						  ret_val, pos_in_item, 1, 
+						  (reiserfs_deh_t *)body,
+						  body + REISERFS_DEH_SIZE, 
+						  tb->insert_size[0]);
+
+		    /* if appended item is extent item, put 
+		       unformatted node into un list */
+		    if (reiserfs_ih_ext (pasted))
+			reiserfs_ih_set_free (pasted, 0);
+
+		    tb->insert_size[0] = 0;
+		    zeros_number = 0;
+		}
+		break;
+	    default:    /* cases d and t */
+		reiserfs_panic ("PAP-12130: reiserfs_lb_balance: "
+				"lnum > 0: unexpectable mode: %s(%d)", 
+				(flag == M_DELETE) ? "DELETE" : 
+				((flag == M_CUT) ? "CUT" : "UNKNOWN"), flag);
+	    }
+	} else { 
+	    /* new item doesn't fall into L[0] */
+	    reiserfs_lb_shift_left (tb, tb->lnum[0], tb->lbytes);
+	}
+    }	/* tb->lnum[0] > 0 */
+
+    /* Calculate new item position */
+    item_pos -= ( tb->lnum[0] - (( tb->lbytes != -1 ) ? 1 : 0));
+
+    if ( tb->rnum[0] > 0 ) {
+	/* shift rnum[0] items from S[0] to the right neighbor R[0] */
+	n = reiserfs_node_items(tbS0);
+	switch ( flag ) {
+
+	case M_INSERT:   /* insert item */
+	    if ( n - tb->rnum[0] < item_pos ) {
+		/* new item or its part falls to R[0] */
+		if ( item_pos == n - tb->rnum[0] + 1 && tb->rbytes != -1 ) {
+		    /* part of new item falls into R[0] */
+		    long long int old_key_comp, old_len, r_zeros_number;
+		    const char * r_body;
+		    long long int multiplyer;
+
+		    reiserfs_lb_shift_right(tb, tb->rnum[0] - 1, -1);
+
+		    /* Remember key component and item length */
+		    old_key_comp = reiserfs_key_get_off (&ih->ih_key);
+		    old_len = reiserfs_ih_get_len (ih);
+
+		    multiplyer = reiserfs_ih_ext(ih) ? 
+			    tb->tb_fs->fs_blocksize / REISERFS_EXT_SIZE : 1;
+		    /* Calculate key component and item length 
+		       to insert into R[0] */
+		    //ih->ih_key.k_offset += (old_len - tb->rbytes);
+		    reiserfs_key_set_off (reiserfs_key_format (&ih->ih_key), 
+					     &ih->ih_key, old_key_comp + 
+					     (old_len - tb->rbytes) * 
+					     multiplyer );
+
+		    reiserfs_ih_set_len (ih, tb->rbytes);
+		    /* Insert part of the item into R[0] */
+		    bi.bi_bh = tb->R[0];
+		    bi.bi_parent = tb->FR[0];
+		    bi.bi_position = reiserfs_tb_rpos (tb, 0);
+		    if (old_len - tb->rbytes > zeros_number ) {
+			r_zeros_number = 0;
+			r_body = body + old_len - tb->rbytes - zeros_number;
+		    }
+		    else { /* zeros_number is always 0 */
+			r_body = body;
+			r_zeros_number = zeros_number - old_len - tb->rbytes;
+			zeros_number -= r_zeros_number;
+		    }
+
+		    reiserfs_lb_insert (tb->tb_fs, &bi, 0, ih, 
+					r_body, r_zeros_number);
+
+		    /* Replace right delimiting key by first key in R[0] */
+		    reiserfs_node_replace_key(tb->CFR[0], tb->rkey[0], 
+					      tb->R[0], 0);
+
+		    /* Calculate key component and item length to 
+		       insert into S[0] */
+		    //ih->ih_key.k_offset = old_key_comp;
+		    reiserfs_key_set_off (reiserfs_key_format (&ih->ih_key), 
+					     &ih->ih_key, old_key_comp);
+
+		    reiserfs_ih_set_len (ih, old_len - tb->rbytes);
+
+		    tb->insert_size[0] -= tb->rbytes;
+
+		} else {
+		    /* whole new item falls into R[0] */
+
+		    /* Shift rnum[0]-1 items to R[0] */
+		    ret_val = reiserfs_lb_shift_right(tb, tb->rnum[0] - 1,
+							tb->rbytes);
+
+		    /* Insert new item into R[0] */
+		    bi.bi_bh = tb->R[0];
+		    bi.bi_parent = tb->FR[0];
+		    bi.bi_position = reiserfs_tb_rpos (tb, 0);
+		    reiserfs_lb_insert (tb->tb_fs, &bi, item_pos - n + 
+					tb->rnum[0] - 1, ih, body, 
+					zeros_number);
+
+		    /* If we insert new item in the begin of R[0] change 
+		       the right delimiting key */
+		    if ( item_pos - n + tb->rnum[0] - 1 == 0 ) {
+			reiserfs_node_replace_key (tb->CFR[0], 
+						   tb->rkey[0],
+						   tb->R[0], 0);
+		    }
+		    
+		    zeros_number = tb->insert_size[0] = 0;
+		}
+	    } else {
+		/* new item or part of it doesn't fall into R[0] */
+		reiserfs_lb_shift_right (tb, tb->rnum[0], tb->rbytes);
+	    }
+	    break;
+
+	case M_PASTE:   /* append item */
+
+	    if ( n - tb->rnum[0] <= item_pos ) { 
+		/* pasted item or part of it falls to R[0] */
+		if ( item_pos == n - tb->rnum[0] && tb->rbytes != -1 ) {
+		    /* we must shift the part of the appended item */
+		    if ( reiserfs_ih_dir (reiserfs_ih_at(tbS0, item_pos))) {
+			/* we append to directory item */
+			int entry_count;
+
+			entry_count = 
+				reiserfs_ih_get_entries(reiserfs_ih_at(tbS0, item_pos));
+			if ( entry_count - tb->rbytes < pos_in_item ) {
+			    /* new directory entry falls into R[0] */
+			    int paste_entry_position;
+
+			    /* Shift rnum[0]-1 items in whole. Shift 
+			       rbytes-1 directory entries from directory 
+			       item number rnum[0] */
+			    reiserfs_lb_shift_right (tb, tb->rnum[0], 
+						       tb->rbytes - 1);
+
+			    /* Paste given directory entry to directory item */
+			    paste_entry_position = pos_in_item - 
+				    entry_count + tb->rbytes - 1;
+
+			    bi.bi_bh = tb->R[0];
+			    bi.bi_parent = tb->FR[0];
+			    bi.bi_position = reiserfs_tb_rpos (tb, 0);
+			    reiserfs_lb_insert_unit (tb->tb_fs, &bi, 0, 
+						     paste_entry_position,
+						     tb->insert_size[0],
+						     body,zeros_number);
+			    /* paste entry */
+			    reiserfs_lb_insert_entry (
+				bi.bi_bh, 0, paste_entry_position, 1, 
+				(reiserfs_deh_t *)body, 
+				body + REISERFS_DEH_SIZE, tb->insert_size[0]);								
+						
+			    if ( paste_entry_position == 0 ) {
+				/* change delimiting keys */
+				reiserfs_node_replace_key(tb->CFR[0], 
+							  tb->rkey[0],
+							  tb->R[0], 0);
+			    }
+
+			    tb->insert_size[0] = 0;
+			    pos_in_item++;
+			} else {
+			    /* new directory entry doesn't fall into R[0] */
+			    reiserfs_lb_shift_right (tb, tb->rnum[0],
+						       tb->rbytes);
+			}
+		    }
+		    else {
+			/* regular object */
+
+			int n_shift, n_rem, r_zeros_number;
+			const char * r_body;
+			reiserfs_key_t * key;
+
+			/* Calculate number of bytes which must be shifted from 
+			   appended item */
+			if ( (n_shift = tb->rbytes - tb->insert_size[0]) < 0 )
+			    n_shift = 0;
+
+			reiserfs_lb_shift_right (tb, tb->rnum[0], n_shift);
+
+			/* Calculate number of bytes which must remain in body 
+			   after appending to R[0] */
+			if ( (n_rem = tb->insert_size[0] - tb->rbytes) < 0 )
+			    n_rem = 0;
+			{
+			    unsigned long temp_rem = n_rem;
+			
+			    if (reiserfs_key_ext(reiserfs_ih_key_at(tb->R[0],0)))
+				temp_rem = (n_rem / REISERFS_EXT_SIZE) * 
+					tb->tb_fs->fs_blocksize;
+
+			    //reiserfs_ih_key_at(tb->R[0],0)->k_offset += n_rem;
+			    key = reiserfs_ih_key_at(tb->R[0],0);
+			    reiserfs_key_set_off (
+				reiserfs_key_format (key), key, 
+				reiserfs_key_get_off (key) + temp_rem);
+
+			    /*reiserfs_int_key_at(tb->CFR[0],
+				tb->rkey[0])->k_offset += n_rem; */
+			    key = reiserfs_int_key_at(tb->CFR[0],tb->rkey[0]);
+			    reiserfs_key_set_off (
+				reiserfs_key_format (key), key, 
+				reiserfs_key_get_off (key) + temp_rem);
+                        }
+
+			reiserfs_buffer_mkdirty (tb->CFR[0]);
+
+			/* Append part of body into R[0] */
+			bi.bi_bh = tb->R[0];
+			bi.bi_parent = tb->FR[0];
+			bi.bi_position = reiserfs_tb_rpos (tb, 0);
+			if ( n_rem > zeros_number ) {
+			    r_zeros_number = 0;
+			    r_body = body + n_rem - zeros_number;
+			}
+			else {
+			    r_body = body;
+			    r_zeros_number = zeros_number - n_rem;
+			    zeros_number -= r_zeros_number;
+			}
+
+			reiserfs_lb_insert_unit(tb->tb_fs, &bi, 0, n_shift, 
+						tb->insert_size[0] - n_rem, 
+						r_body, r_zeros_number);
+
+			if (reiserfs_ih_ext(reiserfs_ih_at(tb->R[0],0))) {
+			    reiserfs_ih_set_free (reiserfs_ih_at(tb->R[0],0), 0);
+			}
+
+			tb->insert_size[0] = n_rem;
+			if ( ! n_rem )
+			    pos_in_item ++;
+		    }
+		}
+		else { 
+		    /* pasted item falls into R[0] entirely */
+
+		    reiserfs_ih_t * pasted;
+
+		    ret_val = reiserfs_lb_shift_right (tb, tb->rnum[0], 
+							 tb->rbytes);
+
+		    /* append item in R[0] */
+		    if ( pos_in_item >= 0 ) {
+			bi.bi_bh = tb->R[0];
+			bi.bi_parent = tb->FR[0];
+			bi.bi_position = reiserfs_tb_rpos (tb, 0);
+			reiserfs_lb_insert_unit(tb->tb_fs, &bi,item_pos - n + 
+						tb->rnum[0], pos_in_item,
+						tb->insert_size[0], body, 
+						zeros_number);
+		    }
+
+		    /* paste new entry, if item is directory item */
+		    pasted = reiserfs_ih_at(tb->R[0], item_pos - n + tb->rnum[0]);
+		    if (reiserfs_ih_dir (pasted) && pos_in_item >= 0 ) {
+			reiserfs_lb_insert_entry (bi.bi_bh, item_pos - n + 
+						  tb->rnum[0], pos_in_item, 1, 
+						  (reiserfs_deh_t *)body, 
+						  body + REISERFS_DEH_SIZE, 
+						  tb->insert_size[0]);
+			if ( ! pos_in_item ) {
+			    /* update delimiting keys */
+			    reiserfs_node_replace_key (tb->CFR[0], 
+						       tb->rkey[0],
+						       tb->R[0], 0);
+			}
+		    }
+
+		    if (reiserfs_ih_ext (pasted))
+			reiserfs_ih_set_free (pasted, 0);
+		    zeros_number = tb->insert_size[0] = 0;
+		}
+	    }
+	    else {
+		/* new item doesn't fall into R[0] */
+		reiserfs_lb_shift_right (tb, tb->rnum[0], tb->rbytes);
+	    }
+	    break;
+
+	default:    /* cases d and t */
+	    reiserfs_panic ("PAP-12175: reiserfs_lb_balance: "
+			    "rnum > 0: unexpectable mode: %s(%d)", 
+			    (flag == M_DELETE) ? "DELETE" : 
+			    ((flag == M_CUT) ? "CUT" : "UNKNOWN"), flag);
+	}
+    
+    }	/* tb->rnum[0] > 0 */
+
+    /* if while adding to a node we discover that it is possible to split
+       it in two, and merge the left part into the left neighbor and the
+       right part into the right neighbor, eliminating the node */
+    if ( tb->blknum[0] == 0 ) { /* node S[0] is empty now */
+        /* if insertion was done before 0-th position in R[0], right
+           delimiting key of the tb->L[0]'s and left delimiting key are
+           not set correctly */
+        if (tb->CFL[0]) {
+            if (!tb->CFR[0])
+                reiserfs_panic (tb->tb_fs, "vs-12195: reiserfs_lb_balance: "
+				"CFR not initialized");
+	    
+            reiserfs_key_copy (reiserfs_int_key_at (tb->CFL[0], tb->lkey[0]), 
+			       reiserfs_int_key_at (tb->CFR[0], tb->rkey[0]));
+            reiserfs_buffer_mkdirty (tb->CFL[0]);
+        }
+        
+	reiserfs_node_forget (tb->tb_fs, tbS0->b_blocknr);
+	return 0;
+    }
+
+
+    /* Fill new nodes that appear in place of S[0] */
+
+    /* I am told that this copying is because we need an array to enable
+       the looping code. -Hans */
+    snum[0] = tb->s1num,
+	snum[1] = tb->s2num;
+    sbytes[0] = tb->s1bytes;
+    sbytes[1] = tb->s2bytes;
+    for( i = tb->blknum[0] - 2; i >= 0; i-- ) {
+	/* here we shift from S to S_new nodes */
+	S_new[i] = reiserfs_tb_FEB(tb);
+
+	/* set block_head's level to leaf level */
+	reiserfs_nh_set_level (NODE_HEAD (S_new[i]), LEAF_LEVEL);
+
+	n = reiserfs_node_items(tbS0);
+	
+	switch (flag) {
+	case M_INSERT:   /* insert item */
+
+	    if ( n - snum[i] < item_pos ) {
+		/* new item or it's part falls to first new node S_new[i]*/
+		if ( item_pos == n - snum[i] + 1 && sbytes[i] != -1 ) {
+		    /* part of new item falls into S_new[i] */
+		    long long int old_key_comp, old_len, r_zeros_number;
+		    const char * r_body;
+		    long long int multiplyer;
+
+		    /* Move snum[i]-1 items from S[0] to S_new[i] */
+		    reiserfs_lb_move (LEAF_FROM_S_TO_SNEW, tb, 
+					snum[i] - 1, -1, S_new[i]);
+
+		    /* Remember key component and item length */
+		    old_key_comp = reiserfs_key_get_off (&ih->ih_key);
+		    old_len = reiserfs_ih_get_len (ih);
+		    multiplyer = reiserfs_ih_ext(ih) ? 
+			    tb->tb_fs->fs_blocksize / REISERFS_EXT_SIZE : 1;
+
+		    /* Calculate key component and item length to insert 
+		       into S_new[i] */
+		    //ih->ih_key.k_offset += (old_len - sbytes[i]);
+		    reiserfs_key_set_off (reiserfs_key_format (&ih->ih_key), 
+					     &ih->ih_key, old_key_comp + 
+					     (old_len - sbytes[i]) *multiplyer);
+
+		    reiserfs_ih_set_len (ih, sbytes[i]);
+
+		    /* Insert part of the item into S_new[i] before 0-th item */
+		    bi.bi_bh = S_new[i];
+		    bi.bi_parent = 0;
+		    bi.bi_position = 0;
+
+		    if ( old_len - sbytes[i] > zeros_number ) {
+			r_zeros_number = 0;
+			r_body = body + (old_len - sbytes[i]) - zeros_number;
+		    }
+		    else {
+			r_body = body;
+			r_zeros_number = zeros_number - (old_len - sbytes[i]);
+			zeros_number -= r_zeros_number;
+		    }
+
+		    reiserfs_lb_insert (tb->tb_fs, &bi, 0, ih, 
+					r_body, r_zeros_number);
+
+		    /* Calculate key component and item length 
+		       to insert into S[i] */
+		    //ih->ih_key.k_offset = old_key_comp;
+		    reiserfs_key_set_off (reiserfs_key_format (&ih->ih_key), 
+					     &ih->ih_key, old_key_comp);
+		    reiserfs_ih_set_len (ih, old_len - sbytes[i]);
+		    tb->insert_size[0] -= sbytes[i];
+		}
+		else /* whole new item falls into S_new[i] */
+		{
+		    /* Shift snum[0] - 1 items to S_new[i] 
+		       (sbytes[i] of split item) */
+		    reiserfs_lb_move (LEAF_FROM_S_TO_SNEW, tb, snum[i] - 1,
+					sbytes[i], S_new[i]);
+
+		    /* Insert new item into S_new[i] */
+		    bi.bi_bh = S_new[i];
+		    bi.bi_parent = 0;
+		    bi.bi_position = 0;
+		    reiserfs_lb_insert (tb->tb_fs, &bi, item_pos - n + 
+					snum[i] - 1, ih, body, zeros_number);
+		    zeros_number = tb->insert_size[0] = 0;
+		}
+	    }
+
+	    else /* new item or it part don't falls into S_new[i] */
+	    {
+		reiserfs_lb_move (LEAF_FROM_S_TO_SNEW, tb, snum[i], 
+				    sbytes[i], S_new[i]);
+	    }
+	    break;
+
+	case M_PASTE:   /* append item */
+
+	    if ( n - snum[i] <= item_pos )  
+		/* pasted item or part if it falls to S_new[i] */
+	    {
+		if ( item_pos == n - snum[i] && sbytes[i] != -1 )
+		{ /* we must shift part of the appended item */
+		    reiserfs_ih_t * aux_ih;
+
+		    aux_ih = reiserfs_ih_at(tbS0,item_pos);
+		    
+		    if (reiserfs_ih_dir (aux_ih)) {
+			/* we append to directory item */
+
+			int entry_count;
+		
+			entry_count = reiserfs_ih_get_entries(aux_ih);
+
+			if ( entry_count - sbytes[i] < pos_in_item  && 
+			     pos_in_item <= entry_count ) 
+			{
+			    /* new directory entry falls into S_new[i] */
+		  
+			    /* Shift snum[i]-1 items in whole. Shift sbytes[i] 
+			       directory entries from directory item number 
+			       snum[i] */
+			    reiserfs_lb_move (LEAF_FROM_S_TO_SNEW, tb,snum[i],
+						sbytes[i]-1, S_new[i]);
+
+			    /* Paste given directory entry to directory item */
+			    bi.bi_bh = S_new[i];
+			    bi.bi_parent = 0;
+			    bi.bi_position = 0;
+			    reiserfs_lb_insert_unit (tb->tb_fs, &bi, 0, 
+						     pos_in_item - entry_count +
+						     sbytes[i] - 1,
+						     tb->insert_size[0], body,
+						     zeros_number);
+			    
+			    /* paste new directory entry */
+			    reiserfs_lb_insert_entry (bi.bi_bh, 0, 
+				pos_in_item - entry_count + sbytes[i] - 1, 
+				1, (reiserfs_deh_t *)body, 
+				body + REISERFS_DEH_SIZE, tb->insert_size[0]);
+			    
+			    tb->insert_size[0] = 0;
+			    pos_in_item++;
+			} else { /* new directory entry doesn't fall 
+				    into S_new[i] */
+			    reiserfs_lb_move (LEAF_FROM_S_TO_SNEW, tb, 
+						snum[i], sbytes[i], S_new[i]);
+			}
+		    }
+		    else /* regular object */
+		    {
+			int n_shift, n_rem, r_zeros_number;
+			const char * r_body;
+			reiserfs_ih_t * tmp;
+
+			/* Calculate number of bytes which must be shifted from 
+			   appended item */
+			n_shift = sbytes[i] - tb->insert_size[0];
+			if ( n_shift < 0 )
+			    n_shift = 0;
+			reiserfs_lb_move (LEAF_FROM_S_TO_SNEW, tb, snum[i], 
+					    n_shift, S_new[i]);
+
+			/* Calculate number of bytes which must remain in body 
+			   after append to S_new[i] */
+			n_rem = tb->insert_size[0] - sbytes[i];
+			if ( n_rem < 0 )
+			    n_rem = 0;
+			/* Append part of body into S_new[0] */
+			bi.bi_bh = S_new[i];
+			bi.bi_parent = 0;
+			bi.bi_position = 0;
+
+			if ( n_rem > zeros_number ) {
+			    r_zeros_number = 0;
+			    r_body = body + n_rem - zeros_number;
+			}
+			else {
+			    r_body = body;
+			    r_zeros_number = zeros_number - n_rem;
+			    zeros_number -= r_zeros_number;
+			}
+
+			reiserfs_lb_insert_unit(tb->tb_fs, &bi, 0, n_shift, 
+						tb->insert_size[0]-n_rem, 
+						r_body,r_zeros_number);
+			tmp = reiserfs_ih_at (S_new[i], 0);
+			if (reiserfs_ih_ext(tmp)) {
+/*			
+			    if (n_rem)
+				reiserfs_panic ("PAP-12230: reiserfs_lb_balance: "
+						"invalid action with extent item");
+			    reiserfs_ih_set_free (tmp, 0);
+*/
+			    reiserfs_ih_set_free (tmp, 0);
+			    reiserfs_key_set_off(
+				reiserfs_key_format (&tmp->ih_key), 
+				&tmp->ih_key,
+				reiserfs_key_get_off(&tmp->ih_key) +
+				(n_rem / REISERFS_EXT_SIZE) * 
+				tb->tb_fs->fs_blocksize);
+			} else
+			    reiserfs_key_set_off (
+				reiserfs_key_format (&tmp->ih_key), 
+				&tmp->ih_key,
+				reiserfs_key_get_off(&tmp->ih_key) + n_rem);
+
+			//reiserfs_ih_key_at(S_new[i],0)->k_offset += n_rem;
+//			
+
+			tb->insert_size[0] = n_rem;
+			if ( ! n_rem )
+			    pos_in_item++;
+		    }
+		}
+		else
+		    /* item falls wholly into S_new[i] */
+		{
+		    reiserfs_ih_t * pasted;
+		
+		    reiserfs_lb_move (LEAF_FROM_S_TO_SNEW, tb, snum[i], 
+					sbytes[i], S_new[i]);
+		    /* paste into item */
+		    bi.bi_bh = S_new[i];
+		    bi.bi_parent = 0;
+		    bi.bi_position = 0;
+		    reiserfs_lb_insert_unit(tb->tb_fs, &bi, item_pos - 
+					    n + snum[i], pos_in_item, 
+					    tb->insert_size[0], body, 
+					    zeros_number);
+
+		    pasted = reiserfs_ih_at(S_new[i], item_pos - n + snum[i]);
+		    if (reiserfs_ih_dir (pasted)) {
+			reiserfs_lb_insert_entry (bi.bi_bh, item_pos - n + 
+						  snum[i], pos_in_item, 1, 
+						  (reiserfs_deh_t *)body,
+						  body + REISERFS_DEH_SIZE, 
+						  tb->insert_size[0]);
+		    }
+
+		    /* if we paste to extent item update ih_free_space */
+		    if (reiserfs_ih_ext (pasted))
+			reiserfs_ih_set_free (pasted, 0);
+		    zeros_number = tb->insert_size[0] = 0;
+		}
+	    } else {
+		/* pasted item doesn't fall into S_new[i] */
+		reiserfs_lb_move (LEAF_FROM_S_TO_SNEW, tb, snum[i], 
+				    sbytes[i], S_new[i]);
+	    }
+	    break;
+
+	default:    /* cases d and t */
+	    reiserfs_panic ("PAP-12245: reiserfs_lb_balance: blknum > 2: "
+			    "unexpectable mode: %s(%d)", (flag == M_DELETE) ? 
+			    "DELETE" : ((flag == M_CUT) ? "CUT" : "UNKNOWN"), 
+			    flag);
+	}
+
+	memcpy (insert_key + i,reiserfs_ih_key_at(S_new[i],0),REISERFS_KEY_SIZE);
+	insert_ptr[i] = S_new[i];
+    }
+
+    /* if the affected item was not wholly shifted then we perform all
+       necessary operations on that part or whole of the affected item which
+       remains in S */
+    if ( 0 <= item_pos && item_pos < tb->s0num ) {
+	/* if we must insert or append into buffer S[0] */
+
+	switch (flag) {
+	case M_INSERT:   /* insert item into S[0] */
+	    bi.bi_bh = tbS0;
+	    bi.bi_parent = REISERFS_PATH_UPPARENT (tb->tb_path, 0);
+	    bi.bi_position = REISERFS_PATH_UPPOS (tb->tb_path, 1);
+	    reiserfs_lb_insert (tb->tb_fs, &bi, item_pos, 
+				ih, body, zeros_number);
+
+	    /* If we insert the first key change the delimiting key */
+	    if( item_pos == 0 ) {
+		if (tb->CFL[0]) /* can be 0 in reiserfsck */
+		    reiserfs_node_replace_key (tb->CFL[0], 
+					       tb->lkey[0],
+					       tbS0, 0);
+	    }
+	    
+	    break;
+
+	case M_PASTE: {  /* append item in S[0] */
+	    reiserfs_ih_t * pasted;
+
+	    pasted = reiserfs_ih_at (tbS0, item_pos);
+	    /* when directory, may be new entry already pasted */
+	    if (reiserfs_ih_dir (pasted)) {
+		if ( pos_in_item >= 0 && 
+		     pos_in_item <= reiserfs_ih_get_entries (pasted) ) 
+		{
+		    /* prepare space */
+		    bi.bi_bh = tbS0;
+		    bi.bi_parent = REISERFS_PATH_UPPARENT (tb->tb_path, 0);
+		    bi.bi_position = REISERFS_PATH_UPPOS (tb->tb_path, 1);
+		    reiserfs_lb_insert_unit(tb->tb_fs, &bi, item_pos, 
+					    pos_in_item, tb->insert_size[0],
+					    body, zeros_number);
+
+		    /* paste entry */
+		    reiserfs_lb_insert_entry (bi.bi_bh, item_pos, pos_in_item, 
+					      1, (reiserfs_deh_t *)body,
+					body + REISERFS_DEH_SIZE, tb->insert_size[0]);
+		    
+		    if ( ! item_pos && ! pos_in_item ) {
+			if (tb->CFL[0])  // can be 0 in reiserfsck
+			    reiserfs_node_replace_key(tb->CFL[0], tb->lkey[0],
+						      tbS0, 0);
+		    }
+		    tb->insert_size[0] = 0;
+		}
+	    } else { /* regular object */
+		if ( pos_in_item == reiserfs_ih_get_len (pasted) ) {
+		    bi.bi_bh = tbS0;
+		    bi.bi_parent = REISERFS_PATH_UPPARENT (tb->tb_path, 0);
+		    bi.bi_position = REISERFS_PATH_UPPOS (tb->tb_path, 1);
+		    reiserfs_lb_insert_unit (tb->tb_fs, &bi, item_pos, 
+					     pos_in_item, tb->insert_size[0],
+					     body, zeros_number);
+
+		    if (reiserfs_ih_ext (pasted)) {
+			reiserfs_ih_set_free (pasted, 0);
+		    }
+		    tb->insert_size[0] = 0;
+		}
+	    }
+	} /* case M_PASTE: */
+	}
+    }
+
+    return 0;
+} /* Leaf level of the tree is balanced (end of reiserfs_lb_balance) */
+
+static void print_tb (int mode, 
+		      int item_pos, 
+		      int pos_in_item, 
+		      reiserfs_tb_t * tb, 
+		      char * mes)
+{
+  unsigned int h = 0;
+  reiserfs_bh_t * tbSh, * tbFh;
+
+
+  if (!tb)
+    return;
+
+  printf ("\n********************** PRINT_TB for %s *******************\n", mes);
+  printf ("MODE=%c, ITEM_POS=%d POS_IN_ITEM=%d\n", mode, item_pos, pos_in_item);
+  printf ("*********************************************************************\n");
+
+  printf ("* h *    S    *    L    *    R    *   F   *   FL  *   FR  *  CFL  *  CFR  *\n");
+  
+  for (h = 0; h < sizeof(tb->insert_size) / sizeof (tb->insert_size[0]); h ++) {
+    if (REISERFS_PATH_LEVEL (tb->tb_path, h) <= tb->tb_path->path_length && 
+	REISERFS_PATH_LEVEL (tb->tb_path, h) > REISERFS_PATH_OFFILL) {
+      tbSh = REISERFS_PATH_UPBUFFER (tb->tb_path, h);
+      tbFh = REISERFS_PATH_UPPARENT (tb->tb_path, h);
+    } else {
+      /*      printk ("print_tb: h=%d, REISERFS_PATH_LEVEL=%d, path_length=%d\n", 
+	      h, REISERFS_PATH_LEVEL (tb->tb_path, h), tb->tb_path->path_length);*/
+      tbSh = 0;
+      tbFh = 0;
+    }
+    printf ("* %u * %3lu(%2lu) * %3lu(%2lu) * %3lu(%2lu) * %5ld * "
+	    "%5ld * %5ld * %5ld * %5ld *\n",
+	    h, 
+	    tbSh ? tbSh->b_blocknr : ~0ul,
+	    tbSh ? tbSh->b_count : ~0ul,
+	    tb->L[h] ? tb->L[h]->b_blocknr : ~0ul,
+	    tb->L[h] ? tb->L[h]->b_count : ~0ul,
+	    tb->R[h] ? tb->R[h]->b_blocknr : ~0ul,
+	    tb->R[h] ? tb->R[h]->b_count : ~0ul,
+	    tbFh ? tbFh->b_blocknr : ~0ul,
+	    tb->FL[h] ? tb->FL[h]->b_blocknr : ~0ul,
+	    tb->FR[h] ? tb->FR[h]->b_blocknr : ~0ul,
+	    tb->CFL[h] ? tb->CFL[h]->b_blocknr : ~0ul,
+	    tb->CFR[h] ? tb->CFR[h]->b_blocknr : ~0ul);
+  }
+
+  printf ("*********************************************************************\n");
+
+
+  /* print balance parameters for leaf level */
+  h = 0;
+  printf ("* h * size * ln * lb * rn * rb * blkn * s0 * "
+	  "s1 * s1b * s2 * s2b * curb * lk * rk *\n");
+  printf ("* %d * %4d * %2d * %2d * %2d * %2d * %4d * %2d "
+	  "* %2d * %3d * %2d * %3d * %4d * %2d * %2d *\n",
+	  h, tb->insert_size[h], tb->lnum[h], tb->lbytes, 
+	  tb->rnum[h],tb->rbytes, tb->blknum[h], 
+	  tb->s0num, tb->s1num,tb->s1bytes,  tb->s2num, 
+	  tb->s2bytes, tb->cur_blknum, tb->lkey[h], tb->rkey[h]);
+
+  /* this prints balance parameters for non-leaf levels */
+  do {
+    h++;
+    printf ("* %d * %4d * %2d *    * %2d *    * %2d *\n",
+    h, tb->insert_size[h], tb->lnum[h], tb->rnum[h], tb->blknum[h]);
+  } while (tb->insert_size[h]);
+
+  printf ("*********************************************************************\n");
+
+
+  /* print FEB list (list of buffers in form (bh (b_blocknr, b_count), 
+     that will be used for new nodes) */
+  for (h = 0; h < sizeof (tb->FEB) / sizeof (tb->FEB[0]); h++)
+    printf("%s%p (%lu %d)", h == 0 ? "FEB list: " : ", ", 
+	   tb->FEB[h], tb->FEB[h] ? tb->FEB[h]->b_blocknr : 0,
+	    tb->FEB[h] ? tb->FEB[h]->b_count : 0);
+  
+  printf ("\n");
+  printf ("********************** END OF PRINT_TB *******************\n\n");
+}
+
diff --git a/libreiserfs/libreiserfs.c b/libreiserfs/libreiserfs.c
new file mode 100644
index 0000000..5f730db
--- /dev/null
+++ b/libreiserfs/libreiserfs.c
@@ -0,0 +1,24 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+
+#ifdef LIBREISERFS_READY
+int libreiserfs_max_interface_version(void) {
+	return LIBREISER4_MAX_INTERFACE_VERSION;
+}
+
+int libreiserfs_min_interface_version(void) {
+	return LIBREISER4_MIN_INTERFACE_VERSION;
+}
+
+const char *libreiserfs_version(void) {
+	return VERSION;
+}
+#endif
diff --git a/libreiserfs/node.c b/libreiserfs/node.c
new file mode 100644
index 0000000..abdd244
--- /dev/null
+++ b/libreiserfs/node.c
@@ -0,0 +1,130 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+
+#include <stdarg.h>
+
+/* Replace n_dest'th key in buffer dest by n_src'th key of buffer src.*/
+void reiserfs_node_replace_key (reiserfs_bh_t * dest, int n_dest,
+				reiserfs_bh_t * src, int n_src)
+{
+    if (dest) {
+	if (reiserfs_leaf_head (src)) {
+	    /* source buffer contains leaf node */
+	    memcpy (reiserfs_int_key_at(dest,n_dest), 
+		    reiserfs_ih_at(src,n_src), REISERFS_KEY_SIZE);
+	} else {
+	    memcpy (reiserfs_int_key_at(dest,n_dest), 
+		    reiserfs_int_key_at(src,n_src), REISERFS_KEY_SIZE);
+	}
+	
+	reiserfs_buffer_mkdirty(dest);
+    }
+}
+
+void reiserfs_node_forget(reiserfs_filsys_t *fs, unsigned long blk) {
+    reiserfs_bh_t * to_be_forgotten;
+
+    to_be_forgotten = reiserfs_buffer_find (fs->fs_dev, blk, fs->fs_blocksize);
+    
+    if (to_be_forgotten) {
+	reiserfs_nh_set_level(NODE_HEAD(to_be_forgotten), FREE_LEVEL);
+	to_be_forgotten->b_count ++;
+	reiserfs_buffer_forget (to_be_forgotten);
+    }
+
+    if (fs->block_deallocator)
+	fs->block_deallocator (fs, blk);
+}
+
+// make sure that bh contains formatted node of reiserfs tree of
+// 'level'-th level
+int reiserfs_node_formatted (reiserfs_bh_t * bh, int level)
+{
+    if (reiserfs_node_level (bh) != level)
+	return 0;
+    if (reiserfs_leaf_head (bh))
+	return reiserfs_leaf_valid(bh);
+
+    return reiserfs_internal_correct (bh);
+}
+
+/* returns code of reiserfs metadata block (leaf, internal, super
+   block, journal descriptor), unformatted */
+int reiserfs_node_type (reiserfs_bh_t *bh) {
+    int res;
+    
+    /* super block? */
+    if (reiserfs_super_valid(bh))
+	return NT_SUPER;
+
+    if ((res = reiserfs_leaf_valid(bh)))
+	/* if block head and item head array seem matching (node level, free
+           space, item number, item locations and length), then it is NT_LEAF,
+	  otherwise, it is NT_IH_ARRAY */
+	return res;
+
+    if (reiserfs_internal_correct(bh))
+	return NT_INTERNAL;
+
+
+    /* journal descriptor block? */
+    if (reiserfs_journal_desc_valid(bh))
+	return NT_JDESC;
+
+    /* contents of buf does not look like reiserfs metadata. Bitmaps
+       are possible here */
+    return NT_UNKNOWN;
+}
+
+char *node_name[NT_UNKNOWN + 1] = {
+    "",
+    "leaf", 
+    "internal", 
+    "super", 
+    "journal descriptor", 
+    "broken leaf", 
+    "unknown"
+};
+
+char * reiserfs_node_type_name(int code) {
+    return code >= NT_LEAF && code < NT_UNKNOWN ? 
+	    node_name[code] : node_name[NT_UNKNOWN];
+}
+
+void reiserfs_node_print (FILE * fp, 
+			  reiserfs_filsys_t * fs, 
+			  reiserfs_bh_t * bh, ...)
+		       /* int print_mode, 
+			  int first, 
+			  int last         */
+{
+    va_list args;
+    int mode, first, last;
+    char * file_name;
+
+    va_start (args, bh);
+
+    if ( ! bh ) {
+	reiserfs_warning (stderr, "reiserfs_node_print: buffer is NULL\n");
+	return;
+    }
+
+    mode = va_arg (args, int);
+    first = va_arg (args, int);
+    last = va_arg (args, int);
+    file_name = (fs) ? fs->fs_file_name : NULL ;
+    if (reiserfs_print_jdesc (fp, bh))
+        if (reiserfs_super_print (fp, fs, file_name, bh, 0))
+	    if (reiserfs_leaf_print (fp, fs, bh, mode, first, last))
+		if (reiserfs_internal_print (fp, bh, first, last))
+		    reiserfs_warning (fp, "Block %ld contains unformatted data\n", bh->b_blocknr);
+}
+
diff --git a/libreiserfs/objmap.c b/libreiserfs/objmap.c
new file mode 100644
index 0000000..d4e64f2
--- /dev/null
+++ b/libreiserfs/objmap.c
@@ -0,0 +1,165 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+
+static int comp_ids (const void * p1, const void * p2) {
+    __u32 id1 = le32_to_cpu(*(__u32 *)p1) ;
+    __u32 id2 = le32_to_cpu(*(__u32 *)p2) ;
+
+    if (id1 < id2)
+        return -1;
+    if (id1 > id2)
+        return 1 ;
+    return 0 ;
+}
+
+/* functions to manipulate with super block's objectid map */
+
+int reiserfs_objmap_test (reiserfs_filsys_t * fs, __u32 objectid)
+{
+    __u32 * objectid_map;
+    __u32 count = reiserfs_sb_get_mapcur(fs->fs_ondisk_sb);
+    int ret;
+    int pos;
+
+    objectid_map = (__u32 *)((char *)fs->fs_ondisk_sb + 
+			     reiserfs_super_size (fs->fs_ondisk_sb));
+    
+    ret = misc_bin_search(&objectid, objectid_map, count, 
+			  sizeof(__u32), &pos, comp_ids);
+
+    /* if the position returned is odd, the oid is in use */
+    if (ret == 0)
+	return ((__u32)pos & 1);
+
+    /* if the position returned is even, the oid is in use */
+    return !((__u32)pos & 1) ;
+}
+
+
+void reiserfs_objmap_set (reiserfs_filsys_t * fs, __u32 objectid)
+{
+    int i;
+    __u32 * objectid_map;
+    int cursize;
+
+
+    if (reiserfs_objmap_test (fs, objectid)) {
+	return;
+    }
+
+    objectid_map = (__u32 *)((char *)fs->fs_ondisk_sb + 
+			     reiserfs_super_size (fs->fs_ondisk_sb));
+    
+    cursize = reiserfs_sb_get_mapcur (fs->fs_ondisk_sb);
+
+    for (i = 0; i < cursize; i += 2) {
+	if (objectid >= le32_to_cpu (objectid_map [i]) &&
+	    objectid < le32_to_cpu (objectid_map [i + 1]))
+	    /* it is used */
+	    return;
+	
+	if (objectid + 1 == le32_to_cpu (objectid_map[i])) {
+	    /* size of objectid map does not change */
+	    objectid_map[i] = cpu_to_le32 (objectid);
+	    return;
+	}
+	
+	if (objectid == le32_to_cpu (objectid_map[i + 1])) {
+	    /* size of objectid map is decreased */
+	    objectid_map [i + 1] = 
+		    cpu_to_le32 (le32_to_cpu (objectid_map [i + 1]) + 1);
+
+	    if (i + 2 < cursize) {
+		if (objectid_map[i + 1] == objectid_map[i + 2]) {
+		    memmove (objectid_map + i + 1, objectid_map + i + 1 + 2, 
+			     (cursize - (i + 2 + 2 - 1)) * sizeof (__u32));
+		    reiserfs_sb_set_mapcur (fs->fs_ondisk_sb, cursize - 2);
+		}
+	    }
+	    return;
+	}
+	
+	if (objectid < le32_to_cpu (objectid_map[i])) {
+	    /* size of objectid map must be increased */
+	    if (cursize == reiserfs_sb_get_mapmax (fs->fs_ondisk_sb)) {
+		/* here all objectids between objectid and objectid_map[i] get
+                   used */
+		objectid_map[i] = cpu_to_le32 (objectid);
+		return;
+	    } else {
+		memmove (objectid_map + i + 2, objectid_map + i, 
+			 (cursize - i) * sizeof (__u32));
+		
+		reiserfs_sb_set_mapcur (fs->fs_ondisk_sb, cursize + 2);
+	    }
+	    
+	    objectid_map[i] = cpu_to_le32 (objectid);
+	    objectid_map[i+1] = cpu_to_le32 (objectid + 1);
+	    return;
+	}
+	
+    }
+    
+    /* append to current objectid map, if we have space */
+    if (i < reiserfs_sb_get_mapmax (fs->fs_ondisk_sb)) {
+	objectid_map[i] = cpu_to_le32 (objectid);
+	objectid_map[i + 1] = cpu_to_le32 (objectid + 1);
+	reiserfs_sb_set_mapcur (fs->fs_ondisk_sb, cursize + 2);
+    } else if (i == reiserfs_sb_get_mapmax (fs->fs_ondisk_sb)) {
+	objectid_map[i - 1] = cpu_to_le32 (objectid + 1);
+    } else
+	misc_die ("mark_objectid_as_used: objectid map corrupted");
+    
+    return;
+}
+
+
+void reiserfs_objmap_print (FILE * fp, reiserfs_filsys_t * fs)
+{
+    int i;
+    reiserfs_sb_t * sb;
+    __u32 * omap;
+
+
+    sb = fs->fs_ondisk_sb;
+    if (fs->fs_format == REISERFS_FORMAT_3_6)
+	omap = (__u32 *)(sb + 1);
+    else if (fs->fs_format == REISERFS_FORMAT_3_5)
+	omap = (__u32 *)((reiserfs_sb_v1_t *)sb + 1);
+    else {
+	reiserfs_warning (fp, "reiserfs_objmap_print: proper "
+			  "signature is not found\n");
+	return;
+    }
+	
+    reiserfs_warning (fp, "Map of objectids (super block size %d)\n",
+		      (char *)omap - (char *)sb);
+      
+    for (i = 0; i < reiserfs_sb_get_mapcur (sb); i ++) {
+	if (i % 2 == 0) {
+	    reiserfs_warning(fp, "busy(%u-%u) ", le32_to_cpu (omap[i]),
+			     le32_to_cpu (omap[i+1]) - 1); 
+	} else {
+	    reiserfs_warning(fp, "free(%u-%u) ", le32_to_cpu (omap[i]),
+			    ((i+1) == reiserfs_sb_get_mapcur (sb)) ? 
+			    ~(__u32)0 : (le32_to_cpu (omap[i+1]) - 1));
+	}
+    }
+
+    reiserfs_warning (fp, "\nObject id array has size %d (max %d):", 
+		      reiserfs_sb_get_mapcur (sb), reiserfs_sb_get_mapmax (sb));
+  
+    for (i = 0; i < reiserfs_sb_get_mapcur (sb); i ++)
+	reiserfs_warning (fp, "%s%u ", i % 2 ? "" : "*", le32_to_cpu (omap[i])); 
+    reiserfs_warning (fp, "\n");
+
+}
+
diff --git a/libreiserfs/prints.c b/libreiserfs/prints.c
new file mode 100644
index 0000000..452dd34
--- /dev/null
+++ b/libreiserfs/prints.c
@@ -0,0 +1,200 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+#include "misc/device.h"
+
+#include <sys/stat.h>
+#include <printf.h>
+#include <stdarg.h>
+
+#if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)
+#  include <uuid/uuid.h>
+#endif
+
+#define PA_KEY		(PA_LAST)
+#define PA_BUFFER_HEAD	(PA_LAST + 1)
+#define PA_ITEM_HEAD	(PA_LAST + 2)
+#define PA_DISK_CHILD	(PA_LAST + 3)
+
+static int _arginfo_b (const struct printf_info *info, size_t n, int *argtypes) {
+    if (n > 0)
+	argtypes[0] = PA_BUFFER_HEAD | PA_FLAG_PTR;
+    return 1;
+}
+
+static int _arginfo_K (const struct printf_info *info, size_t n, int *argtypes) {
+    if (n > 0)
+	argtypes[0] = PA_KEY | PA_FLAG_PTR;
+    return 1;
+}
+
+static int _arginfo_H (const struct printf_info *info, size_t n, int *argtypes) {
+    if (n > 0)
+	argtypes[0] = PA_ITEM_HEAD | PA_FLAG_PTR;
+    return 1;
+}
+
+static int _arginfo_y (const struct printf_info *info, size_t n, int *argtypes) {
+    if (n > 0)
+	argtypes[0] = PA_DISK_CHILD | PA_FLAG_PTR;
+    return 1;
+}
+
+static int _arginfo_M (const struct printf_info *info, size_t n, int *argtypes) {
+    if (n > 0)
+	argtypes[0] = PA_INT | PA_FLAG_SHORT | PA_FLAG_PTR;
+    return 1;
+}
+
+static int _arginfo_U (const struct printf_info *info, size_t n, int *argtypes) {
+    if (n > 0)
+	argtypes[0] = (PA_CHAR|PA_FLAG_PTR);
+    return 1;
+}
+
+/* %b */
+static int print_block_head (FILE * stream,
+			     const struct printf_info *info,
+			     const void *const *args)
+{
+    const reiserfs_bh_t * bh;
+
+    bh = *((const reiserfs_bh_t **)(args[0]));
+    return fprintf(stream, "level=%d, nr_items=%d, free_space=%d rdkey",
+		    reiserfs_node_level (bh), reiserfs_node_items (bh), 
+		    reiserfs_node_free (bh));
+}
+
+
+/* %K */
+static int print_short_key (FILE * stream,
+			    const struct printf_info *info,
+			    const void *const *args)
+{
+    const reiserfs_key_t * key;
+
+    key = *((const reiserfs_key_t **)(args[0]));
+    return fprintf(stream, "[%u %u]", reiserfs_key_get_did (key),
+		    reiserfs_key_get_oid (key));
+}
+
+
+/* %k */
+static int print_key (FILE * stream,
+		      const struct printf_info *info,
+		      const void *const *args)
+{
+    const reiserfs_key_t * key;
+
+    key = *((const reiserfs_key_t **)(args[0]));
+    return fprintf(stream, "[%u %u 0x%Lx %s (%d)]",  
+		    reiserfs_key_get_did (key), reiserfs_key_get_oid (key),
+		    (unsigned long long)reiserfs_key_get_off (key), 
+		    reiserfs_key_name (key), reiserfs_key_get_type (key));
+}
+
+
+/* %H */
+static int print_item_head (FILE * stream,
+			    const struct printf_info *info,
+			    const void *const *args)
+{
+    const reiserfs_ih_t * ih;
+
+    ih = *((const reiserfs_ih_t **)(args[0]));
+    return fprintf(stream, "%u %u 0x%Lx %s (%d), len %u, location "
+		   "%u entry count %u, fsck need %u, format %s",
+		   reiserfs_key_get_did (&ih->ih_key), 
+		   reiserfs_key_get_oid (&ih->ih_key),
+		    (unsigned long long)reiserfs_key_get_off (&ih->ih_key), 
+		    reiserfs_key_name (&ih->ih_key),
+		    reiserfs_key_get_type (&ih->ih_key), 
+		    reiserfs_ih_get_len (ih), reiserfs_ih_get_loc (ih),
+		    reiserfs_ih_get_entries (ih), reiserfs_ih_get_flags (ih),
+		    reiserfs_ih_get_format (ih) == KEY_FORMAT_2 ? "new" : 
+		    ((reiserfs_ih_get_format (ih) == KEY_FORMAT_1) ? "old" : "BAD"));
+}
+
+
+static int print_disk_child (FILE * stream,
+			     const struct printf_info *info,
+			     const void *const *args)
+{
+    const reiserfs_dc_t * dc;
+
+    dc = *((const reiserfs_dc_t **)(args[0]));
+    return fprintf(stream, "[dc_number=%u, dc_size=%u]", 
+		   reiserfs_dc_get_nr (dc), reiserfs_dc_get_size (dc));
+}
+
+static int rwx (FILE * stream, mode_t mode)
+{
+    return fprintf (stream, "%c%c%c",
+		    (mode & S_IRUSR) ? 'r' : '-',
+		    (mode & S_IWUSR) ? 'w' : '-',
+		    (mode & S_IXUSR) ? 'x' : '-');
+}
+
+
+/* %M */
+static int print_sd_mode (FILE * stream,
+			  const struct printf_info *info,
+			  const void *const *args)
+{
+    int len = 0;
+    __u16 mode;
+
+    mode = *(mode_t *)args[0];
+    len = fprintf (stream, "%c", misc_device_typec (mode));
+    len += rwx (stream, (mode & 0700) << 0);
+    len += rwx (stream, (mode & 0070) << 3);
+    len += rwx (stream, (mode & 0007) << 6);
+    return len;
+}
+
+/* %U */
+static int print_sd_uuid (FILE * stream,
+			  const struct printf_info *info,
+			  const void *const *args)
+{
+#if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)
+    const unsigned char *uuid = *((const unsigned char **)(args[0]));
+    char buf[37];
+
+    buf[36] = '\0';
+    uuid_unparse(uuid, buf);
+    return fprintf(stream, "%s", buf);
+#else
+    return fprintf(stream, "<no libuuid installed>");
+#endif
+}
+
+void reiserfs_warning (FILE * fp, const char * fmt, ...) 
+{
+    static int registered = 0;
+    va_list args;
+
+    if (!registered) {
+	registered = 1;
+	
+	register_printf_function ('K', print_short_key, _arginfo_K);
+	register_printf_function ('k', print_key, _arginfo_K);
+	register_printf_function ('H', print_item_head, _arginfo_H);
+	register_printf_function ('b', print_block_head, _arginfo_b);
+	register_printf_function ('y', print_disk_child, _arginfo_y);
+	register_printf_function ('M', print_sd_mode, _arginfo_M);
+	register_printf_function ('U', print_sd_uuid, _arginfo_U);
+    }
+
+    va_start (args, fmt);
+    vfprintf (fp, fmt, args);
+    va_end (args);
+}
+
diff --git a/libreiserfs/stat.c b/libreiserfs/stat.c
new file mode 100644
index 0000000..846b11e
--- /dev/null
+++ b/libreiserfs/stat.c
@@ -0,0 +1,219 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <time.h>
+
+/* access to fields of stat data (both v1 and v2) */
+
+static void reiserfs_stat_field (int field, 
+				 reiserfs_ih_t * ih, 
+				 void * sd,
+				 void * value, 
+				 int set)
+{
+    if (reiserfs_ih_get_format (ih) == KEY_FORMAT_1) {
+	reiserfs_sd_v1_t * sd_v1 = sd;
+
+	switch (field) {
+	case STAT_MODE:
+	    if (set)
+		sd_v1->sd_mode = cpu_to_le16 (*(__u16 *)value);
+	    else
+		*(__u16 *)value = le16_to_cpu (sd_v1->sd_mode);
+	    break;
+
+	case STAT_SIZE:
+	    /* value must point to 64 bit int */
+	    if (set)
+		sd_v1->sd_size = cpu_to_le32 (*(__u64 *)value);
+	    else
+		*(__u64 *)value = le32_to_cpu (sd_v1->sd_size);
+	    break;
+
+	case STAT_BLOCKS:
+	    if (set)
+		sd_v1->u.sd_blocks = cpu_to_le32 (*(__u32 *)value);
+	    else
+		*(__u32 *)value = le32_to_cpu (sd_v1->u.sd_blocks);
+	    break;
+
+	case STAT_NLINK:
+	    /* value must point to 32 bit int */
+	    if (set)
+		sd_v1->sd_nlink = cpu_to_le16 (*(__u32 *)value);
+	    else
+		*(__u32 *)value = le16_to_cpu (sd_v1->sd_nlink);
+	    break;
+
+	case STAT_FDB:
+	    if (set)
+		sd_v1->sd_fdb = cpu_to_le32 (*(__u32 *)value);
+	    else
+		*(__u32 *)value = le32_to_cpu (sd_v1->sd_fdb);
+	    break;
+	    
+	default:
+	    reiserfs_panic ("reiserfs_stat_set: unknown field of old stat data");
+	}
+    } else {
+	reiserfs_sd_t * sd_v2 = sd;
+
+	switch (field) {
+	case STAT_MODE:
+	    if (set)
+		sd_v2->sd_mode = cpu_to_le16 (*(__u16 *)value);
+	    else
+		*(__u16 *)value = le16_to_cpu (sd_v2->sd_mode);
+	    break;
+
+	case STAT_SIZE:
+	    if (set)
+		sd_v2->sd_size = cpu_to_le64 (*(__u64 *)value);
+	    else
+		*(__u64 *)value = le64_to_cpu (sd_v2->sd_size);
+	    break;
+
+	case STAT_BLOCKS:
+	    if (set)
+		sd_v2->sd_blocks = cpu_to_le32 (*(__u32 *)value);
+	    else
+		*(__u32 *)value = le32_to_cpu (sd_v2->sd_blocks);
+	    break;
+
+	case STAT_NLINK:
+	    if (set)
+		sd_v2->sd_nlink = cpu_to_le32 (*(__u32 *)value);
+	    else
+		*(__u32 *)value = le32_to_cpu (sd_v2->sd_nlink);
+	    break;
+
+	case STAT_FDB:
+	default:
+	    reiserfs_panic ("reiserfs_stat_set: unknown field of new stat data");
+	}
+    }
+}
+
+void reiserfs_stat_set (int field, reiserfs_ih_t * ih, 
+			void * sd, void * value)
+{
+	reiserfs_stat_field(field, ih, sd, value, 1/*set*/);
+}
+
+void reiserfs_stat_get (int field, reiserfs_ih_t * ih, 
+			void * sd, void * value)
+{
+	reiserfs_stat_field(field, ih, sd, value, 0/*get*/);
+}
+
+
+/* prepare new or old stat data for the new directory */
+void reiserfs_stat_init (int blocksize, int key_format, 
+			 __u32 dirid, __u32 objectid, 
+			 reiserfs_ih_t * ih, void * sd)
+{
+    memset (ih, 0, REISERFS_IH_SIZE);
+    reiserfs_key_set_did (&ih->ih_key, dirid);
+    reiserfs_key_set_oid (&ih->ih_key, objectid);
+    reiserfs_key_set_off1 (&ih->ih_key, OFFSET_SD);
+    reiserfs_key_set_uni (&ih->ih_key, 0);
+
+    reiserfs_ih_set_format (ih, key_format);
+    reiserfs_ih_set_free (ih, MAX_US_INT);
+    
+    if (key_format == KEY_FORMAT_2) {
+        reiserfs_sd_t *sd_v2 = (reiserfs_sd_t *)sd;
+
+	reiserfs_ih_set_len (ih, REISERFS_SD_SIZE);
+        reiserfs_set_sd_v2_mode (sd_v2, S_IFDIR + 0755);
+        reiserfs_set_sd_v2_nlink (sd_v2, 2);
+        reiserfs_set_sd_v2_uid (sd_v2, 0);
+        reiserfs_set_sd_v2_gid (sd_v2, 0);
+        reiserfs_set_sd_v2_size (sd_v2, REISERFS_DIR_MIN);
+        reiserfs_set_sd_v2_atime (sd_v2, time(NULL));
+        sd_v2->sd_ctime = sd_v2->sd_mtime = sd_v2->sd_atime; /* all le */
+        reiserfs_set_sd_v2_rdev (sd_v2, 0);
+        reiserfs_set_sd_v2_blocks (sd_v2, REISERFS_DIR_BLOCKS (REISERFS_DIR_MIN));
+    }else{
+        reiserfs_sd_v1_t *sd_v1 = (reiserfs_sd_v1_t *)sd;
+
+	reiserfs_ih_set_len (ih, REISERFS_SD_SIZE_V1);
+        reiserfs_set_sd_v1_mode(sd_v1, S_IFDIR + 0755);
+        reiserfs_set_sd_v1_nlink(sd_v1, 2);
+        reiserfs_set_sd_v1_uid (sd_v1, 0);
+        reiserfs_set_sd_v1_gid (sd_v1, 0);
+        reiserfs_set_sd_v1_size(sd_v1, REISERFS_DIR_MIN_V1);
+        reiserfs_set_sd_v1_atime(sd_v1, time(NULL));
+        sd_v1->sd_ctime = sd_v1->sd_mtime = sd_v1->sd_atime; /* all le */
+        reiserfs_set_sd_v1_blocks(sd_v1, REISERFS_DIR_BLOCKS(REISERFS_DIR_MIN_V1));
+        reiserfs_set_sd_v1_fdb(sd_v1, REISERFS_SD_NODIRECT);
+    }
+}
+
+char timebuf[256];
+
+static char * timestamp (time_t t)
+{
+    strftime (timebuf, 256, "%d/%Y %T", localtime (&t));
+    return timebuf;
+}
+
+int reiserfs_print_stat_data (FILE * fp, reiserfs_bh_t * bh, 
+			      reiserfs_ih_t * ih, int alltimes)
+{
+    int retval;
+    
+
+    /* we cannot figure out if it is new stat data or old by key_format
+       macro. Stat data's key looks identical in both formats */
+    if (reiserfs_ih_get_format (ih) == KEY_FORMAT_1) {
+        reiserfs_sd_v1_t * sd_v1 = 
+		(reiserfs_sd_v1_t *)reiserfs_item_by_ih (bh, ih);
+	
+	reiserfs_warning (fp, "(OLD SD), mode %M, size %u, nlink %u, uid %u, "
+			  "FDB %u, mtime %s blocks %u", 
+			  reiserfs_sd_v1_mode(sd_v1), 
+			  reiserfs_sd_v1_size(sd_v1), 
+			  reiserfs_sd_v1_nlink(sd_v1),
+			  reiserfs_sd_v1_uid(sd_v1), 
+			  reiserfs_sd_v1_fdb(sd_v1), 
+			  timestamp(reiserfs_sd_v1_mtime(sd_v1)), 
+			  reiserfs_sd_v1_blocks(sd_v1));
+	
+	retval = (S_ISLNK (reiserfs_sd_v1_mode(sd_v1))) ? 1 : 0;
+	
+        if (alltimes)
+            reiserfs_warning (fp, "%s %s\n", 
+			      timestamp (reiserfs_sd_v1_ctime(sd_v1)),
+			      timestamp (reiserfs_sd_v1_atime(sd_v1)));
+    } else {
+        reiserfs_sd_t * sd = (reiserfs_sd_t *)reiserfs_item_by_ih (bh, ih);
+	reiserfs_warning (fp, "(NEW SD), mode %M, size %Lu, nlink %u, mtime "
+			  "%s blocks %u, uid %u", reiserfs_sd_v2_mode(sd), 
+			  reiserfs_sd_v2_size(sd), reiserfs_sd_v2_nlink(sd), 
+			  timestamp (reiserfs_sd_v2_mtime(sd)), 
+			  reiserfs_sd_v2_blocks(sd), reiserfs_sd_v2_uid(sd));
+	
+	retval = (S_ISLNK (reiserfs_sd_v2_mode(sd))) ? 1 : 0;
+        if (alltimes)
+            reiserfs_warning (fp, "%s %s\n", 
+			      timestamp (reiserfs_sd_v2_ctime(sd)),
+			      timestamp (reiserfs_sd_v2_atime(sd)));
+    }
+
+    reiserfs_warning (fp, "\n");
+    return retval;
+}
+
+
diff --git a/libreiserfs/super.c b/libreiserfs/super.c
new file mode 100644
index 0000000..627a442
--- /dev/null
+++ b/libreiserfs/super.c
@@ -0,0 +1,192 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+
+int reiserfs_super_35_magic (reiserfs_sb_t * rs)
+{
+    return (!strncmp (rs->s_v1.s_magic, REISERFS_3_5_SUPER_MAGIC_STRING, 
+		      strlen ( REISERFS_3_5_SUPER_MAGIC_STRING)));
+}
+
+
+int reiserfs_super_36_magic (reiserfs_sb_t * rs)
+{
+    return (!strncmp (rs->s_v1.s_magic, REISERFS_3_6_SUPER_MAGIC_STRING, 
+		      strlen ( REISERFS_3_6_SUPER_MAGIC_STRING)));
+}
+
+
+int reiserfs_super_jr_magic (reiserfs_sb_t * rs)
+{
+    return (!strncmp (rs->s_v1.s_magic, REISERFS_JR_SUPER_MAGIC_STRING, 
+		      strlen ( REISERFS_JR_SUPER_MAGIC_STRING)));
+}
+
+
+int reiserfs_super_magic (reiserfs_sb_t * rs)
+{
+    if (reiserfs_super_35_magic (rs) ||
+	reiserfs_super_36_magic (rs) ||
+	reiserfs_super_jr_magic (rs))
+	return 1;
+    return 0;
+}
+
+
+int reiserfs_super_format (reiserfs_sb_t * sb)
+{
+    /* after conversion to 3.6 format we change magic correctly, 
+       but do not change sb_format. When we create non-standard journal 
+       field format in sb get adjusted correctly. Thereby, for standard 
+       journal we should rely on magic and for non-standard - on format */
+    if (reiserfs_super_35_magic (sb) ||
+	(reiserfs_super_jr_magic (sb) && 
+	 reiserfs_sb_get_version (sb) == REISERFS_FORMAT_3_5))
+	return REISERFS_FORMAT_3_5;
+
+    if (reiserfs_super_36_magic (sb) ||
+	(reiserfs_super_jr_magic (sb) &&
+	 reiserfs_sb_get_version (sb) == REISERFS_FORMAT_3_6))
+	return REISERFS_FORMAT_3_6;
+
+    return REISERFS_FORMAT_UNKNOWN;
+}
+
+int reiserfs_super_size (reiserfs_sb_t * sb)
+{
+    switch (reiserfs_super_format (sb)) {
+    case REISERFS_FORMAT_3_5:
+	return REISERFS_SB_SIZE_V1;
+    case REISERFS_FORMAT_3_6:
+	return REISERFS_SB_SIZE;
+    }
+    reiserfs_panic ("Unknown format found");
+    return 0;
+}
+
+/* this one had signature in different place of the super_block
+   structure */
+int reiserfs_super_prejournaled (reiserfs_sb_t * rs)
+{
+    return (!strncmp((char*)rs + REISERFS_SUPER_MAGIC_STRING_OFFSET_NJ,
+		     REISERFS_3_5_SUPER_MAGIC_STRING,
+		     strlen(REISERFS_3_5_SUPER_MAGIC_STRING)));
+}
+
+int reiserfs_super_valid(reiserfs_bh_t *bh) {
+    reiserfs_sb_t *sb;
+
+    sb = (reiserfs_sb_t *)bh->b_data;
+    
+    if (!reiserfs_super_magic (sb))
+    	return 0;
+    
+    if (!reiserfs_fs_blksize_check(reiserfs_sb_get_blksize (sb)))
+	return 0;
+	
+    return 1;
+}
+
+/* return 1 if this is not super block */
+int reiserfs_super_print (FILE * fp, 
+			  reiserfs_filsys_t * fs, 
+			  char * file_name,
+			  reiserfs_bh_t * bh, 
+			  int short_print)
+{
+    reiserfs_sb_t * sb = (reiserfs_sb_t *)(bh->b_data);
+    int format = 0;
+    __u16 state;
+
+    if (!reiserfs_super_valid(bh))
+	return 1;
+
+    /* Print volume label if it is non-empty. */
+    if (sb->s_label[0])
+	    reiserfs_warning (fp, "%s: ", sb->s_label);
+    else
+	    reiserfs_warning (fp, "%s: ", fs->fs_file_name);
+    
+    reiserfs_warning (fp, "Reiserfs super block in block %lu on %s of ",
+		      bh->b_blocknr, fs->fs_file_name);
+    switch (reiserfs_super_format (sb)) {
+    case REISERFS_FORMAT_3_5:
+	reiserfs_warning (fp, "format 3.5 with ");
+        format = 1;
+	break;
+    case REISERFS_FORMAT_3_6:
+	reiserfs_warning (fp, "format 3.6 with ");
+        format = 2;
+	break;
+    default:
+	reiserfs_warning (fp, "unknown format with ");
+	break;
+    }
+    if (reiserfs_super_jr_magic (sb))
+	reiserfs_warning (fp, "non-");
+    reiserfs_warning (fp, "standard journal\n");
+    if (short_print) {
+	reiserfs_warning (fp, "Blocks (total/free): %u/%u by %d bytes\n",
+		reiserfs_sb_get_blocks (sb), reiserfs_sb_get_free (sb), reiserfs_sb_get_blksize (sb));
+    } else {
+	reiserfs_warning (fp, "Count of blocks on the device: %u\n", reiserfs_sb_get_blocks (sb));
+	reiserfs_warning (fp, "Number of bitmaps: %u\n", reiserfs_sb_get_bmaps (sb));
+	reiserfs_warning (fp, "Blocksize: %d\n", reiserfs_sb_get_blksize (sb));
+	reiserfs_warning (fp, "Free blocks (count of blocks - used [journal, "
+		      "bitmaps, data, reserved] blocks): %u\n", reiserfs_sb_get_free (sb));
+	reiserfs_warning (fp, "Root block: %u\n", reiserfs_sb_get_root (sb));
+    }
+    reiserfs_warning (fp, "Filesystem is %sclean\n",
+		      (reiserfs_sb_get_umount (sb) == FS_CLEANLY_UMOUNTED) ? "" : "NOT ");
+
+    if (short_print)
+    	return 0;
+    reiserfs_warning (fp, "Tree height: %d\n", reiserfs_sb_get_height (sb));
+    reiserfs_warning (fp, "Hash function used to sort names: %s\n",
+		      reiserfs_hash_name (reiserfs_sb_get_hash (sb)));
+    reiserfs_warning (fp, "Objectid map size %d, max %d\n", reiserfs_sb_get_mapcur (sb),
+		      reiserfs_sb_get_mapmax (sb));
+    reiserfs_warning (fp, "Journal parameters:\n");
+    reiserfs_journal_print_params (fp, reiserfs_sb_jp (sb));
+    reiserfs_warning (fp, "Blocks reserved by journal: %u\n",
+		      reiserfs_sb_get_reserved (sb));
+    state = reiserfs_sb_get_state (sb);
+    reiserfs_warning (fp, "Fs state field: 0x%x:\n", state);
+    if ((state & FS_FATAL) == FS_FATAL)
+	reiserfs_warning (fp, "\tFATAL corruptions exist.\n");
+    if ((state & FS_ERROR) == FS_ERROR)
+	reiserfs_warning (fp, "\t some corruptions exist.\n");
+    if ((state & IO_ERROR) == IO_ERROR)
+	reiserfs_warning (fp, "\tI/O corruptions exist.\n");
+
+    reiserfs_warning (fp, "sb_version: %u\n", reiserfs_sb_get_version (sb));
+    if (format == 2) {
+        reiserfs_warning (fp, "inode generation number: %u\n", reiserfs_sb_get_gen (sb));
+        reiserfs_warning (fp, "UUID: %U\n", sb->s_uuid);
+        reiserfs_warning (fp, "LABEL: %.16s\n", sb->s_label);
+        reiserfs_warning (fp, "Set flags in SB:\n");
+	if ((reiserfs_sb_isflag (sb, reiserfs_attrs_cleared)))
+	    reiserfs_warning (fp, "\tATTRIBUTES CLEAN\n");
+    }
+
+    return 0;
+}
+
+
+void reiserfs_super_print_state (FILE * fp, reiserfs_filsys_t * fs)
+{
+    reiserfs_warning (fp, "\nFilesystem state: ");
+    if (reiserfs_sb_state_ok (fs))
+	reiserfs_warning (fp, "consistent\n\n");
+    else
+	reiserfs_warning (fp, "consistency is not checked after last mounting\n\n");
+}
+
+
diff --git a/libreiserfs/tree.c b/libreiserfs/tree.c
new file mode 100644
index 0000000..19d1422
--- /dev/null
+++ b/libreiserfs/tree.c
@@ -0,0 +1,963 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+#include "misc/unaligned.h"
+#include "misc/malloc.h"
+
+static int reiserfs_tree_search (reiserfs_filsys_t * fs, 
+				 const reiserfs_key_t * key,
+				 reiserfs_path_t * path, 
+				 misc_comp_func_t comp_func)
+{
+    reiserfs_bh_t * bh;   
+    unsigned long block;
+    reiserfs_path_element_t * curr;
+    int retval;
+    
+
+    block = reiserfs_sb_get_root (fs->fs_ondisk_sb);
+    if (reiserfs_fs_block(fs, block) != BT_UNKNOWN)
+	return IO_ERROR;
+    
+    path->path_length = REISERFS_PATH_OFFILL;
+    while (1) {
+	curr = REISERFS_PATH_ELEM (path, ++ path->path_length);
+	bh = curr->pe_buffer = reiserfs_buffer_read (fs->fs_dev, block, 
+						     fs->fs_blocksize);
+        if (bh == 0) {
+	    path->path_length --;
+	    reiserfs_tree_pathrelse (path);
+	    return ITEM_NOT_FOUND;
+	}
+	
+	retval = misc_bin_search (key, reiserfs_ih_key_at (bh, 0), 
+				  reiserfs_node_items (bh),
+				  reiserfs_leaf_head (bh) ? 
+				  REISERFS_IH_SIZE : REISERFS_KEY_SIZE,
+				  &(curr->pe_position), comp_func);
+	
+	if (retval == 1) {
+	    /* key found, return if this is leaf level */
+	    if (reiserfs_leaf_head (bh)) {
+		path->pos_in_item = 0;
+		return ITEM_FOUND;
+	    }
+	    curr->pe_position ++;
+	} else {
+	    /* key not found in the node */
+	    if (reiserfs_leaf_head (bh))
+		return ITEM_NOT_FOUND;
+	}
+	
+	block = reiserfs_dc_get_nr (reiserfs_int_at (bh, curr->pe_position));
+	
+	if (reiserfs_fs_block(fs, block) != BT_UNKNOWN)
+		return IO_ERROR;
+    }
+    
+    printf ("reiserfs_tree_search: you can not get here\n");
+    return ITEM_NOT_FOUND;
+}
+
+int reiserfs_tree_search_body (reiserfs_filsys_t * fs, 
+			       const reiserfs_key_t * key,
+			       reiserfs_path_t * path)
+{
+    return reiserfs_tree_search (fs, key, path, reiserfs_key_comp3);
+}
+
+
+int reiserfs_tree_search_item (reiserfs_filsys_t * fs, 
+			       const reiserfs_key_t * key,
+			       reiserfs_path_t * path)
+{
+    return reiserfs_tree_search (fs, key, path, reiserfs_key_comp);
+}
+
+
+/* key is key of byte in the regular file. This searches in tree
+   through items and in the found item as well */
+int reiserfs_tree_search_position (reiserfs_filsys_t * fs, 
+				   const reiserfs_key_t * key,
+				   reiserfs_path_t * path)
+{
+    const reiserfs_key_t * next_key;
+    reiserfs_bh_t * bh;
+    reiserfs_ih_t * ih;
+
+    if (reiserfs_tree_search_body (fs, key, path) == ITEM_FOUND) {
+    	ih = REISERFS_PATH_IH (path);
+
+	if (!reiserfs_ih_direct (ih) && !reiserfs_ih_ext (ih))
+	    return DIRECTORY_FOUND;
+
+	path->pos_in_item = 0;
+	return POSITION_FOUND;
+    }
+
+    bh = REISERFS_PATH_LEAF (path);
+    ih = REISERFS_PATH_IH (path);
+
+    if (REISERFS_PATH_LEAF_POS (path) == 0) {
+	/* previous item does not exist, that means we are in leftmost leaf of
+	 * the tree */
+	if (!reiserfs_key_comp2 (&ih->ih_key, key)) {
+	    if (!reiserfs_ih_direct (ih) && !reiserfs_ih_ext (ih))
+		return DIRECTORY_FOUND;
+	    return POSITION_NOT_FOUND;
+	}
+	return FILE_NOT_FOUND;
+    }
+
+    /* take previous item */
+    REISERFS_PATH_LEAF_POS (path) --;
+    ih --;
+
+    if (reiserfs_key_comp2 (&ih->ih_key, key) || reiserfs_ih_stat(ih)) {
+	/* previous item belongs to another object or is a stat data, check
+	 * next item */
+	REISERFS_PATH_LEAF_POS (path) ++;
+	if (REISERFS_PATH_LEAF_POS (path) < reiserfs_node_items (bh))
+	    /* next key is in the same node */
+	    next_key = reiserfs_ih_key_at (bh, REISERFS_PATH_LEAF_POS (path));
+	else
+	    next_key = reiserfs_tree_rkey (path, fs);
+	if (next_key == 0 || reiserfs_key_comp2 (next_key, key)) {
+	    /* there is no any part of such file in the tree */
+	    path->pos_in_item = 0;
+	    return FILE_NOT_FOUND;
+	}
+
+	if (reiserfs_key_dir (next_key)) {
+	    reiserfs_warning (stderr, "reiserfs_tree_search_position: looking "
+			      "for %k found a directory with the same key\n",
+			      next_key);
+	    
+	    return DIRECTORY_FOUND;
+	}
+
+	/* next item is the part of this file */
+	path->pos_in_item = 0;
+	return POSITION_NOT_FOUND;
+    }
+
+    if (reiserfs_ih_dir (ih)) {
+	return DIRECTORY_FOUND;
+    }
+
+    if (reiserfs_ih_stat(ih)) {
+	REISERFS_PATH_LEAF_POS (path) ++;
+	return FILE_NOT_FOUND;
+    }
+
+    /* previous item is part of desired file */
+    if (reiserfs_item_has_key (ih, key, bh->b_size)) {
+	path->pos_in_item = reiserfs_key_get_off (key) - 
+		reiserfs_key_get_off (&ih->ih_key);
+	
+	if (reiserfs_ih_ext (ih) )
+	    path->pos_in_item /= bh->b_size;
+	return POSITION_FOUND;
+    }
+
+    path->pos_in_item = reiserfs_ih_ext (ih) ? reiserfs_ext_count (ih) : 
+	    reiserfs_ih_get_len (ih);
+    
+    return POSITION_NOT_FOUND;
+}
+
+const reiserfs_key_t * reiserfs_tree_lkey (reiserfs_path_t * path, 
+					   reiserfs_filsys_t * fs)
+{
+    int pos, offset = path->path_length;
+    reiserfs_bh_t * bh;
+    reiserfs_sb_t * sb;
+
+    sb = fs->fs_ondisk_sb;
+    
+    if (offset < REISERFS_PATH_OFFINIT)
+	misc_die ("reiserfs_tree_lkey: illegal offset in the path (%d)", offset);
+
+    /* While not higher in path than first element. */
+    while (offset-- > REISERFS_PATH_OFFINIT) {
+	if (! reiserfs_buffer_uptodate (REISERFS_PATH_BUFFER (path, offset)) )
+	    misc_die ("reiserfs_tree_lkey: parent is not uptodate");
+	
+	/* Parent at the path is not in the tree now. */
+	if (! REISERFS_NODE_INTREE (bh = REISERFS_PATH_BUFFER (path, offset)))
+	    misc_die ("reiserfs_tree_lkey: buffer on the path is not in tree");
+
+	/* Check whether position in the parent is correct. */
+	if ((pos = REISERFS_PATH_POS (path, offset)) > reiserfs_node_items (bh))
+	    misc_die ("reiserfs_tree_lkey: invalid position (%d) in the path", pos);
+
+	/* Check whether parent at the path really points to the child. */
+	if (reiserfs_dc_get_nr (reiserfs_int_at (bh, pos)) != 
+	    REISERFS_PATH_BUFFER (path, offset + 1)->b_blocknr)
+	{
+	    misc_die ("reiserfs_tree_lkey: invalid block number (%d). Must be %ld",
+		 reiserfs_dc_get_nr (reiserfs_int_at (bh, pos)), 
+		 REISERFS_PATH_BUFFER (path, offset + 1)->b_blocknr);
+	}
+	
+	/* Return delimiting key if position in the parent is not equal to zero. */
+	if (pos) return reiserfs_int_key_at(bh, pos - 1);
+    }
+
+    /* Return MIN_KEY if we are in the root of the buffer tree. */
+    if ( REISERFS_PATH_BUFFER(path, REISERFS_PATH_OFFINIT)->b_blocknr
+	 != reiserfs_sb_get_root (sb) )
+    {
+	misc_die("reiserfs_tree_lkey: invalid root block number (%lu). Must be (%u).",
+		 REISERFS_PATH_BUFFER(path, REISERFS_PATH_OFFINIT)->b_blocknr,
+		 reiserfs_sb_get_root (sb));
+    }
+    
+    /* there is no left delimiting key */
+    return &MIN_KEY;
+}
+
+const reiserfs_key_t * reiserfs_tree_rkey (reiserfs_path_t * path,
+					   reiserfs_filsys_t * fs)
+{
+    int pos, offset = path->path_length;
+    reiserfs_bh_t * bh;
+    reiserfs_sb_t * sb;
+
+    sb = fs->fs_ondisk_sb;
+    
+    if (offset < REISERFS_PATH_OFFINIT)
+	misc_die ("reiserfs_tree_rkey: illegal offset in the path (%d)", offset);
+
+    while (offset-- > REISERFS_PATH_OFFINIT) {
+	if (! reiserfs_buffer_uptodate (REISERFS_PATH_BUFFER (path, offset)))
+	    misc_die ("reiserfs_tree_rkey: parent is not uptodate");
+
+	/* Parent at the path is not in the tree now. */
+	if (! REISERFS_NODE_INTREE (bh = REISERFS_PATH_BUFFER (path, offset)))
+	    misc_die ("reiserfs_tree_rkey: buffer on the path is not in tree");
+
+	/* Check whether position in the parrent is correct. */
+	if ((pos = REISERFS_PATH_POS (path, offset)) > reiserfs_node_items (bh))
+	    misc_die ("reiserfs_tree_rkey: invalid position (%d) in the path", pos);
+
+	/* Check whether parent at the path really points to the child. */
+	if (reiserfs_dc_get_nr (reiserfs_int_at (bh, pos)) != 
+	    REISERFS_PATH_BUFFER (path, offset + 1)->b_blocknr)
+	{
+	    misc_die ("reiserfs_tree_rkey: invalid block number (%d). Must be %ld",
+		      reiserfs_dc_get_nr (reiserfs_int_at (bh, pos)), 
+		      REISERFS_PATH_BUFFER (path, offset + 1)->b_blocknr);
+	}
+	
+	/* Return delimiting key if position in the parent is not the 
+	   last one. */
+	if (pos != reiserfs_node_items (bh))
+	    return reiserfs_int_key_at (bh, pos);
+    }
+    
+    /* Return MAX_KEY if we are in the root of the buffer tree. */
+    if ( REISERFS_PATH_BUFFER(path, REISERFS_PATH_OFFINIT)->b_blocknr !=
+	 reiserfs_sb_get_root (sb) )
+    {
+	misc_die ("reiserfs_tree_rkey: invalid root block number (%lu). Must be (%u).",
+		  REISERFS_PATH_BUFFER(path, REISERFS_PATH_OFFINIT)->b_blocknr,
+		  reiserfs_sb_get_root (sb));
+    }
+    
+    /* there is no right delimiting key */
+    return &MAX_KEY;
+}
+
+const reiserfs_key_t *reiserfs_tree_next_key(reiserfs_path_t *path, 
+					     reiserfs_filsys_t *fs) 
+{
+    if (REISERFS_PATH_LEAF_POS (path) < 
+	reiserfs_node_items (REISERFS_PATH_LEAF (path)) - 1)
+    {
+	return reiserfs_ih_key_at(REISERFS_PATH_LEAF (path), 
+				  REISERFS_PATH_LEAF_POS (path) + 1);
+    }
+
+    return reiserfs_tree_rkey (path, fs);
+}
+
+static int comp_dir_entries (const void * p1, const void * p2) {
+    __u32 off1, off2;
+
+    off1 = d32_get((__u32 *)p1, 0);
+    off2 = *(__u32 *)p2;
+    
+    if (off1 < off2)
+	return -1;
+    if (off1 > off2)
+	return 1;
+    return 0;
+}
+
+
+/* NOTE: this only should be used to look for keys who exists */
+int reiserfs_tree_search_entry (reiserfs_filsys_t * fs, 
+				const reiserfs_key_t * key, 
+				reiserfs_path_t * path)
+{
+    reiserfs_bh_t * bh;
+    int item_pos;
+    reiserfs_ih_t * ih;
+    reiserfs_key_t tmpkey;
+    __u32 offset;
+
+    if (reiserfs_tree_search_item (fs, key, path) == ITEM_FOUND) {
+        path->pos_in_item = 0;
+        return POSITION_FOUND;
+    }
+
+    bh = REISERFS_PATH_LEAF (path);
+    item_pos = REISERFS_PATH_LEAF_POS (path);
+    ih = REISERFS_PATH_IH (path);
+
+    if (item_pos == 0) {
+	/* key is less than the smallest key in the tree */
+	if (reiserfs_key_comp2 (&(ih->ih_key), key))
+	    /* there are no items of that directory */
+	    return DIRECTORY_NOT_FOUND;
+
+	if (!reiserfs_ih_dir (ih)) {
+	    reiserfs_panic ("reiserfs_tree_search_entry: found item "
+			    "is not of directory type %H", ih);
+	}
+
+	/* key we looked for should be here */
+        path->pos_in_item = 0;
+	return POSITION_NOT_FOUND;
+    }
+
+    /* take previous item */
+    item_pos --;
+    ih --;
+    REISERFS_PATH_LEAF_POS (path) --;
+
+    if (reiserfs_key_comp2 (&(ih->ih_key), key) || !reiserfs_ih_dir (ih)) {
+        /* previous item belongs to another object or is stat data, check next
+           item */
+
+	item_pos ++;
+	REISERFS_PATH_LEAF_POS (path) ++;
+
+        if (item_pos < reiserfs_node_items (bh)) {
+	    /* next item is in the same node */
+	    ih ++;
+            if (reiserfs_key_comp2 (&(ih->ih_key), key)) {
+		/* there are no items of that directory */
+                path->pos_in_item = 0;
+                return DIRECTORY_NOT_FOUND;
+            }
+
+            if (!reiserfs_ih_dir (ih))
+		reiserfs_panic ("reiserfs_tree_search_entry: %k is not a directory",
+				key);
+        } else {
+	    /* next item is in right neighboring node */
+            const reiserfs_key_t * next_key = reiserfs_tree_rkey (path, fs);
+
+            if (next_key == 0 || reiserfs_key_comp2 (next_key, key)) {
+                /* there are no items of that directory */
+                path->pos_in_item = 0;
+                return DIRECTORY_NOT_FOUND;
+            }
+
+            if (!reiserfs_key_dir (next_key))
+		reiserfs_panic ("reiserfs_tree_search_entry: %k is not a directory",
+				key);
+
+            /* we got right delimiting key - search for it - the entry will be
+	       pasted in position 0 */
+            reiserfs_key_copy (&tmpkey, next_key);
+            reiserfs_tree_pathrelse (path);
+            if (reiserfs_tree_search_item (fs, &tmpkey, path) != ITEM_FOUND || 
+		REISERFS_PATH_LEAF_POS (path) != 0)
+	    {
+                reiserfs_panic ("reiserfs_tree_search_entry: item "
+				"corresponding to delimiting key %k "
+				"not found", &tmpkey);
+	    }
+        }
+
+        /* next item is the part of this directory */
+        path->pos_in_item = 0;
+        return POSITION_NOT_FOUND;
+    }
+
+    /* previous item is part of desired directory */
+    offset = reiserfs_key_get_off1 (key);
+    if (misc_bin_search (&offset, reiserfs_deh (bh, ih), 
+			     reiserfs_ih_get_entries (ih),
+			     REISERFS_DEH_SIZE, &(path->pos_in_item), 
+			     comp_dir_entries) == 1)
+    {
+	return POSITION_FOUND;
+    }
+
+    return POSITION_NOT_FOUND;
+}
+
+int reiserfs_tree_delete_entry (reiserfs_filsys_t * fs, reiserfs_key_t * key)
+{
+    reiserfs_path_t path;
+    reiserfs_tb_t tb;
+    reiserfs_ih_t * ih;
+    reiserfs_deh_t * deh;
+    int entry_len;
+
+    if (reiserfs_tree_search_entry (fs, key, &path) != POSITION_FOUND) {
+	reiserfs_tree_pathrelse (&path);
+	return 1;
+    }
+
+    ih = REISERFS_PATH_IH (&path);
+    if (reiserfs_ih_get_entries (ih) == 1) {
+	
+	reiserfs_tb_init (&tb, fs, &path, 
+			  -(REISERFS_IH_SIZE + reiserfs_ih_get_len (ih)));
+	
+	if (reiserfs_fix_nodes (M_DELETE, &tb, 0) != CARRY_ON) {
+	    reiserfs_unfix_nodes (&tb);
+	    return 1;
+	}
+	reiserfs_tb_balance (&tb, 0, 0, M_DELETE, 0);
+	return 0;
+    }
+
+    deh = reiserfs_deh (REISERFS_PATH_LEAF (&path), ih) + path.pos_in_item;
+    entry_len = reiserfs_direntry_entry_len (ih, deh, path.pos_in_item);
+    reiserfs_tb_init (&tb, fs, &path, -(REISERFS_DEH_SIZE + entry_len));
+    
+    if (reiserfs_fix_nodes (M_CUT, &tb, 0) != CARRY_ON) {
+	reiserfs_unfix_nodes (&tb);
+	return 1;
+    }
+    reiserfs_tb_balance (&tb, 0, 0, M_CUT, 0);
+    return 0;
+}
+
+static void free_unformatted_nodes (reiserfs_filsys_t * fs, 
+				    reiserfs_path_t * path, 
+				    int start, int end)
+{
+    __u32 * item = REISERFS_PATH_ITEM(path); 
+    unsigned int i;
+
+    for (i = start; i < end; i ++) {
+        __u32 unfm = d32_get (item, i);
+	
+	if (unfm != 0)
+	    reiserfs_node_forget(fs, unfm);
+    }
+}
+
+void reiserfs_tree_delete (reiserfs_filsys_t * fs, 
+			   reiserfs_path_t * path, 
+			   int temporary) 
+{
+    reiserfs_tb_t tb;
+    reiserfs_ih_t * ih = REISERFS_PATH_IH (path);
+    
+    if (reiserfs_ih_ext (ih) && !temporary)
+	free_unformatted_nodes (fs, path, 0, reiserfs_ext_count (ih));
+
+    reiserfs_tb_init (&tb, fs, path, 
+		      -(REISERFS_IH_SIZE + reiserfs_ih_get_len(ih)));
+
+    if (reiserfs_fix_nodes (M_DELETE, &tb, 0/*ih*/) != CARRY_ON)
+	misc_die ("reiserfs_tree_delete: reiserfs_fix_nodes failed");
+    
+    reiserfs_tb_balance (&tb, 0, 0, M_DELETE, 0/*zero num*/);
+}
+
+void reiserfs_tree_delete_unit (reiserfs_filsys_t *fs, 
+				reiserfs_path_t * path, 
+				int cut_size)
+{
+    reiserfs_ih_t * ih = REISERFS_PATH_IH (path);
+    reiserfs_tb_t tb;
+
+    if (cut_size >= 0) {
+	misc_die ("reiserfs_tree_delete_unit: cut size == %d", cut_size);
+    }
+
+    if (reiserfs_ih_ext (ih)) 
+	free_unformatted_nodes(fs, path, (reiserfs_ih_get_len(ih) + cut_size) / 
+			       REISERFS_EXT_SIZE, reiserfs_ext_count (ih));
+
+    reiserfs_tb_init (&tb, fs, path, cut_size);
+
+    if (reiserfs_fix_nodes (M_CUT, &tb, 0) != CARRY_ON)
+	misc_die ("reiserfs_tree_delete_unit: reiserfs_fix_nodes failed");
+
+    reiserfs_tb_balance (&tb, 0, 0, M_CUT, 0/*zero num*/);
+}
+
+void reiserfs_tree_insert_unit (reiserfs_filsys_t * fs, 
+				reiserfs_path_t * path,
+				const void * body, int size)
+{
+    reiserfs_tb_t tb;
+  
+    reiserfs_tb_init (&tb, fs, path, size);
+
+    if (reiserfs_fix_nodes (M_PASTE, &tb, 0/*ih*/) != CARRY_ON)
+	reiserfs_panic ("reiserfs_tree_insert_unit: "
+			"reiserfs_fix_nodes failed");
+
+    reiserfs_tb_balance (&tb, 0, body, M_PASTE, 0/*zero num*/);
+}
+
+void reiserfs_tree_insert (reiserfs_filsys_t * fs, 
+			   reiserfs_path_t * path,
+			   reiserfs_ih_t * ih, 
+			   const void * body)
+{
+    reiserfs_tb_t tb;
+    
+    reiserfs_tb_init (&tb, fs, path, REISERFS_IH_SIZE + 
+		      reiserfs_ih_get_len(ih));
+    
+    if (reiserfs_fix_nodes (M_INSERT, &tb, ih) != CARRY_ON)
+	misc_die ("reiserfs_tree_insert: reiserfs_fix_nodes failed");
+
+    reiserfs_tb_balance (&tb, ih, body, M_INSERT, 0/*zero num*/);
+}
+
+/* if name is found in a directory - return 1 and set path to the name,
+   otherwise return 0 and reiserfs_tree_pathrelse path */
+int reiserfs_tree_scan_name (reiserfs_filsys_t * fs, 
+			     reiserfs_key_t * dir, 
+			     char * name,
+			     reiserfs_path_t * path)
+{
+    const reiserfs_key_t * rdkey;
+    reiserfs_key_t entry_key;
+    reiserfs_deh_t * deh;
+    reiserfs_ih_t * ih;
+    int i, retval;
+    
+    reiserfs_key_set_did (&entry_key, reiserfs_key_get_did (dir));
+    reiserfs_key_set_oid (&entry_key, reiserfs_key_get_oid (dir));
+    reiserfs_key_set_off1 (&entry_key, 0);
+    reiserfs_key_set_uni (&entry_key, UNI_DE);
+
+ 
+    if (reiserfs_tree_search_entry (fs, &entry_key, path) == 
+	DIRECTORY_NOT_FOUND) 
+    {
+	reiserfs_tree_pathrelse (path);
+	return 0;
+    }
+
+    do {
+	ih = REISERFS_PATH_IH (path);
+	deh = reiserfs_deh (REISERFS_PATH_LEAF (path), ih) + path->pos_in_item;
+	for (i = path->pos_in_item; i < reiserfs_ih_get_entries (ih); i ++, deh ++)
+	{
+	    /* the name in directory has the same hash as the given name */
+	    if ((reiserfs_direntry_name_len (ih, deh, i) == 
+		 (int)strlen (name)) &&
+		!memcmp (reiserfs_deh_name (deh, i), name, strlen (name))) 
+	    {
+		path->pos_in_item = i;
+		return 1;
+	    }
+	}
+
+	rdkey = reiserfs_tree_rkey (path, fs);
+	if (!rdkey || reiserfs_key_comp2 (rdkey, dir)) {
+	    reiserfs_tree_pathrelse (path);
+	    return 0;
+	}
+	
+	if (!reiserfs_key_dir (rdkey))
+	    reiserfs_panic ("reiserfs_tree_scan_name: can not find name in "
+			    "broken directory yet");
+
+	/* first name of that item may be a name we are looking for */
+	entry_key = *rdkey;
+	reiserfs_tree_pathrelse (path);
+	retval = reiserfs_tree_search_entry (fs, &entry_key, path);
+	
+	if (retval != POSITION_FOUND)
+	    reiserfs_panic ("reiserfs_tree_scan_name: wrong delimiting "
+			    "key in the tree");
+    } while (1);
+
+    return 0;
+}
+
+
+/* returns 0 if name is not found in a directory and 1 if name is
+   found. Stores key found in the entry in 'key'. Returns minimal not used
+   generation counter in 'min_gen_counter'. dies if found object is not a
+   directory. */
+int reiserfs_tree_search_name (reiserfs_filsys_t * fs, 
+			       const reiserfs_key_t * dir, 
+			       char * name, 
+			       unsigned int * min_gen_counter, 
+			       reiserfs_key_t * key)
+{
+    const reiserfs_key_t * rdkey;
+    reiserfs_key_t entry_key;
+    REISERFS_PATH_INIT (path);
+    reiserfs_deh_t * deh;
+    reiserfs_ih_t * ih;
+    __u32 hash;
+    int retval;
+    int i;
+
+
+    reiserfs_key_set_did (&entry_key, reiserfs_key_get_did (dir));
+    reiserfs_key_set_oid (&entry_key, reiserfs_key_get_oid (dir));
+    if (!strcmp (name, "."))
+	hash = OFFSET_DOT;
+    else if (!strcmp (name, ".."))
+	hash = OFFSET_DOT_DOT;
+    else
+	hash = reiserfs_hash_value (fs->hash, name, strlen (name));
+    reiserfs_key_set_off1 (&entry_key, hash);
+    reiserfs_key_set_uni (&entry_key, UNI_DE);
+
+    *min_gen_counter = 0;
+
+    if (reiserfs_tree_search_entry (fs, &entry_key, &path) == 
+	DIRECTORY_NOT_FOUND) 
+    {
+	reiserfs_tree_pathrelse (&path);
+	return 0;
+    }
+	
+    do {
+	ih = REISERFS_PATH_IH (&path);
+	deh = reiserfs_deh (REISERFS_PATH_LEAF (&path), ih) + path.pos_in_item;
+	for (i = path.pos_in_item; i < reiserfs_ih_get_entries (ih); i ++, deh ++) {
+	    if (OFFSET_HASH (reiserfs_deh_get_off (deh)) != OFFSET_HASH (hash))
+	    {
+		/* all entries having the same hash were scanned */
+		reiserfs_tree_pathrelse (&path);
+		return 0;
+	    }
+			
+	    if (OFFSET_GEN (reiserfs_deh_get_off (deh)) == 
+		*min_gen_counter)
+	    {
+		(*min_gen_counter) ++;
+	    }
+			
+	    if ((reiserfs_direntry_name_len (ih, deh, i) == 
+		 (int)strlen (name)) &&
+	        (!memcmp (reiserfs_deh_name (deh, i), name, strlen (name)))) 
+	    {
+		/* entry found in the directory */
+		if (key) {
+		    memset (key, 0, sizeof (reiserfs_key_t));
+		    reiserfs_key_set_did (key, reiserfs_deh_get_did (deh));
+		    reiserfs_key_set_oid (key, reiserfs_deh_get_obid (deh));
+		}
+		reiserfs_tree_pathrelse (&path);
+		return 1;//reiserfs_deh_get_obid (deh) ? reiserfs_deh_get_obid (deh) : 1;
+	    }
+	}
+		
+	rdkey = reiserfs_tree_rkey (&path, fs);
+	if (!rdkey || reiserfs_key_comp2 (rdkey, dir)) {
+	    reiserfs_tree_pathrelse (&path);
+	    return 0;
+	}
+		
+	if (!reiserfs_key_dir (rdkey))
+	    reiserfs_panic ("reiserfs_tree_search_name: can not find name "
+			    "in broken directory yet");
+		
+	/* next item is the item of the directory we are looking name in */
+	if (OFFSET_HASH (reiserfs_key_get_off (rdkey)) != hash) {
+	    /* but there is no names with given hash */
+	    reiserfs_tree_pathrelse (&path);
+	    return 0;
+	}
+		
+	/* first name of that item may be a name we are looking for */
+	entry_key = *rdkey;
+	reiserfs_tree_pathrelse (&path);
+	retval = reiserfs_tree_search_entry (fs, &entry_key, &path);
+	if (retval != POSITION_FOUND)
+	    reiserfs_panic ("reiserfs_tree_search_name: wrong delimiting "
+			    "key in the tree");
+		
+    } while (1);
+    
+    return 0;
+}
+
+
+/* compose directory entry: dir entry head and name itself */
+static char * make_entry (char * entry, char * name, 
+			  const reiserfs_key_t * key, 
+			  __u32 offset)
+{
+    reiserfs_deh_t * deh;
+    __u16 state;
+	
+    if (!entry)
+	entry = misc_getmem (REISERFS_DEH_SIZE + MISC_ROUND_UP (strlen (name)));
+
+    memset (entry, 0, REISERFS_DEH_SIZE + MISC_ROUND_UP (strlen (name)));
+    deh = (reiserfs_deh_t *)entry;
+	
+    reiserfs_deh_set_loc (deh, 0);
+    reiserfs_deh_set_off (deh, offset);
+    state = (1 << DEH_Visible2);
+    reiserfs_deh_set_state (deh, state);
+	
+    /* key of object entry will point to */
+    reiserfs_deh_set_did (deh, reiserfs_key_get_did (key));
+    reiserfs_deh_set_obid (deh, reiserfs_key_get_oid (key));
+	
+    memcpy ((char *)(deh + 1), name, strlen (name));
+    return entry;
+}
+
+/* add new name into a directory. If it exists in a directory - do
+   nothing */
+int reiserfs_tree_insert_entry (reiserfs_filsys_t * fs, 
+				const reiserfs_key_t * dir, 
+				char * name, int name_len,
+				const reiserfs_key_t * key, 
+				__u16 fsck_need)
+{
+    reiserfs_ih_t entry_ih = {{0,}, };
+    char * entry;
+    int retval;
+    REISERFS_PATH_INIT(path);
+    unsigned int gen_counter;
+    int item_len;
+    __u32 hash;
+
+    if (reiserfs_tree_search_name (fs, dir, name, &gen_counter, 0))
+	/* entry is in the directory already or directory was not found */
+	return 0;
+
+    /* compose entry key to look for its place in the tree */
+    reiserfs_key_set_did (&(entry_ih.ih_key), reiserfs_key_get_did (dir));
+    reiserfs_key_set_oid (&(entry_ih.ih_key), reiserfs_key_get_oid (dir));
+    if (!strcmp (name, "."))
+	hash = OFFSET_DOT;
+    else if (!strcmp (name, ".."))
+	hash = OFFSET_DOT_DOT;
+    else
+	hash = reiserfs_hash_value (fs->hash, name, strlen (name)) + gen_counter;
+    reiserfs_key_set_off1 (&(entry_ih.ih_key), hash);
+    reiserfs_key_set_uni (&(entry_ih.ih_key), UNI_DE);
+
+    reiserfs_ih_set_format (&entry_ih, KEY_FORMAT_1);
+    reiserfs_ih_set_entries (&entry_ih, 1);
+
+    item_len = REISERFS_DEH_SIZE + name_len;
+/*
+    if (reiserfs_super_format (fs->fs_ondisk_sb) == REISERFS_FORMAT_3_5)
+	item_len = REISERFS_DEH_SIZE + strlen (name);
+    else if (reiserfs_super_format (fs->fs_ondisk_sb) == REISERFS_FORMAT_3_6)
+	item_len = REISERFS_DEH_SIZE + MISC_ROUND_UP (strlen (name));
+    else
+	reiserfs_panic ("unknown fs format");
+*/
+
+    reiserfs_ih_set_len (&entry_ih, item_len);
+
+    /* fsck may need to insert item which was not reached yet */
+    reiserfs_ih_set_flags (&entry_ih, fsck_need);
+
+    entry = make_entry (0, name, key, 
+			reiserfs_key_get_off (&(entry_ih.ih_key)));
+
+    retval = reiserfs_tree_search_entry (fs, &(entry_ih.ih_key), &path);
+    switch (retval) {
+    case POSITION_NOT_FOUND:
+	reiserfs_tree_insert_unit (fs, &path, entry, item_len);
+	break;
+
+    case DIRECTORY_NOT_FOUND:
+	reiserfs_deh_set_loc ((reiserfs_deh_t *)entry, REISERFS_DEH_SIZE);
+	reiserfs_tree_insert (fs, &path, &entry_ih, entry);
+	break;
+
+    default:
+	reiserfs_panic ("reiserfs_tree_insert_entry: looking for %k (inserting "
+			"name \"%s\") reiserfs_tree_search_entry returned %d",
+			&(entry_ih.ih_key), name, retval);
+    }
+
+    misc_freemem (entry);
+    return item_len;
+}
+
+
+/* inserts new or old stat data of a __DIRECTORY__ (unreachable, nlinks == 0) */
+int reiserfs_tree_create_stat (reiserfs_filsys_t * fs,
+			       reiserfs_path_t * path, 
+			       const reiserfs_key_t * key,
+			       item_modify_t modify)
+{
+    reiserfs_ih_t ih;
+    reiserfs_sd_t sd;
+    int key_format;
+
+    if (fs->fs_format == REISERFS_FORMAT_3_5)
+	key_format = KEY_FORMAT_1;
+    else
+	key_format = KEY_FORMAT_2;
+
+    memset(&sd, 0, sizeof(sd));
+    reiserfs_stat_init (fs->fs_blocksize, key_format, reiserfs_key_get_did (key),
+			reiserfs_key_get_oid (key), &ih, &sd);
+
+    if (modify)
+        modify (&ih, &sd);
+    
+    reiserfs_tree_insert (fs, path, &ih, &sd);
+    return key_format;
+}
+
+__u16 reiserfs_tree_root (reiserfs_filsys_t * fs,
+			  item_modify_t modify,
+			  __u16 ih_flags)
+{
+    __u16 format;
+    REISERFS_PATH_INIT (path);
+
+
+    /* is there root's stat data */
+    if (reiserfs_tree_search_item (fs, &root_dir_key, &path) == ITEM_NOT_FOUND) {	
+	format = reiserfs_tree_create_stat (fs, &path, &root_dir_key, modify);
+    } else {
+    	reiserfs_ih_t * ih = REISERFS_PATH_IH (&path);
+    	
+    	if (!reiserfs_ih_stat (ih))
+	    reiserfs_panic ("It must be root's stat data %k\n", &ih->ih_key);
+	
+        format = (reiserfs_ih_get_len (REISERFS_PATH_IH (&path)) == REISERFS_SD_SIZE) ? 
+		KEY_FORMAT_2 : KEY_FORMAT_1;
+	
+	reiserfs_tree_pathrelse (&path);
+    }
+
+    /* add "." and ".." if any of them do not exist. Last two
+       parameters say: 0 - entry is not added on lost_found pass and 1
+       - mark item unreachable */
+
+    reiserfs_tree_insert_entry (fs, &root_dir_key, ".", 
+				reiserfs_direntry_entry_estimate (".", format),
+				&root_dir_key, ih_flags);
+    reiserfs_tree_insert_entry (fs, &root_dir_key, "..", 
+				reiserfs_direntry_entry_estimate ("..", format),
+				&parent_root_dir_key, ih_flags);
+
+    return format;
+}
+
+/* Release all buffers in the path. */
+void  reiserfs_tree_pathrelse (reiserfs_path_t * p_s_search_path) 
+{
+    int n_path_offset = p_s_search_path->path_length;
+    
+    while ( n_path_offset > REISERFS_PATH_OFFILL )
+	reiserfs_buffer_close(REISERFS_PATH_BUFFER(p_s_search_path, n_path_offset--));
+
+    p_s_search_path->path_length = REISERFS_PATH_OFFILL;
+}
+
+int reiserfs_tree_left_mergeable (reiserfs_filsys_t * s, reiserfs_path_t * path)
+{
+    reiserfs_ih_t * right;
+    reiserfs_bh_t * bh;
+    int retval;
+    
+    right = reiserfs_ih_at (REISERFS_PATH_LEAF (path), 0);
+    
+    bh = reiserfs_tree_left_neighbor (s, path);
+    if (bh == 0) {
+	return 0;
+    }
+    retval = reiserfs_leaf_mergeable (reiserfs_ih_at (bh, reiserfs_node_items (bh) - 1), 
+				      right, bh->b_size);
+    reiserfs_buffer_close (bh);
+    return retval;
+}
+
+int reiserfs_tree_right_mergeable (reiserfs_filsys_t * s, reiserfs_path_t * path)
+{
+    reiserfs_ih_t * left;
+    reiserfs_bh_t * bh;
+    int retval;
+    
+    left = reiserfs_ih_at (REISERFS_PATH_LEAF (path), 
+			   reiserfs_node_items (REISERFS_PATH_LEAF (path)) - 1);
+    
+    bh = reiserfs_tree_right_neighbor (s, path);
+    if (bh == 0) {
+	return 0;
+    }
+    retval = reiserfs_leaf_mergeable (left, reiserfs_ih_at (bh, 0), bh->b_size);
+    reiserfs_buffer_close (bh);
+    return retval;
+}
+
+/* return 1 if left and right nodes can be packed into 1 node. 0 otherwise */
+int reiserfs_tree_node_mergeable(reiserfs_bh_t * left, 
+				 reiserfs_bh_t * right)
+{
+    reiserfs_ih_t *ih = reiserfs_ih_at (left, reiserfs_node_items (left) - 1);
+    
+    if (reiserfs_node_free (left) >= reiserfs_node_used (right) -
+	(reiserfs_leaf_mergeable (ih, reiserfs_ih_at(right, 0), left->b_size)
+	 ? REISERFS_IH_SIZE : 0))
+    {
+	return 1;
+    }
+
+    return 0;
+}
+
+/* A simple 2 nodes merge operation. */
+int reiserfs_tree_merge(reiserfs_filsys_t *fs, 
+			reiserfs_path_t *dst_path, 
+			reiserfs_path_t *src_path)
+{
+	reiserfs_bufinfo_t dest_bi;
+	reiserfs_bufinfo_t src_bi;
+	int num, res;
+	
+	src_bi.bi_bh = REISERFS_PATH_LEAF (src_path);
+	src_bi.bi_parent = REISERFS_PATH_UPPARENT (src_path, 0);
+	src_bi.bi_position = REISERFS_PATH_UPPARENT_POS (src_path, 0);	
+	
+	dest_bi.bi_bh = REISERFS_PATH_LEAF(dst_path);
+	dest_bi.bi_parent = REISERFS_PATH_UPPARENT (dst_path, 0);
+	dest_bi.bi_position = REISERFS_PATH_UPPARENT_POS (dst_path, 0);
+	
+	num = reiserfs_node_items(src_bi.bi_bh);
+	res = reiserfs_lb_copy (fs, &dest_bi, src_bi.bi_bh, 
+				FIRST_TO_LAST, num, -1);
+	
+	/* Delete all but the very first one. */
+	reiserfs_lb_delete (fs, &src_bi, FIRST_TO_LAST, 1, num - 1, -1);
+	
+	/* Delete the very first one and rebalance the tree. */
+	REISERFS_PATH_LEAF_POS (src_path) = 0;
+	reiserfs_tree_delete (fs, src_path, 0);
+	return res;
+}
+
diff --git a/libreiserfs/tree_balance.c b/libreiserfs/tree_balance.c
new file mode 100644
index 0000000..5ef053e
--- /dev/null
+++ b/libreiserfs/tree_balance.c
@@ -0,0 +1,197 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "reiserfs/libreiserfs.h"
+
+/* Make empty node */
+void reiserfs_tb_attach_new (reiserfs_bufinfo_t * bi)
+{
+    reiserfs_leaf_mkempty (bi->bi_bh);
+
+    if (bi->bi_parent)
+	reiserfs_dc_set_size (reiserfs_int_at (bi->bi_parent, bi->bi_position), 0);
+}
+
+
+/* Get first empty buffer */
+reiserfs_bh_t * reiserfs_tb_FEB (reiserfs_tb_t * tb) {
+    int i;
+    reiserfs_bh_t * first_b;
+    reiserfs_bufinfo_t bi;
+
+    for (i = 0; i < TB_FEB_MAX; i ++)
+	if (tb->FEB[i] != 0)
+	    break;
+
+    if (i == TB_FEB_MAX)
+	reiserfs_panic("vs-12300: reiserfs_tb_FEB: FEB list is empty");
+
+    bi.bi_bh = first_b = tb->FEB[i];
+    bi.bi_parent = 0;
+    bi.bi_position = 0;
+    reiserfs_tb_attach_new (&bi);
+    misc_set_bit(BH_Uptodate, &first_b->b_state);
+
+    tb->FEB[i] = 0;
+    tb->used[i] = first_b;
+
+    return(first_b);
+}
+
+int reiserfs_tb_lpos (reiserfs_tb_t * tb, int h) 
+{
+  int Sh_position = REISERFS_PATH_UPPOS (tb->tb_path, h + 1);
+
+  if (Sh_position == 0)
+    return reiserfs_node_items (tb->FL[h]);
+  else
+    return Sh_position - 1;
+}
+
+
+int reiserfs_tb_rpos (reiserfs_tb_t * tb, int h)
+{
+  int Sh_position = REISERFS_PATH_UPPOS (tb->tb_path, h + 1);
+
+  if (Sh_position == reiserfs_node_items (REISERFS_PATH_UPPARENT (tb->tb_path, h)))
+    return 0;
+  else
+    return Sh_position + 1;
+}
+
+/* Now we have all of the buffers that must be used in balancing of the tree.
+   We rely on the assumption that schedule() will not occur while reiserfs_tb_balance
+   works. ( Only interrupt handlers are acceptable.)  We balance the tree
+   according to the analysis made before this, using buffers already obtained.
+   For SMP support it will someday be necessary to add ordered locking of
+   tb. */
+
+/* Some interesting rules of balancing:
+
+   we delete a maximum of two nodes per level per balancing: we never delete R, when we delete two
+   of three nodes L, S, R then we move them into R.
+
+   we only delete L if we are deleting two nodes, if we delete only one node we delete S
+
+   if we shift leaves then we shift as much as we can: this is a deliberate policy of extremism in
+   node packing which results in higher average utilization after repeated random balance
+   operations at the cost of more memory copies and more balancing as a result of small insertions
+   to full nodes.
+
+   if we shift internal nodes we try to evenly balance the node utilization, with consequent less
+   balancing at the cost of lower utilization.
+
+   one could argue that the policy for directories in leaves should be that of internal nodes, but
+   we will wait until another day to evaluate this....  It would be nice to someday measure and
+   prove these assumptions as to what is optimal....
+
+*/
+
+void reiserfs_tb_balance (
+	reiserfs_tb_t * tb,	/* tree_balance structure */
+	reiserfs_ih_t * ih,	/* item header of inserted item */
+	const char * body, /* body  of inserted item or bytes to paste */
+	int flag,  /* i - insert, d - delete
+		      c - cut, p - paste			
+		      Cut means delete part of an item (includes
+		      removing an entry from a directory).
+
+		      Delete means delete whole item.
+
+		      Insert means add a new item into the tree.
+
+		      Paste means to append to the end of an existing
+		      file or to insert a directory entry.  */
+	int zeros_num)
+{
+    //int pos_in_item = tb->tb_path->pos_in_item;
+    int child_pos, /* position of a child node in its parent */
+	h;	   /* level of the tree being processed */
+    reiserfs_ih_t insert_key[2]; /* in our processing of one level we
+				       sometimes determine what must be
+				       inserted into the next higher level.
+				       This insertion consists of a key or two
+				       keys and their corresponding pointers */
+    reiserfs_bh_t *insert_ptr[2]; /* inserted node-ptrs for the next
+					  level */
+
+    /* if we have no real work to do  */
+    if ( ! tb->insert_size[0] ) {
+	reiserfs_unfix_nodes(/*th,*/ tb);
+	return;
+    }
+
+    if (flag == M_INTERNAL) {
+	insert_ptr[0] = (reiserfs_bh_t *)body;
+	/* we must prepare insert_key */
+
+	if (REISERFS_PATH_UPPARENT_POS (tb->tb_path, 0)
+	    /*LAST_POSITION (tb->tb_path)*//*item_pos*/ == -1) 
+	{
+		/* get delimiting key from buffer in tree */
+		reiserfs_key_copy (&insert_key[0].ih_key, 
+				   reiserfs_ih_key_at (REISERFS_PATH_LEAF (tb->tb_path), 0));
+		/*insert_ptr[0]->b_item_order = 0;*/
+	} else {
+	    /* get delimiting key from new buffer */
+	    reiserfs_key_copy (&insert_key[0].ih_key, 
+			       reiserfs_ih_key_at((reiserfs_bh_t *)body,0));
+	    
+	    /*insert_ptr[0]->b_item_order = item_pos;*/
+	}
+      
+	/* and insert_ptr instead of reiserfs_lb_balance */
+	child_pos = REISERFS_PATH_UPPARENT_POS (tb->tb_path, 0)/*item_pos*/;
+    } else
+	/* balance leaf returns 0 except if combining L R and S into 
+	   one node. see reiserfs_ib_balance() for explanation 
+	   of this line of code.*/
+	child_pos = REISERFS_PATH_UPPARENT_POS (tb->tb_path, 0) +
+	    reiserfs_lb_balance (tb, ih, body, flag, zeros_num, 
+				 insert_key, insert_ptr);
+
+    /* Balance internal level of the tree. */
+    for ( h = 1; h < REISERFS_TREE_HEIGHT_MAX && tb->insert_size[h]; h++ )
+	child_pos = reiserfs_ib_balance (tb, h, child_pos, 
+					 insert_key, insert_ptr);
+
+    /* Release all (except for S[0]) non NULL buffers fixed by reiserfs_fix_nodes() */
+    reiserfs_unfix_nodes(/*th,*/ tb);
+}
+
+void reiserfs_tb_init (reiserfs_tb_t * tb, 
+		       reiserfs_filsys_t * fs,
+		       reiserfs_path_t * path, 
+		       int size)
+{
+    memset (tb, '\0', sizeof(reiserfs_tb_t));
+    tb->tb_fs = fs;
+    tb->tb_path = path;
+
+    REISERFS_PATH_BUFFER(path, REISERFS_PATH_OFFILL) = NULL;
+    REISERFS_PATH_POS(path, REISERFS_PATH_OFFILL) = 0;
+    tb->insert_size[0] = size;
+}
+
+void reiserfs_tb_print_path (reiserfs_tb_t * tb, reiserfs_path_t * path)
+{
+    int offset = path->path_length;
+    reiserfs_bh_t * bh;
+
+    printf ("Offset    Bh     (b_blocknr, b_count) Position Nr_item\n");
+    while ( offset > REISERFS_PATH_OFFILL ) {
+	bh = REISERFS_PATH_BUFFER (path, offset);
+	printf ("%6d %10p (%9lu, %7d) %8d %7d\n", offset, 
+		bh, bh ? bh->b_blocknr : 0, bh ? bh->b_count : 0,
+		REISERFS_PATH_POS (path, offset), bh ? reiserfs_node_items (bh) : -1);
+	
+	offset --;
+    }
+}
+
diff --git a/libutil/Makefile.am b/libutil/Makefile.am
new file mode 100644
index 0000000..4e4cde7
--- /dev/null
+++ b/libutil/Makefile.am
@@ -0,0 +1,7 @@
+noinst_LIBRARIES          = libutil-static.a
+
+libutil_static_a_SOURCES  = badblock.c device.c misc.c mntent.c print.c
+libutil_static_a_LIBADD   = $(top_builddir)/libmisc/libmisc-static.a
+libutil_static_a_CFLAGS   = @CFLAGS@
+
+INCLUDES                  = -I$(top_srcdir)/include
diff --git a/libutil/Makefile.in b/libutil/Makefile.in
new file mode 100644
index 0000000..cff88f2
--- /dev/null
+++ b/libutil/Makefile.in
@@ -0,0 +1,469 @@
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+SOURCES = $(libutil_static_a_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = libutil
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+AR = ar
+ARFLAGS = cru
+libutil_static_a_AR = $(AR) $(ARFLAGS)
+libutil_static_a_DEPENDENCIES =  \
+	$(top_builddir)/libmisc/libmisc-static.a
+am_libutil_static_a_OBJECTS = libutil_static_a-badblock.$(OBJEXT) \
+	libutil_static_a-device.$(OBJEXT) \
+	libutil_static_a-misc.$(OBJEXT) \
+	libutil_static_a-mntent.$(OBJEXT) \
+	libutil_static_a-print.$(OBJEXT)
+libutil_static_a_OBJECTS = $(am_libutil_static_a_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libutil_static_a_SOURCES)
+DIST_SOURCES = $(libutil_static_a_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PROGS_LDFLAGS = @PROGS_LDFLAGS@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+noinst_LIBRARIES = libutil-static.a
+libutil_static_a_SOURCES = badblock.c device.c misc.c mntent.c print.c
+libutil_static_a_LIBADD = $(top_builddir)/libmisc/libmisc-static.a
+libutil_static_a_CFLAGS = @CFLAGS@
+INCLUDES = -I$(top_srcdir)/include
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  libutil/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  libutil/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLIBRARIES:
+	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libutil-static.a: $(libutil_static_a_OBJECTS) $(libutil_static_a_DEPENDENCIES) 
+	-rm -f libutil-static.a
+	$(libutil_static_a_AR) libutil-static.a $(libutil_static_a_OBJECTS) $(libutil_static_a_LIBADD)
+	$(RANLIB) libutil-static.a
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_static_a-badblock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_static_a-device.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_static_a-misc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_static_a-mntent.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_static_a-print.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+libutil_static_a-badblock.o: badblock.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_static_a_CFLAGS) $(CFLAGS) -MT libutil_static_a-badblock.o -MD -MP -MF "$(DEPDIR)/libutil_static_a-badblock.Tpo" -c -o libutil_static_a-badblock.o `test -f 'badblock.c' || echo '$(srcdir)/'`badblock.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libutil_static_a-badblock.Tpo" "$(DEPDIR)/libutil_static_a-badblock.Po"; else rm -f "$(DEPDIR)/libutil_static_a-badblock.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='badblock.c' object='libutil_static_a-badblock.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_static_a_CFLAGS) $(CFLAGS) -c -o libutil_static_a-badblock.o `test -f 'badblock.c' || echo '$(srcdir)/'`badblock.c
+
+libutil_static_a-badblock.obj: badblock.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_static_a_CFLAGS) $(CFLAGS) -MT libutil_static_a-badblock.obj -MD -MP -MF "$(DEPDIR)/libutil_static_a-badblock.Tpo" -c -o libutil_static_a-badblock.obj `if test -f 'badblock.c'; then $(CYGPATH_W) 'badblock.c'; else $(CYGPATH_W) '$(srcdir)/badblock.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libutil_static_a-badblock.Tpo" "$(DEPDIR)/libutil_static_a-badblock.Po"; else rm -f "$(DEPDIR)/libutil_static_a-badblock.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='badblock.c' object='libutil_static_a-badblock.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_static_a_CFLAGS) $(CFLAGS) -c -o libutil_static_a-badblock.obj `if test -f 'badblock.c'; then $(CYGPATH_W) 'badblock.c'; else $(CYGPATH_W) '$(srcdir)/badblock.c'; fi`
+
+libutil_static_a-device.o: device.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_static_a_CFLAGS) $(CFLAGS) -MT libutil_static_a-device.o -MD -MP -MF "$(DEPDIR)/libutil_static_a-device.Tpo" -c -o libutil_static_a-device.o `test -f 'device.c' || echo '$(srcdir)/'`device.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libutil_static_a-device.Tpo" "$(DEPDIR)/libutil_static_a-device.Po"; else rm -f "$(DEPDIR)/libutil_static_a-device.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='device.c' object='libutil_static_a-device.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_static_a_CFLAGS) $(CFLAGS) -c -o libutil_static_a-device.o `test -f 'device.c' || echo '$(srcdir)/'`device.c
+
+libutil_static_a-device.obj: device.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_static_a_CFLAGS) $(CFLAGS) -MT libutil_static_a-device.obj -MD -MP -MF "$(DEPDIR)/libutil_static_a-device.Tpo" -c -o libutil_static_a-device.obj `if test -f 'device.c'; then $(CYGPATH_W) 'device.c'; else $(CYGPATH_W) '$(srcdir)/device.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libutil_static_a-device.Tpo" "$(DEPDIR)/libutil_static_a-device.Po"; else rm -f "$(DEPDIR)/libutil_static_a-device.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='device.c' object='libutil_static_a-device.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_static_a_CFLAGS) $(CFLAGS) -c -o libutil_static_a-device.obj `if test -f 'device.c'; then $(CYGPATH_W) 'device.c'; else $(CYGPATH_W) '$(srcdir)/device.c'; fi`
+
+libutil_static_a-misc.o: misc.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_static_a_CFLAGS) $(CFLAGS) -MT libutil_static_a-misc.o -MD -MP -MF "$(DEPDIR)/libutil_static_a-misc.Tpo" -c -o libutil_static_a-misc.o `test -f 'misc.c' || echo '$(srcdir)/'`misc.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libutil_static_a-misc.Tpo" "$(DEPDIR)/libutil_static_a-misc.Po"; else rm -f "$(DEPDIR)/libutil_static_a-misc.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='misc.c' object='libutil_static_a-misc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_static_a_CFLAGS) $(CFLAGS) -c -o libutil_static_a-misc.o `test -f 'misc.c' || echo '$(srcdir)/'`misc.c
+
+libutil_static_a-misc.obj: misc.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_static_a_CFLAGS) $(CFLAGS) -MT libutil_static_a-misc.obj -MD -MP -MF "$(DEPDIR)/libutil_static_a-misc.Tpo" -c -o libutil_static_a-misc.obj `if test -f 'misc.c'; then $(CYGPATH_W) 'misc.c'; else $(CYGPATH_W) '$(srcdir)/misc.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libutil_static_a-misc.Tpo" "$(DEPDIR)/libutil_static_a-misc.Po"; else rm -f "$(DEPDIR)/libutil_static_a-misc.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='misc.c' object='libutil_static_a-misc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_static_a_CFLAGS) $(CFLAGS) -c -o libutil_static_a-misc.obj `if test -f 'misc.c'; then $(CYGPATH_W) 'misc.c'; else $(CYGPATH_W) '$(srcdir)/misc.c'; fi`
+
+libutil_static_a-mntent.o: mntent.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_static_a_CFLAGS) $(CFLAGS) -MT libutil_static_a-mntent.o -MD -MP -MF "$(DEPDIR)/libutil_static_a-mntent.Tpo" -c -o libutil_static_a-mntent.o `test -f 'mntent.c' || echo '$(srcdir)/'`mntent.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libutil_static_a-mntent.Tpo" "$(DEPDIR)/libutil_static_a-mntent.Po"; else rm -f "$(DEPDIR)/libutil_static_a-mntent.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mntent.c' object='libutil_static_a-mntent.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_static_a_CFLAGS) $(CFLAGS) -c -o libutil_static_a-mntent.o `test -f 'mntent.c' || echo '$(srcdir)/'`mntent.c
+
+libutil_static_a-mntent.obj: mntent.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_static_a_CFLAGS) $(CFLAGS) -MT libutil_static_a-mntent.obj -MD -MP -MF "$(DEPDIR)/libutil_static_a-mntent.Tpo" -c -o libutil_static_a-mntent.obj `if test -f 'mntent.c'; then $(CYGPATH_W) 'mntent.c'; else $(CYGPATH_W) '$(srcdir)/mntent.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libutil_static_a-mntent.Tpo" "$(DEPDIR)/libutil_static_a-mntent.Po"; else rm -f "$(DEPDIR)/libutil_static_a-mntent.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mntent.c' object='libutil_static_a-mntent.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_static_a_CFLAGS) $(CFLAGS) -c -o libutil_static_a-mntent.obj `if test -f 'mntent.c'; then $(CYGPATH_W) 'mntent.c'; else $(CYGPATH_W) '$(srcdir)/mntent.c'; fi`
+
+libutil_static_a-print.o: print.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_static_a_CFLAGS) $(CFLAGS) -MT libutil_static_a-print.o -MD -MP -MF "$(DEPDIR)/libutil_static_a-print.Tpo" -c -o libutil_static_a-print.o `test -f 'print.c' || echo '$(srcdir)/'`print.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libutil_static_a-print.Tpo" "$(DEPDIR)/libutil_static_a-print.Po"; else rm -f "$(DEPDIR)/libutil_static_a-print.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='print.c' object='libutil_static_a-print.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_static_a_CFLAGS) $(CFLAGS) -c -o libutil_static_a-print.o `test -f 'print.c' || echo '$(srcdir)/'`print.c
+
+libutil_static_a-print.obj: print.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_static_a_CFLAGS) $(CFLAGS) -MT libutil_static_a-print.obj -MD -MP -MF "$(DEPDIR)/libutil_static_a-print.Tpo" -c -o libutil_static_a-print.obj `if test -f 'print.c'; then $(CYGPATH_W) 'print.c'; else $(CYGPATH_W) '$(srcdir)/print.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libutil_static_a-print.Tpo" "$(DEPDIR)/libutil_static_a-print.Po"; else rm -f "$(DEPDIR)/libutil_static_a-print.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='print.c' object='libutil_static_a-print.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_static_a_CFLAGS) $(CFLAGS) -c -o libutil_static_a-print.obj `if test -f 'print.c'; then $(CYGPATH_W) 'print.c'; else $(CYGPATH_W) '$(srcdir)/print.c'; fi`
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-noinstLIBRARIES ctags distclean distclean-compile \
+	distclean-generic distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-man install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libutil/badblock.c b/libutil/badblock.c
new file mode 100644
index 0000000..2d4c91c
--- /dev/null
+++ b/libutil/badblock.c
@@ -0,0 +1,62 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "util/badblock.h"
+
+int util_badblock_load (reiserfs_filsys_t * fs, char * badblocks_file) {
+    FILE * fd;
+    char buf[128];
+    __u32 blocknr;
+    int count;
+
+    fs->fs_badblocks_bm = 
+	    reiserfs_bitmap_create(reiserfs_sb_get_blocks(fs->fs_ondisk_sb));
+    
+    reiserfs_bitmap_zero (fs->fs_badblocks_bm);
+
+    if (!badblocks_file)
+	return 0;
+    
+    fd = fopen (badblocks_file, "r");
+
+    if (fd == NULL) {
+        fprintf (stderr, "%s: Failed to open the given badblock file '%s'.\n\n",
+        	__FUNCTION__, badblocks_file);
+        return 1;
+    }
+
+
+    while (!feof (fd)) {
+	if (fgets(buf, sizeof(buf), fd) == NULL)
+	    break;
+	count = sscanf(buf, "%u", &blocknr);
+	
+	if (count <= 0)
+	    continue;
+
+	if (blocknr >= reiserfs_sb_get_blocks (fs->fs_ondisk_sb)) {
+	    fprintf (stderr, "%s: block number (%u) points out of fs size "
+		     "(%u).\n", __FUNCTION__, blocknr, 
+		     reiserfs_sb_get_blocks(fs->fs_ondisk_sb));
+	} else if (reiserfs_fs_block(fs, blocknr) != BT_UNKNOWN) {
+	    fprintf (stderr, "%s: block number (%u) belongs to system "
+		     "reiserfs area. It cannot be relocated.\n", 
+		     __FUNCTION__, blocknr);
+	    return 1;
+	} else {
+	    reiserfs_bitmap_set_bit (fs->fs_badblocks_bm, blocknr);
+	} 
+    }
+
+    fclose (fd);
+
+    return 0;
+}
+
+
diff --git a/libutil/device.c b/libutil/device.c
new file mode 100644
index 0000000..b31f210
--- /dev/null
+++ b/libutil/device.c
@@ -0,0 +1,258 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "util/device.h"
+#include "util/print.h"
+#include "util/mntent.h"
+#include "misc/device.h"
+#include "misc/types.h"
+#include "misc/misc.h"
+#include "reiserfs/print.h"
+
+#include <linux/hdreg.h>
+#include <sys/ioctl.h>
+#include <sys/stat.h>
+#include <mntent.h>
+#include <unistd.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <utime.h>
+#include <assert.h>
+
+#define reiserfs_confirm(force) \
+	if (force < 1) {\
+	    /* avoid formatting it without being forced */\
+	    reiserfs_warning (stderr, "Use -f to force over\n");\
+	    return 0;\
+	}\
+	if (force < 2) {\
+	    if (!util_user_confirmed (stderr, "Continue (y/n):", "y\n"))\
+		return 0;\
+	}\
+
+/* 0 - dma is not supported, scsi or regular file */
+/* 1 - xt drive                                   */
+/* 2 - ide drive */
+static void get_dma_support(util_device_dma_t *dma_info, struct stat *st){
+    if (S_ISREG(st->st_mode))
+	st->st_rdev = st->st_dev;
+
+    if (IDE_DISK_MAJOR(major(st->st_rdev))) {
+        dma_info->support_type = 2;
+	return;
+    }
+    
+#ifdef XT_DISK_MAJOR
+    if (major(st->st_rdev) == XT_DISK_MAJOR) {
+	dma_info->support_type = 1;
+	return;
+    }
+#endif    
+    dma_info->support_type = 0;
+}
+
+/* 
+ * Return values: 
+ * 0 - ok;
+ * 1 - preparation cannot be done 
+ * -1 - preparation failed
+ */
+
+int util_device_dma_prep(util_device_dma_t *dma_info) {
+    struct stat st;
+    char buf[4096];
+    dev_t rdev;
+    int rem;
+    int res;
+
+#ifndef HDIO_GET_DMA
+        return -1;
+#endif
+	
+    if (fstat(dma_info->fd, &st))
+	misc_die("stat on device failed\n");
+   
+    get_dma_support(dma_info, &st);
+   
+    /* dma should be supported */
+    if (dma_info->support_type == 0)
+	return 1;
+    
+    if (dma_info->support_type == 1)
+	return 0;
+
+    rdev = dma_info->st_rdev = st.st_rdev;
+
+    /* If it is the whole device? no preparation needed then. */
+    if ((rem = (minor(rdev) % 64)) == 0)
+	return 0;
+    
+    dma_info->st_rdev -= rem;
+
+    strcpy(buf, "/dev");
+
+    if ((res = misc_dir_walk(buf, misc_device_rdev_match, &dma_info->st_rdev)) <= 0) {
+	    dma_info->st_rdev += rem;
+	    dma_info->support_type = 1;
+	    return res;
+    } 
+    
+    /* Matched block device file found. Open it. */
+    dma_info->fd = open(buf, O_RDONLY
+#if defined(O_LARGEFILE)
+			| O_LARGEFILE
+#endif
+		       );
+    
+    return 0;
+}
+
+static int is_dma_on (int fd) {
+#ifdef HDIO_GET_DMA    
+    static long parm;
+    if (ioctl(fd, HDIO_GET_DMA, &parm))
+	return -1;
+    else 
+	return parm;
+#endif
+    return 0;
+}
+
+
+static __u64 dma_speed(int fd, int support_type) {
+    static struct hd_driveid id;
+    __u64 speed = 0;
+            
+    if (support_type != 2) 
+	return 0;
+
+#ifdef HDIO_OBSOLETE_IDENTITY
+    if (!ioctl(fd, HDIO_GET_IDENTITY, &id) || 
+	!ioctl(fd, HDIO_OBSOLETE_IDENTITY)) {
+#else
+    if (!ioctl(fd, HDIO_GET_IDENTITY, &id)) {
+#endif
+	speed |= (__u64)id.dma_1word &  ~(__u64)0xff;
+	speed |= ((__u64)id.dma_mword & ~(__u64)0xff) << 16;
+	speed |= ((__u64)id.dma_ultra & ~(__u64)0xff) << 32;
+    } else if (errno == -ENOMSG)
+	return -1;
+    else 
+	return -1;
+    
+    return speed;
+}
+
+int util_device_get_dma(util_device_dma_t *dma_info) {
+    if ((dma_info->dma = is_dma_on(dma_info->fd)) == -1)
+	return -1;
+    if ((dma_info->speed = dma_speed(dma_info->fd, dma_info->support_type)) == (__u64)-1) 
+	return -1;
+    return 0;
+}
+
+void util_device_dma_fini(int fd, util_device_dma_t *dma_info) {
+    signal(SIGALRM, SIG_IGN);
+    if (dma_info->fd && fd != dma_info->fd)
+	close(dma_info->fd);
+}
+
+FILE * util_file_open (char * filename, char * option) 
+{
+    FILE * fp = fopen (filename, option);
+    if (!fp) {
+	reiserfs_warning (stderr, "util_file_open: could not "
+			  "open file %s\n", filename);
+	return 0;
+    }
+    reiserfs_warning (stderr, "Temp file opened by fsck: "
+		      "\"%s\" .. \n", filename);
+    return fp;
+}
+
+/* we only can use a file for filesystem or journal if it is either not
+   mounted block device or regular file and we are forced to use it */
+int util_device_formatable (char * device_name, int force)
+{
+    mode_t mode;
+    dev_t rdev;
+
+    if (util_device_mounted(device_name) > 0) {
+	/* device looks mounted */
+	reiserfs_warning (stderr, "'%s' looks mounted.", device_name);
+	reiserfs_confirm (force);
+    }
+
+    mode = misc_device_mode(device_name);
+    rdev = misc_device_rdev(device_name);
+
+    if (!S_ISBLK (mode)) {
+	/* file is not a block device */
+	reiserfs_warning (stderr, "%s is not a block special device\n", device_name);
+	reiserfs_confirm (force);
+    } else {
+	if ((IDE_DISK_MAJOR (major(rdev)) && minor(rdev) % 64 == 0) ||
+	    (SCSI_BLK_MAJOR (major(rdev)) && minor(rdev) % 16 == 0)) {
+	    /* /dev/hda or similar */
+	    reiserfs_warning (stderr, "%s is entire device, not just one partition!\n",
+		    device_name);
+	    reiserfs_confirm (force);
+	}
+    }
+
+    return 1;
+}
+
+int util_root_mounted(char *device) {
+	struct stat rootst, devst;
+	
+	assert(device != NULL);
+
+	if (stat("/", &rootst) != 0) 
+		return -1;
+
+	if (stat(device, &devst) != 0)
+		return -1;
+
+	if (!S_ISBLK(devst.st_mode) || 
+	    devst.st_rdev != rootst.st_dev)
+		return 0;
+
+	return 1;
+}
+
+int util_device_mounted(char *device) {
+	struct mntent *mnt;
+	
+	/* Check for the "/" first to avoid any possible problem with 
+	   reflecting the root fs info in mtab files. */
+	if (util_root_mounted(device) == 1) {
+		return util_file_ro("/") ? MF_RO : MF_RW;
+	}
+	
+	/* Lookup the mount entry. */
+	if ((mnt = util_mntent(device)) == NULL) {
+		return MF_NOT_MOUNTED;
+	} else if (mnt == INVAL_PTR) {
+		return 0;
+	}
+
+	return hasmntopt(mnt, MNTOPT_RO) ? MF_RO : MF_RW;
+}
+
+int util_file_ro(char *file) {
+	if (utime(file, 0) == -1) {
+		if (errno == EROFS)
+			return 1;
+	}
+
+	return 0;
+}
+
diff --git a/libutil/misc.c b/libutil/misc.c
new file mode 100644
index 0000000..953d4b3
--- /dev/null
+++ b/libutil/misc.c
@@ -0,0 +1,225 @@
+/*
+ *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ *  reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "util/misc.h"
+
+#include "misc/malloc.h"
+#include "misc/misc.h"
+
+#include <time.h>
+#include <stdlib.h>
+#include <string.h>
+
+char buf1 [100];
+char buf2 [100];
+
+static time_t t0 = 0, t1 = 0, t2 = 0;
+
+void util_misc_speed (FILE *fp, unsigned long passed, 
+		      unsigned long total, int cursor_pos, 
+		      int reset_time)
+{
+    int speed;
+    int indent;
+
+    if (passed == 0)
+	reset_time = 1;
+    
+    if (reset_time)
+	time (&t0);
+
+    time (&t1);
+    if (t1 != t0) {
+	speed = passed / (t1 - t0);
+	if (total - passed) {
+	    if (t1 - t2 < 1)
+	        return;
+	    t2 = t1;
+	} 
+    } else if (reset_time) {
+	speed = 0;
+    } else {
+	return;
+    }
+
+    /* what has to be written */
+    if (reset_time)
+	buf1[0] = 0;
+    else if (total)
+	sprintf (buf1, "left %lu, %d /sec", total - passed, speed);
+    else {
+	/*(*passed) ++;*/
+	sprintf (buf1, "done %lu, %d /sec", passed, speed);
+    }
+    
+    /* make indent */
+    indent = 79 - cursor_pos - strlen (buf1);
+    memset (buf2, ' ', indent);
+    buf2[indent] = 0;
+    fprintf (fp, "%s%s", buf2, buf1);
+
+    memset (buf2, '\b', indent + strlen (buf1));
+    buf2 [indent + strlen (buf1)] = 0;
+    fprintf (fp, "%s", buf2);
+    fflush (fp);
+}
+
+
+static char * strs[] =
+{"0%",".",".",".",".",
+ "20%",".",".",".",".",
+ "40%",".",".",".",".",
+ "60%",".",".",".",".",
+ "80%",".",".",".",".","100%"};
+
+static char progress_to_be[1024];
+static char current_progress[1024];
+
+static void str_to_be (char * buf, int prosents) {
+    int i;
+    prosents -= prosents % 4;
+    buf[0] = 0;
+    for (i = 0; i <= prosents / 4; i ++)
+	strcat (buf, strs[i]);
+}
+
+
+void util_misc_progress (FILE * fp, unsigned long * passed, 
+			 unsigned long total, unsigned int inc, 
+			 int forward)
+{
+    int percent;
+
+    if (*passed == 0)
+	current_progress[0] = 0;
+
+    (*passed) += inc;
+    if (*passed > total) {
+/*	fprintf (fp, "\nutil_misc_progress: total %lu has been "
+		 "reached already. cur=%lu\n", total, *passed);*/
+	return;
+    }
+
+    percent = ((*passed) * 100) / total;
+
+    str_to_be (progress_to_be, percent);
+
+    if (strlen (current_progress) != strlen (progress_to_be)) {
+	fprintf (fp, "%s", progress_to_be + strlen (current_progress));
+    }
+
+    strcat (current_progress, progress_to_be + strlen (current_progress));
+
+    if (forward != 2) {
+	util_misc_speed(fp, *passed /* - inc*/, forward ? 0 : total, 
+			strlen (progress_to_be), (*passed == inc) ? 1 : 0);
+    }
+    
+    fflush (fp);
+}
+
+static int screen_width = 0;
+static int screen_curr_pos = 0;
+static char *screen_savebuffer;
+static int screen_savebuffer_len;
+
+void screen_init() {
+    char *width;
+
+    width = getenv("COLUMNS");
+    if ( width )
+	screen_width = atoi(width);
+    
+    if (screen_width == 0)
+	screen_width = 80; // We default to 80 characters wide screen
+    screen_width--;
+
+    screen_savebuffer_len=screen_width;
+    screen_savebuffer=misc_getmem(screen_width+1);
+    memset(screen_savebuffer,0,screen_savebuffer_len+1);
+}
+
+void util_misc_name (FILE * fp) {
+    static int printed_len = 0;
+    int i;
+    
+    if (screen_curr_pos == 0 || t0 == 0) {
+	/* Start the new progress. */
+	time (&t0);
+	t2 = t0;
+    } else {
+	time (&t1);
+	if (t1 - t2 < 1)
+	    return;
+	t2 = t1;
+    } 
+
+    if (screen_width && screen_curr_pos >= screen_width ) {
+	fprintf(fp, "... %.*s", screen_width - 4,
+		screen_savebuffer + ( screen_curr_pos - (screen_width - 4)));
+	printed_len = screen_width;
+    } else if (screen_width) {
+	fprintf(fp, "%s", screen_savebuffer);
+	
+	for (i = 0; i <= printed_len - screen_curr_pos ; i++)
+	    fprintf(fp, " ");
+	
+	printed_len = screen_curr_pos;
+    }
+    
+    fprintf(fp, "\r");
+    fflush (fp);
+}
+
+/* semantic pass progress */
+void util_misc_print_name (FILE *fp, char * name, int len) {
+    int i;
+	
+    if (screen_width == 0)
+	screen_init();
+    
+    if ( len + screen_curr_pos + 1 > screen_savebuffer_len) {
+	char *t;
+	
+	t = misc_expandmem(screen_savebuffer, screen_savebuffer_len + 1, 
+	    len + screen_curr_pos - screen_savebuffer_len + 1);
+	
+	if (!t) {
+	    return; // ????
+	}
+	
+	screen_savebuffer = t;
+	screen_savebuffer_len = len + screen_curr_pos + 1;
+    }
+    
+    strcat(screen_savebuffer,"/");
+    strncat(screen_savebuffer,name,len);
+    i = screen_curr_pos;
+    screen_curr_pos += len+1;
+    for ( ; i<screen_curr_pos; i++)
+	if ( screen_savebuffer[i] < 32 )
+	    screen_savebuffer[i] = '?';
+    screen_savebuffer[screen_curr_pos]=0;
+
+    util_misc_name(fp);
+}
+
+void util_misc_erase_name (FILE * fp, int len) {
+    screen_curr_pos-=(len+1);
+    if (screen_curr_pos < 0 )
+	misc_die("%s: Get out of buffer's data!\n", __FUNCTION__);
+
+    screen_savebuffer[screen_curr_pos]=0;
+}
+
+
+void util_misc_fini_name (FILE * fp) {
+    screen_curr_pos = 0;
+    util_misc_name(fp);
+}
diff --git a/libutil/mntent.c b/libutil/mntent.c
new file mode 100644
index 0000000..6ce1858
--- /dev/null
+++ b/libutil/mntent.c
@@ -0,0 +1,164 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+/* Lookup the @file in the @mntfile. @file is mntent.mnt_fsname if @fsname 
+   is set; mntent.mnt_dir otherwise. Return the mnt entry from the @mntfile.
+   
+   Warning: if the root fs is mounted RO, the content of /etc/mtab may be 
+   not correct. */
+
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "misc/types.h"
+#include "util/device.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/vfs.h>
+#include <mntent.h>
+#include <assert.h>
+#include <stdio.h>
+
+static struct mntent *util_mntent_lookup(char *mntfile, 
+					 char *file, 
+					 int path) 
+{
+	struct mntent *mnt;
+	int name_match = 0;
+	struct stat st;
+	dev_t rdev = 0;
+	dev_t dev = 0;
+	ino_t ino = 0;
+	char *name;
+	FILE *fp;
+	
+	assert(mntfile != NULL);
+	assert(file != NULL);
+
+	if (stat(file, &st) == 0) {
+		/* Devices is stated. */
+		if (S_ISBLK(st.st_mode)) {
+			rdev = st.st_rdev;
+		} else {
+			dev = st.st_dev;
+			ino = st.st_ino;
+		}
+	}
+
+	if ((fp = setmntent(mntfile, "r")) == NULL)
+		return INVAL_PTR;
+
+	while ((mnt = getmntent(fp)) != NULL) {
+		/* Check if names match. */
+		name = path ? mnt->mnt_dir : mnt->mnt_fsname;
+		
+		if (strcmp(file, name) == 0)
+			name_match = 1;
+
+		if (stat(name, &st))
+			continue;
+		
+		/* If names do not match, check if stats match. */
+		if (!name_match) {
+			if (rdev && S_ISBLK(st.st_mode)) {
+				if (rdev != st.st_rdev)
+					continue;
+			} else if (dev && !S_ISBLK(st.st_mode)) {
+				if (dev != st.st_dev ||
+				    ino != st.st_ino)
+					continue;
+			} else {
+				continue;
+			}
+		}
+
+		/* If not path and not block device do not check anything more. */
+		if (!path && !rdev) 
+			break;
+
+		if (path) {
+			/* Either names or stats match. Make sure the st_dev of 
+			   the path is same as @mnt_fsname device rdev. */
+			if (stat(mnt->mnt_fsname, &st) == 0 && 
+			    dev == st.st_rdev)
+				break;
+		} else {
+			/* Either names or stats match. Make sure the st_dev of 
+			   the mount entry is same as the given device rdev. */
+			if (stat(mnt->mnt_dir, &st) == 0 && 
+			    rdev == st.st_dev)
+				break;
+		}
+	}
+
+	endmntent (fp);
+        return mnt;
+}
+
+struct mntent *util_mntent(char *device) {
+	int proc = 0, path = 0, root = 0;
+	
+	struct mntent *mnt;
+	struct statfs stfs;
+
+	assert(device != NULL);
+	
+	/* Check if the root. */
+	if (util_root_mounted(device) == 1)
+		root = 1;
+	
+#ifdef __linux__
+	/* Check if /proc is procfs. */
+	if (statfs("/proc", &stfs) == 0 && stfs.f_type == 0x9fa0) {
+		proc = 1;
+		
+		if (root) {
+			/* Lookup the "/" entry in /proc/mounts. Special 
+			   case as root entry can present as:
+				rootfs / rootfs rw 0 0
+			   Look up the mount point in this case. */
+			mnt = util_mntent_lookup("/proc/mounts", "/", 1);
+		} else {
+			/* Lookup the @device /proc/mounts */
+			mnt = util_mntent_lookup("/proc/mounts", device, 0);
+		}
+		
+		if (mnt == INVAL_PTR) 
+			proc = 0;
+		else if (mnt)
+			return mnt;
+	}
+#endif /* __linux__ */
+
+#if defined(MOUNTED) || defined(_PATH_MOUNTED)
+
+#ifndef MOUNTED
+    #define MOUNTED _PATH_MOUNTED
+#endif
+	/* Check in MOUNTED (/etc/mtab) if RW. */
+	if (!util_file_ro(MOUNTED)) {
+		path = 1;
+
+		if (root) {
+			mnt = util_mntent_lookup(MOUNTED, "/", 1);
+		} else {
+			mnt = util_mntent_lookup(MOUNTED, device, 0);
+		}
+
+		if (mnt == INVAL_PTR) 
+			path = 0;
+		else if (mnt)
+			return mnt;
+	}
+#endif /* defined(MOUNTED) || defined(_PATH_MOUNTED) */
+	
+	/* If has not been checked in neither /proc/mounts nor /etc/mtab (or 
+	   errors have occured), return INVAL_PTR, NULL otherwise. */
+	return (!proc && !path) ? INVAL_PTR : NULL;
+}
+
diff --git a/libutil/print.c b/libutil/print.c
new file mode 100644
index 0000000..27fac7e
--- /dev/null
+++ b/libutil/print.c
@@ -0,0 +1,33 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "util/print.h"
+#include <string.h>
+
+int util_user_confirmed (FILE * fp, char * q, char * yes) {
+    char answer[4096];
+
+    fprintf (fp, "%s", q);
+    
+    if (fgets(answer, sizeof(answer), stdin) == NULL ||
+	(strlen(answer) != strlen(yes) || strcmp(yes, answer)))
+    {
+	return 0;
+    }
+
+    return 1;
+}
+
+#define BANNER						\
+	"Copyright (C) 2001-2005 by Hans Reiser, "	\
+	"licensing governed by reiserfsprogs/COPYING."
+
+void util_print_banner(char *name) {
+	fprintf(stderr, "%s %s\n%s\n", name, VERSION, BANNER);
+}
diff --git a/missing b/missing
index 6a37006..09edd88 100755
--- a/missing
+++ b/missing
@@ -1,6 +1,10 @@
 #! /bin/sh
 # Common stub for a few missing GNU programs while installing.
-# Copyright (C) 1996, 1997, 1999, 2000, 2002 Free Software Foundation, Inc.
+
+scriptversion=2005-02-08.22
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
+#   Free Software Foundation, Inc.
 # Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
@@ -38,18 +42,24 @@
   configure_ac=configure.in
 fi
 
+msg="missing on your system"
+
 case "$1" in
 --run)
   # Try to run requested program, and just exit if it succeeds.
   run=
   shift
   "$@" && exit 0
+  # Exit code 63 means version mismatch.  This often happens
+  # when the user try to use an ancient version of a tool on
+  # a file that requires a minimum version.  In this case we
+  # we should proceed has if the program had been absent, or
+  # if --run hadn't been passed.
+  if test $? = 63; then
+    run=:
+    msg="probably too old"
+  fi
   ;;
-esac
-
-# If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
-case "$1" in
 
   -h|--h|--he|--hel|--help)
     echo "\
@@ -74,11 +84,15 @@
   lex          create \`lex.yy.c', if possible, from existing .c
   makeinfo     touch the output file
   tar          try tar, gnutar, gtar, then tar without non-portable flags
-  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]"
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Send bug reports to <bug-automake@gnu.org>."
+    exit $?
     ;;
 
   -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
-    echo "missing 0.4 - GNU automake"
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
     ;;
 
   -*)
@@ -87,14 +101,44 @@
     exit 1
     ;;
 
-  aclocal*)
+esac
+
+# Now exit if we have it, but it failed.  Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).
+case "$1" in
+  lex|yacc)
+    # Not GNU programs, they don't have --version.
+    ;;
+
+  tar)
+    if test -n "$run"; then
+       echo 1>&2 "ERROR: \`tar' requires --run"
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       exit 1
+    fi
+    ;;
+
+  *)
     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
        # We have it, but it failed.
        exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       # Could not run --version or --help.  This is probably someone
+       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # $TOOL exists and not knowing $TOOL uses missing.
+       exit 1
     fi
+    ;;
+esac
 
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case "$1" in
+  aclocal*)
     echo 1>&2 "\
-WARNING: \`$1' is missing on your system.  You should only need it if
+WARNING: \`$1' is $msg.  You should only need it if
          you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
          to install the \`Automake' and \`Perl' packages.  Grab them from
          any GNU archive site."
@@ -102,13 +146,8 @@
     ;;
 
   autoconf)
-    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
-       # We have it, but it failed.
-       exit 1
-    fi
-
     echo 1>&2 "\
-WARNING: \`$1' is missing on your system.  You should only need it if
+WARNING: \`$1' is $msg.  You should only need it if
          you modified \`${configure_ac}'.  You might want to install the
          \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
          archive site."
@@ -116,13 +155,8 @@
     ;;
 
   autoheader)
-    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
-       # We have it, but it failed.
-       exit 1
-    fi
-
     echo 1>&2 "\
-WARNING: \`$1' is missing on your system.  You should only need it if
+WARNING: \`$1' is $msg.  You should only need it if
          you modified \`acconfig.h' or \`${configure_ac}'.  You might want
          to install the \`Autoconf' and \`GNU m4' packages.  Grab them
          from any GNU archive site."
@@ -140,13 +174,8 @@
     ;;
 
   automake*)
-    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
-       # We have it, but it failed.
-       exit 1
-    fi
-
     echo 1>&2 "\
-WARNING: \`$1' is missing on your system.  You should only need it if
+WARNING: \`$1' is $msg.  You should only need it if
          you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
          You might want to install the \`Automake' and \`Perl' packages.
          Grab them from any GNU archive site."
@@ -156,16 +185,11 @@
     ;;
 
   autom4te)
-    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
-       # We have it, but it failed.
-       exit 1
-    fi
-
     echo 1>&2 "\
-WARNING: \`$1' is needed, and you do not seem to have it handy on your
-         system.  You might have modified some files without having the
+WARNING: \`$1' is needed, but is $msg.
+         You might have modified some files without having the
          proper tools for further handling them.
-         You can get \`$1Help2man' as part of \`Autoconf' from any GNU
+         You can get \`$1' as part of \`Autoconf' from any GNU
          archive site."
 
     file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
@@ -185,7 +209,7 @@
 
   bison|yacc)
     echo 1>&2 "\
-WARNING: \`$1' is missing on your system.  You should only need it if
+WARNING: \`$1' $msg.  You should only need it if
          you modified a \`.y' file.  You may need the \`Bison' package
          in order for those modifications to take effect.  You can get
          \`Bison' from any GNU archive site."
@@ -215,7 +239,7 @@
 
   lex|flex)
     echo 1>&2 "\
-WARNING: \`$1' is missing on your system.  You should only need it if
+WARNING: \`$1' is $msg.  You should only need it if
          you modified a \`.l' file.  You may need the \`Flex' package
          in order for those modifications to take effect.  You can get
          \`Flex' from any GNU archive site."
@@ -237,13 +261,8 @@
     ;;
 
   help2man)
-    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
-       # We have it, but it failed.
-       exit 1
-    fi
-
     echo 1>&2 "\
-WARNING: \`$1' is missing on your system.  You should only need it if
+WARNING: \`$1' is $msg.  You should only need it if
 	 you modified a dependency of a manual page.  You may need the
 	 \`Help2man' package in order for those modifications to take
 	 effect.  You can get \`Help2man' from any GNU archive site."
@@ -262,32 +281,27 @@
     ;;
 
   makeinfo)
-    if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
-       # We have makeinfo, but it failed.
-       exit 1
-    fi
-
     echo 1>&2 "\
-WARNING: \`$1' is missing on your system.  You should only need it if
+WARNING: \`$1' is $msg.  You should only need it if
          you modified a \`.texi' or \`.texinfo' file, or any other file
          indirectly affecting the aspect of the manual.  The spurious
          call might also be the consequence of using a buggy \`make' (AIX,
          DU, IRIX).  You might want to install the \`Texinfo' package or
          the \`GNU make' package.  Grab either from any GNU archive site."
+    # The file to touch is that specified with -o ...
     file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
     if test -z "$file"; then
-      file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+      # ... or it is the one specified with @setfilename ...
+      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
+      # ... or it is derived from the source name (dir/f.texi becomes f.info)
+      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
     fi
     touch $file
     ;;
 
   tar)
     shift
-    if test -n "$run"; then
-      echo 1>&2 "ERROR: \`tar' requires --run"
-      exit 1
-    fi
 
     # We have already tried tar in the generic part.
     # Look for gnutar/gtar before invocation to avoid ugly error
@@ -323,10 +337,10 @@
 
   *)
     echo 1>&2 "\
-WARNING: \`$1' is needed, and you do not seem to have it handy on your
-         system.  You might have modified some files without having the
+WARNING: \`$1' is needed, and is $msg.
+         You might have modified some files without having the
          proper tools for further handling them.  Check the \`README' file,
-         it often tells you about the needed prerequirements for installing
+         it often tells you about the needed prerequisites for installing
          this package.  You may also peek at any GNU archive site, in case
          some other package would contain this missing \`$1' program."
     exit 1
@@ -334,3 +348,10 @@
 esac
 
 exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/mkinstalldirs b/mkinstalldirs
old mode 100755
new mode 100644
diff --git a/mkreiserfs/Makefile.am b/mkreiserfs/Makefile.am
deleted file mode 100644
index cdb92ec..0000000
--- a/mkreiserfs/Makefile.am
+++ /dev/null
@@ -1,8 +0,0 @@
-sbin_PROGRAMS = mkreiserfs
-
-mkreiserfs_SOURCES = mkreiserfs.c
-man_MANS = mkreiserfs.8
-EXTRA_DIST = $(man_MANS)
-
-LDADD = $(top_srcdir)/lib/libmisc.a $(top_srcdir)/reiserfscore/libcore.a
-
diff --git a/mkreiserfs/Makefile.in b/mkreiserfs/Makefile.in
deleted file mode 100644
index d7ab194..0000000
--- a/mkreiserfs/Makefile.in
+++ /dev/null
@@ -1,453 +0,0 @@
-# Makefile.in generated by automake 1.7.6 from Makefile.am.
-# @configure_input@
-
-# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-# Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
-
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-host_triplet = @host@
-ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-MAKEINFO = @MAKEINFO@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-UUID_LIBS = @UUID_LIBS@
-VERSION = @VERSION@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-datadir = @datadir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-oldincludedir = @oldincludedir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-sbin_PROGRAMS = mkreiserfs
-
-mkreiserfs_SOURCES = mkreiserfs.c
-man_MANS = mkreiserfs.8
-EXTRA_DIST = $(man_MANS)
-
-LDADD = $(top_srcdir)/lib/libmisc.a $(top_srcdir)/reiserfscore/libcore.a
-subdir = mkreiserfs
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-sbin_PROGRAMS = mkreiserfs$(EXEEXT)
-PROGRAMS = $(sbin_PROGRAMS)
-
-am_mkreiserfs_OBJECTS = mkreiserfs.$(OBJEXT)
-mkreiserfs_OBJECTS = $(am_mkreiserfs_OBJECTS)
-mkreiserfs_LDADD = $(LDADD)
-mkreiserfs_DEPENDENCIES = $(top_srcdir)/lib/libmisc.a \
-	$(top_srcdir)/reiserfscore/libcore.a
-mkreiserfs_LDFLAGS =
-
-DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/mkreiserfs.Po
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-DIST_SOURCES = $(mkreiserfs_SOURCES)
-
-NROFF = nroff
-MANS = $(man_MANS)
-DIST_COMMON = Makefile.am Makefile.in
-SOURCES = $(mkreiserfs_SOURCES)
-
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  mkreiserfs/Makefile
-Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
-sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
-install-sbinPROGRAMS: $(sbin_PROGRAMS)
-	@$(NORMAL_INSTALL)
-	$(mkinstalldirs) $(DESTDIR)$(sbindir)
-	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
-	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-	  if test -f $$p \
-	  ; then \
-	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
-	   echo " $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) $$p $(DESTDIR)$(sbindir)/$$f"; \
-	   $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) $$p $(DESTDIR)$(sbindir)/$$f || exit 1; \
-	  else :; fi; \
-	done
-
-uninstall-sbinPROGRAMS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
-	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
-	  echo " rm -f $(DESTDIR)$(sbindir)/$$f"; \
-	  rm -f $(DESTDIR)$(sbindir)/$$f; \
-	done
-
-clean-sbinPROGRAMS:
-	-test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
-mkreiserfs$(EXEEXT): $(mkreiserfs_OBJECTS) $(mkreiserfs_DEPENDENCIES) 
-	@rm -f mkreiserfs$(EXEEXT)
-	$(LINK) $(mkreiserfs_LDFLAGS) $(mkreiserfs_OBJECTS) $(mkreiserfs_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT) core *.core
-
-distclean-compile:
-	-rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkreiserfs.Po@am__quote@
-
-distclean-depend:
-	-rm -rf ./$(DEPDIR)
-
-.c.o:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
-
-.c.obj:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
-uninstall-info-am:
-
-man8dir = $(mandir)/man8
-install-man8: $(man8_MANS) $(man_MANS)
-	@$(NORMAL_INSTALL)
-	$(mkinstalldirs) $(DESTDIR)$(man8dir)
-	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.8*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
-	  else file=$$i; fi; \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    8*) ;; \
-	    *) ext='8' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst"; \
-	  $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \
-	done
-uninstall-man8:
-	@$(NORMAL_UNINSTALL)
-	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.8*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    8*) ;; \
-	    *) ext='8' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " rm -f $(DESTDIR)$(man8dir)/$$inst"; \
-	  rm -f $(DESTDIR)$(man8dir)/$$inst; \
-	done
-
-ETAGS = etags
-ETAGSFLAGS =
-
-CTAGS = ctags
-CTAGSFLAGS =
-
-tags: TAGS
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	mkid -fID $$unique
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(ETAGS_ARGS)$$tags$$unique" \
-	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	     $$tags $$unique
-
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-
-top_distdir = ..
-distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkinstalldirs) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
-	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS) $(MANS)
-
-installdirs:
-	$(mkinstalldirs) $(DESTDIR)$(sbindir) $(DESTDIR)$(man8dir)
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-rm -f Makefile $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am
-
-distclean: distclean-am
-
-distclean-am: clean-am distclean-compile distclean-depend \
-	distclean-generic distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-man
-
-install-exec-am: install-sbinPROGRAMS
-
-install-info: install-info-am
-
-install-man: install-man8
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-info-am uninstall-man uninstall-sbinPROGRAMS
-
-uninstall-man: uninstall-man8
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-sbinPROGRAMS ctags distclean distclean-compile \
-	distclean-depend distclean-generic distclean-tags distdir dvi \
-	dvi-am info info-am install install-am install-data \
-	install-data-am install-exec install-exec-am install-info \
-	install-info-am install-man install-man8 install-sbinPROGRAMS \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am uninstall-info-am uninstall-man \
-	uninstall-man8 uninstall-sbinPROGRAMS
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/reiserfscore/Makefile.am b/reiserfscore/Makefile.am
deleted file mode 100644
index f1b9be3..0000000
--- a/reiserfscore/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-noinst_LIBRARIES = libcore.a
-
-libcore_a_SOURCES = do_balan.c fix_node.c hashes.c ibalance.c lbalance.c prints.c \
-stree.c node_formats.c reiserfslib.c bitmap.c journal.c includes.h
-
diff --git a/reiserfscore/Makefile.in b/reiserfscore/Makefile.in
deleted file mode 100644
index 1d1f24a..0000000
--- a/reiserfscore/Makefile.in
+++ /dev/null
@@ -1,394 +0,0 @@
-# Makefile.in generated by automake 1.7.6 from Makefile.am.
-# @configure_input@
-
-# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-# Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
-
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-host_triplet = @host@
-ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-MAKEINFO = @MAKEINFO@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-UUID_LIBS = @UUID_LIBS@
-VERSION = @VERSION@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-datadir = @datadir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-oldincludedir = @oldincludedir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-noinst_LIBRARIES = libcore.a
-
-libcore_a_SOURCES = do_balan.c fix_node.c hashes.c ibalance.c lbalance.c prints.c \
-stree.c node_formats.c reiserfslib.c bitmap.c journal.c includes.h
-
-subdir = reiserfscore
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-LIBRARIES = $(noinst_LIBRARIES)
-
-libcore_a_AR = $(AR) cru
-libcore_a_LIBADD =
-am_libcore_a_OBJECTS = do_balan.$(OBJEXT) fix_node.$(OBJEXT) \
-	hashes.$(OBJEXT) ibalance.$(OBJEXT) lbalance.$(OBJEXT) \
-	prints.$(OBJEXT) stree.$(OBJEXT) node_formats.$(OBJEXT) \
-	reiserfslib.$(OBJEXT) bitmap.$(OBJEXT) journal.$(OBJEXT)
-libcore_a_OBJECTS = $(am_libcore_a_OBJECTS)
-
-DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/bitmap.Po ./$(DEPDIR)/do_balan.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/fix_node.Po ./$(DEPDIR)/hashes.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/ibalance.Po ./$(DEPDIR)/journal.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/lbalance.Po ./$(DEPDIR)/node_formats.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/prints.Po ./$(DEPDIR)/reiserfslib.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/stree.Po
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-DIST_SOURCES = $(libcore_a_SOURCES)
-DIST_COMMON = Makefile.am Makefile.in
-SOURCES = $(libcore_a_SOURCES)
-
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  reiserfscore/Makefile
-Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
-
-AR = ar
-
-clean-noinstLIBRARIES:
-	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-libcore.a: $(libcore_a_OBJECTS) $(libcore_a_DEPENDENCIES) 
-	-rm -f libcore.a
-	$(libcore_a_AR) libcore.a $(libcore_a_OBJECTS) $(libcore_a_LIBADD)
-	$(RANLIB) libcore.a
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT) core *.core
-
-distclean-compile:
-	-rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bitmap.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/do_balan.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fix_node.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hashes.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ibalance.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/journal.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lbalance.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/node_formats.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prints.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfslib.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stree.Po@am__quote@
-
-distclean-depend:
-	-rm -rf ./$(DEPDIR)
-
-.c.o:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
-
-.c.obj:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
-uninstall-info-am:
-
-ETAGS = etags
-ETAGSFLAGS =
-
-CTAGS = ctags
-CTAGSFLAGS =
-
-tags: TAGS
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	mkid -fID $$unique
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(ETAGS_ARGS)$$tags$$unique" \
-	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	     $$tags $$unique
-
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-
-top_distdir = ..
-distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkinstalldirs) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
-	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LIBRARIES)
-
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-rm -f Makefile $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
-
-distclean: distclean-am
-
-distclean-am: clean-am distclean-compile distclean-depend \
-	distclean-generic distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-exec-am:
-
-install-info: install-info-am
-
-install-man:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-info-am
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-noinstLIBRARIES ctags distclean distclean-compile \
-	distclean-depend distclean-generic distclean-tags distdir dvi \
-	dvi-am info info-am install install-am install-data \
-	install-data-am install-exec install-exec-am install-info \
-	install-info-am install-man install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
-	uninstall-am uninstall-info-am
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/reiserfscore/do_balan.c b/reiserfscore/do_balan.c
deleted file mode 100644
index 43bfbc4..0000000
--- a/reiserfscore/do_balan.c
+++ /dev/null
@@ -1,1153 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-/* Now we have all buffers that must be used in balancing of the tree 	*/
-/* Further calculations can not cause schedule(), and thus the buffer 	*/
-/* tree will be stable until the balancing will be finished 		*/
-/* balance the tree according to the analysis made before,		*/
-/* and using buffers obtained after all above.				*/
-
-
-/**
- ** balance_leaf_when_delete
- ** balance_leaf
- ** do_balance
- **
- **/
-
-#include "includes.h"
-
-/* summary:
- if deleting something ( tb->insert_size[0] < 0 )
-   return(balance_leaf_when_delete()); (flag d handled here)
- else
-   if lnum is larger than 0 we put items into the left node
-   if rnum is larger than 0 we put items into the right node
-   if snum1 is larger than 0 we put items into the new node s1
-   if snum2 is larger than 0 we put items into the new node s2 
-Note that all *num* count new items being created.
-
-It would be easier to read balance_leaf() if each of these summary
-lines was a separate procedure rather than being inlined.  I think
-that there are many passages here and in balance_leaf_when_delete() in
-which two calls to one procedure can replace two passages, and it
-might save cache space and improve software maintenance costs to do so.  
-
-Vladimir made the perceptive comment that we should offload most of
-the decision making in this function into fix_nodes/check_balance, and
-then create some sort of structure in tb that says what actions should
-be performed by do_balance.
-
--Hans */
-
-
-
-/* Balance leaf node in case of delete or cut: insert_size[0] < 0
- *
- * lnum, rnum can have values >= -1
- *	-1 means that the neighbor must be joined with S
- *	 0 means that nothing should be done with the neighbor
- *	>0 means to shift entirely or partly the specified number of items to the neighbor
- */
-static int balance_leaf_when_delete (/*struct reiserfs_transaction_handle *th,*/
-				     struct tree_balance * tb, 
-				     int flag)
-{
-    struct buffer_head * tbS0 = PATH_PLAST_BUFFER (tb->tb_path);
-    int item_pos = PATH_LAST_POSITION (tb->tb_path);
-    int pos_in_item = tb->tb_path->pos_in_item;
-    struct buffer_info bi;
-    int n;
-    struct item_head * ih;
-
-    ih = B_N_PITEM_HEAD (tbS0, item_pos);
-
-    /* Delete or truncate the item */
-
-    switch (flag) {
-    case M_DELETE:   /* delete item in S[0] */
-
-	bi.bi_bh = tbS0;
-	bi.bi_parent = PATH_H_PPARENT (tb->tb_path, 0);
-	bi.bi_position = PATH_H_POSITION (tb->tb_path, 1);
-	leaf_delete_items (tb->tb_fs, &bi, 0, item_pos, 1, -1);
-
-	if ( ! item_pos ) {
-	    // we have removed first item in the node - update left delimiting key
-	    if ( B_NR_ITEMS(tbS0) ) {
-		replace_key(tb->tb_fs, tb->CFL[0],tb->lkey[0],tbS0,0);
-	    }
-	    else {
-		if ( ! PATH_H_POSITION (tb->tb_path, 1) )
-		    replace_key(tb->tb_fs, tb->CFL[0],tb->lkey[0],PATH_H_PPARENT(tb->tb_path, 0),0);
-	    }
-	} 
-    
-	break;
-
-    case M_CUT: {  /* cut item in S[0] */
-	bi.bi_bh = tbS0;
-	bi.bi_parent = PATH_H_PPARENT (tb->tb_path, 0);
-	bi.bi_position = PATH_H_POSITION (tb->tb_path, 1);
-	if (I_IS_DIRECTORY_ITEM (ih)) {
-	    /* UFS unlink semantics are such that you can only delete
-               one directory entry at a time. */
-	    /* when we cut a directory tb->insert_size[0] means number
-               of entries to be cut (always 1) */
-	    tb->insert_size[0] = -1;
-	    leaf_cut_from_buffer (tb->tb_fs, &bi, item_pos, pos_in_item, -tb->insert_size[0]);
-
-	    if ( ! item_pos && ! pos_in_item ) {
-		replace_key(tb->tb_fs, tb->CFL[0],tb->lkey[0],tbS0,0);
-	    }
-	} else {
-	    leaf_cut_from_buffer (tb->tb_fs, &bi, item_pos, pos_in_item, -tb->insert_size[0]);
-	}
-	break;
-    }
-
-    default:
-	print_tb(flag, item_pos, pos_in_item, tb,"when_del");
-	reiserfs_panic ("PAP-12040: balance_leaf_when_delete: unexpectable mode: %s(%d)",
-			(flag == M_PASTE) ? "PASTE" : ((flag == M_INSERT) ? "INSERT" : "UNKNOWN"), flag);
-    }
-
-    /* the rule is that no shifting occurs unless by shifting a node can be freed */
-    n = B_NR_ITEMS(tbS0);
-    if ( tb->lnum[0] )     /* L[0] takes part in balancing */
-    {
-	if ( tb->lnum[0] == -1 )    /* L[0] must be joined with S[0] */
-	{
-	    if ( tb->rnum[0] == -1 )    /* R[0] must be also joined with S[0] */
-	    {			
-		if ( tb->FR[0] == PATH_H_PPARENT(tb->tb_path, 0) )
-		{
-		    /* all contents of all the 3 buffers will be in L[0] */
-		    if ( PATH_H_POSITION (tb->tb_path, 1) == 0 && 1 < B_NR_ITEMS(tb->FR[0]) )
-			replace_key(tb->tb_fs, tb->CFL[0],tb->lkey[0],tb->FR[0],1);
-
-
-		    leaf_move_items (LEAF_FROM_S_TO_L, tb, n, -1, 0);
-		    leaf_move_items (LEAF_FROM_R_TO_L, tb, B_NR_ITEMS(tb->R[0]), -1, 0);
-
-		    reiserfs_invalidate_buffer (tb, tbS0, 1/*do_free_block*/);
-		    reiserfs_invalidate_buffer (tb, tb->R[0], 1/*do_free_block*/);
-
-		    return 0;
-		}
-		/* all contents of all the 3 buffers will be in R[0] */
-		leaf_move_items(LEAF_FROM_S_TO_R, tb, n, -1, 0);
-		leaf_move_items(LEAF_FROM_L_TO_R, tb, B_NR_ITEMS(tb->L[0]), -1, 0);
-
-		/* right_delimiting_key is correct in R[0] */
-		replace_key(tb->tb_fs, tb->CFR[0],tb->rkey[0],tb->R[0],0);
-
-		reiserfs_invalidate_buffer (tb, tbS0, 1/*do_free_block*/);
-		reiserfs_invalidate_buffer (tb, tb->L[0], 1/*do_free_block*/);
-
-		return -1;
-	    }
-
-	    /* all contents of L[0] and S[0] will be in L[0] */
-	    leaf_shift_left(tb, n, -1);
-
-	    reiserfs_invalidate_buffer (tb, tbS0, 1/*do_free_block*/);
-
-	    return 0;
-	}
-	/* a part of contents of S[0] will be in L[0] and the rest part of S[0] will be in R[0] */
-
-	leaf_shift_left (tb, tb->lnum[0], tb->lbytes);
-	leaf_shift_right(tb, tb->rnum[0], tb->rbytes);
-
-	reiserfs_invalidate_buffer (tb, tbS0, 1/*do_free_block*/);
-
-	return 0;
-    }
-
-    if ( tb->rnum[0] == -1 ) {
-	/* all contents of R[0] and S[0] will be in R[0] */
-	leaf_shift_right(tb, n, -1);
-	reiserfs_invalidate_buffer (tb, tbS0, 1/*do_free_block*/);
-	return 0;
-    }
-    return 0;
-}
-
-static int balance_leaf(/*struct reiserfs_transaction_handle *th, */
-			struct tree_balance * tb, /* see reiserfs_fs.h */
-			struct item_head * ih, /* item header of inserted item */
-			const char * body,		/* body  of inserted item or bytes to paste */
-			int flag,			/* i - insert, d - delete, c - cut, p - paste
-							   (see comment to do_balance) */
-			int zeros_number,		/* it is always 0 */
-				
-			struct item_head * insert_key,  /* in our processing of one level we sometimes determine what
-							   must be inserted into the next higher level.  This insertion
-							   consists of a key or two keys and their corresponding
-							   pointers */
-			struct buffer_head ** insert_ptr /* inserted node-ptrs for the next level */
-    )
-{
-    int pos_in_item = tb->tb_path->pos_in_item; /* position in item, in bytes for direct and
-						   indirect items, in entries for directories (for
-						   which it is an index into the array of directory
-						   entry headers.) */
-    struct buffer_head * tbS0 = PATH_PLAST_BUFFER (tb->tb_path);
-/*  struct buffer_head * tbF0 = PATH_H_PPARENT (tb->tb_path, 0);
-    int S0_b_item_order = PATH_H_B_ITEM_ORDER (tb->tb_path, 0);*/
-    int item_pos = PATH_LAST_POSITION (tb->tb_path);	/*  index into the array of item headers in S[0] 
-							    of the affected item */
-    struct buffer_info bi;
-    struct buffer_head *S_new[2];  /* new nodes allocated to hold what could not fit into S */
-    int snum[2];			   /* number of items that will be placed into S_new (includes partially shifted items) */
-    int sbytes[2];                   /* if an item is partially shifted into S_new then 
-					if it is a directory item 
-					it is the number of entries from the item that are shifted into S_new
-					else
-					it is the number of bytes from the item that are shifted into S_new
-				     */
-    int n, i;
-    int ret_val;
-
-    /* Make balance in case insert_size[0] < 0 */
-    if ( tb->insert_size[0] < 0 )
-	return balance_leaf_when_delete (/*th,*/ tb, flag);
-  
-    /* for indirect item pos_in_item is measured in unformatted node
-       pointers. Recalculate to bytes */
-    if (flag != M_INSERT && I_IS_INDIRECT_ITEM (B_N_PITEM_HEAD (tbS0, item_pos)))
-	pos_in_item *= UNFM_P_SIZE;
-
-    if ( tb->lnum[0] > 0 ) {
-	/* Shift lnum[0] items from S[0] to the left neighbor L[0] */
-	if ( item_pos < tb->lnum[0] ) {
-	    /* new item or it part falls to L[0], shift it too */
-	    n = B_NR_ITEMS(tb->L[0]);
-
-	    switch (flag) {
-	    case M_INSERT:   /* insert item into L[0] */
-
-		if ( item_pos == tb->lnum[0] - 1 && tb->lbytes != -1 ) {
-		    /* part of new item falls into L[0] */
-		    int new_item_len;
-
-		    ret_val = leaf_shift_left (/*th,*/ tb, tb->lnum[0]-1, -1);
-		    /* Calculate item length to insert to S[0] */
-		    new_item_len = get_ih_item_len (ih) - tb->lbytes;
-		    /* Calculate and check item length to insert to L[0] */
-		    set_ih_item_len (ih, get_ih_item_len (ih) - new_item_len);
-		    /* Insert new item into L[0] */
-		    bi.bi_bh = tb->L[0];
-		    bi.bi_parent = tb->FL[0];
-		    bi.bi_position = get_left_neighbor_position (tb, 0);
-		    leaf_insert_into_buf (tb->tb_fs, &bi, n + item_pos - ret_val, ih, body,
-					  zeros_number > get_ih_item_len (ih) ? get_ih_item_len (ih) : zeros_number);
-
-		    /* Calculate key component, item length and body to insert into S[0] */
-		    //ih->ih_key.k_offset += tb->lbytes;
-		    set_offset (key_format (&ih->ih_key), &ih->ih_key, get_offset (&ih->ih_key) +
-		    	tb->lbytes * (is_indirect_ih(ih) ? tb->tb_fs->fs_blocksize / UNFM_P_SIZE : 1) );
-		    set_ih_item_len (ih, new_item_len);
-		    if ( tb->lbytes >  zeros_number ) {
-			body += (tb->lbytes - zeros_number);
-			zeros_number = 0;
-		    }
-		    else
-			zeros_number -= tb->lbytes;
-		} else {
-		    /* new item in whole falls into L[0] */
-		    /* Shift lnum[0]-1 items to L[0] */
-		    ret_val = leaf_shift_left(tb, tb->lnum[0]-1, tb->lbytes);
-
-		    /* Insert new item into L[0] */
-		    bi.bi_bh = tb->L[0];
-		    bi.bi_parent = tb->FL[0];
-		    bi.bi_position = get_left_neighbor_position (tb, 0);
-		    leaf_insert_into_buf (tb->tb_fs, &bi, n + item_pos - ret_val, ih, body, zeros_number);
-
-		    tb->insert_size[0] = 0;
-		    zeros_number = 0;
-		}
-		break;
-
-	    case M_PASTE:   /* append item in L[0] */
-
-		if ( item_pos == tb->lnum[0] - 1 && tb->lbytes != -1 ) {
-		    /* we must shift the part of the appended item */
-		    if ( I_IS_DIRECTORY_ITEM (B_N_PITEM_HEAD (tbS0, item_pos))) {
-			/* directory item */
-			if ( tb->lbytes > pos_in_item ) {
-			    /* new directory entry falls into L[0] */
-			    struct item_head * pasted;
-			    int l_pos_in_item = pos_in_item;
-							  
-			    /* Shift lnum[0] - 1 items in whole. Shift lbytes - 1 entries from given directory item */
-			    ret_val = leaf_shift_left(tb, tb->lnum[0], tb->lbytes - 1);
-			    if ( ret_val && ! item_pos ) {
-				pasted =  B_N_PITEM_HEAD(tb->L[0],B_NR_ITEMS(tb->L[0])-1);
-				l_pos_in_item += get_ih_entry_count(pasted) - (tb->lbytes-1);
-			    }
-
-			    /* Append given directory entry to directory item */
-			    bi.bi_bh = tb->L[0];
-			    bi.bi_parent = tb->FL[0];
-			    bi.bi_position = get_left_neighbor_position (tb, 0);
-			    leaf_paste_in_buffer (tb->tb_fs, &bi, n + item_pos - ret_val, l_pos_in_item,
-						  tb->insert_size[0], body, zeros_number);
-
-			    /* previous string prepared space for pasting new entry, following string pastes this entry */
-
-			    /* when we have merge directory item, pos_in_item has been changed too */
-
-			    /* paste new directory entry. 1 is entry number */
-			    leaf_paste_entries (bi.bi_bh, n + item_pos - ret_val, l_pos_in_item, 1,
-						(struct reiserfs_de_head *)body, 
-						body + DEH_SIZE, tb->insert_size[0]
-				);
-			    tb->insert_size[0] = 0;
-			} else {
-			    /* new directory item doesn't fall into L[0] */
-			    /* Shift lnum[0]-1 items in whole. Shift lbytes directory entries from directory item number lnum[0] */
-			    leaf_shift_left (tb, tb->lnum[0], tb->lbytes);
-			}
-			/* Calculate new position to append in item body */
-			pos_in_item -= tb->lbytes;
-		    }
-		    else {
-			/* regular object */
-			if ( tb->lbytes >= pos_in_item ) {
-			    /* appended item will be in L[0] in whole */
-			    int l_n, temp_n;
-                            struct key * key;
-
-			    /* this bytes number must be appended to the last item of L[h] */
-			    l_n = tb->lbytes - pos_in_item;
-
-			    /* Calculate new insert_size[0] */
-			    tb->insert_size[0] -= l_n;
-
-			    ret_val =  leaf_shift_left(tb, tb->lnum[0],
-						       get_ih_item_len (B_N_PITEM_HEAD(tbS0,item_pos)));
-			    /* Append to body of item in L[0] */
-			    bi.bi_bh = tb->L[0];
-			    bi.bi_parent = tb->FL[0];
-			    bi.bi_position = get_left_neighbor_position (tb, 0);
-			    leaf_paste_in_buffer(tb->tb_fs, 
-						 &bi,n + item_pos - ret_val,
-						 get_ih_item_len (B_N_PITEM_HEAD(tb->L[0],n+item_pos-ret_val)),
-						 l_n,body, zeros_number > l_n ? l_n : zeros_number);
-
-
-			    /* 0-th item in S0 can be only of DIRECT type when l_n != 0*/
-			    //B_N_PKEY (tbS0, 0)->k_offset += l_n;z
-			    key = B_N_PKEY (tbS0, 0);
-                            temp_n = is_indirect_ih(B_N_PITEM_HEAD (tb->L[0], n + item_pos - ret_val)) ?
-                                 (int)((l_n / UNFM_P_SIZE) * tb->tb_fs->fs_blocksize) : l_n;
-
-			    set_offset (key_format (key), key, get_offset (key) + temp_n);
-
-			    //B_N_PDELIM_KEY(tb->CFL[0],tb->lkey[0])->k_offset += l_n;
-			    key = B_N_PDELIM_KEY(tb->CFL[0],tb->lkey[0]);
-			    set_offset (key_format (key), key, get_offset (key) + temp_n);
-
-			    /* Calculate new body, position in item and insert_size[0] */
-			    if ( l_n > zeros_number ) {
-				body += (l_n - zeros_number);
-				zeros_number = 0;
-			    }
-			    else
-				zeros_number -= l_n;
-			    pos_in_item = 0;	
-			}
-			else {
-			    /* only part of the appended item will be in L[0] */
-
-			    /* Calculate position in item for append in S[0] */
-			    pos_in_item -= tb->lbytes;
-
-			    /* Shift lnum[0] - 1 items in whole. Shift lbytes - 1 byte from item number lnum[0] */
-			    leaf_shift_left(tb,tb->lnum[0],tb->lbytes);
-			}
-		    }
-		} else {
-		    /* appended item will be in L[0] in whole */
-		    struct item_head * pasted;
-		
-		    if ( ! item_pos  && is_left_mergeable (tb->tb_fs, tb->tb_path) == 1 )
-			{ /* if we paste into first item of S[0] and it is left mergable */
-			    /* then increment pos_in_item by the size of the last item in L[0] */
-			    pasted = B_N_PITEM_HEAD(tb->L[0],n-1);
-			    if ( I_IS_DIRECTORY_ITEM(pasted) )
-				pos_in_item += get_ih_entry_count (pasted);
-			    else
-				pos_in_item += get_ih_item_len (pasted);
-			}
-
-		    /* Shift lnum[0] - 1 items in whole. Shift lbytes - 1 byte from item number lnum[0] */
-		    ret_val = leaf_shift_left(tb, tb->lnum[0], tb->lbytes);
-		    /* Append to body of item in L[0] */
-		    bi.bi_bh = tb->L[0];
-		    bi.bi_parent = tb->FL[0];
-		    bi.bi_position = get_left_neighbor_position (tb, 0);
-		    leaf_paste_in_buffer (tb->tb_fs, &bi, n + item_pos - ret_val, pos_in_item, tb->insert_size[0],
-					  body, zeros_number);
-
-		    /* if appended item is directory, paste entry */
-		    pasted = B_N_PITEM_HEAD (tb->L[0], n + item_pos - ret_val);
-		    if (I_IS_DIRECTORY_ITEM (pasted))
-			leaf_paste_entries (bi.bi_bh, n + item_pos - ret_val, pos_in_item, 1, 
-					    (struct reiserfs_de_head *)body, body + DEH_SIZE, tb->insert_size[0]);
-
-		    /* if appended item is indirect item, put unformatted node into un list */
-		    if (I_IS_INDIRECT_ITEM (pasted))
-			set_ih_free_space (pasted, 0);
-
-		    tb->insert_size[0] = 0;
-		    zeros_number = 0;
-		}
-		break;
-	    default:    /* cases d and t */
-		reiserfs_panic ("PAP-12130: balance_leaf: lnum > 0: unexpectable mode: %s(%d)",
-				(flag == M_DELETE) ? "DELETE" : ((flag == M_CUT) ? "CUT" : "UNKNOWN"), flag);
-	    }
-	} else { 
-	    /* new item doesn't fall into L[0] */
-	    leaf_shift_left (tb, tb->lnum[0], tb->lbytes);
-	}
-    }	/* tb->lnum[0] > 0 */
-
-    /* Calculate new item position */
-    item_pos -= ( tb->lnum[0] - (( tb->lbytes != -1 ) ? 1 : 0));
-
-    if ( tb->rnum[0] > 0 ) {
-	/* shift rnum[0] items from S[0] to the right neighbor R[0] */
-	n = B_NR_ITEMS(tbS0);
-	switch ( flag ) {
-
-	case M_INSERT:   /* insert item */
-	    if ( n - tb->rnum[0] < item_pos ) {
-		/* new item or its part falls to R[0] */
-		if ( item_pos == n - tb->rnum[0] + 1 && tb->rbytes != -1 ) {
-		    /* part of new item falls into R[0] */
-		    loff_t old_key_comp, old_len, r_zeros_number;
-		    const char * r_body;
-		    loff_t multiplyer;
-
-		    leaf_shift_right(tb, tb->rnum[0] - 1, -1);
-
-		    /* Remember key component and item length */
-		    old_key_comp = get_offset (&ih->ih_key);
-		    old_len = get_ih_item_len (ih);
-
-		    multiplyer = is_indirect_ih(ih) ? tb->tb_fs->fs_blocksize / UNFM_P_SIZE : 1;
-		    /* Calculate key component and item length to insert into R[0] */
-		    //ih->ih_key.k_offset += (old_len - tb->rbytes);
-		    set_offset (key_format (&ih->ih_key), &ih->ih_key, old_key_comp +
-		    	(old_len - tb->rbytes) * multiplyer );
-
-		    set_ih_item_len (ih, tb->rbytes);
-		    /* Insert part of the item into R[0] */
-		    bi.bi_bh = tb->R[0];
-		    bi.bi_parent = tb->FR[0];
-		    bi.bi_position = get_right_neighbor_position (tb, 0);
-		    if (old_len - tb->rbytes > zeros_number ) {
-			r_zeros_number = 0;
-			r_body = body + old_len - tb->rbytes - zeros_number;
-		    }
-		    else { /* zeros_number is always 0 */
-			r_body = body;
-			r_zeros_number = zeros_number - old_len - tb->rbytes;
-			zeros_number -= r_zeros_number;
-		    }
-
-		    leaf_insert_into_buf (tb->tb_fs, &bi, 0, ih, r_body, r_zeros_number);
-
-		    /* Replace right delimiting key by first key in R[0] */
-		    replace_key(tb->tb_fs, tb->CFR[0],tb->rkey[0],tb->R[0],0);
-
-		    /* Calculate key component and item length to insert into S[0] */
-		    //ih->ih_key.k_offset = old_key_comp;
-		    set_offset (key_format (&ih->ih_key), &ih->ih_key, old_key_comp);
-
-		    set_ih_item_len (ih, old_len - tb->rbytes);
-
-		    tb->insert_size[0] -= tb->rbytes;
-
-		} else {
-		    /* whole new item falls into R[0] */
-
-		    /* Shift rnum[0]-1 items to R[0] */
-		    ret_val = leaf_shift_right(tb, tb->rnum[0] - 1, tb->rbytes);
-
-		    /* Insert new item into R[0] */
-		    bi.bi_bh = tb->R[0];
-		    bi.bi_parent = tb->FR[0];
-		    bi.bi_position = get_right_neighbor_position (tb, 0);
-		    leaf_insert_into_buf (tb->tb_fs, &bi, item_pos - n + tb->rnum[0] - 1, ih, body, zeros_number);
-
-		    /* If we insert new item in the begin of R[0] change the right delimiting key */
-		    if ( item_pos - n + tb->rnum[0] - 1 == 0 ) {
-			replace_key (tb->tb_fs, tb->CFR[0],tb->rkey[0],tb->R[0],0);
-		    }
-		    zeros_number = tb->insert_size[0] = 0;
-		}
-	    } else {
-		/* new item or part of it doesn't fall into R[0] */
-		leaf_shift_right (tb, tb->rnum[0], tb->rbytes);
-	    }
-	    break;
-
-	case M_PASTE:   /* append item */
-
-	    if ( n - tb->rnum[0] <= item_pos ) { /* pasted item or part of it falls to R[0] */
-		if ( item_pos == n - tb->rnum[0] && tb->rbytes != -1 ) {
-		    /* we must shift the part of the appended item */
-		    if ( I_IS_DIRECTORY_ITEM (B_N_PITEM_HEAD(tbS0, item_pos))) {
-			/* we append to directory item */
-			int entry_count;
-
-			entry_count = get_ih_entry_count (B_N_PITEM_HEAD(tbS0, item_pos));
-			if ( entry_count - tb->rbytes < pos_in_item ) {
-			    /* new directory entry falls into R[0] */
-			    int paste_entry_position;
-
-			    /* Shift rnum[0]-1 items in whole. Shift rbytes-1 directory entries from directory item number rnum[0] */
-			    leaf_shift_right (tb, tb->rnum[0], tb->rbytes - 1);
-
-			    /* Paste given directory entry to directory item */
-			    paste_entry_position = pos_in_item - entry_count + tb->rbytes - 1;
-
-			    bi.bi_bh = tb->R[0];
-			    bi.bi_parent = tb->FR[0];
-			    bi.bi_position = get_right_neighbor_position (tb, 0);
-			    leaf_paste_in_buffer (tb->tb_fs, &bi, 0, paste_entry_position,
-						  tb->insert_size[0],body,zeros_number);
-			    /* paste entry */
-			    leaf_paste_entries (
-				bi.bi_bh, 0, paste_entry_position, 1, (struct reiserfs_de_head *)body, 
-				body + DEH_SIZE, tb->insert_size[0]
-				);								
-						
-			    if ( paste_entry_position == 0 ) {
-				/* change delimiting keys */
-				replace_key(tb->tb_fs, tb->CFR[0],tb->rkey[0],tb->R[0],0);
-			    }
-
-			    tb->insert_size[0] = 0;
-			    pos_in_item++;
-			} else {
-			    /* new directory entry doesn't fall into R[0] */
-			    leaf_shift_right (tb, tb->rnum[0],tb->rbytes);
-			}
-		    }
-		    else {
-			/* regular object */
-
-			int n_shift, n_rem, r_zeros_number;
-			const char * r_body;
-			struct key * key;
-
-			/* Calculate number of bytes which must be shifted from appended item */
-			if ( (n_shift = tb->rbytes - tb->insert_size[0]) < 0 )
-			    n_shift = 0;
-
-			leaf_shift_right (tb, tb->rnum[0], n_shift);
-
-			/* Calculate number of bytes which must remain in body after appending to R[0] */
-			if ( (n_rem = tb->insert_size[0] - tb->rbytes) < 0 )
-			    n_rem = 0;
-
-			{
-			    unsigned long temp_rem = n_rem;
-			
-			    if (is_indirect_key(B_N_PKEY(tb->R[0],0)))
-				temp_rem = (n_rem / UNFM_P_SIZE) * tb->tb_fs->fs_blocksize;
-
-			    //B_N_PKEY(tb->R[0],0)->k_offset += n_rem;
-			    key = B_N_PKEY(tb->R[0],0);
-			    set_offset (key_format (key), key, get_offset (key) + temp_rem);
-
-			    //B_N_PDELIM_KEY(tb->CFR[0],tb->rkey[0])->k_offset += n_rem;
-			    key = B_N_PDELIM_KEY(tb->CFR[0],tb->rkey[0]);
-			    set_offset (key_format (key), key, get_offset (key) + temp_rem);
-                        }
-
-			mark_buffer_dirty (tb->CFR[0]);
-
-			/* Append part of body into R[0] */
-			bi.bi_bh = tb->R[0];
-			bi.bi_parent = tb->FR[0];
-			bi.bi_position = get_right_neighbor_position (tb, 0);
-			if ( n_rem > zeros_number ) {
-			    r_zeros_number = 0;
-			    r_body = body + n_rem - zeros_number;
-			}
-			else {
-			    r_body = body;
-			    r_zeros_number = zeros_number - n_rem;
-			    zeros_number -= r_zeros_number;
-			}
-
-			leaf_paste_in_buffer(tb->tb_fs, &bi, 0, n_shift, tb->insert_size[0] - n_rem, r_body, r_zeros_number);
-
-			if (I_IS_INDIRECT_ITEM(B_N_PITEM_HEAD(tb->R[0],0))) {
-			    set_ih_free_space (B_N_PITEM_HEAD(tb->R[0],0), 0);
-			}
-
-			tb->insert_size[0] = n_rem;
-			if ( ! n_rem )
-			    pos_in_item ++;
-		    }
-		}
-		else { 
-		    /* pasted item falls into R[0] entirely */
-
-		    struct item_head * pasted;
-
-		    ret_val = leaf_shift_right (tb, tb->rnum[0], tb->rbytes);
-
-		    /* append item in R[0] */
-		    if ( pos_in_item >= 0 ) {
-			bi.bi_bh = tb->R[0];
-			bi.bi_parent = tb->FR[0];
-			bi.bi_position = get_right_neighbor_position (tb, 0);
-			leaf_paste_in_buffer(tb->tb_fs, &bi,item_pos - n + tb->rnum[0], pos_in_item,
-					     tb->insert_size[0],body, zeros_number);
-		    }
-
-		    /* paste new entry, if item is directory item */
-		    pasted = B_N_PITEM_HEAD(tb->R[0], item_pos - n + tb->rnum[0]);
-		    if (I_IS_DIRECTORY_ITEM (pasted) && pos_in_item >= 0 ) {
-			leaf_paste_entries (bi.bi_bh, item_pos - n + tb->rnum[0], pos_in_item, 1, 
-					    (struct reiserfs_de_head *)body, body + DEH_SIZE, tb->insert_size[0]);
-			if ( ! pos_in_item ) {
-			    /* update delimiting keys */
-			    replace_key (tb->tb_fs, tb->CFR[0],tb->rkey[0],tb->R[0],0);
-			}
-		    }
-
-		    if (I_IS_INDIRECT_ITEM (pasted))
-			set_ih_free_space (pasted, 0);
-		    zeros_number = tb->insert_size[0] = 0;
-		}
-	    }
-	    else {
-		/* new item doesn't fall into R[0] */
-		leaf_shift_right (tb, tb->rnum[0], tb->rbytes);
-	    }
-	    break;
-
-	default:    /* cases d and t */
-	    reiserfs_panic ("PAP-12175: balance_leaf: rnum > 0: unexpectable mode: %s(%d)",
-			    (flag == M_DELETE) ? "DELETE" : ((flag == M_CUT) ? "CUT" : "UNKNOWN"), flag);
-	}
-    
-    }	/* tb->rnum[0] > 0 */
-
-    /* if while adding to a node we discover that it is possible to split
-       it in two, and merge the left part into the left neighbor and the
-       right part into the right neighbor, eliminating the node */
-    if ( tb->blknum[0] == 0 ) { /* node S[0] is empty now */
-        /* if insertion was done before 0-th position in R[0], right
-           delimiting key of the tb->L[0]'s and left delimiting key are
-           not set correctly */
-        if (tb->CFL[0]) {
-            if (!tb->CFR[0])
-                reiserfs_panic (tb->tb_fs, "vs-12195: balance_leaf: CFR not initialized");
-            copy_key (B_N_PDELIM_KEY (tb->CFL[0], tb->lkey[0]), B_N_PDELIM_KEY (tb->CFR[0], tb->rkey[0]));
-            mark_buffer_dirty (tb->CFL[0]);
-        }
-        
-	reiserfs_invalidate_buffer(tb,tbS0, 1);									
-	return 0;
-    }
-
-
-    /* Fill new nodes that appear in place of S[0] */
-
-    /* I am told that this copying is because we need an array to enable
-       the looping code. -Hans */
-    snum[0] = tb->s1num,
-	snum[1] = tb->s2num;
-    sbytes[0] = tb->s1bytes;
-    sbytes[1] = tb->s2bytes;
-    for( i = tb->blknum[0] - 2; i >= 0; i-- ) {
-	/* here we shift from S to S_new nodes */
-	S_new[i] = get_FEB(tb);
-
-	/* set block_head's level to leaf level */
-	set_blkh_level (B_BLK_HEAD (S_new[i]), DISK_LEAF_NODE_LEVEL);
-
-	n = B_NR_ITEMS(tbS0);
-	
-	switch (flag) {
-	case M_INSERT:   /* insert item */
-
-	    if ( n - snum[i] < item_pos ) {
-		/* new item or it's part falls to first new node S_new[i]*/
-		if ( item_pos == n - snum[i] + 1 && sbytes[i] != -1 ) {
-		    /* part of new item falls into S_new[i] */
-		    int old_key_comp, old_len, r_zeros_number;
-		    const char * r_body;
-		    loff_t multiplyer;
-
-		    /* Move snum[i]-1 items from S[0] to S_new[i] */
-		    leaf_move_items (LEAF_FROM_S_TO_SNEW, tb, snum[i] - 1, -1, S_new[i]);
-
-		    /* Remember key component and item length */
-		    old_key_comp = get_offset (&ih->ih_key);
-		    old_len = get_ih_item_len (ih);
-		    multiplyer = is_indirect_ih(ih) ? tb->tb_fs->fs_blocksize / UNFM_P_SIZE : 1;
-
-		    /* Calculate key component and item length to insert into S_new[i] */
-		    //ih->ih_key.k_offset += (old_len - sbytes[i]);
-		    set_offset (key_format (&ih->ih_key), &ih->ih_key, old_key_comp +
-		    	(old_len - sbytes[i]) * multiplyer);
-
-		    set_ih_item_len (ih, sbytes[i]);
-
-		    /* Insert part of the item into S_new[i] before 0-th item */
-		    bi.bi_bh = S_new[i];
-		    bi.bi_parent = 0;
-		    bi.bi_position = 0;
-
-		    if ( old_len - sbytes[i] > zeros_number ) {
-			r_zeros_number = 0;
-			r_body = body + (old_len - sbytes[i]) - zeros_number;
-		    }
-		    else {
-			r_body = body;
-			r_zeros_number = zeros_number - (old_len - sbytes[i]);
-			zeros_number -= r_zeros_number;
-		    }
-
-		    leaf_insert_into_buf (tb->tb_fs, &bi, 0, ih, r_body, r_zeros_number);
-
-		    /* Calculate key component and item length to insert into S[i] */
-		    //ih->ih_key.k_offset = old_key_comp;
-		    set_offset (key_format (&ih->ih_key), &ih->ih_key, old_key_comp);
-		    set_ih_item_len (ih, old_len - sbytes[i]);
-		    tb->insert_size[0] -= sbytes[i];
-		}
-		else /* whole new item falls into S_new[i] */
-		{
-		    /* Shift snum[0] - 1 items to S_new[i] (sbytes[i] of split item) */
-		    leaf_move_items (LEAF_FROM_S_TO_SNEW, tb, snum[i] - 1, sbytes[i], S_new[i]);
-
-		    /* Insert new item into S_new[i] */
-		    bi.bi_bh = S_new[i];
-		    bi.bi_parent = 0;
-		    bi.bi_position = 0;
-		    leaf_insert_into_buf (tb->tb_fs, &bi, item_pos - n + snum[i] - 1, ih, body, zeros_number);
-		    zeros_number = tb->insert_size[0] = 0;
-		}
-	    }
-
-	    else /* new item or it part don't falls into S_new[i] */
-	    {
-		leaf_move_items (LEAF_FROM_S_TO_SNEW, tb, snum[i], sbytes[i], S_new[i]);
-	    }
-	    break;
-
-	case M_PASTE:   /* append item */
-
-	    if ( n - snum[i] <= item_pos )  /* pasted item or part if it falls to S_new[i] */
-	    {
-		if ( item_pos == n - snum[i] && sbytes[i] != -1 )
-		{ /* we must shift part of the appended item */
-		    struct item_head * aux_ih;
-
-		    if ( I_IS_DIRECTORY_ITEM (aux_ih = B_N_PITEM_HEAD(tbS0,item_pos))) {
-			/* we append to directory item */
-
-			int entry_count;
-		
-			entry_count = get_ih_entry_count(aux_ih);
-
-			if ( entry_count - sbytes[i] < pos_in_item  && pos_in_item <= entry_count ) {
-			    /* new directory entry falls into S_new[i] */
-		  
-			    /* Shift snum[i]-1 items in whole. Shift sbytes[i] directory entries from directory item number snum[i] */
-			    leaf_move_items (LEAF_FROM_S_TO_SNEW, tb, snum[i], sbytes[i]-1, S_new[i]);
-
-			    /* Paste given directory entry to directory item */
-			    bi.bi_bh = S_new[i];
-			    bi.bi_parent = 0;
-			    bi.bi_position = 0;
-			    leaf_paste_in_buffer (tb->tb_fs, &bi, 0, pos_in_item - entry_count + sbytes[i] - 1,
-						  tb->insert_size[0], body,zeros_number);
-			    /* paste new directory entry */
-			    leaf_paste_entries (
-				bi.bi_bh, 0, pos_in_item - entry_count + sbytes[i] - 1,
-				1, (struct reiserfs_de_head *)body, body + DEH_SIZE,
-				tb->insert_size[0]
-				);
-			    tb->insert_size[0] = 0;
-			    pos_in_item++;
-			} else { /* new directory entry doesn't fall into S_new[i] */
-			    leaf_move_items (LEAF_FROM_S_TO_SNEW, tb, snum[i], sbytes[i], S_new[i]);
-			}
-		    }
-		    else /* regular object */
-		    {
-			int n_shift, n_rem, r_zeros_number;
-			const char * r_body;
-			struct item_head * tmp;
-
-			/* Calculate number of bytes which must be shifted from appended item */
-			n_shift = sbytes[i] - tb->insert_size[0];
-			if ( n_shift < 0 )
-			    n_shift = 0;
-			leaf_move_items (LEAF_FROM_S_TO_SNEW, tb, snum[i], n_shift, S_new[i]);
-
-			/* Calculate number of bytes which must remain in body after append to S_new[i] */
-			n_rem = tb->insert_size[0] - sbytes[i];
-			if ( n_rem < 0 )
-			    n_rem = 0;
-			/* Append part of body into S_new[0] */
-			bi.bi_bh = S_new[i];
-			bi.bi_parent = 0;
-			bi.bi_position = 0;
-
-			if ( n_rem > zeros_number ) {
-			    r_zeros_number = 0;
-			    r_body = body + n_rem - zeros_number;
-			}
-			else {
-			    r_body = body;
-			    r_zeros_number = zeros_number - n_rem;
-			    zeros_number -= r_zeros_number;
-			}
-
-			leaf_paste_in_buffer(tb->tb_fs, &bi, 0, n_shift, tb->insert_size[0]-n_rem, r_body,r_zeros_number);
-			tmp = B_N_PITEM_HEAD (S_new[i], 0);
-			if (I_IS_INDIRECT_ITEM(tmp)) {
-/*			
-			    if (n_rem)
-				reiserfs_panic ("PAP-12230: balance_leaf: "
-						"invalid action with indirect item");
-			    set_ih_free_space (tmp, 0);
-*/
-			    set_ih_free_space (tmp, 0);
-			    set_offset( key_format (&tmp->ih_key), &tmp->ih_key, get_offset(&tmp->ih_key) +
-				(n_rem / UNFM_P_SIZE) * tb->tb_fs->fs_blocksize);
-			} else
-				set_offset (key_format (&tmp->ih_key), &tmp->ih_key, get_offset (&tmp->ih_key) + n_rem);
-
-			//B_N_PKEY(S_new[i],0)->k_offset += n_rem;
-//			
-
-			tb->insert_size[0] = n_rem;
-			if ( ! n_rem )
-			    pos_in_item++;
-		    }
-		}
-		else
-		    /* item falls wholly into S_new[i] */
-		{
-		    struct item_head * pasted;
-		
-		    leaf_move_items (LEAF_FROM_S_TO_SNEW, tb, snum[i], sbytes[i], S_new[i]);
-		    /* paste into item */
-		    bi.bi_bh = S_new[i];
-		    bi.bi_parent = 0;
-		    bi.bi_position = 0;
-		    leaf_paste_in_buffer(tb->tb_fs, &bi, item_pos - n + snum[i], pos_in_item, tb->insert_size[0], body, zeros_number);
-
-		    pasted = B_N_PITEM_HEAD(S_new[i], item_pos - n + snum[i]);
-		    if (I_IS_DIRECTORY_ITEM (pasted)) {
-			leaf_paste_entries (bi.bi_bh, item_pos - n + snum[i], pos_in_item, 1, 
-					    (struct reiserfs_de_head *)body, body + DEH_SIZE, tb->insert_size[0]);
-		    }
-
-		    /* if we paste to indirect item update ih_free_space */
-		    if (I_IS_INDIRECT_ITEM (pasted))
-			set_ih_free_space (pasted, 0);
-		    zeros_number = tb->insert_size[0] = 0;
-		}
-	    } else {
-		/* pasted item doesn't fall into S_new[i] */
-		leaf_move_items (LEAF_FROM_S_TO_SNEW, tb, snum[i], sbytes[i], S_new[i]);
-	    }
-	    break;
-
-	default:    /* cases d and t */
-	    reiserfs_panic ("PAP-12245: balance_leaf: blknum > 2: unexpectable mode: %s(%d)",
-			    (flag == M_DELETE) ? "DELETE" : ((flag == M_CUT) ? "CUT" : "UNKNOWN"), flag);
-	}
-
-	memcpy (insert_key + i,B_N_PKEY(S_new[i],0),KEY_SIZE);
-	insert_ptr[i] = S_new[i];
-    }
-
-    /* if the affected item was not wholly shifted then we perform all
-       necessary operations on that part or whole of the affected item which
-       remains in S */
-    if ( 0 <= item_pos && item_pos < tb->s0num ) {
-	/* if we must insert or append into buffer S[0] */
-
-	switch (flag) {
-	case M_INSERT:   /* insert item into S[0] */
-	    bi.bi_bh = tbS0;
-	    bi.bi_parent = PATH_H_PPARENT (tb->tb_path, 0);
-	    bi.bi_position = PATH_H_POSITION (tb->tb_path, 1);
-	    leaf_insert_into_buf (tb->tb_fs, &bi, item_pos, ih, body, zeros_number);
-
-	    /* If we insert the first key change the delimiting key */
-	    if( item_pos == 0 ) {
-		if (tb->CFL[0]) /* can be 0 in reiserfsck */
-		    replace_key (tb->tb_fs, tb->CFL[0], tb->lkey[0],tbS0,0);
-	    }
-	    break;
-
-	case M_PASTE: {  /* append item in S[0] */
-	    struct item_head * pasted;
-
-	    pasted = B_N_PITEM_HEAD (tbS0, item_pos);
-	    /* when directory, may be new entry already pasted */
-	    if (I_IS_DIRECTORY_ITEM (pasted)) {
-		if ( pos_in_item >= 0 && pos_in_item <= get_ih_entry_count (pasted) ) {
-		    /* prepare space */
-		    bi.bi_bh = tbS0;
-		    bi.bi_parent = PATH_H_PPARENT (tb->tb_path, 0);
-		    bi.bi_position = PATH_H_POSITION (tb->tb_path, 1);
-		    leaf_paste_in_buffer(tb->tb_fs, &bi, item_pos, pos_in_item, tb->insert_size[0], body, zeros_number);
-
-		    /* paste entry */
-		    leaf_paste_entries (bi.bi_bh, item_pos, pos_in_item, 1, (struct reiserfs_de_head *)body,
-					body + DEH_SIZE, tb->insert_size[0]);
-		    if ( ! item_pos && ! pos_in_item ) {
-			if (tb->CFL[0])  // can be 0 in reiserfsck
-			    replace_key(tb->tb_fs, tb->CFL[0], tb->lkey[0],tbS0,0);
-		    }
-		    tb->insert_size[0] = 0;
-		}
-	    } else { /* regular object */
-		if ( pos_in_item == get_ih_item_len (pasted) ) {
-		    bi.bi_bh = tbS0;
-		    bi.bi_parent = PATH_H_PPARENT (tb->tb_path, 0);
-		    bi.bi_position = PATH_H_POSITION (tb->tb_path, 1);
-		    leaf_paste_in_buffer (tb->tb_fs, &bi, item_pos, pos_in_item, tb->insert_size[0], body, zeros_number);
-
-		    if (I_IS_INDIRECT_ITEM (pasted)) {
-			set_ih_free_space (pasted, 0);
-		    }
-		    tb->insert_size[0] = 0;
-		}
-	    }
-	} /* case M_PASTE: */
-	}
-    }
-
-    return 0;
-} /* Leaf level of the tree is balanced (end of balance_leaf) */
-
-
-void make_empty_leaf (struct buffer_head * bh)
-{
-    set_blkh_nr_items (B_BLK_HEAD (bh), 0);
-    set_blkh_free_space (B_BLK_HEAD (bh), MAX_FREE_SPACE (bh->b_size));
-    set_blkh_level (B_BLK_HEAD (bh), DISK_LEAF_NODE_LEVEL);
-}
-
-
-/* Make empty node */
-void make_empty_node (struct buffer_info * bi)
-{
-    make_empty_leaf (bi->bi_bh);
-
-    if (bi->bi_parent)
-	set_dc_child_size (B_N_CHILD (bi->bi_parent, bi->bi_position), 0);
-}
-
-
-/* Get first empty buffer */
-struct buffer_head * get_FEB (struct tree_balance * tb)
-{
-    int i;
-    struct buffer_head * first_b;
-    struct buffer_info bi;
-
-    for (i = 0; i < MAX_FEB_SIZE; i ++)
-	if (tb->FEB[i] != 0)
-	    break;
-
-    if (i == MAX_FEB_SIZE)
-	reiserfs_panic("vs-12300: get_FEB: FEB list is empty");
-
-    bi.bi_bh = first_b = tb->FEB[i];
-    bi.bi_parent = 0;
-    bi.bi_position = 0;
-    make_empty_node (&bi);
-    misc_set_bit(BH_Uptodate, &first_b->b_state);
-
-    tb->FEB[i] = 0;
-    tb->used[i] = first_b;
-
-    return(first_b);
-}
-
-
-/* Replace n_dest'th key in buffer dest by n_src'th key of buffer src.*/
-void replace_key (reiserfs_filsys_t * fs,
-		  struct buffer_head * dest, int n_dest,
-		  struct buffer_head * src, int n_src)
-{
-    if (dest) {
-	if (is_leaf_node (src))
-	    /* source buffer contains leaf node */
-	    memcpy (B_N_PDELIM_KEY(dest,n_dest), B_N_PITEM_HEAD(src,n_src), KEY_SIZE);
-	else
-	    memcpy (B_N_PDELIM_KEY(dest,n_dest), B_N_PDELIM_KEY(src,n_src), KEY_SIZE);
-	
-	mark_buffer_dirty(dest);
-    }
-}
-
-
-void reiserfs_invalidate_buffer (struct tree_balance * tb, struct buffer_head * bh, int do_free_block)
-{
-    set_blkh_level (B_BLK_HEAD (bh), FREE_LEVEL);
-    misc_clear_bit(BH_Dirty, &bh->b_state);
-
-    if (do_free_block) {
-	struct buffer_head * to_be_forgotten;
-
-	to_be_forgotten = find_buffer (bh->b_dev, bh->b_blocknr, bh->b_size);
-	if (to_be_forgotten) {
-	    to_be_forgotten->b_count ++;
-	    bforget (to_be_forgotten);
-	}
-
-	reiserfs_free_block (tb->tb_fs, bh->b_blocknr);
-    }
-}
-
-
-int get_left_neighbor_position (
-				struct tree_balance * tb, 
-				int h
-				)
-{
-  int Sh_position = PATH_H_POSITION (tb->tb_path, h + 1);
-
-  if (Sh_position == 0)
-    return B_NR_ITEMS (tb->FL[h]);
-  else
-    return Sh_position - 1;
-}
-
-
-int get_right_neighbor_position (struct tree_balance * tb, int h)
-{
-  int Sh_position = PATH_H_POSITION (tb->tb_path, h + 1);
-
-  if (Sh_position == B_NR_ITEMS (PATH_H_PPARENT (tb->tb_path, h)))
-    return 0;
-  else
-    return Sh_position + 1;
-}
-
-/* Now we have all of the buffers that must be used in balancing of the tree.
-   We rely on the assumption that schedule() will not occur while do_balance
-   works. ( Only interrupt handlers are acceptable.)  We balance the tree
-   according to the analysis made before this, using buffers already obtained.
-   For SMP support it will someday be necessary to add ordered locking of
-   tb. */
-
-/* Some interesting rules of balancing:
-
-   we delete a maximum of two nodes per level per balancing: we never delete R, when we delete two
-   of three nodes L, S, R then we move them into R.
-
-   we only delete L if we are deleting two nodes, if we delete only one node we delete S
-
-   if we shift leaves then we shift as much as we can: this is a deliberate policy of extremism in
-   node packing which results in higher average utilization after repeated random balance
-   operations at the cost of more memory copies and more balancing as a result of small insertions
-   to full nodes.
-
-   if we shift internal nodes we try to evenly balance the node utilization, with consequent less
-   balancing at the cost of lower utilization.
-
-   one could argue that the policy for directories in leaves should be that of internal nodes, but
-   we will wait until another day to evaluate this....  It would be nice to someday measure and
-   prove these assumptions as to what is optimal....
-
-*/
-
-void do_balance (struct tree_balance * tb,		/* tree_balance structure 		*/
-		 struct item_head * ih,	/* item header of inserted item */
-		 const char * body, /* body  of inserted item or bytes to paste */
-		 int flag,  /* i - insert, d - delete
-			       c - cut, p - paste
-						      
-			       Cut means delete part of an item (includes
-			       removing an entry from a directory).
-						      
-			       Delete means delete whole item.
-						      
-			       Insert means add a new item into the tree.
-						      						      
-			       Paste means to append to the end of an existing
-			       file or to insert a directory entry.  */
-		 int zeros_num)
-{
-    //int pos_in_item = tb->tb_path->pos_in_item;
-    int child_pos, /* position of a child node in its parent */
-	h;	   /* level of the tree being processed */
-    struct item_head insert_key[2]; /* in our processing of one level we
-				       sometimes determine what must be
-				       inserted into the next higher level.
-				       This insertion consists of a key or two
-				       keys and their corresponding pointers */
-    struct buffer_head *insert_ptr[2]; /* inserted node-ptrs for the next
-					  level */
-
-    /* if we have no real work to do  */
-    if ( ! tb->insert_size[0] ) {
-	unfix_nodes(/*th,*/ tb);
-	return;
-    }
-
-    if (flag == M_INTERNAL) {
-	insert_ptr[0] = (struct buffer_head *)body;
-	/* we must prepare insert_key */
-
-	if (PATH_H_B_ITEM_ORDER (tb->tb_path, 0)/*LAST_POSITION (tb->tb_path)*//*item_pos*/ == -1) {
-		/* get delimiting key from buffer in tree */
-		copy_key (&insert_key[0].ih_key, B_N_PKEY (PATH_PLAST_BUFFER (tb->tb_path), 0));
-		/*insert_ptr[0]->b_item_order = 0;*/
-	} else {
-	    /* get delimiting key from new buffer */
-	    copy_key (&insert_key[0].ih_key, B_N_PKEY((struct buffer_head *)body,0));
-	    /*insert_ptr[0]->b_item_order = item_pos;*/
-	}
-      
-	/* and insert_ptr instead of balance_leaf */
-	child_pos = PATH_H_B_ITEM_ORDER (tb->tb_path, 0)/*item_pos*/;
-    } else
-	/* balance leaf returns 0 except if combining L R and S into one node.
-	   see balance_internal() for explanation of this line of code.*/
-	child_pos = PATH_H_B_ITEM_ORDER (tb->tb_path, 0) +
-	    balance_leaf (/*th,*/ tb/*, pos_in_item*/, ih, body, flag, zeros_num, insert_key, insert_ptr);
-
-    /* Balance internal level of the tree. */
-    for ( h = 1; h < MAX_HEIGHT && tb->insert_size[h]; h++ )
-	child_pos = balance_internal (/*th,*/ tb, h, child_pos, insert_key, insert_ptr);
-
-    /* Release all (except for S[0]) non NULL buffers fixed by fix_nodes() */
-    unfix_nodes(/*th,*/ tb);
-}
-
-
-
-
-
-
-
-
-
diff --git a/reiserfscore/hashes.c b/reiserfscore/hashes.c
deleted file mode 100644
index 6a08072..0000000
--- a/reiserfscore/hashes.c
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-/*
- * Keyed 32-bit hash function using TEA in a Davis-Meyer function
- *   H0 = Key
- *   Hi = E Mi(Hi-1) + Hi-1
- *
- * (see Applied Cryptography, 2nd edition, p448).
- *
- * Jeremy Fitzhardinge <jeremy@zip.com.au> 1998
- * 
- * Jeremy has agreed to the contents of reiserfs/README. -Hans
- * Yura's function is added (04/07/2000)
- */
-
-//
-// keyed_hash
-// yura_hash
-// r5
-//
-
-#include <asm/types.h>
-
-
-
-#define DELTA 0x9E3779B9
-#define FULLROUNDS 10		/* 32 is overkill, 16 is strong crypto */
-#define PARTROUNDS 6		/* 6 gets complete mixing */
-
-#ifndef __KERNEL__
-typedef __u32 u32;
-#endif
-
-/* a, b, c, d - data; h0, h1 - accumulated hash */
-#define TEACORE(rounds)							\
-	do {								\
-		u32 sum = 0;						\
-		int n = rounds;						\
-		u32 b0, b1;						\
-									\
-		b0 = h0;						\
-		b1 = h1;						\
-									\
-		do							\
-		{							\
-			sum += DELTA;					\
-			b0 += ((b1 << 4)+a) ^ (b1+sum) ^ ((b1 >> 5)+b);	\
-			b1 += ((b0 << 4)+c) ^ (b0+sum) ^ ((b0 >> 5)+d);	\
-		} while(--n);						\
-									\
-		h0 += b0;						\
-		h1 += b1;						\
-	} while(0)
-
-
-u32 keyed_hash(const signed char *msg, int len)
-{
-	u32 k[] = { 0x9464a485, 0x542e1a94, 0x3e846bff, 0xb75bcfc3}; 
-
-	u32 h0 = k[0], h1 = k[1];
-	u32 a, b, c, d;
-	u32 pad;
-	int i;
- 
-
-	pad = (u32)len | ((u32)len << 8);
-	pad |= pad << 16;
-
-	while(len >= 16)
-	{
-		a = (u32)msg[ 0]      |
-		    (u32)msg[ 1] << 8 |
-		    (u32)msg[ 2] << 16|
-		    (u32)msg[ 3] << 24;
-		b = (u32)msg[ 4]      |
-		    (u32)msg[ 5] << 8 |
-		    (u32)msg[ 6] << 16|
-		    (u32)msg[ 7] << 24;
-		c = (u32)msg[ 8]      |
-		    (u32)msg[ 9] << 8 |
-		    (u32)msg[10] << 16|
-		    (u32)msg[11] << 24;
-		d = (u32)msg[12]      |
-		    (u32)msg[13] << 8 |
-		    (u32)msg[14] << 16|
-		    (u32)msg[15] << 24;
-		
-		TEACORE(PARTROUNDS);
-
-		len -= 16;
-		msg += 16;
-	}
-
-	if (len >= 12)
-	{
-		if (len >= 16)
-		    *(int *)0 = 0;
-
-		a = (u32)msg[ 0]      |
-		    (u32)msg[ 1] << 8 |
-		    (u32)msg[ 2] << 16|
-		    (u32)msg[ 3] << 24;
-		b = (u32)msg[ 4]      |
-		    (u32)msg[ 5] << 8 |
-		    (u32)msg[ 6] << 16|
-		    (u32)msg[ 7] << 24;
-		c = (u32)msg[ 8]      |
-		    (u32)msg[ 9] << 8 |
-		    (u32)msg[10] << 16|
-		    (u32)msg[11] << 24;
-
-		d = pad;
-		for(i = 12; i < len; i++)
-		{
-			d <<= 8;
-			d |= msg[i];
-		}
-	}
-	else if (len >= 8)
-	{
-		if (len >= 12)
-		    *(int *)0 = 0;
-		a = (u32)msg[ 0]      |
-		    (u32)msg[ 1] << 8 |
-		    (u32)msg[ 2] << 16|
-		    (u32)msg[ 3] << 24;
-		b = (u32)msg[ 4]      |
-		    (u32)msg[ 5] << 8 |
-		    (u32)msg[ 6] << 16|
-		    (u32)msg[ 7] << 24;
-
-		c = d = pad;
-		for(i = 8; i < len; i++)
-		{
-			c <<= 8;
-			c |= msg[i];
-		}
-	}
-	else if (len >= 4)
-	{
-		if (len >= 8)
-		    *(int *)0 = 0;
-		a = (u32)msg[ 0]      |
-		    (u32)msg[ 1] << 8 |
-		    (u32)msg[ 2] << 16|
-		    (u32)msg[ 3] << 24;
-
-		b = c = d = pad;
-		for(i = 4; i < len; i++)
-		{
-			b <<= 8;
-			b |= msg[i];
-		}
-	}
-	else
-	{
-		if (len >= 4)
-		    *(int *)0 = 0;
-		a = b = c = d = pad;
-		for(i = 0; i < len; i++)
-		{
-			a <<= 8;
-			a |= msg[i];
-		}
-	}
-
-	TEACORE(FULLROUNDS);
-
-	return h0^h1;
-}
-
-
-u32 yura_hash (const signed char *msg, int len)
-{
-    int j, pow;
-    u32 a, c;
-    int i;
-    
-    for (pow=1,i=1; i < len; i++) pow = pow * 10; 
-    
-    if (len == 1) 
-	a = msg[0]-48;
-    else
-	a = (msg[0] - 48) * pow;
-    
-    for (i=1; i < len; i++) {
-	c = msg[i] - 48; 
-	for (pow=1,j=i; j < len-1; j++) pow = pow * 10; 
-	a = a + c * pow;
-    }
-    
-    for (; i < 40; i++) {
-	c = '0' - 48; 
-	for (pow=1,j=i; j < len-1; j++) pow = pow * 10; 
-	a = a + c * pow;
-    }
-    
-    for (; i < 256; i++) {
-	c = i; 
-	for (pow=1,j=i; j < len-1; j++) pow = pow * 10; 
-	a = a + c * pow;
-    }
-    
-    a = a << 7;
-    return a;
-}
-
-
-u32 r5_hash (const signed char *msg, int len)
-{
-    u32 a=0;
-    int i;
-    
-    for (i = 0; i < len; i ++) {
-	a += msg[i] << 4;
-	a += msg[i] >> 4;
-	a *= 11;
-    } 
-    return a;
-}
-
-
-#if 0
-
-#include <stdio.h>
-
-int main (void)
-{
-    char * name = 0;
-    size_t n = 0;
-
-    while (1) {
-	getline (&name, &n, stdin);
-	if (!strcmp (name, "\n"))
-	    break;
-	name [strlen (name) - 1] = 0;
-	printf ("tea %lu\n, r5 %lu\nyura %lu\n",
-		keyed_hash (name, strlen (name)) & 0x7fffff80,
-		r5_hash (name, strlen (name)) & 0x7fffff80,
-		yura_hash (name, strlen (name)) & 0x7fffff80);
-	free (name);
-	name = 0;
-	n = 0;
-    }
-}
-
-#endif
-
diff --git a/reiserfscore/ibalance.c b/reiserfscore/ibalance.c
deleted file mode 100644
index bd0d29e..0000000
--- a/reiserfscore/ibalance.c
+++ /dev/null
@@ -1,890 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#include "includes.h"
-
-
-/* modes of internal_shift_left, internal_shift_right and internal_insert_childs */
-#define INTERNAL_SHIFT_FROM_S_TO_L 0
-#define INTERNAL_SHIFT_FROM_R_TO_S 1
-#define INTERNAL_SHIFT_FROM_L_TO_S 2
-#define INTERNAL_SHIFT_FROM_S_TO_R 3
-#define INTERNAL_INSERT_TO_S 4
-#define INTERNAL_INSERT_TO_L 5
-#define INTERNAL_INSERT_TO_R 6
-
-static void	internal_define_dest_src_infos (
-						int shift_mode,
-						struct tree_balance * tb,
-						int h,
-						struct buffer_info * dest_bi,
-						struct buffer_info * src_bi,
-						int * d_key,
-						struct buffer_head ** cf
-						)
-{
-  /* define dest, src, dest parent, dest position */
-  switch (shift_mode) {
-  case INTERNAL_SHIFT_FROM_S_TO_L:	/* used in internal_shift_left */
-    src_bi->bi_bh = PATH_H_PBUFFER (tb->tb_path, h);
-    src_bi->bi_parent = PATH_H_PPARENT (tb->tb_path, h);
-    src_bi->bi_position = PATH_H_POSITION (tb->tb_path, h + 1);
-    dest_bi->bi_bh = tb->L[h];
-    dest_bi->bi_parent = tb->FL[h];
-    dest_bi->bi_position = get_left_neighbor_position (tb, h);
-    *d_key = tb->lkey[h];
-    *cf = tb->CFL[h];
-    break;
-  case INTERNAL_SHIFT_FROM_L_TO_S:
-    src_bi->bi_bh = tb->L[h];
-    src_bi->bi_parent = tb->FL[h];
-    src_bi->bi_position = get_left_neighbor_position (tb, h);
-    dest_bi->bi_bh = PATH_H_PBUFFER (tb->tb_path, h);
-    dest_bi->bi_parent = PATH_H_PPARENT (tb->tb_path, h);
-    dest_bi->bi_position = PATH_H_POSITION (tb->tb_path, h + 1); /* dest position is analog of dest->b_item_order */
-    *d_key = tb->lkey[h];
-    *cf = tb->CFL[h];
-    break;
-
-  case INTERNAL_SHIFT_FROM_R_TO_S:	/* used in internal_shift_left */
-    src_bi->bi_bh = tb->R[h];
-    src_bi->bi_parent = tb->FR[h];
-    src_bi->bi_position = get_right_neighbor_position (tb, h);
-    dest_bi->bi_bh = PATH_H_PBUFFER (tb->tb_path, h);
-    dest_bi->bi_parent = PATH_H_PPARENT (tb->tb_path, h);
-    dest_bi->bi_position = PATH_H_POSITION (tb->tb_path, h + 1);
-    *d_key = tb->rkey[h];
-    *cf = tb->CFR[h];
-    break;
-  case INTERNAL_SHIFT_FROM_S_TO_R:
-    src_bi->bi_bh = PATH_H_PBUFFER (tb->tb_path, h);
-    src_bi->bi_parent = PATH_H_PPARENT (tb->tb_path, h);
-    src_bi->bi_position = PATH_H_POSITION (tb->tb_path, h + 1);
-    dest_bi->bi_bh = tb->R[h];
-    dest_bi->bi_parent = tb->FR[h];
-    dest_bi->bi_position = get_right_neighbor_position (tb, h);
-    *d_key = tb->rkey[h];
-    *cf = tb->CFR[h];
-    break;
-
-  case INTERNAL_INSERT_TO_L:
-    dest_bi->bi_bh = tb->L[h];
-    dest_bi->bi_parent = tb->FL[h];
-    dest_bi->bi_position = get_left_neighbor_position (tb, h);
-    break;
-
-  case INTERNAL_INSERT_TO_S:
-    dest_bi->bi_bh = PATH_H_PBUFFER (tb->tb_path, h);
-    dest_bi->bi_parent = PATH_H_PPARENT (tb->tb_path, h);
-    dest_bi->bi_position = PATH_H_POSITION (tb->tb_path, h + 1);
-    break;
-
-  case INTERNAL_INSERT_TO_R:
-    dest_bi->bi_bh = tb->R[h];
-    dest_bi->bi_parent = tb->FR[h];
-    dest_bi->bi_position = get_right_neighbor_position (tb, h);
-    break;
-
-  default:
-      reiserfs_panic ("internal_define_dest_src_infos", "shift type is unknown (%d)", shift_mode);
-  }
-}
-
-
-
-/* Insert 'count' node pointers into buffer cur before position 'to' + 1.
- * Insert count items into buffer cur before position to.
- * Items and node pointers are specified by inserted and bh respectively.
- */ 
-static void internal_insert_childs (reiserfs_filsys_t * fs, 
-				    struct buffer_info * cur_bi,
-				    int to, int count,
-				    struct item_head * inserted,
-				    struct buffer_head ** bh)
-{
-    struct buffer_head * cur = cur_bi->bi_bh;
-    struct block_head * blkh;
-    int nr;
-    struct key * key;
-    struct disk_child new_dc[2];
-    struct disk_child * dc;
-    int i;
-    int from;
-    
-    if (count <= 0)
-	return;
-    
-    blkh = B_BLK_HEAD (cur);
-    nr = get_blkh_nr_items (blkh);
-    
-    /* prepare space for count disk_child */
-    dc = B_N_CHILD (cur,to+1);
-    
-    memmove (dc + count, dc, (nr+1-(to+1)) * DC_SIZE);
-    
-    /* make disk child array for insertion */
-    for (i = 0; i < count; i ++) {
-	set_dc(new_dc + i, MAX_CHILD_SIZE(bh[i]->b_size) - 
-	       get_blkh_free_space (B_BLK_HEAD (bh[i])),
-	       bh[i]->b_blocknr);
-	/*
-	set_dc_child_size (new_dc + i,
-			   MAX_CHILD_SIZE(bh[i]->b_size) - 
-			   get_blkh_free_space (B_BLK_HEAD (bh[i])));
-	set_dc_child_blocknr (new_dc + i, bh[i]->b_blocknr);*/
-    }
-    memcpy (dc, new_dc, DC_SIZE * count);
-    
-    /* prepare space for 'count' items  */
-    from = ((to == -1) ? 0 : to);
-    key = B_N_PDELIM_KEY (cur, from);
-    
-    memmove (key + count, key, (nr - from/*to*/) * KEY_SIZE + (nr + 1 + count) * DC_SIZE);
-
-    /* copy keys */
-    memcpy (key, inserted, KEY_SIZE);
-    if ( count > 1 )
-	memcpy (key + 1, inserted + 1, KEY_SIZE);
-    
-    /* sizes, item number */
-    set_blkh_nr_items (blkh, nr + count);
-    set_blkh_free_space (blkh, get_blkh_free_space (blkh) - count * (DC_SIZE + KEY_SIZE));
-
-    mark_buffer_dirty (cur);
-    
-    if (cur_bi->bi_parent) {
-	dc = B_N_CHILD (cur_bi->bi_parent,cur_bi->bi_position);
-	set_dc_child_size (dc, get_dc_child_size (dc) + count * (DC_SIZE + KEY_SIZE));
-	mark_buffer_dirty (cur_bi->bi_parent);
-    }
-    
-}
-
-
-/* Delete del_num items and node pointers from buffer cur starting from *
- * the first_i'th item and first_p'th pointers respectively.		*/
-static void internal_delete_pointers_items (reiserfs_filsys_t * fs,
-					    struct buffer_info * cur_bi,
-					    int first_p, int first_i, 
-					    int del_num)
-{
-    struct buffer_head * cur = cur_bi->bi_bh;
-    int nr;
-    struct block_head * blkh;
-    struct key * key;
-    struct disk_child * dc;
-
-    if ( del_num == 0 )
-	return;
-
-    blkh = B_BLK_HEAD(cur);
-    nr = get_blkh_nr_items (blkh);
-
-    if ( first_p == 0 && del_num == nr + 1 ) {
-	make_empty_node (cur_bi);
-	return;
-    }
-
-    /* deleting */
-    dc = B_N_CHILD (cur, first_p);
-
-    memmove (dc, dc + del_num, (nr + 1 - first_p - del_num) * DC_SIZE);
-    key = B_N_PDELIM_KEY (cur, first_i);
-    memmove (key, key + del_num, (nr - first_i - del_num) * KEY_SIZE + (nr + 1 - del_num) * DC_SIZE);
-
-
-    /* sizes, item number */
-    set_blkh_nr_items (blkh, get_blkh_nr_items (blkh) - del_num);
-    set_blkh_free_space (blkh, get_blkh_free_space (blkh) +
-			 del_num * (KEY_SIZE +  DC_SIZE));
-
-    mark_buffer_dirty (cur);
- 
-    if (cur_bi->bi_parent) {
-	dc = B_N_CHILD (cur_bi->bi_parent, cur_bi->bi_position);
-	set_dc_child_size (dc, get_dc_child_size (dc) - del_num * (KEY_SIZE +  DC_SIZE));
-	mark_buffer_dirty (cur_bi->bi_parent);
-    }
-}
-
-
-/* delete n node pointers and items starting from given position */
-static void internal_delete_childs (reiserfs_filsys_t * fs,
-				    struct buffer_info * cur_bi, 
-				    int from, int n)
-{
-    int i_from;
-    
-    i_from = (from == 0) ? from : from - 1;
-    
-    /* delete n pointers starting from `from' position in CUR;
-       delete n keys starting from 'i_from' position in CUR;
-    */
-    internal_delete_pointers_items (fs, cur_bi, from, i_from, n);
-}
-
-
-/* copy cpy_num node pointers and cpy_num - 1 items from buffer src to buffer dest
-* last_first == FIRST_TO_LAST means, that we copy first items from src to tail of dest
- * last_first == LAST_TO_FIRST means, that we copy last items from src to head of dest 
- */
-static void internal_copy_pointers_items (reiserfs_filsys_t * fs,
-					  struct buffer_info * dest_bi,
-					  struct buffer_head * src,
-					  int last_first, int cpy_num)
-{
-    /* ATTENTION! Number of node pointers in DEST is equal to number of items in DEST *
-     * as delimiting key have already inserted to buffer dest.*/
-    struct buffer_head * dest = dest_bi->bi_bh;
-    int nr_dest, nr_src;
-    int dest_order, src_order;
-    struct block_head * blkh;
-    struct key * key;
-    struct disk_child * dc;
-
-    nr_src = B_NR_ITEMS (src);
-
-    if ( cpy_num == 0 )
-	return;
-
-    /* coping */
-    blkh = B_BLK_HEAD (dest);
-    nr_dest = get_blkh_nr_items (blkh);
-
-    /*dest_order = (last_first == LAST_TO_FIRST) ? 0 : nr_dest;*/
-    /*src_order = (last_first == LAST_TO_FIRST) ? (nr_src - cpy_num + 1) : 0;*/
-    (last_first == LAST_TO_FIRST) ?	(dest_order = 0, src_order = nr_src - cpy_num + 1) :
-	(dest_order = nr_dest, src_order = 0);
-
-    /* prepare space for cpy_num pointers */
-    dc = B_N_CHILD (dest, dest_order);
-
-    memmove (dc + cpy_num, dc, (nr_dest - dest_order) * DC_SIZE);
-
-	/* insert pointers */
-    memcpy (dc, B_N_CHILD (src, src_order), DC_SIZE * cpy_num);
-
-
-    /* prepare space for cpy_num - 1 item headers */
-    key = B_N_PDELIM_KEY(dest, dest_order);
-    memmove (key + cpy_num - 1, key,
-	     KEY_SIZE * (nr_dest - dest_order) + DC_SIZE * (nr_dest + cpy_num));
-
-
-    /* insert headers */
-    memcpy (key, B_N_PDELIM_KEY (src, src_order), KEY_SIZE * (cpy_num - 1));
-
-    /* sizes, item number */
-    set_blkh_nr_items (blkh, get_blkh_nr_items (blkh) + cpy_num - 1);
-    set_blkh_free_space (blkh, get_blkh_free_space (blkh) -
-			 (KEY_SIZE * (cpy_num - 1) + DC_SIZE * cpy_num));
-
-    mark_buffer_dirty (dest);
-    if (dest_bi->bi_parent) {
-	dc = B_N_CHILD(dest_bi->bi_parent,dest_bi->bi_position);
-	set_dc_child_size (dc, get_dc_child_size (dc) + KEY_SIZE * (cpy_num - 1) + DC_SIZE * cpy_num);
-	mark_buffer_dirty (dest_bi->bi_parent);
-    }
-
-}
-
-
-/* Copy cpy_num node pointers and cpy_num - 1 items from buffer src to buffer dest.
- * Delete cpy_num - del_par items and node pointers from buffer src.
- * last_first == FIRST_TO_LAST means, that we copy/delete first items from src.
- * last_first == LAST_TO_FIRST means, that we copy/delete last items from src.
- */
-static void internal_move_pointers_items (reiserfs_filsys_t * fs,
-					  struct buffer_info * dest_bi, 
-					  struct buffer_info * src_bi, 
-					  int last_first, int cpy_num, int del_par)
-{
-    int first_pointer;
-    int first_item;
-    
-    internal_copy_pointers_items (fs, dest_bi, src_bi->bi_bh, last_first, cpy_num);
-    
-    if (last_first == FIRST_TO_LAST) {	/* shift_left occurs */
-	first_pointer = 0;
-	first_item = 0;
-	/* delete cpy_num - del_par pointers and keys starting for pointers with first_pointer, 
-	   for key - with first_item */
-	internal_delete_pointers_items (fs, src_bi, first_pointer, first_item, cpy_num - del_par);
-    } else {			/* shift_right occurs */
-	int i, j;
-	
-	i = ( cpy_num - del_par == ( j = B_NR_ITEMS(src_bi->bi_bh)) + 1 ) ? 0 : j - cpy_num + del_par;
-	
-	internal_delete_pointers_items (fs, src_bi, j + 1 - cpy_num + del_par, i, cpy_num - del_par);
-    }
-}
-
-/* Insert n_src'th key of buffer src before n_dest'th key of buffer dest. */
-static void internal_insert_key (reiserfs_filsys_t * fs,
-				 struct buffer_info * dest_bi, 
-				 int dest_position_before,                 /* insert key before key with n_dest number */
-				 struct buffer_head * src, 
-				 int src_position )
-{
-    struct buffer_head * dest = dest_bi->bi_bh;
-    int nr;
-    struct block_head * blkh;
-    struct key * key;
-
-    blkh = B_BLK_HEAD(dest);
-    nr = get_blkh_nr_items (blkh);
-
-    /* prepare space for inserting key */
-    key = B_N_PDELIM_KEY (dest, dest_position_before);
-    memmove (key + 1, key, (nr - dest_position_before) * KEY_SIZE + (nr + 1) * DC_SIZE);
-
-    /* insert key */
-    memcpy (key, B_N_PDELIM_KEY(src, src_position), KEY_SIZE);
-
-    /* Change dirt, free space, item number fields. */
-    set_blkh_nr_items (blkh, get_blkh_nr_items (blkh) + 1);
-    set_blkh_free_space (blkh, get_blkh_free_space (blkh) - KEY_SIZE);
-
-    mark_buffer_dirty (dest);
-
-    if (dest_bi->bi_parent) {
-	struct disk_child * dc;
-	
-	dc = B_N_CHILD(dest_bi->bi_parent,dest_bi->bi_position);
-	set_dc_child_size (dc, get_dc_child_size (dc) + KEY_SIZE);
-	mark_buffer_dirty (dest_bi->bi_parent);
-    }
-}
-
-
-
-/* Insert d_key'th (delimiting) key from buffer cfl to tail of dest. 
- * Copy pointer_amount node pointers and pointer_amount - 1 items from buffer src to buffer dest.
- * Replace  d_key'th key in buffer cfl.
- * Delete pointer_amount items and node pointers from buffer src.
- */
-/* this can be invoked both to shift from S to L and from R to S */
-static void internal_shift_left (int mode,	/* INTERNAL_FROM_S_TO_L | INTERNAL_FROM_R_TO_S */
-				 struct tree_balance * tb, int h,
-				 int pointer_amount)
-{
-    struct buffer_info dest_bi, src_bi;
-    struct buffer_head * cf;
-    int d_key_position;
-
-    internal_define_dest_src_infos (mode, tb, h, &dest_bi, &src_bi, &d_key_position, &cf);
-
-    /*printk("pointer_amount = %d\n",pointer_amount);*/
-
-    if (pointer_amount) {
-	/* insert delimiting key from common father of dest and src to node dest into position B_NR_ITEM(dest) */
-	internal_insert_key (tb->tb_fs, &dest_bi, B_NR_ITEMS(dest_bi.bi_bh), cf, d_key_position);
-
-	if (B_NR_ITEMS(src_bi.bi_bh) == pointer_amount - 1) {
-	    if (src_bi.bi_position/*src->b_item_order*/ == 0)
-		replace_key (tb->tb_fs, cf, d_key_position, src_bi.bi_parent/*src->b_parent*/, 0);
-	} else
-	    replace_key (tb->tb_fs, cf, d_key_position, src_bi.bi_bh, pointer_amount - 1);
-    }
-    /* last parameter is del_parameter */
-    internal_move_pointers_items (tb->tb_fs, &dest_bi, &src_bi, FIRST_TO_LAST, pointer_amount, 0);
-
-}
-
-/* Insert delimiting key to L[h].
- * Copy n node pointers and n - 1 items from buffer S[h] to L[h].
- * Delete n - 1 items and node pointers from buffer S[h].
- */
-/* it always shifts from S[h] to L[h] */
-static void internal_shift1_left (struct tree_balance * tb, 
-				  int h, int pointer_amount)
-{
-    struct buffer_info dest_bi, src_bi;
-    struct buffer_head * cf;
-    int d_key_position;
-    
-    internal_define_dest_src_infos (INTERNAL_SHIFT_FROM_S_TO_L, tb, h, &dest_bi, &src_bi, &d_key_position, &cf);
-    
-    if ( pointer_amount > 0 ) /* insert lkey[h]-th key  from CFL[h] to left neighbor L[h] */
-	internal_insert_key (tb->tb_fs, &dest_bi, B_NR_ITEMS(dest_bi.bi_bh), cf, d_key_position);
-    
-    /* last parameter is del_parameter */
-    internal_move_pointers_items (tb->tb_fs, &dest_bi, &src_bi, FIRST_TO_LAST, pointer_amount, 1);
-}
-
-
-/* Insert d_key'th (delimiting) key from buffer cfr to head of dest. 
- * Copy n node pointers and n - 1 items from buffer src to buffer dest.
- * Replace  d_key'th key in buffer cfr.
- * Delete n items and node pointers from buffer src.
- */
-static void internal_shift_right (int mode,	/* INTERNAL_FROM_S_TO_R | INTERNAL_FROM_L_TO_S */
-				  struct tree_balance * tb, int h,
-				  int pointer_amount)
-{
-    struct buffer_info dest_bi, src_bi;
-    struct buffer_head * cf;
-    int d_key_position;
-    int nr;
-
-
-    internal_define_dest_src_infos (mode, tb, h, &dest_bi, &src_bi, &d_key_position, &cf);
-
-    nr = B_NR_ITEMS (src_bi.bi_bh);
-
-    if (pointer_amount > 0) {
-	/* insert delimiting key from common father of dest and src to dest node into position 0 */
-	internal_insert_key (tb->tb_fs, &dest_bi, 0, cf, d_key_position);
-	if (nr == pointer_amount - 1) {
-	    /* when S[h] disappers replace left delemiting key as well */
-	    if (tb->CFL[h])
-		replace_key(tb->tb_fs, cf, d_key_position, tb->CFL[h], tb->lkey[h]);
-	} else
-	    replace_key(tb->tb_fs, cf, d_key_position, src_bi.bi_bh, nr - pointer_amount);
-    }      
-
-    /* last parameter is del_parameter */
-    internal_move_pointers_items (tb->tb_fs, &dest_bi, &src_bi, LAST_TO_FIRST, pointer_amount, 0);
-}
-
-/* Insert delimiting key to R[h].
- * Copy n node pointers and n - 1 items from buffer S[h] to R[h].
- * Delete n - 1 items and node pointers from buffer S[h].
- */
-/* it always shift from S[h] to R[h] */
-static void internal_shift1_right (struct tree_balance * tb, 
-				   int h, int pointer_amount)
-{
-    struct buffer_info dest_bi, src_bi;
-    struct buffer_head * cf;
-    int d_key_position;
-
-    internal_define_dest_src_infos (INTERNAL_SHIFT_FROM_S_TO_R, tb, h, &dest_bi, &src_bi, &d_key_position, &cf);
-    
-    if (pointer_amount > 0) /* insert rkey from CFR[h] to right neighbor R[h] */
-	internal_insert_key (tb->tb_fs, &dest_bi, 0, cf, d_key_position);
-    
-    /* last parameter is del_parameter */
-    internal_move_pointers_items (tb->tb_fs, &dest_bi, &src_bi, LAST_TO_FIRST, pointer_amount, 1);
-}
-
-
-/* Delete insert_num node pointers together with their left items
- * and balance current node.*/
-static void balance_internal_when_delete (struct tree_balance * tb, 
-					  int h, int child_pos)
-{
-    int insert_num;
-    int n;
-    struct buffer_head * tbSh = PATH_H_PBUFFER (tb->tb_path, h);
-    struct buffer_info bi;
-
-    insert_num = tb->insert_size[h] / ((int)(DC_SIZE + KEY_SIZE));
-  
-    /* delete child-node-pointer(s) together with their left item(s) */
-    bi.bi_bh = tbSh;
-
-    bi.bi_parent = PATH_H_PPARENT (tb->tb_path, h);
-
-    bi.bi_position = PATH_H_POSITION (tb->tb_path, h + 1);
-
-    internal_delete_childs (tb->tb_fs, &bi, child_pos, -insert_num);
-
-    n = B_NR_ITEMS(tbSh);
-
-    if ( tb->lnum[h] == 0 && tb->rnum[h] == 0 ) {
-	if ( tb->blknum[h] == 0 ) {
-	    /* node S[h] (root of the tree) is empty now */
-	    struct buffer_head *new_root;
-	    struct reiserfs_super_block * sb;
-
-	    /* choose a new root */
-	    if ( ! tb->L[h-1] || ! B_NR_ITEMS(tb->L[h-1]) )
-		new_root = tb->R[h-1];
-	    else
-		new_root = tb->L[h-1];
-
-	    /* update super block's tree height and pointer to a root block */
-	    sb = tb->tb_fs->fs_ondisk_sb;
-	    set_sb_root_block (sb, new_root->b_blocknr);
-	    set_sb_tree_height (sb, get_sb_tree_height (sb) - 1);
-
-	    mark_buffer_dirty (tb->tb_fs->fs_super_bh);
-	    tb->tb_fs->fs_dirt = 1;
-
-	    /* mark buffer S[h] not uptodate and put it in free list */
-	    reiserfs_invalidate_buffer(tb, tbSh, 1);
-	    return;
-	}
-	return;
-    }
-
-    if ( tb->L[h] && tb->lnum[h] == -B_NR_ITEMS(tb->L[h]) - 1 ) { /* join S[h] with L[h] */
-	internal_shift_left (INTERNAL_SHIFT_FROM_S_TO_L, tb, h, n + 1);/*tb->L[h], tb->CFL[h], tb->lkey[h], tb->S[h], n+1);*/
-	reiserfs_invalidate_buffer(tb, tbSh, 1); /* preserve not needed, internal, 1 mean free block */
-
-	return;
-    }
-
-    if ( tb->R[h] &&  tb->rnum[h] == -B_NR_ITEMS(tb->R[h]) - 1 ) { /* join S[h] with R[h] */
-	internal_shift_right (INTERNAL_SHIFT_FROM_S_TO_R, tb, h, n + 1);
-	reiserfs_invalidate_buffer (tb, tbSh, 1);
-	return;
-    }
-
-    if ( tb->lnum[h] < 0 ) { /* borrow from left neighbor L[h] */
-	internal_shift_right (INTERNAL_SHIFT_FROM_L_TO_S, tb, h, -tb->lnum[h]);
-	return;
-    }
-
-    if ( tb->rnum[h] < 0 ) { /* borrow from right neighbor R[h] */
-	internal_shift_left (INTERNAL_SHIFT_FROM_R_TO_S, tb, h, -tb->rnum[h]);/*tb->S[h], tb->CFR[h], tb->rkey[h], tb->R[h], -tb->rnum[h]);*/
-	return;
-    }
-
-    if ( tb->lnum[h] > 0 ) { /* split S[h] into two parts and put them into neighbors */
-	internal_shift_left (INTERNAL_SHIFT_FROM_S_TO_L, tb, h, tb->lnum[h]);/*tb->L[h], tb->CFL[h], tb->lkey[h], tb->S[h], tb->lnum[h]);*/
-	internal_shift_right (INTERNAL_SHIFT_FROM_S_TO_R, tb, h, tb->rnum[h]);
-	reiserfs_invalidate_buffer (tb, tbSh, 1);
-
-	return;
-    }
-    reiserfs_panic ("balance_internal_when_delete", "unexpected tb->lnum[%d]==%d or tb->rnum[%d]==%d",
-		    h, tb->lnum[h], h, tb->rnum[h]);
-}
-
-
-/* Replace delimiting key of buffers L[h] and S[h] by the given key.*/
-void replace_lkey (struct tree_balance * tb,
-		   int h, struct item_head * key)
-{
-    if (B_NR_ITEMS(PATH_H_PBUFFER(tb->tb_path, h)) == 0)
-	return;
-
-    memcpy (B_N_PDELIM_KEY(tb->CFL[h],tb->lkey[h]), key, KEY_SIZE);
-
-    mark_buffer_dirty (tb->CFL[h]);
-}
-
-
-/* Replace delimiting key of buffers S[h] and R[h] by the given key.*/
-void replace_rkey (struct tree_balance * tb,
-		   int h, struct item_head * key)
-{
-    memcpy (B_N_PDELIM_KEY(tb->CFR[h],tb->rkey[h]), key, KEY_SIZE);
-    
-    mark_buffer_dirty (tb->CFR[h]);
-}
-
-
-
-int balance_internal (struct tree_balance * tb,			/* tree_balance structure 		*/
-		      int h,					/* level of the tree 			*/
-		      int child_pos,
-		      struct item_head * insert_key,		/* key for insertion on higher level   	*/
-		      struct buffer_head ** insert_ptr)	/* node for insertion on higher level*/
-  /* if inserting/pasting
-   {
-   child_pos is the position of the node-pointer in S[h] that	 *
-   pointed to S[h-1] before balancing of the h-1 level;		 *
-   this means that new pointers and items must be inserted AFTER *
-   child_pos
-   }
-   else 
-   {
-   it is the position of the leftmost pointer that must be deleted (together with
-   its corresponding key to the left of the pointer)
-   as a result of the previous level's balancing.
-   }
-*/
-{
-    struct buffer_head * tbSh = PATH_H_PBUFFER (tb->tb_path, h);
-    struct buffer_info bi;
-    int order;		/* we return this: it is 0 if there is no S[h], else it is tb->S[h]->b_item_order */
-    int insert_num, n, k;
-    struct buffer_head * S_new;
-    struct item_head new_insert_key;
-    struct buffer_head * new_insert_ptr = NULL;
-    struct item_head * new_insert_key_addr = insert_key;
-
-    order = ( tbSh ) ? PATH_H_POSITION (tb->tb_path, h + 1)/*tb->S[h]->b_item_order*/ : 0;
-
-  /* Using insert_size[h] calculate the number insert_num of items
-     that must be inserted to or deleted from S[h]. */
-    insert_num = tb->insert_size[h]/((int)(KEY_SIZE + DC_SIZE));
-
-    /* Check whether insert_num is proper **/
-    /* Make balance in case insert_num < 0 */
-    if ( insert_num < 0 ) {
-	balance_internal_when_delete (tb, h, child_pos);
-	return order;
-    }
- 
-    k = 0;
-    if ( tb->lnum[h] > 0 ) {
-	/* shift lnum[h] items from S[h] to the left neighbor L[h].
-	   check how many of new items fall into L[h] or CFL[h] after shifting */
-	n = get_blkh_nr_items (B_BLK_HEAD(tb->L[h])); /* number of items in L[h] */
-	if ( tb->lnum[h] <= child_pos ) {
-	    /* new items don't fall into L[h] or CFL[h] */
-	    internal_shift_left (INTERNAL_SHIFT_FROM_S_TO_L, tb, h, tb->lnum[h]);
-	    child_pos -= tb->lnum[h];
-	} else if ( tb->lnum[h] > child_pos + insert_num ) {
-	    /* all new items fall into L[h] */
-	    internal_shift_left (INTERNAL_SHIFT_FROM_S_TO_L, tb, h, tb->lnum[h] - insert_num);
-
-	    /* insert insert_num keys and node-pointers into L[h] */
-	    bi.bi_bh = tb->L[h];
-	    bi.bi_parent = tb->FL[h];
-	    bi.bi_position = get_left_neighbor_position (tb, h);
-	    internal_insert_childs (tb->tb_fs, &bi,/*tb->L[h], tb->S[h-1]->b_next*/ n + child_pos + 1,
-				    insert_num,insert_key,insert_ptr);
-
-	    insert_num = 0; 
-	} else {
-	    struct disk_child * dc;
-
-	    /* some items fall into L[h] or CFL[h], but some don't fall */
-	    internal_shift1_left (tb, h, child_pos + 1);
-	    /* calculate number of new items that fall into L[h] */
-	    k = tb->lnum[h] - child_pos - 1;
-
-	    bi.bi_bh = tb->L[h];
-	    bi.bi_parent = tb->FL[h];
-	    bi.bi_position = get_left_neighbor_position (tb, h);
-	    internal_insert_childs (tb->tb_fs, &bi,/*tb->L[h], tb->S[h-1]->b_next,*/ n + child_pos + 1,k,
-				    insert_key,insert_ptr);
-
-	    replace_lkey(tb, h, insert_key + k);
-
-	    /* replace the first node-ptr in S[h] by node-ptr to insert_ptr[k] */
-	    dc = B_N_CHILD(tbSh, 0);
-
-	    set_dc(dc, MAX_CHILD_SIZE(insert_ptr[k]->b_size) - 
-		   get_blkh_free_space (B_BLK_HEAD(insert_ptr[k])), 
-		   insert_ptr[k]->b_blocknr);
-	/*	       
-	    set_dc_child_size (dc, MAX_CHILD_SIZE(insert_ptr[k]->b_size) -
-			       get_blkh_free_space (B_BLK_HEAD(insert_ptr[k])));
-	    set_dc_child_blocknr (dc, insert_ptr[k]->b_blocknr);
-	*/
-	    mark_buffer_dirty (tbSh);
-
-	    k++;
-	    insert_key += k;
-	    insert_ptr += k;
-	    insert_num -= k;
-	    child_pos = 0;
-	}
-    }	/* tb->lnum[h] > 0 */
-
-    if ( tb->rnum[h] > 0 ) {
-	/*shift rnum[h] items from S[h] to the right neighbor R[h]*/
-	/* check how many of new items fall into R or CFR after shifting */
-	n = get_blkh_nr_items (B_BLK_HEAD (tbSh)); /* number of items in S[h] */
-	if ( n - tb->rnum[h] >= child_pos )
-	    /* new items fall into S[h] */
-	    /*internal_shift_right(tb,h,tbSh,tb->CFR[h],tb->rkey[h],tb->R[h],tb->rnum[h]);*/
-	    internal_shift_right (INTERNAL_SHIFT_FROM_S_TO_R, tb, h, tb->rnum[h]);
-	else
-	    if ( n + insert_num - tb->rnum[h] < child_pos )
-	    {
-		/* all new items fall into R[h] */
-		internal_shift_right (INTERNAL_SHIFT_FROM_S_TO_R, tb, h, tb->rnum[h] - insert_num);
-
-		/* insert insert_num keys and node-pointers into R[h] */
-		bi.bi_bh = tb->R[h];
-		bi.bi_parent = tb->FR[h];
-		bi.bi_position = get_right_neighbor_position (tb, h);
-		internal_insert_childs (tb->tb_fs, &bi, /*tb->R[h],tb->S[h-1]->b_next*/ child_pos - n - insert_num + tb->rnum[h] - 1,
-					insert_num,insert_key,insert_ptr);
-		insert_num = 0;
-	    }
-	    else
-	    {
-		struct disk_child * dc;
-
-		/* one of the items falls into CFR[h] */
-		internal_shift1_right(tb, h, n - child_pos + 1);
-		/* calculate number of new items that fall into R[h] */
-		k = tb->rnum[h] - n + child_pos - 1;
-
-		bi.bi_bh = tb->R[h];
-		bi.bi_parent = tb->FR[h];
-		bi.bi_position = get_right_neighbor_position (tb, h);
-		internal_insert_childs (tb->tb_fs, &bi, /*tb->R[h], tb->R[h]->b_child,*/ 0, k, insert_key + 1, insert_ptr + 1);
-
-		replace_rkey(tb, h, insert_key + insert_num - k - 1);
-
-		/* replace the first node-ptr in R[h] by node-ptr insert_ptr[insert_num-k-1]*/
-		dc = B_N_CHILD(tb->R[h], 0);
-		set_dc(dc, MAX_CHILD_SIZE(insert_ptr[insert_num-k-1]->b_size) -
-		       get_blkh_free_space (B_BLK_HEAD(insert_ptr[insert_num-k-1])),
-		       insert_ptr[insert_num-k-1]->b_blocknr);
-		/*
-		set_dc_child_size (dc, MAX_CHILD_SIZE(insert_ptr[insert_num-k-1]->b_size) -
-				   get_blkh_free_space (B_BLK_HEAD(insert_ptr[insert_num-k-1])));
-		set_dc_child_blocknr (dc, insert_ptr[insert_num-k-1]->b_blocknr);
-		*/
-		mark_buffer_dirty (tb->R[h]);
-		    
-		insert_num -= (k + 1);
-	    }
-    }
-
-    /** Fill new node that appears instead of S[h] **/
-    if ( ! tb->blknum[h] )
-    { /* node S[h] is empty now */
-	/* Mark buffer as invalid and put it to head of free list. */
-	reiserfs_invalidate_buffer(tb, tbSh, 1);/* do not preserve, internal node*/
-	return order;
-    }
-
-    if ( ! tbSh ) {
-	/* create new root */
-	struct disk_child  * dc;
-	struct buffer_head * tbSh_1 = PATH_H_PBUFFER (tb->tb_path, h - 1);
-	struct reiserfs_super_block * sb;
-
-	if ( tb->blknum[h] != 1 )
-	    reiserfs_panic(0, "balance_internal", "One new node required for creating the new root");
-	/* S[h] = empty buffer from the list FEB. */
-	tbSh = get_FEB (tb);
-	set_blkh_level (B_BLK_HEAD(tbSh), h + 1);
-	
-	/* Put the unique node-pointer to S[h] that points to S[h-1]. */
-
-	dc = B_N_CHILD(tbSh, 0);
-
-	set_dc(dc, MAX_CHILD_SIZE (tbSh_1->b_size) - 
-	       get_blkh_free_space (B_BLK_HEAD(tbSh_1)),
-	       tbSh_1->b_blocknr);
-	/*
-	set_dc_child_size (dc, MAX_CHILD_SIZE (tbSh_1->b_size) - get_blkh_free_space (B_BLK_HEAD(tbSh_1)));
-	set_dc_child_blocknr (dc, tbSh_1->b_blocknr);
-	*/
-	tb->insert_size[h] -= DC_SIZE;
-	set_blkh_free_space (B_BLK_HEAD(tbSh),
-			     get_blkh_free_space (B_BLK_HEAD(tbSh)) - DC_SIZE);
-
-	mark_buffer_dirty (tbSh);
-	
-	/* put new root into path structure */
-	PATH_OFFSET_PBUFFER(tb->tb_path, ILLEGAL_PATH_ELEMENT_OFFSET) = tbSh;
-	
-	/* Change root in structure super block. */
-	sb = tb->tb_fs->fs_ondisk_sb;
-	set_sb_root_block (sb, tbSh->b_blocknr);
-	set_sb_tree_height (sb, get_sb_tree_height (sb) + 1);
-	
-	mark_buffer_dirty (tb->tb_fs->fs_super_bh);
-	tb->tb_fs->fs_dirt = 1;
-    }
-    
-    if ( tb->blknum[h] == 2 ) {
-	int snum;
-	struct buffer_info dest_bi, src_bi;
-
-
-	/* S_new = free buffer from list FEB */
-	S_new = get_FEB(tb);
-
-	set_blkh_level (B_BLK_HEAD(S_new), h + 1);
-
-	dest_bi.bi_bh = S_new;
-	dest_bi.bi_parent = 0;
-	dest_bi.bi_position = 0;
-	src_bi.bi_bh = tbSh;
-	src_bi.bi_parent = PATH_H_PPARENT (tb->tb_path, h);
-	src_bi.bi_position = PATH_H_POSITION (tb->tb_path, h + 1);
-		
-	n = get_blkh_nr_items (B_BLK_HEAD(tbSh)); /* number of items in S[h] */
-	snum = (insert_num + n + 1)/2;
-	if ( n - snum >= child_pos ) {
-	    /* new items don't fall into S_new */
-	    /*	store the delimiting key for the next level */
-	    /* new_insert_key = (n - snum)'th key in S[h] */
-	    memcpy (&new_insert_key,B_N_PDELIM_KEY(tbSh,n - snum),
-		    KEY_SIZE);
-	    /* last parameter is del_par */
-	    internal_move_pointers_items (tb->tb_fs, &dest_bi, &src_bi, LAST_TO_FIRST, snum, 0);
-	} else if ( n + insert_num - snum < child_pos ) {
-	    /* all new items fall into S_new */
-	    /*	store the delimiting key for the next level */
-	    /* new_insert_key = (n + insert_item - snum)'th key in S[h] */
-	    memcpy(&new_insert_key,B_N_PDELIM_KEY(tbSh,n + insert_num - snum),
-		   KEY_SIZE);
-	    /* last parameter is del_par */
-	    internal_move_pointers_items (tb->tb_fs, &dest_bi, &src_bi, LAST_TO_FIRST, snum - insert_num, 0);
-	    /*			internal_move_pointers_items(S_new,tbSh,1,snum - insert_num,0);*/
-
-	    /* insert insert_num keys and node-pointers into S_new */
-	    internal_insert_childs (tb->tb_fs, &dest_bi, /*S_new,tb->S[h-1]->b_next,*/child_pos - n - insert_num + snum - 1,
-				    insert_num,insert_key,insert_ptr);
-
-	    insert_num = 0;
-	} else {
-	    struct disk_child * dc;
-
-	    /* some items fall into S_new, but some don't fall */
-	    /* last parameter is del_par */
-	    internal_move_pointers_items (tb->tb_fs, &dest_bi, &src_bi, LAST_TO_FIRST, n - child_pos + 1, 1);
-	    /*			internal_move_pointers_items(S_new,tbSh,1,n - child_pos + 1,1);*/
-	    /* calculate number of new items that fall into S_new */
-	    k = snum - n + child_pos - 1;
-
-	    internal_insert_childs (tb->tb_fs, &dest_bi, /*S_new,*/ 0, k, insert_key + 1, insert_ptr+1);
-
-	    /* new_insert_key = insert_key[insert_num - k - 1] */
-	    memcpy(&new_insert_key,insert_key + insert_num - k - 1,
-		   KEY_SIZE);
-	    /* replace first node-ptr in S_new by node-ptr to insert_ptr[insert_num-k-1] */
-
-	    dc = B_N_CHILD(S_new,0);
-	    set_dc(dc, MAX_CHILD_SIZE(insert_ptr[insert_num-k-1]->b_size) -
-		   get_blkh_free_space (B_BLK_HEAD(insert_ptr[insert_num-k-1])),
-		   insert_ptr[insert_num-k-1]->b_blocknr);
-	    /*
-	    set_dc_child_size (dc, MAX_CHILD_SIZE(insert_ptr[insert_num-k-1]->b_size) -
-			       get_blkh_free_space (B_BLK_HEAD(insert_ptr[insert_num-k-1])));
-	    set_dc_child_blocknr (dc, insert_ptr[insert_num-k-1]->b_blocknr);
-	    */
-	    mark_buffer_dirty (S_new);
-			
-	    insert_num -= (k + 1);
-	}
-	/* new_insert_ptr = node_pointer to S_new */
-	new_insert_ptr = S_new;
-	/*
-	  S_new->b_count --;
-	*/
-	/*brelse(S_new);*/
-    }
-
-    n = get_blkh_nr_items (B_BLK_HEAD(tbSh)); /*number of items in S[h] */
-
-    if ( -1 <= child_pos && child_pos <= n && insert_num > 0 ) {
-	bi.bi_bh = tbSh;
-	bi.bi_parent = PATH_H_PPARENT (tb->tb_path, h);
-	bi.bi_position = PATH_H_POSITION (tb->tb_path, h + 1);
-	if (child_pos == -1) {
-	    /* this is a little different from original do_balance:
-	       here we insert the minimal keys in the tree, that has never happened when file system works */
-	    if (tb->CFL[h-1] || insert_num != 1 || h != 1)
-		die ("balance_internal: invalid child_pos");
-	    /* insert_child (tb->S[h], tb->S[h-1], child_pos, insert_num, B_N_ITEM_HEAD(tb->S[0],0), insert_ptr);*/
-	    internal_insert_childs (tb->tb_fs, &bi, child_pos, insert_num,
-			B_N_PITEM_HEAD (PATH_PLAST_BUFFER (tb->tb_path), 0), insert_ptr);
-	} else
-	    internal_insert_childs (tb->tb_fs, &bi, child_pos,insert_num,insert_key,insert_ptr);
-    }
-
-
-    memcpy (new_insert_key_addr,&new_insert_key,KEY_SIZE);
-    insert_ptr[0] = new_insert_ptr;
-
-    return order;
-}
-
diff --git a/reiserfscore/includes.h b/reiserfscore/includes.h
deleted file mode 100644
index ecb0676..0000000
--- a/reiserfscore/includes.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright 2000-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#ifdef HAVE_CONFIG_H
-#   include "config.h"
-#endif
-
-#include "io.h"
-#include "misc.h"
-#include "reiserfs_lib.h"
-
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <asm/types.h>
-#include <fcntl.h>
-#include <malloc.h>
-#include <sys/vfs.h>
-#include <time.h>
diff --git a/reiserfscore/journal.c b/reiserfscore/journal.c
deleted file mode 100644
index 3803599..0000000
--- a/reiserfscore/journal.c
+++ /dev/null
@@ -1,850 +0,0 @@
-/*
- * Copyright 2002-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#define _GNU_SOURCE
-
-#include "includes.h"
-
-/* compares description block with commit block. returns 0 if they differ, 1
-   if they match */
-static int does_desc_match_commit (struct buffer_head *d_bh, 
-			    struct buffer_head *c_bh) 
-{
-    return (get_commit_trans_id (c_bh) == get_desc_trans_id (d_bh) &&
-	    get_commit_trans_len (c_bh) == get_desc_trans_len (d_bh));
-}
-
-
-/* d_bh is descriptor, return number of block where commit block of this
-   transaction is to be */
-unsigned long commit_expected (reiserfs_filsys_t * fs, struct buffer_head * d_bh)
-{
-    unsigned long offset;
-    struct journal_params * sb_jp;
-
-
-    sb_jp = sb_jp (fs->fs_ondisk_sb);
-    //desc = (struct reiserfs_journal_desc *)d_bh->b_data;
-    offset = d_bh->b_blocknr - get_jp_journal_1st_block (sb_jp);
-    return get_jp_journal_1st_block (sb_jp) + 
-	((offset + get_desc_trans_len (d_bh) + 1) % get_jp_journal_size (sb_jp));
-}
-
-
-/* d_bh contains journal descriptor, returns number of block where descriptor
-   block of next transaction should be */
-unsigned long next_desc_expected (reiserfs_filsys_t * fs, struct buffer_head * d_bh)
-{
-    unsigned long offset;
-    struct journal_params * sb_jp;
-
-
-    sb_jp = sb_jp (fs->fs_ondisk_sb);
-    //desc = (struct reiserfs_journal_desc *)d_bh->b_data;
-    offset = d_bh->b_blocknr - get_jp_journal_1st_block (sb_jp);
-    return get_jp_journal_1st_block (sb_jp) + 
-	((offset + get_desc_trans_len (d_bh) + 2) % get_jp_journal_size (sb_jp));
-}
-
-/* common checks for validness of a transaction */
-int transaction_check_content (reiserfs_filsys_t * fs, reiserfs_trans_t * trans) {
-    struct buffer_head *d_bh, *c_bh;
-    struct reiserfs_journal_desc * desc;
-    struct reiserfs_journal_commit * commit;
-    unsigned long block;
-    unsigned int trans_half, i;
-
-    d_bh = bread (fs->fs_journal_dev, trans->desc_blocknr, fs->fs_blocksize);
-
-    if (!d_bh || who_is_this (d_bh->b_data, d_bh->b_size) != THE_JDESC)
-	goto error_desc_brelse;
-
-    /* read expected commit block and compare with descriptor block */
-    c_bh = bread (fs->fs_journal_dev, commit_expected (fs, d_bh), fs->fs_blocksize);
-    if (!c_bh)
-	goto error_desc_brelse;
- 
-    if (!does_desc_match_commit (d_bh, c_bh)) 
-	goto error_commit_brelse;
-
-    /* Check that all target blocks are journalable */
-    desc = (struct reiserfs_journal_desc *)(d_bh->b_data);
-    commit = (struct reiserfs_journal_commit *)(c_bh->b_data);
-
-    trans_half = journal_trans_half (d_bh->b_size);
-    for (i = 0; i < get_desc_trans_len(d_bh); i++) {
-	if (i < trans_half)
-	    block = le32_to_cpu (desc->j2_realblock[i]);
-	else
-	    block = le32_to_cpu (commit->j3_realblock[i - trans_half]);
-
-	if (not_journalable(fs, block)) 
-	    goto error_commit_brelse;
-    }
-    
-    brelse (d_bh);
-    brelse (c_bh);
-    return 1;
-    
-error_commit_brelse:
-    brelse (c_bh);
-error_desc_brelse:
-    brelse(d_bh);
-    return 0;
-}
-
-/* common checks for validness of a transaction */
-int transaction_check_desc(reiserfs_filsys_t * fs, struct buffer_head * d_bh) {
-    struct buffer_head * c_bh;
-    int ret = 1;
-
-    if (!d_bh || who_is_this (d_bh->b_data, d_bh->b_size) != THE_JDESC)
-	return 0;
-
-    /* read expected commit block and compare with descriptor block */
-    c_bh = bread (fs->fs_journal_dev, commit_expected (fs, d_bh), fs->fs_blocksize);
-    if (!c_bh)
-	return 0;
- 
-    if (!does_desc_match_commit (d_bh, c_bh)) 
-	ret = 0;
-
-    brelse (c_bh);
-    return ret;
-}
-
-
-/* read the journal and find the oldest and newest transactions, return number
-   of transactions found */
-int get_boundary_transactions (reiserfs_filsys_t * fs,
-			       reiserfs_trans_t * oldest,
-			       reiserfs_trans_t * newest)
-{
-    struct reiserfs_super_block * sb;
-    unsigned long j_cur;
-    unsigned long j_start;
-    unsigned long j_size;
-    struct buffer_head * d_bh;
-    __u32 newest_trans_id, oldest_trans_id, trans_id;
-    int trans_nr;
-
-    sb = fs->fs_ondisk_sb;
-    
-    j_start = get_jp_journal_1st_block (sb_jp (sb));
-    j_size = get_jp_journal_size (sb_jp (sb));
-    
-    oldest_trans_id = 0xffffffff;
-    newest_trans_id = 0;
-
-    trans_nr = 0;
-    for (j_cur = 0; j_cur < j_size; j_cur ++) {
-	d_bh = bread (fs->fs_journal_dev, j_start + j_cur, fs->fs_blocksize);
-	if (!transaction_check_desc (fs, d_bh)) {
-	    brelse (d_bh);
-	    continue;
-	}
-
-	trans_nr ++;
-
-	trans_id = get_desc_trans_id (d_bh);
-	if (trans_id < oldest_trans_id) {
-	    oldest_trans_id = trans_id;
-
-	    oldest->mount_id = get_desc_mount_id (d_bh);
-	    oldest->trans_id = get_desc_trans_id (d_bh);
-	    oldest->desc_blocknr = d_bh->b_blocknr;
-	    oldest->trans_len = get_desc_trans_len (d_bh);
-	    oldest->commit_blocknr = commit_expected (fs, d_bh);
-	    oldest->next_trans_offset = next_desc_expected (fs, d_bh) - j_start;
-	}
-
-	if (trans_id > newest_trans_id) {
-	    newest_trans_id = trans_id;
-
-	    newest->mount_id = get_desc_mount_id (d_bh);
-	    newest->trans_id = get_desc_trans_id (d_bh);
-	    newest->desc_blocknr = d_bh->b_blocknr;
-	    newest->trans_len = get_desc_trans_len (d_bh);
-	    newest->commit_blocknr = commit_expected (fs, d_bh);
-	    newest->next_trans_offset = next_desc_expected (fs, d_bh) - j_start;
-	}
-
-	j_cur += get_desc_trans_len (d_bh) + 1;
-	brelse (d_bh);
-    }
-
-    return trans_nr;
-}
-
-#define TRANS_FOUND     1
-#define TRANS_NOT_FOUND 0
-
-/* trans is a valid transaction. Look for valid transaction with smallest
-   trans id which is greater than the id of the current one */
-int next_transaction (reiserfs_filsys_t * fs, reiserfs_trans_t * trans, reiserfs_trans_t break_trans)
-{
-    struct buffer_head * d_bh, * next_d_bh;
-    int found;
-    unsigned long j_start;
-    unsigned long j_offset;
-    unsigned long block;
-
-
-    j_start = get_jp_journal_1st_block (sb_jp (fs->fs_ondisk_sb));
-
-    found = TRANS_NOT_FOUND;
-
-    if (trans->trans_id == break_trans.trans_id)
-	return found;
-	
-    /* make sure that 'trans' is a valid transaction */
-    d_bh = bread (fs->fs_journal_dev, trans->desc_blocknr, fs->fs_blocksize);
-    if (!transaction_check_desc (fs, d_bh))
-	die ("next_transaction: valid transaction is expected");
-
-    block = next_desc_expected (fs, d_bh);
-    j_offset = block - j_start;
-
-    while (1) {
-	next_d_bh = bread (fs->fs_journal_dev, block, fs->fs_blocksize);
-	if (transaction_check_desc (fs, next_d_bh))
-	    break;
-
-	brelse (next_d_bh);
-	j_offset ++;
-	block = j_start + (j_offset % get_jp_journal_size (sb_jp (fs->fs_ondisk_sb)));
-    }
-
-    //next_desc = (struct reiserfs_journal_desc *)next_d_bh->b_data;
-    
-    if (break_trans.trans_id >= get_desc_trans_id (next_d_bh)) {
-	/* found transaction is newer */
-	trans->mount_id = get_desc_mount_id (next_d_bh);
-	trans->trans_id = get_desc_trans_id (next_d_bh);
-	trans->desc_blocknr = next_d_bh->b_blocknr;
-	trans->trans_len = get_desc_trans_len (next_d_bh);
-	trans->commit_blocknr = commit_expected (fs, next_d_bh);
-	trans->next_trans_offset = next_desc_expected (fs, next_d_bh) - j_start;
-	found = TRANS_FOUND;
-    }
-
-    brelse (d_bh);
-    brelse (next_d_bh);
-    return found;
-}
-
-static void read_journal_write_in_place (reiserfs_filsys_t * fs, reiserfs_trans_t * trans, unsigned int index, 
-                                         unsigned long in_journal, unsigned long in_place)
-{
-    struct buffer_head * j_bh, * bh;
-
-    j_bh = bread (fs->fs_journal_dev, in_journal, fs->fs_blocksize);
-    if (!j_bh) {
-	fprintf (stderr, "replay_one_transaction: transaction %lu: reading %lu block failed\n",
-		 trans->trans_id, in_journal);
-	return;
-    }
-    if (not_journalable (fs, in_place)) {
-	fprintf (stderr, "replay_one_transaction: transaction %lu: block %ld should not be journalled (%lu)\n",
-		 trans->trans_id, in_journal, in_place);
-	brelse (j_bh);
-	return;
-    }
-
-    bh = getblk (fs->fs_dev, in_place, fs->fs_blocksize);
-    
-    memcpy (bh->b_data, j_bh->b_data, bh->b_size);
-    mark_buffer_dirty (bh);
-    mark_buffer_uptodate (bh, 1);
-    bwrite (bh);
-    brelse (bh);
-    brelse (j_bh);
-    
-}
-
-
-/* go through all blocks of transaction and call 'action' each of them */
-void for_each_block (reiserfs_filsys_t * fs, reiserfs_trans_t * trans,
-		     action_on_block_t action)
-{
-    struct buffer_head * d_bh, * c_bh;
-    struct reiserfs_journal_desc * desc;
-    struct reiserfs_journal_commit * commit;
-    unsigned long j_start, j_offset, j_size;
-    unsigned int i, trans_half;
-    unsigned long block;
- 
-    d_bh = bread (fs->fs_journal_dev, trans->desc_blocknr, fs->fs_blocksize);
-    if (!d_bh) {
-	reiserfs_warning (stdout, "reading descriptor block %lu failed\n", trans->desc_blocknr);
-	return;
-    }
-
-    c_bh = bread (fs->fs_journal_dev, trans->commit_blocknr, fs->fs_blocksize);
-    if (!c_bh) {
-	reiserfs_warning (stdout, "reading commit block %lu failed\n", trans->commit_blocknr);
-	brelse (d_bh);
-	return;
-    }
-
-    desc = (struct reiserfs_journal_desc *)(d_bh->b_data);
-    commit = (struct reiserfs_journal_commit *)(c_bh->b_data);
-
-    /* first block of journal and size of journal */
-    j_start = get_jp_journal_1st_block (sb_jp (fs->fs_ondisk_sb));
-    j_size = get_jp_journal_size (sb_jp (fs->fs_ondisk_sb));
-
-    /* offset in the journal where the transaction starts */
-    j_offset = trans->desc_blocknr - j_start + 1;
-
-    trans_half = journal_trans_half (d_bh->b_size);
-    for (i = 0; i < trans->trans_len; i ++, j_offset ++) {
-	if (i < trans_half)
-	    block = le32_to_cpu (desc->j2_realblock[i]);
-	else
-	    block = le32_to_cpu (commit->j3_realblock[i - trans_half]);
-	action (fs, trans, i, j_start + (j_offset % j_size), block);
-    }
-
-    brelse (d_bh);
-    brelse (c_bh);
-}
-
-
-/* transaction is supposed to be valid */
-int replay_one_transaction (reiserfs_filsys_t * fs,
-			    reiserfs_trans_t * trans)
-{
-    for_each_block (fs, trans, read_journal_write_in_place);
-    fsync(fs->fs_dev);
-    return 0;
-}
-
-
-void for_each_transaction (reiserfs_filsys_t * fs, action_on_trans_t action)
-{
-    reiserfs_trans_t oldest, newest;
-    int ret = 0;
-
-    if (!get_boundary_transactions (fs, &oldest, &newest))
-	return;
-
-    while (1) {
-	action (fs, &oldest);	
-	if ((ret = next_transaction (fs, &oldest, newest)) == TRANS_NOT_FOUND)
-	    break;
-    }
-}
-
-unsigned long get_size_of_journal_or_reserved_area(
-    struct reiserfs_super_block * sb)
-{
-	if (is_reiserfs_jr_magic_string (sb))
-		return get_sb_reserved_for_journal (sb);
-
-	/* with standard journal */
-	return get_jp_journal_size (sb_jp (sb)) + 1;
-}
-
-
-__u32 advise_journal_max_trans_len (__u32 desired, __u32 journal_size /* no j_header */, 
-    int blocksize, int verbose)
-{
-    __u32 saved;
-    __u32 ratio = 1;
-
-    if (blocksize < 4096)
-	ratio = 4096/blocksize;
-	
-    saved = desired;
-    if (!desired)
-		desired = JOURNAL_TRANS_MAX/ratio;
-    
-    if (journal_size / desired < JOURNAL_MIN_RATIO)
-		desired = journal_size / JOURNAL_MIN_RATIO;
-    
-    if (desired > JOURNAL_TRANS_MAX/ratio)
-		desired = JOURNAL_TRANS_MAX/ratio;
-    
-    if (desired < JOURNAL_TRANS_MIN/ratio)
-		desired = JOURNAL_TRANS_MIN/ratio;
-
-    if (verbose) {
-	if (saved && saved != desired)
-		reiserfs_warning (stderr,
-		    "WARNING: wrong transaction max size (%u). Changed to %u\n", 
-		    saved, desired);
-    }
-
-    return desired;
-}
-#if 0
-    __u32 ret_val;
-    ret_val = 0;
-    if (!desired)                   ret_val = JOURNAL_TRANS_MAX;
-    if (desired<journal_size/8)     ret_val = journal_size/8;
-    if (desired>journal_size/2)     ret_val = journal_size/2;
-    if (desired>JOURNAL_TRANS_MAX)  ret_val = JOURNAL_TRANS_MAX;
-    if (ret_val) {
-        reiserfs_warning (stderr, "WARNING: Journal max trans length is wrong seting: %u, resetting to available possible %u\n",
-                          desired, ret_val);
-    } else {
-        ret_val = desired;
-    }
-    return ret_val;
-}
-#endif
-
-__u32 advise_journal_max_batch (unsigned long journal_trans_max)
-{
-    return journal_trans_max*JOURNAL_MAX_BATCH/JOURNAL_TRANS_MAX;
-}
-
-
-__u32 advise_journal_max_commit_age (void)
-{
-    return JOURNAL_MAX_COMMIT_AGE;
-}
-
-
-__u32 advise_journal_max_trans_age (void)
-{
-    return JOURNAL_MAX_TRANS_AGE;
-}
-
-
-int reiserfs_journal_params_check (reiserfs_filsys_t * fs) {
-    struct reiserfs_journal_header * j_head;
-    struct reiserfs_super_block * sb = fs->fs_ondisk_sb;
-    
-    j_head = (struct reiserfs_journal_header *)(fs->fs_jh_bh->b_data);
-	
-    /* Check the superblock's journal parameters. */
-    if (!is_reiserfs_jr_magic_string (sb)) {    
-	if (get_jp_journal_dev (sb_jp(sb)) != 0 || 
-	    get_jp_journal_1st_block (sb_jp(sb)) != get_journal_start_must (fs) || 
-	    get_jp_journal_size (sb_jp(sb)) != 
-	    journal_default_size(fs->fs_super_bh->b_blocknr, fs->fs_blocksize))
-	{
-	    reiserfs_warning (stderr, 
-		"\nreiserfs_open_journal: wrong journal parameters found in the "
-		"super block. \nYou should run reiserfsck with --rebuild-sb to "
-		"check your superblock consistency.\n\n");
-		
-	    return 1;
-	}
-    }
-	
-    if (memcmp(&j_head->jh_journal, sb_jp (sb), sizeof(struct journal_params))) {
-	if (!is_reiserfs_jr_magic_string (sb)) {
-	    reiserfs_warning (stderr, 
-		"\nreiserfs_open_journal: journal parameters from the superblock "
-		"does not match \nto the journal headers ones. It looks like that "
-		"you created your fs with old\nreiserfsprogs. Journal header is "
-		"fixed.\n\n", fs->fs_j_file_name);
-		
-	    memcpy(&j_head->jh_journal, sb_jp(sb), sizeof(struct journal_params));
-	    mark_buffer_dirty(fs->fs_jh_bh);
-	    bwrite(fs->fs_jh_bh);
-	} else {
-	    reiserfs_warning (stderr,
-		"\nreiserfs_open_journal: journal parameters from the super block "
-		"does not match \nto journal parameters from the journal. You should "
-		"run  reiserfsck with --rebuild-sb to check your superblock consistency.\n\n");
-		
-	    return 1;	
-	}
-    }
-    
-    return 0;
-}
-
-/* read journal header and make sure that it matches with the filesystem
-   opened */
-int reiserfs_open_journal (reiserfs_filsys_t * fs, char * j_filename, int flags) {
-    struct reiserfs_super_block * sb;
-    __u64 count;
-    
-    sb = fs->fs_ondisk_sb;
-
-    if (!j_filename) {
-	/*
-        if (is_reiserfs_jr_magic_string (sb)) {
-            // create a special file to access journal
-            return 1;
-        } */
-	
-	j_filename = fs->fs_file_name;
-    } else if (!is_reiserfs_jr_magic_string (sb)) {
-        /* make sure that name specified is a correct name */
-	if (strcmp (j_filename, fs->fs_file_name)) {
-	    reiserfs_warning (stderr, "Filesystem with standard journal found, "
-		"wrong name of specified journal device %s \n", j_filename);
-	    return 2;
-	}
-    }
-
-    fs->fs_journal_dev = open (j_filename, flags 
-#if defined(O_LARGEFILE)
-			       | O_LARGEFILE
-#endif
-			       );
-    if (fs->fs_journal_dev == -1) 
-        return -1;
-    
-    asprintf (&fs->fs_j_file_name, "%s", j_filename);
-    
-    if (get_jp_journal_size(sb_jp(sb)) < JOURNAL_MIN_SIZE) {
-	reiserfs_warning (stderr, "Journal of (%lu) block size found on "
-	    "specified journal device %s.\nMust be not less than (%lu).\n",
-	    get_jp_journal_size (sb_jp (sb)) + 1, j_filename, 
-	    JOURNAL_MIN_SIZE + 1);
-	close(fs->fs_journal_dev);
-	return 1;
-    }
-    
-    if (!(count = count_blocks (j_filename, fs->fs_blocksize))) {
-	close(fs->fs_journal_dev);
-	return -1;
-    }
-
-    if (get_jp_journal_1st_block (sb_jp (sb)) + 
-	get_jp_journal_size (sb_jp (sb)) + 1 > count) 
-    {
-	reiserfs_warning (stderr, "Detected journal on specified device %s "
-			  "does not fit to the device.\nStart block (%lu) + "
-			  "size (%lu) less than device size (%lu).\n", 
-			  j_filename, get_jp_journal_1st_block(sb_jp (sb)), 
-			  get_jp_journal_size(sb_jp (sb)) + 1, count);
-	close(fs->fs_journal_dev);
-	return 1;
-    }
-    
-    /* read journal header */
-    fs->fs_jh_bh = bread (fs->fs_journal_dev, 
-			  get_jp_journal_1st_block (sb_jp (sb)) + 
-			  get_jp_journal_size (sb_jp (sb)), 
-			  fs->fs_blocksize);
-
-    if (!fs->fs_jh_bh) {
-	reiserfs_warning (stderr, "reiserfs_open_journal: bread failed "
-			  "reading journal  header.\n");
-	close(fs->fs_journal_dev);
-	return -1;
-    }
-
-    return 0;
-}
-
-/* initialize super block's journal related fields and journal header fields. 
- * If len is 0 - make journal of default size */
-int reiserfs_create_journal(
-    reiserfs_filsys_t * fs, 
-    char * j_device,		/* journal device name */
-    unsigned long offset,	/* journal offset on the j_device */
-    unsigned long len,		/* including journal header */
-    int transaction_max_size)
-{
-    struct stat st;
-    struct buffer_head * bh;
-    struct reiserfs_journal_header * jh;
-    struct reiserfs_super_block * sb;
-    unsigned long blocks;
-
-    sb = fs->fs_ondisk_sb;
-    
-    if (!j_device || !strcmp (j_device, fs->fs_file_name)) {
-	/* Journal is to be on the host device, check the amount space for the 
-	 * journal on it. */
-	len = len ? len : journal_default_size(fs->fs_super_bh->b_blocknr, 
-	    fs->fs_blocksize) + 1;
-		
-	offset = offset ? offset : get_journal_start_must(fs);
-	
-	if (offset < get_journal_start_must(fs)) {
-	    reiserfs_warning (stderr, "reiserfs_create_journal: offset is "
-		"%lu, but it cannot be less then %llu on the device %s\n", 
-		offset, get_journal_start_must(fs), j_device);
-	    return 0;
-	}
-	
-	if (!is_block_count_correct(offset, fs->fs_blocksize, 
-	    get_sb_block_count(sb), len)) 
-	{
-	    /* host device does not contain enough blocks */
-	    reiserfs_warning (stderr, "reiserfs_create_journal: cannot create "
-		"a journal of %lu blocks with %lu offset on %d blocks\n", 
-		len, offset, get_sb_block_count(sb));
-		return 0;
-	}
-	
-	j_device = fs->fs_file_name;
-	
-	
-	st.st_rdev = 0;
-    } else {
-	/* journal is to be on separate device */
-	if (!(blocks = count_blocks (j_device, fs->fs_blocksize)))
-		return 0;
-
-	if (!len) {
-	    /* default size of a journal on a separate device is whole device */
-	    if (blocks < offset) {
-		reiserfs_warning (stderr, "reiserfs_create_journal: offset is "
-		    "%lu, blocks on device %lu\n", offset, blocks);
-		return 0;
-	    }
-	    len = blocks - offset;
-	}
-
-	if (len > journal_default_size (fs->fs_super_bh->b_blocknr, 
-	    fs->fs_blocksize) + 1) 
-	{
-	    fflush(stderr);
-	    
-	    reiserfs_warning (stdout, "NOTE: journal new size %lu is greater "
-		"than default size %lu:\nthis may slow down initializing and "
-		"mounting of the journal. Hope it is ok.\n\n", len, 
-		journal_default_size(fs->fs_super_bh->b_blocknr, 
-		fs->fs_blocksize) + 1);
-	}
-
-	if (blocks < offset + len) {
-	    reiserfs_warning (stderr, "reiserfs_create_journal: no enough "
-		"blocks on device %lu, needed %lu\n", blocks, offset + len);
-	    return 0;
-	}
-	
-	if (stat (j_device, &st) == -1) {
-	    reiserfs_warning (stderr, "reiserfs_create_journal: stat %s failed"
-		": %s\n", j_device, strerror(errno));
-	    return 0;
-	}
-/*
-	if (!S_ISBLK (st.st_mode)) {
-		reiserfs_warning (stderr, "reiserfs_create_journal: "
-		"%s is not a block device (%x)\n", j_device, st.st_rdev);
-		return 0;
-	}
-*/
-    }
-
-    fs->fs_journal_dev = open (j_device, O_RDWR 
-#if defined(O_LARGEFILE)
-			       | O_LARGEFILE
-#endif
-			       );
-    if (fs->fs_journal_dev == -1) {
-	reiserfs_warning (stderr, "reiserfs_create_journal: could not open "
-	    "%s: %s\n", j_device, strerror(errno));
-	return 0;
-    }
-
-    asprintf (&fs->fs_j_file_name, "%s", j_device);
-
-    if (len < JOURNAL_MIN_SIZE + 1) {
-	reiserfs_warning (stderr, "WARNING: Journal size (%u) is less, than "
-	    "minimal supported journal size (%u).\n", len, JOURNAL_MIN_SIZE + 1);
-        return 0;
-    }
-    /* get journal header */
-    bh = getblk (fs->fs_journal_dev, offset + len - 1, fs->fs_blocksize);
-    if (!bh) {
-	reiserfs_warning (stderr, "reiserfs_create_journal: getblk failed\n");
-	return 0;
-    }
-
-    /* fill journal header */
-    jh = (struct reiserfs_journal_header *)bh->b_data;
-    set_jp_journal_1st_block(&jh->jh_journal, offset);
-    set_jp_journal_dev(&jh->jh_journal, st.st_rdev);
-    set_jp_journal_magic(&jh->jh_journal, get_random());
-
-    set_jp_journal_size(&jh->jh_journal, len - 1);
-    set_jp_journal_max_trans_len(&jh->jh_journal, advise_journal_max_trans_len(
-	transaction_max_size, len - 1, fs->fs_blocksize, 1));
-    set_jp_journal_max_batch(&jh->jh_journal, advise_journal_max_batch(
-	get_jp_journal_max_trans_len(&jh->jh_journal)));
-    set_jp_journal_max_commit_age(&jh->jh_journal, 
-	advise_journal_max_commit_age());
-    set_jp_journal_max_trans_age(&jh->jh_journal, 
-	advise_journal_max_trans_age ());
-
-    mark_buffer_uptodate (bh, 1);
-    mark_buffer_dirty (bh);
-    
-    fs->fs_jh_bh = bh;
-    
-    /* make a copy of journal header in the super block */
-    memcpy (sb_jp (sb), &jh->jh_journal, sizeof (struct journal_params));
-    mark_buffer_dirty (fs->fs_super_bh);
-
-    return 1;
-}
-
-
-/* brelse journal header, flush all dirty buffers, close device, open, read
-   journal header */
-void reiserfs_reopen_journal (reiserfs_filsys_t * fs, int flag)
-{
-    unsigned long jh_block;
-
-
-    if (!reiserfs_journal_opened (fs))
-	return;
-
-    jh_block = fs->fs_jh_bh->b_blocknr;
-    brelse (fs->fs_jh_bh);
-    flush_buffers (fs->fs_journal_dev);
-    invalidate_buffers (fs->fs_journal_dev);
-    if (close (fs->fs_journal_dev))
-	die ("reiserfs_reopen_journal: closed failed: %s", strerror(errno));
-
-    fs->fs_journal_dev = open (fs->fs_j_file_name, flag 
-#if defined(O_LARGEFILE)
-			       | O_LARGEFILE
-#endif
-			       );
-    if (fs->fs_journal_dev == -1)
-	die ("reiserfs_reopen_journal: could not reopen journal device");
-
-    fs->fs_jh_bh = bread (fs->fs_journal_dev, jh_block, fs->fs_blocksize);
-    if (!fs->fs_jh_bh)
-	die ("reiserfs_reopen_journal: reading journal header failed");
-}
-
-
-int reiserfs_journal_opened (reiserfs_filsys_t * fs)
-{
-    return fs->fs_jh_bh ? 1 : 0;
-}
-
-
-void reiserfs_flush_journal (reiserfs_filsys_t * fs)
-{
-    if (!reiserfs_journal_opened (fs))
-		return;
-    flush_buffers (fs->fs_journal_dev);
-}
-
-
-void reiserfs_free_journal (reiserfs_filsys_t * fs)
-{
-    if (!reiserfs_journal_opened (fs))
-		return;
-    brelse (fs->fs_jh_bh);
-    fs->fs_jh_bh = 0;
-    free (fs->fs_j_file_name);
-    fs->fs_j_file_name = 0;
-}
-
-
-void reiserfs_close_journal (reiserfs_filsys_t * fs)
-{
-    reiserfs_flush_journal (fs);
-    reiserfs_free_journal (fs);
-
-}
-
-/* update journal header */
-static void update_journal_header (reiserfs_filsys_t * fs, 
-				   struct buffer_head * bh_jh, 
-				   reiserfs_trans_t *trans) 
-{
-    struct reiserfs_journal_header * j_head;
-	
-    j_head = (struct reiserfs_journal_header *)(bh_jh->b_data);
-
-    /* update journal header */
-    set_jh_last_flushed (j_head, trans->trans_id);
-    set_jh_mount_id (j_head, trans->mount_id);
-    set_jh_replay_start_offset (j_head, trans->next_trans_offset);
-    mark_buffer_dirty (bh_jh);
-    bwrite (bh_jh);
-    fsync(fs->fs_journal_dev);
-}
-
-/* fixme: what should be done when not all transactions can be replayed in proper order? */
-int replay_journal (reiserfs_filsys_t * fs)
-{
-    struct buffer_head * bh;
-    struct reiserfs_journal_header * j_head;
-    reiserfs_trans_t cur, newest, control;
-    int replayed, ret;
-
-    if (!reiserfs_journal_opened (fs))
-        reiserfs_panic ("replay_journal: journal is not opened");
-    
-    if (!is_opened_rw (fs))
-        reiserfs_panic ("replay_journal: fs is not opened with write perms");
-
-    reiserfs_warning (stderr, "Replaying journal..\n");
-    bh = fs->fs_jh_bh;
-	
-    j_head = (struct reiserfs_journal_header *)(bh->b_data);
-    control.mount_id = get_jh_mount_id (j_head);
-    control.trans_id = get_jh_last_flushed (j_head);
-    control.desc_blocknr = get_jh_replay_start_offset (j_head);
-
-    if (!get_boundary_transactions (fs, &cur, &newest)) {
-	reiserfs_warning (stderr, "No transactions found\n");
-	return 0;
-    }
-
-    /*  Smth strange with journal header or journal. We cannot say for sure what was the last 
-	replaied transaction, but relying on JH data is preferable. */
-
-    replayed = 0;
-    ret = TRANS_FOUND;
-    
-    /* Looking to the first valid not replayed transaction. */
-    while (1) {
-	if (cur.mount_id == control.mount_id && 
-	    cur.trans_id > control.trans_id)
-	    break;
-
-	if ((ret = next_transaction (fs, &cur, newest)) != TRANS_FOUND)
-	    break;
-    }
-    
-    while (ret == TRANS_FOUND) {
-	/* If not the next transaction to be replayed, break out here. */
-	if ((cur.mount_id != control.mount_id) || 
-	    (cur.trans_id != control.trans_id + 1 && control.trans_id))
-	    break;
-	
-	if (!transaction_check_content(fs, &cur)) {
-	    reiserfs_warning (stderr, "Trans broken: mountid %lu, transid %lu, desc %lu, "
-		"len %lu, commit %lu, next trans offset %lu\n", cur.mount_id, cur.trans_id, 
-		cur.desc_blocknr, cur.trans_len, cur.commit_blocknr, cur.next_trans_offset);
-	    break;
-	}
-
-        reiserfs_warning (stderr, "Trans replayed: mountid %lu, transid %lu, desc %lu, "
-            "len %lu, commit %lu, next trans offset %lu\n",
-	    cur.mount_id, cur.trans_id, cur.desc_blocknr, cur.trans_len,
-	    cur.commit_blocknr, cur.next_trans_offset);
-	replay_one_transaction (fs, &cur);
-	update_journal_header (fs, bh, &cur);
-	control = cur;
-        replayed ++;
-
-	ret = next_transaction (fs, &cur, newest);
-    }
-
-    reiserfs_warning (stderr, "Reiserfs journal '%s' in blocks [%u..%u]: %d "
-		      "transactions replayed\n", fs->fs_j_file_name, 
-		      get_jp_journal_1st_block(sb_jp(fs->fs_ondisk_sb)),
-		      get_jp_journal_1st_block(sb_jp(fs->fs_ondisk_sb)) + 
-		      get_jp_journal_size(sb_jp(fs->fs_ondisk_sb)) + 1,
-		      replayed);
-	
-    mark_buffer_dirty (fs->fs_super_bh);
-    bwrite (fs->fs_super_bh);
-	
-    update_journal_header (fs, bh, &newest);
-
-    return 0;
-}
diff --git a/reiserfscore/lbalance.c b/reiserfscore/lbalance.c
deleted file mode 100644
index e9323ba..0000000
--- a/reiserfscore/lbalance.c
+++ /dev/null
@@ -1,1118 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#include "includes.h"
-
-
-/* these are used in do_balance.c */
-
-/* leaf_move_items
-   leaf_shift_left
-   leaf_shift_right
-   leaf_delete_items
-   leaf_insert_into_buf
-   leaf_paste_in_buffer
-   leaf_cut_from_buffer
-   leaf_paste_entries
-   */
-
-
-extern struct tree_balance init_tb;
-extern int init_item_pos;
-extern int init_pos_in_item;
-extern int init_mode;
-
-
-
-/* copy copy_count entries from source directory item to dest buffer (creating new item if needed) */
-static void leaf_copy_dir_entries (reiserfs_filsys_t * fs,
-			           struct buffer_info * dest_bi, struct buffer_head * source, 
-				   int last_first, int item_num, int from, int copy_count)
-{
-    struct buffer_head * dest = dest_bi->bi_bh;
-    int item_num_in_dest;		/* either the number of target item,
-					   or if we must create a new item,
-					   the number of the item we will
-					   create it next to */
-    struct item_head * ih;
-    struct reiserfs_de_head * deh;
-    int copy_records_len;			/* length of all records in item to be copied */
-    char * records;
-
-    ih = B_N_PITEM_HEAD (source, item_num);
-
-    /* length of all record to be copied and first byte of the last of them */
-    deh = B_I_DEH (source, ih);
-    if (copy_count) {
-	copy_records_len = (from ? get_deh_location (&deh[from - 1]) : get_ih_item_len (ih)) - 
-	    get_deh_location (&deh[from + copy_count - 1]);
-	records = source->b_data + get_ih_location (ih) + get_deh_location (&deh[from + copy_count - 1]);
-    } else {
-	copy_records_len = 0;
-	records = 0;
-    }
-
-    /* when copy last to first, dest buffer can contain 0 items */
-    item_num_in_dest = (last_first == LAST_TO_FIRST) ? (( B_NR_ITEMS(dest) ) ? 0 : -1) : (B_NR_ITEMS(dest) - 1);
-
-    /* if there are no items in dest or the first/last item in dest is not item of the same directory */
-    if ( (item_num_in_dest == - 1) ||
-	 (last_first == FIRST_TO_LAST && are_items_mergeable (B_N_PITEM_HEAD (dest, item_num_in_dest), ih, dest->b_size) == 0) ||
-	 (last_first == LAST_TO_FIRST && are_items_mergeable (ih, B_N_PITEM_HEAD (dest, item_num_in_dest), dest->b_size) == 0)) {
-	/* create new item in dest */
-	struct item_head new_ih;
-
-	/* form item header */
-	memcpy (&new_ih.ih_key, &ih->ih_key, KEY_SIZE);
-
-	/* calculate item len */
-	set_ih_item_len (&new_ih, DEH_SIZE * copy_count + copy_records_len);
-	set_ih_entry_count (&new_ih, 0);
-    
-	if (last_first == LAST_TO_FIRST) {
-	    /* form key by the following way */
-	    if (from < get_ih_entry_count (ih)) {
-		set_key_offset_v1 (&new_ih.ih_key, get_deh_offset (&deh[from]));
-	    } else {
-		/* no entries will be copied to this item in this function */
-		set_key_offset_v1 (&new_ih.ih_key, MAX_KEY1_OFFSET);
-	    }
-	    set_key_uniqueness (&new_ih.ih_key, DIRENTRY_UNIQUENESS);
-	}
-	set_ih_key_format (&new_ih, get_ih_key_format (ih));
-	set_ih_flags (&new_ih, get_ih_flags (ih));
-    
-	/* insert item into dest buffer */
-	leaf_insert_into_buf (fs, dest_bi, (last_first == LAST_TO_FIRST) ? 0 : B_NR_ITEMS(dest), &new_ih, NULL, 0);
-    } else {
-	/* prepare space for entries */
-	leaf_paste_in_buffer (fs, dest_bi, (last_first == FIRST_TO_LAST) ? (B_NR_ITEMS(dest) - 1) : 0, 0xffff /*MAX_US_INT */,
-			      DEH_SIZE * copy_count + copy_records_len, records, 0);
-    }
-  
-    item_num_in_dest = (last_first == FIRST_TO_LAST) ? (B_NR_ITEMS(dest)-1) : 0;
-  
-    leaf_paste_entries (dest_bi->bi_bh, item_num_in_dest,
-			(last_first == FIRST_TO_LAST) ? get_ih_entry_count (B_N_PITEM_HEAD (dest, item_num_in_dest)) : 0,
-			copy_count, deh + from, records,
-			DEH_SIZE * copy_count + copy_records_len
-	);
-}
-
-
-/* Copy the first (if last_first == FIRST_TO_LAST) or last (last_first == LAST_TO_FIRST) item or 
-   part of it or nothing (see the return 0 below) from SOURCE to the end 
-   (if last_first) or beginning (!last_first) of the DEST */
-/* returns 1 if anything was copied, else 0 */
-static int leaf_copy_boundary_item (reiserfs_filsys_t * fs,
-                                    struct buffer_info * dest_bi, struct buffer_head * src, int last_first,
-				    int bytes_or_entries)
-{
-    struct buffer_head * dest = dest_bi->bi_bh;
-    int dest_nr_item, src_nr_item; /* number of items in the source and destination buffers */
-    struct item_head * ih;
-    struct item_head * dih;
-  
-    dest_nr_item = B_NR_ITEMS(dest);
-  
-    if ( last_first == FIRST_TO_LAST ) {
-	/* if ( DEST is empty or first item of SOURCE and last item of DEST are the items of different objects
-	   or of different types ) then there is no need to treat this item differently from the other items
-	   that we copy, so we return */
-	ih = B_N_PITEM_HEAD (src, 0);
-	dih = B_N_PITEM_HEAD (dest, dest_nr_item - 1);
-	if (!dest_nr_item || (are_items_mergeable (dih, ih, src->b_size) == 0))
-	    /* there is nothing to merge */
-	    return 0;
-      
-	if ( I_IS_DIRECTORY_ITEM(ih) ) {
-	    if ( bytes_or_entries == -1 )
-		/* copy all entries to dest */
-		bytes_or_entries = get_ih_entry_count(ih);
-	    leaf_copy_dir_entries (fs, dest_bi, src, FIRST_TO_LAST, 0, 0, bytes_or_entries);
-	    return 1;
-	}
-      
-	/* copy part of the body of the first item of SOURCE to the end of the body of the last item of the DEST
-	   part defined by 'bytes_or_entries'; if bytes_or_entries == -1 copy whole body; don't create new item header
-	*/
-	if ( bytes_or_entries == -1 )
-	    bytes_or_entries = get_ih_item_len (ih);
-
-	/* merge first item (or its part) of src buffer with the last
-	   item of dest buffer. Both are of the same file */
-	leaf_paste_in_buffer (fs, dest_bi, dest_nr_item - 1, get_ih_item_len (dih),
-		bytes_or_entries, B_I_PITEM(src,ih), 0);
-      
-	if (I_IS_INDIRECT_ITEM(dih)) {
-	    if (bytes_or_entries == get_ih_item_len (ih))
-		//dih->u.ih_free_space = ih->u.ih_free_space;
-		set_ih_free_space (dih, get_ih_free_space (ih));
-	}
-    
-	return 1;
-    }
-  
-
-    /* copy boundary item to right (last_first == LAST_TO_FIRST) */
-
-    /* ( DEST is empty or last item of SOURCE and first item of DEST
-       are the items of different object or of different types )
-    */
-    src_nr_item = B_NR_ITEMS (src);
-    ih = B_N_PITEM_HEAD (src, src_nr_item - 1);
-    dih = B_N_PITEM_HEAD (dest, 0);
-
-    if (!dest_nr_item || are_items_mergeable (ih, dih, src->b_size) == 0)
-	return 0;
-  
-    if ( I_IS_DIRECTORY_ITEM(ih)) {
-	if ( bytes_or_entries == -1 )
-	    /* bytes_or_entries = entries number in last item body of SOURCE */
-	    bytes_or_entries = get_ih_entry_count(ih);
-    
-	leaf_copy_dir_entries (fs, dest_bi, src, LAST_TO_FIRST, src_nr_item - 1, get_ih_entry_count(ih) - bytes_or_entries, 
-			       bytes_or_entries);
-	return 1;
-    }
-
-    /* copy part of the body of the last item of SOURCE to the begin of the body of the first item of the DEST;
-       part defined by 'bytes_or_entries'; if byte_or_entriess == -1 copy whole body; change first item key of the DEST;
-       don't create new item header
-    */
-  
-    if ( bytes_or_entries == -1 ) {
-	/* bytes_or_entries = length of last item body of SOURCE */
-	bytes_or_entries = get_ih_item_len (ih);
-
-	/* change first item key of the DEST */
-	//dih->ih_key.k_offset = ih->ih_key.k_offset;
-	set_offset (key_format (&dih->ih_key), &dih->ih_key, get_offset (&ih->ih_key));
-
-	/* item becomes non-mergeable */
-	/* or mergeable if left item was */
-	//dih->ih_key.k_uniqueness = ih->ih_key.k_uniqueness;
-	set_type (key_format (&dih->ih_key), &dih->ih_key, get_type (&ih->ih_key));
-    } else {
-	/* merge to right only part of item */
-	/* change first item key of the DEST */
-	if ( I_IS_DIRECT_ITEM(dih) ) {
-	    //dih->ih_key.k_offset -= bytes_or_entries;
-	    set_offset (key_format (&dih->ih_key), &dih->ih_key, get_offset (&dih->ih_key) - bytes_or_entries);
-	} else {
-	    //dih->ih_key.k_offset -= ((bytes_or_entries/UNFM_P_SIZE)*dest->b_size);
-	    set_offset (key_format (&dih->ih_key), &dih->ih_key, 
-			get_offset (&dih->ih_key) - ((bytes_or_entries/UNFM_P_SIZE)*dest->b_size));
-	}
-    }
-  
-    leaf_paste_in_buffer (fs, dest_bi, 0, 0, bytes_or_entries, B_I_PITEM(src,ih) + get_ih_item_len (ih) - bytes_or_entries, 0);
-    return 1;
-}
-
-
-/* copy cpy_mun items from buffer src to buffer dest
- * last_first == FIRST_TO_LAST means, that we copy cpy_num  items beginning from first-th item in src to tail of dest
- * last_first == LAST_TO_FIRST means, that we copy cpy_num  items beginning from first-th item in src to head of dest
- */
-static void leaf_copy_items_entirely (reiserfs_filsys_t * fs, struct buffer_info * dest_bi, 
-                                      struct buffer_head * src, int last_first,
-				      int first, int cpy_num)
-{
-    struct buffer_head * dest;
-    int nr;
-    int dest_before;
-    int last_loc, last_inserted_loc, location;
-    int i, j;
-    struct block_head * blkh;
-    struct item_head * ih;
-
-    dest = dest_bi->bi_bh;
-
-    if (cpy_num == 0)
-	return;
-
-    blkh = B_BLK_HEAD(dest);
-    nr = get_blkh_nr_items (blkh);
-  
-    /* we will insert items before 0-th or nr-th item in dest buffer. It depends of last_first parameter */
-    dest_before = (last_first == LAST_TO_FIRST) ? 0 : nr;
-
-    /* location of head of first new item */
-    ih = B_N_PITEM_HEAD (dest, dest_before);
-
-    /* prepare space for headers */
-    memmove (ih + cpy_num, ih, (nr-dest_before) * IH_SIZE);
-
-    /* copy item headers */
-    memcpy (ih, B_N_PITEM_HEAD (src, first), cpy_num * IH_SIZE);
-
-    set_blkh_free_space (blkh, get_blkh_free_space (blkh) - IH_SIZE * cpy_num);
-
-    /* location of unmovable item */
-    j = location = (dest_before == 0) ? dest->b_size : get_ih_location (ih-1);
-    for (i = dest_before; i < nr + cpy_num; i ++) {
-	location -= get_ih_item_len (&ih[i-dest_before]);
-	set_ih_location (&ih[i-dest_before], location);
-    }
-
-    /* prepare space for items */
-    last_loc = get_ih_location (&ih[nr+cpy_num-1-dest_before]);
-    last_inserted_loc = get_ih_location (&ih[cpy_num-1]);
-
-    /* check free space */
-    memmove (dest->b_data + last_loc,
-	     dest->b_data + last_loc + j - last_inserted_loc,
-	     last_inserted_loc - last_loc);
-
-    /* copy items */
-    memcpy (dest->b_data + last_inserted_loc, B_N_PITEM(src,(first + cpy_num - 1)),
-	    j - last_inserted_loc);
-
-    /* sizes, item number */
-    set_blkh_nr_items (blkh, get_blkh_nr_items (blkh) + cpy_num);
-    set_blkh_free_space (blkh, 
-			 get_blkh_free_space (blkh) - (j - last_inserted_loc));
-  
-    mark_buffer_dirty (dest);
-
-    if (dest_bi->bi_parent) {
-	struct disk_child * dc;
-	dc = B_N_CHILD (dest_bi->bi_parent, dest_bi->bi_position);
-	set_dc_child_size (dc, get_dc_child_size (dc) + j - last_inserted_loc + IH_SIZE * cpy_num);
-	mark_buffer_dirty(dest_bi->bi_parent);
-    }
-}
-
-
-/* This function splits the (liquid) item into two items (useful when
-   shifting part of an item into another node.) */
-static void leaf_item_bottle (reiserfs_filsys_t * fs,
-			      struct buffer_info * dest_bi, struct buffer_head * src, int last_first,
-			      int item_num, int cpy_bytes)
-{
-    struct buffer_head * dest = dest_bi->bi_bh;
-    struct item_head * ih;
-  
-    if ( last_first == FIRST_TO_LAST ) {
-	/* if ( if item in position item_num in buffer SOURCE is directory item ) */
-	if (I_IS_DIRECTORY_ITEM(ih = B_N_PITEM_HEAD(src,item_num)))
-	    leaf_copy_dir_entries (fs, dest_bi, src, FIRST_TO_LAST, item_num, 0, cpy_bytes);
-	else {
-	    struct item_head n_ih;
-      
-	    /* copy part of the body of the item number 'item_num' of SOURCE to the end of the DEST 
-	       part defined by 'cpy_bytes'; create new item header; change old item_header (????);
-	       n_ih = new item_header;
-	    */
-	    memcpy (&n_ih, ih, IH_SIZE);
-	    set_ih_item_len (&n_ih, cpy_bytes);
-	    if (I_IS_INDIRECT_ITEM(ih)) {
-		//n_ih.u.ih_free_space = 0;
-		set_ih_free_space (&n_ih, 0);;
-	    }
-
-	    //n_ih.ih_version = ih->ih_version;
-	    set_ih_key_format (&n_ih, get_ih_key_format (ih));
-	    set_ih_flags (&n_ih, get_ih_flags (ih));
-	    leaf_insert_into_buf (fs, dest_bi, B_NR_ITEMS(dest), &n_ih, B_N_PITEM (src, item_num), 0);
-	}
-    } else {
-	/*  if ( if item in position item_num in buffer SOURCE is directory item ) */
-	if (I_IS_DIRECTORY_ITEM(ih = B_N_PITEM_HEAD (src, item_num)))
-	    leaf_copy_dir_entries (fs, dest_bi, src, LAST_TO_FIRST, item_num, get_ih_entry_count(ih) - cpy_bytes, cpy_bytes);
-	else {
-	    struct item_head n_ih;
-      
-	    /* copy part of the body of the item number 'item_num' of SOURCE to the begin of the DEST 
-	       part defined by 'cpy_bytes'; create new item header;
-	       n_ih = new item_header;
-	    */
-	    memcpy (&n_ih, ih, SHORT_KEY_SIZE);
-      
-	    if (I_IS_DIRECT_ITEM(ih)) {
-		//n_ih.ih_key.k_offset = ih->ih_key.k_offset + ih->ih_item_len - cpy_bytes;
-		set_offset (key_format (&ih->ih_key), &n_ih.ih_key, get_offset (&ih->ih_key) + get_ih_item_len (ih) - cpy_bytes);
-		//n_ih.ih_key.k_uniqueness = TYPE_DIRECT;
-		set_type (key_format (&ih->ih_key), &n_ih.ih_key, TYPE_DIRECT);
-		//n_ih.u.ih_free_space = USHRT_MAX;
-		set_ih_free_space (&n_ih, USHRT_MAX);
-	    } else {
-		/* indirect item */
-		//n_ih.ih_key.k_offset = ih->ih_key.k_offset + (ih->ih_item_len - cpy_bytes) / UNFM_P_SIZE * dest->b_size;
-		set_offset (key_format (&ih->ih_key), &n_ih.ih_key,
-			    get_offset (&ih->ih_key) + (get_ih_item_len (ih) - cpy_bytes) / UNFM_P_SIZE * dest->b_size);
-		//n_ih.ih_key.k_uniqueness = TYPE_INDIRECT;
-		set_type (key_format (&ih->ih_key), &n_ih.ih_key, TYPE_INDIRECT);
-		//n_ih.u.ih_free_space = ih->u.ih_free_space;
-		set_ih_free_space (&n_ih, get_ih_free_space (ih));
-	    }
-      
-	    /* set item length */
-	    set_ih_item_len (&n_ih, cpy_bytes);
-	    //n_ih.ih_version = ih->ih_version;
-	    set_ih_key_format (&n_ih, get_ih_key_format (ih));
-	    set_ih_flags (&n_ih, get_ih_flags (ih));
-	    leaf_insert_into_buf (fs, dest_bi, 0, &n_ih, B_N_PITEM(src,item_num) + get_ih_item_len (ih) - cpy_bytes, 0);
-	}
-    }
-}
-
-
-/* If cpy_bytes equals minus one than copy cpy_num whole items from SOURCE to DEST.
-   If cpy_bytes not equal to minus one than copy cpy_num-1 whole items from SOURCE to DEST.
-   From last item copy cpy_num bytes for regular item and cpy_num directory entries for
-   directory item. */
-static int leaf_copy_items (reiserfs_filsys_t * fs,
-                            struct buffer_info * dest_bi, struct buffer_head * src,
-			    int last_first, int cpy_num,
-			    int cpy_bytes)
-{
-    struct buffer_head * dest;
-    int pos, i, src_nr_item, bytes;
-
-    dest = dest_bi->bi_bh;
-    if ( cpy_num == 0 )
-	return 0;
- 
-    if ( last_first == FIRST_TO_LAST ) {
-	/* copy items to left */
-	pos = 0;
-	if ( cpy_num == 1 )
-	    bytes = cpy_bytes;
-	else
-	    bytes = -1;
-   
-	/* copy the first item or it part or nothing to the end of the DEST (i = leaf_copy_boundary_item(DEST,SOURCE,0,bytes)) */
-	i = leaf_copy_boundary_item (fs, dest_bi, src, FIRST_TO_LAST, bytes);
-	cpy_num -= i;
-	if ( cpy_num == 0 )
-	    return i;
-	pos += i;
-	if ( cpy_bytes == -1 )
-	    /* copy first cpy_num items starting from position 'pos' of SOURCE to end of DEST */
-	    leaf_copy_items_entirely(fs, dest_bi, src, FIRST_TO_LAST, pos, cpy_num);
-	else {
-	    /* copy first cpy_num-1 items starting from position 'pos-1' of the SOURCE to the end of the DEST */
-	    leaf_copy_items_entirely(fs, dest_bi, src, FIRST_TO_LAST, pos, cpy_num-1);
-	     
-	    /* copy part of the item which number is cpy_num+pos-1 to the end of the DEST */
-	    leaf_item_bottle (fs, dest_bi, src, FIRST_TO_LAST, cpy_num+pos-1, cpy_bytes);
-	} 
-    } else {
-	/* copy items to right */
-	src_nr_item = B_NR_ITEMS (src);
-	if ( cpy_num == 1 )
-	    bytes = cpy_bytes;
-	else
-	    bytes = -1;
-   
-	/* copy the last item or it part or nothing to the begin of the DEST (i = leaf_copy_boundary_item(DEST,SOURCE,1,bytes)); */
-	i = leaf_copy_boundary_item (fs, dest_bi, src, LAST_TO_FIRST, bytes);
-   
-	cpy_num -= i;
-	if ( cpy_num == 0 )
-	    return i;
-   
-	pos = src_nr_item - cpy_num - i;
-	if ( cpy_bytes == -1 ) {
-	    /* starting from position 'pos' copy last cpy_num items of SOURCE to begin of DEST */
-	    leaf_copy_items_entirely(fs, dest_bi, src, LAST_TO_FIRST, pos, cpy_num);
-	} else {
-	    /* copy last cpy_num-1 items starting from position 'pos+1' of the SOURCE to the begin of the DEST; */
-	    leaf_copy_items_entirely(fs, dest_bi, src, LAST_TO_FIRST, pos+1, cpy_num-1);
-
-	    /* copy part of the item which number is pos to the begin of the DEST */
-	    leaf_item_bottle (fs, dest_bi, src, LAST_TO_FIRST, pos, cpy_bytes);
-	}
-    }
-    return i;
-}
-
-
-/* there are types of coping: from S[0] to L[0], from S[0] to R[0],
-   from R[0] to L[0]. for each of these we have to define parent and
-   positions of destination and source buffers */
-static void leaf_define_dest_src_infos (int shift_mode, struct tree_balance * tb, struct buffer_info * dest_bi,
-					struct buffer_info * src_bi, int * first_last,
-					struct buffer_head * Snew)
-{
-    /* define dest, src, dest parent, dest position */
-    switch (shift_mode) {
-    case LEAF_FROM_S_TO_L:    /* it is used in leaf_shift_left */
-	src_bi->bi_bh = PATH_PLAST_BUFFER (tb->tb_path);
-	src_bi->bi_parent = PATH_H_PPARENT (tb->tb_path, 0);
-	src_bi->bi_position = PATH_H_B_ITEM_ORDER (tb->tb_path, 0);	/* src->b_item_order */
-	dest_bi->bi_bh = tb->L[0];
-	dest_bi->bi_parent = tb->FL[0];
-	dest_bi->bi_position = get_left_neighbor_position (tb, 0);
-	*first_last = FIRST_TO_LAST;
-	break;
-
-    case LEAF_FROM_S_TO_R:  /* it is used in leaf_shift_right */
-	src_bi->bi_bh = PATH_PLAST_BUFFER (tb->tb_path);
-	src_bi->bi_parent = PATH_H_PPARENT (tb->tb_path, 0);
-	src_bi->bi_position = PATH_H_B_ITEM_ORDER (tb->tb_path, 0);
-	dest_bi->bi_bh = tb->R[0];
-	dest_bi->bi_parent = tb->FR[0];
-	dest_bi->bi_position = get_right_neighbor_position (tb, 0);
-	*first_last = LAST_TO_FIRST;
-	break;
-
-    case LEAF_FROM_R_TO_L:  /* it is used in balance_leaf_when_delete */
-	src_bi->bi_bh = tb->R[0];
-	src_bi->bi_parent = tb->FR[0];
-	src_bi->bi_position = get_right_neighbor_position (tb, 0);
-	dest_bi->bi_bh = tb->L[0];
-	dest_bi->bi_parent = tb->FL[0];
-	dest_bi->bi_position = get_left_neighbor_position (tb, 0);
-	*first_last = FIRST_TO_LAST;
-	break;
-    
-    case LEAF_FROM_L_TO_R:  /* it is used in balance_leaf_when_delete */
-	src_bi->bi_bh = tb->L[0];
-	src_bi->bi_parent = tb->FL[0];
-	src_bi->bi_position = get_left_neighbor_position (tb, 0);
-	dest_bi->bi_bh = tb->R[0];
-	dest_bi->bi_parent = tb->FR[0];
-	dest_bi->bi_position = get_right_neighbor_position (tb, 0);
-	*first_last = LAST_TO_FIRST;
-	break;
-
-    case LEAF_FROM_S_TO_SNEW:
-	src_bi->bi_bh = PATH_PLAST_BUFFER (tb->tb_path);
-	src_bi->bi_parent = PATH_H_PPARENT (tb->tb_path, 0);
-	src_bi->bi_position = PATH_H_B_ITEM_ORDER (tb->tb_path, 0);
-	dest_bi->bi_bh = Snew;
-	dest_bi->bi_parent = 0;
-	dest_bi->bi_position = 0;
-	*first_last = LAST_TO_FIRST;
-	break;
-    
-    default:
-	reiserfs_panic (0, "vs-10250: leaf_define_dest_src_infos: shift type is unknown (%d)", shift_mode);
-    }
-}
-
-
-
-
-/* copy mov_num items and mov_bytes of the (mov_num-1)th item to
-   neighbor. Delete them from source */
-int leaf_move_items (int shift_mode, struct tree_balance * tb, 
-		     int mov_num, int mov_bytes, struct buffer_head * Snew)
-{
-    int ret_value;
-    struct buffer_info dest_bi, src_bi;
-    int first_last;
-
-    leaf_define_dest_src_infos (shift_mode, tb, &dest_bi, &src_bi, &first_last, Snew);
-
-    ret_value = leaf_copy_items (tb->tb_fs, &dest_bi, src_bi.bi_bh, first_last, mov_num, mov_bytes);
-
-    leaf_delete_items (tb->tb_fs, &src_bi, first_last, (first_last == FIRST_TO_LAST) ? 0 : 
-		       (B_NR_ITEMS(src_bi.bi_bh) - mov_num), mov_num, mov_bytes);
-
-  
-    return ret_value;
-}
-
-
-/* Shift shift_num items (and shift_bytes of last shifted item if shift_bytes != -1)
-   from S[0] to L[0] and replace the delimiting key */
-int leaf_shift_left (struct tree_balance * tb, int shift_num, int shift_bytes)
-{
-    struct buffer_head * S0 = PATH_PLAST_BUFFER (tb->tb_path);
-    int i;
-
-    /* move shift_num (and shift_bytes bytes) items from S[0] to left neighbor L[0] */
-    i = leaf_move_items (LEAF_FROM_S_TO_L, tb, shift_num, shift_bytes, 0);
-
-    if ( shift_num ) {
-	if (B_NR_ITEMS (S0) == 0) { 
-	    /* everything is moved from S[0] */
-	    if (PATH_H_POSITION (tb->tb_path, 1) == 0)
-		replace_key(tb->tb_fs, tb->CFL[0], tb->lkey[0], PATH_H_PPARENT (tb->tb_path, 0), 0);
-	} else {
-	    /* replace lkey in CFL[0] by 0-th key from S[0]; */
-	    replace_key(tb->tb_fs, tb->CFL[0], tb->lkey[0], S0, 0);
-      
-	}
-    }
-  
-    return i;
-}
-
-
-
-
-
-/* CLEANING STOPPED HERE */
-
-
-
-
-/* Shift shift_num (shift_bytes) items from S[0] to the right neighbor, and replace the delimiting key */
-int leaf_shift_right (struct tree_balance * tb, int shift_num, int shift_bytes)
-{
-    int ret_value;
-
-    /* move shift_num (and shift_bytes) items from S[0] to right neighbor R[0] */
-    ret_value = leaf_move_items (LEAF_FROM_S_TO_R, tb, shift_num, shift_bytes, 0);
-
-    /* replace rkey in CFR[0] by the 0-th key from R[0] */
-    if (shift_num) {
-	replace_key(tb->tb_fs, tb->CFR[0], tb->rkey[0], tb->R[0], 0);
-    }
-
-    return ret_value;
-}
-
-
-
-static void leaf_delete_items_entirely (reiserfs_filsys_t * sb,
-					/*struct reiserfs_transaction_handle *th,*/
-					struct buffer_info * bi,
-					int first,
-					int del_num);
-/*  If del_bytes == -1, starting from position 'first' delete del_num items in whole in buffer CUR.
-    If not. 
-    If last_first == 0. Starting from position 'first' delete del_num-1 items in whole. Delete part of body of
-    the first item. Part defined by del_bytes. Don't delete first item header
-    If last_first == 1. Starting from position 'first+1' delete del_num-1 items in whole. Delete part of body of
-    the last item . Part defined by del_bytes. Don't delete last item header.
-*/
-void leaf_delete_items (reiserfs_filsys_t * fs,
-			struct buffer_info * cur_bi,
-			int last_first, 
-			int first, int del_num, int del_bytes)
-{
-    struct buffer_head * bh;
-    int item_amount = B_NR_ITEMS (bh = cur_bi->bi_bh);
-    
-    if ( del_num == 0 )
-	return;
-    
-    if ( first == 0 && del_num == item_amount && del_bytes == -1 ) {
-	make_empty_node (cur_bi);
-	mark_buffer_dirty (bh);
-	return;
-    }
-    
-    if ( del_bytes == -1 )
-	/* delete del_num items beginning from item in position first */
-	leaf_delete_items_entirely (fs, cur_bi, first, del_num);
-    else {
-	if ( last_first == FIRST_TO_LAST ) {
-	    /* delete del_num-1 items beginning from item in position first  */
-	    leaf_delete_items_entirely (fs, cur_bi, first, del_num-1);
-	    
-	    /* delete the part of the first item of the bh do not
-	       delete item header */
-	    leaf_cut_from_buffer (fs, cur_bi, 0, 0, del_bytes);
-	} else  {
-	    struct item_head * ih;
-	    int len;
-	    
-	    /* delete del_num-1 items beginning from item in position first+1  */
-	    leaf_delete_items_entirely (fs, cur_bi, first+1, del_num-1);
-	    
-	    if (I_IS_DIRECTORY_ITEM(ih = B_N_PITEM_HEAD(bh, B_NR_ITEMS(bh)-1))) 	/* the last item is directory  */
-	        /* len = numbers of directory entries in this item */
-	        len = get_ih_entry_count(ih);
-	    else
-		/* len = body len of item */
- 	        len = get_ih_item_len (ih);
-	    
-	    /* delete the part of the last item of the bh 
-	       do not delete item header
-	    */
-	    leaf_cut_from_buffer (fs, cur_bi, B_NR_ITEMS(bh) - 1, len - del_bytes, del_bytes);
-	}
-    }
-}
-
-
-/* insert item into the leaf node in position before */
-void leaf_insert_into_buf (reiserfs_filsys_t * s,
-			   struct buffer_info * bi,
-			   int before,
-			   struct item_head * inserted_item_ih,
-			   const char * inserted_item_body,
-			   int zeros_number
-			   )
-{
-    struct buffer_head * bh = bi->bi_bh;
-    int nr;
-    struct block_head * blkh;
-    struct item_head * ih;
-    int i;
-    int last_loc, unmoved_loc;
-    char * to;
-
-    blkh = B_BLK_HEAD (bh);
-    nr = get_blkh_nr_items (blkh);
-
-    /* get item new item must be inserted before */
-    ih = B_N_PITEM_HEAD (bh, before);
-
-    /* prepare space for the body of new item */
-    last_loc = nr ? get_ih_location (&ih[nr - before - 1]) : bh->b_size;
-    unmoved_loc = before ? get_ih_location (ih-1) : bh->b_size;
-
-    memmove (bh->b_data + last_loc - get_ih_item_len (inserted_item_ih), 
-	     bh->b_data + last_loc, unmoved_loc - last_loc);
-
-    to = bh->b_data + unmoved_loc - get_ih_item_len (inserted_item_ih);
-    memset (to, 0, zeros_number);
-    to += zeros_number;
-
-    /* copy body to prepared space */
-    if (inserted_item_body)
-	//if (mem_mode == REISERFS_USER_MEM)
-	//  copy_from_user (to, inserted_item_body, inserted_item_ih->ih_item_len - zeros_number);
-	//else {
-	memmove (to, inserted_item_body, get_ih_item_len (inserted_item_ih) - zeros_number);
-    //}
-    else
-	memset(to, '\0', get_ih_item_len (inserted_item_ih) - zeros_number);
-  
-    /* insert item header */
-    memmove (ih + 1, ih, IH_SIZE * (nr - before));
-    memmove (ih, inserted_item_ih, IH_SIZE);
-  
-    /* change locations */
-    for (i = before; i < nr + 1; i ++) {
-	unmoved_loc -= get_ih_item_len (&ih[i-before]);
-	set_ih_location (&ih[i-before], unmoved_loc);
-    }
-  
-    /* sizes, free space, item number */
-    set_blkh_nr_items (blkh, get_blkh_nr_items (blkh) + 1);
-    set_blkh_free_space (blkh, get_blkh_free_space (blkh) -
-			 (IH_SIZE + get_ih_item_len (inserted_item_ih)));
-
-    mark_buffer_dirty(bh) ;
-
-    if (bi->bi_parent) { 
-	struct disk_child * dc;
-
-	dc = B_N_CHILD (bi->bi_parent, bi->bi_position);
-	set_dc_child_size (dc, get_dc_child_size (dc) + IH_SIZE + get_ih_item_len (inserted_item_ih));
-	mark_buffer_dirty(bi->bi_parent) ;
-    }
-
-    if (is_a_leaf(bh->b_data, bh->b_size) != THE_LEAF)
-	reiserfs_panic ("leaf_insert_into_buf: bad leaf %lu: %b", bh->b_blocknr, bh);
-}
-
-
-/* paste paste_size bytes to affected_item_num-th item. 
-   When item is a directory, this only prepare space for new entries */
-void leaf_paste_in_buffer (reiserfs_filsys_t * fs,
-			   struct buffer_info * bi,
-			   int affected_item_num,
-			   int pos_in_item,
-			   int paste_size,
-			   const char * body,
-			   int zeros_number)
-{
-    struct buffer_head * bh = bi->bi_bh;
-    int nr;
-    struct block_head * blkh;
-    struct item_head * ih;
-    int i;
-    int last_loc, unmoved_loc;
-
-
-    blkh = B_BLK_HEAD (bh);
-    nr = get_blkh_nr_items (blkh);
-
-    /* item to be appended */
-    ih = B_N_PITEM_HEAD(bh, affected_item_num);
-
-    last_loc = get_ih_location (&ih[nr - affected_item_num - 1]);
-    unmoved_loc = affected_item_num ? get_ih_location (ih-1) : bh->b_size;  
-
-    /* prepare space */
-    memmove (bh->b_data + last_loc - paste_size, bh->b_data + last_loc,
-	     unmoved_loc - last_loc);
-
-
-    /* change locations */
-    for (i = affected_item_num; i < nr; i ++)
-	set_ih_location (&ih[i-affected_item_num], get_ih_location (&ih[i-affected_item_num]) - paste_size);
-
-    if ( body ) {
-	if (!I_IS_DIRECTORY_ITEM(ih)) {
-	    //if (mem_mode == REISERFS_USER_MEM) {
-	    //memset (bh->b_data + unmoved_loc - paste_size, 0, zeros_number);
-	    //copy_from_user (bh->b_data + unmoved_loc - paste_size + zeros_number, body, paste_size - zeros_number);
-	    //} else 
-	    {
-		if (!pos_in_item) {
-		    /* shift data to right */
-		    memmove (bh->b_data + get_ih_location (ih) + paste_size, 
-			     bh->b_data + get_ih_location (ih), get_ih_item_len (ih));
-		    /* paste data in the head of item */
-		    memset (bh->b_data + get_ih_location (ih), 0, zeros_number);
-		    memcpy (bh->b_data + get_ih_location (ih) + zeros_number, body, paste_size - zeros_number);
-		} else {
-		    memset (bh->b_data + unmoved_loc - paste_size, 0, zeros_number);
-		    memcpy (bh->b_data + unmoved_loc - paste_size + zeros_number, body, paste_size - zeros_number);
-		}
-	    }
-	}
-    }
-    else
-	memset(bh->b_data + unmoved_loc - paste_size,'\0',paste_size);
-
-    set_ih_item_len (ih, get_ih_item_len (ih) + paste_size);
-
-    /* change free space */
-    set_blkh_free_space (blkh, get_blkh_free_space (blkh) - paste_size);
-
-    mark_buffer_dirty(bh) ;
-
-    if (bi->bi_parent) { 
-	struct disk_child * dc;
-
-	dc = B_N_CHILD (bi->bi_parent, bi->bi_position);
-	set_dc_child_size (dc, get_dc_child_size (dc) + paste_size);
-	mark_buffer_dirty(bi->bi_parent);
-    }
-    if (is_a_leaf(bh->b_data, bh->b_size) != THE_LEAF)
-	reiserfs_panic ("leaf_paste_in_buffer: bad leaf %lu: %b", bh->b_blocknr, bh);
-}
-
-
-/* cuts DEL_COUNT entries beginning from FROM-th entry. Directory item
-   does not have free space, so it moves DEHs and remaining records as
-   necessary. Return value is size of removed part of directory item
-   in bytes. */
-static int leaf_cut_entries (struct buffer_head * bh,
-			     struct item_head * ih, 
-			     int from, int del_count)
-{
-    char * item;
-    struct reiserfs_de_head * deh;
-    int prev_record_offset;	/* offset of record, that is (from-1)th */
-    char * prev_record;		/* */
-    int cut_records_len;		/* length of all removed records */
-    int i;
-    int entry_count;
-
-
-    /* first byte of item */
-    item = B_I_PITEM (bh, ih);
-
-    /* entry head array */
-    deh = B_I_DEH (bh, ih);
-    entry_count = get_ih_entry_count (ih);
-
-    if (del_count == 0) {
-	int shift;
-	int last_location;
-
-	last_location = get_deh_location (deh + entry_count - 1);
-	shift = last_location - DEH_SIZE * entry_count;
-	
-	memmove (deh + entry_count, item + last_location,
-		 get_ih_item_len (ih) - last_location);
-	for (i = 0; i < entry_count; i ++)
-	    set_deh_location (&deh[i], get_deh_location (&deh[i]) - shift);
-
-	return shift;
-    }
-
-    /* first byte of remaining entries, those are BEFORE cut entries
-       (prev_record) and length of all removed records (cut_records_len) */
-    prev_record_offset = (from ? get_deh_location (&deh[from - 1]) : get_ih_item_len (ih));
-    cut_records_len = prev_record_offset/*from_record*/ - get_deh_location (&deh[from + del_count - 1]);
-    prev_record = item + prev_record_offset;
-
-
-    /* adjust locations of remaining entries */
-    for (i = get_ih_entry_count (ih) - 1; i > from + del_count - 1; i --) {
-	set_deh_location (deh + i, get_deh_location (deh + i) - (DEH_SIZE * del_count));
-    }
-
-    for (i = 0; i < from; i ++) {
-	set_deh_location (deh + i, get_deh_location (deh + i) - (DEH_SIZE * del_count + cut_records_len));
-    }
-
-    set_ih_entry_count (ih, get_ih_entry_count (ih) - del_count);
-
-    /* shift entry head array and entries those are AFTER removed entries */
-    memmove ((char *)(deh + from),
-	     deh + from + del_count, 
-	     prev_record - cut_records_len - (char *)(deh + from + del_count));
-  
-    /* shift records, those are BEFORE removed entries */
-    memmove (prev_record - cut_records_len - DEH_SIZE * del_count,
-	     prev_record, item + get_ih_item_len (ih) - prev_record);
-
-    return DEH_SIZE * del_count + cut_records_len;
-}
-
-
-/*  when cut item is part of regular file
-        pos_in_item - first byte that must be cut
-        cut_size - number of bytes to be cut beginning from pos_in_item
- 
-   when cut item is part of directory
-        pos_in_item - number of first deleted entry
-        cut_size - count of deleted entries
-    */
-void leaf_cut_from_buffer (reiserfs_filsys_t * fs,
-			   struct buffer_info * bi, int cut_item_num,
-			   int pos_in_item, int cut_size)
-{
-    int nr;
-    struct buffer_head * bh = bi->bi_bh;
-    struct block_head * blkh;
-    struct item_head * ih;
-    int last_loc, unmoved_loc;
-    int i;
-
-    blkh = B_BLK_HEAD (bh);
-    nr = get_blkh_nr_items (blkh);
-
-    /* item head of truncated item */
-    ih = B_N_PITEM_HEAD (bh, cut_item_num);
-
-    if (I_IS_DIRECTORY_ITEM (ih)) {
-        /* first cut entry ()*/
-        cut_size = leaf_cut_entries (bh, ih, pos_in_item, cut_size);
-        if (pos_in_item == 0) {
-            /* change item key by key of first entry in the item */
-	    set_key_offset_v1 (&ih->ih_key, get_deh_offset (B_I_DEH (bh, ih)));
-            /*memcpy (&ih->ih_key.k_offset, &(B_I_DEH (bh, ih)->deh_offset), SHORT_KEY_SIZE);*/
-	}
-    } else {
-        /* item is direct or indirect */
-        /* shift item body to left if cut is from the head of item */
-        if (pos_in_item == 0) {
-	    memmove (bh->b_data + get_ih_location (ih),
-		     bh->b_data + get_ih_location (ih) + cut_size,
-		     get_ih_item_len (ih) - cut_size);
-
-            /* change key of item */
-            if (I_IS_DIRECT_ITEM(ih)) {
-                //ih->ih_key.k_offset += cut_size;
-                set_offset (key_format (&ih->ih_key), &ih->ih_key, get_offset (&ih->ih_key) + cut_size);
-            } else {
-                //ih->ih_key.k_offset += (cut_size / UNFM_P_SIZE) * bh->b_size;
-                set_offset (key_format (&ih->ih_key), &ih->ih_key, 
-			    get_offset (&ih->ih_key) + (cut_size / UNFM_P_SIZE) * bh->b_size);
-	    }
-	}
-    }
-  
-
-    /* location of the last item */
-    last_loc = get_ih_location (&ih[nr - cut_item_num - 1]);
-
-    /* location of the item, which is remaining at the same place */
-    unmoved_loc = cut_item_num ? get_ih_location (ih-1) : bh->b_size;
-
-
-    /* shift */
-    memmove (bh->b_data + last_loc + cut_size, bh->b_data + last_loc,
-	       unmoved_loc - last_loc - cut_size);
-
-    /* change item length */
-    set_ih_item_len (ih, get_ih_item_len (ih) - cut_size);
-  
-    if (I_IS_INDIRECT_ITEM(ih)) {
-        if (pos_in_item)
-            //ih->u.ih_free_space = 0;
-            set_ih_free_space (ih, 0);
-    }
-
-    /* change locations */
-    for (i = cut_item_num; i < nr; i ++) {
-	set_ih_location (&ih[i-cut_item_num], get_ih_location (&ih[i-cut_item_num]) + cut_size);
-    }
-
-    /* size, free space */
-    set_blkh_free_space (blkh, get_blkh_free_space (blkh) + cut_size);
-
-    mark_buffer_dirty(bh);
-    
-    if (bi->bi_parent) {
-	struct disk_child * dc;
-
-	dc = B_N_CHILD (bi->bi_parent, bi->bi_position);
-	set_dc_child_size (dc, get_dc_child_size (dc) - cut_size);
-	mark_buffer_dirty(bi->bi_parent);
-    }
-    if (is_a_leaf(bh->b_data, bh->b_size) != THE_LEAF &&
-	is_a_leaf(bh->b_data, bh->b_size) != HAS_IH_ARRAY)
-	reiserfs_panic ("leaf_cut_from_buffer: bad leaf %lu: %b",
-			bh->b_blocknr, bh);
-}
-
-
-/* delete del_num items from buffer starting from the first'th item */
-static void leaf_delete_items_entirely (reiserfs_filsys_t * fs,
-					struct buffer_info * bi,
-					int first, int del_num)
-{
-    struct buffer_head * bh = bi->bi_bh;
-    int nr;
-    int i, j;
-    int last_loc, last_removed_loc;
-    struct block_head * blkh;
-    struct item_head * ih;
-
-    if (del_num == 0)
-	return;
-    
-    blkh = B_BLK_HEAD (bh);
-    nr = get_blkh_nr_items (blkh);
-
-    if (first == 0 && del_num == nr) {
-	/* this does not work */
-	make_empty_node (bi);
-	
-	mark_buffer_dirty(bh);
-	return;
-    }
-    
-    ih = B_N_PITEM_HEAD (bh, first);
-    
-    /* location of unmovable item */
-    j = (first == 0) ? bh->b_size : get_ih_location (ih-1);
-    
-    /* delete items */
-    last_loc = get_ih_location (&ih[nr - 1 - first]);
-    last_removed_loc = get_ih_location (&ih[del_num-1]);
-    
-    memmove (bh->b_data + last_loc + j - last_removed_loc,
-	     bh->b_data + last_loc, last_removed_loc - last_loc);
-    
-    /* delete item headers */
-    memmove (ih, ih + del_num, (nr - first - del_num) * IH_SIZE);
-    
-    /* change item location */
-    for (i = first; i < nr - del_num; i ++) {
-	set_ih_location (&ih[i-first], get_ih_location (&ih[i-first]) + j - last_removed_loc);
-    }
-    
-    /* sizes, item number */
-    set_blkh_nr_items (blkh, get_blkh_nr_items (blkh)/*nr*/ - del_num);
-    set_blkh_free_space (blkh, get_blkh_free_space (blkh) + j - last_removed_loc + IH_SIZE * del_num);
-    
-    mark_buffer_dirty(bh);
-    
-    if (bi->bi_parent) {
-	struct disk_child * dc;
-
-	dc = B_N_CHILD (bi->bi_parent, bi->bi_position);
-	set_dc_child_size (dc, get_dc_child_size (dc) - 
-	    (j - last_removed_loc + IH_SIZE * del_num));
-	mark_buffer_dirty(bi->bi_parent);
-    }
-    if (is_a_leaf(bh->b_data, bh->b_size) != THE_LEAF &&
-	is_a_leaf(bh->b_data, bh->b_size) != HAS_IH_ARRAY)
-	reiserfs_panic ("leaf_delete_items_entirely: bad leaf %lu: %b", bh->b_blocknr, bh);
-}
-
-
-
-
-
-/* paste new_entry_count entries (new_dehs, records) into position before to item_num-th item */
-void leaf_paste_entries (struct buffer_head * bh,
-			 int item_num, int before, int new_entry_count,
-			 struct reiserfs_de_head * new_dehs,
-			 const char * records, int paste_size)
-{
-    struct item_head * ih;
-    char * item;
-    struct reiserfs_de_head * deh;
-    char * insert_point;
-    int i, old_entry_num;
-
-    if (new_entry_count == 0)
-        return;
-
-    ih = B_N_PITEM_HEAD(bh, item_num);
-
-    /* first byte of dest item */
-    item = B_I_PITEM (bh, ih);
-
-    /* entry head array */
-    deh = B_I_DEH (bh, ih);
-
-    /* new records will be pasted at this point */
-    insert_point = item + (before ? get_deh_location (&deh[before - 1]) : (get_ih_item_len (ih) - paste_size));
-
-    /* adjust locations of records that will be AFTER new records */
-    for (i = get_ih_entry_count (ih) - 1; i >= before; i --)
-	set_deh_location (deh + i, get_deh_location (deh + i) + DEH_SIZE * new_entry_count);
-
-    /* adjust locations of records that will be BEFORE new records */
-    for (i = 0; i < before; i ++)
-	set_deh_location (deh + i, get_deh_location (deh + i) + paste_size);
-
-    old_entry_num = get_ih_entry_count (ih);
-    //I_ENTRY_COUNT(ih) += new_entry_count;
-    set_ih_entry_count (ih, old_entry_num + new_entry_count);
-
-    /* prepare space for pasted records */
-    memmove (insert_point + paste_size, insert_point, item + (get_ih_item_len (ih) - paste_size) - insert_point);
-
-    /* copy new records */
-    memcpy (insert_point + DEH_SIZE * new_entry_count, records,
-	    paste_size - DEH_SIZE * new_entry_count);
-  
-    /* prepare space for new entry heads */
-    deh += before;
-    memmove ((char *)(deh + new_entry_count), deh, insert_point - (char *)deh);
-
-    /* copy new entry heads */
-    memcpy (deh, new_dehs, DEH_SIZE * new_entry_count);
-
-    /* set locations of new records */
-    for (i = 0; i < new_entry_count; i ++)
-	set_deh_location (deh + i,
-			  get_deh_location (deh + i) + (- get_deh_location (&new_dehs[new_entry_count - 1]) +
-							insert_point + DEH_SIZE * new_entry_count - item));
-
-
-    /* change item key if neccessary (when we paste before 0-th entry */
-    if (!before)
-	set_key_offset_v1 (&ih->ih_key, get_deh_offset (new_dehs));
-}
-
-
-
-/* wrappers for operations on one separated node */
-
-void delete_item (reiserfs_filsys_t * fs,
-		  struct buffer_head * bh, int item_num)
-{
-    struct buffer_info bi;
-
-    bi.bi_bh = bh;
-    bi.bi_parent = 0;
-    bi.bi_position = 0;
-    leaf_delete_items_entirely (fs, &bi, item_num, 1);
-}
-
-
-void cut_entry (reiserfs_filsys_t * fs, struct buffer_head * bh,
-		int item_num, int entry_num, int del_count)
-{
-    struct buffer_info bi;
-
-    bi.bi_bh = bh;
-    bi.bi_parent = 0;
-    bi.bi_position = 0;
-    leaf_cut_from_buffer (fs, &bi, item_num, entry_num, del_count);
-}
-
diff --git a/reiserfscore/node_formats.c b/reiserfscore/node_formats.c
deleted file mode 100644
index 59697be..0000000
--- a/reiserfscore/node_formats.c
+++ /dev/null
@@ -1,1306 +0,0 @@
-/*
- *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
- *  reiserfsprogs/README
- */
-
-#include "includes.h"
-
-int leaf_count_ih(char * buf, int blocksize) {
-    struct item_head * ih;
-    int prev_location;
-    int nr;
-
-    /* look at the table of item head */
-    prev_location = blocksize;
-    ih = (struct item_head *)(buf + BLKH_SIZE);
-    nr = 0;
-    while (1) {
-	if (get_ih_location (ih) + get_ih_item_len (ih) != prev_location)
-	    break;
-	if (get_ih_location (ih) < IH_SIZE * (nr + 1) + BLKH_SIZE)
-	    break;
-	if (get_ih_item_len (ih) > MAX_ITEM_LEN (blocksize))
-	    break;
-	prev_location = get_ih_location (ih);
-	ih ++;
-	nr ++;
-    }
-    
-    return nr;
-}
-
-int leaf_free_space_estimate(char * buf, int blocksize) {
-    struct block_head * blkh;
-    struct item_head * ih;
-    int nr;
-    
-    blkh = (struct block_head *)buf;
-    nr = get_blkh_nr_items(blkh);    
-    ih = (struct item_head *)(buf + BLKH_SIZE) + nr - 1;
-    
-    return (nr ? get_ih_location (ih) : blocksize) - BLKH_SIZE - IH_SIZE * nr;
-}
-
-static int leaf_blkh_correct(char * buf, int blocksize) {
-    struct block_head * blkh;
-    unsigned int nr;
-
-    blkh = (struct block_head *)buf;
-    if (!is_leaf_block_head (buf))
-	return 0;
-
-    nr = get_blkh_nr_items(blkh);
-    if (nr > ((blocksize - BLKH_SIZE) / (IH_SIZE + MIN_ITEM_LEN)))
-	/* item number is too big or too small */
-	return 0;
-
-    return leaf_free_space_estimate(buf, blocksize) == get_blkh_free_space (blkh);
-}
-
-int is_a_leaf(char * buf, int blocksize) {
-    struct block_head * blkh;
-    int counted;
-    
-    blkh = (struct block_head *)buf;
-    if (!is_leaf_block_head (buf))
-	return 0;
-
-    counted = leaf_count_ih(buf, blocksize);
-    
-    /* if leaf block header is ok, check item count also. */
-    if (leaf_blkh_correct(buf, blocksize))
-	return counted >= get_blkh_nr_items (blkh) ? THE_LEAF : HAS_IH_ARRAY;
-    
-    /* leaf block header is corrupted, it is ih_array if some items were detected.*/
-    return counted ? HAS_IH_ARRAY : 0;
-}
-
-int leaf_item_number_estimate(struct buffer_head * bh) {
-    struct block_head * blkh;
-    int nr;
-    
-    nr = leaf_count_ih(bh->b_data, bh->b_size);
-    blkh = (struct block_head *)bh->b_data;
-
-    return nr >= get_blkh_nr_items (blkh) ? get_blkh_nr_items (blkh) : nr;
-}
-
-#if 0
-/* this only checks block header and item head array (ih_location-s
-   and ih_item_len-s). Item internals are not checked */
-int does_node_look_like_a_leaf (char * buf, int blocksize)
-{
-    struct block_head * blkh;
-    struct item_head * ih;
-    int used_space;
-    int prev_location;
-    int i;
-    int nr;
-
-    blkh = (struct block_head *)buf;
-    if (!is_leaf_block_head (buf))
-	return 0;
-
-    nr = get_blkh_nr_items (blkh);
-    if (nr < 0 || nr > ((blocksize - BLKH_SIZE) / (IH_SIZE + MIN_ITEM_LEN)))
-	/* item number is too big or too small */
-	return 0;
-
-    ih = (struct item_head *)(buf + BLKH_SIZE) + nr - 1;
-    used_space = BLKH_SIZE + IH_SIZE * nr + (blocksize - (nr ? get_ih_location (ih) : blocksize));
-
-    if (used_space != blocksize - get_blkh_free_space (blkh))
-	/* free space does not match to calculated amount of use space */
-	return 0;
-
-    // FIXME: it is_leaf will hit performance too much - we may have
-    // return 1 here
-
-    /* check tables of item heads */
-    ih = (struct item_head *)(buf + BLKH_SIZE);
-    prev_location = blocksize;
-    for (i = 0; i < nr; i ++, ih ++) {
-	/* items of zero length are allowed - they may exist for short time
-           during balancing */
-	if (get_ih_location (ih) > blocksize || get_ih_location (ih) < IH_SIZE * nr)
-	    return 0;
-	if (/*ih_item_len (ih) < 1 ||*/ get_ih_item_len (ih) > MAX_ITEM_LEN (blocksize))
-	    return 0;
-	if (prev_location - get_ih_location (ih) != get_ih_item_len (ih))
-	    return 0;
-	prev_location = get_ih_location (ih);
-    }
-
-    // one may imagine much more checks
-    return 1;
-}
-
-/* check ih_item_len and ih_location. Should be useful when block head is
-   corrupted */
-static int does_node_have_ih_array (char * buf, int blocksize)
-{
-    struct item_head * ih;
-    int prev_location;
-    int nr;
-
-    /* look at the table of item head */
-    prev_location = blocksize;
-    ih = (struct item_head *)(buf + BLKH_SIZE);
-    nr = 0;
-    while (1) {
-	if (get_ih_location (ih) + get_ih_item_len (ih) != prev_location)
-	    break;
-
-	prev_location = get_ih_location (ih);
-	ih ++;
-	nr ++;
-    }
-    if (nr < 2)
-	return 0;
-    return nr;
-}
-#endif
-
-/* returns 1 if buf looks like an internal node, 0 otherwise */
-static int is_correct_internal (char * buf, int blocksize)
-{
-    struct block_head * blkh;
-    unsigned int nr;
-    int used_space;
-
-    blkh = (struct block_head *)buf;
-
-    if (!is_internal_block_head (buf))
-	return 0;
-    
-    nr = get_blkh_nr_items (blkh);
-    if (nr > (blocksize - BLKH_SIZE - DC_SIZE) / (KEY_SIZE + DC_SIZE))
-	/* for internal which is not root we might check min number of keys */
-	return 0;
-
-    used_space = BLKH_SIZE + KEY_SIZE * nr + DC_SIZE * (nr + 1);
-    if (used_space != blocksize - get_blkh_free_space (blkh))
-	return 0;
-
-    // one may imagine much more checks
-    return 1;
-}
-
-
-// make sure that bh contains formatted node of reiserfs tree of
-// 'level'-th level
-int is_tree_node (struct buffer_head * bh, int level)
-{
-    if (B_LEVEL (bh) != level)
-	return 0;
-    if (is_leaf_node (bh))
-	return is_a_leaf(bh->b_data, bh->b_size);
-
-    return is_correct_internal (bh->b_data, bh->b_size);
-}
-
-
-static int is_desc_block (char * buf, unsigned long buf_size)
-{
-    struct reiserfs_journal_desc *desc = (struct reiserfs_journal_desc *)buf;
-    if (!memcmp(buf + buf_size - 12, JOURNAL_DESC_MAGIC, 8) &&
-	le32_to_cpu (desc->j2_len) > 0)
-	return 1;
-    return 0;
-}
-
-
-int is_reiserfs_3_5_magic_string (struct reiserfs_super_block * rs)
-{
-    return (!strncmp (rs->s_v1.s_magic, REISERFS_3_5_SUPER_MAGIC_STRING, 
-		      strlen ( REISERFS_3_5_SUPER_MAGIC_STRING)));
-}
-
-
-int is_reiserfs_3_6_magic_string (struct reiserfs_super_block * rs)
-{
-    return (!strncmp (rs->s_v1.s_magic, REISERFS_3_6_SUPER_MAGIC_STRING, 
-		      strlen ( REISERFS_3_6_SUPER_MAGIC_STRING)));
-}
-
-
-int is_reiserfs_jr_magic_string (struct reiserfs_super_block * rs)
-{
-    return (!strncmp (rs->s_v1.s_magic, REISERFS_JR_SUPER_MAGIC_STRING, 
-		      strlen ( REISERFS_JR_SUPER_MAGIC_STRING)));
-}
-
-
-int is_any_reiserfs_magic_string (struct reiserfs_super_block * rs)
-{
-    if (is_reiserfs_3_5_magic_string (rs) ||
-	is_reiserfs_3_6_magic_string (rs) ||
-	is_reiserfs_jr_magic_string (rs))
-	return 1;
-    return 0;
-}
-
-
-int get_reiserfs_format (struct reiserfs_super_block * sb)
-{
-    /* after conversion to 3.6 format we change magic correctly, 
-       but do not change sb_format. When we create non-standard journal 
-       field format in sb get adjusted correctly. Thereby, for standard 
-       journal we should rely on magic and for non-standard - on format */
-    if (is_reiserfs_3_5_magic_string (sb) ||
-	(is_reiserfs_jr_magic_string (sb) && 
-	 get_sb_version (sb) == REISERFS_FORMAT_3_5))
-	return REISERFS_FORMAT_3_5;
-
-    if (is_reiserfs_3_6_magic_string (sb) ||
-	(is_reiserfs_jr_magic_string (sb) &&
-	 get_sb_version (sb) == REISERFS_FORMAT_3_6))
-	return REISERFS_FORMAT_3_6;
-
-    return REISERFS_FORMAT_UNKNOWN;
-}
-
-
-
-int reiserfs_super_block_size (struct reiserfs_super_block * sb)
-{
-    switch (get_reiserfs_format (sb)) {
-    case REISERFS_FORMAT_3_5:
-	return SB_SIZE_V1;
-    case REISERFS_FORMAT_3_6:
-	return SB_SIZE;
-    }
-    reiserfs_panic ("Unknown format found");
-    return 0;
-}
-
-/* this one had signature in different place of the super_block
-   structure */
-int is_prejournaled_reiserfs (struct reiserfs_super_block * rs)
-{
-    return (!strncmp((char*)rs + REISERFS_SUPER_MAGIC_STRING_OFFSET_NJ,
-		     REISERFS_3_5_SUPER_MAGIC_STRING,
-		     strlen(REISERFS_3_5_SUPER_MAGIC_STRING)));
-}
-
-int does_look_like_super_block (struct reiserfs_super_block * sb) {
-    if (!is_any_reiserfs_magic_string (sb))
-    	return 0;
-    
-    if (!is_blocksize_correct(get_sb_block_size (sb)))
-	return 0;
-	
-    return 1;
-}
-
-
-/* returns code of reiserfs metadata block (leaf, internal, super
-   block, journal descriptor), unformatted */
-int who_is_this (char * buf, int blocksize)
-{
-    int res;
-    
-    /* super block? */
-    if (does_look_like_super_block ((void *)buf))
-	return THE_SUPER;
-
-    if ((res = is_a_leaf(buf, blocksize)))
-	/* if block head and item head array seem matching (node level, free
-           space, item number, item locations and length), then it is THE_LEAF,
-	  otherwise, it is HAS_IH_ARRAY */
-	return res;
-
-    if (is_correct_internal (buf, blocksize))
-	return THE_INTERNAL;
-
-
-    /* journal descriptor block? */
-    if (is_desc_block (buf, blocksize))
-	return THE_JDESC;
-
-    /* contents of buf does not look like reiserfs metadata. Bitmaps
-       are possible here */
-    return THE_UNKNOWN;
-}
-
-
-char * which_block (int code)
-{
-    static char * leaf = "leaf";
-    static char * broken_leaf = "broken leaf";
-    static char * internal = "internal";
-    static char * other = "unknown";
-
-    switch (code) {
-    case THE_LEAF:
-	return leaf;
-    case HAS_IH_ARRAY:
-	return broken_leaf;
-    case THE_INTERNAL:
-	return internal;
-    }
-    return other;
-}
-
-
-/** */
-int block_of_journal (reiserfs_filsys_t * fs, unsigned long block) {
-    if (!is_reiserfs_jr_magic_string (fs->fs_ondisk_sb)) {
-	/* standard journal */
-	if (block >= get_journal_start_must (fs) &&
-	    block <= get_journal_start_must (fs) + get_jp_journal_size (sb_jp (fs->fs_ondisk_sb)))
-	    return 1;
-	return 0;
-    }
-    
-    if (get_sb_reserved_for_journal (fs->fs_ondisk_sb))
-	/* there is space reserved for the journal on the host device */
-	if (block >= get_journal_start_must (fs) && 
-	    block < get_journal_start_must (fs) + get_sb_reserved_for_journal (fs->fs_ondisk_sb))
-	    return 1;
-
-    return 0;
-}
-
-
-int block_of_bitmap (reiserfs_filsys_t * fs, unsigned long block)
-{
-    if (spread_bitmaps (fs)) {
-	if (!(block % (fs->fs_blocksize * 8)))
-	    /* bitmap block */
-	    return 1;
-	return (block == (REISERFS_DISK_OFFSET_IN_BYTES / fs->fs_blocksize + 1)) ;
-    } else {
-	/* bitmap in */
-	return (block > 2ul && block < 3ul + get_sb_bmap_nr(fs->fs_ondisk_sb)) ? 1 : 0;
-    }
-    return 0;
-}
-
-
-/* check whether 'block' can be pointed to by an indirect item */
-int not_data_block (reiserfs_filsys_t * fs, unsigned long block)
-{
-    if (block_of_bitmap (fs, block))
-	/* it is one of bitmap blocks */
-	return 1;
-
-    if (block_of_journal (fs, block))
-	/* block of journal area */
-	return 1;
-
-    if (block <= fs->fs_super_bh->b_blocknr)
-	/* either super block or a block from skipped area at the
-           beginning of filesystem */
-	return 1;
-
-    return 0;
-}
-
-
-/* check whether 'block' can be logged */
-int not_journalable (reiserfs_filsys_t * fs, unsigned long block)
-{   
-    /* we should not update SB with journal copy during fsck */
-    if (block < fs->fs_super_bh->b_blocknr)
-	return 1;
-
-    if (block_of_journal (fs, block))
-	return 1;
-
-    if (block >= get_sb_block_count (fs->fs_ondisk_sb))
-	return 1;
-
-    return 0;
-}
-
-// in reiserfs version 0 (undistributed bitmap)
-// FIXME: what if number of bitmaps is 15?
-unsigned int get_journal_old_start_must (reiserfs_filsys_t * fs) {
-    return (REISERFS_OLD_DISK_OFFSET_IN_BYTES / fs->fs_blocksize) + 1 + 
-	get_sb_bmap_nr (fs->fs_ondisk_sb);
-}
-
-unsigned int get_journal_new_start_must (reiserfs_filsys_t * fs)
-{
-    return (REISERFS_DISK_OFFSET_IN_BYTES / fs->fs_blocksize) + 2;
-}
-
-unsigned int get_journal_start_must(reiserfs_filsys_t * fs) {
-    if (is_old_sb_location(fs->fs_super_bh->b_blocknr, fs->fs_blocksize))
-    	return get_journal_old_start_must (fs);
-
-    return get_journal_new_start_must(fs);
-}
-
-__u32 get_bytes_number (struct item_head * ih, int blocksize) {
-    switch (get_type (&ih->ih_key)) {
-    case TYPE_DIRECT:
-	return get_ih_item_len (ih);
-    case TYPE_INDIRECT:
-	return I_UNFM_NUM(ih) * blocksize;// - get_ih_free_space (ih);
-    case TYPE_STAT_DATA:
-    case TYPE_DIRENTRY:
-	return 0;
-    }
-    reiserfs_warning (stderr, "get_bytes_number: called for wrong type of item %h", ih);
-    return 0;
-}
-
-
-int check_item_f (reiserfs_filsys_t * fs, struct item_head * ih, char * item);
-
-/* ih_key, ih_location and ih_item_len seem correct, check other fields */
-static int does_ih_look_correct (struct item_head * ih)
-{
-    int ih_key_format;
-    int key_key_format;
-
-    /* key format from item_head */
-    ih_key_format = get_ih_key_format (ih);
-    if (ih_key_format != KEY_FORMAT_1 && ih_key_format != KEY_FORMAT_2)
-	return 0;
-
-    /* key format calculated on key */
-    key_key_format = key_format (&ih->ih_key);
-    if (is_stat_data_ih (ih)) {
-	/* for stat data we can not find key format from a key itself, so look at
-           the item length */
-	if (get_ih_item_len (ih) == SD_SIZE)
-	    key_key_format = KEY_FORMAT_2;
-	else if (get_ih_item_len (ih) == SD_V1_SIZE)
-	    key_key_format = KEY_FORMAT_1;
-	else
-	    return 0;
-    }
-    if (key_key_format != ih_key_format)
-	return 0;
-
-    /* we do not check ih_format.fsck_need as fsck might change it. So,
-       debugreiserfs -p will have to dump it */
-    return 1;
-}
-
-/* check item length, ih_free_space for pure 3.5 format, unformatted node
-   pointers */
-static int is_bad_indirect (reiserfs_filsys_t * fs, struct item_head * ih, char * item,
-			    check_unfm_func_t check_unfm_func)
-{
-    unsigned int i;
-    __u32 * ind = (__u32 *)item;
-
-    if (get_ih_item_len (ih) % UNFM_P_SIZE)
-	return 1;
-
-    for (i = 0; i < I_UNFM_NUM (ih); i ++) {
-	if (!ind [i])
-	    continue;
-	if (check_unfm_func && check_unfm_func (fs, d32_get (ind, i)))
-	    return 1;
-    }
-
-    if (fs->fs_format == REISERFS_FORMAT_3_5) {
-	/* check ih_free_space for 3.5 format only */
-	if (get_ih_free_space (ih) > fs->fs_blocksize - 1)
-	    return 1;
-    }
-    
-    return 0;
-}
-
-
-static const struct {
-    hashf_t func;
-    char * name;
-} hashes[] = {{0, "not set"},
-	      {keyed_hash, "\"tea\""},
-	      {yura_hash, "\"rupasov\""},
-	      {r5_hash, "\"r5\""}};        
-
-#define HASH_AMOUNT (sizeof (hashes) / sizeof (hashes [0]))
-
-
-
-int known_hashes (void)
-{
-    return HASH_AMOUNT;
-}
-
-
-#define good_name(hashfn,name,namelen,deh_offset) \
-(hash_value (hashfn, name, namelen) == GET_HASH_VALUE (deh_offset))
-
-
-/* this also sets hash function */
-int is_properly_hashed (reiserfs_filsys_t * fs,
-			char * name, int namelen, __u32 offset)
-{
-    unsigned int i;
-
-    if (namelen == 1 && name[0] == '.') {
-	if (offset == DOT_OFFSET)
-	    return 1;
-	return 0;
-    }
-
-    if (namelen == 2 && name[0] == '.' && name[1] == '.') {
-	if (offset == DOT_DOT_OFFSET)
-	    return 1;
-	return 0;
-    }
-
-    if (hash_func_is_unknown (fs)) {
-	/* try to find what hash function the name is sorted with */
-	for (i = 1; i < HASH_AMOUNT; i ++) {
-	    if (good_name (hashes [i].func, name, namelen, offset)) {
-		if (!hash_func_is_unknown (fs)) {
-		    /* two or more hash functions give the same value for this
-                       name */
-		    fprintf (stderr, "Detecting hash code: could not detect hash with name \"%.*s\"\n",
-			     namelen, name);
-		    reiserfs_hash (fs) = 0;
-		    return 1;
-		}
-
-		/* set hash function */
- 		reiserfs_hash(fs) = hashes [i].func;
- 	    }
- 	}
-
-        if (hash_func_is_unknown (fs)) {
-            return 0;
-        }
-    }
-
-    if (good_name (reiserfs_hash(fs), name, namelen, offset))
-	return 1;
-
-    return 0;
-}
-
-
-int find_hash_in_use (char * name, int namelen, __u32 offset, unsigned int code_to_try_first)
-{
-    unsigned int i;
-
-    if (!namelen || !name[0])
-	return UNSET_HASH;
-
-    if (code_to_try_first) {
-	if (good_name (hashes [code_to_try_first].func, name, namelen, offset))
-	    return code_to_try_first;
-    }
-    
-    for (i = 1; i < HASH_AMOUNT; i ++) {
-	if (i == code_to_try_first)
-	    continue;
-	if (good_name (hashes [i].func, name, namelen, offset))
-	    return i;
-    }
-
-    /* not matching hash found */
-    return UNSET_HASH;
-}
-
-
-char * code2name(unsigned int code) {
-    if (code >= HASH_AMOUNT || code < 0)
-        return 0;
-    return hashes [code].name;
-}
-
-
-int func2code (hashf_t func)
-{
-    unsigned int i;
-    
-    for (i = 0; i < HASH_AMOUNT; i ++)
-	if (func == hashes [i].func)
-	    return i;
-
-    reiserfs_panic ("func2code: no hashes matches this function\n");
-    return 0;
-}
-
-
-hashf_t code2func(unsigned int code) {
-    if (code >= HASH_AMOUNT) {
-	reiserfs_warning (stderr, "code2func: wrong hash code %d.\n"
-			  "Using default %s hash function\n", code,
-			  code2name (DEFAULT_HASH));
-	code = DEFAULT_HASH;
-    }
-    return hashes [code].func;
-}
-
-
-hashf_t name2func (char * hash) {
-    unsigned int i;
- 
-    for (i = 0; i < HASH_AMOUNT; i ++)
-	if (!strcmp (hash, hashes [i].name))
-	    return hashes [i].func;
-    return 0;
-}
-
-
-int dir_entry_bad_location (struct reiserfs_de_head * deh, struct item_head * ih, int first)
-{
-    if (get_deh_location (deh) < DEH_SIZE * get_ih_entry_count (ih))
-	return 1;
-    
-    if (get_deh_location (deh) >= get_ih_item_len (ih))
-	return 1;
-
-    if (!first && get_deh_location (deh) >= get_deh_location (deh - 1))
-	return 1;
-
-    return 0;
-}
-
-
-/* the only corruption which is not considered fatal - is hash mismatching. If
-   bad_dir is set - directory item having such names is considered bad */
-static int is_bad_directory (reiserfs_filsys_t * fs, struct item_head * ih, char * item,
-			     int bad_dir)
-{
-    int i;
-    int namelen;
-    struct reiserfs_de_head * deh = (struct reiserfs_de_head *)item;
-    __u32 prev_offset = 0;
-    __u16 prev_location = get_ih_item_len (ih);
-    
-    for (i = 0; i < get_ih_entry_count (ih); i ++, deh ++) {
-	if (get_deh_location (deh) >= prev_location)
-	    return 1;
-	prev_location = get_deh_location (deh);
-	    
-	namelen = name_in_entry_length (ih, deh, i);
-	if (namelen > (int)REISERFS_MAX_NAME_LEN(fs->fs_blocksize))
-	    return 1;
-	
-	if (get_deh_offset (deh) <= prev_offset)
-	    return 1;
-	prev_offset = get_deh_offset (deh);
-	
-	/* check hash value */
-	if (!is_properly_hashed (fs, item + prev_location, namelen, prev_offset)) {
-	    if (bad_dir)
-		/* make is_bad_leaf to not insert whole leaf. Node will be
-		   marked not-insertable and put into tree item by item in
-		   pass 2 */
-		return 1;
-	}
-    }
-
-    return 0;
-}
-
-
-/* used by debugreisrefs -p only yet */
-int is_it_bad_item (reiserfs_filsys_t * fs, struct item_head * ih, char * item,
-		    check_unfm_func_t check_unfm, int bad_dir)
-{
-    int retval;
-
-/*
-    if (!does_key_look_correct (fs, &ih->ih_key))
-	return 1;
-
-    if (!does_ih_look_correct (ih))
-	return 1;
-*/
-    if (!does_ih_look_correct (ih))
-	return 1;
-
-    
-    if (is_stat_data_ih (ih) || is_direct_ih (ih))
-	return 0;
-
-    if (is_direntry_ih (ih)) {
-	retval =  is_bad_directory (fs, ih, item, bad_dir);
-	/*
-	if (retval)
-	reiserfs_warning (stderr, "is_bad_directory %H\n", ih);*/
-	return retval;
-    }
-    if (is_indirect_ih (ih)) {
-	retval = is_bad_indirect (fs, ih, item, check_unfm);
-	/*
-	if (retval)
-	reiserfs_warning (stderr, "is_bad_indirect %H\n", ih);*/
-	return retval;
-    }
-
-    return 1;
-}
-
-
-/* prepare new or old stat data for the new directory */
-void make_dir_stat_data (int blocksize, int key_format, 
-			 __u32 dirid, __u32 objectid, 
-			 struct item_head * ih, void * sd)
-{
-    memset (ih, 0, IH_SIZE);
-    set_key_dirid (&ih->ih_key, dirid);
-    set_key_objectid (&ih->ih_key, objectid);
-    set_key_offset_v1 (&ih->ih_key, SD_OFFSET);
-    set_key_uniqueness (&ih->ih_key, 0);
-
-    set_ih_key_format (ih, key_format);
-    set_ih_free_space (ih, MAX_US_INT);
-
-
-    if (key_format == KEY_FORMAT_2) {
-        struct stat_data *sd_v2 = (struct stat_data *)sd;
-
-	set_ih_item_len (ih, SD_SIZE);
-        set_sd_v2_mode (sd_v2, S_IFDIR + 0755);
-        set_sd_v2_nlink (sd_v2, 2);
-        set_sd_v2_uid (sd_v2, 0);
-        set_sd_v2_gid (sd_v2, 0);
-        set_sd_v2_size (sd_v2, EMPTY_DIR_SIZE);
-        set_sd_v2_atime (sd_v2, time(NULL));
-        sd_v2->sd_ctime = sd_v2->sd_mtime = sd_v2->sd_atime; /* all le */
-        set_sd_v2_rdev (sd_v2, 0);
-        set_sd_v2_blocks (sd_v2, dir_size2st_blocks (EMPTY_DIR_SIZE));
-    }else{
-        struct stat_data_v1 *sd_v1 = (struct stat_data_v1 *)sd;
-
-	set_ih_item_len (ih, SD_V1_SIZE);
-        set_sd_v1_mode(sd_v1, S_IFDIR + 0755);
-        set_sd_v1_nlink(sd_v1, 2);
-        set_sd_v1_uid (sd_v1, 0);
-        set_sd_v1_gid (sd_v1, 0);
-        set_sd_v1_size(sd_v1, EMPTY_DIR_SIZE_V1);
-        set_sd_v1_atime(sd_v1, time(NULL));
-        sd_v1->sd_ctime = sd_v1->sd_mtime = sd_v1->sd_atime; /* all le */
-        set_sd_v1_blocks(sd_v1, dir_size2st_blocks(EMPTY_DIR_SIZE_V1));
-        set_sd_v1_first_direct_byte(sd_v1, NO_BYTES_IN_DIRECT_ITEM);
-    }
-}
-
-
-static void _empty_dir_item (int format, char * body, __u32 dirid, __u32 objid,
-			     __u32 par_dirid, __u32 par_objid)
-{
-    struct reiserfs_de_head * deh;
-    __u16 state;
-
-    memset (body, 0, (format == KEY_FORMAT_2 ? EMPTY_DIR_SIZE : EMPTY_DIR_SIZE_V1));
-    deh = (struct reiserfs_de_head *)body;
-    
-    /* direntry header of "." */
-    set_deh_offset (deh, DOT_OFFSET);
-    set_deh_dirid (deh, dirid);
-    set_deh_objectid (deh, objid);
-    state = (1 << DEH_Visible2);
-    set_deh_state (deh, state);
-
-    /* direntry header of ".." */
-    set_deh_offset (deh + 1, DOT_DOT_OFFSET);
-    /* key of ".." for the root directory */
-    set_deh_dirid (deh + 1, par_dirid);
-    set_deh_objectid (deh + 1, par_objid);
-    set_deh_state (deh + 1, state);
-
-    if (format == KEY_FORMAT_2) {
-	set_deh_location (deh, EMPTY_DIR_SIZE - ROUND_UP (strlen (".")));
-	set_deh_location (deh + 1, get_deh_location (deh) - ROUND_UP (strlen ("..")));
-    } else {
-	set_deh_location (deh, EMPTY_DIR_SIZE_V1 - strlen ("."));
-	set_deh_location (deh + 1, get_deh_location (deh) - strlen (".."));
-    }
-
-    /* copy ".." and "." */
-    memcpy (body + get_deh_location (deh), ".", 1);
-    memcpy (body + get_deh_location (deh + 1), "..", 2);
-    
-}
-
-
-void make_empty_dir_item_v1 (char * body, __u32 dirid, __u32 objid,
-			     __u32 par_dirid, __u32 par_objid)
-{
-    _empty_dir_item (KEY_FORMAT_1, body, dirid, objid, par_dirid, par_objid);
-}
-
-
-void make_empty_dir_item (char * body, __u32 dirid, __u32 objid,
-			  __u32 par_dirid, __u32 par_objid)
-{
-    _empty_dir_item (KEY_FORMAT_2, body, dirid, objid, par_dirid, par_objid);
-}
-
-
-
-/* for every item call common action and an action corresponding to
-   item type */
-void for_every_item (struct buffer_head * bh, item_head_action_t action,
-		     item_action_t * actions)
-{
-    int i;
-    struct item_head * ih;
-    item_action_t iaction;
-
-    ih = B_N_PITEM_HEAD (bh, 0);
-    for (i = 0; i < get_blkh_nr_items (B_BLK_HEAD (bh)); i ++, ih ++) {
-	if (action)
-	    action (ih);
-
-	iaction = actions[get_type (&ih->ih_key)];
-	if (iaction)
-	    iaction (bh, ih);
-    }
-}
-
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-# define get_key_offset_v2(key)     (__u64)((key->u.k2_offset_v2.k_offset))
-# define set_key_offset_v2(key,val) (void)(key->u.k2_offset_v2.k_offset = (val))
-# define get_key_type_v2(key)       (__u16)((key->u.k2_offset_v2.k_type))
-# define set_key_type_v2(key,val)   (void)(key->u.k2_offset_v2.k_type = (val))
-#elif __BYTE_ORDER == __BIG_ENDIAN
-typedef union {
-    struct offset_v2 offset_v2;
-    __u64 linear;
-} __attribute__ ((__packed__)) offset_v2_esafe_overlay;
-
-static inline __u64 get_key_offset_v2 (const struct key *key)
-{
-    offset_v2_esafe_overlay tmp =
-                        *(offset_v2_esafe_overlay *) (&(key->u.k2_offset_v2));
-    tmp.linear = le64_to_cpu( tmp.linear );
-    return tmp.offset_v2.k_offset;
-}
-
-static inline __u32 get_key_type_v2 (const struct key *key)
-{
-    offset_v2_esafe_overlay tmp =
-                        *(offset_v2_esafe_overlay *) (&(key->u.k2_offset_v2));
-    tmp.linear = le64_to_cpu( tmp.linear );
-    return tmp.offset_v2.k_type;
-}
-
-static inline void set_key_offset_v2 (struct key *key, __u64 offset)
-{
-    offset_v2_esafe_overlay *tmp =
-                        (offset_v2_esafe_overlay *)(&(key->u.k2_offset_v2));
-    tmp->linear = le64_to_cpu(tmp->linear);
-    tmp->offset_v2.k_offset = offset;
-    tmp->linear = cpu_to_le64(tmp->linear);
-}
-
-static inline void set_key_type_v2 (struct key *key, __u32 type)
-{
-    offset_v2_esafe_overlay *tmp =
-                        (offset_v2_esafe_overlay *)(&(key->u.k2_offset_v2));
-    if (type > 15)
-        reiserfs_panic ("set_key_type_v2: type is too big %d", type);
-
-    tmp->linear = le64_to_cpu(tmp->linear);
-    tmp->offset_v2.k_type = type;
-    tmp->linear = cpu_to_le64(tmp->linear);
-}
-#else
-# error "nuxi/pdp-endian archs are not supported"
-#endif
-
-static inline int is_key_format_1 (int type) {
-    return ( (type == 0 || type == 15) ? 1 : 0);
-}
-
-/* old keys (on i386) have k_offset_v2.k_type == 15 (direct and
-   indirect) or == 0 (dir items and stat data) */
-
-/* */
-int key_format (const struct key * key)
-{
-    int type;
-
-    type = get_key_type_v2 (key);
-
-    if (is_key_format_1 (type))
-	return KEY_FORMAT_1;
-
-    return KEY_FORMAT_2;
-}
-
-
-unsigned long long get_offset (const struct key * key) {
-    if (key_format (key) == KEY_FORMAT_1)
-	return get_key_offset_v1 (key);
-
-    return get_key_offset_v2 (key);
-}
-
-
-int uniqueness2type (__u32 uniqueness)
-{
-    switch (uniqueness) {
-    case V1_SD_UNIQUENESS: return TYPE_STAT_DATA;
-    case V1_INDIRECT_UNIQUENESS: return TYPE_INDIRECT;
-    case V1_DIRECT_UNIQUENESS: return TYPE_DIRECT;
-    case V1_DIRENTRY_UNIQUENESS: return TYPE_DIRENTRY;
-    }
-    return TYPE_UNKNOWN;
-}
-
-
-__u32 type2uniqueness (int type)
-{
-    switch (type) {
-    case TYPE_STAT_DATA: return V1_SD_UNIQUENESS;
-    case TYPE_INDIRECT: return V1_INDIRECT_UNIQUENESS;
-    case TYPE_DIRECT: return V1_DIRECT_UNIQUENESS;
-    case TYPE_DIRENTRY: return V1_DIRENTRY_UNIQUENESS;
-    } 
-    return V1_UNKNOWN_UNIQUENESS;
-}
-
-
-int get_type (const struct key * key)
-{
-    int type_v2 = get_key_type_v2 (key);
-
-    if (is_key_format_1 (type_v2))
-	return uniqueness2type (get_key_uniqueness (key));
-
-    return type_v2;
-}
-
-
-char * key_of_what (const struct key * key)
-{
-    switch (get_type (key)) {
-    case TYPE_STAT_DATA: return "SD";
-    case TYPE_INDIRECT: return "IND";
-    case TYPE_DIRECT: return "DRCT";
-    case TYPE_DIRENTRY: return "DIR";
-    default: return "???";
-    }
-}
-
-
-int type_unknown (struct key * key)
-{
-    int type = get_type (key);
-    
-    switch (type) {
-    case TYPE_STAT_DATA:
-    case TYPE_INDIRECT:
-    case TYPE_DIRECT:
-    case TYPE_DIRENTRY:
-	return 0;
-    default:
-	break;
-    }
-    return 1;
-}
-
-
-// this sets key format as well as type of item key belongs to
-//
-void set_type (int format, struct key * key, int type)
-{
-    if (format == KEY_FORMAT_1)
-	set_key_uniqueness (key, type2uniqueness (type));
-    else
-	set_key_type_v2 (key, type);
-}
-
-
-// 
-void set_offset (int format, struct key * key, loff_t offset)
-{
-    if (format == KEY_FORMAT_1)
-	set_key_offset_v1 (key, offset);
-    else
-	set_key_offset_v2 (key, offset);
-	
-}
-
-
-void set_type_and_offset (int format, struct key * key, loff_t offset, int type)
-{
-    set_type (format, key, type);
-    set_offset (format, key, offset);
-}
-
-
-/* length of the directory entry in directory item. This define calculates
-   length of i-th directory entry using directory entry locations from dir
-   entry head. When it calculates length of 0-th directory entry, it uses
-   length of whole item in place of entry location of the non-existent
-   following entry in the calculation.  See picture above.*/
-
-
-// NOTE: this is not name length. This is length of whole entry
-int entry_length (struct item_head * ih, struct reiserfs_de_head * deh, int pos_in_item)
-{
-    if (pos_in_item)
-	return (get_deh_location (deh - 1) - get_deh_location (deh));
-    return (get_ih_item_len (ih) - get_deh_location (deh));
-}
-
-
-char * name_in_entry (struct reiserfs_de_head * deh, int pos_in_item)
-{
-    return ((char *)(deh - pos_in_item) + get_deh_location(deh));
-}
-
-int name_in_entry_length (struct item_head * ih,
-		 struct reiserfs_de_head * deh, int pos_in_item)
-{
-    int len, i;
-    char * name;
-
-    len = entry_length (ih, deh, pos_in_item);
-    name = name_in_entry (deh, pos_in_item);
-
-    // name might be padded with 0s
-    i = 0;
-    while (name[i] && i < len)
-	i++;
-
-    return i;
-}
-
-int name_length (char * name, int key_format)
-{
-    if (key_format == KEY_FORMAT_2)
-    	return ROUND_UP (strlen(name));
-    else if (key_format == KEY_FORMAT_1)
-    	return strlen(name);
-
-    return -1;
-}
-
-/* key format is stored in 12 bits starting from 0-th of item_head's ih2_format*/
-__u16 get_ih_key_format (const struct item_head * ih)
-{
-    get_bit_field_XX (16, &ih->ih_format, 0, 12);
-}
-
-
-__u16 get_ih_flags (const struct item_head * ih)
-{
-    get_bit_field_XX (16, &ih->ih_format, 12, 4);
-}
-
-
-void set_ih_key_format (struct item_head * ih, __u16 val)
-{
-    set_bit_field_XX (16, &ih->ih_format, val, 0, 12);
-}
-
-
-void set_ih_flags (struct item_head * ih, __u16 val)
-{
-    set_bit_field_XX (16, &ih->ih_format, val, 12, 4);
-}
-
-
-
-/* access to fields of stat data (both v1 and v2) */
-
-void get_set_sd_field (int field, struct item_head * ih, void * sd,
-		       void * value, int set)
-{
-    if (get_ih_key_format (ih) == KEY_FORMAT_1) {
-	struct stat_data_v1 * sd_v1 = sd;
-
-	switch (field) {
-	case GET_SD_MODE:
-	    if (set)
-		sd_v1->sd_mode = cpu_to_le16 (*(__u16 *)value);
-	    else
-		*(__u16 *)value = le16_to_cpu (sd_v1->sd_mode);
-	    break;
-
-	case GET_SD_SIZE:
-	    /* value must point to 64 bit int */
-	    if (set)
-		sd_v1->sd_size = cpu_to_le32 (*(__u64 *)value);
-	    else
-		*(__u64 *)value = le32_to_cpu (sd_v1->sd_size);
-	    break;
-
-	case GET_SD_BLOCKS:
-	    if (set)
-		sd_v1->u.sd_blocks = cpu_to_le32 (*(__u32 *)value);
-	    else
-		*(__u32 *)value = le32_to_cpu (sd_v1->u.sd_blocks);
-	    break;
-
-	case GET_SD_NLINK:
-	    /* value must point to 32 bit int */
-	    if (set)
-		sd_v1->sd_nlink = cpu_to_le16 (*(__u32 *)value);
-	    else
-		*(__u32 *)value = le16_to_cpu (sd_v1->sd_nlink);
-	    break;
-
-	case GET_SD_FIRST_DIRECT_BYTE:
-	    if (set)
-		sd_v1->sd_first_direct_byte = cpu_to_le32 (*(__u32 *)value);
-	    else
-		*(__u32 *)value = le32_to_cpu (sd_v1->sd_first_direct_byte);
-	    break;
-	    
-	default:
-	    reiserfs_panic ("get_set_sd_field: unknown field of old stat data");
-	}
-    } else {
-	struct stat_data * sd_v2 = sd;
-
-	switch (field) {
-	case GET_SD_MODE:
-	    if (set)
-		sd_v2->sd_mode = cpu_to_le16 (*(__u16 *)value);
-	    else
-		*(__u16 *)value = le16_to_cpu (sd_v2->sd_mode);
-	    break;
-
-	case GET_SD_SIZE:
-	    if (set)
-		sd_v2->sd_size = cpu_to_le64 (*(__u64 *)value);
-	    else
-		*(__u64 *)value = le64_to_cpu (sd_v2->sd_size);
-	    break;
-
-	case GET_SD_BLOCKS:
-	    if (set)
-		sd_v2->sd_blocks = cpu_to_le32 (*(__u32 *)value);
-	    else
-		*(__u32 *)value = le32_to_cpu (sd_v2->sd_blocks);
-	    break;
-
-	case GET_SD_NLINK:
-	    if (set)
-		sd_v2->sd_nlink = cpu_to_le32 (*(__u32 *)value);
-	    else
-		*(__u32 *)value = le32_to_cpu (sd_v2->sd_nlink);
-	    break;
-
-	case GET_SD_FIRST_DIRECT_BYTE:
-	default:
-	    reiserfs_panic ("get_set_sd_field: unknown field of new stat data");
-	}
-    }
-}
-
-int comp_ids (const void * p1, const void * p2)
-{
-    __u32 id1 = le32_to_cpu(*(__u32 *)p1) ;
-    __u32 id2 = le32_to_cpu(*(__u32 *)p2) ;
-
-    if (id1 < id2)
-        return -1;
-    if (id1 > id2)
-        return 1 ;
-    return 0 ;
-}
-
-/* functions to manipulate with super block's objectid map */
-
-int is_objectid_used (reiserfs_filsys_t * fs, __u32 objectid)
-{
-    __u32 * objectid_map;
-    __u32 count = get_sb_oid_cursize(fs->fs_ondisk_sb);
-    int ret;
-    __u32 pos;
-    __u32 le_id = cpu_to_le32(objectid);
-
-
-    objectid_map = (__u32 *)((char *)fs->fs_ondisk_sb + reiserfs_super_block_size (fs->fs_ondisk_sb));
-    
-    ret = reiserfs_bin_search(&le_id, objectid_map, count, sizeof(__u32), &pos, comp_ids);
-
-    /* if the position returned is odd, the oid is in use */
-    if (ret == POSITION_NOT_FOUND)
-	return (pos & 1) ;
-
-    /* if the position returned is even, the oid is in use */
-    return !(pos & 1) ;
-}
-
-
-void mark_objectid_used (reiserfs_filsys_t * fs, __u32 objectid)
-{
-    int i;
-    __u32 * objectid_map;
-    int cursize;
-
-
-    if (is_objectid_used (fs, objectid)) {
-	return;
-    }
-
-    objectid_map = (__u32 *)((char *)fs->fs_ondisk_sb + reiserfs_super_block_size (fs->fs_ondisk_sb));
-    cursize = get_sb_oid_cursize (fs->fs_ondisk_sb);
-
-    for (i = 0; i < cursize; i += 2) {
-	if (objectid >= le32_to_cpu (objectid_map [i]) &&
-	    objectid < le32_to_cpu (objectid_map [i + 1]))
-	    /* it is used */
-	    return;
-	
-	if (objectid + 1 == le32_to_cpu (objectid_map[i])) {
-	    /* size of objectid map does not change */
-	    objectid_map[i] = cpu_to_le32 (objectid);
-	    return;
-	}
-	
-	if (objectid == le32_to_cpu (objectid_map[i + 1])) {
-	    /* size of objectid map is decreased */
-	    objectid_map [i + 1] = cpu_to_le32 (le32_to_cpu (objectid_map [i + 1]) + 1);
-
-	    if (i + 2 < cursize) {
-		if (objectid_map[i + 1] == objectid_map[i + 2]) {
-		    memmove (objectid_map + i + 1, objectid_map + i + 1 + 2, 
-			     (cursize - (i + 2 + 2 - 1)) * sizeof (__u32));
-		    set_sb_oid_cursize (fs->fs_ondisk_sb, cursize - 2);
-		}
-	    }
-	    return;
-	}
-	
-	if (objectid < le32_to_cpu (objectid_map[i])) {
-	    /* size of objectid map must be increased */
-	    if (cursize == get_sb_oid_maxsize (fs->fs_ondisk_sb)) {
-		/* here all objectids between objectid and objectid_map[i] get
-                   used */
-		objectid_map[i] = cpu_to_le32 (objectid);
-		return;
-	    } else {
-		memmove (objectid_map + i + 2, objectid_map + i, (cursize - i) * sizeof (__u32));
-		set_sb_oid_cursize (fs->fs_ondisk_sb, cursize + 2);
-	    }
-	    
-	    objectid_map[i] = cpu_to_le32 (objectid);
-	    objectid_map[i+1] = cpu_to_le32 (objectid + 1);
-	    return;
-	}
-	
-    }
-    
-    /* append to current objectid map, if we have space */
-    if (i < get_sb_oid_maxsize (fs->fs_ondisk_sb)) {
-	objectid_map[i] = cpu_to_le32 (objectid);
-	objectid_map[i + 1] = cpu_to_le32 (objectid + 1);
-	set_sb_oid_cursize (fs->fs_ondisk_sb, cursize + 2);
-    } else if (i == get_sb_oid_maxsize (fs->fs_ondisk_sb)) {
-	objectid_map[i - 1] = cpu_to_le32 (objectid + 1);
-    } else
-	die ("mark_objectid_as_used: objectid map corrupted");
-    
-    return;
-}
-
-
-int is_blocksize_correct (unsigned int blocksize)
-{
-    return ((((blocksize & -blocksize) == blocksize) 
-	&& (blocksize >= 512) && (blocksize <= 8192)));
-}
-
diff --git a/reiserfscore/prints.c b/reiserfscore/prints.c
deleted file mode 100644
index c2522e4..0000000
--- a/reiserfscore/prints.c
+++ /dev/null
@@ -1,1041 +0,0 @@
-/*
- * Copyright 1996-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#define _GNU_SOURCE
-
-#include "includes.h"
-#include <stdarg.h>
-#include <limits.h>
-#include <printf.h>
-
-#if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)
-#  include <uuid/uuid.h>
-#endif
-
-#define PA_KEY		(PA_LAST)
-#define PA_BUFFER_HEAD	(PA_LAST + 1)
-#define PA_ITEM_HEAD	(PA_LAST + 2)
-#define PA_DISK_CHILD	(PA_LAST + 3)
-
-
-static int _arginfo_b (const struct printf_info *info, size_t n, int *argtypes) {
-    if (n > 0)
-	argtypes[0] = PA_BUFFER_HEAD | PA_FLAG_PTR;
-    return 1;
-}
-
-static int _arginfo_K (const struct printf_info *info, size_t n, int *argtypes) {
-    if (n > 0)
-	argtypes[0] = PA_KEY | PA_FLAG_PTR;
-    return 1;
-}
-
-static int _arginfo_H (const struct printf_info *info, size_t n, int *argtypes) {
-    if (n > 0)
-	argtypes[0] = PA_ITEM_HEAD | PA_FLAG_PTR;
-    return 1;
-}
-
-static int _arginfo_y (const struct printf_info *info, size_t n, int *argtypes) {
-    if (n > 0)
-	argtypes[0] = PA_DISK_CHILD | PA_FLAG_PTR;
-    return 1;
-}
-
-static int _arginfo_M (const struct printf_info *info, size_t n, int *argtypes) {
-    if (n > 0)
-	argtypes[0] = PA_INT | PA_FLAG_SHORT | PA_FLAG_PTR;
-    return 1;
-}
-
-static int _arginfo_U (const struct printf_info *info, size_t n, int *argtypes) {
-    if (n > 0)
-	argtypes[0] = (PA_CHAR|PA_FLAG_PTR);
-    return 1;
-}
-
-#define FPRINTF \
-    if (len == -1) {\
-	return -1;\
-    }\
-    len = fprintf (stream, "%*s",\
-		   info->left ? -info->width : info->width, buffer);\
-    free (buffer);\
-    return len;\
-
-
-/* %b */
-static int print_block_head (FILE * stream,
-			     const struct printf_info *info,
-			     const void *const *args)
-{
-    const struct buffer_head * bh;
-    char * buffer;
-    int len;
-
-    bh = *((const struct buffer_head **)(args[0]));
-    len = asprintf (&buffer, "level=%d, nr_items=%d, free_space=%d rdkey",
-		    B_LEVEL (bh), B_NR_ITEMS (bh), B_FREE_SPACE (bh));
-    FPRINTF;
-}
-
-
-/* %K */
-static int print_short_key (FILE * stream,
-			    const struct printf_info *info,
-			    const void *const *args)
-{
-    const struct key * key;
-    char * buffer;
-    int len;
-
-    key = *((const struct key **)(args[0]));
-    len = asprintf (&buffer, "[%u %u]", get_key_dirid (key),
-		    get_key_objectid (key));
-    FPRINTF;
-}
-
-
-/* %k */
-static int print_key (FILE * stream,
-		      const struct printf_info *info,
-		      const void *const *args)
-{
-    const struct key * key;
-    char * buffer;
-    int len;
-
-    key = *((const struct key **)(args[0]));
-    len = asprintf (&buffer, "[%u %u 0x%Lx %s (%d)]",  
-		    get_key_dirid (key), get_key_objectid (key),
-		    (unsigned long long)get_offset (key), key_of_what (key), get_type (key));
-    FPRINTF;
-}
-
-
-/* %H */
-static int print_item_head (FILE * stream,
-			    const struct printf_info *info,
-			    const void *const *args)
-{
-    const struct item_head * ih;
-    char * buffer;
-    int len;
-
-    ih = *((const struct item_head **)(args[0]));
-    len = asprintf (&buffer, "%u %u 0x%Lx %s (%d), "
-		    "len %u, location %u entry count %u, fsck need %u, format %s",
-		    get_key_dirid (&ih->ih_key), get_key_objectid (&ih->ih_key),
-		    (unsigned long long)get_offset (&ih->ih_key), key_of_what (&ih->ih_key),
-		    get_type (&ih->ih_key), get_ih_item_len (ih), get_ih_location (ih),
-		    get_ih_entry_count (ih), get_ih_flags (ih),
-		    get_ih_key_format (ih) == KEY_FORMAT_2 ? "new" : 
-		    ((get_ih_key_format (ih) == KEY_FORMAT_1) ? "old" : "BAD"));
-    FPRINTF;
-}
-
-
-static int print_disk_child (FILE * stream,
-			     const struct printf_info *info,
-			     const void *const *args)
-{
-    const struct disk_child * dc;
-    char * buffer;
-    int len;
-
-    dc = *((const struct disk_child **)(args[0]));
-    len = asprintf (&buffer, "[dc_number=%u, dc_size=%u]", get_dc_child_blocknr (dc),
-		    get_dc_child_size (dc));
-    FPRINTF;
-}
-
-
-char ftypelet (mode_t mode)
-{
-    if (S_ISBLK (mode))
-	return 'b';
-    if (S_ISCHR (mode))
-	return 'c';
-    if (S_ISDIR (mode))
-	return 'd';
-    if (S_ISREG (mode))
-	return '-';
-    if (S_ISFIFO (mode))
-	return 'p';
-    if (S_ISLNK (mode))
-	return 'l';
-    if (S_ISSOCK (mode))
-	return 's';
-    return '?';
-}
-
-
-static int rwx (FILE * stream, mode_t mode)
-{
-    return fprintf (stream, "%c%c%c",
-		    (mode & S_IRUSR) ? 'r' : '-',
-		    (mode & S_IWUSR) ? 'w' : '-',
-		    (mode & S_IXUSR) ? 'x' : '-');
-}
-
-
-/* %M */
-static int print_sd_mode (FILE * stream,
-			  const struct printf_info *info,
-			  const void *const *args)
-{
-    int len = 0;
-    __u16 mode;
-
-    mode = *(mode_t *)args[0];
-    len = fprintf (stream, "%c", ftypelet (mode));
-    len += rwx (stream, (mode & 0700) << 0);
-    len += rwx (stream, (mode & 0070) << 3);
-    len += rwx (stream, (mode & 0007) << 6);
-    return len;
-}
-
-/* %U */
-static int print_sd_uuid (FILE * stream,
-			  const struct printf_info *info,
-			  const void *const *args)
-{
-#if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)
-    const unsigned char *uuid = *((const unsigned char **)(args[0]));
-    char buf[37];
-
-    buf[36] = '\0';
-    uuid_unparse(uuid, buf);
-    return fprintf(stream, "%s", buf);
-#else
-    return fprintf(stream, "<no libuuid installed>");
-#endif
-}
-
-void reiserfs_warning (FILE * fp, const char * fmt, ...) 
-{
-    static int registered = 0;
-    va_list args;
-
-    if (!registered) {
-	registered = 1;
-	
-	register_printf_function ('K', print_short_key, _arginfo_K);
-	register_printf_function ('k', print_key, _arginfo_K);
-	register_printf_function ('H', print_item_head, _arginfo_H);
-	register_printf_function ('b', print_block_head, _arginfo_b);
-	register_printf_function ('y', print_disk_child, _arginfo_y);
-	register_printf_function ('M', print_sd_mode, _arginfo_M);
-	register_printf_function ('U', print_sd_uuid, _arginfo_U);
-    }
-
-    va_start (args, fmt);
-    vfprintf (fp, fmt, args);
-    va_end (args);
-}
-
-
-static char * vi_type (struct virtual_item * vi)
-{
-    static char *types[]={"directory", "direct", "indirect", "stat data"};
-
-    if (vi->vi_type & VI_TYPE_STAT_DATA)
-	return types[3];
-    if (vi->vi_type & VI_TYPE_INDIRECT)
-	return types[2];
-    if (vi->vi_type & VI_TYPE_DIRECT)
-	return types[1];
-    if (vi->vi_type & VI_TYPE_DIRECTORY)
-	return types[0];
-
-    reiserfs_panic ("vi_type: 6000: unknown type (0x%x)", vi->vi_type);
-    return NULL;
-}
-
-
-void print_virtual_node (struct virtual_node * vn)
-{
-    int i, j;
-  
-    printf ("VIRTUAL NODE CONTAINS %d items, has size %d,%s,%s, ITEM_POS=%d POS_IN_ITEM=%d MODE=\'%c\'\n",
-	    vn->vn_nr_item, vn->vn_size,
-	    (vn->vn_vi[0].vi_type & VI_TYPE_LEFT_MERGEABLE )? "left mergeable" : "", 
-	    (vn->vn_vi[vn->vn_nr_item - 1].vi_type & VI_TYPE_RIGHT_MERGEABLE) ? "right mergeable" : "",
-	    vn->vn_affected_item_num, vn->vn_pos_in_item, vn->vn_mode);
-
-
-    for (i = 0; i < vn->vn_nr_item; i ++) {
-	printf ("%s %d %d", vi_type (&vn->vn_vi[i]), i, vn->vn_vi[i].vi_item_len);
-	if (vn->vn_vi[i].vi_entry_sizes)
-	{
-	    printf ("It is directory with %d entries: ", vn->vn_vi[i].vi_entry_count);
-	    for (j = 0; j < vn->vn_vi[i].vi_entry_count; j ++)
-		printf ("%d ", vn->vn_vi[i].vi_entry_sizes[j]);
-	}
-	printf ("\n");
-    }
-}
-
-
-void print_path (struct tree_balance * tb, struct path * path)
-{
-    int offset = path->path_length;
-    struct buffer_head * bh;
-
-    printf ("Offset    Bh     (b_blocknr, b_count) Position Nr_item\n");
-    while ( offset > ILLEGAL_PATH_ELEMENT_OFFSET ) {
-	bh = PATH_OFFSET_PBUFFER (path, offset);
-	printf ("%6d %10p (%9lu, %7d) %8d %7d\n", offset, 
-		bh, bh ? bh->b_blocknr : 0, bh ? bh->b_count : 0,
-		PATH_OFFSET_POSITION (path, offset), bh ? B_NR_ITEMS (bh) : -1);
-	
-	offset --;
-    }
-}
-
-
-
-void print_directory_item (FILE * fp, reiserfs_filsys_t * fs,
-			   struct buffer_head * bh, struct item_head * ih)
-{
-    int i;
-    int namelen;
-    struct reiserfs_de_head * deh;
-    char * name;
-/*    static char namebuf [80];*/
-
-    if (!I_IS_DIRECTORY_ITEM (ih))
-	return;
-
-    //printk ("\n%2%-25s%-30s%-15s%-15s%-15s\n", "    Name", "length", "Object key", "Hash", "Gen number", "Status");
-    reiserfs_warning (fp, "%3s: %-25s%s%-22s%-12s%s\n", "###", "Name", "length", "    Object key", "   Hash", "Gen number");
-    deh = B_I_DEH (bh, ih);
-    for (i = 0; i < get_ih_entry_count (ih); i ++, deh ++) {
-	if (dir_entry_bad_location (deh, ih, i == 0 ? 1 : 0)) {
-	    reiserfs_warning (fp, "%3d: wrong entry location %u, deh_offset %u\n",
-			      i, get_deh_location (deh), get_deh_offset (deh));
-	    continue;
-	}
-	if (i && dir_entry_bad_location (deh - 1, ih, ((i - 1) == 0) ? 1 : 0))
-	    /* previous entry has bad location so we can not calculate entry
-               length */
-	    namelen = 25;
-	else
-	    namelen = name_in_entry_length (ih, deh, i);
-
-	name = name_in_entry (deh, i);
-	reiserfs_warning (fp, "%3d: \"%-25.*s\"(%3d)%20K%12d%5d, loc %u, state %x %s\n", 
-			  i, namelen, name, namelen,
-			  (struct key *)&(deh->deh2_dir_id),
-			  GET_HASH_VALUE (get_deh_offset (deh)),
-			  GET_GENERATION_NUMBER (get_deh_offset (deh)),
-			  get_deh_location (deh), get_deh_state (deh),
-			  code2name (find_hash_in_use (name, namelen, get_deh_offset (deh),
-						       fs ? get_sb_hash_code (fs->fs_ondisk_sb) : UNSET_HASH)));
-	/*fs ? (is_properly_hashed (fs, name, namelen, deh_offset (deh)) ? "" : "(BROKEN)") : "??");*/
-    }
-}
-
-
-//
-// printing of indirect item
-//
-static void start_new_sequence (__u32 * start, int * len, __u32 new)
-{
-    *start = new;
-    *len = 1;
-}
-
-
-static int sequence_finished (__u32 start, int * len, __u32 new)
-{
-    if (le32_to_cpu (start) == INT_MAX)
-	return 1;
-
-    if (start == 0 && new == 0) {
-	(*len) ++;
-	return 0;
-    }
-    if (start != 0 && (le32_to_cpu (start) + *len) == le32_to_cpu (new)) {
-	(*len) ++;
-	return 0;
-    }
-    return 1;
-}
-
-static void print_sequence (FILE * fp, __u32 start, int len)
-{
-    if (start == INT_MAX)
-	return;
-
-    if (len == 1)
-	reiserfs_warning (fp, " %d", le32_to_cpu (start));
-    else
-	reiserfs_warning (fp, " %d(%d)", le32_to_cpu (start), len);
-}
-
-
-void print_indirect_item (FILE * fp, struct buffer_head * bh, int item_num)
-{
-    struct item_head * ih;
-    unsigned int j;
-    __u32 * unp, prev = INT_MAX;
-    int num;
-
-    ih = B_N_PITEM_HEAD (bh, item_num);
-    unp = (__u32 *)B_I_PITEM (bh, ih);
-
-    if (get_ih_item_len (ih) % UNFM_P_SIZE)
-	reiserfs_warning (fp, "print_indirect_item: invalid item len");  
-
-    reiserfs_warning (fp, "%d pointer%s\n[", I_UNFM_NUM (ih),
-                      I_UNFM_NUM (ih) != 1 ? "s" : "" );
-    for (j = 0; j < I_UNFM_NUM (ih); j ++) {
-	if (sequence_finished (prev, &num, d32_get(unp, j))) {
-	    print_sequence (fp, prev, num);
-	    start_new_sequence (&prev, &num, d32_get(unp, j));
-	}
-    }
-    print_sequence (fp, prev, num);
-    reiserfs_warning (fp, "]\n");
-}
-
-
-char timebuf[256];
-
-char * timestamp (time_t t)
-{
-    strftime (timebuf, 256, "%d/%Y %T", localtime (&t));
-    return timebuf;
-}
-
-static int print_stat_data (FILE * fp, struct buffer_head * bh, struct item_head * ih, int alltimes)
-{
-    int retval;
-    
-
-    /* we cannot figure out if it is new stat data or old by key_format
-       macro. Stat data's key looks identical in both formats */
-    if (get_ih_key_format (ih) == KEY_FORMAT_1) {
-        struct stat_data_v1 * sd_v1 = (struct stat_data_v1 *)B_I_PITEM (bh, ih);
-	reiserfs_warning (fp, "(OLD SD), mode %M, size %u, nlink %u, uid %u, FDB %u, mtime %s blocks %u",
-		sd_v1_mode(sd_v1), sd_v1_size(sd_v1), sd_v1_nlink(sd_v1),
-                sd_v1_uid(sd_v1), sd_v1_first_direct_byte(sd_v1), timestamp
-                (sd_v1_mtime(sd_v1)), sd_v1_blocks(sd_v1));
-	retval = (S_ISLNK (sd_v1_mode(sd_v1))) ? 1 : 0;
-        if (alltimes)
-            reiserfs_warning (fp, "%s %s\n", timestamp (sd_v1_ctime(sd_v1)),
-                timestamp (sd_v1_atime(sd_v1)));
-    } else {
-        struct stat_data * sd = (struct stat_data *)B_I_PITEM (bh, ih);
-	reiserfs_warning (fp, "(NEW SD), mode %M, size %Lu, nlink %u, mtime %s blocks %u, uid %u",
-		sd_v2_mode(sd), sd_v2_size(sd), sd_v2_nlink(sd),
-		timestamp (sd_v2_mtime(sd)), sd_v2_blocks(sd), sd_v2_uid(sd));
-	retval = (S_ISLNK (sd_v2_mode(sd))) ? 1 : 0;
-        if (alltimes)
-            reiserfs_warning (fp, "%s %s\n", timestamp (sd_v2_ctime(sd)),
-                timestamp (sd_v2_atime(sd)));
-    }
-
-    reiserfs_warning (fp, "\n");
-    return retval;
-}
-
-
-/* used by debugreiserfs/scan.c */
-void reiserfs_print_item (FILE * fp, struct buffer_head * bh,
-			  struct item_head * ih)
-{
-    reiserfs_warning (fp, "block %lu, item %d: %H\n",
-	bh->b_blocknr, (ih - B_N_PITEM_HEAD (bh, 0))/sizeof(struct item_head), ih);
-    if (is_stat_data_ih (ih)) {
-	print_stat_data (fp, bh, ih, 0/*all times*/);
-	return;
-    }
-    if (is_indirect_ih (ih)) {
-	print_indirect_item (fp, bh, ih - B_N_PITEM_HEAD (bh, 0));
-	return;
-    }
-    if (is_direct_ih (ih)) {
-	reiserfs_warning (fp, "direct item: block %lu, start %d, %d bytes\n",
-			  bh->b_blocknr, get_ih_location (ih), get_ih_item_len (ih));
-	return;
-    }
-
-    print_directory_item (fp, 0, bh, ih);    
-}
-
-
-/* this prints internal nodes (4 keys/items in line) (dc_number,
-   dc_size)[k_dirid, k_objectid, k_offset, k_uniqueness](dc_number,
-   dc_size)...*/
-static int print_internal (FILE * fp, struct buffer_head * bh, int first, int last)
-{
-    struct key * key;
-    struct disk_child * dc;
-    int i;
-    int from, to;
-
-    if (!is_internal_node (bh))
-	return 1;
-
-    if (first == -1) {
-	from = 0;
-	to = B_NR_ITEMS (bh);
-    } else {
-	from = first;
-	to = last < B_NR_ITEMS (bh) ? last : B_NR_ITEMS (bh);
-    }
-
-    reiserfs_warning (fp, "INTERNAL NODE (%ld) contains %b\n",  bh->b_blocknr, bh);
-
-    dc = B_N_CHILD (bh, from);
-    reiserfs_warning (fp, "PTR %d: %y ", from, dc);
-
-    for (i = from, key = B_N_PDELIM_KEY (bh, from), dc ++; i < to; i ++, key ++, dc ++) {
-	reiserfs_warning (fp, "KEY %d: %20k PTR %d: %20y ", i, key, i + 1, dc);
-	if (i && i % 4 == 0)
-	    reiserfs_warning (fp, "\n");
-    }
-    reiserfs_warning (fp, "\n");
-    return 0;
-}
-
-
-
-static int is_symlink = 0;
-static int print_leaf (FILE * fp, reiserfs_filsys_t * fs, struct buffer_head * bh,
-		       int print_mode, int first, int last)
-{
-    struct block_head * blkh;
-    struct item_head * ih;
-    int i;
-    int from, to;
-    int real_nr, nr;
-
-    if (!is_tree_node (bh, DISK_LEAF_NODE_LEVEL))
-	return 1;
-    
-    blkh = B_BLK_HEAD (bh);
-    ih = B_N_PITEM_HEAD (bh,0);
-    real_nr = leaf_count_ih(bh->b_data, bh->b_size);
-    nr = get_blkh_nr_items((struct block_head *)bh->b_data);
-
-    reiserfs_warning (fp,
-		      "\n===================================================================\n");
-    reiserfs_warning (fp, "LEAF NODE (%ld) contains %b (real items %d)\n",
-		      bh->b_blocknr, bh, real_nr);
-
-    if (!(print_mode & PRINT_TREE_DETAILS)) {
-	reiserfs_warning (fp, "FIRST ITEM_KEY: %k, LAST ITEM KEY: %k\n",
-			   &(ih->ih_key), &((ih + real_nr - 1)->ih_key));
-	return 0;
-    }
-
-    if (first < 0 || first > real_nr - 1) 
-	from = 0;
-    else 
-	from = first;
-
-    if (last < 0 || last > real_nr)
-	to = real_nr;
-    else
-	to = last;
-
-
-    reiserfs_warning (fp,
-		       "-------------------------------------------------------------------------------\n"
-		       "|###|type|ilen|f/sp| loc|fmt|fsck|                   key                      |\n"
-		       "|   |    |    |e/cn|    |   |need|                                            |\n");
-    for (i = from; i < to; i++) {
-	reiserfs_warning (fp,
-			  "-------------------------------------------------------------------------------\n"
-			  "|%3d|%30H|%s\n", i, ih + i, i >= nr ? " DELETED" : "");
-
-	if (I_IS_STAT_DATA_ITEM(ih+i)) {
-	    is_symlink = print_stat_data (fp, bh, ih + i, 0/*all times*/);
-	    continue;
-	}
-
-	if (I_IS_DIRECTORY_ITEM(ih+i)) {
-	    print_directory_item (fp, fs, bh, ih+i);
-	    continue;
-	}
-
-	if (I_IS_INDIRECT_ITEM(ih+i)) {
-	    print_indirect_item (fp, bh, i);
-	    continue;
-	}
-
-	if (I_IS_DIRECT_ITEM(ih+i)) {
-	    int j = 0;
-	    if (is_symlink || print_mode & PRINT_DIRECT_ITEMS) {
-		reiserfs_warning (fp, "\"");
-		while (j < get_ih_item_len (&ih[i])) {
-		    if (B_I_PITEM(bh,ih+i)[j] == 10)
-			reiserfs_warning (fp, "\\n");
-		    else
-			reiserfs_warning (fp, "%c", B_I_PITEM(bh,ih+i)[j]);
-		    j ++;
-		}
-		reiserfs_warning (fp, "\"\n");
-	    }
-	    continue;
-	}
-    }
-    reiserfs_warning (fp, "===================================================================\n");
-    return 0;
-}
-
-
-void print_journal_params (FILE * fp, struct journal_params * jp)
-{
-    reiserfs_warning (fp, "\tDevice [0x%x]\n", get_jp_journal_dev (jp));
-    reiserfs_warning (fp, "\tMagic [0x%x]\n", get_jp_journal_magic (jp));
-
-    reiserfs_warning (fp, "\tSize %u blocks (including 1 for journal header) (first block %u)\n",
-		      get_jp_journal_size (jp) + 1,
-		      get_jp_journal_1st_block (jp));
-    reiserfs_warning (fp, "\tMax transaction length %u blocks\n", get_jp_journal_max_trans_len (jp));
-    reiserfs_warning (fp, "\tMax batch size %u blocks\n", get_jp_journal_max_batch (jp));
-    reiserfs_warning (fp, "\tMax commit age %u\n", get_jp_journal_max_commit_age (jp));
-    /*reiserfs_warning (fp, "\tMax transaction age %u\n", get_jp_journal_max_trans_age (jp));*/
-}
-
-/* return 1 if this is not super block */
-int print_super_block (FILE * fp, reiserfs_filsys_t * fs, char * file_name,
-			      struct buffer_head * bh, int short_print)
-{
-    struct reiserfs_super_block * sb = (struct reiserfs_super_block *)(bh->b_data);
-    dev_t rdev;
-    int format = 0;
-    __u16 state;
-
-    if (!does_look_like_super_block (sb))
-	return 1;
-
-    rdev = misc_device_rdev(file_name);
-
-    reiserfs_warning (fp, "Reiserfs super block in block %lu on 0x%x of ",
-		      bh->b_blocknr, rdev);
-    switch (get_reiserfs_format (sb)) {
-    case REISERFS_FORMAT_3_5:
-	reiserfs_warning (fp, "format 3.5 with ");
-        format = 1;
-	break;
-    case REISERFS_FORMAT_3_6:
-	reiserfs_warning (fp, "format 3.6 with ");
-        format = 2;
-	break;
-    default:
-	reiserfs_warning (fp, "unknown format with ");
-	break;
-    }
-    if (is_reiserfs_jr_magic_string (sb))
-	reiserfs_warning (fp, "non-");
-    reiserfs_warning (fp, "standard journal\n");
-    if (short_print) {
-	reiserfs_warning (fp, "Blocks (total/free): %u/%u by %d bytes\n",
-		get_sb_block_count (sb), get_sb_free_blocks (sb), get_sb_block_size (sb));
-    } else {
-	reiserfs_warning (fp, "Count of blocks on the device: %u\n", get_sb_block_count (sb));
-	reiserfs_warning (fp, "Number of bitmaps: %u\n", get_sb_bmap_nr (sb));
-	reiserfs_warning (fp, "Blocksize: %d\n", get_sb_block_size (sb));
-	reiserfs_warning (fp, "Free blocks (count of blocks - used [journal, "
-		      "bitmaps, data, reserved] blocks): %u\n", get_sb_free_blocks (sb));
-	reiserfs_warning (fp, "Root block: %u\n", get_sb_root_block (sb));
-    }
-    reiserfs_warning (fp, "Filesystem is %sclean\n",
-		      (get_sb_umount_state (sb) == FS_CLEANLY_UMOUNTED) ? "" : "NOT ");
-
-    if (short_print)
-    	return 0;
-    reiserfs_warning (fp, "Tree height: %d\n", get_sb_tree_height (sb));
-    reiserfs_warning (fp, "Hash function used to sort names: %s\n",
-		      code2name (get_sb_hash_code (sb)));
-    reiserfs_warning (fp, "Objectid map size %d, max %d\n", get_sb_oid_cursize (sb),
-		      get_sb_oid_maxsize (sb));
-    reiserfs_warning (fp, "Journal parameters:\n");
-    print_journal_params (fp, sb_jp (sb));
-    reiserfs_warning (fp, "Blocks reserved by journal: %u\n",
-		      get_sb_reserved_for_journal (sb));
-    state = get_sb_fs_state (sb);
-    reiserfs_warning (fp, "Fs state field: 0x%x:\n", state);
-    if ((state & FS_FATAL) == FS_FATAL)
-	reiserfs_warning (fp, "\tFATAL corruptions exist.\n");
-    if ((state & FS_ERROR) == FS_ERROR)
-	reiserfs_warning (fp, "\t some corruptions exist.\n");
-    if ((state & IO_ERROR) == IO_ERROR)
-	reiserfs_warning (fp, "\tI/O corruptions exist.\n");
-
-    reiserfs_warning (fp, "sb_version: %u\n", get_sb_version (sb));
-    if (format == 2) {
-        reiserfs_warning (fp, "inode generation number: %u\n", get_sb_v2_inode_generation (sb));
-        reiserfs_warning (fp, "UUID: %U\n", sb->s_uuid);
-        reiserfs_warning (fp, "LABEL: %.16s\n", sb->s_label);
-        reiserfs_warning (fp, "Set flags in SB:\n");
-	if ((get_sb_v2_flag (sb, reiserfs_attrs_cleared)))
-	    reiserfs_warning (fp, "\tATTRIBUTES CLEAN\n");
-    }
-
-    return 0;
-}
-
-
-void print_filesystem_state (FILE * fp, reiserfs_filsys_t * fs)
-{
-    reiserfs_warning (fp, "\nFilesystem state: ");
-    if (reiserfs_is_fs_consistent (fs))
-	reiserfs_warning (fp, "consistent\n\n");
-    else
-	reiserfs_warning (fp, "consistency is not checked after last mounting\n\n");
-}
-
-
-
-static int print_desc_block (FILE * fp, struct buffer_head * bh)
-{
-    if (memcmp(get_jd_magic (bh), JOURNAL_DESC_MAGIC, 8))
-	return 1;
-
-    reiserfs_warning (fp, "Desc block %lu (j_trans_id %ld, j_mount_id %ld, j_len %ld)\n",
-		      bh->b_blocknr, get_desc_trans_id (bh),
-		      get_desc_mount_id (bh), get_desc_trans_len (bh));
-
-    return 0;
-}
-
-
-void print_block (FILE * fp, reiserfs_filsys_t * fs, 
-		  struct buffer_head * bh, ...)//int print_mode, int first, int last)
-{
-    va_list args;
-    int mode, first, last;
-    char * file_name;
-
-    va_start (args, bh);
-
-    if ( ! bh ) {
-	reiserfs_warning (stderr, "print_block: buffer is NULL\n");
-	return;
-    }
-
-    mode = va_arg (args, int);
-    first = va_arg (args, int);
-    last = va_arg (args, int);
-    file_name = (fs) ? fs->fs_file_name : NULL ;
-    if (print_desc_block (fp, bh))
-        if (print_super_block (fp, fs, file_name, bh, 0))
-	    if (print_leaf (fp, fs, bh, mode, first, last))
-		if (print_internal (fp, bh, first, last))
-		    reiserfs_warning (fp, "Block %ld contains unformatted data\n", bh->b_blocknr);
-}
-
-
-void print_tb (int mode, int item_pos, int pos_in_item, struct tree_balance * tb, char * mes)
-{
-  unsigned int h = 0;
-  struct buffer_head * tbSh, * tbFh;
-
-
-  if (!tb)
-    return;
-
-  printf ("\n********************** PRINT_TB for %s *******************\n", mes);
-  printf ("MODE=%c, ITEM_POS=%d POS_IN_ITEM=%d\n", mode, item_pos, pos_in_item);
-  printf ("*********************************************************************\n");
-
-  printf ("* h *    S    *    L    *    R    *   F   *   FL  *   FR  *  CFL  *  CFR  *\n");
-/*
-01234567890123456789012345678901234567890123456789012345678901234567890123456789
-       1        2         3         4         5         6         7         8
-  printk ("*********************************************************************\n");
-*/
-  
-  
-  for (h = 0; h < sizeof(tb->insert_size) / sizeof (tb->insert_size[0]); h ++) {
-    if (PATH_H_PATH_OFFSET (tb->tb_path, h) <= tb->tb_path->path_length && 
-	PATH_H_PATH_OFFSET (tb->tb_path, h) > ILLEGAL_PATH_ELEMENT_OFFSET) {
-      tbSh = PATH_H_PBUFFER (tb->tb_path, h);
-      tbFh = PATH_H_PPARENT (tb->tb_path, h);
-    } else {
-      /*      printk ("print_tb: h=%d, PATH_H_PATH_OFFSET=%d, path_length=%d\n", 
-	      h, PATH_H_PATH_OFFSET (tb->tb_path, h), tb->tb_path->path_length);*/
-      tbSh = 0;
-      tbFh = 0;
-    }
-    printf ("* %u * %3lu(%2lu) * %3lu(%2lu) * %3lu(%2lu) * %5ld * %5ld * %5ld * %5ld * %5ld *\n",
-	    h, 
-	    tbSh ? tbSh->b_blocknr : ~0ul,
-	    tbSh ? tbSh->b_count : ~0ul,
-	    tb->L[h] ? tb->L[h]->b_blocknr : ~0ul,
-	    tb->L[h] ? tb->L[h]->b_count : ~0ul,
-	    tb->R[h] ? tb->R[h]->b_blocknr : ~0ul,
-	    tb->R[h] ? tb->R[h]->b_count : ~0ul,
-	    tbFh ? tbFh->b_blocknr : ~0ul,
-	    tb->FL[h] ? tb->FL[h]->b_blocknr : ~0ul,
-	    tb->FR[h] ? tb->FR[h]->b_blocknr : ~0ul,
-	    tb->CFL[h] ? tb->CFL[h]->b_blocknr : ~0ul,
-	    tb->CFR[h] ? tb->CFR[h]->b_blocknr : ~0ul);
-  }
-
-  printf ("*********************************************************************\n");
-
-
-  /* print balance parameters for leaf level */
-  h = 0;
-  printf ("* h * size * ln * lb * rn * rb * blkn * s0 * s1 * s1b * s2 * s2b * curb * lk * rk *\n");
-  printf ("* %d * %4d * %2d * %2d * %2d * %2d * %4d * %2d * %2d * %3d * %2d * %3d * %4d * %2d * %2d *\n",
-	  h, tb->insert_size[h], tb->lnum[h], tb->lbytes, tb->rnum[h],tb->rbytes, tb->blknum[h], 
-	  tb->s0num, tb->s1num,tb->s1bytes,  tb->s2num, tb->s2bytes, tb->cur_blknum, tb->lkey[h], tb->rkey[h]);
-
-
-/* this prints balance parameters for non-leaf levels */
-  do {
-    h++;
-    printf ("* %d * %4d * %2d *    * %2d *    * %2d *\n",
-    h, tb->insert_size[h], tb->lnum[h], tb->rnum[h], tb->blknum[h]);
-  } while (tb->insert_size[h]);
-
-  printf ("*********************************************************************\n");
-
-
-  /* print FEB list (list of buffers in form (bh (b_blocknr, b_count), that will be used for new nodes) */
-  for (h = 0; h < sizeof (tb->FEB) / sizeof (tb->FEB[0]); h++)
-    printf("%s%p (%lu %d)", h == 0 ? "FEB list: " : ", ", tb->FEB[h], tb->FEB[h] ? tb->FEB[h]->b_blocknr : 0,
-	    tb->FEB[h] ? tb->FEB[h]->b_count : 0);
-  printf ("\n");
-
-  printf ("********************** END OF PRINT_TB *******************\n\n");
-}
-
-
-static void print_bmap_block (FILE * fp, int i, unsigned long block, char * map, int blocks, int silent, int blocksize)
-{
-    int j, k;
-    int bits = blocksize * 8;
-    int zeros = 0, ones = 0;
-  
-
-    reiserfs_warning (fp, "#%d: block %lu: ", i, block);
-
-    blocks = blocksize * 8;
-
-    if (misc_test_bit (0, map)) {
-	/* first block addressed by this bitmap block is used */
-	ones ++;
-	if (!silent)
-	    reiserfs_warning (fp, "Busy (%d-", i * bits);
-	for (j = 1; j < blocks; j ++) {
-	    while (misc_test_bit (j, map)) {
-		ones ++;
-		if (j == blocks - 1) {
-		    if (!silent)
-			reiserfs_warning (fp, "%d)\n", j + i * bits);
-		    goto end;
-		}
-		j++;
-	    }
-	    if (!silent)
-		reiserfs_warning (fp, "%d) Free(%d-", j - 1 + i * bits, j + i * bits);
-
-	    while (!misc_test_bit (j, map)) {
-		zeros ++;
-		if (j == blocks - 1) {
-		    if (!silent)
-			reiserfs_warning (fp, "%d)\n", j + i * bits);
-		    goto end;
-		}
-		j++;
-	    }
-	    if (!silent)
-		reiserfs_warning (fp, "%d) Busy(%d-", j - 1 + i * bits, j + i * bits);
-
-	    j --;
-	end:
-	    /* to make gcc 3.2 do not sware here */;
-	}
-    } else {
-	/* first block addressed by this bitmap is free */
-	zeros ++;
-	if (!silent)
-	    reiserfs_warning (fp, "Free (%d-", i * bits);
-	for (j = 1; j < blocks; j ++) {
-	    k = 0;
-	    while (!misc_test_bit (j, map)) {
-		k ++;
-		if (j == blocks - 1) {
-		    if (!silent)
-			reiserfs_warning (fp, "%d)\n", j + i * bits);
-		    zeros += k;
-		    goto end2;
-		}
-		j++;
-	    }
-	    zeros += k;
-	    if (!silent)
-		reiserfs_warning (fp, "%d) Busy(%d-", j - 1 + i * bits, j + i * bits);
-	    
-	    k = 0;
-	    while (misc_test_bit (j, map)) {
-		ones ++;
-		if (j == blocks - 1) {
-		    if (!silent)
-			reiserfs_warning (fp, "%d)\n", j + i * bits);
-		    ones += k;
-		    goto end2;
-		}
-		j++;
-	    }
-	    ones += k;
-	    if (!silent)
-		reiserfs_warning (fp, "%d) Free(%d-", j - 1 + i * bits, j + i * bits);
-	
-	    j --;
-	end2:
-	    /* to make gcc 3.2 do not sware here */;
-	}
-    }
-
-    reiserfs_warning (fp, "used %d, free %d\n", ones, zeros);
-}
-
-
-/* read bitmap of disk and print details */
-void print_bmap (FILE * fp, reiserfs_filsys_t * fs, int silent)
-{
-    struct reiserfs_super_block * sb;
-    int bmap_nr;
-    int i;
-    int bits_per_block;
-    int blocks;
-    unsigned long block;
-    struct buffer_head * bh;
-
-
-    sb = fs->fs_ondisk_sb;
-    bmap_nr = get_sb_bmap_nr (sb);
-    bits_per_block = fs->fs_blocksize * 8;
-    blocks = bits_per_block;
-
-    reiserfs_warning (fp, "Bitmap blocks are:\n");
-    block = fs->fs_super_bh->b_blocknr + 1;
-    for (i = 0; i < bmap_nr; i ++) {
-	bh = bread (fs->fs_dev, block, fs->fs_blocksize);
-	if (!bh) {
-	    reiserfs_warning (stderr, "print_bmap: bread failed for %d: %lu\n", i, block);
-	    continue;
-	}
-	if (i == bmap_nr - 1)
-	    if (get_sb_block_count (sb) % bits_per_block)
-		blocks = get_sb_block_count (sb) % bits_per_block;
-	print_bmap_block (fp, i, block, bh->b_data, blocks, silent, fs->fs_blocksize);
-	brelse (bh);
-
-	if (spread_bitmaps (fs))
-	    block = (block / (fs->fs_blocksize * 8) + 1) * (fs->fs_blocksize * 8);
-	else
-	    block ++;
-	
-    }
-}
-
-
-
-void print_objectid_map (FILE * fp, reiserfs_filsys_t * fs)
-{
-    int i;
-    struct reiserfs_super_block * sb;
-    __u32 * omap;
-
-
-    sb = fs->fs_ondisk_sb;
-    if (fs->fs_format == REISERFS_FORMAT_3_6)
-	omap = (__u32 *)(sb + 1);
-    else if (fs->fs_format == REISERFS_FORMAT_3_5)
-	omap = (__u32 *)((struct reiserfs_super_block_v1 *)sb + 1);
-    else {
-	reiserfs_warning (fp, "print_objectid_map: proper signature is not found\n");
-	return;
-    }
-	
-    reiserfs_warning (fp, "Map of objectids (super block size %d)\n",
-		      (char *)omap - (char *)sb);
-      
-    for (i = 0; i < get_sb_oid_cursize (sb); i ++) {
-	if (i % 2 == 0) {
-	    reiserfs_warning(fp, "busy(%u-%u) ", le32_to_cpu (omap[i]),
-			     le32_to_cpu (omap[i+1]) - 1); 
-	} else {
-	    reiserfs_warning(fp, "free(%u-%u) ", le32_to_cpu (omap[i]),
-			    ((i+1) == get_sb_oid_cursize (sb)) ? 
-			    ~(__u32)0 : (le32_to_cpu (omap[i+1]) - 1));
-	}
-    }
-
-    reiserfs_warning (fp, "\nObject id array has size %d (max %d):", 
-		      get_sb_oid_cursize (sb), get_sb_oid_maxsize (sb));
-  
-    for (i = 0; i < get_sb_oid_cursize (sb); i ++)
-	reiserfs_warning (fp, "%s%u ", i % 2 ? "" : "*", le32_to_cpu (omap[i])); 
-    reiserfs_warning (fp, "\n");
-
-}
-
-
-void print_journal_header (reiserfs_filsys_t * fs)
-{
-    struct reiserfs_journal_header * j_head;
-
-
-    j_head = (struct reiserfs_journal_header *)(fs->fs_jh_bh->b_data);
-    reiserfs_warning (stdout, "Journal header (block #%lu of %s):\n"
-		      "\tj_last_flush_trans_id %ld\n"
-		      "\tj_first_unflushed_offset %ld\n"
-		      "\tj_mount_id %ld\n", 
-		      fs->fs_jh_bh->b_blocknr, fs->fs_j_file_name,
-		      get_jh_last_flushed (j_head),
-		      get_jh_replay_start_offset (j_head),
-		      get_jh_mount_id (j_head));
-    print_journal_params (stdout, &j_head->jh_journal);
-}
-
-
-static void print_trans_element (reiserfs_filsys_t * fs, reiserfs_trans_t * trans,
-				 unsigned int index, unsigned long in_journal, 
-				 unsigned long in_place)
-{
-    if (index % 8 == 0)
-	reiserfs_warning (stdout, "#%d\t", index);
-
-    reiserfs_warning (stdout, "%lu->%lu%s ",  in_journal, in_place,
-		      block_of_bitmap (fs, in_place) ? "B" : "");
-    if ((index + 1) % 8 == 0 || index == trans->trans_len - 1)
-	reiserfs_warning (stdout, "\n");
-}
-
-
-void print_one_transaction (reiserfs_filsys_t * fs, reiserfs_trans_t * trans)
-{
-    reiserfs_warning (stdout, "Mountid %u, transid %u, desc %lu, length %u, commit %lu\n",
-		      trans->mount_id, trans->trans_id,
-		      trans->desc_blocknr,
-		      trans->trans_len, trans->commit_blocknr);
-    for_each_block (fs, trans, print_trans_element);
-}
-
-
-/* print all valid transactions and found dec blocks */
-void print_journal (reiserfs_filsys_t * fs)
-{
-    if (!reiserfs_journal_opened (fs)) {
-	reiserfs_warning (stderr, "print_journal: journal is not opened\n");
-	return;
-    }
-    print_journal_header (fs);
-
-    for_each_transaction (fs, print_one_transaction);
-}
-
diff --git a/reiserfscore/reiserfslib.c b/reiserfscore/reiserfslib.c
deleted file mode 100644
index d904b5b..0000000
--- a/reiserfscore/reiserfslib.c
+++ /dev/null
@@ -1,1418 +0,0 @@
-/*
- *  Copyright 2000-2004 by Hans Reiser, licensing governed by 
- *  reiserfsprogs/README
- */
-
-#define _GNU_SOURCE
-
-#include "includes.h"
-#include <linux/kdev_t.h>
-
-struct key root_dir_key = {0, 0, {{0, 0},}};
-struct key parent_root_dir_key = {0, 0, {{0, 0},}};
-struct key lost_found_dir_key = {0, 0, {{0, 0}, }};
-struct key badblock_key = {BADBLOCK_DIRID, BADBLOCK_OBJID, {{0, 0},}};
-
-__u16 root_dir_format = 0;
-__u16 lost_found_dir_format = 0;
-
-static void make_const_keys (void)
-{
-    set_key_dirid (&root_dir_key, REISERFS_ROOT_PARENT_OBJECTID);
-    set_key_objectid (&root_dir_key, REISERFS_ROOT_OBJECTID);
-
-    set_key_dirid (&parent_root_dir_key, 0);
-    set_key_objectid (&parent_root_dir_key, REISERFS_ROOT_PARENT_OBJECTID);
-}
-
-
-
-/* reiserfs needs at least: enough blocks for journal, 64 k at the beginning,
-   one block for super block, bitmap block and root block. Note that first
-   bitmap block must point to all of them */
-int is_block_count_correct (unsigned long journal_offset, unsigned int block_size,
-    unsigned long block_count, unsigned long journal_size)
-{
-    unsigned long blocks;
-
-    /* RESERVED, MD RAID SBs, super block, bitmap, root, journal size with journal header */
-    blocks = journal_offset + journal_size;
-
-    /* we have a limit: skipped area, super block, journal and root block
-    all have to be addressed by one first bitmap */
-    if (blocks > block_size * 8)
-    	return 0;
-    	
-    if (blocks > block_count)
-    	return 0;
-    	
-    return 1;
-}
-
-/* read super block. fixme: only 4k blocks, pre-journaled format
-   is refused. Journal and bitmap are to be opened separately.
-   skip_check is set to 1 if checks of openned SB should be omitted.*/
-reiserfs_filsys_t * reiserfs_open (char * filename, int flags, 
-				   int *error, void * vp, int check)
-{
-    reiserfs_filsys_t * fs;
-    struct buffer_head * bh;
-    struct reiserfs_super_block * sb;
-    int fd, i;
-
-    /* convert root dir key and parent root dir key to little endian format */
-    make_const_keys ();
-
-    if (error) 
-	*error = 0;
-
-    fd = open (filename, flags 
-#if defined(O_LARGEFILE)
-	       | O_LARGEFILE
-#endif
-	       );
-    if (fd == -1) {
-	if (error)
-	    *error = errno;
-	return 0;
-    }
-
-    fs = getmem (sizeof (*fs));
-    fs->fs_dev = fd;
-    fs->fs_vp = vp;
-    asprintf (&fs->fs_file_name, "%s", filename);
-    
-    /* reiserfs super block is either in 16-th or in 2-nd 4k block of the
-       device */
-    for (i = 2; i < 17; i += 14) {
-	bh = bread (fd, i, 4096);
-	if (!bh) {
-	    reiserfs_warning (stderr, "reiserfs_open: bread failed reading block %d\n", i);
-	} else {
-	    sb = (struct reiserfs_super_block *)bh->b_data;
-	    
-	    if (is_any_reiserfs_magic_string(sb))
-		goto found;
-
-	    /* reiserfs signature is not found at the i-th 4k block */
-	    brelse (bh);
-	}
-    }
-
-    reiserfs_warning(stderr, 
-	"\nreiserfs_open: the reiserfs superblock cannot be found on %s.\n", filename);
-    
-    freemem (fs);
-    close (fd);
-    fs = NULL;
-    return fs;
-
- found:
-
-    if (!is_blocksize_correct(get_sb_block_size(sb))) {
-	reiserfs_warning(stderr, "reiserfs_open: a superblock with wrong parameters "
-			 "was found in the block (%d).\n", i);
-	freemem (fs);
-	close (fd);
-	brelse(bh);
-	return NULL;
-    }
-
-    if (check) {
-	/* A few checks of found super block. */
-	struct buffer_head *tmp_bh;
-	
-	tmp_bh = bread (fd, get_sb_block_count(sb) - 1, get_sb_block_size(sb));
-	
-	if (!tmp_bh) {
-	    reiserfs_warning (stderr, "\n%s: Your partition is not big enough to contain the \n"
-		    "filesystem of (%lu) blocks as was specified in the found super block.\n", 
-		    __FUNCTION__,  get_sb_block_count(sb) - 1);
-	    
-	    freemem (fs);
-	    close (fd);
-	    brelse(bh);
-	    return NULL;
-	}
-	
-	brelse(tmp_bh);
-    }
-   
-    fs->fs_blocksize = get_sb_block_size (sb);
-    
-    /* check block size on the filesystem */
-    if (fs->fs_blocksize != 4096) {
-	i = bh->b_blocknr * 4096 / fs->fs_blocksize;
-	brelse (bh);
-	bh = bread (fd, i, fs->fs_blocksize);
-	if (!bh) {
-	    reiserfs_warning (stderr, "reiserfs_open: bread failed reading block %d, size %d\n",
-			      i, fs->fs_blocksize);
-	    freemem (fs);
-	    return 0;
-	}
-	sb = (struct reiserfs_super_block *)bh->b_data;
-    }
-
-    fs->fs_hash_function = code2func (get_sb_hash_code (sb));
-    fs->fs_super_bh = bh;
-    fs->fs_ondisk_sb = sb;
-    fs->fs_flags = flags; /* O_RDONLY or O_RDWR */
-
-    fs->fs_format = get_reiserfs_format (sb);
-    
-    /*reiserfs_read_bitmap_blocks(fs);*/
-    if (flags & O_RDWR)
-	fs->fs_dirt  = 1;
-    else
-	fs->fs_dirt = 0;
-
-    return fs;
-}
-
-
-/* creates buffer for super block and fills it up with fields which are
-   constant for given size and version of a filesystem */
-reiserfs_filsys_t * reiserfs_create (char * filename,
-				     int version,
-				     unsigned long block_count, 
-				     int block_size, 
-				     int default_journal, 
-				     int new_format)
-{
-    reiserfs_filsys_t * fs;
-
-
-    /* convert root dir key and parent root dir key to little endian format */
-    make_const_keys ();
-
-
-    if (count_blocks (filename, block_size) < block_count) {
-	reiserfs_warning (stderr, "reiserfs_create: no enough blocks on device\n");
-	return 0;
-    }
-
-    if (!is_block_count_correct (REISERFS_DISK_OFFSET_IN_BYTES / block_size, 
-	block_size, block_count, 0)) 
-    {
-	reiserfs_warning (stderr, "reiserfs_create: can not create that small "
-	    "(%d blocks) filesystem\n", block_count);
-	return 0;
-    }
-
-    fs = getmem (sizeof (*fs));
-    if (!fs) {
-	reiserfs_warning (stderr, "reiserfs_create: getmem failed\n");
-	return 0;
-    }
-
-    fs->fs_dev = open (filename, O_RDWR 
-#if defined(O_LARGEFILE)
-		       | O_LARGEFILE
-#endif
-		       );
-    if (fs->fs_dev == -1) {
-	reiserfs_warning (stderr, "reiserfs_create: could not open %s: %s\n",
-			  filename, strerror(errno));
-	freemem (fs);
-	return 0;
-    }
-
-    fs->fs_blocksize = block_size;
-    asprintf (&fs->fs_file_name, "%s", filename);
-    fs->fs_format = version;
-
-    if (new_format)
-        fs->fs_super_bh = getblk (fs->fs_dev, 
-	    REISERFS_DISK_OFFSET_IN_BYTES / block_size, block_size);
-    else 
-        fs->fs_super_bh = getblk (fs->fs_dev, 
-	    REISERFS_OLD_DISK_OFFSET_IN_BYTES / block_size, block_size);
-    
-    if (!fs->fs_super_bh) {
-	reiserfs_warning (stderr, "reiserfs_create: getblk failed\n");
-	return 0;
-    }
-
-    mark_buffer_uptodate (fs->fs_super_bh, 1);
-    
-    fs->fs_ondisk_sb = (struct reiserfs_super_block *)fs->fs_super_bh->b_data;
-    memset (fs->fs_ondisk_sb, 0, block_size);
-    
-    /* fill super block fields which are constant for given version and block count */
-    set_sb_block_count (fs->fs_ondisk_sb, block_count);
-    /* sb_free_blocks */
-    /* sb_root_block */
-    /* sb_journal_1st_block */
-    /* sb_journal_dev */
-    /* sb_orig_journal_size */
-    /* sb_joural_magic */
-    /* sb_journal magic_F */
-    /* sb_mount_id */
-    /* sb_not_used0 */
-    /* sb_generation_number */    
-    set_sb_block_size (fs->fs_ondisk_sb, block_size);
-    switch (version) {
-    case REISERFS_FORMAT_3_5:
-	set_sb_oid_maxsize (fs->fs_ondisk_sb, 
-	    (block_size - SB_SIZE_V1) / sizeof(__u32) / 2 * 2);
-	/* sb_oid_cursize */
-	/* sb_state */
-	memcpy (fs->fs_ondisk_sb->s_v1.s_magic, REISERFS_3_5_SUPER_MAGIC_STRING,
-		strlen (REISERFS_3_5_SUPER_MAGIC_STRING));
-	break;
-
-    case REISERFS_FORMAT_3_6:
-	set_sb_oid_maxsize (fs->fs_ondisk_sb, 
-	    (block_size - SB_SIZE) / sizeof(__u32) / 2 * 2);
-	/* sb_oid_cursize */
-	/* sb_state */
-        memcpy (fs->fs_ondisk_sb->s_v1.s_magic, REISERFS_3_6_SUPER_MAGIC_STRING,
-                strlen (REISERFS_3_6_SUPER_MAGIC_STRING));
-	break;
-    }
-    if (!default_journal)
-        memcpy (fs->fs_ondisk_sb->s_v1.s_magic, REISERFS_JR_SUPER_MAGIC_STRING,
-                strlen (REISERFS_JR_SUPER_MAGIC_STRING));
-
-    /* sb_fsck_state */
-    /* sb_hash_function_code */
-    /* sb_tree_height */
-    set_sb_bmap_nr (fs->fs_ondisk_sb,
-		    (block_count + (block_size * 8 - 1)) / (block_size * 8));
-    set_sb_version (fs->fs_ondisk_sb, version);
-    /* sb_not_used1 */
-
-    mark_buffer_dirty (fs->fs_super_bh);
-    fs->fs_dirt = 1;
-
-    return fs;
-}
-
-
-int no_reiserfs_found (reiserfs_filsys_t * fs)
-{
-    return (fs == NULL || fs->fs_blocksize == 0) ? 1 : 0;
-}
-
-
-int new_format (reiserfs_filsys_t * fs)
-{
-    return fs->fs_super_bh->b_blocknr != 2;
-}
-
-
-int spread_bitmaps (reiserfs_filsys_t * fs)
-{
-    return fs->fs_super_bh->b_blocknr != 2;
-}
-
-
-/* 0 means: do not guarantee that fs is consistent */
-int reiserfs_is_fs_consistent (reiserfs_filsys_t * fs)
-{
-    if (get_sb_umount_state (fs->fs_ondisk_sb) == FS_CLEANLY_UMOUNTED &&
-	get_sb_fs_state (fs->fs_ondisk_sb) == FS_CONSISTENT)
-	return 1;
-    return 0;
-}
-
-/* flush bitmap, brelse super block, flush all dirty buffers, close and open
-   again the device, read super block */
-static void reiserfs_only_reopen (reiserfs_filsys_t * fs, int flag)
-{
-    unsigned long super_block;
-
-
-    /*  reiserfs_flush_to_ondisk_bitmap (fs->fs_bitmap2, fs);*/
-    super_block = fs->fs_super_bh->b_blocknr;                
-    brelse (fs->fs_super_bh);
-    flush_buffers (fs->fs_dev);
-    
-    invalidate_buffers (fs->fs_dev);
-    if (close (fs->fs_dev))
-	die ("reiserfs_reopen: closed failed: %s", strerror(errno));
-    
-    fs->fs_dev = open (fs->fs_file_name, flag 
-#if defined(O_LARGEFILE)
-		       | O_LARGEFILE
-#endif
-		       );
-    if (fs->fs_dev == -1)
-	die ("reiserfs_reopen: could not reopen device: %s", strerror(errno));
-
-    fs->fs_super_bh = bread (fs->fs_dev, super_block, fs->fs_blocksize);
-    if (!fs->fs_super_bh)
-	die ("reiserfs_reopen: reading super block failed");
-    fs->fs_ondisk_sb = (struct reiserfs_super_block *)fs->fs_super_bh->b_data;
-    fs->fs_flags = flag; /* O_RDONLY or O_RDWR */
-    
-    if (flag & O_RDWR)
-	fs->fs_dirt  = 1;
-    else
-	fs->fs_dirt = 0;
-}
-
-void reiserfs_reopen (reiserfs_filsys_t * fs, int flag)
-{
-    reiserfs_only_reopen (fs, flag);
-    reiserfs_reopen_journal (fs, flag);
-}
-
-int is_opened_rw (reiserfs_filsys_t * fs)
-{
-    if ((fs->fs_flags) & O_RDWR)
-	return 1;
-    return 0;
-}
-
-
-/* flush all changes made on a filesystem */
-void reiserfs_flush (reiserfs_filsys_t * fs)
-{
-    if (fs->fs_dirt) {
-	reiserfs_flush_journal (fs);
-	flush_buffers (fs->fs_dev);
-    }
-    fs->fs_dirt = 0;
-}
-
-
-/* free all memory involved into manipulating with filesystem */
-void reiserfs_free (reiserfs_filsys_t * fs)
-{
-    reiserfs_free_journal (fs);
-    reiserfs_free_ondisk_bitmap (fs);
-
-    /* release super block and memory used by filesystem handler */
-    brelse (fs->fs_super_bh);
-    fs->fs_super_bh = 0;
-
-    free_buffers ();
-
-    free (fs->fs_file_name);
-    fs->fs_file_name = 0;
-    freemem (fs);
-}
-
-
-/* this closes everything: journal. bitmap and the fs itself */
-void reiserfs_close (reiserfs_filsys_t * fs)
-{
-    reiserfs_close_journal (fs);
-    reiserfs_close_ondisk_bitmap (fs);
-
-    reiserfs_flush (fs);
-    reiserfs_free (fs);
-    fsync(fs->fs_dev);
-}
-
-
-int reiserfs_new_blocknrs (reiserfs_filsys_t * fs, 
-			   unsigned long * free_blocknrs, 
-			   unsigned long start, 
-			   int amount_needed)
-{
-    if (fs->block_allocator)
-	return fs->block_allocator (fs, free_blocknrs, start, amount_needed);
-    die ("block allocator is not defined\n");
-    return 0;
-}
-
-
-int reiserfs_free_block (reiserfs_filsys_t * fs, unsigned long block)
-{
-    if (fs->block_deallocator)
-	return fs->block_deallocator (fs, block);
-    die ("block deallocator is not defined\n");
-    return 0;
-}
-
-static int reiserfs_search_by_key_x (reiserfs_filsys_t * fs, struct key * key,
-				     struct path * path, int key_length)
-{
-    struct buffer_head * bh;   
-    unsigned long block;
-    struct path_element * curr;
-    int retval;
-    
-
-    block = get_sb_root_block (fs->fs_ondisk_sb);
-    if (not_data_block(fs, block))
-	return IO_ERROR;
-    
-    path->path_length = ILLEGAL_PATH_ELEMENT_OFFSET;
-    while (1) {
-	curr = PATH_OFFSET_PELEMENT (path, ++ path->path_length);
-	bh = curr->pe_buffer = bread (fs->fs_dev, block, fs->fs_blocksize);
-        if (bh == 0) {
-	    path->path_length --;
-	    pathrelse (path);
-	    return ITEM_NOT_FOUND;
-	}
-	retval = reiserfs_bin_search (key, B_N_PKEY (bh, 0), B_NR_ITEMS (bh),
-				      is_leaf_node (bh) ? IH_SIZE : KEY_SIZE,
-				      &(curr->pe_position), key_length == 4 ? comp_keys : comp_keys_3);
-	if (retval == POSITION_FOUND) {
-	    /* key found, return if this is leaf level */
-	    if (is_leaf_node (bh)) {
-		path->pos_in_item = 0;
-		return ITEM_FOUND;
-	    }
-	    curr->pe_position ++;
-	} else {
-	    /* key not found in the node */
-	    if (is_leaf_node (bh))
-		return ITEM_NOT_FOUND;
-	}
-	block = get_dc_child_blocknr (B_N_CHILD (bh, curr->pe_position));
-	if (not_data_block(fs, block))
-		return IO_ERROR;
-    }
-    printf ("search_by_key: you can not get here\n");
-    return ITEM_NOT_FOUND;
-}
-
-
-int reiserfs_search_by_key_3 (reiserfs_filsys_t * fs, struct key * key,
-			      struct path * path)
-{
-    return reiserfs_search_by_key_x (fs, key, path, 3);
-}
-
-
-int reiserfs_search_by_key_4 (reiserfs_filsys_t * fs, struct key * key,
-			      struct path * path)
-{
-    return reiserfs_search_by_key_x (fs, key, path, 4);
-}
-
-
-/* key is key of byte in the regular file. This searches in tree
-   through items and in the found item as well */
-int usearch_by_position (reiserfs_filsys_t * s, struct key * key,
-			 int version, struct path * path)
-{
-    struct buffer_head * bh;
-    struct item_head * ih;
-    struct key * next_key;
-
-    if (reiserfs_search_by_key_3 (s, key, path) == ITEM_FOUND) {
-    	ih = get_ih (path);
-
-	if (!is_direct_ih (ih) && !is_indirect_ih (ih))
-	    return DIRECTORY_FOUND;
-
-	path->pos_in_item = 0;
-	return POSITION_FOUND;
-    }
-
-    bh = get_bh (path);
-    ih = get_ih (path);
-
-
-    if (PATH_LAST_POSITION (path) == 0) {
-	/* previous item does not exist, that means we are in leftmost leaf of
-	 * the tree */
-	if (!not_of_one_file (&ih->ih_key, key)) {
-	    if (!is_direct_ih (ih) && !is_indirect_ih (ih))
-		return DIRECTORY_FOUND;
-	    return POSITION_NOT_FOUND;
-	}
-	return FILE_NOT_FOUND;
-    }
-
-    /* take previous item */
-    PATH_LAST_POSITION (path) --;
-    ih --;
-
-    if (not_of_one_file (&ih->ih_key, key) || is_stat_data_ih(ih)) {
-	/* previous item belongs to another object or is a stat data, check
-	 * next item */
-	PATH_LAST_POSITION (path) ++;
-	if (PATH_LAST_POSITION (path) < B_NR_ITEMS (bh))
-	    /* next key is in the same node */
-	    next_key = B_N_PKEY (bh, PATH_LAST_POSITION (path));
-	else
-	    next_key = uget_rkey (path);
-	if (next_key == 0 || not_of_one_file (next_key, key)) {
-	    /* there is no any part of such file in the tree */
-	    path->pos_in_item = 0;
-	    return FILE_NOT_FOUND;
-	}
-
-	if (is_direntry_key (next_key)) {
-	    reiserfs_warning (stderr, "usearch_by_position: looking for %k found a directory with the same key\n",
-		      next_key);
-	    return DIRECTORY_FOUND;
-	}
-
-	/* next item is the part of this file */
-	path->pos_in_item = 0;
-	return POSITION_NOT_FOUND;
-    }
-
-    if (is_direntry_ih (ih)) {
-	return DIRECTORY_FOUND;
-    }
-
-    if (is_stat_data_ih(ih)) {
-	PATH_LAST_POSITION (path) ++;
-	return FILE_NOT_FOUND;
-    }
-
-    /* previous item is part of desired file */
-    if (I_K_KEY_IN_ITEM (ih, key, bh->b_size)) {
-	path->pos_in_item = get_offset (key) - get_offset (&ih->ih_key);
-	if (is_indirect_ih (ih) )
-	    path->pos_in_item /= bh->b_size;
-	return POSITION_FOUND;
-    }
-
-    path->pos_in_item = is_indirect_ih (ih) ? I_UNFM_NUM (ih) : get_ih_item_len (ih);
-    return POSITION_NOT_FOUND;
-}
-
-static int comp_dir_entries (const void * p1, const void * p2)
-{
-    __u32 off1, off2;
-
-    off1 = d32_get((__u32 *)p1, 0);
-    off2 = *(__u32 *)p2;
-    
-    if (off1 < off2)
-	return -1;
-    if (off1 > off2)
-	return 1;
-    return 0;
-}
-
-struct key * uget_lkey (struct path * path)
-{
-    int pos, offset = path->path_length;
-    struct buffer_head * bh;
-
-    if (offset < FIRST_PATH_ELEMENT_OFFSET)
-	die ("uget_lkey: illegal offset in the path (%d)", offset);
-
-
-    /* While not higher in path than first element. */
-    while (offset-- > FIRST_PATH_ELEMENT_OFFSET) {
-	if (! buffer_uptodate (PATH_OFFSET_PBUFFER (path, offset)) )
-	    die ("uget_lkey: parent is not uptodate");
-	
-	/* Parent at the path is not in the tree now. */
-	if (! B_IS_IN_TREE (bh = PATH_OFFSET_PBUFFER (path, offset)))
-	    die ("uget_lkey: buffer on the path is not in tree");
-
-	/* Check whether position in the parent is correct. */
-	if ((pos = PATH_OFFSET_POSITION (path, offset)) > B_NR_ITEMS (bh))
-	    die ("uget_lkey: invalid position (%d) in the path", pos);
-
-	/* Check whether parent at the path really points to the child. */
-	if (get_dc_child_blocknr (B_N_CHILD (bh, pos)) != PATH_OFFSET_PBUFFER (path, offset + 1)->b_blocknr)
-	    die ("uget_lkey: invalid block number (%d). Must be %ld",
-		 get_dc_child_blocknr (B_N_CHILD (bh, pos)), PATH_OFFSET_PBUFFER (path, offset + 1)->b_blocknr);
-	
-	/* Return delimiting key if position in the parent is not equal to zero. */
-	if (pos)
-	    return B_N_PDELIM_KEY(bh, pos - 1);
-    }
-
-    /* there is no left delimiting key */
-    return 0;
-}
-
-struct key * uget_rkey (struct path * path)
-{
-    int pos, offset = path->path_length;
-    struct buffer_head * bh;
-
-    if (offset < FIRST_PATH_ELEMENT_OFFSET)
-	die ("uget_rkey: illegal offset in the path (%d)", offset);
-
-    while (offset-- > FIRST_PATH_ELEMENT_OFFSET) {
-	if (! buffer_uptodate (PATH_OFFSET_PBUFFER (path, offset)))
-	    die ("uget_rkey: parent is not uptodate");
-
-	/* Parent at the path is not in the tree now. */
-	if (! B_IS_IN_TREE (bh = PATH_OFFSET_PBUFFER (path, offset)))
-	    die ("uget_rkey: buffer on the path is not in tree");
-
-	/* Check whether position in the parrent is correct. */
-	if ((pos = PATH_OFFSET_POSITION (path, offset)) > B_NR_ITEMS (bh))
-	    die ("uget_rkey: invalid position (%d) in the path", pos);
-
-	/* Check whether parent at the path really points to the child. */
-	if (get_dc_child_blocknr (B_N_CHILD (bh, pos)) != PATH_OFFSET_PBUFFER (path, offset + 1)->b_blocknr)
-	    die ("uget_rkey: invalid block number (%d). Must be %ld",
-		 get_dc_child_blocknr (B_N_CHILD (bh, pos)), PATH_OFFSET_PBUFFER (path, offset + 1)->b_blocknr);
-	
-	/* Return delimiting key if position in the parent is not the last one. */
-	if (pos != B_NR_ITEMS (bh))
-	    return B_N_PDELIM_KEY (bh, pos);
-    }
-    
-    /* there is no right delimiting key */
-    return 0;
-}
-
-struct key * reiserfs_next_key (struct path * path) {
-    if (get_item_pos (path) < B_NR_ITEMS (get_bh (path)) - 1)
-	return B_N_PKEY (get_bh (path), get_item_pos (path) + 1);
-
-    return uget_rkey (path);
-}
-
-
-/* NOTE: this only should be used to look for keys who exists */
-int reiserfs_search_by_entry_key (reiserfs_filsys_t * fs, struct key * key, 
-				  struct path * path)
-{
-    struct buffer_head * bh;
-    int item_pos;
-    struct item_head * ih;
-    struct key tmpkey;
-    __u32 offset;
-
-    if (reiserfs_search_by_key_4 (fs, key, path) == ITEM_FOUND) {
-        path->pos_in_item = 0;
-        return POSITION_FOUND;
-    }
-
-    bh = get_bh (path);
-    item_pos = get_item_pos (path);
-    ih = get_ih (path);
-
-    if (item_pos == 0) {
-	/* key is less than the smallest key in the tree */
-	if (not_of_one_file (&(ih->ih_key), key))
-	    /* there are no items of that directory */
-	    return DIRECTORY_NOT_FOUND;
-
-	if (!is_direntry_ih (ih)) {
-	    reiserfs_panic ("reiserfs_search_by_entry_key: found item "
-			    "is not of directory type %H", ih);
-	}
-
-	/* key we looked for should be here */
-        path->pos_in_item = 0;
-	return POSITION_NOT_FOUND;
-    }
-
-    /* take previous item */
-    item_pos --;
-    ih --;
-    PATH_LAST_POSITION (path) --;
-
-    if (not_of_one_file (&(ih->ih_key), key) || !is_direntry_ih (ih)) {
-        /* previous item belongs to another object or is stat data, check next
-           item */
-
-	item_pos ++;
-	PATH_LAST_POSITION (path) ++;
-
-        if (item_pos < B_NR_ITEMS (bh)) {
-	    /* next item is in the same node */
-	    ih ++;
-            if (not_of_one_file (&(ih->ih_key), key)) {
-		/* there are no items of that directory */
-                path->pos_in_item = 0;
-                return DIRECTORY_NOT_FOUND;
-            }
-
-            if (!is_direntry_ih (ih))
-		reiserfs_panic ("_search_by_entry_key: %k is not a directory",
-				key);
-        } else {
-	    /* next item is in right neighboring node */
-            struct key * next_key = uget_rkey (path);
-
-            if (next_key == 0 || not_of_one_file (next_key, key)) {
-                /* there are no items of that directory */
-                path->pos_in_item = 0;
-                return DIRECTORY_NOT_FOUND;
-            }
-
-            if (!is_direntry_key (next_key))
-		reiserfs_panic ("_search_by_entry_key: %k is not a directory",
-				key);
-
-            /* we got right delimiting key - search for it - the entry will be
-	       pasted in position 0 */
-            copy_key (&tmpkey, next_key);
-            pathrelse (path);
-            if (reiserfs_search_by_key_4 (fs, &tmpkey, path) != ITEM_FOUND || PATH_LAST_POSITION (path) != 0)
-                reiserfs_panic ("_search_by_entry_key: item corresponding to delimiting key %k not found",
-				&tmpkey);
-        }
-
-        /* next item is the part of this directory */
-        path->pos_in_item = 0;
-        return POSITION_NOT_FOUND;
-    }
-
-    /* previous item is part of desired directory */
-    offset = get_key_offset_v1 (key);
-    if (reiserfs_bin_search (&offset, B_I_DEH (bh, ih), get_ih_entry_count (ih),
-			     DEH_SIZE, &(path->pos_in_item), comp_dir_entries) == POSITION_FOUND)
-	return POSITION_FOUND;
-
-    return POSITION_NOT_FOUND;
-}
-
-
-void init_tb_struct (struct tree_balance * tb, reiserfs_filsys_t * fs,
-			     struct path * path, int size)
-{
-    memset (tb, '\0', sizeof(struct tree_balance));
-    tb->tb_fs = fs;
-    tb->tb_path = path;
-
-    PATH_OFFSET_PBUFFER(path, ILLEGAL_PATH_ELEMENT_OFFSET) = NULL;
-    PATH_OFFSET_POSITION(path, ILLEGAL_PATH_ELEMENT_OFFSET) = 0;
-    tb->insert_size[0] = size;
-}
-
-
-int reiserfs_remove_entry (reiserfs_filsys_t * fs, struct key * key)
-{
-    struct path path;
-    struct tree_balance tb;
-    struct item_head * ih;
-    struct reiserfs_de_head * deh;
-
-    if (reiserfs_search_by_entry_key (fs, key, &path) != POSITION_FOUND) {
-	pathrelse (&path);
-	return 1;
-    }
-
-    ih = get_ih (&path);
-    if (get_ih_entry_count (ih) == 1) {
-	init_tb_struct (&tb, fs, &path, -(IH_SIZE + get_ih_item_len (ih)));
-	if (fix_nodes (M_DELETE, &tb, 0) != CARRY_ON) {
-	    unfix_nodes (&tb);
-	    return 1;
-	}
-	do_balance (&tb, 0, 0, M_DELETE, 0);
-	return 0;
-    }
-
-    deh = B_I_DEH (get_bh (&path), ih) + path.pos_in_item;
-    init_tb_struct (&tb, fs, &path, -(DEH_SIZE + entry_length (ih, deh, path.pos_in_item)));
-    if (fix_nodes (M_CUT, &tb, 0) != CARRY_ON) {
-	unfix_nodes (&tb);
-	return 1;
-    }
-    do_balance (&tb, 0, 0, M_CUT, 0);
-    return 0;
-}
-
-
-
-void reiserfs_paste_into_item (reiserfs_filsys_t * fs, struct path * path,
-			       const void * body, int size)
-{
-    struct tree_balance tb;
-  
-    init_tb_struct (&tb, fs, path, size);
-
-    if (fix_nodes (M_PASTE, &tb, 0/*ih*/) != CARRY_ON)
-	reiserfs_panic ("reiserfs_paste_into_item: fix_nodes failed");
-
-    do_balance (&tb, 0, body, M_PASTE, 0/*zero num*/);
-}
-
-
-void reiserfs_insert_item (reiserfs_filsys_t * fs, struct path * path,
-			   struct item_head * ih, const void * body)
-{
-    struct tree_balance tb;
-    
-    init_tb_struct (&tb, fs, path, IH_SIZE + get_ih_item_len(ih));
-    if (fix_nodes (M_INSERT, &tb, ih) != CARRY_ON)
-	die ("reiserfs_insert_item: fix_nodes failed");
-
-    do_balance (&tb, ih, body, M_INSERT, 0/*zero num*/);
-}
-
-
-/*===========================================================================*/
-
-__u32 hash_value (hashf_t func, char * name, int namelen)
-{
-    __u32 res;
-
-    res = func (name, namelen);
-    res = GET_HASH_VALUE(res);
-    if (res == 0)
-	res = 128;
-
-    return res;
-}
-
-
-/* if name is found in a directory - return 1 and set path to the name,
-   otherwise return 0 and pathrelse path */
-int reiserfs_locate_entry (reiserfs_filsys_t * fs, struct key * dir, char * name,
-			   struct path * path)
-{
-    struct key entry_key;
-    struct item_head * ih;
-    struct reiserfs_de_head * deh;
-    int i, retval;
-    struct key * rdkey;
-    
-    set_key_dirid (&entry_key, get_key_dirid (dir));
-    set_key_objectid (&entry_key, get_key_objectid (dir));
-    set_key_offset_v1 (&entry_key, 0);
-    set_key_uniqueness (&entry_key, DIRENTRY_UNIQUENESS);
-
- 
-    if (reiserfs_search_by_entry_key (fs, &entry_key, path) == DIRECTORY_NOT_FOUND) {
-	pathrelse (path);
-	return 0;
-    }
-
-    do {
-	ih = get_ih (path);
-	deh = B_I_DEH (get_bh (path), ih) + path->pos_in_item;
-	for (i = path->pos_in_item; i < get_ih_entry_count (ih); i ++, deh ++) {
-	    /* the name in directory has the same hash as the given name */
-	    if ((name_in_entry_length (ih, deh, i) == (int)strlen (name)) &&
-		!memcmp (name_in_entry (deh, i), name, strlen (name))) {
-		path->pos_in_item = i;
-		return 1;
-	    }
-	}
-
-	rdkey = uget_rkey (path);
-	if (!rdkey || not_of_one_file (rdkey, dir)) {
-	    pathrelse (path);
-	    return 0;
-	}
-	
-	if (!is_direntry_key (rdkey))
-	    reiserfs_panic ("reiserfs_locate_entry: can not find name in broken directory yet");
-
-	/* first name of that item may be a name we are looking for */
-	entry_key = *rdkey;
-	pathrelse (path);
-	retval = reiserfs_search_by_entry_key (fs, &entry_key, path);
-	if (retval != POSITION_FOUND)
-	    reiserfs_panic ("reiserfs_locate_entry: wrong delimiting key in the tree");
-
-    } while (1);
-
-    return 0;
-    
-}
-
-
-/* returns 0 if name is not found in a directory and 1 if name is
-   found. Stores key found in the entry in 'key'. Returns minimal not used
-   generation counter in 'min_gen_counter'. dies if found object is not a
-   directory. */
-int reiserfs_find_entry (reiserfs_filsys_t * fs, struct key * dir, char * name, 
-			 unsigned int * min_gen_counter, struct key * key)
-{
-    struct key entry_key;
-    int retval;
-    int i;
-    INITIALIZE_PATH (path);
-    struct item_head * ih;
-    struct reiserfs_de_head * deh;
-    struct key * rdkey;
-    __u32 hash;
-
-
-    set_key_dirid (&entry_key, get_key_dirid (dir));
-    set_key_objectid (&entry_key, get_key_objectid (dir));
-    if (!strcmp (name, "."))
-	hash = DOT_OFFSET;
-    else if (!strcmp (name, ".."))
-	hash = DOT_DOT_OFFSET;
-    else
-	hash = hash_value (reiserfs_hash (fs), name, strlen (name));
-    set_key_offset_v1 (&entry_key, hash);
-    set_key_uniqueness (&entry_key, DIRENTRY_UNIQUENESS);
-
-    *min_gen_counter = 0;
-
-    if (reiserfs_search_by_entry_key (fs, &entry_key, &path) == DIRECTORY_NOT_FOUND) {
-	pathrelse (&path);
-	return 0;
-    }
-	
-    do {
-	ih = get_ih (&path);
-	deh = B_I_DEH (get_bh (&path), ih) + path.pos_in_item;
-	for (i = path.pos_in_item; i < get_ih_entry_count (ih); i ++, deh ++) {
-	    if (GET_HASH_VALUE (get_deh_offset (deh)) != GET_HASH_VALUE (hash)) {
-		/* all entries having the same hash were scanned */
-		pathrelse (&path);
-		return 0;
-	    }
-			
-	    if (GET_GENERATION_NUMBER (get_deh_offset (deh)) == *min_gen_counter)
-		(*min_gen_counter) ++;
-			
-	    if ((name_in_entry_length (ih, deh, i) == (int)strlen (name)) &&
-	        (!memcmp (name_in_entry (deh, i), name, strlen (name)))) {
-		/* entry found in the directory */
-		if (key) {
-		    memset (key, 0, sizeof (struct key));
-		    set_key_dirid (key, get_deh_dirid (deh));
-		    set_key_objectid (key, get_deh_objectid (deh));
-		}
-		pathrelse (&path);
-		return 1;//get_deh_objectid (deh) ? get_deh_objectid (deh) : 1;
-	    }
-	}
-		
-	rdkey = uget_rkey (&path);
-	if (!rdkey || not_of_one_file (rdkey, dir)) {
-	    pathrelse (&path);
-	    return 0;
-	}
-		
-	if (!is_direntry_key (rdkey))
-	    reiserfs_panic ("reiserfs_find_entry: can not find name in broken directory yet");
-		
-	/* next item is the item of the directory we are looking name in */
-	if (GET_HASH_VALUE (get_offset (rdkey)) != hash) {
-	    /* but there is no names with given hash */
-	    pathrelse (&path);
-	    return 0;
-	}
-		
-	/* first name of that item may be a name we are looking for */
-	entry_key = *rdkey;
-	pathrelse (&path);
-	retval = reiserfs_search_by_entry_key (fs, &entry_key, &path);
-	if (retval != POSITION_FOUND)
-	    reiserfs_panic ("reiserfs_find_entry: wrong delimiting key in the tree");
-		
-    } while (1);
-    
-    return 0;
-}
-
-
-/* compose directory entry: dir entry head and name itself */
-char * make_entry (char * entry, char * name, struct key * key, __u32 offset)
-{
-    struct reiserfs_de_head * deh;
-    __u16 state;
-	
-    if (!entry)
-	entry = getmem (DEH_SIZE + ROUND_UP (strlen (name)));
-
-    memset (entry, 0, DEH_SIZE + ROUND_UP (strlen (name)));
-    deh = (struct reiserfs_de_head *)entry;
-	
-    set_deh_location (deh, 0);
-    set_deh_offset (deh, offset);
-    state = (1 << DEH_Visible2);
-    set_deh_state (deh, state);
-	
-    /* key of object entry will point to */
-    set_deh_dirid (deh, get_key_dirid (key));
-    set_deh_objectid (deh, get_key_objectid (key));
-	
-    memcpy ((char *)(deh + 1), name, strlen (name));
-    return entry;
-}
-
-
-/* add new name into a directory. If it exists in a directory - do
-   nothing */
-int reiserfs_add_entry (reiserfs_filsys_t * fs, struct key * dir, char * name, int name_len,
-			struct key * key, __u16 fsck_need)
-{
-    struct item_head entry_ih = {{0,}, };
-    char * entry;
-    int retval;
-    INITIALIZE_PATH(path);
-    unsigned int gen_counter;
-    int item_len;
-    __u32 hash;
-
-    if (reiserfs_find_entry (fs, dir, name, &gen_counter, 0))
-	/* entry is in the directory already or directory was not found */
-	return 0;
-
-    /* compose entry key to look for its place in the tree */
-    set_key_dirid (&(entry_ih.ih_key), get_key_dirid (dir));
-    set_key_objectid (&(entry_ih.ih_key), get_key_objectid (dir));
-    if (!strcmp (name, "."))
-	hash = DOT_OFFSET;
-    else if (!strcmp (name, ".."))
-	hash = DOT_DOT_OFFSET;
-    else
-	hash = hash_value (reiserfs_hash (fs), name, strlen (name)) + gen_counter;
-    set_key_offset_v1 (&(entry_ih.ih_key), hash);
-    set_key_uniqueness (&(entry_ih.ih_key), DIRENTRY_UNIQUENESS);
-
-    set_ih_key_format (&entry_ih, KEY_FORMAT_1);
-    set_ih_entry_count (&entry_ih, 1);
-
-    item_len = DEH_SIZE + name_len;
-/*
-    if (get_reiserfs_format (fs->fs_ondisk_sb) == REISERFS_FORMAT_3_5)
-	item_len = DEH_SIZE + strlen (name);
-    else if (get_reiserfs_format (fs->fs_ondisk_sb) == REISERFS_FORMAT_3_6)
-	item_len = DEH_SIZE + ROUND_UP (strlen (name));
-    else
-	reiserfs_panic ("unknown fs format");
-*/
-
-    set_ih_item_len (&entry_ih, item_len);
-
-    /* fsck may need to insert item which was not reached yet */
-    set_ih_flags (&entry_ih, fsck_need);
-
-    entry = make_entry (0, name, key, get_offset (&(entry_ih.ih_key)));
-
-    retval = reiserfs_search_by_entry_key (fs, &(entry_ih.ih_key), &path);
-    switch (retval) {
-    case POSITION_NOT_FOUND:
-	reiserfs_paste_into_item (fs, &path, entry, item_len);
-	break;
-
-    case DIRECTORY_NOT_FOUND:
-	set_deh_location ((struct reiserfs_de_head *)entry, DEH_SIZE);
-	reiserfs_insert_item (fs, &path, &entry_ih, entry);
-	break;
-
-    default:
-	reiserfs_panic ("reiserfs_add_entry: looking for %k (inserting name \"%s\") "
-			"search_by_entry_key returned %d",
-			&(entry_ih.ih_key), name, retval);
-    }
-
-    freemem (entry);
-    return item_len;
-}
-
-
-void copy_key (void * to, void * from)
-{
-    memcpy (to, from, KEY_SIZE);
-}
-
-
-void copy_short_key (void * to, void * from)
-{
-    memcpy (to, from, SHORT_KEY_SIZE);
-}
-
-
-void copy_item_head(void * p_v_to, void * p_v_from)
-{
-    memcpy (p_v_to, p_v_from, IH_SIZE);
-}
-
-
-/* inserts new or old stat data of a directory (unreachable, nlinks == 0) */
-int create_dir_sd (reiserfs_filsys_t * fs,
-		    struct path * path, struct key * key,
-		    void (*modify_item)(struct item_head *, void *))
-{
-    struct item_head ih;
-    struct stat_data sd;
-    int key_format;
-
-    if (fs->fs_format == REISERFS_FORMAT_3_5)
-	key_format = KEY_FORMAT_1;
-    else
-	key_format = KEY_FORMAT_2;
-
-    memset(&sd, 0, sizeof(sd));
-    make_dir_stat_data (fs->fs_blocksize, key_format, get_key_dirid (key),
-			get_key_objectid (key), &ih, &sd);
-
-    if (modify_item)
-	modify_item (&ih, &sd);
-#if 0
-    /* set nlink count to 0 and make the item unreachable */
-    zero_nlink (&ih, &sd, 0);
-    mark_item_unreachable (&ih);
-#endif
-    reiserfs_insert_item (fs, path, &ih, &sd);
-    return key_format;
-}
-
-
-
-void make_sure_root_dir_exists (reiserfs_filsys_t * fs,
-				void (*modify_item)(struct item_head *, void *),
-				int ih_flags)
-{
-    INITIALIZE_PATH (path);
-
-
-    /* is there root's stat data */
-    if (reiserfs_search_by_key_4 (fs, &root_dir_key, &path) == ITEM_NOT_FOUND) {	
-	root_dir_format = create_dir_sd (fs, &path, &root_dir_key, modify_item);
-    } else {
-    	struct item_head * ih = get_ih (&path);
-    	
-    	if (!is_stat_data_ih (ih))
-	    reiserfs_panic ("It must be root's stat data %k\n", &ih->ih_key);
-	
-        root_dir_format = (get_ih_item_len (get_ih (&path)) == SD_SIZE) ? KEY_FORMAT_2 : KEY_FORMAT_1;
-	pathrelse (&path);
-    }
-
-    /* add "." and ".." if any of them do not exist. Last two
-       parameters say: 0 - entry is not added on lost_found pass and 1
-       - mark item unreachable */
-
-    reiserfs_add_entry (fs, &root_dir_key, ".", name_length (".", root_dir_format),
-    		&root_dir_key, ih_flags);
-    reiserfs_add_entry (fs, &root_dir_key, "..", name_length ("..", root_dir_format),
-    		&parent_root_dir_key, ih_flags);
-}
-
-
-/* we only can use a file for filesystem or journal if it is either not
-   mounted block device or regular file and we are forced to use it */
-int can_we_format_it (char * device_name, int force)
-{
-    mode_t mode;
-    dev_t rdev;
-
-
-    if (misc_device_mounted(device_name) > 0) {
-	/* device looks mounted */
-	reiserfs_warning (stderr, "'%s' looks mounted.", device_name);
-	check_forcing_ask_confirmation (force);
-    }
-
-    mode = misc_device_mode(device_name);
-    rdev = misc_device_rdev(device_name);
-
-    if (!S_ISBLK (mode)) {
-	/* file is not a block device */
-	reiserfs_warning (stderr, "%s is not a block special device\n", device_name);
-	check_forcing_ask_confirmation (force);
-    } else {
-	if ((IDE_DISK_MAJOR (major(rdev)) && minor(rdev) % 64 == 0) ||
-	    (SCSI_BLK_MAJOR (major(rdev)) && minor(rdev) % 16 == 0)) {
-	    /* /dev/hda or similar */
-	    reiserfs_warning (stderr, "%s is entire device, not just one partition!\n",
-		    device_name);
-	    check_forcing_ask_confirmation (force);
-	}
-    }
-
-    return 1;
-}
-
-int create_badblock_bitmap (reiserfs_filsys_t * fs, char * badblocks_file) {
-    FILE * fd;
-    char buf[128];
-    __u32 blocknr;
-    int count;
-
-    fs->fs_badblocks_bm = reiserfs_create_bitmap(get_sb_block_count(fs->fs_ondisk_sb));
-    reiserfs_bitmap_zero (fs->fs_badblocks_bm);
-
-    if (!badblocks_file)
-	return 0;
-    
-    fd = fopen (badblocks_file, "r");
-
-    if (fd == NULL) {
-        fprintf (stderr, "%s: Failed to open the given badblock file '%s'.\n\n",
-        	__FUNCTION__, badblocks_file);
-        return 1;
-    }
-
-
-    while (!feof (fd)) {
-	if (fgets(buf, sizeof(buf), fd) == NULL)
-	    break;
-	count = sscanf(buf, "%u", &blocknr);
-	
-	if (count <= 0)
-	    continue;
-
-	if (blocknr >= get_sb_block_count (fs->fs_ondisk_sb)) {
-	    fprintf (stderr, "%s: block number (%u) points out of fs size "
-		     "(%u).\n", __FUNCTION__, blocknr, 
-		     get_sb_block_count(fs->fs_ondisk_sb));
-	} else if (not_data_block (fs, blocknr)) {
-	    fprintf (stderr, "%s: block number (%u) belongs to system "
-		     "reiserfs area. It cannot be relocated.\n", 
-		     __FUNCTION__, blocknr);
-	    return 1;
-	} else {
-	    reiserfs_bitmap_set_bit (fs->fs_badblocks_bm, blocknr);
-	} 
-    }
-
-    fclose (fd);
-
-    return 0;
-}
-
-void badblock_list(reiserfs_filsys_t * fs, badblock_func_t action, void *data) {
-    struct path badblock_path;
-    struct key rd_key = badblock_key;
-    struct key *key;
-    
-    badblock_path.path_length = ILLEGAL_PATH_ELEMENT_OFFSET;
-    set_type_and_offset (KEY_FORMAT_2, &badblock_key, 1, TYPE_INDIRECT);
-    
-    while (1) {
-	    if (reiserfs_search_by_key_4 (fs, &rd_key, &badblock_path) == IO_ERROR) {
-		fprintf (stderr, "%s: Some problems while searching by the key "
-			 "occured. Probably due to tree corruptions.\n",
-			 __FUNCTION__);
-		pathrelse (&badblock_path);
-		break;
-	    }
-		    
-
-	    if (get_blkh_nr_items (B_BLK_HEAD (get_bh (&badblock_path))) <= 
-		PATH_LAST_POSITION (&badblock_path)) 
-	    {
-		pathrelse (&badblock_path);
-		break;
-	    }
-
-	    rd_key = get_ih(&badblock_path)->ih_key;
-
-	    if (get_key_dirid(&rd_key) != BADBLOCK_DIRID || 
-		get_key_objectid(&rd_key) != BADBLOCK_OBJID ||
-		!KEY_IS_INDIRECT_KEY(&rd_key)) 
-	    {
-		pathrelse (&badblock_path);
-		break;
-	    }
-	
-	    if ((key = reiserfs_next_key(&badblock_path)))
-		rd_key = *key;
-	    else
-	        memset(&rd_key, 0, sizeof(rd_key));
-	    
-	    action(fs, &badblock_path, data);
-
-	    if (get_key_dirid(&rd_key) == 0)
-		break;
-    }
-}
-
-static void callback_badblock_rm(reiserfs_filsys_t *fs,
-				 struct path *badblock_path, 
-				 void *data) 
-{
-	struct tree_balance tb;
-	struct item_head * tmp_ih;
-
-	tmp_ih = get_ih(badblock_path);
-	memset (get_item (badblock_path), 0, get_ih_item_len (tmp_ih));
-
-	init_tb_struct (&tb, fs, badblock_path, 
-			-(IH_SIZE + get_ih_item_len(PATH_PITEM_HEAD(badblock_path))));
-
-	if (fix_nodes (M_DELETE, &tb, 0) != CARRY_ON)
-		die ("%s: fix_nodes failed", __FUNCTION__);
-
-	do_balance (/*tb.transaction_handle,*/ &tb, 0, 0, M_DELETE, 0/*zero num*/);
-}
-
-void mark_badblock(reiserfs_filsys_t *fs, 
-		   struct path *badblock_path, 
-		   void *data) 
-{
-	struct item_head *tmp_ih;
-	__u32 *ind_item;
-	__u32 i;
-
-	if (!fs->fs_badblocks_bm)
-	    create_badblock_bitmap(fs, NULL);
-	
-	tmp_ih = get_ih(badblock_path);
-	ind_item = (__u32 *)get_item(badblock_path);
-
-	for (i = 0; i < I_UNFM_NUM(tmp_ih); i++) {
-		reiserfs_bitmap_set_bit(fs->fs_badblocks_bm, 
-					d32_get(ind_item, i));
-	}
-	
-	pathrelse (badblock_path);
-}
-
-void add_badblock_list (reiserfs_filsys_t * fs, int replace) {
-    struct tree_balance tb;
-    struct path badblock_path;
-    struct item_head badblock_ih;
-    __u32 ni;
-
-    __u64 offset;
-    __u32 i, j;
-
-    if (fs->fs_badblocks_bm == NULL)
-    	return;
-
-    /* delete all items with badblock_key */
-    if (replace)
-	badblock_list(fs, callback_badblock_rm, NULL);
-
-    memset(&badblock_ih, 0, sizeof(badblock_ih));
-    set_ih_key_format (&badblock_ih, KEY_FORMAT_2);
-    set_ih_item_len (&badblock_ih, UNFM_P_SIZE);
-    set_ih_free_space (&badblock_ih, 0);
-    set_ih_location (&badblock_ih, 0);
-    set_key_dirid (&badblock_ih.ih_key, BADBLOCK_DIRID);
-    set_key_objectid (&badblock_ih.ih_key, BADBLOCK_OBJID);
-    set_type (KEY_FORMAT_2, &badblock_ih.ih_key, TYPE_INDIRECT);
-
-    j = 0;
-
-    /* insert all badblock pointers */
-    for (i = 0; i < fs->fs_badblocks_bm->bm_bit_size; i++) {
-        int retval;
-
-	if (!reiserfs_bitmap_test_bit (fs->fs_badblocks_bm, i))	
-	    continue;
-	
-	offset = j * fs->fs_blocksize + 1;
-	set_offset (KEY_FORMAT_2, &badblock_ih.ih_key, offset);
-	ni = cpu_to_le32 (i);
-	
-	retval = usearch_by_position (fs, &badblock_ih.ih_key, 
-				      key_format(&badblock_ih.ih_key), 
-				      &badblock_path);
-
-	switch (retval) {
-	case (FILE_NOT_FOUND):
-		init_tb_struct (&tb, fs, &badblock_path, 
-				IH_SIZE + get_ih_item_len(&badblock_ih));
-		
-		if (fix_nodes (M_INSERT, &tb, &badblock_ih) != CARRY_ON)
-		    die ("reiserfsck_insert_item: fix_nodes failed");
-		
-		do_balance (&tb, &badblock_ih, (void *)&ni , M_INSERT, 0);
-
-		break;
-	
-	case (POSITION_NOT_FOUND):
-	case (POSITION_FOUND):
-		/* Insert the new item to the found position. */
-	
-		init_tb_struct (&tb, fs, &badblock_path, UNFM_P_SIZE);
-		
-		if (fix_nodes (M_PASTE, &tb, 0) != CARRY_ON)
-		    die ("reiserfsck_paste_into_item: fix_nodes failed");
-
-		do_balance (&tb, 0, (const char *)&ni, M_PASTE, 0);
-		break;
-	}
-	
-	j++;
-    }
-}
diff --git a/reiserfscore/stree.c b/reiserfscore/stree.c
deleted file mode 100644
index 389c692..0000000
--- a/reiserfscore/stree.c
+++ /dev/null
@@ -1,415 +0,0 @@
-/*
- *  Copyright 1996-2004 by Hans Reiser, licensing governed by 
- *  reiserfsprogs/README
- */
-
-/*
- *  Written by Anatoly P. Pinchuk pap@namesys.botik.ru
- *  Programm System Institute
- *  Pereslavl-Zalessky Russia
- */
-
-/*
- *  This file contains functions dealing with internal tree
- *
- * comp_keys
- * comp_short_keys
- * bin_search
- * get_lkey
- * get_rkey
- * key_in_buffer
- * decrement_bcount
- * decrement_counters_in_path
- * pathrelse
- * search_by_key
- * search_for_position_by_key
- * comp_items
- * prepare_for_delete_or_cut
- * calc_deleted_bytes_number
- * init_tb_struct
- * reiserfs_delete_item
- * indirect_to_direct
- * maybe_indirect_to_direct
- * reiserfs_cut_from_item
- * reiserfs_cut_dir_entry
- * reiserfs_paste_into_item
- * reiserfs_insert_item
- */
-#include "includes.h"
-
-
-/* Does the buffer contain a disk block which is in the tree. */
-inline int B_IS_IN_TREE (struct buffer_head * p_s_bh)
-{
-    return ( get_blkh_level (B_BLK_HEAD (p_s_bh)) != FREE_LEVEL );
-}
-
-
-/*
- Compare keys using REISERFS_SHORT_KEY_LEN fields.
- Returns:  -1 if key1 < key2
-            0 if key1 = key2
-            1 if key1 > key2
-*/
-
-int comp_short_keys (const void * k1, const void * k2)
-{
-    int n_key_length = REISERFS_SHORT_KEY_LEN;
-    __u32 * p_s_key1 = (__u32 *)k1;
-    __u32 * p_s_key2 = (__u32 *)k2;
-    __u32 u1, u2;
-
-    for( ; n_key_length--; ++p_s_key1, ++p_s_key2 ) {
-	u1 = d32_get(p_s_key1, 0) ;
-	u2 = d32_get(p_s_key2, 0) ;
-	if ( u1 < u2 )
-	    return -1;
-	if ( u1 > u2 )
-	    return 1;
-    }
-
-    return 0;
-}
-
-
-int comp_keys_3 (const void * p1, const void * p2)
-{
-    int retval;
-    const struct key * k1 = p1;
-    const struct key * k2 = p2;
-    loff_t off1, off2;
-
-    retval = comp_short_keys (k1, k2);
-    if (retval)
-	return retval;
-    off1 = get_offset(k1) ;
-    off2 = get_offset(k2) ;
-    if (off1 < off2)
-	return -1;
-
-    if (off1 > off2)
-	return 1;
-
-    return 0;
-}
-
-
-/*
- Compare keys using all 4 key fields.
- Returns:  -1 if key1 < key2
-            0 if key1 = key2
-            1 if key1 > key2
-*/
-int comp_keys (const void * p1, const void * p2)
-{
-    int retval;
-    const struct key * k1 = p1;
-    const struct key * k2 = p2;
-    __u32 u1, u2;
-
-    retval = comp_keys_3 (k1, k2);
-    if (retval)
-	return retval;
-
-    u1 = get_type (k1);
-    u2 = get_type (k2);
-
-    if (u1 < u2)
-        return -1;
-
-    if (u1 > u2)
-        return 1;
-
-    return 0;
-}
-
-
-/**************************************************************************
- *  Binary search toolkit function                                        *
- *  Search for an item in the array by the item key                       *
- *  Returns:    1 if found,  0 if not found;                              *
- *        *p_n_pos = number of the searched element if found, else the    *
- *        number of the first element that is larger than p_v_key.        *
- **************************************************************************/
-/* For those not familiar with binary search: n_lbound is the leftmost item that it
- could be, n_rbound the rightmost item that it could be.  We examine the item
- halfway between n_lbound and n_rbound, and that tells us either that we can increase
- n_lbound, or decrease n_rbound, or that we have found it, or if n_lbound <= n_rbound that
- there are no possible items, and we have not found it. With each examination we
- cut the number of possible items it could be by one more than half rounded down,
- or we find it. */
-inline	int bin_search (
-              void    * p_v_key,    /* Key to search for.                   */
-	      void    * p_v_base,   /* First item in the array.             */
-	      int       p_n_num,    /* Number of items in the array.        */
-	      int       p_n_width,  /* Item size in the array.
-				       searched. Lest the reader be
-				       confused, note that this is crafted
-				       as a general function, and when it
-				       is applied specifically to the array
-				       of item headers in a node, p_n_width
-				       is actually the item header size not
-				       the item size.                      */
-	      int     * p_n_pos     /* Number of the searched for element. */
-            ) {
-    int   n_rbound, n_lbound, n_j;
-
-    for ( n_j = ((n_rbound = p_n_num - 1) + (n_lbound = 0))/2; n_lbound <= n_rbound; n_j = (n_rbound + n_lbound)/2 )
-	switch( COMP_KEYS((struct key *)((char * )p_v_base + n_j * p_n_width), p_v_key) )  {
-	case -1: n_lbound = n_j + 1; continue;
-	case  1: n_rbound = n_j - 1; continue;
-	case  0: *p_n_pos = n_j;     return ITEM_FOUND; /* Key found in the array.  */
-	}
-
-    /* bin_search did not find given key, it returns position of key,
-     that is minimal and greater than the given one. */
-    *p_n_pos = n_lbound;
-    return ITEM_NOT_FOUND;
-}
-
-/* Minimal possible key. It is never in the tree. */
-struct key  MIN_KEY = {0, 0, {{0, 0},}};
-
-/* Maximal possible key. It is never in the tree. */
-struct key  MAX_KEY = {0xffffffff, 0xffffffff, {{0xffffffff, 0xffffffff},}};
-
-
-/* Get delimiting key of the buffer by looking for it in the buffers in the
-   path, starting from the bottom of the path, and going upwards.  We must
-   check the path's validity at each step.  If the key is not in the path,
-   there is no delimiting key in the tree (buffer is first or last buffer in
-   tree), and in this case we return a special key, either MIN_KEY or
-   MAX_KEY. */
-struct key * get_lkey (struct path * p_s_chk_path,
-		       reiserfs_filsys_t * fs)
-{
-    struct reiserfs_super_block * sb;
-    int  n_position, n_path_offset = p_s_chk_path->path_length;
-    struct buffer_head  * p_s_parent;
-  
-    sb = fs->fs_ondisk_sb;
-
-    /* While not higher in path than first element. */
-    while ( n_path_offset-- > FIRST_PATH_ELEMENT_OFFSET ) {
-	/* Parent at the path is not in the tree now. */
-	if ( ! B_IS_IN_TREE(p_s_parent = PATH_OFFSET_PBUFFER(p_s_chk_path, n_path_offset)) )
-	    return &MAX_KEY;
-	/* Check whether position in the parent is correct. */
-	if ( (n_position = PATH_OFFSET_POSITION(p_s_chk_path, n_path_offset)) > B_NR_ITEMS(p_s_parent) )
-	    return &MAX_KEY;
-	/* Check whether parent at the path really points to the child. */
-	if ( get_dc_child_blocknr (B_N_CHILD (p_s_parent, n_position)) !=
-	     PATH_OFFSET_PBUFFER(p_s_chk_path, n_path_offset + 1)->b_blocknr )
-	    return &MAX_KEY;
-	/* Return delimiting key if position in the parent is not equal to zero. */
-	if ( n_position )
-	    return B_N_PDELIM_KEY(p_s_parent, n_position - 1);
-    }
-    /* Return MIN_KEY if we are in the root of the buffer tree. */
-    if ( PATH_OFFSET_PBUFFER(p_s_chk_path, FIRST_PATH_ELEMENT_OFFSET)->b_blocknr ==
-	 get_sb_root_block (sb) )
-	return &MIN_KEY;
-    return  &MAX_KEY;
-}
-
-
-/* Get delimiting key of the buffer at the path and its right neighbor. */
-struct key * get_rkey (struct path * p_s_chk_path,
-		       reiserfs_filsys_t * fs)
-{
-    struct reiserfs_super_block * sb;
-    int                   n_position,
-	n_path_offset = p_s_chk_path->path_length;
-    struct buffer_head  * p_s_parent;
-
-    sb = fs->fs_ondisk_sb;
-
-    while ( n_path_offset-- > FIRST_PATH_ELEMENT_OFFSET ) {
-	/* Parent at the path is not in the tree now. */
-	if ( ! B_IS_IN_TREE(p_s_parent = PATH_OFFSET_PBUFFER(p_s_chk_path, n_path_offset)) )
-	    return &MIN_KEY;
-	/* Check whether position in the parrent is correct. */
-	if ( (n_position = PATH_OFFSET_POSITION(p_s_chk_path, n_path_offset)) > B_NR_ITEMS(p_s_parent) )
-	    return &MIN_KEY;
-	/* Check whether parent at the path really points to the child. */
-	if ( get_dc_child_blocknr (B_N_CHILD (p_s_parent, n_position)) !=
-	     PATH_OFFSET_PBUFFER(p_s_chk_path, n_path_offset + 1)->b_blocknr )
-	    return &MIN_KEY;
-	/* Return delimiting key if position in the parent is not the last one. */
-	if ( n_position != B_NR_ITEMS(p_s_parent) )
-	    return B_N_PDELIM_KEY(p_s_parent, n_position);
-    }
-    /* Return MAX_KEY if we are in the root of the buffer tree. */
-    if ( PATH_OFFSET_PBUFFER(p_s_chk_path, FIRST_PATH_ELEMENT_OFFSET)->b_blocknr ==
-	 get_sb_root_block (sb) )
-	return &MAX_KEY;
-    return  &MIN_KEY;
-}
-
-
-/* Check whether a key is contained in the tree rooted from a buffer at a
-   path.  This works by looking at the left and right delimiting keys for the
-   buffer in the last path_element in the path.  These delimiting keys are
-   stored at least one level above that buffer in the tree. If the buffer is
-   the first or last node in the tree order then one of the delimiting keys
-   may be absent, and in this case get_lkey and get_rkey return a special key
-   which is MIN_KEY or MAX_KEY. */
-static  inline  int key_in_buffer (
-    struct path         * p_s_chk_path, /* Path which should be checked.  */
-    struct key          * p_s_key,      /* Key which should be checked.   */
-    reiserfs_filsys_t  * fs        /* Super block pointer.           */
-    ) {
-
-    if ( COMP_KEYS(get_lkey(p_s_chk_path, fs), p_s_key) == 1 )
-	return 0;
-    if ( COMP_KEYS(p_s_key, get_rkey(p_s_chk_path, fs)) != -1 )
-	return 0;
-    return 1;
-}
-
-/* Release all buffers in the path. */
-void  pathrelse (struct path * p_s_search_path) 
-{
-    int n_path_offset = p_s_search_path->path_length;
-    
-    while ( n_path_offset > ILLEGAL_PATH_ELEMENT_OFFSET )
-	brelse(PATH_OFFSET_PBUFFER(p_s_search_path, n_path_offset--));
-
-    p_s_search_path->path_length = ILLEGAL_PATH_ELEMENT_OFFSET;
-}
-
-
-/**************************************************************************
- * Algorithm   SearchByKey                                                *
- *             look for item in internal tree on the disk by its key      *
- * Input:  p_s_sb   -  super block                                        *
- *         p_s_key  - pointer to the key to search                        *
- * Output: true value -  1 - found,  0 - not found                        *
- *         p_s_search_path - path from the root to the needed leaf        *
- **************************************************************************/
-
-/* This function fills up the path from the root to the leaf as it
-   descends the tree looking for the key.  It uses reiserfs_bread to
-   try to find buffers in the cache given their block number.  If it
-   does not find them in the cache it reads them from disk.  For each
-   node search_by_key finds using reiserfs_bread it then uses
-   bin_search to look through that node.  bin_search will find the
-   position of the block_number of the next node if it is looking
-   through an internal node.  If it is looking through a leaf node
-   bin_search will find the position of the item which has key either
-   equal to given key, or which is the maximal key less than the given
-   key.  search_by_key returns a path that must be checked for the
-   correctness of the top of the path but need not be checked for the
-   correctness of the bottom of the path */
-int search_by_key (reiserfs_filsys_t * fs,
-		   struct key * p_s_key,        /* Key to search */
-		   struct path * p_s_search_path,/* This structure was
-						    allocated and
-						    initialized by the
-						    calling
-						    function. It is
-						    filled up by this
-						    function.  */
-		   int  n_stop_level)   /* How far down the tree to search.*/
-{
-    struct reiserfs_super_block * sb;
-    int n_block_number,
-	expected_level,
-	n_block_size    = fs->fs_blocksize;
-    struct buffer_head  *       p_s_bh;
-    struct path_element *       p_s_last_element;
-    int				n_retval;
-
-
-    sb = fs->fs_ondisk_sb;
-    n_block_number = get_sb_root_block (sb);
-    expected_level = get_sb_tree_height (sb);
-    
-    /* As we add each node to a path we increase its count.  This
-       means that we must be careful to release all nodes in a path
-       before we either discard the path struct or re-use the path
-       struct, as we do here. */
-    pathrelse (p_s_search_path);
-
-
-    /* With each iteration of this loop we search through the items in
-       the current node, and calculate the next current node(next path
-       element) for the next iteration of this loop.. */
-    while ( 1 ) {
-
-	/* prep path to have another element added to it. */
-	p_s_last_element = PATH_OFFSET_PELEMENT(p_s_search_path, ++p_s_search_path->path_length);
-	expected_level --;
-
-	/* Read the next tree node, and set the last element in the
-           path to have a pointer to it. */
-	if ( ! (p_s_bh = p_s_last_element->pe_buffer =
-		bread (fs->fs_dev, n_block_number, n_block_size)) ) {
-	    p_s_search_path->path_length --;
-	    pathrelse(p_s_search_path);
-	    return IO_ERROR;
-	}
-
-	/* It is possible that schedule occured. We must check whether
-	   the key to search is still in the tree rooted from the
-	   current buffer. If not then repeat search from the root. */
-	if (!B_IS_IN_TREE (p_s_bh) || 
-	    ! key_in_buffer(p_s_search_path, p_s_key, fs))
-	    reiserfs_panic ("search_by_key: something wrong with the tree");
-
-	/* make sure, that the node contents look like a node of
-           certain level */
-	if (!is_tree_node (p_s_bh, expected_level)) {
-	    print_block (stderr, 0, p_s_bh, 3, -1, -1);
-	    reiserfs_panic ("search_by_key: expected level %d", expected_level);
-	}
-
-	/* ok, we have acquired next formatted node in the tree */
-	n_retval = bin_search (p_s_key, B_N_PITEM_HEAD(p_s_bh, 0), B_NR_ITEMS(p_s_bh),
-			       is_leaf_node (p_s_bh) ? IH_SIZE : KEY_SIZE, &(p_s_last_element->pe_position));
-	if (get_blkh_level (B_BLK_HEAD (p_s_bh)) == n_stop_level)
-	    return n_retval;
-
-	/* we are not in the stop level */
-	if (n_retval == ITEM_FOUND)
-	    /* item has been found, so we choose the pointer which is
-               to the right of the found one */
-	    p_s_last_element->pe_position++;
-
-	/* if item was not found we choose the position which is to
-	   the left of the found item. This requires no code,
-	   bin_search did it already.*/
-
-	/* So we have chosen a position in the current node which is
-	   an internal node.  Now we calculate child block number by
-	   position in the node. */
-	n_block_number = get_dc_child_blocknr (B_N_CHILD (p_s_bh, p_s_last_element->pe_position));
-    }
-}
-
-
-int bin_search_in_dir_item (struct item_head * ih, struct reiserfs_de_head * deh, 
-			    struct key * key, int * pos_in_item)
-{
-    int rbound, lbound, j;
-
-    lbound = 0;
-    rbound = get_ih_entry_count (ih) - 1;
-
-    for (j = (rbound + lbound) / 2; lbound <= rbound; j = (rbound + lbound) / 2) {
-	if (get_offset (key) < get_deh_offset (deh + j)) {
-	    rbound = j - 1;
-	    continue;
-	}
-	if (get_offset (key) > get_deh_offset (deh + j)) {
-	    lbound = j + 1;
-	    continue;
-	}
-	/* key found */
-	*pos_in_item = j;
-	return POSITION_FOUND;
-    }
-    
-    *pos_in_item = lbound;
-    return POSITION_NOT_FOUND;
-}
diff --git a/reiserfsprogs.spec b/reiserfsprogs.spec
index f824b91..debf448 100644
--- a/reiserfsprogs.spec
+++ b/reiserfsprogs.spec
@@ -1,68 +1,44 @@
-%define reiserfsprogsversion 3.6.19
+Name: reiserfsprogs
+Version: 3.6.20
+Release: 1
+Summary: Utilities for reiserfs filesystems
+License: GPL
+Group: System Environment/Base
+URL: http://www.namesys.com/
+Source: reiserfsprogs-%{version}.tar.gz
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
 
-Vendor:       Hans Reiser
-Distribution: Hans Reiser
-Name:         reiserfsprogs
-Release:      1
-Copyright:    2004 Hans Reiser
-Group:        Unsorted
-
-Packager:     anthon@mnt.org
-
-Version:      %{reiserfsprogsversion}
-Summary:      utilities belonging to the Reiser filesystem
-Source:       reiserfsprogs-%{reiserfsprogsversion}.tar.gz
-BuildRoot:    %{_tmppath}/rpmbuildroot-%{name}
 %description
-
-The reiserfsprogs package contains programs for creating (mkreiserfs),
-checking and correcting any inconsistencies (reiserfsck) and resizing
-(resize_reiserfs) of a reiserfs filesystem.
-
-Authors:
---------
-Hans Reiser <reiser@namesys.com>
-Vitaly Fertman <vitaly@namesys.com>
-Alexander Zarochentcev <zam@namesys.com>
-Vladimir Saveliev <monstr@namesys.com>
+The reiserfsprogs package contains utilities for manipulating
+reiserfs filesystems.
 
 %prep
-# Jeff Johnson states that RPM doesn't delete obviouse crap like / if 
-# buildroot is set differently since RPM 3.0.4 (rpm mailing list 2001-04-10)
-    rm -rf $RPM_BUILD_ROOT
-%setup -q -n reiserfsprogs-%{reiserfsprogsversion}
-# %patch
-%build
-  MANDIR=$(dirname $(dirname $(man -w fsck | cut -d ' ' -f 1)))
-  ./configure --prefix="" --mandir=$MANDIR
-  %{__make} all
-%install
-  mkdir -p $RPM_BUILD_ROOT/sbin
-  %{__make} DESTDIR=$RPM_BUILD_ROOT install
-# do we need this?
-  cd $RPM_BUILD_ROOT/sbin
-  %{__ln_s} -f reiserfsck fsck.reiserfs
-  %{__ln_s} -f mkreiserfs mkfs.reiserfs
+%setup -q -n reiserfsprogs-3.6.20
 
-# __os_install_post is normally executed after \%install disable it
-%define ___build_post %{nil} 
+%build
+  export CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS"
+  find . -name "config.cache" |xargs rm -f
+  ./configure --sbindir=%{_sbindir} --mandir=%{_mandir}
+
+%install
+  rm -rf $RPM_BUILD_ROOT
+  %{__make} DESTDIR=$RPM_BUILD_ROOT install
+
+# __os_install_post is normally executed after \% install disable it
+%define ___build_post %{nil}
 # explicitly call it now, so manpages get compressed, exec's stripped etc.
 %{?__os_install_post}
 %define __os_install_post %{nil}
+
 # now we have all the files execpt for docs, but their owner is unimportant
 cd $RPM_BUILD_ROOT
 
-%{__rm} -f rpm-filelist
-# we do not have special directories to make
-#find . -type d \
-# | sed '1,2d;s,^\.,\%attr(-\,root\,root) \%dir ,' >> rpm-filelist
-find . -type f \
- | sed 's,^\.,\%attr(-\,root\,root) ,' | fgrep -v rpm-filelist >> rpm-filelist
-find . -type l \
- | sed 's,^\.,\%attr(-\,root\,root) ,' >> rpm-filelist
+%clean
+  rm -rf $RPM_BUILD_ROOT
 
 %post
-CONFIG=/usr/src/linux/.config
+  rm -rf $RPM_BUILD_ROOT
+  CONFIG=/usr/src/linux/.config
 
 if [ -f $CONFIG ] ; then
   source $CONFIG
@@ -78,8 +54,8 @@
   echo -e 'and recompile and reboot your kernel if you cannot use the\nreiserfsprogs utilities'
 fi
 
-%clean
-  %{__rm} -rf $RPM_BUILD_ROOT
-%files -f %{buildroot}/rpm-filelist
+%files
 %defattr(-,root,root)
-%doc README
+%doc AUTHORS COPYING CREDITS INSTALL NEWS README
+%{_sbindir}/*
+%{_mandir}/man8/*.gz
diff --git a/reiserfsprogs.spec.in b/reiserfsprogs.spec.in
new file mode 100644
index 0000000..9ccfae0
--- /dev/null
+++ b/reiserfsprogs.spec.in
@@ -0,0 +1,61 @@
+Name: reiserfsprogs
+Version: @VERSION@
+Release: 1
+Summary: Utilities for reiserfs filesystems
+License: GPL
+Group: System Environment/Base
+URL: http://www.namesys.com/
+Source: reiserfsprogs-%{version}.tar.gz
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
+
+%description
+The reiserfsprogs package contains utilities for manipulating
+reiserfs filesystems.
+
+%prep
+%setup -q -n reiserfsprogs-@VERSION@
+
+%build
+  export CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS"
+  find . -name "config.cache" |xargs rm -f
+  ./configure --sbindir=%{_sbindir} --mandir=%{_mandir}
+
+%install
+  rm -rf $RPM_BUILD_ROOT
+  %{__make} DESTDIR=$RPM_BUILD_ROOT install
+
+# __os_install_post is normally executed after \% install disable it
+%define ___build_post %{nil}
+# explicitly call it now, so manpages get compressed, exec's stripped etc.
+%{?__os_install_post}
+%define __os_install_post %{nil}
+
+# now we have all the files execpt for docs, but their owner is unimportant
+cd $RPM_BUILD_ROOT
+
+%clean
+  rm -rf $RPM_BUILD_ROOT
+
+%post
+  rm -rf $RPM_BUILD_ROOT
+  CONFIG=/usr/src/linux/.config
+
+if [ -f $CONFIG ] ; then
+  source $CONFIG
+fi
+
+if [ -z $CONFIG_REISERFS_FS ] ; then
+  echo -e "\nIn $CONFIG , you probably have to set:"
+  if [ "$CONFIG_EXPERIMENTAL" != "y" ] ; then
+    echo -e 'CONFIG_EXPERIMENTAL=y'
+  fi
+  echo -e 'CONFIG_REISERFS_FS=y\n  or'
+  echo -e 'CONFIG_REISERFS_FS=m'
+  echo -e 'and recompile and reboot your kernel if you cannot use the\nreiserfsprogs utilities'
+fi
+
+%files
+%defattr(-,root,root)
+%doc AUTHORS COPYING CREDITS INSTALL NEWS README
+%{_sbindir}/*
+%{_mandir}/man8/*.gz
diff --git a/resize_reiserfs/Makefile.am b/resize_reiserfs/Makefile.am
deleted file mode 100644
index 24c669a..0000000
--- a/resize_reiserfs/Makefile.am
+++ /dev/null
@@ -1,8 +0,0 @@
-sbin_PROGRAMS = resize_reiserfs
-
-resize_reiserfs_SOURCES = fe.c resize_reiserfs.c do_shrink.c resize.h
-man_MANS = resize_reiserfs.8
-EXTRA_DIST = $(man_MANS)
-
-LDADD = $(top_srcdir)/lib/libmisc.a $(top_srcdir)/reiserfscore/libcore.a
-
diff --git a/resize_reiserfs/Makefile.in b/resize_reiserfs/Makefile.in
deleted file mode 100644
index bfebbf8..0000000
--- a/resize_reiserfs/Makefile.in
+++ /dev/null
@@ -1,457 +0,0 @@
-# Makefile.in generated by automake 1.7.6 from Makefile.am.
-# @configure_input@
-
-# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-# Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
-
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-host_triplet = @host@
-ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-MAKEINFO = @MAKEINFO@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-UUID_LIBS = @UUID_LIBS@
-VERSION = @VERSION@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-datadir = @datadir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-oldincludedir = @oldincludedir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-sbin_PROGRAMS = resize_reiserfs
-
-resize_reiserfs_SOURCES = fe.c resize_reiserfs.c do_shrink.c resize.h
-man_MANS = resize_reiserfs.8
-EXTRA_DIST = $(man_MANS)
-
-LDADD = $(top_srcdir)/lib/libmisc.a $(top_srcdir)/reiserfscore/libcore.a
-subdir = resize_reiserfs
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-sbin_PROGRAMS = resize_reiserfs$(EXEEXT)
-PROGRAMS = $(sbin_PROGRAMS)
-
-am_resize_reiserfs_OBJECTS = fe.$(OBJEXT) resize_reiserfs.$(OBJEXT) \
-	do_shrink.$(OBJEXT)
-resize_reiserfs_OBJECTS = $(am_resize_reiserfs_OBJECTS)
-resize_reiserfs_LDADD = $(LDADD)
-resize_reiserfs_DEPENDENCIES = $(top_srcdir)/lib/libmisc.a \
-	$(top_srcdir)/reiserfscore/libcore.a
-resize_reiserfs_LDFLAGS =
-
-DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/do_shrink.Po ./$(DEPDIR)/fe.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/resize_reiserfs.Po
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-DIST_SOURCES = $(resize_reiserfs_SOURCES)
-
-NROFF = nroff
-MANS = $(man_MANS)
-DIST_COMMON = Makefile.am Makefile.in
-SOURCES = $(resize_reiserfs_SOURCES)
-
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  resize_reiserfs/Makefile
-Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
-sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
-install-sbinPROGRAMS: $(sbin_PROGRAMS)
-	@$(NORMAL_INSTALL)
-	$(mkinstalldirs) $(DESTDIR)$(sbindir)
-	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
-	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-	  if test -f $$p \
-	  ; then \
-	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
-	   echo " $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) $$p $(DESTDIR)$(sbindir)/$$f"; \
-	   $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) $$p $(DESTDIR)$(sbindir)/$$f || exit 1; \
-	  else :; fi; \
-	done
-
-uninstall-sbinPROGRAMS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
-	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
-	  echo " rm -f $(DESTDIR)$(sbindir)/$$f"; \
-	  rm -f $(DESTDIR)$(sbindir)/$$f; \
-	done
-
-clean-sbinPROGRAMS:
-	-test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
-resize_reiserfs$(EXEEXT): $(resize_reiserfs_OBJECTS) $(resize_reiserfs_DEPENDENCIES) 
-	@rm -f resize_reiserfs$(EXEEXT)
-	$(LINK) $(resize_reiserfs_LDFLAGS) $(resize_reiserfs_OBJECTS) $(resize_reiserfs_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT) core *.core
-
-distclean-compile:
-	-rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/do_shrink.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fe.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resize_reiserfs.Po@am__quote@
-
-distclean-depend:
-	-rm -rf ./$(DEPDIR)
-
-.c.o:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
-
-.c.obj:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
-uninstall-info-am:
-
-man8dir = $(mandir)/man8
-install-man8: $(man8_MANS) $(man_MANS)
-	@$(NORMAL_INSTALL)
-	$(mkinstalldirs) $(DESTDIR)$(man8dir)
-	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.8*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
-	  else file=$$i; fi; \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    8*) ;; \
-	    *) ext='8' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst"; \
-	  $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \
-	done
-uninstall-man8:
-	@$(NORMAL_UNINSTALL)
-	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.8*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    8*) ;; \
-	    *) ext='8' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " rm -f $(DESTDIR)$(man8dir)/$$inst"; \
-	  rm -f $(DESTDIR)$(man8dir)/$$inst; \
-	done
-
-ETAGS = etags
-ETAGSFLAGS =
-
-CTAGS = ctags
-CTAGSFLAGS =
-
-tags: TAGS
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	mkid -fID $$unique
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(ETAGS_ARGS)$$tags$$unique" \
-	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	     $$tags $$unique
-
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-
-top_distdir = ..
-distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkinstalldirs) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
-	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS) $(MANS)
-
-installdirs:
-	$(mkinstalldirs) $(DESTDIR)$(sbindir) $(DESTDIR)$(man8dir)
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-rm -f Makefile $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am
-
-distclean: distclean-am
-
-distclean-am: clean-am distclean-compile distclean-depend \
-	distclean-generic distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-man
-
-install-exec-am: install-sbinPROGRAMS
-
-install-info: install-info-am
-
-install-man: install-man8
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-info-am uninstall-man uninstall-sbinPROGRAMS
-
-uninstall-man: uninstall-man8
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-sbinPROGRAMS ctags distclean distclean-compile \
-	distclean-depend distclean-generic distclean-tags distdir dvi \
-	dvi-am info info-am install install-am install-data \
-	install-data-am install-exec install-exec-am install-info \
-	install-info-am install-man install-man8 install-sbinPROGRAMS \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am uninstall-info-am uninstall-man \
-	uninstall-man8 uninstall-sbinPROGRAMS
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/resize_reiserfs/do_shrink.c b/resize_reiserfs/do_shrink.c
deleted file mode 100644
index b1854c8..0000000
--- a/resize_reiserfs/do_shrink.c
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * Copyright 2000-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#include "resize.h"
-#include <time.h>
-
-static unsigned long int_node_cnt   = 0, int_moved_cnt   = 0;
-static unsigned long leaf_node_cnt  = 0, leaf_moved_cnt  = 0;
-static unsigned long unfm_node_cnt  = 0, unfm_moved_cnt  = 0;
-static unsigned long total_node_cnt = 0;
-static unsigned long total_moved_cnt = 0;
-
-static unsigned long unused_block;
-static unsigned long blocks_used;
-static int block_count_mismatch = 0;
-
-static reiserfs_bitmap_t * bmp;
-static struct reiserfs_super_block * ondisk_sb;
-
-/* abnornal exit from block reallocation process */
-static void quit_resizer(reiserfs_filsys_t * fs)
-{
-	/* save changes to bitmap blocks */
-	reiserfs_close (fs);
-	/* leave fs in ERROR state */
-	reiserfs_exit(1, "fs shrinking was not completed successfully, "
-		      "run reiserfsck.");
-}
-
-/* block moving */
-static unsigned long move_generic_block(reiserfs_filsys_t * fs, 
-					unsigned long block, 
-					unsigned long bnd, int h)
-{
-    struct buffer_head * bh, * bh2;
-
-	/* primitive fsck */
-	if (block > get_sb_block_count(ondisk_sb)) {
-		fprintf(stderr, "resize_reiserfs: invalid block number "
-			"(%lu) found.\n", block);
-		quit_resizer(fs);
-	}
-	
-	/* progress bar, 3D style :) */
-	if (opt_verbose)
-	    print_how_far(stderr, &total_node_cnt, blocks_used, 1, 0);
-	else
-	    total_node_cnt ++;
-
-	/* infinite loop check */
-	if( total_node_cnt > blocks_used && !block_count_mismatch) {
-		fputs("resize_reiserfs: warning: block count exeeded\n",stderr);
-		block_count_mismatch = 1;
-	}
-
-	if (block < bnd) /* block will not be moved */
-		return 0;
-	
-	/* move wrong block */ 
-	bh = bread(fs->fs_dev, block, fs->fs_blocksize);
-
-	if (!bh)
-	    reiserfs_exit (1, "move_generic_block: bread failed.\n");
-
-	reiserfs_bitmap_find_zero_bit(bmp, &unused_block);
-	if (unused_block == 0 || unused_block >= bnd) {
-		fputs ("resize_reiserfs: can\'t find free block\n", stderr);
-		quit_resizer(fs);
-	}
-
-	/* blocknr changing */
-	bh2 = getblk(fs->fs_dev, unused_block, fs->fs_blocksize);
-	memcpy(bh2->b_data, bh->b_data, bh2->b_size);
-	reiserfs_bitmap_clear_bit(bmp, block);
-	reiserfs_bitmap_set_bit(bmp, unused_block);
-
-	brelse(bh);
-	mark_buffer_uptodate(bh2,1);
-	mark_buffer_dirty(bh2);
-	bwrite(bh2);
-	brelse(bh2);
-
-	total_moved_cnt++;
-	return unused_block;
-}
-
-static unsigned long move_unformatted_block(reiserfs_filsys_t * fs, unsigned long block, unsigned long bnd, int h)
-{
-	unsigned long b;
-	unfm_node_cnt++;
-	b = move_generic_block(fs, block, bnd, h);
-	if (b)
-		unfm_moved_cnt++;
-	return b;		
-}
-
-
-/* recursive function processing all tree nodes */
-static unsigned long move_formatted_block(reiserfs_filsys_t * fs, unsigned long block, unsigned long bnd, int h)
-{
-	struct buffer_head * bh;
-	struct item_head *ih;
-	unsigned long new_blocknr = 0;
-	int node_is_internal = 0;
-	unsigned int i, j;
-	
-	bh = bread(fs->fs_dev, block, fs->fs_blocksize);
-	if (!bh)
-	    reiserfs_exit (1, "move_formatted_block: bread failed");
-	
-	if (is_leaf_node (bh)) {
-		
-		leaf_node_cnt++;
-		
-		for (i = 0; i < B_NR_ITEMS(bh); i++) {
-			ih = B_N_PITEM_HEAD(bh, i);
-			
-			/* skip the bad blocks. */
-			if (get_key_objectid (&ih->ih_key) == BADBLOCK_OBJID &&
-			    get_key_dirid (&ih->ih_key) == BADBLOCK_DIRID)
-				continue;
-			
-			if (is_indirect_ih(ih)) {
-				__u32 * indirect;
-
-				indirect = (__u32 *)B_I_PITEM (bh, ih);
-				for (j = 0; j < I_UNFM_NUM(ih); j++) {
-					unsigned long  unfm_block;
-
-					if (d32_get (indirect, j) == 0) /* hole */
-						continue;
-					unfm_block = move_unformatted_block(fs, d32_get (indirect, j), bnd, h + 1);
-					if (unfm_block) {
-						d32_put (indirect, j, unfm_block);
-						mark_buffer_dirty(bh);
-					}
-				}
-			}	
-		}
-	} else if (is_internal_node (bh)) { /* internal node */
-		
-		int_node_cnt++;
-		node_is_internal = 1;
-		
-		for (i=0; i <= B_NR_ITEMS(bh); i++) {
-			unsigned long moved_block;
-			moved_block = move_formatted_block(fs, get_dc_child_blocknr (B_N_CHILD (bh, i)), bnd, h+1);
-			if (moved_block) {
-			    	set_dc_child_blocknr (B_N_CHILD (bh, i), moved_block);
-				mark_buffer_dirty(bh);
-			}
-		}	
-	} else {
-		DIE ("block (%lu) has invalid format\n", block);
-	}
-	
-	if (buffer_dirty(bh)) {
-		mark_buffer_uptodate(bh,1);
-		bwrite(bh);
-	}
-	
-	brelse(bh);	
-	
-	new_blocknr = move_generic_block(fs, block, bnd, h);
-	if (new_blocknr) {
-		if (node_is_internal)
-			int_moved_cnt++;
-		else
-			leaf_moved_cnt++;
-	}
-	
-	return new_blocknr;
-}
-
-int shrink_fs(reiserfs_filsys_t * fs, long long int blocks)
-{
-	unsigned long n_root_block;
-	unsigned int bmap_nr_new;
-	unsigned long bad_count;
-	
-	ondisk_sb = fs->fs_ondisk_sb;
-	
-	
-	bmap_nr_new = (blocks - 1) / (8 * fs->fs_blocksize) + 1;
-
-	/* is shrinking possible ? */
-	if (get_sb_block_count(ondisk_sb) - blocks > 
-	    get_sb_free_blocks(ondisk_sb) + get_sb_bmap_nr(ondisk_sb) - 
-	    bmap_nr_new) 
-	{
-	    fprintf(stderr, "resize_reiserfs: can\'t shrink fs; too many "
-		"blocks already allocated\n");
-	    return -1;
-	}
-
-	/* warn about alpha version */
-	{
-		int c;
-
-		printf(
-		    "You are running BETA version of reiserfs shrinker.\n"
-		    "This version is only for testing or VERY CAREFUL use.\n"
-		    "Backup of you data is recommended.\n\n"
-		    "Do you want to continue? [y/N]:"
-		);
-		fflush(stdout);
-		c = getchar();
-		if (c != 'y' && c != 'Y')
-			exit(1);
-	}
-
-	reiserfs_reopen(fs, O_RDWR);
-	if (reiserfs_open_ondisk_bitmap (fs))
-	    reiserfs_exit(1, "cannot open ondisk bitmap");
-	bmp = fs->fs_bitmap2;
-	ondisk_sb = fs->fs_ondisk_sb;
-
-	set_sb_fs_state (fs->fs_ondisk_sb, FS_ERROR);
-	mark_buffer_uptodate(fs->fs_super_bh, 1);
-	mark_buffer_dirty(fs->fs_super_bh);
-	bwrite(fs->fs_super_bh);
-
-	/* calculate number of data blocks */		
-	blocks_used = 
-	    get_sb_block_count(fs->fs_ondisk_sb)
-	    - get_sb_free_blocks(fs->fs_ondisk_sb)
-	    - get_sb_bmap_nr(fs->fs_ondisk_sb)
-	    - get_jp_journal_size(sb_jp (fs->fs_ondisk_sb))
-	    - REISERFS_DISK_OFFSET_IN_BYTES / fs->fs_blocksize
-	    - 2; /* superblock itself and 1 descriptor after the journal */
-
-	unused_block = 1;
-
-	if (opt_verbose) {
-		printf("Processing the tree: ");
-		fflush(stdout);
-	}
-
-	n_root_block = move_formatted_block(fs, get_sb_root_block(ondisk_sb), 
-	    blocks, 0);
-	
-	if (n_root_block)
-	    set_sb_root_block (ondisk_sb, n_root_block);
-
-	if (opt_verbose)
-	    printf ("\n\nnodes processed (moved):\n"
-		    "int        %lu (%lu),\n"
-		    "leaves     %lu (%lu),\n" 
-		    "unfm       %lu (%lu),\n"
-		    "total      %lu (%lu).\n\n",
-		    int_node_cnt, int_moved_cnt,
-		    leaf_node_cnt, leaf_moved_cnt, 
-		    unfm_node_cnt, unfm_moved_cnt,
-		    (unsigned long)total_node_cnt, total_moved_cnt);
-
-	if (block_count_mismatch) {
-	    fprintf(stderr, "resize_reiserfs: data block count %lu"
-		    " doesn\'t match data block count %lu from super block\n",
-		    (unsigned long)total_node_cnt, blocks_used);
-	}
-
-	{
-	    unsigned long l;
-
-	    /* make sure that none of truncated block are in use */
-	    printf("check for used blocks in truncated region\n");
-	    for (l = blocks; l < fs->fs_bitmap2->bm_bit_size; l ++) {
-		if ((l % (fs->fs_blocksize * 8)) == 0)
-		    continue;
-		if (reiserfs_bitmap_test_bit (fs->fs_bitmap2, l))
-		    printf ("<%lu>", l);
-	    }
-	    printf("\n");
-	}
-
-	badblock_list(fs, mark_badblock, NULL);
-	
-	if (fs->fs_badblocks_bm) {
-		bad_count = reiserfs_bitmap_ones(fs->fs_badblocks_bm);
-		reiserfs_shrink_bitmap (fs->fs_badblocks_bm, blocks);
-		add_badblock_list(fs, 1);
-		bad_count -= reiserfs_bitmap_ones(fs->fs_badblocks_bm);
-	} else
-		bad_count = 0;
-	
-	reiserfs_shrink_bitmap (fs->fs_bitmap2, blocks);
-
-	set_sb_free_blocks (ondisk_sb, get_sb_free_blocks(ondisk_sb)
-			    - (get_sb_block_count(ondisk_sb) - blocks)
-			    + (get_sb_bmap_nr(ondisk_sb) - bmap_nr_new)
-			    + bad_count);
-	set_sb_block_count (ondisk_sb, blocks);
-	set_sb_bmap_nr (ondisk_sb, bmap_nr_new);
-
-	return 0;
-}
diff --git a/resize_reiserfs/resize.h b/resize_reiserfs/resize.h
deleted file mode 100644
index 0d901f8..0000000
--- a/resize_reiserfs/resize.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* 
- * Copyright 2000-2004 by Hans Reiser, licensing governed by 
- * reiserfsprogs/README
- */
-
-#ifndef HAVE_CONFIG_H
-#  include "config.h"
-#endif
-
-#include "io.h"
-#include "misc.h"
-#include "reiserfs_lib.h"
-
-#include "../version.h"
-
-#if __GLIBC__ >= 2
-#include <sys/mount.h>
-#else
-#include <linux/fs.h>
-#endif
-
-#include <errno.h>
-#include <string.h>
-
-#include <mntent.h>
-
-#define print_usage_and_exit() {\
- fprintf (stderr, "Usage: %s  [-s[+|-]#[G|M|K]] [-fqvV] device\n\n", argv[0]);\
- exit(16);\
-}
-
-#define DIE(form, args...) die("%s: " form "\n", g_progname , ## args)
-
-/* reiserfs_resize.c */
-extern struct buffer_head * g_sb_bh;
-extern char * g_progname;
-
-extern int opt_force;
-extern int opt_verbose;
-extern int opt_nowrite;
-extern int opt_safe;
-
-/* fe.c */
-extern int resize_fs_online(char * devname, long long int blocks);
-
-/* do_shrink.c */
-extern int shrink_fs(reiserfs_filsys_t *, long long int blocks);
diff --git a/tune/Makefile.am b/tune/Makefile.am
deleted file mode 100644
index a046409..0000000
--- a/tune/Makefile.am
+++ /dev/null
@@ -1,9 +0,0 @@
-sbin_PROGRAMS = reiserfstune
-
-reiserfstune_SOURCES = tune.c tune.h
-
-man_MANS = reiserfstune.8
-EXTRA_DIST = $(man_MANS)
-
-LDADD = $(top_srcdir)/lib/libmisc.a $(top_srcdir)/reiserfscore/libcore.a
-
diff --git a/tune/Makefile.in b/tune/Makefile.in
deleted file mode 100644
index 6275e8f..0000000
--- a/tune/Makefile.in
+++ /dev/null
@@ -1,454 +0,0 @@
-# Makefile.in generated by automake 1.7.6 from Makefile.am.
-# @configure_input@
-
-# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-# Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
-
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-host_triplet = @host@
-ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-MAKEINFO = @MAKEINFO@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-UUID_LIBS = @UUID_LIBS@
-VERSION = @VERSION@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-datadir = @datadir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-oldincludedir = @oldincludedir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-sbin_PROGRAMS = reiserfstune
-
-reiserfstune_SOURCES = tune.c tune.h
-
-man_MANS = reiserfstune.8
-EXTRA_DIST = $(man_MANS)
-
-LDADD = $(top_srcdir)/lib/libmisc.a $(top_srcdir)/reiserfscore/libcore.a
-subdir = tune
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-sbin_PROGRAMS = reiserfstune$(EXEEXT)
-PROGRAMS = $(sbin_PROGRAMS)
-
-am_reiserfstune_OBJECTS = tune.$(OBJEXT)
-reiserfstune_OBJECTS = $(am_reiserfstune_OBJECTS)
-reiserfstune_LDADD = $(LDADD)
-reiserfstune_DEPENDENCIES = $(top_srcdir)/lib/libmisc.a \
-	$(top_srcdir)/reiserfscore/libcore.a
-reiserfstune_LDFLAGS =
-
-DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/tune.Po
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-DIST_SOURCES = $(reiserfstune_SOURCES)
-
-NROFF = nroff
-MANS = $(man_MANS)
-DIST_COMMON = Makefile.am Makefile.in
-SOURCES = $(reiserfstune_SOURCES)
-
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  tune/Makefile
-Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
-sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
-install-sbinPROGRAMS: $(sbin_PROGRAMS)
-	@$(NORMAL_INSTALL)
-	$(mkinstalldirs) $(DESTDIR)$(sbindir)
-	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
-	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-	  if test -f $$p \
-	  ; then \
-	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
-	   echo " $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) $$p $(DESTDIR)$(sbindir)/$$f"; \
-	   $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) $$p $(DESTDIR)$(sbindir)/$$f || exit 1; \
-	  else :; fi; \
-	done
-
-uninstall-sbinPROGRAMS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
-	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
-	  echo " rm -f $(DESTDIR)$(sbindir)/$$f"; \
-	  rm -f $(DESTDIR)$(sbindir)/$$f; \
-	done
-
-clean-sbinPROGRAMS:
-	-test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
-reiserfstune$(EXEEXT): $(reiserfstune_OBJECTS) $(reiserfstune_DEPENDENCIES) 
-	@rm -f reiserfstune$(EXEEXT)
-	$(LINK) $(reiserfstune_LDFLAGS) $(reiserfstune_OBJECTS) $(reiserfstune_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT) core *.core
-
-distclean-compile:
-	-rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tune.Po@am__quote@
-
-distclean-depend:
-	-rm -rf ./$(DEPDIR)
-
-.c.o:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
-
-.c.obj:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
-uninstall-info-am:
-
-man8dir = $(mandir)/man8
-install-man8: $(man8_MANS) $(man_MANS)
-	@$(NORMAL_INSTALL)
-	$(mkinstalldirs) $(DESTDIR)$(man8dir)
-	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.8*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
-	  else file=$$i; fi; \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    8*) ;; \
-	    *) ext='8' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst"; \
-	  $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \
-	done
-uninstall-man8:
-	@$(NORMAL_UNINSTALL)
-	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.8*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    8*) ;; \
-	    *) ext='8' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " rm -f $(DESTDIR)$(man8dir)/$$inst"; \
-	  rm -f $(DESTDIR)$(man8dir)/$$inst; \
-	done
-
-ETAGS = etags
-ETAGSFLAGS =
-
-CTAGS = ctags
-CTAGSFLAGS =
-
-tags: TAGS
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	mkid -fID $$unique
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(ETAGS_ARGS)$$tags$$unique" \
-	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	     $$tags $$unique
-
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-
-top_distdir = ..
-distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkinstalldirs) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
-	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS) $(MANS)
-
-installdirs:
-	$(mkinstalldirs) $(DESTDIR)$(sbindir) $(DESTDIR)$(man8dir)
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-rm -f Makefile $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am
-
-distclean: distclean-am
-
-distclean-am: clean-am distclean-compile distclean-depend \
-	distclean-generic distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-man
-
-install-exec-am: install-sbinPROGRAMS
-
-install-info: install-info-am
-
-install-man: install-man8
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-info-am uninstall-man uninstall-sbinPROGRAMS
-
-uninstall-man: uninstall-man8
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-sbinPROGRAMS ctags distclean distclean-compile \
-	distclean-depend distclean-generic distclean-tags distdir dvi \
-	dvi-am info info-am install install-am install-data \
-	install-data-am install-exec install-exec-am install-info \
-	install-info-am install-man install-man8 install-sbinPROGRAMS \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am uninstall-info-am uninstall-man \
-	uninstall-man8 uninstall-sbinPROGRAMS
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/utils/Makefile.am b/utils/Makefile.am
new file mode 100644
index 0000000..f9dcdcf
--- /dev/null
+++ b/utils/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = mkfs debugfs fsck tune resizer
diff --git a/utils/Makefile.in b/utils/Makefile.in
new file mode 100644
index 0000000..97efb7c
--- /dev/null
+++ b/utils/Makefile.in
@@ -0,0 +1,446 @@
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = utils
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-exec-recursive install-info-recursive \
+	install-recursive installcheck-recursive installdirs-recursive \
+	pdf-recursive ps-recursive uninstall-info-recursive \
+	uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PROGS_LDFLAGS = @PROGS_LDFLAGS@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+SUBDIRS = mkfs debugfs fsck tune resizer
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  utils/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  utils/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+uninstall-info-am:
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+	@failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(mkdir_p) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	    distdir=`$(am__cd) $(distdir) && pwd`; \
+	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$top_distdir" \
+	        distdir="$$distdir/$$subdir" \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+	clean clean-generic clean-recursive ctags ctags-recursive \
+	distclean distclean-generic distclean-recursive distclean-tags \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-exec \
+	install-exec-am install-info install-info-am install-man \
+	install-strip installcheck installcheck-am installdirs \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	maintainer-clean-recursive mostlyclean mostlyclean-generic \
+	mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/utils/debugfs/Makefile.am b/utils/debugfs/Makefile.am
new file mode 100644
index 0000000..14a994d
--- /dev/null
+++ b/utils/debugfs/Makefile.am
@@ -0,0 +1,28 @@
+sbin_PROGRAMS		 = debugfs.reiserfs
+
+man_MANS		 = debugfs.reiserfs.8
+EXTRA_DIST		 = debugfs.reiserfs.8
+
+debugfs_reiserfs_SOURCES = debugreiserfs.c pack.c unpack.c stat.c corruption.c \
+			   scan.c recover.c debugreiserfs.h
+debugfs_reiserfs_LDADD	 = $(top_builddir)/libreiserfs/libreiserfs-static.a \
+			   $(top_builddir)/libutil/libutil-static.a         \
+			   $(top_builddir)/libmisc/libmisc-static.a
+debugfs_reiserfs_LDFLAGS = @PROGS_LDFLAGS@
+debugfs_reiserfs_CFLAGS	 = @CFLAGS@
+
+INCLUDES		 = -I$(top_srcdir)/include
+
+uninstall-debugreiserfs:
+	if test -f $(DESTDIR)$(sbindir)/debugreiserfs; then \
+		rm -f $(DESTDIR)$(sbindir)/debugreiserfs; \
+	fi;
+
+install-debugreiserfs:
+	if test -f $(DESTDIR)$(sbindir)/debugfs.reiserfs; then \
+		rm -f $(DESTDIR)$(sbindir)/debugreiserfs; \
+		ln $(DESTDIR)$(sbindir)/debugfs.reiserfs $(DESTDIR)$(sbindir)/debugreiserfs; \
+	fi;
+
+install-data-local: install-debugreiserfs
+uninstall-local: uninstall-debugreiserfs
diff --git a/utils/debugfs/Makefile.in b/utils/debugfs/Makefile.in
new file mode 100644
index 0000000..35c8bf9
--- /dev/null
+++ b/utils/debugfs/Makefile.in
@@ -0,0 +1,600 @@
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+SOURCES = $(debugfs_reiserfs_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+sbin_PROGRAMS = debugfs.reiserfs$(EXEEXT)
+subdir = utils/debugfs
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)"
+sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(sbin_PROGRAMS)
+am_debugfs_reiserfs_OBJECTS =  \
+	debugfs_reiserfs-debugreiserfs.$(OBJEXT) \
+	debugfs_reiserfs-pack.$(OBJEXT) \
+	debugfs_reiserfs-unpack.$(OBJEXT) \
+	debugfs_reiserfs-stat.$(OBJEXT) \
+	debugfs_reiserfs-corruption.$(OBJEXT) \
+	debugfs_reiserfs-scan.$(OBJEXT) \
+	debugfs_reiserfs-recover.$(OBJEXT)
+debugfs_reiserfs_OBJECTS = $(am_debugfs_reiserfs_OBJECTS)
+debugfs_reiserfs_DEPENDENCIES =  \
+	$(top_builddir)/libreiserfs/libreiserfs-static.a \
+	$(top_builddir)/libutil/libutil-static.a \
+	$(top_builddir)/libmisc/libmisc-static.a
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(debugfs_reiserfs_SOURCES)
+DIST_SOURCES = $(debugfs_reiserfs_SOURCES)
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PROGS_LDFLAGS = @PROGS_LDFLAGS@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+man_MANS = debugfs.reiserfs.8
+EXTRA_DIST = debugfs.reiserfs.8
+debugfs_reiserfs_SOURCES = debugreiserfs.c pack.c unpack.c stat.c corruption.c \
+			   scan.c recover.c debugreiserfs.h
+
+debugfs_reiserfs_LDADD = $(top_builddir)/libreiserfs/libreiserfs-static.a \
+			   $(top_builddir)/libutil/libutil-static.a         \
+			   $(top_builddir)/libmisc/libmisc-static.a
+
+debugfs_reiserfs_LDFLAGS = @PROGS_LDFLAGS@
+debugfs_reiserfs_CFLAGS = @CFLAGS@
+INCLUDES = -I$(top_srcdir)/include
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  utils/debugfs/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  utils/debugfs/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-sbinPROGRAMS: $(sbin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(sbindir)" || $(mkdir_p) "$(DESTDIR)$(sbindir)"
+	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(sbindir)/$$f'"; \
+	   $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(sbindir)/$$f" || exit 1; \
+	  else :; fi; \
+	done
+
+uninstall-sbinPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(sbindir)/$$f"; \
+	done
+
+clean-sbinPROGRAMS:
+	-test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
+debugfs.reiserfs$(EXEEXT): $(debugfs_reiserfs_OBJECTS) $(debugfs_reiserfs_DEPENDENCIES) 
+	@rm -f debugfs.reiserfs$(EXEEXT)
+	$(LINK) $(debugfs_reiserfs_LDFLAGS) $(debugfs_reiserfs_OBJECTS) $(debugfs_reiserfs_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debugfs_reiserfs-corruption.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debugfs_reiserfs-debugreiserfs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debugfs_reiserfs-pack.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debugfs_reiserfs-recover.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debugfs_reiserfs-scan.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debugfs_reiserfs-stat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debugfs_reiserfs-unpack.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+debugfs_reiserfs-debugreiserfs.o: debugreiserfs.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -MT debugfs_reiserfs-debugreiserfs.o -MD -MP -MF "$(DEPDIR)/debugfs_reiserfs-debugreiserfs.Tpo" -c -o debugfs_reiserfs-debugreiserfs.o `test -f 'debugreiserfs.c' || echo '$(srcdir)/'`debugreiserfs.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/debugfs_reiserfs-debugreiserfs.Tpo" "$(DEPDIR)/debugfs_reiserfs-debugreiserfs.Po"; else rm -f "$(DEPDIR)/debugfs_reiserfs-debugreiserfs.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='debugreiserfs.c' object='debugfs_reiserfs-debugreiserfs.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -c -o debugfs_reiserfs-debugreiserfs.o `test -f 'debugreiserfs.c' || echo '$(srcdir)/'`debugreiserfs.c
+
+debugfs_reiserfs-debugreiserfs.obj: debugreiserfs.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -MT debugfs_reiserfs-debugreiserfs.obj -MD -MP -MF "$(DEPDIR)/debugfs_reiserfs-debugreiserfs.Tpo" -c -o debugfs_reiserfs-debugreiserfs.obj `if test -f 'debugreiserfs.c'; then $(CYGPATH_W) 'debugreiserfs.c'; else $(CYGPATH_W) '$(srcdir)/debugreiserfs.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/debugfs_reiserfs-debugreiserfs.Tpo" "$(DEPDIR)/debugfs_reiserfs-debugreiserfs.Po"; else rm -f "$(DEPDIR)/debugfs_reiserfs-debugreiserfs.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='debugreiserfs.c' object='debugfs_reiserfs-debugreiserfs.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -c -o debugfs_reiserfs-debugreiserfs.obj `if test -f 'debugreiserfs.c'; then $(CYGPATH_W) 'debugreiserfs.c'; else $(CYGPATH_W) '$(srcdir)/debugreiserfs.c'; fi`
+
+debugfs_reiserfs-pack.o: pack.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -MT debugfs_reiserfs-pack.o -MD -MP -MF "$(DEPDIR)/debugfs_reiserfs-pack.Tpo" -c -o debugfs_reiserfs-pack.o `test -f 'pack.c' || echo '$(srcdir)/'`pack.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/debugfs_reiserfs-pack.Tpo" "$(DEPDIR)/debugfs_reiserfs-pack.Po"; else rm -f "$(DEPDIR)/debugfs_reiserfs-pack.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pack.c' object='debugfs_reiserfs-pack.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -c -o debugfs_reiserfs-pack.o `test -f 'pack.c' || echo '$(srcdir)/'`pack.c
+
+debugfs_reiserfs-pack.obj: pack.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -MT debugfs_reiserfs-pack.obj -MD -MP -MF "$(DEPDIR)/debugfs_reiserfs-pack.Tpo" -c -o debugfs_reiserfs-pack.obj `if test -f 'pack.c'; then $(CYGPATH_W) 'pack.c'; else $(CYGPATH_W) '$(srcdir)/pack.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/debugfs_reiserfs-pack.Tpo" "$(DEPDIR)/debugfs_reiserfs-pack.Po"; else rm -f "$(DEPDIR)/debugfs_reiserfs-pack.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pack.c' object='debugfs_reiserfs-pack.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -c -o debugfs_reiserfs-pack.obj `if test -f 'pack.c'; then $(CYGPATH_W) 'pack.c'; else $(CYGPATH_W) '$(srcdir)/pack.c'; fi`
+
+debugfs_reiserfs-unpack.o: unpack.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -MT debugfs_reiserfs-unpack.o -MD -MP -MF "$(DEPDIR)/debugfs_reiserfs-unpack.Tpo" -c -o debugfs_reiserfs-unpack.o `test -f 'unpack.c' || echo '$(srcdir)/'`unpack.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/debugfs_reiserfs-unpack.Tpo" "$(DEPDIR)/debugfs_reiserfs-unpack.Po"; else rm -f "$(DEPDIR)/debugfs_reiserfs-unpack.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='unpack.c' object='debugfs_reiserfs-unpack.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -c -o debugfs_reiserfs-unpack.o `test -f 'unpack.c' || echo '$(srcdir)/'`unpack.c
+
+debugfs_reiserfs-unpack.obj: unpack.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -MT debugfs_reiserfs-unpack.obj -MD -MP -MF "$(DEPDIR)/debugfs_reiserfs-unpack.Tpo" -c -o debugfs_reiserfs-unpack.obj `if test -f 'unpack.c'; then $(CYGPATH_W) 'unpack.c'; else $(CYGPATH_W) '$(srcdir)/unpack.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/debugfs_reiserfs-unpack.Tpo" "$(DEPDIR)/debugfs_reiserfs-unpack.Po"; else rm -f "$(DEPDIR)/debugfs_reiserfs-unpack.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='unpack.c' object='debugfs_reiserfs-unpack.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -c -o debugfs_reiserfs-unpack.obj `if test -f 'unpack.c'; then $(CYGPATH_W) 'unpack.c'; else $(CYGPATH_W) '$(srcdir)/unpack.c'; fi`
+
+debugfs_reiserfs-stat.o: stat.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -MT debugfs_reiserfs-stat.o -MD -MP -MF "$(DEPDIR)/debugfs_reiserfs-stat.Tpo" -c -o debugfs_reiserfs-stat.o `test -f 'stat.c' || echo '$(srcdir)/'`stat.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/debugfs_reiserfs-stat.Tpo" "$(DEPDIR)/debugfs_reiserfs-stat.Po"; else rm -f "$(DEPDIR)/debugfs_reiserfs-stat.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='stat.c' object='debugfs_reiserfs-stat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -c -o debugfs_reiserfs-stat.o `test -f 'stat.c' || echo '$(srcdir)/'`stat.c
+
+debugfs_reiserfs-stat.obj: stat.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -MT debugfs_reiserfs-stat.obj -MD -MP -MF "$(DEPDIR)/debugfs_reiserfs-stat.Tpo" -c -o debugfs_reiserfs-stat.obj `if test -f 'stat.c'; then $(CYGPATH_W) 'stat.c'; else $(CYGPATH_W) '$(srcdir)/stat.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/debugfs_reiserfs-stat.Tpo" "$(DEPDIR)/debugfs_reiserfs-stat.Po"; else rm -f "$(DEPDIR)/debugfs_reiserfs-stat.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='stat.c' object='debugfs_reiserfs-stat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -c -o debugfs_reiserfs-stat.obj `if test -f 'stat.c'; then $(CYGPATH_W) 'stat.c'; else $(CYGPATH_W) '$(srcdir)/stat.c'; fi`
+
+debugfs_reiserfs-corruption.o: corruption.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -MT debugfs_reiserfs-corruption.o -MD -MP -MF "$(DEPDIR)/debugfs_reiserfs-corruption.Tpo" -c -o debugfs_reiserfs-corruption.o `test -f 'corruption.c' || echo '$(srcdir)/'`corruption.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/debugfs_reiserfs-corruption.Tpo" "$(DEPDIR)/debugfs_reiserfs-corruption.Po"; else rm -f "$(DEPDIR)/debugfs_reiserfs-corruption.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='corruption.c' object='debugfs_reiserfs-corruption.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -c -o debugfs_reiserfs-corruption.o `test -f 'corruption.c' || echo '$(srcdir)/'`corruption.c
+
+debugfs_reiserfs-corruption.obj: corruption.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -MT debugfs_reiserfs-corruption.obj -MD -MP -MF "$(DEPDIR)/debugfs_reiserfs-corruption.Tpo" -c -o debugfs_reiserfs-corruption.obj `if test -f 'corruption.c'; then $(CYGPATH_W) 'corruption.c'; else $(CYGPATH_W) '$(srcdir)/corruption.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/debugfs_reiserfs-corruption.Tpo" "$(DEPDIR)/debugfs_reiserfs-corruption.Po"; else rm -f "$(DEPDIR)/debugfs_reiserfs-corruption.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='corruption.c' object='debugfs_reiserfs-corruption.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -c -o debugfs_reiserfs-corruption.obj `if test -f 'corruption.c'; then $(CYGPATH_W) 'corruption.c'; else $(CYGPATH_W) '$(srcdir)/corruption.c'; fi`
+
+debugfs_reiserfs-scan.o: scan.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -MT debugfs_reiserfs-scan.o -MD -MP -MF "$(DEPDIR)/debugfs_reiserfs-scan.Tpo" -c -o debugfs_reiserfs-scan.o `test -f 'scan.c' || echo '$(srcdir)/'`scan.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/debugfs_reiserfs-scan.Tpo" "$(DEPDIR)/debugfs_reiserfs-scan.Po"; else rm -f "$(DEPDIR)/debugfs_reiserfs-scan.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='scan.c' object='debugfs_reiserfs-scan.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -c -o debugfs_reiserfs-scan.o `test -f 'scan.c' || echo '$(srcdir)/'`scan.c
+
+debugfs_reiserfs-scan.obj: scan.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -MT debugfs_reiserfs-scan.obj -MD -MP -MF "$(DEPDIR)/debugfs_reiserfs-scan.Tpo" -c -o debugfs_reiserfs-scan.obj `if test -f 'scan.c'; then $(CYGPATH_W) 'scan.c'; else $(CYGPATH_W) '$(srcdir)/scan.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/debugfs_reiserfs-scan.Tpo" "$(DEPDIR)/debugfs_reiserfs-scan.Po"; else rm -f "$(DEPDIR)/debugfs_reiserfs-scan.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='scan.c' object='debugfs_reiserfs-scan.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -c -o debugfs_reiserfs-scan.obj `if test -f 'scan.c'; then $(CYGPATH_W) 'scan.c'; else $(CYGPATH_W) '$(srcdir)/scan.c'; fi`
+
+debugfs_reiserfs-recover.o: recover.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -MT debugfs_reiserfs-recover.o -MD -MP -MF "$(DEPDIR)/debugfs_reiserfs-recover.Tpo" -c -o debugfs_reiserfs-recover.o `test -f 'recover.c' || echo '$(srcdir)/'`recover.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/debugfs_reiserfs-recover.Tpo" "$(DEPDIR)/debugfs_reiserfs-recover.Po"; else rm -f "$(DEPDIR)/debugfs_reiserfs-recover.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='recover.c' object='debugfs_reiserfs-recover.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -c -o debugfs_reiserfs-recover.o `test -f 'recover.c' || echo '$(srcdir)/'`recover.c
+
+debugfs_reiserfs-recover.obj: recover.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -MT debugfs_reiserfs-recover.obj -MD -MP -MF "$(DEPDIR)/debugfs_reiserfs-recover.Tpo" -c -o debugfs_reiserfs-recover.obj `if test -f 'recover.c'; then $(CYGPATH_W) 'recover.c'; else $(CYGPATH_W) '$(srcdir)/recover.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/debugfs_reiserfs-recover.Tpo" "$(DEPDIR)/debugfs_reiserfs-recover.Po"; else rm -f "$(DEPDIR)/debugfs_reiserfs-recover.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='recover.c' object='debugfs_reiserfs-recover.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(debugfs_reiserfs_CFLAGS) $(CFLAGS) -c -o debugfs_reiserfs-recover.obj `if test -f 'recover.c'; then $(CYGPATH_W) 'recover.c'; else $(CYGPATH_W) '$(srcdir)/recover.c'; fi`
+uninstall-info-am:
+install-man8: $(man8_MANS) $(man_MANS)
+	@$(NORMAL_INSTALL)
+	test -z "$(man8dir)" || $(mkdir_p) "$(DESTDIR)$(man8dir)"
+	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+	for i in $$l2; do \
+	  case "$$i" in \
+	    *.8*) list="$$list $$i" ;; \
+	  esac; \
+	done; \
+	for i in $$list; do \
+	  if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+	  else file=$$i; fi; \
+	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+	  case "$$ext" in \
+	    8*) ;; \
+	    *) ext='8' ;; \
+	  esac; \
+	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
+	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+	  echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+	  $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+	done
+uninstall-man8:
+	@$(NORMAL_UNINSTALL)
+	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+	for i in $$l2; do \
+	  case "$$i" in \
+	    *.8*) list="$$list $$i" ;; \
+	  esac; \
+	done; \
+	for i in $$list; do \
+	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+	  case "$$ext" in \
+	    8*) ;; \
+	    *) ext='8' ;; \
+	  esac; \
+	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
+	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+	  echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+	  rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS)
+installdirs:
+	for dir in "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-man
+
+install-exec-am: install-sbinPROGRAMS
+
+install-info: install-info-am
+
+install-man: install-man8
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-local uninstall-man \
+	uninstall-sbinPROGRAMS
+
+uninstall-man: uninstall-man8
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-sbinPROGRAMS ctags distclean distclean-compile \
+	distclean-generic distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-data-local install-exec \
+	install-exec-am install-info install-info-am install-man \
+	install-man8 install-sbinPROGRAMS install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-info-am uninstall-local uninstall-man \
+	uninstall-man8 uninstall-sbinPROGRAMS
+
+
+uninstall-debugreiserfs:
+	if test -f $(DESTDIR)$(sbindir)/debugreiserfs; then \
+		rm -f $(DESTDIR)$(sbindir)/debugreiserfs; \
+	fi;
+
+install-debugreiserfs:
+	if test -f $(DESTDIR)$(sbindir)/debugfs.reiserfs; then \
+		rm -f $(DESTDIR)$(sbindir)/debugreiserfs; \
+		ln $(DESTDIR)$(sbindir)/debugfs.reiserfs $(DESTDIR)$(sbindir)/debugreiserfs; \
+	fi;
+
+install-data-local: install-debugreiserfs
+uninstall-local: uninstall-debugreiserfs
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/utils/debugfs/corruption.c b/utils/debugfs/corruption.c
new file mode 100644
index 0000000..20cd42f
--- /dev/null
+++ b/utils/debugfs/corruption.c
@@ -0,0 +1,1467 @@
+/*
+ * Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "debugreiserfs.h"
+#include "misc/unaligned.h"
+#include "util/print.h"
+
+#include <time.h>
+
+extern struct reiserfs_fsstat g_stat_info;
+
+int  do_one_ih_corrupt (reiserfs_ih_t * ih, unsigned int nr_bytes);
+int  do_one_ih_random_corrupt (reiserfs_ih_t * ih);
+
+void do_one_corruption_in_one_block (reiserfs_filsys_t * fs, reiserfs_bh_t * bh, char * corruption_command);
+int corrupt_block_header (reiserfs_node_head_t * blkh, unsigned int offset, unsigned int bytes );
+void do_one_block_random_corrupt (reiserfs_bh_t * bh);
+
+static int str2int (char * str, int * res)
+{
+    int val;
+    char * tmp;
+
+    val = (int) strtol (str, &tmp, 0);
+    if (tmp == str)
+		/* could not convert string into a number */
+		return 0;
+    *res = val;
+    return 1;
+}
+
+static int get_rand (double min, double max) {
+
+	/* srand (time (0)); */
+	int ret;
+
+	ret =  (int)(min + (int)((max - min + 1) * rand() / (RAND_MAX + 1.0)));
+	if ((ret < min) || (ret > max))
+		misc_die ("get_rand failed: min %d, max %d, returned %d\n", (int)min, (int)max, ret);
+
+	return ret;
+}
+
+static void edit_journal_params (reiserfs_journal_param_t * jp)
+{
+    char str[256];
+    int num;
+
+    printf ("Journal parameters:\n");
+    printf ("\tDevice: current: %x: new:", reiserfs_jp_get_dev (jp));
+    
+    fgets(str, sizeof(str), stdin);
+    if (str2int (str, &num))
+	    reiserfs_jp_set_dev (jp, num);
+
+    printf ("\tFirst block: current: %d: new:",
+	    reiserfs_jp_get_start (jp));
+    
+    fgets(str, sizeof(str), stdin);
+    if (str2int (str, &num))
+	    reiserfs_jp_set_start (jp, num);
+
+    printf ("\tSize: current: %d: new:", reiserfs_jp_get_size (jp));
+    
+    fgets(str, sizeof(str), stdin);
+    if (str2int (str, &num))
+	    reiserfs_jp_set_size (jp, num);
+
+    printf ("\tMagic number: current: %d: new:", reiserfs_jp_get_magic (jp));
+    
+    fgets(str, sizeof(str), stdin);
+    if (str2int (str, &num))
+	    reiserfs_jp_set_magic (jp, num);
+
+    printf ("\tMax transaction size: current: %d: new:",
+	    reiserfs_jp_get_tlen (jp));
+    
+    fgets(str, sizeof(str), stdin);
+    if (str2int (str, &num))
+	    reiserfs_jp_set_tlen (jp, num);
+
+    printf ("\tMax batch size: current: %d: new:",
+	    reiserfs_jp_get_max_batch (jp));
+    
+    fgets(str, sizeof(str), stdin);
+    if (str2int (str, &num))
+	    reiserfs_jp_set_max_batch (jp, num);
+
+    printf ("\tMax commit age: current: %d: new:",
+	    reiserfs_jp_get_commit_age (jp));
+    
+    fgets(str, sizeof(str), stdin);
+    if (str2int (str, &num))
+	    reiserfs_jp_set_commit_age (jp, num);
+}
+
+/* this allows to edit all super block fields */
+static void edit_super_block (reiserfs_filsys_t * fs)
+{
+    char str[256];
+    int num;
+
+    /* bs_block_count */
+    printf ("\tBlock count: current: %u: new:",
+	    reiserfs_sb_get_blocks (fs->fs_ondisk_sb));
+    
+    fgets(str, sizeof(str), stdin);
+    if (str2int (str, &num))
+	    reiserfs_sb_set_blocks (fs->fs_ondisk_sb, num);
+    
+    /* sb_free_blocks */
+    printf ("\tFree block count: current: %u: new:",
+	    reiserfs_sb_get_free (fs->fs_ondisk_sb));
+    
+    fgets(str, sizeof(str), stdin);
+    if (str2int (str, &num))
+	    reiserfs_sb_set_free (fs->fs_ondisk_sb, num);
+
+    /* sb_root_block */
+    printf ("\tRoot block: current: %u: new:",
+	    reiserfs_sb_get_root (fs->fs_ondisk_sb));
+    
+    fgets(str, sizeof(str), stdin);
+    if (str2int (str, &num))
+	    reiserfs_sb_set_root (fs->fs_ondisk_sb, num);
+
+    /* sb_journal */
+    edit_journal_params (reiserfs_sb_jp (fs->fs_ondisk_sb));
+
+    /* sb_blocksize */
+    printf ("\tBlocksize: current: %u: new:",
+	    reiserfs_sb_get_blksize (fs->fs_ondisk_sb));
+    
+    fgets(str, sizeof(str), stdin);
+    if (str2int (str, &num))
+	    reiserfs_sb_set_blksize (fs->fs_ondisk_sb, num);
+
+    /* sb_oid_maxsize */
+    printf ("\tMax objectid size: current: %u: new:",
+	    reiserfs_sb_get_mapmax (fs->fs_ondisk_sb));
+    
+    fgets(str, sizeof(str), stdin);
+    if (str2int (str, &num))
+	    reiserfs_sb_set_mapmax (fs->fs_ondisk_sb, num);
+
+    /* sb_oid_cursize */
+    printf ("\tCur objectid size: current: %u: new:",
+	    reiserfs_sb_get_mapcur (fs->fs_ondisk_sb));
+    
+    fgets(str, sizeof(str), stdin);
+    if (str2int (str, &num))
+	    reiserfs_sb_set_mapcur (fs->fs_ondisk_sb, num);
+
+    /* sb_state */
+    printf ("\tUmount state: current: %u: new:",
+	    reiserfs_sb_get_umount (fs->fs_ondisk_sb));
+    
+    fgets(str, sizeof(str), stdin);
+    if (str2int (str, &num))
+	    reiserfs_sb_set_umount (fs->fs_ondisk_sb, num);
+
+    /* char s_magic [10]; */
+    printf ("\tMagic: current: \"%s\": new:", fs->fs_ondisk_sb->s_v1.s_magic);
+    
+    fgets(str, sizeof(str), stdin);
+    if (strcmp (str, "\n"))
+	    strncpy (fs->fs_ondisk_sb->s_v1.s_magic, 
+		     str, strlen(str) > 10 ? 10 : strlen(str));
+
+    /* __u16 sb_fsck_state; */
+    printf ("\tFielsystem state: current: %u: new:", 
+	    reiserfs_sb_get_state (fs->fs_ondisk_sb));
+    
+    fgets(str, sizeof(str), stdin);
+    if (str2int (str, &num))
+	    reiserfs_sb_set_state (fs->fs_ondisk_sb, num);
+
+    /* __u32 sb_hash_function_code; */
+    printf ("\tHash code: current: %u: new (tea %d, r5 %d, rupasov %d):",
+	    reiserfs_sb_get_hash (fs->fs_ondisk_sb), REISERFS_HASH_TEA, 
+	    REISERFS_HASH_R5, REISERFS_HASH_YURA);
+    
+    fgets(str, sizeof(str), stdin);
+    if (str2int (str, &num))
+	    reiserfs_sb_set_hash (fs->fs_ondisk_sb, num);
+
+    /* __u16 sb_tree_height; */
+    printf ("\tTree height: current: %u: new:",
+	    reiserfs_sb_get_height (fs->fs_ondisk_sb));
+    
+    fgets(str, sizeof(str), stdin);
+    if (str2int (str, &num))
+	    reiserfs_sb_set_height (fs->fs_ondisk_sb, num);
+
+    /* __u16 sb_bmap_nr; */
+    printf ("\tNumber of bitmaps: current: %u: new:",
+	    reiserfs_sb_get_bmaps (fs->fs_ondisk_sb));
+    
+    fgets(str, sizeof(str), stdin);
+    if (str2int (str, &num))
+	    reiserfs_sb_set_bmaps (fs->fs_ondisk_sb, num);
+
+    /* __u16 sb_version; */
+    printf ("\tFilesystem format: current: %u: new:",
+	    le16_to_cpu (fs->fs_ondisk_sb->s_v1.sb_version));
+    
+    fgets(str, sizeof(str), stdin);
+    if (str2int (str, &num))
+	    reiserfs_sb_set_version (fs->fs_ondisk_sb, num);
+
+    /* __u16 sb_reserved_for_journal; */
+    printf ("\tSpace reserved for journal: current: %u: new:",
+	    reiserfs_sb_get_reserved (fs->fs_ondisk_sb));
+    
+    fgets(str, sizeof(str), stdin);
+    if (str2int (str, &num))
+	    reiserfs_sb_set_reserved (fs->fs_ondisk_sb, num);
+
+    reiserfs_node_print (stdout, fs, fs->fs_super_bh);
+    
+    if (util_user_confirmed (stderr, "Is this ok ? [N/Yes]: ", "Yes\n")) {
+	    reiserfs_buffer_mkdirty (fs->fs_super_bh);
+	    reiserfs_buffer_write (fs->fs_super_bh);
+    }
+}
+
+
+static void corrupt_clobber_hash (char * name, reiserfs_ih_t * ih, 
+								  reiserfs_deh_t * deh)
+{
+    printf ("\tCorrupting deh_offset of entry \"%s\" of [%u %u]\n", name,
+			reiserfs_key_get_did (&ih->ih_key), reiserfs_key_get_oid (&ih->ih_key));
+    reiserfs_deh_set_off (deh, 700);
+}
+
+
+/* this reads list of desired corruptions from stdin and perform the
+   corruptions. Format of that list:
+   A hash_code
+   C name objectid     - 'C'ut entry 'name' from directory item with 'objectid'
+   H name objectid     - clobber 'H'hash of entry 'name' of directory 'objectid'
+   I item_num pos_in_item  make pos_in_item-th slot of extent item to point out of device
+   O item_num          - destroy item 'O'rder - make 'item_num'-th to have key bigger than 'item_num' + 1-th item
+   D item_num          - 'D'elete item_num-th item
+   S item_num value    - change file size (item_num-th item must be stat data)
+   F item_num value    - change sd_fdb of stat data
+   J item_num objectid
+   E name objectid new - change entry's deh_objectid to new
+   P                   - print the block
+   B offset bytes_to_corrupt - corrupt bytes_to_corrupt bytes in block header,
+                               start from offset
+*/
+
+void do_corrupt_one_block (reiserfs_filsys_t * fs, char * fline)
+{
+	reiserfs_bh_t * bh;
+	char line[256];
+	size_t n = 0;
+	unsigned long block;
+
+	block = certain_block (fs);
+	printf ("block = %lu\n", block);
+	if (block == fs->fs_super_bh->b_blocknr) {
+		edit_super_block (fs);
+		return;
+	}
+
+	if (!fs->fs_bitmap2) {
+		reiserfs_bh_t * bm_bh;
+		unsigned long bm_block;
+
+		if (reiserfs_bitmap_spread (fs))
+			bm_block = ( block / (fs->fs_blocksize * 8) ) ? 
+				(block / (fs->fs_blocksize * 8)) * (fs->fs_blocksize * 8) : 
+					fs->fs_super_bh->b_blocknr + 1;
+		else
+			bm_block = fs->fs_super_bh->b_blocknr + 1 + (block / (fs->fs_blocksize * 8));
+
+		bm_bh = reiserfs_buffer_read (fs->fs_dev, bm_block, fs->fs_blocksize);
+		if (bm_bh) {
+			if ( misc_test_bit((block % (fs->fs_blocksize * 8)), bm_bh->b_data) )
+				fprintf (stderr, "%lu is used in ondisk bitmap\n", block);
+			else
+				fprintf (stderr, "%lu is free in ondisk bitmap\n", block);
+
+			reiserfs_buffer_close (bm_bh);
+		}
+	} else {
+		if (reiserfs_bitmap_test_bit (fs->fs_bitmap2, block))
+			fprintf (stderr, "%lu is used in ondisk bitmap\n", block);
+		else
+			fprintf (stderr, "%lu is free in ondisk bitmap\n", block);
+	}
+
+	/* READ block */
+	bh = reiserfs_buffer_read (fs->fs_dev, block, fs->fs_blocksize);
+	if (!bh) {
+		printf ("corrupt_one_block: reiserfs_buffer_read fialed\n");
+		return;
+	}
+
+	if (reiserfs_node_type (bh) != NT_LEAF) {
+		printf ("Can not corrupt not a leaf node\n");
+		reiserfs_buffer_close (bh);
+		return;
+	}
+
+	printf ("Corrupting block %lu..\n", bh->b_blocknr);
+
+	if (data(fs)->log_file_name) {
+		printf ("Log file : %s\n", data(fs)->log_file_name);
+	} else {
+		printf ("No Log file specified\n");
+	}
+
+	if (fline != NULL) {
+		do_one_corruption_in_one_block (fs, bh, fline);
+		if ((data(fs)->log_file_name) && (data(fs)->log)) {
+			fprintf (data(fs)->log, "%lu\n", block);
+			fprintf (data(fs)->log, "%s\n", fline);
+		}
+	} else {
+		/* Get list of corruptions from stdin */
+		while (fgets(line, sizeof(line), stdin)) {
+			if ( line [0] == '\n' ) {
+				n = 0;
+				break;
+			}
+			
+			do_one_corruption_in_one_block (fs, bh, line);
+			if ((data(fs)->log_file_name) && (data(fs)->log)) {
+				fprintf (data(fs)->log, "%lu\n", block);
+				fprintf (data(fs)->log, "%s\n", line);
+			}
+
+			line[0] = '\0';
+			n = 0;
+		}
+	}
+
+	printf ("Done\n");
+	reiserfs_buffer_write(bh);
+	reiserfs_buffer_close (bh);
+	return;
+}
+
+void do_one_corruption_in_one_block (reiserfs_filsys_t * fs,
+				     reiserfs_bh_t * bh,
+				     char * corruption_command)
+{
+    int i, j;
+    reiserfs_ih_t * ih;
+    int item_num;
+    int item_numbers;
+    int bytes_to_corrupt;
+    char code, name [100];
+    __u32 objectid, new_objectid;
+    int value;
+    int hash_code;
+    unsigned int pos_in_item;
+    int type, format;
+
+    printf ("corruption_command  : %s", corruption_command);
+
+    switch (corruption_command [0]) {
+	case '#':
+	case '\n':
+		break;
+		
+	case '?':
+		printf ("A hash_code     - reset hAsh code in super block\n"
+			"T item_num type (0, 1, 2, 3) format (0, 1)\n"
+			"C name objectid - Cut entry 'name' from directory item with 'objectid'\n"
+			"H name objectid - clobber Hash of entry 'name' of directory 'objectid'\n"
+			"I item_num pos_in_item  make pos_in_tem-th slot of Indirect item to point out of device\n"
+			"O item_num      - destroy item Order - make 'item_num'-th to have key bigger than 'item_num' + 1-th item\n"
+			"D item_num      - Delete item_num-th item\n"
+			"S item_num value - change file Size (item_num-th item must be stat data)\n"
+			"F item_num value - change sd_First_direct_byte of stat data\n"
+			"J item_num objectid - set 'obJectid' of 'item_num'-th item\n"
+			"E name objectid objectid - set deh_objectid of an entry to objectid\n"
+			"N item_numbers bytes_to_corrupt - corrupt bytes_to_corrupt in number of bytes in item_numbers items\n"
+			"B offset bytes_to_corrupt - corrupt bytes_to_corrupt in block_header, start corruption from offset\n");
+
+	    break;
+		
+	case 'P':
+		reiserfs_node_print (stderr, fs, bh, 3, -1, -1);
+		break;
+	    
+	case 'A':
+		/* corrupt hash record in super block */
+		if (sscanf (corruption_command, "%c %d\n", &code, &hash_code) != 2) {
+			printf ("Wrong format \'%c\'\n", corruption_command [0]);
+			return;
+		}
+		reiserfs_warning (stderr, "Changing %s to %s\n",
+			reiserfs_hash_name (reiserfs_sb_get_hash (fs->fs_ondisk_sb)),
+			reiserfs_hash_name (hash_code));
+		
+		reiserfs_sb_set_hash (fs->fs_ondisk_sb, hash_code);
+		break;
+	    
+	case 'C': /* cut entry */
+	case 'H': /* make hash wrong */
+		if (sscanf (corruption_command, "%c %s %u\n", &code, name, &objectid) != 3) {
+			printf ("Wrong format \'%c\'\n", corruption_command [0]);
+			return;
+	  }
+		
+		ih = reiserfs_ih_at (bh, 0);
+		for (i = 0; i < reiserfs_nh_get_items (NODE_HEAD (bh)); i ++, ih ++) {
+			reiserfs_deh_t * deh;
+			/* look for property objectid */
+			if (reiserfs_key_get_oid (&ih->ih_key) != objectid || !reiserfs_ih_dir (ih))
+				continue;
+
+			deh = reiserfs_deh (bh, ih);
+			
+			for (j = 0; j < reiserfs_ih_get_entries (ih); j ++, deh ++) {
+				/* look for proper entry */
+				if (reiserfs_direntry_name_len (ih, deh, j) == (int)strlen (name) &&
+					!strncmp (name, reiserfs_deh_name (deh, j), strlen (name)))
+					break;
+			}
+			if (j == reiserfs_ih_get_entries (ih)) {
+				printf ("Can't find entry %s\n", name);
+				exit (1);
+			}
+			switch (code) {
+			case 'H' : /* clobber hash */
+				corrupt_clobber_hash (name, ih, deh);
+				break;
+
+			case 'C' : /* cut entry */
+				reiserfs_leaf_delete_entry (fs, bh, i, j, 1);
+				break;
+
+			default:
+				printf ("Unknown command found\n");
+			}
+		}
+
+		if (!REISERFS_NODE_INTREE (bh)) {
+			printf ("NOTE: block is deleted from the tree\n");
+			exit (0);
+		}
+		break;
+		
+	case 'E': /* set objectid : used to simulate objectid sharing problem */
+		if (sscanf (corruption_command, "%c %s %u %d\n", &code, name, &objectid, &new_objectid) != 4) {
+			printf ("Wrong format \'%c\'\n", corruption_command [0]);
+			return;
+		}
+		ih = reiserfs_ih_at (bh, 0);
+		for (i = 0; i < reiserfs_nh_get_items (NODE_HEAD (bh)); i ++, ih ++) {
+			reiserfs_deh_t * deh;
+			/* look for property objectid */
+			if (reiserfs_key_get_oid (&ih->ih_key) != objectid || !reiserfs_ih_dir (ih))
+				continue;
+			deh = reiserfs_deh (bh, ih);
+			reiserfs_deh_set_obid (deh, new_objectid);
+			break;
+		}  
+		break;
+		
+	case 'T': /* set type of item */
+	    if (sscanf (corruption_command, "%c %d %d %d\n", &code, &item_num, &type, &format) != 4) {
+			printf ("Wrong format \'%c\'\n", corruption_command [0]);
+			return;
+	    }
+	    if (item_num > reiserfs_nh_get_items (NODE_HEAD (bh))) {
+			printf ("Wrong format \'%c\', wrong item_num \n", corruption_command [0]);
+			return;
+	    }
+		
+	    ih = reiserfs_ih_at (bh, item_num);
+	    reiserfs_ih_set_format (ih, format);
+	    reiserfs_key_set_type (format, &ih->ih_key, type);
+		
+	    break;
+		
+	case 'J': /* set objectid : used to simulate objectid sharing problem */
+	    if (sscanf (corruption_command, "%c %d %d\n", &code, 
+			&item_num, &objectid) != 3) 
+	    {
+			printf ("Wrong format \'%c\'\n", 
+				corruption_command [0]);
+			return;
+	    }
+	    
+	    if (item_num > reiserfs_nh_get_items (NODE_HEAD (bh))) {
+			printf ("Wrong format \'%c\', wrong item_num \n", 
+				corruption_command [0]);
+			
+			return;
+	    }
+	    
+	    ih = reiserfs_ih_at (bh, item_num);
+	    reiserfs_key_set_oid (&ih->ih_key, objectid);
+	    break;
+		
+	case 'I': /* break unformatted node pointer */
+	    if (sscanf (corruption_command, "%c %d %u\n", &code, 
+			&item_num, &pos_in_item) != 3) 
+	    {
+			printf ("Wrong format \'%c\'\n", 
+				corruption_command [0]);
+			
+			return;
+	    }
+	    if (item_num > reiserfs_nh_get_items (NODE_HEAD (bh))) {
+			printf ("Wrong format \'%c\', wrong item_num \n", 
+				corruption_command [0]);
+			
+			return;
+	    }
+	    
+	    ih = reiserfs_ih_at (bh, item_num);
+	    if (!reiserfs_ih_ext (ih) || pos_in_item >= reiserfs_ext_count (ih)) {
+	        reiserfs_warning (stderr, "Not an extent item or there is "
+				  "not so many unfm ptrs in it\n");
+			return;
+	    }
+	    
+	    d32_put((__u32 *)reiserfs_item_by_ih (bh, ih), pos_in_item, 
+		    reiserfs_sb_get_blocks (fs->fs_ondisk_sb) + 100);
+	    break;
+	    
+	case 'D': /* delete item */
+	    if (sscanf (corruption_command, "%c %d\n", &code, &item_num) != 2) 
+	    {
+			printf ("Wrong format \'%c\'\n", 
+				corruption_command [0]);
+			
+			return;
+	    }
+	    
+	    if (item_num > reiserfs_nh_get_items (NODE_HEAD (bh))) {
+			printf ("Wrong format \'%c\', wrong item_num \n", 
+				corruption_command [0]);
+			
+			return;
+	    }
+	    
+	    reiserfs_leaf_delete_item (fs, bh, item_num);
+	    break;
+		
+	case 'O': /* make item out of order */
+		{
+			reiserfs_key_t * key;
+			if (sscanf (corruption_command, "%c %d\n", &code, 
+				    &item_num) != 2) 
+			{
+				printf ("Wrong format \'%c\'\n", 
+					corruption_command [0]);
+				
+				return;
+			}
+			
+			if (item_num > reiserfs_nh_get_items (NODE_HEAD (bh))) {
+				printf ("Wrong format \'%c\', wrong item_num "
+					"\n", corruption_command [0]);
+				
+				return;
+			}
+			
+			/* destroy item order */
+			
+			if (item_num == reiserfs_nh_get_items (NODE_HEAD (bh)) - 1)
+			{
+				printf ("can not destroy order\n");
+				return;
+			}
+			
+			ih = reiserfs_ih_at (bh, item_num);
+			key = &(ih + 1)->ih_key;
+			reiserfs_key_set_did (&ih->ih_key, reiserfs_key_get_did (key) + 1);
+			
+			break;
+		}  
+	case 'S': /* corrupt st_size */
+		{
+			/* fixme: old stat data only */
+			reiserfs_sd_v1_t * sd;
+			
+			if (sscanf (corruption_command, "%c %d %d\n", 
+				    &code, &item_num, &value) != 3) 
+			{
+				printf ("Wrong format \'%c\'\n", 
+					corruption_command [0]);
+				
+				return;
+			}
+			
+			if (item_num > reiserfs_nh_get_items (NODE_HEAD (bh))) {
+				printf ("Wrong format \'%c\', wrong item_num "
+					"\n", corruption_command [0]);
+				
+				return;
+			}
+			
+			ih = reiserfs_ih_at (bh, item_num);
+			
+			sd = (reiserfs_sd_v1_t *)reiserfs_item_by_ih (bh, ih); 
+			reiserfs_warning (stderr, "Changing sd_size of %k "
+					  "from %d to %d\n", &ih->ih_key, 
+					  reiserfs_sd_v1_size(sd), value);
+			
+			reiserfs_set_sd_v1_size( sd, value );
+			break;
+		}
+		
+    case 'F': /*         st_fdb */
+		{
+			/* fixme: old stat data only */
+			reiserfs_sd_v1_t * sd;
+			
+			if (sscanf (corruption_command, "%c %d %d\n", 
+				    &code, &item_num, &value) != 3) 
+			{
+				printf ("Wrong format \'%c\'\n", 
+					corruption_command [0]);
+				
+				return;
+			}
+			
+			if (item_num > reiserfs_nh_get_items (NODE_HEAD (bh))) {
+				printf ("Wrong format \'%c\', wrong item_num "
+					"\n", corruption_command [0]);
+				
+				return;
+			}
+			
+			ih = reiserfs_ih_at (bh, item_num);
+			
+			sd = (reiserfs_sd_v1_t *)reiserfs_item_by_ih (bh, ih); 
+			reiserfs_warning (stderr, "Changing "
+					  "sd_fdb of %k from "
+					  "%d to %d\n", &ih->ih_key, 
+					  reiserfs_sd_v1_fdb(sd), value);
+			
+			reiserfs_set_sd_v1_fdb( sd, value );
+			break;
+		}
+		
+	case 'N': /* corrupt N number of items */
+	    if (sscanf (corruption_command, "%c %d %d\n",
+			&code, &item_numbers, &bytes_to_corrupt) != 3) 
+	    {
+		printf ("Wrong format \'%c\'\n", corruption_command [0]);
+		return;
+	    }
+		
+	    if (item_numbers > reiserfs_nh_get_items (NODE_HEAD (bh))) {
+		printf ("Wrong item_numbers %d expected not more then %d\n",
+			item_numbers, reiserfs_nh_get_items (NODE_HEAD (bh)));
+		return;
+	    }
+		
+	    for (i = 0; i < item_numbers; i++) { 
+		printf ("Do corruptions :  %d item header; \n", i );
+		ih = reiserfs_ih_at (bh, i);
+		do_one_ih_corrupt (ih, bytes_to_corrupt);
+		printf ("Ok\n");
+	    }
+		
+	    break;
+	case 'B' :
+	    {
+		reiserfs_node_head_t * blkh;
+		unsigned int offset;
+			
+		if (sscanf (corruption_command, "%c %d %d\n",
+			    &code, &offset, &bytes_to_corrupt) != 3) 
+		{
+		    printf ("Wrong format \'%c\'\n", corruption_command [0]);
+		    return;
+		}
+			
+		blkh = NODE_HEAD (bh);
+		corrupt_block_header (blkh, offset, bytes_to_corrupt);
+		break;
+	    }
+	default:
+		printf ("Unknown command found\n");
+	}
+    
+    reiserfs_buffer_mkdirty (bh);
+    return;
+}
+
+/* corrupt first nr_bytes bytes in item header */
+int do_one_ih_corrupt (reiserfs_ih_t * ih, unsigned int nr_bytes)
+{
+	if (nr_bytes > REISERFS_IH_SIZE) {
+		printf ("Bad byte number %u expected not more then %lu\n", 
+			nr_bytes, (unsigned long)REISERFS_IH_SIZE);
+		exit (1);
+	}
+
+	if (memset ((char *)ih, 0, nr_bytes) != ih ) {
+		perror ("do_one_ih_corrupt: memset failed");
+		exit (1);
+	}
+
+	if ((data(fs)->log_file_name) && (data(fs)->log))
+		fprintf (data(fs)->log, "\tfirst %u bytes corrupted\n", 
+			 nr_bytes);
+
+	printf ("\tfirst %u bytes corrupted\n", nr_bytes);
+	return 0;
+}
+
+/* item header random corruption */
+int do_one_ih_random_corrupt (reiserfs_ih_t * ih)
+{
+	unsigned int i;
+	unsigned int from;
+	unsigned int count;
+		
+	from = get_rand (0,  REISERFS_IH_SIZE - 1);
+	count = get_rand (1, REISERFS_IH_SIZE);
+
+	if (from + count > REISERFS_IH_SIZE)
+		count = REISERFS_IH_SIZE - from;
+
+	for (i = from; i < from + count; i ++)
+		((char *)ih)[i] = get_rand(0, 255);
+
+	if ((data(fs)->log_file_name) && (data(fs)->log))
+		fprintf (data(fs)->log, "\tfrom %u ( %u )\n", from, count);
+
+	printf ("\tfrom %u ( %u )\n",  from, count);
+	return 0;
+}
+
+/* Corrupt n bytes in block header */
+int corrupt_block_header (reiserfs_node_head_t * blkh, unsigned int offset, 
+			  unsigned int bytes) 
+{
+	if ((offset + bytes) > REISERFS_NODEH_SIZE) {
+		printf ("Bad offset number: %u or bad bytes number: %u, "
+			"the suumary value expected not more then %lu\n", 
+			offset, bytes, (unsigned long)REISERFS_NODEH_SIZE);
+		exit (1);
+	} 
+
+	if (memset ((char *)blkh, 0, bytes) != blkh ) {
+		perror ("corrupt_block_head: memset failed");
+		exit (1);   
+	}
+
+	printf ("offset : %u, corrupt %u bytes\n", offset, bytes);
+	return 0;
+}
+
+/* corrupt random number of bytes within block header started from random
+   offset */
+void do_one_blkh_random_corrupt (reiserfs_bh_t * bh)
+{
+	reiserfs_node_head_t * blkh;
+	unsigned int from;
+	unsigned int count;
+	unsigned int i;
+
+	from = get_rand (0, REISERFS_NODEH_SIZE - 1);
+	count = get_rand (1, REISERFS_NODEH_SIZE);
+
+	blkh = NODE_HEAD (bh);
+
+	if (from + count > REISERFS_NODEH_SIZE)
+		count = REISERFS_NODEH_SIZE - from;
+
+	for (i = from; i < from + count; i ++)
+		((char *)blkh)[i] = get_rand(0, 255);
+
+	if ((data(fs)->log_file_name) && (data(fs)->log)) {
+		fprintf (data(fs)->log, "# : %lu #    ", bh->b_blocknr);
+		fprintf (data(fs)->log, "from %u (%u)\n", from, count);
+	}
+
+	printf ("# : %lu #   ", bh->b_blocknr);
+	printf ("from %u (%u)\n", from, count);
+
+}
+
+void do_leaves_corruption (reiserfs_filsys_t * fs,
+			   unsigned long nr_leaves_cr) 
+{
+	reiserfs_bh_t * bh;
+	unsigned long nr_leaves = 0;
+	unsigned int i, should_be_corrupted;
+
+	srand (time (0));
+	printf ("%lu leaves will be corrupted\n", nr_leaves_cr);
+	if ((data(fs)->log_file_name) && (data(fs)->log)) {
+		fprintf (data(fs)->log, "Block headers in %lu leaves "
+			 "will be corrupted\n", nr_leaves_cr);
+	}
+
+	if (reiserfs_bitmap_open (fs) < 0)
+		reiserfs_exit (1, "Could not open ondisk bitmap");
+
+	for (i = 0; (i < reiserfs_sb_get_blocks (fs->fs_ondisk_sb)) &&
+	     nr_leaves < nr_leaves_cr; i ++) {
+
+		if (!reiserfs_bitmap_test_bit (fs->fs_bitmap2, i))
+			continue;
+
+		bh = reiserfs_buffer_read (fs->fs_dev, i, fs->fs_blocksize);
+		if (!bh) {
+			reiserfs_warning (stderr, "could not read "
+					  "block %lu\n", i);
+			continue;
+		}
+
+		if (reiserfs_node_type (bh) != NT_LEAF) {
+			reiserfs_buffer_close (bh);	
+			continue;
+		}
+
+		if ((!reiserfs_leaf_head (bh)) || 
+		    (reiserfs_journal_block (fs, i))) 
+		{
+			reiserfs_buffer_close (bh);	
+			continue;
+		}
+
+		should_be_corrupted = 
+			(unsigned int)get_rand ((double)0, (double)1);
+
+		if (should_be_corrupted == 0)
+		{
+			reiserfs_buffer_close (bh);
+			continue;
+		}
+
+		do_one_blkh_random_corrupt (bh);
+		/* do_one_block_random_corrupt (bh); */
+		reiserfs_buffer_mkdirty (bh);
+		reiserfs_buffer_write(bh);
+		reiserfs_buffer_close (bh);
+		nr_leaves ++;
+	}
+
+	if ((data(fs)->log_file_name) && (data(fs)->log)) {
+		fprintf (data(fs)->log, "%lu leaves WERE corrupted\n",
+			 nr_leaves);
+	}
+
+	printf ("%lu leaves WERE corrupted\n", nr_leaves);
+
+	reiserfs_bitmap_close (fs);
+	return;
+}
+
+void do_one_block_random_corrupt (reiserfs_bh_t * bh) 
+{
+	unsigned int from = get_rand (0, bh->b_size - 1);
+	unsigned int count = get_rand (1, bh->b_size);
+	unsigned int i;
+
+	if (from + count > bh->b_size)
+		count = bh->b_size - from;
+
+	for (i = from; i < from + count; i ++)
+		((char *)bh->b_data)[i] = get_rand(0, 255);
+
+	if ((data(fs)->log_file_name) && (data(fs)->log)) {
+		fprintf (data(fs)->log, "# block %lu: ", bh->b_blocknr);
+		fprintf (data(fs)->log, "from %u ( %u )\n", from, count);
+	}
+
+	printf ("# block %lu: ", bh->b_blocknr);
+	printf ("from %u ( %u )\n", from, count);
+	
+}
+
+void do_bitmap_corruption (reiserfs_filsys_t * fs)
+{
+
+	unsigned long first = fs->fs_super_bh->b_blocknr + 1;
+	unsigned long nr_bitmap_to_corrupt;
+	unsigned long block, bmap_nr;;
+	reiserfs_bh_t * bh;
+	unsigned int i;
+
+	bmap_nr = reiserfs_bmap_nr(
+		reiserfs_sb_get_blocks(fs->fs_ondisk_sb),
+		fs->fs_blocksize);
+	
+	nr_bitmap_to_corrupt = (unsigned long)get_rand (1, bmap_nr - 1);
+
+	if ((data(fs)->log_file_name) && (data(fs)->log)) {
+		fprintf (data(fs)->log, "%lu bitmaps will be "
+			 "corrupted\n", nr_bitmap_to_corrupt);
+	}
+	printf ("%lu bitmaps will be corrupted\n", nr_bitmap_to_corrupt);
+	
+	for (i = 0; i < nr_bitmap_to_corrupt; i ++ ) {
+		block = ( i == 0 ) ? first : fs->fs_blocksize * 8 * i;
+		
+		bh = reiserfs_buffer_read (fs->fs_dev, block, fs->fs_blocksize);
+		
+		if (!bh) {
+			printf ("do_bitmap_corruption: reiserfs_buffer_read "
+				"failed for bitmap %d: %lu\n", i, block);
+			exit (1);
+		}
+		
+		do_one_block_random_corrupt (bh);
+		reiserfs_buffer_mkdirty (bh);
+		reiserfs_buffer_write(bh);
+		reiserfs_buffer_close (bh);
+	}
+} 
+
+/* corrupt the random number of item headers in random number of leaves */
+void do_ih_random_corrupt (reiserfs_filsys_t * fs, unsigned long nr_leaves_cr) 
+{
+	unsigned int nr_ih_cr;
+	unsigned int i, j;
+	reiserfs_bh_t * bh;
+	reiserfs_ih_t * ih;
+	unsigned long nr_leaves = 0;
+	unsigned int should_be_corrupted = 0;
+
+	srand (time (0));
+
+	printf ("item headers in %lu leaves will be corrupted\n", 
+		nr_leaves_cr);
+
+	if ((data(fs)->log_file_name) && (data(fs)->log)) {
+		fprintf (data(fs)->log, "item headers in %lu leaves will "
+			 "be corrupted\n", nr_leaves_cr);
+	}
+
+	if (reiserfs_bitmap_open (fs) < 0)
+		reiserfs_exit (1, "Could not open ondisk bitmap");
+
+	for (i = 0; (i < reiserfs_sb_get_blocks (fs->fs_ondisk_sb)) &&
+	     nr_leaves < nr_leaves_cr; i ++) {
+
+		if (!reiserfs_bitmap_test_bit (fs->fs_bitmap2, i))
+			continue;
+
+		bh = reiserfs_buffer_read (fs->fs_dev, i, fs->fs_blocksize);
+		if (!bh) {
+			reiserfs_warning (stderr, "could not read "
+					  "block %lu\n", i);
+			continue;
+		}
+
+		if (reiserfs_node_type (bh) != NT_LEAF) {
+			reiserfs_buffer_close (bh);	
+			continue;
+		}
+
+		if ((!reiserfs_leaf_head (bh)) || 
+		    (reiserfs_journal_block (fs, i))) 
+		{
+			reiserfs_buffer_close (bh);	
+			continue;
+		}
+
+		should_be_corrupted = 
+			(unsigned int) get_rand ((double)0, (double)1);
+
+		if (should_be_corrupted == 0) {
+			reiserfs_buffer_close (bh);
+			continue;
+		}
+
+		nr_ih_cr = get_rand (1, reiserfs_nh_get_items (NODE_HEAD (bh)));
+
+		for (j = 0; j < nr_ih_cr; j ++ ) {
+			should_be_corrupted = 
+				(unsigned int) get_rand ((double)0, (double)1);
+
+			if (should_be_corrupted == 0)
+				continue;
+
+			if ((data(fs)->log_file_name) && (data(fs)->log))
+				fprintf (data(fs)->log, "# block %lu , "
+					 "item header %d\n", bh->b_blocknr, j);
+
+			printf ("# block %lu , item header %d\n", 
+				bh->b_blocknr, j);
+
+			ih = reiserfs_ih_at (bh, j);
+			do_one_ih_random_corrupt (ih);
+		}
+
+		reiserfs_buffer_mkdirty (bh);
+		reiserfs_buffer_write(bh);
+		reiserfs_buffer_close (bh);
+		nr_leaves ++ ;
+	}
+
+	if ((data(fs)->log_file_name) && (data(fs)->log))
+		fprintf (data(fs)->log, "item headers in %lu leaves "
+			 "WERE corrupted\n", nr_leaves);
+
+	printf ("item headers in %lu leaves WERE corrupted\n", nr_leaves);
+	reiserfs_bitmap_close (fs);
+}
+
+/* corrupt item */
+void do_one_item_random_corrupt (reiserfs_bh_t * bh,
+				 reiserfs_ih_t * ih)
+{
+	unsigned int i;
+	unsigned int from;
+	unsigned int count;
+	char * p;
+
+	p = (char *)reiserfs_item_by_ih(bh, ih);
+
+	from = get_rand (0, reiserfs_ih_get_len(ih)  - 1);
+	count = get_rand (1, reiserfs_ih_get_len(ih));
+
+	if (from + count > reiserfs_ih_get_len(ih))
+		count = reiserfs_ih_get_len(ih) - from;
+
+	for (i = from; i < from + count; i ++)
+		((char *)p)[i] = get_rand(0, 255);
+
+	if ((data(fs)->log_file_name) && (data(fs)->log))
+		fprintf (data(fs)->log, "item body \tfrom %u ( %u )\n", 
+			 from, count);
+
+	printf ("item body \tfrom %u ( %u )\n",  from, count);
+	return ;
+}
+
+
+/* corrupt the random number of directory items in random number of leaves */
+void do_dir_random_corrupt (reiserfs_filsys_t * fs,
+			    unsigned long nr_leaves_cr) 
+{
+	unsigned int nr_ih_cr;
+	unsigned int i, j;
+	reiserfs_bh_t * bh;
+	reiserfs_ih_t * ih;
+	unsigned long nr_leaves = 0;
+	unsigned int should_be_corrupted = 0;
+
+	srand (time (0));
+
+	printf ("DIR items in %lu leaves will be corrupted\n", nr_leaves_cr);
+	if ((data(fs)->log_file_name) && (data(fs)->log)) {
+		fprintf (data(fs)->log, "DIR items in %lu leaves "
+			 "will be corrupted\n", nr_leaves_cr);
+	}
+
+	if (reiserfs_bitmap_open (fs) < 0)
+		reiserfs_exit (1, "Could not open ondisk bitmap");
+
+	for (i = 0; (i < reiserfs_sb_get_blocks (fs->fs_ondisk_sb)) &&
+	     nr_leaves < nr_leaves_cr; i ++) {
+
+		if (!reiserfs_bitmap_test_bit (fs->fs_bitmap2, i))
+			continue;
+
+		bh = reiserfs_buffer_read (fs->fs_dev, i, fs->fs_blocksize);
+		if (!bh) {
+			reiserfs_warning (stderr, "could not read "
+					  "block %lu\n", i);
+			continue;
+		}
+
+		if (reiserfs_node_type (bh) != NT_LEAF) {
+			reiserfs_buffer_close (bh);	
+			continue;
+		}
+
+		if ((!reiserfs_leaf_head (bh)) || 
+		    (reiserfs_journal_block (fs, i))) 
+		{
+			reiserfs_buffer_close (bh);	
+			continue;
+		}
+
+		should_be_corrupted = 
+			(unsigned int) get_rand ((double)0, (double)1);
+
+		if (should_be_corrupted == 0) {
+			reiserfs_buffer_close (bh);
+			continue;
+		}
+
+		/* get next item, look is it a DIR */
+		nr_ih_cr = get_rand (1, reiserfs_nh_get_items (NODE_HEAD (bh)));
+
+		for (j = 0; j < nr_ih_cr; j ++ ) {
+			should_be_corrupted = 
+				(unsigned int) get_rand ((double)0, (double)1);
+
+			if (should_be_corrupted == 0)
+				continue;
+
+			if ((data(fs)->log_file_name) && (data(fs)->log))
+				fprintf (data(fs)->log, "# block %lu , item "
+					 "%d\n", bh->b_blocknr, j);
+
+			printf ("# block %lu , item %d\n", bh->b_blocknr, j);
+
+			ih = reiserfs_ih_at (bh, j);
+
+			if (reiserfs_key_get_type (&ih->ih_key) != 
+			    TYPE_DIRENTRY)
+			{
+				continue;
+			}
+
+			do_one_item_random_corrupt (bh, ih);
+		}
+
+		reiserfs_buffer_mkdirty (bh);
+		reiserfs_buffer_write(bh);
+		reiserfs_buffer_close (bh);
+		nr_leaves ++ ;
+	}
+
+	if ((data(fs)->log_file_name) && (data(fs)->log))
+		fprintf (data(fs)->log, "DIR items in %lu leaves WERE "
+			 "corrupted\n", nr_leaves);
+
+	printf ("DIR items in %lu leaves WERE corrupted\n", nr_leaves);
+	reiserfs_bitmap_close (fs);
+}
+
+/* corrupt the random number of stat data items in random number of leaves */
+void do_sd_random_corrupt (reiserfs_filsys_t * fs,
+			   unsigned long nr_leaves_cr) 
+{
+	unsigned int nr_ih_cr;
+	unsigned int i, j;
+	reiserfs_bh_t * bh;
+	reiserfs_ih_t * ih;
+	unsigned long nr_leaves = 0;
+	unsigned int should_be_corrupted = 0;
+
+	srand (time (0));
+
+	printf ("SD items in %lu leaves will be corrupted\n", nr_leaves_cr);
+	if ((data(fs)->log_file_name) && (data(fs)->log)) {
+		fprintf (data(fs)->log, "SD items in %lu leaves will "
+			 "be corrupted\n", nr_leaves_cr);
+	}
+
+	if (reiserfs_bitmap_open (fs) < 0)
+		reiserfs_exit (1, "Could not open ondisk bitmap");
+
+	for (i = 0; (i < reiserfs_sb_get_blocks (fs->fs_ondisk_sb)) &&
+	     nr_leaves < nr_leaves_cr; i ++) {
+
+		if (!reiserfs_bitmap_test_bit (fs->fs_bitmap2, i))
+			continue;
+
+		bh = reiserfs_buffer_read (fs->fs_dev, i, fs->fs_blocksize);
+		if (!bh) {
+			reiserfs_warning (stderr, "could not read block %lu\n", i);
+			continue;
+		}
+
+		if (reiserfs_node_type (bh) != NT_LEAF) {
+			reiserfs_buffer_close (bh);	
+			continue;
+		}
+
+		if ((!reiserfs_leaf_head (bh)) || 
+		    (reiserfs_journal_block (fs, i))) 
+		{
+			reiserfs_buffer_close (bh);	
+			continue;
+		}
+
+		should_be_corrupted = 
+			(unsigned int) get_rand ((double)0, (double)1);
+
+		if (should_be_corrupted == 0) {
+			reiserfs_buffer_close (bh);
+			continue;
+		}
+
+		/* get next item, look is it a SD */
+		nr_ih_cr = get_rand (1, reiserfs_nh_get_items (NODE_HEAD (bh))); 
+
+		for (j = 0; j < nr_ih_cr; j ++ ) {
+			should_be_corrupted = 
+				(unsigned int) get_rand ((double)0, (double)1);
+
+			if (should_be_corrupted == 0)
+				continue;
+
+			if ((data(fs)->log_file_name) && (data(fs)->log))
+				fprintf (data(fs)->log, "# block %lu , item "
+					 "%d\n", bh->b_blocknr, j);
+
+			printf ("# block %lu , item %d\n", bh->b_blocknr, j);
+
+			ih = reiserfs_ih_at (bh, j);
+			if (reiserfs_key_get_type (&ih->ih_key) != 
+			    TYPE_STAT_DATA)
+			{
+				continue;
+			}
+
+			do_one_item_random_corrupt (bh, ih);
+		}
+
+		reiserfs_buffer_mkdirty (bh);
+		reiserfs_buffer_write(bh);
+		reiserfs_buffer_close (bh);
+		nr_leaves ++ ;
+	}
+
+	if ((data(fs)->log_file_name) && (data(fs)->log))
+		fprintf (data(fs)->log, "SD items in %lu leaves "
+			 "WERE corrupted\n", nr_leaves);
+
+	printf ("SD items in %lu leaves WERE corrupted\n", nr_leaves);
+	reiserfs_bitmap_close (fs);
+}
+
+/* corrupt the random number of indirect items in random number of leaves */
+void do_ext_random_corrupt (reiserfs_filsys_t * fs,
+			    unsigned long nr_leaves_cr) 
+{
+	unsigned int nr_ih_cr;
+	unsigned int i, j;
+	reiserfs_bh_t * bh;
+	reiserfs_ih_t * ih;
+	unsigned long nr_leaves = 0;
+	unsigned int should_be_corrupted = 0;
+
+	srand (time (0));
+
+	printf ("EXT items in %lu leaves will be corrupted\n", nr_leaves_cr);
+	if ((data(fs)->log_file_name) && (data(fs)->log)) {
+		fprintf (data(fs)->log, "EXT items in %lu leaves will "
+			 "be corrupted\n", nr_leaves_cr);
+	}
+
+	if (reiserfs_bitmap_open (fs) < 0)
+		reiserfs_exit (1, "Could not open ondisk bitmap");
+
+	for (i = 0; (i < reiserfs_sb_get_blocks (fs->fs_ondisk_sb)) &&
+	     nr_leaves < nr_leaves_cr; i ++) {
+
+		if (!reiserfs_bitmap_test_bit (fs->fs_bitmap2, i))
+			continue;
+
+		bh = reiserfs_buffer_read (fs->fs_dev, i, fs->fs_blocksize);
+		if (!bh) {
+			reiserfs_warning (stderr, "could not read "
+					  "block %lu\n", i);
+			continue;
+		}
+
+		if (reiserfs_node_type (bh) != NT_LEAF) {
+			reiserfs_buffer_close (bh);	
+			continue;
+		}
+
+		if ((!reiserfs_leaf_head (bh)) || 
+		    (reiserfs_journal_block (fs, i))) 
+		{
+			reiserfs_buffer_close (bh);	
+			continue;
+		}
+
+		should_be_corrupted = 
+			(unsigned int) get_rand ((double)0, (double)1);
+
+		if (should_be_corrupted == 0)
+		{
+			reiserfs_buffer_close (bh);
+			continue;
+		}
+
+		/* get next item, look is it an EXT */
+		nr_ih_cr = get_rand (1, reiserfs_nh_get_items (NODE_HEAD (bh))); 
+
+		for (j = 0; j < nr_ih_cr; j ++ ) {
+			should_be_corrupted = 
+				(unsigned int) get_rand ((double)0, (double)1);
+
+			if (should_be_corrupted == 0)
+				continue;
+
+			ih = reiserfs_ih_at (bh, j);
+
+			if (reiserfs_key_get_type (&ih->ih_key) != 
+			    TYPE_EXTENT)
+			{
+				continue;
+			}
+
+			if ((data(fs)->log_file_name) && (data(fs)->log))
+				fprintf (data(fs)->log, "# block %lu , item "
+					 "%d\n", bh->b_blocknr, j);
+
+			printf ("# block %lu , item %d\n", bh->b_blocknr, j);
+			do_one_item_random_corrupt (bh, ih);
+		}
+
+		reiserfs_buffer_mkdirty (bh);
+		reiserfs_buffer_write(bh);
+		reiserfs_buffer_close (bh);
+		nr_leaves ++ ;
+	}
+
+	if ((data(fs)->log_file_name) && (data(fs)->log))
+		fprintf (data(fs)->log, "EXT items in %lu leaves "
+			 "WERE corrupted\n", nr_leaves);
+
+	printf ("EXT items in %lu leaves WERE corrupted\n", nr_leaves);
+	reiserfs_bitmap_close (fs);
+}
+
+/* this reads list of desired corruptions from stdin and performs the
+   corruptions. Format of that list:
+   B           - the random number of bitmap to be corrupted
+   L nr_leaves - block headers in nr_leaves leaves to be corupted
+   H nr_leaves - the random number of item headers in nr_leaves to be corrupted
+   S nr_leaves - the random number of stat data items in nr_leaves to be
+                 corrupted
+   D nr_leaves - the random number of directory items in nr_leaves to be
+                 corrupted
+   I nr_leaves - the random number of extent items in nr_leaves to be
+                 corrupted
+*/
+
+void what_to_corrupt (reiserfs_filsys_t * fs, char * corruption_command)
+{
+	unsigned long nr_leaves_cr;
+	char code;
+
+	switch (corruption_command [0]){
+	case 'B' :
+		/* bitmap */
+		do_bitmap_corruption (fs);
+		break;
+
+	case 'L' :
+		/* leaves */
+		if (sscanf (corruption_command, "%c %lu\n", 
+			    &code, &nr_leaves_cr) != 2) 
+		{
+			printf ("Wrong format \'%c\'\n", corruption_command [0]);
+			return;
+		}
+		
+		do_leaves_corruption (fs, nr_leaves_cr);		
+		break;
+
+	case 'H' :
+		/* item headers */
+		if (sscanf (corruption_command, "%c %lu\n", 
+			    &code, &nr_leaves_cr) != 2) 
+		{
+			printf ("Wrong format \'%c\'\n", corruption_command [0]);
+			return;
+		}
+		
+		do_ih_random_corrupt (fs, nr_leaves_cr);
+		break;
+
+	case 'D' :
+		/* directory items */
+		if (sscanf (corruption_command, "%c %lu\n", 
+			    &code, &nr_leaves_cr) != 2) 
+		{
+			printf ("Wrong format \'%c\'\n", corruption_command [0]);
+			return;
+		}
+		
+		do_dir_random_corrupt (fs, nr_leaves_cr);
+		break;
+
+	case 'S' :
+		/* stat data items */
+		if (sscanf (corruption_command, "%c %lu\n", 
+			    &code, &nr_leaves_cr) != 2) 
+		{
+			printf ("Wrong format \'%c\'\n", corruption_command [0]);
+			return;
+		}
+		
+		do_sd_random_corrupt (fs, nr_leaves_cr);
+		break;
+
+	case 'I' :
+		/* extent items */
+		if (sscanf (corruption_command, "%c %lu\n", 
+			    &code, &nr_leaves_cr) != 2) 
+		{
+			printf ("Wrong format \'%c\'\n", corruption_command [0]);
+			return;
+		}
+		
+		do_ext_random_corrupt (fs, nr_leaves_cr);
+		break;
+
+	default :
+		printf ("Unknown command specified\n");
+	}
+}
+
+void do_fs_random_corrupt (reiserfs_filsys_t * fs)
+{
+    char line[256];
+    size_t n = 0;
+
+    printf ("Corrupting fs. Please insert one of the following command\n"
+			" B - the random number of bitmap to be corrupted\n"
+			" L nr_leaves - block headers in nr_leaves leaves to be corupted\n"
+			" H nr_leaves - the random number of item headers in nr_leaves to be corrupted\n"
+			" S nr_leaves - the random number of stat data items in nr_leaves to be corrupted\n"
+			" D nr_leaves - the random number of directory items in nr_leaves to be corrupted\n"
+			" I nr_leaves - the random number of extent items in nr_leaves to be corrupted\n"
+			".. ->\n");
+
+	/* Get list of corruptions from stdin */
+	while (fgets(line, sizeof(line), stdin)) {
+		if ( line [0] == '\n' ) {
+			n = 0;
+			break;
+		}
+		printf ("################## command : %s", line);
+		if ((data(fs)->log_file_name) && (data(fs)->log)) {
+			fprintf (data(fs)->log, "################## command : %s", line);
+		}
+
+		what_to_corrupt (fs, line);
+		
+		line[0] = '\0';
+		n = 0;
+	}
+}
+
+/*
+   Local variables:
+   c-indentation-style: "K&R"
+   mode-name: "LC"
+   c-basic-offset: 4
+   tab-width: 4
+   fill-column: 80
+   End:
+*/
+
+
+
+
+
+
+
+
diff --git a/debugreiserfs/debugreiserfs.8 b/utils/debugfs/debugfs.reiserfs.8
similarity index 75%
rename from debugreiserfs/debugreiserfs.8
rename to utils/debugfs/debugfs.reiserfs.8
index 0f89591..2faff02 100644
--- a/debugreiserfs/debugreiserfs.8
+++ b/utils/debugfs/debugfs.reiserfs.8
@@ -1,11 +1,11 @@
 .\" -*- nroff -*-
 .\" Copyright 1996-2004 Hans Reiser.
 .\" 
-.TH DEBUGREISERFS 8 "February 2004" "Reiserfsprogs 3.6.19"
+.TH debugfs.reiserfs 8 "February 2004" "Reiserfsprogs 3.6.19"
 .SH NAME
-debugreiserfs \- The debugging tool for the ReiserFS filesystem.
+debugfs.reiserfs \- The debugging tool for the ReiserFS filesystem.
 .SH SYNOPSIS
-.B debugreiserfs
+.B debugfs.reiserfs
 [
 .B -dDJmoqpuSV
 ] [
@@ -21,7 +21,7 @@
 .\" ] [
 .I device
 .SH DESCRIPTION
-\fBdebugreiserfs\fR sometimes helps to solve problems with reiserfs filesystems. 
+\fBdebugfs.reiserfs\fR sometimes helps to solve problems with reiserfs filesystems. 
 When run without options it prints the super block of the ReiserFS filesystem found
 on the \fIdevice\fR.
 .TP
@@ -61,37 +61,37 @@
 .\" formatted nodes found. Can be used to find specific key in the filesystem.
 .\" .TP
 .B -p
-extracts the filesystem's metadata with \fBdebugreiserfs\fR -p /dev/xxx | gzip -c > 
+extracts the filesystem's metadata with \fBdebugfs.reiserfs\fR -p /dev/xxx | gzip -c > 
 xxx.gz. None of your data are packed unless a filesystem corruption presents when 
 the whole block having this corruption is packed. You send us the output, and we use 
-it to create a filesystem with the same strucure as yours using \fBdebugreiserfs -u\fR.
+it to create a filesystem with the same strucure as yours using \fBdebugfs.reiserfs -u\fR.
 When the data file is not too large, this usually allows us to quickly reproduce 
 and debug the problem.
 .TP
 .B -u
-builds the ReiserFS filesystem image with gunzip -c xxx.gz | \fBdebugreiserfs\fR 
--u /dev/image of the previously packed metadata with \fBdebugreiserfs -p\fR. The
+builds the ReiserFS filesystem image with gunzip -c xxx.gz | \fBdebugfs.reiserfs\fR 
+-u /dev/image of the previously packed metadata with \fBdebugfs.reiserfs -p\fR. The
 result image is not the same as the original filesystem, because mostly only metadata
-were packed with \fBdebugreiserfs -p\fR, but the filesystem structure is completely 
+were packed with \fBdebugfs.reiserfs -p\fR, but the filesystem structure is completely 
 recreated.
 .TP
 .B -S 
 When -S is not specified -p 
 .\" and -s 
 deals with blocks marked used in the filesystem bitmap only. With this option 
-set \fBdebugreiserfs\fR will work with the entire device.
+set \fBdebugfs.reiserfs\fR will work with the entire device.
 .TP
 .B -q
 When 
 .\" -s or 
 -p is in use, suppress showing the speed of progress.
 .SH AUTHOR
-This version of \fBdebugreiserfs\fR has been written by Vitaly Fertman 
+This version of \fBdebugfs.reiserfs\fR has been written by Vitaly Fertman 
 <vitaly@namesys.com>.
 .SH BUGS
 Please report bugs to the ReiserFS developers <reiserfs-dev@namesys.com>, providing
 as much information as possible--your hardware, kernel, patches, settings, all printed
 messages; check the syslog file for any related information.
 .SH SEE ALSO
-.BR reiserfsck (8),
-.BR mkreiserfs (8)
+.BR fsck.reiserfs (8),
+.BR mkfs.reiserfs (8)
diff --git a/debugreiserfs/debugreiserfs.c b/utils/debugfs/debugreiserfs.c
similarity index 69%
rename from debugreiserfs/debugreiserfs.c
rename to utils/debugfs/debugreiserfs.c
index 3435626..c94715f 100644
--- a/debugreiserfs/debugreiserfs.c
+++ b/utils/debugfs/debugreiserfs.c
@@ -3,7 +3,19 @@
  * reiserfsprogs/README
  */
 
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
 #include "debugreiserfs.h"
+#include "misc/unaligned.h"
+#include "misc/malloc.h"
+#include "util/misc.h"
+#include "util/print.h"
+
+#include <getopt.h>
+#include <errno.h>
+#include <fcntl.h>
 
 reiserfs_filsys_t * fs;
 
@@ -69,52 +81,51 @@
 
 static void print_disk_tree (reiserfs_filsys_t * fs, unsigned long block_nr)
 {
-    struct buffer_head * bh;
+    reiserfs_bh_t * bh;
     int i, j, count;
     static int level = -1;
 	
     if (level == -1)
-	    level = get_sb_tree_height (fs->fs_ondisk_sb);
+	    level = reiserfs_sb_get_height (fs->fs_ondisk_sb);
 
-    bh = bread (fs->fs_dev, block_nr, fs->fs_blocksize);
+    bh = reiserfs_buffer_read (fs->fs_dev, block_nr, fs->fs_blocksize);
     if (!bh) {
-	    die ("Could not read block %lu\n", block_nr);
+	    misc_die ("Could not read block %lu\n", block_nr);
     }
     level --;
 
     if (level < 1)
-	    die ("level too small");
+	    misc_die ("level too small");
 	
-    if (level != get_blkh_level (B_BLK_HEAD (bh))) {
+    if (level != reiserfs_nh_get_level (NODE_HEAD (bh))) {
 	    printf ("%d expected, %d found in %lu\n", level, 
-		    get_blkh_level (B_BLK_HEAD (bh)), bh->b_blocknr);
+		    reiserfs_nh_get_level (NODE_HEAD (bh)), bh->b_blocknr);
     }
 
-    if (is_internal_node (bh)) {
-	    struct disk_child * dc;
+    if (reiserfs_int_head (bh)) {
+	    reiserfs_dc_t * dc;
 
 	    g_stat_info.nr_internals ++;
-	    print_block (stdout, fs, bh, 
-			 data(fs)->options & PRINT_TREE_DETAILS, -1, -1);
+	    reiserfs_node_print (stdout, fs, bh, data(fs)->options, -1, -1);
 
-	    dc = B_N_CHILD (bh, 0);
-	    count = B_NR_ITEMS(bh);
+	    dc = reiserfs_int_at (bh, 0);
+	    count = reiserfs_node_items(bh);
 	    for (i = 0; i <= count; i++, dc++)
-		    print_disk_tree (fs, get_dc_child_blocknr (dc));
-    } else if (is_leaf_node (bh)) {
-	    struct item_head *ih;
+		    print_disk_tree (fs, reiserfs_dc_get_nr (dc));
+    } else if (reiserfs_leaf_head (bh)) {
+	    reiserfs_ih_t *ih;
 
 	    g_stat_info.nr_leaves ++;
-	    print_block (stdout, fs, bh, 
-			 data (fs)->options & PRINT_TREE_DETAILS, -1, -1);
+	    reiserfs_node_print (stdout, fs, bh, data(fs)->options, -1, -1);
 
-	    ih = B_N_PITEM_HEAD (bh, 0);
-	    count = leaf_item_number_estimate(bh);
+	    ih = reiserfs_ih_at (bh, 0);
+	    count = reiserfs_leaf_estimate_items(bh);
 	    for (i = 0; i < count; i++, ih++) {
-		    if (is_indirect_ih(ih)) {
-			    __u32 * ind_item = (__u32 *)B_I_PITEM (bh, ih);
+		    if (reiserfs_ih_ext(ih)) {
+			    __u32 * ind_item = 
+				    (__u32 *)reiserfs_item_by_ih (bh, ih);
 
-			    for (j =  0; j < (int)I_UNFM_NUM (ih); j ++) {
+			    for (j =  0; j < (int)reiserfs_ext_count (ih); j ++) {
 				    if (d32_get (ind_item, j)) {
 					    g_stat_info.nr_unformatted += 1;
 				    }
@@ -122,13 +133,12 @@
 		    }
 	    }
     } else {
-	    print_block (stdout, fs, bh, 
-			 data (fs)->options & PRINT_TREE_DETAILS, -1, -1);
+	    reiserfs_node_print (stdout, fs, bh, data(fs)->options, -1, -1);
 	    
 	    reiserfs_warning (stdout, "print_disk_tree: bad block "
 			      "type (%b)\n", bh);
     }
-    brelse (bh);
+    reiserfs_buffer_close (bh);
     level ++;
 }
 
@@ -136,37 +146,38 @@
 {
     int type;
     unsigned long done = 0, total;
-    struct buffer_head * bh;
+    reiserfs_bh_t * bh;
     unsigned int j;
 	
     total = reiserfs_bitmap_ones (input_bitmap(fs));
 	
-    for (j = 0; j < get_sb_block_count (fs->fs_ondisk_sb); j ++) {
-		if (!reiserfs_bitmap_test_bit (input_bitmap (fs), j))
-			continue;
+    for (j = 0; j < reiserfs_sb_get_blocks (fs->fs_ondisk_sb); j ++) {
+	if (!reiserfs_bitmap_test_bit (input_bitmap (fs), j))
+	    continue;
+	
+	if (!misc_test_bit(PRINT_QUIET, &data(fs)->options))
+	    util_misc_progress (stderr, &done, total, 1, 0);
 		
-		print_how_far (stderr, &done, total, 1, be_quiet (fs));
+	bh = reiserfs_buffer_read (fs->fs_dev, j, fs->fs_blocksize);
+	if (!bh) {
+	    reiserfs_warning (stderr, "could not read block %lu\n", j);
+	    continue;
+	}
+
+	type = reiserfs_node_type (bh);
+	if (type != NT_UNKNOWN) {
+	    reiserfs_node_print (stdout, fs, bh, 
+		(1 << LP_LEAF_DETAILS) | (1 << LP_DIRECT_ITEMS), -1, -1);
+	}
 		
-		bh = bread (fs->fs_dev, j, fs->fs_blocksize);
-		if (!bh) {
-			reiserfs_warning (stderr, "could not read block %lu\n", j);
-			continue;
-		}
-		
-		type = who_is_this (bh->b_data, bh->b_size);
-		if (type != THE_UNKNOWN) {
-			print_block (stdout, fs, bh, 
-				     PRINT_TREE_DETAILS | PRINT_DIRECT_ITEMS, 
-				     -1, -1);
-		}
-		
-		if (type == THE_INTERNAL)
-			g_stat_info.nr_internals ++;
-		else if (type == THE_LEAF || type == HAS_IH_ARRAY)
-			g_stat_info.nr_leaves ++;
-	    
-		brelse (bh);
+	if (type == NT_INTERNAL)
+	    g_stat_info.nr_internals ++;
+	else if (type == NT_LEAF || type == NT_IH_ARRAY)
+	    g_stat_info.nr_leaves ++;
+
+	reiserfs_buffer_close (bh);
     }
+    
     fprintf (stderr, "\n");
 }
 
@@ -174,13 +185,13 @@
 void pack_one_block (reiserfs_filsys_t * fs, unsigned long block);
 static void print_one_block (reiserfs_filsys_t * fs, unsigned long block)
 {
-    struct buffer_head * bh;
+    reiserfs_bh_t * bh;
     
     if (!fs->fs_bitmap2) {
-        struct buffer_head * bm_bh;
+        reiserfs_bh_t * bm_bh;
         unsigned long bm_block;
         
-        if (spread_bitmaps (fs))
+        if (reiserfs_bitmap_spread (fs))
 		bm_block = 
 			( block / (fs->fs_blocksize * 8) ) ? 
 			(block / (fs->fs_blocksize * 8)) * 
@@ -190,7 +201,7 @@
 		bm_block = fs->fs_super_bh->b_blocknr + 1 + 
 			(block / (fs->fs_blocksize * 8));
 
-        bm_bh = bread (fs->fs_dev, bm_block, fs->fs_blocksize);
+        bm_bh = reiserfs_buffer_read (fs->fs_dev, bm_block, fs->fs_blocksize);
         if (bm_bh) {
 		if (misc_test_bit((block % (fs->fs_blocksize * 8)), 
 				  bm_bh->b_data))
@@ -202,7 +213,7 @@
 				 "ondisk bitmap\n", block);
 		}
 	        
-            brelse (bm_bh);
+            reiserfs_buffer_close (bm_bh);
         }
     } else {
         if (reiserfs_bitmap_test_bit (fs->fs_bitmap2, block))
@@ -211,23 +222,23 @@
 		fprintf (stderr, "%lu is free in ondisk bitmap\n", block);
     }
     
-    bh = bread (fs->fs_dev, block, fs->fs_blocksize);
+    bh = reiserfs_buffer_read (fs->fs_dev, block, fs->fs_blocksize);
     if (!bh) {
-	    printf ("print_one_block: bread failed\n");
+	    printf ("print_one_block: reiserfs_buffer_read failed\n");
 	    return;
     }
 	
     if (debug_mode (fs) == DO_PACK) {
 	    pack_one_block (fs, bh->b_blocknr);
-	    brelse (bh);
+	    reiserfs_buffer_close (bh);
 	    return;
     }
 	
-    if (who_is_this (bh->b_data, bh->b_size) != THE_UNKNOWN)
-	    print_block (stdout, fs, bh, PRINT_TREE_DETAILS, -1, -1);
+    if (reiserfs_node_type (bh) != NT_UNKNOWN)
+	    reiserfs_node_print (stdout, fs, bh, (1 << LP_LEAF_DETAILS), -1, -1);
     else
 	    printf ("Looks like unformatted\n");
-    brelse (bh);
+    reiserfs_buffer_close (bh);
     return;
 }
 
@@ -263,13 +274,13 @@
     {
 	    switch (c) {
 	    case 'a': /* -r will read this, -n and -N will write to it */
-		    asprintf (&data->map_file, "%s", optarg);
+		    strncpy(data->map_file, optarg, sizeof(data->map_file));
 		    break;
 
 	    case 'b':
 		    /* will load bitmap from a file and read only blocks
 		       marked in it. This is for -p and -k */
-		    asprintf (&data->input_bitmap, "%s", optarg);
+		    data->input_bitmap = optarg;
 		    data->scan_area = EXTERN_BITMAP;
 		    break;
 
@@ -286,22 +297,20 @@
 	    case '1':	/* print a single node */
 		    data->block = strtol (optarg, &tmp, 0);
 		    if (*tmp)
-			    die ("parse_options: bad block number");
+			    misc_die ("parse_options: bad block number");
 		    break;
 
 	    case 'C':
 		    data->mode = DO_CORRUPT_ONE;
 		    data->block = strtol (optarg, &tmp, 0);
 		    if (*tmp) {
-			    die ("parse_options: bad block number");
+			    misc_die ("parse_options: bad block number");
 		    }
 		    break;
 
 	    case 'F':
 		    data->mode = DO_CORRUPT_FILE;
-		    if (asprintf (&corruption_list_file, "%s", optarg) == -1 ) {    
-			    die ("parse_options: bad list corruption file");
-		    }
+		    corruption_list_file = optarg;
 		    break;
 
 	    case 'p':
@@ -325,7 +334,6 @@
 	    case 'n': /* scan for names matching a specified pattern */
 		    data->mode = DO_SCAN_FOR_NAME;
 		    data->pattern = optarg;
-		    /*asprintf (&data->pattern, "%s", optarg);*/
 		    break;
 
 	    case 'N': /* search name in the tree */
@@ -337,38 +345,38 @@
 		    break;
 
 	    case 'r':
-		    asprintf (&data->recovery_file, "%s", optarg);
+		    data->recovery_file = optarg;
 		    data->mode = DO_RECOVER;
 		    break;
 
 	    case 'd':
 		    /*  print leaf details from internal tree */
-		    data->options |= PRINT_TREE_DETAILS;
+		    misc_set_bit(LP_LEAF_DETAILS, &data->options);
 		    break;
 
 	    case 'D':
 		    /* print leaf details accordingly the bitmap - can be used 
 		       with -S */
-		    data->options |= PRINT_DETAILS;
+		    misc_set_bit(PRINT_DETAILS, &data->options);
 		    break;
 
 	    case 'o':
 		    /* print objectid map */
-		    data->options |= PRINT_OBJECTID_MAP;
+		    misc_set_bit(PRINT_OBJECTID_MAP, &data->options);
 		    break;
 
 	    case 'm':	/* print a block map */
 	    case 'M':	/* print a block map with details */
-		    data->options |= PRINT_BITMAP;
+		    misc_set_bit(PRINT_BITMAP, &data->options);
 		    break;
 
 	    case 'j': /* -j must have a parameter */
-		    data->options |= PRINT_JOURNAL;
+		    misc_set_bit(PRINT_JOURNAL, &data->options);
 		    data->journal_device_name = optarg;
 		    break;
 
 	    case 'J':
-		    data->options |= PRINT_JOURNAL_HEADER;
+		    misc_set_bit(PRINT_JOURNAL_HEADER, &data->options);
 		    break;
 
 	    case 'R': /* read block numbers from stdin and look for them in the
@@ -378,12 +386,12 @@
 		    break;
 
 	    case 'B':              /*disabled for a while*/
-		    asprintf (&badblocks_file, "%s", optarg);
+		    badblocks_file = optarg;
 		    data->mode = DO_EXTRACT_BADBLOCKS;
 		    break;
 	    case 'q':
 		    /* this makes packing to not show speed info during -p or -P */
-		    data->options |= BE_QUIET;
+		    misc_set_bit(PRINT_QUIET, &data->options);
 		    break;
 	    case 'Z':
 		    data->mode = DO_ZERO;
@@ -405,13 +413,13 @@
 		    data->mode = DO_NOTHING;
 		    break;
 	    case 'v':
-		    data->options |= BE_VERBOSE;
+		    misc_set_bit(PRINT_VERBOSE, &data->options);
 		    break;
 	    }
     }
 
     if (data->mode == DO_NOTHING) {
-	    print_banner(program_name);
+	    util_print_banner(program_name);
 	    exit(0);
     }
 
@@ -419,7 +427,7 @@
 	    /* only one non-option argument is permitted */
 	    print_usage_and_exit();
 
-    print_banner(program_name);
+    util_print_banner(program_name);
 
     data->device_name = argv[optind];
     return argv[optind];
@@ -455,29 +463,28 @@
     FILE * fp;
     unsigned long block_count;
 	
-	
-    if (reiserfs_open_ondisk_bitmap (fs) < 0)
+    if (reiserfs_bitmap_open (fs) < 0)
 	    reiserfs_exit (1, "Could not open ondisk bitmap");
-	
-    block_count = get_sb_block_count (fs->fs_ondisk_sb);
+    
+    block_count = reiserfs_sb_get_blocks (fs->fs_ondisk_sb);	
 	
     switch (scan_area (fs)) {
     case ALL_BLOCKS:
-	    input_bitmap (fs) = reiserfs_create_bitmap (block_count);
+	    input_bitmap (fs) = reiserfs_bitmap_create (block_count);
 	    reiserfs_bitmap_fill (input_bitmap (fs));
 	    reiserfs_warning (stderr, "Whole device (%d blocks) is to be scanned\n", 
 			      reiserfs_bitmap_ones (input_bitmap (fs)));	
 	    break;
     case USED_BLOCKS:
 	    reiserfs_warning (stderr, "Loading on-disk bitmap .. ");
-	    input_bitmap (fs) = reiserfs_create_bitmap (block_count);
+	    input_bitmap (fs) = reiserfs_bitmap_create (block_count);
 	    reiserfs_bitmap_copy (input_bitmap (fs), fs->fs_bitmap2);
 	    reiserfs_warning (stderr, "%d bits set - done\n",
 			      reiserfs_bitmap_ones (input_bitmap (fs)));
 	    break;
     case UNUSED_BLOCKS:
 	    reiserfs_warning (stderr, "Loading on-disk bitmap .. ");
-	    input_bitmap (fs) = reiserfs_create_bitmap (block_count);
+	    input_bitmap (fs) = reiserfs_bitmap_create (block_count);
 	    reiserfs_bitmap_copy (input_bitmap (fs), fs->fs_bitmap2);
 	    reiserfs_bitmap_invert (input_bitmap (fs));
 	    reiserfs_warning (stderr, "%d bits set - done\n",
@@ -511,11 +518,11 @@
 	    return;
     }
 	
-    if (((data (fs)->options & PRINT_JOURNAL) || 
-	 (data (fs)->options & PRINT_JOURNAL_HEADER)) && 
+    if ((misc_test_bit(PRINT_JOURNAL, &data(fs)->options) || 
+	 misc_test_bit(PRINT_JOURNAL_HEADER, &data(fs)->options)) && 
 	!reiserfs_journal_opened (fs))
     {
-	    if (reiserfs_open_journal (fs, data(fs)->journal_device_name, 
+	    if (reiserfs_journal_open (fs, data(fs)->journal_device_name, 
 				       O_RDONLY)) 
 	    {
 		    printf ("Could not open journal\n");
@@ -523,33 +530,34 @@
 	    }
     }
 	
-    print_filesystem_state (stdout, fs);
-    print_block (stdout, fs, fs->fs_super_bh);
+    reiserfs_super_print_state (stdout, fs);
+    reiserfs_node_print (stdout, fs, fs->fs_super_bh);
 	
-    if (data (fs)->options & PRINT_JOURNAL)
-		print_journal (fs);
+    if (misc_test_bit(PRINT_JOURNAL, &data(fs)->options))
+	    reiserfs_journal_print (fs);
 
-    if (data (fs)->options & PRINT_JOURNAL_HEADER)
-		print_journal_header (fs);
+    if (misc_test_bit(PRINT_JOURNAL_HEADER, &data(fs)->options))
+	    reiserfs_journal_print_header (fs);
 	
-    if (data (fs)->options & PRINT_OBJECTID_MAP)
-		print_objectid_map (stdout, fs);
+    if (misc_test_bit(PRINT_OBJECTID_MAP, &data(fs)->options))
+	    reiserfs_objmap_print (stdout, fs);
 	
-    if (data (fs)->options & PRINT_BITMAP)
-		print_bmap (stdout, fs, 0/*opt_print_block_map == 1 ? 1 : 0*/);
+    if (misc_test_bit(PRINT_BITMAP, &data(fs)->options))
+	    reiserfs_bitmap_print (stdout, fs, 0);
 	
-    if (data (fs)->options & PRINT_DETAILS)
+    if (misc_test_bit(PRINT_DETAILS, &data(fs)->options))
         init_bitmap (fs);
 	
-    if (data (fs)->options & PRINT_DETAILS || 
-	data (fs)->options & PRINT_TREE_DETAILS) 
+    if (misc_test_bit(PRINT_DETAILS, &data(fs)->options) || 
+	misc_test_bit(LP_LEAF_DETAILS, &data(fs)->options)) 
     {
-	    if (data (fs)->options & PRINT_DETAILS) {
+	    if (misc_test_bit(PRINT_DETAILS, &data(fs)->options)) {
 		    print_disk_blocks (fs);
 		    printf("The '%s' device with reiserfs has:\n", 
 			   fs->fs_file_name);
 	    } else {
-		    print_disk_tree (fs, get_sb_root_block(fs->fs_ondisk_sb));
+		    /* DEBUGGING */
+		    print_disk_tree (fs, reiserfs_sb_get_root(fs->fs_ondisk_sb));
 		    printf("The internal reiserfs tree has:\n");
 	    }
 
@@ -563,24 +571,24 @@
 }
 
 static void callback_badblock_print(reiserfs_filsys_t *fs, 
-				    struct path *badblock_path, 
+				    reiserfs_path_t *badblock_path, 
 				    void *data) 
 {
-	struct item_head *tmp_ih;
+	reiserfs_ih_t *tmp_ih;
 	FILE *fd = (FILE *)data;
 	__u32 *ind_item;
 	__u32 i;
 	
-	tmp_ih = get_ih(badblock_path);
-	ind_item = (__u32 *)get_item(badblock_path);
+	tmp_ih = REISERFS_PATH_IH(badblock_path);
+	ind_item = (__u32 *)REISERFS_PATH_ITEM(badblock_path);
 	
-	for (i = 0; i < I_UNFM_NUM(tmp_ih); i++)
+	for (i = 0; i < reiserfs_ext_count(tmp_ih); i++)
 		fprintf (fd, "%u\n", d32_get (ind_item, i));
 
-	pathrelse (badblock_path);
+	reiserfs_tree_pathrelse (badblock_path);
 }
 
-void extract_badblock_list () {
+void debug_badblock_print () {
     FILE *fd;
 
     if (!(fd = fopen (badblocks_file, "w"))) {
@@ -588,7 +596,7 @@
 		      badblocks_file);
     }
 
-    badblock_list(fs, callback_badblock_print, fd);
+    reiserfs_badblock_traverse(fs, callback_badblock_print, fd);
     fclose (fd);
 }
 
@@ -607,7 +615,7 @@
 
 void do_corrupt_blocks (reiserfs_filsys_t * fs)
 {
-	char * line;
+	char line[256];
 	FILE * fd;
 	size_t n = 0;
 	int numblock;
@@ -619,9 +627,11 @@
 	}
 	
 	while (1) {
-		line = NULL;
+		line[0] = '\0';
 		n = 0;
-		if (getline (&line, &n, fd) == -1) {
+		if (fgets(line, sizeof(line), fd) == NULL ||
+		    strlen(line) <= 1)
+		{
 			break;
 		}
 		
@@ -634,40 +644,42 @@
 			do_corrupt_one_block(fs, line);
 		}
 		printf ("before free line : %s\n", line);
-		free (line);
 		printf ("after free\n");
-		reiserfs_reopen (fs, O_RDWR);
+		reiserfs_fs_reopen (fs, O_RDWR);
 	}
+	
 	fclose (fd);
 	return;
 }
 
 void debugreiserfs_zero_reiserfs(reiserfs_filsys_t * fs) {
     unsigned long done, total, i;
-    struct buffer_head * bh;
+    reiserfs_bh_t * bh;
 	
-    reiserfs_reopen (fs, O_RDWR);
+    reiserfs_fs_reopen (fs, O_RDWR);
     
     total = reiserfs_bitmap_ones (input_bitmap (fs));
     done = 0;
 	
     for (i = 0; i < input_bitmap(fs)->bm_bit_size; i ++) {
-		if (!reiserfs_bitmap_test_bit (input_bitmap(fs), i))
-			continue;
-		
-		bh = getblk(fs->fs_dev, i, fs->fs_blocksize);
-		
-		if (!bh)
-			die("Could not get block %lu\n", i);
-		
-		memset(bh->b_data, 0, fs->fs_blocksize);
-		mark_buffer_dirty(bh);
-		mark_buffer_uptodate(bh, 0);
-		
-		bwrite(bh);
-		
-		brelse (bh);
-		print_how_far (stderr, &done, total, 1, be_quiet (fs));
+	if (!reiserfs_bitmap_test_bit (input_bitmap(fs), i))
+	    continue;
+
+	bh = reiserfs_buffer_open(fs->fs_dev, i, fs->fs_blocksize);
+
+	if (!bh)
+	    misc_die("Could not get block %lu\n", i);
+
+	memset(bh->b_data, 0, fs->fs_blocksize);
+	reiserfs_buffer_mkdirty(bh);
+	reiserfs_buffer_mkuptodate(bh, 0);
+
+	reiserfs_buffer_write(bh);
+
+	reiserfs_buffer_close (bh);
+
+	if (!misc_test_bit(PRINT_QUIET, &data(fs)->options))
+	    util_misc_progress (stderr, &done, total, 1, 0);
     }
 	
     fprintf(stderr, "\n");
@@ -682,25 +694,25 @@
     int error;
     struct debugreiserfs_data * data;
 	
-    data = getmem (sizeof (struct debugreiserfs_data));
+    data = misc_getmem (sizeof (struct debugreiserfs_data));
     file_name = parse_options (data, argc, argv);
     
     if (data->mode == DO_UNPACK) {
-	    do_unpack(file_name, data->journal_device_name, 
-		      data->input_bitmap, data->options & BE_VERBOSE);
+	    do_unpack(file_name, data->journal_device_name, data->input_bitmap,
+		      misc_test_bit(PRINT_VERBOSE, &data->options));
 	    return 0;
     }
     
-    fs = reiserfs_open (file_name, O_RDONLY, &error, data, 0);
+    fs = reiserfs_fs_open (file_name, O_RDONLY, &error, data, 0);
     
-    if (no_reiserfs_found (fs)) {
+    if (fs == NULL) {
 	    reiserfs_exit (1, "\n\ndebugreiserfs: can not open reiserfs on "
 			   "\"%s\": %s\n\n", file_name, error ? strerror(error)
 			   : "no filesystem found");
 	    exit(1) ;
     }
     
-    if (reiserfs_open_journal (fs, data (fs)->journal_device_name, O_RDONLY)) {
+    if (reiserfs_journal_open (fs, data (fs)->journal_device_name, O_RDONLY)) {
 	    fprintf(stderr,"\ndebugreiserfs: Failed to open the fs journal.\n");
     }
 	
@@ -716,16 +728,16 @@
 	    break;
 
     case DO_CORRUPT_ONE:
-	    reiserfs_reopen (fs, O_RDWR);
+	    reiserfs_fs_reopen (fs, O_RDWR);
 	    do_corrupt_one_block (fs, (char *)NULL);
 	    break;
 
     case DO_CORRUPT_FILE:
-	    reiserfs_reopen (fs, O_RDWR);
+	    reiserfs_fs_reopen (fs, O_RDWR);
 	    do_corrupt_blocks (fs);
 	    break;
     case DO_RANDOM_CORRUPTION:
-	    reiserfs_reopen (fs, O_RDWR);
+	    reiserfs_fs_reopen (fs, O_RDWR);
 	    /*
 	       do_leaves_corruption (fs);
 	       do_bitmap_corruption (fs);
@@ -761,7 +773,7 @@
 	    reiserfs_warning (stderr, "Will try to extract list of bad blocks "
 			      "and save it to '%s' file\n", badblocks_file);
 
-	    extract_badblock_list ();
+	    debug_badblock_print ();
 	    reiserfs_warning (stderr, "Done\n\n");
 	    break;
     case DO_ZERO:
@@ -770,10 +782,9 @@
 	    break;
     }
 
-    reiserfs_close (fs);
-    if (data(fs)->log) {
+    if (data(fs)->log)
 	    fclose (data(fs)->log); 
-    }
+    reiserfs_fs_close (fs);
     return 0;
 }
 
diff --git a/debugreiserfs/debugreiserfs.h b/utils/debugfs/debugreiserfs.h
similarity index 91%
rename from debugreiserfs/debugreiserfs.h
rename to utils/debugfs/debugreiserfs.h
index 58e58e6..99b9541 100644
--- a/debugreiserfs/debugreiserfs.h
+++ b/utils/debugfs/debugreiserfs.h
@@ -2,11 +2,11 @@
  * Copyright 2000-2004 by Hans Reiser, licensing governed by 
  * reiserfsprogs/README
  */
-#define _GNU_SOURCE
 
-#ifndef HAVE_CONFIG_H
-#  include "config.h"
-#endif
+#include "reiserfs/libreiserfs.h"
+
+#if 0
+#define _GNU_SOURCE
 
 #include "io.h"
 #include "misc.h"
@@ -16,9 +16,12 @@
 
 #include <string.h>
 #include <errno.h>
+#endif
 
 extern reiserfs_filsys_t * fs;
 
+/* print all items from bitmap */
+#define PRINT_DETAILS 		LP_LAST
 
 /*
  *  modes
@@ -44,18 +47,18 @@
 
 
 /*first bits are in reiserfs_fs.b*/
-#define PRINT_JOURNAL 		0x10
-#define PRINT_JOURNAL_HEADER	0x20
-#define PRINT_BITMAP 		0x40
-#define PRINT_OBJECTID_MAP	0x80
-#define BE_QUIET 		0x100
-#define BE_VERBOSE 		0x200
+enum debug_print {
+	PRINT_JOURNAL		= LP_LAST,
+	PRINT_JOURNAL_HEADER	= LP_LAST + 1,
+	PRINT_BITMAP		= LP_LAST + 2,
+	PRINT_OBJECTID_MAP	= LP_LAST + 3,
+	PRINT_QUIET		= LP_LAST + 4,
+	PRINT_VERBOSE		= LP_LAST + 5,
+	PRINT_DEBUG_LAST
+};
 
-/* these moved to reiserfs_fs.h */
-//#define PRINT_TREE_DETAILS 		
-//#define PRINT_DETAILS 	
-//#define PRINT_ITEM_DETAILS 	 	
-//#define PRINT_DIRECT_ITEMS 	 	
+#define debug_option(options, bit)	(options & (1 << (bit)))
+#define debug_setoption(options, bit)	(options |= (1 << (bit)))
 
 
 // the leaf is stored in compact form:
@@ -101,8 +104,8 @@
 #define WITH_SD_FIRST_DIRECT_BYTE 	0x80   /* 8. for old stat data first_direct_byte is stored */
 #define NLINK_BITS_32 			0x0100 /* 9. nlinks stored in 32 bits */
 #define SIZE_BITS_64  			0x0200 /* 10. size has to be stored in 64 bit */
-#define WHOLE_INDIRECT 			0x0400 /* 11. indirect item is stored with compression */
-#define SAFE_LINK			0x0800 /* 11. indirect item is stored with compression */
+#define WHOLE_EXTENT 			0x0400 /* 11. extent item is stored with compression */
+#define SAFE_LINK			0x0800 /* 11. extent item is stored with compression */
 
 
 #define TYPE_MASK 0x3 /* two lowest bits are used to store item type */
@@ -224,7 +227,7 @@
     char * pattern; /* for -n */
     char * device_name;
     char * journal_device_name; /* for -j */
-    char * map_file; /* for -n, -N and -f */
+    char map_file[4096]; /* for -n, -N and -f */
     char * recovery_file; /* for -r */
 
     unsigned long options; /* -q only yet*/
@@ -248,8 +251,6 @@
 #define map_file(fs) (data(fs)->map_file)
 #define recovery_file(fs) (data(fs)->recovery_file)
 
-#define be_quiet(fs)  (data(fs)->options & BE_QUIET)
-
 /* stat.c */
 void do_stat (reiserfs_filsys_t * fs);
 
@@ -274,7 +275,7 @@
 void print_map(reiserfs_filsys_t * fs);
 
 struct saved_item {
-    struct item_head si_ih;
+    reiserfs_ih_t si_ih;
     unsigned long si_block;
     int si_item_num, si_entry_pos;
     struct saved_item *si_next; /* list of items having the same key */
diff --git a/debugreiserfs/pack.c b/utils/debugfs/pack.c
similarity index 65%
rename from debugreiserfs/pack.c
rename to utils/debugfs/pack.c
index b390399..33bdd0f 100644
--- a/debugreiserfs/pack.c
+++ b/utils/debugfs/pack.c
@@ -3,9 +3,14 @@
  * reiserfsprogs/README
  */
 
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
 #include "debugreiserfs.h"
-
-
+#include "misc/unaligned.h"
+#include "util/print.h"
+#include "util/misc.h"
 
 /* counters for each kind of blocks */
 int packed,
@@ -26,41 +31,41 @@
 
 inline void set_pi_type( struct packed_item *pi, __u32 val )
 {
-    set_bit_field_XX (32, pi, val, 0, 2);
+    misc_set_bitfield_XX (32, pi, val, 0, 2);
 }
 
 
 inline __u32 get_pi_type( const struct packed_item *pi )
 {
-    get_bit_field_XX (32, pi, 0, 2);
+    return misc_get_bitfield_XX (32, pi, 0, 2);
 }
 
 
 inline void set_pi_mask( struct packed_item *pi, __u32 val )
 {
-    set_bit_field_XX (32, pi, val, 2, 18);
+    misc_set_bitfield_XX (32, pi, val, 2, 18);
 }
 
 
 __u32 get_pi_mask( const struct packed_item *pi )
 {
-    get_bit_field_XX (32, pi, 2, 18);
+    return misc_get_bitfield_XX (32, pi, 2, 18);
 }
 
 
 inline void set_pi_item_len( struct packed_item *pi, __u32 val )
 {
-    set_bit_field_XX (32, pi, val, 20, 12);
+    misc_set_bitfield_XX (32, pi, val, 20, 12);
 }
 
 
 inline __u32 get_pi_item_len( const struct packed_item *pi )
 {
-    get_bit_field_XX (32, pi, 20, 12);
+    return misc_get_bitfield_XX (32, pi, 20, 12);
 }
 
 
-static void pack_ih (struct packed_item * pi, struct item_head * ih)
+static void pack_ih (struct packed_item * pi, reiserfs_ih_t * ih)
 {
     __u32 v32;
     __u16 v16;
@@ -71,31 +76,31 @@
 
     /* sen key components which are to be sent */
     if (get_pi_mask(pi) & DIR_ID) {
-	v32 = get_key_dirid (&ih->ih_key);
+	v32 = reiserfs_key_get_did (&ih->ih_key);
 	fwrite_le32 (&v32);
     }
 
     if (get_pi_mask(pi) & OBJECT_ID) {
-	v32 = get_key_objectid (&ih->ih_key);
+	v32 = reiserfs_key_get_oid (&ih->ih_key);
 	fwrite_le32 (&v32);
     }
 
     if (get_pi_mask(pi) & OFFSET_BITS_64) {
 	__u64 offset;
 
-	offset = get_offset (&ih->ih_key);
+	offset = reiserfs_key_get_off (&ih->ih_key);
 	fwrite_le64 (&offset);
     }
 
     if (get_pi_mask(pi) & OFFSET_BITS_32) {
 	__u32 offset;
 
-	offset = get_offset (&ih->ih_key);
+	offset = reiserfs_key_get_off (&ih->ih_key);
 	fwrite_le32 (&offset);
     }
 
     if (get_pi_mask(pi) & IH_FREE_SPACE) {
-	v16 = get_ih_entry_count (ih);
+	v16 = reiserfs_ih_get_entries (ih);
 	fwrite_le16 (&v16);
     }
 
@@ -106,15 +111,16 @@
 }
 
 
-static void pack_direct (struct packed_item * pi, struct buffer_head * bh, 
-			 struct item_head * ih)
+static void pack_direct (struct packed_item * pi, reiserfs_bh_t * bh, 
+			 reiserfs_ih_t * ih)
 {
-    if (get_ih_free_space (ih) != 0xffff)
+    if (reiserfs_ih_get_free (ih) != 0xffff)
 	/* ih_free_space has unexpected value */
         set_pi_mask (pi, get_pi_mask (pi) | IH_FREE_SPACE);
 
     if (get_pi_mask(pi) & SAFE_LINK)
-	set_key_dirid(&ih->ih_key, d32_get((__u32 *)B_I_PITEM (bh, ih), 0) );
+	reiserfs_key_set_did(&ih->ih_key, 
+		      d32_get((__u32 *)reiserfs_item_by_ih (bh, ih), 0) );
 
     /* send key components which are to be sent */
     pack_ih (pi, ih);
@@ -122,7 +128,7 @@
 
 
 /* if there is at least one extent longer than 2 - it is worth packing */
-static int should_pack_indirect (__u32 * ind_item, int unfm_num)
+static int should_pack_extent (__u32 * ind_item, int unfm_num)
 {
     int i, len;
 
@@ -142,42 +148,42 @@
 }
 
 
-/* indirect item can be either packed using "extents" (when it is
+/* extent item can be either packed using "extents" (when it is
    worth doing) or be stored as is. Size of item in packed form is not
    stored. Unpacking will stop when full item length is reached */
-static void pack_indirect (struct packed_item * pi, struct buffer_head * bh, 
-			   struct item_head * ih)
+static void pack_extent (struct packed_item * pi, reiserfs_bh_t * bh, 
+			   reiserfs_ih_t * ih)
 {
     unsigned int i;
     __u32 * ind_item;
     __u16 len;
 
 
-    if (get_ih_entry_count (ih))
+    if (reiserfs_ih_get_entries (ih))
         set_pi_mask (pi, get_pi_mask (pi) | IH_FREE_SPACE);
 
-    ind_item = (__u32 *)B_I_PITEM (bh, ih);
-    if (!should_pack_indirect (ind_item, I_UNFM_NUM (ih)))
-        set_pi_mask (pi, get_pi_mask (pi) | WHOLE_INDIRECT);
+    ind_item = (__u32 *)reiserfs_item_by_ih (bh, ih);
+    if (!should_pack_extent (ind_item, reiserfs_ext_count (ih)))
+        set_pi_mask (pi, get_pi_mask (pi) | WHOLE_EXTENT);
 
 
     if (get_pi_mask(pi) & SAFE_LINK)
-	set_key_dirid(&ih->ih_key, d32_get(ind_item, 0));
+	reiserfs_key_set_did(&ih->ih_key, d32_get(ind_item, 0));
 
     pack_ih (pi, ih);
 
     if (get_pi_mask(pi) & SAFE_LINK)
         return;
 
-    if (get_pi_mask(pi) & WHOLE_INDIRECT) {
-	fwrite (ind_item, get_ih_item_len (ih), 1, stdout);
-	sent_bytes += get_ih_item_len (ih);
+    if (get_pi_mask(pi) & WHOLE_EXTENT) {
+	fwrite (ind_item, reiserfs_ih_get_len (ih), 1, stdout);
+	sent_bytes += reiserfs_ih_get_len (ih);
 	return;
     }
 
     fwrite32 (&ind_item [0]);
 
-    for (i = 1, len = 1; i < I_UNFM_NUM (ih); i ++) {
+    for (i = 1, len = 1; i < reiserfs_ext_count (ih); i ++) {
 	if ((d32_get(ind_item, i) == 0 && d32_get(ind_item, i - 1) == 0)  || 
 	    d32_get(ind_item, i) == d32_get(ind_item, i - 1) + 1) 
 	{
@@ -206,11 +212,11 @@
 		maybe deh_state (16)
 */
 static void pack_direntry (reiserfs_filsys_t * fs, struct packed_item * pi,
-			   struct buffer_head * bh,
-			   struct item_head * ih)
+			   reiserfs_bh_t * bh,
+			   reiserfs_ih_t * ih)
 {
     int i;
-    struct reiserfs_de_head * deh;
+    reiserfs_deh_t * deh;
     struct packed_dir_entry pe;
     __u16 entry_count, gen_counter;
 
@@ -221,28 +227,28 @@
     pack_ih (pi, ih);
 
     /* entry count is sent unconditionally */
-    entry_count = get_ih_entry_count (ih);
+    entry_count = reiserfs_ih_get_entries (ih);
 
-    deh = B_I_DEH (bh, ih);
+    deh = reiserfs_deh (bh, ih);
     for (i = 0; i < entry_count; i ++, deh ++) {
-	pe.entrylen = entry_length (ih, deh, i);
+	pe.entrylen = reiserfs_direntry_entry_len (ih, deh, i);
 	pe.mask = 0;
-	if (get_deh_dirid (deh) != get_key_objectid (&ih->ih_key))
+	if (reiserfs_deh_get_did (deh) != reiserfs_key_get_oid (&ih->ih_key))
 	    /* entry points to name of another directory, store deh_dir_id */
 	    pe.mask |= HAS_DIR_ID;
 
-	gen_counter = GET_GENERATION_NUMBER (get_deh_offset (deh));
+	gen_counter = OFFSET_GEN (reiserfs_deh_get_off (deh));
 	if (gen_counter != 0)
 	    /* store generation counter if it is != 0 */
 	    pe.mask |= HAS_GEN_COUNTER;
 
-	if (get_deh_state (deh) != 4)
+	if (reiserfs_deh_get_state (deh) != 4)
 	    /* something unusual in deh_state. Store it */
 	    pe.mask |= HAS_STATE;
 
 	fwrite8 (&pe.mask);
 	fwrite_le16 (&pe.entrylen);
-	fwrite (name_in_entry (deh, i), pe.entrylen, 1, stdout);
+	fwrite (reiserfs_deh_name (deh, i), pe.entrylen, 1, stdout);
 	sent_bytes += pe.entrylen;
 	fwrite32 (&(deh->deh2_objectid));
 	
@@ -258,14 +264,14 @@
 }
 
 
-static void pack_stat_data (struct packed_item * pi, struct buffer_head * bh,
-			    struct item_head * ih)
+static void pack_stat_data (struct packed_item * pi, reiserfs_bh_t * bh,
+			    reiserfs_ih_t * ih)
 {
-    if (get_ih_free_space (ih) != 0xffff)
+    if (reiserfs_ih_get_free (ih) != 0xffff)
 	/* ih_free_space has unexpected value */
         set_pi_mask (pi, get_pi_mask (pi) | IH_FREE_SPACE);
 
-    if (stat_data_v1 (ih)) {
+    if (reiserfs_ih_format_v1 (ih)) {
 	/* for old stat data: we take
 	   mode - 16 bits
 	   nlink - 16 bits
@@ -273,10 +279,10 @@
 	   blocks/rdev - 32 bits
 	   maybe first_direct byte 32 bits
 	*/
-	struct stat_data_v1 * sd_v1;
+	reiserfs_sd_v1_t * sd_v1;
 
-	sd_v1 = (struct stat_data_v1 *)B_I_PITEM (bh, ih);
-	if (sd_v1->sd_first_direct_byte != 0xffffffff) /* ok if -1 */
+	sd_v1 = (reiserfs_sd_v1_t *)reiserfs_item_by_ih (bh, ih);
+	if (sd_v1->sd_fdb != 0xffffffff) /* ok if -1 */
             set_pi_mask (pi, get_pi_mask (pi) | WITH_SD_FIRST_DIRECT_BYTE);
 
 
@@ -288,7 +294,7 @@
 	fwrite32 (&sd_v1->u.sd_blocks);
 
 	if (get_pi_mask(pi) & WITH_SD_FIRST_DIRECT_BYTE)
-	    fwrite32 (&sd_v1->sd_first_direct_byte);
+	    fwrite32 (&sd_v1->sd_fdb);
     } else {
 	/* for new stat data
 	   mode - 16 bits
@@ -296,26 +302,26 @@
 	   size in either 32 or 64 bits
 	   blocks - 32 bits
 	*/
-	struct stat_data * sd;
+	reiserfs_sd_t * sd;
         /* these will maintain disk-order values */
 	__u16 nlink16;
 	__u32 nlink32, size32;
 	__u64 size64;
 
-	sd = (struct stat_data *)B_I_PITEM (bh, ih);
-	if (sd_v2_nlink (sd) > 0xffff) {
+	sd = (reiserfs_sd_t *)reiserfs_item_by_ih (bh, ih);
+	if (reiserfs_sd_v2_nlink (sd) > 0xffff) {
             set_pi_mask (pi, get_pi_mask (pi) | NLINK_BITS_32);
 	    nlink32 = sd->sd_nlink;
 	} else {
             /* This is required to deal with big endian systems */
-	    nlink16 = cpu_to_le16 ((__u16)sd_v2_nlink (sd));
+	    nlink16 = cpu_to_le16 ((__u16)reiserfs_sd_v2_nlink (sd));
 	}
-	if (sd_v2_size (sd) > 0xffffffff) {
+	if (reiserfs_sd_v2_size (sd) > 0xffffffff) {
             set_pi_mask (pi, get_pi_mask (pi) | SIZE_BITS_64);
 	    size64 = sd->sd_size;
 	} else {
             /* This is required to deal with big endian systems */
-	    size32 = cpu_to_le32 ((__u32)sd_v2_size (sd));
+	    size32 = cpu_to_le32 ((__u32)reiserfs_sd_v2_size (sd));
 	}
 
 
@@ -340,7 +346,7 @@
 }
 
 
-static void pack_full_block (reiserfs_filsys_t * fs, struct buffer_head * bh)
+static void pack_full_block (reiserfs_filsys_t * fs, reiserfs_bh_t * bh)
 {
     __u16 magic;
     __u32 block;
@@ -370,7 +376,7 @@
     if (block >= SB_BLOCK_COUNT (fs))
         return 1;
 
-    if (not_data_block (fs, block))
+    if (reiserfs_fs_block(fs, block) != BT_UNKNOWN)
         return 1;
 
     return 0;
@@ -378,27 +384,31 @@
 #endif
 
 /* we only pack leaves which do not have any corruptions */
-static int can_pack_leaf (reiserfs_filsys_t * fs, struct buffer_head * bh)
+static int can_pack_leaf (reiserfs_filsys_t * fs, reiserfs_bh_t * bh)
 {
     int i;
-    struct item_head * ih;
+    reiserfs_ih_t * ih;
 
-    ih = B_N_PITEM_HEAD (bh, 0);
-    for (i = 0; i < get_blkh_nr_items (B_BLK_HEAD (bh)); i ++, ih ++) {
-	if (is_it_bad_item (fs, ih, B_I_PITEM (bh, ih), 0/*check_unfm_ptr*/, 1/*bad dir*/))
+    ih = reiserfs_ih_at (bh, 0);
+    for (i = 0; i < reiserfs_nh_get_items (NODE_HEAD (bh)); i ++, ih ++) {
+	if (reiserfs_leaf_correct_at (fs, ih, reiserfs_item_by_ih (bh, ih), 
+				      0/*check_unfm_ptr*/, 1/*bad dir*/))
+	{
 	    return 0;
+	}
     }
+    
     return 1;
 }
 
 
 /* pack leaf only if all its items are correct: keys are correct,
    direntries are hashed properly and hash function is defined,
-   indirect items are correct, stat data ?, */
-static void pack_leaf (reiserfs_filsys_t * fs, struct buffer_head * bh)
+   extent items are correct, stat data ?, */
+static void pack_leaf (reiserfs_filsys_t * fs, reiserfs_bh_t * bh)
 {
     int i;
-    struct item_head * ih;
+    reiserfs_ih_t * ih;
     struct packed_item pi;
     __u16 v16;
 
@@ -410,17 +420,17 @@
     }
 
     /* start magic in low 8 bits, hash code in high 8 bits */
-    v16 = (LEAF_START_MAGIC | (func2code (fs->fs_hash_function) << 8));
+    v16 = (LEAF_START_MAGIC | (reiserfs_hash_code(fs->hash) << 8));
     fwrite_le16 (&v16);
     
     /* block number */
     fwrite_le32 (&bh->b_blocknr);
 
     /* item number */
-    v16 = get_blkh_nr_items (B_BLK_HEAD (bh));
+    v16 = reiserfs_nh_get_items (NODE_HEAD (bh));
     fwrite_le16 (&v16);
 
-    ih = B_N_PITEM_HEAD (bh, 0);
+    ih = reiserfs_ih_at (bh, 0);
 
     for (i = 0; i < v16; i ++, ih ++) {
 #if 0
@@ -429,41 +439,46 @@
 #endif
 
         set_pi_mask (&pi, 0);
-        set_pi_item_len (&pi, get_ih_item_len (ih));
-        set_pi_type (&pi, get_type (&ih->ih_key));
+        set_pi_item_len (&pi, reiserfs_ih_get_len (ih));
+        set_pi_type (&pi, reiserfs_key_get_type (&ih->ih_key));
 
 	// format
-	if (get_ih_key_format (ih) == KEY_FORMAT_2)
+	if (reiserfs_ih_get_format (ih) == KEY_FORMAT_2)
             set_pi_mask( &pi, get_pi_mask(&pi) | NEW_FORMAT );
 
 	// k_dir_id
-	if (!i || (i && get_key_dirid (&ih->ih_key) != get_key_dirid (&(ih - 1)->ih_key))) {
+	if (!i || (i && reiserfs_key_get_did (&ih->ih_key) != reiserfs_key_get_did (&(ih - 1)->ih_key))) {
 	    /* if item is first in the leaf or if previous item has different
                k_dir_id - store it */
             set_pi_mask (&pi, get_pi_mask (&pi) | DIR_ID);
 	}
 	// k_object_id
-	if (!i || (i && get_key_objectid (&ih->ih_key) != get_key_objectid (&(ih - 1)->ih_key))) {
+	if (!i || (i && reiserfs_key_get_oid (&ih->ih_key) != reiserfs_key_get_oid (&(ih - 1)->ih_key))) {
 	    /* if item is first in the leaf or if previous item has different
                k_objectid - store it */
             set_pi_mask (&pi, get_pi_mask (&pi) | OBJECT_ID);
 	}
 
 	/* store offset if it is != 0 in 32 or 64 bits */
-	if (get_offset (&ih->ih_key)) {
+	if (reiserfs_key_get_off (&ih->ih_key)) {
 	    int send_offset = 1;
 
 	    if ((get_pi_mask (&pi) & DIR_ID) == 0 && (get_pi_mask (&pi) & OBJECT_ID) == 0) {
 		/* previous item is of the same object, so try to avoid
                    sending k_offset */
-		if ((is_stat_data_ih (ih - 1) && get_offset (&ih->ih_key) == 1) ||
-		    (is_indirect_ih (ih - 1) && is_direct_ih (ih) && 
-		     get_offset (&(ih - 1)->ih_key) + get_bytes_number (ih - 1, fs->fs_blocksize) == get_offset (&ih->ih_key)))
+		if ((reiserfs_ih_stat (ih - 1) && 
+		     reiserfs_key_get_off (&ih->ih_key) == 1) ||
+		    (reiserfs_ih_ext (ih - 1) && reiserfs_ih_direct (ih) && 
+		     reiserfs_key_get_off (&(ih - 1)->ih_key) + 
+		     reiserfs_leaf_ibytes (ih - 1, fs->fs_blocksize) == 
+		     reiserfs_key_get_off (&ih->ih_key)))
+		{
 		    /* unpack can calculate offset itself */
 		    send_offset = 0;
+		}
 	    }
 	    if (send_offset) {
-		if (get_offset (&ih->ih_key) > 0xffffffffULL)
+		if (reiserfs_key_get_off (&ih->ih_key) > 0xffffffffULL)
                     set_pi_mask (&pi, get_pi_mask (&pi) | OFFSET_BITS_64);
 		else
                     set_pi_mask (&pi, get_pi_mask (&pi) | OFFSET_BITS_32);
@@ -471,22 +486,22 @@
 	}
 
 	/* ih key format is correct, check fsck_need field */
-	if (get_ih_flags (ih))
+	if (reiserfs_ih_get_flags (ih))
             set_pi_mask (&pi, get_pi_mask (&pi) | IH_FORMAT);
 
-	if ((get_key_dirid (&ih->ih_key) == (__u32)-1) && (get_ih_item_len (ih) == 4))
+	if ((reiserfs_key_get_did (&ih->ih_key) == (__u32)-1) && (reiserfs_ih_get_len (ih) == 4))
             set_pi_mask (&pi, get_pi_mask (&pi) | SAFE_LINK);
 
-	if (is_direct_ih (ih)) {
+	if (reiserfs_ih_direct (ih)) {
 	    pack_direct (&pi, bh, ih);
-	} else if (is_indirect_ih (ih))
-	    pack_indirect (&pi, bh, ih);
-	else if (is_direntry_ih (ih))
+	} else if (reiserfs_ih_ext (ih))
+	    pack_extent (&pi, bh, ih);
+	else if (reiserfs_ih_dir (ih))
 	    pack_direntry (fs, &pi, bh, ih);
-	else if (is_stat_data_ih (ih))
+	else if (reiserfs_ih_stat (ih))
 	    pack_stat_data (&pi, bh, ih);
 	else
-	    die ("pack_leaf: unknown item found");
+	    misc_die ("pack_leaf: unknown item found");
 #if 0
 	v32 = ITEM_END_MAGIC;
 	fwrite32 (&v32);
@@ -504,14 +519,14 @@
 }
 
 
-static int can_pack_internal (reiserfs_filsys_t * fs, struct buffer_head * bh)
+static int can_pack_internal (reiserfs_filsys_t * fs, reiserfs_bh_t * bh)
 {
     return 0;
 }
 
 
 /* pack internal node as a full block */
-static void pack_internal (reiserfs_filsys_t * fs, struct buffer_head * bh)
+static void pack_internal (reiserfs_filsys_t * fs, reiserfs_bh_t * bh)
 {
     internals ++;
     if (!can_pack_internal (fs, bh)) {
@@ -524,24 +539,24 @@
 
 
 /* packed blocks are marked free in the bitmap*/
-static void send_block (reiserfs_filsys_t * fs, struct buffer_head * bh, int send_unknown)
+static void send_block (reiserfs_filsys_t * fs, reiserfs_bh_t * bh, int send_unknown)
 {
     int type;
 
     packed ++;
-    type = who_is_this (bh->b_data, bh->b_size);
+    type = reiserfs_node_type (bh);
     switch (type) {
-    case THE_LEAF:
+    case NT_LEAF:
 	pack_leaf (fs, bh);
 	break;
 
-    case HAS_IH_ARRAY:
+    case NT_IH_ARRAY:
 	having_ih_array ++;
 //	fprintf (stderr, "BROKEN BLOCK HEAD %lu\n", bh->b_blocknr);
 	pack_full_block (fs, bh);
 	break;
 	
-    case THE_INTERNAL:
+    case NT_INTERNAL:
 	pack_internal (fs, bh);
 	break;
 
@@ -562,52 +577,58 @@
 /* super block, journal, bitmaps */
 static void pack_frozen_data (reiserfs_filsys_t * fs)
 {
-    struct buffer_head * bh;
+    reiserfs_bh_t * bh;
     unsigned long block;
     __u16 magic16;
     int sent_journal_start_magic = 0;
-    unsigned int i;
+    unsigned int i, bmap_nr;
     
-    if (is_reiserfs_jr_magic_string(fs->fs_ondisk_sb) &&
-	get_jp_journal_dev(sb_jp(fs->fs_ondisk_sb)) &&
+    if (reiserfs_super_jr_magic(fs->fs_ondisk_sb) &&
+	reiserfs_jp_get_dev(reiserfs_sb_jp(fs->fs_ondisk_sb)) &&
 	!journal_device_name(fs)) {
-	if (!user_confirmed (stderr,
-			     "\n File system has non-standard journal "
-			     "that hasn't been specified.\n"
-			     "Continue packing without journal? [N/Yes] (note need to type Yes):", "Yes\n"))
+	if (!util_user_confirmed (stderr,"\n File system has non-standard "
+				  "journal that hasn't been specified.\n"
+				  "Continue packing without journal? [N/Yes] "
+				  "(note need to type Yes):", "Yes\n"))
+	{
 	    exit (0);
+	}
     }
     
     /* super block */
     reiserfs_warning (stderr, "super block..");fflush (stderr);
-    send_block (fs, fs->fs_super_bh, 1/*send block even if its format is not determined */);
-    reiserfs_warning (stderr, "ok\nbitmaps..(%d).. ", 
-		      get_sb_bmap_nr (fs->fs_ondisk_sb));
+    send_block (fs, fs->fs_super_bh, 
+		1/*send block even if its format is not determined */);
+    
+    bmap_nr = reiserfs_bmap_nr(reiserfs_sb_get_blocks (fs->fs_ondisk_sb),
+			       fs->fs_blocksize);
+    
+    reiserfs_warning (stderr, "ok\nbitmaps..(%d).. ", bmap_nr);
     fflush (stderr);
 
     /* bitmaps */
     block = fs->fs_super_bh->b_blocknr + 1;
-    for (i = 0; i < get_sb_bmap_nr (fs->fs_ondisk_sb); i ++) {
-	bh = bread (fs->fs_dev, block, fs->fs_blocksize);
+    for (i = 0; i < bmap_nr; i ++) {
+	bh = reiserfs_buffer_read (fs->fs_dev, block, fs->fs_blocksize);
 	if (!bh) {
-	    fprintf (stderr, "pack_frozen_data: bread failed: %lu\n", block);
+	    fprintf (stderr, "pack_frozen_data: reiserfs_buffer_read failed: %lu\n", block);
 	    continue;
 	}
 	send_block (fs, bh, 1);
-	if (spread_bitmaps (fs))
+	if (reiserfs_bitmap_spread (fs))
 	    block = (block / (fs->fs_blocksize * 8) + 1) * (fs->fs_blocksize * 8);
 	else
 	    block ++;	
-	brelse (bh);
+	reiserfs_buffer_close (bh);
     }
 
     /* journal */
 
-    if (get_jp_journal_dev (sb_jp (fs->fs_ondisk_sb))) {
+    if (reiserfs_jp_get_dev (reiserfs_sb_jp (fs->fs_ondisk_sb))) {
 	/* non-standard journal is on a separate device */
 	    
 	if (journal_device_name (fs) && !reiserfs_journal_opened (fs))
-	    die ("Specified journal is not available. Specify it correctly or "
+	    misc_die ("Specified journal is not available. Specify it correctly or "
 		 "don't specify at all");
 	else if (!journal_device_name(fs)) 
 	    /* non-standard journal was not specified (that confirmed by user) -
@@ -619,19 +640,19 @@
 	    sent_journal_start_magic = 1;
 	}
     }
-    block = get_jp_journal_1st_block (sb_jp (fs->fs_ondisk_sb));
+    block = reiserfs_jp_get_start (reiserfs_sb_jp (fs->fs_ondisk_sb));
     reiserfs_warning (stderr, "ok\njournal (from %lu to %lu)..",
-		      block, block + get_jp_journal_size (sb_jp (fs->fs_ondisk_sb)));
+		      block, block + reiserfs_jp_get_size (reiserfs_sb_jp (fs->fs_ondisk_sb)));
     fflush (stderr);
-    for (i = 0; i <= get_jp_journal_size (sb_jp (fs->fs_ondisk_sb)); i ++) {
-	bh = bread (fs->fs_journal_dev, block + i, fs->fs_blocksize);
+    for (i = 0; i <= reiserfs_jp_get_size (reiserfs_sb_jp (fs->fs_ondisk_sb)); i ++) {
+	bh = reiserfs_buffer_read (fs->fs_journal_dev, block + i, fs->fs_blocksize);
 	if (!bh) {
 	    reiserfs_warning (stderr, "could not read %lu, skipped\n", i);
 	    continue;
 	}
 	
 	send_block (fs, bh, 1);
-	brelse (bh);
+	reiserfs_buffer_close (bh);
     }
     if (sent_journal_start_magic) {
 	magic16 = SEPARATED_JOURNAL_END_MAGIC;
@@ -647,7 +668,7 @@
 /* pack all "not data blocks" and correct leaf */
 void pack_partition (reiserfs_filsys_t * fs)
 {
-    struct buffer_head * bh;
+    reiserfs_bh_t * bh;
     __u32 magic32;
     __u16 blocksize;
     __u16 magic16;
@@ -675,20 +696,22 @@
     total = reiserfs_bitmap_ones (what_to_pack);
 
 
-    for (i = 0; i < get_sb_block_count (fs->fs_ondisk_sb); i ++) {
+    for (i = 0; i < reiserfs_sb_get_blocks (fs->fs_ondisk_sb); i ++) {
 	if (!reiserfs_bitmap_test_bit (what_to_pack, i))
 	    continue;
-	
-	print_how_far (stderr, &done, total, 1, be_quiet (fs));
 
-	bh = bread (fs->fs_dev, i, blocksize);
+	if (!misc_test_bit(PRINT_QUIET, &data(fs)->options)) {
+	    util_misc_progress (stderr, &done, total, 1, 0);
+	}
+
+	bh = reiserfs_buffer_read (fs->fs_dev, i, blocksize);
 	if (!bh) {
 	    reiserfs_warning (stderr, "could not read block %lu\n", i);
 	    continue;
 	}
 
 	send_block (fs, bh, 0/*do not send block of not determined format */);
-	brelse (bh);
+	reiserfs_buffer_close (bh);
     }
 
     magic16 = END_MAGIC;
@@ -714,7 +737,7 @@
 {
     __u32 magic32;
     __u16 magic16;
-    struct buffer_head * bh;
+    reiserfs_bh_t * bh;
 
     // reiserfs magic
     magic32 = REISERFS_SUPER_MAGIC;
@@ -723,17 +746,17 @@
     // blocksize
     fwrite_le16 (&fs->fs_blocksize);
     
-    bh = bread (fs->fs_dev, block, fs->fs_blocksize);
+    bh = reiserfs_buffer_read (fs->fs_dev, block, fs->fs_blocksize);
 
     if (!bh) 
 	return;
 
-    if (who_is_this (bh->b_data, bh->b_size) == THE_LEAF)
+    if (reiserfs_node_type (bh) == NT_LEAF)
 	pack_leaf (fs, bh);
     else
 	pack_full_block (fs, bh);
 
-    brelse (bh);
+    reiserfs_buffer_close (bh);
 
     // end magic
     magic16 = END_MAGIC;
diff --git a/debugreiserfs/recover.c b/utils/debugfs/recover.c
similarity index 63%
rename from debugreiserfs/recover.c
rename to utils/debugfs/recover.c
index f5130e9..f7ad938 100644
--- a/debugreiserfs/recover.c
+++ b/utils/debugfs/recover.c
@@ -3,8 +3,14 @@
  * reiserfsprogs/README
  */
 
-#include "debugreiserfs.h"
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
 
+#include "debugreiserfs.h"
+#include "misc/unaligned.h"
+
+#include <errno.h>
 
 #if 0
 
@@ -22,17 +28,17 @@
     char * line = 0;
     int n = 0;
     int fd;
-    struct key key = {0, 0, };
-    struct buffer_head * bh;
-    struct item_head * ih;
+    reiserfs_key_t key = {0, 0, };
+    reiserfs_bh_t * bh;
+    reiserfs_ih_t * ih;
     unsigned long block;
     char code;
-    loff_t recovered = 0;
+    long long int recovered = 0;
     int i, j;
     reiserfs_bitmap_t bitmap;
     int used, not_used;
 
-    bitmap = reiserfs_create_bitmap (SB_BLOCK_COUNT (fs));
+    bitmap = reiserfs_bitmap_create (SB_BLOCK_COUNT (fs));
     reiserfs_fetch_disk_bitmap (bitmap, fs);
     /* we check how many blocks recoverd items point to are free or used */
     used = 0;
@@ -46,7 +52,7 @@
 	case 'K':
 	    /* get a key of file which is to be recovered */
 	    if (sscanf (line, "%c %u %u\n", &code, &key.k_dir_id, &key.k_objectid) != 3) {
-		die ("recover_file: wrong input K format");
+		misc_die ("recover_file: wrong input K format");
 	    }
 	    printf ("Recovering file (%u, %u)\n", key.k_dir_id, key.k_objectid);
 	    break;
@@ -55,22 +61,22 @@
 	    /* get a file name */
 	    recovered = 0;
 	    if (sscanf (line, "%c %s\n", &code, name) != 2) {
-		die ("recover_file: wrong input N format");
+		misc_die ("recover_file: wrong input N format");
 	    }
 	    fd = open (name, O_RDWR | O_CREAT | O_EXCL, 0644);
 	    if (fd == -1)
-		die ("recover_file: could not create file %s: %s",
+		misc_die ("recover_file: could not create file %s: %s",
 		     name,strerror (errno));
 	    printf ("Recovering file %s..\n", name);
 	    break;
 
 	case 'B':
 	    if (!fd)
-		die ("recover_file: file name is not specified");
+		misc_die ("recover_file: file name is not specified");
 	    if (sscanf (line, "%c %lu\n", &code, &block) != 2) {
-		die ("recover_file: wrong input B format");
+		misc_die ("recover_file: wrong input B format");
 	    }
-	    bh = bread (fs->s_dev, block, fs->s_blocksize);
+	    bh = reiserfs_buffer_read (fs->s_dev, block, fs->s_blocksize);
 	    if (!bh) {
 		printf ("reading block %lu failed\n", block);
 		continue;
@@ -78,29 +84,29 @@
 
 	    printf ("working with block %lu..\n", block);
 
-	    ih = B_N_PITEM_HEAD (bh, 0);
+	    ih = reiserfs_ih_at (bh, 0);
 	    for (i = 0; i < node_item_number (bh); i ++, ih ++) {
-		__u32 * indirect;
-		struct buffer_head * tmp_bh;
+		__u32 * extent;
+		reiserfs_bh_t * tmp_bh;
 
-		if (!is_indirect_ih (ih) || key.k_dir_id != ih->ih_key.k_dir_id ||
+		if (!reiserfs_ih_ext (ih) || key.k_dir_id != ih->ih_key.k_dir_id ||
 		    key.k_objectid != ih->ih_key.k_objectid)
 		    continue;
 
-		indirect = (__u32 *)B_I_PITEM (bh, ih);
-		for (j = 0; j < I_UNFM_NUM (ih); j ++) {
-		    block = le32_to_cpu (indirect [j]);
+		extent = (__u32 *)reiserfs_item_by_ih (bh, ih);
+		for (j = 0; j < reiserfs_ext_count (ih); j ++) {
+		    block = le32_to_cpu (extent [j]);
 		    if (!block)
 			continue;
-		    tmp_bh = bread (fs->s_dev, block, fs->s_blocksize);
+		    tmp_bh = reiserfs_buffer_read (fs->s_dev, block, fs->s_blocksize);
 		    if (!tmp_bh) {
-			printf ("reading block %Lu failed\n", (loff_t)block * fs->s_blocksize);
+			printf ("reading block %Lu failed\n", (long long int)block * fs->s_blocksize);
 			continue;
 		    }
-		    if (lseek64 (fd, get_offset (&ih->ih_key) + j * fs->s_blocksize - 1,
-				 SEEK_SET) == (loff_t)-1) {
-			printf ("llseek failed to pos %Ld\n", (loff_t)block * fs->s_blocksize);
-			brelse (tmp_bh);
+		    if (lseek64 (fd, reiserfs_key_get_off (&ih->ih_key) + j * fs->s_blocksize - 1,
+				 SEEK_SET) == (off_t)-1) {
+			printf ("llseek failed to pos %Ld\n", (long long int)block * fs->s_blocksize);
+			reiserfs_buffer_close (tmp_bh);
 			continue;
 		    }
 		    if (reiserfs_bitmap_test_bit (bitmap, block))
@@ -108,17 +114,17 @@
 		    else
 			not_used ++;
 		    /*printf ("block of file %Ld gets block %lu\n",
-		      (get_offset (&ih->ih_key) - 1) / fs->s_blocksize + j, block);*/
+		      (reiserfs_key_get_off (&ih->ih_key) - 1) / fs->s_blocksize + j, block);*/
 		    if (write (fd, tmp_bh->b_data, tmp_bh->b_size) != tmp_bh->b_size) {
-			printf ("write failed to pos %Ld\n", (loff_t)block * fs->s_blocksize);
-			brelse (tmp_bh);
+			printf ("write failed to pos %Ld\n", (long long int)block * fs->s_blocksize);
+			reiserfs_buffer_close (tmp_bh);
 			continue;
 		    }
 		    recovered += fs->s_blocksize;
-		    brelse (tmp_bh);
+		    reiserfs_buffer_close (tmp_bh);
 		}
 	    }
-	    brelse (bh);
+	    reiserfs_buffer_close (bh);
 	    break;
 	}
     }
@@ -169,7 +175,7 @@
 			  &ids[0], buf, &ids[2]);
 
 	
-	//do_recover = user_confirmed (stdout, "recover? (Y):", "Y\n");
+	//do_recover = util_user_confirmed (stdout, "recover? (Y):", "Y\n");
 	//if (do_recover)
 	//    reiserfs_warning (stderr, "recovering not ready\n");
 	
@@ -220,7 +226,7 @@
 {
     FILE * fp;
 
-    if (map_file (fs)) {
+    if (map_file (fs) [0] != '\0') {
 	fp = fopen (map_file (fs), "r");
 	if (fp == 0) {
 	    reiserfs_warning (stderr, "do_recover: fopen failed: %m");
@@ -243,24 +249,28 @@
 #include <limits.h>
 
 static long int get_answer(long int max) {
-    char *answer, *tmp;    
-    size_t n = 0;    
+    char answer[256], *tmp;    
     long int result = 0;
 
     do {
 	printf("Which should be left?: ");
-	getline (&answer, &n, stdin);
+	fgets(answer, sizeof(answer), stdin);
 	result = strtol (answer, &tmp, 0);
-	if ((errno != ERANGE) && (result < max) && (result >= 0) &&
+	if ((errno != ERANGE) && 
+	    (result < max) && 
+	    (result >= 0) &&
 	    (answer != tmp))
+	{
 	    break;
+	}
     } while (1);
+    
     return result;
 }
 
 static void recover_items(FILE *fp, reiserfs_filsys_t * fs, FILE *target_file) {
-    struct buffer_head *bh, *bh_pointed;
-    struct item_head *ih;
+    reiserfs_bh_t *bh, *bh_pointed;
+    reiserfs_ih_t *ih;
     struct saved_item item, *cur;
     int size = sizeof(struct saved_item) - sizeof(struct saved_item *);
     struct saved_item *map = NULL;
@@ -277,42 +287,56 @@
 	memcpy((void *)map + map_size - sizeof(struct saved_item), &item, size);
     }
     
-    for (i = 1, cur = map + 1; i <= map_size / sizeof(struct saved_item); i++, cur++) {
-	bh = bread (fs->fs_dev, (cur - 1)->si_block, fs->fs_blocksize);
+    for (i = 1, cur = map + 1; 
+	 i <= map_size / sizeof(struct saved_item); 
+	 i++, cur++) 
+    {
+	bh = reiserfs_buffer_read (fs->fs_dev, (cur - 1)->si_block, 
+			     fs->fs_blocksize);
 	if (!bh) {
-	    reiserfs_warning (fp, "bread failed\n");
+	    reiserfs_warning (fp, "reiserfs_buffer_read failed\n");
 	    continue;
 	}
 
 	if (i == map_size / sizeof(struct saved_item)) {
 	    if (start != -1) {
-		reiserfs_print_item(stdout, bh, B_N_PITEM_HEAD (bh, (cur - 1)->si_item_num));
+		reiserfs_leaf_print(stdout, fs, bh, 0, 
+				    (cur - 1)->si_item_num, 
+				    (cur - 1)->si_item_num + 1);
+		
 		result = get_answer(i - start) + start;
 	    } else {
 		result = i - 1;
 	    }
 	    
 	    start = -1;
-	} else if (is_direntry_ih(&(cur - 1)->si_ih) || is_stat_data_ih(&(cur - 1)->si_ih)) {
-	    brelse(bh);
+	} else if (reiserfs_ih_dir(&(cur - 1)->si_ih) || 
+		   reiserfs_ih_stat(&(cur - 1)->si_ih)) 
+	{
+	    reiserfs_buffer_close(bh);
 	    continue;
 	} else { 
-	    length = get_bytes_number(&(cur - 1)->si_ih, fs->fs_blocksize);
-	    if (offset < get_offset(&(cur - 1)->si_ih.ih_key) + 
-		get_bytes_number(&(cur - 1)->si_ih, fs->fs_blocksize))
-		offset = get_offset(&(cur - 1)->si_ih.ih_key) + (length ? length - 1 : 0);
+	    length = reiserfs_leaf_ibytes(&(cur - 1)->si_ih, fs->fs_blocksize);
+	    if (offset < reiserfs_key_get_off(&(cur - 1)->si_ih.ih_key) + 
+		reiserfs_leaf_ibytes(&(cur - 1)->si_ih, fs->fs_blocksize))
+		offset = reiserfs_key_get_off(&(cur - 1)->si_ih.ih_key) + 
+			(length ? length - 1 : 0);
 	
-	    if (offset >= get_offset(&cur->si_ih.ih_key)) {
+	    if (offset >= reiserfs_key_get_off(&cur->si_ih.ih_key)) {
 		/* Problem interval */
 		if (start == -1)
 		    start = i - 1;
 	    
 		printf("Problem item %d:\n", i - start - 1);
-		reiserfs_print_item(stdout, bh, B_N_PITEM_HEAD (bh, (cur - 1)->si_item_num));
+		reiserfs_leaf_print(stdout, fs, bh, 0, 
+				    (cur - 1)->si_item_num,
+				    (cur - 1)->si_item_num + 1);
 	    } else if (start != -1) {
 		/* problem interval finished */
 		printf("Problem item %d:\n", i - start - 1);
-		reiserfs_print_item(stdout, bh, B_N_PITEM_HEAD (bh, (cur - 1)->si_item_num));
+		reiserfs_leaf_print(stdout, fs, bh, 0, 
+				    (cur - 1)->si_item_num,
+				    (cur - 1)->si_item_num + 1);
 	    
 		result = get_answer((long int)i - start) + start;
 		start = -1;
@@ -320,40 +344,48 @@
 		result = i - 1;
 	    }
 	}
-	brelse(bh);
+	reiserfs_buffer_close(bh);
 	
 	if (start != -1)
 	    continue;
 
-	printf("write %ld\n", result);
-
-	bh = bread (fs->fs_dev, (map + result)->si_block, fs->fs_blocksize);
+	bh = reiserfs_buffer_read (fs->fs_dev, (map + result)->si_block, 
+			     fs->fs_blocksize);
 	if (!bh) {
-	    reiserfs_warning (fp, "bread failed\n");
+	    reiserfs_warning (fp, "reiserfs_buffer_read failed\n");
 	    continue;
 	}
 
-	fseek(target_file, get_offset(&(map + result)->si_ih.ih_key) - 1, SEEK_SET);
-	ih = B_N_PITEM_HEAD (bh, (map + result)->si_item_num);
-	if (is_direct_ih(ih)) {
-	    fwrite(B_I_PITEM(bh, ih), (map + result)->si_ih.ih2_item_len, 1, target_file);
-	} else if (is_indirect_ih(ih)) {
-	    for (j = 0; j < I_UNFM_NUM (ih); j ++) {
-		unfm_ptr = d32_get((__u32 *)B_I_PITEM(bh, ih), j);
+	fseek(target_file, 
+	      reiserfs_key_get_off(&(map + result)->si_ih.ih_key) - 1, 
+	      SEEK_SET);
+	
+	ih = reiserfs_ih_at (bh, (map + result)->si_item_num);
+	
+	if (reiserfs_ih_direct(ih)) {
+	    fwrite(reiserfs_item_by_ih(bh, ih), 
+		   (map + result)->si_ih.ih2_item_len, 1, target_file);
+	} else if (reiserfs_ih_ext(ih)) {
+	    for (j = 0; j < reiserfs_ext_count (ih); j ++) {
+		unfm_ptr = d32_get((__u32 *)reiserfs_item_by_ih(bh, ih), j);
 		if (!unfm_ptr) {
 		    fseek(target_file, fs->fs_blocksize, SEEK_CUR);
 		    continue;
 		}
-		bh_pointed = bread (fs->fs_dev, unfm_ptr, fs->fs_blocksize);
+		bh_pointed = reiserfs_buffer_read (fs->fs_dev, unfm_ptr, 
+					     fs->fs_blocksize);
 		if (!bh_pointed) {
-		    reiserfs_warning (fp, "bread failed\n");
+		    reiserfs_warning (fp, "reiserfs_buffer_read failed\n");
 		    continue;
 		}
-		fwrite(bh_pointed->b_data, fs->fs_blocksize, 1, target_file);
-		brelse(bh_pointed);
+		fwrite(bh_pointed->b_data, 
+		       fs->fs_blocksize, 1, target_file);
+		
+		reiserfs_buffer_close(bh_pointed);
 	    }
 	}
-	brelse(bh);
+	
+	reiserfs_buffer_close(bh);
     }
 
     free(map);
@@ -362,7 +394,7 @@
 void do_recover(reiserfs_filsys_t * fs) {
     FILE *fp, *recovery;
 
-    if (map_file (fs)) {
+    if (map_file (fs)[0] != '\0') {
 	fp = fopen (map_file (fs), "r");
 	if (fp == 0) {
 	    reiserfs_warning (stderr, "fopen failed: %m\n");
diff --git a/debugreiserfs/scan.c b/utils/debugfs/scan.c
similarity index 64%
rename from debugreiserfs/scan.c
rename to utils/debugfs/scan.c
index 8ed9d03..6eb4bf5 100644
--- a/debugreiserfs/scan.c
+++ b/utils/debugfs/scan.c
@@ -3,7 +3,13 @@
  * reiserfsprogs/README
  */
 
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
 #include "debugreiserfs.h"
+#include "util/misc.h"
+
 #include <regex.h>
 #include <obstack.h>
 #include <search.h>
@@ -50,8 +56,8 @@
 
 
 /* attach item to every name in the list */
-static void store_item (struct saved_name * name, struct buffer_head * bh,
-			struct item_head * ih, int pos)
+static void store_item (struct saved_name * name, reiserfs_bh_t * bh,
+			reiserfs_ih_t * ih, int pos)
 {
     struct saved_item * new;
     void * vp;
@@ -60,11 +66,11 @@
     new = obstack_alloc (&item_store, sizeof (struct saved_item));
     new->si_ih = *ih;
     new->si_block = bh->b_blocknr;
-    new->si_item_num = ih - B_N_PITEM_HEAD (bh, 0);
+    new->si_item_num = ih - reiserfs_ih_at (bh, 0);
     new->si_next = 0;
     new->si_entry_pos = pos;
     
-    vp = tfind (new, &name->items, comp_keys);
+    vp = tfind (new, &name->items, reiserfs_key_comp);
     if (vp) {
 	item_in = *(void **)vp;
 	/* add item to the end of list of items having this key */
@@ -76,7 +82,7 @@
 	    item_in = item_in->si_next;
 	}
     } else
-	tsearch (new, &name->items, comp_keys);
+	tsearch (new, &name->items, reiserfs_key_comp);
 
     saved_items ++;
 }
@@ -100,7 +106,7 @@
     name1 = (struct saved_name *)p1;
     name2 = (struct saved_name *)p2;
 
-    return comp_short_keys (&name1->dirid, &name2->dirid);
+    return reiserfs_key_comp2 (&name1->dirid, &name2->dirid);
 }
 
 
@@ -122,8 +128,8 @@
     /* check every name in the list */
     cur = *name_in;
     while (cur) {
-	if (!not_of_one_file (&name->dirid, &cur->dirid) &&
-	    !not_of_one_file (&name->parent_dirid, &cur->parent_dirid)) 
+	if (!reiserfs_key_comp2 (&name->dirid, &cur->dirid) &&
+	    !reiserfs_key_comp2 (&name->parent_dirid, &cur->parent_dirid))
 	{
 	    cur->count ++;
 	    *name_in = cur;
@@ -171,11 +177,11 @@
 
 
 /* take each name matching to a given pattern, */
-static void scan_for_name (struct buffer_head * bh)
+static void scan_for_name (reiserfs_bh_t * bh)
 {
     int i, j, i_num;
-    struct item_head * ih;
-    struct reiserfs_de_head * deh;
+    reiserfs_ih_t * ih;
+    reiserfs_deh_t * deh;
     int namelen;
     char * name;
     struct saved_name * new, *name_in;
@@ -184,25 +190,28 @@
     int min_entry_size = 1;
     int ih_entry_count = 0;
 
-    ih = B_N_PITEM_HEAD (bh, 0);
-    i_num = leaf_item_number_estimate(bh);
+    ih = reiserfs_ih_at (bh, 0);
+    i_num = reiserfs_leaf_estimate_items(bh);
     for (i = 0; i < i_num; i ++, ih ++) {
-	if (!is_direntry_ih (ih))
+	if (!reiserfs_ih_dir (ih))
 	    continue;
-	if (is_it_bad_item (fs, ih, B_I_PITEM (bh, ih), 0, 1))
+	if (reiserfs_leaf_correct_at (fs, ih, reiserfs_item_by_ih (bh, ih), 
+				      0, 1))
+	{
 	    continue;
+	}
 
-	deh = B_I_DEH (bh, ih);
+	deh = reiserfs_deh (bh, ih);
 	
-        if ( (get_ih_entry_count (ih) > (get_ih_item_len(ih) / (DEH_SIZE + min_entry_size))) ||
-            (get_ih_entry_count (ih) == 0))
-            ih_entry_count = get_ih_item_len(ih) / (DEH_SIZE + min_entry_size);
+        if ( (reiserfs_ih_get_entries (ih) > (reiserfs_ih_get_len(ih) / (REISERFS_DEH_SIZE + min_entry_size))) ||
+            (reiserfs_ih_get_entries (ih) == 0))
+            ih_entry_count = reiserfs_ih_get_len(ih) / (REISERFS_DEH_SIZE + min_entry_size);
         else 
-            ih_entry_count = get_ih_entry_count (ih);
+            ih_entry_count = reiserfs_ih_get_entries (ih);
 	
 	for (j = 0; j < ih_entry_count; j ++, deh ++) {
-	    name = name_in_entry (deh, j);
-	    namelen = name_in_entry_length (ih, deh, j);
+	    name = reiserfs_deh_name (deh, j);
+	    namelen = reiserfs_direntry_name_len (ih, deh, j);
 	    ch = name[namelen];
 	    name[namelen] = 0;
 	    retval = regexec (&pattern, name, 0, NULL, 0);
@@ -215,15 +224,15 @@
 	    new = obstack_alloc (&name_store, sizeof (struct saved_name) + namelen);
 
 	    /* pointed object */
-	    new->dirid = get_deh_dirid (deh);
-	    new->objectid = get_deh_objectid (deh);
+	    new->dirid = reiserfs_deh_get_did (deh);
+	    new->objectid = reiserfs_deh_get_obid (deh);
 
 	    /* pointer to first name which points the same key */
 	    new->first_name = 0;
 
 	    /* where this name is from */
-	    new->parent_dirid = get_key_dirid (&ih->ih_key);
-	    new->parent_objectid = get_key_objectid (&ih->ih_key);
+	    new->parent_dirid = reiserfs_key_get_did (&ih->ih_key);
+	    new->parent_objectid = reiserfs_key_get_oid (&ih->ih_key);
 	    new->block = bh->b_blocknr;
 
 	    new->count = 1;
@@ -254,16 +263,16 @@
     return;
 }
 
-static struct saved_name *scan_for_key(struct key *key) {
-	char *name;
+static struct saved_name *scan_for_key(reiserfs_key_t *key) {
 	struct saved_name * new, *name_in;
+	char name[REISERFS_NAME_MAX];
 
-	asprintf (&name, "%u_%u", get_key_dirid (key), get_key_objectid (key));
+	sprintf(name, "%u_%u", reiserfs_key_get_did (key), reiserfs_key_get_oid (key));
 	new = obstack_alloc (&name_store, sizeof (struct saved_name) + strlen(name));
 
 	/* pointed object */
-	new->dirid = get_key_dirid (key);
-	new->objectid = get_key_objectid (key);
+	new->dirid = reiserfs_key_get_did (key);
+	new->objectid = reiserfs_key_get_oid (key);
 
 	/* pointer to first name which points the same key */
 	new->first_name = 0;
@@ -282,8 +291,6 @@
 	new->name [new->name_len] = 0;
 	new->name_next = 0;
 
-	free(name);
-	
 	if (name_found (new, &name_in)) {
 		/* there was already exactly this name */
 		obstack_free (&name_store, new);
@@ -296,32 +303,32 @@
 	return new;
 }
 
-static int comp_token_key(struct buffer_head *bh, struct item_head *ih, struct key *key) {
-    struct reiserfs_de_head * deh;
+static int comp_token_key(reiserfs_bh_t *bh, reiserfs_ih_t *ih, reiserfs_key_t *key) {
+    reiserfs_deh_t * deh;
     int j, ih_entry_count = 0;
     int min_entry_size = 1;
     
-    if ((get_key_dirid(&ih->ih_key) == get_key_dirid(key) || 
-	 get_key_dirid(key) == ~(__u32)0) &&
-	(get_key_objectid(&ih->ih_key) == get_key_objectid(key) || 
-	 get_key_objectid(key) == ~(__u32)0))
+    if ((reiserfs_key_get_did(&ih->ih_key) == reiserfs_key_get_did(key) || 
+	 reiserfs_key_get_did(key) == ~(__u32)0) &&
+	(reiserfs_key_get_oid(&ih->ih_key) == reiserfs_key_get_oid(key) || 
+	 reiserfs_key_get_oid(key) == ~(__u32)0))
 	return -1;
 
-    if (!is_direntry_ih (ih))
+    if (!reiserfs_ih_dir (ih))
 	return 0;
 	
-    deh = B_I_DEH (bh, ih);
+    deh = reiserfs_deh (bh, ih);
 
-    if ( (get_ih_entry_count (ih) > (get_ih_item_len(ih) / (DEH_SIZE + min_entry_size))) ||
-	 (get_ih_entry_count (ih) == 0))
-	 ih_entry_count = get_ih_item_len(ih) / (DEH_SIZE + min_entry_size);
+    if ( (reiserfs_ih_get_entries (ih) > (reiserfs_ih_get_len(ih) / (REISERFS_DEH_SIZE + min_entry_size))) ||
+	 (reiserfs_ih_get_entries (ih) == 0))
+	 ih_entry_count = reiserfs_ih_get_len(ih) / (REISERFS_DEH_SIZE + min_entry_size);
     else 
-	 ih_entry_count = get_ih_entry_count (ih);
+	 ih_entry_count = reiserfs_ih_get_entries (ih);
 
 	
     for (j = 0; j < ih_entry_count; j ++, deh ++) {
-	if ((get_deh_dirid (deh) == get_key_dirid (key) || (int)get_key_dirid (key) == -1) &&
-	    (get_deh_objectid (deh) == get_key_objectid (key) || (int)get_key_objectid (key) == -1)) 
+	if ((reiserfs_deh_get_did (deh) == reiserfs_key_get_did (key) || (int)reiserfs_key_get_did (key) == -1) &&
+	    (reiserfs_deh_get_obid (deh) == reiserfs_key_get_oid (key) || (int)reiserfs_key_get_oid (key) == -1)) 
 	{
 	    return j;
 	}
@@ -332,15 +339,15 @@
 
 /* take every item, look for its key in the key index, if it is found - store
    item in the sorted list of items of a file */
-static void scan_items (struct buffer_head * bh, struct key *key) {
+static void scan_items (reiserfs_bh_t * bh, reiserfs_key_t *key) {
     int i, i_num, pos;
-    struct item_head * ih;
+    reiserfs_ih_t * ih;
     struct saved_name * name_in_store;
     void * res;
 
 
-    ih = B_N_PITEM_HEAD (bh, 0);
-    i_num = leaf_item_number_estimate(bh);
+    ih = reiserfs_ih_at (bh, 0);
+    i_num = reiserfs_leaf_estimate_items(bh);
     for (i = 0; i < i_num; i ++, ih ++) {
 	if (key) {
 	    if (!(pos = comp_token_key(bh, ih, key)))
@@ -363,7 +370,7 @@
 
 /* FIXME: does not work for long files */
 struct version {
-    int flag; /* direct or indirect */
+    int flag; /* direct or extent */
     int len;
     __u32 from;
     int count;
@@ -393,15 +400,15 @@
 struct file_map map;
 
 
-static int have_to_append (struct item_head * ih)
+static int have_to_append (reiserfs_ih_t * ih)
 {
-    loff_t off = get_offset (&ih->ih_key);
+    unsigned long long off = reiserfs_key_get_off (&ih->ih_key);
 
-    if (is_indirect_ih (ih)) {
+    if (reiserfs_ih_ext (ih)) {
 	if (map.head_len * fs->fs_blocksize + 1 <= off)
 	    return 1;
 	return 0;
-    } else if (is_direct_ih (ih)) {
+    } else if (reiserfs_ih_direct (ih)) {
 	int i;
 	__u32 tail_start;
 	
@@ -422,24 +429,24 @@
 }
 
 
-static void do_append (struct item_head * ih, void * data)
+static void do_append (reiserfs_ih_t * ih, void * data)
 {
     int i;
     int padd;
-    unsigned long long off = get_offset (&ih->ih_key);
+    unsigned long long off = reiserfs_key_get_off (&ih->ih_key);
 
-    if (is_indirect_ih (ih)) {
+    if (reiserfs_ih_ext (ih)) {
 
 	padd = (off - 1) / fs->fs_blocksize - map.head_len;
-	map.head = realloc (map.head, (map.head_len + padd + I_UNFM_NUM (ih)) * 4);
+	map.head = realloc (map.head, (map.head_len + padd + reiserfs_ext_count (ih)) * 4);
 	if (!map.head)
 	    reiserfs_panic ("realloc failed");
 	memset ((char *)map.head + map.head_len * 4, 0, padd * 4);
 	memcpy ((char *)map.head + (map.head_len + padd) * 4, data,
-		get_ih_item_len (ih));
-	map.head_len += (padd + I_UNFM_NUM (ih));
+		reiserfs_ih_get_len (ih));
+	map.head_len += (padd + reiserfs_ext_count (ih));
 
-    } else if (is_direct_ih (ih)) {
+    } else if (reiserfs_ih_direct (ih)) {
 	unsigned int tail_start, skip;
 	
 	// find correct tail first 
@@ -448,13 +455,13 @@
 	for (i = 0; i < map.tail_nr; i ++) {
 	    if (map.tails[i].offset == tail_start) {
 		map.tails[i].data = realloc (map.tails[i].data,
-					     off - tail_start + get_ih_item_len (ih));
+					     off - tail_start + reiserfs_ih_get_len (ih));
 		if (!map.tails[i].data)
 		    reiserfs_panic ("realloc failed");
 		padd = skip - map.tails[i].len;
 		memset (map.tails[i].data + map.tails[i].len, 0, padd);
-		memcpy (map.tails[i].data + map.tails[i].len + padd, data, get_ih_item_len (ih));
-		map.tails[i].len += (padd + get_ih_item_len (ih));
+		memcpy (map.tails[i].data + map.tails[i].len + padd, data, reiserfs_ih_get_len (ih));
+		map.tails[i].len += (padd + reiserfs_ih_get_len (ih));
 		return;
 	    }
 	}
@@ -464,45 +471,48 @@
 	    reiserfs_panic ("realloc failed");
 
 	map.tails[map.tail_nr].offset = off;
-	map.tails[map.tail_nr].len = skip + get_ih_item_len (ih);
+	map.tails[map.tail_nr].len = skip + reiserfs_ih_get_len (ih);
 	map.tails[map.tail_nr].data = malloc (map.tails[map.tail_nr].len);
 	memset (map.tails[map.tail_nr].data, 0, skip);
-	memcpy (map.tails[map.tail_nr].data + skip, data, get_ih_item_len (ih));
+	memcpy (map.tails[map.tail_nr].data + skip, data, reiserfs_ih_get_len (ih));
 	map.tail_nr ++;		    
     }
 }
 
 
 // map contains 
-static void do_overwrite (struct item_head * ih, void * data)
+static void do_overwrite (reiserfs_ih_t * ih, void * data)
 {
     unsigned long long off, skip;
     int to_compare, to_append;
-    struct item_head tmp_ih;
+    reiserfs_ih_t tmp_ih;
     char * p;
     
-    off = get_offset (&ih->ih_key);
+    off = reiserfs_key_get_off (&ih->ih_key);
     
-    if (is_indirect_ih (ih)) {
+    if (reiserfs_ih_ext (ih)) {
 
 	skip = (off - 1) / fs->fs_blocksize;
-	to_compare = (map.head_len - skip > I_UNFM_NUM (ih)) ? 
-	    I_UNFM_NUM (ih) : (map.head_len - skip);
-	to_append = I_UNFM_NUM (ih) - to_compare;
+	to_compare = (map.head_len - skip > reiserfs_ext_count (ih)) ? 
+	    reiserfs_ext_count (ih) : (map.head_len - skip);
+	to_append = reiserfs_ext_count (ih) - to_compare;
 	
 	p = (char *)map.head + skip * 4;
 
 	if (memcmp (p, data, to_compare * 4))
-	    reiserfs_warning (stderr, "overwrite (indirect): %H contains different data\n", ih);
+	    reiserfs_warning (stderr, "overwrite (extent): %H contains different data\n", ih);
 
 	if (to_append) {
 	    tmp_ih = *ih;
-	    set_ih_item_len (&tmp_ih, get_ih_item_len (ih) - to_compare * 4);
-	    set_offset (key_format (&ih->ih_key), &tmp_ih.ih_key, off + to_compare * fs->fs_blocksize);
+	    reiserfs_ih_set_len (&tmp_ih, reiserfs_ih_get_len (ih) - to_compare * 4);
+	    reiserfs_key_set_off (reiserfs_key_format (&ih->ih_key), 
+				     &tmp_ih.ih_key, off + to_compare * 
+				     fs->fs_blocksize);
+	    
 	    do_append (&tmp_ih, (char *)data + to_compare * 4);
 	}
 
-    } else if (is_direct_ih (ih)) {
+    } else if (reiserfs_ih_direct (ih)) {
 	unsigned int tail_start;
 	int i;
 
@@ -512,21 +522,25 @@
 	    if (map.tails[i].offset == tail_start) {
 		// ih is a part of this tail 
 		skip = (off - 1) & (fs->fs_blocksize - 1);
-		to_compare = (map.tails[i].len - skip > get_ih_item_len (ih) ? get_ih_item_len (ih) :
+		to_compare = (map.tails[i].len - skip > reiserfs_ih_get_len (ih) ? reiserfs_ih_get_len (ih) :
 		    map.tails[i].len - skip);
-		to_append = get_ih_item_len (ih) - to_compare;
+		to_append = reiserfs_ih_get_len (ih) - to_compare;
 
 		p = (char *)map.tails[i].data + skip;
 
 		if (memcmp (p, data, to_compare))
-		    reiserfs_warning (stderr, "overwrite (direct): %H contains different data\n", ih);
+		    reiserfs_warning (stderr, "overwrite (direct): %H contains "
+				      "different data\n", ih);
 		
 		if (to_append) {
 		    tmp_ih = *ih;
-		    set_ih_item_len (&tmp_ih, get_ih_item_len (ih) - to_compare);
-		    set_offset (key_format (&ih->ih_key), &tmp_ih.ih_key, off + to_compare);
+		    reiserfs_ih_set_len (&tmp_ih, reiserfs_ih_get_len (ih) - to_compare);
+		    reiserfs_key_set_off (reiserfs_key_format (&ih->ih_key), 
+					     &tmp_ih.ih_key, off + to_compare);
+		    
 		    do_append (&tmp_ih, (char *)data + to_compare);
 		}
+		
 		return;
 	    }
 	}
@@ -537,19 +551,19 @@
 
 static void map_one_item (struct saved_item * item)
 {
-    struct buffer_head * bh;
-    struct item_head * ih;
+    reiserfs_bh_t * bh;
+    reiserfs_ih_t * ih;
     void * data;
 
     // read the block containing the item 
-    bh = bread (fs->fs_dev, item->si_block, fs->fs_blocksize);
+    bh = reiserfs_buffer_read (fs->fs_dev, item->si_block, fs->fs_blocksize);
     if (!bh) {
-	reiserfs_warning (stderr, "bread failed\n");
+	reiserfs_warning (stderr, "reiserfs_buffer_read failed\n");
 	return;
     }
 
-    ih = B_N_PITEM_HEAD (bh, item->si_item_num);
-    data = B_I_PITEM (bh, ih);
+    ih = reiserfs_ih_at (bh, item->si_item_num);
+    data = reiserfs_item_by_ih (bh, ih);
     if (memcmp (&item->si_ih, ih, sizeof (*ih)))
 	reiserfs_panic ("wrong item");
 
@@ -558,22 +572,22 @@
     } else
 	do_overwrite (ih, data);
 
-    brelse (bh);
+    reiserfs_buffer_close (bh);
 }
 
 // flush map which is in variable map 
 static void flush_map (reiserfs_filsys_t * fs,
-		       struct key * dir,
+		       reiserfs_key_t * dir,
 		       char * name,
-		       struct key * key)
+		       reiserfs_key_t * key)
 {
     int i;
     FILE * fp;
     __u32 v32;
 
 
-    if (!map_file (fs))
-	asprintf (&map_file (fs), "%s", ".map");
+    if (map_file (fs) == '\0')
+	sprintf(map_file (fs), ".map");
 	
     //reiserfs_warning (stderr, "Saving maps into %s\n", map_file (fs));
     fp = fopen (map_file (fs), "a");
@@ -596,10 +610,10 @@
     fwrite (name, v32, 1, fp);
     
     // short key of a directory 
-    fwrite (dir, SHORT_KEY_SIZE, 1, fp);
+    fwrite (dir, REISERFS_KEY_SHSIZE, 1, fp);
 
     // short key of file 
-    fwrite (key, SHORT_KEY_SIZE, 1, fp);
+    fwrite (key, REISERFS_KEY_SHSIZE, 1, fp);
 
     // list of data block pointers 
     fwrite (&map.head_len, sizeof (map.head_len), 1, fp);
@@ -642,11 +656,11 @@
     item = *(struct saved_item **)nodep;
 
     // 1. find the longest item 
-    max_bytes = get_bytes_number (&item->si_ih, fs->fs_blocksize);
+    max_bytes = reiserfs_leaf_ibytes (&item->si_ih, fs->fs_blocksize);
     longest = item;
     while (item->si_next) {
 	item = item->si_next;
-	bytes = get_bytes_number (&item->si_ih, fs->fs_blocksize);
+	bytes = reiserfs_leaf_ibytes (&item->si_ih, fs->fs_blocksize);
 	if (bytes > max_bytes) {
 	    longest = item;
 	    max_bytes = bytes;
@@ -684,8 +698,8 @@
 		twalk (name->items, map_item_list);
 		
 		// write map to a file 
-		flush_map (fs, (struct key *)&name->parent_dirid, name->name,
-			   (struct key *)&name->dirid);
+		flush_map (fs, (reiserfs_key_t *)&name->parent_dirid, name->name,
+			   (reiserfs_key_t *)&name->dirid);
 		
 	    } else if (name->first_name)
 		reiserfs_warning (stdout, "[%K]:\"%s\" has item list\n",
@@ -703,27 +717,27 @@
 */
 
 static void print_items(FILE *fp, reiserfs_filsys_t * fs) {
-    struct buffer_head *bh;
-    struct item_head *ih;
+    reiserfs_bh_t *bh;
     struct saved_item item;
     int size = sizeof(struct saved_item) - sizeof(struct saved_item *);
 
     while (fread(&item, size, 1, fp) == 1) {
-	bh = bread (fs->fs_dev, item.si_block, fs->fs_blocksize);
+	bh = reiserfs_buffer_read (fs->fs_dev, item.si_block, fs->fs_blocksize);
 	if (!bh) {
-	    reiserfs_warning (fp, "bread failed\n");
+	    reiserfs_warning (fp, "reiserfs_buffer_read failed\n");
 	    continue;
 	}
-	ih = B_N_PITEM_HEAD (bh, item.si_item_num);
-	reiserfs_print_item(stdout, bh, ih);
-	brelse(bh);
+	reiserfs_leaf_print(stdout, fs, bh, 0, 
+			    item.si_item_num, 
+			    item.si_item_num + 1);
+	reiserfs_buffer_close(bh);
     }
 }
 
 void print_map(reiserfs_filsys_t * fs) {
     FILE * fp;
 
-    if (map_file (fs)) {
+    if (map_file (fs) [0] != '\0') {
 	fp = fopen (map_file (fs), "r");
 	if (fp == 0) {
 	    reiserfs_warning (stderr, "fopen failed: %m\n");
@@ -760,7 +774,7 @@
 	if (fp) {
 	    fwrite(item, sizeof(struct saved_item) - sizeof(struct saved_item *), 1, fp);
 	} else {
-	    if (is_direntry_ih (&item->si_ih) && item->si_entry_pos != -1) {
+	    if (reiserfs_ih_dir (&item->si_ih) && item->si_entry_pos != -1) {
 		reiserfs_warning(log_to, "block %lu, item %d (%H): entry %d\n",
 				 item->si_block, item->si_item_num, 
 				 &item->si_ih, item->si_entry_pos);
@@ -778,15 +792,15 @@
 
 static void make_map(const void *nodep, VISIT value, int level) {
     struct saved_name * name;
-    char *file_name = 0;
+    char file_name[4096];
     static int nr = 0;
 
     name = *(struct saved_name **)nodep;
     
     if (value == leaf || value == postorder) {
 	while (name) {
-	    if (map_file(fs)) {
-		asprintf(&file_name, "%s.%d", map_file(fs), ++nr);
+	    if (map_file(fs)[0] != '\0') {
+		sprintf(file_name, "%s.%d", map_file(fs), ++nr);
 		reiserfs_warning (log_to, "%d - (%d): [%K]:\"%s\": stored in the %s\n", 
 				  nr, name->count, &name->parent_dirid, name->name, file_name);
 
@@ -805,148 +819,143 @@
 	    if (fp) {
 		fclose(fp);
 		fp = NULL;
-		free(file_name);
 	    }
 	}
     }
 }
 
 /* store map if it is a regular file */
-static void locate_file (reiserfs_filsys_t * fs, struct key * key)
+static void locate_file (reiserfs_filsys_t * fs, reiserfs_key_t * key)
 {
-    INITIALIZE_PATH (path);
-    struct key * next_key;
+    REISERFS_PATH_INIT (path);
+    const reiserfs_key_t * next_key;
     int retval;
 
     do {
-	retval = reiserfs_search_by_key_4 (fs, key, &path);
+	retval = reiserfs_tree_search_item (fs, key, &path);
 	if (retval != ITEM_FOUND)
 	    break;
 
-	if (!is_stat_data_key (key) && !is_direntry_key (key)) {
+	if (!reiserfs_key_stat (key) && !reiserfs_key_dir (key)) {
 	    struct saved_item si;
 
-	    si.si_block = get_bh (&path)->b_blocknr;
-	    si.si_item_num = get_item_pos (&path);
-	    si.si_ih = *get_ih (&path);
+	    si.si_block = REISERFS_PATH_LEAF (&path)->b_blocknr;
+	    si.si_item_num = REISERFS_PATH_LEAF_POS (&path);
+	    si.si_ih = *REISERFS_PATH_IH (&path);
 	    map_one_item (&si);
 	}
 
-	/*reiserfs_warning (stdout, "\t");
-	  reiserfs_print_item (stdout, get_bh (&path), get_ih (&path));*/
-	
-	next_key = reiserfs_next_key (&path);
-	if (!next_key || not_of_one_file (next_key, key))
+	next_key = reiserfs_tree_next_key (&path, fs);
+	if (!next_key || reiserfs_key_comp2 (next_key, key))
 	    break;
 
 	*key = *next_key;
-	pathrelse (&path); 
+	reiserfs_tree_pathrelse (&path); 
     } while (1);
 
-    pathrelse (&path); 
+    reiserfs_tree_pathrelse (&path); 
 }
 
 
 /* read stdin and look for specified name in the specified directory */
 static void look_for_name (reiserfs_filsys_t * fs)
 {
-    INITIALIZE_PATH (path);
-    char * name, * objectid, * dirid;
-    size_t n;
-    struct key key = {0, };
+    char buf[256], *p;
+    unsigned long dirid, objectid;
+    REISERFS_PATH_INIT (path);
+    reiserfs_key_t key = {0, };
 
-    reiserfs_warning (stderr,
-		      "Enter dirid objectid \"name\" or press ^D to quit\n");
+    reiserfs_warning (stderr, "Enter dirid objectid "
+		      "\"name\" or press ^D to quit\n");
     while (1) {
 	reiserfs_warning (stderr, ">");
-	n = 0; dirid = 0;
-	if (getdelim (&dirid, &n, ' ', stdin) == -1)
-	    break;
-	if (!strcmp (dirid, "\n"))
-	    break;
-	set_key_dirid (&key, atol (dirid));
+	
+	fgets(buf, sizeof(buf), stdin);
+	if ((p = (char *)strtok(buf, " \t\n")) == NULL)
+		continue;
+	
+	if (sscanf(p, "%lu ", &dirid) <= 0)
+		continue;
+	
+	if ((p = (char *)strtok(NULL, " \t\n")) == NULL)
+		continue;
+	
+	if (sscanf(p, "%lu ", &objectid) <= 0)
+		continue;
+	
+	if ((p = (char *)strtok(NULL, " \t\n")) == NULL)
+		continue;
+	
+	reiserfs_key_set_did (&key, dirid);
+	reiserfs_key_set_oid (&key, objectid);
 
-	n = 0; objectid = 0;
-	if (getdelim (&objectid, &n, ' ', stdin) == -1)
-	    break;
-	set_key_objectid (&key, atol (objectid));
-
-	n = 0; name = 0;
-	if (getdelim (&name, &n, '\n', stdin) == -1)
-	    break;
-
-	name [strlen (name) - 1] = 0;
+	p [strlen(p) - 1] = '\0';
 	reiserfs_warning (stdout, "looking for file \"%s\" in (%K) - ",
-			  name, &key);
+			  p, &key);
 
-	if (reiserfs_locate_entry (fs, &key, name, &path)) {
-	    struct key fkey = {0, };
-	    struct reiserfs_de_head * deh;
+	if (reiserfs_tree_scan_name (fs, &key, p, &path)) {
+	    reiserfs_key_t fkey = {0, };
+	    reiserfs_deh_t * deh;
 
 	    reiserfs_warning (stdout, "name is found in block %lu (item %d, entry %d)\n",
-			      get_bh (&path)->b_blocknr, get_item_pos (&path),
+			      REISERFS_PATH_LEAF (&path)->b_blocknr, REISERFS_PATH_LEAF_POS (&path),
 			      path.pos_in_item);
-	    deh = B_I_DEH (get_bh (&path), get_ih (&path)) + path.pos_in_item;
-	    set_key_dirid (&fkey, get_deh_dirid (deh));
-	    set_key_objectid (&fkey, get_deh_objectid (deh));
+	    deh = reiserfs_deh (REISERFS_PATH_LEAF (&path), REISERFS_PATH_IH (&path)) + path.pos_in_item;
+	    reiserfs_key_set_did (&fkey, reiserfs_deh_get_did (deh));
+	    reiserfs_key_set_oid (&fkey, reiserfs_deh_get_obid (deh));
 	    
-	    pathrelse (&path);
+	    reiserfs_tree_pathrelse (&path);
 
 	    /* look for file and print its layout */
 	    memset (&map, 0, sizeof (struct file_map));
 
 	    locate_file (fs, &fkey);
 
-	    flush_map (fs, &key, name, &fkey);
-
+	    flush_map (fs, &key, p, &fkey);
 	} else {
 	    reiserfs_warning (stdout, "name not found\n");
 	}
-
-	free (dirid);
-	free (objectid);
-	free (name);
     }
 }
 
 #if 0
-static void scan_for_key (struct buffer_head * bh, struct key * key)
+static void scan_for_key (reiserfs_bh_t * bh, reiserfs_key_t * key)
 {
     int i, j, i_num;
-    struct item_head * ih;
-    struct reiserfs_de_head * deh;
+    reiserfs_ih_t * ih;
+    reiserfs_deh_t * deh;
     int min_entry_size = 1;
     int ih_entry_count = 0;
 
-    ih = B_N_PITEM_HEAD (bh, 0);
-    i_num = leaf_item_number_estimate(bh);
+    ih = reiserfs_ih_at (bh, 0);
+    i_num = reiserfs_leaf_estimate_items(bh);
     for (i = 0; i < i_num; i ++, ih ++) {
-	if ((get_key_dirid(&ih->ih_key) == get_key_dirid(key) || 
-	     get_key_dirid(key) == ~(__u32)0) &&
-	    (get_key_objectid(&ih->ih_key) == get_key_objectid(key) || 
-	     get_key_objectid(key) == ~(__u32)0)) 
+	if ((reiserfs_key_get_did(&ih->ih_key) == reiserfs_key_get_did(key) || 
+	     reiserfs_key_get_did(key) == ~(__u32)0) &&
+	    (reiserfs_key_get_oid(&ih->ih_key) == reiserfs_key_get_oid(key) || 
+	     reiserfs_key_get_oid(key) == ~(__u32)0)) 
 	{
 	    reiserfs_warning(log_to, "%d-th item of block %lu is item of file %K: %H\n",
 			      i, bh->b_blocknr, key, ih);
 	}
-	if (!is_direntry_ih (ih))
+	if (!reiserfs_ih_dir (ih))
 	    continue;
-	deh = B_I_DEH (bh, ih);
+	deh = reiserfs_deh (bh, ih);
 	
-        if ( (get_ih_entry_count (ih) > (get_ih_item_len(ih) / (DEH_SIZE + min_entry_size))) ||
-            (get_ih_entry_count (ih) == 0))
-            ih_entry_count = get_ih_item_len(ih) / (DEH_SIZE + min_entry_size);
+        if ( (reiserfs_ih_get_entries (ih) > (reiserfs_ih_get_len(ih) / (REISERFS_DEH_SIZE + min_entry_size))) ||
+            (reiserfs_ih_get_entries (ih) == 0))
+            ih_entry_count = reiserfs_ih_get_len(ih) / (REISERFS_DEH_SIZE + min_entry_size);
         else 
-            ih_entry_count = get_ih_entry_count (ih);
+            ih_entry_count = reiserfs_ih_get_entries (ih);
 	
 	
 	for (j = 0; j < ih_entry_count; j ++, deh ++) {
-	    if ((get_deh_dirid (deh) == get_key_dirid (key) || (int)get_key_dirid (key) == -1) &&
-		(get_deh_objectid (deh) == get_key_objectid (key) || (int)get_key_objectid (key) == -1)) {
+	    if ((reiserfs_deh_get_did (deh) == reiserfs_key_get_did (key) || (int)reiserfs_key_get_did (key) == -1) &&
+		(reiserfs_deh_get_obid (deh) == reiserfs_key_get_oid (key) || (int)reiserfs_key_get_oid (key) == -1)) {
 		reiserfs_warning (log_to, "dir item %d (%H) of block %lu has "
 				  "entry (%d-th) %.*s pointing to %K\n",
 				  i, ih, bh->b_blocknr, j,
-				  name_in_entry_length (ih, deh, j), name_in_entry (deh, j), key);
+				  reiserfs_direntry_name_len (ih, deh, j), reiserfs_deh_name (deh, j), key);
 	    }
 	}	
     }
@@ -957,11 +966,10 @@
 void do_scan (reiserfs_filsys_t * fs)
 {
     unsigned long i;
-    struct buffer_head * bh;
+    reiserfs_bh_t * bh;
     int type;
-    char * answer = 0;
-    size_t n = 0;
-    struct key key = {0, 0, };
+    char answer[256];
+    reiserfs_key_t key = {0, 0, };
     unsigned long done, total;
 
     if (debug_mode (fs) == DO_LOOK_FOR_NAME) {
@@ -990,35 +998,37 @@
 	}
 
 	printf ("Looking for names matching %s\n", name_pattern (fs));
-	set_key_dirid (&key, 1);
+	reiserfs_key_set_did (&key, 1);
     } else {
 	printf ("What key do you want to find: dirid?");
-	getline (&answer, &n, stdin);
-	set_key_dirid (&key, atoi (answer));
+	fgets(answer, sizeof(answer), stdin);
+	reiserfs_key_set_did (&key, atoi (answer));
 
 	printf ("objectid?");
-	getline (&answer, &n, stdin);
-	set_key_objectid (&key, atoi (answer));
+	fgets(answer, sizeof(answer), stdin);
+	reiserfs_key_set_oid (&key, atoi (answer));
 	reiserfs_warning (stderr, "looking for (%K)\n", &key);
     }
 
     if (debug_mode (fs) == DO_SCAN_FOR_NAME) {
 	done = 0;
-	for (i = 0; i < get_sb_block_count (fs->fs_ondisk_sb); i ++) {
+	for (i = 0; i < reiserfs_sb_get_blocks (fs->fs_ondisk_sb); i ++) {
 	    if (!reiserfs_bitmap_test_bit (input_bitmap (fs), i))
 		continue;
-	    bh = bread (fs->fs_dev, i, fs->fs_blocksize);
+	    bh = reiserfs_buffer_read (fs->fs_dev, i, fs->fs_blocksize);
 	    if (!bh) {
 		printf ("could not read block %lu\n", i);
 		continue;
 	    }
-	    type = who_is_this (bh->b_data, bh->b_size);
-	    if (type == THE_LEAF || type == HAS_IH_ARRAY)
+	    type = reiserfs_node_type (bh);
+	    if (type == NT_LEAF || type == NT_IH_ARRAY)
 		scan_for_name (bh);
 	    else
 		reiserfs_bitmap_clear_bit (input_bitmap (fs), i);
-	    brelse (bh);
-	    print_how_far (stderr, &done, total, 1, be_quiet (fs));
+	    reiserfs_buffer_close (bh);
+	    
+	    if (!misc_test_bit(PRINT_QUIET, &data(fs)->options))
+		util_misc_progress (stderr, &done, total, 1, 0);
 	}
     }
 
@@ -1033,40 +1043,42 @@
     done = 0;
     total = reiserfs_bitmap_ones (input_bitmap (fs));
     printf ("%ld bits set in bitmap\n", total);
-    for (i = 0; i < get_sb_block_count (fs->fs_ondisk_sb); i ++) {
+    for (i = 0; i < reiserfs_sb_get_blocks (fs->fs_ondisk_sb); i ++) {
 	int type;
 	
 	if (!reiserfs_bitmap_test_bit (input_bitmap (fs), i))
 	    continue;
-	bh = bread (fs->fs_dev, i, fs->fs_blocksize);
+	bh = reiserfs_buffer_read (fs->fs_dev, i, fs->fs_blocksize);
 	if (!bh) {
 	    printf ("could not read block %lu\n", i);
 	    continue;
 	}
-	type = who_is_this (bh->b_data, bh->b_size);
+	type = reiserfs_node_type (bh);
 	switch (type) {
-	case THE_JDESC:
-	    if (!get_key_dirid (&key))
+	case NT_JDESC:
+	    if (!reiserfs_key_get_did (&key))
 		printf ("block %lu is journal descriptor\n", i);
 	    break;
-	case THE_SUPER:
-	    if (!get_key_dirid (&key))
+	case NT_SUPER:
+	    if (!reiserfs_key_get_did (&key))
 		printf ("block %lu is reiserfs super block\n", i);
 	    break;
-	case THE_INTERNAL:
-	    if (!get_key_dirid (&key))
+	case NT_INTERNAL:
+	    if (!reiserfs_key_get_did (&key))
 		printf ("block %lu is reiserfs internal node\n", i);
 	    break;
-	case THE_LEAF:
-	case HAS_IH_ARRAY:
+	case NT_LEAF:
+	case NT_IH_ARRAY:
 	    scan_items (bh, (debug_mode (fs) == DO_SCAN_FOR_NAME ? NULL : &key));
 	    break;
 	default:
 	    break;
 	}
 
-	brelse (bh);
-	print_how_far (stderr, &done, total, 1, be_quiet (fs));
+	reiserfs_buffer_close (bh);
+	
+	if (!misc_test_bit(PRINT_QUIET, &data(fs)->options))
+	    util_misc_progress (stderr, &done, total, 1, 0);
     }
     fprintf (stderr, "\nThere were %d items saved\n", saved_items);
 
diff --git a/debugreiserfs/stat.c b/utils/debugfs/stat.c
similarity index 73%
rename from debugreiserfs/stat.c
rename to utils/debugfs/stat.c
index 6e8ff96..ade29bc 100644
--- a/debugreiserfs/stat.c
+++ b/utils/debugfs/stat.c
@@ -3,7 +3,13 @@
  * reiserfsprogs/README
  */
 
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
 #include "debugreiserfs.h"
+#include "util/misc.h"
+
 #include <search.h>
 #include <obstack.h>
 
@@ -39,7 +45,7 @@
 static int comp_items_1 (const void * p1, const void * p2)
 {
     int retval;
-    struct item_head * ih1, * ih2;
+    reiserfs_ih_t * ih1, * ih2;
 
     /*    
     if (*(int *)p1 != *(int *)p2)
@@ -47,22 +53,22 @@
     else
       retval = 0;
     */
-    retval = comp_keys (p1, p2);
-    /*retval = comp_short_keys (p1, p2);*/
+    retval = reiserfs_key_comp (p1, p2);
+    /*retval = reiserfs_key_comp2 (p1, p2);*/
     if (retval)
 	return retval;
 
 
-    ih1 = (struct item_head *)p1;
-    ih2 = (struct item_head *)p2;
+    ih1 = (reiserfs_ih_t *)p1;
+    ih2 = (reiserfs_ih_t *)p2;
 
-    if (get_ih_item_len (ih1) < get_ih_item_len (ih2))
+    if (reiserfs_ih_get_len (ih1) < reiserfs_ih_get_len (ih2))
 	return -1;
-    if (get_ih_item_len (ih1) > get_ih_item_len (ih2))
+    if (reiserfs_ih_get_len (ih1) > reiserfs_ih_get_len (ih2))
 	return 1;
-    if (get_ih_entry_count (ih1) < get_ih_entry_count (ih2))
+    if (reiserfs_ih_get_entries (ih1) < reiserfs_ih_get_entries (ih2))
 	return -1;
-    if (get_ih_entry_count (ih1) > get_ih_entry_count (ih2))
+    if (reiserfs_ih_get_entries (ih1) > reiserfs_ih_get_entries (ih2))
 	return 1;
 
     return 0;
@@ -77,13 +83,13 @@
     if (value == leaf) {
 	for (i = 0; i < level; i ++)
 	    reiserfs_warning (stdout, "\t");
-	reiserfs_warning (stdout, "%H\n", *(struct item_head **)nodep);
+	reiserfs_warning (stdout, "%H\n", *(reiserfs_ih_t **)nodep);
 	return;
     }
     if (value == postorder) {
 	for (i = 0; i < level; i ++)
 	    reiserfs_warning (stdout, "\t");
-	reiserfs_warning (stdout, "%H\n", *(struct item_head **)nodep);
+	reiserfs_warning (stdout, "%H\n", *(reiserfs_ih_t **)nodep);
     }
 }
 */
@@ -94,7 +100,7 @@
     void * res;
     void * key1;
 
-    key1 = obstack_copy (ostack, ih, IH_SIZE);
+    key1 = obstack_copy (ostack, ih, REISERFS_IH_SIZE);
     res = tsearch (key1, tree, comp_items_1);
     if (!res)
 	reiserfs_panic ("Too many keys found");
@@ -113,16 +119,16 @@
 }
 
 
-static void stat1_the_leaf (reiserfs_filsys_t * fs, struct buffer_head * bh)
+static void stat1_the_leaf (reiserfs_filsys_t * fs, reiserfs_bh_t * bh)
 {
     int i, i_num;
-    struct item_head * ih;
+    reiserfs_ih_t * ih;
     int is_there_unique_item;
 
 
-    ih = B_N_PITEM_HEAD (bh, 0);
+    ih = reiserfs_ih_at (bh, 0);
     is_there_unique_item = 0;
-    i_num = leaf_item_number_estimate(bh);
+    i_num = reiserfs_leaf_estimate_items(bh);
     for (i = 0; i < i_num; i ++, ih ++) {
 	/* count all items */
 	fs_stat.all ++;
@@ -140,21 +146,21 @@
 	fs_stat.blocks_to_skip ++;
 	reiserfs_bitmap_clear_bit (input_bitmap (fs), bh->b_blocknr);
     } else {
-	ih = B_N_PITEM_HEAD (bh, 0);
+	ih = reiserfs_ih_at (bh, 0);
 	/* node contains at least one unique item. We will put it in, count items of each type */
 	for (i = 0; i < i_num; i ++, ih ++) {
-	    fs_stat.items [get_type (&ih->ih_key)] ++;
+	    fs_stat.items [reiserfs_key_get_type (&ih->ih_key)] ++;
 	}
     }
 }
 
 /*
-static void stat2_the_leaf (struct buffer_head * bh)
+static void stat2_the_leaf (reiserfs_bh_t * bh)
 {
     int i;
-    struct item_head * ih;
+    reiserfs_ih_t * ih;
 
-    ih = B_N_PITEM_HEAD (bh, 0);
+    ih = reiserfs_ih_at (bh, 0);
     for (i = 0; i < node_item_number (bh); i ++, ih ++) {
 	
     }
@@ -165,7 +171,7 @@
 {
     unsigned long i;
     unsigned long done, total;
-    struct buffer_head * bh;
+    reiserfs_bh_t * bh;
     int type;
     FILE * fp;
 
@@ -174,7 +180,7 @@
     items_tree = 0;
 
 /*
-    bh = bread (fs->s_dev, 8211, fs->s_blocksize);
+    bh = reiserfs_buffer_read (fs->s_dev, 8211, fs->s_blocksize);
     stat1_the_leaf (fs, bh);
     
     return;
@@ -183,26 +189,27 @@
     /* pass 0 of stating */
     total = reiserfs_bitmap_ones (input_bitmap (fs));
     done = 0;
-    for (i = 0; i < get_sb_block_count (fs->fs_ondisk_sb); i ++) {
+    for (i = 0; i < reiserfs_sb_get_blocks (fs->fs_ondisk_sb); i ++) {
 	if (!reiserfs_bitmap_test_bit (input_bitmap (fs), i))
 	    continue;
 
-	print_how_far (stderr, &done, total, 1, be_quiet (fs));
+	if (!misc_test_bit(PRINT_QUIET, &data(fs)->options))
+	    util_misc_progress (stderr, &done, total, 1, 0);
 
-	bh = bread (fs->fs_dev, i, fs->fs_blocksize);
+	bh = reiserfs_buffer_read (fs->fs_dev, i, fs->fs_blocksize);
 	if (!bh) {
 	    printf ("could not read block %lu\n", i);
 	    continue;
 	}
-	type = who_is_this (bh->b_data, bh->b_size);
-	if (type != THE_LEAF && type != HAS_IH_ARRAY) {
+	type = reiserfs_node_type (bh);
+	if (type != NT_LEAF && type != NT_IH_ARRAY) {
 	    reiserfs_bitmap_clear_bit (input_bitmap (fs), i);
-	    brelse (bh);
+	    reiserfs_buffer_close (bh);
 	    continue;
 	}
 	fs_stat.leaves ++;
 	stat1_the_leaf (fs, bh);
-	brelse (bh);
+	reiserfs_buffer_close (bh);
     }
 
     reiserfs_warning (stderr, "\nThere were found on the '%s' device:\n"
@@ -211,7 +218,7 @@
 		      "\tblocks containing at least one unique item %lu\n"
 		      "\tblocks which can be skipped %lu\n"
 		      "\t\tstat data %lu\n"
-		      "\t\tindirect %lu\n"
+		      "\t\textent %lu\n"
 		      "\t\tdirect %lu\n"
 		      "\t\tdirectory items %lu\n"
 		      "\tunique items %lu\n",
@@ -227,7 +234,7 @@
 		      fs_stat.leaves - fs_stat.blocks_to_skip,
 		      fs_stat.blocks_to_skip,
 		      fs_stat.items [TYPE_STAT_DATA],
-		      fs_stat.items [TYPE_INDIRECT],
+		      fs_stat.items [TYPE_EXTENT],
 		      fs_stat.items [TYPE_DIRECT],
 		      fs_stat.items [TYPE_DIRENTRY],
 		      fs_stat.unique_items);
@@ -257,13 +264,14 @@
     reiserfs_warning (stderr, "Looking for blocks containing only keys not pointed by any of entries\n");
     total = reiserfs_bitmap_ones (input_bitmap (fs));
     done = 0;
-    for (i = 0; i < get_sb_block_count (fs->fs_ondisk_sb); i ++) {
+    for (i = 0; i < reiserfs_sb_get_blocks (fs->fs_ondisk_sb); i ++) {
 	if (!reiserfs_bitmap_test_bit (input_bitmap (fs), i))
 	    continue;
 
-	print_how_far (stderr, &done, total, 1, be_quiet (fs));
+	if (!misc_test_bit(PRINT_QUIET, &data(fs)->options))
+	    util_misc_progress (stderr, &done, total, 1, 0);
 
-	bh = bread (fs->fs_dev, i, fs->fs_blocksize);
+	bh = reiserfs_buffer_read (fs->fs_dev, i, fs->fs_blocksize);
 	if (!bh) {
 	    printf ("could not read block %lu\n", i);
 	    continue;
diff --git a/utils/debugfs/unpack.c b/utils/debugfs/unpack.c
new file mode 100644
index 0000000..ec4e3ca
--- /dev/null
+++ b/utils/debugfs/unpack.c
@@ -0,0 +1,652 @@
+/*
+ * Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+ 
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+ 
+#include "debugreiserfs.h"
+#include "misc/unaligned.h"
+#include "util/device.h"
+#include "util/misc.h"
+
+#include <sys/resource.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#define print_usage_and_exit() misc_die ("Usage: %s [-v] [-b filename] device\n\
+-v		prints blocks number of every block unpacked\n\
+-b filename	saves bitmap of blocks unpacked to filename\n\
+-j filename     stores journal in the filename\n", argv[0]);
+
+
+/* when super block gets unpacked for the first time - create a bitmap
+   and mark in it what have been unpacked. Save that bitmap at the end */
+reiserfs_bitmap_t * what_unpacked = 0;
+
+
+int leaves, full;
+
+int verbose = 0;
+
+int Default_journal = 1;
+
+static void unpack_offset (struct packed_item * pi, reiserfs_ih_t * ih, int blocksize)
+{
+
+    if (get_pi_mask(pi) & OFFSET_BITS_64) {
+	__u64 v64;
+
+	if (reiserfs_ih_get_format (ih) != KEY_FORMAT_2)
+	    misc_die ("unpack_offset: key format is not set or wrong");
+	fread_le64 (&v64);
+	reiserfs_key_set_off (KEY_FORMAT_2, &ih->ih_key, v64);
+	return;
+    }
+
+    if (get_pi_mask(pi) & OFFSET_BITS_32) {
+	__u32 v32;
+
+	fread_le32 (&v32);
+	reiserfs_key_set_off (reiserfs_ih_get_format (ih), &ih->ih_key, v32);
+	return;
+    }
+
+    if ((get_pi_mask(pi) & DIR_ID) == 0 && (get_pi_mask(pi) & OBJECT_ID) == 0) {
+	/* offset was not sent, as it can be calculated looking at the
+           previous item */
+	if (reiserfs_ih_stat (ih - 1))
+	    reiserfs_key_set_off (reiserfs_ih_get_format (ih), &ih->ih_key, 1);
+	if (reiserfs_ih_ext (ih - 1))
+	    reiserfs_key_set_off(reiserfs_ih_get_format (ih), &ih->ih_key, 
+				    reiserfs_key_get_off (&(ih - 1)->ih_key)
+				    + reiserfs_leaf_ibytes (ih - 1, blocksize));
+    }
+
+    // offset is 0
+    return;
+}
+
+
+static void unpack_type (struct packed_item * pi, reiserfs_ih_t * ih)
+{
+    reiserfs_key_set_type (reiserfs_ih_get_format (ih), &ih->ih_key, get_pi_type(pi));
+    if (reiserfs_key_unkn (&ih->ih_key))
+	reiserfs_panic ("unpack_type: unknown type %d unpacked for %H\n",
+			get_pi_type(pi), ih);
+}
+
+
+/* direntry item comes in the following format: 
+   for each entry
+      mask - 8 bits
+      entry length - 16 bits
+      entry itself
+      deh_objectid - 32 bits
+      	maybe deh_dir_id (32 bits)
+	maybe gencounter (16)
+	maybe deh_state (16)
+*/
+static void unpack_direntry (struct packed_item * pi, reiserfs_bh_t * bh,
+			     reiserfs_ih_t * ih, hashf_t hash_func)
+{
+    __u16 entry_count, namelen, gen_counter, entry_len;
+    __u8 mask;
+    int i;
+    reiserfs_deh_t * deh;
+    int location;
+    char * item;
+
+/*    if (!hash_func)
+	misc_die ("unpack_direntry: hash function is not set");*/
+
+    if (!(get_pi_mask(pi) & IH_FREE_SPACE))
+        misc_die ("ih_entry_count must be packed for directory items");
+
+    entry_count = reiserfs_ih_get_entries (ih);
+/*    if (!entry_count)
+	reiserfs_panic ("unpack_direntry: entry count should be set already");*/
+
+    item = bh->b_data + reiserfs_ih_get_loc (ih);
+    deh = (reiserfs_deh_t *)item;
+    location = get_pi_item_len(pi);
+    for (i = 0; i < entry_count; i ++, deh ++) {
+	fread8 (&mask);
+	fread_le16 (&entry_len);
+	location -= entry_len;
+	reiserfs_deh_set_loc (deh, location);
+	fread (item + location, entry_len, 1, stdin);
+
+	/* find name length */
+	namelen = strlen (item + location);
+	if (namelen > entry_len)
+	    namelen = entry_len;
+
+	fread32 (&deh->deh2_objectid);
+	if (mask & HAS_DIR_ID)
+	    fread32 (&deh->deh2_dir_id);
+	else
+	    reiserfs_deh_set_did (deh, reiserfs_key_get_oid (&ih->ih_key));
+
+	if (*(item + location) == '.' && namelen == 1) {
+	    /* old or new "." */
+	    reiserfs_deh_set_off (deh, OFFSET_DOT);
+	} else if (*(item + location) == '.' && 
+		   *(item + location + 1) == '.' && namelen == 2) 
+	{
+	    /* old or new ".." */
+	    reiserfs_deh_set_off (deh, OFFSET_DOT_DOT);
+	} else if (hash_func) {
+	    reiserfs_deh_set_off (deh, reiserfs_hash_value(hash_func, 
+				  item + location, namelen));
+	}
+	
+	if (mask & HAS_GEN_COUNTER) {
+	    fread_le16 (&gen_counter);
+	    reiserfs_deh_set_off (deh, reiserfs_deh_get_off (deh) | gen_counter);
+	}
+
+	if (mask & HAS_STATE)
+	    fread16 (&deh->deh2_state);
+	else
+	    reiserfs_deh_set_state (deh, (1 << DEH_Visible2));
+    }
+
+    return;
+}
+
+
+/* struct packed_item is already unpacked */
+static void unpack_stat_data (struct packed_item * pi, reiserfs_bh_t * bh,
+			      reiserfs_ih_t * ih)
+{
+    if (!(get_pi_mask(pi) & IH_FREE_SPACE)) {
+        /* ih_free_space was not packed - set default */
+        reiserfs_ih_set_entries (ih, 0xffff);
+    }
+
+    if (reiserfs_ih_get_format (ih) == KEY_FORMAT_1) {
+	/* stat data comes in the following format:
+	   if this is old stat data:
+	   mode - 16 bits
+	   nlink - 16 bits
+	   size - 32 bits
+	   blocks/rdev - 32 bits
+	   maybe first_direct byte 32 bits
+	*/
+	reiserfs_sd_v1_t * sd;
+
+	sd = (reiserfs_sd_v1_t *)reiserfs_item_by_ih (bh, ih);
+	memset (sd, 0, sizeof (sd));
+
+	fread16 (&sd->sd_mode);
+	fread16 (&sd->sd_nlink);
+	fread32 (&sd->sd_size);
+	fread32 (&sd->u.sd_blocks);
+	
+	if (get_pi_mask(pi) & WITH_SD_FIRST_DIRECT_BYTE) {
+	    fread32 (&sd->sd_fdb);
+	} else {
+	    sd->sd_fdb = 0xffffffff;
+	}
+    } else {
+	/* for new stat data
+	   mode - 16 bits
+	   nlink in either 16 or 32 bits
+	   size in either 32 or 64 bits
+	   blocks - 32 bits
+	*/
+	reiserfs_sd_t * sd;
+
+	sd = (reiserfs_sd_t *)reiserfs_item_by_ih (bh, ih);
+	memset (sd, 0, sizeof (sd));
+	
+	fread16 (&sd->sd_mode);
+
+	if (get_pi_mask(pi) & NLINK_BITS_32) {
+	    fread32 (&sd->sd_nlink);
+	} else {
+	    __u16 nlink16;
+
+	    fread16 (&nlink16);
+            reiserfs_set_sd_v2_nlink (sd, le16_to_cpu(nlink16));
+	}
+
+	if (get_pi_mask(pi) & SIZE_BITS_64) {
+	    fread64 (&sd->sd_size);
+	} else {
+	    __u32 size32;
+
+            /* We need the endian conversions since sd->sd_size is 64 bit */
+	    fread_le32 (&size32);
+            reiserfs_set_sd_v2_size (sd, size32 );
+	}
+
+	fread32 (&sd->sd_blocks);
+    }
+
+    return;
+}
+
+
+/* extent item comes either in packed form or as is. ih_free_space
+   can go first */
+static void unpack_extent (struct packed_item * pi, reiserfs_bh_t * bh,
+			     reiserfs_ih_t * ih)
+{
+    __u32 * ind_item, * end;
+    int i;
+    __u16 v16;
+
+    if (!(get_pi_mask(pi) & IH_FREE_SPACE)) {
+        /* ih_free_space was not packed - set default */
+        reiserfs_ih_set_entries (ih, 0);
+    }
+
+    ind_item = (__u32 *)reiserfs_item_by_ih (bh, ih);
+
+    if (get_pi_mask(pi) & SAFE_LINK) {
+	d32_put(ind_item, 0, reiserfs_key_get_did(&ih->ih_key));
+	reiserfs_key_set_did(&ih->ih_key, (__u32)-1);
+	return;
+    }
+
+    if (get_pi_mask(pi) & WHOLE_EXTENT) {
+	fread (ind_item, get_pi_item_len(pi), 1, stdin);
+	return;
+    }
+
+    end = ind_item + reiserfs_ext_count (ih);
+    while (ind_item < end) {
+        __u32 base;
+	fread32 (ind_item);
+	fread_le16 (&v16);
+        base = d32_get(ind_item, 0);
+	for (i = 1; i < v16; i ++) {
+	    if (base != 0)
+		d32_put(ind_item, i, base + i);
+	    else
+		d32_put(ind_item, i, 0);
+	}
+	ind_item += i;
+    }
+    return;
+}
+
+
+// FIXME: we have no way to preserve symlinks
+static void unpack_direct (struct packed_item * pi, reiserfs_bh_t * bh,
+			   reiserfs_ih_t * ih)
+{
+    __u32 * d_item = (__u32 *)reiserfs_item_by_ih (bh, ih);
+
+    if (!(get_pi_mask(pi) & IH_FREE_SPACE))
+        /* ih_free_space was not packed - set default */
+        reiserfs_ih_set_entries (ih, 0xffff);
+
+    if (get_pi_mask(pi) & SAFE_LINK) {
+	d32_put(d_item, 0, reiserfs_key_get_did(&ih->ih_key));
+	reiserfs_key_set_did(&ih->ih_key, (__u32)-1);
+    } else {
+	memset (d_item, 'a', get_pi_item_len(pi));
+    }
+    return;
+}
+
+
+static void unpack_leaf (int dev, hashf_t hash_func, __u16 blocksize)
+{
+    static int unpacked_leaves = 0;
+    reiserfs_bh_t * bh;
+    struct packed_item pi;
+    reiserfs_ih_t * ih;
+    int i;
+    __u16 v16;
+    __u32 v32;
+    
+    /* block number */
+    fread_le32 (&v32);
+
+
+    /* item number */
+    fread_le16 (&v16);
+
+    if (verbose)
+	reiserfs_warning (stderr, "leaf %d: %d items\n", v32, v16);
+
+    bh = reiserfs_buffer_open (dev, v32, blocksize);
+    if (!bh)
+	misc_die ("unpack_leaf: reiserfs_buffer_open failed");
+
+    reiserfs_nh_set_items (NODE_HEAD (bh), v16);
+    reiserfs_nh_set_level (NODE_HEAD (bh), LEAF_LEVEL);
+    reiserfs_nh_set_free (NODE_HEAD (bh), REISERFS_NODE_SPACE (bh->b_size));
+
+    ih = reiserfs_ih_at (bh, 0);
+    for (i = 0; i < reiserfs_nh_get_items (NODE_HEAD (bh)); i ++, ih ++) {
+#if 0
+	fread32 (&v32);
+	if (v32 != ITEM_START_MAGIC)
+	    misc_die ("unpack_leaf: no start item magic found: block %lu, item %i",
+		 bh->b_blocknr, i);
+#endif	
+
+	fread (&pi, sizeof (struct packed_item), 1, stdin);
+	
+	/* dir_id - if it is there */
+	if (get_pi_mask(&pi) & DIR_ID) {
+	    fread32 (&v32);
+            reiserfs_key_set_did (&ih->ih_key, le32_to_cpu(v32));
+	} else {
+	    if (!i)
+		misc_die ("unpack_leaf: dir_id is not set");
+	    reiserfs_key_set_did (&ih->ih_key, reiserfs_key_get_did (&(ih - 1)->ih_key));
+	}
+
+	/* object_id - if it is there */
+	if (get_pi_mask(&pi) & OBJECT_ID) {
+	    fread32 (&v32);
+            reiserfs_key_set_oid (&ih->ih_key, le32_to_cpu(v32));
+	} else {
+	    if (!i)
+		misc_die ("unpack_leaf: object_id is not set");
+	    reiserfs_key_set_oid (&ih->ih_key, reiserfs_key_get_oid (&(ih - 1)->ih_key));
+	}
+
+	// we need to set item format before offset unpacking
+	reiserfs_ih_set_format (ih, (get_pi_mask(&pi) & NEW_FORMAT) ? KEY_FORMAT_2 : KEY_FORMAT_1);
+
+	// offset
+	unpack_offset (&pi, ih, bh->b_size);
+
+	/* type */
+	unpack_type (&pi, ih);
+
+	/* ih_free_space and ih_format */
+	if (get_pi_mask(&pi) & IH_FREE_SPACE) {
+	    fread16 (&v16);
+	    reiserfs_ih_set_entries (ih, le16_to_cpu(v16));
+	}
+
+	if (get_pi_mask(&pi) & IH_FORMAT)
+	    fread16 (&ih->ih_format);
+
+	/* item length and item location */
+	reiserfs_ih_set_len (ih, get_pi_item_len(&pi));
+	reiserfs_ih_set_loc (ih, (i ? reiserfs_ih_get_loc (ih - 1) : bh->b_size) - get_pi_item_len(&pi));
+
+	// item itself
+	if (reiserfs_ih_direct (ih)) {
+	    unpack_direct (&pi, bh, ih);
+	} else if (reiserfs_ih_ext (ih)) {
+	    unpack_extent (&pi, bh, ih);
+	} else if (reiserfs_ih_dir (ih)) {
+	    unpack_direntry (&pi, bh, ih, hash_func);
+	} else if (reiserfs_ih_stat (ih)) {
+	    unpack_stat_data (&pi, bh, ih);
+	}
+	reiserfs_nh_set_free (NODE_HEAD (bh), reiserfs_nh_get_free (NODE_HEAD (bh)) -
+			     (REISERFS_IH_SIZE + reiserfs_ih_get_len (ih)));
+
+#if 0
+	fread32 (&v32);
+	if (v32 != ITEM_END_MAGIC)
+	    misc_die ("unpack_leaf: no end item magic found: block %lu, item %i",
+		 bh->b_blocknr, i);
+	if (verbose)
+	    reiserfs_warning (stderr, "%d: %H\n", i, ih);
+#endif
+    }
+
+    fread_le16 (&v16);
+    if (v16 != LEAF_END_MAGIC)
+	misc_die ("unpack_leaf: wrong end signature found - %x, block %lu", 
+	     v16, bh->b_blocknr);
+
+    reiserfs_buffer_mkuptodate (bh, 1);
+    reiserfs_buffer_mkdirty (bh);
+    reiserfs_buffer_write (bh);
+    /*
+    if (reiserfs_fs_block(fs, bh->b_blocknr) == BT_UNKNOWN)
+	data_blocks_unpacked ++;
+    */
+    reiserfs_buffer_close (bh);
+
+    if (what_unpacked)
+	reiserfs_bitmap_set_bit (what_unpacked, bh->b_blocknr);
+    /*unpacked ++;*/
+
+    if (!(++ unpacked_leaves % 10))
+	fprintf (stderr, "#");
+}
+
+
+static void unpack_full_block (int dev, int blocksize)
+{
+    static int full_blocks_unpacked = 0;
+    __u32 block;
+    reiserfs_bh_t * bh;
+
+    fread_le32 (&block);
+
+    if (verbose)
+	fprintf (stderr, "full #%d\n", block);
+
+    bh = reiserfs_buffer_open (dev, block, blocksize);
+    if (!bh)
+	misc_die ("unpack_full_block: reiserfs_buffer_open failed");
+
+    fread (bh->b_data, bh->b_size, 1, stdin);
+
+    if (reiserfs_node_type (bh) == NT_SUPER && !what_unpacked) {
+	unsigned long blocks;
+	reiserfs_bh_t * tmp;
+	
+	blocks = reiserfs_sb_get_blocks ((reiserfs_sb_t *)(bh->b_data));
+	fprintf (stderr, "There were %lu blocks on the device\n", blocks);
+	what_unpacked = reiserfs_bitmap_create (blocks);
+
+	/* make file as long as filesystem is */
+	tmp = reiserfs_buffer_open (dev, blocks - 1, blocksize);
+	reiserfs_buffer_mkdirty (tmp);
+	reiserfs_buffer_mkuptodate (tmp, 0);
+	reiserfs_buffer_write (tmp);
+	reiserfs_buffer_close (tmp);
+    }
+
+    reiserfs_buffer_mkuptodate (bh, 1);
+    reiserfs_buffer_mkdirty (bh);
+    reiserfs_buffer_write (bh);
+/*
+    if (reiserfs_fs_block(fs, bh->b_blocknr) == BT_UNKNOWN)
+	data_blocks_unpacked ++;
+*/
+    reiserfs_buffer_close (bh);
+
+    if (what_unpacked)
+	reiserfs_bitmap_set_bit (what_unpacked, block);
+    /*unpacked ++;*/
+
+    if (!(++ full_blocks_unpacked % 50))
+	fprintf (stderr, ".");
+}
+
+
+/* just skip bitmaps of unformatted nodes */
+static void unpack_unformatted_bitmap (int dev, int blocksize)
+{
+    __u16 bmap_num;
+    __u32 block_count;
+    int i;
+    char * buf;
+ 
+    fread_le16 (&bmap_num);
+    fread_le32 (&block_count);
+    
+    buf = malloc (blocksize);
+    if (!buf)
+	reiserfs_panic ("unpack_unformatted_bitmap: malloc failed: %m");
+
+    for (i = 0; i < bmap_num; i ++) {
+	if (fread (buf, blocksize, 1, stdin) != 1)
+	    reiserfs_panic ("unpack_unformatted_bitmap: "
+			    "could not read bitmap #%d: %m", i);
+    }
+    free (buf);
+}
+
+
+// read packed reiserfs partition metadata from stdin
+void unpack_partition (int fd, int jfd)
+{
+    __u32 magic32;
+    long position;
+    __u16 magic16;
+    __u16 blocksize;
+    int dev = fd;
+    
+    fread_le32 (&magic32);
+    if (magic32 != REISERFS_SUPER_MAGIC)
+	misc_die ("unpack_partition: reiserfs magic number (0x%x) not found - %x\n",
+             REISERFS_SUPER_MAGIC, magic32);
+    
+    fread_le16 (&blocksize);
+    
+    if (verbose)
+	fprintf (stderr, "Blocksize %d\n", blocksize);
+    
+    while (!feof (stdin)) {
+	char c[2];
+
+	fread (c, 1, 1, stdin);
+	switch (c[0]) {
+	case '.':
+	    if (verbose)
+		fprintf (stderr, "\".\" skipped\n");
+	    continue;
+
+	case '1':
+	    fread (c, 1, 1, stdin); /* that was 100%, read in first 0 */
+	case '2':
+	case '4':
+	case '6':
+	case '8':
+	    fread (c, 1, 1, stdin);
+	case '0':
+	    fread (c + 1, 1, 1, stdin); /* read % */
+		
+	    if (c[0] != '0' || c[1] != '%')
+		misc_die ("0%% expected\n");
+
+	    if (verbose)
+		fprintf (stderr, "0%% skipped\n");
+	    continue;
+	}
+
+	fread (c + 1, 1, 1, stdin);
+	magic16 = le16_to_cpu(*(__u16 *)c);
+	/*fread16 (&magic16);*/
+	
+	switch (magic16 & 0xff) {
+	case LEAF_START_MAGIC:
+	    leaves ++;
+	    unpack_leaf (dev, reiserfs_hash_func (magic16 >> 8), blocksize);
+	    break;
+	    
+	case SEPARATED_JOURNAL_START_MAGIC:
+	    if (Default_journal)
+		misc_die ("file name for separated journal has to be specified");	
+	    dev = jfd;
+	    break;    
+
+	case SEPARATED_JOURNAL_END_MAGIC:
+	    dev = fd;
+	    break;
+	    
+	case FULL_BLOCK_START_MAGIC:
+	    full ++;
+	    unpack_full_block (dev, blocksize);
+	    break;
+
+	case UNFORMATTED_BITMAP_START_MAGIC:
+	    fprintf (stderr, "\nBitmap of unformatted - ignored\n");
+	    unpack_unformatted_bitmap (dev, blocksize);
+	    break;
+	    
+	case END_MAGIC:
+	    goto out;
+
+	default:
+	    position = ftell(stdin);
+	    if (position == ~(long)0)
+		misc_die ("unpack_partition: bad magic found - %x", magic16 & 0xff);
+	    else
+		misc_die ("unpack_partition: bad magic found - %x, position %lu", 
+		    magic16 & 0xff, ftell(stdin));
+	}
+    }
+out:
+    fprintf (stderr, "Unpacked %d leaves, %d full blocks\n", leaves, full);
+
+
+    /*    fclose (block_list);*/
+}
+
+
+int do_unpack(char *host, char *j_filename, char *filename, int verbose) {
+    int fd, fdj = -2;
+    struct rlimit lim = {RLIM_INFINITY, RLIM_INFINITY};
+
+    if (filename == NULL)
+	    filename = ".bitmap";
+    
+    if (j_filename)
+	    Default_journal = 0;
+    
+    /* with this 2.4.0-test9's file_write does not send SIGXFSZ */
+    if (setrlimit (RLIMIT_FSIZE, &lim)) {
+	fprintf  (stderr, "sertlimit failed: %m\n");
+    }
+
+    if (util_device_mounted(host) > 0) {
+	fprintf(stderr, "%s seems mounted, umount it first\n", host);
+	return 0;
+    }
+  
+    fd = open (host, O_RDWR 
+#ifdef O_LARGEFILE
+	       | O_LARGEFILE
+#endif
+	       );
+    if (fd == -1) {
+	perror ("open failed");
+	return 0;
+    }
+
+    if (!Default_journal) {
+	fdj = open (j_filename, O_RDWR 
+#ifdef O_LARGEFILE
+		    | O_LARGEFILE
+#endif
+		    );
+	if (fdj == -1) {
+	    perror ("open failed");
+	    return 0;
+	}
+    }
+
+    unpack_partition (fd, fdj);
+
+    if (what_unpacked && filename) {
+        FILE * file = util_file_open(filename, "w+");
+        reiserfs_bitmap_save (file,  what_unpacked);
+        fclose (file);
+    }
+
+    close (fd);
+    if (!Default_journal)
+	close (fdj);	
+    return 0;
+}
diff --git a/utils/fsck/Makefile.am b/utils/fsck/Makefile.am
new file mode 100644
index 0000000..06da297
--- /dev/null
+++ b/utils/fsck/Makefile.am
@@ -0,0 +1,30 @@
+sbin_PROGRAMS		= fsck.reiserfs
+
+man_MANS		= fsck.reiserfs.8
+EXTRA_DIST		= fsck.reiserfs.8
+
+fsck_reiserfs_SOURCES	= main.c pass0.c pass1.c pass2.c semantic_check.c     \
+			  semantic_rebuild.c pass4.c lost+found.c ubitmap.c   \
+			  uobjectid.c ufile.c check_tree.c info.c super.c     \
+			  rollback.c stage.c leaf.c utree.c relocate.c fsck.h
+fsck_reiserfs_LDADD	= $(top_builddir)/libutil/libutil-static.a            \
+			  $(top_builddir)/libreiserfs/libreiserfs-static.a    \
+			  $(top_builddir)/libmisc/libmisc-static.a
+fsck_reiserfs_LDFLAGS	= @PROGS_LDFLAGS@
+fsck_reiserfs_CFLAGS	= @CFLAGS@
+
+INCLUDES		= -I$(top_srcdir)/include
+
+uninstall-reiserfsck:
+	if test -f $(DESTDIR)$(sbindir)/reiserfsck; then \
+		rm -f $(DESTDIR)$(sbindir)/reiserfsck; \
+	fi;
+
+install-reiserfsck:
+	if test -f $(DESTDIR)$(sbindir)/fsck.reiserfs; then \
+		rm -f $(DESTDIR)$(sbindir)/reiserfsck; \
+		ln $(DESTDIR)$(sbindir)/fsck.reiserfs $(DESTDIR)$(sbindir)/reiserfsck; \
+	fi;
+
+install-data-local: install-reiserfsck
+uninstall-local: uninstall-reiserfsck
diff --git a/utils/fsck/Makefile.in b/utils/fsck/Makefile.in
new file mode 100644
index 0000000..97c4f40
--- /dev/null
+++ b/utils/fsck/Makefile.in
@@ -0,0 +1,788 @@
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+SOURCES = $(fsck_reiserfs_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+sbin_PROGRAMS = fsck.reiserfs$(EXEEXT)
+subdir = utils/fsck
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)"
+sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(sbin_PROGRAMS)
+am_fsck_reiserfs_OBJECTS = fsck_reiserfs-main.$(OBJEXT) \
+	fsck_reiserfs-pass0.$(OBJEXT) fsck_reiserfs-pass1.$(OBJEXT) \
+	fsck_reiserfs-pass2.$(OBJEXT) \
+	fsck_reiserfs-semantic_check.$(OBJEXT) \
+	fsck_reiserfs-semantic_rebuild.$(OBJEXT) \
+	fsck_reiserfs-pass4.$(OBJEXT) \
+	fsck_reiserfs-lost+found.$(OBJEXT) \
+	fsck_reiserfs-ubitmap.$(OBJEXT) \
+	fsck_reiserfs-uobjectid.$(OBJEXT) \
+	fsck_reiserfs-ufile.$(OBJEXT) \
+	fsck_reiserfs-check_tree.$(OBJEXT) \
+	fsck_reiserfs-info.$(OBJEXT) fsck_reiserfs-super.$(OBJEXT) \
+	fsck_reiserfs-rollback.$(OBJEXT) fsck_reiserfs-stage.$(OBJEXT) \
+	fsck_reiserfs-leaf.$(OBJEXT) fsck_reiserfs-utree.$(OBJEXT) \
+	fsck_reiserfs-relocate.$(OBJEXT)
+fsck_reiserfs_OBJECTS = $(am_fsck_reiserfs_OBJECTS)
+fsck_reiserfs_DEPENDENCIES = $(top_builddir)/libutil/libutil-static.a \
+	$(top_builddir)/libreiserfs/libreiserfs-static.a \
+	$(top_builddir)/libmisc/libmisc-static.a
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(fsck_reiserfs_SOURCES)
+DIST_SOURCES = $(fsck_reiserfs_SOURCES)
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PROGS_LDFLAGS = @PROGS_LDFLAGS@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+man_MANS = fsck.reiserfs.8
+EXTRA_DIST = fsck.reiserfs.8
+fsck_reiserfs_SOURCES = main.c pass0.c pass1.c pass2.c semantic_check.c     \
+			  semantic_rebuild.c pass4.c lost+found.c ubitmap.c   \
+			  uobjectid.c ufile.c check_tree.c info.c super.c     \
+			  rollback.c stage.c leaf.c utree.c relocate.c fsck.h
+
+fsck_reiserfs_LDADD = $(top_builddir)/libutil/libutil-static.a            \
+			  $(top_builddir)/libreiserfs/libreiserfs-static.a    \
+			  $(top_builddir)/libmisc/libmisc-static.a
+
+fsck_reiserfs_LDFLAGS = @PROGS_LDFLAGS@
+fsck_reiserfs_CFLAGS = @CFLAGS@
+INCLUDES = -I$(top_srcdir)/include
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  utils/fsck/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  utils/fsck/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-sbinPROGRAMS: $(sbin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(sbindir)" || $(mkdir_p) "$(DESTDIR)$(sbindir)"
+	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(sbindir)/$$f'"; \
+	   $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(sbindir)/$$f" || exit 1; \
+	  else :; fi; \
+	done
+
+uninstall-sbinPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(sbindir)/$$f"; \
+	done
+
+clean-sbinPROGRAMS:
+	-test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
+fsck.reiserfs$(EXEEXT): $(fsck_reiserfs_OBJECTS) $(fsck_reiserfs_DEPENDENCIES) 
+	@rm -f fsck.reiserfs$(EXEEXT)
+	$(LINK) $(fsck_reiserfs_LDFLAGS) $(fsck_reiserfs_OBJECTS) $(fsck_reiserfs_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck_reiserfs-check_tree.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck_reiserfs-info.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck_reiserfs-leaf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck_reiserfs-lost+found.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck_reiserfs-main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck_reiserfs-pass0.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck_reiserfs-pass1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck_reiserfs-pass2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck_reiserfs-pass4.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck_reiserfs-relocate.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck_reiserfs-rollback.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck_reiserfs-semantic_check.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck_reiserfs-semantic_rebuild.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck_reiserfs-stage.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck_reiserfs-super.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck_reiserfs-ubitmap.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck_reiserfs-ufile.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck_reiserfs-uobjectid.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck_reiserfs-utree.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+fsck_reiserfs-main.o: main.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-main.o -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-main.Tpo" -c -o fsck_reiserfs-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-main.Tpo" "$(DEPDIR)/fsck_reiserfs-main.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-main.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='main.c' object='fsck_reiserfs-main.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
+
+fsck_reiserfs-main.obj: main.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-main.obj -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-main.Tpo" -c -o fsck_reiserfs-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-main.Tpo" "$(DEPDIR)/fsck_reiserfs-main.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-main.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='main.c' object='fsck_reiserfs-main.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`
+
+fsck_reiserfs-pass0.o: pass0.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-pass0.o -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-pass0.Tpo" -c -o fsck_reiserfs-pass0.o `test -f 'pass0.c' || echo '$(srcdir)/'`pass0.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-pass0.Tpo" "$(DEPDIR)/fsck_reiserfs-pass0.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-pass0.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pass0.c' object='fsck_reiserfs-pass0.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-pass0.o `test -f 'pass0.c' || echo '$(srcdir)/'`pass0.c
+
+fsck_reiserfs-pass0.obj: pass0.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-pass0.obj -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-pass0.Tpo" -c -o fsck_reiserfs-pass0.obj `if test -f 'pass0.c'; then $(CYGPATH_W) 'pass0.c'; else $(CYGPATH_W) '$(srcdir)/pass0.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-pass0.Tpo" "$(DEPDIR)/fsck_reiserfs-pass0.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-pass0.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pass0.c' object='fsck_reiserfs-pass0.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-pass0.obj `if test -f 'pass0.c'; then $(CYGPATH_W) 'pass0.c'; else $(CYGPATH_W) '$(srcdir)/pass0.c'; fi`
+
+fsck_reiserfs-pass1.o: pass1.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-pass1.o -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-pass1.Tpo" -c -o fsck_reiserfs-pass1.o `test -f 'pass1.c' || echo '$(srcdir)/'`pass1.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-pass1.Tpo" "$(DEPDIR)/fsck_reiserfs-pass1.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-pass1.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pass1.c' object='fsck_reiserfs-pass1.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-pass1.o `test -f 'pass1.c' || echo '$(srcdir)/'`pass1.c
+
+fsck_reiserfs-pass1.obj: pass1.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-pass1.obj -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-pass1.Tpo" -c -o fsck_reiserfs-pass1.obj `if test -f 'pass1.c'; then $(CYGPATH_W) 'pass1.c'; else $(CYGPATH_W) '$(srcdir)/pass1.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-pass1.Tpo" "$(DEPDIR)/fsck_reiserfs-pass1.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-pass1.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pass1.c' object='fsck_reiserfs-pass1.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-pass1.obj `if test -f 'pass1.c'; then $(CYGPATH_W) 'pass1.c'; else $(CYGPATH_W) '$(srcdir)/pass1.c'; fi`
+
+fsck_reiserfs-pass2.o: pass2.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-pass2.o -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-pass2.Tpo" -c -o fsck_reiserfs-pass2.o `test -f 'pass2.c' || echo '$(srcdir)/'`pass2.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-pass2.Tpo" "$(DEPDIR)/fsck_reiserfs-pass2.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-pass2.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pass2.c' object='fsck_reiserfs-pass2.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-pass2.o `test -f 'pass2.c' || echo '$(srcdir)/'`pass2.c
+
+fsck_reiserfs-pass2.obj: pass2.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-pass2.obj -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-pass2.Tpo" -c -o fsck_reiserfs-pass2.obj `if test -f 'pass2.c'; then $(CYGPATH_W) 'pass2.c'; else $(CYGPATH_W) '$(srcdir)/pass2.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-pass2.Tpo" "$(DEPDIR)/fsck_reiserfs-pass2.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-pass2.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pass2.c' object='fsck_reiserfs-pass2.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-pass2.obj `if test -f 'pass2.c'; then $(CYGPATH_W) 'pass2.c'; else $(CYGPATH_W) '$(srcdir)/pass2.c'; fi`
+
+fsck_reiserfs-semantic_check.o: semantic_check.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-semantic_check.o -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-semantic_check.Tpo" -c -o fsck_reiserfs-semantic_check.o `test -f 'semantic_check.c' || echo '$(srcdir)/'`semantic_check.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-semantic_check.Tpo" "$(DEPDIR)/fsck_reiserfs-semantic_check.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-semantic_check.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='semantic_check.c' object='fsck_reiserfs-semantic_check.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-semantic_check.o `test -f 'semantic_check.c' || echo '$(srcdir)/'`semantic_check.c
+
+fsck_reiserfs-semantic_check.obj: semantic_check.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-semantic_check.obj -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-semantic_check.Tpo" -c -o fsck_reiserfs-semantic_check.obj `if test -f 'semantic_check.c'; then $(CYGPATH_W) 'semantic_check.c'; else $(CYGPATH_W) '$(srcdir)/semantic_check.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-semantic_check.Tpo" "$(DEPDIR)/fsck_reiserfs-semantic_check.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-semantic_check.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='semantic_check.c' object='fsck_reiserfs-semantic_check.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-semantic_check.obj `if test -f 'semantic_check.c'; then $(CYGPATH_W) 'semantic_check.c'; else $(CYGPATH_W) '$(srcdir)/semantic_check.c'; fi`
+
+fsck_reiserfs-semantic_rebuild.o: semantic_rebuild.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-semantic_rebuild.o -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-semantic_rebuild.Tpo" -c -o fsck_reiserfs-semantic_rebuild.o `test -f 'semantic_rebuild.c' || echo '$(srcdir)/'`semantic_rebuild.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-semantic_rebuild.Tpo" "$(DEPDIR)/fsck_reiserfs-semantic_rebuild.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-semantic_rebuild.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='semantic_rebuild.c' object='fsck_reiserfs-semantic_rebuild.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-semantic_rebuild.o `test -f 'semantic_rebuild.c' || echo '$(srcdir)/'`semantic_rebuild.c
+
+fsck_reiserfs-semantic_rebuild.obj: semantic_rebuild.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-semantic_rebuild.obj -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-semantic_rebuild.Tpo" -c -o fsck_reiserfs-semantic_rebuild.obj `if test -f 'semantic_rebuild.c'; then $(CYGPATH_W) 'semantic_rebuild.c'; else $(CYGPATH_W) '$(srcdir)/semantic_rebuild.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-semantic_rebuild.Tpo" "$(DEPDIR)/fsck_reiserfs-semantic_rebuild.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-semantic_rebuild.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='semantic_rebuild.c' object='fsck_reiserfs-semantic_rebuild.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-semantic_rebuild.obj `if test -f 'semantic_rebuild.c'; then $(CYGPATH_W) 'semantic_rebuild.c'; else $(CYGPATH_W) '$(srcdir)/semantic_rebuild.c'; fi`
+
+fsck_reiserfs-pass4.o: pass4.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-pass4.o -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-pass4.Tpo" -c -o fsck_reiserfs-pass4.o `test -f 'pass4.c' || echo '$(srcdir)/'`pass4.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-pass4.Tpo" "$(DEPDIR)/fsck_reiserfs-pass4.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-pass4.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pass4.c' object='fsck_reiserfs-pass4.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-pass4.o `test -f 'pass4.c' || echo '$(srcdir)/'`pass4.c
+
+fsck_reiserfs-pass4.obj: pass4.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-pass4.obj -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-pass4.Tpo" -c -o fsck_reiserfs-pass4.obj `if test -f 'pass4.c'; then $(CYGPATH_W) 'pass4.c'; else $(CYGPATH_W) '$(srcdir)/pass4.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-pass4.Tpo" "$(DEPDIR)/fsck_reiserfs-pass4.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-pass4.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pass4.c' object='fsck_reiserfs-pass4.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-pass4.obj `if test -f 'pass4.c'; then $(CYGPATH_W) 'pass4.c'; else $(CYGPATH_W) '$(srcdir)/pass4.c'; fi`
+
+fsck_reiserfs-lost+found.o: lost+found.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-lost+found.o -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-lost+found.Tpo" -c -o fsck_reiserfs-lost+found.o `test -f 'lost+found.c' || echo '$(srcdir)/'`lost+found.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-lost+found.Tpo" "$(DEPDIR)/fsck_reiserfs-lost+found.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-lost+found.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='lost+found.c' object='fsck_reiserfs-lost+found.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-lost+found.o `test -f 'lost+found.c' || echo '$(srcdir)/'`lost+found.c
+
+fsck_reiserfs-lost+found.obj: lost+found.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-lost+found.obj -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-lost+found.Tpo" -c -o fsck_reiserfs-lost+found.obj `if test -f 'lost+found.c'; then $(CYGPATH_W) 'lost+found.c'; else $(CYGPATH_W) '$(srcdir)/lost+found.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-lost+found.Tpo" "$(DEPDIR)/fsck_reiserfs-lost+found.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-lost+found.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='lost+found.c' object='fsck_reiserfs-lost+found.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-lost+found.obj `if test -f 'lost+found.c'; then $(CYGPATH_W) 'lost+found.c'; else $(CYGPATH_W) '$(srcdir)/lost+found.c'; fi`
+
+fsck_reiserfs-ubitmap.o: ubitmap.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-ubitmap.o -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-ubitmap.Tpo" -c -o fsck_reiserfs-ubitmap.o `test -f 'ubitmap.c' || echo '$(srcdir)/'`ubitmap.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-ubitmap.Tpo" "$(DEPDIR)/fsck_reiserfs-ubitmap.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-ubitmap.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='ubitmap.c' object='fsck_reiserfs-ubitmap.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-ubitmap.o `test -f 'ubitmap.c' || echo '$(srcdir)/'`ubitmap.c
+
+fsck_reiserfs-ubitmap.obj: ubitmap.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-ubitmap.obj -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-ubitmap.Tpo" -c -o fsck_reiserfs-ubitmap.obj `if test -f 'ubitmap.c'; then $(CYGPATH_W) 'ubitmap.c'; else $(CYGPATH_W) '$(srcdir)/ubitmap.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-ubitmap.Tpo" "$(DEPDIR)/fsck_reiserfs-ubitmap.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-ubitmap.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='ubitmap.c' object='fsck_reiserfs-ubitmap.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-ubitmap.obj `if test -f 'ubitmap.c'; then $(CYGPATH_W) 'ubitmap.c'; else $(CYGPATH_W) '$(srcdir)/ubitmap.c'; fi`
+
+fsck_reiserfs-uobjectid.o: uobjectid.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-uobjectid.o -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-uobjectid.Tpo" -c -o fsck_reiserfs-uobjectid.o `test -f 'uobjectid.c' || echo '$(srcdir)/'`uobjectid.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-uobjectid.Tpo" "$(DEPDIR)/fsck_reiserfs-uobjectid.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-uobjectid.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='uobjectid.c' object='fsck_reiserfs-uobjectid.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-uobjectid.o `test -f 'uobjectid.c' || echo '$(srcdir)/'`uobjectid.c
+
+fsck_reiserfs-uobjectid.obj: uobjectid.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-uobjectid.obj -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-uobjectid.Tpo" -c -o fsck_reiserfs-uobjectid.obj `if test -f 'uobjectid.c'; then $(CYGPATH_W) 'uobjectid.c'; else $(CYGPATH_W) '$(srcdir)/uobjectid.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-uobjectid.Tpo" "$(DEPDIR)/fsck_reiserfs-uobjectid.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-uobjectid.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='uobjectid.c' object='fsck_reiserfs-uobjectid.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-uobjectid.obj `if test -f 'uobjectid.c'; then $(CYGPATH_W) 'uobjectid.c'; else $(CYGPATH_W) '$(srcdir)/uobjectid.c'; fi`
+
+fsck_reiserfs-ufile.o: ufile.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-ufile.o -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-ufile.Tpo" -c -o fsck_reiserfs-ufile.o `test -f 'ufile.c' || echo '$(srcdir)/'`ufile.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-ufile.Tpo" "$(DEPDIR)/fsck_reiserfs-ufile.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-ufile.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='ufile.c' object='fsck_reiserfs-ufile.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-ufile.o `test -f 'ufile.c' || echo '$(srcdir)/'`ufile.c
+
+fsck_reiserfs-ufile.obj: ufile.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-ufile.obj -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-ufile.Tpo" -c -o fsck_reiserfs-ufile.obj `if test -f 'ufile.c'; then $(CYGPATH_W) 'ufile.c'; else $(CYGPATH_W) '$(srcdir)/ufile.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-ufile.Tpo" "$(DEPDIR)/fsck_reiserfs-ufile.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-ufile.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='ufile.c' object='fsck_reiserfs-ufile.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-ufile.obj `if test -f 'ufile.c'; then $(CYGPATH_W) 'ufile.c'; else $(CYGPATH_W) '$(srcdir)/ufile.c'; fi`
+
+fsck_reiserfs-check_tree.o: check_tree.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-check_tree.o -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-check_tree.Tpo" -c -o fsck_reiserfs-check_tree.o `test -f 'check_tree.c' || echo '$(srcdir)/'`check_tree.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-check_tree.Tpo" "$(DEPDIR)/fsck_reiserfs-check_tree.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-check_tree.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='check_tree.c' object='fsck_reiserfs-check_tree.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-check_tree.o `test -f 'check_tree.c' || echo '$(srcdir)/'`check_tree.c
+
+fsck_reiserfs-check_tree.obj: check_tree.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-check_tree.obj -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-check_tree.Tpo" -c -o fsck_reiserfs-check_tree.obj `if test -f 'check_tree.c'; then $(CYGPATH_W) 'check_tree.c'; else $(CYGPATH_W) '$(srcdir)/check_tree.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-check_tree.Tpo" "$(DEPDIR)/fsck_reiserfs-check_tree.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-check_tree.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='check_tree.c' object='fsck_reiserfs-check_tree.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-check_tree.obj `if test -f 'check_tree.c'; then $(CYGPATH_W) 'check_tree.c'; else $(CYGPATH_W) '$(srcdir)/check_tree.c'; fi`
+
+fsck_reiserfs-info.o: info.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-info.o -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-info.Tpo" -c -o fsck_reiserfs-info.o `test -f 'info.c' || echo '$(srcdir)/'`info.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-info.Tpo" "$(DEPDIR)/fsck_reiserfs-info.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-info.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='info.c' object='fsck_reiserfs-info.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-info.o `test -f 'info.c' || echo '$(srcdir)/'`info.c
+
+fsck_reiserfs-info.obj: info.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-info.obj -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-info.Tpo" -c -o fsck_reiserfs-info.obj `if test -f 'info.c'; then $(CYGPATH_W) 'info.c'; else $(CYGPATH_W) '$(srcdir)/info.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-info.Tpo" "$(DEPDIR)/fsck_reiserfs-info.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-info.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='info.c' object='fsck_reiserfs-info.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-info.obj `if test -f 'info.c'; then $(CYGPATH_W) 'info.c'; else $(CYGPATH_W) '$(srcdir)/info.c'; fi`
+
+fsck_reiserfs-super.o: super.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-super.o -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-super.Tpo" -c -o fsck_reiserfs-super.o `test -f 'super.c' || echo '$(srcdir)/'`super.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-super.Tpo" "$(DEPDIR)/fsck_reiserfs-super.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-super.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='super.c' object='fsck_reiserfs-super.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-super.o `test -f 'super.c' || echo '$(srcdir)/'`super.c
+
+fsck_reiserfs-super.obj: super.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-super.obj -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-super.Tpo" -c -o fsck_reiserfs-super.obj `if test -f 'super.c'; then $(CYGPATH_W) 'super.c'; else $(CYGPATH_W) '$(srcdir)/super.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-super.Tpo" "$(DEPDIR)/fsck_reiserfs-super.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-super.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='super.c' object='fsck_reiserfs-super.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-super.obj `if test -f 'super.c'; then $(CYGPATH_W) 'super.c'; else $(CYGPATH_W) '$(srcdir)/super.c'; fi`
+
+fsck_reiserfs-rollback.o: rollback.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-rollback.o -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-rollback.Tpo" -c -o fsck_reiserfs-rollback.o `test -f 'rollback.c' || echo '$(srcdir)/'`rollback.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-rollback.Tpo" "$(DEPDIR)/fsck_reiserfs-rollback.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-rollback.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='rollback.c' object='fsck_reiserfs-rollback.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-rollback.o `test -f 'rollback.c' || echo '$(srcdir)/'`rollback.c
+
+fsck_reiserfs-rollback.obj: rollback.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-rollback.obj -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-rollback.Tpo" -c -o fsck_reiserfs-rollback.obj `if test -f 'rollback.c'; then $(CYGPATH_W) 'rollback.c'; else $(CYGPATH_W) '$(srcdir)/rollback.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-rollback.Tpo" "$(DEPDIR)/fsck_reiserfs-rollback.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-rollback.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='rollback.c' object='fsck_reiserfs-rollback.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-rollback.obj `if test -f 'rollback.c'; then $(CYGPATH_W) 'rollback.c'; else $(CYGPATH_W) '$(srcdir)/rollback.c'; fi`
+
+fsck_reiserfs-stage.o: stage.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-stage.o -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-stage.Tpo" -c -o fsck_reiserfs-stage.o `test -f 'stage.c' || echo '$(srcdir)/'`stage.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-stage.Tpo" "$(DEPDIR)/fsck_reiserfs-stage.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-stage.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='stage.c' object='fsck_reiserfs-stage.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-stage.o `test -f 'stage.c' || echo '$(srcdir)/'`stage.c
+
+fsck_reiserfs-stage.obj: stage.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-stage.obj -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-stage.Tpo" -c -o fsck_reiserfs-stage.obj `if test -f 'stage.c'; then $(CYGPATH_W) 'stage.c'; else $(CYGPATH_W) '$(srcdir)/stage.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-stage.Tpo" "$(DEPDIR)/fsck_reiserfs-stage.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-stage.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='stage.c' object='fsck_reiserfs-stage.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-stage.obj `if test -f 'stage.c'; then $(CYGPATH_W) 'stage.c'; else $(CYGPATH_W) '$(srcdir)/stage.c'; fi`
+
+fsck_reiserfs-leaf.o: leaf.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-leaf.o -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-leaf.Tpo" -c -o fsck_reiserfs-leaf.o `test -f 'leaf.c' || echo '$(srcdir)/'`leaf.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-leaf.Tpo" "$(DEPDIR)/fsck_reiserfs-leaf.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-leaf.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='leaf.c' object='fsck_reiserfs-leaf.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-leaf.o `test -f 'leaf.c' || echo '$(srcdir)/'`leaf.c
+
+fsck_reiserfs-leaf.obj: leaf.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-leaf.obj -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-leaf.Tpo" -c -o fsck_reiserfs-leaf.obj `if test -f 'leaf.c'; then $(CYGPATH_W) 'leaf.c'; else $(CYGPATH_W) '$(srcdir)/leaf.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-leaf.Tpo" "$(DEPDIR)/fsck_reiserfs-leaf.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-leaf.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='leaf.c' object='fsck_reiserfs-leaf.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-leaf.obj `if test -f 'leaf.c'; then $(CYGPATH_W) 'leaf.c'; else $(CYGPATH_W) '$(srcdir)/leaf.c'; fi`
+
+fsck_reiserfs-utree.o: utree.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-utree.o -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-utree.Tpo" -c -o fsck_reiserfs-utree.o `test -f 'utree.c' || echo '$(srcdir)/'`utree.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-utree.Tpo" "$(DEPDIR)/fsck_reiserfs-utree.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-utree.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='utree.c' object='fsck_reiserfs-utree.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-utree.o `test -f 'utree.c' || echo '$(srcdir)/'`utree.c
+
+fsck_reiserfs-utree.obj: utree.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-utree.obj -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-utree.Tpo" -c -o fsck_reiserfs-utree.obj `if test -f 'utree.c'; then $(CYGPATH_W) 'utree.c'; else $(CYGPATH_W) '$(srcdir)/utree.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-utree.Tpo" "$(DEPDIR)/fsck_reiserfs-utree.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-utree.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='utree.c' object='fsck_reiserfs-utree.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-utree.obj `if test -f 'utree.c'; then $(CYGPATH_W) 'utree.c'; else $(CYGPATH_W) '$(srcdir)/utree.c'; fi`
+
+fsck_reiserfs-relocate.o: relocate.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-relocate.o -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-relocate.Tpo" -c -o fsck_reiserfs-relocate.o `test -f 'relocate.c' || echo '$(srcdir)/'`relocate.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-relocate.Tpo" "$(DEPDIR)/fsck_reiserfs-relocate.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-relocate.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='relocate.c' object='fsck_reiserfs-relocate.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-relocate.o `test -f 'relocate.c' || echo '$(srcdir)/'`relocate.c
+
+fsck_reiserfs-relocate.obj: relocate.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -MT fsck_reiserfs-relocate.obj -MD -MP -MF "$(DEPDIR)/fsck_reiserfs-relocate.Tpo" -c -o fsck_reiserfs-relocate.obj `if test -f 'relocate.c'; then $(CYGPATH_W) 'relocate.c'; else $(CYGPATH_W) '$(srcdir)/relocate.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/fsck_reiserfs-relocate.Tpo" "$(DEPDIR)/fsck_reiserfs-relocate.Po"; else rm -f "$(DEPDIR)/fsck_reiserfs-relocate.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='relocate.c' object='fsck_reiserfs-relocate.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_reiserfs_CFLAGS) $(CFLAGS) -c -o fsck_reiserfs-relocate.obj `if test -f 'relocate.c'; then $(CYGPATH_W) 'relocate.c'; else $(CYGPATH_W) '$(srcdir)/relocate.c'; fi`
+uninstall-info-am:
+install-man8: $(man8_MANS) $(man_MANS)
+	@$(NORMAL_INSTALL)
+	test -z "$(man8dir)" || $(mkdir_p) "$(DESTDIR)$(man8dir)"
+	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+	for i in $$l2; do \
+	  case "$$i" in \
+	    *.8*) list="$$list $$i" ;; \
+	  esac; \
+	done; \
+	for i in $$list; do \
+	  if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+	  else file=$$i; fi; \
+	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+	  case "$$ext" in \
+	    8*) ;; \
+	    *) ext='8' ;; \
+	  esac; \
+	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
+	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+	  echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+	  $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+	done
+uninstall-man8:
+	@$(NORMAL_UNINSTALL)
+	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+	for i in $$l2; do \
+	  case "$$i" in \
+	    *.8*) list="$$list $$i" ;; \
+	  esac; \
+	done; \
+	for i in $$list; do \
+	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+	  case "$$ext" in \
+	    8*) ;; \
+	    *) ext='8' ;; \
+	  esac; \
+	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
+	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+	  echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+	  rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS)
+installdirs:
+	for dir in "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-man
+
+install-exec-am: install-sbinPROGRAMS
+
+install-info: install-info-am
+
+install-man: install-man8
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-local uninstall-man \
+	uninstall-sbinPROGRAMS
+
+uninstall-man: uninstall-man8
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-sbinPROGRAMS ctags distclean distclean-compile \
+	distclean-generic distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-data-local install-exec \
+	install-exec-am install-info install-info-am install-man \
+	install-man8 install-sbinPROGRAMS install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-info-am uninstall-local uninstall-man \
+	uninstall-man8 uninstall-sbinPROGRAMS
+
+
+uninstall-reiserfsck:
+	if test -f $(DESTDIR)$(sbindir)/reiserfsck; then \
+		rm -f $(DESTDIR)$(sbindir)/reiserfsck; \
+	fi;
+
+install-reiserfsck:
+	if test -f $(DESTDIR)$(sbindir)/fsck.reiserfs; then \
+		rm -f $(DESTDIR)$(sbindir)/reiserfsck; \
+		ln $(DESTDIR)$(sbindir)/fsck.reiserfs $(DESTDIR)$(sbindir)/reiserfsck; \
+	fi;
+
+install-data-local: install-reiserfsck
+uninstall-local: uninstall-reiserfsck
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/utils/fsck/check_tree.c b/utils/fsck/check_tree.c
new file mode 100644
index 0000000..721a536
--- /dev/null
+++ b/utils/fsck/check_tree.c
@@ -0,0 +1,872 @@
+/*
+ * Copyright 1999-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "fsck.h"
+#include "misc/unaligned.h"
+
+/* check_fs_tree stops and recommends to run fsck --rebuild-tree when:
+   1. read fails
+   2. node of wrong level found in the tree
+   3. something in the tree points to wrong block number
+      out of filesystem boundary is pointed by tree
+      to block marked as free in bitmap
+      the same block is pointed from more than one place
+      not data blocks (journal area, super block, bitmaps)
+   4. bad formatted node found
+   5. delimiting keys are incorrect
+*/
+
+/* mark every block we see in the tree in control_bitmap, so, when to make
+   sure, that no blocks are pointed to from more than one place we use
+   additional bitmap (control_bitmap). If we see pointer to a block we set
+   corresponding bit to 1. If it is set already - run with --rebuild-tree */
+static reiserfs_bitmap_t * control_bitmap;
+
+static reiserfs_bitmap_t * source_bitmap;
+
+static void fsck_tree_check_bitmap_prep (reiserfs_filsys_t * fs) {
+    unsigned int i;
+    unsigned long nr;
+    unsigned long block;
+    unsigned long reserved;
+    unsigned long bmap_nr;
+
+    nr = reiserfs_sb_get_blocks(fs->fs_ondisk_sb);
+    
+    control_bitmap = reiserfs_bitmap_create(nr);
+    
+    if (!control_bitmap)
+	misc_die ("%s: Failed to allocate a control bitmap.", __FUNCTION__);
+
+    /* skipped and super block */
+    for (i = 0; i <= fs->fs_super_bh->b_blocknr; i ++)
+    	reiserfs_bitmap_set_bit (control_bitmap, i);
+
+    /* bitmaps */
+    bmap_nr = reiserfs_bmap_nr(nr, fs->fs_blocksize);
+    block = fs->fs_super_bh->b_blocknr + 1;
+    for (i = 0; i < bmap_nr; i ++) {
+        reiserfs_bitmap_set_bit (control_bitmap, block);
+
+	if (reiserfs_bitmap_spread (fs))
+	    block = (block / (fs->fs_blocksize * 8) + 1) * 
+		    (fs->fs_blocksize * 8);
+	else
+	    block ++;	
+    }
+    
+    /* mark as used area of the main device either containing a journal or
+       reserved to hold it */
+
+    reserved = reiserfs_journal_hostsize(fs->fs_ondisk_sb);
+    
+    /* where does journal area (or reserved journal area) start from */
+
+    if (!reiserfs_new_location (fs->fs_super_bh->b_blocknr, fs->fs_blocksize) &&
+    	!reiserfs_old_location (fs->fs_super_bh->b_blocknr, fs->fs_blocksize))
+    {
+	misc_die ("%s: Wrong super block location. You must "
+		  "run --rebuild-sb.", __FUNCTION__);
+    }
+
+    block = reiserfs_journal_start_must (fs);
+
+    for (i = block; i < reserved + block; i ++)
+	reiserfs_bitmap_set_bit (control_bitmap, i);
+
+    if (fs->fs_badblocks_bm)
+	for (i = 0; i < nr; i ++) {
+	    if (reiserfs_bitmap_test_bit (fs->fs_badblocks_bm, i))
+	    	reiserfs_bitmap_set_bit (control_bitmap, i);	
+	}
+}
+
+/* if we managed to complete tree scanning and if control bitmap and/or proper
+   amount of free blocks mismatch with bitmap on disk and super block's
+   s_free_blocks - we can fix that */
+static void fsck_tree_check_bitmap_fini (reiserfs_filsys_t * fs) {
+    int problem = 0;
+
+    /* check free block counter */
+    if (reiserfs_sb_get_free (fs->fs_ondisk_sb) != 
+	reiserfs_bitmap_zeros (control_bitmap)) 
+    {
+/*	fsck_log ("vpf-10630: The count of free blocks in the on-disk bitmap "
+		  "(%lu) mismatches with the correct one (%lu).\n",  
+		  reiserfs_sb_get_free (fs->fs_ondisk_sb),
+		  reiserfs_bitmap_zeros (control_bitmap));
+*/
+	problem++;
+    }
+
+    if (reiserfs_bitmap_compare (source_bitmap, control_bitmap))
+	problem++;    
+
+    if (problem) {
+        if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
+	    fsck_log ("vpf-10630: The on-disk and the correct "
+		      "bitmaps differs. Will be fixed later.\n");
+	    
+//            fsck_progress ("Trying to fix bitmap ..\n");
+            /* mark blocks as used in source bitmap if they are used in 
+	       control bitmap */
+            reiserfs_bitmap_disjunction (source_bitmap, control_bitmap);
+            /* change used blocks count accordinly source bitmap, copy 
+	       bitmap changes to on_disk bitmap */
+            reiserfs_sb_set_free (fs->fs_ondisk_sb, 
+				reiserfs_bitmap_zeros(source_bitmap));
+            reiserfs_bitmap_copy (fs->fs_bitmap2, source_bitmap);
+            reiserfs_buffer_mkdirty (fs->fs_super_bh);
+/*
+            // check again 
+            if ((diff = reiserfs_bitmap_compare(source_bitmap, 
+						control_bitmap)) != 0)  
+	    {
+                // do not mark them as fatal or fixable because one can live 
+		// with leaked space. So this is not a fatal corruption, and 
+		// fix-fixable cannot fix it 
+                fsck_progress (" bitmaps were not recovered.\n\tYou can either "
+		"run rebuild-tree or live with %d leaked blocks\n", diff);
+            } else {
+                fsck_progress ("finished\n");
+            }
+*/
+        } else if (problem) {
+	    fsck_log ("vpf-10640: The on-disk and the "
+		      "correct bitmaps differs.\n");
+	    
+            while (problem) {
+                /* fixable corruptions because we can try to recover them 
+		   without rebuilding the tree */
+        	one_more_corruption (fs, FIXABLE); 
+        	problem --;
+            }
+        }
+    } else 
+        //fsck_progress ("finished\n");
+        
+    return;
+}
+
+static int fsck_tree_check_bitmap_auto (reiserfs_filsys_t *fs) {
+    unsigned long i;
+    
+    if (source_bitmap->bm_byte_size != control_bitmap->bm_byte_size)
+	return -1;
+    
+    for (i = 0; i < source_bitmap->bm_byte_size; i ++) {
+	if (control_bitmap->bm_map[i] & ~source_bitmap->bm_map[i]) {
+	    return 1;
+	}
+    }
+    
+    return 0;
+}
+
+/* is this block legal to be pointed to by some place of the tree? */
+static int fsck_tree_check_blknr (reiserfs_filsys_t * fs, unsigned long block) {
+    if (reiserfs_fs_block(fs, block) != BT_UNKNOWN) {
+	/* block has value which can not be used as a pointer in a tree */
+	return 1;
+    }
+
+    return 0;
+}
+
+static int fsck_tree_check_mark_block (unsigned long block) {
+    if (reiserfs_bitmap_test_bit (control_bitmap, block)) {
+	/* block is in tree at least twice */
+    	return 1;
+    }
+    
+    reiserfs_bitmap_set_bit (control_bitmap, block);
+    return 0;
+}
+
+/* 1 if it does not look like reasonable stat data */
+static int fsck_tree_check_stat (reiserfs_filsys_t * fs, 
+				 reiserfs_bh_t * bh, 
+				 reiserfs_ih_t * ih)
+{
+    unsigned long objectid;
+
+    objectid = reiserfs_key_get_oid (&ih->ih_key);
+    if (!reiserfs_objmap_test (fs, objectid)) {
+	/* FIXME: this could be cured right here */
+	fsck_log ("%s: The objectid (%lu) is marked free, but used by an "
+		  "object %k\n", __FUNCTION__, objectid, &ih->ih_key);
+
+        /* if it is FIX_FIXABLE we flush objectid map at the end
+           no way to call one_less_corruption later
+        */
+	if (fsck_mode (fs) != FSCK_FIX_FIXABLE)
+	    one_more_corruption (fs, FIXABLE);
+    }
+
+    if (id_map_mark(proper_id_map (fs), objectid)) {
+	fsck_log ("%s: The objectid (%lu) is shared by at least "
+		  "two files. Can be fixed with --rebuild-tree "
+		  "only.\n", __FUNCTION__, objectid);
+    }
+
+    return 0;
+}
+
+static inline void handle_one_pointer (reiserfs_filsys_t * fs, 
+				       reiserfs_bh_t * bh,
+				       __u32 * item, 
+				       int offset)
+{
+    if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
+	fsck_log (" - zeroed");
+	d32_put (item, offset, 0);
+	reiserfs_buffer_mkdirty (bh);
+    } else {
+	one_more_corruption (fs, FIXABLE);
+    }
+}
+
+static int fsck_tree_check_badblock (reiserfs_filsys_t * fs, 
+				     reiserfs_bh_t * bh,
+				     reiserfs_ih_t * ih) 
+{
+    __u32 i;
+    __u32 * ind = (__u32 *)reiserfs_item_by_ih (bh, ih);
+
+    if (reiserfs_ih_get_len (ih) % 4) {
+	fsck_log ("%s: block %lu: item (%H) has bad length\n", 
+		  __FUNCTION__, bh->b_blocknr, ih);
+	one_more_corruption (fs, FATAL);
+	return 1;
+    }
+	
+    /* All valid badblocks are given in badblock bitmap. 
+       Nothing to check anymore. */
+    if (fs->fs_badblocks_bm)
+	    return 0;
+    
+    for (i = 0; i < reiserfs_ext_count (ih); i ++) {
+	if (!d32_get (ind, i)) {
+/*	    fsck_log ("%s: block %lu: badblocks item (%H) has "
+		      "zero pointer.", __FUNCTION__, bh->b_blocknr, ih);
+	    
+	    if (fsck_mode(fs) != FSCK_FIX_FIXABLE) {
+		    fsck_log("Not an error, but could be deleted "
+			     "with --fix-fixable\n");
+	    } else {
+		    fsck_log("Will be deleted later.\n");
+	    }	*/
+	    
+	    continue;
+	}
+
+	/* check list of badblocks pointers */
+	if (d32_get (ind, i) >= reiserfs_sb_get_blocks (fs->fs_ondisk_sb)) {
+	    fsck_log ("%s: badblock pointer (block %lu) points "
+		      "out of disk spase (%lu)", __FUNCTION__, 
+		      bh->b_blocknr, d32_get (ind, i));
+	    
+	    handle_one_pointer (fs, bh, ind, i);
+	    fsck_log ("\n");
+	}
+
+	if (reiserfs_bitmap_test_bit (control_bitmap, d32_get (ind, i))) {
+	    /* it can be
+	       1. not_data_block
+	       		delete pointer
+	       2. ind [i] or internal/leaf
+	          advice to run fix-fixable if there is no fatal errors
+	          with list of badblocks, say that it could fix it. */
+	
+	    if (reiserfs_fs_block(fs, d32_get (ind, i)) != BT_UNKNOWN ) {
+		fsck_log ("%s: badblock pointer (block %lu) points on fs "
+			  "metadata (%lu)", __FUNCTION__, bh->b_blocknr, 
+			  d32_get (ind, i));
+		
+		handle_one_pointer (fs, bh, ind, i);
+		fsck_log ("\n");
+	    } else {
+		one_more_corruption(fs, FIXABLE);
+	        fsck_log ("%s: badblock pointer (block %lu) points to "
+			  "a block (%lu) which is in the tree already. "
+			  "Use badblock option (-B) to fix the problem\n", 
+			  __FUNCTION__, bh->b_blocknr, d32_get (ind, i));
+	    }
+
+	    continue;
+	}
+	
+	reiserfs_bitmap_set_bit (control_bitmap, d32_get(ind, i));
+    }
+
+    return 0;
+}
+
+/* for each unformatted node pointer: make sure it points to data area and
+   that it is not in the tree yet */
+static int fsck_tree_check_ext (reiserfs_filsys_t * fs, 
+				reiserfs_bh_t * bh,
+				reiserfs_ih_t * ih)
+{
+    __u32 * ind = (__u32 *)reiserfs_item_by_ih (bh, ih);
+    unsigned int i;
+
+    if (reiserfs_ih_get_len (ih) % REISERFS_EXT_SIZE) {
+	fsck_log ("%s: block %lu: The item (%H) has the bad length (%u)\n",
+		  __FUNCTION__, bh->b_blocknr, ih, reiserfs_ih_get_len (ih));
+	one_more_corruption (fs, FATAL);
+	return 1;
+    }
+
+    for (i = 0; i < reiserfs_ext_count (ih); i ++) {
+
+	fsck_check_stat (fs)->unfm_pointers ++;
+	if (!d32_get (ind, i)) {
+	    fsck_check_stat (fs)->zero_unfm_pointers ++;
+	    continue;
+	}
+
+	/* check unformatted node pointer and mark it used in the
+           control bitmap */
+	if (fsck_tree_check_blknr(fs, d32_get (ind, i))) {
+	    fsck_log ("%s: block %lu: The item %k has the bad pointer (%d) to "
+		      "the block (%lu)", __FUNCTION__, bh->b_blocknr, 
+		      &ih->ih_key, i, d32_get (ind, i));
+	    
+	    handle_one_pointer (fs, bh, ind, i);
+	    fsck_log ("\n");
+	    continue;
+	}
+
+        if (fsck_tree_check_mark_block (d32_get (ind, i))) {
+	    fsck_log ("%s: block %lu: The item (%H) has the bad pointer (%d) "
+		      "to the block (%lu), which is in tree already", 
+		      __FUNCTION__, bh->b_blocknr, ih, i, d32_get (ind, i));
+	    
+	    handle_one_pointer (fs, bh, ind, i);
+	    fsck_log ("\n");
+            continue;
+	}
+    }
+
+#if 0
+    /* delete this check for 3.6 */
+    if (reiserfs_ih_get_free (ih) > fs->fs_blocksize - 1) {
+        if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
+            /*FIXME: fix it if needed*/
+        } else {
+            fsck_log ("%s: %H has wrong ih_free_space\n", __FUNCTION__, ih);
+            one_more_corruption (fs, fixable);
+        }
+    }
+#endif
+
+    return 0;
+}
+
+static int fsck_tree_check_dir (reiserfs_filsys_t * fs, 
+			       reiserfs_bh_t * bh, 
+			       reiserfs_ih_t * ih)
+{
+    char *name, *prev_name;
+    __u32 off, prev_off;
+    unsigned int count, i;
+    reiserfs_deh_t * deh = reiserfs_deh (bh, ih);
+    int min_entry_size = 1;/* We have no way to understand whether the
+                              filesystem was created in 3.6 format or
+                              converted to it. So, we assume that minimal name
+                              length is 1 */
+    __u16 state;
+    int namelen;
+
+    count = reiserfs_ih_get_entries (ih);
+
+    if (count == 0) {
+	one_more_corruption (fs, FATAL);	
+	return 1;
+    }
+    
+    /* make sure item looks like a directory */
+    if (reiserfs_ih_get_len (ih) / 
+	(REISERFS_DEH_SIZE + min_entry_size) < count) 
+    {
+	/* entry count can not be that big */
+	fsck_log ("%s: block %lu: The directory item %k has the exsessively "
+		  "big entry count (%u)\n",  __FUNCTION__, bh->b_blocknr, 
+		  &ih->ih_key, count);
+	
+	one_more_corruption (fs, FATAL);	
+	return 1;
+    }
+
+    if (reiserfs_deh_get_loc (&deh[count - 1]) != REISERFS_DEH_SIZE * count) {
+	/* last entry should start right after array of dir entry headers */
+	fsck_log ("%s: block %lu: The directory item %k has the corrupted "
+		  "entry structure\n", __FUNCTION__, bh->b_blocknr, 
+		  &ih->ih_key);
+	
+	one_more_corruption (fs, FATAL);
+	return 1;
+    }
+    
+    /* check name hashing */
+    prev_name = reiserfs_item_by_ih(bh, ih) + reiserfs_ih_get_len(ih);
+    prev_off = 0;
+
+    for (i = 0; i < count; i ++, deh ++) {
+	namelen = reiserfs_direntry_name_len (ih, deh, i);
+	name = reiserfs_deh_name (deh, i);
+	off = reiserfs_deh_get_off (deh);
+	
+	if (namelen > REISERFS_NAME_MAX || 
+	    name >= prev_name || off <= prev_off) 
+	{
+	    fsck_log ("%s: block %lu: The directory item %k has a broken entry "
+		      "(%d)\n", __FUNCTION__, bh->b_blocknr, &ih->ih_key, i);
+	    one_more_corruption (fs, FATAL);
+	    return 1;
+	}
+
+	if (!reiserfs_hash_correct (&fs->hash, name, namelen, off)) {
+	    fsck_log ("%s: block %lu: The directory item %k has a not properly "
+		      "hashed entry (%d)\n", __FUNCTION__, bh->b_blocknr, 
+		      &ih->ih_key, i);
+	    
+	    one_more_corruption (fs, FATAL);
+	    return 1;
+	}
+
+	prev_name = name;
+	prev_off = off;
+    }
+
+    deh = reiserfs_deh (bh, ih);
+    state = (1 << DEH_Visible2);
+    /* ok, items looks like a directory */
+    for (i = 0; i < count; i ++, deh ++) {
+	if (reiserfs_deh_get_state (deh) != state) {
+	    fsck_log ("%s: block %lu: The directory item %k has the entry (%d) "
+		      "\"%.*s\" with a not legal state (%o), (%o) expected", 
+		      __FUNCTION__, bh->b_blocknr, &ih->ih_key, i, 
+		      reiserfs_direntry_name_len (ih, deh, i), 
+		      reiserfs_deh_name (deh, i), 
+		      reiserfs_deh_get_state (deh), state);
+	    
+	    if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
+		reiserfs_deh_set_state (deh, 1 << DEH_Visible2);
+		reiserfs_buffer_mkdirty (bh);
+		fsck_log (" - corrected\n");
+	    } else 
+		one_more_corruption (fs, FIXABLE);
+	    
+	    fsck_log ("\n");
+	}
+    }
+
+    return 0;
+}
+
+static int fsck_tree_check_item (reiserfs_filsys_t * fs, 
+				 reiserfs_bh_t * bh, 
+				 int num)
+{
+    reiserfs_ih_t * ih;
+    int format;
+
+    ih = reiserfs_ih_at (bh, num);
+
+    if ((reiserfs_ih_get_flags(ih)) != 0) {
+	if (fsck_mode(fs) != FSCK_FIX_FIXABLE) {
+	    one_more_corruption (fs, FIXABLE);
+	    fsck_log ("%s: vpf-10570: block %lu: The item header (%d) has not "
+		      "cleaned flags.\n", __FUNCTION__, bh->b_blocknr, num);
+	} else {
+	    fsck_log ("%s: vpf-10580: block %lu: Flags in the item header "
+		      "(%d) were cleaned\n", __FUNCTION__, bh->b_blocknr, num);
+	    
+	    reiserfs_ih_clflags(ih);
+	    reiserfs_buffer_mkdirty(bh);
+	}
+    }
+
+    
+    if (reiserfs_ih_stat(ih) && 
+	reiserfs_ih_get_len(ih) == REISERFS_SD_SIZE) 
+    {
+	format = KEY_FORMAT_2;
+    } else if (reiserfs_ih_stat(ih) && 
+	       reiserfs_ih_get_len(ih) == REISERFS_SD_SIZE_V1)
+    {
+	format = KEY_FORMAT_1;
+    } else {
+	format = reiserfs_key_format(&ih->ih_key);
+    }
+    
+    if (format != reiserfs_ih_get_format(ih)) {
+	if (fsck_mode(fs) != FSCK_FIX_FIXABLE) {
+	    one_more_corruption (fs, FIXABLE);
+	    fsck_log ("%s: vpf-10710: block %lu: The format (%d) specified "
+		      "in the item header (%d) differs from the key format "
+		      "(%d).\n", __FUNCTION__, bh->b_blocknr, 
+		      reiserfs_ih_get_format(ih), num, format);
+	} else {
+	    fsck_log ("%s: vpf-10720: block %lu: The format (%d) specified "
+		      "in the item header (%d) was fixed to the key format "
+		      "(%d).\n", __FUNCTION__, bh->b_blocknr, 
+		      reiserfs_ih_get_format(ih), num, format);
+	    
+	    reiserfs_ih_set_format(ih, format);
+	    reiserfs_buffer_mkdirty(bh);
+	}
+    }
+
+    if (reiserfs_key_get_oid (&ih->ih_key) == REISERFS_BAD_OID) {
+	if (reiserfs_key_get_did (&ih->ih_key) == REISERFS_BAD_DID && 
+	    reiserfs_ih_ext (ih)) 
+	{
+		/* Bad Block support. */
+		return fsck_tree_check_badblock (fs, bh, ih);
+	}
+
+	goto error;
+    } else {
+	if (reiserfs_key_get_did (&ih->ih_key) == (__u32)-1) {
+	    /*  Safe Link support. Allowable safe links are:
+		-1 object_id           0x1	EXTENT (truncate) or
+		-1 object_id   blocksize+1	DIRECT   (unlink) */
+	    if (reiserfs_ih_direct(ih) && 
+		reiserfs_key_get_off(&ih->ih_key) == fs->fs_blocksize + 1) 
+	    {
+		if (reiserfs_ih_get_len (ih) == 4) {
+		/*  fsck_log("vpf-00010: safe link found %k\n", &ih->ih_key);*/
+		    fsck_check_stat(fs)->safe ++;
+		    return 0;
+		}
+	    }
+
+	    if (reiserfs_ih_ext(ih) && 
+		reiserfs_key_get_off(&ih->ih_key) == 0x1) 
+	    {
+		if (reiserfs_ih_get_len (ih) == 4) {
+		/*  fsck_log("vpf-00020: safe link found %k\n", &ih->ih_key);*/
+		    fsck_check_stat(fs)->safe ++;
+		    return 0;
+		}
+	    }
+	
+	    /* it does not look like safe link */
+	    goto error;
+	}
+    }
+    
+    if (reiserfs_ih_stat (ih))
+	return fsck_tree_check_stat (fs, bh, ih);
+
+    if (reiserfs_ih_direct (ih))
+	return 0;
+
+    if (reiserfs_ih_ext(ih))
+	return fsck_tree_check_ext (fs, bh, ih);
+    
+    return fsck_tree_check_dir (fs, bh, ih);
+ 
+ error:
+    one_more_corruption (fs, FATAL);
+    fsck_log ("%s: vpf-10310: block %lu, item %d: The item has a wrong "
+	      "key %k\n", __FUNCTION__, num, bh->b_blocknr, &ih->ih_key);
+    return 1;
+}
+
+/* 1 if block head or any of items is bad */
+static int fsck_tree_leaf_check (reiserfs_filsys_t * fs, reiserfs_bh_t * bh) {
+    int i;
+
+    if (fsck_leaf_check_header(fs, bh))
+	return 1;
+    
+    for (i = 0; i < reiserfs_node_items (bh); i ++) {
+	if (fsck_tree_check_item (fs, bh, i)) {
+	    fsck_log ("%s: block %lu, item %d: The corrupted item found (%H)\n",
+		      __FUNCTION__, bh->b_blocknr, i, reiserfs_ih_at (bh, i));
+	}
+
+	if (i && fsck_leaf_check_neigh (fs, bh, i)) {
+	    fsck_log ("%s: block %lu, items %d and %d: The wrong order of "
+		      "items: %k, %k\n", __FUNCTION__, bh->b_blocknr, i - 1, i,
+		      &reiserfs_ih_at (bh, i - 1)->ih_key,
+		      &reiserfs_ih_at (bh, i)->ih_key);
+	}
+    }
+    return 0;
+}
+
+/* 1 if bh does not look like internal node */
+static int fsck_tree_check_internal (reiserfs_filsys_t * fs, 
+				     reiserfs_bh_t * bh) 
+{
+    int i;
+
+    for (i = 0; i <= reiserfs_node_items (bh); i ++) {
+        if (i != reiserfs_node_items (bh) && i != 
+	    reiserfs_node_items (bh) - 1)
+	{
+	    /* make sure that keys are in increasing order */
+            if (reiserfs_key_comp (reiserfs_int_key_at (bh, i), 
+				   reiserfs_int_key_at (bh, i + 1)) != -1) 
+	    {
+		fsck_log ("%s: vpf-10320: block %lu, items %d and %d: The "
+			  "wrong order of items: %k, %k\n", __FUNCTION__, 
+			  bh->b_blocknr, i, i + 1, reiserfs_int_key_at (bh, i),
+			  reiserfs_int_key_at (bh, i + 1));
+		
+		one_more_corruption (fs, FATAL);
+                return 1;
+	    }
+	}
+	
+	/* make sure that the child is correct */
+        if (fsck_tree_check_blknr(fs, reiserfs_dc_get_nr (reiserfs_int_at (bh,i))))
+	{
+	    fsck_log ("%s: vpf-10330: block %lu, item %d: The internal "
+		      "item points to the not legal block (%lu)\n", 
+		      __FUNCTION__, bh->b_blocknr, i, 
+		      reiserfs_dc_get_nr (reiserfs_int_at (bh,i)));
+	    
+            one_more_corruption (fs, FATAL);
+            return 1;
+	}
+    }
+    
+    return 0;
+}
+
+/* h == 0 for root level. block head's level == 1 for leaf level  */
+static inline int h_to_level (reiserfs_filsys_t * fs, int h) {
+    return reiserfs_sb_get_height (fs->fs_ondisk_sb) - h + 1;
+}
+
+/* bh must be formatted node. blk_level must be tree_height - path.path_length */
+static int fsck_tree_check_node (reiserfs_filsys_t * fs, 
+				 reiserfs_path_t * path)
+{
+    reiserfs_bh_t *pbh = REISERFS_PATH_LEAF(path);
+
+    if (reiserfs_node_level(pbh) != h_to_level (fs, path->path_length)) {
+       	fsck_log ("block %lu: The level of the node (%d) is not "
+		  "correct, (%d) expected\n", pbh->b_blocknr, 
+		  reiserfs_node_level(pbh), h_to_level(fs, path->path_length));
+	
+	one_more_corruption (fs, FATAL);
+        return 1;
+    }
+
+    if (fsck_tree_check_blknr(fs, pbh->b_blocknr)) {
+	one_more_corruption (fs, FATAL);
+	fsck_log ("%s: vpf-10340: The node in the wrong block number (%lu) "
+		  "found in the tree\n",  __FUNCTION__, pbh->b_blocknr);
+	return 1;
+    }
+
+    if (fsck_tree_check_mark_block (pbh->b_blocknr)) {
+	fsck_log ("%s: vpf-10350: The block (%lu) is used more than once "
+		  "in the tree.\n",  __FUNCTION__, pbh->b_blocknr);
+	one_more_corruption (fs, FATAL);
+        return 1;
+    }
+    
+    if (reiserfs_leaf_head(pbh)) {
+	fsck_check_stat (fs)->leaves ++;
+	return fsck_tree_leaf_check (fs, pbh);
+    }
+    
+    fsck_check_stat (fs)->internals ++;
+    return fsck_tree_check_internal (fs, pbh);
+}
+
+/* are all delimiting keys correct */
+static int fsck_tree_check_path (reiserfs_filsys_t * fs, 
+				 reiserfs_path_t * path)
+{
+    const reiserfs_key_t *dk;
+    reiserfs_bh_t *parent;
+    reiserfs_bh_t *bh;
+    int items;
+    int pos;
+    int h1;
+
+    h1 = REISERFS_PATH_OFFILL;
+    while (path->path_elements[h1 + 1].pe_buffer)
+	h1 ++;
+
+    // path[h] is leaf
+    if (h1 != path->path_length)
+	misc_die ("%s: The leaf is expected as the last "
+		  "element in the path.", __FUNCTION__);
+
+    bh = REISERFS_PATH_LEAF(path);
+    if (h1 != REISERFS_PATH_OFFINIT) {
+	parent = REISERFS_PATH_BUFFER(path, h1 - 1);
+	pos = reiserfs_internal_get_pos (parent, bh->b_blocknr);
+    } else {
+	parent = NULL;
+	pos = 0;
+    }
+
+    dk = reiserfs_tree_lkey (path, fs);
+    if (dk != &MIN_KEY && 
+	reiserfs_key_comp (dk, reiserfs_ih_key_at (bh, 0))) 
+    {
+	/* left delimiting key must be equal to the key of 0-th item in the
+	   node */
+	fsck_log ("%s: The left delimiting key %k of the node (%lu) must "
+		  "be equal to the first element's key %k within the node.\n",
+		  __FUNCTION__, dk, bh->b_blocknr, reiserfs_ih_key_at(bh, 0));
+	
+	one_more_corruption (fs, FATAL);
+	return 1;
+    }
+    
+    items = reiserfs_nh_get_items( NODE_HEAD(bh) ) - 1;
+    dk = reiserfs_tree_rkey (path, fs);
+    if (dk != &MAX_KEY && 
+	reiserfs_key_comp (dk, reiserfs_ih_key_at (bh, items)) != 1) 
+    {
+	/* right delimiting key must be greather then the key of the last 
+	   item in the node */
+	fsck_log ("%s: The right delimiting key %k of the node (%lu) must "
+		  "be greater than the last (%d) element's key %k within "
+		  "the node.\n", __FUNCTION__, dk, bh->b_blocknr,
+		  reiserfs_nh_get_items (NODE_HEAD (bh)) - 1, 
+		  reiserfs_ih_key_at (bh, items));
+	
+	one_more_corruption (fs, FATAL);
+	return 1;
+    }
+
+    if ((h1 != REISERFS_PATH_OFFINIT) && 
+	(reiserfs_dc_get_size(reiserfs_int_at(parent, pos)) +
+	 reiserfs_nh_get_free(NODE_HEAD(bh)) + 
+	 REISERFS_NODEH_SIZE != bh->b_size))
+    {
+	/* wrong dc_size */
+	fsck_log ("bad_path: block %lu, pointer %d: The used space (%d) "
+		  "of the child block (%lu)", parent->b_blocknr, pos, 
+		  reiserfs_dc_get_size(reiserfs_int_at(parent, pos)), 
+		  bh->b_blocknr);
+	
+	fsck_log (" is not equal to the (blocksize (4096) - free space (%d) - "
+		  "header size (%u))", reiserfs_nh_get_free(NODE_HEAD(bh)), 
+		  REISERFS_NODEH_SIZE);
+	
+	if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
+	    reiserfs_dc_set_size (
+		    reiserfs_int_at(parent, pos), bh->b_size -
+		    reiserfs_nh_get_free(NODE_HEAD(bh)) - REISERFS_NODEH_SIZE);
+	    
+	    fsck_log (" - corrected to (%lu)\n", 
+		      reiserfs_dc_get_size (reiserfs_int_at(parent, pos)));
+	    
+	    reiserfs_buffer_mkdirty (parent);
+	} else {
+	    one_more_corruption (fs, FIXABLE);
+	    fsck_log ("\n");
+	    return 1;
+	}
+    }
+
+    return 0;
+}
+
+static void fsck_tree_check_prep (reiserfs_filsys_t * fs) {
+    fsck_tree_check_bitmap_prep (fs);
+
+    source_bitmap = 
+	    reiserfs_bitmap_create (reiserfs_sb_get_blocks (fs->fs_ondisk_sb));
+    
+    reiserfs_bitmap_copy (source_bitmap, fs->fs_bitmap2);
+
+    proper_id_map (fs) = id_map_init();
+}
+
+static void fsck_tree_check_fini (reiserfs_filsys_t * fs) {
+    if (fsck_mode(fs) == FSCK_FIX_FIXABLE) {
+        reiserfs_bitmap_flush(fs->fs_bitmap2, fs);
+        reiserfs_fs_flush (fs);
+        fs->fs_dirt = 1;
+	reiserfs_bitmap_delta (source_bitmap, control_bitmap);
+	fsck_deallocate_bitmap(fs) = source_bitmap;
+    } else 
+	reiserfs_bitmap_delete (source_bitmap);
+    
+    reiserfs_bitmap_delete (control_bitmap);
+    reiserfs_buffer_flush_all (fs->fs_dev);
+}
+
+/* pass internal tree of filesystem */
+void check_fs_tree (reiserfs_filsys_t * fs)
+{
+    fsck_tree_check_prep (fs);
+    
+    fsck_progress ("Checking Internal tree...\n");
+
+    fsck_tree_trav (fs, fsck_tree_check_node, 
+		    fsck_tree_check_path, 
+		    fsck_mode(fs) == FSCK_AUTO ? 2 : -1);
+ 
+    if (!fsck_quiet(fs))
+	fsck_progress("\n");
+    
+    /* compare created bitmap with the original */
+    if (fsck_mode(fs) == FSCK_AUTO) {
+	if (fsck_tree_check_bitmap_auto(fs)) {
+	    fprintf(stderr, "The on-disk bitmap looks corrupted.");
+	    one_more_corruption(fs, FIXABLE);
+	}
+	id_map_free(proper_id_map(fs));
+    } else
+	fsck_tree_check_bitmap_fini(fs);
+    
+    fsck_tree_check_fini (fs);
+}
+
+static int clean_attributes_handler (reiserfs_filsys_t * fs, 
+				     reiserfs_path_t * path) 
+{
+    reiserfs_bh_t * bh = REISERFS_PATH_LEAF(path);
+    int i;
+
+    if (reiserfs_node_level (bh) != h_to_level (fs, path->path_length)) {
+       	reiserfs_panic ("The node (%lu) with wrong level (%d) "
+			"found in the tree, (%d) expected\n", 
+			bh->b_blocknr, reiserfs_node_level (bh), 
+			h_to_level (fs, path->path_length));
+    }
+
+    if (!reiserfs_leaf_head (bh))
+        return 0;
+
+    for (i = 0; i < reiserfs_node_items (bh); i ++) {
+        if (reiserfs_ih_stat (reiserfs_ih_at (bh, i)) &&
+            reiserfs_ih_get_len (reiserfs_ih_at (bh, i)) == 
+	    REISERFS_SD_SIZE) 
+	{
+	    reiserfs_set_sd_v2_attrs
+		    ((reiserfs_sd_t *)reiserfs_item_at(bh, i), 0);
+	    reiserfs_buffer_mkdirty (bh);
+	}
+    }
+
+    return 0;
+}
+
+void fsck_tree_clean_attr (reiserfs_filsys_t * fs) {
+    fsck_tree_trav (fs, clean_attributes_handler, NULL, -1);
+    reiserfs_sb_mkflag (fs->fs_ondisk_sb, reiserfs_attrs_cleared);
+    reiserfs_buffer_mkdirty (fs->fs_super_bh);
+}
diff --git a/utils/fsck/fsck.h b/utils/fsck/fsck.h
new file mode 100644
index 0000000..bf11437
--- /dev/null
+++ b/utils/fsck/fsck.h
@@ -0,0 +1,560 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#include "reiserfs/libreiserfs.h"
+#include <stdio.h>
+
+#if 0
+
+#include "io.h"
+#include "misc.h"
+#include "reiserfs_lib.h"
+
+#include <string.h>
+#include <errno.h>
+#include <time.h>
+#include <assert.h>
+
+#include "../version.h"
+#endif
+
+/* main.c */
+extern reiserfs_filsys_t * fs;
+
+/* Exit codes. */
+#define EXIT_OK		0
+#define EXIT_FIXED	1
+#define EXIT_REBOOT	2
+#define EXIT_FATAL	4
+#define EXIT_FIXABLE	6
+#define EXIT_OPER	8   /* Some operation returns error. */
+#define EXIT_USER	16
+
+/*
+ * modes
+ */
+#define DO_NOTHING              0
+#define FSCK_CHECK              1
+#define FSCK_FIX_FIXABLE        2
+#define FSCK_SB                 3
+#define FSCK_REBUILD            4
+#define FSCK_ROLLBACK_CHANGES   5
+#define FSCK_CLEAN_ATTRIBUTES	7
+#define FSCK_AUTO               8 /* -a || -p specified */
+
+/* temporary */
+#define DO_TEST                 9
+
+/*
+ * options
+ */
+
+#define OPT_INTERACTIVE                 1 << 0
+#define OPT_ADJUST_FILE_SIZE            1 << 1	/* not default yet */
+#define OPT_QUIET                       1 << 2	/* no "speed" info */
+#define OPT_SILENT                      1 << 3	/* no complains about found corruptions */
+#define OPT_BACKGROUND                  1 << 4
+#define OPT_SKIP_JOURNAL                1 << 5
+#define OPT_HASH_DEFINED                1 << 6
+#define OPT_SAVE_PASSES_DUMP            1 << 7
+#define OPT_SAVE_ROLLBACK               1 << 8
+#define OPT_YES				1 << 9
+#define BADBLOCKS_FILE               	1 << 10
+
+/* set by fsck when pass-by-pass (-d), FS_FATAL flag included */
+enum fsck_state_flags {
+	PASS_0_DONE     = 0xfa02,
+	PASS_1_DONE     = 0xfb02,
+	TREE_IS_BUILT   = 0xfc02,
+	SEMANTIC_DONE   = 0xfd02,
+	LOST_FOUND_DONE = 0xfe02
+
+};
+
+/* Stage.c */
+
+extern void fsck_stage_start_put (FILE * file, unsigned long stage);
+extern void fsck_stage_end_put (FILE * file);
+extern int fsck_stage_magic_check (FILE * fp);
+
+/* pass0.c */
+extern int pass0_block_isbad_unfm(unsigned long block);
+extern int pass0_block_isgood_unfm(unsigned long block);
+extern int pass0_block_isleaf(unsigned long block);
+extern void pass0_block_clleaf(unsigned long block);
+extern void fsck_pass0 (reiserfs_filsys_t *);
+extern void fsck_pass0_load_result (FILE *, reiserfs_filsys_t *);
+extern void make_allocable (unsigned long block);
+extern int fsck_leaf_check(reiserfs_bh_t * bh);
+extern unsigned long alloc_block (void);
+extern void fsck_pass0_aux_fini ();
+extern int fsck_leaf_item_check (reiserfs_bh_t * bh, reiserfs_ih_t *, char *);
+extern int are_there_allocable_blocks (unsigned int amout_needed);
+extern int fsck_leaf_check_header(reiserfs_filsys_t * fs, reiserfs_bh_t * bh);
+
+/* pass1.c */
+#define fsck_item_reach(ih)	(reiserfs_ih_isreach (ih) ? 1 : 0)
+#define fsck_item_mkunreach(ih)			\
+({						\
+	reiserfs_ih_clflags (ih);		\
+	reiserfs_ih_mkunreach (ih);		\
+						\
+	if (reiserfs_ih_ext (ih))		\
+		reiserfs_ih_set_free (ih, 0);	\
+})
+
+#define fsck_item_mkreach(ih, bh)		\
+({						\
+	reiserfs_ih_clunreach (ih);		\
+	reiserfs_buffer_mkdirty (bh);		\
+})
+
+extern void fsck_pass1 (reiserfs_filsys_t *);
+extern void fsck_pass1_load_result (FILE *, reiserfs_filsys_t *);
+extern void fsck_pass2 (reiserfs_filsys_t *);
+extern void fsck_info_checkmem(void);
+
+/* pass2.c */
+typedef struct saveitem saveitem_t;
+struct saveitem {
+    reiserfs_ih_t si_ih;
+    char * si_dnm_data;
+    saveitem_t * si_next;
+    __u32 si_blocknr;
+
+    // changed by XB;
+    saveitem_t * last_known;
+};
+
+extern void fsck_pass2_load_result (reiserfs_filsys_t *);
+
+extern void fsck_item_save(reiserfs_path_t * path, 
+			   saveitem_t ** head);
+
+extern saveitem_t * fsck_item_free(saveitem_t * si);
+
+extern void fsck_tree_insert_item (reiserfs_ih_t * ih, 
+				   char * item, int was_in_tree);
+
+extern void fsck_tree_merge(reiserfs_path_t *path);
+extern long long int must_there_be_a_hole (const reiserfs_ih_t *ih, 
+					   const reiserfs_key_t *key);
+
+extern int fsck_tree_insert_zero_ptr (reiserfs_filsys_t *fs,
+				      reiserfs_key_t *key,
+				      long long int p_count,
+				      __u16 flags);
+
+extern void fsck_tree_rewrite(reiserfs_filsys_t *fs, 
+			      const reiserfs_key_t *start_key,
+			      __u64 end, __u16 flags);
+
+typedef int (*tree_modify_t) (reiserfs_path_t *path, void *data);
+
+/* relocate.c */
+extern void fsck_relocate_mklinked(reiserfs_key_t *new_key);
+extern __u32 fsck_relocate_get_oid (reiserfs_key_t * key);
+extern __u32 fsck_relocate_oid(reiserfs_key_t * key);
+extern void fsck_relocate_link_all (void);
+extern __u32 fsck_relocate_check (reiserfs_ih_t * ih, int isdir);
+
+/* semantic.c */
+
+/* return values for check_regular_file and check_semantic_tree */
+#define OK 0
+#define STAT_DATA_NOT_FOUND -1
+#define DIRECTORY_HAS_NO_ITEMS -2
+#define RELOCATED -3
+#define LOOP_FOUND -4
+
+extern void fsck_semantic (reiserfs_filsys_t *);
+extern void fsck_semantic_load_result (FILE *, reiserfs_filsys_t *);
+extern void fsck_semantic_check (void);
+extern int is_dot_dot (char * name, int namelen);
+extern int is_dot (char * name, int namelen);
+extern int not_a_directory (void * sd);
+extern int not_a_regfile (void * sd);
+extern void zero_nlink (reiserfs_ih_t * ih, void * sd);
+extern int fix_obviously_wrong_sd_mode (reiserfs_path_t * path);
+extern int wrong_st_blocks(const reiserfs_key_t * key, 
+			   __u32 * blocks, 
+			   __u32 sd_blocks, 
+			   __u16 mode, 
+			   int new_format);
+extern int wrong_st_size (const reiserfs_key_t * key, 
+			  unsigned long long max_file_size, 
+			  int blocksize,
+			  __u64 * size, 
+			  __u64 sd_size, 
+			  int type);
+
+extern int rebuild_semantic_pass (reiserfs_key_t * key, 
+				  const reiserfs_key_t * parent, 
+				  int is_dot_dot,
+				  reiserfs_ih_t * new_ih);
+
+extern void relocate_dir (reiserfs_ih_t * ih);
+
+extern int rebuild_check_regular_file (reiserfs_path_t * path, 
+				       void * sd,
+				       reiserfs_ih_t * new_ih);
+
+/* lost+found.c */
+extern void fsck_lost (reiserfs_filsys_t *);
+extern void fsck_lost_load_result (reiserfs_filsys_t *);
+
+/* objectid.c */
+typedef struct id_map {
+    void **index;
+    __u32 count, last_used;
+} id_map_t;
+
+extern void id_map_flush(struct id_map * map, reiserfs_filsys_t * fs);
+extern void id_map_free(id_map_t *);
+extern int id_map_mark(id_map_t *map, __u32 id);
+extern id_map_t *id_map_init();
+extern __u32 id_map_alloc(id_map_t *map);
+extern int id_map_test(id_map_t *map, __u32 id);
+extern void fetch_objectid_map (struct id_map * map, 
+				reiserfs_filsys_t * fs);
+extern void reiserfs_objectid_map_save (FILE * fp, struct id_map * id_map);
+extern struct id_map * reiserfs_objectid_map_load (FILE * fp);
+
+/*  rollback.c */
+extern void fsck_rollback_fini ();
+
+extern void fsck_rollback_init (char * rollback_file, 
+				unsigned int *bloksize, FILE * log);
+
+extern int fsck_rollback_prep (char * rollback_file, FILE * log);
+
+extern void fsck_rollback (int fd_device, 
+			   int fd_journal_device, 
+			   FILE * log); 
+
+/* pass4.c */
+extern void fsck_cleanup (void);
+
+/* check_tree.c */
+extern void check_fs_tree (reiserfs_filsys_t *);
+extern void fsck_tree_clean_attr (reiserfs_filsys_t * fs);
+
+extern int fsck_leaf_check_neigh (reiserfs_filsys_t *fs, 
+				  reiserfs_bh_t * bh, 
+				  int i);
+
+extern int fsck_tree_delete(reiserfs_key_t * start_key, 
+			    saveitem_t ** save_here, 
+			    int skip_dir_items, 
+			    tree_modify_t func,
+			    void *data);
+
+
+/* ubitmap.c */
+extern int is_block_used (unsigned long block);
+extern void mark_block_used (unsigned long block, int check_hardware);
+extern void fsck_bitmap_mkuninsert (unsigned long block);
+extern int fsck_bitmap_isuninsert (unsigned long block);
+extern void fsck_bitmap_cluninsert (unsigned long block);
+extern int reiserfsck_new_blocknrs (reiserfs_filsys_t * fs,
+				    unsigned long * pblocknrs,
+				    unsigned long start_from,
+				    int amount_needed);
+
+extern int reiserfsck_free_block (reiserfs_filsys_t * fs, 
+				  unsigned long block);
+
+extern reiserfs_bh_t * reiserfsck_get_new_buffer (unsigned long start);
+
+/* ufile.c */
+#define FSCK_MAX_GAP(bs) \
+	(100 * REISERFS_ITEM_MAX(bs) / REISERFS_EXT_SIZE * bs)
+
+extern void fsck_file_relocate (reiserfs_key_t *key, 
+				int update_key);
+
+extern int reiserfsck_file_write (reiserfs_ih_t * ih, 
+				  char * item, 
+				  int was_in_tree);
+
+extern int are_file_items_correct (reiserfs_ih_t * sd_ih, 
+				   void * sd, 
+				   __u64 * size, 
+				   __u32 * blocks, 
+				   int mark_passed_items, 
+				   int * symlink);
+
+/* ustree.c*/
+typedef int (*path_func_t) (reiserfs_filsys_t *, 
+			    reiserfs_path_t *);
+
+extern void fsck_tree_trav (reiserfs_filsys_t *, 
+			    path_func_t, 
+			    path_func_t,
+			    int depth);
+enum fsck_stage {
+    FS_CHECK	= 0x0,
+    FS_PASS0	= 0x1,
+    FS_PASS1	= 0x2,
+    FS_PASS2	= 0x3,
+    FS_SEMANTIC = 0x4,
+    FS_LOST	= 0x5,
+    FS_CLEANUP  = 0x6,
+    FS_LAST
+};
+
+struct pass0_stat {
+    unsigned long dealt_with; /* number of blocks read during pass 0 */
+    unsigned long leaves; /* blocks looking like reiserfs leaves found */
+    unsigned long leaves_corrected;
+    unsigned long all_contents_removed;
+    unsigned long too_old_leaves; /* these are leaves which contains
+                                     direntries with different hash from the
+                                     one specified with -h */
+    unsigned long wrong_pointers; /* pointers in extent items pointing to
+                                     wrong area */
+    unsigned long pointed; /* pointers blocks of device pointed by all
+                              extent items */
+    
+    /* number of removed items. */
+    unsigned long long removed;
+};
+
+
+struct pass1_stat {
+    unsigned long leaves; /* leaves found in pass0 to build tree off */
+    unsigned long inserted_leaves; /* number of leaves inserted by pointers */
+    unsigned long pointed_leaves; /* pointers in extent items which pointed
+				     to leaves (zeroed) */
+    unsigned long uninsertable_leaves;
+    unsigned long non_unique_pointers; /* pointers to already pointed unformatted nodes */
+    unsigned long correct_pointers;
+    unsigned long allocable_blocks; /* allocable blocks before pass 1 starts */
+};
+
+
+struct pass2_stat {
+    unsigned long leaves; /* leaves inserted item by item */
+    unsigned long safe_non_unique_pointers; /* these are just the same pointers */
+    unsigned long relocated;
+    unsigned long shared_objectids;
+    unsigned long rewritten;
+};
+
+
+struct semantic_stat {
+    unsigned long regular_files;
+    unsigned long directories;
+    unsigned long symlinks;
+    unsigned long broken_files;
+    unsigned long others;
+    unsigned long fixed_sizes;
+    unsigned long oid_sharing;
+    unsigned long oid_sharing_dirs_relocated;
+    unsigned long oid_sharing_files_relocated;
+    unsigned long deleted_entries;
+    unsigned long added_sd;
+    unsigned long empty_lost_dirs;
+    unsigned long lost_found;
+    unsigned long lost_found_files;
+    unsigned long lost_found_dirs;
+};
+
+struct pass_4_stat {
+    unsigned long deleted_items;
+};
+
+
+struct rebuild_info {
+    struct {
+	struct pass0_stat pass0;
+	struct pass1_stat pass1;
+	struct pass2_stat pass2;
+	struct semantic_stat semantic;
+	struct pass_4_stat pass4;
+    } pass_u;
+
+    /* bitmaps */
+    reiserfs_bitmap_t * source_bitmap;
+    reiserfs_bitmap_t * new_bitmap;
+    reiserfs_bitmap_t * allocable_bitmap;
+    reiserfs_bitmap_t * uninsertables;
+
+    char * bitmap_file_name;
+    /*char * new_bitmap_file_name;*/
+    char * passes_dump_file_name; /* after pass 0, 1 or 2 reiserfsck can store
+                                     data with which it will be able to start
+                                     from the point it stopped last time at */
+
+    unsigned short mode;
+    unsigned long options;
+
+    /* rollback file */
+    char * rollback_file;
+  
+    /* hash hits stat */
+    int hash_amount;
+    unsigned long * hash_hits;
+    char * defined_hash;
+
+#define USED_BLOCKS 1
+#define EXTERN_BITMAP 2
+#define ALL_BLOCKS 3
+    int scan_area;
+    int use_journal_area;
+    int test;
+};
+
+
+struct check_info {
+    unsigned long bad_nodes;
+    unsigned long fatal_corruptions;
+    unsigned long fixable_corruptions;
+//    unsigned long badblocks_corruptions;
+    unsigned long leaves;
+    unsigned long internals;
+    unsigned long dirs;
+    unsigned long files;
+    unsigned long safe;
+    unsigned long unfm_pointers;
+    unsigned long zero_unfm_pointers;
+    reiserfs_bitmap_t * deallocate_bitmap;
+};
+
+
+struct fsck_data {
+    unsigned short mode; /* check, rebuild, etc*/
+    unsigned long options;
+    unsigned long mounted;
+
+    struct rebuild_info rebuild;
+    struct check_info check;
+
+    char * journal_dev_name; 
+    /* log file name and handle */
+    char * log_file_name;
+    FILE * log;
+
+    /* this is a file where reiserfsck will explain what it is doing. This is
+       usually stderr. But when -g is specified - reiserfsck runs in the
+       background and append progress information into 'fsck.run' */
+    FILE * progress;
+
+    /* objectid maps */
+    id_map_t * proper_id_map;
+    id_map_t * semantic_id_map; /* this objectid map is used to
+				   cure objectid sharing problem */
+};
+
+
+#define fsck_data(fs) ((struct fsck_data *)((fs)->fs_vp))
+#define pass_0_stat(fs) (&(fsck_data(fs)->rebuild.pass_u.pass0))
+#define pass_1_stat(fs) (&(fsck_data(fs)->rebuild.pass_u.pass1))
+#define pass_2_stat(fs) (&(fsck_data(fs)->rebuild.pass_u.pass2))
+#define sem_pass_stat(fs) (&(fsck_data(fs)->rebuild.pass_u.semantic))
+#define pass_4_stat(fs) (&(fsck_data(fs)->rebuild.pass_u.pass4))
+
+#define fsck_check_stat(fs) (&(fsck_data(fs)->check))
+
+
+#define proper_id_map(s) fsck_data(s)->proper_id_map
+#define semantic_id_map(s) fsck_data(s)->semantic_id_map
+
+#define fsck_source_bitmap(fs) fsck_data(fs)->rebuild.source_bitmap
+#define fsck_new_bitmap(fs) fsck_data(fs)->rebuild.new_bitmap
+#define fsck_allocable_bitmap(fs) fsck_data(fs)->rebuild.allocable_bitmap
+#define fsck_uninsertables(fs) fsck_data(fs)->rebuild.uninsertables
+
+#define fsck_deallocate_bitmap(fs) fsck_data(fs)->check.deallocate_bitmap
+
+#define fsck_interactive(fs) (fsck_data(fs)->options & OPT_INTERACTIVE)
+//#define fsck_fix_fixable(fs) (fsck_data(fs)->options & OPT_FIX_FIXABLE)
+
+#define fsck_run_one_step(fs) (fsck_data(fs)->options & OPT_SAVE_PASSES_DUMP)
+
+#define fsck_save_rollback(fs) (fsck_data(fs)->options & OPT_SAVE_ROLLBACK)
+
+/* change unknown modes (corrupted) to mode of regular files, fix file
+   sizes which are bigger than a real file size, relocate files with
+   shared objectids (this slows fsck down (when there are too many
+   files sharing the same objectid), it will also remove other names
+   pointing to this file */
+#define fsck_adjust_file_size(fs) (fsck_data(fs)->options & OPT_ADJUST_FILE_SIZE)
+#define fsck_quiet(fs)	(fsck_data(fs)->options & OPT_QUIET)
+#define fsck_silent(fs)	(fsck_data(fs)->options & OPT_SILENT)
+#define fsck_in_background(fs) (fsck_data(fs)->options & OPT_BACKGROUND)
+#define fsck_hash_defined(fs) (fsck_data(fs)->options & OPT_HASH_DEFINED)
+#define fsck_skip_journal(fs) (fsck_data(fs)->options & OPT_SKIP_JOURNAL)
+#define fsck_yes_all(fs) (fsck_data(fs)->options & OPT_YES)
+
+
+#define fsck_mode(fs) (fsck_data(fs)->mode)
+#define fsck_log_file(fs) (fsck_data(fs)->log)
+#define fsck_progress_file(fs) ((fs && fsck_data(fs)->progress) ? fsck_data(fs)->progress : stderr)
+
+/* name of file where we store information for continuing */
+#define state_dump_file(fs) fsck_data(fs)->rebuild.passes_dump_file_name
+
+/* name of file where we store rollback data */
+#define state_rollback_file(fs) fsck_data(fs)->rebuild.rollback_file
+
+int fsck_info_ask (reiserfs_filsys_t * fs, 
+		   char * q, char * a, 
+		   int default_answer);
+
+void fsck_stage_report (int, reiserfs_filsys_t *);
+
+/*pass1: rebuild super block*/
+void rebuild_sb (reiserfs_filsys_t * fs, char * filename, struct fsck_data * data);
+
+
+/* special type for symlink not conflicting to any of item types. */
+#define TYPE_SYMLINK	4
+
+
+#define fsck_log(fmt, list...) \
+{\
+if (!fsck_silent (fs))\
+    reiserfs_warning (fsck_log_file (fs), fmt, ## list);\
+}
+
+#define fsck_progress(fmt, list...) \
+{\
+reiserfs_warning (fsck_progress_file(fs), fmt, ## list);\
+fflush (fsck_progress_file(fs));\
+}
+
+#define FATAL	1
+#define FIXABLE 2
+
+enum entry_type {
+    ET_NAME		= 0x0,
+    ET_DOT		= 0x1,
+    ET_DOT_DOT		= 0x2,
+    ET_LOST_FOUND	= 0x3,
+    ET_LAST
+};
+
+#define fsck_exit(fmt, list...) \
+{\
+reiserfs_warning (fsck_progress_file(fs), fmt, ## list);\
+exit (EXIT_USER);\
+}
+
+#define one_more_corruption(fs,kind)			\
+({							\
+    if (kind == FATAL)					\
+	fsck_check_stat (fs)->fatal_corruptions++;	\
+    else if (kind == FIXABLE)				\
+	fsck_check_stat (fs)->fixable_corruptions++;	\
+})
+
+#define one_less_corruption(fs,kind)			\
+({							\
+    if (kind == FATAL)					\
+	fsck_check_stat (fs)->fatal_corruptions--;	\
+    else if (kind == FIXABLE)				\
+	fsck_check_stat (fs)->fixable_corruptions--;	\
+})
diff --git a/fsck/reiserfsck.8 b/utils/fsck/fsck.reiserfs.8
similarity index 73%
rename from fsck/reiserfsck.8
rename to utils/fsck/fsck.reiserfs.8
index 43d4669..af866b4 100644
--- a/fsck/reiserfsck.8
+++ b/utils/fsck/fsck.reiserfs.8
@@ -1,11 +1,11 @@
 .\" -*- nroff -*-
 .\" Copyright 1996-2004 Hans Reiser.
 .\" 
-.TH REISERFSCK 8 "February 2004" "Reiserfsprogs-3.6.19"
+.TH fsck.reiserfs 8 "February 2004" "Reiserfsprogs-3.6.19"
 .SH NAME
-reiserfsck \- The checking tool for the ReiserFS filesystem.
+fsck.reiserfs \- The checking tool for the ReiserFS filesystem.
 .SH SYNOPSIS
-.B reiserfsck 
+.B fsck.reiserfs 
 [ \fB-afprVy\fR ]
 [ \fB--rebuild-sb\fR | \fB--check\fR | \fB--fix-fixable\fR
 | \fB--rebuild-tree\fR | \fB--clean-attributes\fR ]
@@ -24,7 +24,7 @@
 [ \fB--no-journal-available\fR ]
 .I device
 .SH DESCRIPTION
-\fBReiserfsck\fR searches for a Reiserfs filesystem on a device, replays 
+\fBfsck.reiserfs\fR searches for a Reiserfs filesystem on a device, replays 
 any necessary transactions, and either checks or repairs the file system.
 .TP
 .I device
@@ -58,10 +58,10 @@
 .B --rebuild-tree
 This option rebuilds the entire filesystem tree using leaf nodes 
 found on the device.  Normally you only need this option if the 
-\fBreiserfsck --check\fR reports "Running with \fB--rebuild-tree\fR
+\fBfsck.reiserfs --check\fR reports "Running with \fB--rebuild-tree\fR
 is required". You are strongly encouraged to make a backup copy 
 of the whole partition before attempting the \fB--rebuild-tree\fR 
-option. Once \fBreiserfsck --rebuild-tree\fR is started it must
+option. Once \fBfsck.reiserfs --rebuild-tree\fR is started it must
 finish its work (and you should not interrupt it), otherwise the
 filesystem will be left in the unmountable state to avoid subsequent
 data corruptions.
@@ -81,10 +81,10 @@
 option \fB--no-journal-available\fR).
 .TP 
 .\" .B --interactive, -i
-.\" This makes \fBreiserfsck\fR to stop after each pass completed.
+.\" This makes \fBfsck.reiserfs\fR to stop after each pass completed.
 .\" .TP
 .B --adjust-size, -z
-This option causes \fBreiserfsck\fR to correct file sizes that
+This option causes \fBfsck.reiserfs\fR to correct file sizes that
 are larger than the offset of the last discovered byte.  This
 implies that holes at the end of a file will be removed.  File
 sizes that are smaller than the offset of the last discovered
@@ -94,33 +94,33 @@
 This option sets the badblock list to be the list of blocks specified in 
 the given `file`. The filesystem badblock list is cleared before the new 
 list is added. It can be used with \fB--fix-fixable\fR to fix the list of 
-badblocks (see \fBdebugreiserfs -B\fR). If the device has bad blocks, every
+badblocks (see \fBdebugfs.reiserfs -B\fR). If the device has bad blocks, every
 time it must be given with the \fB--rebuild-tree\fR option.
 .TP
 \fB--logfile \fIfile\fR, \fB-l \fI file\fR
-This option causes \fBreiserfsck\fR to report any corruption it finds 
+This option causes \fBfsck.reiserfs\fR to report any corruption it finds 
 to the specified log file rather than to stderr.
 .TP
 .B --nolog, -n
-This option prevents \fBreiserfsck\fR from reporting any kinds of corruption.
+This option prevents \fBfsck.reiserfs\fR from reporting any kinds of corruption.
 .TP
 .B --quiet, -q
-This option prevents \fBreiserfsck\fR from reporting its rate of progress.
+This option prevents \fBfsck.reiserfs\fR from reporting its rate of progress.
 .TP
 .B --yes, -y
-This option inhibits \fBreiserfsck\fR from asking you for confirmation after
+This option inhibits \fBfsck.reiserfs\fR from asking you for confirmation after
 telling you what it is going to do. It will assuem you confirm. For safety, 
 it does not work with the \fB--rebuild-tree\fR option.
 .TP
 \fB-a\fR, \fB-p\fR
 These options are usually passed by fsck -A during the automatic checking 
-of those partitions listed in /etc/fstab. These options cause \fBreiserfsck\fR 
+of those partitions listed in /etc/fstab. These options cause \fBfsck.reiserfs\fR 
 to print some information about the specified filesystem, to check if error 
 flags in the superblock are set and to do some light-weight checks. If these 
 checks reveal a corruption or the flag indicating a (possibly fixable) 
-corruption is found set in the superblock, then \fBreiserfsck\fR switches 
+corruption is found set in the superblock, then \fBfsck.reiserfs\fR switches 
 to the fix-fixable mode. If the flag indicating a fatal corruption is found 
-set in the superblock, then \fBreiserfsck\fR finishes with an error.
+set in the superblock, then \fBfsck.reiserfs\fR finishes with an error.
 .TP
 .B -V
 This option prints the reiserfsprogs version and then exit.
@@ -133,40 +133,40 @@
 OPTIONS.
 .TP
 .B \fB\--no-journal-available\fR
-This option allows \fBreiserfsck\fR to proceed when the journal device is 
+This option allows \fBfsck.reiserfs\fR to proceed when the journal device is 
 not available. This option has no effect when the journal is located on 
-the main data device. NOTE: after this operation you must use \fBreiserfstune\fR 
+the main data device. NOTE: after this operation you must use \fBtunefs.reiserfs\fR 
 to specify a new journal device.
 .TP
 .B --scan-whole-partition, -S
 This option causes \fB--rebuild-tree\fR to scan the whole partition but not only 
 the used space on the partition.
-.SH AN EXAMPLE OF USING reiserfsck
+.SH AN EXAMPLE OF USING fsck.reiserfs
 1. You think something may be wrong with a reiserfs partition on /dev/hda1 
 or you would just like to perform a periodic disk check.
 
-2. Run \fBreiserfsck --check --logfile check.log /dev/hda1\fR. If \fBreiserfsck 
+2. Run \fBfsck.reiserfs --check --logfile check.log /dev/hda1\fR. If \fBfsck.reiserfs 
 --check\fR exits with status 0 it means no errors were discovered. 
 
-3. If \fBreiserfsck --check\fR exits with status 1 (and reports about fixable 
-corruptions) it means that you should run \fBreiserfsck --fix-fixable --logfile 
+3. If \fBfsck.reiserfs --check\fR exits with status 1 (and reports about fixable 
+corruptions) it means that you should run \fBfsck.reiserfs --fix-fixable --logfile 
 fixable.log /dev/hda1\fR.
 
-4. If \fBreiserfsck --check\fR exits with status 2 (and reports about fatal 
-corruptions) it means that you need to run \fBreiserfsck --rebuild-tree\fR.  
-If \fBreiserfsck --check\fR fails in some way you should also run \fBreiserfsck 
+4. If \fBfsck.reiserfs --check\fR exits with status 2 (and reports about fatal 
+corruptions) it means that you need to run \fBfsck.reiserfs --rebuild-tree\fR.  
+If \fBfsck.reiserfs --check\fR fails in some way you should also run \fBfsck.reiserfs 
 --rebuild-tree\fR, but we also encourage you to submit this as a bug report.
 
-5. Before running \fBreiserfsck --rebuild-tree\fR, please make a backup of 
-the whole partition before proceeding. Then run \fBreiserfsck --rebuild-tree 
+5. Before running \fBfsck.reiserfs --rebuild-tree\fR, please make a backup of 
+the whole partition before proceeding. Then run \fBfsck.reiserfs --rebuild-tree 
 --logfile rebuild.log /dev/hda1\fR.
 
-6. If the \fBreiserfsck --rebuild-tree\fR step fails or does not recover what 
+6. If the \fBfsck.reiserfs --rebuild-tree\fR step fails or does not recover what 
 you expected, please submit this as a bug report. Try to provide as much 
 information as possible including your platform and Linux kernel version. We 
 will try to help solve the problem.
 .SH EXIT CODES
-\fBreiserfsck\fR uses the following exit codes:
+\fBfsck.reiserfs\fR uses the following exit codes:
 .br
 \   \fI0\fR \-\ No errors.
 .br
@@ -176,18 +176,18 @@
 .br
 \   \fI4\fR \-\ File system fatal errors left uncorrected,
 .br
-\	  \fBreiserfsck --rebuild-tree\fR needs to be launched.
+\	  \fBfsck.reiserfs --rebuild-tree\fR needs to be launched.
 .br
 \   \fI6\fR \-\ File system fixable errors left uncorrected,
 .br
-\	  \fBreiserfsck --fix-fixable\fR needs to be launched.
+\	  \fBfsck.reiserfs --fix-fixable\fR needs to be launched.
 .br
 \   \fI8\fR \-\ Operational error.
 .br
 \   \fI16\fR \-\ Usage or syntax error.
 .br
 .SH AUTHOR
-This version of \fBreiserfsck\fR has been written by Vitaly Fertman <vitaly@namesys.com>.
+This version of \fBfsck.reiserfs\fR has been written by Vitaly Fertman <vitaly@namesys.com>.
 .SH BUGS
 Please report bugs to the ReiserFS developers <reiserfs-dev@namesys.com>, providing 
 as much information as possible--your hardware, kernel, patches, settings, all printed 
@@ -195,7 +195,7 @@
 .SH TODO
 Faster recovering, signal handling.
 .SH SEE ALSO
-.BR mkreiserfs (8),
-.BR reiserfstune (8)
-.BR resize_reiserfs (8),
-.BR debugreiserfs (8),
+.BR mkfs.reiserfs (8),
+.BR tunefs.reiserfs (8)
+.BR resizefs.reiserfs (8),
+.BR debugfs.reiserfs (8),
diff --git a/utils/fsck/info.c b/utils/fsck/info.c
new file mode 100644
index 0000000..fb2307f
--- /dev/null
+++ b/utils/fsck/info.c
@@ -0,0 +1,176 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "fsck.h"
+#include "util/print.h"
+#include "assert.h"
+
+void fsck_info_checkmem (void) {
+    fprintf(stderr, 
+	"\nThe problem has occurred looks like a hardware problem (perhaps\n"
+        "memory). Send us the bug report only if the second run dies at\n"
+	"the same place with the same block number.\n");
+}
+
+int fsck_info_ask(reiserfs_filsys_t * fs, char * q, 
+		  char * a, int default_answer)
+{
+    if (!fsck_interactive (fs))
+	return default_answer;
+    
+    return util_user_confirmed (fsck_progress_file (fs), q, a);
+}
+
+void fsck_stage_report (int pass, reiserfs_filsys_t * fs) {
+    if (pass == FS_CHECK) {
+	fsck_progress ("There are on the filesystem:\n"
+		       "\tLeaves %lu\n\tInternal nodes %lu\n"
+		       "\tDirectories %lu\n\tOther files %lu\n"
+		       "\tData block pointers %lu (%lu of them are zero)\n"
+		       "\tSafe links %lu\n",
+		       fsck_check_stat (fs)->leaves,
+		       fsck_check_stat (fs)->internals,
+		       fsck_check_stat (fs)->dirs,
+		       fsck_check_stat (fs)->files,
+		       fsck_check_stat (fs)->unfm_pointers,
+		       fsck_check_stat (fs)->zero_unfm_pointers,
+		       fsck_check_stat (fs)->safe);
+	
+	return;
+    }	
+
+    {
+	if (pass == FS_PASS0)
+		fsck_progress("\tSelected hash: %s\n", 
+			      reiserfs_hash_name(reiserfs_hash_code(fs->hash)));
+	
+	/* what has been done on pass 0 */
+	if (pass_0_stat(fs)->dealt_with)
+		fsck_progress ("\tRead formatted blocks: %lu\n",
+			       pass_0_stat(fs)->dealt_with);
+	
+	if (pass_0_stat(fs)->leaves)
+		fsck_progress ("\tRead leaves (corrected/empty/wrong hash): "
+			       "%lu (%lu/%lu/%lu)\n", 
+			       pass_0_stat(fs)->leaves, 
+			       pass_0_stat(fs)->leaves_corrected,
+			       pass_0_stat(fs)->all_contents_removed,
+			       pass_0_stat(fs)->too_old_leaves);
+	
+	if (pass_0_stat(fs)->wrong_pointers)
+		fsck_progress ("\tWrong indirect pointers (zeroed): %lu\n",
+			       pass_0_stat(fs)->wrong_pointers);
+    }
+    
+    {
+	/* what has been done on pass 1 */
+	if (pass_1_stat(fs)->leaves)
+		fsck_progress ("\tRead leaves (not inserted): %lu (%lu)\n", 
+			       pass_1_stat(fs)->leaves,
+			       pass_1_stat(fs)->uninsertable_leaves);
+	
+	assert(pass_1_stat(fs)->leaves == pass_1_stat(fs)->inserted_leaves + 
+	       pass_1_stat(fs)->uninsertable_leaves);
+	
+	if (pass_1_stat(fs)->pointed_leaves || 
+	    pass_1_stat(fs)->non_unique_pointers)
+	{
+		fsck_progress ("\tDouble indirect pointers to leaves/to "
+			       "unformatted (zeroed): %lu/%lu\n",
+			       pass_1_stat(fs)->pointed_leaves,
+			       pass_1_stat(fs)->non_unique_pointers);
+	}
+    }
+    
+    {
+	/* what has been done on pass 2 */
+	
+	if (pass_2_stat(fs)->leaves)
+		fsck_progress ("\tLeaves inserted item by item: %lu\n", 
+			       pass_2_stat(fs)->leaves);
+	
+	/* FIXME: oid_sharing is the same */
+	if (pass_2_stat(fs)->relocated && pass == FS_PASS2)
+		fsck_progress ("\tFiles relocated because of key "
+			       "conflicts with a directory: %lu\n", 
+			       pass_2_stat(fs)->relocated);
+	
+	if (pass_2_stat(fs)->rewritten)
+		fsck_progress ("\tFiles rewritten: %lu\n", 
+			       pass_2_stat(fs)->rewritten);
+    }
+    
+    {
+	/* what has been done on the semantic pass */
+	
+	if (sem_pass_stat(fs)->regular_files || sem_pass_stat(fs)->directories ||
+	    sem_pass_stat(fs)->symlinks || sem_pass_stat(fs)->others)
+	{
+		fsck_progress ("\tFound files/dirs/symlinks/others: "
+			       "%lu/%lu/%lu/%lu\n", 
+			       sem_pass_stat(fs)->regular_files,
+			       sem_pass_stat(fs)->directories,
+			       sem_pass_stat(fs)->symlinks,
+			       sem_pass_stat(fs)->others);
+	}
+
+	if (sem_pass_stat(fs)->lost_found)
+		fsck_progress ("\tLinked to /lost+found (files/dirs): "
+			       "%lu (%lu/%lu)\n",
+			       sem_pass_stat(fs)->lost_found,
+			       sem_pass_stat(fs)->lost_found_files,
+			       sem_pass_stat(fs)->lost_found_dirs);
+
+	if (sem_pass_stat(fs)->broken_files)
+		fsck_progress ("\tBroken file bodies: %lu\n",
+			       sem_pass_stat(fs)->broken_files);
+	
+	if (sem_pass_stat(fs)->fixed_sizes)
+		fsck_progress ("\tFiles with fixed size: %lu\n", 
+			       sem_pass_stat(fs)->fixed_sizes);
+	
+	if (sem_pass_stat(fs)->added_sd)
+		fsck_progress ("\tInserted missed StatDatas: %lu\n",
+			       sem_pass_stat(fs)->added_sd);
+
+	if (sem_pass_stat(fs)->empty_lost_dirs)
+		fsck_progress ("\tEmpty lost dirs (removed): %lu\n",
+			       sem_pass_stat(fs)->empty_lost_dirs);
+
+	if (sem_pass_stat(fs)->deleted_entries)
+		fsck_progress ("\tNames pointing to nowhere (removed): %lu\n", 
+			       sem_pass_stat(fs)->deleted_entries);
+	
+	if (sem_pass_stat(fs)->oid_sharing) {
+		fsck_progress ("\tObjects having used objectids (files, dirs): "
+			       "%lu (%lu/%lu)\n", 
+			       sem_pass_stat(fs)->oid_sharing,
+			       sem_pass_stat(fs)->oid_sharing_files_relocated,
+			       sem_pass_stat(fs)->oid_sharing_dirs_relocated);
+
+		assert(pass_2_stat(fs)->relocated == 
+		       sem_pass_stat(fs)->oid_sharing);
+	}
+    }
+    
+    if (pass != FS_CLEANUP && pass != FS_PASS1) {
+	    if (proper_id_map(fs)->count)
+		    fsck_progress ("\tObjectids found: %lu\n", 
+				   proper_id_map(fs)->count);
+    } else {
+	/* what has been done on the semantic pass */
+	if (pass_4_stat(fs)->deleted_items)
+	    fsck_progress ("\tDeleted unreachable items: %lu\n",
+			   pass_4_stat(fs)->deleted_items);
+    }
+
+    memset (&fsck_data (fs)->rebuild.pass_u, 0, 
+	    sizeof (fsck_data (fs)->rebuild.pass_u));
+}
+
diff --git a/utils/fsck/leaf.c b/utils/fsck/leaf.c
new file mode 100644
index 0000000..44e7ea9
--- /dev/null
+++ b/utils/fsck/leaf.c
@@ -0,0 +1,357 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ *
+ * The code to check the leaf structure.
+ * Leaf is not supposed to be in the tree, it is rather a single one.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "fsck.h"
+#include "misc/unaligned.h"
+#include "misc/malloc.h"
+#include <assert.h>
+
+/* 1 if some of fields in the block head of bh look bad */
+int fsck_leaf_check_header(reiserfs_filsys_t * fs, reiserfs_bh_t * bh) {
+    reiserfs_node_head_t * blkh;
+    int free_space, counted;
+
+    blkh = NODE_HEAD (bh);
+    
+    if (!reiserfs_leaf_head(bh)) {
+	/* We should not get here on rebuild. */
+	fsck_log ("block %lu: The block does not look like a leaf.\n", 
+		  bh->b_blocknr);
+	
+        one_more_corruption (fs, FATAL);
+	return 1;
+    }
+
+    if (reiserfs_nh_get_items (blkh) == 0)
+	return 0;
+    
+    counted = reiserfs_leaf_count_items(bh);
+
+    if (counted < reiserfs_nh_get_items (blkh)) {
+	fsck_log ("block %lu: The number of items (%lu) is incorrect, "
+		  "should be (%lu)", bh->b_blocknr, 
+		  reiserfs_nh_get_items(blkh), counted);
+	
+	if (fsck_mode(fs) == FSCK_REBUILD) {
+	    reiserfs_nh_set_items(blkh, counted);	    
+	    fsck_log (" - corrected\n");
+	    reiserfs_buffer_mkdirty (bh);
+	} else {
+	    fsck_log ("\n");
+	    one_more_corruption (fs, FATAL);
+	    return 1;
+	}
+    }
+    
+    free_space = reiserfs_leaf_free_count(bh);
+    if (reiserfs_nh_get_free (blkh) != free_space) {
+	fsck_log ("block %lu: The free space (%lu) is incorrect, should "
+		  "be (%lu)", bh->b_blocknr, reiserfs_nh_get_free (blkh), 
+		  free_space);
+	
+	if (fsck_mode(fs) != FSCK_CHECK && fsck_mode(fs) != FSCK_AUTO) {
+	    reiserfs_nh_set_free (blkh, free_space);	    
+	    fsck_log (" - corrected\n");
+	    reiserfs_buffer_mkdirty (bh);
+	} else {
+	    fsck_log ("\n");
+	    one_more_corruption (fs, FIXABLE);
+	    return 1;
+	}
+    }
+
+    return 0;
+}
+
+static int is_bad_sd (reiserfs_ih_t * ih, char * item)
+{
+    if (reiserfs_key_get_off1 (&ih->ih_key) || 
+	reiserfs_key_get_uni (&ih->ih_key)) 
+    {
+	fsck_log ("vpf-10610: StatData item %k has non "
+		  "zero offset found.\n", &ih->ih_key);
+	return 1;
+    }
+
+    if (reiserfs_ih_get_len (ih) == REISERFS_SD_SIZE_V1) {
+	/* looks like old stat data */
+	if (reiserfs_ih_get_format (ih) != KEY_FORMAT_1) {
+	    fsck_log ("vpf-10620: StatData item %k has wrong "
+		      "format.\n", &ih->ih_key);
+	}
+    }
+
+    return 0;
+}
+
+
+static int is_bad_directory (reiserfs_ih_t * ih, 
+			     char * item, int dev,
+			     int blocksize)
+{
+    int i;
+    char * name;
+    int namelen, entrylen;
+    reiserfs_deh_t * deh = (reiserfs_deh_t *)item;
+    __u32 prev_offset = 0;
+    __u16 prev_location = reiserfs_ih_get_len (ih);
+    int min_entry_size = 1;/* we have no way to understand whether the
+                              filesystem wes created in 3.6 format or
+                              converted to it. So, we assume that minimal 
+			      name length is 1 */
+
+    if (reiserfs_ih_get_len (ih) / (REISERFS_DEH_SIZE + min_entry_size) < 
+	reiserfs_ih_get_entries (ih))
+    {
+	/* entry count is too big */
+	return 1;
+    }
+    
+    for (i = 0; i < reiserfs_ih_get_entries (ih); i ++, deh ++) {
+	entrylen = reiserfs_direntry_entry_len(ih, deh, i);
+	if (entrylen > REISERFS_NAME_MAX)
+	    return 1;
+	
+	if (reiserfs_deh_get_off (deh) <= prev_offset)
+	    return 1;
+	
+	prev_offset = reiserfs_deh_get_off (deh);
+
+	if (reiserfs_deh_get_loc(deh) + entrylen != prev_location)
+	    return 1;
+	
+	prev_location = reiserfs_deh_get_loc (deh);
+
+	namelen = reiserfs_direntry_name_len (ih, deh, i);
+	name = reiserfs_deh_name (deh, i);
+	if (!reiserfs_hash_correct (&fs->hash, name, namelen, 
+				    reiserfs_deh_get_off (deh)))
+	{
+	    return 1;
+	}
+    }
+    return 0;
+}
+
+
+/* change incorrect block adresses by 0. 
+   Do not consider such item as incorrect */
+static int is_bad_extent (reiserfs_ih_t * ih, 
+			  char * item, int dev, 
+			  int blocksize)
+{
+    unsigned long blocks;
+    unsigned int i;
+    int bad = 0;
+
+    if (reiserfs_ih_get_len(ih) % REISERFS_EXT_SIZE) {
+	fsck_log ("is_bad_extent: extent item of %H of invalid length\n", ih);
+	return 1;
+    }
+
+    blocks = reiserfs_sb_get_blocks (fs->fs_ondisk_sb);
+  
+    for (i = 0; i < reiserfs_ext_count (ih); i ++) {
+	__u32 * ind = (__u32 *)item;
+
+	if (d32_get (ind, i) >= blocks) {
+	    bad ++;
+	    fsck_log ("is_bad_extent: %d-th pointer of item %H "
+		      "looks bad (%lu)\n", i, ih, d32_get (ind, i));
+	    continue;
+	}
+    }
+    return bad;
+}
+
+
+/* this is used by check.c: fsck_leaf_check */
+int fsck_leaf_item_check (reiserfs_bh_t * bh, 
+			  reiserfs_ih_t * ih, 
+			  char * item)
+{
+    int blocksize, dev;
+
+    blocksize = bh->b_size;
+    dev = bh->b_dev;
+
+    // FIXME: refuse transparently bad items
+    if (reiserfs_key_get_did (&ih->ih_key) == 
+	reiserfs_key_get_oid (&ih->ih_key))
+    {
+	return 1;
+    }
+    
+    if (!reiserfs_key_get_did (&ih->ih_key) || 
+	!reiserfs_key_get_oid (&ih->ih_key))
+    {
+	return 1;
+    }
+
+    if (reiserfs_ih_stat(ih))
+	return is_bad_sd (ih, item);
+
+    if (reiserfs_ih_dir (ih))
+	return is_bad_directory (ih, item, dev, blocksize);
+
+    if (reiserfs_ih_ext (ih))
+	return is_bad_extent (ih, item, dev, blocksize);
+
+    if (reiserfs_ih_direct (ih))
+	return 0;
+
+    return 1;
+}
+
+/* 1 if i-th and (i-1)-th items can not be neighbors in a leaf */
+int fsck_leaf_check_neigh (reiserfs_filsys_t * fs, reiserfs_bh_t * bh, int pos) {
+    reiserfs_ih_t * ih;
+
+    ih = reiserfs_ih_at (bh, pos);
+
+    if (reiserfs_key_comp (&((ih - 1)->ih_key), &ih->ih_key) != -1) {
+	if (fsck_mode (fs) != FSCK_REBUILD)
+	    one_more_corruption (fs, FATAL);	
+	return 1;
+    }
+
+    if (reiserfs_ih_stat (ih))
+	/* left item must be of another object */
+	if (reiserfs_key_comp2 (&((ih - 1)->ih_key), &ih->ih_key) != -1) {
+	    if (fsck_mode (fs) != FSCK_REBUILD)
+		one_more_corruption (fs, FATAL);	
+	    return 1;
+	}
+
+    if (reiserfs_key_get_oid (&ih->ih_key) == REISERFS_BAD_OID) {
+	/* BAD BLOCK LIST SUPPORT. */
+	if (reiserfs_key_get_did(&ih->ih_key) == REISERFS_BAD_DID && 
+	    reiserfs_ih_ext(ih) && 
+	    reiserfs_key_comp2(&((ih - 1)->ih_key), &ih->ih_key))
+	{
+		return 0;
+	}
+    } else {
+	/* Safe link support. */
+	if (reiserfs_key_get_did (&ih->ih_key) == (__u32)-1) {
+	    if (reiserfs_key_comp2 (&((ih - 1)->ih_key), &ih->ih_key) == 0) {
+		if (reiserfs_ih_ext (ih - 1) && reiserfs_ih_direct(ih))
+		    return 0; /* safe link */
+		/* they do not look like safe links */
+	    } else {
+		if (reiserfs_ih_ext (ih) || reiserfs_ih_direct(ih))
+		    return 0; /* safe link */
+		/* it does not look like safe link */
+	    }
+	}
+    }
+    
+    if (reiserfs_ih_direct(ih)) {
+	/* left item must be extent or stat data item of the same file */
+	if (reiserfs_key_comp2 (&((ih - 1)->ih_key), &ih->ih_key)) {
+	    if (fsck_mode (fs) != FSCK_REBUILD)
+		one_more_corruption (fs, FATAL);
+	    
+	    return 1;
+	}
+
+	if (!((reiserfs_ih_stat (ih - 1) && 
+	       reiserfs_key_get_off (&ih->ih_key) == 1) ||
+	      (reiserfs_ih_ext (ih - 1) && 
+	       reiserfs_key_get_off (&(ih - 1)->ih_key) + 
+	       reiserfs_leaf_ibytes (ih-1, bh->b_size) == 
+	       reiserfs_key_get_off (&ih->ih_key))))
+	{
+	    if (fsck_mode (fs) != FSCK_REBUILD)
+		one_more_corruption (fs, FATAL);
+	    
+	    return 1;
+	}
+    }
+
+    if (reiserfs_ih_ext (ih) || reiserfs_ih_dir (ih)) {
+	/* left item must be stat data of the same object */
+	if (reiserfs_key_comp2 (&((ih - 1)->ih_key), &ih->ih_key) ||
+	    !reiserfs_ih_stat (ih - 1)) {
+	    if (fsck_mode (fs) != FSCK_REBUILD)
+		one_more_corruption (fs, FATAL);
+	    return 1;
+	}
+    }
+
+    return 0;
+}
+
+int fsck_leaf_check (reiserfs_bh_t * bh) {
+    int i;
+    reiserfs_ih_t * ih;
+    int bad = 0;
+
+    assert (reiserfs_leaf_head (bh));
+
+    for (i = 0, ih = reiserfs_ih_at (bh,  0); 
+	 i < reiserfs_node_items (bh); i ++, ih ++) 
+    {
+	if (fsck_leaf_item_check (bh, ih, reiserfs_item_by_ih (bh, ih))) {
+	    fsck_log ("%s: block %lu, item %d: The corrupted item "
+		      "found (%H)\n", __FUNCTION__, bh->b_blocknr, i, ih);
+	    bad = 1;
+	    continue;
+	}
+
+	if (i && fsck_leaf_check_neigh (fs, bh, i)) {
+	    fsck_log ("%s: block %lu items %d and %d: Wrong order of "
+		      "items:\n\t%H\n\t%H\n", __FUNCTION__, bh->b_blocknr,
+		      i - 1, i, ih - 1, ih);
+	    bad = 1;
+	}
+    }
+
+    return bad;
+}
+
+/* this item is in tree. All unformatted pointer are correct. Do not
+   check them */
+void fsck_item_save(reiserfs_path_t * path, saveitem_t ** head) {
+    reiserfs_ih_t * ih = REISERFS_PATH_IH(path);
+    saveitem_t *si, *cur;
+
+    si = misc_getmem (sizeof (*si));
+    si->si_dnm_data = misc_getmem (reiserfs_ih_get_len(ih));
+    
+    /*si->si_blocknr = blocknr;*/
+    memcpy (&(si->si_ih), ih, REISERFS_IH_SIZE);
+    memcpy (si->si_dnm_data, REISERFS_PATH_ITEM(path), reiserfs_ih_get_len(ih));
+
+    if (*head == 0) {
+	*head = si;
+    } else {
+	cur = *head;
+	while (cur->si_next)
+	    cur = cur->si_next;
+	cur->si_next = si;
+    }
+    
+    return;
+}
+
+saveitem_t * fsck_item_free(saveitem_t * si) {
+    saveitem_t * tmp = si->si_next;
+    
+    misc_freemem (si->si_dnm_data);
+    misc_freemem (si);
+    
+    return tmp;
+}
+
+
diff --git a/utils/fsck/lost+found.c b/utils/fsck/lost+found.c
new file mode 100644
index 0000000..2f87595
--- /dev/null
+++ b/utils/fsck/lost+found.c
@@ -0,0 +1,418 @@
+/*
+ * Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "fsck.h"
+#include "util/misc.h"
+#include "util/device.h"
+#include "util/misc.h"
+
+#include <sys/stat.h>
+
+
+extern void cb_item_modify (reiserfs_ih_t *ih, void *item);
+
+static __u64 _look_for_lost (reiserfs_filsys_t * fs, int link_lost_dirs) {
+    reiserfs_key_t key, prev_key;
+    const reiserfs_key_t *rdkey;
+    REISERFS_PATH_INIT (path);
+    static int lost_files = 0; /* looking for lost dirs we calculate amount of
+				  lost files, so that when we will look for
+				  lost files we will be able to stop when
+				  there are no lost files anymore */
+    unsigned long leaves;
+    reiserfs_bh_t * bh;
+    reiserfs_ih_t * ih;
+    int entry_len;
+    int is_it_dir;
+    int item_pos;
+    int retval;
+    __u64 size;
+
+    key = root_dir_key;
+
+    if (!link_lost_dirs && !lost_files) {
+	/* we have to look for lost files but we know already that there are
+           no any */
+	return 0;
+    }
+	
+    fsck_progress ("Looking for lost %s:\n", link_lost_dirs ? 
+		   "directories" : "files");
+    leaves = 0;
+
+    /* total size of added entries */
+    size = 0;
+    while (1) {
+	retval = reiserfs_tree_search_item (fs, &key, &path);
+	/* fixme: we assume path ends up with a leaf */
+	bh = REISERFS_PATH_LEAF (&path);
+	item_pos = REISERFS_PATH_LEAF_POS (&path);
+	if (retval != ITEM_FOUND) {
+	    if (item_pos == reiserfs_nh_get_items (NODE_HEAD (bh))) {
+		rdkey = reiserfs_tree_rkey (&path, fs);
+		if (!reiserfs_key_comp (rdkey, &MAX_KEY)) {
+		    reiserfs_tree_pathrelse (&path);
+		    break;
+		}
+		key = *rdkey;
+		reiserfs_tree_pathrelse (&path);
+		continue;
+	    }
+	    /* we are on the item in the buffer */
+	}
+
+	/* print ~ how many leaves were scanned and how fast it was */
+	if (!fsck_quiet (fs))
+	    util_misc_speed (fsck_progress_file(fs), leaves++, 0, 50, 0);
+
+	for (ih = REISERFS_PATH_IH (&path); 
+	     item_pos < reiserfs_nh_get_items (NODE_HEAD (bh)); 
+	     item_pos ++, ih ++, REISERFS_PATH_LEAF_POS(&path)++) 
+	{
+	    if (fsck_item_reach(ih))
+		continue;
+
+	    /* found item which can not be reached */
+	    if (!reiserfs_ih_dir (ih) && !reiserfs_ih_stat (ih)) {
+		continue;
+	    }
+
+	    if (reiserfs_ih_dir (ih)) {
+		/* if this directory has no stat data - try to recover it */
+		reiserfs_key_t sd;
+		reiserfs_path_t tmp;
+
+		sd = ih->ih_key;
+		reiserfs_key_set_sec (KEY_FORMAT_1, &sd, 
+				      OFFSET_SD, TYPE_STAT_DATA);
+		if (reiserfs_tree_search_item (fs, &sd, &tmp) == ITEM_FOUND) {
+		    /* should not happen - because if there were a stat data -
+                       we would have done with the whole directory */
+		    reiserfs_tree_pathrelse (&tmp);
+		    continue;
+		}
+		sem_pass_stat(fs)->added_sd ++;
+		reiserfs_tree_create_stat (fs, &tmp, &sd, cb_item_modify);
+                id_map_mark(proper_id_map (fs), reiserfs_key_get_oid (&sd));
+		key = sd;
+		reiserfs_tree_pathrelse (&path);
+		goto cont;
+	    }
+
+
+	    /* stat data marked "not having name" found */
+	    if (reiserfs_ih_stat (REISERFS_PATH_IH(&path)))
+		fix_obviously_wrong_sd_mode (&path);
+		
+    	    is_it_dir = (not_a_directory(reiserfs_item_by_ih(bh,ih))) ? 0 : 1;
+
+	    if (is_it_dir) {
+		reiserfs_key_t tmp_key;
+		REISERFS_PATH_INIT (tmp_path);
+		reiserfs_ih_t * tmp_ih;
+		reiserfs_bh_t *tmp_bh;
+
+		/* there is no need to link empty lost dirs into /lost+found */
+		tmp_key = ih->ih_key;
+		reiserfs_key_set_sec (KEY_FORMAT_1, &tmp_key, 
+				      0xffffffff, TYPE_DIRENTRY);
+		reiserfs_tree_search_item (fs, &tmp_key, &tmp_path);
+		tmp_ih = REISERFS_PATH_IH (&tmp_path);
+		tmp_bh = REISERFS_PATH_LEAF (&tmp_path);
+		tmp_ih --;
+		if (reiserfs_key_comp2 (&tmp_key, tmp_ih))
+		    reiserfs_panic ("not directory found");
+		if (!reiserfs_ih_dir (tmp_ih) ||
+		    (reiserfs_deh_get_off (reiserfs_deh (tmp_bh, tmp_ih) + 
+					   reiserfs_ih_get_entries (tmp_ih) - 1)
+		     == OFFSET_DOT_DOT))
+		{
+		    /* last directory item is either stat data or empty
+                       directory item - do not link this dir into lost+found */
+		    sem_pass_stat(fs)->empty_lost_dirs ++;
+		    reiserfs_tree_pathrelse (&tmp_path);
+		    continue;
+		}
+		reiserfs_tree_pathrelse (&tmp_path);
+	    }
+
+	    if (link_lost_dirs && !is_it_dir) {
+		/* we are looking for directories and it is not a dir */
+		lost_files ++;
+		continue;
+	    }
+
+	    sem_pass_stat(fs)->lost_found ++;
+
+	    {
+		reiserfs_key_t obj_key = {0, 0, {{0, 0},}};
+		char lost_name[REISERFS_NAME_MAX];
+		reiserfs_ih_t tmp_ih;
+
+		/* key to continue */
+		key = ih->ih_key;
+		reiserfs_key_set_oid (&key, reiserfs_key_get_oid (&key) + 1);
+
+		tmp_ih = *ih;
+		if (id_map_test(semantic_id_map (fs), 
+				reiserfs_key_get_oid (&ih->ih_key))) 
+		{
+		    /* objectid is used, relocate an object */
+		    sem_pass_stat(fs)->oid_sharing ++;
+		    
+		    if (is_it_dir) {
+			relocate_dir (&tmp_ih);
+			sem_pass_stat(fs)->oid_sharing_dirs_relocated ++;
+		    } else {
+			fsck_file_relocate (&tmp_ih.ih_key, 1);
+			sem_pass_stat(fs)->oid_sharing_files_relocated ++;
+		    }		    
+		    
+		    fsck_relocate_mklinked(&tmp_ih.ih_key);
+		} else {
+		    if (!is_it_dir)
+			id_map_mark(semantic_id_map (fs), 
+				    reiserfs_key_get_oid (&ih->ih_key));
+		}
+
+		lost_name[0] = '\0';
+		sprintf (lost_name, "%u_%u", reiserfs_key_get_did (&tmp_ih.ih_key),
+			 reiserfs_key_get_oid (&tmp_ih.ih_key));
+
+		/* entry in lost+found directory will point to this key */
+		reiserfs_key_set_did (&obj_key, 
+			reiserfs_key_get_did (&tmp_ih.ih_key));
+		reiserfs_key_set_oid (&obj_key, 
+			reiserfs_key_get_oid (&tmp_ih.ih_key));
+
+		reiserfs_tree_pathrelse (&path);
+		
+		/* 0 does not mean anyting - item with "." and ".." already
+		   exists and reached, so only name will be added */
+		entry_len = reiserfs_direntry_entry_estimate (lost_name, 
+							      fs->lost_format);
+		size += reiserfs_tree_insert_entry (fs, &lost_found_dir_key, 
+						    lost_name, entry_len,
+						    &obj_key, 0/*fsck_need*/);
+		
+		if (is_it_dir) {
+		    /* fixme: we hope that if we will try to pull all the
+		       directory right now - then there will be less
+		       lost_found things */
+		    if (!fsck_quiet(fs)) {
+			util_misc_print_name (fsck_progress_file(fs), 
+					      lost_name, strlen (lost_name));
+		    }
+		    
+		    /*fsck_progress ("\tChecking lost dir \"%s\":", lost_name);*/
+		    rebuild_semantic_pass (&obj_key, &lost_found_dir_key, 
+					   ET_NAME, /*reloc_ih*/0);
+		    
+		    if (!fsck_quiet(fs)) {
+			util_misc_erase_name (fsck_progress_file(fs), 
+					      strlen (lost_name));
+		    
+			util_misc_fini_name(fsck_progress_file(fs));
+		    }
+		    
+		    /*fsck_progress ("finished\n");*/
+		    
+		    sem_pass_stat(fs)->lost_found_dirs ++;
+		} else {
+		    if (reiserfs_tree_search_item (fs, &obj_key, &path) != 
+			ITEM_FOUND)
+		    {
+			reiserfs_panic ("look_for_lost: lost file stat data "
+					"%K not found", &obj_key);
+		    }
+
+		    /* check_regular_file does not mark stat data reachable */
+		    fsck_item_mkreach (REISERFS_PATH_IH (&path), 
+				       REISERFS_PATH_LEAF (&path));
+
+		    rebuild_check_regular_file (&path, REISERFS_PATH_ITEM(&path), 
+						0/*reloc_ih*/);
+		    
+		    reiserfs_tree_pathrelse (&path);
+
+		    sem_pass_stat(fs)->lost_found_files ++;
+		    lost_files --;
+		}
+
+		goto cont;
+	    }
+	} /* for */
+
+	prev_key = key;
+	
+	REISERFS_PATH_LEAF_POS(&path) = item_pos - 1;
+	rdkey = reiserfs_tree_next_key (&path, fs);
+	if (rdkey)
+	    key = *rdkey;
+	else
+	    break;
+	    	
+	if (reiserfs_key_comp (&prev_key, &key) != -1)
+	    reiserfs_panic ("pass_3a: key must grow 2: prev=%k next=%k",
+			    &prev_key, &key);
+	reiserfs_tree_pathrelse (&path);
+
+    cont:
+	if (!link_lost_dirs && !lost_files) {
+	    break;
+	}
+    }
+
+    reiserfs_tree_pathrelse (&path);
+    util_misc_speed(fsck_progress_file(fs), leaves, 0, 50, 1);
+    
+#if 0
+    /* check names added we just have added to/lost+found. Those names are
+       marked DEH_Lost_found flag */
+    fsck_progress ("Checking lost+found directory.."); fflush (stdout);
+    check_semantic_tree (&lost_found_dir_key, &root_dir_key, 0, 1/* lost+found*/);
+    fsck_progress ("finished\n");
+#endif
+
+    return size;
+
+}
+
+static void fsck_lost_save_result (reiserfs_filsys_t * fs)
+{
+    FILE * file;
+    int retval;
+
+    /* save bitmaps with which we will be able start reiserfs from
+       pass 1 */
+    file = util_file_open ("temp_fsck_file.deleteme", "w+");
+    if (!file)
+	return;
+
+    fsck_stage_start_put (file, LOST_FOUND_DONE);
+    fsck_stage_end_put (file);
+    fclose (file);
+
+    retval = rename ("temp_fsck_file.deleteme", state_dump_file (fs));
+    if (retval != 0) {
+	fsck_progress ("pass 0: Could not rename the temporary file "
+		       "temp_fsck_file.deleteme to %s", state_dump_file (fs));
+    }
+}
+
+/* we have nothing to load from a state file, but we have to fetch
+   on-disk bitmap, copy it to allocable bitmap, and fetch objectid
+   map */
+void fsck_lost_load_result (reiserfs_filsys_t * fs) {
+    fsck_new_bitmap (fs) = 
+	    reiserfs_bitmap_create (reiserfs_sb_get_blocks (fs->fs_ondisk_sb));
+    
+    reiserfs_bitmap_copy (fsck_new_bitmap (fs), fs->fs_bitmap2);
+
+    fsck_allocable_bitmap (fs) = 
+	    reiserfs_bitmap_create (reiserfs_sb_get_blocks (fs->fs_ondisk_sb));
+    
+    reiserfs_bitmap_copy (fsck_allocable_bitmap (fs), fs->fs_bitmap2);
+
+    fs->block_allocator = reiserfsck_new_blocknrs;
+    fs->block_deallocator = reiserfsck_free_block;
+}
+
+static void fsck_lost_fini(reiserfs_filsys_t * fs) {
+    /* update super block: objectid map, fsck state */
+    reiserfs_sb_set_state (fs->fs_ondisk_sb, LOST_FOUND_DONE);
+    reiserfs_buffer_mkdirty (fs->fs_super_bh);
+
+    /* write all dirty blocks */
+    fsck_progress ("Flushing..");
+    id_map_flush(semantic_id_map (fs), fs);
+    id_map_free(semantic_id_map(fs));
+    semantic_id_map(fs) = NULL;
+ 
+    fs->fs_dirt = 1;
+    reiserfs_bitmap_flush(fsck_new_bitmap(fs), fs);
+    reiserfs_fs_flush (fs);
+    fsck_progress ("finished\n");
+
+    fsck_stage_report (FS_LOST, fs);
+    
+    id_map_free(proper_id_map(fs));
+    proper_id_map(fs) = NULL;
+
+    if (!fsck_run_one_step (fs)) {
+	if (fsck_info_ask (fs, "Continue? (Yes):", "Yes\n", 1))
+	    /* reiserfsck continues */
+	    return;
+    }
+
+    fsck_lost_save_result (fs);
+
+    fs->fs_dirt = 1;
+    reiserfs_fs_close (fs);
+    exit(EXIT_OK);
+}
+
+void fsck_lost (reiserfs_filsys_t * fs) {
+    REISERFS_PATH_INIT (path);
+    reiserfs_ih_t * ih;
+    void * sd;
+    __u64 size, sd_size;
+    __u32 blocks;
+    __u16 mode;
+    __u32 objectid;
+    unsigned int gen_counter;
+    fsck_progress ("Pass 3a (looking for lost dir/files):\n");
+
+    /* when warnings go not to stderr - separate them in the log */
+    if (fsck_log_file (fs) != stderr)
+	fsck_log ("####### Pass 3a (lost+found pass) #########\n");
+
+
+    /* look for lost dirs first */
+    size = _look_for_lost (fs, 1);
+
+    /* link files which are still lost */
+    size += _look_for_lost (fs, 0);
+
+    /* update /lost+found sd_size and sd_blocks (nlink is correct already) */
+
+    objectid = reiserfs_tree_search_name (fs, &root_dir_key, "lost+found",
+                                       &gen_counter, &lost_found_dir_key);
+
+    if (!objectid) {
+       reiserfs_panic ("look_for_lost: The entry 'lost+found' could "
+		       "not be found in the root directory.");
+    }
+
+    if (reiserfs_tree_search_item (fs, &lost_found_dir_key, &path) != 
+	ITEM_FOUND)
+    {
+	reiserfs_panic ("look_for_lost: The StatData of the 'lost+found' "
+			"directory %K could not be found", &lost_found_dir_key);
+    }
+    
+    ih = REISERFS_PATH_IH (&path);
+    sd = REISERFS_PATH_ITEM (&path);
+    reiserfs_stat_get_size (ih, sd, &sd_size);
+    size += sd_size;
+    blocks = REISERFS_DIR_BLOCKS (size);
+
+    reiserfs_stat_set_size (ih, sd, &size);
+    reiserfs_stat_set_blocks (ih, sd, &blocks);
+
+    /* make lost+found to be drwx------ */
+    mode = S_IFDIR | S_IRUSR | S_IWUSR | S_IXUSR;
+    reiserfs_stat_set_mode (ih, sd, &mode);
+
+    reiserfs_buffer_mkdirty (REISERFS_PATH_LEAF (&path));
+    reiserfs_tree_pathrelse (&path);
+
+    fsck_lost_fini(fs);
+}
+
diff --git a/fsck/main.c b/utils/fsck/main.c
similarity index 72%
rename from fsck/main.c
rename to utils/fsck/main.c
index ab3342a..d2f7cb0 100644
--- a/fsck/main.c
+++ b/utils/fsck/main.c
@@ -3,15 +3,24 @@
  * reiserfsprogs/README
  */
 
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
 #include "fsck.h"
+#include "misc/malloc.h"
+#include "util/print.h"
+#include "util/device.h"
+#include "util/badblock.h"
+
 #include <getopt.h>
 #include <sys/resource.h>
 #include <sys/mman.h>
 #include <signal.h>
-
-extern int screen_width;
-extern int screen_savebuffer_len;
-extern char *screen_savebuffer;
+#include <errno.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <time.h>
 
 reiserfs_filsys_t * fs;
 char * badblocks_file;
@@ -50,11 +59,11 @@
 
 /*
    -B works with --fix-fixable
-        fixes indirect pointers pointed to
+        fixes extent pointers pointed to
 	badblocks, adds badblocks to badblock list in fs.
     and with --rebuild
         builds the tree without pointers to badblocks (internal,
-	indirect), adds badblocks to badblock list in fs.  
+	extent), adds badblocks to badblock list in fs.  
 */
 
 /*
@@ -160,11 +169,10 @@
 
 	case 'l': /* --logfile */
 	    data->log_file_name = optarg;
-	    /*asprintf (&data->log_file_name, "%s", optarg);*/
 	    data->log = fopen (optarg, "w");
 	    if (!data->log)
 		fprintf (stderr, "reiserfsck: Cannot not open \'%s\': %s", 
-		    optarg, strerror(errno));	    
+			 optarg, strerror(errno));	    
 	    break;
 
 	case 'n': /* --nolog */
@@ -176,7 +184,6 @@
                blocks marked in it. That bitmap could be created by
                previous run of reiserfsck with -c */
 	    data->rebuild.bitmap_file_name = optarg;
-	    /*asprintf (&data->rebuild.bitmap_file_name, "%s", optarg);*/
 	    data->rebuild.scan_area = EXTERN_BITMAP;
 	    break;
 
@@ -192,7 +199,7 @@
 	    break;
 #endif
 	case 'd': /* --create-passes-dump */
-	    asprintf (&data->rebuild.passes_dump_file_name, "%s", optarg);
+	    data->rebuild.passes_dump_file_name = optarg;
 	    data->options |= OPT_SAVE_PASSES_DUMP;
 	    break;
 	
@@ -201,8 +208,8 @@
 	    break;
 
 	case 'h': /* --hash: suppose that this hash was used on a filesystem */
-	    asprintf (&data->rebuild.defined_hash, "%s", optarg);
-	    if (name2func (data->rebuild.defined_hash) == 0)
+	    data->rebuild.defined_hash = optarg;
+	    if (reiserfs_hash_get (data->rebuild.defined_hash) == 0)
 		reiserfs_panic ("reiserfsck: Unknown hash is specified: %s",
 				data->rebuild.defined_hash);
 	    data->options |= OPT_HASH_DEFINED;
@@ -213,12 +220,12 @@
 	    break;
 
 	case 'R': /* preparing rollback data */
-	    asprintf (&data->rebuild.rollback_file, "%s", optarg);
+	    data->rebuild.rollback_file = optarg;
 	    data->options |= OPT_SAVE_ROLLBACK;
 	    break;
 	
 	case 'B': /* list of phisically corrupted blocks */
-	    asprintf (&badblocks_file, "%s", optarg);
+	    badblocks_file = optarg;
 	    data->options |= BADBLOCKS_FILE;
 	    break;
 
@@ -316,7 +323,7 @@
 ** If you would like advice on using this program, support **\n\
 ** is available  for $25 at  www.namesys.com/support.html. **\n\
 *************************************************************\n\
-\nWill rebuild the filesystem (%s) tree\n"
+\nWill rebuild the filesystem on (%s)\n"
 
 #define START_WARNING \
 "*************************************************************\n\
@@ -332,8 +339,7 @@
 \n"
 
 
-void warn_what_will_be_done (char * file_name, struct fsck_data * data)
-{
+static void warn_what_will_be_done (char * file_name, struct fsck_data * data) {
     FILE * warn_to;
 
     warn_to = (data->progress ? data->progress : stderr);
@@ -376,9 +382,8 @@
                 "confirmation before continuing\n");
 
 	if (data->rebuild.bitmap_file_name)
-	    reiserfs_warning (warn_to, "Will try to load a bitmap--of all "
-		"ReiserFS leaves in the partition--from the file \n'%s'\n",
-		data->rebuild.bitmap_file_name);
+	    reiserfs_warning (warn_to, "Will try to obtain the list of ReiserFS"
+		" leaves from the file '%s'\n", data->rebuild.bitmap_file_name);
 
 	if (data->options & OPT_ADJUST_FILE_SIZE)
 	    reiserfs_warning (warn_to, "\tWill set file sizes in their metadata "
@@ -416,43 +421,54 @@
 	(data->log == stdout) ? "stdout" : 
 	(data->log_file_name ? data->log_file_name : "fsck.run"));
     
-    if (!(data->options & OPT_YES) && !user_confirmed (warn_to, "\nDo you want to "
-	"run this program?[N/Yes] (note need to type Yes if you do):", "Yes\n"))
-	exit (EXIT_USER);
+    if (!(data->options & OPT_YES)) {
+	    if (!util_user_confirmed(warn_to, "\nDo you want to run this "
+				     "program?[N/Yes] (note need to type "
+				     "Yes if you do):", "Yes\n"))
+	    {
+		    exit (EXIT_USER);
+	    }
+    }
 }
 
-static dma_info_t dma_info;
-static dma_info_t old_dma_info;
+#define DMA_IS_OFF								\
+"\n********************************************************************\n"	\
+"* Warning: It was just detected that dma mode was turned off while *\n"	\
+"* operating -- probably  due  to some  problem with your hardware. *\n"	\
+"* Please check your hardware and have a look into the syslog file. *\n"	\
+"* Note: running with --rebuild-tree on faulty hardware may destroy *\n"	\
+"* your data.                                                       *\n"	\
+"********************************************************************\n"
 
-void check_dma() {
+#define DMA_IS_CHANGED								\
+"\n********************************************************************\n"	\
+"* Warning: It was just detected that dma speed was descreased while*\n"	\
+"* operating -- probably  due  to some  problem with your hardware. *\n"	\
+"* Please check your hardware and have a look into the syslog file. *\n"	\
+"* Note: running with --rebuild-tree on faulty hardware may destroy *\n"	\
+"* your data.                                                       *\n"	\
+"********************************************************************\n"
+
+static util_device_dma_t dma_info;
+static util_device_dma_t old_dma_info;
+
+static void check_dma() {
     old_dma_info = dma_info;
-    if (get_dma_info(&dma_info) == -1) {
-	fsck_log("get_dma_info failed %s\n", strerror (errno));
+    if (util_device_get_dma(&dma_info) == -1) {
+	fsck_log("util_device_get_dma failed %s\n", strerror (errno));
 	return;
     }
     
     if (dma_info.dma != old_dma_info.dma) {
 	if (dma_info.dma == 0) {
-	    printf("\n********************************************************************\n");
-	    printf("* Warning: It was just detected that dma mode was turned off while *\n");
-	    printf("* operating -- probably  due  to some  problem with your hardware. *\n");
-	    printf("* Please check your hardware and have a look into the syslog file. *\n");
-	    printf("* Note: running with --rebuild-tree on faulty hardware may destroy *\n");
-	    printf("* your data.                                                       *\n");
-	    printf("********************************************************************\n");
+	    printf(DMA_IS_OFF);
 	    if (fsck_log_file (fs) != stdout)
 		fsck_log("WARNING: dma mode has been turned off.\n");
 	}
     }
     if (dma_info.speed != old_dma_info.speed) {
 	if (dma_info.speed < old_dma_info.speed) {
-	    printf("\n********************************************************************\n");
-	    printf("* Warning: It was just detected that dma speed was descreased while*\n");
-	    printf("* operating -- probably  due  to some  problem with your hardware. *\n");
-	    printf("* Please check your hardware and have a look into the syslog file. *\n");
-	    printf("* Note: running with --rebuild-tree on faulty hardware may destroy *\n");
-	    printf("* your data.                                                       *\n");
-	    printf("********************************************************************\n");
+	    printf(DMA_IS_CHANGED);
 	    if (fsck_log_file (fs) != stdout)
 		fsck_log("WARNING: dma speed has been descreased.\n");	    
 	}
@@ -467,11 +483,11 @@
     
     dma_info.fd = fs->fs_dev;
 
-    if (prepare_dma_check(&dma_info) != 0)
+    if (util_device_dma_prep(&dma_info) != 0)
 	return;
 
-    if (get_dma_info(&dma_info) == -1) {
-	fsck_log("get_dma_info failed %s\n", strerror (errno));
+    if (util_device_get_dma(&dma_info) == -1) {
+	fsck_log("util_device_get_dma failed %s\n", strerror (errno));
 	return;
     }
 
@@ -490,86 +506,92 @@
 
 static void reset_super_block (reiserfs_filsys_t * fs)
 {
-    struct reiserfs_super_block * sb;
+    reiserfs_sb_t * sb;
     struct reiserfs_journal_header * jh;
     
     sb = fs->fs_ondisk_sb;
 
-    set_sb_free_blocks (sb, get_sb_block_count (sb));
-    set_sb_root_block (sb, 0);
-    set_sb_tree_height (sb, ~0);
+    reiserfs_sb_set_free (sb, reiserfs_sb_get_blocks (sb));
+    reiserfs_sb_set_root (sb, 0);
+    reiserfs_sb_set_height (sb, ~0);
 
     /* make file system invalid unless fsck finished () */
-    set_sb_fs_state (sb, get_sb_fs_state (sb) | FS_FATAL);
+    reiserfs_sb_set_state (sb, reiserfs_sb_get_state (sb) | FS_FATAL);
 
 /*
     if ( is_reiser2fs_jr_magic_string (sb) ) {???
-	set_sb_version (sb, REISERFS_VERSION_3);
+	reiserfs_sb_set_version (sb, REISERFS_VERSION_3);
     }
     if (is_reiser2fs_magic_string (sb)) {
-	set_sb_version (sb, REISERFS_FORMAT_3_6);
+	reiserfs_sb_set_version (sb, REISERFS_FORMAT_3_6);
     }
     if (is_reiserfs_magic_string (sb)) {
-	set_sb_version (sb, REISERFS_FORMAT_3_5);
+	reiserfs_sb_set_version (sb, REISERFS_FORMAT_3_5);
     }
 */
     /* make sure that hash code in super block match to set hash function */
-    set_sb_hash_code (sb, func2code (fs->fs_hash_function));
+    reiserfs_sb_set_hash (sb, reiserfs_hash_code (fs->hash));
     
     if (fsck_hash_defined (fs)) {
 	/* --hash was specifed */
-	fs->fs_hash_function = name2func (fsck_data (fs)->rebuild.defined_hash);
-	set_sb_hash_code (sb, func2code (fs->fs_hash_function));
+	fs->hash = reiserfs_hash_get (fsck_data (fs)->rebuild.defined_hash);
+	reiserfs_sb_set_hash (sb, reiserfs_hash_code (fs->hash));
     }
     
     if (reiserfs_journal_opened (fs)) {	
 	jh = (struct reiserfs_journal_header *)fs->fs_jh_bh->b_data;
     
 	/* reset journal params if needed. */
-	if (memcmp(sb_jp(sb), &jh->jh_journal, sizeof (struct journal_params))) {
-	    if (is_reiserfs_jr_magic_string (sb)) 
-		memcpy (sb_jp(sb), &jh->jh_journal, sizeof (struct journal_params));
+	if (memcmp(reiserfs_sb_jp(sb), &jh->jh_journal, sizeof (reiserfs_journal_param_t))) {
+	    if (reiserfs_super_jr_magic (sb)) 
+		memcpy (reiserfs_sb_jp(sb), &jh->jh_journal, sizeof (reiserfs_journal_param_t));
 	    else {
-		set_sb_reserved_for_journal (sb, 0);
+		reiserfs_sb_set_reserved (sb, 0);
 	    
-		set_jp_journal_dev (sb_jp(sb), 0);
-		set_jp_journal_magic (sb_jp(sb), get_random());
-		set_jp_journal_1st_block (sb_jp(sb), get_journal_start_must (fs));
-		set_jp_journal_size (sb_jp(sb),
-		    journal_default_size (fs->fs_super_bh->b_blocknr, fs->fs_blocksize));	    
-		set_jp_journal_max_trans_len (sb_jp(sb),
-		    advise_journal_max_trans_len(
-			get_jp_journal_max_trans_len (sb_jp(sb)),
-			get_jp_journal_size (sb_jp(sb)),
-			fs->fs_blocksize, 0));
-		set_jp_journal_max_batch (sb_jp(sb), 
-		    advise_journal_max_batch(get_jp_journal_max_trans_len (sb_jp(sb))));
-		set_jp_journal_max_commit_age (sb_jp(sb), advise_journal_max_commit_age());
-		set_jp_journal_max_trans_age (sb_jp(sb), advise_journal_max_trans_age());
+		reiserfs_jp_set_dev (reiserfs_sb_jp(sb), 0);
+		reiserfs_jp_set_magic (reiserfs_sb_jp(sb), misc_random());
+		reiserfs_jp_set_start (reiserfs_sb_jp(sb), 
+		    reiserfs_journal_start_must (fs));
+		reiserfs_jp_set_size (reiserfs_sb_jp(sb),
+		    reiserfs_journal_default (fs->fs_super_bh->b_blocknr, 
+					      fs->fs_blocksize));	    
 		
-		set_jp_journal_dev (&jh->jh_journal, 0);
-		set_jp_journal_magic (&jh->jh_journal, 
-				      get_jp_journal_magic(sb_jp(sb)));
-		set_jp_journal_1st_block (&jh->jh_journal, 
-		    get_jp_journal_1st_block(sb_jp(sb)));
-		set_jp_journal_size (&jh->jh_journal, get_jp_journal_size(sb_jp(sb)));
-		set_jp_journal_max_trans_len (&jh->jh_journal, 
-		    get_jp_journal_max_trans_len(sb_jp(sb)));
-		set_jp_journal_max_batch (&jh->jh_journal, 
-		    get_jp_journal_max_batch(sb_jp(sb)));
-		set_jp_journal_max_commit_age (&jh->jh_journal, 
-		    get_jp_journal_max_commit_age(sb_jp(sb)));
-		set_jp_journal_max_trans_age (&jh->jh_journal, 
-		    get_jp_journal_max_trans_age(sb_jp(sb))); 
+		reiserfs_jp_set_tlen (reiserfs_sb_jp(sb),
+		    reiserfs_journal_tlen(
+			reiserfs_jp_get_tlen (reiserfs_sb_jp(sb)),
+			reiserfs_jp_get_size (reiserfs_sb_jp(sb)),
+			fs->fs_blocksize, 0));
+		reiserfs_jp_set_max_batch (reiserfs_sb_jp(sb), 
+		    reiserfs_journal_batch(reiserfs_jp_get_tlen (reiserfs_sb_jp(sb))));
+		reiserfs_jp_set_commit_age (reiserfs_sb_jp(sb), 
+		    reiserfs_journal_commit_age());
+		reiserfs_jp_set_trans_age (reiserfs_sb_jp(sb), 
+		    reiserfs_journal_trans_age());
+		
+		reiserfs_jp_set_dev (&jh->jh_journal, 0);
+		reiserfs_jp_set_magic (&jh->jh_journal, 
+				      reiserfs_jp_get_magic(reiserfs_sb_jp(sb)));
+		reiserfs_jp_set_start (&jh->jh_journal, 
+		    reiserfs_jp_get_start(reiserfs_sb_jp(sb)));
+		reiserfs_jp_set_size (&jh->jh_journal, 
+		    reiserfs_jp_get_size(reiserfs_sb_jp(sb)));
+		reiserfs_jp_set_tlen (&jh->jh_journal, 
+		    reiserfs_jp_get_tlen(reiserfs_sb_jp(sb)));
+		reiserfs_jp_set_max_batch (&jh->jh_journal, 
+		    reiserfs_jp_get_max_batch(reiserfs_sb_jp(sb)));
+		reiserfs_jp_set_commit_age (&jh->jh_journal, 
+		    reiserfs_jp_get_commit_age(reiserfs_sb_jp(sb)));
+		reiserfs_jp_set_trans_age (&jh->jh_journal, 
+		    reiserfs_jp_get_trans_age(reiserfs_sb_jp(sb))); 
 	    }
 	}
     }
 
     /* objectid map is not touched */
-    mark_buffer_dirty (fs->fs_super_bh);
-    bwrite (fs->fs_super_bh);
+    reiserfs_buffer_mkdirty (fs->fs_super_bh);
+    reiserfs_buffer_write (fs->fs_super_bh);
     if (!(fsck_data(fs)->options & OPT_SAVE_PASSES_DUMP))
-        mark_buffer_do_not_flush (fs->fs_super_bh);
+        reiserfs_buffer_mknoflush (fs->fs_super_bh);
 }
 
 
@@ -580,6 +602,8 @@
 #define START_FROM_LOST_FOUND 		5
 #define START_FROM_PASS_4 		6
 
+
+
 /* this decides where to start from  */
 static int where_to_start_from (reiserfs_filsys_t * fs)
 {
@@ -587,21 +611,21 @@
     FILE * fp = 0;
     int last_run_state;
     
-    last_run_state = get_sb_fs_state (fs->fs_ondisk_sb);
+    last_run_state = reiserfs_sb_get_state (fs->fs_ondisk_sb);
     if (last_run_state == 0 || !fsck_run_one_step (fs))
 	/**/
 	return START_FROM_THE_BEGINNING;
     
     /* We are able to perform the next step only if there is a file with the previous 
      * step results. */
-    fp = open_file (state_dump_file (fs), "r");
+    fp = util_file_open (state_dump_file (fs), "r");
     if (fp == 0) {
-	set_sb_fs_state (fs->fs_ondisk_sb, 0);
+	reiserfs_sb_set_state (fs->fs_ondisk_sb, 0);
 	return START_FROM_THE_BEGINNING;
     }
 
     /* check start and end magics of dump file */
-    ret = is_stage_magic_correct (fp);
+    ret = fsck_stage_magic_check (fp);
     
     if (ret <= 0 || ret != last_run_state)
 	return START_FROM_THE_BEGINNING;
@@ -610,54 +634,56 @@
     switch (last_run_state) {
     case PASS_0_DONE:
 	/* skip pass 0 */
-	if (!fsck_user_confirmed (fs, "Pass 0 seems finished. Start from pass 1?(Yes)",
-				  "Yes\n", 1))
+	if (!fsck_info_ask (fs, "Pass 0 seems finished. Start "
+			    "from pass 1?(Yes)", "Yes\n", 1))
+	{
 	    fsck_exit ("Run without -d then\n");
+	}
 	
-	load_pass_0_result (fp, fs);
+	fsck_pass0_load_result (fp, fs);
 	fclose (fp);
 	return START_FROM_PASS_1;
 	
     case PASS_1_DONE:
 	/* skip pass 1 */
-	if (!fsck_user_confirmed (fs, "Passes 0 and 1 seems finished. Start from "
-	    "pass 2?(Yes)", "Yes\n", 1)) 
+	if (!fsck_info_ask (fs, "Passes 0 and 1 seems finished. "
+			    "Start from pass 2?(Yes)", "Yes\n", 1)) 
 	{
 	    fsck_exit ("Run without -d then\n");
 	}
 	
-	load_pass_1_result (fp, fs);
+	fsck_pass1_load_result (fp, fs);
 	fclose (fp);
 	return START_FROM_PASS_2;
 	
     case TREE_IS_BUILT:
-	if (!fsck_user_confirmed (fs, "Internal tree of filesystem looks built. "
-	    "Skip rebuilding?(Yes)", "Yes\n", 1))
+	if (!fsck_info_ask (fs, "Internal tree of filesystem looks built. "
+			    "Skip rebuilding?(Yes)", "Yes\n", 1))
 	{
 	    fsck_exit ("Run without -d then\n");
 	}
 	
-	load_pass_2_result (fs);
+	fsck_pass2_load_result (fs);
 	fclose (fp);
 	return START_FROM_SEMANTIC;
     case SEMANTIC_DONE:
-	if (!fsck_user_confirmed (fs, "Passes 0 and 1 seems finished. Start from "
-	    "pass 2?(Yes)", "Yes\n", 1))
+	if (!fsck_info_ask (fs, "Passes 0 and 1 seems finished. Start from "
+			    "pass 2?(Yes)", "Yes\n", 1))
 	{
 	    fsck_exit ("Run without -d then\n");
 	}
 	
-	load_semantic_result (fp, fs);
+	fsck_semantic_load_result (fp, fs);
 	fclose (fp);
 	return START_FROM_LOST_FOUND;
     case LOST_FOUND_DONE:
-	if (!fsck_user_confirmed (fs, "Passes 0 and 1 seems finished. Start from "
-	    "pass 2?(Yes)", "Yes\n", 1))
+	if (!fsck_info_ask (fs, "Passes 0 and 1 seems finished. Start from "
+			    "pass 2?(Yes)", "Yes\n", 1))
 	{
 	    fsck_exit ("Run without -d then\n");
 	}
 	
-	load_lost_found_result (fs);
+	fsck_lost_load_result (fs);
 	fclose (fp);
 	return START_FROM_PASS_4;
     }
@@ -668,12 +694,12 @@
 
 static void mark_filesystem_consistent (reiserfs_filsys_t * fs)
 {
-    if (!is_opened_rw (fs))
+    if (!reiserfs_fs_rw (fs))
         return;
 
     if (!reiserfs_journal_opened (fs)) {
 	/* make sure journal is not standard */
-	if (!is_reiserfs_jr_magic_string (fs->fs_ondisk_sb))
+	if (!reiserfs_super_jr_magic (fs->fs_ondisk_sb))
 	    reiserfs_exit(EXIT_OPER, "Filesystem with default journal "
 			  "must be opened.");
 	
@@ -682,73 +708,73 @@
 	
 	/* mark filesystem such that it is not mountable until 
 	 * new journaldevice is defined */	
-	set_jp_journal_magic (sb_jp (fs->fs_ondisk_sb), NEED_TUNE);
+	reiserfs_jp_set_magic (reiserfs_sb_jp (fs->fs_ondisk_sb), NEED_TUNE);
     }
 
-    set_sb_umount_state (fs->fs_ondisk_sb, FS_CLEANLY_UMOUNTED);
-    set_sb_fs_state (fs->fs_ondisk_sb, FS_CONSISTENT);
+    reiserfs_sb_set_umount (fs->fs_ondisk_sb, FS_CLEANLY_UMOUNTED);
+    reiserfs_sb_set_state (fs->fs_ondisk_sb, FS_CONSISTENT);
     
-    mark_buffer_dirty (fs->fs_super_bh);
+    reiserfs_buffer_mkdirty (fs->fs_super_bh);
 }
 
-static void reiserfsck_replay_journal (reiserfs_filsys_t * fs) {
-    struct reiserfs_super_block *on_place_sb;
-    int sb_size = reiserfs_super_block_size(fs->fs_ondisk_sb);
+static void reiserfsck_journal_replay (reiserfs_filsys_t * fs) {
+    reiserfs_sb_t *on_place_sb;
+    int sb_size = reiserfs_super_size(fs->fs_ondisk_sb);
     
     /* keep the super_block in the separate memory to avoid problems with replaying 
      * broken parameters. */
-    on_place_sb = (struct reiserfs_super_block *)fs->fs_super_bh->b_data;
-    fs->fs_ondisk_sb = getmem (sb_size);
+    on_place_sb = (reiserfs_sb_t *)fs->fs_super_bh->b_data;
+    fs->fs_ondisk_sb = misc_getmem (sb_size);
     memcpy (fs->fs_ondisk_sb, on_place_sb, sb_size);
 
-    replay_journal (fs);
+    reiserfs_journal_replay (fs);
 
     /* Copy checked reliable sb fields from backed up sb to a new one. */
-    set_sb_block_count(on_place_sb, get_sb_block_count(fs->fs_ondisk_sb));
-    memcpy(sb_jp(on_place_sb), sb_jp(fs->fs_ondisk_sb), 
-	sizeof(struct journal_params));    
-    set_sb_block_size(on_place_sb, get_sb_block_size(fs->fs_ondisk_sb));
-    set_sb_oid_maxsize(on_place_sb, get_sb_oid_maxsize(fs->fs_ondisk_sb));
+    reiserfs_sb_set_blocks(on_place_sb, reiserfs_sb_get_blocks(fs->fs_ondisk_sb));
+    memcpy(reiserfs_sb_jp(on_place_sb), reiserfs_sb_jp(fs->fs_ondisk_sb), 
+	sizeof(reiserfs_journal_param_t));    
+    reiserfs_sb_set_blksize(on_place_sb, reiserfs_sb_get_blksize(fs->fs_ondisk_sb));
+    reiserfs_sb_set_mapmax(on_place_sb, reiserfs_sb_get_mapmax(fs->fs_ondisk_sb));
     memcpy(on_place_sb->s_v1.s_magic, fs->fs_ondisk_sb->s_v1.s_magic, 10);
-    set_sb_hash_code(on_place_sb, get_sb_hash_code(fs->fs_ondisk_sb));
-    set_sb_bmap_nr(on_place_sb, get_sb_bmap_nr(fs->fs_ondisk_sb));
-    set_sb_version(on_place_sb, get_sb_version(fs->fs_ondisk_sb));
-    set_sb_reserved_for_journal(on_place_sb, 
-	get_sb_reserved_for_journal(fs->fs_ondisk_sb));
+    reiserfs_sb_set_hash(on_place_sb, reiserfs_sb_get_hash(fs->fs_ondisk_sb));
+    reiserfs_sb_set_bmaps(on_place_sb, reiserfs_sb_get_bmaps(fs->fs_ondisk_sb));
+    reiserfs_sb_set_version(on_place_sb, reiserfs_sb_get_version(fs->fs_ondisk_sb));
+    reiserfs_sb_set_reserved(on_place_sb, 
+	reiserfs_sb_get_reserved(fs->fs_ondisk_sb));
     
-    if (sb_size == SB_SIZE) {
-	set_sb_v2_flags(on_place_sb, get_sb_v2_flags(fs->fs_ondisk_sb));
+    if (sb_size == REISERFS_SB_SIZE) {
+	reiserfs_sb_set_flags(on_place_sb, reiserfs_sb_get_flags(fs->fs_ondisk_sb));
 	memcpy(on_place_sb->s_uuid, fs->fs_ondisk_sb->s_uuid, 16);
 	memcpy(on_place_sb->s_label, fs->fs_ondisk_sb->s_label, 16);
     }
 
     /* get rid of SB copy */
-    freemem (fs->fs_ondisk_sb);
+    misc_freemem (fs->fs_ondisk_sb);
     fs->fs_ondisk_sb = on_place_sb;
 }
 
 static int the_end (reiserfs_filsys_t * fs)
 {
-    struct reiserfs_super_block * sb;
+    reiserfs_sb_t * sb;
     int ret = EXIT_FIXED;
 
     sb = fs->fs_ondisk_sb;
 
     /* put bitmap and objectid map on place */
-    reiserfs_delete_bitmap (fs->fs_bitmap2);
+    reiserfs_bitmap_delete (fs->fs_bitmap2);
     fs->fs_bitmap2 = fsck_new_bitmap (fs);
     if (!fs->fs_bitmap2->bm_dirty)
-	die ("Bitmap not dirty");
+	misc_die ("Bitmap not dirty");
 
 //    id_map_flush(proper_id_map (fs), fs);
-    id_map_flush(semantic_id_map (fs), fs);
-    id_map_free(proper_id_map (fs));
-    id_map_free(semantic_id_map (fs));
+//    id_map_flush(semantic_id_map (fs), fs);
+//    id_map_free(proper_id_map (fs));
+//    id_map_free(semantic_id_map (fs));
 
-/*    set_sb_free_blocks (sb, reiserfs_bitmap_zeros (fsck_new_bitmap (fs)));*/
+/*    reiserfs_sb_set_free (sb, reiserfs_bitmap_zeros (fsck_new_bitmap (fs)));*/
 
     mark_filesystem_consistent (fs);
-    clear_buffer_do_not_flush (fs->fs_super_bh);
+    reiserfs_buffer_clnoflush (fs->fs_super_bh);
 
     if (fsck_data(fs)->mounted == MF_RO) {
 	reiserfs_warning(stderr, "\nThe partition is mounted ro. It "
@@ -759,8 +785,9 @@
     /* write all dirty blocks */
     fsck_progress ("Syncing..");
     fs->fs_dirt = 1;
-    clean_after_dma_check(fs->fs_dev, &dma_info);
-    reiserfs_close (fs);
+    util_device_dma_fini(fs->fs_dev, &dma_info);
+    reiserfs_fs_close (fs);
+    fs = NULL;
     fsck_progress ("finished\n");
 
     return ret;
@@ -772,15 +799,15 @@
     if (fs->fs_flags == O_RDWR) 
 	return;
 
-    reiserfs_reopen (fs, O_RDWR);
+    reiserfs_fs_reopen (fs, O_RDWR);
     
-    fsck_data(fs)->mounted = misc_device_mounted(fs->fs_file_name);
+    fsck_data(fs)->mounted = util_device_mounted(fs->fs_file_name);
     
     if (fsck_data(fs)->mounted > 0) {
 	if (fsck_data(fs)->mounted == MF_RW) {
 	    fsck_progress ("Partition %s is mounted with write permissions, "
 		"cannot check it\n", fs->fs_file_name);
-	    reiserfs_close(fs);
+	    reiserfs_fs_close(fs);
 	    exit(EXIT_USER);
 	}
 	
@@ -802,20 +829,20 @@
 	    /* just to make sure */
 	    reiserfs_panic ("Journal is not opened");
 	} else if (reiserfs_journal_params_check(fs)) {
-	    reiserfs_close (fs);
+	    reiserfs_fs_close (fs);
 	    exit(EXIT_FATAL);
 	}
 	
 	fsck_progress ("Filesystem seems mounted read-only. Skipping journal "
-	    "replay.\n");
+		       "replay.\n");
     } else if (!fsck_skip_journal (fs)) {
 	if (reiserfs_journal_params_check(fs)) {
-	    reiserfs_close (fs);
+	    reiserfs_fs_close (fs);
 	    exit(EXIT_FATAL);
 	}
 	
 	/* filesystem is not mounted, replay journal before checking */
-        reiserfsck_replay_journal (fs);
+        reiserfsck_journal_replay (fs);
     }
 }
 
@@ -823,15 +850,15 @@
     time_t t;
     int ret;
 
-    init_rollback_file (state_rollback_file(fs), &fs->fs_blocksize, 
-	fsck_data(fs)->log);
+    fsck_rollback_init (state_rollback_file(fs), &fs->fs_blocksize, 
+			fsck_data(fs)->log);
     
     prepare_fs_for_check(fs);
     
-    ret = reiserfs_open_ondisk_bitmap (fs);
+    ret = reiserfs_bitmap_open(fs);
     if (ret < 0) {
         fsck_progress ("reiserfsck: Could not open bitmap\n");
-	reiserfs_close (fs);
+	reiserfs_fs_close (fs);
 	exit(EXIT_OPER);
     } else if (ret > 0) {
 	fsck_log("Zero bit found in on-disk bitmap after the last valid bit. "
@@ -846,31 +873,31 @@
     switch (where_to_start_from (fs)) {
     case START_FROM_THE_BEGINNING:
 	reset_super_block (fs);
-	pass_0 (fs);
+	fsck_pass0 (fs);
 
     case START_FROM_PASS_1:
 	reset_super_block (fs);
-	pass_1 (fs);
+	fsck_pass1 (fs);
 	
     case START_FROM_PASS_2:
-	pass_2 (fs);
+	fsck_pass2 (fs);
 
     case START_FROM_SEMANTIC:
-	pass_3_semantic (fs);
+	fsck_semantic (fs);
 
 	/* if --lost+found is set - link unaccessed directories to lost+found
 	   directory */
     case START_FROM_LOST_FOUND:	
-	pass_3a_look_for_lost (fs);
+	fsck_lost (fs);
 	
     case START_FROM_PASS_4:
 	/* 4. look for unaccessed items in the leaves */
-	pass_4_check_unaccessed_items ();
+	fsck_cleanup ();
 	
 	ret = the_end (fs);
     }
 
-    close_rollback_file ();
+    fsck_rollback_fini ();
        
     time (&t);
     fsck_progress ("###########\n"
@@ -884,18 +911,18 @@
 
     time (&t);
 
-    if (get_sb_umount_state (fs->fs_ondisk_sb) != FS_CLEANLY_UMOUNTED) {
+    if (reiserfs_sb_get_umount (fs->fs_ondisk_sb) != FS_CLEANLY_UMOUNTED) {
         fsck_progress ("Filesystem is not clean\n"
 	    "Check consistency of the partition first.\n");
         exit(EXIT_USER);
     }
-    if (get_sb_fs_state (fs->fs_ondisk_sb) != FS_CONSISTENT) {
+    if (reiserfs_sb_get_state (fs->fs_ondisk_sb) != FS_CONSISTENT) {
         fsck_progress ("Filesystem seems to be in unconsistent state.\n"
 	    "Check consistency of the partition first.\n");
         exit(EXIT_USER);
     }
 
-    if (get_reiserfs_format (fs->fs_ondisk_sb) != REISERFS_FORMAT_3_6) {
+    if (reiserfs_super_format (fs->fs_ondisk_sb) != REISERFS_FORMAT_3_6) {
         fsck_progress ("Filesystems of 3_5 format do not support extended "
 	    "attributes.\n");
 	
@@ -905,16 +932,18 @@
 	           "reiserfsck --clean-attributes started at %s"
                    "###########\n", ctime (&t));
 
-    init_rollback_file (state_rollback_file(fs), &fs->fs_blocksize, 
-	fsck_data(fs)->log);
+    fsck_rollback_init (state_rollback_file(fs), &fs->fs_blocksize, 
+			fsck_data(fs)->log);
 
     prepare_fs_for_check(fs);
 
-    do_clean_attributes (fs);
+    fsck_tree_clean_attr(fs);
 
-    clean_after_dma_check(fs->fs_dev, &dma_info);
-    reiserfs_close (fs);
-    close_rollback_file ();
+    util_device_dma_fini(fs->fs_dev, &dma_info);
+    reiserfs_fs_close (fs);
+    fs = NULL;
+    
+    fsck_rollback_fini();
 
     fsck_progress ("###########\n"
 		   "reiserfsck finished at %s"
@@ -943,9 +972,9 @@
     __u16 state;
     int retval = 0;
     
-    print_super_block (stdout, fs, fs->fs_file_name, fs->fs_super_bh, 1);
+    reiserfs_super_print (stdout, fs, fs->fs_file_name, fs->fs_super_bh, 1);
     
-    state = get_sb_fs_state (fs->fs_ondisk_sb);
+    state = reiserfs_sb_get_state (fs->fs_ondisk_sb);
     if ((state & FS_FATAL) == FS_FATAL) {
 	fprintf(stderr, "Filesystem seems to have fatal corruptions. Running "
 	    "with --rebuild-tree is required.\n");
@@ -966,7 +995,7 @@
     prepare_fs_for_check(fs);
 
     /* Check bitmaps. */
-    retval = reiserfs_open_ondisk_bitmap (fs);
+    retval = reiserfs_bitmap_open (fs);
     
     if (retval > 0) {
 	fsck_log("Zero bit found in on-disk bitmap after the last valid bit. "
@@ -978,8 +1007,8 @@
 	goto error;
     }
     
-    if (get_sb_block_count (fs->fs_ondisk_sb) - 
-	get_sb_free_blocks(fs->fs_ondisk_sb) != 
+    if (reiserfs_sb_get_blocks (fs->fs_ondisk_sb) - 
+	reiserfs_sb_get_free(fs->fs_ondisk_sb) != 
 	fs->fs_bitmap2->bm_set_bits)
     {
 	fsck_log("Wrong amount of used blocks. Switching to the --fix-fixable mode.\n");
@@ -1003,21 +1032,21 @@
 	return 0;
     }
     
-    clean_after_dma_check(fs->fs_dev, &dma_info);
+    util_device_dma_fini(fs->fs_dev, &dma_info);
     
     fsck_sleep();
     
-    reiserfs_close (fs);
+    reiserfs_fs_close (fs);
     /* do not do anything else. */    
     exit (EXIT_OK);
 
 fatal_error:
-    set_sb_fs_state(fs->fs_ondisk_sb, FS_FATAL);
-    mark_buffer_dirty (fs->fs_super_bh);
-    bwrite(fs->fs_super_bh);	
+    reiserfs_sb_set_state(fs->fs_ondisk_sb, FS_FATAL);
+    reiserfs_buffer_mkdirty (fs->fs_super_bh);
+    reiserfs_buffer_write(fs->fs_super_bh);	
 error:
-    clean_after_dma_check(fs->fs_dev, &dma_info);
-    reiserfs_close(fs);
+    util_device_dma_fini(fs->fs_dev, &dma_info);
+    reiserfs_fs_close(fs);
     exit(EXIT_FATAL);
 }
 
@@ -1039,14 +1068,14 @@
                        "###########\n", ctime (&t));
     }
 
-    init_rollback_file (state_rollback_file(fs), &fs->fs_blocksize, 
-	fsck_data(fs)->log);
+    fsck_rollback_init (state_rollback_file(fs), &fs->fs_blocksize, 
+			fsck_data(fs)->log);
     
     prepare_fs_for_check (fs);
 
     if (!fs->fs_bitmap2)
 	/* It could be done on auto_check already. */
-	retval = reiserfs_open_ondisk_bitmap (fs);
+	retval = reiserfs_bitmap_open (fs);
 
     if (retval > 0) {
 	if (fsck_mode(fs) != FSCK_FIX_FIXABLE) {
@@ -1060,20 +1089,20 @@
 	}
     } else if (retval < 0) {
         fsck_progress ("reiserfsck: Could not open bitmap\n");
-	reiserfs_close (fs);
+	reiserfs_fs_close (fs);
 	exit(EXIT_OPER);
     }
 
     check_fs_tree (fs);
 
-    semantic_check ();
+    fsck_semantic_check ();
     
     if (fsck_data (fs)->check.fatal_corruptions) {
 	fsck_progress ("%lu found corruptions can be fixed only when running with "
 	    "--rebuild-tree\n", fsck_data (fs)->check.fatal_corruptions);
 	
-        set_sb_fs_state (fs->fs_ondisk_sb, FS_FATAL);
-        mark_buffer_dirty (fs->fs_super_bh);
+        reiserfs_sb_set_state (fs->fs_ondisk_sb, FS_FATAL);
+        reiserfs_buffer_mkdirty (fs->fs_super_bh);
 	retval = EXIT_FATAL;
     } else if (fsck_data (fs)->check.fixable_corruptions) {
         /* fixable corruptions found */
@@ -1090,14 +1119,14 @@
 	    
 	    retval = EXIT_FIXABLE;
         }
-        set_sb_fs_state (fs->fs_ondisk_sb, FS_ERROR);
-        mark_buffer_dirty (fs->fs_super_bh);
+        reiserfs_sb_set_state (fs->fs_ondisk_sb, FS_ERROR);
+        reiserfs_buffer_mkdirty (fs->fs_super_bh);
     } else {
+	fsck_stage_report (FS_CHECK, fs);
 	fsck_progress ("No corruptions found\n");
-	stage_report (5, fs);
 
 	if (fsck_mode(fs) != FSCK_CHECK) {
-		if (misc_device_mounted(fs->fs_file_name) == MF_RO) {
+		if (util_device_mounted(fs->fs_file_name) == MF_RO) {
 			reiserfs_warning(stderr, "\nThe partition is mounted ro. It is better "
 					 "to umount and mount it again.\n\n");
 			retval = EXIT_REBOOT;
@@ -1113,9 +1142,11 @@
         id_map_flush(proper_id_map (fs), fs);
         
     id_map_free(proper_id_map (fs));
-    clean_after_dma_check(fs->fs_dev, &dma_info);
-    reiserfs_close (fs);
-    close_rollback_file ();
+    util_device_dma_fini(fs->fs_dev, &dma_info);
+    reiserfs_fs_close (fs);
+    fs = NULL;
+    
+    fsck_rollback_fini();
     
     //clear_relocated_list();    
     
@@ -1132,7 +1163,11 @@
 {
     int fd;
 
-    fd = open (file_name, O_RDWR | O_LARGEFILE);
+    fd = open (file_name, O_RDWR 
+#ifdef O_LARGEFILE
+	       | O_LARGEFILE
+#endif
+	       );
 
     if (fd == -1) {
         reiserfs_warning (stderr, "reiserfsck: Cannot not open the fs "
@@ -1141,29 +1176,33 @@
         return -1;
     }
 
-    fs = getmem (sizeof (*fs));
+    fs = misc_getmem (sizeof (*fs));
     fs->fs_dev = fd;
     fs->fs_vp = data;
-    asprintf (&fs->fs_file_name, "%s", file_name);
+    strncpy(fs->fs_file_name, file_name, sizeof(fs->fs_file_name));
 
     if (data->journal_dev_name && 
 	strcmp (data->journal_dev_name, file_name)) 
     {
-	fs->fs_journal_dev = open (data->journal_dev_name, 
-	    O_RDWR | O_LARGEFILE);
+	fs->fs_journal_dev = open (data->journal_dev_name, O_RDWR 
+#ifdef O_LARGEFILE
+				   | O_LARGEFILE
+#endif
+				   );
+	
 	if (fs->fs_journal_dev == -1) {
 	    reiserfs_warning (stderr, "Cannot open journal partition\n");
      	    return -1;
 	}
     }
 
-    if (open_rollback_file (state_rollback_file(fs), fsck_data(fs)->log))
+    if (fsck_rollback_prep (state_rollback_file(fs), fsck_data(fs)->log))
         return -1;
 
     return 0;    	
 }
 
-static void fsck_rollback (reiserfs_filsys_t * fs) {
+static void fsck_perform_rollback (reiserfs_filsys_t * fs) {
     time_t t;
 
     time (&t);
@@ -1171,14 +1210,12 @@
 	           "reiserfsck --rollback-fsck-changes started at %s"
                    "###########\n", ctime (&t));
 
-    do_fsck_rollback (fs->fs_dev, fs->fs_journal_dev, fsck_progress_file (fs));
-    close_rollback_file ();
+    fsck_rollback (fs->fs_dev, fs->fs_journal_dev, fsck_progress_file (fs));
+    fsck_rollback_fini ();
 
     close (fs->fs_journal_dev);
-    free (fs->fs_file_name);
-    fs->fs_file_name = 0;
     close (fs->fs_dev);
-    freemem (fs);
+    misc_freemem (fs);
 
     time (&t);
     fsck_progress ("###########\n"
@@ -1193,21 +1230,9 @@
     char * file_name;
     struct fsck_data * data;
     struct rlimit rlim = {RLIM_INFINITY, RLIM_INFINITY};
-    char *width;
     int retval;
     int error;
     
-    width = getenv("COLUMNS");
-    if ( width )
-	screen_width = atoi(width);
-    
-    if (screen_width == 0)
-	screen_width = 80; // We default to 80 characters wide screen
-    screen_width--;
-    screen_savebuffer_len=screen_width;
-    screen_savebuffer=getmem(screen_width+1);
-    memset(screen_savebuffer,0,screen_savebuffer_len+1);
-    
     lost_found_dir_key.k2_dir_id = cpu_to_le32(lost_found_dir_key.k2_dir_id);
     lost_found_dir_key.k2_objectid = cpu_to_le32(lost_found_dir_key.k2_objectid);
     /* this is only needed (and works) when running under 2.4 on regular files */
@@ -1216,15 +1241,15 @@
 	    "with setrlimit: %s\n", strerror(errno));
     }
 
-    data = getmem (sizeof (struct fsck_data));
+    data = misc_getmem (sizeof (struct fsck_data));
 
     file_name = parse_options (data, argc, argv);
 
     if (data->mode != FSCK_AUTO)
-	print_banner ("reiserfsck");
+	util_print_banner ("reiserfsck");
 
     if (data->mode == DO_NOTHING) {
-	freemem (data);
+	misc_freemem (data);
 	exit(EXIT_OK);
     }
 
@@ -1260,8 +1285,8 @@
     	if (open_devices_for_rollback (file_name, data) == -1)
     	    exit(EXIT_OPER);
     } else {
-	fs = reiserfs_open (file_name, O_RDONLY, &error, data, 
-	    data->mode != FSCK_SB);
+	fs = reiserfs_fs_open (file_name, O_RDONLY, &error, data, 
+			       data->mode != FSCK_SB);
 		
 	if (error) {
 		reiserfs_exit(EXIT_OPER, "Failed to open the device "
@@ -1269,7 +1294,7 @@
 	} 
 	
 	if (data->mode != FSCK_SB) {
-	    if (no_reiserfs_found (fs)) {
+	    if (fs == NULL) {
 		reiserfs_exit(EXIT_OPER, "Failed to open the filesystem.\n\n"
 			      "If the partition table has not been changed, "
 			      "and the partition is\nvalid  and  it really  "
@@ -1278,7 +1303,7 @@
 			      "this utility with\n--rebuild-sb.\n");
 	    }
 	    if (fsck_skip_journal (fs) && 
-		!is_reiserfs_jr_magic_string (fs->fs_ondisk_sb)) 
+		!reiserfs_super_jr_magic (fs->fs_ondisk_sb)) 
 	    {
 		reiserfs_warning (stderr, "Filesystem with default journal found, "
 			"--no-journal-available is ignored\n");
@@ -1286,7 +1311,7 @@
 	    }
 	
 	    if (!fsck_skip_journal (fs)) {
-		retval = reiserfs_open_journal(fs, data->journal_dev_name, O_RDONLY);
+		retval = reiserfs_journal_open(fs, data->journal_dev_name, O_RDONLY);
 		
 		if (retval) {
 	            fsck_progress ("Failed to open the journal device (%s).\n", 
@@ -1296,13 +1321,13 @@
 			    fsck_progress ("Run --rebuild-sb to rebuild journal parameters.\n");
 		    }
 		    
-		    reiserfs_close (fs);
+		    reiserfs_fs_close (fs);
 		    exit(EXIT_OPER);
 	        }
 	    }
 	
 	    if (data->options & BADBLOCKS_FILE) {
-		if (create_badblock_bitmap (fs, badblocks_file) != 0) 
+		if (util_badblock_load (fs, badblocks_file) != 0) 
 		    exit(EXIT_OPER);
 	    }
 	    
@@ -1331,7 +1356,7 @@
 	break;
 
     case FSCK_ROLLBACK_CHANGES:
-	fsck_rollback (fs);
+	fsck_perform_rollback (fs);
  	break;
     case FSCK_CLEAN_ATTRIBUTES:
 	clean_attributes (fs);
diff --git a/utils/fsck/pass0.c b/utils/fsck/pass0.c
new file mode 100644
index 0000000..7659190
--- /dev/null
+++ b/utils/fsck/pass0.c
@@ -0,0 +1,2018 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "fsck.h"
+#include "misc/malloc.h"
+#include "misc/unaligned.h"
+#include "util/misc.h"
+#include "util/device.h"
+
+#include <assert.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <time.h>
+
+
+/* 
+ * Pass0 scans the used part of the partition. It creates two maps which will 
+ * be used on the pass 1. These are a map of nodes looking like leaves and 
+ * a map of "bad" unformatted nodes. After pass 0 we can detect unformatted 
+ * node pointers pointing to leaves. 
+ */
+
+
+/* leaves */
+reiserfs_bitmap_t * leaves_bitmap;
+
+#define pass0_block_mkleaf(block) \
+	reiserfs_bitmap_set_bit(leaves_bitmap, block)
+
+int pass0_block_isleaf(unsigned long block) {
+	return reiserfs_bitmap_test_bit(leaves_bitmap, block);
+}
+
+void pass0_block_clleaf(unsigned long block) {
+	reiserfs_bitmap_clear_bit(leaves_bitmap, block);
+}
+
+/* nodes which are referred to from only one extent item */
+reiserfs_bitmap_t * good_unfm_bitmap;
+#define pass0_block_mkgood_unfm(block)	\
+	reiserfs_bitmap_set_bit(good_unfm_bitmap, block)
+#define pass0_block_clgood_unfm(block)	\
+	reiserfs_bitmap_clear_bit(good_unfm_bitmap, block)
+
+int pass0_block_isgood_unfm(unsigned long block) {
+	return reiserfs_bitmap_test_bit(good_unfm_bitmap, block);
+}
+
+/* nodes which are referred to from more than one extent item */
+reiserfs_bitmap_t * bad_unfm_bitmap;
+#define pass0_block_mkbad_unfm(block)	\
+	reiserfs_bitmap_set_bit(bad_unfm_bitmap, block)
+#define pass0_block_clbad_unfm(block)	\
+	reiserfs_bitmap_clear_bit(bad_unfm_bitmap, block)
+
+int pass0_block_isbad_unfm(unsigned long block) {
+	return reiserfs_bitmap_test_bit(bad_unfm_bitmap, block);
+}
+
+static int correct_direct_item_offset (reiserfs_ih_t *ih, 
+				       reiserfs_filsys_t *fs) 
+{
+    __u64 offset;
+    __u64 len;
+    int format;
+
+    offset = reiserfs_key_get_off (&ih->ih_key);
+    format = reiserfs_key_format (&ih->ih_key);
+    
+    if (offset == 0)
+	return 0;
+    
+    if (format == KEY_FORMAT_2) {
+	if ((offset - 1) % 8 != 0)
+	    return 0;
+    } 
+
+    len = reiserfs_ih_get_len(ih) + offset - 1;
+    offset = MISC_DOWN(offset - 1, fs->fs_blocksize);
+    
+    if (reiserfs_policy_ext (len, len - offset, fs->fs_blocksize))
+	return 0;
+    
+    return 1;
+}
+
+/* bitmaps which are built on pass 0 and are used on pass 1 */
+static void fsck_pass0_aux_prep (reiserfs_filsys_t * fs)
+{
+    reiserfs_sb_t * sb;
+
+    sb = fs->fs_ondisk_sb;
+
+    /* bitmap of leaves found on the device */
+    leaves_bitmap = reiserfs_bitmap_create (reiserfs_sb_get_blocks (sb));
+
+    good_unfm_bitmap = reiserfs_bitmap_create (reiserfs_sb_get_blocks (sb));
+
+    bad_unfm_bitmap = reiserfs_bitmap_create (reiserfs_sb_get_blocks (sb));
+}
+
+void fsck_pass0_aux_fini (void) {
+    reiserfs_bitmap_delete (leaves_bitmap);
+    reiserfs_bitmap_delete (good_unfm_bitmap);
+    reiserfs_bitmap_delete (bad_unfm_bitmap);
+}
+
+
+/* register block some extent item points to */
+static void register_unfm (unsigned long block)
+{
+    if (!pass0_block_isgood_unfm (block) && 
+	!pass0_block_isbad_unfm (block)) 
+    {
+	/* this block was not pointed by other extent items yet */
+	pass0_block_mkgood_unfm (block);
+	return;
+    }
+
+    if (pass0_block_isgood_unfm (block)) {
+	/* block was pointed once already, unmark it in bitmap of good
+           unformatted nodes and mark in bitmap of bad pointers */
+	pass0_block_clgood_unfm (block);
+	pass0_block_mkbad_unfm (block);
+	return;
+    }
+
+    assert (pass0_block_isbad_unfm (block));
+}
+
+
+/* 'upper' item is correct if 'upper + 2' exists and its key is greater than
+   key of 'upper' */
+static int upper_correct (reiserfs_bh_t * bh, reiserfs_ih_t * upper,
+			  int upper_item_num)
+{
+    if (upper_item_num + 2 < reiserfs_node_items (bh)) {
+	if (reiserfs_key_comp (&upper->ih_key, &(upper + 2)->ih_key) != -1)
+	    /* item-num's item is out of order of order */
+	    return 0;
+	return 1;
+    }
+    
+    /* there is no item above the "bad pair" */
+    return 2;
+}
+
+
+/* 'lower' item is correct if 'lower - 2' exists and its key is smaller than
+   key of 'lower' */
+static int lower_correct (reiserfs_bh_t * bh, reiserfs_ih_t * lower,
+			  int lower_item_num)
+{
+    if (lower_item_num - 2 >= 0) {
+	if (reiserfs_key_comp (&(lower - 2)->ih_key, &lower->ih_key) != -1)
+	    return 0;
+	return 1;
+    }
+    return 2;
+}
+
+
+/* return 1 if something was changed */
+static int correct_key_format (reiserfs_ih_t * ih, int symlink) 
+{
+    int dirty = 0;
+
+    if (reiserfs_ih_stat (ih)) {
+	/* for stat data we have no way to check whether key format in item
+	   head matches to the key format found from the key directly */
+	if (reiserfs_ih_get_len (ih) == REISERFS_SD_SIZE_V1) {
+	    if (reiserfs_ih_get_format (ih) != KEY_FORMAT_1) {
+		/*fsck_log ("correct_key_format: ih key format of (%H) is "
+			    "set to format 1\n", ih);*/
+		    
+		reiserfs_ih_set_format (ih, KEY_FORMAT_1);
+		return 1;
+	    }
+	    return 0;
+	}
+	if (reiserfs_ih_get_len (ih) == REISERFS_SD_SIZE) {
+	    if (reiserfs_ih_get_format (ih) != KEY_FORMAT_2) {
+		/*fsck_log ("correct_key_format: ih key format of (%H) "
+			    "is set to format 2\n", ih);*/
+		reiserfs_ih_set_format (ih, KEY_FORMAT_2);
+		return 1;
+	    }
+	    return 0;
+	}
+	
+	misc_die ("stat_data item of the wrong length");
+    }
+    
+    if (symlink && (reiserfs_key_format(&ih->ih_key) != KEY_FORMAT_1)) {
+	/* All symlinks are of 3.5 format */
+	/*fsck_log ("correct_key_format: Symlink keys should be of 3.5 "
+		    "format. %k - fixed.\n", &ih->ih_key); */
+	reiserfs_key_set_sec(KEY_FORMAT_1, &ih->ih_key, 
+			     reiserfs_key_get_off(&ih->ih_key), 
+			     reiserfs_key_get_type(&ih->ih_key));
+    }
+	
+    if (reiserfs_key_format (&ih->ih_key) != reiserfs_ih_get_format (ih)) {
+	/*fsck_log ("correct_key_format: ih key format of (%H) is "
+		    "set to format found in the key\n", ih);*/
+	reiserfs_ih_set_format (ih, reiserfs_key_format (&ih->ih_key));
+	dirty = 1;
+    }
+    
+    return dirty;
+}
+
+static void hash_hits_init (reiserfs_filsys_t * fs)
+{
+    fsck_data (fs)->rebuild.hash_amount = REISERFS_HASH_LAST;
+    fsck_data (fs)->rebuild.hash_hits = misc_getmem (sizeof (unsigned long) * 
+		    fsck_data (fs)->rebuild.hash_amount);
+}
+
+
+static void add_hash_hit (reiserfs_filsys_t * fs, int hash_code)
+{
+    fsck_data (fs)->rebuild.hash_hits [hash_code] ++;
+}
+
+
+/* deh_location look reasonable, try to find name length. return 0 if
+   we failed */
+static int try_to_get_name_length (reiserfs_ih_t * ih, 
+				   reiserfs_deh_t * deh,
+				   int i)
+{
+    int len;
+
+    if (i == 0 || !reiserfs_deh_locbad (deh - 1)) {
+	len = reiserfs_direntry_name_len (ih, deh, i);
+	return (len > 0) ? len : 0;
+    }
+
+    /* previous entry had bad location so we had no way to find
+       name length */
+    return 0;
+}
+
+
+
+/* define this if you are using -t to debug recovering of corrupted directory
+   item */
+#define DEBUG_VERIFY_DENTRY
+#undef DEBUG_VERIFY_DENTRY
+
+
+/* check directory item and try to recover something */
+static int verify_directory_item (reiserfs_filsys_t * fs, 
+				  reiserfs_bh_t * bh,
+				  int item_num)
+{
+    reiserfs_ih_t * ih;
+    reiserfs_ih_t tmp;
+    char * item;
+    reiserfs_deh_t * deh;
+    char * name;
+    int name_len;
+    int bad, lost_found;
+    int i, j;
+    int dirty;
+    int hash_code;
+    int bad_locations;
+    int min_entry_size = 1;
+
+#ifdef DEBUG_VERIFY_DENTRY
+    char * direntries;
+#endif
+
+
+    ih = reiserfs_ih_at (bh, item_num);
+    item = reiserfs_item_by_ih (bh,ih);
+    deh = (reiserfs_deh_t *)item;
+
+    dirty = 0;
+    bad_locations = 0;
+ 
+    if ( (reiserfs_ih_get_entries (ih) > 
+	  (reiserfs_ih_get_len(ih) / (REISERFS_DEH_SIZE + min_entry_size))) ||
+          (reiserfs_ih_get_entries (ih) == 0))
+    {
+        reiserfs_ih_set_entries (ih, (int)reiserfs_ih_get_len(ih) / 
+			    (REISERFS_DEH_SIZE + min_entry_size));
+	
+        reiserfs_buffer_mkdirty (bh);
+    }
+
+    if (reiserfs_ih_get_entries (ih) == 0) {
+	reiserfs_leaf_delete_item (fs, bh, item_num);
+	return -1;
+    }
+
+
+    /* check deh_location */
+    for (i = 0; i < reiserfs_ih_get_entries (ih); i ++) {
+	/* silently fix deh_state */
+	if (reiserfs_deh_get_state (deh + i) != (1 << DEH_Visible2)) {
+	    reiserfs_deh_set_state (deh + i, (1 << DEH_Visible2));
+	    reiserfs_buffer_mkdirty (bh);
+	}
+	if (reiserfs_direntry_loc_check (deh + i, ih, !i))
+	    reiserfs_deh_set_locbad (deh + i);
+    }    
+
+#ifdef DEBUG_VERIFY_DENTRY
+    direntries = misc_getmem (ih_entry_count (ih) * sizeof (int));
+
+    printf ("Entries with bad locations within the directory: ");
+    for (i = 0; i < ih_entry_count (ih); i ++) {
+	if (reiserfs_deh_locbad (deh + i))
+	    printf ("%d ", i);
+    }
+    
+    printf ("\n");
+#endif /* DEBUG_VERIFY_DENTRY */
+
+
+    /* find entries names in which have mismatching deh_offset */
+    for (i = reiserfs_ih_get_entries (ih) - 1; i >= 0; i --) {
+	if (reiserfs_deh_bad (deh + i))
+	    /* bad location */
+	    continue;
+
+	if (i) {
+	    if (reiserfs_deh_get_loc (deh + i - 1) < 
+		reiserfs_deh_get_loc (deh + i))
+	    {
+		reiserfs_deh_set_locbad (deh + i - 1);
+	    }
+	}
+
+	name = reiserfs_deh_name (deh + i, i);
+	/* Although we found a name, we not always can get its length as
+           it depends on deh_location of previous entry. */
+	name_len = try_to_get_name_length (ih, deh + i, i);
+
+#ifdef DEBUG_VERIFY_DENTRY
+	if (name_len == 0)
+	    printf ("Trying to find the name length for %d-th entry\n", i);
+#endif /* DEBUG_VERIFY_DENTRY */
+	if (is_dot (name, name_len)) {
+	    if (i != 0)
+		fsck_log ("block %lu: item %d: \".\" must be the first entry, "
+			  "but it is the %d-th entry\n", bh->b_blocknr, 
+			  item_num, i);
+	    
+	    /* check and fix "." */
+	    
+	    if (reiserfs_deh_get_off (deh + i) != OFFSET_DOT) {
+		reiserfs_deh_set_off (deh + i, OFFSET_DOT);
+		reiserfs_buffer_mkdirty (bh);
+	    }
+	    /* "." must point to the directory it is in */
+/*
+	    if (reiserfs_key_comp2 (&(deh[i].deh2_dir_id), &(ih->ih_key))) {
+		fsck_log ("verify_direntry: block %lu, item %H has entry \".\" "
+			  "pointing to (%K) instead of (%K)\n", 
+			  bh->b_blocknr, ih,
+			  &(deh[i].deh2_dir_id), &(ih->ih_key));
+		reiserfs_deh_set_did (deh + i, reiserfs_key_get_did (&ih->ih_key));
+		reiserfs_deh_set_obid (deh + i, reiserfs_key_get_oid (&ih->ih_key));
+		reiserfs_buffer_mkdirty (bh);
+	    }
+*/
+	} else if (is_dot_dot (name, name_len)) {
+	    if (i != 1)
+		fsck_log ("block %lu: item %d: \"..\" is %d-th entry\n",
+			  bh->b_blocknr, item_num, i);
+	    
+	    /* check and fix ".." */
+	    if (reiserfs_deh_get_off (deh + i) != OFFSET_DOT_DOT) {
+		reiserfs_deh_set_off (deh + i, OFFSET_DOT_DOT);
+		reiserfs_buffer_mkdirty (bh);
+	    }
+	} else {
+	    int min_length, max_length;
+
+	    /* check other name */
+
+	    if (name_len == 0) {
+		/* we do not know the length of name - we will try to find it */
+		min_length = 1;
+		max_length = item + reiserfs_ih_get_len (ih) - name;
+	    } else
+		/* we kow name length, so we will try only one name length */
+		min_length = max_length = name_len;
+
+	    hash_code = 0;
+
+	    for (j = min_length; j <= max_length; j ++) {
+		hash_code = reiserfs_hash_find (name, j, 
+			reiserfs_deh_get_off(deh + i), 
+			reiserfs_sb_get_hash(fs->fs_ondisk_sb));
+		
+/*		add_hash_hit (fs, hash_code);*/
+		if (reiserfs_hash_func (hash_code) != 0) {
+		    /* deh_offset matches to some hash of the name */
+		    if (fsck_hash_defined (fs) && 
+			hash_code != reiserfs_hash_code (fs->hash)) 
+		    {
+			/* wrong hash selected - so we can skip this leaf */
+			return 1;
+		    }
+
+		    if (!name_len) {
+			fsck_log ("%s: block %lu, item %H: Found a name "
+				  "\"%.*s\" for %d-th entry matching to the "
+				  "hash %u.\n", __FUNCTION__, bh->b_blocknr, 
+				  ih, j, name, i, reiserfs_deh_get_off (deh + i));
+			
+			/* FIXME: if next byte is 0 we think that the name is 
+			   aligned to 8 byte boundary */
+			
+			if (i) {
+			    reiserfs_deh_set_loc (&deh[i - 1], 
+					      reiserfs_deh_get_loc (deh + i) +
+					      ((name[j] || fs->fs_format == 
+						REISERFS_FORMAT_3_5) ? j : 
+					       MISC_ROUND_UP (j)));
+			    
+			    reiserfs_deh_set_locok (deh + i - 1);
+			    reiserfs_buffer_mkdirty (bh);
+			}
+		    }
+		    
+		    break;
+		}
+	    }
+
+	    add_hash_hit (fs, hash_code);
+
+	    if (j == max_length + 1) {
+		/* deh_offset does not match to anything. it will be
+		   deleted for now, but maybe we could just fix a
+		   deh_offset if it is in ordeer */
+		reiserfs_deh_set_offbad (deh + i);
+	    }
+	}
+    } /* for */
+
+#ifdef DEBUG_VERIFY_DENTRY
+    printf ("Entries with mismatching hash: ");
+    for (i = 0; i < ih_entry_count (ih); i ++) {
+	if (reiserfs_deh_offbad (deh + i))
+	    printf ("%d ", i);
+    }
+    printf ("\n");
+#endif /* DEBUG_VERIFY_DENTRY */
+
+
+    /* correct deh_locations such that code cutting entries will not get
+       screwed up */
+    {
+	int prev_loc;
+	int loc_fixed;
+
+
+	prev_loc = reiserfs_ih_get_len (ih);
+	for (i = 0; i < reiserfs_ih_get_entries (ih); i ++) {
+	    loc_fixed = 0;
+	    if (reiserfs_deh_locbad (deh + i)) {
+		reiserfs_deh_set_loc (deh + i, prev_loc/* - 1*/);
+		reiserfs_buffer_mkdirty (bh);
+		loc_fixed = 1;
+	    } else {
+		if (reiserfs_deh_get_loc (deh + i) >= prev_loc) {
+		    reiserfs_deh_set_loc (deh + i, prev_loc/* - 1*/);
+		    reiserfs_buffer_mkdirty (bh);
+		    loc_fixed = 1;
+		}
+	    }
+
+	    prev_loc = reiserfs_deh_get_loc (deh + i);
+	    
+	    if (i == reiserfs_ih_get_entries (ih) - 1) {
+		/* last entry starts right after an array of direntry headers */
+		if (!reiserfs_deh_bad (deh + i) &&
+		    reiserfs_deh_get_loc (deh + i) != 
+		    (REISERFS_DEH_SIZE * reiserfs_ih_get_entries (ih))) 
+		{
+		    /* free space in the directory item */
+		    fsck_log ("%s: block %lu, item %H: Directory item has a "
+			      "free space - deleting\n", __FUNCTION__, 
+			      bh->b_blocknr, ih);
+		    
+		    reiserfs_leaf_delete_entry (fs, bh, item_num, 
+			    reiserfs_ih_get_entries (ih), 0);
+		}
+		
+		if (reiserfs_deh_get_loc (deh + i) != 
+		    (REISERFS_DEH_SIZE * reiserfs_ih_get_entries (ih))) 
+		{
+		    reiserfs_deh_set_loc (&deh[i], 
+			    (REISERFS_DEH_SIZE * reiserfs_ih_get_entries (ih)));
+		    loc_fixed = 1;
+		    reiserfs_buffer_mkdirty (bh);
+		}
+	    }
+
+#ifdef DEBUG_VERIFY_DENTRY
+	    if (loc_fixed)
+		direntries [i] = 1;
+#endif
+	} /* for */
+
+#ifdef DEBUG_VERIFY_DENTRY
+	printf ("Entries with fixed deh_locations: ");
+	for (i = 0; i < ih_entry_count (ih); i ++) {
+	    if (direntries [i])
+		printf ("%d ", i);
+	}
+	printf ("\n");
+#endif /* DEBUG_VERIFY_DENTRY */
+
+    }
+
+#ifdef DEBUG_VERIFY_DENTRY
+    printf (" N  location name\n");
+    for (i = 0; i < ih_entry_count (ih); i ++) {
+	if (reiserfs_deh_bad (deh + i) ||
+	    (i && reiserfs_deh_bad (deh + i - 1)) || /* previous entry marked bad */
+	    (i < ih_entry_count (ih) - 1 && reiserfs_deh_bad (deh + i + 1))) 
+	{
+	    /* next entry is marked bad */
+	    /* print only entries to be deleted and their nearest neighbors */
+	    printf ("%3d: %8d ", i, deh_location (deh + i));
+	    if (reiserfs_deh_bad (deh + i))
+		printf ("will be deleted\n");
+	    else
+		printf ("\"%.*s\"\n", 
+			reiserfs_direntry_name_len (ih, deh + i, i),
+			reiserfs_deh_name (deh + i, i));
+	}
+    }
+    
+#endif
+
+    bad = lost_found = 0;
+    tmp = *ih;
+
+    /* mark enries of /lost+found as bad */
+    deh = reiserfs_deh (bh, ih);
+    for (i = 0; i < reiserfs_ih_get_entries (ih); i ++, deh ++) {
+	unsigned int dirid, objectid;
+	char buf[REISERFS_NAME_MAX];
+
+	if (reiserfs_deh_bad (deh))
+	    continue;
+
+	buf[0] = '\0';
+	sprintf (buf, "%.*s", reiserfs_direntry_name_len (ih, deh, i), 
+		 reiserfs_deh_name (deh, i));
+	
+	if (sscanf (buf, "%d_%d", &dirid, &objectid) != 2)
+	    continue;
+	
+	if (reiserfs_deh_get_did (deh) != dirid || reiserfs_deh_get_obid (deh) != objectid)
+	    continue;
+	
+	/* entry in lost+found */
+//	printf ("%s - will be deleted\n", buf);
+	lost_found++;
+	reiserfs_deh_set_offbad (deh);
+    }
+
+    /* delete entries which are marked bad */
+    for (i = 0; i < reiserfs_ih_get_entries (ih); i ++) {
+	deh = reiserfs_deh (bh, ih) + i;
+	if (reiserfs_deh_bad (deh)) {
+	    bad ++;
+	    if (reiserfs_ih_get_entries (ih) == 1) {
+		reiserfs_leaf_delete_item (fs, bh, item_num);
+		
+		fsck_log ("%s: block %lu, item %H: All entries were deleted from "
+		      "the directory\n", __FUNCTION__, bh->b_blocknr, &tmp);
+		
+		return -1;
+	    } else {
+		reiserfs_leaf_delete_entry (fs, bh, item_num, i, 1);
+	    }
+	    i --;
+	}
+    }
+    
+    deh = reiserfs_deh (bh, ih);
+    if (reiserfs_key_get_off (&ih->ih_key) != reiserfs_deh_get_off (deh)) {
+	fsck_log ("verify_direntry: block %lu, item %H: Key's offset %k must "
+		  "match the directory's hash (%u) - changed.\n", bh->b_blocknr,
+		  ih, &ih->ih_key, reiserfs_deh_get_off (deh));
+	
+	reiserfs_key_set_off (reiserfs_key_format (&ih->ih_key), 
+				 &ih->ih_key, reiserfs_deh_get_off (deh));
+	
+	reiserfs_buffer_mkdirty (bh);
+    }
+    
+    if (bad > lost_found)
+	fsck_log ("pass0: block %lu, item %H: %d entries were deleted\n",
+		  bh->b_blocknr, &tmp, bad - lost_found);
+	
+    return 0;
+
+}
+
+
+static __inline__ int does_it_fit_into_dev (__u64 offset, __u64 fs_size) {
+/* 
+   Count of unformatted pointers :
+	offset / blocksize
+   Count of blocks to store them :
+	REISERFS_EXT_SIZE * offset / blocksize / REISERFS_ITEM_MAX
+   Size to store it :
+	blocksize * REISERFS_EXT_SIZE * offset / blocksize / REISERFS_ITEM_MAX
+*/
+
+   return ( REISERFS_EXT_SIZE * offset / REISERFS_ITEM_MAX(fs->fs_blocksize) < 
+	    fs_size) ? 1 : 0;
+}
+
+
+static int is_wrong_short_key (reiserfs_key_t * key) {
+    if (reiserfs_key_get_did (key) == 0 || 
+	reiserfs_key_get_oid (key) == 0 || 
+	reiserfs_key_get_oid (key) == 1 ||
+	reiserfs_key_get_did (key) == ~(__u32)0 || 
+	reiserfs_key_get_oid (key) == ~(__u32)0 ||
+	reiserfs_key_get_did (key) == reiserfs_key_get_oid (key) ||
+	/* the alloc=packing_groups used to allow dirid = 1
+	(reiserfs_key_get_did (key) == 1 && reiserfs_key_get_oid (key) != 2) || */
+	(reiserfs_key_get_did (key) != 1 && reiserfs_key_get_oid (key) == 2) )
+    {
+	return 1;
+    }
+
+    return 0;
+}
+
+/* do this on pass 0 with every leaf marked used */
+
+/* FIXME: we can improve fixing of broken keys: we can ssfe direct items 
+   which go after stat data and have broken keys */
+static void pass0_correct_leaf (reiserfs_filsys_t * fs,
+				reiserfs_bh_t * bh)
+{
+    int file_format = KEY_FORMAT_UNDEFINED;
+    reiserfs_ih_t * ih;
+    
+    __u32 * ind_item;
+    __u64 fs_size;
+    __u64 offset;
+    int symlnk = 0;
+    int bad_order;
+    
+    unsigned long unfm_ptr;
+//    unsigned int nr_items;
+    int i, j, nr_items;
+    int dirty = 0;
+
+    fsck_leaf_check_header(fs, bh);
+
+    /* Delete all safe links. */
+    for (i = reiserfs_nh_get_items (NODE_HEAD (bh)) - 1; i >= 0; i--) {
+	if (reiserfs_key_get_did (&reiserfs_ih_at (bh, i)->ih_key) == ~(__u32)0)
+	{
+	    reiserfs_leaf_delete_item (fs, bh, i);
+	    pass_0_stat(fs)->removed++;
+	}
+	
+	if (reiserfs_key_get_did (&reiserfs_ih_at (bh, i)->ih_key) == 
+	    REISERFS_BAD_DID && 
+	    reiserfs_key_get_oid (&reiserfs_ih_at (bh, i)->ih_key) == 
+	    REISERFS_BAD_OID) 
+	{
+	    reiserfs_leaf_delete_item (fs, bh, i);
+	    pass_0_stat(fs)->removed++;
+	}
+    }
+
+    fs_size = (__u64)fs->fs_blocksize * 
+	    reiserfs_sb_get_blocks (fs->fs_ondisk_sb);
+
+ start_again:
+
+    ih = reiserfs_ih_at (bh, 0);
+    bad_order = 0;
+    nr_items = reiserfs_nh_get_items (NODE_HEAD (bh));
+    for (i = 0; i < nr_items; i ++, ih ++) {
+	if (reiserfs_ih_ext(ih) && (reiserfs_ih_get_len (ih) % 4 != 0)) {
+	    reiserfs_key_set_type(reiserfs_ih_get_format(ih), 
+				  &ih->ih_key, TYPE_UNKNOWN);
+	    
+	    dirty = 1;
+	}
+	    
+        if (reiserfs_key_unkn (&ih->ih_key)) {
+            if ((reiserfs_ih_get_len (ih) == REISERFS_SD_SIZE) || 
+		(reiserfs_ih_get_len (ih) == REISERFS_SD_SIZE_V1)) 
+	    {
+                reiserfs_key_set_sec (KEY_FORMAT_1, &ih->ih_key, 
+				      OFFSET_SD, TYPE_STAT_DATA);
+		dirty = 1;
+                fsck_log("pass0: vpf-10100: block %lu, item (%d): Unknown item "
+			 "type of StatData size, type set to StatData %k\n", 
+			 bh->b_blocknr, i, &ih->ih_key);
+            } else {
+                fsck_log("pass0: vpf-10110: block %lu, item (%d): Unknown item "
+			 "type found %k - deleted\n", bh->b_blocknr, i, 
+			 &ih->ih_key);
+		
+                reiserfs_leaf_delete_item (fs, bh, i);
+		pass_0_stat(fs)->removed++;
+                goto start_again;
+            }
+        }
+
+	if (is_wrong_short_key (&ih->ih_key)) {
+	    /* sometimes stat datas get k_objectid==0 or k_dir_id==0 */
+	    
+/*	    if (i == (nr_items - 1)) {
+		
+		if (i == 0) {
+		    fsck_log ("block %lu: item %d: (%H) id equals 0\n",
+			      bh->b_blocknr, i, ih);
+		    return;
+		}
+		// delete last item 
+                fsck_log ("block %lu: item %d: (%H) id equals 0\n",
+			      bh->b_blocknr, i, ih);
+		reiserfs_leaf_delete_item (fs, bh, i - 1);
+		pass_0_stat(fs)->removed++;
+		return;
+	    }
+*/
+
+            /* FIXME:
+		18842 19034    0x1 EXT  (2)
+		19035 19035    0x0 SD   (0)
+		18842     1    0x1 EXT  (1)
+		18842     1 0x1001 DRCT (2)
+             */
+	    /* there is next item: if it is not stat data - take its k_dir_id
+               and k_objectid. if key order will be still wrong - the changed
+               item will be deleted */
+
+	    if (i && !reiserfs_ih_stat (ih)) {
+	        /* previous item has a wrong short_key */
+		fsck_log ("pass0: vpf-10120: block %lu: item %d: Wrong key %k, "
+			  "corrected to ", bh->b_blocknr, i, &ih->ih_key);
+		reiserfs_key_set_did (&ih->ih_key, 
+			reiserfs_key_get_did (&(ih - 1)->ih_key));
+		reiserfs_key_set_oid (&ih->ih_key, 
+			reiserfs_key_get_oid (&(ih - 1)->ih_key));
+		
+		fsck_log ("%k\n", &ih->ih_key);
+		dirty = 1;
+	    } else if ((i < nr_items - 1) && !reiserfs_ih_stat (ih + 1)) {
+	        if (!is_wrong_short_key(&(ih + 1)->ih_key)) {
+		    fsck_log ("pass0: vpf-10130: block %lu: item %d: Wrong "
+			      "key %k, corrected to ", bh->b_blocknr, i, 
+			      &ih->ih_key);
+		    
+		    reiserfs_key_set_did (&ih->ih_key, 
+			    reiserfs_key_get_did (&(ih + 1)->ih_key));
+		    
+		    reiserfs_key_set_oid (&ih->ih_key, 
+			    reiserfs_key_get_oid (&(ih + 1)->ih_key));
+		    
+/*		    reiserfs_key_set_off (KEY_FORMAT_1, &ih->ih_key, 0);
+		    reiserfs_key_set_type (KEY_FORMAT_1, &ih->ih_key, 
+					   TYPE_STAT_DATA);*/
+		    fsck_log ("%k\n", &ih->ih_key);
+		    dirty = 1;
+		    goto start_again;
+		} else {
+	            fsck_log ("pass0: vpf-10140: block %lu: items %d and %d "
+			      "have bad short keys %k, %k, both deleted\n",
+			      bh->b_blocknr, i, i+1, &ih->ih_key, 
+			      &(ih + 1)->ih_key);
+		    
+		    reiserfs_leaf_delete_item (fs, bh, i);
+		    reiserfs_leaf_delete_item (fs, bh, i);
+		    pass_0_stat(fs)->removed += 2;
+		    goto start_again;
+		}
+	    } else {
+                fsck_log ("pass0: vpf-10150: block %lu: item %d: Wrong key "
+			  "%k, deleted\n", bh->b_blocknr, i, &ih->ih_key);
+		
+		reiserfs_leaf_delete_item (fs, bh, i);
+		pass_0_stat(fs)->removed++;
+		goto start_again;
+	    } 
+	}
+
+#if 0
+	if (i && i + 1 < nr_items) {
+            if (reiserfs_ih_stat (ih - 1) && !reiserfs_ih_stat (ih) &&
+                !reiserfs_ih_direct (ih + 1) && !reiserfs_ih_stat (ih + 1)) {
+                /* i or i+1 item should be SD or i+1 should be direct item */
+                if ((reiserfs_ih_get_len (ih) == REISERFS_SD_SIZE) || 
+		    (reiserfs_ih_get_len (ih) == REISERFS_SD_SIZE_V1)) 
+		{
+                    /* make i as SD */
+                    fsck_log("pass0: vpf-10400: block %lu, item %d: Wrong "
+			     "order of items - change the type of the key %k "
+			     "to StatData\n",  bh->b_blocknr, i, &ih->ih_key);
+                    reiserfs_key_set_sec (KEY_FORMAT_1, &ih->ih_key, 
+					  OFFSET_SD, TYPE_STAT_DATA);
+		    dirty = 1;
+                } else if ((reiserfs_ih_get_len (ih+1) == REISERFS_SD_SIZE) || 
+			   (reiserfs_ih_get_len (ih+1) == REISERFS_SD_SIZE_V1)) 
+		{
+                    /* make i+1 as SD */
+                    fsck_log("pass0: vpf-10410: block %lu, item %d: Wrong "
+			     "order of items - change the type of the key %k "
+			     "to StatData\n", bh->b_blocknr, i + 1, 
+			     &(ih + 1)->ih_key);
+		    
+                    reiserfs_key_set_sec (KEY_FORMAT_1, &(ih + 1)->ih_key, 
+					  OFFSET_SD, TYPE_STAT_DATA);
+		    dirty = 1;
+                } else if (reiserfs_ih_ext(ih)) {
+                    fsck_log("pass0: vpf-10420: block %lu, item %d: Wrong "
+			     "order of items - change the type of the key %k "
+			     "to Direct\n", bh->b_blocknr, i+1, 
+			     &(ih + 1)->ih_key);
+		    
+                    reiserfs_key_set_type (reiserfs_ih_get_format(ih+1), 
+					   &(ih + 1)->ih_key, 
+					   TYPE_DIRECT);
+		    dirty = 1;
+                }
+            }
+        }
+#endif
+	if (i && ((reiserfs_ih_stat (ih - 1) && !reiserfs_ih_stat (ih) &&
+		   (reiserfs_key_get_did (&(ih - 1)->ih_key) != 
+		    reiserfs_key_get_did (&ih->ih_key))) ||
+		  (reiserfs_ih_stat (ih) && 
+		   (reiserfs_key_get_did (&(ih - 1)->ih_key) >
+		    reiserfs_key_get_did (&ih->ih_key)))))
+        {
+            /* not the same dir_id of the same file or not increasing dir_id 
+	       of different files */
+            if ((i > 1) && reiserfs_key_get_did (&(ih - 2)->ih_key) == 
+		reiserfs_key_get_did (&(ih - 1)->ih_key)) 
+	    {
+                /* fix i-th */
+                if (!reiserfs_ih_stat (ih)) {
+                    fsck_log("pass0: vpf-10430: block %lu, item %d: Wrong "
+			     "order of items - change the dir_id of the key "
+			     "%k to %lu\n", bh->b_blocknr, i, &ih->ih_key, 
+			     reiserfs_key_get_did (&(ih - 1)->ih_key));
+		    
+		    reiserfs_key_set_did (&ih->ih_key, 
+				   reiserfs_key_get_did (&(ih - 1)->ih_key));
+		    
+		    dirty = 1;
+                } else if (i + 1 < nr_items) {
+                    fsck_log("pass0: vpf-10440: block %lu, item %d: Wrong "
+			     "order of items - change the dir_id of the key "
+			     "%k to %lu\n", bh->b_blocknr, i, &ih->ih_key, 
+			     reiserfs_key_get_did (&(ih + 1)->ih_key));
+		    
+		    reiserfs_key_set_did (&ih->ih_key, 
+			    reiserfs_key_get_did (&(ih + 1)->ih_key));
+		    dirty = 1;
+                }
+            } else if ((i + 1 < nr_items) && 
+		       reiserfs_key_get_did (&ih->ih_key) == 
+		       reiserfs_key_get_did (&(ih + 1)->ih_key)) 
+	    {
+                fsck_log("pass0: vpf-10450: block %lu, item %d: Wrong order of "
+			 "items - change the dir_id of the key %k to %lu\n",
+			 bh->b_blocknr, i - 1, &(ih - 1)->ih_key, 
+			 reiserfs_key_get_did (&ih->ih_key));
+		
+                /* fix (i - 1)-th */
+		reiserfs_key_set_did (&(ih - 1)->ih_key, 
+				      reiserfs_key_get_did (&ih->ih_key));
+		dirty = 1;
+            }	
+        }
+
+ 	if (i && i + 1 < nr_items) {
+      	    /* there is a previous and a next items */
+	    if ((reiserfs_key_get_did (&(ih - 1)->ih_key) == 
+		 reiserfs_key_get_did (&(ih + 1)->ih_key)) &&
+		(reiserfs_key_get_did (&(ih - 1)->ih_key) != 
+		 reiserfs_key_get_did (&ih->ih_key)))
+	    {
+                fsck_log("pass0: vpf-10460: block %lu, item %d: Wrong order of "
+			 "items - change the dir_id of the key %k to %lu\n",
+			 bh->b_blocknr, i, &ih->ih_key, 
+			 reiserfs_key_get_did (&(ih - 1)->ih_key));
+		
+		reiserfs_key_set_did (&ih->ih_key, reiserfs_key_get_did (&(ih - 1)->ih_key));
+		dirty = 1;
+            }
+
+	    if ((reiserfs_key_get_oid (&(ih - 1)->ih_key) == 
+		 reiserfs_key_get_oid (&(ih + 1)->ih_key)) &&
+		(reiserfs_key_get_oid (&(ih - 1)->ih_key) != 
+		 reiserfs_key_get_oid (&ih->ih_key)))
+	    {
+		fsck_log("pass0: vpf-10470: block %lu, item %d: Wrong "
+			 "order of items - change the object_id of the "
+			 "key %k to %lu\n",	bh->b_blocknr, i, &ih->ih_key,
+			 reiserfs_key_get_oid (&(ih - 1)->ih_key));
+
+		reiserfs_key_set_oid (&ih->ih_key, 
+				      reiserfs_key_get_oid (&(ih - 1)->ih_key));
+		dirty = 1;
+	    }
+
+            if (reiserfs_ih_stat (ih - 1) && 
+		(reiserfs_ih_ext (ih) && reiserfs_ih_direct (ih + 1)))
+	    {
+		
+	    	if ((reiserfs_key_get_oid (&(ih - 1)->ih_key) == 
+		     reiserfs_key_get_oid (&ih->ih_key)) &&
+		    (reiserfs_key_get_oid (&(ih - 1)->ih_key) != 
+		     reiserfs_key_get_oid (&(ih + 1)->ih_key)))
+            	{
+		    fsck_log("pass0: vpf-10480: block %lu, item %d: Wrong "
+			     "order of items - change the object_id of the "
+			     "key %k to %lu\n", bh->b_blocknr, i + 1, 
+			     &(ih+1)->ih_key, 
+			     reiserfs_key_get_oid (&(ih - 1)->ih_key));
+		    
+		    reiserfs_key_set_oid (&(ih + 1)->ih_key, 
+				      reiserfs_key_get_oid (&(ih - 1)->ih_key));
+		    dirty = 1;
+		}
+		
+	    	if ((reiserfs_key_get_oid (&ih->ih_key) == 
+		     reiserfs_key_get_oid (&(ih + 1)->ih_key)) &&
+		    (reiserfs_key_get_oid (&(ih - 1)->ih_key) != 
+		     reiserfs_key_get_oid (&(ih + 1)->ih_key)))
+            	{
+		    fsck_log("pass0: vpf-10490: block %lu, item %d: Wrong "
+			     "order of items - change the object_id of the "
+			     "key %k to %lu\n", bh->b_blocknr, i - 1, 
+			     &(ih-1)->ih_key, 
+			     reiserfs_key_get_oid (&(ih + 1)->ih_key));
+		    
+		    reiserfs_key_set_oid (&(ih - 1)->ih_key, 
+				      reiserfs_key_get_oid (&(ih + 1)->ih_key));
+		    dirty = 1;
+		}
+		
+		if ((reiserfs_key_get_did (&(ih - 1)->ih_key) == 
+		     reiserfs_key_get_did (&ih->ih_key)) &&
+		    (reiserfs_key_get_did (&(ih - 1)->ih_key) != 
+		     reiserfs_key_get_did (&(ih + 1)->ih_key)))
+	    	{
+		    fsck_log("pass0: vpf-10500: block %lu, item %d: Wrong "
+			     "order of items - change the dir_id of the key "
+			     "%k to %lu\n", bh->b_blocknr, i + 1, 
+			     &(ih+1)->ih_key,
+			     reiserfs_key_get_did (&(ih - 1)->ih_key));
+		    reiserfs_key_set_did (&(ih + 1)->ih_key, 
+				   reiserfs_key_get_did (&(ih - 1)->ih_key));
+		    dirty = 1;
+		}
+		
+		if ((reiserfs_key_get_did (&ih->ih_key) == 
+		     reiserfs_key_get_did (&(ih + 1)->ih_key)) &&
+		    (reiserfs_key_get_did (&(ih - 1)->ih_key) != 
+		     reiserfs_key_get_did (&(ih + 1)->ih_key)))
+	    	{
+		    fsck_log("pass0: vpf-10510: block %lu, item %d: Wrong "
+			     "order of items - change the dir_id of the key %k "
+			     "to %lu\n", bh->b_blocknr, i - 1, &(ih-1)->ih_key, 
+			     reiserfs_key_get_did (&(ih + 1)->ih_key));
+		    
+		    reiserfs_key_set_did (&(ih - 1)->ih_key, 
+				   reiserfs_key_get_did (&(ih + 1)->ih_key));
+		    
+		    dirty = 1;
+		}
+            }
+     	}
+
+	if (i && reiserfs_ih_stat (ih) &&
+	    reiserfs_key_get_did (&(ih - 1)->ih_key) == 
+	    reiserfs_key_get_did (&ih->ih_key) &&
+	    reiserfs_key_get_oid (&(ih - 1)->ih_key) >= 
+	    reiserfs_key_get_oid (&ih->ih_key)) 
+	{
+	    if ((i + 1 < nr_items) && !reiserfs_ih_stat (ih + 1)) {
+         	if (reiserfs_key_get_oid (&(ih - 1)->ih_key) < 
+		    reiserfs_key_get_oid (&(ih + 1)->ih_key)) 
+		{
+		    fsck_log("pass0: vpf-10520: block %lu, item %d: Wrong "
+			     "order of items - change the object_id of the key "
+			     "%k to %lu\n", bh->b_blocknr, i - 1, 
+			     &(ih-1)->ih_key, 
+			     reiserfs_key_get_oid (&(ih + 1)->ih_key));
+		    
+		    reiserfs_key_set_oid (&ih->ih_key, 
+				      reiserfs_key_get_oid (&(ih + 1)->ih_key));
+		    
+		    dirty = 1;
+		}
+	    }
+	}
+
+        if (i && reiserfs_ih_stat (ih - 1) && 
+	    !reiserfs_ih_stat (ih) &&
+	    (reiserfs_key_get_oid (&(ih - 1)->ih_key) != 
+	     reiserfs_key_get_oid (&ih->ih_key)))
+        {
+            int err = 0;
+            if (i > 1) {
+                if (reiserfs_key_comp2 (&(ih - 2)->ih_key, 
+					&(ih - 1)->ih_key) != -1)
+		{
+                    misc_set_bit (1, &err);
+		}
+		
+                if (reiserfs_key_comp2 (&(ih - 2)->ih_key, 
+					&ih->ih_key) != -1)
+		{
+                    misc_set_bit (2, &err);
+		}
+            }
+            if (i + 1 < nr_items) {
+                if (reiserfs_key_comp2 (&(ih - 1)->ih_key, 
+					&(ih + 1)->ih_key) != -1)
+		{
+                    misc_set_bit (3, &err);
+		}
+		
+                if (reiserfs_key_comp2 (&ih->ih_key, 
+					&(ih + 1)->ih_key) != -1)
+		{
+                    misc_set_bit (4, &err);
+		}
+            }
+/*
+            if ((test_bit (1, err) || test_bit (3, err)) &&
+		(test_bit (2, err) || test_bit (4, err))) {
+      		// thera are no problem-free keys, delete them both
+                reiserfs_leaf_delete_item (fs, bh, i - 1);
+                reiserfs_leaf_delete_item (fs, bh, i - 1);
+		pass_0_stat(fs)->removed += 2;
+                goto start_again;
+      	    }
+*/
+            if (!misc_test_bit (1, &err) && !misc_test_bit (3, &err) &&
+		!misc_test_bit (2, &err) && !misc_test_bit (4, &err)) 
+	    {
+      		if (i <= 1) {
+            	    /* take bigger */
+                    if (reiserfs_key_comp2 (&(ih - 1)->ih_key, 
+					    &ih->ih_key) == 1) 
+		    {
+			fsck_log("pass0: vpf-10530: block %lu, item %d: Wrong "
+				 "order of items - change the object_id of the "
+				 "key %k to %lu\n", 
+				 bh->b_blocknr, i, &ih->ih_key, 
+				 reiserfs_key_get_oid (&(ih - 1)->ih_key));
+			
+			reiserfs_key_set_oid (&ih->ih_key, 
+					  reiserfs_key_get_oid (&(ih - 1)->ih_key));
+                    } else {
+			fsck_log("pass0: vpf-10540: block %lu, item %d: Wrong "
+				 "order of items - change the object_id of the "
+				 "key %k to %lu\n", bh->b_blocknr, i - 1, 
+				 &(ih - 1)->ih_key, 
+				 reiserfs_key_get_oid (&ih->ih_key));
+			
+                        reiserfs_key_set_oid (&(ih - 1)->ih_key, 
+					  reiserfs_key_get_oid (&ih->ih_key));
+		    }
+            	} else {
+                    /* take smaller */
+                    if (reiserfs_key_comp2 (&(ih - 1)->ih_key, 
+					    &ih->ih_key) == 1)
+		    {
+			fsck_log("pass0: vpf-10550: block %lu, item %d: Wrong "
+				 "order of items - change the object_id of the "
+				 "key %k to %lu\n", 
+				 bh->b_blocknr, i - 1, &(ih - 1)->ih_key, 
+				 reiserfs_key_get_oid (&ih->ih_key));
+			
+                        reiserfs_key_set_oid (&(ih - 1)->ih_key, 
+					  reiserfs_key_get_oid (&ih->ih_key));
+                    } else {
+			fsck_log("pass0: vpf-10560: block %lu, item %d: Wrong "
+				 "order of items - change the object_id of the "
+				 "key %k to %lu\n", 
+				 bh->b_blocknr, i, &ih->ih_key, 
+				 reiserfs_key_get_oid (&(ih - 1)->ih_key));
+			
+			reiserfs_key_set_oid (&ih->ih_key, 
+					  reiserfs_key_get_oid (&(ih - 1)->ih_key));
+		    }
+                }
+		
+		dirty = 1;
+	    } else if (!misc_test_bit (1, &err) && !misc_test_bit (3, &err)) {
+      		/* take i - 1 */
+		fsck_log("pass0: vpf-10590: block %lu, item %d: Wrong order "
+			 "of items - change the object_id of the key %k to "
+			 "%lu\n", bh->b_blocknr, i, &ih->ih_key, 
+			 reiserfs_key_get_oid (&(ih - 1)->ih_key));
+		
+		reiserfs_key_set_oid (&ih->ih_key, 
+				  reiserfs_key_get_oid (&(ih - 1)->ih_key));
+		
+		dirty = 1;
+ 	    } else if (!misc_test_bit (2, &err) && !misc_test_bit (4, &err)) {
+      		/* take i */
+		fsck_log("pass0: vpf-10600: block %lu, item %d: Wrong order "
+			 "of items - change the object_id of the key %k to "
+			 "%lu\n", bh->b_blocknr, i - 1, &(ih - 1)->ih_key, 
+			 reiserfs_key_get_oid (&ih->ih_key));
+		
+                reiserfs_key_set_oid (&(ih - 1)->ih_key, 
+				  reiserfs_key_get_oid (&ih->ih_key));
+		
+		dirty = 1;
+	    }
+        }
+
+	/* this recovers corruptions like the below: 
+	   1774 1732 0 0
+	   116262638 1732 1 3
+	   1774 1736 0 0 */
+	if (i && reiserfs_ih_stat (ih - 1) && !reiserfs_ih_stat (ih)) {
+	    if (reiserfs_key_get_oid (&ih->ih_key) != 
+		reiserfs_key_get_oid (&(ih - 1)->ih_key) ||
+		reiserfs_key_get_did (&ih->ih_key) != 
+		reiserfs_key_get_did (&(ih - 1)->ih_key)) 
+	    {
+		fsck_log ("pass0: vpf-10170: block %lu: item %d: Wrong "
+			  "order of items - the item \n\t%H fixed to ", 
+			  bh->b_blocknr, i, ih);
+		
+		reiserfs_key_set_did (&ih->ih_key, 
+				      reiserfs_key_get_did (&(ih - 1)->ih_key));
+		reiserfs_key_set_oid (&ih->ih_key, 
+				      reiserfs_key_get_oid (&(ih - 1)->ih_key));
+
+		dirty = 1;
+		fsck_log ("\n\t%H\n", ih);
+	    }
+#if 0
+	    if (!reiserfs_ih_dir (ih) && 
+		reiserfs_key_get_off (&ih->ih_key) != 1)
+	    {
+		fsck_log ("pass0: vpf-10170: block %lu: item %d: Wrong "
+			  "offset of the item\n\t%H which follows a StatDtat "
+			  "item, fixed to 1", bh->b_blocknr, i, ih);
+		
+		if (reiserfs_ih_get_len (ih - 1) == REISERFS_SD_SIZE) {
+		    /* stat data is new, therefore this item is new too */
+		    reiserfs_key_set_off (KEY_FORMAT_2, &(ih->ih_key), 1);
+		    if ((reiserfs_ih_get_entries (ih) != 0xffff) && 
+			(reiserfs_ih_get_len (ih) % 4 == 0))
+		    {
+			reiserfs_key_set_type (KEY_FORMAT_2, 
+					       &(ih->ih_key), 
+					       TYPE_EXTENT);
+		    } else {
+			reiserfs_key_set_type (KEY_FORMAT_2, 
+					       &(ih->ih_key), 
+					       TYPE_DIRECT);
+		    }
+
+		    reiserfs_ih_set_format (ih, KEY_FORMAT_2);
+		} else {
+		    /* stat data is old, therefore this item is old too */
+		    reiserfs_key_set_off(KEY_FORMAT_1, &(ih->ih_key), 1);
+		    if ((reiserfs_ih_get_entries (ih) != 0xffff) && 
+			(reiserfs_ih_get_len (ih) % 4 == 0))
+		    {
+			reiserfs_key_set_type (KEY_FORMAT_1, 
+					       &(ih->ih_key), 
+					       TYPE_EXTENT);
+		    } else {
+			reiserfs_key_set_type (KEY_FORMAT_1, 
+					       &(ih->ih_key), 
+					       TYPE_DIRECT);
+			reiserfs_ih_set_free (ih, 0xffff);
+		    }
+		    reiserfs_ih_set_format (ih, KEY_FORMAT_1);
+		}
+	    }
+#endif
+	}
+
+	/* FIXME: corruptions like:
+	   56702 66802 1 2
+	   56702 65536 0 0
+	   56702 66803 1 2
+	   do not get recovered (both last items will be deleted) */
+	
+	/* delete item if it is not in correct order of object items */
+	if (i && reiserfs_key_comp2 (&ih->ih_key, &(ih - 1)->ih_key) &&
+	    !reiserfs_ih_stat (ih)) {
+	    fsck_log ("pass0: vpf-10180: block %lu: item %d: The item %k, "
+		      "which follows non StatData item %k, is deleted\n",
+		      bh->b_blocknr, i, &ih->ih_key, &(ih - 1)->ih_key);
+	    reiserfs_leaf_delete_item (fs, bh, i);
+	    pass_0_stat(fs)->removed++;
+	    goto start_again;
+	}
+	
+	if (reiserfs_ih_stat (ih)) {
+            if (reiserfs_key_get_off (&ih->ih_key) != 0) {
+                reiserfs_key_set_off(KEY_FORMAT_1, &ih->ih_key, 0);
+                dirty = 1;
+            }
+	} else if (!reiserfs_ih_dir (ih)) {
+	    int format;
+
+	    format = reiserfs_key_format(&ih->ih_key);
+	    /* not SD, not direntry */
+            if (i && reiserfs_key_comp2 (&(ih - 1)->ih_key, 
+					 &ih->ih_key) == 0) 
+	    {
+                if (reiserfs_ih_stat (ih - 1)) {
+        	    if (reiserfs_key_get_off (&ih->ih_key) != 1) {
+                        reiserfs_key_set_off(format, &ih->ih_key, 1);
+                        dirty = 1;
+                    }
+                } else if (!reiserfs_ih_dir (ih - 1)) {
+		    /* Both @(ih-1) and @ih are not SD not DIR items. */
+        	    if (reiserfs_key_get_off (&ih->ih_key) < 
+        	        reiserfs_key_get_off(&(ih - 1)->ih_key) + 
+			reiserfs_leaf_ibytes(ih - 1, fs->fs_blocksize))
+        	    {
+                        fsck_log("pass0: vpf-10250: block %lu, item %d: The "
+				 "item %k with wrong offset, fixed to %llu\n",
+				 bh->b_blocknr, i, &ih->ih_key,
+				 reiserfs_key_get_off(&(ih - 1)->ih_key) +
+				 reiserfs_ext_count (ih - 1) * fs->fs_blocksize);
+
+                        reiserfs_key_set_off(
+				format, &ih->ih_key,
+				reiserfs_key_get_off(&(ih - 1)->ih_key) +
+				reiserfs_ext_count (ih - 1) * fs->fs_blocksize);
+                        dirty = 1;
+        	    }
+                } else {
+                    /* if extent item or not the first direct item in leaf */
+                    fsck_log("pass0: vpf-10250: block %lu, item %d: The item "
+			     "%k with wrong type is deleted\n", bh->b_blocknr, 
+			     i, &ih->ih_key);
+		    
+                    reiserfs_leaf_delete_item (fs, bh, i);
+		    pass_0_stat(fs)->removed++;
+                    goto start_again;
+                }
+	    } else {
+		/*first item in the node or first item of the file */
+  		if (i) {
+        	    /* first item of the file, but not SD - delete */
+		    fsck_log("pass0: vpf-10190: block %lu, item %d: The item "
+			     "%k, which follows non StatData item %k, is "
+			     "deleted\n", bh->b_blocknr, i, &ih->ih_key, 
+			     &(ih - 1)->ih_key );
+		    
+		    reiserfs_leaf_delete_item (fs, bh, i);
+		    pass_0_stat(fs)->removed++;
+		    goto start_again;
+        	}
+	    }
+
+	    /* extent or direct is the first in the leaf */
+	    offset = (__u64)reiserfs_key_get_off (&ih->ih_key);
+	    if (reiserfs_ih_ext (ih)) {
+		if (offset % fs->fs_blocksize != 1) {
+		    fsck_log("pass0: vpf-10200: block %lu, item %d: The "
+			     "item %k with wrong offset is deleted\n",
+			     bh->b_blocknr, i, &ih->ih_key);
+			
+		    reiserfs_leaf_delete_item (fs, bh, i);
+		    pass_0_stat(fs)->removed++;
+		    goto start_again;
+		}
+	    }
+	    
+	    /* Check the lenght of the direct item; offset should 
+	       be ok already. */
+	    if (reiserfs_ih_direct (ih) && 
+		!correct_direct_item_offset(ih, fs)) 
+	    {
+		fsck_log("pass0: vpf-10700: block %lu, item %d: "
+			 "The item with wrong offset or length "
+			 "found %k, len % lu - deleted\n", 
+			 bh->b_blocknr, i, &ih->ih_key, 
+			 reiserfs_ih_get_len (ih));
+
+		reiserfs_leaf_delete_item (fs, bh, i);
+		pass_0_stat(fs)->removed++;
+		goto start_again;
+	    }
+
+	    offset += reiserfs_leaf_ibytes (ih, fs->fs_blocksize);
+	    if (!does_it_fit_into_dev (offset, fs_size) || 
+		(format == KEY_FORMAT_1 && offset >= (1ull << 32)) ||
+		(format == KEY_FORMAT_2 && offset >= (1ull << 60)))
+	    {
+		fsck_log("pass0: vpf-10230: block %lu, item %d: The item "
+			 "offset is is too big %k - deleted\n",
+			 bh->b_blocknr, i, &ih->ih_key);
+		reiserfs_leaf_delete_item (fs, bh, i);
+		pass_0_stat(fs)->removed++;
+		goto start_again;
+	    }
+        }
+        
+	if (i &&  reiserfs_key_comp (&(ih - 1)->ih_key, &ih->ih_key) != -1) {
+	    /* previous item has key not smaller than the key of currect item */
+	    if (reiserfs_ih_stat (ih - 1) && !reiserfs_ih_stat (ih)) {
+		/* fix stat data key such as if it was stat data of that item */
+		fsck_log ("pass0: block %lu, items %d, %d: Wrong order of "
+			  "items - make the StatData item %k of the file %k\n",
+		    bh->b_blocknr, i - 1, i, &(ih - 1)->ih_key, &ih->ih_key);
+		
+		reiserfs_key_set_did (&(ih - 1)->ih_key, 
+				      reiserfs_key_get_did (&ih->ih_key));
+		
+		reiserfs_key_set_oid (&(ih - 1)->ih_key, 
+				      reiserfs_key_get_oid (&ih->ih_key));
+		
+		reiserfs_key_set_off (KEY_FORMAT_1, &(ih - 1)->ih_key, 0);
+		
+		reiserfs_key_set_type (KEY_FORMAT_1, 
+				       &(ih - 1)->ih_key, 
+				       TYPE_STAT_DATA);
+		dirty = 1;
+	    } else {
+		/* ok, we have to delete one of these two - decide which one */
+		int retval;
+
+		/* something will be deleted */
+		dirty = 1;
+		retval = upper_correct (bh, ih - 1, i - 1);
+		switch (retval) {
+		case 0:
+		    /* delete upper item */
+		    fsck_log ("pass0: block %lu, item %d (upper): Item %k is "
+			      "out of order - deleted\n", bh->b_blocknr, i - 1,
+			      &(ih - 1)->ih_key);
+		    
+		    reiserfs_leaf_delete_item (fs, bh, i - 1);
+		    pass_0_stat(fs)->removed++;
+		    goto start_again;
+
+		case 1:
+		    /* delete lower item */
+		    fsck_log ("pass0: block %lu, item %d (lower): Item %k is "
+			      "out of order - deleted\n", bh->b_blocknr, i, 
+			      &ih->ih_key);
+		    
+		    reiserfs_leaf_delete_item (fs, bh, i);
+		    pass_0_stat(fs)->removed++;
+		    goto start_again;
+
+		default:
+		    /* upper item was the first item of a node */
+		    /* to make gcc 3.2 do not sware here */;
+		}
+
+		retval = lower_correct (bh, ih, i);
+		switch (retval) {
+		case 0:
+		    /* delete lower item */
+		    fsck_log ("pass0: block %lu, item %d (lower): Item %k is "
+			      "out of order - deleted\n", bh->b_blocknr, i, 
+			      &ih->ih_key);
+		    
+		    reiserfs_leaf_delete_item (fs, bh, i);
+		    pass_0_stat(fs)->removed++;
+		    goto start_again;
+
+		case 1:
+		    /* delete upper item */
+		    fsck_log ("pass0: block %lu, %d (upper): Item %k is "
+			      "out of order - deleted\n", bh->b_blocknr, 
+			      i - 1, &(ih - 1)->ih_key);
+		    
+		    reiserfs_leaf_delete_item (fs, bh, i - 1);
+		    pass_0_stat(fs)->removed++;
+		    goto start_again;
+
+		default:
+		    /* only 2 items in the node, how to decide what to delete,
+		       go and ask user */
+		    /* to make gcc 3.2 do not sware here */;
+		}
+		
+		fsck_log ("pass0: block %lu, items %d and %d: Which of these "
+			  "items looks better (the other will be deleted.)?\n"
+			  "%k\n%k\n", bh->b_blocknr, i-1, i, &(ih - 1)->ih_key,
+			  &ih->ih_key);
+		
+		if (fsck_info_ask (fs, "1 or 2?", "1\n", 1)) {
+		    reiserfs_leaf_delete_item (fs, bh, i - 1);
+		} else {
+		    reiserfs_leaf_delete_item (fs, bh, i);
+		}
+
+		pass_0_stat(fs)->removed++;
+		goto start_again;
+	    }
+	}
+
+	if (reiserfs_ih_stat (ih) && 
+	    (reiserfs_ih_get_len (ih) != REISERFS_SD_SIZE &&
+	     reiserfs_ih_get_len (ih) != REISERFS_SD_SIZE_V1))
+	{
+	    fsck_log ("pass0: block %lu, item %d: StatData item of wrong "
+		      "length found %H - deleted\n", bh->b_blocknr, i, ih);
+	    reiserfs_leaf_delete_item (fs, bh, i);
+	    pass_0_stat(fs)->removed++;
+	    goto start_again;
+	}
+
+	dirty += correct_key_format (ih, symlnk);
+	
+	if (reiserfs_ih_stat (ih)) {
+	    __u16 mode;
+
+            file_format = reiserfs_ih_get_format (ih);
+	
+	    reiserfs_stat_get_mode (ih, reiserfs_item_at(bh,i), &mode);
+            symlnk = ( S_ISLNK(mode) ? 1 : 0);
+	    ;/*correct_stat_data (fs, bh, i);*/
+        } else if ( !reiserfs_ih_dir(ih) && !symlnk &&
+        	    (file_format != KEY_FORMAT_UNDEFINED) &&
+        	    (file_format != reiserfs_ih_get_format (ih)))
+        {
+            fsck_log("pass0: vpf-10240: block %lu, item (%d): Item %k, which "
+		     "format (%d) is not equal to StatData format (%d), is "
+		     "deleted\n", bh->b_blocknr, i, &ih->ih_key, 
+		     reiserfs_ih_get_format(ih), file_format);
+	    
+            reiserfs_leaf_delete_item (fs, bh, i);
+	    pass_0_stat(fs)->removed++;
+            goto start_again;
+        } else {
+	    file_format = KEY_FORMAT_UNDEFINED;
+	    symlnk = 0;
+	}
+
+
+	if (i && reiserfs_ih_stat (ih - 1) && 
+	    !reiserfs_key_comp2 (&ih->ih_key, &(ih - 1)->ih_key)) 
+	{
+	    __u16 mode;
+
+	    reiserfs_stat_get_mode (ih - 1, 
+				    reiserfs_item_by_ih (bh, ih - 1), 
+				    &mode);
+	    
+	    if (not_a_directory (reiserfs_item_by_ih (bh, ih - 1)) && 
+		reiserfs_ih_dir (ih)) 
+	    {
+		/* make SD mode SD of dir */
+		fsck_log ("pass0: block %lu, item %d: Not the directory %K has "
+			  "the wrong mode (%M), corrected to ",
+			  bh->b_blocknr, i, &ih->ih_key, mode);
+		mode &= ~S_IFMT;
+		mode |= S_IFDIR;
+		fsck_log ("(%M)\n", mode);
+		reiserfs_stat_set_mode (ih - 1, 
+					reiserfs_item_by_ih (bh, ih - 1), 
+					&mode);
+		dirty = 1;
+	    } else if (!not_a_directory (reiserfs_item_by_ih (bh, ih - 1)) && 
+		       !reiserfs_ih_dir (ih)) 
+	    {
+		/* make SD mode SD of regular file */
+		fsck_log ("pass0: block %lu, item %d: the directory %K "
+			  "has the wrong mode (%M), corrected to ",
+			  bh->b_blocknr, i, &ih->ih_key, mode);
+		mode &= ~S_IFMT;
+		mode |= S_IFREG;
+		fsck_log ("(%M)\n", mode);
+		reiserfs_stat_set_mode (ih - 1, 
+					reiserfs_item_by_ih (bh, ih - 1), 
+					&mode);
+		dirty = 1;
+	    }
+#if 0
+	    if (not_a_regfile (reiserfs_item_by_ih (bh, ih - 1)) && 
+		reiserfs_ih_ext (ih)) 
+	    {
+		fsck_log ("pass0: block %lu, item %d: The file %K has the "
+			  "wrong mode (%M), corrected to ", bh->b_blocknr, i,
+			  &ih->ih_key, mode);
+		mode &= ~S_IFMT;
+		mode |= S_IFREG;
+		fsck_log ("(%M)\n", mode);
+		reiserfs_stat_set_mode (ih - 1, 
+					reiserfs_item_by_ih (bh, ih - 1), 
+					&mode);
+		dirty = 1;
+	    }
+#endif
+	}
+
+	if (reiserfs_ih_dir (ih)) {
+	    j = verify_directory_item (fs, bh, i);
+	
+	    if (j == 1) {
+	        /* wrong hash, skip the leaf */
+		pass_0_stat (fs)->too_old_leaves ++;
+		reiserfs_buffer_mkclean (bh);
+		return;
+	    } else if (j == -1) {
+		/* item was deleted */
+		goto start_again;
+	    }
+	    continue;
+	}
+
+	/*DEBUG*/
+        if (!reiserfs_ih_stat (ih) && 
+	    reiserfs_key_get_off (&ih->ih_key) == 0)
+	{
+            reiserfs_panic ("block %lu, item %d: Zero offset can have "
+			    "StatData items only, but found %k\n", 
+			    bh->b_blocknr, i, &ih->ih_key);
+	}
+
+	if (!reiserfs_ih_ext (ih))
+	    continue;
+	
+	ind_item = (__u32 *)reiserfs_item_by_ih (bh, ih);
+	for (j = 0; j < (int)reiserfs_ext_count (ih); j ++) {
+	    unfm_ptr = d32_get (ind_item, j);
+	    if (!unfm_ptr)
+		continue;
+
+	    if ((reiserfs_fs_block(fs, unfm_ptr) != BT_UNKNOWN) ||
+		(fs->fs_badblocks_bm && 
+		 reiserfs_bitmap_test_bit(fs->fs_badblocks_bm, unfm_ptr))) 
+	    {
+		pass_0_stat (fs)->wrong_pointers ++;
+		/*
+		fsck_log ("pass0: %d-th pointer (%lu) in item %k (leaf "
+			  "block %lu) is wrong\n", j, unfm_ptr, &ih->ih_key, 
+			  bh->b_blocknr);
+		*/
+		d32_put(ind_item, j, 0);
+		dirty = 1;
+		continue;
+	    }
+	    /* mark block in bitmaps of unformatted nodes */
+	    register_unfm (unfm_ptr);
+	}
+    }
+
+    /* mark all objectids in use */
+    ih = reiserfs_ih_at (bh, 0);
+    for (i = 0; i < reiserfs_nh_get_items (NODE_HEAD (bh)); i ++, ih ++) {
+	reiserfs_deh_t * deh;
+
+	id_map_mark(proper_id_map (fs), reiserfs_key_get_did (&ih->ih_key));
+	id_map_mark(proper_id_map (fs), reiserfs_key_get_oid (&ih->ih_key));
+	if (reiserfs_ih_dir(ih)) {
+	    for (j = 0, deh = reiserfs_deh (bh, ih); 
+		 j < reiserfs_ih_get_entries (ih); 
+		 j ++, deh++) 
+	    {
+		id_map_mark(proper_id_map(fs), reiserfs_deh_get_obid(deh));
+	    }
+	}
+    }
+
+    if (reiserfs_nh_get_items (NODE_HEAD (bh)) < 1) {
+	/* pass 1 will skip this */
+	pass_0_stat (fs)->all_contents_removed ++;
+	fsck_log ("pass0: block %lu: no correct item is found. "
+		  "Leave block untouched.\n", bh->b_blocknr);
+	dirty = 0;
+	reiserfs_buffer_mkclean (bh);
+    } else {
+	/* pass1 will use this bitmap */
+	pass0_block_mkleaf (bh->b_blocknr);
+	/*fsck_data (fs)->rebuild.leaves ++;*/
+    }
+    
+    if (dirty) {
+	pass_0_stat (fs)->leaves_corrected ++;
+	reiserfs_buffer_mkdirty (bh);
+    }
+}
+
+
+static int is_to_be_read (reiserfs_filsys_t * fs, unsigned long block) {
+    return reiserfs_bitmap_test_bit (fsck_source_bitmap (fs), block);
+}
+
+static void do_pass_0 (reiserfs_filsys_t * fs) {
+    reiserfs_bh_t * bh;
+    unsigned long i;
+    int what_node;
+    unsigned long done = 0, total;
+
+
+    if (fsck_mode (fs) == DO_TEST) {
+	/* just to test pass0_correct_leaf */
+	bh = reiserfs_buffer_read (fs->fs_dev, 
+				   fsck_data (fs)->rebuild.test, 
+				   fs->fs_blocksize);
+
+	if (!bh) {
+	    fsck_progress ("%s: Reading of the block %lu failed\n",
+			   __FUNCTION__, fsck_data (fs)->rebuild.test);
+	    reiserfs_fs_free (fs);
+	    exit(0);
+	}
+
+	if (fsck_leaf_check(bh))
+	    fsck_progress ("###############  bad #################\n");
+
+	pass0_correct_leaf (fs, bh);
+	reiserfs_node_print (stdout, fs, bh, 3, -1, -1);
+
+	if (fsck_leaf_check(bh))
+	    fsck_progress ("############### still bad #################\n");
+	
+	reiserfs_buffer_close (bh);
+	reiserfs_fs_free (fs);
+	exit(0);
+    }
+
+    total = reiserfs_bitmap_ones (fsck_source_bitmap (fs));
+    for (i = 0; i < reiserfs_sb_get_blocks (fs->fs_ondisk_sb); i ++) {
+	if (!is_to_be_read (fs, i))
+	    continue;
+
+	if (!fsck_quiet(fs)) {
+	    util_misc_progress (fsck_progress_file (fs), 
+				&done, total, 1, 0);
+	}
+
+	if (!(bh = reiserfs_buffer_read (fs->fs_dev, i, fs->fs_blocksize))) {
+	    fsck_progress ("%s: Reading of the block %lu failed\n", 
+			   __FUNCTION__, i);
+	    continue;
+	}
+
+	if (fs->fs_badblocks_bm && 
+	    reiserfs_bitmap_test_bit(fs->fs_badblocks_bm, i))
+	{
+	    reiserfs_panic ("The block (%lu), specified in badblock "
+			    "list, was read.", i);
+	}
+	
+	if (reiserfs_fs_block(fs, i) != BT_UNKNOWN) {
+	    /* block which could not be pointed by extent item */
+	    if (!(reiserfs_journal_block (fs, i) && 
+		  fsck_data(fs)->rebuild.use_journal_area))
+	    {
+		reiserfs_panic ("The block (%lu) from non "
+				"data area was read.", i);
+	    }
+	}
+
+	pass_0_stat (fs)->dealt_with ++;
+	what_node = reiserfs_node_type (bh);
+	if ( what_node != NT_LEAF && what_node != NT_IH_ARRAY ) {
+	    reiserfs_buffer_close (bh);
+	    continue;
+	}
+	
+	pass_0_stat (fs)->leaves ++;
+	pass0_correct_leaf (fs, bh);
+	reiserfs_buffer_close (bh);
+    }
+
+    if (!fsck_quiet(fs))
+	fsck_progress ("\n");
+
+
+    /* just in case */
+    id_map_mark(proper_id_map (fs), REISERFS_ROOT_OBJECTID);
+
+}
+
+static void choose_hash_function (reiserfs_filsys_t * fs) {
+    unsigned long max;
+    unsigned int hash_code;
+    int i;
+
+    if (fsck_hash_defined (fs))
+	return;
+
+    max = 0;
+    hash_code = reiserfs_hash_code (0);
+    
+    for (i = 0; i < fsck_data (fs)->rebuild.hash_amount; i ++) {
+	/* remember hash whihc got more hits */
+	if (fsck_data (fs)->rebuild.hash_hits [i] > max) {
+	    hash_code = i;
+	    max = fsck_data (fs)->rebuild.hash_hits [i];
+	}
+
+	if (fsck_data (fs)->rebuild.hash_hits [i]) {
+	    fsck_log ("%lu directory entries were hashed with %s hash.\n",
+		      fsck_data (fs)->rebuild.hash_hits [i], 
+		      reiserfs_hash_name(i));
+	}
+    }
+
+    if (max == 0 || hash_code == 0) {
+	/* no names were found. take either super block value or default */
+        hash_code = reiserfs_sb_get_hash (fs->fs_ondisk_sb);
+	if (!hash_code)
+	    hash_code = DEFAULT_HASH;
+	
+        fsck_log ("Could not find a hash in use. Using %s\n",
+		  reiserfs_hash_name (hash_code));
+    }
+    
+    /* compare the most appropriate hash with the hash set in super block */
+    if (hash_code != reiserfs_sb_get_hash (fs->fs_ondisk_sb)) {
+        fsck_progress ("Selected hash (%s) does not match to "
+		       "the hash set in the super block (%s).\n", 
+		       reiserfs_hash_name (hash_code), 
+		       reiserfs_hash_name (
+				reiserfs_sb_get_hash (fs->fs_ondisk_sb)));
+	
+        reiserfs_sb_set_hash (fs->fs_ondisk_sb, hash_code);
+    }
+    
+    fs->hash = reiserfs_hash_func (hash_code);
+}
+
+/* create bitmap of blocks the tree is to be built off */
+/* debugreiserfs and pass0 should share this code -s should show
+the same as we could recover - test: zero first 32M */
+static void init_source_bitmap (reiserfs_filsys_t * fs) {
+    unsigned long count, block, bmap_nr, bits_amount;
+    unsigned long i, j, tmp, reserved;
+    FILE * fp;
+
+    count = reiserfs_sb_get_blocks (fs->fs_ondisk_sb);
+
+    switch (fsck_data (fs)->rebuild.scan_area) {
+    case ALL_BLOCKS:
+	fsck_source_bitmap (fs) = reiserfs_bitmap_create (count);
+	reiserfs_bitmap_fill (fsck_source_bitmap (fs));
+	fsck_progress ("The whole partition (%d blocks) is to be scanned\n", 
+		       reiserfs_bitmap_ones (fsck_source_bitmap (fs)));	
+	break;
+
+    case USED_BLOCKS:
+	fsck_progress ("Loading on-disk bitmap .. ");
+	fsck_source_bitmap (fs) = reiserfs_bitmap_create (count);	
+	reiserfs_bitmap_copy (fsck_source_bitmap (fs), fs->fs_bitmap2);
+	
+	fsck_progress ("ok, %d blocks marked used\n", 
+		       reiserfs_bitmap_ones (fsck_source_bitmap (fs)));
+	break;
+
+    case EXTERN_BITMAP:
+	fp = fopen (fsck_data (fs)->rebuild.bitmap_file_name, "r");
+	
+	if (!fp) {
+	    reiserfs_exit (EXIT_OPER, "Could not load bitmap: %s\n", 
+			   strerror(errno));
+	}
+	
+	fsck_source_bitmap (fs) = reiserfs_bitmap_load (fp);
+	
+	if (!fsck_source_bitmap (fs)) {
+	    reiserfs_exit (EXIT_OPER, "Could not load fitmap from \"%s\"", 
+			   fsck_data (fs)->rebuild.bitmap_file_name);
+	}
+
+	fsck_progress ("%d blocks marked used in extern bitmap\n", 
+		       reiserfs_bitmap_ones (fsck_source_bitmap (fs)));
+	fclose (fp);
+	break;
+
+    default:
+	reiserfs_panic ("No area to scan specified");
+    }
+
+    tmp = 0;
+
+    /* unmark bitmaps */
+    block = fs->fs_super_bh->b_blocknr + 1;
+    reserved = fsck_source_bitmap(fs)->bm_bit_size;
+    
+    bmap_nr = reiserfs_bmap_nr(count, fs->fs_blocksize);
+    
+    for (i = 0; i < bmap_nr; i ++) {
+	if (!reiserfs_bitmap_test_bit (fsck_source_bitmap (fs), block)) {
+	    /* bitmap is definitely broken, mark all blocks of this 
+	       bitmap block as used */
+	    bits_amount = (reserved < fs->fs_blocksize * 8) ? 
+		    reserved : fs->fs_blocksize * 8;
+	    
+	    fsck_log("%s: Bitmap %lu (of %lu bits) is wrong - "
+		     "mark all blocks [%lu - %lu] as used\n",
+		     __FUNCTION__, i, bits_amount, i * fs->fs_blocksize * 8,
+		     fs->fs_blocksize * 8 * i + bits_amount); 	
+				
+	    for (j = i * fs->fs_blocksize * 8; 
+		 j < i * fs->fs_blocksize * 8 + bits_amount; j++) 
+	    {
+	        if (!reiserfs_bitmap_test_bit (fsck_source_bitmap(fs), j))
+		    reiserfs_bitmap_set_bit (fsck_source_bitmap(fs), j);
+	    }
+        }
+        
+	reiserfs_bitmap_clear_bit (fsck_source_bitmap (fs), block);
+	reserved -= fs->fs_blocksize * 8;
+	tmp ++;
+	
+	/* next block fo bitmap */
+	if (reiserfs_bitmap_spread (fs)) {
+	    block = (block / (fs->fs_blocksize * 8) + 1) * 
+		    (fs->fs_blocksize * 8);
+	} else {
+	    block ++;
+	}
+    }
+
+    /* pass 0 will skip super block and journal areas and bitmap blocks, find
+       how many blocks have to be read */
+    for (i = 0; i <= fs->fs_super_bh->b_blocknr; i ++) {
+	if (!reiserfs_bitmap_test_bit (fsck_source_bitmap (fs), i))
+	    continue;
+	
+	reiserfs_bitmap_clear_bit (fsck_source_bitmap (fs), i);
+	tmp ++;
+    }
+
+    /* unmark journal area as used if journal is standard or it is non 
+       standard and initialy has been created on a main device */
+
+    reserved = reiserfs_journal_hostsize (fs->fs_ondisk_sb);
+    /* where does journal area (or reserved journal area) start from */
+
+    if (!reiserfs_new_location (fs->fs_super_bh->b_blocknr, 
+				fs->fs_blocksize) &&
+    	!reiserfs_old_location (fs->fs_super_bh->b_blocknr, 
+				fs->fs_blocksize))
+    {
+	misc_die ("init_source_bitmap: Wrong super block location, "
+		  "you must run --rebuild-sb.");
+    }
+
+    block = reiserfs_journal_start_must (fs);
+
+    for (i = block; i < reserved + block; i ++) {
+	if (!reiserfs_bitmap_test_bit (fsck_source_bitmap (fs), i))
+	    continue;
+	reiserfs_bitmap_clear_bit (fsck_source_bitmap (fs), i);
+	tmp ++;	
+    }
+
+    if (fs->fs_badblocks_bm)
+    	for (i = 0; i < count; i ++) {
+	    if (reiserfs_bitmap_test_bit (fs->fs_badblocks_bm, i))
+		reiserfs_bitmap_clear_bit (fsck_source_bitmap (fs), i);
+    	}
+
+    fsck_source_bitmap (fs)->bm_set_bits = 
+	    reiserfs_bitmap_ones (fsck_source_bitmap (fs));
+
+    fsck_progress ("Skipping %d blocks (super block, journal, "
+		   "bitmaps) %d blocks will be read\n", tmp, 
+		   fsck_source_bitmap (fs)->bm_set_bits);
+		
+}
+
+static void fsck_pass0_prep (reiserfs_filsys_t * fs) {
+    /* bitmap of blocks to be read */
+    init_source_bitmap (fs);
+
+    /* bitmap of leaves, good and bad unformatted */
+    fsck_pass0_aux_prep (fs);
+
+    /* on pass0 all objectids will be marked here as used */
+    proper_id_map (fs) = id_map_init();
+
+    /* pass0 gathers statistics about hash hits */
+    hash_hits_init (fs);
+}
+
+
+static void fsck_pass0_save_result (reiserfs_filsys_t * fs) {
+    FILE * file;
+    int retval;
+
+    /* save bitmaps with which we will be able start reiserfs from
+       pass 1 */
+    file = util_file_open ("temp_fsck_file.deleteme", "w+");
+    if (!file)
+	return;
+
+    fsck_stage_start_put (file, PASS_0_DONE);
+    reiserfs_bitmap_save (file,  leaves_bitmap);
+    reiserfs_bitmap_save (file,  good_unfm_bitmap);
+    reiserfs_bitmap_save (file,  bad_unfm_bitmap);
+    fsck_stage_end_put (file);
+    fclose (file);
+    retval = rename ("temp_fsck_file.deleteme", state_dump_file (fs));
+    
+    if (retval != 0)
+	fsck_progress ("%s: Could not rename the temporary file "
+		       "temp_fsck_file.deleteme to %s",
+		       __FUNCTION__, state_dump_file (fs));
+}
+
+
+/* file 'fp' must contain 3 bitmaps saved during last pass 0: bitmap
+   of leaves, bitmaps of good and bad unfms*/
+void fsck_pass0_load_result (FILE * fp, reiserfs_filsys_t * fs) {
+    leaves_bitmap = reiserfs_bitmap_load (fp);
+    good_unfm_bitmap = reiserfs_bitmap_load (fp);
+    bad_unfm_bitmap = reiserfs_bitmap_load (fp);
+    if (!leaves_bitmap || !good_unfm_bitmap || !bad_unfm_bitmap)
+	fsck_exit ("State dump file seems corrupted. Run without -d");
+
+    fsck_source_bitmap (fs) = leaves_bitmap;
+
+    /* on pass 1 we do not need proper objectid map */
+
+    fsck_progress ("Pass 0 result loaded. %d leaves, %d/%d good/bad data blocks\n",
+		   reiserfs_bitmap_ones (leaves_bitmap),
+		   reiserfs_bitmap_ones (good_unfm_bitmap),
+		   reiserfs_bitmap_ones (bad_unfm_bitmap));
+}
+
+
+static void fsck_pass0_fini (reiserfs_filsys_t * fs) {
+    time_t t;
+
+    /* update super block: hash, objectid map, fsck state */
+    choose_hash_function (fs);
+    id_map_flush(proper_id_map (fs), fs);
+    reiserfs_sb_set_state (fs->fs_ondisk_sb, PASS_0_DONE);
+    reiserfs_buffer_mkdirty (fs->fs_super_bh);
+
+    /* write all dirty blocks */
+    fsck_progress ("Flushing..");
+    fs->fs_dirt = 1;
+    reiserfs_fs_flush (fs);
+    fsck_progress ("finished\n");
+
+    fsck_stage_report (FS_PASS0, fs);
+
+    /* free what we do not need anymore */
+
+    if (!fsck_run_one_step (fs)) {
+	if (fsck_info_ask (fs, "Continue? (Yes):", "Yes\n", 1)) {
+	    /* reiserfsck continues */
+	    reiserfs_bitmap_delete (fsck_source_bitmap (fs));
+	    fsck_source_bitmap (fs) = 0;
+	    fsck_source_bitmap (fs) = leaves_bitmap;
+	    return;
+	}
+    } else
+	fsck_pass0_save_result (fs);
+
+    reiserfs_bitmap_flush (fsck_source_bitmap (fs), fs);
+    reiserfs_bitmap_delete (fsck_source_bitmap (fs));
+    fsck_source_bitmap (fs) = 0;
+    id_map_free(proper_id_map (fs));
+    proper_id_map (fs) = 0;
+    
+    time (&t);
+    fsck_progress ("###########\n"
+		   "reiserfsck finished pass 0 at %s"
+		   "###########\n", ctime (&t));
+    fs->fs_dirt = 1;
+    reiserfs_fs_close (fs);
+    exit(0);
+}
+
+
+void fsck_pass0 (reiserfs_filsys_t * fs) {
+    if (reiserfs_super_format (fs->fs_ondisk_sb) != fs->fs_format || 
+        reiserfs_super_format (fs->fs_ondisk_sb) == REISERFS_FORMAT_UNKNOWN)
+    {
+	reiserfs_exit (EXIT_OPER, "pass 0: ReiserFS format version mismatch "
+		       "found, you should run --rebuild-sb");
+    }
+  
+    fsck_progress ("Pass 0:\n");
+    if (fsck_log_file (fs) != stderr)
+	/* this is just to separate warnings in the log file */
+	fsck_log ("####### Pass 0 #######\n");
+
+
+    fsck_pass0_prep (fs);
+
+    /* scan the partition, find leaves and correct them */
+    do_pass_0 (fs);
+
+    fsck_pass0_fini (fs);
+}
+
diff --git a/utils/fsck/pass1.c b/utils/fsck/pass1.c
new file mode 100644
index 0000000..32434a4
--- /dev/null
+++ b/utils/fsck/pass1.c
@@ -0,0 +1,859 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README 
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "fsck.h"
+#include "misc/unaligned.h"
+#include "misc/malloc.h"
+#include "util/device.h"
+#include "util/misc.h"
+
+#include <time.h>
+
+reiserfs_bitmap_t * bad_unfm_in_tree_once_bitmap;
+#define is_bad_unfm_in_tree_once(block)		\
+	reiserfs_bitmap_test_bit(bad_unfm_in_tree_once_bitmap, block)
+#define mark_bad_unfm_in_tree_once(block) \
+	reiserfs_bitmap_set_bit(bad_unfm_in_tree_once_bitmap, block)
+
+static void stat_data_in_tree (reiserfs_bh_t *bh,
+			       reiserfs_ih_t * ih)
+{
+#if 0
+    __u32 objectid;
+    
+    objectid = reiserfs_key_get_oid (&ih->ih_key);
+    
+    if (mark_objectid_really_used (proper_id_map (fs), objectid)) {
+	stat_shared_objectid_found (fs);
+	mark_objectid_really_used (shared_id_map (fs), objectid);
+    }
+#endif
+    
+    zero_nlink (ih, reiserfs_item_by_ih (bh, ih));
+}
+
+static char *still_bad_unfm_ptr_to_string (int val) {
+    switch (val) {
+	case 1:
+	    return "a leaf";
+	case 2:
+	    return "shared between a few files";
+	case 3:
+	    return "not a data block";
+	case 4:
+	    return "not used in on-disk bitmap";
+	case 5:
+	    return "out of partition boundary";
+    }
+    return "";
+}
+
+static int still_bad_unfm_ptr (unsigned long block) {
+    if (!block)
+	return 0;
+    
+    if (pass0_block_isleaf (block))
+	return 1;
+    
+    if (pass0_block_isbad_unfm (block) && 
+	!is_bad_unfm_in_tree_once (block))
+    {
+	return 2;
+    }
+    
+    if (reiserfs_fs_block(fs, block) != BT_UNKNOWN)
+	return 3;
+    
+/*  if (!was_block_used (block))
+	return 4; */
+    
+    if (block >= reiserfs_sb_get_blocks (fs->fs_ondisk_sb))
+	return 5;
+    
+    return 0;
+}
+
+
+/* this just marks blocks pointed by an extent item as used in the
+   new bitmap */
+static void extent_in_tree (reiserfs_bh_t * bh,
+			    reiserfs_ih_t * ih)
+{
+    unsigned int i;
+    __u32 * unp;
+    __u32 unfm_ptr;
+    int ret;
+
+    unp = (__u32 *)reiserfs_item_by_ih (bh, ih);
+    
+    for (i = 0; i < reiserfs_ext_count (ih); i ++) {
+	unfm_ptr = d32_get (unp, i);
+	if (unfm_ptr == 0)
+	    continue;
+	if ((ret = still_bad_unfm_ptr (unfm_ptr)))
+	    reiserfs_panic ("%s: block %lu: The file %k points to the "
+			    "block (%u) which is %s", __FUNCTION__, 
+			    bh->b_blocknr, &ih->ih_key, unfm_ptr, 
+			    still_bad_unfm_ptr_to_string(ret));
+
+	mark_block_used (unfm_ptr, 1);
+    }
+}
+
+static void cb_mkunreach(reiserfs_ih_t *ih) {
+	fsck_item_mkunreach(ih);
+}
+
+static void leaf_is_in_tree_now (reiserfs_bh_t * bh) {
+    item_func_t actions[] = {stat_data_in_tree, extent_in_tree, 0, 0};
+
+    mark_block_used ((bh)->b_blocknr, 1);
+
+    reiserfs_leaf_traverse (bh, cb_mkunreach, actions);
+
+    pass_1_stat (fs)->inserted_leaves ++;
+
+    reiserfs_buffer_mkdirty (bh);
+}
+
+
+static void insert_pointer (reiserfs_bh_t * bh, reiserfs_path_t * path) {
+    reiserfs_ih_t * ih;
+    char * body;
+    int retval;
+    reiserfs_tb_t tb;
+    
+    reiserfs_tb_init (&tb, fs, path, 0x7fff);
+
+    /* reiserfs_fix_nodes & reiserfs_tb_balance must work 
+       for internal nodes only */
+    ih = 0;
+
+    retval = reiserfs_fix_nodes (M_INTERNAL, &tb, ih);
+    if (retval != CARRY_ON)
+	misc_die ("insert_pointer: reiserfs_fix_nodes failed with retval == %d",
+		  retval);
+    
+    /* child_pos: we insert after position child_pos: this feature of 
+       the insert_child; there is special case: we insert pointer after
+       (-1)-st key (before 0-th key) in the parent */
+    if (REISERFS_PATH_LEAF_POS (path) == 0 && path->pos_in_item == 0)
+	REISERFS_PATH_UPPARENT_POS (path, 0) = -1;
+    else if (REISERFS_PATH_UPPARENT (path, 0) == 0) {
+	REISERFS_PATH_UPPARENT_POS (path, 0) = 0;
+    }
+    
+    ih = 0;
+    body = (char *)bh;
+
+    reiserfs_tb_balance (&tb, ih, body, M_INTERNAL, 0);
+    leaf_is_in_tree_now (bh);
+}
+
+
+/* return 1 if new can be joined with last node on the path or with
+   its right neighbor, 0 otherwise */
+static int balance_condition_2_fails (reiserfs_bh_t * new, 
+				      reiserfs_path_t * path)
+{
+    const reiserfs_key_t *right_dkey;
+    int pos, used_space;
+    reiserfs_bh_t *bh;
+    reiserfs_ih_t *ih;
+    
+    bh = REISERFS_PATH_LEAF (path);
+    
+    if (reiserfs_tree_node_mergeable (bh, new))
+	/* new node can be joined with last buffer on the path */
+	return 1;
+    
+    /* new node can not be joined with its left neighbor */
+    
+    right_dkey = reiserfs_tree_rkey (path, fs);
+    if (!reiserfs_key_comp (right_dkey, &MAX_KEY))
+	/* there is no right neighbor */
+	return 0;
+    
+    pos = REISERFS_PATH_UPPOS (path, 1);
+    if (pos == reiserfs_node_items (bh = REISERFS_PATH_UPBUFFER (path, 1))) {
+	/* we have to read parent of right neighbor. For simplicity we
+	   call search_item, which will read right neighbor as well */
+	REISERFS_PATH_INIT(path_to_right_neighbor);
+	
+	if (reiserfs_tree_search_item (fs, right_dkey, &path_to_right_neighbor) 
+	    != ITEM_FOUND)
+	{
+	    reiserfs_panic("%s: block %lu, pointer %d: The left delimiting "
+			   "key %k of the block (%lu) is wrong, the item "
+			   "cannot be found", __FUNCTION__,
+			    REISERFS_PATH_UPBUFFER(path, 1)->b_blocknr, 
+			    pos, right_dkey,
+			    reiserfs_dc_get_nr(reiserfs_int_at (bh, pos + 1)));
+	}
+	
+	used_space = reiserfs_node_used
+		(REISERFS_PATH_LEAF(&path_to_right_neighbor));
+	
+	reiserfs_tree_pathrelse (&path_to_right_neighbor);
+    } else {
+	used_space = reiserfs_dc_get_size (reiserfs_int_at (bh, pos + 1));
+    }
+    
+    ih = reiserfs_ih_at (new, reiserfs_node_items (new) - 1);
+    if (reiserfs_node_free (new) >= used_space -
+	(reiserfs_leaf_mergeable (ih, (reiserfs_ih_t *)right_dkey, new->b_size)
+	 ? REISERFS_IH_SIZE : 0))
+    {
+	return 1;
+    }
+
+    return 0;
+}
+
+
+static void get_max_buffer_key (reiserfs_bh_t * bh, 
+				reiserfs_key_t * key)
+{
+    reiserfs_ih_t * ih;
+
+    ih = reiserfs_ih_at (bh, reiserfs_node_items (bh) - 1);
+    reiserfs_key_copy (key, &(ih->ih_key));
+
+    if (reiserfs_key_dir (key)) {
+	/* copy deh_offset 3-rd and 4-th key components of the last entry */
+	reiserfs_key_set_off (KEY_FORMAT_1, key, 
+		reiserfs_deh_get_off (reiserfs_deh (bh, ih) + 
+				      reiserfs_ih_get_entries (ih) - 1));
+
+    } else if (!reiserfs_key_stat (key))
+	/* get key of the last byte, which is contained in the item */
+	reiserfs_key_set_off (reiserfs_key_format (key), key, 
+			      reiserfs_key_get_off (key) + 
+			      reiserfs_leaf_ibytes (ih, bh->b_size) - 1);
+}
+
+static int tree_is_empty (void)
+{
+    return (reiserfs_sb_get_root (fs->fs_ondisk_sb) == ~(__u32)0 || 
+	    reiserfs_sb_get_root (fs->fs_ondisk_sb) == 0) ? 1 : 0;
+}
+
+
+static void make_single_leaf_tree (reiserfs_bh_t * bh) {
+    /* tree is empty, make tree root */
+    reiserfs_sb_set_root (fs->fs_ondisk_sb, bh->b_blocknr);
+    reiserfs_sb_set_height (fs->fs_ondisk_sb, 2);
+    reiserfs_buffer_mkdirty (fs->fs_super_bh);
+    leaf_is_in_tree_now (bh);
+}
+
+
+/* inserts pointer to leaf into tree if possible. If not, marks node as
+   uninsertable in special bitmap */
+static int try_to_insert_pointer_to_leaf (reiserfs_bh_t * new_bh) {
+    /* first and last keys of new buffer */
+    reiserfs_key_t * first_bh_key, last_bh_key;	
+    reiserfs_key_t last_path_buffer_last_key;
+    const reiserfs_key_t *dkey;
+    REISERFS_PATH_INIT (path);
+    reiserfs_bh_t * bh;			/* last path buffer */
+    int ret_value;
+
+    if (tree_is_empty () == 1) {
+	make_single_leaf_tree (new_bh);
+	return 0;
+    }
+
+    first_bh_key = reiserfs_ih_key_at (new_bh, 0);
+    
+    /* try to find place in the tree for the first key of the coming node */
+    ret_value = reiserfs_tree_search_item (fs, first_bh_key, &path);
+    if (ret_value == ITEM_FOUND)
+	goto cannot_insert;
+
+    /* get max key in the new node */
+    get_max_buffer_key (new_bh, &last_bh_key);
+
+    bh = REISERFS_PATH_LEAF (&path);
+    if (reiserfs_key_comp (reiserfs_ih_key_at (bh, 0), 
+			   &last_bh_key) == 1/* first is greater*/) 
+    {
+	/* new buffer falls before the leftmost leaf */
+	if (reiserfs_tree_node_mergeable (new_bh, bh))
+	    goto cannot_insert;
+	
+	dkey = reiserfs_tree_lkey (&path, fs);
+	if ((dkey && reiserfs_key_comp (dkey, &MIN_KEY) != 0) || 
+	    REISERFS_PATH_LEAF_POS (&path) != 0)
+	{
+	    misc_die ("try_to_insert_pointer_to_leaf: bad search result");
+	}
+	
+	path.pos_in_item = 0;
+	goto insert;
+    }
+    
+    /* get max key of buffer, that is in tree */
+    get_max_buffer_key (bh, &last_path_buffer_last_key);
+    if (reiserfs_key_comp (&last_path_buffer_last_key, 
+			   first_bh_key) != -1/* second is greater */)
+    {
+	/* first key of new buffer falls in the middle of node that is in tree */
+	goto cannot_insert;
+    }
+    
+    dkey = reiserfs_tree_rkey (&path, fs);
+    if (dkey && reiserfs_key_comp (dkey, &last_bh_key) != 1 
+	/* first is greater */)
+    {
+	goto cannot_insert;
+    }
+    
+    if (balance_condition_2_fails (new_bh, &path))
+	goto cannot_insert;
+
+
+ insert:
+    insert_pointer (new_bh, &path);
+    reiserfs_tree_pathrelse (&path);
+    return 0;
+    
+ cannot_insert:
+    reiserfs_tree_pathrelse (&path);
+    return 1;
+}
+
+
+
+/* everything should be correct already in the leaf but contents of extent
+   items. So we only
+   1. zero slots pointing to a leaf
+   2. zero pointers to blocks which are pointed already
+   3. what we should do with directory entries hashed by another hash?
+   they are deleted for now
+*/
+static void pass1_correct_leaf (reiserfs_filsys_t * fs,
+				reiserfs_bh_t * bh)
+{
+    unsigned int i, j;
+    reiserfs_ih_t * ih;
+    __u32 * ind_item;
+    __u32 unfm_ptr;
+    int dirty = 0;
+
+
+    ih = reiserfs_ih_at (bh, 0);
+    for (i = 0; i < reiserfs_node_items (bh); i ++, ih ++) {
+	if (reiserfs_ih_dir (ih)) {
+	    reiserfs_deh_t * deh;
+	    __u32 offset;
+	    char * name;
+	    int name_len;
+	    unsigned int hash_code;
+
+	    deh = reiserfs_deh (bh, ih);
+	    offset = 0;
+	    for (j = 0; j < reiserfs_ih_get_entries (ih); j ++) {
+		name = reiserfs_deh_name (deh + j, j);
+		name_len = reiserfs_direntry_name_len (ih, deh + j, j);
+
+		if ((j == 0 && is_dot (name, name_len)) ||
+		    (j == 1 && is_dot_dot (name, name_len))) {
+		    continue;
+		}
+
+		hash_code = reiserfs_hash_find (
+			name, name_len, reiserfs_deh_get_off (deh + j),
+			reiserfs_sb_get_hash (fs->fs_ondisk_sb));
+		
+		if (hash_code != reiserfs_sb_get_hash (fs->fs_ondisk_sb)) {
+		    fsck_log ("pass1: block %lu, item %d, entry %d: The "
+			      "entry \"%.*s\" of the %k is hashed with %s "
+			      "whereas proper hash is %s", bh->b_blocknr, 
+			      i, j, name_len, name, &ih->ih_key,
+			      reiserfs_hash_name (hash_code), 
+			      reiserfs_hash_name (
+				reiserfs_sb_get_hash (fs->fs_ondisk_sb)));
+		    
+		    if (reiserfs_ih_get_entries (ih) == 1) {
+			reiserfs_leaf_delete_item (fs, bh, i);
+			fsck_log(" - the only entry - item was deleted\n");
+			i --;
+			ih --;
+			break;
+		    } else {
+			reiserfs_leaf_delete_entry (fs, bh, i, j, 1);
+			fsck_log(" - deleted\n");
+			j --;
+			deh = reiserfs_deh (bh, ih);
+			continue;
+		    }
+		}
+
+		if (j && offset >= reiserfs_deh_get_off (deh + j)) {
+		    fsck_log ("pass1: block %lu, item %d, entry %d: The entry "
+			      "\"%.*s\" of the %k has hash offset %lu not "
+			      "larger smaller than the previous one %lu. The "
+			      "entry is deleted.\n", bh->b_blocknr, 
+			      i, j, name_len, name, &ih->ih_key, 
+			      reiserfs_deh_get_off(deh + j), offset);
+		    reiserfs_leaf_delete_entry (fs, bh, i, j, 1);
+		    j --;
+		    deh = reiserfs_deh (bh, ih);
+		    continue;
+		}
+
+		offset = reiserfs_deh_get_off (deh + j);
+	    }
+	    continue;
+	}
+
+
+	if (!reiserfs_ih_ext (ih))
+	    continue;
+
+	/* correct extent items */
+	ind_item = (__u32 *)reiserfs_item_by_ih (bh, ih);
+
+	for (j = 0; j < reiserfs_ext_count (ih); j ++) {
+	    unfm_ptr = d32_get (ind_item, j);
+
+	    if (!unfm_ptr)
+		continue;
+
+	    /* this corruption of extent item had to be fixed in pass0 */
+	    if (reiserfs_fs_block(fs, unfm_ptr) != BT_UNKNOWN)
+		/*!was_block_used (unfm_ptr))*/
+		reiserfs_panic ("%s: block %lu, item %d, pointer %d: The "
+				"wrong pointer (%u) in the file %K. Must "
+				"be fixed on pass0.",  __FUNCTION__, 
+				bh->b_blocknr, i, j, unfm_ptr, &ih->ih_key);
+
+	    /* 1. zero slots pointing to a leaf */
+	    if (pass0_block_isleaf (unfm_ptr)) {
+		dirty ++;
+		d32_put (ind_item, j, 0);
+		pass_1_stat (fs)->pointed_leaves ++;
+		continue;
+	    }
+
+	    /* 2. zero pointers to blocks which are pointed already */
+	    if (pass0_block_isbad_unfm (unfm_ptr)) {
+		/* this unformatted pointed more than once. Did we see 
+		   it already? */
+		if (!is_bad_unfm_in_tree_once (unfm_ptr)) {
+		    /* keep first reference to it and mark about that in
+                       special bitmap */
+		    mark_bad_unfm_in_tree_once (unfm_ptr);
+		} else {
+		    /* Yes, we have seen this pointer already, zero other 
+		       pointers to it. */
+		    dirty ++;
+		    d32_put (ind_item, j, 0);
+		    pass_1_stat (fs)->non_unique_pointers ++;
+		    continue;
+		}
+	    } else {
+		pass_1_stat (fs)->correct_pointers ++;
+	    }
+	}
+    }
+
+    if (dirty)
+	reiserfs_buffer_mkdirty (bh);
+}
+
+/* fsck starts creating of this bitmap on pass 1. It will then become
+   on-disk bitmap */
+static void init_new_bitmap (reiserfs_filsys_t * fs)
+{
+    unsigned int i;
+    unsigned long block;
+    unsigned long reserved;
+    unsigned long count, bmap_nr;
+    
+    count = reiserfs_sb_get_blocks (fs->fs_ondisk_sb);
+    
+    fsck_new_bitmap (fs) = reiserfs_bitmap_create(count);
+
+    /* mark_block_used skips 0, set the bit explicitly */
+    reiserfs_bitmap_set_bit (fsck_new_bitmap (fs), 0);
+
+    /* mark other skipped blocks and super block used */
+    for (i = 1; i <= fs->fs_super_bh->b_blocknr; i ++)
+	mark_block_used (i, 1);
+
+    /* mark bitmap blocks as used */
+    block = fs->fs_super_bh->b_blocknr + 1;
+    
+    bmap_nr = reiserfs_bmap_nr(count, fs->fs_blocksize);
+
+    for (i = 0; i < bmap_nr; i ++) {
+	mark_block_used (block, 1);
+	if (reiserfs_bitmap_spread (fs)) {
+	    block = (block / (fs->fs_blocksize * 8) + 1) * 
+		    (fs->fs_blocksize * 8);
+	} else {
+	    block ++;
+	}
+    }
+
+    reserved = reiserfs_journal_hostsize (fs->fs_ondisk_sb);
+    /* where does journal area (or reserved journal area) start from */
+
+    if (!reiserfs_new_location(fs->fs_super_bh->b_blocknr, fs->fs_blocksize) &&
+    	!reiserfs_old_location(fs->fs_super_bh->b_blocknr, fs->fs_blocksize))
+    {
+	misc_die ("init_new_bitmap: Wrong super block location, "
+		  "you must run --rebuild-sb.");
+    }
+
+    block = reiserfs_journal_start_must (fs);
+
+    for (i = block; i < reserved + block; i ++)
+	mark_block_used (i, 1);
+	
+
+    if (fs->fs_badblocks_bm)
+    	for (i = 0; i < count; i ++) {
+	    if (reiserfs_bitmap_test_bit (fs->fs_badblocks_bm, i)) {
+	    	if (reiserfs_bitmap_test_bit (fsck_new_bitmap (fs), i))
+	    	    reiserfs_panic ("%s: The block pointer to not data area, "
+				    "must be fixed on the pass0.\n",
+				    __FUNCTION__);
+		
+		reiserfs_bitmap_set_bit (fsck_new_bitmap (fs), i);
+	    }
+    	}
+}
+
+
+/* this makes a map of blocks which can be allocated when fsck will
+   continue */
+static void find_allocable_blocks (reiserfs_filsys_t * fs) {
+    unsigned long i;
+
+    fsck_progress ("Looking for allocable blocks .. ");
+
+    fsck_allocable_bitmap (fs) = reiserfs_bitmap_create 
+	    (reiserfs_sb_get_blocks (fs->fs_ondisk_sb));
+    reiserfs_bitmap_fill (fsck_allocable_bitmap (fs));
+
+    /* find how many leaves are not pointed by any extent items */
+    for (i = 0; i < reiserfs_sb_get_blocks (fs->fs_ondisk_sb); i ++) {
+	if (reiserfs_fs_block(fs, i) != BT_UNKNOWN) {
+	    /* journal (or reserved for it area), bitmaps, super block and
+	       blocks before it */
+	    continue;
+	}
+
+	if (pass0_block_isgood_unfm (i) && pass0_block_isbad_unfm (i)) {
+	    misc_die ("%s: The block (%lu) is marked as good and "
+		      "as bad at once.", __FUNCTION__, i);
+	}
+
+	if (pass0_block_isgood_unfm (i) || pass0_block_isbad_unfm (i)) {
+	    /* blocks which were pointed once or more then once 
+	       from extent items - they will not be allocated */
+	    continue;
+	}
+
+	/* make allocable not leaves, not bad blocks */
+	if (!pass0_block_isleaf (i))
+	    if (!fs->fs_badblocks_bm || 
+		!reiserfs_bitmap_test_bit (fs->fs_badblocks_bm, i))
+	    {
+		/* this is not leaf and it is not pointed by found extent 
+		   items, so it does not contains anything valuable */
+		make_allocable (i);
+		pass_1_stat (fs)->allocable_blocks ++;
+	    }
+    }
+    
+    fsck_progress ("finished\n");
+
+    fs->block_allocator = reiserfsck_new_blocknrs;
+    fs->block_deallocator = reiserfsck_free_block;
+}
+
+static void fsck_pass1_prep (reiserfs_filsys_t * fs) {
+    /* this will become an on-disk bitmap */
+    init_new_bitmap (fs);
+
+    /* bitmap of leaves which could not be inserted on pass 1. 
+       FIXME: no need to have 1 bit per block */
+    fsck_uninsertables (fs) = reiserfs_bitmap_create
+	    (reiserfs_sb_get_blocks (fs->fs_ondisk_sb));
+    reiserfs_bitmap_fill (fsck_uninsertables (fs));
+    
+    /* find blocks which can be allocated */
+    find_allocable_blocks (fs);
+
+    /* bitmap of bad unformatted nodes which are in the tree already */
+    bad_unfm_in_tree_once_bitmap = reiserfs_bitmap_create 
+	    (reiserfs_sb_get_blocks (fs->fs_ondisk_sb));
+
+    /* pass 1 does not deal with objectid */
+}
+
+static void fsck_pass1_save_result (reiserfs_filsys_t * fs) {
+    FILE * file;
+    int retval;
+
+    if (!(file = util_file_open("temp_fsck_file.deleteme", "w+")))
+	return;
+
+        
+    /* to be able to restart with pass 2 we need bitmap of
+       uninsertable blocks and bitmap of alocable blocks */
+    fsck_stage_start_put (file, PASS_1_DONE);
+    reiserfs_bitmap_save (file,  fsck_uninsertables (fs));
+    reiserfs_bitmap_save (file,  fsck_allocable_bitmap(fs));
+    reiserfs_bitmap_save (file,  fsck_new_bitmap(fs));
+    fsck_stage_end_put (file);
+    fclose (file);
+    retval = rename ("temp_fsck_file.deleteme", state_dump_file (fs));
+    if (retval != 0)
+	fsck_progress ("pass 1: Could not rename the temporary file "
+		       "temp_fsck_file.deleteme to %s",
+		       state_dump_file (fs));
+
+    /* to be able to pack/unpack metadata after pass2 in stage-by-stage mode, 
+       save into on-disk bitmap all blocks that are involved. 
+       it should not be flushed on disk not in stage-by-stage mode, as if fsck 
+       fails on pass1 we get wrong bitmap on the next fsck start */
+    reiserfs_bitmap_flush (fsck_allocable_bitmap(fs), fs);
+}
+
+
+void fsck_pass1_load_result (FILE * fp, reiserfs_filsys_t * fs) {
+    fsck_uninsertables (fs) = reiserfs_bitmap_load (fp);
+    fsck_allocable_bitmap (fs) = reiserfs_bitmap_load (fp);
+    fsck_new_bitmap (fs) = reiserfs_bitmap_load(fp);
+    
+    fs->block_allocator = reiserfsck_new_blocknrs;
+    fs->block_deallocator = reiserfsck_free_block;
+
+    if (!fsck_new_bitmap (fs) || !fsck_allocable_bitmap (fs) ||
+	!fsck_allocable_bitmap (fs))
+    {
+	fsck_exit ("State dump file seems corrupted. Run without -d");
+    }
+
+    /* we need objectid map on pass 2 to be able to relocate files */
+    proper_id_map (fs) = id_map_init();
+    fetch_objectid_map (proper_id_map (fs), fs);
+
+    fsck_progress ("Pass 1 result loaded. %d blocks used, %d allocable, "
+		   "still to be inserted %d\n",
+		   reiserfs_bitmap_ones (fsck_new_bitmap (fs)),
+		   reiserfs_bitmap_zeros (fsck_allocable_bitmap (fs)),
+		   reiserfs_bitmap_zeros (fsck_uninsertables (fs)));
+}
+
+
+extern reiserfs_bitmap_t * leaves_bitmap;
+
+/* reads blocks marked in leaves_bitmap and tries to insert them into
+   tree */
+static void do_pass_1 (reiserfs_filsys_t * fs)
+{
+    unsigned long done = 0, total;
+    reiserfs_bh_t * bh;
+    unsigned long i, n; 
+    int what_node;
+
+
+    /* on pass0 we have found that amount of leaves */
+    total = reiserfs_bitmap_ones (leaves_bitmap);
+
+    /* read all leaves found on the pass 0 */
+    for (n = 0; n < 2; n++) {
+	for (i = 0; i < reiserfs_sb_get_blocks (fs->fs_ondisk_sb); i ++) {
+	    if (!pass0_block_isleaf (i))
+		continue;
+
+	    if (n && !fsck_bitmap_isuninsert(i))
+		continue;
+	    
+	    if (!fsck_quiet(fs)) {
+		util_misc_progress (fsck_progress_file (fs), 
+				    &done, total, 1, 0);
+	    }
+
+	    /* at least one of nr_to_read blocks is to be checked */
+	    bh = reiserfs_buffer_read (fs->fs_dev, i, fs->fs_blocksize);
+	    if (!bh) {
+		/* we were reading one block at time, and failed, so mark
+		    block bad */
+		fsck_progress ("pass1: Reading of the block %lu failed\n", i);
+		continue;
+	    }
+
+	    what_node = reiserfs_node_type (bh);
+	    if ( what_node != NT_LEAF ) {
+		fsck_info_checkmem();
+		misc_die ("build_the_tree: Nothing but leaves "
+			  "are expected. Block %lu - %s\n", 
+			  i, reiserfs_node_type_name(what_node));
+	    }
+
+	    if (is_block_used (i))
+		if (!(reiserfs_journal_block (fs, i) &&
+		      fsck_data(fs)->rebuild.use_journal_area))
+		{
+		    /* block is in new tree already */
+		    misc_die ("build_the_tree: The leaf (%lu) "
+			      "is in the tree already\n", i);
+		}
+
+	    /* fprintf (block_list, "leaf %d\n", i + j);*/
+	    if (n == 0) {
+		pass_1_stat (fs)->leaves ++;
+
+		/* the leaf may still contain extent items with wrong
+		   slots. Fix that */
+		pass1_correct_leaf (fs, bh);
+
+		if (reiserfs_nh_get_items (NODE_HEAD (bh)) == 0) {
+		    /* all items were deleted on pass 0 or pass 1 */
+		    reiserfs_buffer_mkclean (bh);
+		    reiserfs_buffer_close (bh);
+		    make_allocable (i);
+		    pass_1_stat (fs)->allocable_blocks ++;
+		    continue;
+		}
+	    
+		if (fsck_leaf_check(bh)) {
+		    /* FIXME: will die */
+		    fsck_log ("%s: WARNING: The leaf (%lu) is formatted "
+			      "badly. Will be handled on the the pass2.\n",
+			      __FUNCTION__, bh->b_blocknr);
+
+		    fsck_bitmap_mkuninsert (bh->b_blocknr);
+		    reiserfs_buffer_close (bh);
+		    continue;
+		}
+	    }
+
+	    if (reiserfs_journal_block (fs, i) && 
+		fsck_data(fs)->rebuild.use_journal_area) 
+	    {
+		/* FIXME: temporary thing */
+		if (tree_is_empty ()) {
+		    /* we insert inot tree only first leaf of journal */
+		    unsigned long block;
+		    reiserfs_bh_t * new_bh;
+
+		    block = alloc_block ();
+		    if (!block)
+			misc_die ("could not allocate block");
+			
+		    new_bh = reiserfs_buffer_open (bh->b_dev, block, 
+						   bh->b_size);
+		    
+		    memcpy (new_bh->b_data, bh->b_data, bh->b_size);
+		    reiserfs_buffer_mkuptodate (new_bh, 1);
+		    reiserfs_buffer_mkdirty (new_bh);
+		    make_single_leaf_tree (new_bh);
+		    reiserfs_buffer_close (new_bh);
+		    reiserfs_buffer_close (bh);
+		    continue;
+		}
+
+		/* other blocks of journal will be inserted in pass 2 */
+		fsck_bitmap_mkuninsert (bh->b_blocknr);
+		reiserfs_buffer_close (bh);
+		continue;
+	    }
+
+	    if (!try_to_insert_pointer_to_leaf(bh)) {
+		/* Inserted successfully. */
+		if (n) {
+		    fsck_bitmap_cluninsert (i);
+		}
+	    } else {
+		if (!n) {
+		    /* Not inserted on the 1st pass. */
+		    fsck_bitmap_mkuninsert (i);
+		    done--;
+		}
+	    }
+	    
+	    reiserfs_buffer_close (bh);
+	}
+    }
+
+    if (!fsck_quiet(fs))
+	fsck_progress ("\n");
+}
+
+
+static void fsck_pass1_fini (reiserfs_filsys_t * fs) {
+    time_t t;
+
+    /* update fsck_state */
+    
+    /* we  should not flush bitmaps on disk after pass1, because
+       new_bitmap contains only those blocks which are good leaves or 
+       just allocated internal blocks. */
+       
+    reiserfs_sb_set_state (fs->fs_ondisk_sb, PASS_1_DONE);
+    reiserfs_buffer_mkdirty (fs->fs_super_bh);
+
+    /* write all dirty blocks */
+    fsck_progress ("Flushing..");
+    fs->fs_dirt = 1;
+    reiserfs_fs_flush (fs);
+    fsck_progress ("finished\n");
+
+    fsck_stage_report (FS_PASS1, fs);
+
+    /* we do not need this anymore */
+    fsck_pass0_aux_fini();
+    reiserfs_bitmap_delete (bad_unfm_in_tree_once_bitmap);
+
+    if (!fsck_run_one_step (fs)) {
+	if (fsck_info_ask (fs, "Continue? (Yes):", "Yes\n", 1))
+	    /* reiserfsck continues */
+	    return;
+    } else
+	fsck_pass1_save_result (fs);
+
+    if (proper_id_map (fs)) {
+	/* when we run pass 1 only - we do not have proper_id_map */
+	id_map_free(proper_id_map (fs));
+	proper_id_map (fs) = 0;
+    }
+    
+    time (&t);
+    fsck_progress ("###########\n"
+		   "reiserfsck finished pass 1 at %s"
+		   "###########\n", ctime (&t));
+    fs->fs_dirt = 1;
+    reiserfs_fs_close (fs);
+    exit(0);
+}
+
+
+void fsck_pass1 (reiserfs_filsys_t * fs) {
+    fsck_progress ("Pass 1 (will try to insert %lu leaves):\n",
+		   reiserfs_bitmap_ones (fsck_source_bitmap (fs)));
+    if (fsck_log_file (fs) != stderr)
+	fsck_log ("####### Pass 1 #######\n");
+
+
+    fsck_pass1_prep (fs);
+
+    /* try to insert leaves found during pass 0 */
+    do_pass_1 (fs);
+
+    fsck_pass1_fini (fs);
+}
+
diff --git a/utils/fsck/pass2.c b/utils/fsck/pass2.c
new file mode 100644
index 0000000..faf31f6
--- /dev/null
+++ b/utils/fsck/pass2.c
@@ -0,0 +1,248 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "fsck.h"
+#include "misc/malloc.h"
+#include "util/device.h"
+#include "util/misc.h"
+
+#include <time.h>
+
+/* on pass2 we take leaves which could not be inserted into tree
+   during pass1 and insert each item separately. It is possible that
+   items of different objects with the same key can be found. We treat
+   that in the following way: we put it into tree with new key and
+   link it into /lost+found directory with name made of dir,oid. When
+   coming item is a directory - we delete object from the tree, put it
+   back with different key, link it to /lost+found directory and
+   insert directory as it is */
+
+static void fsck_pass2_save_result (reiserfs_filsys_t * fs) {
+    FILE * file;
+    int retval;
+
+    file = util_file_open("temp_fsck_file.deleteme", "w+");
+    if (!file)
+	return;
+    
+    /* to be able to restart from semantic we do not need to save
+       anything here, but two magic values */
+    fsck_stage_start_put (file, TREE_IS_BUILT);
+    fsck_stage_end_put (file);
+    fclose (file);
+    retval = rename ("temp_fsck_file.deleteme", state_dump_file (fs));
+    if (retval != 0)
+	fsck_progress ("%s: Could not rename the temporary file "
+		       "temp_fsck_file.deleteme to %s",
+		        __FUNCTION__, state_dump_file (fs));
+}
+
+/* we have nothing to load from a state file, but we have to fetch
+   on-disk bitmap, copy it to allocable bitmap, and fetch objectid
+   map */
+void fsck_pass2_load_result (reiserfs_filsys_t * fs) {
+    fsck_new_bitmap (fs) = 
+	    reiserfs_bitmap_create (reiserfs_sb_get_blocks (fs->fs_ondisk_sb));
+    reiserfs_bitmap_copy (fsck_new_bitmap (fs), fs->fs_bitmap2);
+    
+    fsck_allocable_bitmap (fs) = 
+	    reiserfs_bitmap_create (reiserfs_sb_get_blocks (fs->fs_ondisk_sb));
+    reiserfs_bitmap_copy (fsck_allocable_bitmap (fs), fs->fs_bitmap2);
+
+    fs->block_allocator = reiserfsck_new_blocknrs;
+    fs->block_deallocator = reiserfsck_free_block;
+
+    /* we need objectid map on semantic pass to be able to relocate files */
+    proper_id_map (fs) = id_map_init();
+    fetch_objectid_map (proper_id_map (fs), fs);    
+}
+
+#include <unistd.h>
+
+/* uninsertable blocks are marked by 0s in uninsertable_leaf_bitmap
+   during the pass 1. They must be not in the tree */
+static void do_pass_2 (reiserfs_filsys_t * fs) {
+
+    reiserfs_bh_t * bh;
+    reiserfs_ih_t * ih;
+    unsigned long total;
+    unsigned long done;
+    unsigned long b;
+    int i, n, ntype;
+
+    done = 0;
+    if (!(total = reiserfs_bitmap_zeros(fsck_uninsertables(fs)) * 2))
+	return;
+
+    fsck_progress ("Pass 2:\n");
+
+    /* 2 loops for SD items and others. */
+    for (n = 0; n < 2; n++) {
+        b = 0;
+        while ((b < fsck_uninsertables(fs)->bm_bit_size) && 
+	       reiserfs_bitmap_find_zero_bit(fsck_uninsertables(fs), &b) == 0) 
+	{
+	    bh = reiserfs_buffer_read (fs->fs_dev, b, fs->fs_blocksize);
+	    if (bh == 0) {
+	        fsck_log ("pass_2: Reading of the block (%lu) failed on "
+			  "the device 0x%x\n", b, fs->fs_dev);
+                goto cont;
+            }
+	
+            if (is_block_used (bh->b_blocknr) && 
+		!(reiserfs_journal_block (fs, bh->b_blocknr) &&
+		  fsck_data(fs)->rebuild.use_journal_area)) 
+	    {
+		fsck_log("%s: The block (%lu) is in the tree already. "
+			 "Should not happen.\n", __FUNCTION__, bh->b_blocknr);
+		goto cont;
+            }
+	    
+            /* this must be leaf */
+            ntype = reiserfs_node_type (bh);
+	    if (ntype != NT_LEAF) { // || B_IS_KEYS_LEVEL(bh)) {
+	        fsck_log ("%s: The block (%b), marked as a leaf on "
+			  "the first two passes, is not a leaf! Will "
+			  "be skipped.\n", __FUNCTION__, bh);
+	        goto cont;
+	    }
+
+	    /* Item-by-item loop. */
+	    for (i = 0, ih = reiserfs_ih_at (bh, 0); 
+		 i < reiserfs_node_items (bh); i ++, ih ++)
+	    {
+		/* Only SD items are inserted initially. */
+		if (n == 0 && !reiserfs_ih_stat (ih))
+		    continue;
+		
+		/* All other items are inserted later. */
+		if (n && reiserfs_ih_stat (ih))
+		    continue;
+		
+		if (fsck_leaf_item_check (bh, ih, reiserfs_item_by_ih (bh, ih)))
+		    continue;
+		    
+		fsck_tree_insert_item (ih, reiserfs_item_by_ih (bh, ih), 1);
+	    }
+
+	    if (n) {
+		pass_2_stat (fs)->leaves ++;
+		make_allocable (b);
+	    }
+
+	    if (!fsck_quiet(fs)) {
+		util_misc_progress (fsck_progress_file (fs), 
+				    &done, total, 1, 0);
+	    }
+        cont:
+	    reiserfs_buffer_close (bh);
+	    b++;
+        }   
+    }
+
+    if (!fsck_quiet(fs))	
+	fsck_progress ("\n");
+}
+
+
+static void fsck_pass2_fini (reiserfs_filsys_t * fs) {
+    time_t t;
+
+    /* we can now flush new_bitmap on disk as tree is built and 
+       contains all data, which were found on dik at start in 
+       used bitmaps */
+    reiserfs_bitmap_copy (fs->fs_bitmap2, fsck_new_bitmap (fs));
+    
+    /* we should copy new_bitmap to allocable bitmap, becuase evth what is 
+       used for now (marked as used in new_bitmap) should not be allocable;
+       and what is not in tree for now should be allocable.
+       these bitmaps differ because on pass2 we skip those blocks, whose 
+       SD's are not in the tree, and therefore extent items of such bad 
+       leaves points to not used and not allocable blocks. */
+
+    /* DEBUG only
+    if (reiserfs_bitmap_compare (fsck_allocable_bitmap (fs), 
+				 fsck_new_bitmap(fs))) 
+    {
+        fsck_log ("Allocable bitmap differs from the new bitmap after pass2\n");
+	reiserfs_bitmap_copy (fsck_allocable_bitmap(fs), fsck_new_bitmap (fs));
+    } */
+
+    /* update super block: objectid map, fsck state */
+    reiserfs_sb_set_state (fs->fs_ondisk_sb, TREE_IS_BUILT);
+    reiserfs_buffer_mkdirty (fs->fs_super_bh);
+  
+    /* write all dirty blocks */
+    fsck_progress ("Flushing..");
+    id_map_flush(proper_id_map (fs), fs);
+    fs->fs_dirt = 1;
+    reiserfs_bitmap_flush (fs->fs_bitmap2, fs);
+    reiserfs_fs_flush (fs);
+    fsck_progress ("finished\n");
+    
+    /* fixme: should be optional */
+/*    fsck_progress ("Tree is built. Checking it - ");
+    reiserfsck_check_pass1 ();
+    fsck_progress ("finished\n");*/
+
+    fsck_stage_report (FS_PASS2, fs);
+
+    /* free what we do not need anymore */
+    reiserfs_bitmap_delete (fsck_uninsertables (fs));
+
+    if (!fsck_run_one_step (fs)) {
+	if (fsck_info_ask (fs, "Continue? (Yes):", "Yes\n", 1))
+	    /* reiserfsck continues */
+	    return;
+    } else
+	fsck_pass2_save_result (fs);
+
+    
+    id_map_free(proper_id_map (fs));
+    proper_id_map (fs) = 0;
+    
+    reiserfs_bitmap_delete (fsck_new_bitmap (fs));
+    reiserfs_bitmap_delete (fsck_allocable_bitmap (fs));
+    
+    time (&t);
+    fsck_progress ("###########\n"
+		   "reiserfsck finished pass 2 at %s"
+		   "###########\n", ctime (&t));
+    fs->fs_dirt = 1;
+    reiserfs_fs_close (fs);
+    exit(0);
+}
+
+
+
+void fsck_pass2 (reiserfs_filsys_t * fs) {
+    if (fsck_log_file (fs) != stderr)
+	fsck_log ("####### Pass 2 #######\n");
+    
+    /* take blocks which were not inserted into tree yet and put each
+	item separately */
+    do_pass_2 (fs);
+    
+    fsck_pass2_fini (fs);
+
+    if (reiserfs_sb_get_root (fs->fs_ondisk_sb) == ~(__u32)0 || 
+	reiserfs_sb_get_root (fs->fs_ondisk_sb) == 0)
+	misc_die ( "\nNo reiserfs metadata found.  If you are sure that you had the reiserfs\n"
+		"on this partition,  then the start  of the partition  might be changed\n"
+		"or all data were wiped out. The start of the partition may get changed\n"
+		"by a partitioner  if you have used one.  Then you probably rebuilt the\n"
+		"superblock as there was no one.  Zero the block at 64K offset from the\n"
+		"start of the partition (a new super block you have just built) and try\n"
+	        "to move the start of the partition a few cylinders aside  and check if\n" 
+		"debugreiserfs /dev/xxx detects a reiserfs super block. If it does this\n"
+	        "is likely to be the right super block version.                        \n"
+		"If this makes you nervous, try  www.namesys.com/support.html,  and for\n"
+		"$25 the author of fsck,  or a colleague  if he is out,  will  step you\n"
+		"through it all.\n");
+}
diff --git a/utils/fsck/pass4.c b/utils/fsck/pass4.c
new file mode 100644
index 0000000..da01664
--- /dev/null
+++ b/utils/fsck/pass4.c
@@ -0,0 +1,189 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "fsck.h"
+#include "util/misc.h"
+
+static int fsck_squeeze(reiserfs_filsys_t *fs, reiserfs_path_t *path) {
+	reiserfs_bh_t *bh_left, *bh;
+	REISERFS_PATH_INIT(lpath);
+	reiserfs_key_t key;
+	__u64 off;
+	__u32 oid;
+	int res;
+	
+	bh = REISERFS_PATH_LEAF(path);
+	
+	key = *(reiserfs_ih_key_at(bh, 0));
+	if ((off = reiserfs_key_get_off(&key)) == 0) {
+		if ((oid = reiserfs_key_get_oid(&key)) == 0) 
+			reiserfs_panic("Object id 0 found in the tree.");
+		
+		reiserfs_key_set_oid(&key, reiserfs_key_get_oid(&key) - 1);
+		reiserfs_key_set_off(reiserfs_key_format(&key), &key, -1ull);
+	} else {
+		reiserfs_key_set_off(reiserfs_key_format(&key), &key, 
+				     reiserfs_key_get_off(&key) - 1);
+	}
+	
+	reiserfs_tree_search_item (fs, &key, &lpath);
+	bh_left = REISERFS_PATH_LEAF (&lpath);
+	
+	if (bh->b_blocknr == bh_left->b_blocknr || 
+	    !reiserfs_tree_node_mergeable(bh_left, bh))
+	{
+		reiserfs_tree_pathrelse(&lpath);
+		return 0;
+	}
+
+	/* Mergeable leaves must be merged. */
+	res = reiserfs_tree_merge(fs, &lpath, path);
+	reiserfs_tree_pathrelse(&lpath);
+	reiserfs_bitmap_clear_bit(fsck_new_bitmap (fs), bh->b_blocknr);
+	return res;
+}
+
+void fsck_cleanup (void) {
+    const reiserfs_key_t * rdkey;
+    reiserfs_path_t path;
+    reiserfs_key_t key;
+    reiserfs_bh_t * bh;
+    reiserfs_ih_t * ih;
+    unsigned long items;
+    int i, res;
+
+    path.path_length = REISERFS_PATH_OFFILL;
+    key = root_dir_key;
+    
+    fsck_progress ("Pass 4 - ");
+    items = 0;
+
+    while (1) {
+	res = reiserfs_tree_search_item (fs, &key, &path);
+	
+	bh = REISERFS_PATH_LEAF (&path);
+	ih = REISERFS_PATH_IH (&path);
+	
+	if (res != ITEM_FOUND) {
+	    if (REISERFS_PATH_LEAF_POS (&path) == 0)
+		    break;
+	    
+	    REISERFS_PATH_LEAF_POS (&path) --;
+	    ih = REISERFS_PATH_IH (&path);
+
+	    if (reiserfs_key_comp2(&key, &ih->ih_key))
+		    break;
+            
+	    /* Position found. */
+	    //fsck_log("Warning: Node %lu, item %u, %k: item start is expected, "
+	    //	     "not a unit.\n", bh->b_blocknr, 
+	    //	     REISERFS_PATH_LEAF_POS (&path), &ih->ih_key);
+	}
+	
+	/* print ~ how many leaves were scanned and how fast it was */
+	if (!fsck_quiet (fs))
+	    util_misc_speed (fsck_progress_file(fs), items++, 0, 50, 0);
+
+	for (i = REISERFS_PATH_LEAF_POS (&path); 
+	     i < reiserfs_node_items (bh); i ++, ih ++)
+	{
+	    if (!fsck_item_reach(ih)) {
+		REISERFS_PATH_LEAF_POS (&path) = i;
+		rdkey = reiserfs_tree_next_key(&path, fs);
+		if (rdkey)
+		    key = *rdkey;
+		else
+		    memset (&key, 0xff, REISERFS_KEY_SIZE);
+		
+		pass_4_stat (fs)->deleted_items ++;
+	
+		/* fsck_log("Node %lu, item %u, %k: delete.\n", 
+			 bh->b_blocknr, i, &ih->ih_key); */
+		reiserfs_tree_delete (fs, &path, 0);
+		goto cont;
+	    }
+	
+	    if (reiserfs_ih_get_flags(ih) != 0) {
+		reiserfs_ih_clflags(ih);
+		reiserfs_buffer_mkdirty(bh);
+	    }
+	    
+	    /* Merge mergeable items. */
+	    if (i == 0)
+		continue;
+	    
+	    if (reiserfs_ih_stat(ih))
+		    continue;
+	    
+	    /* If not stat data and types match, try to merge items. */
+	    if (reiserfs_key_get_type(&ih->ih_key) != 
+		reiserfs_key_get_type(&(ih - 1)->ih_key))
+	    {
+		continue;
+	    }
+	    
+	    if (reiserfs_ih_dir(ih) || 
+		must_there_be_a_hole(ih - 1, &ih->ih_key) == 0)
+	    {
+		REISERFS_PATH_LEAF_POS (&path) = i;
+		rdkey = reiserfs_tree_next_key(&path, fs);
+		if (rdkey)
+		    key = *rdkey;
+		else
+		    memset (&key, 0xff, REISERFS_KEY_SIZE);
+		
+		/* fsck_log ("%s: 2 items of the same type %k, %k are found "
+			  "in the same node (%d), pos (%u). Merged.\n", 
+			  __FUNCTION__, &ih->ih_key, &(ih + 1)->ih_key,
+			  bh->b_blocknr, REISERFS_PATH_LEAF_POS(&path)); */
+		fsck_tree_merge(&path);
+		goto cont;
+	    }
+	}
+	
+	REISERFS_PATH_LEAF_POS(&path) = i - 1;
+	rdkey = reiserfs_tree_next_key (&path, fs);
+	if (rdkey)
+	    key = *rdkey;
+	else
+	    memset (&key, 0xff, REISERFS_KEY_SIZE);	
+	
+	fsck_squeeze(fs, &path);
+	
+	reiserfs_tree_pathrelse (&path);
+    cont:
+	/* to make gcc 3.2 do not sware here */;
+    }
+
+    reiserfs_tree_pathrelse (&path);
+
+    fsck_progress ("finished\n");
+    fsck_stage_report (FS_CLEANUP, fs);
+
+    /* after pass 4 */
+
+    /* put bitmap on place */
+    reiserfs_bitmap_copy (fs->fs_bitmap2, fsck_new_bitmap (fs));
+
+    /* update super block */
+    reiserfs_sb_set_free (fs->fs_ondisk_sb, 
+			  reiserfs_bitmap_zeros (fsck_new_bitmap (fs)));
+    
+    reiserfs_buffer_mkdirty (fs->fs_super_bh);
+
+    /* write all dirty blocks */
+    fsck_progress ("Flushing..");
+    fs->fs_dirt = 1;
+    reiserfs_bitmap_flush (fs->fs_bitmap2, fs);
+    reiserfs_fs_flush (fs);
+    fsck_progress ("finished\n");
+
+    
+    return;
+}
diff --git a/utils/fsck/relocate.c b/utils/fsck/relocate.c
new file mode 100644
index 0000000..8ce32ac
--- /dev/null
+++ b/utils/fsck/relocate.c
@@ -0,0 +1,212 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "fsck.h"
+#include "misc/malloc.h"
+
+/* relocation rules: we have an item (it is taken from "non-insertable"
+   leaf). It has original key yet. We check to see if object with this
+   key is remapped. Object can be only remapped if it is not a piece
+   of directory */
+
+/* in list of this structures we store what has been relocated. */
+struct relocated {
+    unsigned long old_dir_id;
+    unsigned long old_objectid;
+    
+    unsigned long new_objectid;
+    
+    struct relocated * next;
+};
+
+/* all relocated files will be linked into lost+found directory at the
+   beginning of semantic pass */
+static struct relocated * relocated_list = NULL;
+
+__u32 fsck_relocate_get_oid (reiserfs_key_t * key) {
+    struct relocated *cur = relocated_list;
+
+    while (cur) {
+	if (cur->old_dir_id == reiserfs_key_get_did (key) &&
+	    cur->old_objectid == reiserfs_key_get_oid (key))
+	    /* object is relocated already */
+	    return cur->new_objectid;
+	cur = cur->next;
+    }
+    return 0;
+}
+
+/* return objectid the object has to be remapped with */
+__u32 fsck_relocate_oid(reiserfs_key_t * key) {
+    struct relocated * cur;
+    __u32 cur_id;
+
+    if ((cur_id = fsck_relocate_get_oid (key)) != 0)
+    	return cur_id;
+
+    cur = misc_getmem (sizeof (struct relocated));
+    cur->old_dir_id = reiserfs_key_get_did (key);
+    cur->old_objectid = reiserfs_key_get_oid (key);
+    cur->new_objectid = id_map_alloc(proper_id_map(fs));
+    cur->next = relocated_list;
+    relocated_list = cur;
+    pass_2_stat (fs)->relocated ++;
+    /*
+    fsck_log ("relocation: %K is relocated to [%lu, %lu]\n",
+	      key, reiserfs_key_get_did (key), cur->new_objectid);
+    */
+    return cur->new_objectid;
+}
+
+/* relocated files get added into lost+found with slightly different names */
+static __u64 link_one (struct relocated * file) {
+    char name[REISERFS_NAME_MAX];
+    reiserfs_key_t obj_key;
+    __u64 len = 0;
+    int entry_len;
+
+    name[0] = '\0';
+    sprintf(name, "%lu,%lu", file->old_dir_id, file->new_objectid);
+    reiserfs_key_set_did (&obj_key, file->old_dir_id);
+    reiserfs_key_set_oid (&obj_key, file->new_objectid);
+
+    /* 0 for fsck_need does not mean too much - it would make effect if there 
+     * were no this directory yet. But /lost_found is there already */
+    entry_len = reiserfs_direntry_entry_estimate(name, fs->lost_format);
+    len = reiserfs_tree_insert_entry (fs, &lost_found_dir_key, name, entry_len,
+				      &obj_key, 0/*fsck_need*/);
+    return len;
+}
+
+void fsck_relocate_mklinked(reiserfs_key_t *new_key) {
+    struct relocated *cur = relocated_list;
+    struct relocated *prev = NULL;
+
+    while (cur) {
+	if (cur->old_dir_id == reiserfs_key_get_did(new_key) && 
+	    cur->new_objectid == reiserfs_key_get_oid(new_key))
+	    break;
+
+	prev = cur;
+	cur = cur->next;
+    }
+
+    if (cur) {	
+	/* len = link_func(cur); */
+
+	if (prev) 
+	    prev->next = cur->next;
+	else
+	    relocated_list = cur->next;
+
+	misc_freemem (cur);
+    }
+}
+
+void fsck_relocate_link_all (void) {
+    struct relocated * tmp;
+    
+    while (relocated_list) {
+	link_one (relocated_list);
+	tmp = relocated_list;
+	relocated_list = relocated_list->next;
+	misc_freemem (tmp);
+    }
+}
+
+/* check whether there are any directory items with this key 
+   Returns:
+   0 is relocation is not needed;
+   1 is the whole file relocation is needed;
+   2 if a new item only relocation is needed. 
+ */
+__u32 fsck_relocate_check (reiserfs_ih_t * ih, int isdir) {
+    const reiserfs_key_t * rkey;
+    reiserfs_ih_t * path_ih;
+    reiserfs_path_t path;
+    reiserfs_key_t key;
+    int found_dir;
+
+    /* starting with the leftmost item with this key */
+    key = ih->ih_key;
+    reiserfs_key_set_sec (KEY_FORMAT_1, &key, OFFSET_SD, TYPE_STAT_DATA);
+
+    while (1) {
+	reiserfs_tree_search_item (fs, &key, &path);
+	
+	if (REISERFS_PATH_LEAF_POS (&path) == 
+	    reiserfs_node_items (REISERFS_PATH_LEAF (&path))) 
+	{
+	    rkey = reiserfs_tree_rkey (&path, fs);
+	    if (rkey && !reiserfs_key_comp2 (&key, rkey)) {
+		/* file continues in the right neighbor */
+		key = *rkey;
+		reiserfs_tree_pathrelse (&path);
+		continue;
+	    }
+	    
+	    /* there is no more items with this key */
+	    reiserfs_tree_pathrelse (&path);
+	    break;
+	}
+
+	path_ih = REISERFS_PATH_IH (&path);
+	if (reiserfs_key_comp2 (&key, &(path_ih->ih_key))) {
+	    /* there are no more item with this key */
+	    reiserfs_tree_pathrelse (&path);
+	    break;
+	}
+
+	found_dir = reiserfs_dir(path_ih, REISERFS_PATH_ITEM (&path));
+	
+	if (reiserfs_ih_stat (path_ih)) {
+	    if (reiserfs_ih_ischeck (path_ih)) {
+		/* we have checked it already */
+		reiserfs_tree_pathrelse (&path);
+
+		if ((found_dir && isdir) || (!found_dir && !isdir)) {
+		    /* If the item being inserted and the found one are 
+		       both either directory ones of not directory ones, 
+		       no relocation is needed. */
+		    return 0;
+		}
+		
+		/* If new one is a dirrectory one, relocate file in the tree. */
+		if (isdir) return 1;
+		
+		/* If new one is file and there is a directory in the tree, return
+		   id for the relocation, allocate it if needed. */
+		return fsck_relocate_oid (&path_ih->ih_key);
+	    } else {
+		reiserfs_ih_mkcheck (path_ih);
+		reiserfs_buffer_mkdirty (REISERFS_PATH_LEAF(&path));
+	    }
+	}
+	
+	reiserfs_tree_pathrelse (&path);
+	
+	if (isdir) {
+	    /* If directory, force relocate as it costs nothing for 
+	       the directory, and do not spend time on this check. */
+	    return 1;
+	}
+	
+	/* ok, item found, but make sure that it is not a directory one */
+	if (found_dir) {
+	    /* item of directory found. so, we have to relocate the file */
+	    return 1;
+	}
+	
+	key = path_ih->ih_key;
+	reiserfs_key_set_off (KEY_FORMAT_1, &key, 
+			      reiserfs_key_get_off (&key) + 1);
+    }
+
+    return 0;
+}
diff --git a/utils/fsck/rollback.c b/utils/fsck/rollback.c
new file mode 100644
index 0000000..1611f56
--- /dev/null
+++ b/utils/fsck/rollback.c
@@ -0,0 +1,319 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "fsck.h"
+#include "misc/malloc.h"
+#include "util/misc.h"
+
+#include <sys/stat.h>
+#include <unistd.h>
+#include <errno.h>
+
+#define ROLLBACK_FILE_START_MAGIC       "_RollBackFileForReiserfsFSCK"
+
+static struct block_handler * rollback_blocks_array;
+static __u32 rollback_blocks_number = 0;
+static FILE * s_rollback_file = 0;
+static FILE * log_file;
+static int do_rollback = 0;
+
+static char * rollback_data;
+static unsigned int rollback_blocksize;
+
+void fsck_rollback_init (char * rollback_file, unsigned int *blocksize, FILE * log) {
+    char * string;
+    struct stat buf;
+    
+    if (rollback_file == NULL)
+        return;
+        
+    stat(rollback_file, &buf);
+    
+    s_rollback_file = fopen (rollback_file, "w+");    
+    if (s_rollback_file == NULL) {
+	fprintf (stderr, "Cannot create file %s, work without "
+		 "a rollback file\n", rollback_file);
+        return;
+    }
+
+    rollback_blocksize = *blocksize;
+
+    string = ROLLBACK_FILE_START_MAGIC;
+    fwrite (string, 28, 1, s_rollback_file);
+    fwrite (&rollback_blocksize, sizeof(rollback_blocksize), 
+	    1, s_rollback_file);
+    
+    fwrite (&rollback_blocks_number, sizeof(rollback_blocks_number), 
+	    1, s_rollback_file);
+    
+    fflush(s_rollback_file);
+        
+    rollback_data = misc_getmem(rollback_blocksize);
+    
+//    printf("\ncheckmem1");
+//    fflush (stdout);
+//    checkmem (rollback_data, misc_memsize((char *)rollback_data));
+//    printf(" OK");
+    
+    log_file = log;
+    if (log_file)
+        fprintf (log_file, "rollback: file (%s) initialize\n", rollback_file);
+
+    do_rollback = 0;
+}
+
+#if 0
+static void erase_rollback_file (char * rollback_file) {
+    close_rollback_file ();
+    unlink (rollback_file);    
+}
+#endif
+
+int fsck_rollback_prep (char * rollback_file, FILE * log) {
+    char string [28];
+    struct stat buf;
+    
+    if (rollback_file == NULL)
+        return -1;
+    
+    if (stat(rollback_file, &buf)) {
+	fprintf (stderr, "Cannot stat rollback file (%s)\n", rollback_file);
+	return -1;
+    }
+        
+    s_rollback_file = fopen (rollback_file, "r+");
+    if (s_rollback_file == NULL) {
+	fprintf (stderr, "Cannot open file (%s)\n", rollback_file);
+	return -1;
+    }
+    
+    fread (string, 28, 1, s_rollback_file);
+    if (!strcmp (string, ROLLBACK_FILE_START_MAGIC)) {
+        fprintf (stderr, "Specified file (%s) does not look like "
+		 "a rollback file\n", rollback_file);
+	
+        fclose (s_rollback_file);
+        s_rollback_file = 0;
+        return -1;
+    }
+    
+    fread (&rollback_blocksize, sizeof (rollback_blocksize), 
+	   1, s_rollback_file);
+    
+    if (rollback_blocksize <= 0) {
+        fprintf(stderr, "rollback: wrong rollback blocksize, exit\n");
+        return -1;
+    }
+    
+    log_file = log;
+    if (log_file)
+        fprintf (log_file, "rollback: file (%s) opened\n", rollback_file);
+    
+    do_rollback = 1;
+    return 0;
+}
+
+void fsck_rollback_fini () {
+    if (s_rollback_file == 0)
+        return;   
+
+    if (!do_rollback) {
+        if (fseek (s_rollback_file, 28 + sizeof(int), SEEK_SET) == (off_t)-1)
+            return;
+	
+        fwrite (&rollback_blocks_number, 
+		sizeof (rollback_blocksize), 
+		1, s_rollback_file);
+	
+        if (log_file != 0) {
+            fprintf (log_file, "rollback: %d blocks backed up\n", 
+		     rollback_blocks_number);
+	}
+    }
+        
+    fclose (s_rollback_file);
+
+    misc_freemem (rollback_data);
+    misc_freemem (rollback_blocks_array);
+/*
+    fprintf (stdout, "rollback: (%u) blocks saved, \n", 
+	     rollback_blocks_number);
+    
+    for (i = 0; i < rollback_blocks_number; i++) 
+        fprintf(stdout, "device (%Lu), block number (%u)\n", 
+                rollback_blocks_array [i].device, 
+                rollback_blocks_array [i].blocknr);
+    fprintf(stdout, "\n");
+*/
+
+}
+
+void fsck_rollback (int fd_device, int fd_journal_device, FILE * progress) {
+    long long int offset;
+    
+    struct stat buf;
+    int descriptor;
+    ssize_t retval;
+    int count_failed = 0;
+    int count_rollbacked = 0;
+    
+    int b_dev;
+    int n_dev = 0;
+    int n_journal_dev = 0;
+    unsigned long total, done = 0;
+
+    if (fd_device == 0) {
+        fprintf(stderr, "rollback: unspecified device, exit\n");
+        return;
+    }
+        
+    if (fd_journal_device) {
+        if (!fstat (fd_journal_device, &buf)) {
+            n_journal_dev = buf.st_rdev;
+        } else {
+            fprintf(stderr, "rollback: specified journal device "
+		    "cannot be stated\n");
+        }
+    }
+    
+    if (!fstat (fd_device, &buf)) {
+        n_dev = buf.st_rdev;
+    } else {
+        fprintf(stderr, "rollback: specified device cannot "
+		"be stated, exit\n");
+        return;
+    }
+    
+    rollback_data = misc_getmem (rollback_blocksize);
+//    printf("\ncheckmem2");
+//    fflush (stdout);
+//    checkmem (rollback_data, misc_memsize((char *)rollback_data));
+//   printf(" OK");
+    
+    fread (&rollback_blocks_number, 
+	   sizeof (rollback_blocks_number), 
+	   1, s_rollback_file);
+
+    total = rollback_blocks_number;
+    
+    while (1) {
+	if (!fsck_quiet(fs)) {
+	    util_misc_progress (progress, &done, 
+				rollback_blocks_number, 
+				1, 0);
+	}
+	
+        descriptor = 0;
+        if ((retval = fread (&b_dev, sizeof (b_dev), 
+			     1, s_rollback_file)) <= 0) 
+	{
+            if (retval) 
+                fprintf (stderr, "rollback: fread: %s\n", strerror (errno));
+            
+	    break;            
+        }
+	
+        if ((retval = fread (&offset, sizeof (offset), 
+			     1, s_rollback_file)) <= 0) 
+	{
+            if (retval) 
+                fprintf (stderr, "rollback: fread: %s\n", strerror (errno));
+        
+	    break;
+        }
+
+        if ((retval = fread (rollback_data, rollback_blocksize, 
+			     1, s_rollback_file)) <= 0) 
+	{
+            if (retval) 
+                fprintf (stderr, "rollback: fread: %s\n", strerror (errno));
+            
+	    break;
+        }
+                
+        if (n_dev == b_dev)
+            descriptor = fd_device;
+        
+	if ((n_journal_dev) && (n_journal_dev == b_dev))
+            descriptor = fd_journal_device;
+        
+        if (descriptor == 0) {
+            fprintf(stderr, "rollback: block from unknown "
+		    "device, skip block\n");
+            count_failed ++;
+            continue;
+        }
+        
+        if (lseek (descriptor, offset, SEEK_SET) == (off_t)-1) {
+            fprintf(stderr, "device cannot be lseeked, skip block\n");
+            count_failed ++;
+            continue;
+        }
+        
+        if (write (descriptor, rollback_data, rollback_blocksize) == -1) {
+            fprintf (stderr, "rollback: write %d bytes returned error "
+		"(block=%lld, dev=%d): %s\n", rollback_blocksize, 
+		offset/rollback_blocksize, b_dev, strerror (errno));
+            count_failed ++;
+        } else {
+            count_rollbacked ++;
+              /*if you want to know what gets rollbacked, uncomment it*/
+/*            if (log_file != 0 && log_file != stdout) 
+                fprintf (log_file, "rollback: block %Lu of "
+			 "device %Lu was restored\n",
+                        (unsigned long long)offset/rollback_blocksize, b_dev);
+
+	    
+            fprintf (stdout, "rollback: block (%Ld) written\n", 
+		     (long long int)offset/rollback_blocksize);
+*/
+        }
+    }
+    
+    printf ("\n");
+    
+    if (log_file != 0) {
+        fprintf (log_file, "rollback: (%u) blocks restored\n", 
+		 count_rollbacked);
+    }
+}
+
+
+/*
+static void rollback__mark_block_saved (struct block_handler * rb_e) {
+    if (rollback_blocks_array == NULL)
+        rollback_blocks_array = 
+		misc_getmem (ROLLBACK__INCREASE_BLOCK_NUMBER * sizeof (*rb_e));
+    
+    if (rollback_blocks_number == 
+	misc_memsize ((void *)rollback_blocks_array) / sizeof (*rb_e))
+    {
+        rollback_blocks_array = 
+		misc_expandmem (rollback_blocks_array, 
+				misc_memsize((void *)rollback_blocks_array),
+				ROLLBACK__INCREASE_BLOCK_NUMBER * 
+				sizeof (*rb_e));
+    }
+
+//    checkmem ((char *)rollback_blocks_array, 
+		misc_memsize((char *)rollback_blocks_array));
+
+    rollback_blocks_array[rollback_blocks_number] = *rb_e;
+    rollback_blocks_number ++;
+    qsort (rollback_blocks_array, rollback_blocks_number, 
+	   sizeof (*rb_e), rollback_compare);
+    
+//    printf("\ncheckmem3");
+//    fflush (stdout);
+//    checkmem ((char *)rollback_blocks_array, 
+		misc_memsize((char *)rollback_blocks_array));
+//    printf(" OK");
+}
+*/
+
diff --git a/utils/fsck/semantic_check.c b/utils/fsck/semantic_check.c
new file mode 100644
index 0000000..b611b90
--- /dev/null
+++ b/utils/fsck/semantic_check.c
@@ -0,0 +1,870 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "fsck.h"
+#include "misc/malloc.h"
+#include "misc/unaligned.h"
+#include "misc/misc.h"
+#include "util/misc.h"
+
+#include <sys/stat.h>
+
+static reiserfs_key_t *trunc_links = NULL;
+static __u32 links_num = 0;
+
+int wrong_mode (reiserfs_key_t * key, __u16 * mode, __u64 real_size, int symlink);
+int wrong_fdb (reiserfs_key_t * key, int blocksize, __u32 * first_direct_byte,
+			     __u32 sd_fdb, __u32 size);
+void get_object_key (reiserfs_deh_t * deh, reiserfs_key_t * key, 
+		     reiserfs_key_t * entry_key, reiserfs_ih_t * ih);
+
+struct path_key {
+    struct short_key {
+        __u32 k_dir_id;
+        __u32 k_objectid;
+    } key;
+    struct path_key * next, * prev;
+};
+
+struct path_key * head_key = NULL;
+struct path_key * tail_key = NULL;
+
+static int check_path_key(reiserfs_key_t * key) {
+    struct path_key * cur = head_key;
+
+    while(cur != NULL) {
+        if (!reiserfs_key_comp2(&cur->key, key)) {
+            fsck_log("\nsemantic check: The directory %k has 2 names.", key);
+            return LOOP_FOUND;
+        }
+	
+        cur = cur->next;
+    }
+    
+    return 0;
+}
+
+static int add_path_key(reiserfs_key_t * key) {
+    if (check_path_key(key))
+    	return LOOP_FOUND;
+
+    if (tail_key == NULL) {
+        tail_key = misc_getmem(sizeof(struct path_key));
+        head_key = tail_key;
+        tail_key->prev = NULL;
+    } else {
+        tail_key->next = misc_getmem(sizeof(struct path_key));
+        tail_key->next->prev = tail_key;
+        tail_key = tail_key->next;
+    }
+    
+    reiserfs_key_copy2 ((reiserfs_key_t *)&tail_key->key, key);
+    tail_key->next = NULL;
+
+    return 0;
+}
+
+static void del_path_key() {
+    if (tail_key == NULL)
+        misc_die("Wrong path_key structure");
+
+    if (tail_key->prev == NULL) {
+        misc_freemem(tail_key);
+        tail_key = head_key = NULL;
+    } else {
+        tail_key = tail_key->prev;
+        misc_freemem(tail_key->next);
+        tail_key->next = NULL;
+    }
+}
+
+/* path is path to stat data. If file will be relocated - new_ih will contain
+   a key file was relocated with */
+static int check_check_regular_file (reiserfs_path_t * path, void * sd,
+                                     reiserfs_ih_t * new_ih)
+{
+    int is_new_file;
+//    reiserfs_key_t key, sd_key;
+    __u16 mode;
+    __u32 nlink;
+    __u64 real_size, sd_size;
+    __u32 blocks, sd_blocks;	/* proper values and value in stat data */
+    __u32 first_direct_byte, sd_fdb;
+
+    reiserfs_ih_t * ih, sd_ih;
+    int fix_sd;
+    int symlnk = 0;
+    int retval = OK;
+    int tmp_position;
+
+
+    ih = REISERFS_PATH_IH (path);
+
+    if (new_ih) {
+	/* this objectid is used already */
+	*new_ih = *ih;
+	reiserfs_tree_pathrelse (path);
+	fsck_file_relocate (&new_ih->ih_key, 1);
+	fsck_relocate_mklinked(&new_ih->ih_key);
+	one_less_corruption (fs, FIXABLE);
+	sem_pass_stat (fs)->oid_sharing_files_relocated ++;
+	retval = RELOCATED;
+	
+	if (reiserfs_tree_search_item (fs, &(new_ih->ih_key), path) == 
+	    ITEM_NOT_FOUND)
+	{
+	    reiserfs_panic ("%s: Could not find a StatData of the relocated "
+			    "file %K", __FUNCTION__, &new_ih->ih_key);
+	}
+	
+	/* stat data is marked unreachable again due to relocation, fix that */
+	ih = REISERFS_PATH_IH (path);
+	sd = REISERFS_PATH_ITEM (path);
+    }
+    
+
+    if (reiserfs_ih_get_len (ih) == REISERFS_SD_SIZE)
+	is_new_file = 1;
+    else
+	is_new_file = 0;
+
+
+    reiserfs_stat_get_nlink (ih, sd, &nlink);
+    reiserfs_stat_get_mode (ih, sd, &mode);
+    reiserfs_stat_get_size (ih, sd, &sd_size);
+    reiserfs_stat_get_blocks (ih, sd, &sd_blocks);
+
+/*	
+    if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
+    	// check and set nlink first 
+    	nlink ++;
+    	reiserfs_stat_set_nlink (ih, sd, &nlink);
+    	reiserfs_buffer_mkdirty (bh);
+
+    	if (nlink > 1)
+	    return OK;
+    }
+*/
+
+    if (!is_new_file)
+	reiserfs_stat_get_fdb (ih, sd, &sd_fdb);
+
+    if (S_ISLNK (mode)) 	
+	symlnk = 1;
+    
+    sd_ih = *ih;
+//    sd_key = sd_ih.ih_key;
+    reiserfs_tree_pathrelse (path);
+
+    if (are_file_items_correct (&sd_ih, sd, &real_size, &blocks, 
+				0/* do not mark reachable */, &symlnk) != 1)
+    {
+	one_more_corruption (fs, FATAL);
+	fsck_log ("check_regular_file: The file %K with the corrupted "
+		  "structure found\n", &sd_ih.ih_key);
+    } else {
+	fix_sd = 0;
+    
+	fix_sd += wrong_mode (&sd_ih.ih_key, &mode, real_size, symlnk);
+	if (!is_new_file)
+	    fix_sd += wrong_fdb (&sd_ih.ih_key, fs->fs_blocksize,
+		&first_direct_byte, sd_fdb, real_size);
+	
+	if (misc_bin_search(&sd_ih.ih_key, trunc_links, links_num, 
+				sizeof(sd_ih.ih_key), &tmp_position, 
+				reiserfs_key_comp2) != 1) 
+	{
+	    fix_sd += wrong_st_size (&sd_ih.ih_key, is_new_file ? 
+				     REISERFS_SD_SIZE_MAX_V2 : 
+				     REISERFS_SD_SIZE_MAX_V1,
+				     fs->fs_blocksize, &real_size, 
+				     sd_size, symlnk ? TYPE_SYMLINK : 0);
+	} else {
+	    real_size = sd_size;
+	}
+	
+	fix_sd += wrong_st_blocks (&sd_ih.ih_key, &blocks, 
+				   sd_blocks, mode, is_new_file);
+
+	if (fix_sd) {
+	    if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
+    		reiserfs_bh_t * bh;
+  	        /* find stat data and correct it */
+  	        reiserfs_key_set_sec (KEY_FORMAT_1, &sd_ih.ih_key, 
+				      OFFSET_SD, TYPE_STAT_DATA);
+		
+	        if (reiserfs_tree_search_item (fs, &sd_ih.ih_key, path) != 
+		    ITEM_FOUND) 
+		{
+		    fsck_log ("check_regular_file: A StatData of the file %K "
+			      "cannot be found\n", &sd_ih.ih_key);
+		    
+                    one_more_corruption (fs, FATAL);
+                    return STAT_DATA_NOT_FOUND;
+	        }
+	    
+	        bh = REISERFS_PATH_LEAF (path);
+	        ih = REISERFS_PATH_IH (path);
+	        sd = REISERFS_PATH_ITEM (path);
+	        reiserfs_stat_set_size (ih, sd, &real_size);
+	        reiserfs_stat_set_blocks (ih, sd, &blocks);
+	        reiserfs_stat_set_mode (ih, sd, &mode);
+	        if (!is_new_file)
+		    reiserfs_stat_set_fdb (ih, sd, &first_direct_byte);
+		reiserfs_buffer_mkdirty (bh);
+	    } else {
+		fsck_check_stat (fs)->fixable_corruptions += fix_sd;
+	    }
+	}
+    }
+    
+    return retval;
+}
+
+/* returns buffer, containing found directory item.*/
+static char * get_next_directory_item (
+	/* on return this will contain key of next item in the tree */
+	reiserfs_key_t * key, 
+	const reiserfs_key_t * parent, 
+	reiserfs_ih_t * ih, 
+	__u32 * pos_in_item, 
+	int dir_format)
+{
+    const reiserfs_key_t * rdkey;
+    REISERFS_PATH_INIT (path);
+    reiserfs_deh_t * deh;
+    reiserfs_bh_t * bh;
+    char * dir_item;
+    int entry_len;
+    int retval;
+    int i;
+
+
+start_again:
+
+    retval = reiserfs_tree_search_entry (fs, key, &path);
+
+    if (retval != POSITION_FOUND && 
+	reiserfs_key_get_off (key) != OFFSET_DOT)
+    {
+	reiserfs_panic ("get_next_directory_item: The current "
+			"directory %k cannot be found", key);
+    }
+
+    /* leaf containing directory item */
+    bh = REISERFS_PATH_LEAF (&path);
+    *pos_in_item = path.pos_in_item;
+    *ih = *REISERFS_PATH_IH (&path);
+    deh = reiserfs_deh (bh, ih);
+
+    /* position was not found for '.' or there is no '..' */
+    if (retval != POSITION_FOUND || 
+	((reiserfs_key_get_off (key) == OFFSET_DOT) &&
+	 (reiserfs_ih_get_entries (ih) < 2 || 
+	  reiserfs_direntry_name_len (ih, deh + 1, 1) != 2 ||
+	  strncmp (reiserfs_deh_name (deh + 1, 1), "..", 2)))) 
+    {
+	fsck_log ("get_next_directory_item: The %s %k cannot be found in %k",
+		  (retval == POSITION_NOT_FOUND) ? "entry" : "directory", 
+		  key, &ih->ih_key);
+	
+	if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
+	    /* add "." and ".." exist */
+	    reiserfs_tree_pathrelse (&path);
+	    
+	    entry_len = reiserfs_direntry_entry_estimate (".", dir_format);
+	    reiserfs_tree_insert_entry (fs, key, ".",  entry_len, key, 0);
+	    entry_len = reiserfs_direntry_entry_estimate ("..", dir_format);
+	    reiserfs_tree_insert_entry (fs, key, "..", entry_len, parent, 0);
+	    
+	    fsck_log (" - entry was added\n");
+	    goto start_again;
+	} else {
+	    one_more_corruption (fs, FIXABLE);
+	    fsck_log ("\n");
+	    if (retval == DIRECTORY_NOT_FOUND)
+	        return 0;
+	}
+    }
+
+    /* mark hidden entries as visible, set "." and ".." correctly */
+    deh += *pos_in_item;
+    for (i = *pos_in_item; i < reiserfs_ih_get_entries (ih); i ++, deh ++) {
+	if (reiserfs_deh_get_off (deh) == OFFSET_DOT) {
+	    if (reiserfs_key_comp2 (&(deh->deh2_dir_id), key)) {
+		/* "." must point to the directory it is in */
+		
+		//deh->deh_objectid != REISERFS_ROOT_PARENT_OBJECTID)/*????*/ {
+		fsck_log ("get_next_directory_item: The entry \".\" of the "
+			  "directory %K points to %K, instead of %K", key, 
+			  (reiserfs_key_t *)(&(deh->deh2_dir_id)), key);
+		if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
+		    reiserfs_deh_set_did (deh, reiserfs_key_get_did (key));
+		    reiserfs_deh_set_obid (deh, reiserfs_key_get_oid (key));
+		    reiserfs_buffer_mkdirty (bh);
+		    fsck_log (" - corrected\n");
+		} else {
+		    one_more_corruption (fs, FIXABLE);
+		    fsck_log ("\n");
+		}
+	    }
+	}
+
+	if (reiserfs_deh_get_off (deh) == OFFSET_DOT_DOT) {
+	    /* set ".." so that it points to the correct parent directory */
+	    if (reiserfs_key_comp2 (&(deh->deh2_dir_id), parent)) {
+		fsck_log ("get_next_directory_item: The entry \"..\" of the "
+			  "directory %K points to %K, instead of %K", key, 
+			  (reiserfs_key_t *)(&(deh->deh2_dir_id)), parent);
+		
+		if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
+		    reiserfs_deh_set_did (deh, reiserfs_key_get_did (parent));
+		    reiserfs_deh_set_obid (deh, reiserfs_key_get_oid (parent));
+		    reiserfs_buffer_mkdirty (bh);
+		    fsck_log (" - corrected\n");
+		} else {
+		    one_more_corruption (fs, FIXABLE);
+		    fsck_log ("\n");
+		}
+	    }
+	}
+    }
+
+    /* copy directory item to the temporary buffer */
+    dir_item = misc_getmem (reiserfs_ih_get_len (ih));
+    memcpy (dir_item, reiserfs_item_by_ih (bh, ih), reiserfs_ih_get_len (ih));
+
+
+    /* next item key */
+    if (REISERFS_PATH_LEAF_POS (&path) == (reiserfs_node_items (bh) - 1) &&
+	(rdkey = reiserfs_tree_rkey (&path, fs)))
+	reiserfs_key_copy (key, rdkey);
+    else {
+	reiserfs_key_set_did (key, 0);
+	reiserfs_key_set_oid (key, 0);
+    }
+
+    if (fsck_mode (fs) == FSCK_REBUILD)
+        fsck_item_mkreach (REISERFS_PATH_IH (&path), bh);
+    reiserfs_tree_pathrelse (&path);
+
+    return dir_item;
+}
+
+/* semantic pass of --check */
+static int check_semantic_pass (const reiserfs_key_t * key, 
+				const reiserfs_key_t * parent, 
+				int dot_dot, 
+				reiserfs_ih_t * new_ih)
+{
+    reiserfs_path_t path;
+    void * sd;
+    __u32 nlink;
+    int is_new_dir;
+    reiserfs_bh_t * bh;
+    reiserfs_ih_t * ih;
+    int retval;
+    char * dir_item;
+    __u32 pos_in_item;
+    reiserfs_ih_t tmp_ih;
+    reiserfs_key_t next_item_key, entry_key, object_key;
+    __u64 dir_size = 0;
+    __u32 blocks;
+    __u64 sd_size;
+    __u32 sd_blocks;
+    int fix_sd;
+    /*int relocate;*/
+    int dir_format = 0;
+    __u16 mode;
+    	
+    retval = OK;
+
+ /* start_again: when directory was relocated */
+
+    if (!reiserfs_key_stat (key)) {
+	fsck_log ("%s: The key %k must be key of a StatData\n", 
+		  __FUNCTION__, key);
+	one_more_corruption (fs, FATAL);
+        return STAT_DATA_NOT_FOUND;
+    }
+
+    /* look for stat data of an object */
+    if (reiserfs_tree_search_item (fs, key, &path) == ITEM_NOT_FOUND) {
+	reiserfs_tree_pathrelse (&path);
+	return STAT_DATA_NOT_FOUND;
+    }
+
+    /* stat data has been found */
+    ih = REISERFS_PATH_IH (&path);
+    sd = REISERFS_PATH_ITEM(&path);
+
+    reiserfs_stat_get_nlink (ih, sd, &nlink);
+
+    /* It seems quite difficult to relocate objects on fix-fixable - 
+     * rewrite_file calls reiserfs_file_write which can convert tails 
+     * to unfm, plus unreachable, was_tail flags, etc. */
+#if 0
+    if ((/* relocate = */ should_be_relocated(&ih->ih_key))) {
+	/*
+	if (fsck_mode(fs) == FSCK_CHECK)
+	    relocate = 0;
+	*/
+	one_more_corruption(fs, FATAL);
+    }
+#endif
+
+    if (fix_obviously_wrong_sd_mode (&path)) {
+        one_more_corruption (fs, FIXABLE);
+	reiserfs_tree_pathrelse (&path);
+        return OK;
+    }
+    
+    if (nlink == 0) {
+	fsck_log ("%s: block %lu: The StatData %k has "
+		  "bad nlink number (%u)\n", __FUNCTION__,
+		  REISERFS_PATH_LEAF(&path)->b_blocknr, 
+		  &ih->ih_key, nlink);
+	
+	one_more_corruption (fs, FATAL); 
+    }
+    
+    if (not_a_directory (sd)) {
+	fsck_check_stat (fs)->files ++;
+	
+	retval = check_check_regular_file (&path, sd, 0);
+	reiserfs_tree_pathrelse (&path);
+	return retval;
+    }
+    
+/*
+    if (relocate) {
+	if (!new_ih)
+	    reiserfs_panic ("%s: Memory is not prepared for relocation of %K", 
+			    __FUNCTION__, &ih->ih_key);
+	*new_ih = *ih;
+	reiserfs_tree_pathrelse (&path);
+	sem_pass_stat (fs)->oid_sharing_dirs_relocated ++;
+	relocate_dir (new_ih, 1);
+	fsck_relocate_mklinked(&new_ih->ih_key);
+	one_less_corruption (fs, FIXABLE);
+	*key = new_ih->ih_key;
+	retval = RELOCATED;
+	goto start_again;
+    }
+*/
+
+/* 
+    if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
+    	// it looks like stat data of a directory found 
+    	if (nlink) {
+	    // we saw this directory already 
+	    if (!dot_dot) {
+	    	// this name is not ".."  - and hard links are not 
+		// allowed on directories 
+	    	reiserfs_tree_pathrelse (&path);
+	    	return STAT_DATA_NOT_FOUND;
+	    } else {
+	    	// ".." found 
+	    	nlink ++;
+	    	reiserfs_stat_set_nlink (ih, sd, &nlink);
+	    	reiserfs_buffer_mkdirty (REISERFS_PATH_LEAF (&path));
+	    	reiserfs_tree_pathrelse (&path);
+	    	return OK;
+	    }
+    	} // do not run it for dot_dot on check at all
+    	
+     	nlink = 2;
+    	if (reiserfs_key_get_oid (key) == REISERFS_ROOT_OBJECTID)
+	    nlink ++;
+    	reiserfs_stat_set_nlink (ih, sd, &nlink);
+    	reiserfs_buffer_mkdirty (REISERFS_PATH_LEAF (&path));    
+    }
+*/
+
+    /* directory stat data found */
+    if (reiserfs_ih_get_len (ih) == REISERFS_SD_SIZE)
+	is_new_dir = 1;
+    else
+	is_new_dir = 0;
+
+    /* save stat data's size and st_blocks */
+    reiserfs_stat_get_size (ih, sd, &sd_size);
+    reiserfs_stat_get_blocks (ih, sd, &sd_blocks);
+    reiserfs_stat_get_mode (ih, sd, &mode);
+
+    dir_format = (reiserfs_ih_get_len (REISERFS_PATH_IH (&path)) == 
+		  REISERFS_SD_SIZE) ? KEY_FORMAT_2 : KEY_FORMAT_1;
+
+    /* release path pointing to stat data */
+    reiserfs_tree_pathrelse (&path);
+
+    fsck_check_stat (fs)->dirs ++;
+
+    reiserfs_key_set_did (&next_item_key, reiserfs_key_get_did (key));
+    reiserfs_key_set_oid (&next_item_key, reiserfs_key_get_oid (key));
+    reiserfs_key_set_off1 (&next_item_key, OFFSET_DOT);
+    reiserfs_key_set_uni (&next_item_key, UNI_DE);
+
+    dir_size = 0;
+    while ((dir_item = get_next_directory_item (&next_item_key, parent, &tmp_ih, 
+						&pos_in_item, dir_format)) != 0)
+    {
+	/* dir_item is copy of the item in separately allocated memory,
+	   item_key is a key of next item in the tree */
+	int i;
+	char name[REISERFS_NAME_MAX];
+	int namelen, entry_len;
+	reiserfs_deh_t * deh = (reiserfs_deh_t *)dir_item + pos_in_item;
+	
+	for (i = pos_in_item; 
+	     i < reiserfs_ih_get_entries (&tmp_ih); 
+	     i ++, deh ++) 
+	{
+	    reiserfs_ih_t relocated_ih;
+	    int ret = OK;
+	    
+	    name[0] = '\0';
+	
+	    namelen = reiserfs_direntry_name_len (&tmp_ih, deh, i);
+	    sprintf(name, "%.*s", namelen, reiserfs_deh_name (deh, i));
+	    entry_len = reiserfs_direntry_entry_len (&tmp_ih, deh, i);
+	
+	    get_object_key (deh, &object_key, &entry_key, &tmp_ih);
+
+	    if ((dir_format == KEY_FORMAT_2) && (entry_len % 8 != 0)) {
+		/* not alighed directory of new format - delete it */
+		if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
+		    fsck_log ("Entry %K (\"%.*s\") in the directory %K is not "
+			      "formated properly - deleted\n",
+			      (reiserfs_key_t *)&(deh->deh2_dir_id), namelen, 
+			      name, &tmp_ih.ih_key);
+		    
+		    reiserfs_tree_delete_entry (fs, &entry_key);
+		    
+		    entry_len = 
+			reiserfs_direntry_entry_estimate (name, dir_format);
+
+		    reiserfs_tree_insert_entry (fs, key, name, entry_len,
+			(reiserfs_key_t *)&(deh->deh2_dir_id), 0);
+		} else {
+		    fsck_log ("Entry %K (\"%.*s\") in the directory %K is "
+			      "not formated properly.\n", 
+			      (reiserfs_key_t *)&(deh->deh2_dir_id), 
+			      namelen, name, &tmp_ih.ih_key);
+		    
+		    one_more_corruption (fs, FIXABLE);
+		}
+	    }
+	
+	    if (!reiserfs_hash_correct (&fs->hash, name, 
+					namelen, reiserfs_deh_get_off (deh))) 
+	    {
+		one_more_corruption (fs, FATAL);
+		fsck_log ("%s: Hash mismatch detected for (%.*s) in directory "
+			  "%K\n", __FUNCTION__, namelen, name, &tmp_ih.ih_key);
+	    }
+	
+	    if (is_dot (name, namelen) || (is_dot_dot (name, namelen))) {
+		/* do not go through "." and ".." */
+		ret = OK;
+	    } else {
+		if (!fsck_quiet(fs)) {
+			util_misc_print_name (fsck_progress_file(fs), 
+					      name, namelen);
+		}
+	    
+		if ((ret = add_path_key (&object_key)) == 0) {
+		    ret = check_semantic_pass (&object_key, key, 
+					       is_dot_dot(name, namelen), 
+					       &relocated_ih);
+		    del_path_key ();
+		}
+
+		if (!fsck_quiet(fs)) {
+		    util_misc_erase_name (fsck_progress_file(fs), 
+					  namelen);
+		}
+	    }
+	    
+	    /* check what check_semantic_tree returned */
+	    switch (ret) {
+	    case OK:
+		dir_size += REISERFS_DEH_SIZE + entry_len;
+		break;
+		
+	    case STAT_DATA_NOT_FOUND:
+		fsck_log ("%s: Name \"%.*s\" in directory %K points to "
+			  "nowhere\n", __FUNCTION__, namelen, name, 
+			  &tmp_ih.ih_key);
+	    case LOOP_FOUND:
+		if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
+		    reiserfs_tree_delete_entry (fs, &entry_key);
+		    fsck_log (" - removed");
+		} else {
+		    one_more_corruption (fs, FIXABLE);
+		}
+		fsck_log ("\n");
+		break;
+		    
+	    case DIRECTORY_HAS_NO_ITEMS:
+		fsck_log ("%s: Name \"%.*s\" in directory %K points a "
+			  "directory without body\n", __FUNCTION__, 
+			  namelen, name, &tmp_ih.ih_key);
+		
+		/* fixme: stat data should be deleted as well */
+		/*
+		  if (fsck_fix_fixable (fs)) {
+		  reiserfs_tree_delete_entry (fs, &entry_key);
+		  fsck_data(fs)->deleted_entries ++;
+		  fsck_log (" - removed");
+		  }
+		  fsck_log ("\n");*/
+		break;
+		
+	    case RELOCATED:
+		/* file was relocated, update key in corresponding direntry */
+		if (reiserfs_tree_search_entry (fs, &entry_key, &path) != 
+		    POSITION_FOUND) 
+		{
+		    fsck_log("Cannot find a name of the relocated file %K in "
+			     "the directory %K\n", &entry_key, &tmp_ih.ih_key);
+		} else {
+		    /* update key dir entry points to */
+		    reiserfs_deh_t * tmp_deh;
+		    
+		    tmp_deh = reiserfs_deh (REISERFS_PATH_LEAF (&path), 
+					    REISERFS_PATH_IH (&path)) + 
+			      path.pos_in_item;
+		    
+		    fsck_log ("The directory %K pointing to %K (\"%.*s\") "
+			      "updated to point to ", &tmp_ih.ih_key, 
+			      &tmp_deh->deh2_dir_id, namelen, name);
+		    
+		    reiserfs_deh_set_did (tmp_deh, 
+			reiserfs_key_get_did (&relocated_ih.ih_key));
+		    reiserfs_deh_set_obid (tmp_deh, 
+			reiserfs_key_get_oid (&relocated_ih.ih_key));
+
+		    fsck_log ("%K (\"%.*s\")\n",  &tmp_deh->deh2_dir_id, 
+			      namelen, name);
+		    
+		    reiserfs_buffer_mkdirty (REISERFS_PATH_LEAF (&path));
+		}
+		
+		dir_size += REISERFS_DEH_SIZE + entry_len;
+		reiserfs_tree_pathrelse (&path);
+		break;
+	    }
+	} /* for */
+	
+	misc_freemem (dir_item);
+
+	if (reiserfs_key_comp2 (&next_item_key, key))
+	    /* next key is not of this directory */
+	    break;
+    } /* while (dir_item) */
+    
+    
+    if (dir_size == 0)
+	/* FIXME: is it possible? */
+	return DIRECTORY_HAS_NO_ITEMS;
+    
+    /* calc correct value of sd_blocks field of stat data */
+    blocks = REISERFS_DIR_BLOCKS (dir_size);
+    
+    fix_sd = 0;
+    fix_sd += wrong_st_blocks (key, &blocks, sd_blocks, mode, is_new_dir);
+    fix_sd += wrong_st_size (key, is_new_dir ? REISERFS_SD_SIZE_MAX_V2 : 
+			     REISERFS_SD_SIZE_MAX_V1, fs->fs_blocksize, 
+			     &dir_size, sd_size, TYPE_DIRENTRY);
+
+    if (fix_sd) {
+	if (fsck_mode (fs) == FSCK_FIX_FIXABLE) {
+	    /* we have to fix either sd_size or sd_blocks, look for SD again */
+	    if (reiserfs_tree_search_item (fs, key, &path) != ITEM_FOUND) {
+		fsck_log ("%s: The StatData of the file %K was not found\n",
+			  __FUNCTION__, key);
+		one_more_corruption(fs, FATAL);
+                return STAT_DATA_NOT_FOUND;
+	    }
+	
+	    bh = REISERFS_PATH_LEAF (&path);
+	    ih = REISERFS_PATH_IH (&path);
+	    sd = REISERFS_PATH_ITEM (&path);
+	
+	    reiserfs_stat_set_size (ih, sd, &dir_size);
+	    reiserfs_stat_set_blocks (ih, sd, &blocks);
+	    reiserfs_buffer_mkdirty (bh);
+	    reiserfs_tree_pathrelse (&path);
+	} else {
+	    fsck_check_stat (fs)->fixable_corruptions += fix_sd;
+	}
+    }
+    
+    return retval;
+}
+
+int check_safe_links ()
+{
+    reiserfs_path_t safe_link_path, path;
+    reiserfs_key_t safe_link_key = {-1, 0, {{0, 0}}};
+    reiserfs_key_t key = {0, 0, {{0, 0}}};
+    const reiserfs_key_t * rkey;
+    reiserfs_ih_t * tmp_ih;
+
+    while (1) {
+        if (reiserfs_key_get_did (&safe_link_key) == 0)
+            break;
+
+	reiserfs_tree_search_item (fs, &safe_link_key, &safe_link_path);
+	
+	if (reiserfs_nh_get_items( NODE_HEAD(REISERFS_PATH_LEAF(&safe_link_path))) <= 
+	    REISERFS_PATH_LEAF_POS (&safe_link_path)) 
+	{
+	    reiserfs_tree_pathrelse (&safe_link_path);
+            break;
+	}	
+	
+	tmp_ih = REISERFS_PATH_IH(&safe_link_path);
+	
+        if (reiserfs_key_get_did(&tmp_ih->ih_key) != (__u32)-1 ||
+	    reiserfs_key_get_oid(&tmp_ih->ih_key) == (__u32)-1) {
+	    reiserfs_tree_pathrelse (&safe_link_path);
+            break;
+	}
+
+        if (reiserfs_ih_get_len (tmp_ih) != 4)
+	    reiserfs_panic ("Safe Link %k cannot be of the size %d", 
+		&tmp_ih->ih_key, reiserfs_ih_get_len (tmp_ih));
+	
+	reiserfs_key_set_did(&key, d32_get((__u32 *)REISERFS_PATH_ITEM(&safe_link_path), 0));
+	reiserfs_key_set_oid(&key, reiserfs_key_get_oid(&tmp_ih->ih_key));
+	if ((rkey = reiserfs_tree_next_key(&safe_link_path, fs)) == NULL)
+	    reiserfs_key_set_did (&safe_link_key, 0);
+	else
+	    safe_link_key = *rkey;
+	
+	if (reiserfs_tree_search_item (fs, &key, &path) == ITEM_NOT_FOUND) {
+	    /*sware on check, delete on fix-fixable*/
+	    if (fsck_mode(fs) == FSCK_CHECK) {
+		fsck_log ("Invalid safe link %k: cannot find the pointed "
+			  "object (%K)\n", &tmp_ih->ih_key, &key);
+		
+		one_more_corruption (fs, FIXABLE);
+	    } else if (fsck_mode(fs) == FSCK_FIX_FIXABLE) {
+		fsck_log ("Invalid safe link %k: cannot find the pointed "
+			  "object (%K) - safe link was deleted\n", 
+			  &tmp_ih->ih_key, &key);
+		
+		d32_put((__u32 *)REISERFS_PATH_ITEM(&safe_link_path), 0, 0);
+		reiserfs_tree_pathrelse (&path);
+		reiserfs_tree_delete (fs, &safe_link_path, 0);		
+		continue;
+	    }
+	} else if (reiserfs_key_get_off(&tmp_ih->ih_key) == 0x1) {
+	    /* Truncate */
+	    if (!not_a_directory (REISERFS_PATH_ITEM(&path))) {
+		/*truncate on directory should not happen*/
+		/*sware on check, delete on fix-fixable*/
+		if (fsck_mode(fs) == FSCK_CHECK) {
+		    fsck_log ("Invalid 'truncate' safe link %k, cannot happen "
+			      "for directory (%K)\n", &tmp_ih->ih_key, &key);
+		    one_more_corruption (fs, FIXABLE);
+		} else if (fsck_mode(fs) == FSCK_FIX_FIXABLE) {
+		    fsck_log ("Invalid 'truncate' safe link %k, cannot happen "
+			      "for a directory (%K) - safe link was deleted\n", 
+			      &tmp_ih->ih_key, &key);
+		    
+		    d32_put((__u32 *)REISERFS_PATH_ITEM(&safe_link_path), 0, 0);
+		    reiserfs_tree_pathrelse (&path);
+		    reiserfs_tree_delete (fs, &safe_link_path, 0);		
+		    continue;
+		}
+	    } else {
+		/* save 'safe truncate links' to avoid wrong sizes swaring. */
+		int position;
+		
+		if (misc_bin_search (&key, trunc_links, links_num, 
+					 sizeof(key), &position, 
+					 reiserfs_key_comp2) != 1)
+		{
+		    blocklist__insert_in_position(&key, (void *)&trunc_links, 
+						  &links_num, sizeof(key), 
+						  &position);
+		}
+	    }
+	}
+	
+	reiserfs_tree_pathrelse (&path);
+	reiserfs_tree_pathrelse (&safe_link_path);
+    }
+
+    return OK;
+}
+
+void release_safe_links () {
+    misc_freemem(trunc_links);
+}
+
+/* called when --check is given */
+void fsck_semantic_check (void) {
+    if (fsck_data (fs)->check.bad_nodes) {
+        fsck_progress ("Bad nodes were found, Semantic pass skipped\n");
+        goto clean;
+    }
+
+    if (fsck_data (fs)->check.fatal_corruptions) {
+        fsck_progress ("Fatal corruptions were found, Semantic pass skipped\n");
+        goto clean;
+    }
+ 
+    fsck_progress ("Checking Semantic tree...\n");
+    
+    if (fsck_mode(fs) == FSCK_FIX_FIXABLE) {
+        /*create new_bitmap, and initialize new_bitmap & allocable bitmap*/
+        fsck_new_bitmap (fs) = 
+		reiserfs_bitmap_create(reiserfs_sb_get_blocks(fs->fs_ondisk_sb));
+	
+        reiserfs_bitmap_copy (fsck_new_bitmap (fs), fs->fs_bitmap2);
+        fsck_allocable_bitmap (fs) = 
+		reiserfs_bitmap_create(reiserfs_sb_get_blocks(fs->fs_ondisk_sb));
+	
+        reiserfs_bitmap_copy (fsck_allocable_bitmap (fs), fs->fs_bitmap2);
+	fs->block_allocator = reiserfsck_new_blocknrs;
+	fs->block_deallocator = reiserfsck_free_block;
+    }
+    
+    check_safe_links ();
+    
+    if (check_semantic_pass (&root_dir_key, &parent_root_dir_key, 0, 0) != OK) {
+        fsck_log ("check_semantic_tree: No root directory found");
+        one_more_corruption (fs, FATAL);
+    }
+
+    release_safe_links ();
+
+    if (fsck_mode(fs) == FSCK_FIX_FIXABLE) {
+        reiserfs_bitmap_delete (fs->fs_bitmap2);
+	reiserfs_bitmap_delta (fsck_new_bitmap (fs), fsck_deallocate_bitmap (fs));	
+        fs->fs_bitmap2 = fsck_new_bitmap (fs);
+        reiserfs_bitmap_delete (fsck_allocable_bitmap (fs));	
+        fsck_allocable_bitmap (fs) = NULL;
+        reiserfs_sb_set_free (fs->fs_ondisk_sb, 
+			    reiserfs_bitmap_zeros (fs->fs_bitmap2));
+	
+        reiserfs_buffer_mkdirty (fs->fs_super_bh);
+	reiserfs_badblock_flush(fs, 1);
+    }
+   
+    if (!fsck_quiet(fs))
+	util_misc_fini_name(fsck_progress_file(fs));
+    
+clean:
+    if (fsck_deallocate_bitmap (fs))
+	reiserfs_bitmap_delete (fsck_deallocate_bitmap (fs));
+}
diff --git a/utils/fsck/semantic_rebuild.c b/utils/fsck/semantic_rebuild.c
new file mode 100644
index 0000000..013c1f9
--- /dev/null
+++ b/utils/fsck/semantic_rebuild.c
@@ -0,0 +1,1321 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "fsck.h"
+#include "misc/malloc.h"
+#include "misc/device.h"
+#include "util/device.h"
+#include "util/misc.h"
+
+#include <sys/stat.h>
+
+#define MIN(a, b) (((a)>(b))?(b):(a))
+
+/* *size is "real" file size, sd_size - size from stat data */
+int wrong_st_size (const reiserfs_key_t * key, 
+		   unsigned long long max_file_size, 
+		   int blocksize, 
+		   __u64 * size, 
+		   __u64 sd_size, int type)
+{
+    if (sd_size <= max_file_size) {
+	if (sd_size == *size)
+	    return 0;
+
+	if (type == TYPE_DIRENTRY) {
+	    /* directory size must match to the sum of length of its entries */
+	    fsck_log ("vpf-10650: The directory %K has the wrong size in the StatData "
+		"(%Lu)%s(%Lu)\n", key, sd_size, fsck_mode(fs) == FSCK_CHECK ? 
+		", should be " : " - corrected to ", *size);
+	    return 1;
+	}
+	
+	if (sd_size > *size) {
+	    /* size in stat data can be bigger than size calculated by items */
+	    if (fsck_adjust_file_size (fs) || type == TYPE_SYMLINK) {
+		/* but it -o is given - fix that */
+		fsck_log ("vpf-10660: The file %K has too big size in the StatData "
+		    "(%Lu)%s(%Lu)\n", key, sd_size, fsck_mode(fs) == FSCK_CHECK ? 
+		    ", should be " : " - corrected to ", *size);
+		sem_pass_stat (fs)->fixed_sizes ++;
+		return 1;
+	    }
+	    *size = sd_size;
+	    return 0;
+	}
+	
+	if (!(*size % blocksize)) {
+	    /* last item is extent */
+	    if (((sd_size & ~(blocksize - 1)) == (*size - blocksize)) && 
+		sd_size % blocksize) 
+	    {
+		/* size in stat data is correct */
+		*size = sd_size;
+		return 0;
+	    }
+	} else {
+	    /* last item is a direct one */
+	    if (!(*size % 8)) {
+		if (((sd_size & ~7) == (*size - 8)) && sd_size % 8) {
+		    /* size in stat data is correct */
+		    *size = sd_size;
+		    return 0;
+		}
+	    }
+	}
+    }
+
+    fsck_log ("vpf-10670: The file %K has the wrong size in the StatData (%Lu)%s(%Lu)\n", key, 
+	sd_size, fsck_mode(fs) == FSCK_CHECK ? ", should be " : " - corrected to ", 
+	*size);
+    sem_pass_stat (fs)->fixed_sizes ++;
+    return 1;
+}
+
+
+/* sd_blocks is 32 bit only */
+/* old stat data shares sd_block and sd_dev - do not wipe sd_rdev out */
+/* we should fix it as following:
+|------------------------------------------------------------------|
+|                    |        3.6                   |       3.5    |
+|---------------------------------------------------|              |
+|                    |  blocks |  r_dev|generation  | blocks/r_dev |
+|------------------------------------------------------------------|
+|   fifo, sockets    |    0    |    generation      |      0       |
+|   chr/blk_dev      |    0    |     maj:min        |   maj:min    |
+|   file, dir, link  |  blocks |    generation      |   blocks     |
+|------------------------------------------------------------------|
+*/
+int wrong_st_blocks (const reiserfs_key_t * key, 
+		     __u32 * blocks, 
+		     __u32 sd_blocks, 
+		     __u16 mode, 
+		     int new_format)
+{
+    int ret = 0;
+
+    if (S_ISREG (mode) || S_ISLNK (mode) || S_ISDIR (mode)) {
+	if ((!S_ISLNK(mode) && *blocks != sd_blocks) ||
+	    (S_ISLNK(mode) && *blocks != sd_blocks && (MISC_ROUND_UP(*blocks) != sd_blocks))) {
+	    fsck_log ("vpf-10680: The %s %K has the wrong block count in the StatData "
+		"(%u)%s(%u)\n", S_ISDIR (mode) ? "directory" : S_ISREG (mode) ? "file" : "link",  key, sd_blocks, 
+		fsck_mode(fs) == FSCK_CHECK ? ", should be " : " - corrected to ", *blocks);
+	    ret = 1;
+	}
+    } else if (new_format || (S_ISFIFO (mode) || S_ISSOCK (mode))) {
+	if (sd_blocks != 0) {
+	    fsck_log ("vpf-10690: The object %K has the wrong block count in the StatData "
+		"(%u)%s(%u)\n",	key, sd_blocks, fsck_mode(fs) == FSCK_CHECK ? 
+		", should be " : " - corrected to ", 0);
+	    *blocks = 0;	
+	    ret = 1;
+	}
+    }
+
+    return ret;
+}
+/*
+int wrong_st_rdev (reiserfs_key_t * key, __u32 * sd_rdev, __u16 mode, int new_format)
+{
+    int ret = 0;
+
+    if (!new_format)
+	return 0;
+
+    if (!S_ISCHR (mode) && !S_ISBLK (mode)) {
+	if (*sd_rdev != 0) {
+	    fsck_log ("%s %K has wrong sd_rdev %u, has to be 0\n",
+		S_ISDIR (mode) ? "dir" : "file", key, *sd_rdev);
+	    *sd_rdev = 0;
+	    ret = 1;
+	}
+    }
+    return ret;
+}
+*/
+/* only regular files and symlinks may have items but stat
+   data. Symlink should have body */
+int wrong_mode (reiserfs_key_t * key, __u16 * mode, __u64 real_size, int symlink)
+{
+    int retval = 0;
+    if (S_ISLNK (*mode) && !symlink) {
+	fsck_log ("The file %K (%M) is too big to be the symlink%s regfile\n", 
+	    key, *mode, fsck_mode(fs) == FSCK_CHECK ? ", should be the" : " - corrected "
+	    "to the");
+	*mode &= ~S_IFMT;
+	*mode |= S_IFREG;
+	retval = 1;
+    }
+
+    if (misc_device_typec (*mode) != '?') {
+	/* mode looks reasonable */
+	if (S_ISREG (*mode) || S_ISLNK (*mode))
+	    return retval;
+	
+	/* device, pipe, socket have no items */
+	if (!real_size)
+	    return retval;
+    }
+    /* there are items, so change file mode to regular file. Otherwise
+       - file bodies do not get deleted */
+    if (fsck_mode(fs) == FSCK_CHECK) {
+	fsck_log ("The object %K has wrong mode (%M)\n", key, *mode);
+    } else {
+	fsck_log("The object %K has wrong mode (%M) - corrected to %M\n", 
+	    key, *mode, (S_IFREG | 0600));
+    }
+    *mode = (S_IFREG | 0600);
+    return 1;
+}
+
+
+/* key is a key of last file item */
+int wrong_fdb (reiserfs_key_t * key, int blocksize, 
+	       __u32 * first_direct_byte,
+	       __u32 sd_fdb, __u32 size)
+{
+    if (!size || reiserfs_key_ext (key)) {
+	/* there is no direct item */
+	*first_direct_byte = REISERFS_SD_NODIRECT;
+	if (sd_fdb != REISERFS_SD_NODIRECT) {
+	    if (fsck_mode(fs) == FSCK_CHECK) {
+		fsck_log ("The file %K: The wrong info about the tail in the StatData, "
+		    "first_direct_byte (%d) - should be (%d)\n", key, 
+		    sd_fdb, *first_direct_byte);
+	    } else {
+		fsck_log ("The file %K: The wrong info about the tail in the StatData, "
+		    "first_direct_byte (%d) - corrected to (%d)\n", key, 
+		    sd_fdb, *first_direct_byte);
+	    }
+	    return 1;
+	}
+	return 0;
+    }
+
+    /* there is direct item */
+    *first_direct_byte = (reiserfs_key_get_off (key) & ~(blocksize - 1)) + 1;
+    if (*first_direct_byte != sd_fdb) {
+	if (fsck_mode(fs) == FSCK_CHECK) {
+	    fsck_log ("The file %K: The wrong info about the tail in the StatData, "
+		"first_direct_byte (%d) - should be (%d)\n", key, sd_fdb, 
+		*first_direct_byte);
+	} else {
+	    fsck_log ("The file %K: The wrong info about the tail in the StatData, "
+		"first_direct_byte (%d) - corrected to (%d)\n", key, sd_fdb, 
+		*first_direct_byte);
+	}
+	    
+	return 1;
+    }
+    return 0;
+}
+
+
+/* delete all items (but directory ones) with the same key 'ih' has
+   (including stat data of not a directory) and put them back at the
+   other place */
+void relocate_dir (reiserfs_ih_t * ih) {
+    const reiserfs_key_t * rkey;
+    reiserfs_ih_t * path_ih;
+    reiserfs_path_t path;
+    __u32 new_objectid;
+    reiserfs_key_t key;
+    saveitem_t * si;
+    int moved;
+
+    /* starting with the leftmost one - look for all items of file,
+       store them and delete */
+    key = ih->ih_key;
+    reiserfs_key_set_sec (KEY_FORMAT_1, &key, OFFSET_SD, TYPE_STAT_DATA);
+
+    si = 0;
+    while (1) {
+	reiserfs_tree_search_item (fs, &key, &path);
+	
+	if (REISERFS_PATH_LEAF_POS (&path) == 
+	    reiserfs_node_items (REISERFS_PATH_LEAF (&path))) 
+	{
+	    rkey = reiserfs_tree_rkey (&path, fs);
+	    if (rkey && !reiserfs_key_comp2 (&key, rkey)) {
+		/* file continues in the right neighbor */
+		key = *rkey;
+		reiserfs_tree_pathrelse (&path);
+		continue;
+	    }
+	    /* there is no more items of a directory */
+	    reiserfs_tree_pathrelse (&path);
+	    break;
+	}
+
+	path_ih = REISERFS_PATH_IH (&path);
+	if (reiserfs_key_comp2 (&key, &(path_ih->ih_key))) {
+	    /* there are no more item with this key */
+	    reiserfs_tree_pathrelse (&path);
+	    break;
+	}
+
+	/* ok, item found, but make sure that it is not a directory one */
+	if ((reiserfs_ih_stat (path_ih) && 
+	     not_a_directory (REISERFS_PATH_ITEM (&path))) ||
+	    reiserfs_ih_direct (path_ih) || reiserfs_ih_ext (path_ih)) 
+	{
+	    /* item of not a directory found. Leave it in the
+               tree. FIXME: should not happen */
+	    key = path_ih->ih_key;
+	    reiserfs_key_set_off (KEY_FORMAT_1, &key, 
+				  reiserfs_key_get_off (&key) + 1);
+	    reiserfs_tree_pathrelse (&path);
+	    continue;
+	}
+
+	/* directory stat data ro directory item */
+	fsck_item_save(&path, &si);
+	reiserfs_tree_delete(fs, &path, 1);
+    }
+
+    if (!si) {
+	fsck_log ("%s: WARNING: No one item of the directory "
+		  "%K found\n", __FUNCTION__, &key);
+	return;
+    }
+
+    /* get new objectid for relocation or get objectid with which file
+       was relocated already */
+    new_objectid = fsck_relocate_oid (&ih->ih_key);
+    moved = 0;
+
+    /* put all items removed back into tree */
+    while (si) {
+	reiserfs_key_set_oid (&si->si_ih.ih_key, new_objectid);
+	
+	if (reiserfs_key_get_off (&(si->si_ih.ih_key)) == OFFSET_DOT) {
+	    /* fix "." entry to point to a directtory properly */
+	    reiserfs_deh_t * deh;
+
+	    deh = (reiserfs_deh_t *)si->si_dnm_data;
+	    reiserfs_deh_set_obid (deh, new_objectid);
+	}
+	
+	fsck_tree_insert_item (&(si->si_ih), si->si_dnm_data, 0);
+	si = fsck_item_free(si);
+	moved++;
+    }
+    
+    if (moved) {
+	fsck_log("%s: %d items of dir %K are moved to %u oid\n",
+		 __FUNCTION__, moved, &ih->ih_key, new_objectid);
+    }
+    
+    reiserfs_key_set_oid (&ih->ih_key, new_objectid);
+}
+
+
+
+/* path is path to stat data. If file will be relocated - new_ih will contain
+   a key file was relocated with */
+int rebuild_check_regular_file (reiserfs_path_t * path, void * sd,
+				reiserfs_ih_t * new_ih)
+{
+    int is_new_file;
+//    reiserfs_key_t sd_key;
+    __u16 mode;
+    __u32 nlink;
+    __u64 real_size, saved_size;
+    __u32 blocks, saved_blocks;	/* proper values and value in stat data */
+    __u32 first_direct_byte, saved_fdb;
+
+    reiserfs_bh_t * bh;
+    reiserfs_ih_t * ih, sd_ih;
+    int fix_sd;
+    int symlnk = 0;
+    int retval;
+
+    retval = OK;
+
+    /* stat data of a file */
+    ih = REISERFS_PATH_IH (path);
+    bh = REISERFS_PATH_LEAF (path);
+
+    if (new_ih) {
+	/* this objectid is used already */
+	*new_ih = *ih;
+	reiserfs_tree_pathrelse (path);
+	fsck_file_relocate (&new_ih->ih_key, 1);
+	fsck_relocate_mklinked(&new_ih->ih_key);
+	sem_pass_stat (fs)->oid_sharing_files_relocated ++;
+	retval = RELOCATED;
+	if (reiserfs_tree_search_item (fs, &(new_ih->ih_key), path) == ITEM_NOT_FOUND)
+	    reiserfs_panic ("%s: Could not find the StatData of the relocated file %k", 
+		__FUNCTION__, &(new_ih->ih_key));
+	/* stat data is marked unreachable again due to relocation, fix that */
+	ih = REISERFS_PATH_IH (path);
+	bh = REISERFS_PATH_LEAF (path);
+	fsck_item_mkreach (ih, bh);
+	sd = REISERFS_PATH_ITEM (path);
+	
+    }
+	
+    id_map_mark(semantic_id_map(fs), reiserfs_key_get_oid (&ih->ih_key));
+
+    /* check and set nlink first */
+    reiserfs_stat_get_nlink (ih, sd, &nlink);
+    nlink ++;
+    reiserfs_stat_set_nlink (ih, sd, &nlink);
+    reiserfs_buffer_mkdirty (bh);
+
+    if (nlink > 1)
+	return retval;
+
+    /* firts name of a file found */
+    if (reiserfs_ih_get_len (ih) == REISERFS_SD_SIZE)
+	is_new_file = 1;
+    else
+	is_new_file = 0;
+
+    reiserfs_stat_get_mode (ih, sd, &mode);
+    reiserfs_stat_get_size (ih, sd, &saved_size);
+    reiserfs_stat_get_blocks (ih, sd, &saved_blocks);
+    if (!is_new_file)
+	reiserfs_stat_get_fdb (ih, sd, &saved_fdb);
+    
+    /* we met this file first time */
+    if (S_ISREG (mode)) {
+	sem_pass_stat(fs)->regular_files ++;
+    } else if (S_ISLNK (mode)) {
+	symlnk = 1;
+	sem_pass_stat (fs)->symlinks ++;
+    } else {
+	sem_pass_stat (fs)->others ++;
+    }
+
+
+    sd_ih = *ih;
+//    sd_key = sd_ih.ih_key;
+    reiserfs_tree_pathrelse (path);
+    
+    if (are_file_items_correct (&sd_ih, sd, &real_size, 
+				&blocks, 1/*mark reachable*/, 
+				&symlnk) != 1)
+    {
+	/* unpassed items will be deleted in pass 4 as they left unaccessed */
+	fsck_log("%s: some items of %K are left unaccessed.\n", 
+		 __FUNCTION__, &sd_ih.ih_key);
+	sem_pass_stat (fs)->broken_files ++;
+    }
+    
+    fix_sd = 0;
+    
+    fix_sd += wrong_mode (/*&sd_key, */ &sd_ih.ih_key, &mode, real_size, symlnk);
+
+    if (!is_new_file)
+	fix_sd += wrong_fdb (&sd_ih.ih_key, fs->fs_blocksize,
+	    &first_direct_byte, saved_fdb, real_size);
+
+    fix_sd += wrong_st_size (/*&sd_key,*/ &sd_ih.ih_key, 
+	is_new_file ? REISERFS_SD_SIZE_MAX_V2 : REISERFS_SD_SIZE_MAX_V1,
+	fs->fs_blocksize, &real_size, saved_size, symlnk ? TYPE_SYMLINK : 0);
+
+    fix_sd += wrong_st_blocks (&sd_ih.ih_key, &blocks, saved_blocks, mode, is_new_file);
+
+    if (fix_sd) {
+	/* find stat data and correct it */
+	reiserfs_key_set_sec (KEY_FORMAT_1, &sd_ih.ih_key, 
+			      OFFSET_SD, TYPE_STAT_DATA);
+	if (reiserfs_tree_search_item (fs, &sd_ih.ih_key, path) != ITEM_FOUND)
+	    reiserfs_panic ("%s: The StatData of the file %k could not be found", 
+		__FUNCTION__, &sd_ih.ih_key);
+	
+	bh = REISERFS_PATH_LEAF (path);
+	ih = REISERFS_PATH_IH (path);
+	sd = REISERFS_PATH_ITEM (path);
+	reiserfs_stat_set_size (ih, sd, &real_size);
+	reiserfs_stat_set_blocks (ih, sd, &blocks);
+	reiserfs_stat_set_mode (ih, sd, &mode);
+	if (!is_new_file)
+	    reiserfs_stat_set_fdb (ih, sd, &first_direct_byte);
+	reiserfs_buffer_mkdirty (bh);
+    }
+
+    return retval;
+}
+
+
+static int is_rootdir_key (const reiserfs_key_t * key)
+{
+    if (reiserfs_key_comp (key, &root_dir_key))
+	return 0;
+    return 1;
+}
+
+
+/* returns buffer, containing found directory item.*/
+static char * get_next_directory_item (reiserfs_key_t * key, /* on return this will
+								contain key of next item
+								in the tree */
+				       const reiserfs_key_t * parent,
+				       reiserfs_ih_t * ih,/*not in tree*/
+				       __u32 * pos_in_item)
+{
+    const reiserfs_key_t * rdkey;
+    REISERFS_PATH_INIT (path);
+    reiserfs_deh_t * deh;
+    reiserfs_bh_t * bh;
+    char * dir_item;
+    int retval;
+    int i;
+
+
+    if ((retval = reiserfs_tree_search_entry (fs, key, &path)) != POSITION_FOUND)
+	reiserfs_panic ("get_next_directory_item: The current directory %k cannot be "
+	    "found", key);
+
+    /* leaf containing directory item */
+    bh = REISERFS_PATH_LEAF (&path);
+    *pos_in_item = path.pos_in_item;
+    *ih = *REISERFS_PATH_IH (&path);
+    deh = reiserfs_deh (bh, ih);
+
+    /* make sure, that ".." exists as well */
+    if (reiserfs_key_get_off (key) == OFFSET_DOT) {
+	if (reiserfs_ih_get_entries (ih) < 2 ||
+	    reiserfs_direntry_name_len (ih, deh + 1, 1) != 2 ||
+	    strncmp (reiserfs_deh_name (deh + 1, 1), "..", 2))
+	{
+	    fsck_log ("get_next_directory_item: The entry \"..\" cannot be "
+		      "found in %k\n", &ih->ih_key);
+	    
+	    reiserfs_tree_pathrelse (&path);
+	    return 0;
+	}
+    }
+
+    /* mark hidden entries as visible, set "." and ".." correctly */
+    deh += *pos_in_item; 
+    for (i = *pos_in_item; i < reiserfs_ih_get_entries (ih); i ++, deh ++) {
+	int namelen;
+	char * name;
+
+	name = reiserfs_deh_name (deh, i);
+	namelen = reiserfs_direntry_name_len (ih, deh, i);
+
+	if (reiserfs_deh_get_off (deh) == OFFSET_DOT) {
+	    if (reiserfs_key_comp2 (&(deh->deh2_dir_id), key)) {
+		/* "." must point to the directory it is in */
+		
+		//deh->deh_objectid != REISERFS_ROOT_PARENT_OBJECTID)/*????*/ {
+		fsck_log ("get_next_directory_item: The entry \".\" of the "
+			  "directory %K points to %K, instead of %K", 
+			  key, (reiserfs_key_t *)(&(deh->deh2_dir_id)), key);
+		
+		reiserfs_deh_set_did (deh, reiserfs_key_get_did (key));
+		reiserfs_deh_set_obid (deh, reiserfs_key_get_oid (key));
+		reiserfs_buffer_mkdirty (bh);
+		fsck_log (" - corrected\n");
+	    }
+	}
+
+	if (reiserfs_deh_get_off (deh) == OFFSET_DOT_DOT) {
+	    /* set ".." so that it points to the correct parent directory */
+	    if (reiserfs_key_comp2 (&(deh->deh2_dir_id), parent)) {
+		fsck_log ("get_next_directory_item: The entry \"..\" of the "
+			  "directory %K points to %K, instead of %K", 
+		    key, (reiserfs_key_t *)(&(deh->deh2_dir_id)), parent);
+		reiserfs_deh_set_did (deh, reiserfs_key_get_did (parent));
+		reiserfs_deh_set_obid (deh, reiserfs_key_get_oid (parent));
+		reiserfs_buffer_mkdirty (bh);
+		fsck_log (" - corrected\n");
+	    }
+	}
+    }
+
+    /* copy directory item to the temporary buffer */
+    dir_item = misc_getmem (reiserfs_ih_get_len (ih)); 
+    memcpy (dir_item, reiserfs_item_by_ih (bh, ih), reiserfs_ih_get_len (ih));
+
+
+    /* next item key */
+    if ((rdkey = reiserfs_tree_next_key (&path, fs)))
+	reiserfs_key_copy (key, rdkey);
+    else {
+	reiserfs_key_set_did (key, 0);
+	reiserfs_key_set_oid (key, 0);
+    }
+
+    if (fsck_mode (fs) == FSCK_REBUILD)
+        fsck_item_mkreach (REISERFS_PATH_IH (&path), bh);
+    reiserfs_tree_pathrelse (&path);
+
+    return dir_item;
+}
+
+
+// get key of an object pointed by direntry and the key of the entry itself
+void get_object_key (reiserfs_deh_t * deh, reiserfs_key_t * key, 
+		     reiserfs_key_t * entry_key, reiserfs_ih_t * ih)
+{
+    /* entry points to this key */
+    reiserfs_key_set_did (key, reiserfs_deh_get_did (deh));
+    reiserfs_key_set_oid (key, reiserfs_deh_get_obid (deh));
+    reiserfs_key_set_off1 (key, OFFSET_SD);
+    reiserfs_key_set_uni (key, 0);
+
+    /* key of entry */
+    reiserfs_key_set_did (entry_key, reiserfs_key_get_did (&ih->ih_key));
+    reiserfs_key_set_oid (entry_key, reiserfs_key_get_oid (&ih->ih_key));
+    reiserfs_key_set_off1 (entry_key, reiserfs_deh_get_off (deh));
+    reiserfs_key_set_uni (entry_key, UNI_DE);
+}
+
+int fix_obviously_wrong_sd_mode (reiserfs_path_t * path) {
+    const reiserfs_key_t * next_key;
+    __u16 mode;
+    int retval = 0;
+
+    next_key = reiserfs_tree_next_key (path, fs);
+
+    if (!next_key)
+    	return 0;
+	    
+    if (reiserfs_key_comp2 (next_key, &REISERFS_PATH_IH(path)->ih_key))
+	return 0;
+    	
+    /* next item exists and of the same file. Fix the SD mode */
+
+    if (not_a_directory (REISERFS_PATH_ITEM (path)) && 
+	reiserfs_key_dir (next_key)) 
+    {
+        /* make SD mode SD of dir */
+	reiserfs_stat_get_mode (REISERFS_PATH_IH (path), 
+				REISERFS_PATH_ITEM (path), &mode);
+	
+	fsck_log ("The directory %K had wrong mode %M", 
+		  &REISERFS_PATH_IH(path)->ih_key, mode);
+
+	if (fsck_mode(fs) != FSCK_CHECK) {
+	    mode &= ~S_IFMT;
+	    mode |= S_IFDIR;
+	    fsck_log (" - corrected to %M\n", mode);	
+	    reiserfs_stat_set_mode (REISERFS_PATH_IH (path), 
+				    REISERFS_PATH_ITEM (path), &mode);
+	    
+	    reiserfs_buffer_mkdirty (REISERFS_PATH_LEAF(path));
+	} else {
+	    fsck_log ("\n");
+	    retval = 1;
+	}
+    } else if (!not_a_directory (REISERFS_PATH_ITEM (path)) && 
+	       !reiserfs_key_dir (next_key)) 
+    {
+        /* make SD mode SD of regular file */
+	reiserfs_stat_get_mode (REISERFS_PATH_IH (path), 
+				REISERFS_PATH_ITEM (path), &mode);
+	
+	fsck_log ("The file %K had wrong mode %M", 
+		  &REISERFS_PATH_IH(path)->ih_key, mode);
+	
+	if (fsck_mode(fs) != FSCK_CHECK) {
+	    mode &= ~S_IFMT;
+	    mode |= S_IFREG;
+	    fsck_log (" - corrected to %M\n", mode);
+	    reiserfs_stat_set_mode (REISERFS_PATH_IH (path), 
+				    REISERFS_PATH_ITEM (path), &mode);
+	    
+	    reiserfs_buffer_mkdirty (REISERFS_PATH_LEAF(path));
+	} else {
+	    fsck_log ("\n");
+	    retval = 1;
+	}
+	    
+    }
+
+    return retval;
+}
+
+static int is_lost_found (char * name, int namelen)
+{
+    return (namelen == 10 && !memcmp(name, "lost+found", 10)) ? 1 : 0;
+}
+
+void cb_item_modify (reiserfs_ih_t *ih, void *item) {
+    zero_nlink (ih, item);
+    reiserfs_ih_mkunreach (ih);
+}
+
+/* check recursively the semantic tree. Returns OK if entry points to good
+   object, STAT_DATA_NOT_FOUND if stat data was not found or RELOCATED when
+   file was relocated because its objectid was already marked as used by
+   another file */
+int rebuild_semantic_pass (reiserfs_key_t * key, 
+			   const reiserfs_key_t * parent, 
+			   int etype, reiserfs_ih_t * new_ih)
+{
+    reiserfs_path_t path;
+    void * sd;
+    int is_new_dir;
+    __u32 nlink;
+    reiserfs_bh_t * bh;
+    reiserfs_ih_t * ih;
+    int retval, retval1;
+    char * dir_item;
+    __u32 pos_in_item;
+    reiserfs_ih_t tmp_ih;
+    reiserfs_key_t item_key, entry_key, object_key, *found;
+    __u64 dir_size;
+    __u32 blocks;
+    __u64 saved_size;
+    __u32 saved_blocks;
+    int fix_sd;
+    int relocate;
+    int dir_format = 0;
+    __u16 mode;
+    int entry_len;
+
+
+    retval = OK;
+
+ start_again: /* when directory was relocated */
+
+    if (!reiserfs_key_stat (key))
+	reiserfs_panic ("rebuild_semantic_pass: The key %k must "
+			"be key of a StatData", key);
+
+    /* look for stat data of an object */
+    if (reiserfs_tree_search_item (fs, key, &path) == ITEM_NOT_FOUND) {
+	if (is_rootdir_key (key))
+	    /* root directory has to exist at this point */
+	    reiserfs_panic ("rebuild_semantic_pass: The root directory "
+			    "StatData was not found");
+	/* If an item of the same object is found, create a stat item. */
+	found = &REISERFS_PATH_IH(&path)->ih_key;
+	if (!reiserfs_key_comp2(key, found)) {
+	    if (reiserfs_key_dir (found) || reiserfs_key_get_off (key) == 1) {
+		sem_pass_stat(fs)->added_sd ++;
+		reiserfs_tree_create_stat (fs, &path, key, cb_item_modify);
+		reiserfs_tree_pathrelse (&path);
+		goto start_again;
+	    }
+	}
+	
+	reiserfs_tree_pathrelse (&path);
+	return STAT_DATA_NOT_FOUND;
+    }
+
+    if ((etype == ET_NAME) && !reiserfs_key_comp2(key, &lost_found_dir_key)) {
+	/* This is not "lost+found" entry that points to "lost+found" object. */
+	reiserfs_tree_pathrelse (&path);
+	return DIRECTORY_HAS_NO_ITEMS;
+    }
+
+    /* stat data has been found */
+    bh = REISERFS_PATH_LEAF (&path);
+    ih = REISERFS_PATH_IH (&path);
+    sd = REISERFS_PATH_ITEM(&path);
+
+    /* */
+    reiserfs_stat_get_nlink (ih, sd, &nlink);
+
+    relocate = 0;
+    if (!nlink) {
+	/* we reached the stat data for the first time */
+	if (id_map_mark(semantic_id_map(fs), reiserfs_key_get_oid (&ih->ih_key))) {
+	    /* calculate number of found files/dirs who are using objectid
+	       which is used by another file */
+	    sem_pass_stat (fs)->oid_sharing ++;
+	    relocate = 1;
+	}
+
+	fsck_item_mkreach (ih, bh);
+    }
+
+    fix_obviously_wrong_sd_mode (&path);
+
+    if (not_a_directory (sd)) {
+	retval = rebuild_check_regular_file (&path, sd, relocate ? new_ih : 0);
+	reiserfs_tree_pathrelse (&path);
+	return retval;
+    }
+
+    if (relocate) {
+	if (!new_ih)
+	    reiserfs_panic ("rebuild_semantic_pass: Memory is not "
+			    "prepared for relocation of %K", &ih->ih_key);
+	*new_ih = *ih;
+	reiserfs_tree_pathrelse (&path);
+	sem_pass_stat (fs)->oid_sharing_dirs_relocated ++;
+	relocate_dir (new_ih);
+	fsck_relocate_mklinked(&new_ih->ih_key);
+	*key = new_ih->ih_key;	
+	retval = RELOCATED;
+	
+	goto start_again;
+    }
+
+    /* it looks like stat data of a directory found */
+    if (nlink) {
+	/* we saw this directory already */
+	if (etype != ET_DOT_DOT) {
+	    /* this name is not ".."  - and hard links are not allowed on
+               directories */
+	    reiserfs_tree_pathrelse (&path);
+	    return STAT_DATA_NOT_FOUND;
+	} else {
+	    /* ".." found */
+	    nlink ++;
+	    reiserfs_stat_set_nlink (ih, sd, &nlink);
+	    reiserfs_buffer_mkdirty (bh);
+	    reiserfs_tree_pathrelse (&path);
+	    return OK;
+	}
+    }
+
+
+    /* we see the directory first time */
+    sem_pass_stat (fs)->directories ++;
+    nlink = 2;
+    if (reiserfs_key_get_oid (key) == REISERFS_ROOT_OBJECTID)
+	nlink ++;
+    reiserfs_stat_set_nlink (ih, sd, &nlink);
+    reiserfs_buffer_mkdirty (bh);
+    
+    if (reiserfs_ih_get_len (ih) == REISERFS_SD_SIZE)
+	is_new_dir = 1;
+    else
+	is_new_dir = 0;
+
+
+/*
+    {
+	reiserfs_key_t * tmp;
+
+	// check next item: if it is not a directory item of the same file
+	// therefore sd_mode is corrupted so we just reset it to regular file
+	// mode
+	tmp = reiserfs_tree_next_key (&path);
+	if (tmp && !reiserfs_key_comp2 (tmp, key) && !reiserfs_key_dir (tmp)) {
+	    __u16 mode;
+
+	    reiserfs_stat_get_mode (ih, sd, &mode);
+	    fsck_log ("file %K had broken mode %M, ", key, mode);
+	    mode &= ~S_IFMT;
+	    mode |= S_IFREG;
+	    fsck_log ("fixed to %M\n", mode);
+	    reiserfs_stat_set_mode (ih, sd, &mode);
+
+	    nlink = 0;
+	    reiserfs_stat_set_nlink (ih, sd, &nlink);
+	    
+	    retval = rebuild_check_regular_file (&path, sd, 0); //no relocate
+	    reiserfs_tree_pathrelse (&path);
+	    return retval;
+	}
+    }
+*/
+
+
+    dir_format = (reiserfs_ih_get_len (REISERFS_PATH_IH (&path)) == REISERFS_SD_SIZE) ? 
+	    KEY_FORMAT_2 : KEY_FORMAT_1;
+    
+    /* save stat data's size and st_blocks */
+    reiserfs_stat_get_size (ih, sd, &saved_size);
+    reiserfs_stat_get_blocks (ih, sd, &saved_blocks);	
+    reiserfs_stat_get_mode (ih, sd, &mode);
+
+    /* release path pointing to stat data */
+    reiserfs_tree_pathrelse (&path);
+
+    /* make sure that "." and ".." exist */
+    entry_len = reiserfs_direntry_entry_estimate (".", dir_format);
+    reiserfs_tree_insert_entry (fs, key, ".",  entry_len, key, 
+				1 << IH_Unreachable);
+    
+    entry_len = reiserfs_direntry_entry_estimate ("..", dir_format);
+    reiserfs_tree_insert_entry (fs, key, "..", entry_len, 
+				parent, 1 << IH_Unreachable);
+
+    reiserfs_key_set_did (&item_key, reiserfs_key_get_did (key));
+    reiserfs_key_set_oid (&item_key, reiserfs_key_get_oid (key));
+    reiserfs_key_set_off1 (&item_key, OFFSET_DOT);
+    reiserfs_key_set_uni (&item_key, UNI_DE);
+
+
+    dir_size = 0;
+    while ((dir_item = get_next_directory_item (&item_key, parent, 
+						&tmp_ih, &pos_in_item)) != 0) 
+    {
+	/* dir_item is copy of the item in separately allocated memory,
+	   item_key is a key of next item in the tree */
+	int i;
+	char name[REISERFS_NAME_MAX];
+	int namelen, entry_len;
+	reiserfs_deh_t * deh = (reiserfs_deh_t *)dir_item + pos_in_item;	
+	
+	for (i = pos_in_item; i < reiserfs_ih_get_entries (&tmp_ih); i ++, deh ++) {
+	    reiserfs_ih_t relocated_ih;
+	
+	    name[0] = '\0';
+	
+	    namelen = reiserfs_direntry_name_len (&tmp_ih, deh, i);
+	    sprintf(name, "%.*s", namelen, reiserfs_deh_name (deh, i));
+	
+	    entry_len = reiserfs_direntry_entry_len (&tmp_ih, deh, i);
+	
+	    get_object_key (deh, &object_key, &entry_key, &tmp_ih);
+	
+	    if ((dir_format == KEY_FORMAT_2) && (entry_len % 8 != 0)) {
+	    	/* not alighed directory of new format - delete it */
+		fsck_log ("Entry %K (\"%.*s\") in the directory %K is not "
+			  "formated properly - fixed.\n", 
+			  (reiserfs_key_t *)&(deh->deh2_dir_id), 
+			  namelen, name, &tmp_ih.ih_key);
+		
+		reiserfs_tree_delete_entry (fs, &entry_key);
+		entry_len = reiserfs_direntry_entry_estimate (name, dir_format);
+		reiserfs_tree_insert_entry (fs, key, name, entry_len,
+                                (reiserfs_key_t *)&(deh->deh2_dir_id), 0);
+	    }
+	    
+	    /*	
+	    if ((dir_format == KEY_FORMAT_1) && (namelen != entry_len)) {
+	    	// aligned entry in directory of old format - remove and 
+		// insert it back 
+		fsck_log ("Entry %K (\"%.*s\") in the directory %K is not "
+			  "formated properly - deleted\n",
+			  (reiserfs_key_t *)&(deh->deh2_dir_id), 
+			  namelen, name, &tmp_ih.ih_key);
+			  
+		reiserfs_tree_delete_entry (fs, &entry_key);
+		entry_len = reiserfs_direntry_entry_estimate (name, dir_format);
+		reiserfs_tree_insert_entry (fs, key, name, entry_len,
+				(reiserfs_key_t *)&(deh->deh2_dir_id), 0);
+	    }
+	    */	
+	    
+	    if (is_dot (name, namelen)) {
+		dir_size += REISERFS_DEH_SIZE + entry_len;
+		continue;
+	    }
+	
+	    if (!fsck_quiet(fs)) {
+		util_misc_print_name (fsck_progress_file(fs), 
+				      name, namelen);
+	    }
+	    
+	    if (!reiserfs_hash_correct (&fs->hash, name, namelen, 
+					reiserfs_deh_get_off (deh)))
+	    {
+		reiserfs_panic ("rebuild_semantic_pass: Hash mismatch "
+				"detected for (\"%.*s\") in directory %K\n", 
+				namelen, name, &tmp_ih.ih_key);
+	    }
+	
+	    retval1 = rebuild_semantic_pass (&object_key, key, 
+					     is_dot_dot (name, namelen) ? ET_DOT_DOT :
+					     reiserfs_key_get_oid (key) == REISERFS_ROOT_OBJECTID &&
+					     is_lost_found (name, namelen) ? ET_LOST_FOUND : 0, 
+					     &relocated_ih);
+	   
+	    if (!fsck_quiet(fs)) {
+		util_misc_erase_name (fsck_progress_file(fs), 
+				      namelen);
+	    }
+	    
+	    switch (retval1) {
+	    case OK:
+		dir_size += REISERFS_DEH_SIZE + entry_len;
+		break;
+
+	    case STAT_DATA_NOT_FOUND:
+	    case DIRECTORY_HAS_NO_ITEMS:
+		if (reiserfs_key_get_off (&entry_key) == OFFSET_DOT_DOT && 
+		    reiserfs_key_get_oid (&object_key) == 
+		    REISERFS_ROOT_PARENT_OBJECTID) 
+		{
+		    /* ".." of root directory can not be found */
+		    dir_size += REISERFS_DEH_SIZE + entry_len;
+		    continue;
+		}
+		
+		fsck_log ("%s: The entry %K (\"%.*s\") in directory %K "
+			  "points to nowhere - is removed\n", __FUNCTION__, 
+			  &object_key, namelen, name, &tmp_ih.ih_key);
+		
+		reiserfs_tree_delete_entry (fs, &entry_key);
+		sem_pass_stat (fs)->deleted_entries ++;
+		break;
+		
+	    case RELOCATED:
+		/* file was relocated, update key in directory entry */
+		
+		if (reiserfs_tree_search_entry (fs, &entry_key, &path) != 
+		    POSITION_FOUND) 
+		{
+		    fsck_log ("WARNING: Cannot find the name of the relocated "
+			      "file %K in the directory %K\n", &object_key, 
+			      &tmp_ih.ih_key);
+		} else {
+		    /* update key dir entry points to */
+		    reiserfs_deh_t * tmp_deh;
+		    
+		    tmp_deh = reiserfs_deh (REISERFS_PATH_LEAF (&path), 
+				       REISERFS_PATH_IH (&path)) + path.pos_in_item;
+		    
+		    fsck_log ("The entry %K (\"%.*s\") in directory %K "
+			      "updated to point to ", &object_key, namelen, 
+			      name, &tmp_ih.ih_key);
+		    
+		    reiserfs_deh_set_did (tmp_deh, reiserfs_key_get_did (&relocated_ih.ih_key));
+		    reiserfs_deh_set_obid (tmp_deh, 
+				      reiserfs_key_get_oid (&relocated_ih.ih_key));
+
+		    fsck_log ("%K\n",  &tmp_deh->deh2_dir_id);
+		    reiserfs_buffer_mkdirty (REISERFS_PATH_LEAF (&path));
+		}
+		
+		dir_size += REISERFS_DEH_SIZE + entry_len;
+		reiserfs_tree_pathrelse (&path);
+		break;
+	    }
+	} /* for */
+	
+	misc_freemem (dir_item);
+	
+	if (reiserfs_key_comp2 (&item_key, key)  || !reiserfs_key_dir(&item_key))
+	    /* next key is not of this directory */
+	    break;
+	
+    } /* while (dir_item) */
+    
+    
+    if (dir_size == 0)
+	/* FIXME: is it possible? */
+	return DIRECTORY_HAS_NO_ITEMS;
+    
+    /* calc correct value of sd_blocks field of stat data */
+    blocks = REISERFS_DIR_BLOCKS (dir_size);
+    
+    fix_sd = 0;
+    fix_sd += wrong_st_blocks (key, &blocks, saved_blocks, mode, is_new_dir);
+    fix_sd += wrong_st_size (key, is_new_dir ? REISERFS_SD_SIZE_MAX_V2 : 
+			     REISERFS_SD_SIZE_MAX_V1, fs->fs_blocksize, 
+			     &dir_size, saved_size, TYPE_DIRENTRY);
+
+    if (fix_sd) {
+	/* we have to fix either sd_size or sd_blocks, so look for SD again */
+	if (reiserfs_tree_search_item (fs, key, &path) != ITEM_FOUND)
+	    reiserfs_panic ("rebuild_semantic_pass: The StatData of the "
+			    "file %K was not found", key);
+	    
+	bh = REISERFS_PATH_LEAF (&path);
+	ih = REISERFS_PATH_IH (&path);
+	sd = REISERFS_PATH_ITEM (&path);
+	
+	reiserfs_stat_set_size (ih, sd, &dir_size);
+	reiserfs_stat_set_blocks (ih, sd, &blocks);
+	reiserfs_buffer_mkdirty (bh);
+	reiserfs_tree_pathrelse (&path);
+    }
+    
+    return retval;
+}
+
+
+int is_dot (char * name, int namelen)
+{
+    return (namelen == 1 && name[0] == '.') ? 1 : 0;
+}
+
+
+int is_dot_dot (char * name, int namelen)
+{
+    return (namelen == 2 && name[0] == '.' && name[1] == '.') ? 1 : 0;
+}
+
+int not_a_directory (void * sd)
+{
+    /* mode is at the same place and of the same size in both stat
+       datas (v1 and v2) */
+    reiserfs_sd_v1_t * sd_v1 = sd;
+
+    return !(S_ISDIR (le16_to_cpu (sd_v1->sd_mode)));
+}
+
+int not_a_regfile (void * sd)
+{
+    /* mode is at the same place and of the same size in both stat
+       datas (v1 and v2) */
+    reiserfs_sd_v1_t * sd_v1 = sd;
+
+    return !(S_ISREG (le16_to_cpu (sd_v1->sd_mode)));
+}
+
+
+
+void zero_nlink (reiserfs_ih_t * ih, void * sd)
+{
+    int zero = 0;
+
+    if (reiserfs_ih_get_len (ih) == REISERFS_SD_SIZE_V1 && reiserfs_ih_get_format (ih) != 
+	KEY_FORMAT_1) 
+    {
+	fsck_log ("zero_nlink: The StatData %k of the wrong format version "
+		  "(%d) - corrected to (%d)\n", ih, reiserfs_ih_get_format (ih), 
+		  KEY_FORMAT_1);
+	
+	reiserfs_ih_set_format (ih, KEY_FORMAT_1);
+    }
+    
+    if (reiserfs_ih_get_len (ih) == REISERFS_SD_SIZE && reiserfs_ih_get_format (ih) != 
+	KEY_FORMAT_2) 
+    {
+	fsck_log ("zero_nlink: The StatData %k of the wrong format version "
+		  "(%d) - corrected to (%d)\n", ih, reiserfs_ih_get_format (ih), 
+		  KEY_FORMAT_2);
+	
+	reiserfs_ih_set_format (ih, KEY_FORMAT_2);
+    }
+
+    reiserfs_stat_set_nlink (ih, sd, &zero);
+}
+
+/* mkreiserfs should have created this */
+static void make_sure_lost_found_exists (reiserfs_filsys_t * fs, 
+					 __u16 root_format)
+{
+    int retval;
+    REISERFS_PATH_INIT (path);
+    unsigned int gen_counter;
+    __u32 objectid;
+    __u64 sd_size;
+    __u32 sd_blocks;
+    reiserfs_bh_t * bh;
+    reiserfs_ih_t * ih;
+    void * sd;
+    int item_len;
+    int entry_len;
+
+
+    /* look for "lost+found" in the root directory */
+    retval = reiserfs_tree_search_name (fs, &root_dir_key,
+					"lost+found", &gen_counter,
+					&lost_found_dir_key);
+    if (!retval) {
+	objectid = id_map_alloc(proper_id_map(fs));
+	if (!objectid) {
+	    fsck_progress ("Could not allocate an objectid for '/lost+found'",
+			   "lost files will not be linked\n");
+	    return;
+	}
+	reiserfs_key_set_did (&lost_found_dir_key, REISERFS_ROOT_OBJECTID);
+	reiserfs_key_set_oid (&lost_found_dir_key, objectid);
+    }
+
+
+    /* look for stat data of "lost+found" */
+    retval = reiserfs_tree_search_item (fs, &lost_found_dir_key, &path);
+    if (retval == ITEM_NOT_FOUND) {
+	fs->lost_format = reiserfs_tree_create_stat 
+		(fs, &path, &lost_found_dir_key, cb_item_modify);
+    } else {
+    	reiserfs_ih_t * ih = REISERFS_PATH_IH (&path);
+	
+    	if (!reiserfs_ih_stat (ih))
+	    reiserfs_panic ("It must be lost+found's stat data %k\n", 
+			    &ih->ih_key);
+	
+	fix_obviously_wrong_sd_mode (&path);
+	
+	if (not_a_directory (REISERFS_PATH_ITEM (&path))) {
+	    fsck_progress ("\"/lost+found\" exists, but it is not a "
+			   "directory, lost files will not be linked\n");
+	    reiserfs_key_set_oid (&lost_found_dir_key, 0);
+	    reiserfs_tree_pathrelse (&path);
+	    return;
+	}
+    	
+        fs->lost_format = (reiserfs_ih_get_len (REISERFS_PATH_IH (&path)) == 
+			   REISERFS_SD_SIZE) ? KEY_FORMAT_2 : KEY_FORMAT_1;
+        	
+	reiserfs_tree_pathrelse (&path);
+    }
+
+    /* add "." and ".." if any of them do not exist */
+    entry_len = reiserfs_direntry_entry_estimate (".", fs->lost_format);
+    reiserfs_tree_insert_entry (fs, &lost_found_dir_key, ".", entry_len,
+				&lost_found_dir_key, 1 << IH_Unreachable);
+    
+    entry_len = reiserfs_direntry_entry_estimate ("..", fs->lost_format);
+    reiserfs_tree_insert_entry (fs, &lost_found_dir_key, "..", entry_len,
+				&root_dir_key, 1 << IH_Unreachable);
+
+    entry_len = reiserfs_direntry_entry_estimate ("lost+found", root_format);
+    item_len = reiserfs_tree_insert_entry (fs, &root_dir_key, "lost+found",
+					   entry_len, &lost_found_dir_key, 
+					   1 << IH_Unreachable);
+
+    if (item_len) {
+	if (reiserfs_tree_search_item (fs, &root_dir_key, &path) == 
+	    ITEM_NOT_FOUND)
+	{
+	    reiserfs_panic ("%s: StatData of the root directory must exists", 
+			    __FUNCTION__);
+	}
+	
+	bh = REISERFS_PATH_LEAF (&path);
+	ih = REISERFS_PATH_IH (&path);
+	sd = REISERFS_PATH_ITEM(&path);
+	
+	reiserfs_stat_get_size (ih, sd, &sd_size);
+	sd_size += item_len;
+	reiserfs_stat_set_size (ih, sd, &sd_size);
+	sd_blocks = REISERFS_DIR_BLOCKS (sd_size);
+	reiserfs_stat_set_blocks (ih, sd, &sd_blocks);
+	reiserfs_buffer_mkdirty (bh);
+	reiserfs_tree_pathrelse (&path);
+    }
+			
+    return;
+}
+
+/* Result of the rebuild pass will be saved in the state file 
+   which is needed to start fsck again from the next pass. */
+static void fsck_semantic_save_result (reiserfs_filsys_t * fs) {
+    FILE * file;
+    int retval;
+
+    file = util_file_open ("temp_fsck_file.deleteme", "w+");
+    if (!file)
+	return;
+
+    fsck_stage_start_put (file, SEMANTIC_DONE);
+    reiserfs_objectid_map_save (file, semantic_id_map (fs));
+    fsck_stage_end_put (file);
+    fclose (file);
+    retval = rename ("temp_fsck_file.deleteme", state_dump_file (fs));
+    if (retval != 0) {
+	fsck_progress ("%s: Could not rename the temporary file "
+		       "temp_fsck_file.deleteme to %s",
+		       __FUNCTION__, state_dump_file (fs));
+    }
+}
+
+/* we have nothing to load from a state file, but we have to fetch
+   on-disk bitmap, copy it to allocable bitmap, and fetch objectid
+   map */
+void fsck_semantic_load_result (FILE * file, reiserfs_filsys_t * fs) {
+    unsigned int gen_counter;
+    REISERFS_PATH_INIT(path);
+    
+    fsck_new_bitmap (fs) = reiserfs_bitmap_create 
+	    (reiserfs_sb_get_blocks (fs->fs_ondisk_sb));
+    
+    reiserfs_bitmap_copy (fsck_new_bitmap (fs), fs->fs_bitmap2);
+
+    fsck_allocable_bitmap (fs) = reiserfs_bitmap_create 
+	    (reiserfs_sb_get_blocks (fs->fs_ondisk_sb));
+    
+    reiserfs_bitmap_copy (fsck_allocable_bitmap (fs), fs->fs_bitmap2);
+
+    fs->block_allocator = reiserfsck_new_blocknrs;
+    fs->block_deallocator = reiserfsck_free_block;
+
+    /* we need objectid map on semantic pass to be able to relocate files */
+    proper_id_map (fs) = id_map_init();
+    
+    fetch_objectid_map (proper_id_map (fs), fs);
+    semantic_id_map (fs) = reiserfs_objectid_map_load (file);
+
+    /* get the lost_found key. */
+    if (!(reiserfs_tree_search_name (fs, &root_dir_key,
+				     "lost+found", &gen_counter,
+				     &lost_found_dir_key)))
+    {
+	    reiserfs_panic("Lost&found entry cannot be found in the root dir.");
+    }
+
+    if (reiserfs_tree_search_item (fs, &lost_found_dir_key, 
+				   &path) == ITEM_NOT_FOUND)
+    {
+	    reiserfs_panic("Lost&found StatData item cannot be found.");
+    }
+
+    fs->lost_format = (reiserfs_ih_get_len (REISERFS_PATH_IH (&path)) == 
+		       REISERFS_SD_SIZE) ? KEY_FORMAT_2 : KEY_FORMAT_1;
+    reiserfs_tree_pathrelse (&path);
+}
+
+static void before_pass_3 (reiserfs_filsys_t * fs) {
+    semantic_id_map (fs) = id_map_init();
+}
+
+static void after_pass_3 (reiserfs_filsys_t * fs) {
+    /* update super block: objectid map, fsck state */
+    reiserfs_sb_set_state (fs->fs_ondisk_sb, SEMANTIC_DONE);
+    reiserfs_buffer_mkdirty (fs->fs_super_bh);
+
+    /* write all dirty blocks */
+    fsck_progress ("Flushing..");
+    id_map_flush(proper_id_map (fs), fs);
+    fs->fs_dirt = 1;
+    reiserfs_bitmap_flush (fsck_new_bitmap(fs), fs);
+    reiserfs_fs_flush (fs);
+    fsck_progress ("finished\n");
+
+    fsck_stage_report (FS_SEMANTIC, fs);
+
+    if (!fsck_run_one_step (fs)) {
+	if (fsck_info_ask (fs, "Continue? (Yes):", "Yes\n", 1))
+	    /* reiserfsck continues */
+	    return;
+    }
+
+    fsck_semantic_save_result (fs);
+
+    id_map_free(proper_id_map (fs));
+    proper_id_map (fs) = 0;
+
+    fs->fs_dirt = 1;
+    reiserfs_fs_close (fs);
+    exit(0);
+}
+
+/* this is part of rebuild tree */
+void fsck_semantic (reiserfs_filsys_t * fs) {
+    __u16 root_format;
+    
+    before_pass_3 (fs);
+
+    fsck_progress ("Pass 3 (semantic):\n");
+
+    /* when warnings go not to stderr - separate them in the log */
+    if (fsck_log_file (fs) != stderr)
+	fsck_log ("####### Pass 3 #########\n");
+
+
+    if (!fs->hash)
+	reiserfs_panic ("Hash function should be selected already");
+
+    root_format = reiserfs_tree_root (fs, cb_item_modify, 1 << IH_Unreachable);
+    make_sure_lost_found_exists (fs, root_format);
+
+    id_map_mark(proper_id_map(fs), reiserfs_key_get_oid(&root_dir_key));
+    id_map_mark(proper_id_map(fs), reiserfs_key_get_oid(&lost_found_dir_key));
+    
+    /* link all relocated files into /lost+found directory */
+    fsck_relocate_link_all();
+
+    rebuild_semantic_pass ((reiserfs_key_t *)&root_dir_key, 
+			   &parent_root_dir_key, ET_NAME, 0/*reloc_ih*/);
+
+    if (!fsck_quiet(fs))
+	util_misc_fini_name(fsck_progress_file(fs));
+    
+    reiserfs_badblock_flush(fs, 1);
+
+    after_pass_3 (fs);
+}
diff --git a/utils/fsck/stage.c b/utils/fsck/stage.c
new file mode 100644
index 0000000..69dd57e
--- /dev/null
+++ b/utils/fsck/stage.c
@@ -0,0 +1,70 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "fsck.h"
+#include <errno.h>
+
+#define FSCK_DUMP_START_MAGIC 374033
+#define FSCK_DUMP_END_MAGIC 7786470
+
+void fsck_stage_start_put (FILE * file, unsigned long stage) {
+    __u32 v = FSCK_DUMP_START_MAGIC;
+    fwrite (&v, 4, 1, file);
+    fwrite (&stage, 4, 1, file);
+}
+
+
+void fsck_stage_end_put (FILE * file) {
+    __u32 v = FSCK_DUMP_END_MAGIC;
+    fwrite (&v, 4, 1, file);
+}
+
+/*return last passed stage*/
+int fsck_stage_magic_check (FILE * fp)
+{
+    __u32 v;
+
+    if (fseek (fp, -4, SEEK_END)) {
+	reiserfs_warning (stderr, "%s: fseek failed: %s\n", 
+			  __FUNCTION__, strerror(errno));
+	return -1;
+    }
+
+    fread (&v, 4, 1, fp);
+    if (v != FSCK_DUMP_END_MAGIC) {
+	reiserfs_warning (stderr, "%s: no magic found\n", __FUNCTION__);
+	return -1;
+    }
+
+    if (fseek (fp, 0, SEEK_SET)) {
+	reiserfs_warning (stderr, "%s: fseek failed: %s\n", 
+			  __FUNCTION__, strerror(errno));
+	return -1;
+    }
+
+    fread (&v, 4, 1, fp);
+    if (v != FSCK_DUMP_START_MAGIC) {
+	reiserfs_warning (stderr, "%s: no magic found\n", __FUNCTION__);
+	return -1;
+    }
+
+    fread (&v, 4, 1, fp);
+    if (v != PASS_0_DONE && 
+	v != PASS_1_DONE && 
+	v != TREE_IS_BUILT && 
+	v != SEMANTIC_DONE && 
+	v != LOST_FOUND_DONE) 
+    {
+	reiserfs_warning (stderr, "%s: wrong pass found", __FUNCTION__);
+	return -1;
+    }
+
+    return (__u16)v;
+}
+
diff --git a/utils/fsck/super.c b/utils/fsck/super.c
new file mode 100644
index 0000000..40ac14b
--- /dev/null
+++ b/utils/fsck/super.c
@@ -0,0 +1,894 @@
+/*
+ * Copyright 2001-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "fsck.h"
+#include "misc/malloc.h"
+#include "misc/device.h"
+#include "util/print.h"
+
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+
+#if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)
+#    include <uuid/uuid.h>
+#endif
+
+#define fsck_conditional_log(sb_found, fmt, list...) {	\
+    if (sb_found)					\
+    	fsck_log(fmt, ## list);				\
+}
+
+int what_fs_version ()
+{
+    char answer[256];
+    int version;
+    printf("\nwhat the version of ReiserFS do you use[1-4]\n"
+        "\t(1)   3.6.x\n"
+        "\t(2) >=3.5.9 (introduced in the middle of 1999) (if you use linux 2.2, choose this one)\n"
+        "\t(3) < 3.5.9 converted to new format (don't choose if unsure)\n"
+        "\t(4) < 3.5.9 (this is very old format, don't choose if unsure)\n"
+        "\t(X)   exit\n");
+    fgets(answer, sizeof(answer), stdin);
+    version = atoi (answer);
+    if (version < 1 || version > 4)
+        misc_die ("rebuild_sb: wrong version");
+    return version;
+}
+
+/*
+#define super_error(exit_code, text) {	\
+    fsck_log(text);			\
+    return exit_code;			\
+}
+    
+int check_sb (reiserfs_filsys_t * fs) {
+    int magic = 0, version = 0;
+    
+    if (!reiserfs_fs_blksize_check (fs->fs_blocksize)) 
+	super_error(-1, "Wrong blocksize found in the super block\n");
+
+    if (reiserfs_super_36_magic (sb))
+	magic = 2;
+    else if (reiserfs_super_35_magic (sb))
+	magic = 1;
+    else if (reiserfs_super_jr_magic (sb))
+	magic = 3;
+    else 
+	super_error(-1, "Invalid magic found in the super block.\n");
+    
+    if (magic == 1 || magic == 2) {
+	if (fsck_data (fs)->journal_dev_name)
+            fsck_log("Reiserfs with standard journal found, but there was specified a "
+		"journal dev\n");
+	
+	standard_journal = 1;
+    } else {
+	if (!fsck_data (fs)->journal_dev_name) 
+            super_error(-1, "Reiserfs with non standard journal found, but there was not "
+		"specified any journal dev\n");
+	
+	standard_journal = 0;
+    }
+    
+    if (reiserfs_sb_get_version (sb) != REISERFS_FORMAT_3_6 && reiserfs_sb_get_version (sb) != REISERFS_FORMAT_3_5) 
+	super_error(-1, "Invalid format found in the super block.\n");
+	
+    if (reiserfs_new_location(fs->fs_super_bh->b_blocknr, fs->fs_blocksize)) 
+    {
+	if (magic == 3) 
+	    version = reiserfs_sb_get_version (sb) == REISERFS_FORMAT_3_6 ? 1 : 2;
+	else
+	    version = magic == 2 ? 1 : 2;	
+    } else if (reiserfs_old_location(fs->fs_super_bh->b_blocknr, fs->fs_blocksize)) {
+	if (magic == 3) 
+	    version = reiserfs_sb_get_version (sb) == REISERFS_FORMAT_3_6 ? 3 : 4;
+	else 
+	    version = magic == 2 ? 3 : 4;	
+    } else 
+	misc_die("Super block in the wong block(%d).\n", fs->fs_super_bh->b_blocknr);
+    
+    if (version == 0) 
+	misc_die ("FS format must be figured out here.\n");
+
+    if (reiserfs_sb_get_blocks (sb) > misc_device_count_blocks (filename, fs->fs_blocksize)) 
+	super_error(-1, "Invalid block count found in the super block.\n");
+
+    if (reiserfs_sb_get_blksize (sb) != fs->fs_blocksize) 
+        super_error(-1, "Invalid block size found in the super block (%lu).\n", 
+	    reiserfs_sb_get_blksize (sb));
+
+//Non needed from here
+    p_oid_maxsize = (fs->fs_blocksize - reiserfs_super_size (sb)) / sizeof(__u32) / 2 * 2;    
+    if (reiserfs_sb_get_mapmax (sb) != p_oid_maxsize) 
+	super_error(-1, "Invalid objectid map max size found in the super block (%lu).\n", 
+	    reiserfs_sb_get_mapmax (sb));
+
+    if (reiserfs_sb_get_mapcur (sb) == 1 || reiserfs_sb_get_mapcur (sb) > reiserfs_sb_get_mapmax (sb))
+        super_error(-1, "Invalid objectid map found in the super block (%lu).\n", 
+	    reiserfs_sb_get_mapcur (sb));
+
+    if (reiserfs_sb_get_root (sb) > block_count && reiserfs_sb_get_root (sb) != ~0) 
+	fsck_log("Invalid root block found in the super block (%lu).\n", 
+	    reiserfs_sb_get_root (sb));
+
+    if (reiserfs_sb_get_free (sb) > block_count) 
+	fsck_log ("Invalid free block count found in the super block (%lu).\n", 
+	    reiserfs_sb_get_free (sb));
+
+    if (reiserfs_sb_get_height (sb) && ((reiserfs_sb_get_height (sb) < LEAF_LEVEL + 1) ||
+	(reiserfs_sb_get_height (sb) > REISERFS_TREE_HEIGHT_MAX) && (reiserfs_sb_get_height (sb) != ~0))) 
+	super_error(-1, "Invalid tree height found in the super block (%lu).\n", 
+	    reiserfs_sb_get_height (sb));
+
+    if (reiserfs_sb_get_hash (sb) && reiserfs_hash_name (reiserfs_sb_get_hash (sb)) == 0) 
+	super_error(-1, "Invalid hash found in the super block (%lu).\n", 
+	    reiserfs_sb_get_hash (sb));
+
+    if (version == 1 || version == 3) {
+        if (!uuid_is_correct(sb->s_uuid)) 
+	    fsck_log ("Invalid uuid found, you should generate a new one.\n");
+
+	if (sb->s_flags & 0xfffffffe)
+	    fsck_log ("rebuild-sb: super block flags found (%u), zeroed\n", sb->s_flags);
+    }
+
+//Not needed till here.
+
+    p_bmap_nr = (block_count + (fs->fs_blocksize * 8 - 1)) / (fs->fs_blocksize * 8);
+    if (reiserfs_sb_get_bmaps (sb) != p_bmap_nr) 
+	super_error(-1, "Invalid bitmap number found in the super block (%lu).\n", 
+	    reiserfs_sb_get_bmaps (sb));
+
+    if (!fsck_skip_journal (fs) && standard_journal == 1) {
+        if (reiserfs_jp_get_dev (reiserfs_sb_jp(sb)) != 0)
+ 	    super_error(-1, "Invalid journal device found (%lu).\n", reiserfs_jp_get_dev (reiserfs_sb_jp(sb)));
+
+        if (reiserfs_jp_get_start (reiserfs_sb_jp(sb)) != reiserfs_journal_start_must (fs)) 
+            super_error(-1, "Invalid journal first block found (%lu).\n", reiserfs_jp_get_start (reiserfs_sb_jp(sb)));
+
+        if (reiserfs_jp_get_size (reiserfs_sb_jp(sb)) != reiserfs_journal_default(fs->fs_super_bh->b_blocknr, fs->fs_blocksize)) 
+	    super_error(-1, "Invalid journal size found (%lu).\n", reiserfs_jp_get_size (reiserfs_sb_jp(sb)) + 1);
+        
+        
+	
+	if (reiserfs_jp_get_max_batch (reiserfs_sb_jp(sb)) != reiserfs_journal_batch(reiserfs_jp_get_tlen (reiserfs_sb_jp(sb)))) {
+ 	    fsck_conditional_log (magic_was_found, "rebuild-sb: wrong journal max batch size occured (%lu), fixed (%d)\n",
+ 	        reiserfs_jp_get_max_batch (reiserfs_sb_jp(sb)), reiserfs_journal_batch(reiserfs_jp_get_tlen (reiserfs_sb_jp(sb))));
+ 	    reiserfs_jp_set_max_batch (reiserfs_sb_jp(sb), reiserfs_journal_batch(reiserfs_jp_get_tlen (reiserfs_sb_jp(sb))));
+        }
+        if (reiserfs_jp_get_commit_age (reiserfs_sb_jp(sb)) != reiserfs_journal_commit_age()) {
+ 	    fsck_conditional_log (magic_was_found, "rebuild-sb: wrong journal  max commit age occured (%lu), fixed (%d)\n",
+ 	        reiserfs_jp_get_commit_age (reiserfs_sb_jp(sb)), reiserfs_journal_commit_age());
+ 	    reiserfs_jp_set_commit_age (reiserfs_sb_jp(sb), reiserfs_journal_commit_age());
+        }
+        if (reiserfs_jp_get_trans_age (reiserfs_sb_jp(sb)) != reiserfs_journal_trans_age()) {
+ 	    fsck_log ("rebuild-sb: wrong journal  max commit age occured (%lu), fixed (0)\n",
+ 	        reiserfs_jp_get_trans_age (reiserfs_sb_jp(sb)), reiserfs_journal_trans_age());
+ 	    reiserfs_jp_set_trans_age (reiserfs_sb_jp(sb), reiserfs_journal_trans_age());
+        }
+
+        
+}
+*/
+
+void rebuild_sb (reiserfs_filsys_t * fs, char * filename, struct fsck_data * data)
+{
+    struct reiserfs_journal_header *j_head;
+    __u32 p_jp_journal_1st_block = 0;
+    int retval, exit_code = EXIT_OK;
+    reiserfs_sb_t * ondisk_sb = 0;
+    unsigned long block_count = 0;
+    char * journal_dev_name = 0;
+    int standard_journal = -1;
+    int magic_was_found = 0;
+    __u32 p_jp_dev_size = 0;
+    reiserfs_sb_t * sb = 0;
+    struct stat stat_buf;
+    __u16 p_oid_maxsize;
+    char answer[256];
+    __u32 p_bmap_nr;
+    int version = 0;
+    int sb_size;
+    char * tmp;
+
+#if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)
+    char uuid[37];
+    
+    uuid[36] = '\0';
+#endif
+
+    if (fs != NULL) {
+        sb = misc_getmem (sizeof (*sb));
+        if (!reiserfs_fs_rw (fs)) {
+            close (fs->fs_dev);
+            fs->fs_dev = open (fs->fs_file_name, O_RDWR 
+#ifdef O_LARGEFILE
+			       | O_LARGEFILE
+#endif
+			       );
+        }
+
+	if (!reiserfs_fs_blksize_check (fs->fs_blocksize)) {
+	    printf("\nCannot find a proper blocksize, enter block size [4096]: \n");
+	    fgets(answer, sizeof(answer), stdin);
+	    if (strcmp(answer, "\n")) {
+		retval = (int) strtol (answer, &tmp, 0);
+		if ((*tmp && strcmp(tmp, "\n")) || retval < 0)
+		    reiserfs_exit (EXIT_USER, "rebuild_sb: wrong block size specified\n");
+		if (!reiserfs_fs_blksize_check (retval))
+		    reiserfs_exit (EXIT_USER, "rebuild_sb: wrong block size specified, "
+			"only power of 2 from 512-8192 interval are supported.\n");
+	    } else
+		retval = 4096;
+	
+	    fs->fs_blocksize = retval;
+	}
+
+        if (!(block_count = misc_device_count_blocks (filename, fs->fs_blocksize)))
+		exit(EXIT_OPER);
+
+        /* save ondisk_sb somewhere and work in temp area */
+        ondisk_sb = fs->fs_ondisk_sb;
+        memcpy (sb, fs->fs_ondisk_sb, sizeof (*sb));
+        fs->fs_ondisk_sb = sb;
+
+        if (reiserfs_super_36_magic (sb)) {
+            /* 3_6 magic */
+            if (fsck_data (fs)->journal_dev_name)
+                /* journal dev must not be specified with standard journal */
+                reiserfs_exit (EXIT_USER, "ReiserFS with default journal "
+		    "is found, but there was specified a journal device.");
+
+            if (fs->fs_super_bh->b_blocknr ==
+		REISERFS_DISK_OFFSET_IN_BYTES / fs->fs_blocksize)
+                version = 1;
+	    else if (fs->fs_super_bh->b_blocknr ==
+		REISERFS_OLD_DISK_OFFSET_IN_BYTES / fs->fs_blocksize)
+                version = 3;
+	    
+            magic_was_found = 2;
+        } else if (reiserfs_super_35_magic (sb)) {
+            if (fsck_data (fs)->journal_dev_name)
+                /* journal dev must not be specified with standard journal */
+                reiserfs_exit (EXIT_USER, "ReiserFS with default journal "
+		    "is found, but there was specified a journal device.");
+
+            /* 3_5 magic */
+            if (fs->fs_super_bh->b_blocknr ==
+		REISERFS_DISK_OFFSET_IN_BYTES / fs->fs_blocksize)
+                version = 2;
+	    else if (fs->fs_super_bh->b_blocknr ==
+		REISERFS_OLD_DISK_OFFSET_IN_BYTES / fs->fs_blocksize)
+                version = 4;
+	    
+	    magic_was_found = 1;
+        } else if (reiserfs_super_jr_magic (sb)) {
+            if (reiserfs_sb_get_version (sb) == REISERFS_FORMAT_3_6) {
+                /*non-standard magic + sb_format == 3_6*/
+		if (fs->fs_super_bh->b_blocknr ==
+		    REISERFS_DISK_OFFSET_IN_BYTES / fs->fs_blocksize)
+                    version = 1;
+		else if (fs->fs_super_bh->b_blocknr == 
+		    REISERFS_OLD_DISK_OFFSET_IN_BYTES / fs->fs_blocksize)
+                    version = 3;
+		
+                magic_was_found = 3;
+            } else if (reiserfs_sb_get_version (sb) == REISERFS_FORMAT_3_5) {
+                /* non-standard magic + sb_format == 3_5 */
+                if (fs->fs_super_bh->b_blocknr ==
+		    REISERFS_DISK_OFFSET_IN_BYTES / fs->fs_blocksize)
+                    version = 2;
+		else if (fs->fs_super_bh->b_blocknr ==
+		    REISERFS_OLD_DISK_OFFSET_IN_BYTES / fs->fs_blocksize)
+                    version = 4;
+		
+                magic_was_found = 3;
+            } else {
+                /* non-standard magic + bad sb_format */
+                version = 0;
+                magic_was_found = 3;
+            }
+        } else
+            reiserfs_exit (EXIT_USER, "We opened device but there is no magic "
+		"and there is no correct superblock format found.");
+
+        if (magic_was_found == 1 || magic_was_found == 2)
+            standard_journal = 1;
+        else
+            standard_journal = 0;
+
+        if (version == 0)
+            version = what_fs_version ();
+
+        if (reiserfs_sb_get_blocks (sb) != block_count) {
+            do {
+                printf("\nDid you use resizer(y/n)[n]: ");
+                fgets(answer, sizeof(answer), stdin);
+            } while(strcmp ("y\n", answer) && 
+		    strcmp ("n\n", answer) && 
+		    strcmp ("\n", answer));
+
+            if (!strcmp ("y\n", answer)) {
+                printf("\nEnter partition size [%lu]: ", block_count);
+                fgets(answer, sizeof(answer), stdin);
+                if (strcmp ("\n", answer))
+                    block_count = atoi (answer);
+            } else {
+                fsck_conditional_log (magic_was_found, "rebuild-sb: wrong block count "
+		    "occured (%lu), fixed (%lu)\n", reiserfs_sb_get_blocks(sb), block_count);
+            }
+
+	    reiserfs_sb_set_blocks (sb, block_count);
+        }
+
+        if (reiserfs_sb_get_blksize (sb) != fs->fs_blocksize) {
+            fsck_log("rebuild-sb: wrong block size occured (%lu), fixed (%lu)\n", 
+		    reiserfs_sb_get_blksize (sb), fs->fs_blocksize);
+  	    reiserfs_sb_set_blksize (sb, fs->fs_blocksize);
+        }
+    }
+
+    /* if no reiserfs_found or bad data found in that SB, what was checked in previous 
+     * clause */
+    if (fs == NULL) {
+        int fd;
+
+        fd = open (filename, O_RDWR 
+#ifdef O_LARGEFILE
+		   | O_LARGEFILE
+#endif
+		   );
+
+        if (fd == -1) {
+            reiserfs_exit (EXIT_OPER, "rebuils_sb: cannot open device %s", 
+		filename);
+	}
+
+        version = what_fs_version ();
+
+        if (version == 3 || version == 4) {
+            retval = 4096;
+        } else {
+	    printf("\nEnter block size [4096]: \n");
+	    fgets(answer, sizeof(answer), stdin);
+	    if (strcmp(answer, "\n")) {
+		retval = (int) strtol (answer, &tmp, 0);
+		if ((*tmp && strcmp(tmp, "\n")) || retval < 0)
+		    reiserfs_exit (EXIT_USER, "rebuild_sb: wrong block size specified\n");
+		if (!reiserfs_fs_blksize_check (retval))
+		    reiserfs_exit (EXIT_USER, "rebuild_sb: wrong block size specified, "
+			"only divisible by 1024 are supported currently\n");
+	    } else
+		retval = 4096;
+	}
+
+        if (!(block_count = misc_device_count_blocks (filename, retval)))
+		exit(EXIT_OPER);
+
+        switch(version){
+        case 1:
+            fs = reiserfs_fs_create (filename, REISERFS_FORMAT_3_6, 
+				     block_count, retval, 1, 1);
+            break;
+        case 2:
+            fs = reiserfs_fs_create (filename, REISERFS_FORMAT_3_5, 
+				     block_count, retval, 1, 1);
+            break;
+        case 3:
+            fs = reiserfs_fs_create (filename, REISERFS_FORMAT_3_6, 
+				     block_count, retval, 1, 0);
+            break;
+        case 4:
+            fs = reiserfs_fs_create (filename, REISERFS_FORMAT_3_5, 
+				     block_count, retval, 1, 0);
+            break;
+        }
+
+	if (fs == NULL)
+	    return;
+	
+        sb = fs->fs_ondisk_sb;
+        fs->fs_vp = data;
+
+        if (!fsck_skip_journal (fs)) {
+            if (!fsck_data (fs)->journal_dev_name) {
+                do {
+                    printf("\nNo journal device was specified. (If journal is not "
+			"available, re-run with --no-journal-available option specified).\n"
+                        "Is journal default? (y/n)[y]: ");
+		    
+                    fgets(answer, sizeof(answer), stdin);
+                } while(strcmp ("y\n", answer) && 
+			strcmp ("n\n", answer) && 
+			strcmp ("\n", answer));
+		
+                if (!strcmp ("n\n", answer)) {
+                    printf("\nSpecify journal device with -j option.\n");
+                    exit(EXIT_USER);
+                }
+                standard_journal = 1;
+            } else {
+                standard_journal = 0;
+                memcpy (fs->fs_ondisk_sb->s_v1.s_magic, REISERFS_JR_SUPER_MAGIC_STRING,
+                    strlen (REISERFS_JR_SUPER_MAGIC_STRING));
+            }
+        }
+
+        do {
+            printf("\nDid you use resizer(y/n)[n]: ");
+            fgets(answer, sizeof(answer), stdin);
+        } while (strcmp ("y\n", answer) && 
+		 strcmp ("n\n", answer) && 
+		 strcmp ("\n", answer));
+	
+        if (!strcmp ("y\n", answer)) {
+            printf("\nEnter partition size [%lu]: ", block_count);
+            fgets(answer, sizeof(answer), stdin);
+            if (strcmp ("\n", answer))
+                block_count = atoi (answer);
+            reiserfs_sb_set_blocks (sb, block_count);
+        }
+	
+	reiserfs_sb_set_state (sb, FS_ERROR);
+    }
+
+
+    if (version == 1 || version == 3) {
+        if (reiserfs_super_format (sb) != REISERFS_FORMAT_3_6) {
+            fsck_log("rebuild-sb: wrong reiserfs version occured (%lu), fixed (%lu)\n", 
+		    reiserfs_super_format (sb), REISERFS_FORMAT_3_6);
+            reiserfs_sb_set_version (sb, REISERFS_FORMAT_3_6);
+        }
+    } else if (version == 2 || version == 4) {
+        if (reiserfs_super_format (sb) != REISERFS_FORMAT_3_5) {
+            fsck_log("rebuild-sb: wrong reiserfs version occured (%lu), fixed (%lu)\n", 
+		    reiserfs_super_format (sb), REISERFS_FORMAT_3_5);
+            reiserfs_sb_set_version (sb, REISERFS_FORMAT_3_5);
+        }
+    }
+
+    p_oid_maxsize = (fs->fs_blocksize - reiserfs_super_size (sb)) / 
+	sizeof(__u32) / 2 * 2;
+    
+    if (reiserfs_sb_get_mapmax (sb) != p_oid_maxsize) {
+	fsck_log("rebuild-sb: wrong objectid map max size occured (%lu), fixed (%lu)\n", 
+		reiserfs_sb_get_mapmax (sb), p_oid_maxsize);
+	reiserfs_sb_set_mapmax (sb, p_oid_maxsize);
+    }
+
+    p_bmap_nr = reiserfs_bmap_nr(block_count, fs->fs_blocksize);
+    p_bmap_nr = reiserfs_bmap_over(p_bmap_nr) ? 0 : p_bmap_nr;
+    
+    if (reiserfs_sb_get_bmaps (sb) != p_bmap_nr) {
+	fsck_log("rebuild-sb: wrong bitmap number occured (%lu), fixed (%lu)\n", 
+		reiserfs_sb_get_bmaps (sb), p_bmap_nr);
+	reiserfs_sb_set_bmaps (sb, (__u16)p_bmap_nr);
+    }
+
+    if (reiserfs_sb_get_root (sb) > block_count) {
+	fsck_log("rebuild-sb: wrong root block occured (%lu), zeroed\n", 
+		reiserfs_sb_get_root (sb));
+	reiserfs_sb_set_root (sb, 0);
+    }
+
+    if (reiserfs_sb_get_free (sb) > block_count) {
+	fsck_log ("rebuild-sb: wrong free block count occured (%lu), zeroed\n", 
+		reiserfs_sb_get_free (sb));
+        reiserfs_sb_set_free (sb, 0);
+    }
+
+    if (reiserfs_sb_get_umount (sb) != FS_CLEANLY_UMOUNTED && 
+	reiserfs_sb_get_umount (sb) != FS_NOT_CLEANLY_UMOUNTED) 
+    {
+	fsck_conditional_log (magic_was_found, "rebuild-sb: wrong umount state (%u), "
+	    "fixed to (FS_NOT_CLEANLY_UMOUNTED)\n", reiserfs_sb_get_umount (sb));
+        reiserfs_sb_set_umount (sb, FS_NOT_CLEANLY_UMOUNTED);
+    }
+
+    if (reiserfs_sb_get_mapcur (sb) == 1 || 
+	reiserfs_sb_get_mapcur (sb) > reiserfs_sb_get_mapmax (sb)) 
+    {
+        fsck_log("rebuild-sb: wrong objectid map occured (%lu), zeroed\n", 
+	    reiserfs_sb_get_mapcur (sb));
+	
+        reiserfs_sb_set_mapcur (sb, 0);
+    }
+
+    if ( reiserfs_sb_get_height (sb) &&
+        ((reiserfs_sb_get_height (sb) < LEAF_LEVEL + 1) ||
+	(reiserfs_sb_get_height (sb) > REISERFS_TREE_HEIGHT_MAX)) ) {
+	fsck_log("rebuild-sb: wrong tree height occured (%u), zeroed\n", 
+	    reiserfs_sb_get_height (sb));
+
+	reiserfs_sb_set_height (sb, 0);
+    }
+
+    if (reiserfs_sb_get_hash (sb) && 
+	reiserfs_hash_name (reiserfs_sb_get_hash (sb)) == 0) 
+    {
+	fsck_log("rebuild-sb: wrong hash occured (%lu), zeroed\n", 
+	    reiserfs_sb_get_hash (sb));
+	
+	reiserfs_sb_set_hash (sb, 0);
+    }
+
+    if (version == 1 || version == 3) {
+#if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)
+        if (uuid_is_null(sb->s_uuid)) {
+	    uuid_generate(sb->s_uuid);
+	    fsck_log ("rebuild-sb: no uuid found, a new uuid was "
+		      "generated (%U)\n", sb->s_uuid);
+        }
+#endif
+	if (sb->s_flags != 0 && sb->s_flags != 1) {
+	    fsck_log ("rebuild-sb: super block flags found (%u), zeroed\n",
+                  sb->s_flags);
+	    sb->s_flags = 0;
+	}
+    }
+
+
+    /*
+    if we have a standard journal
+        reserved = 0
+        dev - same
+        size = reiserfs_journal_default(fs->fs_super_bh->b_blocknr, fs)
+        offset = reiserfs_journal_default(fs)
+    if we have a non standard journal
+        if we found magic string
+            try to find a jhead and comare dev, size, offset there
+            if params are not equal move to "if we did not find a magic string" clause
+        if we did not find a magic string
+            ask user about his journal
+            try to find a jhead and comare dev, size, offset there
+            if params are not equal exit with error
+    */
+
+
+    p_jp_journal_1st_block = reiserfs_journal_start_must (fs);
+
+    if (standard_journal == 1) {
+	if (reiserfs_jp_get_dev (reiserfs_sb_jp(sb)) != 0) {
+ 	    fsck_conditional_log (magic_was_found, "rebuild-sb: wrong journal device "
+		"occured (%lu), fixed (0)\n", reiserfs_jp_get_dev (reiserfs_sb_jp(sb)));
+ 	    reiserfs_jp_set_dev (reiserfs_sb_jp(sb), 0);
+        }
+        if (reiserfs_sb_get_reserved (sb) != 0) {
+ 	    fsck_log ("rebuild-sb: wrong size reserved for default journal occured "
+		"(%lu), fixed (0)\n", reiserfs_sb_get_reserved (sb));
+            reiserfs_sb_set_reserved (sb, 0);
+        }
+        if (reiserfs_jp_get_start (reiserfs_sb_jp(sb)) != p_jp_journal_1st_block) {
+            fsck_conditional_log (magic_was_found, "rebuild-sb: wrong journal first "
+		"block occured (%lu), fixed (%lu)\n", reiserfs_jp_get_start (reiserfs_sb_jp(sb)),
+		p_jp_journal_1st_block);
+	    
+            reiserfs_jp_set_start (reiserfs_sb_jp(sb) , p_jp_journal_1st_block);
+        }
+        if (reiserfs_jp_get_size (reiserfs_sb_jp(sb)) != 
+	    reiserfs_journal_default(fs->fs_super_bh->b_blocknr, fs->fs_blocksize)) 
+	{
+ 	    fsck_conditional_log (magic_was_found, "rebuild-sb: wrong journal size "
+		"occured (%lu), fixed (%lu)\n", reiserfs_jp_get_size (reiserfs_sb_jp(sb)) + 1,
+ 	        reiserfs_journal_default (fs->fs_super_bh->b_blocknr, 
+		fs->fs_blocksize) + 1);
+	    
+            reiserfs_jp_set_size (reiserfs_sb_jp(sb), 
+		reiserfs_journal_default (fs->fs_super_bh->b_blocknr, fs->fs_blocksize));
+        }
+
+	if ((retval = reiserfs_journal_open(fs, filename, O_RDWR 
+#ifdef O_LARGEFILE
+					    | O_LARGEFILE
+#endif
+					    ))) 
+	{
+	    fsck_log("\nrebuild-sb: Failed to open the journal device (%s).\n", 
+		filename);
+
+	    exit(retval < 0 ? EXIT_OPER : EXIT_USER);
+	}	
+    } else if (!fsck_skip_journal(fs)) {
+	/* Check that specified non-standard journal device exists. */
+	    
+	journal_dev_name = fsck_data (fs)->journal_dev_name;	    
+		
+	retval = 0;
+	if (magic_was_found) {
+	    /* Super block was found. Try to open the journal on the base of its 
+	     * journal parameters. */
+	    
+	    retval = reiserfs_journal_open(fs, journal_dev_name, O_RDWR 
+#ifdef O_LARGEFILE
+					   | O_LARGEFILE
+#endif
+					   );
+	    
+	    if (retval == 0) {
+		journal_dev_name = fs->fs_j_file_name;
+		
+		j_head = (struct reiserfs_journal_header *)(fs->fs_jh_bh->b_data);
+		retval = memcmp(&j_head->jh_journal, reiserfs_sb_jp(sb), 
+		    sizeof(reiserfs_journal_param_t));
+	    
+		if (retval) {
+		    /* journal parameters from the SB and from the J_Header does not 
+		     * match. Close the jouranl, ask the user about correct journal 
+		     * parameters. */
+		    reiserfs_journal_close(fs);
+		}
+	    }
+
+	    if (!reiserfs_journal_opened(fs)) {
+		fsck_log ("Journal cannot be opened, assuming the "
+			  "journal device %s is correct\n", journal_dev_name);
+	    }
+	}
+	
+	if (!reiserfs_journal_opened(fs)) {
+	    __u64 default_value;
+
+	    /* journal was not found or SB and J_Header parameters does not match. */
+	    if (magic_was_found == 0)
+                default_value = (!strcmp(fs->fs_file_name, journal_dev_name)) ? 
+		    p_jp_journal_1st_block : 0;
+            else
+                default_value = reiserfs_jp_get_start (reiserfs_sb_jp(sb));
+
+            printf("\nEnter journal offset on %s in blocks [%Lu]: \n",
+            		journal_dev_name, (unsigned long long)default_value);
+
+            fgets(answer, sizeof(answer), stdin);
+            if (strcmp(answer, "\n")) {
+                retval = (int) strtol (answer, &tmp, 0);
+                if ((*tmp && strcmp(tmp, "\n")) || retval < 0)
+                    reiserfs_exit(EXIT_USER, "rebuild_sb: wrong offset specified\n");
+
+                reiserfs_jp_set_start (reiserfs_sb_jp(sb), retval);
+            } else
+                reiserfs_jp_set_start (reiserfs_sb_jp(sb), default_value);
+
+            if (!(p_jp_dev_size = misc_device_count_blocks (journal_dev_name, fs->fs_blocksize)))
+		    exit(EXIT_OPER);
+
+            /* some checks for journal offset */
+            if (strcmp(fs->fs_file_name, journal_dev_name) != 0) {
+                if (p_jp_dev_size < reiserfs_jp_get_start (reiserfs_sb_jp(sb)) + 1)
+        	    reiserfs_exit(EXIT_USER, "rebuild_sb: offset is much than device size\n");
+            }
+
+            /* default size if magic was not found is device size - journal_1st_block;
+               default size if magic was found is found value + 1 block for journal 
+	       header */
+            if (magic_was_found == 0)
+                default_value = (!strcmp(fs->fs_file_name, journal_dev_name)) ?
+                    reiserfs_journal_default (fs->fs_super_bh->b_blocknr,
+					  fs->fs_blocksize) + 1 :
+                    p_jp_dev_size - reiserfs_jp_get_start (reiserfs_sb_jp(sb));
+            else
+                default_value = reiserfs_jp_get_size (reiserfs_sb_jp(sb)) + 1;
+		
+
+            printf("\nEnter journal size (including 1 block for journal header) on "
+		"%s in blocks [%Lu]: \n", journal_dev_name, 
+		(unsigned long long)default_value);
+
+            fgets(answer, sizeof(answer), stdin);
+            if (strcmp(answer, "\n")) {
+                retval = (int) strtol (answer, &tmp, 0);
+                if ((*tmp && strcmp(tmp, "\n")) || retval < 0)
+        	    reiserfs_exit(EXIT_USER, "rebuild_sb: wrong offset specified\n");
+
+                reiserfs_jp_set_size (reiserfs_sb_jp(sb), retval - 1);
+            } else {
+                reiserfs_jp_set_size (reiserfs_sb_jp(sb), default_value - 1);
+            }
+
+            /* some checks for journal size */
+            if (reiserfs_jp_get_size (reiserfs_sb_jp(sb)) +
+                reiserfs_jp_get_start (reiserfs_sb_jp(sb)) + 1 > p_jp_dev_size)
+        	    reiserfs_exit(EXIT_USER, "rebuild_sb: journal offset + journal size is "
+			"greater than device size\n");
+            
+	    /* some checks for journal size */
+            if (reiserfs_jp_get_size (reiserfs_sb_jp(sb)) < JOURNAL_MIN_SIZE)
+        	    reiserfs_exit(EXIT_USER, "rebuild_sb: journal size cannot be less than "
+			"%lu blocks.\n", JOURNAL_MIN_SIZE + 1);
+
+	    if ((retval = reiserfs_journal_open(fs, journal_dev_name, O_RDWR 
+#ifdef O_LARGEFILE
+						| O_LARGEFILE
+#endif
+						)))
+	    {
+		fsck_log("\nrebuild-sb: Failed to open a journal device (%s).", 
+		    journal_dev_name);
+		
+		exit(retval < 0 ? EXIT_OPER : EXIT_USER);
+	    }
+	
+	    /* SB was found, but journal params were broken and have been recovered. 
+	     * Futher work goes as SB would not be found. */
+	    magic_was_found = 0;
+	}
+	
+	retval = stat(journal_dev_name, &stat_buf);
+	    
+	if (retval == -1)
+	    reiserfs_exit (EXIT_USER, "rebuild_sb: error while detecting the "
+		"specified journal device (%s): %s\n", journal_dev_name,
+		strerror(errno));
+
+	if (strcmp (fs->fs_file_name, journal_dev_name))
+	    reiserfs_jp_set_dev (reiserfs_sb_jp(sb), stat_buf.st_rdev);
+	else
+	    reiserfs_jp_set_dev (reiserfs_sb_jp(sb), 0);
+
+    } else {
+	fsck_log ("\nJournal was specified as not available. reiserfstune is "
+	    "needed.\n\n");
+	
+	reiserfs_jp_set_magic (reiserfs_sb_jp(sb), NEED_TUNE);
+    }
+
+    if (reiserfs_journal_opened(fs)) {
+	/* Journal was openned. Check/fix journal parameters and copy it the journal 
+	 * header. */
+	
+        if (reiserfs_jp_get_tlen (reiserfs_sb_jp(sb)) !=
+	    reiserfs_journal_tlen(reiserfs_jp_get_tlen (reiserfs_sb_jp(sb)),
+				  reiserfs_jp_get_size (reiserfs_sb_jp(sb)), 
+				  fs->fs_blocksize, 0))
+	{
+ 	    fsck_conditional_log (magic_was_found, "rebuild-sb: wrong journal max "
+		"transaction length occured (%lu), fixed (%d)\n",
+		reiserfs_jp_get_tlen (reiserfs_sb_jp(sb)),
+		reiserfs_journal_tlen(reiserfs_jp_get_tlen (reiserfs_sb_jp(sb)),
+				      reiserfs_jp_get_size (reiserfs_sb_jp(sb)),
+				      fs->fs_blocksize, 0));
+	    
+ 	    reiserfs_jp_set_tlen (reiserfs_sb_jp(sb),
+		reiserfs_journal_tlen(reiserfs_jp_get_tlen (reiserfs_sb_jp(sb)),
+				      reiserfs_jp_get_size (reiserfs_sb_jp(sb)),
+				      fs->fs_blocksize, 0));
+        }
+	
+        if (reiserfs_jp_get_max_batch (reiserfs_sb_jp(sb)) != 
+	    reiserfs_journal_batch(reiserfs_jp_get_tlen (reiserfs_sb_jp(sb)))) 
+	{
+ 	    fsck_conditional_log (magic_was_found, "rebuild-sb: wrong journal max "
+		"batch size occured (%lu), fixed (%d)\n", 
+		reiserfs_jp_get_max_batch (reiserfs_sb_jp(sb)), 
+		reiserfs_journal_batch(reiserfs_jp_get_tlen (reiserfs_sb_jp(sb))));
+	    
+ 	    reiserfs_jp_set_max_batch (reiserfs_sb_jp(sb), 
+		reiserfs_journal_batch(reiserfs_jp_get_tlen (reiserfs_sb_jp(sb))));
+        }
+
+        if (reiserfs_jp_get_commit_age (reiserfs_sb_jp(sb)) != 
+	    reiserfs_journal_commit_age()) 
+	{
+ 	    fsck_conditional_log (magic_was_found, "rebuild-sb: wrong journal "
+		"max commit age occured (%lu), fixed (%d)\n", 
+ 	        reiserfs_jp_get_commit_age (reiserfs_sb_jp(sb)), reiserfs_journal_commit_age());
+	    
+ 	    reiserfs_jp_set_commit_age (reiserfs_sb_jp(sb), reiserfs_journal_commit_age());
+        }
+	
+        if (reiserfs_jp_get_trans_age (reiserfs_sb_jp(sb)) != reiserfs_journal_trans_age()) {
+ 	    fsck_log ("rebuild-sb: wrong journal transaction age occured (%u), "
+		"fixed (%u)\n", reiserfs_jp_get_trans_age (reiserfs_sb_jp(sb)), 
+		reiserfs_journal_trans_age());
+	    
+ 	    reiserfs_jp_set_trans_age (reiserfs_sb_jp(sb), reiserfs_journal_trans_age());
+        }
+		
+	j_head = (struct reiserfs_journal_header *)(fs->fs_jh_bh->b_data);
+
+	if (standard_journal == 0) {
+	    if (reiserfs_jp_get_magic (reiserfs_sb_jp(sb)) == 0 || 
+		reiserfs_jp_get_magic (reiserfs_sb_jp(sb)) == NEED_TUNE) 
+	    {
+		int magic;
+		
+		magic = random();
+		fsck_log ("rebuild-sb: genarate the new journal magic (%d)\n", magic);
+		reiserfs_jp_set_magic (reiserfs_sb_jp(sb), magic);
+		reiserfs_jp_set_magic (&j_head->jh_journal, magic);
+
+	    }
+	}
+	
+	retval = memcmp(&j_head->jh_journal, reiserfs_sb_jp(sb), sizeof(reiserfs_journal_param_t));
+	
+	if (retval) {
+	    if (standard_journal == 1) {
+		fsck_log("\nrebuild-sb: You either have a corrupted journal or have just "
+		    "changed\nthe start of the partition with some partition table editor. "
+		    "If you are\nsure that the start of the partition is ok, rebuild the "
+		    "journal header.\n");
+	    } else if (!magic_was_found) {
+		fsck_log("\nrebuild-sb: journal header is not found. You either have "
+		    "a corrupted,\nbad configured(device/offset/size), not available "
+		    "journal or have just changed\nthe start of the journal partition "
+		    "with some partition table editor. In the \ncase of corrupted "
+		    "journal you need to use --no-journal-available. If you are\n"
+		    "sure that the start of the partition is ok and journal is "
+		    "available, rebuild\nthe journal header.\n");
+	    }
+	    
+	    if (standard_journal || !magic_was_found) {
+		if (!util_user_confirmed (stdout, "Do you want to rebuild the journal header? "
+		    "(y/n)[n]: ", "y\n"))
+		{
+		    exit(EXIT_USER);
+		} else 
+		    exit_code = EXIT_FIXED;
+	    }
+	    
+	    memcpy(&j_head->jh_journal, reiserfs_sb_jp(sb), sizeof(reiserfs_journal_param_t));
+	    reiserfs_buffer_mkdirty(fs->fs_jh_bh);
+	    reiserfs_buffer_write (fs->fs_jh_bh);
+	}
+    }
+    
+    /*  whether journal header contains params with the same dev, offset, size will be 
+	checked in open_journal */
+
+    if (version == 1 || version == 3)
+        sb_size = REISERFS_SB_SIZE;
+    else
+        sb_size = REISERFS_SB_SIZE_V1;
+
+    if (ondisk_sb == NULL || 
+	memcmp(ondisk_sb, sb, sb_size - ((sb_size == REISERFS_SB_SIZE) ? 
+	    sizeof(fs->fs_ondisk_sb->s_unused) : 0))) 
+    {
+        /* smth was changed in SB or a new one has been built */
+	reiserfs_sb_set_state (sb, reiserfs_sb_get_state (sb) | FS_ERROR);
+	
+	if (ondisk_sb) {
+	    /* if super_block was found, we keep sb in ondisk_sb */
+	    fs->fs_ondisk_sb = ondisk_sb;
+	    memcpy (ondisk_sb, sb, sb_size);
+	    misc_freemem(sb);
+	}
+
+	fflush(stdout); 
+	reiserfs_node_print (stderr, fs, fs->fs_super_bh);
+	
+	if (util_user_confirmed (stderr, "Is this ok ? (y/n)[n]: ", "y\n")) {
+	    reiserfs_buffer_mkuptodate (fs->fs_super_bh, 1);
+	    reiserfs_buffer_mkdirty (fs->fs_super_bh);
+	    reiserfs_buffer_write (fs->fs_super_bh);
+	    fsck_progress ("The fs may still be unconsistent. Run reiserfsck --check.\n\n");
+	    exit_code = EXIT_FIXED;
+	} else {
+	    reiserfs_buffer_mkclean (fs->fs_super_bh);
+	    fsck_progress ("Super block was not written\n");
+	}
+    } else {
+	reiserfs_node_print (stderr, fs, fs->fs_super_bh);
+	
+	reiserfs_buffer_mkclean (fs->fs_super_bh);
+	fsck_progress ("\nSuper block seems to be correct\n\n");
+    }
+
+    exit(exit_code);
+}
+
+/*	if (version == 0) {
+	    reiserfs_buffer_close (fs->fs_super_bh);
+            misc_freemem (fs);
+            close (fs->fs_dev);
+            fs = NULL;
+	}
+*/
diff --git a/utils/fsck/ubitmap.c b/utils/fsck/ubitmap.c
new file mode 100644
index 0000000..a5a660a
--- /dev/null
+++ b/utils/fsck/ubitmap.c
@@ -0,0 +1,177 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "fsck.h"
+#include "misc/malloc.h"
+
+#include <assert.h>
+
+/* g_disk_bitmap initially contains copy of disk bitmaps
+   (cautious version of it);
+
+   g_new_bitmap initially has marked only super block, bitmap blocks
+   and bits after the end of bitmap
+
+   in pass 1 we go through g_disk_bitmap. 
+
+   If block does not look like formatted node, we skip it.
+
+   If block contains internal node, put 0 in g_disk_bitmap if block is
+   not used in new tree yet.
+
+   If block contains leaf and is used already (by an extent item
+   handled already to this time) save all items. They will be inserted
+   into tree after pass 1.
+
+   If block looking like leaf is not used in the new tree, try to
+   insert in into tree. If it is not possible, mark block in
+   g_uninsertable_leaf_bitmap. Blocks marked in this bitmap will be inserted into tree in pass 2. They can not be
+
+  This means, that in pass 1 when we have
+   found block containing the internal nodes we mark it in
+   g_disk_bitmap as free (reiserfs_free_internal_block). When block
+   gets into new tree it is marked in g_new_bitmap (mark_block_used)
+   When collecting resources for reiserfs_tb_balance, we mark new blocks with
+   mark_block_used. After reiserfs_tb_balance we unmark unused new blocks in
+   g_new_bitmap (bitmap.c:/reiserfs_free_block)
+
+   Allocating of new blocks: look for 0 bit in g_disk_bitmap
+   (find_zero_bit_in_bitmap), make sure, that g_new_bitmap contains 0
+   at the corresponding bit (is_block_used).
+      
+ */
+
+
+
+/* is blocks used (marked by 1 in new bitmap) in the tree which is being built
+   (as leaf, internal, bitmap, or unformatted node) */
+int is_block_used (unsigned long block) {
+    return reiserfs_bitmap_test_bit (fsck_new_bitmap (fs), block);
+}
+
+void mark_block_used (unsigned long block, int check_hardware) {
+    if (!block)
+	return;
+    if (is_block_used (block)) {
+	if (check_hardware)
+	    fsck_info_checkmem();
+	misc_die ("mark_block_used: (%lu) used already", block);
+    }
+
+    reiserfs_bitmap_set_bit (fsck_new_bitmap (fs), block);
+}
+
+
+void mark_block_free (unsigned long block) {
+    if (!is_block_used (block))
+	misc_die ("mark_block_free: (%lu) is free already", block);
+
+    reiserfs_bitmap_clear_bit (fsck_new_bitmap (fs), block);
+}
+
+
+int fsck_bitmap_isuninsert (unsigned long block) {
+    return !reiserfs_bitmap_test_bit (fsck_uninsertables (fs), block);
+}
+
+void fsck_bitmap_cluninsert (unsigned long block) {
+    reiserfs_bitmap_set_bit (fsck_uninsertables (fs), block);
+    pass_1_stat (fs)->uninsertable_leaves --;
+}
+
+/* uninsertable block is marked by bit clearing */
+void fsck_bitmap_mkuninsert (unsigned long block) {
+    if (fsck_bitmap_isuninsert (block))
+	misc_die ("%s: (%lu) is uninsertable already", 
+		  __FUNCTION__, block);
+
+    reiserfs_bitmap_clear_bit (fsck_uninsertables (fs), block);
+    
+    /* we do not need thsi actually */
+    pass_1_stat (fs)->uninsertable_leaves ++;
+}
+
+/* FIXME: should be able to work around no disk space */
+int reiserfsck_new_blocknrs (reiserfs_filsys_t * fs,
+			     unsigned long * free_blocknrs,
+			     unsigned long start, 
+			     int amount_needed)
+{
+    int i;
+
+    if (!are_there_allocable_blocks (amount_needed))
+	misc_die ("out of disk space");
+    for (i = 0; i < amount_needed; i ++) {
+	free_blocknrs[i] = alloc_block ();
+	if (!free_blocknrs[i])
+	    misc_die ("reiserfsck_new_blocknrs: 0 is allocated");
+	mark_block_used (free_blocknrs[i], 0);
+    }
+    return CARRY_ON;
+}
+
+
+// FIXME: do you check readability of a block? If f_read fails - you
+// free block in bitmap or if you mark bad blocks used to avoid their
+// allocation in future you should have bad block counter in a super
+// block. Another minor issue: users of _get_new_buffer expect buffer
+// to be filled with 0s
+reiserfs_bh_t * reiserfsck_get_new_buffer (unsigned long start) {
+    unsigned long blocknr = 0;
+    reiserfs_bh_t * bh = NULL;
+
+    assert(fs->block_allocator != NULL);
+    fs->block_allocator(fs, &blocknr, start, 1);
+    
+    bh = reiserfs_buffer_open (fs->fs_dev, blocknr, fs->fs_blocksize);
+    return bh;
+}
+
+
+/* free block in new bitmap */
+int reiserfsck_free_block (reiserfs_filsys_t * fs, unsigned long block) {
+    mark_block_free (block);
+
+    /* put it back to pool of blocks for allocation */
+    make_allocable (block);
+    return 0;
+}
+
+/* these are used to allocate blocks for tree building */
+int are_there_allocable_blocks (unsigned int amout_needed) {
+    if (reiserfs_bitmap_zeros (fsck_allocable_bitmap (fs)) < amout_needed) {
+	unsigned int zeros = 0, i;
+	
+	fsck_progress ("Not enough allocable blocks, checking bitmap...");
+	for (i = 0; i < fsck_allocable_bitmap (fs)->bm_bit_size; i ++) {
+	    if (!reiserfs_bitmap_test_bit (fsck_allocable_bitmap (fs), i))
+		zeros ++;
+	}
+	
+	fsck_progress ("there are %u allocable blocks, btw\n", zeros);
+	return 0;
+    }
+    
+    return 1;
+}
+
+void make_allocable (unsigned long block) {
+    reiserfs_bitmap_clear_bit (fsck_allocable_bitmap (fs), block);
+}
+
+unsigned long alloc_block (void) {
+    unsigned long block = 0; /* FIXME: start point could be used */
+
+    if (reiserfs_bitmap_find_zero_bit (fsck_allocable_bitmap (fs), &block)) {
+	misc_die ("alloc_block: Allocable blocks counter is wrong");
+	return 0;
+    }
+    reiserfs_bitmap_set_bit (fsck_allocable_bitmap (fs), block);
+    return block;
+}
diff --git a/utils/fsck/ufile.c b/utils/fsck/ufile.c
new file mode 100644
index 0000000..9743777
--- /dev/null
+++ b/utils/fsck/ufile.c
@@ -0,0 +1,464 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "fsck.h"
+#include "misc/unaligned.h"
+#include "misc/malloc.h"
+
+#include <sys/stat.h>
+
+static void cut_last_unfm_pointer (reiserfs_path_t * path, 
+				   reiserfs_ih_t * ih)
+{
+    reiserfs_ih_set_free(ih, 0);
+    if (reiserfs_ext_count (ih) == 1)
+	reiserfs_tree_delete (fs, path, 0);
+    else
+	reiserfs_tree_delete_unit (fs, path, -((int)REISERFS_EXT_SIZE));
+}
+
+/*
+    if this is not a symlink - make it of_this_size;
+    otherwise find a size and return it in symlink_size;
+*/
+static unsigned long extent2direct (reiserfs_path_t * path, 
+				    __u64 len, int symlink)
+{
+    reiserfs_bh_t * bh = REISERFS_PATH_LEAF (path);
+    reiserfs_ih_t * ih = REISERFS_PATH_IH (path);
+    __u32 unfm_ptr;
+    reiserfs_bh_t * unfm_bh = 0;
+    reiserfs_ih_t ins_ih;
+    char * buf;
+    char bad_drct[fs->fs_blocksize];
+
+    /* direct item to insert */
+    memset (&ins_ih, 0, sizeof (ins_ih));
+    if (symlink) {
+	reiserfs_ih_set_format (&ins_ih, KEY_FORMAT_1);
+    } else {
+	reiserfs_ih_set_format (&ins_ih, reiserfs_ih_get_format (ih));
+    }
+    reiserfs_key_set_did (&ins_ih.ih_key, reiserfs_key_get_did (&ih->ih_key));
+    reiserfs_key_set_oid (&ins_ih.ih_key, reiserfs_key_get_oid (&ih->ih_key));
+    reiserfs_key_set_sec (reiserfs_ih_get_format (&ins_ih), &ins_ih.ih_key,
+			  reiserfs_key_get_off (&ih->ih_key) + 
+			  (reiserfs_ext_count (ih) - 1) * bh->b_size, 
+			  TYPE_DIRECT);
+
+    // we do not know what length this item should be
+    unfm_ptr = d32_get ((__u32 *)REISERFS_PATH_ITEM (path), 
+			reiserfs_ext_count (ih) - 1);
+    
+    if (unfm_ptr && (unfm_bh = reiserfs_buffer_read(bh->b_dev, unfm_ptr, 
+						    bh->b_size)))
+    {
+	/* we can read the block */
+	buf = unfm_bh->b_data;
+    } else {
+        /* we cannot read the block */
+ 	if (unfm_ptr) {
+	    fsck_log ("%s: Reading of the block (%lu), pointed to by the "
+		      "file %K, failed\n", __FUNCTION__, unfm_ptr, &ih->ih_key);
+	}
+	
+	memset (bad_drct, 0, fs->fs_blocksize);
+	buf = bad_drct;
+    }
+    
+    reiserfs_ih_set_len (&ins_ih, (reiserfs_ih_get_format (ih) == KEY_FORMAT_2) 
+			 ? MISC_ROUND_UP(len) : len);
+    
+    reiserfs_ih_set_free (&ins_ih, MAX_US_INT);
+    reiserfs_ih_cltail(ih);
+    reiserfs_buffer_mkdirty(bh);
+    
+    // last last unformatted node pointer
+    path->pos_in_item = reiserfs_ext_count (ih) - 1;
+    cut_last_unfm_pointer (path, ih);
+
+    /* insert direct item */
+    if (reiserfs_tree_search_item (fs, &(ins_ih.ih_key), path) == ITEM_FOUND) {
+	reiserfs_panic ("%s: The direct item %k should not exist yet.", 
+			__FUNCTION__, &(ins_ih.ih_key));
+    }
+    
+    reiserfs_tree_insert (fs, path, &ins_ih, (const char *)(buf));
+
+    reiserfs_buffer_close (unfm_bh);
+
+    /* put to stat data offset of first byte in direct item */
+    return reiserfs_key_get_off (&ins_ih.ih_key); //offset;
+}
+
+/* returns 1 when file looks correct, -1 if directory items appeared
+   there, 0 - only holes in the file found */
+/* when it returns, key->k_offset is offset of the last item of file */
+/* sd_size is zero if we do not need to convert any extent to direct */
+int are_file_items_correct (reiserfs_ih_t * sd_ih, 
+			    void * sd, 
+			    __u64 * size, 
+			    __u32 * blocks,
+			    int mark_passed_items, 
+			    int * symlink)
+{
+    const reiserfs_key_t *next_key;
+    reiserfs_key_t *key;
+    reiserfs_path_t path;
+    reiserfs_bh_t * bh;
+    reiserfs_ih_t * ih;
+
+    int next_is_another_object = 0;
+    __u64 last_unfm_offset = 0;
+    int retval, was_tail = 0;
+    int will_convert = 0;
+    int should_convert;
+    int had_direct = 0;
+    long long int gap;
+    __u32 sd_fdb = 0;
+    int key_version;
+    unsigned int i;
+    __u64 sd_size;
+
+    key_version = reiserfs_ih_get_format (sd_ih);
+    should_convert = (fsck_mode (fs) != FSCK_REBUILD) || mark_passed_items;
+    key = &sd_ih->ih_key;
+    reiserfs_stat_get_size (sd_ih, sd, &sd_size);
+
+    if (key_version == KEY_FORMAT_1)
+    	reiserfs_stat_get_fdb (sd_ih, sd, &sd_fdb);
+
+    reiserfs_key_set_off (key_version, key, 1);
+    reiserfs_key_set_type (key_version, key, TYPE_DIRECT);
+
+    /* correct size and st_blocks */
+    *size = 0;
+    *blocks = 0;
+
+    path.path_length = REISERFS_PATH_OFFILL;
+
+    do {
+	retval = reiserfs_tree_search_position (fs, key, &path);
+	if (retval == POSITION_FOUND && path.pos_in_item != 0)
+	    reiserfs_panic ("%s: We look for %k, found %k. Must be found "
+		    "first item byte (position 0).", __FUNCTION__,
+		    key, &(REISERFS_PATH_IH (&path)->ih_key));
+
+	switch (retval) {
+	case POSITION_FOUND:/**/
+
+	    ih = REISERFS_PATH_IH (&path);
+	    bh = REISERFS_PATH_LEAF (&path);
+
+	    if (reiserfs_ih_wastail (ih)) {
+	    	was_tail = 1;
+	    }
+	
+	    reiserfs_key_set_type (key_version, key, 
+				   reiserfs_key_get_type (&ih->ih_key));
+	
+	    if (mark_passed_items == 1) {
+		fsck_item_mkreach (ih, bh);
+	    }
+	    
+	    // does not change path
+	    next_key = reiserfs_tree_next_key(&path, fs);
+
+	    if (next_key == 0 || reiserfs_key_comp2 (key, next_key) || 
+		(!reiserfs_key_ext (next_key) && 
+		 !reiserfs_key_direct(next_key)))
+	    {
+		next_is_another_object = 1;
+		will_convert = (reiserfs_ih_ext (ih) && sd_size && 
+				(reiserfs_ext_count (ih) > 0));
+		
+		if (will_convert) {
+		    last_unfm_offset = reiserfs_key_get_off (key) + 
+			    fs->fs_blocksize * (reiserfs_ext_count (ih) - 1);
+		    
+		    /* if symlink or
+		       [ 1. sd_size points somewhere into last unfm block
+		         2. one item of the file was direct before for 3_6 ||
+			    FDB points to the tail correctly for 3_5
+		         3. we can have a tail in the file of a such size ] */
+		    will_convert = will_convert && 
+			    (sd_size >= last_unfm_offset) && 
+			    (sd_size < last_unfm_offset + fs->fs_blocksize) &&
+			    !reiserfs_policy_ext (sd_size, sd_size - 
+						  last_unfm_offset + 1, 
+						  fs->fs_blocksize);
+		    
+		    will_convert = will_convert &&
+			    (*symlink || 
+			     ((key_version == KEY_FORMAT_1) &&
+			      (sd_fdb == last_unfm_offset)) ||
+			     ((key_version == KEY_FORMAT_2) && was_tail));
+		}
+	    }
+
+	    if (should_convert) {
+		*symlink = *symlink && 
+			(will_convert || reiserfs_key_direct(&ih->ih_key));
+	    
+		if (!(*symlink) && key_version != reiserfs_ih_get_format (ih)) {
+		    if (fsck_mode(fs) == FSCK_CHECK) {
+			fsck_log("%s: vpf-10250: block %lu, item (%d): The "
+				 "item format (%H) is not equal to SD format "
+				 "(%d)\n", __FUNCTION__, bh->b_blocknr, 
+				 REISERFS_PATH_LEAF_POS(&path),ih, key_version);
+			
+			one_more_corruption (fs, FIXABLE);
+		    } else {
+			fsck_log("%s: vpf-10280: block %lu, item (%d): The "
+				 "item format (%H) is not equal to SD format "
+				 "(%d) - fixed.\n", __FUNCTION__, bh->b_blocknr,
+				 REISERFS_PATH_LEAF_POS(&path),ih, key_version);
+
+			reiserfs_key_set_sec (key_version, &ih->ih_key, 
+					      reiserfs_key_get_off (&ih->ih_key), 
+					      reiserfs_key_get_type (&ih->ih_key));
+			
+			reiserfs_ih_set_format(ih, key_version);
+			reiserfs_buffer_mkdirty(bh);
+		    }
+		}
+
+		if (*symlink && reiserfs_key_direct(&ih->ih_key)) {
+		    /* symlink. Check that it is of KEY_FORMAT_1 */
+		    if (fsck_mode(fs) == FSCK_CHECK) {
+			if ((reiserfs_ih_get_format(ih) != KEY_FORMAT_1) || 
+			    (reiserfs_key_format(&ih->ih_key) != KEY_FORMAT_1)) 
+			{
+			    fsck_log("%s: vpf-10732: block %lu, item (%d): "
+				     "The symlink format (%H) is not equal "
+				     "to 3.5 format (%d)\n", 
+				     __FUNCTION__, bh->b_blocknr, 
+				     REISERFS_PATH_LEAF_POS(&path),
+				     ih, KEY_FORMAT_1);
+			    
+			    one_more_corruption (fs, FIXABLE);
+			}
+		    } else {
+			if ((reiserfs_ih_get_format(ih) != KEY_FORMAT_1) || 
+			    (reiserfs_key_format(&ih->ih_key) != KEY_FORMAT_1)) 
+			{
+			    fsck_log("%s: vpf-10732: block %lu, item (%d): "
+				     "The symlink format (%H) is not equal "
+				     "to 3.5 format (%d)\n", 
+				     __FUNCTION__, bh->b_blocknr,
+				     REISERFS_PATH_LEAF_POS(&path),
+				     ih, KEY_FORMAT_1);
+			    
+			    reiserfs_key_set_sec(KEY_FORMAT_1, &ih->ih_key, 
+						 reiserfs_key_get_off(&ih->ih_key), 
+						 reiserfs_key_get_type(&ih->ih_key));
+			    
+			    reiserfs_ih_set_format(ih, KEY_FORMAT_1);
+			    reiserfs_buffer_mkdirty(bh);
+			}
+		    }
+		}
+		
+		if (will_convert)
+		    *size = sd_size;
+		else
+		    *size = reiserfs_key_get_off (&ih->ih_key) + 
+			    reiserfs_leaf_ibytes (ih, fs->fs_blocksize) - 1;
+	    
+		if (reiserfs_key_get_type (&ih->ih_key) == TYPE_EXTENT) {
+		    if (*symlink) /* symlinks must be calculated as dirs */
+			*blocks = REISERFS_DIR_BLOCKS (*size);
+		    else
+			for (i = 0; i < reiserfs_ext_count (ih); i ++) {
+			    __u32 * ind = (__u32 *)REISERFS_PATH_ITEM(&path);
+
+			    if (d32_get(ind, i) != 0)
+				*blocks += (fs->fs_blocksize >> 9);
+			}
+		} else if (reiserfs_key_get_type (&ih->ih_key) == TYPE_DIRECT) {
+		    if (*symlink) /* symlinks must be calculated as dirs */
+			*blocks = REISERFS_DIR_BLOCKS (*size);
+		    else if (!had_direct)
+			*blocks += (fs->fs_blocksize >> 9);
+
+		    /* calculate only the first direct byte */
+		    had_direct++;
+		}
+	    }
+
+	    if (next_is_another_object) {
+		/* next item does not exists or is of another object,
+                   therefore all items of file are correct */
+		if (will_convert) {
+		    if (fsck_mode (fs) == FSCK_CHECK) {
+			/* here it can be symlink only */
+			fsck_log ("%s: The extent item should be converted "
+				  "back to direct %K\n", __FUNCTION__, 
+				  &ih->ih_key);
+			one_more_corruption (fs, FIXABLE);
+			reiserfs_tree_pathrelse (&path);
+		    } else {
+			__u32 * ind = (__u32 *)REISERFS_PATH_ITEM(&path);
+			
+			if (d32_get(ind, reiserfs_ext_count (ih) - 1) == 0)
+			    *blocks += (fs->fs_blocksize >> 9);
+
+			/* path is released here. */
+			sd_fdb = extent2direct (&path, sd_size - 
+						last_unfm_offset + 1,
+						*symlink);
+			
+			/* last item of the file is direct item */
+			reiserfs_key_set_off (key_version, key, 
+					      sd_fdb);
+			
+			reiserfs_key_set_type (key_version, key, TYPE_DIRECT);
+		    }
+		} else {
+		    reiserfs_tree_pathrelse (&path);
+		}
+		
+		return 1;
+	    }
+
+	    /* next item is item of this file */
+	    if ((gap = must_there_be_a_hole(ih, next_key))) {
+		/* next item has incorrect offset (hole or overlapping) */
+		reiserfs_tree_pathrelse (&path);
+
+		if (reiserfs_ih_ext(ih) &&
+		    fsck_mode (fs) == FSCK_REBUILD && 
+		    gap < FSCK_MAX_GAP(fs->fs_blocksize)) 
+		{
+			if (gap < 0) {
+			    reiserfs_panic("%s: found items %k, %k are "
+					   "overlapped.\n", __FUNCTION__, 
+					   &ih->ih_key, next_key);
+			}
+
+			reiserfs_key_set_off(key_version, key, 
+				reiserfs_key_get_off(&ih->ih_key) +
+				reiserfs_leaf_ibytes(ih, fs->fs_blocksize));
+			
+			fsck_tree_rewrite(fs, key, 
+				reiserfs_key_get_off(next_key), 
+				1 << IH_Unreachable);
+			
+			break;
+		}
+		
+		return 0;
+	    }
+
+	    /* next item exists */
+	    reiserfs_key_set_sec(key_version, key, 
+				 reiserfs_key_get_off (next_key), 
+				 reiserfs_key_get_type(next_key));
+	
+	    if (reiserfs_key_comp (key, next_key))
+		reiserfs_panic ("%s: Internal tree is in inconsistent state, "
+				"the current item key %K and the next key %K "
+				"must match\n", __FUNCTION__, key, next_key);
+	    
+	    reiserfs_tree_pathrelse (&path);
+	    break;
+
+	case POSITION_NOT_FOUND:
+	    /* We always must have next key found. Exception is first byte. 
+	       It does not have to exist */
+	    if (reiserfs_key_get_off (key) != 1)
+		reiserfs_panic ("%s: Position (offset == %llu) in the middle "
+				"of the file %K was not found.", __FUNCTION__, 
+				reiserfs_key_get_off(key), key);
+
+	    bh = REISERFS_PATH_LEAF (&path);
+	    
+	    if (reiserfs_node_items(bh) <= REISERFS_PATH_LEAF_POS(&path))
+		next_key = reiserfs_tree_next_key(&path, fs);
+	    else
+		next_key = &REISERFS_PATH_IH(&path)->ih_key;
+	    
+	    reiserfs_tree_pathrelse (&path);
+	    
+	    gap = reiserfs_key_get_off(next_key);
+	    
+	    if (fsck_mode(fs) == FSCK_REBUILD && 
+		gap < FSCK_MAX_GAP(fs->fs_blocksize) + 1) 
+	    {
+		fsck_tree_rewrite(fs, key, gap, 1 << IH_Unreachable);
+		break;
+	    }
+	    
+	    return 0;
+      
+	case FILE_NOT_FOUND:
+	    if (reiserfs_key_get_off (key) != 1)
+		reiserfs_panic ("%s: File %K must be found as we found its "
+				"StatData.", __FUNCTION__, key);
+	    reiserfs_tree_pathrelse (&path);
+	    return 1;
+
+	case DIRECTORY_FOUND:
+	    reiserfs_tree_pathrelse (&path);
+	    return -1;
+	}
+    } while (1);
+
+    misc_die ("%s: Cannot reach here", __FUNCTION__);
+    return 0;
+}
+
+static int cb_relocate(reiserfs_path_t *path, void *data) {
+    return 1;
+}
+
+/* delete all items and put them back (after that file should have
+   correct sequence of items.
+   if @relocate is specified then it relocates items to a new id.
+   if @adjust_ih is specified then the key in ih is changed also. */
+void fsck_file_relocate(reiserfs_key_t *key, int update_key) {
+    reiserfs_key_t start;
+    saveitem_t *si;
+    __u32 oid;
+    int count;
+    int moved;
+    
+    /* Find all items of the file, remove, relocate, insert them. */
+    oid = 0;
+    moved = 0;
+    si = NULL;
+    start = *key;
+    reiserfs_key_set_sec(KEY_FORMAT_1, &start, OFFSET_SD, TYPE_STAT_DATA);
+
+    while ((count = fsck_tree_delete(&start, &si, 1, cb_relocate, NULL))) {
+	if (oid == 0)
+	    oid = fsck_relocate_oid(key);
+
+	reiserfs_key_set_oid(&(si->si_ih.ih_key), oid);
+	fsck_tree_insert_item(&(si->si_ih), si->si_dnm_data, 0);
+	
+	si = fsck_item_free(si);
+	moved += count;
+    }
+
+    if (moved) {
+	fsck_log ("%s: %d items of file %K moved to %u oid\n",
+              __FUNCTION__, moved, key, oid);
+    }
+    
+    if (update_key) {
+	/* If nothing has been relocated but ih needs to be adjusted,
+	  allocate a new oid for relocation. */
+
+	if (oid == 0)
+	    oid = fsck_relocate_oid(key);
+
+	reiserfs_key_set_oid (key, oid);
+    }
+}
diff --git a/fsck/uobjectid.c b/utils/fsck/uobjectid.c
similarity index 61%
rename from fsck/uobjectid.c
rename to utils/fsck/uobjectid.c
index 118cc6b..6cbe96c 100644
--- a/fsck/uobjectid.c
+++ b/utils/fsck/uobjectid.c
@@ -3,7 +3,12 @@
  * reiserfsprogs/README
  */
 
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
 #include "fsck.h"
+#include "misc/malloc.h"
 
 
 /* when --check fsck builds a map of objectids of files it finds in the tree
@@ -32,8 +37,8 @@
     id_map_t *map;
     __u32 i;
  
-    map = getmem(sizeof(id_map_t));
-    map->index = mem_alloc(INDEX_COUNT * sizeof(void *));
+    map = misc_getmem(sizeof(id_map_t));
+    map->index = misc_malloc(INDEX_COUNT * sizeof(void *));
 
     for (i = 0; i < INDEX_COUNT; i++) {
 	if (map->index[i] != (void *)0)
@@ -54,11 +59,11 @@
  
     for (i = 0; i < INDEX_COUNT; i++) {
 	if (map->index[i] != (void *)0 && map->index[i] != (void *)1)
-	    freemem(map->index[i]);
+	    misc_freemem(map->index[i]);
     }
     
-    freemem(map->index);
-    freemem(map);
+    misc_freemem(map->index);
+    misc_freemem(map);
 }
 
 int id_map_test(id_map_t *map, __u32 id) {
@@ -77,7 +82,7 @@
     void **interval = id_map_interval(map, id);
 
     if (*interval == (void *)0)
-	*interval = getmem(ALLOC_SIZE);
+	*interval = misc_getmem(ALLOC_SIZE);
 
     if (*interval == (void *)1)
 	return 1;
@@ -92,7 +97,7 @@
 
     if ((*(__u16 *)id_map_local_count(*interval)) == BM_INTERVAL) {
 	/* Dealloc fully used bitmap */
-	freemem(*interval);
+	misc_freemem(*interval);
 	*interval = (void *)1;
     }
 
@@ -120,7 +125,7 @@
     if (map->index[i] != (void *)1 && map->index[i] != (void *)0) {
 	id = misc_find_first_zero_bit(map->index[i], BM_INTERVAL);
 	if (id >= BM_INTERVAL)
-	    die ("Id is out of interval size, interval looks corrupted.");
+	    misc_die ("Id is out of interval size, interval looks corrupted.");
 	
 	id += i * BM_INTERVAL;
     } else if (first != ~(__u32)0) {
@@ -128,7 +133,7 @@
 	if (id == 0) 
 	    id = 2;
     } else 
-	die ("%s: No more free objectid is available.", __FUNCTION__);
+	misc_die ("%s: No more free objectid is available.", __FUNCTION__);
 
     id_map_mark(map, id);
 
@@ -145,23 +150,25 @@
 
 static __u32 id_map_next_bound(id_map_t *map, __u32 start) {
     __u32 index = start / BM_INTERVAL;
-    __u32 offset = start % BM_INTERVAL;
+    __u32 offset = 0;
     int look_for;
     
     if (map->index[index] == (void *)0)
 	look_for = 1;
     else if (map->index[index] == (void *)1)
 	look_for = 0;
-    else 
+    else {
+	offset = start % BM_INTERVAL;
 	look_for = !misc_test_bit(offset, map->index[index]);
-
-    offset++;
+	offset++;
+    }
 
 start_again:
     
     if (look_for) {	
-	while (index < INDEX_COUNT && map->index[index] == (void *)0)
+	while (index < INDEX_COUNT && map->index[index] == (void *)0) {
 	    index++;
+	}
 	
 	if (index == INDEX_COUNT)
 	    return 0;
@@ -169,15 +176,14 @@
 	if (map->index[index] == (void *)1)
 	    return index * BM_INTERVAL;
 	
-	offset = misc_find_next_set_bit(map->index[index], BM_INTERVAL, offset);
+	offset = misc_find_next_set_bit(map->index[index], 
+					BM_INTERVAL, offset);
 
 	if (offset >= BM_INTERVAL) {
 	    offset = 0;
 	    index++;
 	    goto start_again;
 	}
-	
-	return index * BM_INTERVAL + offset;
     } else {
 	while (index < INDEX_COUNT && map->index[index] == (void *)1)
 	    index++;
@@ -188,16 +194,17 @@
 	if (map->index[index] == (void *)0)
 	    return index * BM_INTERVAL;
 
-	offset = misc_find_next_zero_bit(map->index[index], BM_INTERVAL, offset);
+	offset = misc_find_next_zero_bit(map->index[index], 
+					 BM_INTERVAL, offset);
 	
 	if (offset >= BM_INTERVAL) {
 	    offset = 0;
 	    index++;
 	    goto start_again;
 	}
-	
-	return index * BM_INTERVAL + offset;
     }
+
+    return index * BM_INTERVAL + offset;
 }
 
 void id_map_flush(struct id_map * map, reiserfs_filsys_t * fs) {
@@ -205,33 +212,40 @@
     __u32 id, prev_id;
     __u32 * sb_objectid_map;
 
-    size = reiserfs_super_block_size (fs->fs_ondisk_sb);
+    size = reiserfs_super_size (fs->fs_ondisk_sb);
     sb_objectid_map = (__u32 *)((char *)(fs->fs_ondisk_sb) + size);
 
     max = ((fs->fs_blocksize - size) >> 3 << 1);
-    set_sb_oid_maxsize (fs->fs_ondisk_sb, max);
+    reiserfs_sb_set_mapmax (fs->fs_ondisk_sb, max);
     
     id = 1;
-    sb_objectid_map[0] = cpu_to_le32(1);
+    sb_objectid_map[0] = cpu_to_le32(0);
 
     for (i = 1; i < max - 1; i++) {
 	id = id_map_next_bound(map, id);
 	sb_objectid_map[i] = cpu_to_le32(id);
 	if (id == 0) {
-	    if (i % 2)
-		die ("%s: Used interval is not closed on flushing.", __FUNCTION__);
+	    if (i % 2) {
+		misc_die ("%s: Used interval is not closed "
+			  "on flushing.", __FUNCTION__);
+	    }
+	    
 	    break;
 	}
     }
 
-    if (map->index[map->last_used] == (void *)0)
-	die ("Object id map looks corrupted - last used interval cannot be zeroed.");
+    if (map->index[map->last_used] == (void *)0) {
+	misc_die ("Object id map looks corrupted - last "
+		  "used interval cannot be zeroed.");
+    }
     
     i++;
     
     if (i == max) {
-	if (id == 0)
-	    die ("Objectid interval does not contain any set bit what is expected.");
+	if (id == 0) {
+	    misc_die ("Objectid interval does not contain "
+		      "any set bit what is expected.");
+	}
 	
 	if (map->index[map->last_used] == (void *)1) {
 	    prev_id = BM_INTERVAL - 1;
@@ -252,103 +266,130 @@
 		prev_id = id;
 	    }
 
-	    if (prev_id == ~(__u32)0)
-		die ("Objectid interval does not contain any set bit what is expected.");
+	    if (prev_id == ~(__u32)0) {
+		misc_die ("Objectid interval does not contain "
+			  "any set bit what is expected.");
+	    }
 
 	    prev_id++;
 	}
 	
-	sb_objectid_map[max - 1] = cpu_to_le32(prev_id + map->last_used * BM_INTERVAL);
-    } else { 
+	sb_objectid_map[max - 1] = 
+		cpu_to_le32(prev_id + map->last_used * BM_INTERVAL);
+    } else {
 	i--;
 	memset(sb_objectid_map + i, 0, (max - i) * sizeof (__u32));
     }
 
-    set_sb_oid_cursize (fs->fs_ondisk_sb, i);
+    reiserfs_sb_set_mapcur (fs->fs_ondisk_sb, i);
 }
 
-/* FIXME: these 3 methods must be implemented also.
 
-void fetch_objectid_map (struct id_map * map, reiserfs_filsys_t * fs)
+void fetch_objectid_map (struct id_map * map, 
+			 reiserfs_filsys_t * fs) 
 {
-    int sb_size;
+    __u32 i, j, sb_size;
     __u32 * sb_objectid_map;
 
-    sb_size = reiserfs_super_block_size (fs->fs_ondisk_sb);
+    sb_size = reiserfs_super_size (fs->fs_ondisk_sb);
     sb_objectid_map = (__u32 *)((char *)(fs->fs_ondisk_sb) + sb_size);
 
-    if (map->m_page_count != 1)
-	die ("fetch_objectid_map: can not fetch long map");
+    if (map == NULL)
+	misc_die ("Not map given");
     
-    make_id_space(map, 0);
-    memcpy (map->m_begin, sb_objectid_map, get_sb_oid_cursize (fs->fs_ondisk_sb) * sizeof (__u32));
-    map->m_used_slot_count = get_sb_oid_cursize (fs->fs_ondisk_sb);
+    for (i = 0; i < reiserfs_sb_get_mapcur(fs->fs_ondisk_sb); i+=2) {
+	    for (j = sb_objectid_map[i]; j <  sb_objectid_map[i + 1]; j++) {
+		    id_map_mark(map, j);
+		    if (j == 0)
+			    map->count--;
+	    }
+    }
 }
 
 #define OBJMAP_START_MAGIC 375331
 #define OBJMAP_END_MAGIC 7700472
 
-void reiserfs_objectid_map_save (FILE * fp, struct id_map * id_map)
-{
-    __u32 v;
-    int i;
+void reiserfs_objectid_map_save (FILE * fp, struct id_map * id_map) {
+    __u32 v, count;
 
     v = OBJMAP_START_MAGIC;
     fwrite (&v, 4, 1, fp);
 
-    v = id_map->m_used_slot_count;
+    v = 0;
+    count = 0;
+    /* Write 0. */
     fwrite (&v, 4, 1, fp);
-
-    for (i = 0; i < id_map->m_page_count - 1; i++) {
-	fwrite ((char *)id_map->m_begin + MAP_SIZE * i, 4, 1, fp);
+    count++;
+    while ((v = id_map_next_bound(id_map, v))) {
+	    fwrite (&v, 4, 1, fp);
+	    count++;
     }
-
-    for (i = 0; i < id_map->m_used_slot_count * sizeof(__u32) - (id_map->m_page_count - 1) * MAP_SIZE; i++) {
-	fwrite ((char *)id_map->m_begin + MAP_SIZE * (id_map->m_page_count - 1) + i, 4, 1, fp);
-    }
-
+    
+    fwrite (&count, 4, 1, fp);
+    
     v = OBJMAP_END_MAGIC;
     fwrite (&v, 4, 1, fp);
 }
 
-struct id_map * reiserfs_objectid_map_load (FILE * fp)
-{
-    __u32 v;
-    int i;
+struct id_map * reiserfs_objectid_map_load (FILE * fp) {
+    __u32 v, count, i, prev, next;
     struct id_map * id_map;
+    int skip, odd;
 
+    id_map = id_map_init();
+    
     fread (&v, 4, 1, fp);
     if (v != OBJMAP_START_MAGIC) {
-	reiserfs_warning (stderr, "reiserfs_objectid_map_load: no objectid map begin magic found");
-	return 0;
-    }
-	
-    // read bit size of objectid map 
-    fread (&v, 4, 1, fp);
-
-    id_map = init_id_map (MAP_NOT_PACKED);
-
-    id_map->m_used_slot_count = v;
-    id_map->m_page_count = v / MAP_SIZE + 1;
-
-    id_map->m_begin = expandmem (id_map->m_begin, 0, id_map->m_page_count * MAP_SIZE);
-
-    for (i = 0; i < id_map->m_page_count - 1; i++) {
-	fread ((char *)id_map->m_begin + MAP_SIZE * i, 4, 1, fp);
+	reiserfs_warning (stderr, "reiserfs_objectid_map_load: no "
+			  "objectid map begin magic found");
+	goto error;
     }
 
-    for (i = 0; i < id_map->m_used_slot_count * sizeof(__u32) - (id_map->m_page_count - 1) * MAP_SIZE; i++) {
-	fread ((char *)id_map->m_begin + MAP_SIZE * (id_map->m_page_count - 1) + i, 4, 1, fp);
+    count = 0;
+    skip = 0;
+    odd = 0;
+    prev = 0;
+    while (1) {
+	    if (skip) {
+		    skip = 0;
+		    v = next;
+	    } else if (fread(&v, 4, 1, fp) != 1) {
+		    reiserfs_warning (stderr, "%s: failed to read the given", 
+				      __FUNCTION__);
+		    goto error;
+	    }
+	    
+	    if (v == count) {
+		    /* Check if the magic goes after. */
+		    if (fread(&next, 4, 1, fp) != 1) {
+			    reiserfs_warning (stderr, "%s: failed to read the given", 
+				      __FUNCTION__);
+			    goto error;
+		    }
+
+		    if (next != OBJMAP_END_MAGIC)
+			    skip = 1;
+		    else break;
+	    }
+
+	    if (odd) {
+		    for (i = prev; i < v; i++) {
+			    id_map_mark(id_map, i);
+			    if (i == 0)
+				    id_map->count--;
+		    }
+	    } 
+	    
+	    prev = v;
+	    
+	    odd = odd ? 0 : 1;
+	    count++;
     }
-
-    fread (&v, 4, 1, fp);
-
-    if (v != OBJMAP_END_MAGIC) {
-	reiserfs_warning (stderr, "reiserfs_objectid_map_load: no objectid map end magic found");
-	return 0;
-    }
-
-    fflush (stderr);
+    
     return id_map;
+    
+ error:
+    fflush (stderr);
+    id_map_free(id_map);
+    return NULL;
 }
-*/
diff --git a/utils/fsck/utree.c b/utils/fsck/utree.c
new file mode 100644
index 0000000..2621c83
--- /dev/null
+++ b/utils/fsck/utree.c
@@ -0,0 +1,1166 @@
+/*
+ * Copyright 1996-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "fsck.h"
+#include <sys/stat.h>
+#include "misc/unaligned.h"
+#include "misc/malloc.h"
+#include "util/misc.h"
+
+/* this works for both new and old stat data */
+#define st_mode(sd) le16_to_cpu(((reiserfs_sd_t *)(sd))->sd_mode)
+
+#define st_mtime_v1(sd) le32_to_cpu(((reiserfs_sd_v1_t *)(sd))->sd_mtime)
+#define st_mtime_v2(sd) le32_to_cpu(((reiserfs_sd_t *)(sd))->sd_mtime)
+
+
+static int fsck_tree_insert_file (reiserfs_ih_t * ih, 
+				  char * item, int check);
+
+/* either both sd-s are new of both are old */
+static void fsck_tree_overwrite_stat (reiserfs_ih_t * new_ih,
+				      void * new_item, 
+				      reiserfs_path_t * path)
+{
+    __u16 new_mode, old_mode;
+
+    reiserfs_stat_get_mode (new_ih, new_item, &new_mode);
+    reiserfs_stat_get_mode (REISERFS_PATH_IH (path), 
+			    REISERFS_PATH_ITEM (path), &old_mode);
+
+
+    if ((S_ISREG (new_mode) && S_ISDIR (old_mode)) ||
+	(S_ISDIR (new_mode) && S_ISREG (old_mode)))
+    {
+	reiserfs_panic("Cannot overwrite SD [%H] with SD [%H].\n", 
+		       REISERFS_PATH_IH (path), new_ih);
+    }
+    
+    if (S_ISREG (new_mode) && !S_ISREG (old_mode)) {
+	/* in tree we have not regular file - overwrite its stat data
+           with stat data of regular file */
+	memcpy (REISERFS_PATH_ITEM (path), new_item, 
+		reiserfs_ih_get_len (REISERFS_PATH_IH (path)));
+	reiserfs_buffer_mkdirty (REISERFS_PATH_LEAF (path));
+	return;
+    }
+
+    if (S_ISREG (old_mode) && !S_ISREG (new_mode)) {
+	/* new stat data is not a stat data of regular file, keep
+           regular file stat data in tree */
+	return;
+    }
+    
+    /* if coming stat data has newer mtime - use that */
+    if (reiserfs_ih_format_v1 (new_ih)) {	
+	if (st_mtime_v1 (new_item) > st_mtime_v1 (REISERFS_PATH_ITEM (path))) {
+	    memcpy (REISERFS_PATH_ITEM (path), new_item, REISERFS_SD_SIZE_V1);
+	    reiserfs_buffer_mkdirty (REISERFS_PATH_LEAF (path));
+	}
+    } else {
+	if (st_mtime_v2 (new_item) > st_mtime_v2 (REISERFS_PATH_ITEM (path))) {
+	    memcpy (REISERFS_PATH_ITEM (path), new_item, REISERFS_SD_SIZE);
+	    reiserfs_buffer_mkdirty (REISERFS_PATH_LEAF (path));
+	}
+    }
+    return;
+}
+
+/* insert sd item if it does not exist, overwrite it otherwise */
+static void fsck_tree_insert_stat (reiserfs_ih_t * new_ih, 
+				   char * new_item, int check)
+{
+    reiserfs_path_t path;
+    __u32 oid;
+
+    if (check) {
+	oid = fsck_relocate_check (new_ih, !not_a_directory(new_item));
+    
+	if (oid == 1) {
+	    fsck_file_relocate (&new_ih->ih_key, 
+				not_a_directory(new_item) ? 1 : 0);
+	} else if (oid) {
+	    reiserfs_key_set_oid (&new_ih->ih_key, oid);
+	}
+    }
+    
+    /* if we will have to insert item into tree - it is ready */
+    zero_nlink (new_ih, new_item);
+    fsck_item_mkunreach (new_ih);
+    
+    /* we are sure now that if we are inserting stat data of a
+       directory - there are no items with the same key which are not
+       items of a directory, and that if we are inserting stat data is
+       of not a directory - it either has new key already or there are
+       no items with this key which are items of a directory */
+    if (reiserfs_tree_search_item (fs, &(new_ih->ih_key), &path) == ITEM_FOUND) {
+	/* this stat data is found */
+        if (reiserfs_ih_get_format (REISERFS_PATH_IH(&path)) != 
+	    reiserfs_ih_get_format (new_ih)) 
+	{
+	    /* in tree stat data and a new one are of different
+               formats */
+	    fsck_log ("%s: Inserting the StatData %K, mode (%M)...", 
+		      __FUNCTION__, &(new_ih->ih_key), st_mode (new_item));
+	    
+	    if (reiserfs_ih_format_v1 (new_ih)) {
+		/* sd to be inserted is of V1, where as sd in 
+		   the tree is of V2 */
+		fsck_log ("found newer in the tree, mode (%M), insersion was "
+			  "skipped.\n", st_mode (REISERFS_PATH_ITEM (&path)));
+	    	reiserfs_tree_pathrelse (&path);
+	    } else {
+		/* the stat data in the tree is sd_v1 */
+		fsck_log ("older sd, mode (%M), is replaced with it.\n",
+			  st_mode (REISERFS_PATH_ITEM (&path)));
+		
+		reiserfs_tree_delete (fs, &path, 0/*not temporary*/);
+		reiserfs_tree_search_item (fs, &new_ih->ih_key, &path);
+		reiserfs_tree_insert (fs, &path, new_ih, new_item);
+	    }
+	} else {
+	    /* both stat data are of the same version */
+	    fsck_tree_overwrite_stat (new_ih, new_item, &path);
+	    reiserfs_tree_pathrelse (&path);
+	}
+	
+	return;
+    }
+    
+    /* item not found, insert a new one */
+    reiserfs_tree_insert (fs, &path, new_ih, new_item);
+}
+
+static int fsck_tree_insert_prep (reiserfs_filsys_t *fs, 
+				  reiserfs_ih_t *ih, 
+				  int directory) 
+{
+    reiserfs_path_t path;
+    reiserfs_key_t key;
+    __u32 oid = 0;
+    int step = 0;
+
+    /* Check if the ois has been already relocated. */
+    if (!directory && (oid = fsck_relocate_get_oid(&ih->ih_key)))
+	reiserfs_key_set_oid(&ih->ih_key, oid);
+    
+    memset(&key, 0, sizeof(key));
+    
+    while (1) {
+	reiserfs_key_copy2(&key, &ih->ih_key);
+	
+	/* Check if the StatData item presents. */
+	if ((reiserfs_tree_search_item (fs, &key, &path) != ITEM_FOUND) ||
+	    (directory && not_a_directory(REISERFS_PATH_ITEM(&path))) || 
+	    (!directory && !not_a_directory(REISERFS_PATH_ITEM(&path))))
+	{
+	    fsck_log ("vpf-10260: The file we are inserting the new item "
+		      "(%H) into has no StatData, insertion is skipped\n", ih);
+
+	    reiserfs_tree_pathrelse (&path);
+	    return 1;
+	}
+	
+	reiserfs_tree_pathrelse(&path);
+	
+	if (!step && !oid) {
+	    oid = fsck_relocate_check(ih, directory);
+	    
+	    if (oid == 1) {
+		fsck_file_relocate (&ih->ih_key, directory ? 0 : 1);
+	    } else if (oid) {
+		reiserfs_key_set_oid(&ih->ih_key, oid);
+	    } else {
+		return 0;
+	    }
+	    
+	    step = 1;
+	    continue;
+	}
+	
+	
+	/* Check/Fix the format. */
+#if 0
+	format = reiserfs_ih_get_format (REISERFS_PATH_IH(&path));
+	reiserfs_stat_get_mode (REISERFS_PATH_IH(&path), 
+				REISERFS_PATH_ITEM(&path), &mode);
+
+	if (format != reiserfs_ih_get_format (ih)) {
+	    /* Not for symlinks and not for items which should be relocted. */
+	    if (((S_ISDIR(mode) && reiserfs_ih_dir(ih)) || 
+		 (!S_ISDIR(mode) && !reiserfs_ih_dir(ih))) && 
+		!S_ISLNK(mode))
+	    {
+		reiserfs_key_set_sec (format, &ih->ih_key, 
+				      reiserfs_key_get_off (&ih->ih_key), 
+				      reiserfs_key_get_type (&ih->ih_key));
+
+		reiserfs_ih_set_format(ih, file_format);		
+	    }
+	}
+#endif
+	
+	return 0;
+    }
+}
+
+/* this tries to put each item entry to the tree, if there is no items
+   of the directory, insert item containing 1 entry */
+static void fsck_tree_insert_entry (reiserfs_ih_t * comingih, 
+				    char * item, int check)
+{
+    char buf[REISERFS_NAME_MAX];
+    reiserfs_deh_t *deh;
+    char *name;
+    int namelen;
+    int i, step;
+
+    step = 0;
+    
+    /* Check if the SD item exists */
+    if (check) {
+	if (fsck_relocate_check (comingih, 1))
+	    fsck_file_relocate (&comingih->ih_key, 0);
+    }
+    
+    deh = (reiserfs_deh_t *)item;
+    
+    for (i = 0; i < reiserfs_ih_get_entries (comingih); i ++, deh ++) {
+	name = reiserfs_deh_name (deh, i);
+	namelen = reiserfs_direntry_name_len (comingih, deh, i);
+
+	if (!reiserfs_hash_correct (&fs->hash, name, namelen, 
+				    reiserfs_deh_get_off (deh)))
+	{
+	    reiserfs_panic ("%s: The entry (%d) \"%.*s\" of the directory "
+			    "%k has badly hashed entry", __FUNCTION__, i, 
+			    namelen, name, &comingih->ih_key);
+	}
+
+	buf[0] = '\0';
+	sprintf (buf, "%.*s", namelen, name);
+	/* 1 for fsck is important: if there is no any items of this
+           directory in the tree yet - new item will be inserted
+           marked not reached */
+	reiserfs_tree_insert_entry (fs, &(comingih->ih_key), buf, 
+				    reiserfs_direntry_entry_len (comingih, deh, i),
+				    (reiserfs_key_t *)&(deh->deh2_dir_id), 
+				    1 << IH_Unreachable);
+    }
+}
+
+/*  start_key is the key after which N items need to be deleted
+    save_here is a pointer where deleted items need to be saved if save is set.
+    start_key is the first undeleted item.
+    return whether we are sure there is nothing else of this file
+ */
+int fsck_tree_delete(reiserfs_key_t * start_key, 
+		     saveitem_t ** save_here, 
+		     int skip_dir_items, 
+		     tree_modify_t func,
+		     void *data)
+{
+    const reiserfs_key_t *rkey;
+    reiserfs_path_t path;
+    int count = 0;
+    int ret;
+
+    while (1) {
+	reiserfs_tree_search_body (fs, start_key, &path);
+	
+	if (REISERFS_PATH_LEAF_POS (&path) == 
+	    reiserfs_node_items (REISERFS_PATH_LEAF (&path))) 
+	{
+	    rkey = reiserfs_tree_rkey (&path, fs);
+	    if (rkey && !reiserfs_key_comp2 (start_key, rkey)) {
+		/* file continues in the right neighbor */
+		reiserfs_key_copy (start_key, rkey);
+		reiserfs_tree_pathrelse (&path);
+		continue;
+	    }
+	    /* there is no more items with this key */
+	    reiserfs_tree_pathrelse (&path);
+	    return count;
+	}
+
+	rkey = &(REISERFS_PATH_IH (&path))->ih_key;
+	if (reiserfs_key_comp2 (start_key, rkey)) {
+	    /* there are no more item with this key */
+	    reiserfs_tree_pathrelse (&path);
+	    return count;
+	}
+
+	reiserfs_key_copy (start_key, rkey);
+
+	/* Let it to be here to return either the last deleted key in 
+	   @start_key or the first not deleted. */
+/*	if (n_to_delete && count == n_to_delete) {
+	    reiserfs_tree_pathrelse (&path);
+	    break;
+	}
+*/	
+	/* ok, item found, but make sure that it is not a directory one */
+	if ((reiserfs_key_stat (rkey) && 
+	     !not_a_directory (REISERFS_PATH_ITEM (&path))) ||
+	    (reiserfs_key_dir (rkey)))
+	{
+	    if (skip_dir_items) {
+	    	/* item of directory found. Leave it in the tree */
+		reiserfs_key_set_off(KEY_FORMAT_1, start_key, 
+				     reiserfs_key_get_off(start_key) + 1);
+	    	reiserfs_tree_pathrelse (&path);
+	    	continue;
+	    } else {
+	    	reiserfs_panic ("%s: No directory item of %K are expected", 
+				__FUNCTION__, rkey);
+	    }
+	}
+	
+	/* If removing not by the counter, break when it is save to do --
+	   an indirect item is encountered. */
+	if ((ret = func(&path, data)) < 0) {
+	    // if (n_to_delete == 0 && count && reiserfs_key_ext(rkey)) {
+	    reiserfs_tree_pathrelse (&path);
+	    break;
+	}
+	
+	if (save_here != NULL)
+	    fsck_item_save(&path, save_here);
+	
+	reiserfs_tree_delete (fs, &path, save_here ? 1 : 0);
+	
+	count++;
+
+	if (ret > 0)
+	    break;
+    }
+
+    return count;
+}
+
+/* this is for check only. With this we make sure that all pointers we
+   put into tree on pass 1 do not point to leaves (FIXME), do not
+   point to journal, bitmap, etc, do not point out of fs boundary (and
+   are marked used in on-disk bitmap - this condition skipped for now). */
+
+/* pointers to data block which get into tree are checked with this */
+static int still_bad_unfm_ptr (unsigned long block) {
+    if (!block)
+	return 0;
+    if (is_block_used (block))
+	return 1;
+    if (block >= reiserfs_sb_get_blocks (fs->fs_ondisk_sb))
+	return 1;
+    return 0;
+}
+
+static int fsck_tree_create_item (reiserfs_filsys_t *fs, 
+				  reiserfs_path_t * path, 
+				  reiserfs_ih_t * ih, 
+				  char * item,
+				  int pos, 
+				  int alloc)
+{
+    reiserfs_ih_t newih;
+    __u32 body_off;
+    __u64 key_off;
+    int count, i;
+    int format;
+
+    body_off = pos * (reiserfs_ih_direct(ih) ? 1 : REISERFS_EXT_SIZE);
+    key_off  = pos * (reiserfs_ih_direct(ih) ? 1 : fs->fs_blocksize);
+    format = reiserfs_key_format(&ih->ih_key);
+    
+    memcpy(&newih, ih, sizeof(newih));
+    fsck_item_mkunreach (&newih);
+    reiserfs_ih_set_len (&newih, reiserfs_ih_get_len (ih) - body_off);
+    reiserfs_ih_set_format (&newih, reiserfs_ih_get_format (ih));
+    reiserfs_ih_set_loc(&newih, 0);
+    
+    reiserfs_key_set_off (format, &newih.ih_key, 
+			  reiserfs_key_get_off(&newih.ih_key) + key_off);
+    
+    if (alloc && reiserfs_ih_ext(ih)) {
+	count = reiserfs_ext_count (ih);
+	for (i = pos; i < count; i++) {
+	    if (still_bad_unfm_ptr (d32_get(item, i)))
+		reiserfs_panic ("%s: The file %K has a pointer to "
+				"the bad block (%u)", __FUNCTION__,
+				&ih->ih_key, d32_get(item, i));
+		
+	    mark_block_used (d32_get(item, i), 0);
+	}
+    }
+
+    reiserfs_tree_insert (fs, path, &newih, item + body_off);
+    return reiserfs_leaf_ibytes (ih, fs->fs_blocksize) - key_off;
+}
+
+int fsck_tree_insert_zero_ptr (reiserfs_filsys_t *fs,
+			       reiserfs_key_t *key,
+			       long long int p_count,
+			       __u16 flags)
+{
+    reiserfs_path_t path;
+    long long int count;
+    reiserfs_ih_t *ih;
+    int format;
+    __u32 * ni;
+    int ret;
+
+    ret = reiserfs_tree_search_position (fs, key, &path);
+    
+    if (ret == DIRECTORY_FOUND || ret == POSITION_FOUND) {
+	    reiserfs_panic("%s: The object [%k] must be a file and the "
+			   "position must be absent.\n", __FUNCTION__, 
+			   key);
+    }
+
+    count = REISERFS_ITEM_MAX(fs->fs_blocksize) / REISERFS_EXT_SIZE;
+
+    p_count = (p_count + fs->fs_blocksize - 1) / 
+	    fs->fs_blocksize * fs->fs_blocksize;
+    
+    if (p_count / fs->fs_blocksize <= count)
+	count = p_count / fs->fs_blocksize;
+
+    ni = misc_getmem (count * REISERFS_EXT_SIZE);
+
+    if (path.pos_in_item) {
+	/* Position is not found, append to the existent item. */
+	ih = REISERFS_PATH_IH (&path);
+	
+	if (reiserfs_item_count(ih) != path.pos_in_item) {
+	    reiserfs_panic("%s: not expected position (%u) in the "
+			   "middle of the item %k.\n", __FUNCTION__,
+			   path.pos_in_item, &ih->ih_key);
+	}
+
+	if ((flags & (1 << IH_Unreachable)) || 
+	    reiserfs_ih_direct(ih) || must_there_be_a_hole(ih, key))
+	{
+	    REISERFS_PATH_LEAF_POS (&path) ++;
+	    path.pos_in_item = 0;
+	} else {
+	    reiserfs_tree_insert_unit(fs, &path, ni, count * REISERFS_EXT_SIZE);
+	    
+	    if (path.pos_in_item == 0)
+		misc_die("Not expected position");
+	} 
+    } 
+    
+    if (path.pos_in_item == 0) {
+	/* Either file not found or position not found, create a new item. */
+	reiserfs_ih_t indih;
+	
+	memset(&indih, 0, sizeof(indih));
+	
+	reiserfs_ih_set_flags(&indih, flags);
+
+	reiserfs_key_copy (&(indih.ih_key), key);
+	reiserfs_ih_set_len (&indih, count * REISERFS_EXT_SIZE);
+
+	reiserfs_ih_set_free (&indih, 0);
+	format = reiserfs_key_format(key);
+	reiserfs_ih_set_format (&indih, format);
+	reiserfs_key_set_type (format, &indih.ih_key, TYPE_EXTENT);
+	reiserfs_tree_insert (fs, &path, &indih, ni);
+    }
+
+    misc_freemem(ni);
+    return count * fs->fs_blocksize;
+}
+
+long long int must_there_be_a_hole (const reiserfs_ih_t *ih, 
+				    const reiserfs_key_t *key)
+{
+    return (reiserfs_key_get_off (key) - 
+	    reiserfs_key_get_off(&ih->ih_key) - 
+	    reiserfs_leaf_ibytes(ih, fs->fs_blocksize));
+}
+
+void fsck_tree_merge(reiserfs_path_t *path) {
+    int start, len, next_start, next_len;
+    reiserfs_ih_t *next;
+    reiserfs_ih_t *ih;
+    reiserfs_bh_t *bh;
+    char *buf;
+    int pos;
+    
+    bh = REISERFS_PATH_LEAF(path);
+    pos = REISERFS_PATH_LEAF_POS(path);
+    
+    if (pos >= reiserfs_node_items(bh) || pos < 1)
+	misc_die("%s: block (%lu), item (%d), nothing to merge with.", 
+		 __FUNCTION__, bh->b_blocknr, pos);
+
+    ih = reiserfs_ih_at(bh, pos) - 1;
+    next = ih + 1;
+    
+    start = reiserfs_ih_get_loc(ih);
+    len = reiserfs_ih_get_len(ih);
+    
+    next_start = reiserfs_ih_get_loc(next);
+    next_len = reiserfs_ih_get_len(next);
+    
+    if (!(buf = misc_malloc(next_len)))
+	misc_die("%s: Failed to allocate %d bytes.", __FUNCTION__, next_len);
+
+    if (!reiserfs_ih_dir(ih)) {
+	memmove(buf, bh->b_data + next_start, next_len);
+	memmove(bh->b_data + next_start, bh->b_data + start, len);
+	memmove(bh->b_data + next_start + len, buf, next_len);
+	
+	reiserfs_ih_set_free(ih, reiserfs_ih_get_free(next));
+    } else {
+	reiserfs_deh_t *deh;
+	int move;
+	int i;
+	
+	move = reiserfs_ih_get_entries(ih) * REISERFS_DEH_SIZE;
+	memmove(buf, bh->b_data + next_start, next_len);
+	memmove(bh->b_data + next_start, bh->b_data + start, move);
+	memmove(bh->b_data + next_start + move, buf, next_len);
+	
+	move /= REISERFS_DEH_SIZE;
+	reiserfs_ih_set_entries(ih, reiserfs_ih_get_entries(next) + move);
+	deh = (reiserfs_deh_t *)(bh->b_data + next_start);
+	
+	for (i = 0; i < move; i++, deh++)
+	    reiserfs_deh_set_loc(deh, reiserfs_deh_get_loc(deh) + next_len);
+	
+	move *= REISERFS_DEH_SIZE;
+	for (i = 0; i < reiserfs_ih_get_entries(next); i++, deh++)
+	    reiserfs_deh_set_loc(deh, reiserfs_deh_get_loc(deh) + move);
+    }
+    
+    misc_freemem(buf);
+    
+    reiserfs_ih_set_loc(ih, next_start);
+    reiserfs_ih_set_len(ih, len + next_len);
+    reiserfs_ih_set_len(next, 0);
+    
+    reiserfs_tree_delete (fs, path, 0);
+}
+
+static int cb_tree_rewrite(reiserfs_path_t *path, void *data) {
+    reiserfs_ih_t *ih;
+    __u64 *off;
+
+    ih = REISERFS_PATH_IH(path);
+    off = (__u64 *)data;
+    
+    if (reiserfs_key_get_off(&ih->ih_key) >= *off)
+	return -1;
+
+    return 0;
+}
+
+void fsck_tree_rewrite(reiserfs_filsys_t *fs, 
+		       const reiserfs_key_t *start_key,
+		       __u64 end_offset, __u16 flags)
+{
+    reiserfs_key_t key;
+    saveitem_t *si;
+    __u64 start;
+    int format;
+    
+    si = NULL;
+    
+    start = reiserfs_key_get_off(start_key);
+    start = MISC_DOWN(start, fs->fs_blocksize) + 1;
+    
+    end_offset = MISC_UP(end_offset - 1, fs->fs_blocksize) + 1;
+    format = reiserfs_key_format(start_key);
+
+    reiserfs_key_copy(&key, start_key);
+    reiserfs_key_set_off (format, &key, start);
+    
+    fsck_tree_delete(&key, &si, 0, cb_tree_rewrite, &end_offset);
+    
+    /* Insert needed zero pointers. */
+    while (start < end_offset) {
+	reiserfs_key_set_off (format, &key, start);
+	
+	start += fsck_tree_insert_zero_ptr(fs, &key, 
+			end_offset - start, flags);
+    }
+    
+    /* Insert removed items back, over have inserted zero pointers. */
+    while (si) {
+	fsck_tree_insert_file(&si->si_ih, si->si_dnm_data, 0);
+	si = fsck_item_free (si);
+    }
+}
+
+/* Check if an overlapping exists and if it does delete all items overlapped 
+   with the one pointed by @ih, insert zeroes since @ih offset and insert have
+   removed items back. */
+static int fsck_tree_overwrite_prep(reiserfs_filsys_t *fs,
+				    const reiserfs_key_t *found_key,
+				    const reiserfs_key_t *start_key, 
+				    __u64 count)
+{
+    __u64 end;
+
+    if (reiserfs_key_comp2(found_key, start_key))
+	return 0;
+    
+    end = reiserfs_key_get_off (start_key) + count;
+    end = MISC_UP(end - 1, fs->fs_blocksize) + 1;
+    if (end <= reiserfs_key_get_off(found_key))
+	return 0;
+
+    fsck_tree_rewrite(fs, start_key, end, 1 << IH_Unreachable);
+    return 1;
+}
+
+/* put unformatted node pointers from incoming item over the in-tree ones */
+static int fsck_tree_overwrite_by_extent (reiserfs_ih_t * comingih, 
+					  __u32 * coming_item,
+					  reiserfs_path_t * path, 
+					  int pos, int check)
+{
+    reiserfs_bh_t * bh = REISERFS_PATH_LEAF (path);
+    reiserfs_ih_t * ih = REISERFS_PATH_IH (path);
+    int written;
+    __u32 * item_in_tree;
+    int src_unfm_ptrs, dest_unfm_ptrs, to_copy, i, dirty = 0;
+
+    item_in_tree = (__u32 *)reiserfs_item_by_ih (bh, ih) + path->pos_in_item;
+    coming_item += pos;
+
+    dest_unfm_ptrs = reiserfs_ext_count (ih) - path->pos_in_item;
+    src_unfm_ptrs = reiserfs_ext_count (comingih) - pos;
+  
+    if (dest_unfm_ptrs >= src_unfm_ptrs) {
+	/* whole coming item (comingih) fits into item in tree (ih) starting 
+	   with path->pos_in_item */
+
+	//free_sp = ih_get_free_space(0, comingih, (char *)coming_item);
+
+	written = reiserfs_leaf_ibytes (comingih, fs->fs_blocksize) -
+	    /* free_sp - */ pos * fs->fs_blocksize;
+	to_copy = src_unfm_ptrs;
+	if (dest_unfm_ptrs == src_unfm_ptrs)
+	    reiserfs_ih_set_free(ih, 0 /* free_sp */ );
+    } else {
+	/* only part of coming item overlaps item in the tree */
+	written = dest_unfm_ptrs * fs->fs_blocksize;
+	to_copy = dest_unfm_ptrs;
+	reiserfs_ih_set_free(ih, 0);
+    }
+
+    for (i = 0; i < to_copy; i ++) {
+	if (d32_get (coming_item, i) != 0 && d32_get (item_in_tree, i) == 0) {
+	    /* overwrite holes only by correct a pointer in the coming item
+               which must be correct */
+	    d32_put (item_in_tree, i, d32_get (coming_item, i));
+
+	    if (check) {
+		if (still_bad_unfm_ptr (d32_get (coming_item, i)))
+		    misc_die ("%s: The unformatted block pointer "
+			      "(%u) points to the bad area.",
+			      __FUNCTION__, d32_get (coming_item, i));
+		
+		mark_block_used (d32_get (coming_item, i), 0);
+	    }
+	    
+	    dirty ++;
+	}
+    }
+    
+    if (dirty)
+	reiserfs_buffer_mkdirty (bh);
+    
+    return written;
+}
+
+/* write direct item to unformatted node */
+/* coming item is direct */
+static int fsck_tree_overwrite_by_direct(reiserfs_ih_t * comingih, 
+					 char * item, 
+					 reiserfs_path_t * path)
+{
+    reiserfs_bh_t * unbh, * bh;
+    reiserfs_ih_t * ih;
+    __u64 coming_len;
+    __u32 unfm_ptr;
+    int offset;
+
+    bh = REISERFS_PATH_LEAF (path);
+    ih = REISERFS_PATH_IH (path);
+
+    unfm_ptr = d32_get ((__u32 *)reiserfs_item_by_ih(bh, ih), 
+			path->pos_in_item);
+    unbh = 0;
+
+    if (unfm_ptr != 0 && unfm_ptr < reiserfs_sb_get_blocks (fs->fs_ondisk_sb)) {
+	unbh = reiserfs_buffer_read (fs->fs_dev, unfm_ptr, bh->b_size);
+	if (!is_block_used (unfm_ptr)) {
+	    misc_die ("%s: block %lu, item %d, pointer %d: The pointed "
+		      "block (%u) being overwritten is marked as unused.", 
+		      __FUNCTION__, bh->b_blocknr, 
+		      REISERFS_PATH_LEAF_POS(path),
+		      path->pos_in_item, unfm_ptr);
+	}
+	
+	if (unbh == 0)
+	    unfm_ptr = 0;
+    }
+    
+    if (unfm_ptr == 0 || 
+	unfm_ptr >= reiserfs_sb_get_blocks (fs->fs_ondisk_sb)) 
+    {
+	if ((unbh = reiserfsck_get_new_buffer (bh->b_blocknr)) != NULL) {
+	    memset (unbh->b_data, 0, unbh->b_size);
+	    
+	    d32_put ((__u32 *)reiserfs_item_by_ih(bh, ih), 
+		     path->pos_in_item,  unbh->b_blocknr);
+	    
+	    reiserfs_buffer_mkdirty (bh);
+	} else {
+	    misc_die ("%s: Could not allocate a new block "
+		      "for new data", __FUNCTION__);
+	}
+
+	/* If zero extent is overwritten with the direct, mark WAS_TAIL. */
+	reiserfs_ih_mktail(ih);
+    }
+
+    coming_len = reiserfs_leaf_ibytes (comingih, fs->fs_blocksize);
+    offset = (reiserfs_key_get_off (&comingih->ih_key) % bh->b_size) - 1;
+    
+    if (offset + coming_len > bh->b_size) {
+    	misc_die ("%s: The length of the file after insertion "
+		  "(offset=%lu, length=%u) will exceed the maximal "
+		  "possible length.",  __FUNCTION__, 
+		  (long unsigned)reiserfs_key_get_off(&comingih->ih_key),
+		  (unsigned)coming_len);
+    }
+
+    memcpy (unbh->b_data + offset, item, coming_len);
+
+    if ((path->pos_in_item == (reiserfs_ext_count (ih) - 1)) && 
+	(bh->b_size - 0/*ih_free_space (ih)*/) < (offset + coming_len)) {
+	reiserfs_ih_set_free (ih, bh->b_size - (offset + coming_len)) ;
+	reiserfs_buffer_mkdirty (bh);
+    }
+    
+    reiserfs_buffer_mkdirty (unbh);
+    reiserfs_buffer_mkuptodate (unbh, 1);
+    reiserfs_buffer_close (unbh);
+    return coming_len;
+}
+
+static int fsck_tree_overwrite_file (reiserfs_ih_t * comingih, 
+				     char * item,
+				     reiserfs_path_t * path, 
+				     int pos, int check)
+{
+    reiserfs_ih_t * ih = REISERFS_PATH_IH (path);
+    reiserfs_key_t key;
+    int written = 0;
+    __u64 off;
+    int ret;
+
+    if (reiserfs_key_comp2 (ih, &(comingih->ih_key)))
+	    reiserfs_panic ("%s: The file to be overwritten %K must be of "
+			    "the same as the new data %K", __FUNCTION__, 
+			    &ih->ih_key, &comingih->ih_key);
+
+    if (reiserfs_ih_direct (ih)) {
+	reiserfs_key_copy(&key, &comingih->ih_key);
+	off = reiserfs_key_get_off(&comingih->ih_key);
+	off += pos * (reiserfs_ih_direct(comingih) ? 1 : fs->fs_blocksize);
+	reiserfs_key_set_off(reiserfs_key_format(&key), &key, off);
+
+	reiserfs_tree_pathrelse(path);
+	
+	fsck_tree_rewrite(fs, &ih->ih_key, 
+			  reiserfs_key_get_off(&ih->ih_key) + 1, 
+			  1 << IH_Unreachable);
+
+	ret = reiserfs_tree_search_position(fs, &key, path);
+	if (ret == DIRECTORY_FOUND || ret == FILE_NOT_FOUND ||
+	    !reiserfs_ih_ext(REISERFS_PATH_IH(path)))
+	{
+	    reiserfs_panic ("%s: The data %k, which are supposed to be "
+			    "converted, are not found", __FUNCTION__, &key);
+	}
+    }
+    
+    if (reiserfs_ih_direct (comingih)) {
+	written = fsck_tree_overwrite_by_direct(comingih, item, path);
+    } else {
+	written = fsck_tree_overwrite_by_extent(comingih, (__u32 *)item,
+						path, pos, check);
+    }
+
+    return written;
+}
+
+/* this appends file with one unformatted node pointer (since balancing
+   algorithm limitation). This pointer can be 0, or new allocated block or
+   pointer from extent item that is being inserted into tree */
+static int fsck_tree_append_file (reiserfs_ih_t * comingih, 
+				  char * item, int pos, 
+				  reiserfs_path_t * path,
+				  int check)
+{
+    __u32 * ni;
+    reiserfs_bh_t * unbh;
+    int retval;
+    reiserfs_ih_t * ih = REISERFS_PATH_IH (path);
+    __u32 bytes_number;
+    int i, count = 0;
+
+    if (!reiserfs_ih_ext (ih))
+	reiserfs_panic ("%s: Operation is not allowed for non-extent "
+			"item %k", __FUNCTION__, &ih->ih_key);
+
+    if (reiserfs_ih_direct (comingih)) {
+	unsigned int coming_len = 
+		reiserfs_leaf_ibytes (comingih, fs->fs_blocksize);
+
+	reiserfs_ih_mktail (ih);
+        reiserfs_buffer_mkdirty (REISERFS_PATH_LEAF(path));
+	
+	if (reiserfs_key_get_off (&comingih->ih_key) < 
+	    reiserfs_key_get_off (&ih->ih_key) + 
+	    fs->fs_blocksize * reiserfs_ext_count (ih)) 
+	{
+	    /* direct item fits to free space of extent item */
+	    reiserfs_panic("%s: inserting [%H], pos (%d) into [%H], "
+			   "should not get here.\n", __FUNCTION__, 
+			   comingih, pos, ih);
+	}
+
+	unbh = reiserfsck_get_new_buffer (REISERFS_PATH_LEAF (path)->b_blocknr);
+	memset (unbh->b_data, 0, unbh->b_size);
+	memcpy (unbh->b_data + reiserfs_key_get_off (&comingih->ih_key) % 
+		unbh->b_size - 1, item, coming_len);
+
+
+	reiserfs_buffer_mkdirty (unbh);
+	reiserfs_buffer_mkuptodate (unbh, 1);
+
+	ni = misc_getmem (REISERFS_EXT_SIZE);
+	d32_put (ni, 0, unbh->b_blocknr);
+	count = 1;
+	
+	reiserfs_buffer_close (unbh);
+	retval = coming_len;
+    } else {
+	/* coming item is extent item */
+
+	bytes_number = reiserfs_leaf_ibytes (ih, fs->fs_blocksize);
+	if (reiserfs_key_get_off (&comingih->ih_key) + 
+	    pos * fs->fs_blocksize != 
+	    reiserfs_key_get_off (&ih->ih_key) + bytes_number)
+	{
+	    reiserfs_panic ("%s: file %K: Cannot append extent pointers "
+			    "of the offset (%llu) at the position %llu\n", 
+			    __FUNCTION__, &comingih->ih_key, 
+			    reiserfs_key_get_off (&comingih->ih_key) + 
+			    pos * fs->fs_blocksize, 
+			    reiserfs_key_get_off (&ih->ih_key) + 
+			    bytes_number);
+	}
+	
+	/* take unformatted pointer from an extent item */
+	count = reiserfs_ext_count(comingih) - pos;
+	ni = misc_getmem (count * REISERFS_EXT_SIZE);
+	memcpy (ni, (item + pos * REISERFS_EXT_SIZE), count * REISERFS_EXT_SIZE);
+	
+	if (check) {
+	    for (i = 0; i < count; i++ ) {
+		if (still_bad_unfm_ptr (d32_get (ni, i)))
+		    misc_die ("%s: Trying to insert a pointer to illegal "
+			      "block (%u)", __FUNCTION__, d32_get (ni, i));
+		
+		mark_block_used (d32_get (ni, i), 0);
+	    }
+	}
+
+	retval = fs->fs_blocksize * count;
+    }
+
+    reiserfs_tree_insert_unit (fs, path, (const char *)ni, count * REISERFS_EXT_SIZE);
+    misc_freemem (ni);
+    return retval;
+}
+
+static int fsck_tree_insert_file (reiserfs_ih_t * ih, 
+				  char * item, 
+				  int check)
+{
+    long long int retval, written;
+    const reiserfs_key_t *p_key;
+    const reiserfs_ih_t *p_ih;
+    reiserfs_path_t path;
+    reiserfs_key_t key;
+    int count, pos;
+
+    /* Check if the SD item exists */
+    if (check && fsck_tree_insert_prep(fs, ih, 0))
+	return 0;
+    
+    pos = 0;
+    count = reiserfs_leaf_ibytes (ih, fs->fs_blocksize);
+    reiserfs_key_copy (&key, &(ih->ih_key));
+
+    while (count) {
+	if (count < 0) {
+	    reiserfs_panic ("%s: We wrote into the file %K more "
+			    "bytes than needed - count (%d) < 0.", 
+			    __FUNCTION__, &key, count);
+	}
+
+	retval = reiserfs_tree_search_position (fs, &key, &path);
+	
+	if (retval == DIRECTORY_FOUND) {
+	    reiserfs_panic ("The directory was found at the place of the file "
+			    "we are going to insert the item %k into", &key);
+	}
+
+	written = 0;
+
+	if (retval == POSITION_FOUND) {
+	    written = fsck_tree_overwrite_file (ih, item, &path, 
+						pos, check);
+	}
+
+	if (retval == POSITION_NOT_FOUND) {
+	    if (REISERFS_PATH_LEAF_POS (&path) >= 
+		reiserfs_node_items (REISERFS_PATH_LEAF(&path)))
+	    {
+		p_key = reiserfs_tree_next_key(&path, fs);
+	    } else {
+		p_key = &REISERFS_PATH_IH(&path)->ih_key;
+	    }
+	    
+	    if (path.pos_in_item == 0) {
+		/* There is nothing of this file before the found item. 
+		   Check the overlapping with the found/next item. */
+		if (fsck_tree_overwrite_prep(fs, p_key, &key, count)) {
+		    reiserfs_tree_pathrelse (&path);
+		    continue;
+		}
+		
+		/* No overlapping, insert a new item. */
+		written = fsck_tree_create_item(fs, &path, ih, 
+						item, pos, check);
+	    } else {
+		const reiserfs_key_t *next = reiserfs_tree_next_key(&path, fs);
+		
+		/* Check the overlapping with the next item. */
+		if (fsck_tree_overwrite_prep(fs, next, &key, count)) {
+		    reiserfs_tree_pathrelse (&path);
+		    continue;
+		}
+
+		/* No overlapping, convert the current into the extent and
+		   insert a new / append to the existent. */
+		p_ih = REISERFS_PATH_IH(&path);
+		written = must_there_be_a_hole (p_ih, &key);
+		
+		if (written <= 0 && reiserfs_key_direct(p_key)) {
+		    reiserfs_tree_pathrelse(&path);
+		    fsck_tree_rewrite(fs, &p_ih->ih_key, 
+				      reiserfs_key_get_off(&key) + 1, 
+				      1 << IH_Unreachable);
+		    continue;
+                }
+		
+		if (written > 0) {
+		    REISERFS_PATH_LEAF_POS (&path) ++;
+		    path.pos_in_item = 0;
+		    
+		    written = fsck_tree_create_item(fs, &path, ih, 
+						    item, pos, check);
+		} else {
+		    written = fsck_tree_append_file (ih, item, pos,
+                                                     &path, check);
+		}
+	    }
+	}
+	
+	if (retval == FILE_NOT_FOUND) {
+	    written = fsck_tree_create_item(fs, &path, ih, 
+					    item, pos, check);
+	}
+	
+	reiserfs_tree_pathrelse (&path);
+	count -= written;
+	pos += written / (reiserfs_ih_direct(ih) ? 1 : fs->fs_blocksize);
+	
+	reiserfs_key_set_off (reiserfs_key_format (&key), &key, 
+			      reiserfs_key_get_off (&key) + written);
+    }
+
+
+    /* This is a test for writing into the file. If not sure that file data 
+       are consistent after fsck_tree_insert_file - uncomment this clause: */
+
+/*    if (!check && are_file_items_correct (&ih->ih_key,
+    	(format == KEY_FORMAT_UNDEFINED) ?	
+	reiserfs_ih_get_format (ih) : format,
+    	&size, &blocks, 0, symlink, 0) == 0)
+        reiserfs_panic ("%s: item was not inserted properly\n", __FUNCTION__);*/
+
+    return reiserfs_leaf_ibytes (ih, fs->fs_blocksize);
+}
+
+
+void fsck_tree_insert_item (reiserfs_ih_t * ih,
+			    char * item, int check)
+{
+    if (reiserfs_key_get_did (&ih->ih_key) == 
+	reiserfs_key_get_oid (&ih->ih_key))
+    {
+	reiserfs_panic ("%s: The item being inserted has "
+			"the bad key %H", __FUNCTION__, ih);
+    }
+	
+    if (reiserfs_ih_stat (ih)) {
+	fsck_tree_insert_stat (ih, item, check);
+    } else if (reiserfs_ih_dir (ih)) {
+	fsck_tree_insert_entry (ih, item, check);
+    } else {
+	fsck_tree_insert_file (ih, item, check);
+    }
+}
+
+
+void fsck_tree_trav (reiserfs_filsys_t * fs, 
+		     path_func_t action1,
+		     path_func_t action2, 
+		     int depth)
+{
+    reiserfs_path_t path;
+    reiserfs_bh_t *bh;
+    int total[REISERFS_PATH_MAX] = {0,};
+    unsigned long limit, done;
+    unsigned long block;
+    int problem;
+    int pos;
+
+    memset(&path, 0, sizeof(path));
+    path.path_length = REISERFS_PATH_OFFINIT;
+    
+    done = 0;
+    limit = 1;
+    block = reiserfs_sb_get_root (fs->fs_ondisk_sb);
+
+    if (reiserfs_fs_block(fs, block) != BT_UNKNOWN) {
+	misc_die ("\nBad root block %lu. (--rebuild-tree "
+		  "did not complete)\n", block);
+    }
+
+    while ( 1 ) {
+	problem = 0;
+
+        if (REISERFS_PATH_LEAF(&path))
+            misc_die ("%s: empty slot expected.\n", __FUNCTION__);
+
+	if (fs->fs_badblocks_bm && 
+	    reiserfs_bitmap_test_bit (fs->fs_badblocks_bm, block)) 
+	{
+	    fsck_log ("%s: block %lu specified in badblock list found in "
+		      "tree, whole subtree skipped\n", __FUNCTION__, block);
+	    
+	    fsck_data (fs)->check.bad_nodes++;
+	    one_more_corruption (fs, FATAL);
+
+	    if (path.path_length == REISERFS_PATH_OFFINIT) {
+		reiserfs_buffer_close (REISERFS_PATH_LEAF(&path));
+		REISERFS_PATH_LEAF(&path) = 0;
+		break;
+	    }
+	    
+	    problem = 1;		
+	} else {
+	    REISERFS_PATH_LEAF(&path) = 
+		    reiserfs_buffer_read (fs->fs_dev, block, fs->fs_blocksize);
+	    
+	    if (REISERFS_PATH_LEAF(&path) == 0)
+		/* FIXME: handle case when read failed */
+		misc_die ("%s: unable to read %lu block on device 0x%x\n",
+			  __FUNCTION__, block, fs->fs_dev);
+
+	    if (action1)
+		if ((problem = action1 (fs, &path))) {
+		    fsck_log (" the problem in the internal node occured "
+			      "(%lu), whole subtree is skipped\n", block);
+		    
+		    fsck_check_stat(fs)->bad_nodes++;
+ 
+		    if (path.path_length == REISERFS_PATH_OFFINIT) {
+			reiserfs_buffer_close (REISERFS_PATH_LEAF(&path));
+			REISERFS_PATH_LEAF(&path) = 0;
+			break;
+		    }
+		}
+	}
+
+	/* Time to stop. */
+	if (path.path_length - REISERFS_PATH_OFFINIT == depth)
+	    problem ++;
+
+        if (problem || reiserfs_leaf_head(REISERFS_PATH_LEAF(&path))) {
+	    if ((path.path_length > REISERFS_PATH_OFFINIT) && 
+		!fsck_quiet(fs)) 
+	    {
+		util_misc_progress (fsck_progress_file (fs), 
+				    &done, limit, 1, 2);
+	    }
+	    
+            if (!problem && action2)
+                action2 (fs, &path);
+
+	    reiserfs_buffer_close (REISERFS_PATH_LEAF(&path));
+
+            while ((path.path_length > REISERFS_PATH_OFFINIT) && 
+		   (REISERFS_PATH_POS(&path, path.path_length - 1) == 
+		    total[path.path_length - 1] - 1 || problem)) 
+	    {
+                problem = 0;
+                REISERFS_PATH_LEAF(&path) = 0;
+                path.path_length --;
+                reiserfs_buffer_close (REISERFS_PATH_LEAF(&path));
+		limit /= total[path.path_length];
+		done /= total[path.path_length];
+	    }
+
+	    REISERFS_PATH_LEAF(&path) = 0;
+	    
+    	    if (path.path_length == REISERFS_PATH_OFFINIT)
+		break;
+
+	    bh = REISERFS_PATH_BUFFER(&path, path.path_length - 1);
+            REISERFS_PATH_POS(&path, path.path_length - 1) ++;
+	    
+	    pos = REISERFS_PATH_POS(&path, path.path_length - 1);
+            block = reiserfs_dc_get_nr(reiserfs_int_at(bh, pos));
+	    
+            continue;
+	}
+	
+        total[path.path_length] = 
+		reiserfs_node_items (REISERFS_PATH_LEAF(&path)) + 1;
+	
+	limit *= total[path.path_length];
+	done = done * total[path.path_length];
+	
+        REISERFS_PATH_LEAF_POS(&path) = 0;
+        block = reiserfs_dc_get_nr (reiserfs_int_at (REISERFS_PATH_LEAF(&path), 0)); 
+	path.path_length ++;
+    }
+}
diff --git a/utils/mkfs/Makefile.am b/utils/mkfs/Makefile.am
new file mode 100644
index 0000000..fbcd7f1
--- /dev/null
+++ b/utils/mkfs/Makefile.am
@@ -0,0 +1,27 @@
+sbin_PROGRAMS		= mkfs.reiserfs
+
+man_MANS		= mkfs.reiserfs.8
+EXTRA_DIST		= mkfs.reiserfs.8
+
+mkfs_reiserfs_SOURCES	= mkreiserfs.c
+mkfs_reiserfs_LDADD	= $(top_builddir)/libreiserfs/libreiserfs-static.a \
+			  $(top_builddir)/libutil/libutil-static.a         \
+			  $(top_builddir)/libmisc/libmisc-static.a
+mkfs_reiserfs_LDFLAGS	= @PROGS_LDFLAGS@
+mkfs_reiserfs_CFLAGS	= @CFLAGS@
+
+INCLUDES		= -I$(top_srcdir)/include
+
+uninstall-mkreiserfs:
+	if test -f $(DESTDIR)$(sbindir)/mkreiserfs; then \
+		rm -f $(DESTDIR)$(sbindir)/mkreiserfs; \
+	fi;
+
+install-mkreiserfs:
+	if test -f $(DESTDIR)$(sbindir)/mkfs.reiserfs; then \
+		rm -f $(DESTDIR)$(sbindir)/mkreiserfs; \
+		ln $(DESTDIR)$(sbindir)/mkfs.reiserfs $(DESTDIR)$(sbindir)/mkreiserfs; \
+	fi;
+
+install-data-local: install-mkreiserfs
+uninstall-local: uninstall-mkreiserfs
diff --git a/utils/mkfs/Makefile.in b/utils/mkfs/Makefile.in
new file mode 100644
index 0000000..37ab5cd
--- /dev/null
+++ b/utils/mkfs/Makefile.in
@@ -0,0 +1,501 @@
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+SOURCES = $(mkfs_reiserfs_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+sbin_PROGRAMS = mkfs.reiserfs$(EXEEXT)
+subdir = utils/mkfs
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)"
+sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(sbin_PROGRAMS)
+am_mkfs_reiserfs_OBJECTS = mkfs_reiserfs-mkreiserfs.$(OBJEXT)
+mkfs_reiserfs_OBJECTS = $(am_mkfs_reiserfs_OBJECTS)
+mkfs_reiserfs_DEPENDENCIES =  \
+	$(top_builddir)/libreiserfs/libreiserfs-static.a \
+	$(top_builddir)/libutil/libutil-static.a \
+	$(top_builddir)/libmisc/libmisc-static.a
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(mkfs_reiserfs_SOURCES)
+DIST_SOURCES = $(mkfs_reiserfs_SOURCES)
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PROGS_LDFLAGS = @PROGS_LDFLAGS@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+man_MANS = mkfs.reiserfs.8
+EXTRA_DIST = mkfs.reiserfs.8
+mkfs_reiserfs_SOURCES = mkreiserfs.c
+mkfs_reiserfs_LDADD = $(top_builddir)/libreiserfs/libreiserfs-static.a \
+			  $(top_builddir)/libutil/libutil-static.a         \
+			  $(top_builddir)/libmisc/libmisc-static.a
+
+mkfs_reiserfs_LDFLAGS = @PROGS_LDFLAGS@
+mkfs_reiserfs_CFLAGS = @CFLAGS@
+INCLUDES = -I$(top_srcdir)/include
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  utils/mkfs/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  utils/mkfs/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-sbinPROGRAMS: $(sbin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(sbindir)" || $(mkdir_p) "$(DESTDIR)$(sbindir)"
+	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(sbindir)/$$f'"; \
+	   $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(sbindir)/$$f" || exit 1; \
+	  else :; fi; \
+	done
+
+uninstall-sbinPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(sbindir)/$$f"; \
+	done
+
+clean-sbinPROGRAMS:
+	-test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
+mkfs.reiserfs$(EXEEXT): $(mkfs_reiserfs_OBJECTS) $(mkfs_reiserfs_DEPENDENCIES) 
+	@rm -f mkfs.reiserfs$(EXEEXT)
+	$(LINK) $(mkfs_reiserfs_LDFLAGS) $(mkfs_reiserfs_OBJECTS) $(mkfs_reiserfs_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkfs_reiserfs-mkreiserfs.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+mkfs_reiserfs-mkreiserfs.o: mkreiserfs.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mkfs_reiserfs_CFLAGS) $(CFLAGS) -MT mkfs_reiserfs-mkreiserfs.o -MD -MP -MF "$(DEPDIR)/mkfs_reiserfs-mkreiserfs.Tpo" -c -o mkfs_reiserfs-mkreiserfs.o `test -f 'mkreiserfs.c' || echo '$(srcdir)/'`mkreiserfs.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/mkfs_reiserfs-mkreiserfs.Tpo" "$(DEPDIR)/mkfs_reiserfs-mkreiserfs.Po"; else rm -f "$(DEPDIR)/mkfs_reiserfs-mkreiserfs.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mkreiserfs.c' object='mkfs_reiserfs-mkreiserfs.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mkfs_reiserfs_CFLAGS) $(CFLAGS) -c -o mkfs_reiserfs-mkreiserfs.o `test -f 'mkreiserfs.c' || echo '$(srcdir)/'`mkreiserfs.c
+
+mkfs_reiserfs-mkreiserfs.obj: mkreiserfs.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mkfs_reiserfs_CFLAGS) $(CFLAGS) -MT mkfs_reiserfs-mkreiserfs.obj -MD -MP -MF "$(DEPDIR)/mkfs_reiserfs-mkreiserfs.Tpo" -c -o mkfs_reiserfs-mkreiserfs.obj `if test -f 'mkreiserfs.c'; then $(CYGPATH_W) 'mkreiserfs.c'; else $(CYGPATH_W) '$(srcdir)/mkreiserfs.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/mkfs_reiserfs-mkreiserfs.Tpo" "$(DEPDIR)/mkfs_reiserfs-mkreiserfs.Po"; else rm -f "$(DEPDIR)/mkfs_reiserfs-mkreiserfs.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mkreiserfs.c' object='mkfs_reiserfs-mkreiserfs.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mkfs_reiserfs_CFLAGS) $(CFLAGS) -c -o mkfs_reiserfs-mkreiserfs.obj `if test -f 'mkreiserfs.c'; then $(CYGPATH_W) 'mkreiserfs.c'; else $(CYGPATH_W) '$(srcdir)/mkreiserfs.c'; fi`
+uninstall-info-am:
+install-man8: $(man8_MANS) $(man_MANS)
+	@$(NORMAL_INSTALL)
+	test -z "$(man8dir)" || $(mkdir_p) "$(DESTDIR)$(man8dir)"
+	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+	for i in $$l2; do \
+	  case "$$i" in \
+	    *.8*) list="$$list $$i" ;; \
+	  esac; \
+	done; \
+	for i in $$list; do \
+	  if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+	  else file=$$i; fi; \
+	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+	  case "$$ext" in \
+	    8*) ;; \
+	    *) ext='8' ;; \
+	  esac; \
+	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
+	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+	  echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+	  $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+	done
+uninstall-man8:
+	@$(NORMAL_UNINSTALL)
+	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+	for i in $$l2; do \
+	  case "$$i" in \
+	    *.8*) list="$$list $$i" ;; \
+	  esac; \
+	done; \
+	for i in $$list; do \
+	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+	  case "$$ext" in \
+	    8*) ;; \
+	    *) ext='8' ;; \
+	  esac; \
+	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
+	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+	  echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+	  rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS)
+installdirs:
+	for dir in "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-man
+
+install-exec-am: install-sbinPROGRAMS
+
+install-info: install-info-am
+
+install-man: install-man8
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-local uninstall-man \
+	uninstall-sbinPROGRAMS
+
+uninstall-man: uninstall-man8
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-sbinPROGRAMS ctags distclean distclean-compile \
+	distclean-generic distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-data-local install-exec \
+	install-exec-am install-info install-info-am install-man \
+	install-man8 install-sbinPROGRAMS install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-info-am uninstall-local uninstall-man \
+	uninstall-man8 uninstall-sbinPROGRAMS
+
+
+uninstall-mkreiserfs:
+	if test -f $(DESTDIR)$(sbindir)/mkreiserfs; then \
+		rm -f $(DESTDIR)$(sbindir)/mkreiserfs; \
+	fi;
+
+install-mkreiserfs:
+	if test -f $(DESTDIR)$(sbindir)/mkfs.reiserfs; then \
+		rm -f $(DESTDIR)$(sbindir)/mkreiserfs; \
+		ln $(DESTDIR)$(sbindir)/mkfs.reiserfs $(DESTDIR)$(sbindir)/mkreiserfs; \
+	fi;
+
+install-data-local: install-mkreiserfs
+uninstall-local: uninstall-mkreiserfs
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/mkreiserfs/mkreiserfs.8 b/utils/mkfs/mkfs.reiserfs.8
similarity index 79%
rename from mkreiserfs/mkreiserfs.8
rename to utils/mkfs/mkfs.reiserfs.8
index f6b45ae..9c3db4d 100644
--- a/mkreiserfs/mkreiserfs.8
+++ b/utils/mkfs/mkfs.reiserfs.8
@@ -1,11 +1,11 @@
 .\" -*- nroff -*-
 .\" Copyright 1996-2004 Hans Reiser.
 .\" 
-.TH MKREISERFS 8 "February 2004" "Reiserfsprogs-3.6.19"
+.TH mkfs.reiserfs 8 "February 2004" "Reiserfsprogs-3.6.19"
 .SH NAME
-mkreiserfs \- The create tool for the Linux ReiserFS filesystem.
+mkfs.reiserfs \- The create tool for the Linux ReiserFS filesystem.
 .SH SYNOPSIS
-.B mkreiserfs
+.B mkfs.reiserfs
 [ \fB-dfV\fR ]
 [ \fB-b\fR | \fB--block-size \fIN\fR ]
 [ \fB-h\fR | \fB--hash \fIHASH\fR ]
@@ -20,7 +20,7 @@
 [ \fB-B\fR | \fB--badblocks\fR \fIfile\fR ] \fI device\fR
 [ \fIfilesystem-size\fR ]
 .SH DESCRIPTION
-\fBmkreiserfs\fR creates a Linux ReiserFS filesystem on a device (usually a disk
+\fBmkfs.reiserfs\fR creates a Linux ReiserFS filesystem on a device (usually a disk
 partition).
 .TP
 .I device
@@ -28,7 +28,7 @@
 /dev/hdXX for an IDE disk partition or /dev/sdXX for a SCSI disk partition).
 .TP
 .I filesystem-size
-is the size in blocks of the filesystem. If omitted, \fBmkreiserfs\fR will
+is the size in blocks of the filesystem. If omitted, \fBmkfs.reiserfs\fR will
 automatically set it.
 .SH OPTIONS
 .TP
@@ -42,7 +42,7 @@
 .TP
 \fB--format \fIFORMAT\fR
 \fIFORMAT\fR specifies the format for the new filsystem. Choose format 3.5 or
-3.6. If none is specified \fBmkreiserfs\fR will create format 3.6 if running
+3.6. If none is specified \fBmkfs.reiserfs\fR will create format 3.6 if running
 kernel is 2.4 or higher, and format 3.5 if kernel 2.2 is running, and will
 refuse creation under all other kernels.
 .TP
@@ -50,17 +50,17 @@
 Sets  the  Universally  Unique  IDentifier  of  the  filesystem  to  \fIUUID\fR 
 (see  also  \fBuuidgen(8)\fR).  The  format  of  the  \fIUUID\fR  is  a  series 
 of  hex  digits separated by hypthens, e.g.: "c1b9d5a2-f162-11cf-9ece-0020afc76f16".
-If  the option  is skipped,  \fBmkreiserfs\fR  will by default generate a new
+If  the option  is skipped,  \fBmkfs.reiserfs\fR  will by default generate a new
 \fIUUID\fR.
 .TP
 \fB-l\fR | \fB--label \fILABEL\fR
 Sets  the  volume  label  of  the filesystem. \fILABEL\fR can at most be 16
-characters long; if it is longer than 16 characters, \fBmkreiserfs\fR will 
+characters long; if it is longer than 16 characters, \fBmkfs.reiserfs\fR will 
 truncate it.
 .TP
 \fB-q\fR | \fB--quiet \fR
-Sets \fBmkreiserfs\fR to work quietly without producing messages, progress or
-questions. It is useful, but only for use by end users, if you run \fBmkreiserfs\fR 
+Sets \fBmkfs.reiserfs\fR to work quietly without producing messages, progress or
+questions. It is useful, but only for use by end users, if you run \fBmkfs.reiserfs\fR 
 in a script.
 .TP
 \fB-j\fR | \fB--journal-device \fIFILE\fR
@@ -91,25 +91,25 @@
 \fB/sbin/badblocks -b block-size device\fR.
 .TP
 \fB-f\fR
-Forces \fBmkreiserfs\fR to continue even when the device is the whole disk, 
+Forces \fBmkfs.reiserfs\fR to continue even when the device is the whole disk, 
 looks mounted, or is not a block device. If \fB-f\fR is specified more than
 once, it allows the user to avoid asking for confirmation.
 .TP
 \fB-d\fR
-Sets \fBmkreiserfs\fR to print debugging information during \fBmkreiserfs\fR.
+Sets \fBmkfs.reiserfs\fR to print debugging information during \fBmkfs.reiserfs\fR.
 .TP
 \fB-V\fR
 Prints the version and then exits.
 
 .SH AUTHOR
 This version of
-.B mkreiserfs
+.B mkfs.reiserfs
 has been written by Edward Shishkin <edward@namesys.com>.
 .SH BUGS
 Please report bugs to the ReiserFS developers <reiserfs-dev@namesys.com>, providing 
 as much information as possible--your hardware, kernel, patches, settings, all printed
 messages; check the syslog file for any related information.
 .SH SEE ALSO
-.BR reiserfsck (8),
-.BR debugreiserfs (8),
-.BR reiserfstune (8)
+.BR fsck.reiserfs (8),
+.BR debugfs.reiserfs (8),
+.BR tunefs.reiserfs (8)
diff --git a/mkreiserfs/mkreiserfs.c b/utils/mkfs/mkreiserfs.c
similarity index 70%
rename from mkreiserfs/mkreiserfs.c
rename to utils/mkfs/mkreiserfs.c
index 8a49317..fe49b84 100644
--- a/mkreiserfs/mkreiserfs.c
+++ b/utils/mkfs/mkreiserfs.c
@@ -11,23 +11,28 @@
    and root blocks. bitmap blocks are interleaved across the disk, 
    mainly to make resizing faster. */
 
-#define _GNU_SOURCE
-
-#ifndef HAVE_CONFIG_H
-#  include "config.h"
+#ifdef HAVE_CONFIG_H
+# include "config.h"
 #endif
 
-#include "io.h"
-#include "misc.h"
-#include "reiserfs_lib.h"
-
-#include "../version.h"
+#include "reiserfs/libreiserfs.h"
+#include "misc/device.h"
+#include "util/device.h"
+#include "util/misc.h"
+#include "util/credits.h"
+#include "util/print.h"
+#include "util/badblock.h"
 
 #include <getopt.h>
 #include <stdarg.h>
-#include <string.h>
+#include <sys/stat.h>
+#include <time.h>
+#include <unistd.h>
 #include <errno.h>
-#include <sys/utsname.h>
+
+#ifdef HAVE_UNAME
+# include <sys/utsname.h>
+#endif
 
 #if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)
 #  include <uuid/uuid.h>
@@ -40,17 +45,16 @@
 	__attribute__ ((format (printf, 1, 2)));
 
 static void message( const char * fmt, ... ) {
-    char *buf;
+    char buf[4096];
     va_list args;
 	
-    buf = NULL;
+    buf[0] = '\0';
     va_start( args, fmt );
-    vasprintf( &buf, fmt, args );
+    vsprintf( buf, fmt, args );
     va_end( args );
 
-    if( buf ) {
+    if( buf[0] != '\0') {
 	    fprintf( stderr, "%s: %s\n", program_name, buf );
-	    free( buf );
     }
 }
 
@@ -93,8 +97,8 @@
 int Hash = DEFAULT_HASH;
 int Offset = 0;
 char * Format;
-unsigned char UUID[16];
-unsigned char * LABEL = NULL;
+char UUID[16];
+char * LABEL = NULL;
 char * badblocks_file;
 
 enum mkfs_mode {
@@ -108,9 +112,9 @@
 /* form super block (old one) */
 static void make_super_block (reiserfs_filsys_t * fs)
 {
-    set_sb_umount_state (fs->fs_ondisk_sb, FS_CLEANLY_UMOUNTED);
-    set_sb_tree_height (fs->fs_ondisk_sb, 2);
-    set_sb_hash_code (fs->fs_ondisk_sb, Hash);
+    reiserfs_sb_set_umount (fs->fs_ondisk_sb, FS_CLEANLY_UMOUNTED);
+    reiserfs_sb_set_height (fs->fs_ondisk_sb, 2);
+    reiserfs_sb_set_hash (fs->fs_ondisk_sb, Hash);
     if (fs->fs_format == REISERFS_FORMAT_3_6) {
 #if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)
         if (uuid_is_null(UUID))
@@ -122,23 +126,23 @@
 	    if (strlen (LABEL) > 16)
 	        reiserfs_warning (stderr, "\nSpecified LABEL is longer then 16 "
 		"characters, will be truncated\n\n");
-	    strncpy (fs->fs_ondisk_sb->s_label, LABEL, 16);
+	    strncpy ((char *)fs->fs_ondisk_sb->s_label, LABEL, 16);
 	}
-	set_sb_v2_flag (fs->fs_ondisk_sb, reiserfs_attrs_cleared);
+	reiserfs_sb_mkflag (fs->fs_ondisk_sb, reiserfs_attrs_cleared);
     }
 
-    if (!is_reiserfs_jr_magic_string (fs->fs_ondisk_sb) ||
+    if (!reiserfs_super_jr_magic (fs->fs_ondisk_sb) ||
 	strcmp (fs->fs_file_name, fs->fs_j_file_name))
 	/* either standard journal (and we leave all new fields to be 0) or
 	   journal is created on separate device so there is no space on data
 	   device which can be used as a journal */
-	set_sb_reserved_for_journal (fs->fs_ondisk_sb, 0);
+	reiserfs_sb_set_reserved (fs->fs_ondisk_sb, 0);
     else
-	set_sb_reserved_for_journal (fs->fs_ondisk_sb,
-		get_jp_journal_size (sb_jp (fs->fs_ondisk_sb)) + 1);
+	reiserfs_sb_set_reserved (fs->fs_ondisk_sb,
+		reiserfs_jp_get_size (reiserfs_sb_jp (fs->fs_ondisk_sb)) + 1);
 
     if (fs->fs_badblocks_bm)
-	set_sb_free_blocks(fs->fs_ondisk_sb, get_sb_free_blocks(fs->fs_ondisk_sb) - 
+	reiserfs_sb_set_free(fs->fs_ondisk_sb, reiserfs_sb_get_free(fs->fs_ondisk_sb) - 
 			   fs->fs_badblocks_bm->bm_set_bits);
 }
 
@@ -146,9 +150,9 @@
 /* wipe out first 64 k of a device and both possible reiserfs super block */
 static void invalidate_other_formats (int dev)
 {
-    struct buffer_head * bh;
+    reiserfs_bh_t * bh;
     
-    bh = bread (dev, 0, 64 * 1024);
+    bh = reiserfs_buffer_read (dev, 0, 64 * 1024);
     if (!bh) {
 	    reiserfs_exit(1, "Unable to read first blocks of the device");
     }
@@ -157,36 +161,36 @@
 #else
     memset (bh->b_data, 0, bh->b_size);
 #endif
-    mark_buffer_uptodate (bh, 1);
-    mark_buffer_dirty (bh);
-    bwrite (bh);
-    brelse (bh);
+    reiserfs_buffer_mkuptodate (bh, 1);
+    reiserfs_buffer_mkdirty (bh);
+    reiserfs_buffer_write (bh);
+    reiserfs_buffer_close (bh);
 }
 
 
 void zero_journal (reiserfs_filsys_t * fs)
 {
     unsigned long start, len, done;
-    struct buffer_head * bh;
+    reiserfs_bh_t * bh;
     unsigned int i;
 
     fprintf (stdout, "Initializing journal - ");
 
-    start = get_jp_journal_1st_block (sb_jp (fs->fs_ondisk_sb));
-    len = get_jp_journal_size (sb_jp (fs->fs_ondisk_sb));
+    start = reiserfs_jp_get_start (reiserfs_sb_jp (fs->fs_ondisk_sb));
+    len = reiserfs_jp_get_size (reiserfs_sb_jp (fs->fs_ondisk_sb));
 
     done = 0;
     for (i = 0; i < len; i ++) {
-        print_how_far (stdout, &done, len, 1, 1/*be quiet*/);
-        bh = getblk (fs->fs_journal_dev, start + i, fs->fs_blocksize);
+        util_misc_progress (stdout, &done, len, 1, 2);
+        bh = reiserfs_buffer_open (fs->fs_journal_dev, start + i, fs->fs_blocksize);
 	if (!bh) {
-		reiserfs_exit(1, "zero_journal: getblk failed");
+		reiserfs_exit(1, "zero_journal: reiserfs_buffer_open failed");
 	}
         memset (bh->b_data, 0, bh->b_size);
-        mark_buffer_dirty (bh);
-        mark_buffer_uptodate (bh, 1);
-        bwrite (bh);
-        brelse (bh);
+        reiserfs_buffer_mkdirty (bh);
+        reiserfs_buffer_mkuptodate (bh, 1);
+        reiserfs_buffer_write (bh);
+        reiserfs_buffer_close (bh);
     }
 
     fprintf (stdout, "\n");
@@ -197,11 +201,14 @@
 /* this only sets few first bits in bitmap block. Fills not initialized fields
    of super block (root block and bitmap block numbers) */
 static void make_bitmap (reiserfs_filsys_t * fs) {
-    struct reiserfs_super_block * sb = fs->fs_ondisk_sb;
+    reiserfs_sb_t * sb;
     unsigned int i;
     unsigned long block;
+    unsigned long count, bmap_nr;
     int marked;
     
+    sb = fs->fs_ondisk_sb;
+    count = reiserfs_sb_get_blocks (sb);
     marked = 0;
 
     /* mark skipped area and super block */
@@ -211,7 +218,7 @@
     }
     
     if (fs->fs_badblocks_bm) {
-	for (i = 0; i < get_sb_block_count (sb); i ++) {
+	for (i = 0; i < count; i ++) {
 	    if (reiserfs_bitmap_test_bit (fs->fs_badblocks_bm, i)) {
 		reiserfs_bitmap_set_bit (fs->fs_bitmap2, i);
 		marked ++;
@@ -221,99 +228,96 @@
 
     /* mark bitmaps as used */
     block = fs->fs_super_bh->b_blocknr + 1;
+    
+    bmap_nr = reiserfs_bmap_nr(count, fs->fs_blocksize);
 
-    for (i = 0; i < get_sb_bmap_nr (sb); i ++) {
+    for (i = 0; i < bmap_nr; i ++) {
 	reiserfs_bitmap_set_bit (fs->fs_bitmap2, block);
 	marked ++;
-	if (spread_bitmaps (fs))
+	if (reiserfs_bitmap_spread (fs))
 	    block = (block / (fs->fs_blocksize * 8) + 1) * 
 		    (fs->fs_blocksize * 8);
 	else
 	    block ++;
     }
 
-    if (!get_size_of_journal_or_reserved_area (fs->fs_ondisk_sb))
+    if (!reiserfs_journal_hostsize (fs->fs_ondisk_sb))
 	/* root block follows directly super block and first bitmap */
 	block = fs->fs_super_bh->b_blocknr + 1 + 1;
     else {
 	/* makr journal blocks as used */
-	for (i = 0; i <= get_jp_journal_size (sb_jp (sb)); i ++) {
+	for (i = 0; i <= reiserfs_jp_get_size (reiserfs_sb_jp (sb)); i ++) {
 	    reiserfs_bitmap_set_bit (fs->fs_bitmap2,
-				     i + get_jp_journal_1st_block (sb_jp (sb)));
+				     i + reiserfs_jp_get_start (reiserfs_sb_jp (sb)));
 	    marked ++;
 	}
-	block = get_jp_journal_1st_block (sb_jp (sb)) + i;
+	block = reiserfs_jp_get_start (reiserfs_sb_jp (sb)) + i;
     }
 
     /*get correct block - not journal nor bitmap*/
-    while (block_of_journal (fs, block) || block_of_bitmap (fs, block)) {
+    while (reiserfs_journal_block (fs, block) || reiserfs_bitmap_block (fs, block)) {
 	block++;
     }
 
-    while ((block < get_sb_block_count (sb)) && 
-	   reiserfs_bitmap_test_bit (fs->fs_bitmap2, block)) 
+    while ((block < count) && reiserfs_bitmap_test_bit (fs->fs_bitmap2, block))
     {
     	block++;
     }
 
-    if (block >= get_sb_block_count (sb))
+    if (block >= count)
     	reiserfs_exit(1, "mkreiserfs: too many bad blocks");
 
     reiserfs_bitmap_set_bit (fs->fs_bitmap2, block);
     marked ++;
 
-    set_sb_root_block (sb, block);
-    set_sb_free_blocks (sb, get_sb_block_count (sb) - marked);
+    reiserfs_sb_set_root (sb, block);
+    reiserfs_sb_set_free (sb, count - marked);
 }
 
-
-static void set_root_dir_nlink (struct item_head * ih, void * sd)
-{
+static void set_root_dir_nlink (reiserfs_ih_t *ih, void *sd) {
     __u32 nlink;
 
     nlink = 3;
-    set_sd_nlink (ih, sd, &nlink);
+    reiserfs_stat_set_nlink (ih, sd, &nlink);
 }
 
-
 /* form the root block of the tree (the block head, the item head, the
    root directory) */
 static void make_root_block (reiserfs_filsys_t * fs)
 {
-    struct reiserfs_super_block * sb;
-    struct buffer_head * bh;
+    reiserfs_sb_t * sb;
+    reiserfs_bh_t * bh;
 
 
     sb = fs->fs_ondisk_sb;
     /* get memory for root block */
-    bh = getblk (fs->fs_dev, get_sb_root_block (sb), get_sb_block_size (sb));
+    bh = reiserfs_buffer_open (fs->fs_dev, reiserfs_sb_get_root (sb), 
+			       reiserfs_sb_get_blksize (sb));
     
     if (!bh) {
-	    reiserfs_exit(1, "getblk failed");
+	    reiserfs_exit(1, "reiserfs_buffer_open failed");
     }
 
-    mark_buffer_uptodate (bh, 1);
+    reiserfs_buffer_mkuptodate (bh, 1);
 
-    make_empty_leaf (bh);
-    make_sure_root_dir_exists (fs, set_root_dir_nlink, 0);
-    brelse (bh);
+    reiserfs_leaf_mkempty (bh);
+    reiserfs_tree_root (fs, set_root_dir_nlink, 0);
+    reiserfs_buffer_close (bh);
 
-    mark_objectid_used (fs, REISERFS_ROOT_PARENT_OBJECTID);
-    mark_objectid_used (fs, REISERFS_ROOT_OBJECTID);
+    reiserfs_objmap_set (fs, REISERFS_ROOT_PARENT_OBJECTID);
+    reiserfs_objmap_set (fs, REISERFS_ROOT_OBJECTID);
 }
 
 
 
 static void report (reiserfs_filsys_t * fs, char * j_filename)
 {
-//    print_block (stdout, fs, fs->fs_super_bh);
-    struct reiserfs_super_block * sb = 
-	(struct reiserfs_super_block *)(fs->fs_super_bh->b_data);
+    reiserfs_sb_t * sb = (reiserfs_sb_t *)(fs->fs_super_bh->b_data);
 
     struct stat st;
     dev_t rdev;
 
-    if (!is_any_reiserfs_magic_string (sb))
+    if (!reiserfs_super_magic (sb))
 	    return;
 
     if (fstat (fs->fs_super_bh->b_dev, &st) == -1) {
@@ -326,7 +330,7 @@
 	    reiserfs_warning (stdout, "Block %lu (0x%x) contains super block. ",
 			      fs->fs_super_bh->b_blocknr, rdev);
     }
-    switch (get_reiserfs_format (sb)) {
+    switch (reiserfs_super_format (sb)) {
     case REISERFS_FORMAT_3_5:
 	    reiserfs_warning (stdout, " Format 3.5 with ");
 	    break;
@@ -334,57 +338,57 @@
 	    reiserfs_warning (stdout, "Format 3.6 with ");
 	    break;
     }
-    if (is_reiserfs_jr_magic_string (sb))
+    if (reiserfs_super_jr_magic (sb))
 	    reiserfs_warning (stdout, "non-");
     reiserfs_warning (stdout, "standard journal\n");
     reiserfs_warning (stdout, "Count of blocks on the device: %u\n", 
-		      get_sb_block_count (sb));
+		      reiserfs_sb_get_blocks (sb));
     reiserfs_warning (stdout, "Number of blocks consumed by mkreiserfs "
-		      "formatting process: %u\n", get_sb_block_count (sb) 
-		      - get_sb_free_blocks (sb));
+		      "formatting process: %u\n", reiserfs_sb_get_blocks (sb) 
+		      - reiserfs_sb_get_free (sb));
     if (mode & DEBUG_MODE)
 	    reiserfs_warning (stdout, "Free blocks: %u\n", 
-			      get_sb_free_blocks (sb));
-    reiserfs_warning (stdout, "Blocksize: %d\n", get_sb_block_size (sb));
+			      reiserfs_sb_get_free (sb));
+    reiserfs_warning (stdout, "Blocksize: %d\n", reiserfs_sb_get_blksize (sb));
     reiserfs_warning (stdout, "Hash function used to sort names: %s\n",
-		      code2name (get_sb_hash_code (sb)));
+		      reiserfs_hash_name (reiserfs_sb_get_hash (sb)));
     if (mode & DEBUG_MODE) {
-        reiserfs_warning (stdout, "Number of bitmaps: %u\n", get_sb_bmap_nr (sb));
-        reiserfs_warning (stdout, "Root block: %u\n", get_sb_root_block (sb));
-        reiserfs_warning (stdout, "Tree height: %d\n", get_sb_tree_height (sb));
+        reiserfs_warning (stdout, "Number of bitmaps: %u\n", reiserfs_sb_get_bmaps (sb));
+        reiserfs_warning (stdout, "Root block: %u\n", reiserfs_sb_get_root (sb));
+        reiserfs_warning (stdout, "Tree height: %d\n", reiserfs_sb_get_height (sb));
         reiserfs_warning (stdout, "Objectid map size %d, max %d\n", 
-			  get_sb_oid_cursize (sb), get_sb_oid_maxsize (sb));
+			  reiserfs_sb_get_mapcur (sb), reiserfs_sb_get_mapmax (sb));
         reiserfs_warning (stdout, "Journal parameters:\n");
-        print_journal_params (stdout, sb_jp (sb));
+        reiserfs_journal_print_params (stdout, reiserfs_sb_jp (sb));
     } else {
         if (j_filename && strcmp (j_filename, fs->fs_file_name)) 
 		reiserfs_warning (stdout, "Journal Device [0x%x]\n", 
-				  get_jp_journal_dev (sb_jp (sb)));
+				  reiserfs_jp_get_dev (reiserfs_sb_jp (sb)));
 	
         reiserfs_warning (stdout, "Journal Size %u blocks (first block %u)\n",
-			  get_jp_journal_size (sb_jp (sb)) + 1,
-			  get_jp_journal_1st_block (sb_jp (sb)));
+			  reiserfs_jp_get_size (reiserfs_sb_jp (sb)) + 1,
+			  reiserfs_jp_get_start (reiserfs_sb_jp (sb)));
         reiserfs_warning (stdout, "Journal Max transaction length %u\n", 
-			  get_jp_journal_max_trans_len (sb_jp (sb)));
+			  reiserfs_jp_get_tlen (reiserfs_sb_jp (sb)));
     }
 
     if (j_filename && strcmp (j_filename, fs->fs_file_name)) {
 	    reiserfs_warning (stdout, "Space on this device reserved by journal: "
-			      "%u\n", get_sb_reserved_for_journal (sb));
+			      "%u\n", reiserfs_sb_get_reserved (sb));
     }
     
     if (mode & DEBUG_MODE) {
 	reiserfs_warning (stdout, "Filesystem state 0x%x\n", 
-			  get_sb_fs_state (sb));
+			  reiserfs_sb_get_state (sb));
 	reiserfs_warning (stdout, "sb_version %u\n", 
-			  get_sb_version (sb));
+			  reiserfs_sb_get_version (sb));
     }
 
-    if (get_reiserfs_format (sb) == REISERFS_FORMAT_3_6) {
+    if (reiserfs_super_format (sb) == REISERFS_FORMAT_3_6) {
         reiserfs_warning (stdout, "inode generation number: %u\n", 
-			  get_sb_v2_inode_generation (sb));
+			  reiserfs_sb_get_gen (sb));
         reiserfs_warning (stdout, "UUID: %U\n", sb->s_uuid);
-        if (strcmp (sb->s_label, ""))
+        if (strcmp ((char *)sb->s_label, ""))
 		reiserfs_warning (stdout, "LABEL: %s\n", sb->s_label);
     }
 
@@ -397,11 +401,11 @@
 static void set_hash_function (char * str)
 {
     if (!strcmp (str, "tea"))
-	    Hash = TEA_HASH;
+	    Hash = REISERFS_HASH_TEA;
     else if (!strcmp (str, "rupasov"))
-	    Hash = YURA_HASH;
+	    Hash = REISERFS_HASH_YURA;
     else if (!strcmp (str, "r5"))
-	    Hash = R5_HASH;
+	    Hash = REISERFS_HASH_R5;
     else
 	    message("wrong hash type specified. Using default");
 }
@@ -439,7 +443,7 @@
 {
     *b_size = str2int (str);
       
-    if (!is_blocksize_correct (*b_size))
+    if (!reiserfs_fs_blksize_check (*b_size))
         reiserfs_exit (1, "%s: wrong blocksize %s specified, "
 		       "only power of 2 from 512-8192 interval "
 		       "are supported", program_name, str);
@@ -452,20 +456,20 @@
 }
 
 
-/* reiserfs_create_journal will check this */
+/* reiserfs_journal_create will check this */
 static void set_journal_device_size (char * str)
 {
     Journal_size = str2int (str);
 /*
     if (Journal_size < JOURNAL_MIN_SIZE)
-		die ("%s: wrong journal size specified: %lu. Should be at least %u",
+		misc_die ("%s: wrong journal size specified: %lu. Should be at least %u",
 			 program_name, 
 			 Journal_size + 1, JOURNAL_MIN_SIZE + 1);
 */
 }
 
 
-/* reiserfs_create_journal will check this */
+/* reiserfs_journal_create will check this */
 static void set_offset_in_journal_device (char * str)
 {
 	Offset = str2int( str );
@@ -478,8 +482,8 @@
 	return 0;
     
     if (Journal_size && Journal_size != 
-	journal_default_size(REISERFS_DISK_OFFSET_IN_BYTES / blocksize, 
-			     blocksize) + 1)
+	reiserfs_journal_default(REISERFS_DISK_OFFSET_IN_BYTES / blocksize, 
+				 blocksize) + 1)
 	/* journal size is set and it is not default size */
 	return 0;
     
@@ -495,8 +499,11 @@
    otherwise - mkreiserfs fails */
 static int select_format (void)
 {
+#ifdef HAVE_UNAME
 	struct utsname sysinfo;
-
+#endif
+	char *release = NULL;
+	
 	if (Format) {
 		if (!strcmp (Format, "3.5"))
 			return REISERFS_FORMAT_3_5;
@@ -508,6 +515,7 @@
 		return REISERFS_FORMAT_3_6;
 	}
 	
+#ifdef HAVE_UNAME
 	reiserfs_warning (stdout, "Guessing about desired format.. ");
 	
 	if (uname (&sysinfo) == -1) {
@@ -516,11 +524,20 @@
 	}
 	
 	reiserfs_warning(stdout, "Kernel %s is running.\n", sysinfo.release);
+	release = sysinfo.release;
+#endif
+	if (!release) {
+		message("Failed to detect the running kernel. To create "
+			"reiserfs filesystem\nspecify desired format with "
+			"--format. Choose 3.5 if you use 2.2 kernel;\n3.6 "
+			"if 2.4 or higher.");
+		exit(1);
+	}
 	
-	if (strncmp (sysinfo.release, "2.4", 3) >= 0)
+	if (strncmp (release, "2.4", 3) >= 0)
 		return REISERFS_FORMAT_3_6;
 
-	if (strncmp (sysinfo.release, "2.2", 3)) {
+	if (strncmp (release, "2.2", 3)) {
 		message( "You should run either 2.2 or 2.4 or higher to be able "
 		    "to create reiserfs filesystem or specify desired format with --format");
 		exit (1);
@@ -530,6 +547,27 @@
     return REISERFS_FORMAT_3_5;
 }
 
+/* Reads the "CREDITS" file and prints one paragraph from it. */
+static void mkfs_print_credit(FILE *out) {
+    char *line;
+    __u32 num1, num2;
+    
+    fprintf(out, "A pair of credits:\n");
+    
+    srandom (time (0));
+    
+    num1 = random() % CREDITS_COUNT;
+    line = credits[num1];
+    fprintf(out, "%s\n", line);
+    
+    while ((num1 == (num2 = random() % CREDITS_COUNT))) {}
+    
+    line = credits[num2];
+    
+    fprintf(out, "%s\n", line);
+}
+
+
 
 int main (int argc, char **argv)
 {
@@ -606,7 +644,7 @@
 			break;
 
 		case 'B': /* --badblock-list */
-			asprintf (&badblocks_file, "%s", optarg);			
+			badblocks_file = optarg;
 			break;
 		
 		case 'h': /* --hash */
@@ -654,9 +692,9 @@
 		}
     }
 
-    print_banner (program_name);
+    util_print_banner(program_name);
 
-    misc_print_credit(stdout);
+    mkfs_print_credit(stdout);
     printf("\n");
     
     if (mode & QUIET_MODE)
@@ -673,7 +711,7 @@
         fs_size = str2int (argv[optind + 1]);
     } else if (optind == argc - 1) {
         /* number of blocks is not specified */
-        if (!(fs_size = count_blocks (device_name, Block_size)))
+        if (!(fs_size = misc_device_count_blocks (device_name, Block_size)))
 		exit(1);
     } else {
         print_usage_and_exit ();
@@ -682,29 +720,28 @@
     if (is_journal_default (device_name, jdevice_name, Block_size))
         Create_default_journal = 1;
     
-    if (!(mode & QUIET_MODE) && !can_we_format_it (device_name, force))
+    if (!(mode & QUIET_MODE) && !util_device_formatable (device_name, force))
         return 1;
 	
     if (jdevice_name)
-        if (!(mode & QUIET_MODE) && !can_we_format_it (jdevice_name, force))
+        if (!(mode & QUIET_MODE) && !util_device_formatable (jdevice_name, force))
             return 1;
 
-    fs = reiserfs_create (device_name, select_format(), fs_size, Block_size, 
+    fs = reiserfs_fs_create (device_name, select_format(), fs_size, Block_size, 
 	Create_default_journal, 1);
     
     if (!fs) {
         return 1;
     }
 		
-    if (!reiserfs_create_journal (fs, jdevice_name, Offset, Journal_size, 
+    if (!reiserfs_journal_create (fs, jdevice_name, Offset, Journal_size, 
 	Max_trans_size)) 
     {
         return 1;
     }
 
-    if (!reiserfs_create_ondisk_bitmap (fs)) {
+    if (!(fs->fs_bitmap2 = reiserfs_bitmap_create(fs_size)))
         return 1;
-    }
 
     /* these fill buffers (super block, first bitmap, root block) with
        reiserfs structures */
@@ -716,15 +753,14 @@
 #endif
 
     if (badblocks_file) {
-	if (create_badblock_bitmap (fs, badblocks_file))
+	if (util_badblock_load (fs, badblocks_file))
 	    exit(1);
     }
 
-
     make_super_block (fs);
     make_bitmap (fs);
     make_root_block (fs);
-    add_badblock_list (fs, 1);
+    reiserfs_badblock_flush (fs, 1);
 
     report (fs, jdevice_name);
 
@@ -734,7 +770,7 @@
         if (jdevice_name && strcmp (jdevice_name, device_name))
             fprintf (stderr, " AND ON JOURNAL DEVICE '%s'", jdevice_name);
 
-        if (!user_confirmed (stderr, "!\nContinue (y/n):", "y\n"))
+        if (!util_user_confirmed (stderr, "!\nContinue (y/n):", "y\n"))
             return 1;
     }
 
@@ -743,7 +779,7 @@
 
     zero_journal (fs);
 
-    reiserfs_close (fs);
+    reiserfs_fs_close (fs);
 
     printf ("Syncing.."); fflush (stdout);
     sync ();
diff --git a/utils/resizer/Makefile.am b/utils/resizer/Makefile.am
new file mode 100644
index 0000000..950dffc
--- /dev/null
+++ b/utils/resizer/Makefile.am
@@ -0,0 +1,27 @@
+sbin_PROGRAMS	          = resizefs.reiserfs
+
+man_MANS                  = resizefs.reiserfs.8
+EXTRA_DIST                = resizefs.reiserfs.8
+
+resizefs_reiserfs_SOURCES = fe.c resize_reiserfs.c do_shrink.c resize.h
+resizefs_reiserfs_LDADD	  = $(top_builddir)/libreiserfs/libreiserfs-static.a \
+			    $(top_builddir)/libutil/libutil-static.a \
+			    $(top_builddir)/libmisc/libmisc-static.a
+resizefs_reiserfs_LDFLAGS = @PROGS_LDFLAGS@
+resizefs_reiserfs_CFLAGS  = @CFLAGS@
+
+INCLUDES		  = -I$(top_srcdir)/include
+
+uninstall-resize_reiserfs:
+	if test -f $(DESTDIR)$(sbindir)/resize_reiserfs; then \
+		rm -f $(DESTDIR)$(sbindir)/resize_reiserfs; \
+	fi;
+
+install-resize_reiserfs:
+	if test -f $(DESTDIR)$(sbindir)/resizefs.reiserfs; then \
+		rm -f $(DESTDIR)$(sbindir)/resize_reiserfs; \
+		ln $(DESTDIR)$(sbindir)/resizefs.reiserfs $(DESTDIR)$(sbindir)/resize_reiserfs; \
+	fi;
+
+install-data-local: install-resize_reiserfs
+uninstall-local: uninstall-resize_reiserfs
diff --git a/utils/resizer/Makefile.in b/utils/resizer/Makefile.in
new file mode 100644
index 0000000..85baccf
--- /dev/null
+++ b/utils/resizer/Makefile.in
@@ -0,0 +1,533 @@
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+SOURCES = $(resizefs_reiserfs_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+sbin_PROGRAMS = resizefs.reiserfs$(EXEEXT)
+subdir = utils/resizer
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)"
+sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(sbin_PROGRAMS)
+am_resizefs_reiserfs_OBJECTS = resizefs_reiserfs-fe.$(OBJEXT) \
+	resizefs_reiserfs-resize_reiserfs.$(OBJEXT) \
+	resizefs_reiserfs-do_shrink.$(OBJEXT)
+resizefs_reiserfs_OBJECTS = $(am_resizefs_reiserfs_OBJECTS)
+resizefs_reiserfs_DEPENDENCIES =  \
+	$(top_builddir)/libreiserfs/libreiserfs-static.a \
+	$(top_builddir)/libutil/libutil-static.a \
+	$(top_builddir)/libmisc/libmisc-static.a
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(resizefs_reiserfs_SOURCES)
+DIST_SOURCES = $(resizefs_reiserfs_SOURCES)
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PROGS_LDFLAGS = @PROGS_LDFLAGS@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+man_MANS = resizefs.reiserfs.8
+EXTRA_DIST = resizefs.reiserfs.8
+resizefs_reiserfs_SOURCES = fe.c resize_reiserfs.c do_shrink.c resize.h
+resizefs_reiserfs_LDADD = $(top_builddir)/libreiserfs/libreiserfs-static.a \
+			    $(top_builddir)/libutil/libutil-static.a \
+			    $(top_builddir)/libmisc/libmisc-static.a
+
+resizefs_reiserfs_LDFLAGS = @PROGS_LDFLAGS@
+resizefs_reiserfs_CFLAGS = @CFLAGS@
+INCLUDES = -I$(top_srcdir)/include
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  utils/resizer/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  utils/resizer/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-sbinPROGRAMS: $(sbin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(sbindir)" || $(mkdir_p) "$(DESTDIR)$(sbindir)"
+	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(sbindir)/$$f'"; \
+	   $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(sbindir)/$$f" || exit 1; \
+	  else :; fi; \
+	done
+
+uninstall-sbinPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(sbindir)/$$f"; \
+	done
+
+clean-sbinPROGRAMS:
+	-test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
+resizefs.reiserfs$(EXEEXT): $(resizefs_reiserfs_OBJECTS) $(resizefs_reiserfs_DEPENDENCIES) 
+	@rm -f resizefs.reiserfs$(EXEEXT)
+	$(LINK) $(resizefs_reiserfs_LDFLAGS) $(resizefs_reiserfs_OBJECTS) $(resizefs_reiserfs_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resizefs_reiserfs-do_shrink.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resizefs_reiserfs-fe.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resizefs_reiserfs-resize_reiserfs.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+resizefs_reiserfs-fe.o: fe.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resizefs_reiserfs_CFLAGS) $(CFLAGS) -MT resizefs_reiserfs-fe.o -MD -MP -MF "$(DEPDIR)/resizefs_reiserfs-fe.Tpo" -c -o resizefs_reiserfs-fe.o `test -f 'fe.c' || echo '$(srcdir)/'`fe.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/resizefs_reiserfs-fe.Tpo" "$(DEPDIR)/resizefs_reiserfs-fe.Po"; else rm -f "$(DEPDIR)/resizefs_reiserfs-fe.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fe.c' object='resizefs_reiserfs-fe.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resizefs_reiserfs_CFLAGS) $(CFLAGS) -c -o resizefs_reiserfs-fe.o `test -f 'fe.c' || echo '$(srcdir)/'`fe.c
+
+resizefs_reiserfs-fe.obj: fe.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resizefs_reiserfs_CFLAGS) $(CFLAGS) -MT resizefs_reiserfs-fe.obj -MD -MP -MF "$(DEPDIR)/resizefs_reiserfs-fe.Tpo" -c -o resizefs_reiserfs-fe.obj `if test -f 'fe.c'; then $(CYGPATH_W) 'fe.c'; else $(CYGPATH_W) '$(srcdir)/fe.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/resizefs_reiserfs-fe.Tpo" "$(DEPDIR)/resizefs_reiserfs-fe.Po"; else rm -f "$(DEPDIR)/resizefs_reiserfs-fe.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fe.c' object='resizefs_reiserfs-fe.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resizefs_reiserfs_CFLAGS) $(CFLAGS) -c -o resizefs_reiserfs-fe.obj `if test -f 'fe.c'; then $(CYGPATH_W) 'fe.c'; else $(CYGPATH_W) '$(srcdir)/fe.c'; fi`
+
+resizefs_reiserfs-resize_reiserfs.o: resize_reiserfs.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resizefs_reiserfs_CFLAGS) $(CFLAGS) -MT resizefs_reiserfs-resize_reiserfs.o -MD -MP -MF "$(DEPDIR)/resizefs_reiserfs-resize_reiserfs.Tpo" -c -o resizefs_reiserfs-resize_reiserfs.o `test -f 'resize_reiserfs.c' || echo '$(srcdir)/'`resize_reiserfs.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/resizefs_reiserfs-resize_reiserfs.Tpo" "$(DEPDIR)/resizefs_reiserfs-resize_reiserfs.Po"; else rm -f "$(DEPDIR)/resizefs_reiserfs-resize_reiserfs.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='resize_reiserfs.c' object='resizefs_reiserfs-resize_reiserfs.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resizefs_reiserfs_CFLAGS) $(CFLAGS) -c -o resizefs_reiserfs-resize_reiserfs.o `test -f 'resize_reiserfs.c' || echo '$(srcdir)/'`resize_reiserfs.c
+
+resizefs_reiserfs-resize_reiserfs.obj: resize_reiserfs.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resizefs_reiserfs_CFLAGS) $(CFLAGS) -MT resizefs_reiserfs-resize_reiserfs.obj -MD -MP -MF "$(DEPDIR)/resizefs_reiserfs-resize_reiserfs.Tpo" -c -o resizefs_reiserfs-resize_reiserfs.obj `if test -f 'resize_reiserfs.c'; then $(CYGPATH_W) 'resize_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/resize_reiserfs.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/resizefs_reiserfs-resize_reiserfs.Tpo" "$(DEPDIR)/resizefs_reiserfs-resize_reiserfs.Po"; else rm -f "$(DEPDIR)/resizefs_reiserfs-resize_reiserfs.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='resize_reiserfs.c' object='resizefs_reiserfs-resize_reiserfs.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resizefs_reiserfs_CFLAGS) $(CFLAGS) -c -o resizefs_reiserfs-resize_reiserfs.obj `if test -f 'resize_reiserfs.c'; then $(CYGPATH_W) 'resize_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/resize_reiserfs.c'; fi`
+
+resizefs_reiserfs-do_shrink.o: do_shrink.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resizefs_reiserfs_CFLAGS) $(CFLAGS) -MT resizefs_reiserfs-do_shrink.o -MD -MP -MF "$(DEPDIR)/resizefs_reiserfs-do_shrink.Tpo" -c -o resizefs_reiserfs-do_shrink.o `test -f 'do_shrink.c' || echo '$(srcdir)/'`do_shrink.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/resizefs_reiserfs-do_shrink.Tpo" "$(DEPDIR)/resizefs_reiserfs-do_shrink.Po"; else rm -f "$(DEPDIR)/resizefs_reiserfs-do_shrink.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='do_shrink.c' object='resizefs_reiserfs-do_shrink.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resizefs_reiserfs_CFLAGS) $(CFLAGS) -c -o resizefs_reiserfs-do_shrink.o `test -f 'do_shrink.c' || echo '$(srcdir)/'`do_shrink.c
+
+resizefs_reiserfs-do_shrink.obj: do_shrink.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resizefs_reiserfs_CFLAGS) $(CFLAGS) -MT resizefs_reiserfs-do_shrink.obj -MD -MP -MF "$(DEPDIR)/resizefs_reiserfs-do_shrink.Tpo" -c -o resizefs_reiserfs-do_shrink.obj `if test -f 'do_shrink.c'; then $(CYGPATH_W) 'do_shrink.c'; else $(CYGPATH_W) '$(srcdir)/do_shrink.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/resizefs_reiserfs-do_shrink.Tpo" "$(DEPDIR)/resizefs_reiserfs-do_shrink.Po"; else rm -f "$(DEPDIR)/resizefs_reiserfs-do_shrink.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='do_shrink.c' object='resizefs_reiserfs-do_shrink.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resizefs_reiserfs_CFLAGS) $(CFLAGS) -c -o resizefs_reiserfs-do_shrink.obj `if test -f 'do_shrink.c'; then $(CYGPATH_W) 'do_shrink.c'; else $(CYGPATH_W) '$(srcdir)/do_shrink.c'; fi`
+uninstall-info-am:
+install-man8: $(man8_MANS) $(man_MANS)
+	@$(NORMAL_INSTALL)
+	test -z "$(man8dir)" || $(mkdir_p) "$(DESTDIR)$(man8dir)"
+	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+	for i in $$l2; do \
+	  case "$$i" in \
+	    *.8*) list="$$list $$i" ;; \
+	  esac; \
+	done; \
+	for i in $$list; do \
+	  if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+	  else file=$$i; fi; \
+	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+	  case "$$ext" in \
+	    8*) ;; \
+	    *) ext='8' ;; \
+	  esac; \
+	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
+	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+	  echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+	  $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+	done
+uninstall-man8:
+	@$(NORMAL_UNINSTALL)
+	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+	for i in $$l2; do \
+	  case "$$i" in \
+	    *.8*) list="$$list $$i" ;; \
+	  esac; \
+	done; \
+	for i in $$list; do \
+	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+	  case "$$ext" in \
+	    8*) ;; \
+	    *) ext='8' ;; \
+	  esac; \
+	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
+	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+	  echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+	  rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS)
+installdirs:
+	for dir in "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-man
+
+install-exec-am: install-sbinPROGRAMS
+
+install-info: install-info-am
+
+install-man: install-man8
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-local uninstall-man \
+	uninstall-sbinPROGRAMS
+
+uninstall-man: uninstall-man8
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-sbinPROGRAMS ctags distclean distclean-compile \
+	distclean-generic distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-data-local install-exec \
+	install-exec-am install-info install-info-am install-man \
+	install-man8 install-sbinPROGRAMS install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-info-am uninstall-local uninstall-man \
+	uninstall-man8 uninstall-sbinPROGRAMS
+
+
+uninstall-resize_reiserfs:
+	if test -f $(DESTDIR)$(sbindir)/resize_reiserfs; then \
+		rm -f $(DESTDIR)$(sbindir)/resize_reiserfs; \
+	fi;
+
+install-resize_reiserfs:
+	if test -f $(DESTDIR)$(sbindir)/resizefs.reiserfs; then \
+		rm -f $(DESTDIR)$(sbindir)/resize_reiserfs; \
+		ln $(DESTDIR)$(sbindir)/resizefs.reiserfs $(DESTDIR)$(sbindir)/resize_reiserfs; \
+	fi;
+
+install-data-local: install-resize_reiserfs
+uninstall-local: uninstall-resize_reiserfs
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/utils/resizer/do_shrink.c b/utils/resizer/do_shrink.c
new file mode 100644
index 0000000..3f96d21
--- /dev/null
+++ b/utils/resizer/do_shrink.c
@@ -0,0 +1,317 @@
+/*
+ * Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "resize.h"
+#include "misc/unaligned.h"
+#include "util/misc.h"
+
+#include <time.h>
+#include <fcntl.h>
+
+static unsigned long int_node_cnt   = 0, int_moved_cnt   = 0;
+static unsigned long leaf_node_cnt  = 0, leaf_moved_cnt  = 0;
+static unsigned long unfm_node_cnt  = 0, unfm_moved_cnt  = 0;
+static unsigned long total_node_cnt = 0;
+static unsigned long total_moved_cnt = 0;
+
+static unsigned long unused_block;
+static unsigned long blocks_used;
+static int block_count_mismatch = 0;
+
+static reiserfs_bitmap_t * bmp;
+static reiserfs_sb_t * ondisk_sb;
+
+/* abnornal exit from block reallocation process */
+static void quit_resizer(reiserfs_filsys_t * fs)
+{
+	/* save changes to bitmap blocks */
+	reiserfs_fs_close (fs);
+	/* leave fs in ERROR state */
+	reiserfs_exit(1, "fs shrinking was not completed successfully, "
+		      "run reiserfsck.");
+}
+
+/* block moving */
+static unsigned long move_generic_block(reiserfs_filsys_t * fs, 
+					unsigned long block, 
+					unsigned long bnd, int h)
+{
+    reiserfs_bh_t * bh, * bh2;
+
+	/* primitive fsck */
+	if (block > reiserfs_sb_get_blocks(ondisk_sb)) {
+		fprintf(stderr, "resize_reiserfs: invalid block number "
+			"(%lu) found.\n", block);
+		quit_resizer(fs);
+	}
+	
+	/* progress bar, 3D style :) */
+	if (opt_verbose)
+	    util_misc_progress(stderr, &total_node_cnt, blocks_used, 1, 0);
+	else
+	    total_node_cnt ++;
+
+	/* infinite loop check */
+	if( total_node_cnt > blocks_used && !block_count_mismatch) {
+		fputs("resize_reiserfs: warning: block count exeeded\n",stderr);
+		block_count_mismatch = 1;
+	}
+
+	if (block < bnd) /* block will not be moved */
+		return 0;
+	
+	/* move wrong block */ 
+	bh = reiserfs_buffer_read(fs->fs_dev, block, fs->fs_blocksize);
+
+	if (!bh)
+	    reiserfs_exit (1, "move_generic_block: reiserfs_buffer_read failed.\n");
+
+	reiserfs_bitmap_find_zero_bit(bmp, &unused_block);
+	if (unused_block == 0 || unused_block >= bnd) {
+		fputs ("resize_reiserfs: can\'t find free block\n", stderr);
+		quit_resizer(fs);
+	}
+
+	/* blocknr changing */
+	bh2 = reiserfs_buffer_open(fs->fs_dev, unused_block, fs->fs_blocksize);
+	memcpy(bh2->b_data, bh->b_data, bh2->b_size);
+	reiserfs_bitmap_clear_bit(bmp, block);
+	reiserfs_bitmap_set_bit(bmp, unused_block);
+
+	reiserfs_buffer_close(bh);
+	reiserfs_buffer_mkuptodate(bh2,1);
+	reiserfs_buffer_mkdirty(bh2);
+	reiserfs_buffer_write(bh2);
+	reiserfs_buffer_close(bh2);
+
+	total_moved_cnt++;
+	return unused_block;
+}
+
+static unsigned long move_unformatted_block(reiserfs_filsys_t * fs, unsigned long block, unsigned long bnd, int h)
+{
+	unsigned long b;
+	unfm_node_cnt++;
+	b = move_generic_block(fs, block, bnd, h);
+	if (b)
+		unfm_moved_cnt++;
+	return b;		
+}
+
+
+/* recursive function processing all tree nodes */
+static unsigned long move_formatted_block(reiserfs_filsys_t * fs, 
+					  unsigned long block, 
+					  unsigned long bnd, int h)
+{
+    reiserfs_bh_t * bh;
+    reiserfs_ih_t *ih;
+    unsigned long new_blocknr = 0;
+    int node_is_internal = 0;
+    unsigned int i, j;
+	
+    bh = reiserfs_buffer_read(fs->fs_dev, block, fs->fs_blocksize);
+    
+    if (!bh)
+	reiserfs_exit (1, "move_formatted_block: reiserfs_buffer_read failed");
+
+    if (reiserfs_leaf_head (bh)) {
+	leaf_node_cnt++;
+
+	for (i = 0; i < reiserfs_node_items(bh); i++) {
+	    ih = reiserfs_ih_at(bh, i);
+
+	    /* skip the bad blocks. */
+	    if (reiserfs_key_get_oid (&ih->ih_key) == REISERFS_BAD_OID &&
+		reiserfs_key_get_did (&ih->ih_key) == REISERFS_BAD_DID)
+	    {
+		continue;
+	    }
+
+	    if (reiserfs_ih_ext(ih)) {
+		__u32 * extent;
+
+		extent = (__u32 *)reiserfs_item_by_ih (bh, ih);
+		for (j = 0; j < reiserfs_ext_count(ih); j++) {
+		    unsigned long  unfm_block;
+
+		    /* hole */
+		    if (d32_get (extent, j) == 0) 
+			continue;
+
+		    unfm_block = move_unformatted_block(fs, d32_get (extent, j),
+							bnd, h + 1);
+		    if (unfm_block) {
+			d32_put (extent, j, unfm_block);
+			reiserfs_buffer_mkdirty(bh);
+		    }
+		}
+	    }	
+	}
+    } else if (reiserfs_int_head (bh)) { /* internal node */
+	int_node_cnt++;
+	node_is_internal = 1;
+
+	for (i=0; i <= reiserfs_node_items(bh); i++) {
+	    unsigned long moved_block;
+	    moved_block = 
+		    move_formatted_block(fs, reiserfs_dc_get_nr(
+				reiserfs_int_at (bh, i)), bnd, h+1);
+	    if (moved_block) {
+		reiserfs_dc_set_nr (reiserfs_int_at (bh, i), 
+				      moved_block);
+		reiserfs_buffer_mkdirty(bh);
+	    }
+	}
+    } else {
+	misc_die("Block (%lu) has invalid format\n", block);
+    }
+
+    if (reiserfs_buffer_isdirty(bh)) {
+	reiserfs_buffer_mkuptodate(bh,1);
+	reiserfs_buffer_write(bh);
+    }
+
+    reiserfs_buffer_close(bh);	
+
+    new_blocknr = move_generic_block(fs, block, bnd, h);
+    if (new_blocknr) {
+	if (node_is_internal)
+	    int_moved_cnt++;
+	else
+	    leaf_moved_cnt++;
+    }
+
+    return new_blocknr;
+}
+
+int shrink_fs(reiserfs_filsys_t * fs, long long int new_blocks)
+{
+	unsigned long n_root_block;
+	unsigned int bmap_nr_new;
+	unsigned int bmap_nr_old;
+	unsigned long bad_count;
+	unsigned long old_blocks;
+	
+	ondisk_sb = fs->fs_ondisk_sb;
+	
+	old_blocks = reiserfs_sb_get_blocks(ondisk_sb);
+	bmap_nr_old = reiserfs_bmap_nr(old_blocks, fs->fs_blocksize);
+	bmap_nr_new = reiserfs_bmap_nr(new_blocks, fs->fs_blocksize);
+
+	/* is shrinking possible ? */
+	if (old_blocks - new_blocks > 
+	    reiserfs_sb_get_free(ondisk_sb) + bmap_nr_old - bmap_nr_new) 
+	{
+	    fprintf(stderr, "resize_reiserfs: can\'t shrink fs; too many "
+		"blocks already allocated\n");
+	    return -1;
+	}
+
+	/* warn about alpha version */
+	{
+		int c;
+
+		printf(
+		    "You are running BETA version of reiserfs shrinker.\n"
+		    "This version is only for testing or VERY CAREFUL use.\n"
+		    "Backup of you data is recommended.\n\n"
+		    "Do you want to continue? [y/N]:"
+		);
+		fflush(stdout);
+		c = getchar();
+		if (c != 'y' && c != 'Y')
+			exit(1);
+	}
+
+	reiserfs_fs_reopen(fs, O_RDWR);
+	if (reiserfs_bitmap_open(fs))
+	    reiserfs_exit(1, "cannot open ondisk bitmap");
+	bmp = fs->fs_bitmap2;
+	ondisk_sb = fs->fs_ondisk_sb;
+
+	reiserfs_sb_set_state (fs->fs_ondisk_sb, FS_ERROR);
+	reiserfs_buffer_mkuptodate(fs->fs_super_bh, 1);
+	reiserfs_buffer_mkdirty(fs->fs_super_bh);
+	reiserfs_buffer_write(fs->fs_super_bh);
+
+	/* calculate number of data blocks */		
+	blocks_used = 
+	    old_blocks
+	    - reiserfs_sb_get_free(fs->fs_ondisk_sb)
+	    - bmap_nr_old
+	    - reiserfs_jp_get_size(reiserfs_sb_jp (fs->fs_ondisk_sb))
+	    - REISERFS_DISK_OFFSET_IN_BYTES / fs->fs_blocksize
+	    - 2; /* superblock itself and 1 descriptor after the journal */
+
+	unused_block = 1;
+
+	if (opt_verbose) {
+		printf("Processing the tree: ");
+		fflush(stdout);
+	}
+
+	n_root_block = move_formatted_block(fs, reiserfs_sb_get_root(ondisk_sb), 
+	    new_blocks, 0);
+	
+	if (n_root_block)
+	    reiserfs_sb_set_root (ondisk_sb, n_root_block);
+
+	if (opt_verbose)
+	    printf ("\n\nnodes processed (moved):\n"
+		    "int        %lu (%lu),\n"
+		    "leaves     %lu (%lu),\n" 
+		    "unfm       %lu (%lu),\n"
+		    "total      %lu (%lu).\n\n",
+		    int_node_cnt, int_moved_cnt,
+		    leaf_node_cnt, leaf_moved_cnt, 
+		    unfm_node_cnt, unfm_moved_cnt,
+		    (unsigned long)total_node_cnt, total_moved_cnt);
+
+	if (block_count_mismatch) {
+	    fprintf(stderr, "resize_reiserfs: data block count %lu"
+		    " doesn\'t match data block count %lu from super block\n",
+		    (unsigned long)total_node_cnt, blocks_used);
+	}
+
+	{
+	    unsigned long l;
+
+	    /* make sure that none of truncated block are in use */
+	    printf("check for used blocks in truncated region\n");
+	    for (l = new_blocks; l < fs->fs_bitmap2->bm_bit_size; l ++) {
+		if ((l % (fs->fs_blocksize * 8)) == 0)
+		    continue;
+		if (reiserfs_bitmap_test_bit (fs->fs_bitmap2, l))
+		    printf ("<%lu>", l);
+	    }
+	    printf("\n");
+	}
+
+	reiserfs_badblock_traverse(fs, reiserfs_badblock_extract, NULL);
+	
+	if (fs->fs_badblocks_bm) {
+		bad_count = reiserfs_bitmap_ones(fs->fs_badblocks_bm);
+		reiserfs_bitmap_shrink (fs->fs_badblocks_bm, new_blocks);
+		reiserfs_badblock_flush(fs, 1);
+		bad_count -= reiserfs_bitmap_ones(fs->fs_badblocks_bm);
+	} else
+		bad_count = 0;
+	
+	reiserfs_bitmap_shrink (fs->fs_bitmap2, new_blocks);
+
+	reiserfs_sb_set_free (ondisk_sb, reiserfs_sb_get_free(ondisk_sb)
+			    - (old_blocks - new_blocks)
+			    + (bmap_nr_old - bmap_nr_new)
+			    + bad_count);
+	reiserfs_sb_set_blocks (ondisk_sb, new_blocks);
+	reiserfs_sb_set_bmaps (ondisk_sb, bmap_nr_new);
+
+	return 0;
+}
diff --git a/resize_reiserfs/fe.c b/utils/resizer/fe.c
similarity index 60%
rename from resize_reiserfs/fe.c
rename to utils/resizer/fe.c
index 5b65117..351db47 100644
--- a/resize_reiserfs/fe.c
+++ b/utils/resizer/fe.c
@@ -3,23 +3,32 @@
  * reiserfsprogs/README
  */
 
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
 #include "resize.h"
+#include "util/mntent.h"
+
+#include <errno.h>
+#include <sys/mount.h>
+#include <mntent.h>
 
 /* the front-end for kernel on-line resizer */
 int resize_fs_online(char * devname, long long int blocks) {
 	struct mntent *mnt;
-	char buf[40];
+	char buf[64];
 	
 	/* Find the mount entry. */
-	if ((mnt = misc_mntent(devname)) == NULL)
-		die ("resize_reiserfs: can't find mount entry\n");
+	if ((mnt = util_mntent(devname)) == NULL)
+		misc_die ("resize_reiserfs: can't find mount entry\n");
 
 	sprintf(buf,"resize=%lld", blocks);
 
 	if (mount(mnt->mnt_fsname, mnt->mnt_dir, mnt->mnt_type,
 		  (unsigned long)(MS_MGC_VAL << 16 | MS_REMOUNT), buf)) 
 	{
-		die ("resize_reiserfs: remount failed: %s\n", 
+		misc_die ("resize_reiserfs: remount failed: %s\n", 
 		     strerror(errno));
 	}
 
diff --git a/utils/resizer/resize.h b/utils/resizer/resize.h
new file mode 100644
index 0000000..538f48e
--- /dev/null
+++ b/utils/resizer/resize.h
@@ -0,0 +1,26 @@
+/* 
+ * Copyright 2000-2004 by Hans Reiser, licensing governed by 
+ * reiserfsprogs/README
+ */
+
+#include "reiserfs/libreiserfs.h"
+
+#define print_usage_and_exit() {\
+ fprintf (stderr, "Usage: %s  [-s[+|-]#[G|M|K]] [-fqvV] device\n\n", argv[0]);\
+ exit(16);\
+}
+
+/* reiserfs_resize.c */
+extern reiserfs_bh_t * g_sb_bh;
+extern char * g_progname;
+
+extern int opt_force;
+extern int opt_verbose;
+extern int opt_nowrite;
+extern int opt_safe;
+
+/* fe.c */
+extern int resize_fs_online(char * devname, long long int blocks);
+
+/* do_shrink.c */
+extern int shrink_fs(reiserfs_filsys_t *, long long int blocks);
diff --git a/resize_reiserfs/resize_reiserfs.c b/utils/resizer/resize_reiserfs.c
similarity index 69%
rename from resize_reiserfs/resize_reiserfs.c
rename to utils/resizer/resize_reiserfs.c
index 691d855..37f9a98 100644
--- a/resize_reiserfs/resize_reiserfs.c
+++ b/utils/resizer/resize_reiserfs.c
@@ -3,17 +3,20 @@
  * reiserfsprogs/README
  */
 
-/*  
- * Written by Alexander Zarochentcev.
- * 
- * FS resize utility 
- *
- */
-
-#define _GNU_SOURCE
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
 
 #include "resize.h"
-#include <limits.h>
+#include "misc/device.h"
+#include "misc/malloc.h"
+#include "util/device.h"
+#include "util/print.h"
+
+#include <getopt.h>
+#include <errno.h>
+#include <fcntl.h>
+
 
 int opt_banner = 0;
 int opt_force = 0;
@@ -22,8 +25,6 @@
 int opt_safe = 0;
 int opt_skipj = 0;
 
-char * g_progname;
-
 /* calculate the new fs size (in blocks) from old fs size and the string
    representation of new size */
 static long long int calc_new_fs_size(unsigned long count, 
@@ -63,8 +64,8 @@
 }
 
 /* print some fs parameters */
-static void sb_report(struct reiserfs_super_block * sb1,
-		      struct reiserfs_super_block * sb2)
+static void sb_report(reiserfs_sb_t * sb1,
+		      reiserfs_sb_t * sb2)
 {
     printf(
 	"ReiserFS report:\n"
@@ -72,19 +73,19 @@
 	"block count           %d (%d)\n"
 	"free blocks           %d (%d)\n"
 	"bitmap block count    %d (%d)\n", 
-	get_sb_block_size(sb1),
-	get_sb_block_count(sb1), get_sb_block_count(sb2),
-	get_sb_free_blocks(sb1), get_sb_free_blocks(sb2),
-	get_sb_bmap_nr(sb1), get_sb_bmap_nr(sb2));
+	reiserfs_sb_get_blksize(sb1),
+	reiserfs_sb_get_blocks(sb1), reiserfs_sb_get_blocks(sb2),
+	reiserfs_sb_get_free(sb1), reiserfs_sb_get_free(sb2),
+	reiserfs_sb_get_bmaps(sb1), reiserfs_sb_get_bmaps(sb2));
 };
 
 /* conditional bwrite */
-static int bwrite_cond (struct buffer_head * bh)
+static int bwrite_cond (reiserfs_bh_t * bh)
 {
     if(!opt_nowrite) { 
-	mark_buffer_uptodate(bh,1);
-	mark_buffer_dirty(bh);
-	bwrite(bh);
+	reiserfs_buffer_mkuptodate(bh,1);
+	reiserfs_buffer_mkdirty(bh);
+	reiserfs_buffer_write(bh);
     }
     return 0;
 }
@@ -93,35 +94,38 @@
 /* the first one of the most important functions */
 static int expand_fs (reiserfs_filsys_t * fs, long long int block_count_new) {
     unsigned int bmap_nr_new, bmap_nr_old;
-    struct reiserfs_super_block * sb;
+    unsigned int block_count_old;
+    reiserfs_sb_t * sb;
     unsigned int i;
 
 
-    reiserfs_reopen(fs, O_RDWR);
-    if (reiserfs_open_ondisk_bitmap (fs))
+    reiserfs_fs_reopen(fs, O_RDWR);
+    if (reiserfs_bitmap_open(fs))
 	reiserfs_exit(1, "cannot open ondisk bitmap");
 
     sb = fs->fs_ondisk_sb;
 
-    set_sb_fs_state (fs->fs_ondisk_sb, FS_ERROR);
+    reiserfs_sb_set_state (fs->fs_ondisk_sb, FS_ERROR);
 
     bwrite_cond(fs->fs_super_bh);
 
 
-    if (reiserfs_expand_bitmap(fs->fs_bitmap2, block_count_new))
+    if (reiserfs_bitmap_expand (fs->fs_bitmap2, block_count_new))
 	reiserfs_exit(1, "cannot expand bitmap\n");
 
 
     /* count bitmap blocks in new fs */
-    bmap_nr_new = (block_count_new - 1) / (fs->fs_blocksize * 8) + 1;
-    bmap_nr_old = get_sb_bmap_nr(sb);
-	
+    block_count_old = reiserfs_sb_get_blocks(sb);
+    bmap_nr_old = reiserfs_bmap_nr(block_count_old, fs->fs_blocksize);
+    bmap_nr_new = reiserfs_bmap_nr(block_count_new, fs->fs_blocksize);
+
     /* update super block buffer*/
-    set_sb_free_blocks (sb, get_sb_free_blocks(sb) + 
-			(block_count_new - get_sb_block_count(sb)) - 
+    reiserfs_sb_set_free (sb, reiserfs_sb_get_free(sb) + 
+			(block_count_new - reiserfs_sb_get_blocks(sb)) - 
 			(bmap_nr_new - bmap_nr_old));
-    set_sb_block_count (sb, block_count_new);
-    set_sb_bmap_nr (sb, bmap_nr_new);
+    reiserfs_sb_set_blocks (sb, block_count_new);
+    reiserfs_sb_set_bmaps (sb, reiserfs_bmap_over(bmap_nr_new) ? 
+			   0 : bmap_nr_new);
 
     /* mark new bitmap blocks as used */
     for (i = bmap_nr_old; i < bmap_nr_new; i++)
@@ -147,30 +151,30 @@
 	    return new_size;
     }
     
-    if (new_size == get_sb_block_count(fs->fs_ondisk_sb)) {
+    if (new_size == reiserfs_sb_get_blocks(fs->fs_ondisk_sb)) {
 	reiserfs_warning (stderr, "%s already is of the needed size. "
 			  "Nothing to be done\n\n", fs->fs_file_name);
 	return 1;
     }
 
-    if (new_size < get_sb_block_count(fs->fs_ondisk_sb)) {
-	if (misc_device_mounted(fs->fs_file_name) > 0) {
+    if (new_size < reiserfs_sb_get_blocks(fs->fs_ondisk_sb)) {
+	if (util_device_mounted(fs->fs_file_name) > 0) {
 	    reiserfs_warning (stderr, "Can't shrink filesystem on-line.\n\n");
 	    return 1;
 	}
     }
 
-    if (new_size >= get_sb_block_count(fs->fs_ondisk_sb)) {
-	loff_t offset = (loff_t)new_size * fs->fs_blocksize - 1;
+    if (new_size >= reiserfs_sb_get_blocks(fs->fs_ondisk_sb)) {
+	unsigned long long offset = (unsigned long long)new_size * fs->fs_blocksize - 1;
 	
-	if(!valid_offset(fs->fs_dev, offset)) {
+	if(!misc_device_valid_offset(fs->fs_dev, offset)) {
 	    reiserfs_warning (stderr, "%s is of %lu blocks size only with "
 			      "reiserfs of %d blocks\nsize on it. You are "
 			      "trying to expand reiserfs up to %lu blocks "
 			      "size.\nYou probably forgot to expand your "
 			      "partition size.\n\n", fs->fs_file_name,
-			      count_blocks(fs->fs_file_name, fs->fs_blocksize),
-			      get_sb_block_count(fs->fs_ondisk_sb), new_size);
+			      misc_device_count_blocks(fs->fs_file_name, fs->fs_blocksize),
+			      reiserfs_sb_get_blocks(fs->fs_ondisk_sb), new_size);
 	    return 1;
 	}
     }
@@ -183,17 +187,15 @@
     char * devname;
     char * jdevice_name = NULL;
     reiserfs_filsys_t * fs;
-    struct reiserfs_super_block * sb;
+    reiserfs_sb_t * sb;
 
     int c;
     int error;
 
-    struct reiserfs_super_block *sb_old;
+    reiserfs_sb_t *sb_old;
 
     long long int block_count_new;
 
-    g_progname = basename(argv[0]);
-    
     if (argc < 2)
 	print_usage_and_exit();
 	
@@ -235,7 +237,7 @@
 	}
     }
 
-    print_banner (g_progname);
+    util_print_banner (argv[0]);
     
     if (opt_banner)
 	exit(0);
@@ -243,7 +245,7 @@
 
     devname = argv[optind];
 
-    fs = reiserfs_open(devname, O_RDONLY, &error, 0, 1);
+    fs = reiserfs_fs_open(devname, O_RDONLY, &error, 0, 1);
     if (!fs) {
 	if (error) {
 		reiserfs_exit(1, "cannot open '%s': %s", 
@@ -253,7 +255,12 @@
 	}
     }
 
-    if (reiserfs_open_journal (fs, jdevice_name, O_RDWR | O_LARGEFILE)) {
+    if (reiserfs_journal_open (fs, jdevice_name, O_RDWR 
+#ifdef O_LARGEFILE
+			       | O_LARGEFILE
+#endif
+			       )) 
+    {
 	reiserfs_exit(1, "Failed to open the journal device (%s).", 
 		      jdevice_name);
     }
@@ -263,17 +270,17 @@
 	    reiserfs_exit(1, "Wrong journal parameters detected on (%s)", 
 			  jdevice_name);
 	} else {
-	    reiserfs_close_journal(fs);
+	    reiserfs_journal_close(fs);
 	}
     }
 
     /* forced to continue without journal available/specified */
 
-    if (no_reiserfs_found (fs)) {
+    if (fs == NULL) {
 	reiserfs_exit(1, "no reiserfs found on the device.");
     }
     
-    if (!spread_bitmaps (fs)) {
+    if (!reiserfs_bitmap_spread (fs)) {
 	reiserfs_exit(1, "cannot resize reiserfs in old (not spread "
 		      "bitmap) format.");
     }
@@ -283,29 +290,31 @@
     /* If size change was specified by user, calculate it, 
        otherwise take the whole device. */
     block_count_new = bytes_count_str ? 
-	    calc_new_fs_size(get_sb_block_count(sb), 
+	    calc_new_fs_size(reiserfs_sb_get_blocks(sb), 
 			     fs->fs_blocksize, bytes_count_str) :
-	    count_blocks(devname, fs->fs_blocksize);
+	    misc_device_count_blocks(devname, fs->fs_blocksize);
 
     if (resizer_check_fs_size(fs, block_count_new))
 	return 1;
 
-    if (misc_device_mounted(devname) > 0) {
-	reiserfs_close(fs);
+    if (util_device_mounted(devname) > 0) {
+	reiserfs_fs_close(fs);
+	fs = NULL;
 	error = resize_fs_online(devname, block_count_new);
 	reiserfs_warning(stderr, "\n\nresize_reiserfs: On-line resizing %s.\n\n",
 			 error ? "failed" : "finished successfully");
 	return error;
     }
 
-    if (!reiserfs_is_fs_consistent (fs)) {
+    if (!reiserfs_sb_state_ok (fs)) {
 	reiserfs_warning (stderr, "\n\nresize_reiserfs: run reiserfsck --check "
 	    "first\n\n");
-	reiserfs_close (fs);
+	reiserfs_fs_close (fs);
+	fs = NULL;
 	return 1;
     }
 
-    if (get_sb_umount_state(sb) != FS_CLEANLY_UMOUNTED)
+    if (reiserfs_sb_get_umount(sb) != FS_CLEANLY_UMOUNTED)
 	/* fixme: shouldn't we check for something like: fsck guarantees: fs is ok */
 	reiserfs_exit(1, "the file system isn't in valid state.");
 		
@@ -314,11 +323,11 @@
     
     /* save SB for reporting */
     if(opt_verbose) {
-	sb_old = getmem(SB_SIZE);
-	memcpy(sb_old, fs->fs_ondisk_sb, SB_SIZE);
+	sb_old = misc_getmem(REISERFS_SB_SIZE);
+	memcpy(sb_old, fs->fs_ondisk_sb, REISERFS_SB_SIZE);
     }
 
-    error = (block_count_new > get_sb_block_count(fs->fs_ondisk_sb)) ? 
+    error = (block_count_new > reiserfs_sb_get_blocks(fs->fs_ondisk_sb)) ? 
 	expand_fs(fs, block_count_new) : shrink_fs(fs, block_count_new);
     if (error) {
 	reiserfs_warning(stderr, "\n\nresize_reiserfs: Resizing failed.\n\n ");
@@ -327,17 +336,17 @@
 
     if(opt_verbose) {
 	sb_report(fs->fs_ondisk_sb, sb_old);
-	freemem(sb_old);
+	misc_freemem(sb_old);
     }
 
-    set_sb_fs_state (fs->fs_ondisk_sb, FS_CONSISTENT);
+    reiserfs_sb_set_state (fs->fs_ondisk_sb, FS_CONSISTENT);
     bwrite_cond(fs->fs_super_bh);
 	
     if (opt_verbose) {
 	printf("\nSyncing..");
 	fflush(stdout);
     }
-    reiserfs_close (fs);
+    reiserfs_fs_close (fs);
     if (opt_verbose)
 	printf("done\n");
 	
diff --git a/resize_reiserfs/resize_reiserfs.8 b/utils/resizer/resizefs.reiserfs.8
similarity index 86%
rename from resize_reiserfs/resize_reiserfs.8
rename to utils/resizer/resizefs.reiserfs.8
index 7db59bf..9f7ff0e 100644
--- a/resize_reiserfs/resize_reiserfs.8
+++ b/utils/resizer/resizefs.reiserfs.8
@@ -1,11 +1,11 @@
 .\" -*- nroff -*-
 .\" Copyright 1996-2004 Hans Reiser.
 .\" 
-.TH RESIZE_REISERFS 8 "January 2004" "Reiserfsprogs-3.6.19"
+.TH resizefs.reiserfs 8 "January 2004" "Reiserfsprogs-3.6.19"
 .SH NAME
-resize_reiserfs \- resizer tool for the ReiserFS filesystem
+resizefs.reiserfs \- resizer tool for the ReiserFS filesystem
 .SH SYNOPSIS
-.BR resize_reiserfs
+.BR resizefs.reiserfs
 [
 .B \-s
 .IR \fR[\fB+\fR|\fB\- ]\fIsize\fB[\fBK\fR|\fBM\fR|\fBG\fR]
@@ -18,7 +18,7 @@
 .I device
 .SH DESCRIPTION
 The
-.B resize_reiserfs
+.B resizefs.reiserfs
 tool resizes an unmounted reiserfs file system.  It enlarges or shrinks an
 reiserfs file system located on a
 .I device
@@ -40,7 +40,7 @@
 parameter is given in kilo\-, mega\-, gigabytes respectively.
 .PP
 The
-.B resize_reiserfs
+.B resizefs.reiserfs
 program does not manipulate the size of the device. If you wish to
 enlarge a filesystem, you must make sure you expand the underlying
 device first. This can be done using
@@ -53,14 +53,14 @@
 will certainly not work, and you may lose your entire filesystem.
 .PP
 The
-.B resize_reiserfs
+.B resizefs.reiserfs
 program allows to grow a reiserfs on-line if there is a free
 space on block
 .I device.
 
 .PP
 If you wish to shrink a reiserfs partition, first use
-.B resize_reiserfs
+.B resizefs.reiserfs
 to shrink the file system. You may then use
 .BR cfdisk (8)
 to shrink the device. When shrinking the size of the device, make sure
@@ -90,11 +90,11 @@
 
 .SH EXAMPLES
 The following example shows how to test
-.B resize_reiserfs\fR.
+.B resizefs.reiserfs\fR.
 Suppose 2Gb reiserfs filesystem is created on the device /dev/hda8
 and is mounted on /mnt. 
 For shrinking the device we need to unmount it first, then run
-.B resize_reiserfs
+.B resizefs.reiserfs
 with a
 .I size \fR parameter (in this case -1Gb):
 .PP
@@ -102,7 +102,7 @@
 .br
 \	umount /mnt
 .br
-\	resize_reiserfs -s -1G /dev/hda8
+\	resizefs.reiserfs -s -1G /dev/hda8
 .br
 \	mount /dev/hda8 /mnt
 .br
@@ -110,7 +110,7 @@
 
 .SH AUTHOR
 This version of
-.B resize_reiserfs
+.B resizefs.reiserfs
 has been written by Alexander Zarochentcev <zam@namesys.com>.
 .SH BUGS
 Please report bugs to the ReiserFS developers <reiserfs-dev@namesys.com>, providing
@@ -118,5 +118,5 @@
 messages; check the syslog file for any related information.
 .SH SEE ALSO
 .BR cfdisk (8),
-.BR reiserfsck (8),
-.BR debugreiserfs (8)
+.BR fsck.reiserfs (8),
+.BR debugfs.reiserfs (8)
diff --git a/utils/tune/Makefile.am b/utils/tune/Makefile.am
new file mode 100644
index 0000000..92485b1
--- /dev/null
+++ b/utils/tune/Makefile.am
@@ -0,0 +1,27 @@
+sbin_PROGRAMS		= tunefs.reiserfs
+
+man_MANS		= tunefs.reiserfs.8
+EXTRA_DIST		= tunefs.reiserfs.8
+
+tunefs_reiserfs_SOURCES	= tune.c tune.h
+tunefs_reiserfs_LDADD	= $(top_builddir)/libreiserfs/libreiserfs-static.a \
+			  $(top_builddir)/libutil/libutil-static.a \
+			  $(top_builddir)/libmisc/libmisc-static.a
+tunefs_reiserfs_LDFLAGS	= @PROGS_LDFLAGS@
+tunefs_reiserfs_CFLAGS	= @CFLAGS@
+
+INCLUDES		= -I$(top_srcdir)/include
+
+uninstall-reiserfstune:
+	if test -f $(DESTDIR)$(sbindir)/reiserfstune; then \
+		rm -f $(DESTDIR)$(sbindir)/reiserfstune; \
+	fi;
+
+install-reiserfstune:
+	if test -f $(DESTDIR)$(sbindir)/tunefs.reiserfs; then \
+		rm -f $(DESTDIR)$(sbindir)/reiserfstune; \
+		ln $(DESTDIR)$(sbindir)/tunefs.reiserfs $(DESTDIR)$(sbindir)/reiserfstune; \
+	fi;
+
+install-data-local: install-reiserfstune
+uninstall-local: uninstall-reiserfstune
diff --git a/utils/tune/Makefile.in b/utils/tune/Makefile.in
new file mode 100644
index 0000000..e386b43
--- /dev/null
+++ b/utils/tune/Makefile.in
@@ -0,0 +1,501 @@
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+SOURCES = $(tunefs_reiserfs_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+sbin_PROGRAMS = tunefs.reiserfs$(EXEEXT)
+subdir = utils/tune
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)"
+sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(sbin_PROGRAMS)
+am_tunefs_reiserfs_OBJECTS = tunefs_reiserfs-tune.$(OBJEXT)
+tunefs_reiserfs_OBJECTS = $(am_tunefs_reiserfs_OBJECTS)
+tunefs_reiserfs_DEPENDENCIES =  \
+	$(top_builddir)/libreiserfs/libreiserfs-static.a \
+	$(top_builddir)/libutil/libutil-static.a \
+	$(top_builddir)/libmisc/libmisc-static.a
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(tunefs_reiserfs_SOURCES)
+DIST_SOURCES = $(tunefs_reiserfs_SOURCES)
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PROGS_LDFLAGS = @PROGS_LDFLAGS@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+man_MANS = tunefs.reiserfs.8
+EXTRA_DIST = tunefs.reiserfs.8
+tunefs_reiserfs_SOURCES = tune.c tune.h
+tunefs_reiserfs_LDADD = $(top_builddir)/libreiserfs/libreiserfs-static.a \
+			  $(top_builddir)/libutil/libutil-static.a \
+			  $(top_builddir)/libmisc/libmisc-static.a
+
+tunefs_reiserfs_LDFLAGS = @PROGS_LDFLAGS@
+tunefs_reiserfs_CFLAGS = @CFLAGS@
+INCLUDES = -I$(top_srcdir)/include
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  utils/tune/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  utils/tune/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-sbinPROGRAMS: $(sbin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(sbindir)" || $(mkdir_p) "$(DESTDIR)$(sbindir)"
+	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(sbindir)/$$f'"; \
+	   $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(sbindir)/$$f" || exit 1; \
+	  else :; fi; \
+	done
+
+uninstall-sbinPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(sbindir)/$$f"; \
+	done
+
+clean-sbinPROGRAMS:
+	-test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
+tunefs.reiserfs$(EXEEXT): $(tunefs_reiserfs_OBJECTS) $(tunefs_reiserfs_DEPENDENCIES) 
+	@rm -f tunefs.reiserfs$(EXEEXT)
+	$(LINK) $(tunefs_reiserfs_LDFLAGS) $(tunefs_reiserfs_OBJECTS) $(tunefs_reiserfs_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tunefs_reiserfs-tune.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+tunefs_reiserfs-tune.o: tune.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tunefs_reiserfs_CFLAGS) $(CFLAGS) -MT tunefs_reiserfs-tune.o -MD -MP -MF "$(DEPDIR)/tunefs_reiserfs-tune.Tpo" -c -o tunefs_reiserfs-tune.o `test -f 'tune.c' || echo '$(srcdir)/'`tune.c; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/tunefs_reiserfs-tune.Tpo" "$(DEPDIR)/tunefs_reiserfs-tune.Po"; else rm -f "$(DEPDIR)/tunefs_reiserfs-tune.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tune.c' object='tunefs_reiserfs-tune.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tunefs_reiserfs_CFLAGS) $(CFLAGS) -c -o tunefs_reiserfs-tune.o `test -f 'tune.c' || echo '$(srcdir)/'`tune.c
+
+tunefs_reiserfs-tune.obj: tune.c
+@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tunefs_reiserfs_CFLAGS) $(CFLAGS) -MT tunefs_reiserfs-tune.obj -MD -MP -MF "$(DEPDIR)/tunefs_reiserfs-tune.Tpo" -c -o tunefs_reiserfs-tune.obj `if test -f 'tune.c'; then $(CYGPATH_W) 'tune.c'; else $(CYGPATH_W) '$(srcdir)/tune.c'; fi`; \
+@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/tunefs_reiserfs-tune.Tpo" "$(DEPDIR)/tunefs_reiserfs-tune.Po"; else rm -f "$(DEPDIR)/tunefs_reiserfs-tune.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tune.c' object='tunefs_reiserfs-tune.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tunefs_reiserfs_CFLAGS) $(CFLAGS) -c -o tunefs_reiserfs-tune.obj `if test -f 'tune.c'; then $(CYGPATH_W) 'tune.c'; else $(CYGPATH_W) '$(srcdir)/tune.c'; fi`
+uninstall-info-am:
+install-man8: $(man8_MANS) $(man_MANS)
+	@$(NORMAL_INSTALL)
+	test -z "$(man8dir)" || $(mkdir_p) "$(DESTDIR)$(man8dir)"
+	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+	for i in $$l2; do \
+	  case "$$i" in \
+	    *.8*) list="$$list $$i" ;; \
+	  esac; \
+	done; \
+	for i in $$list; do \
+	  if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+	  else file=$$i; fi; \
+	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+	  case "$$ext" in \
+	    8*) ;; \
+	    *) ext='8' ;; \
+	  esac; \
+	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
+	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+	  echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+	  $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+	done
+uninstall-man8:
+	@$(NORMAL_UNINSTALL)
+	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+	for i in $$l2; do \
+	  case "$$i" in \
+	    *.8*) list="$$list $$i" ;; \
+	  esac; \
+	done; \
+	for i in $$list; do \
+	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+	  case "$$ext" in \
+	    8*) ;; \
+	    *) ext='8' ;; \
+	  esac; \
+	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
+	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+	  echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+	  rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS)
+installdirs:
+	for dir in "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-man
+
+install-exec-am: install-sbinPROGRAMS
+
+install-info: install-info-am
+
+install-man: install-man8
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-local uninstall-man \
+	uninstall-sbinPROGRAMS
+
+uninstall-man: uninstall-man8
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-sbinPROGRAMS ctags distclean distclean-compile \
+	distclean-generic distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-data-local install-exec \
+	install-exec-am install-info install-info-am install-man \
+	install-man8 install-sbinPROGRAMS install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-info-am uninstall-local uninstall-man \
+	uninstall-man8 uninstall-sbinPROGRAMS
+
+
+uninstall-reiserfstune:
+	if test -f $(DESTDIR)$(sbindir)/reiserfstune; then \
+		rm -f $(DESTDIR)$(sbindir)/reiserfstune; \
+	fi;
+
+install-reiserfstune:
+	if test -f $(DESTDIR)$(sbindir)/tunefs.reiserfs; then \
+		rm -f $(DESTDIR)$(sbindir)/reiserfstune; \
+		ln $(DESTDIR)$(sbindir)/tunefs.reiserfs $(DESTDIR)$(sbindir)/reiserfstune; \
+	fi;
+
+install-data-local: install-reiserfstune
+uninstall-local: uninstall-reiserfstune
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tune/tune.c b/utils/tune/tune.c
similarity index 67%
rename from tune/tune.c
rename to utils/tune/tune.c
index 869c7ba..2f074fd 100644
--- a/tune/tune.c
+++ b/utils/tune/tune.c
@@ -3,14 +3,28 @@
  * reiserfsprogs/README
  */
 
-#define _GNU_SOURCE
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
 
 #include "tune.h"
+#include "misc/unaligned.h"
+#include "util/misc.h"
+#include "util/badblock.h"
+#include "util/device.h"
+#include "util/print.h"
 
+#include <stdarg.h>
+#include <getopt.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#if 0
 #include <getopt.h>
 #include <stdarg.h>
 #include <string.h>
 #include <errno.h>
+#endif
 
 char *program_name;
 
@@ -19,17 +33,16 @@
 
 static void message( const char * fmt, ... )
 {
-    char *buf;
+    char buf[4096];
     va_list args;
 	
-    buf = NULL;
+    buf[0] = '\0';
     va_start( args, fmt );
-    vasprintf( &buf, fmt, args );
+    vsprintf( buf, fmt, args );
     va_end( args );
 
-    if( buf ) {
+    if( buf[0] != '\0' ) {
 	fprintf( stderr, "%s: %s\n", program_name, buf );
-	free( buf );
     }
 }
 
@@ -71,10 +84,10 @@
 /* If specified paramenters defines the standard journal, make it standard. */
 static int should_make_journal_standard (reiserfs_filsys_t * fs, char * j_new_dev_name)
 {
-    if (!is_reiserfs_jr_magic_string (fs->fs_ondisk_sb))
+    if (!reiserfs_super_jr_magic (fs->fs_ondisk_sb))
 	return 0;
 /*    
-    if (!user_confirmed (stderr, "ATTENTION! Filesystem with non-standard journal "
+    if (!util_user_confirmed (stderr, "ATTENTION! Filesystem with non-standard journal "
 			 "found. Continue? (y/n):", "y\n")) {
 	exit(1);
     }
@@ -88,7 +101,7 @@
 	    return 0;
 	
 	if (Journal_size && Journal_size != 
-	    journal_default_size(fs->fs_super_bh->b_blocknr, fs->fs_blocksize) + 1) 
+	    reiserfs_journal_default(fs->fs_super_bh->b_blocknr, fs->fs_blocksize) + 1) 
 	    return 0;
 	
 	if (Max_trans_size && (Max_trans_size != JOURNAL_TRANS_MAX))
@@ -96,11 +109,11 @@
     } else {
 	/* new journal was not specified - check ondisk journal params */
 	
-	if (get_sb_reserved_for_journal(fs->fs_ondisk_sb) < 
-	    journal_default_size (fs->fs_super_bh->b_blocknr, fs->fs_blocksize) + 1)
+	if (reiserfs_sb_get_reserved(fs->fs_ondisk_sb) < 
+	    reiserfs_journal_default (fs->fs_super_bh->b_blocknr, fs->fs_blocksize) + 1)
 	{
 	    message ("Can not create standard journal of the size %llu",
-		     journal_default_size(fs->fs_super_bh->b_blocknr, fs->fs_blocksize) + 1);
+		     reiserfs_journal_default(fs->fs_super_bh->b_blocknr, fs->fs_blocksize) + 1);
 	    return 0;
 	}
     }
@@ -110,50 +123,50 @@
 
 static int set_standard_journal_params (reiserfs_filsys_t * fs)
 {
-    struct buffer_head * bh;
+    reiserfs_bh_t * bh;
 
     /* ondisk superblock update */
 
-    if (get_sb_version(fs->fs_ondisk_sb) == 0)
+    if (reiserfs_sb_get_version(fs->fs_ondisk_sb) == 0)
 	memcpy (fs->fs_ondisk_sb->s_v1.s_magic, REISERFS_3_5_SUPER_MAGIC_STRING,
 		strlen (REISERFS_3_5_SUPER_MAGIC_STRING));
-    else if (get_sb_version(fs->fs_ondisk_sb) == 2)
+    else if (reiserfs_sb_get_version(fs->fs_ondisk_sb) == 2)
 	memcpy (fs->fs_ondisk_sb->s_v1.s_magic, REISERFS_3_6_SUPER_MAGIC_STRING,
 		strlen (REISERFS_3_6_SUPER_MAGIC_STRING));
     else {
 	message ("Can not set standard reiserfs magic: unknown format found %u,"
-		 " try reiserfsck first", get_sb_version(fs->fs_ondisk_sb));
+		 " try reiserfsck first", reiserfs_sb_get_version(fs->fs_ondisk_sb));
 	return 0;
     }
     
-    set_jp_journal_1st_block (sb_jp(fs->fs_ondisk_sb), get_journal_start_must (fs));
-    set_jp_journal_dev (sb_jp(fs->fs_ondisk_sb), 0);
-    set_jp_journal_size (sb_jp(fs->fs_ondisk_sb), journal_default_size(fs->fs_super_bh->b_blocknr, fs->fs_blocksize));
+    reiserfs_jp_set_start (reiserfs_sb_jp(fs->fs_ondisk_sb), reiserfs_journal_start_must (fs));
+    reiserfs_jp_set_dev (reiserfs_sb_jp(fs->fs_ondisk_sb), 0);
+    reiserfs_jp_set_size (reiserfs_sb_jp(fs->fs_ondisk_sb), reiserfs_journal_default(fs->fs_super_bh->b_blocknr, fs->fs_blocksize));
 
-    if (get_jp_journal_max_trans_len(sb_jp(fs->fs_ondisk_sb)) != JOURNAL_TRANS_MAX)
-	set_jp_journal_max_trans_len(sb_jp(fs->fs_ondisk_sb), JOURNAL_TRANS_MAX);
-    if (get_jp_journal_max_batch(sb_jp(fs->fs_ondisk_sb)) != JOURNAL_MAX_BATCH)
-	set_jp_journal_max_batch(sb_jp(fs->fs_ondisk_sb), JOURNAL_MAX_BATCH);
-    if (get_jp_journal_max_commit_age(sb_jp(fs->fs_ondisk_sb)) != JOURNAL_MAX_COMMIT_AGE)
-	set_jp_journal_max_commit_age(sb_jp(fs->fs_ondisk_sb), JOURNAL_MAX_COMMIT_AGE);
-    if (get_jp_journal_max_trans_age(sb_jp(fs->fs_ondisk_sb)) != JOURNAL_MAX_TRANS_AGE)
-	set_jp_journal_max_trans_age(sb_jp(fs->fs_ondisk_sb), JOURNAL_MAX_TRANS_AGE);
-    set_sb_reserved_for_journal (fs->fs_ondisk_sb, 0);
+    if (reiserfs_jp_get_tlen(reiserfs_sb_jp(fs->fs_ondisk_sb)) != JOURNAL_TRANS_MAX)
+	reiserfs_jp_set_tlen(reiserfs_sb_jp(fs->fs_ondisk_sb), JOURNAL_TRANS_MAX);
+    if (reiserfs_jp_get_max_batch(reiserfs_sb_jp(fs->fs_ondisk_sb)) != JOURNAL_MAX_BATCH)
+	reiserfs_jp_set_max_batch(reiserfs_sb_jp(fs->fs_ondisk_sb), JOURNAL_MAX_BATCH);
+    if (reiserfs_jp_get_commit_age(reiserfs_sb_jp(fs->fs_ondisk_sb)) != JOURNAL_MAX_COMMIT_AGE)
+	reiserfs_jp_set_commit_age(reiserfs_sb_jp(fs->fs_ondisk_sb), JOURNAL_MAX_COMMIT_AGE);
+    if (reiserfs_jp_get_trans_age(reiserfs_sb_jp(fs->fs_ondisk_sb)) != JOURNAL_MAX_TRANS_AGE)
+	reiserfs_jp_set_trans_age(reiserfs_sb_jp(fs->fs_ondisk_sb), JOURNAL_MAX_TRANS_AGE);
+    reiserfs_sb_set_reserved (fs->fs_ondisk_sb, 0);
     
     /* journal_header update */
-    bh = getblk(fs->fs_journal_dev, 
-	    get_jp_journal_1st_block(sb_jp(fs->fs_ondisk_sb)) + 
-	    get_jp_journal_size(sb_jp(fs->fs_ondisk_sb)), fs->fs_blocksize);
+    bh = reiserfs_buffer_open(fs->fs_journal_dev, 
+	    reiserfs_jp_get_start(reiserfs_sb_jp(fs->fs_ondisk_sb)) + 
+	    reiserfs_jp_get_size(reiserfs_sb_jp(fs->fs_ondisk_sb)), fs->fs_blocksize);
     
     if (!bh) {
-	message ("Cannot get the journal header block. getblk failed.\n");
+	message ("Cannot get the journal header block. reiserfs_buffer_open failed.\n");
 	return 0;
     }
-    ((struct reiserfs_journal_header *)(bh->b_data))->jh_journal = *(sb_jp(fs->fs_ondisk_sb));
-    mark_buffer_uptodate (bh, 1);
-    mark_buffer_dirty (bh);
-    bwrite(bh);
-    brelse(bh);
+    ((struct reiserfs_journal_header *)(bh->b_data))->jh_journal = *(reiserfs_sb_jp(fs->fs_ondisk_sb));
+    reiserfs_buffer_mkuptodate (bh, 1);
+    reiserfs_buffer_mkdirty (bh);
+    reiserfs_buffer_write(bh);
+    reiserfs_buffer_close(bh);
 
     return 1;
 }
@@ -161,26 +174,26 @@
 void zero_journal (reiserfs_filsys_t * fs)
 {
     unsigned int i;
-    struct buffer_head * bh;
+    reiserfs_bh_t * bh;
     unsigned long done;
     unsigned long start, len;
 
 
     fprintf (stderr, "Initializing journal - ");
 
-    start = get_jp_journal_1st_block (sb_jp (fs->fs_ondisk_sb));
-    len = get_jp_journal_size (sb_jp (fs->fs_ondisk_sb));
+    start = reiserfs_jp_get_start (reiserfs_sb_jp (fs->fs_ondisk_sb));
+    len = reiserfs_jp_get_size (reiserfs_sb_jp (fs->fs_ondisk_sb));
     done = 0;
     for (i = 0; i < len; i ++) {
-        print_how_far (stderr, &done, len, 1, 1/*be quiet*/);
-        bh = getblk (fs->fs_journal_dev, start + i, fs->fs_blocksize);
+        util_misc_progress (stderr, &done, len, 1, 2);
+        bh = reiserfs_buffer_open (fs->fs_journal_dev, start + i, fs->fs_blocksize);
 	if (!bh)
-	    die ("zero_journal: getblk failed");
+	    misc_die ("zero_journal: reiserfs_buffer_open failed");
         memset (bh->b_data, 0, bh->b_size);
-        mark_buffer_dirty (bh);
-        mark_buffer_uptodate (bh, 1);
-        bwrite (bh);
-        brelse (bh);
+        reiserfs_buffer_mkdirty (bh);
+        reiserfs_buffer_mkuptodate (bh, 1);
+        reiserfs_buffer_write (bh);
+        reiserfs_buffer_close (bh);
     }
 
     fprintf (stderr, "\n");
@@ -195,7 +208,7 @@
 
     val = (int) strtol (str, &tmp, 0);
     if (*tmp)
-	die ("%s: strtol is unable to make an integer of %s\n", program_name, str);
+	misc_die ("%s: strtol is unable to make an integer of %s\n", program_name, str);
     return val;
 }
 
@@ -220,16 +233,16 @@
 
 
 static void callback_new_badblocks(reiserfs_filsys_t *fs, 
-				   struct path *badblock_path, 
+				   reiserfs_path_t *badblock_path, 
 				   void *data) 
 {
-	struct item_head *tmp_ih;
+	reiserfs_ih_t *tmp_ih;
 	__u32 *ind_item, i;
 
-	tmp_ih = get_ih(badblock_path);
-	ind_item = (__u32 *)get_item(badblock_path);
+	tmp_ih = REISERFS_PATH_IH(badblock_path);
+	ind_item = (__u32 *)REISERFS_PATH_ITEM(badblock_path);
 
-	for (i = 0; i < I_UNFM_NUM(tmp_ih); i++) {
+	for (i = 0; i < reiserfs_ext_count(tmp_ih); i++) {
 		if (reiserfs_bitmap_test_bit(fs->fs_badblocks_bm, 
 					     d32_get (ind_item, i)))
 		{
@@ -241,48 +254,48 @@
 		}
 	}
 	
-	pathrelse (badblock_path);
+	reiserfs_tree_pathrelse (badblock_path);
 }
 
 static void callback_clear_badblocks(reiserfs_filsys_t *fs, 
-				     struct path *badblock_path, 
+				     reiserfs_path_t *badblock_path, 
 				     void *data) 
 {
-	struct item_head *tmp_ih;
+	reiserfs_ih_t *tmp_ih;
 	__u32 *ind_item, i;
 
-	tmp_ih = get_ih(badblock_path);
-	ind_item = (__u32 *)get_item(badblock_path);
+	tmp_ih = REISERFS_PATH_IH(badblock_path);
+	ind_item = (__u32 *)REISERFS_PATH_ITEM(badblock_path);
 
-	for (i = 0; i < I_UNFM_NUM(tmp_ih); i++) {
+	for (i = 0; i < reiserfs_ext_count(tmp_ih); i++) {
 		reiserfs_bitmap_clear_bit(fs->fs_bitmap2, 
 					  d32_get(ind_item, i));
 	}
 	
-	pathrelse (badblock_path);
+	reiserfs_tree_pathrelse (badblock_path);
 }
 
 static void add_badblocks(reiserfs_filsys_t *fs) {
 	unsigned long i, marked = 0;
 	
-	if (reiserfs_open_ondisk_bitmap (fs) < 0) {
+	if (reiserfs_bitmap_open (fs) < 0) {
 	    message("Failed to open reiserfs ondisk bitmap.\n");
-	    reiserfs_close(fs);
+	    reiserfs_fs_close(fs);
 	    exit(1);
 	}
 	
-	if (create_badblock_bitmap (fs, badblocks_file)) {
+	if (util_badblock_load (fs, badblocks_file)) {
 	    message("Failed to initialize the bad block bitmap.\n");
-	    reiserfs_close(fs);
+	    reiserfs_fs_close(fs);
 	    exit(1);
 	}
 	
 	if (Bads == 1)
-		badblock_list(fs, callback_new_badblocks, NULL);
+		reiserfs_badblock_traverse(fs, callback_new_badblocks, NULL);
 	else
-		badblock_list(fs, callback_clear_badblocks, NULL);
+		reiserfs_badblock_traverse(fs, callback_clear_badblocks, NULL);
 	
-	for (i = 0; i < get_sb_block_count (fs->fs_ondisk_sb); i ++) {
+	for (i = 0; i < reiserfs_sb_get_blocks (fs->fs_ondisk_sb); i ++) {
 	    if (reiserfs_bitmap_test_bit (fs->fs_badblocks_bm, i)) {
 		if (!reiserfs_bitmap_test_bit (fs->fs_bitmap2, i)) {
 		    reiserfs_bitmap_set_bit (fs->fs_bitmap2, i);
@@ -299,19 +312,19 @@
 	}
 	
 	if (marked) {
-		set_sb_free_blocks(fs->fs_ondisk_sb, get_sb_free_blocks(fs->fs_ondisk_sb) - 
+		reiserfs_sb_set_free(fs->fs_ondisk_sb, reiserfs_sb_get_free(fs->fs_ondisk_sb) - 
 				   fs->fs_badblocks_bm->bm_set_bits);
-		mark_buffer_dirty(fs->fs_super_bh);
+		reiserfs_buffer_mkdirty(fs->fs_super_bh);
 	}
 	
 	if (Bads == 1) {
 		/* fs->fs_badblocks_bm contains blocks which are not in the bad 
 		   block list yet. Merge it with what is in the tree already. */
-		badblock_list(fs, mark_badblock, NULL);
+		reiserfs_badblock_traverse(fs, reiserfs_badblock_extract, NULL);
 	}
 	
 	if (marked) {
-		add_badblock_list(fs, 1);
+		reiserfs_badblock_flush(fs, 1);
 	}
 	
 	message("%lu blocks were marked as bad.", marked);
@@ -408,11 +421,11 @@
 	    Force ++;
 	    break;
 	case 'b': /* --add-badblocks */
-	    asprintf (&badblocks_file, "%s", optarg);
+	    badblocks_file = optarg;
 	    Bads = 1;
 	    break;
 	case 'B': /* --badblocks */
-	    asprintf (&badblocks_file, "%s", optarg);
+	    badblocks_file = optarg;
 	    Bads = 2;
 	    break;
 	case 'u':
@@ -437,7 +450,7 @@
 	    LABEL = optarg;
             break;
 	case 'V':
-	    print_banner("reiserfstune");
+	    util_print_banner("reiserfstune");
 	    exit(0);
 #if 0
 	case 'J': /* --journal-new-device */
@@ -464,8 +477,8 @@
     /* device to be formatted */
     device_name = argv [optind];
 
-    fs = reiserfs_open (device_name, O_RDONLY, 0, NULL, 1);
-    if (no_reiserfs_found(fs)) {
+    fs = reiserfs_fs_open (device_name, O_RDONLY, 0, NULL, 1);
+    if (fs == NULL) {
 	message ("Cannot open reiserfs on %s", device_name);
         return 1;
     }
@@ -474,25 +487,25 @@
        --no-journal-available has been specified by user */
 
     /* make sure filesystem is not mounted */
-    if (misc_device_mounted(fs->fs_file_name) > 0) {
+    if (util_device_mounted(fs->fs_file_name) > 0) {
 	/* fixme: it can not be mounted, btw */
         message ("Reiserfstune is not allowed to be run on mounted filesystem.");
-	reiserfs_close (fs);
+	reiserfs_fs_close (fs);
         return 1;
     }
     
-    if (!reiserfs_is_fs_consistent (fs)) {
+    if (!reiserfs_sb_state_ok (fs)) {
 	message ("Filesystem looks not cleanly umounted, check the consistency first.\n");
-	reiserfs_close (fs);
+	reiserfs_fs_close (fs);
 	return 1;
     }
 
-    reiserfs_reopen (fs, O_RDWR);
+    reiserfs_fs_reopen (fs, O_RDWR);
     
     if (badblocks_file) {
 	add_badblocks(fs);
 	
-	reiserfs_close(fs);
+	reiserfs_fs_close(fs);
 	exit(0);
     }
     
@@ -518,10 +531,10 @@
     /* now we try to open journal, it makes sence if there is no the flag
        NEED_TUNE  in ondisk superblock and --no-journal available is not 
        specified. */
-    if (get_jp_journal_magic(sb_jp(fs->fs_ondisk_sb)) != NEED_TUNE && 
+    if (reiserfs_jp_get_magic(reiserfs_sb_jp(fs->fs_ondisk_sb)) != NEED_TUNE && 
 	!(Options & OPT_SKIP_J)) 
     {
-	if (reiserfs_open_journal (fs, jdevice_name, O_RDWR 
+	if (reiserfs_journal_open (fs, jdevice_name, O_RDWR 
 #if defined(O_LARGEFILE)
 				   | O_LARGEFILE
 #endif
@@ -533,7 +546,7 @@
 
 	if (reiserfs_journal_params_check(fs)) {
 	    message ("Unable to open old journal. Wrong journal parameters.");
-	    reiserfs_close (fs);
+	    reiserfs_fs_close (fs);
 	    return 1;
 	}
     }
@@ -541,20 +554,20 @@
     /* in spite of journal was opened, the file system can be non-consistent or
        there are non-replayed transaction in journal, 
        make sure it isn't (if there is no the flag NEED_TUNE in ondisk superblock */
-    if (get_jp_journal_magic(sb_jp(fs->fs_ondisk_sb)) != NEED_TUNE &&
+    if (reiserfs_jp_get_magic(reiserfs_sb_jp(fs->fs_ondisk_sb)) != NEED_TUNE &&
 	reiserfs_journal_opened (fs)) {
 	j_head = (struct reiserfs_journal_header *)(fs->fs_jh_bh->b_data);
-	if (get_boundary_transactions(fs, &old, &new)) {
-	    if (new.trans_id != get_jh_last_flushed(j_head)) {
+	if (reiserfs_journal_get_transactions(fs, &old, &new)) {
+	    if (new.trans_id != reiserfs_jh_get_flushed(j_head)) {
 		message ("There are non-replayed transaction in old journal,"
 			 " check filesystem consistency first");
-		reiserfs_close (fs);
+		reiserfs_fs_close (fs);
 		return 1;
 	    }
 	}
-	if (!reiserfs_is_fs_consistent (fs)) {
+	if (!reiserfs_sb_state_ok (fs)) {
 	    message ("Check filesystem consistency first");
-	    reiserfs_close (fs);
+	    reiserfs_fs_close (fs);
 	    return 1;
 	} 
     }
@@ -564,15 +577,15 @@
 #if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)
         if (!uuid_is_null(UUID)) {
 	    memcpy (fs->fs_ondisk_sb->s_uuid, UUID, 16);
-	    mark_buffer_dirty (fs->fs_super_bh);
+	    reiserfs_buffer_mkdirty (fs->fs_super_bh);
 	    fs->fs_dirt = 1;
 	}
 #endif	
 	if (LABEL != NULL) {
 	    if (strlen (LABEL) > 16)
 	        message ("Specified LABEL is longer then 16 characters, will be truncated\n");
-	    strncpy (fs->fs_ondisk_sb->s_label, LABEL, 16);
-	    mark_buffer_dirty (fs->fs_super_bh);
+	    strncpy ((char *)fs->fs_ondisk_sb->s_label, LABEL, 16);
+	    reiserfs_buffer_mkdirty (fs->fs_super_bh);
 	    fs->fs_dirt = 1;
 	}
     } else {
@@ -588,13 +601,13 @@
 	
 	/* new journal device hasn't been specified */
 	printf ("Current parameters:\n");
-	print_filesystem_state (stdout, fs);
-	print_block (stdout, fs, fs->fs_super_bh);
+	reiserfs_super_print_state (stdout, fs);
+	reiserfs_node_print (stdout, fs, fs->fs_super_bh);
 
 	if ((Options & OPT_STANDARD)
 	    && should_make_journal_standard(fs, j_new_device_name)) 
 	{
-	    if (!user_confirmed (stderr, "ATTENTION! Filesystem with "
+	    if (!util_user_confirmed (stderr, "ATTENTION! Filesystem with "
 		"non-standard journal found. Continue? (y/n):", "y\n")) 
 	    {
 		exit(1);
@@ -603,13 +616,13 @@
 	    fs->fs_journal_dev = fs->fs_dev;
 	    if (set_standard_journal_params (fs)) {
 		printf ("\nNew parameters:\n");
-		print_filesystem_state (stdout, fs);
-		print_block (stdout, fs, fs->fs_super_bh);
+		reiserfs_super_print_state (stdout, fs);
+		reiserfs_node_print (stdout, fs, fs->fs_super_bh);
 		printf ("New journal parameters:\n");
-		print_journal_params (stdout, sb_jp (fs->fs_ondisk_sb));
-		mark_buffer_dirty (fs->fs_super_bh);
-		mark_buffer_uptodate (fs->fs_super_bh, 1);
-		reiserfs_close (fs);
+		reiserfs_journal_print_params (stdout, reiserfs_sb_jp (fs->fs_ondisk_sb));
+		reiserfs_buffer_mkdirty (fs->fs_super_bh);
+		reiserfs_buffer_mkuptodate (fs->fs_super_bh, 1);
+		reiserfs_fs_close (fs);
 		printf ("Syncing.."); fflush (stdout);
 		sync ();
 		printf ("ok\n");
@@ -630,15 +643,15 @@
 	} else {	
 	    /* the only parameter has been specified is device_name, so
 	       there is nothing to do */
-	    reiserfs_close (fs);
+	    reiserfs_fs_close (fs);
 	    return 0;
 	}
     }
 		    
     /* new journal device has been specified */
     /* make sure new journal device is block device file */
-    if (!can_we_format_it (j_new_device_name, Force)) {
-	reiserfs_close (fs);
+    if (!util_device_formatable (j_new_device_name, Force)) {
+	reiserfs_fs_close (fs);
         return 1;
     }
 
@@ -647,72 +660,67 @@
 	/* we have to put journal on main device. It is only possible if there
 	   is enough space reserved by mkreiserfs */
 
-	if (!is_reiserfs_jr_magic_string (fs->fs_ondisk_sb))
+	if (!reiserfs_super_jr_magic (fs->fs_ondisk_sb))
 	    /* standard journal */
-	    reserved = get_jp_journal_size(sb_jp(fs->fs_ondisk_sb)) + 1;
+	    reserved = reiserfs_jp_get_size(reiserfs_sb_jp(fs->fs_ondisk_sb)) + 1;
 	else
 	    /* non-standard journal */
-	    reserved = get_sb_reserved_for_journal (fs->fs_ondisk_sb);
+	    reserved = reiserfs_sb_get_reserved (fs->fs_ondisk_sb);
 		
 	journal_size = Journal_size;
 	
 	if (!journal_size) {
-	    journal_size = journal_default_size(fs->fs_super_bh->b_blocknr, fs->fs_blocksize) + 1;
+	    journal_size = reiserfs_journal_default(fs->fs_super_bh->b_blocknr, fs->fs_blocksize) + 1;
 	    message("Journal size has not been specified. Assuming it is the default size (%lu)", 
 		journal_size);
 	}
 	
-/*	journal_size = (Journal_size ? Journal_size : // specified
-			(fs->fs_blocksize == 1024 ? (fs->fs_blocksize) * 8 - 3 -
-			 REISERFS_DISK_OFFSET_IN_BYTES / fs->fs_blocksize :
-			 JOURNAL_DEFAULT_SIZE + 1));	// default
-*/
-	if (journal_size + Offset > get_journal_start_must (fs) + reserved) {
+	if (journal_size + Offset > reiserfs_journal_start_must (fs) + reserved) {
 		message ("There is no enough space reserved for journal on main "
 			 "device (journal_size=%lu, reserved=%lu)\n", journal_size,
 			 reserved);
-	    reiserfs_close (fs);
+	    reiserfs_fs_close (fs);
 	    return 1;
 	}
     }
 
     message ("Current journal parameters:");
-    print_journal_params (stdout, sb_jp (fs->fs_ondisk_sb));
+    reiserfs_journal_print_params (stdout, reiserfs_sb_jp (fs->fs_ondisk_sb));
 
-    if (!is_reiserfs_jr_magic_string (fs->fs_ondisk_sb)) {
+    if (!reiserfs_super_jr_magic (fs->fs_ondisk_sb)) {
 	/* we have standard journal, so check if we can convert it
 	   to non-standard one */
 	
 	/*
 	if (!should_make_journal_non_standard (Force)) {
-	    reiserfs_close (fs);
+	    reiserfs_fs_close (fs);
 	    return 1;
 	}
 	*/
 	
-        if (is_reiserfs_3_6_magic_string (fs->fs_ondisk_sb))
-	    set_sb_version (fs->fs_ondisk_sb, REISERFS_FORMAT_3_6);
-        else if (is_reiserfs_3_5_magic_string (fs->fs_ondisk_sb))
-	    set_sb_version (fs->fs_ondisk_sb, REISERFS_FORMAT_3_5);
+        if (reiserfs_super_36_magic (fs->fs_ondisk_sb))
+	    reiserfs_sb_set_version (fs->fs_ondisk_sb, REISERFS_FORMAT_3_6);
+        else if (reiserfs_super_35_magic (fs->fs_ondisk_sb))
+	    reiserfs_sb_set_version (fs->fs_ondisk_sb, REISERFS_FORMAT_3_5);
         else {
             message ("Could not convert from unknown version, try reiserfsck first");
-	    reiserfs_close (fs);
+	    reiserfs_fs_close (fs);
             return 1;
         }
         
 	memcpy (fs->fs_ondisk_sb->s_v1.s_magic, REISERFS_JR_SUPER_MAGIC_STRING,
 		strlen (REISERFS_JR_SUPER_MAGIC_STRING));
-	set_sb_reserved_for_journal (fs->fs_ondisk_sb,
-		get_jp_journal_size (sb_jp(fs->fs_ondisk_sb)) + 1);
+	reiserfs_sb_set_reserved (fs->fs_ondisk_sb,
+		reiserfs_jp_get_size (reiserfs_sb_jp(fs->fs_ondisk_sb)) + 1);
     }
 
     /* now we are going to close old journal and to create a new one */
-    reiserfs_close_journal (fs);
+    reiserfs_journal_close (fs);
 
-    if (!reiserfs_create_journal (fs, j_new_device_name, Offset,
+    if (!reiserfs_journal_create (fs, j_new_device_name, Offset,
 				  Journal_size, Max_trans_size)) {
 	message ("Could not create new journal");
-	reiserfs_close (fs);
+	reiserfs_fs_close (fs);
         return 1;
     }
 
@@ -720,22 +728,22 @@
 	set_standard_journal_params (fs);
 
     message ("New journal parameters:");
-    print_journal_params (stdout, sb_jp (fs->fs_ondisk_sb));
+    reiserfs_journal_print_params (stdout, reiserfs_sb_jp (fs->fs_ondisk_sb));
 
-    print_block (stdout, fs, fs->fs_super_bh);
+    reiserfs_node_print (stdout, fs, fs->fs_super_bh);
 
     if (Force < 2) {
         message ("ATTENTION: YOU ARE ABOUT TO SETUP THE NEW JOURNAL FOR THE \"%s\"!\n"
                  "AREA OF \"%s\" DEDICATED FOR JOURNAL WILL BE ZEROED!",
 		 device_name, j_new_device_name);
         
-        if (!user_confirmed (stderr, "Continue (y/n):", "y\n")) {
+        if (!util_user_confirmed (stderr, "Continue (y/n):", "y\n")) {
             return 1;
 	}
     }
 
     zero_journal (fs);    
-    reiserfs_close (fs);
+    reiserfs_fs_close (fs);
     
     printf ("Syncing.."); fflush (stdout);
     sync ();
diff --git a/tune/tune.h b/utils/tune/tune.h
similarity index 92%
rename from tune/tune.h
rename to utils/tune/tune.h
index 7a854e7..56a9a01 100644
--- a/tune/tune.h
+++ b/utils/tune/tune.h
@@ -3,16 +3,16 @@
  * reiserfsprogs/README
  */
 
-#ifndef HAVE_CONFIG_H
-#  include "config.h"
-#endif
+#include "reiserfs/libreiserfs.h"
 
+#if 0
 #include "io.h"
 #include "misc.h"
 #include "reiserfs_lib.h"
 
 #include "../version.h"
 
+#endif
 #if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)
 #  include <uuid/uuid.h>
 #endif
diff --git a/tune/reiserfstune.8 b/utils/tune/tunefs.reiserfs.8
similarity index 80%
rename from tune/reiserfstune.8
rename to utils/tune/tunefs.reiserfs.8
index 38ad85b..a4e4d6c 100644
--- a/tune/reiserfstune.8
+++ b/utils/tune/tunefs.reiserfs.8
@@ -1,11 +1,11 @@
 .\" -*- nroff -*-
 .\" Copyright 1996-2004 Hans Reiser.
 .\" 
-.TH REISERFSTUNE 8 "February 2004" "Reiserfsprogs-3.6.19"
+.TH tunefs.reiserfs 8 "February 2004" "Reiserfsprogs-3.6.19"
 .SH NAME
-reiserfstune \- The tunning tool for the ReiserFS filesystem.
+tune.reiserfs \- The tuning tool for the ReiserFS filesystem.
 .SH SYNOPSIS
-.B reiserfstune
+.B tune.reiserfs
 [ \fB-f\fR ]
 [ \fB-j\fR | \fB--journal-device\fR \fIFILE\fR ]
 [ \fB--no-journal-available\fR ]
@@ -19,11 +19,11 @@
 [ \fB-l\fR | \fB--label \fILABEL\fR ]
 .I device
 .SH DESCRIPTION
-\fBreiserfstune\fR is used for tuning the ReiserFS. It can change two journal 
+\fBtune.reiserfs\fR is used for tuning the ReiserFS. It can change two journal 
 parameters (the journal size and the maximum transaction size), and it can move 
 the journal's location to a new specified block device. (The old ReiserFS's 
 journal may be kept unused, or discarded at the user's option.) Besides that
-\fBreiserfstune\fR can store the bad block list to the ReiserFS and set UUID
+\fBtune.reiserfs\fR can store the bad block list to the ReiserFS and set UUID
 and LABEL.
 Note: At the time of writing the relocated journal was implemented for a special 
 release of ReiserFS, and was not expected to be put into the mainstream kernel
@@ -42,27 +42,27 @@
 .TP
 \fB-j\fR | \fB--journal-device\fR \fIFILE
 \fIFILE\fR is the file name of the block device the file system has
-the current journal (the one prior to running reiserfstune) on. This option is required when the journal is
+the current journal (the one prior to running tune.reiserfs) on. This option is required when the journal is
 already on a separate device from the main data device (although it
 can be avoided with \fB--no-journal-available\fR). If you don't
-specify journal device by this option, reiserfstune suppose that
+specify journal device by this option, tune.reiserfs suppose that
 journal is on main device.
 .TP
 \fB--no-journal-available
-allows \fBreiserfstune\fR to continue when the current journal's block
+allows \fBtune.reiserfs\fR to continue when the current journal's block
 device is no longer available.  This might happen if a disk goes bad
 and you remove it (and run fsck).
 .TP
 \fB--journal-new-device \fIFILE
 \fIFILE\fR is the file name of the block device which will contain the
 new journal for the file system. If you don't specify this,
-reiserfstune supposes that journal device remains the same.				
+tune.reiserfs supposes that journal device remains the same.				
 .TP	
 \fB \-s\fR | \fB\--journal-new-size \fIN
 \fIN\fR is the size parameter for the new journal. When journal is to
 be on a separate device - its size defaults to number of blocks that
 device has. When journal is to be on the same device as the filesytem - its size defaults
-to amount of blocks allocated for journal by \fImkreiserfs\fR when it
+to amount of blocks allocated for journal by \fImkfs.reiserfs\fR when it
 created the filesystem. Minimum is 513 for
 both cases.
 .TP
@@ -90,7 +90,7 @@
 in the \fIFile\fR is added to the fs.
 .TP
 \fB\-f\fR | \fB--force\fR 
-Normally \fBreiserfstune\fR will refuse to change a journal of a
+Normally \fBtune.reiserfs\fR will refuse to change a journal of a
 file system that was created before this journal relocation code. This
 is because if you change the journal, you cannot go back (without special
 option \fB--make-journal-standard\fR) to an old kernel that lacks this feature and be able to use your filesytem.  This option forces it to do that. Specified more
@@ -113,21 +113,21 @@
 .TP
 \fB-l\fR | \fB--label \fILABEL\fR
 Set  the  volume  label  of  the filesystem. \fILABEL\fR can be at most 16
-characters long; if it is longer than 16 characters, reiserfstune will truncate it.
+characters long; if it is longer than 16 characters, tune.reiserfs will truncate it.
 .SH POSSIBLE SCENARIOS OF USING REISERFSTUNE:
 1. You have ReiserFS on /dev/hda1, and you wish to have
 it working with its journal on the device /dev/journal
 .nf
 .IP
 boot kernel patched with special "relocatable journal support" patch
-reiserfstune /dev/hda1 --journal-new-device /dev/journal -f
+tune.reiserfs /dev/hda1 --journal-new-device /dev/journal -f
 mount /dev/hda1 and use.
 You would like to change max transaction size to 512 blocks
-reiserfstune -t 512 /dev/hda1
+tune.reiserfs -t 512 /dev/hda1
 You would like to use your file system on another kernel that doesn't 
 contain relocatable journal support.
 umount /dev/hda1
-reiserfstune /dev/hda1 -j /dev/journal --journal-new-device /dev/hda1 --make-journal-standard
+tune.reiserfs /dev/hda1 -j /dev/journal --journal-new-device /dev/hda1 --make-journal-standard
 mount /dev/hda1 and use.
 .LP
 2. You would like to have ReiserFS on /dev/hda1 and to be able to
@@ -136,26 +136,26 @@
 .nf
 .IP
 boot kernel patched with special "relocatable journal support" patch
-mkreiserfs /dev/hda1
+mkfs.reiserfs /dev/hda1
 you got solid state disk (perhaps /dev/sda, they typically look like scsi disks)
-reiserfstune --journal-new-device /dev/sda1 -f /dev/hda1
+tune.reiserfs --journal-new-device /dev/sda1 -f /dev/hda1
 Your scsi device dies, it is three in the morning, you have an extra IDE device
 lying around
-reiserfsck --no-journal-available /dev/hda1
+fsck.reiserfs --no-journal-available /dev/hda1
 or
-reiserfsck --rebuild-tree --no-journal-available /dev/hda1
-reiserfstune --no-journal-available --journal-new-device /dev/hda1 /dev/hda1
+fsck.reiserfs --rebuild-tree --no-journal-available /dev/hda1
+tune.reiserfs --no-journal-available --journal-new-device /dev/hda1 /dev/hda1
 using /dev/hda1 under patched kernel
 .SH AUTHOR
-This version of \fBreiserfstune\fR has been written by Vladimir
+This version of \fBtune.reiserfs\fR has been written by Vladimir
 Demidov <vova@namesys.com> and Edward Shishkin <edward@namesys.com>.
 .SH BUGS
 Please report bugs to the ReiserFS developers <reiserfs-dev@namesys.com>, providing
 as much information as possible--your hardware, kernel, patches, settings, all printed
 messages; check the syslog file for any related information.
 .SH SEE ALSO
-.BR reiserfsck (8),
-.BR debugreiserfs (8),
-.BR mkreiserfs (8)
+.BR fsck.reiserfs (8),
+.BR debugfs.reiserfs (8),
+.BR mkfs.reiserfs (8)
 
  
diff --git a/version.h b/version.h
deleted file mode 100644
index dd8dd95..0000000
--- a/version.h
+++ /dev/null
@@ -1,6 +0,0 @@
-/*
- * Copyright 2002-2004 Hans Reiser, licensing governed by reiserfsprogs/README
- */
-
-#define print_banner(prog) \
-fprintf(stderr, "%s %s (2003 www.namesys.com)\n\n", prog, VERSION)