File xview-buildsystem.patch of Package xview

diff -rNu xview-3.2p1.4-old/Build-LinuxXView.bash xview-3.2p1.4/Build-LinuxXView.bash
--- xview-3.2p1.4-old/Build-LinuxXView.bash	2013-08-28 17:12:56.436682003 +0200
+++ xview-3.2p1.4/Build-LinuxXView.bash	2013-08-28 21:06:37.188338395 +0200
@@ -16,11 +16,24 @@
   exit 1
 fi
 
+# DESTDIR is not exported, it helps avoid problems with $(DESTDIR)$(BINDIR)
+# in Makefiles
+DESTDIR=$_DESTDIR_
+
 # Set the directories that will be used for installation
 [ -z "$OPENWINHOME" ] && OPENWINHOME=/usr/openwin
-[ -z "$X11DIR" ] && X11DIR=/usr/X11R6
+[ -z "$X11DIR" ] && X11DIR=/usr/X11R6/lib/X11
 OWDEST=$DESTDIR$OPENWINHOME
-X11DEST=$DESTDIR$X11DIR/lib/X11/config
+X11DEST=$DESTDIR$X11DIR/config
+ETCDEST=$DESTDIR/etc/openwin
+
+if [ ! -d "$ETCDEST" ]; then
+  mkdir -p $ETCDEST
+fi
+
+if [ ! -d "$OWDEST" ]; then
+  mkdir -p $OWDEST
+fi
 
 # Generate file that gets appended to every Makefile created by the imake-wrapper
 
@@ -45,7 +58,7 @@
 EOF
 
 IMAKEAPPEND="`pwd`/imake.append"
-IMAKEINCLUDE="-I`pwd`/config -I$BUILDPREFIX/usr/lib/X11/config -I$BUILDPREFIX/usr/X11R6/lib/X11/config -I/usr/lib/X11/config -I/usr/X11R6/lib/X11/config"
+IMAKEINCLUDE="-I`pwd`/config -I$BUILDPREFIX/usr/lib/X11/config -I$BUILDPREFIX/usr/X11R6/lib/X11/config -I/usr/lib/X11/config -I/usr/X11R6/lib/X11/config -I/usr/share/X11/config"
 
 # Make sure our wrappers are in the path
 if [ -z "$XVIEW_SETUP" ]; then
@@ -56,7 +69,7 @@
 PS1='\h:\w(XView-build)\$ '
 XVIEW_SETUP=1
 export OPENWINHOME X11DIR OWDEST X11DEST IMAKEINCLUDE IMAKEAPPEND \
-       PATH PS1 XVIEW_SETUP
+       PATH PS1 XVIEW_SETUP ETCDEST __LIB__
 hash -r
 
 # patch doesn't restore the permissions, so make sure our wrapper is
@@ -111,19 +124,16 @@
       ) || exit $?
       ;;
     instfinish)
-      [ -e $OWDEST/lib/openwin-menu-std ] || mv $OWDEST/lib/openwin-menu $OWDEST/lib/openwin-menu-std
-      install -d $OWDEST/lib/xview $OWDEST/share/locale/C/props
-      install -m 644 contrib/misc/openwin-menu* $OWDEST/lib
-      install -m 755 contrib/misc/Xinitrc $OWDEST/lib
+      [ -e $ETCDEST/openwin-menu-std ] || mv $ETCDEST/openwin-menu $ETCDEST/openwin-menu-std
+      install -d $OWDEST/$__LIB__/xview $OWDEST/share/locale/C/props
+      install -m 644 contrib/misc/openwin-menu* $ETCDEST
+      install -m 755 contrib/misc/Xinitrc $ETCDEST
       install -m 755 contrib/misc/{openwin,owplaces} $OWDEST/bin
       install -m 644 contrib/misc/props-locale.C $OWDEST/share/locale/C/props/C
       install -m 644 contrib/misc/props-locale.basic_setting $OWDEST/share/locale/C/props/basic_setting
       [ -e  $OWDEST/bin/full1.sed ] && \
-        mv $OWDEST/bin/{full[12],minimal[1234]}.sed $OWDEST/lib/xview
+        mv $OWDEST/bin/{full[12],minimal[1234]}.sed $OWDEST/$__LIB__/xview
       chmod -R a+rX,u+w,go-w $OWDEST $X11DEST/XView.*
-      chmod a+x $OWDEST/share/src/xview/examples/bin/*
-      chown -R root.root $OWDEST $X11DEST/XView.*
-      [ -z "$DESTDIR" ] || chown -R root.root $DESTDIR/usr
       ;;
     tar)
       DIRNAME="`pwd`"
diff -rNu xview-3.2p1.4-old/Imakefile xview-3.2p1.4/Imakefile
--- xview-3.2p1.4-old/Imakefile	2013-08-28 17:12:56.432682003 +0200
+++ xview-3.2p1.4/Imakefile	2013-08-28 17:13:08.832682184 +0200
@@ -10,9 +10,6 @@
 XCOMM # Top level Imakefile for ProductNameAndRelease
 XCOMM # @(#)Imakefile	1.7 1/7/92 SMI
 
-CC = cc
-CFLAGS = -O 
-
 #define IHaveSubdirs
 #define PassCDebugFlags
 
diff -rNu xview-3.2p1.4-old/clients/olvwm-4.1/Imakefile xview-3.2p1.4/clients/olvwm-4.1/Imakefile
--- xview-3.2p1.4-old/clients/olvwm-4.1/Imakefile	2013-08-28 17:12:56.120681998 +0200
+++ xview-3.2p1.4/clients/olvwm-4.1/Imakefile	2013-08-28 17:13:08.832682184 +0200
@@ -1,3 +1,6 @@
+/* dirty hack */
+override CDEBUGFLAGS = -w -O2
+
 XCOMM # If you want to install the help files for olvwm, set HasInfoFiles to YES
 #define HasInfoFiles	YES
 
@@ -143,7 +146,7 @@
 ComplexProgramTarget(olvwm)
 
 #if NeedMenuFile
-InstallNonExecList($(MISC),$(LIBRARY_DEST))
+InstallNonExecList($(MISC),$(ETCDEST))
 #endif
 
 clean::
diff -rNu xview-3.2p1.4-old/clients/olvwm-4.1/usermenu.c xview-3.2p1.4/clients/olvwm-4.1/usermenu.c
--- xview-3.2p1.4-old/clients/olvwm-4.1/usermenu.c	2013-08-28 17:12:56.116681998 +0200
+++ xview-3.2p1.4/clients/olvwm-4.1/usermenu.c	2013-08-28 17:13:08.836682184 +0200
@@ -938,6 +938,9 @@
 	/* /usr/openwin/lib/<menufile> */
 	menuSearchPath[i++] = MemNewString("/usr/openwin/lib/%s");
 
+	/* /etc/openwin/<menufile> */
+	menuSearchPath[i++] = MemNewString("/etc/openwin/%s");
+
 	menuSearchPath[i] = (char *)NULL;
 
 	return menuSearchPath;
diff -rNu xview-3.2p1.4-old/clients/olwm/Imakefile xview-3.2p1.4/clients/olwm/Imakefile
--- xview-3.2p1.4-old/clients/olwm/Imakefile	2013-08-28 17:12:56.096681998 +0200
+++ xview-3.2p1.4/clients/olwm/Imakefile	2013-08-28 17:13:08.836682184 +0200
@@ -72,6 +72,6 @@
 
 ComplexProgramTarget(olwm)
 
-InstallNonExecList($(MISC),$(LIBRARY_DEST))
+InstallNonExecList($(MISC),$(ETCDEST))
 
 #include <XView.prog>
diff -rNu xview-3.2p1.4-old/config/XView.tmpl xview-3.2p1.4/config/XView.tmpl
--- xview-3.2p1.4-old/config/XView.tmpl	2013-08-28 17:12:56.288682000 +0200
+++ xview-3.2p1.4/config/XView.tmpl	2013-08-28 17:48:07.052712956 +0200
@@ -23,7 +23,7 @@
  *	Where to install XView libraries
  */
 #ifndef XVLibraryDestination
-#define XVLibraryDestination $(XVDESTDIR)/lib
+#define XVLibraryDestination $(XVDESTDIR)/$(__LIB__)
 #endif
 /*
  *	Where to install XView lint libraries
@@ -50,7 +50,7 @@
  */
 #if InstallManPagesInXVDestDir
 # ifndef XVManPath
-# define XVManPath $(XVDESTDIR)/man
+# define XVManPath $(XVDESTDIR)/share/man
 # endif
 #else
 # define XVManPath ManPath
@@ -65,7 +65,7 @@
  *	Where to install the source examples.
  */
 #ifndef XVSourceDest
-#define XVSourceDest $(XVDESTDIR)/share/src/xview
+#define XVSourceDest $(XVDESTDIR)/share/xview
 #endif
 /*
  *	Where to install the documentation files.
@@ -465,4 +465,8 @@
 #define CcCmd cc
 #define LibraryCcCmd cc */
 #include <XView.rules>
+
+/* dirty hack */
+override CDEBUGFLAGS = -w -O2
+
 #endif /* XViewTmpl */
diff -rNu xview-3.2p1.4-old/contrib/examples/canvas/Imakefile xview-3.2p1.4/contrib/examples/canvas/Imakefile
--- xview-3.2p1.4-old/contrib/examples/canvas/Imakefile	2013-08-28 17:12:56.288682000 +0200
+++ xview-3.2p1.4/contrib/examples/canvas/Imakefile	2013-08-28 17:13:08.840682185 +0200
@@ -20,12 +20,6 @@
 
 PROGRAMS=canvas_event canvas_input line scroll_view split_views
 
-AllTarget($(PROGRAMS))
-
-SingleProgramTarget(canvas_event,canvas_event.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(canvas_input,canvas_input.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(line,line.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(scroll_view,scroll_view.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(split_views,split_views.o,$(LOCAL_LIBRARIES), /**/)
-
-#include <XView.prog>
+MakeDirectories(install,$(SRC_DEST)/examples/bin)
+MakeDirectories(install.srcs,$(SRC_DEST)/$(LOCATION))
+InstallExampleSrcs($(INSTALL_SRCS),$(MAKEFILE_SIMPLE),$(SRC_DEST)/$(LOCATION))
diff -rNu xview-3.2p1.4-old/contrib/examples/color/Imakefile xview-3.2p1.4/contrib/examples/color/Imakefile
--- xview-3.2p1.4-old/contrib/examples/color/Imakefile	2013-08-28 17:12:56.288682000 +0200
+++ xview-3.2p1.4/contrib/examples/color/Imakefile	2013-08-28 17:13:08.840682185 +0200
@@ -23,18 +23,6 @@
 PROGRAMS= animate color color_animate color_logo color_objs \
 	color_panel example1 example2 example3 example4 x_draw
 
-AllTarget($(PROGRAMS))
-
-SingleProgramTarget(animate,animate.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(color,color.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(color_animate,color_animate.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(color_logo,color_logo.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(color_objs,color_objs.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(color_panel,color_panel.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(example1,example1.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(example2,example2.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(example3,example3.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(example4,example4.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(x_draw,x_draw.o,$(LOCAL_LIBRARIES), /**/)
-
-#include <XView.prog>
+MakeDirectories(install,$(SRC_DEST)/examples/bin)
+MakeDirectories(install.srcs,$(SRC_DEST)/$(LOCATION))
+InstallExampleSrcs($(INSTALL_SRCS),$(MAKEFILE_SIMPLE),$(SRC_DEST)/$(LOCATION))
diff -rNu xview-3.2p1.4-old/contrib/examples/cursor/Imakefile xview-3.2p1.4/contrib/examples/cursor/Imakefile
--- xview-3.2p1.4-old/contrib/examples/cursor/Imakefile	2013-08-28 17:12:56.292682000 +0200
+++ xview-3.2p1.4/contrib/examples/cursor/Imakefile	2013-08-28 17:13:08.840682185 +0200
@@ -20,10 +20,6 @@
 
 PROGRAMS= hot_spot simple_cursor stop_cursor
 
-AllTarget($(PROGRAMS))
-
-SingleProgramTarget(hot_spot,hot_spot.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(simple_cursor,simple_cursor.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(stop_cursor,stop_cursor.o,$(LOCAL_LIBRARIES), /**/)
-
-#include <XView.prog>
+MakeDirectories(install,$(SRC_DEST)/examples/bin)
+MakeDirectories(install.srcs,$(SRC_DEST)/$(LOCATION))
+InstallExampleSrcs($(INSTALL_SRCS),$(MAKEFILE_SIMPLE),$(SRC_DEST)/$(LOCATION))
diff -rNu xview-3.2p1.4-old/contrib/examples/defaults/Imakefile xview-3.2p1.4/contrib/examples/defaults/Imakefile
--- xview-3.2p1.4-old/contrib/examples/defaults/Imakefile	2013-08-28 17:12:56.292682000 +0200
+++ xview-3.2p1.4/contrib/examples/defaults/Imakefile	2013-08-28 17:13:08.840682185 +0200
@@ -20,9 +20,6 @@
 
 PROGRAMS= default_size default_text
 
-AllTarget($(PROGRAMS))
-
-SingleProgramTarget(default_size,default_size.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(default_text,default_text.o,$(LOCAL_LIBRARIES), /**/)
-
-#include <XView.prog>
+MakeDirectories(install,$(SRC_DEST)/examples/bin)
+MakeDirectories(install.srcs,$(SRC_DEST)/$(LOCATION))
+InstallExampleSrcs($(INSTALL_SRCS),$(MAKEFILE_SIMPLE),$(SRC_DEST)/$(LOCATION))
diff -rNu xview-3.2p1.4-old/contrib/examples/dnd/Imakefile xview-3.2p1.4/contrib/examples/dnd/Imakefile
--- xview-3.2p1.4-old/contrib/examples/dnd/Imakefile	2013-08-28 17:12:56.304682001 +0200
+++ xview-3.2p1.4/contrib/examples/dnd/Imakefile	2013-08-28 17:13:08.840682185 +0200
@@ -22,10 +22,6 @@
 
 PROGRAMS= dest source1 source2
 
-AllTarget($(PROGRAMS))
-
-SingleProgramTarget(dest,dest.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(source1,source1.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(source2,source2.o,$(LOCAL_LIBRARIES), /**/)
-
-#include <XView.prog>
+MakeDirectories(install,$(SRC_DEST)/examples/bin)
+MakeDirectories(install.srcs,$(SRC_DEST)/$(LOCATION))
+InstallExampleSrcs($(INSTALL_SRCS),$(MAKEFILE_SIMPLE),$(SRC_DEST)/$(LOCATION))
diff -rNu xview-3.2p1.4-old/contrib/examples/extensions/Imakefile xview-3.2p1.4/contrib/examples/extensions/Imakefile
--- xview-3.2p1.4-old/contrib/examples/extensions/Imakefile	2013-08-28 17:12:56.292682000 +0200
+++ xview-3.2p1.4/contrib/examples/extensions/Imakefile	2013-08-28 17:13:08.840682185 +0200
@@ -44,17 +44,8 @@
 
 PROGRAMS 	= logo bitmap image
 
-AllTarget($(PROGRAMS))
-
-SingleProgramTarget(logo,$(LOGO_OBJS),$(LOCAL_LIBRARIES), /**/)
-$(LOGO_OBJS): $(LOGO_HDRS)
-
-SingleProgramTarget(bitmap,$(BITMAP_OBJS),$(LOCAL_LIBRARIES), /**/)
-$(BITMAP_OBJS): $(BITMAP_HDRS)
-
-SingleProgramTarget(image,$(IMAGE_OBJS),$(LOCAL_LIBRARIES), /**/)
-$(IMAGE_OBJS): $(IMAGE_HDRS)
-
-#include <XView.prog>
+MakeDirectories(install,$(SRC_DEST)/examples/bin)
+MakeDirectories(install.srcs,$(SRC_DEST)/$(LOCATION))
+InstallExampleSrcs($(INSTALL_SRCS),$(MAKEFILE_SIMPLE),$(SRC_DEST)/$(LOCATION))
 
 InstallSrcsSubdirs($(SUBDIRS))
diff -rNu xview-3.2p1.4-old/contrib/examples/fonts/Imakefile xview-3.2p1.4/contrib/examples/fonts/Imakefile
--- xview-3.2p1.4-old/contrib/examples/fonts/Imakefile	2013-08-28 17:12:56.292682000 +0200
+++ xview-3.2p1.4/contrib/examples/fonts/Imakefile	2013-08-28 17:13:08.840682185 +0200
@@ -20,12 +20,6 @@
 
 PROGRAMS= disp_fonts fonts simple_font type_font disp_fonts2
 
-AllTarget($(PROGRAMS))
-
-SingleProgramTarget(disp_fonts,disp_fonts.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(fonts,fonts.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(simple_font,simple_font.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(type_font,type_font.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(disp_fonts2,disp_fonts2.o,$(LOCAL_LIBRARIES), /**/)
-
-#include <XView.prog>
+MakeDirectories(install,$(SRC_DEST)/examples/bin)
+MakeDirectories(install.srcs,$(SRC_DEST)/$(LOCATION))
+InstallExampleSrcs($(INSTALL_SRCS),$(MAKEFILE_SIMPLE),$(SRC_DEST)/$(LOCATION))
diff -rNu xview-3.2p1.4-old/contrib/examples/frames/Imakefile xview-3.2p1.4/contrib/examples/frames/Imakefile
--- xview-3.2p1.4-old/contrib/examples/frames/Imakefile	2013-08-28 17:12:56.292682000 +0200
+++ xview-3.2p1.4/contrib/examples/frames/Imakefile	2013-08-28 17:13:08.840682185 +0200
@@ -22,14 +22,6 @@
 PROGRAMS= command_frame done_proc frame_color hdrs_n_footers popup \
         simple_frame subframe
 
-AllTarget($(PROGRAMS))
-
-SingleProgramTarget(command_frame,command_frame.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(done_proc,done_proc.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(frame_color,frame_color.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(hdrs_n_footers,hdrs_n_footers.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(popup,popup.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(simple_frame,simple_frame.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(subframe,subframe.o,$(LOCAL_LIBRARIES), /**/)
-
-#include <XView.prog>
+MakeDirectories(install,$(SRC_DEST)/examples/bin)
+MakeDirectories(install.srcs,$(SRC_DEST)/$(LOCATION))
+InstallExampleSrcs($(INSTALL_SRCS),$(MAKEFILE_SIMPLE),$(SRC_DEST)/$(LOCATION))
diff -rNu xview-3.2p1.4-old/contrib/examples/icons/Imakefile xview-3.2p1.4/contrib/examples/icons/Imakefile
--- xview-3.2p1.4-old/contrib/examples/icons/Imakefile	2013-08-28 17:12:56.296682001 +0200
+++ xview-3.2p1.4/contrib/examples/icons/Imakefile	2013-08-28 17:13:08.844682185 +0200
@@ -21,9 +21,6 @@
 
 PROGRAMS= icon_demo icon_demo2
 
-AllTarget($(PROGRAMS))
-
-SingleProgramTarget(icon_demo,icon_demo.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(icon_demo2,icon_demo2.o,$(LOCAL_LIBRARIES), /**/)
-
-#include <XView.prog>
+MakeDirectories(install,$(SRC_DEST)/examples/bin)
+MakeDirectories(install.srcs,$(SRC_DEST)/$(LOCATION))
+InstallExampleSrcs($(INSTALL_SRCS),$(MAKEFILE_SIMPLE),$(SRC_DEST)/$(LOCATION))
diff -rNu xview-3.2p1.4-old/contrib/examples/menus/Imakefile xview-3.2p1.4/contrib/examples/menus/Imakefile
--- xview-3.2p1.4-old/contrib/examples/menus/Imakefile	2013-08-28 17:12:56.296682001 +0200
+++ xview-3.2p1.4/contrib/examples/menus/Imakefile	2013-08-28 17:13:08.936682186 +0200
@@ -20,13 +20,6 @@
 
 PROGRAMS= menu menu_dir menu_dir2 pin_menu simple_menu xv_menu
 
-AllTarget($(PROGRAMS))
-
-SingleProgramTarget(menu,menu.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(menu_dir,menu_dir.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(menu_dir2,menu_dir2.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(pin_menu,pin_menu.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(simple_menu,simple_menu.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(xv_menu,xv_menu.o,$(LOCAL_LIBRARIES), /**/)
-
-#include <XView.prog>
+MakeDirectories(install,$(SRC_DEST)/examples/bin)
+MakeDirectories(install.srcs,$(SRC_DEST)/$(LOCATION))
+InstallExampleSrcs($(INSTALL_SRCS),$(MAKEFILE_SIMPLE),$(SRC_DEST)/$(LOCATION))
diff -rNu xview-3.2p1.4-old/contrib/examples/misc/Imakefile xview-3.2p1.4/contrib/examples/misc/Imakefile
--- xview-3.2p1.4-old/contrib/examples/misc/Imakefile	2013-08-28 17:12:56.296682001 +0200
+++ xview-3.2p1.4/contrib/examples/misc/Imakefile	2013-08-28 17:13:08.936682186 +0200
@@ -23,14 +23,6 @@
 PROGRAMS= fullscreen multi_display multiscreen screen \ 
         svrimage vkbd_fonts vkbd_colors
 
-AllTarget($(PROGRAMS))
-
-SingleProgramTarget(fullscreen,fullscreen.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(multi_display,multi_display.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(multiscreen,multiscreen.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(screen,screen.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(svrimage,svrimage.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(vkbd_fonts,vkbd_fonts.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(vkbd_colors,vkbd_colors.o,$(LOCAL_LIBRARIES), /**/)
-
-#include <XView.prog>
+MakeDirectories(install,$(SRC_DEST)/examples/bin)
+MakeDirectories(install.srcs,$(SRC_DEST)/$(LOCATION))
+InstallExampleSrcs($(INSTALL_SRCS),$(MAKEFILE_SIMPLE),$(SRC_DEST)/$(LOCATION))
diff -rNu xview-3.2p1.4-old/contrib/examples/notice/Imakefile xview-3.2p1.4/contrib/examples/notice/Imakefile
--- xview-3.2p1.4-old/contrib/examples/notice/Imakefile	2013-08-28 17:12:56.296682001 +0200
+++ xview-3.2p1.4/contrib/examples/notice/Imakefile	2013-08-28 17:13:08.936682186 +0200
@@ -20,10 +20,6 @@
 
 PROGRAMS= notice simple_notice trigger_notice
 
-AllTarget($(PROGRAMS))
-
-SingleProgramTarget(notice,notice.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(simple_notice,simple_notice.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(trigger_notice,trigger_notice.o,$(LOCAL_LIBRARIES), /**/)
-
-#include <XView.prog>
+MakeDirectories(install,$(SRC_DEST)/examples/bin)
+MakeDirectories(install.srcs,$(SRC_DEST)/$(LOCATION))
+InstallExampleSrcs($(INSTALL_SRCS),$(MAKEFILE_SIMPLE),$(SRC_DEST)/$(LOCATION))
diff -rNu xview-3.2p1.4-old/contrib/examples/notifier/Imakefile xview-3.2p1.4/contrib/examples/notifier/Imakefile
--- xview-3.2p1.4-old/contrib/examples/notifier/Imakefile	2013-08-28 17:12:56.296682001 +0200
+++ xview-3.2p1.4/contrib/examples/notifier/Imakefile	2013-08-28 17:13:08.936682186 +0200
@@ -22,14 +22,6 @@
 PROGRAMS= animate interpose notify notify_input ntfy_do_dis \
         ntfy_pipe ntfy_sig
 
-AllTarget($(PROGRAMS))
-
-SingleProgramTarget(animate,animate.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(interpose,interpose.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(notify,notify.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(notify_input,notify_input.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(ntfy_do_dis,ntfy_do_dis.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(ntfy_pipe,ntfy_pipe.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(ntfy_sig,ntfy_sig.o,$(LOCAL_LIBRARIES), /**/)
-
-#include <XView.prog>
+MakeDirectories(install,$(SRC_DEST)/examples/bin)
+MakeDirectories(install.srcs,$(SRC_DEST)/$(LOCATION))
+InstallExampleSrcs($(INSTALL_SRCS),$(MAKEFILE_SIMPLE),$(SRC_DEST)/$(LOCATION))
diff -rNu xview-3.2p1.4-old/contrib/examples/panels/Imakefile xview-3.2p1.4/contrib/examples/panels/Imakefile
--- xview-3.2p1.4-old/contrib/examples/panels/Imakefile	2013-08-28 17:12:56.300682001 +0200
+++ xview-3.2p1.4/contrib/examples/panels/Imakefile	2013-08-28 17:13:08.936682186 +0200
@@ -24,19 +24,6 @@
         list_6_glyphs panel_repaint quit repaint simple_panel \
 	slider stop_frame
 
-AllTarget($(PROGRAMS))
-
-SingleProgramTarget(btn_menu,btn_menu.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(choices,choices.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(client_data,client_data.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(item_move,item_move.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(list_glyphs,list_glyphs.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(list_6_glyphs,list_6_glyphs.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(panel_repaint,panel_repaint.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(quit,quit.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(repaint,repaint.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(simple_panel,simple_panel.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(slider,slider.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(stop_frame,stop_frame.o,$(LOCAL_LIBRARIES), /**/)
-
-#include <XView.prog>
+MakeDirectories(install,$(SRC_DEST)/examples/bin)
+MakeDirectories(install.srcs,$(SRC_DEST)/$(LOCATION))
+InstallExampleSrcs($(INSTALL_SRCS),$(MAKEFILE_SIMPLE),$(SRC_DEST)/$(LOCATION))
diff -rNu xview-3.2p1.4-old/contrib/examples/scrollbar/Imakefile xview-3.2p1.4/contrib/examples/scrollbar/Imakefile
--- xview-3.2p1.4-old/contrib/examples/scrollbar/Imakefile	2013-08-28 17:12:56.300682001 +0200
+++ xview-3.2p1.4/contrib/examples/scrollbar/Imakefile	2013-08-28 17:13:08.936682186 +0200
@@ -20,10 +20,6 @@
 
 PROGRAMS= scroll_cells scroll_cells2 scrollto
 
-AllTarget($(PROGRAMS))
-
-SingleProgramTarget(scroll_cells,scroll_cells.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(scroll_cells2,scroll_cells2.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(scrollto,scrollto.o,$(LOCAL_LIBRARIES), /**/)
-
-#include <XView.prog>
+MakeDirectories(install,$(SRC_DEST)/examples/bin)
+MakeDirectories(install.srcs,$(SRC_DEST)/$(LOCATION))
+InstallExampleSrcs($(INSTALL_SRCS),$(MAKEFILE_SIMPLE),$(SRC_DEST)/$(LOCATION))
diff -rNu xview-3.2p1.4-old/contrib/examples/selection/Imakefile xview-3.2p1.4/contrib/examples/selection/Imakefile
--- xview-3.2p1.4-old/contrib/examples/selection/Imakefile	2013-08-28 17:12:56.304682001 +0200
+++ xview-3.2p1.4/contrib/examples/selection/Imakefile	2013-08-28 17:13:08.936682186 +0200
@@ -20,9 +20,6 @@
 
 PROGRAMS= sel_hold sel_req
 
-AllTarget($(PROGRAMS))
-
-SingleProgramTarget(sel_hold,sel_hold.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(sel_req,sel_req.o,$(LOCAL_LIBRARIES), /**/)
-
-#include <XView.prog>
+MakeDirectories(install,$(SRC_DEST)/examples/bin)
+MakeDirectories(install.srcs,$(SRC_DEST)/$(LOCATION))
+InstallExampleSrcs($(INSTALL_SRCS),$(MAKEFILE_SIMPLE),$(SRC_DEST)/$(LOCATION))
diff -rNu xview-3.2p1.4-old/contrib/examples/seln_svc/Imakefile xview-3.2p1.4/contrib/examples/seln_svc/Imakefile
--- xview-3.2p1.4-old/contrib/examples/seln_svc/Imakefile	2013-08-28 17:12:56.300682001 +0200
+++ xview-3.2p1.4/contrib/examples/seln_svc/Imakefile	2013-08-28 17:13:08.936682186 +0200
@@ -20,12 +20,6 @@
 
 PROGRAMS= long_seln seln seln_line simple_seln text_seln
 
-AllTarget($(PROGRAMS))
-
-SingleProgramTarget(long_seln,long_seln.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(seln,seln.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(seln_line,seln_line.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(simple_seln,simple_seln.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(text_seln,text_seln.o,$(LOCAL_LIBRARIES), /**/)
-
-#include <XView.prog>
+MakeDirectories(install,$(SRC_DEST)/examples/bin)
+MakeDirectories(install.srcs,$(SRC_DEST)/$(LOCATION))
+InstallExampleSrcs($(INSTALL_SRCS),$(MAKEFILE_SIMPLE),$(SRC_DEST)/$(LOCATION))
diff -rNu xview-3.2p1.4-old/contrib/examples/sv_compat/Imakefile xview-3.2p1.4/contrib/examples/sv_compat/Imakefile
--- xview-3.2p1.4-old/contrib/examples/sv_compat/Imakefile	2013-08-28 17:12:56.300682001 +0200
+++ xview-3.2p1.4/contrib/examples/sv_compat/Imakefile	2013-08-28 17:13:08.940682186 +0200
@@ -21,8 +21,6 @@
 
 PROGRAMS= pw_draw
 
-AllTarget($(PROGRAMS))
-
-SingleProgramTarget(pw_draw,pw_draw.o,$(LOCAL_LIBRARIES), /**/)
-
-#include <XView.prog>
+MakeDirectories(install,$(SRC_DEST)/examples/bin)
+MakeDirectories(install.srcs,$(SRC_DEST)/$(LOCATION))
+InstallExampleSrcs($(INSTALL_SRCS),$(MAKEFILE_SIMPLE),$(SRC_DEST)/$(LOCATION))
diff -rNu xview-3.2p1.4-old/contrib/examples/textsw/Imakefile xview-3.2p1.4/contrib/examples/textsw/Imakefile
--- xview-3.2p1.4-old/contrib/examples/textsw/Imakefile	2013-08-28 17:12:56.304682001 +0200
+++ xview-3.2p1.4/contrib/examples/textsw/Imakefile	2013-08-28 17:13:08.940682186 +0200
@@ -12,7 +12,7 @@
 INCLUDES = -I. -I$(HEADER_DEST) -I$(TOP)
 DEPLIBS = XViewClientDepLibs
 LOCAL_LIBRARIES = XViewClientLibs
-CURSES_LIBS = -lcurses
+CURSES_LIBS = -lncurses -ltinfo
 
 MAKEFILE_SIMPLE = Makefile.customer
 SRCS = sample_tty.c textsw.c textsw.font.c textsw_to_ttysw.c \
@@ -23,13 +23,6 @@
 PROGRAMS= sample_tty textsw textsw.font textsw_to_ttysw \
         ttycurses xv_termsw
 
-AllTarget($(PROGRAMS))
-
-SingleProgramTarget(sample_tty,sample_tty.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(textsw,textsw.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(textsw.font,textsw.font.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(textsw_to_ttysw,textsw_to_ttysw.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(ttycurses,ttycurses.o,$(LOCAL_LIBRARIES),$(CURSES_LIBS))
-SingleProgramTarget(xv_termsw,xv_termsw.o,$(LOCAL_LIBRARIES), /**/)
-
-#include <XView.prog>
+MakeDirectories(install,$(SRC_DEST)/examples/bin)
+MakeDirectories(install.srcs,$(SRC_DEST)/$(LOCATION))
+InstallExampleSrcs($(INSTALL_SRCS),$(MAKEFILE_SIMPLE),$(SRC_DEST)/$(LOCATION))
diff -rNu xview-3.2p1.4-old/contrib/examples/ttysw/Imakefile xview-3.2p1.4/contrib/examples/ttysw/Imakefile
--- xview-3.2p1.4-old/contrib/examples/ttysw/Imakefile	2013-08-28 17:12:56.304682001 +0200
+++ xview-3.2p1.4/contrib/examples/ttysw/Imakefile	2013-08-28 17:13:08.940682186 +0200
@@ -12,7 +12,7 @@
 INCLUDES = -I. -I$(HEADER_DEST) -I$(TOP)
 DEPLIBS = XViewClientDepLibs
 LOCAL_LIBRARIES = XViewClientLibs
-CURSES_LIBS = -lcurses
+CURSES_LIBS = -lncurses -ltinfo
 
 MAKEFILE_SIMPLE = Makefile.customer
 SRCS = sample_tty.c textsw_to_ttysw.c \
@@ -23,11 +23,6 @@
 PROGRAMS = sample_tty textsw_to_ttysw \
         ttycurses xv_termsw
 
-AllTarget($(PROGRAMS))
-
-SingleProgramTarget(sample_tty,sample_tty.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(textsw_to_ttysw,textsw_to_ttysw.o,$(LOCAL_LIBRARIES), /**/)
-SingleProgramTarget(ttycurses,ttycurses.o,$(LOCAL_LIBRARIES),$(CURSES_LIBS))
-SingleProgramTarget(xv_termsw,xv_termsw.o,$(LOCAL_LIBRARIES), /**/)
-
-#include <XView.prog>
+MakeDirectories(install,$(SRC_DEST)/examples/bin)
+MakeDirectories(install.srcs,$(SRC_DEST)/$(LOCATION))
+InstallExampleSrcs($(INSTALL_SRCS),$(MAKEFILE_SIMPLE),$(SRC_DEST)/$(LOCATION))
diff -rNu xview-3.2p1.4-old/contrib/misc/openwin xview-3.2p1.4/contrib/misc/openwin
--- xview-3.2p1.4-old/contrib/misc/openwin	2013-08-28 17:12:56.308682001 +0200
+++ xview-3.2p1.4/contrib/misc/openwin	2013-08-28 17:13:08.940682186 +0200
@@ -4,11 +4,11 @@
 export XAPPLRESDIR MANPATH HELPPATH OPENWINHOME WINDOWMANAGER X11HOME
 
 if [ -z "$OPENWINHOME" ]; then
-	if [ ! -d /usr/openwin ]; then
-		echo "openwin: /usr/openwin does not exist, cannot start"
+	if [ ! -d /usr ]; then
+		echo "openwin: /usr does not exist, cannot start"
 		exit 1
 	fi
-	OPENWINHOME=/usr/openwin
+	OPENWINHOME=/usr
 fi
 
 if [ -z "$X11HOME" ]; then
@@ -46,10 +46,10 @@
 if [ "$XDM" = "running" ]; then
     # X is already running (e.g. this file was called from xdm)
     # so just run openwin's Xinitrc
-    exec $OPENWINHOME/lib/Xinitrc
+    exec /etc/openwin/Xinitrc
 else
     if [ -x $X11HOME/bin/startx ]; then
-            exec $X11HOME/bin/startx $OPENWINHOME/lib/Xinitrc --
+            exec $X11HOME/bin/startx /etc/openwin/Xinitrc --
     fi
-    exec startx $OPENWINHOME/lib/Xinitrc --
+    exec startx /etc/openwin//Xinitrc --
 fi
diff -rNu xview-3.2p1.4-old/imake xview-3.2p1.4/imake
--- xview-3.2p1.4-old/imake	2013-08-28 17:12:56.436682003 +0200
+++ xview-3.2p1.4/imake	2013-08-28 17:13:08.940682186 +0200
@@ -2,8 +2,17 @@
 
 set -e
 
+IFS=', ' read -a output <<< `whereis -b imake`
+IMAKE="${output[1]}"
+
+if [ -z "$IMAKE" ]; then
+  echo "imake not found!" 1>&2
+  exit 1
+fi
+
 echo "imake-wrapper: running imake $* in directory `pwd`"
-/usr/bin/X11/imake "$@"
+
+$IMAKE "$@"
 if [ -f "$IMAKEAPPEND" ]; then
   cat "$IMAKEAPPEND" >> Makefile
 fi
diff -rNu xview-3.2p1.4-old/lib/libxview/textsw/txt_e_menu.c xview-3.2p1.4/lib/libxview/textsw/txt_e_menu.c
--- xview-3.2p1.4-old/lib/libxview/textsw/txt_e_menu.c	2013-08-28 17:12:56.380682002 +0200
+++ xview-3.2p1.4/lib/libxview/textsw/txt_e_menu.c	2013-08-28 17:13:08.944682186 +0200
@@ -160,6 +160,10 @@
 #ifndef OPENWINHOME_DEFAULT
     }
 #endif
+ 
+        (void) sprintf(tmp, "/etc/openwin/%s", EXTRASMENU);
+	if ((result = check_filename_locale(NULL, tmp, 1)) != NULL)
+		goto found;
 
     /* Giving up, try with ancient way (SunView1) */
     (void) sprintf(tmp, "/usr/lib/.%s", EXTRASMENU);
diff -rNu xview-3.2p1.4-old/lib/libxview/ttysw/tty_mapkey.c xview-3.2p1.4/lib/libxview/ttysw/tty_mapkey.c
--- xview-3.2p1.4-old/lib/libxview/ttysw/tty_mapkey.c	2013-08-28 17:12:56.372682002 +0200
+++ xview-3.2p1.4/lib/libxview/ttysw/tty_mapkey.c	2013-08-28 17:13:08.944682186 +0200
@@ -76,6 +76,9 @@
     		char *altrc;
 
 		XV_BZERO(rc, 1024);
+        if (!access("/etc/openwin/ttyswrc", R_OK)) {
+            (void)strcpy(rc, "/etc/openwin/ttyswrc");
+        } else
 #if 1 /* FHS compliance - mbuck@debian.org */
 		if (!access("/etc/X11/xview/ttyswrc", R_OK)) {
 		    (void)strcpy(rc, "/etc/X11/xview/ttyswrc");
diff -rNu xview-3.2p1.4-old/misc/support/Imakefile xview-3.2p1.4/misc/support/Imakefile
--- xview-3.2p1.4-old/misc/support/Imakefile	2013-08-28 17:12:56.312682001 +0200
+++ xview-3.2p1.4/misc/support/Imakefile	2013-08-28 17:13:08.944682186 +0200
@@ -15,7 +15,7 @@
 install::
 	$(MKDIRHIER) $(DESTDIR)$(HELP_DEST) $(DESTDIR)$(LIBRARY_DEST)
 
-InstallSupportList($(SUPPORTFILES),$(LIBRARY_DEST))
+InstallSupportList($(SUPPORTFILES),$(ETCDEST))
 InstallNonExecList($(INFOFILES),$(HELP_DEST))
 DependTarget()
 LintTarget()
diff -rNu xview-3.2p1.4-old/util/conversion/cv2xview xview-3.2p1.4/util/conversion/cv2xview
--- xview-3.2p1.4-old/util/conversion/cv2xview	2013-08-28 17:12:56.312682001 +0200
+++ xview-3.2p1.4/util/conversion/cv2xview	2013-08-28 17:50:42.568715237 +0200
@@ -12,12 +12,18 @@
 # 
 # Produces a new XView source files for each filename
 # 
+if [ `uname -m` == 'x86_64' ]; then
+  __LIB__=lib64
+else
+  __LIB__=lib
+fi
+
 USAGE="Usage: `basename ${0}` [-m] filename..."
 
 CONV_TYPE=full
 MIN_CONV_TYPE=minimal
 CTXV_ROOT=
-XVIEW_BINS=lib/xview/
+XVIEW_BINS=$__LIB__/xview/
 #XVIEW_BINS=bin/xview/
 [ -z "$OPENWINHOME" ] && OPENWINHOME=/usr/openwin
 
diff -rNu xview-3.2p1.4-old/util/msgfmt/Imakefile xview-3.2p1.4/util/msgfmt/Imakefile
--- xview-3.2p1.4-old/util/msgfmt/Imakefile	2013-08-28 17:12:56.308682001 +0200
+++ xview-3.2p1.4/util/msgfmt/Imakefile	2013-08-28 17:13:08.944682186 +0200
@@ -4,4 +4,4 @@
 #include	<XView.tmpl>
 
 MANSUFFIX =1
-SimpleProgramTarget(msgfmt)
+SimpleProgramTarget(msgfmt_xv)
diff -rNu xview-3.2p1.4-old/util/msgfmt/msgfmt.c xview-3.2p1.4/util/msgfmt/msgfmt.c
--- xview-3.2p1.4-old/util/msgfmt/msgfmt.c	2013-08-28 17:12:56.308682001 +0200
+++ xview-3.2p1.4/util/msgfmt/msgfmt.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,669 +0,0 @@
-#ifndef lint
-#ifdef sccs
-static char     sccsid[] = "@(#)msgfmt.c 1.3 91/09/14";
-#endif
-#endif
-
-#include "msgfmt.h"
-
-/*
- * msgfmt - Generate binary tree for runtime gettext() using psffm:
- *           "Portable Source File Format for Messages" file template.
- *	     This file may have previously been generated by the
- *	     c2psffm filter for c source files.
- */
-
-#define    ignore(a)    ((void) a)
-
-char	*consume_whitespace();
-char	expand_meta();
-char    *calloc();
-off_t    tellpt;
-off_t    sortit();
-char    *mktemp();
-char    *savestr();
-char    *strcat();
-char    *strcpy();
-
-off_t    mesgpt;
-
-/*
- * Strings is a flat file of id, string pairs, used by cflg
- */
-
-char    *strings =    "strings";
-
-char	linebuf[MAX_VALUE_LEN];
-char	*domain_name = DEFAULT_DOMAIN;
-
-int    cflg = 0;
-int    verbose = 0;
-int    debug = 0;
-int    readstd;
-
-struct list_struct list;
-
-main(argc, argv)
-    int argc;
-    char *argv[];
-{
-
-    argc--, argv++;
-    while (argc > 0 && argv[0][0] == '-') {
-
-        register char *cp = &(*argv++)[1];
-
-        argc--;
-
-        if (*cp == 0) {
-            readstd++;
-        }
-
-        do switch (*cp++) {
-
-/*
- *	cflag stuff not yet implemented.
-
-        case 'c':
-            cflg++;
-            continue;
- */
-
-	case 'd':
-	    debug++;
-	    break;
-
-        case 'v':
-            verbose++;
-            continue;
-
-        default:
-/*
-            fprintf(stderr,
-                "usage: msgfmt [ -v ] [ -c ] [ - ] [ name ... ]\n");
-*/
-            fprintf(stderr,
-                "usage: msgfmt [ -dv ] [ - ] [ name ... ]\n");
-	    break;;
-
-        } while (*cp);	/* do switch ... */
-
-    } /* while (argc ... */
-
-
-    while (readstd || argc > 0) {
-
-        if (!readstd && freopen(argv[0], "r", stdin) == NULL) {
-            perror(argv[0]);
-	    exit(2);
-	}
-
-    	read_psffm(argv[0]);
-
-        if (readstd == 0) {
-            argc--; argv++;
-	} else {
-            readstd = 0;
-	}
-    }	/* while (readstd ... */
-
-    exit(0);
-}
-
-
-/* 
- * read_psffm - read in "psffm" format file, check syntax, printing
- * 		error messages as needed, output binary tree to
- *		file <domain>
-*/
-
-read_psffm(filename)
-    char *filename;
-{
-
-    static char current_domain[MAX_DOMAIN_LENGTH];
-    static char msgfile[MAXPATHLEN];
-
-
-    char *linebufptr;
-    char *current_locale;
-    char msgid [MAX_VALUE_LEN+1];
-    char msgstr [MAX_VALUE_LEN+1];
-    register char *bufptr;
-    
-
-    int linenum = 0;
-    int	domain_set = 0;
-    int whitespace = 0;
-    int quotefound = 0;
-    int ignored = 0;
-    int indomain = 0;
-    int inmsgid = 0;
-    int inmsgstr = 0;
-    char c;
-
-
-    while (1) {
-	memset(linebuf, 0, sizeof(linebuf));
-        if (fgets(linebuf, sizeof(linebuf), stdin) == NULL) {
-            if (ferror(stdin)) {
-                perror(filename);
-                exit(2);
-            }
-            break;
-        }
-	linenum ++;
-
-	if (verbose) {
-	    printf("Scanning line number %d: %s\n", linenum, linebuf);
-	}
-
-	linebufptr = linebuf;
-	whitespace = 0;
-
-        switch (*linebufptr) {
-	case '#': 	/*   comment    */
-	case '\n':
-	ignored = 1;
-	break;
-
-	case '\"':
-	case ' ':	/*   whitespace should be handled correctly */
-	case '\t':
-	    whitespace = 1;
-	default:
-	    ignored = 0;
-	    break;
-	}
-
-	if (ignored) {
-	    continue;
-	}
-
-	/*
-	 * Process MSGID Tokens, must not have just seen one unless
-	 * this line begins with whitespace -or- "
-	 */
-
-	if ((!strncmp(MSGID_TOKEN, linebuf, sizeof(MSGID_TOKEN)-1))
-	    || (whitespace && inmsgid)) {
-	    if (inmsgid && !whitespace) {
-		fprintf(stderr, "Consecutive MSGID tokens encountered ");
-		fprintf(stderr, "at line number: %d, exiting\n", linenum);
-/*
-		exit(1);
-*/
-	    }
-	    if (inmsgstr) {
-		sortit(msgid, msgstr, 1);
-
-		memset(msgid, 0, sizeof(msgid));
-		memset(msgstr, 0, sizeof(msgstr));
-	    }
-
-
-	    if (inmsgid) {
-	        linebufptr = consume_whitespace(linebuf);
-	    } else {
-	        linebufptr = consume_whitespace(linebuf +
-		    sizeof(MSGID_TOKEN)-1);
-		bufptr = msgid;
-	    }
-
-	    inmsgid = 1;
-	    inmsgstr = 0;
-	    indomain = 0;
-	    goto load_buffer;
-	}
-
-	/*
-	 * Process MSGSTR Tokens, must not have just seen one unless
-	 * this line begins with whitespace -or- "
-	 */
-
-	if ((!strncmp(MSGSTR_TOKEN, linebuf, sizeof(MSGSTR_TOKEN)-1))
-	    || (whitespace && inmsgstr)) {
-	    if (inmsgstr && !whitespace) {
-		fprintf(stderr, "Consecutive MSGSTR tokens encountered ");
-		fprintf(stderr, "at line number: %d, exiting\n", linenum);
-/*
-		exit(1);
-*/
-	    }
-
-	    if (inmsgstr) {
-	        linebufptr = consume_whitespace(linebuf);
-	    } else {
-	        linebufptr = consume_whitespace(linebuf +
-		    sizeof(MSGSTR_TOKEN)-1);
-		bufptr = msgstr;
-	    }
-
-	    inmsgstr = 1;
-	    inmsgid = 0;
-	    indomain = 0;
-	    goto load_buffer;
-	}
-
-	/*
-	 * Process DOMAIN Tokens, add message id and message string to
-	 * sorted list if msgstr was being processed, 
-	 * write out file for existing domain if it exists (domain_set = 1)
-	*/
-
-	if (!strncmp(DOMAIN_TOKEN, linebuf, sizeof(DOMAIN_TOKEN)-1)) {
-	    if (inmsgstr) {
-		sortit(msgid, msgstr, 1);
-	    }
-
-	    if (inmsgstr || inmsgid) {
-		memset(msgid, 0, sizeof(msgid));
-		memset(msgstr, 0, sizeof(msgstr));
-	    }
-
-	    if (domain_set) {
-		output_file(msgfile);
-	    }
-	    domain_set = 1;
-	    indomain = 1;
-	    inmsgid = 0;
-	    inmsgstr = 0;
-		
-	    linebufptr = consume_whitespace(linebuf+ sizeof(DOMAIN_TOKEN));
-	    memset(current_domain, 0, sizeof(current_domain));
-	    bufptr = current_domain;
-	}
-
-load_buffer:
-
-	if (*linebufptr++ != '\"') {
-	    fprintf(stderr, "Warning, Syntax at line number: %d, ",
-		linenum);
-	    fprintf(stderr, "Missing \", ignored\n");
-	    --linebufptr;
-	}
-
-	quotefound = 0;
-
-	while (c=*linebufptr++) {
-	    switch (c) {
-	    case '\n':
-		if (!quotefound) {
-		    fprintf(stderr, "Warning, Syntax at line number: %d, ",
-			linenum);
-		    fprintf(stderr, "Missing \" at EOL, ignored\n");
-		}
-		break;
-
-	    case '\"':
-		quotefound = 1;
-	        break;
-
-	    case '\\':
-		*bufptr++ = expand_meta(&linebufptr);
-		break;
-
-	    default:
-	        *bufptr++ = c;
-	    }
-	}
-
-	if (indomain) {
-	    memset(msgfile, 0, sizeof(msgfile));
-	    strcpy(msgfile, current_domain);
-	    strcat(msgfile, ".mo");
-/*
-	    strcpy(msgfile, LOCALEDIR);
-	    strcat(msgfile, current_locale);
-	    strcat(msgfile, "/");
-	    strcat(msgfile, current_domain);
-*/
-	}
-    }
-
-    if (inmsgstr) {
-	sortit(msgid, msgstr, 1);
-    }
-
-    if (inmsgstr || inmsgid) {
-	memset(msgid, 0, sizeof(msgid));
-	memset(msgstr, 0, sizeof(msgstr));
-    }
-
-    if (domain_set) {
-	output_file(msgfile);
-    }
-    return(0);
-}
-
-
-char *
-consume_whitespace(buf)
-    char *buf;
-{
-    register char *bufptr = buf;
-    char c;
-    while (c = *bufptr++) {
-	switch (c) {
-	    case ' ':
-	    case '\t' :
-		continue;
-	    default:
-		return(bufptr-1);
-	}
-    }
-}
-
-char
-expand_meta(buf)
-    char **buf;
-{
-    register char c = **buf;
-
-    switch (c) {
-        case '"':
-	    (*buf)++;
-	    return ('\"');
-	case '\\':
-	    (*buf)++;
-	    return ('\\');
-        case 'b' :
-	    (*buf)++;
-	    return ('\b');
-        case 'f' :
-	    (*buf)++;
-	    return ('\f');
-        case 'n' :
-	    (*buf)++;
-	    return ('\n');
-        case 'r' :
-	    (*buf)++;
-	    return ('\r');
-        case 't' :
-	    (*buf)++;
-	    return ('\t');
-        case 'v' :
-	    (*buf)++;
-	    return ('\v');
-        default:
-	    return ('\\');
-    }
-}
-
-
-
-/*
- * sortit - insertion sort, place message identifier = str and
- * message string = msgstr into list sorted by message identifier
-*/
-
-off_t
-sortit(msgid, msgstr, new)
-    char *msgid, *msgstr;
-    int new;
-{
-    int i, j, lessthan;
-    register struct list_struct *hp, *hp0, *hp1;
-
-    if (debug)
-	fprintf(stderr,
-	    "==> sortit(), msgid = %s, msgstr = %s\n", msgid, msgstr);
-    lessthan = 0;
-    hp = hp0 = &list;
-    while (hp->hnext && !lessthan) {
-        hp0 = hp;
-        hp = hp->hnext;
-        i = istail(hp->msgid, msgid);
-        if (i < 0) {
-            lessthan = 1;
-            hp1 = hp;
-            continue;
-        }
-        if (i == 0) {             /* found! */
-            return(hp->hpt);
-	}
-    }
-    if (!lessthan) {
-        hp0 = hp;
-    }
-    if ((hp = (struct list_struct *) calloc(1, sizeof(*hp))) == NULL) {
-        perror("msgfmt");
-        exit(8);
-    }
-    hp->hpt = mesgpt;
-    hp->msgid = savestr(msgid);
-    hp->msg = savestr(msgstr);
-    mesgpt += strlen(hp->msgid) + strlen(hp->msg);
-
-    if (hp0->hnext) {
-        hp->hnext = hp1;
-        hp0->hnext = hp;
-        hp->hnew = new;
-    } else {
-        hp->hnew = new;
-        hp0->hnext = hp;
-    }
-    return(hp->hpt);
-}
-
-printlist()
-{
-    struct list_struct *hp1;
-
-    hp1 = &list;
-    fprintf(stderr, "dumping record at offset hpt = %d\n", hp1->hpt);
-    fprintf(stderr, "message id is %s\n", hp1->msgid);
-    fprintf(stderr, "message string is %s\n", hp1->msg);
-
-    while (hp1->hnext) {
-	fprintf(stderr, "dumping record at offset hpt = %d\n", hp1->hpt);
-        fprintf(stderr, "message id is %s\n", hp1->hnext->msgid);
-	fprintf(stderr, "message string is %s\n", hp1->hnext->msg);
-        hp1 = hp1->hnext;
-    }
-
-}
-
-
-/*
- * binary_compute is used for pre-computing a binary search. 
- */
-int
-binary_compute(i, j, more, less)
-    int i,j;
-    int more[],less[];
-{
-    int k;
-
-    if (i > j ) {
-        return -99;
-    }
-    k = (i + j)/2;
-
-    less[k] = binary_compute(i, k-1, more, less);
-    more[k] = binary_compute(k+1, j, more, less);
-    return k;
-}
-
-/*
- * Write out static_message File contains static structure of messages.
- */
-#ifdef USE_MMAP
-output_file(file)
-    char *file;
-{
-        FILE *xdotcf = fopen(file, "w");
-        struct list_struct *lp;
-        int     message_count;
-        int     string_count_msgid=0;
-        int     string_count_msg=0;
-        int     msgid_index=0;
-        int     msg_index=0;
-        int     *less,*more;
-        int     i;
- 
-        if (xdotcf == NULL) {
-	    perror("static_messages");
-	    exit(6);
-	}
- 
-        message_count = 0;
-        lp = &list;
-        while (lp->hnext) { /* get offsets and counts */
-                lp->hnext->msgid_offset = msgid_index;
-                lp->hnext->msg_offset = msg_index;
-                msgid_index += strlen(lp->hnext->msgid)+1;
-                msg_index += strlen(lp->hnext->msg)+1;
-                message_count++;
-                lp = lp->hnext;
-        }
-        string_count_msgid = msgid_index;
-        string_count_msg = msg_index;
-        if ((less = (int *) calloc(message_count, sizeof(int))) == NULL) {
-                perror("msgfmt output_file()");
-                exit(8);
-        }
-        if ((more = (int *) calloc(message_count, sizeof(int))) == NULL) {
-                perror("msgfmt output_file()");
-                exit(8);
-        }
-        (void) binary_compute(0, message_count-1, more, less);
-        if (message_count == 2) {
-                less[1] = -99; /* kludge that works! */
-        }
- 
-        /* write out the message.mo */
-        i = (message_count-1)/2; /* this is the first message to check */
-        (void) fwrite(&i, sizeof(int), 1, xdotcf);
-        (void) fwrite(&message_count, sizeof(int), 1, xdotcf);
-        (void) fwrite(&string_count_msgid, sizeof(int), 1, xdotcf);
-        (void) fwrite(&string_count_msg, sizeof(int), 1, xdotcf);
-        i = sizeof(struct list_struct) * message_count;
-        (void) fwrite(&i, sizeof(int), 1, xdotcf);
-        i = 0; /* used to get more and less */
-        lp = &list;
-        while (lp->hnext) { /* put out message struct */
-                (void) fwrite(&less[i], sizeof(int), 1, xdotcf);
-                (void) fwrite(&more[i], sizeof(int), 1, xdotcf);
-                (void) fwrite(&lp->hnext->msgid_offset, sizeof(int), 1, xdotcf);
-                (void) fwrite(&lp->hnext->msg_offset, sizeof(int), 1, xdotcf);
-                i++;
-                lp = lp->hnext;
-        }
-        lp = &list;
-        while (lp->hnext) { /* put out messageid strings */
-                (void) fwrite(lp->hnext->msgid, strlen(lp->hnext->msgid)+1, 1, xdotcf);            
-                lp = lp->hnext;
-        }
-        lp = &list;
-        while (lp->hnext) { /* put out message strings */
-                (void) fwrite(lp->hnext->msg, strlen(lp->hnext->msg)+1, 1, xdotcf);
-                lp = lp->hnext;
-        }
-        ignore(fclose(xdotcf));
-        /* clear list */
-        list.hpt =0;
-        list.msgid_offset =0;
-        list.msg_offset =0;
-        list.msgid =(char )0;
-        list.msg =(char )0;
-        list.hnext = NULL;
-        list.hnew = 0;
-}
-
-#else
-
-
-output_file(file)
-    char *file;
-{
-    FILE *xdotcf = fopen(file, "w");
-    struct list_struct *lp;
-    int    message_count;
-    int    *less, *more;
-    int    i;
-
-    if (xdotcf == NULL){
-        perror(file);
-	 exit(6);
-    }
-
-    message_count = 0;
-    lp = &list;
-    while (lp->hnext) {
-        message_count++;
-        lp = lp->hnext;
-    }
-    if ((less = (int *) calloc(message_count, sizeof(int))) == NULL) {
-        perror("msgfmt output_file()");
-        exit(8);
-    }
-    if ((more = (int *) calloc(message_count, sizeof(int))) == NULL) {
-        perror("msgfmt output_file()");
-        exit(8);
-    }
-    binary_compute(0, message_count-1, more, less);
-    if (message_count == 2) {
-        less[1] = 0; /* kludge that works! */
-    }
-
-    
-
-    /* put out messages in binary format */
-
-    fprintf(xdotcf,"%d\n%d\n", message_count, (message_count-1)/2);
-    lp = &list;
-    while (lp->hnext) {
-        fprintf(xdotcf,"%s\n", lp->hnext->msgid); /* message id */
-        fprintf(xdotcf,"%d\n%d\n", *less++, *more++);
-        fprintf(xdotcf,"%s\n", lp->hnext->msg); /* message id */
-        lp = lp->hnext;
-    }
-    ignore(fclose(xdotcf));
-
-    freelist();
-}
-#endif
-
-/*
- * freelist() - frees all members of the sorted list after the list
- * 		is written out to the binary tree file, called when
- *		changing domains and when exiting the program
-*/
-
-freelist()
-{
-    register struct list_struct *hp, *hp0;
-
-    hp0 = &list;
-    hp = hp0->hnext;
-
-    while (hp->hnext) {
-        hp0 = hp;
-        hp = hp->hnext;
-        free(hp0);
-    }
-    free(hp);
-    list.hnext = 0;
-}
-
-char *
-savestr(cp)
-    register char *cp;
-{
-    register char *dp;
-
-    if ((dp = (char *) calloc(1, strlen(cp) + 1)) == NULL) {
-        perror("msgfmt");
-        exit(8);
-    }
-    return(strcpy(dp, cp));
-}
-
-
-istail(str, of)
-    register char *str, *of;
-{
-
-        return(strcmp(of, str));
-}
diff -rNu xview-3.2p1.4-old/util/msgfmt/msgfmt.man xview-3.2p1.4/util/msgfmt/msgfmt.man
--- xview-3.2p1.4-old/util/msgfmt/msgfmt.man	2013-08-28 17:12:56.308682001 +0200
+++ xview-3.2p1.4/util/msgfmt/msgfmt.man	1970-01-01 01:00:00.000000000 +0100
@@ -1,161 +0,0 @@
-.\" @(#)msgfmt.1 1.6 90/10/12 SMI; from Sun
-.TH msgfmt 1 "25 July 1990"
-.SH NAME
-msgfmt \- create a message object from a message file
-.SH SYNOPSIS
-.B msgfmt
-[
-.B \-v
-]
-.I filename\c
-.B \&.po
-\&.\|.\|.
-.IX "msgfmt" "" "\fLmsgfmt\fP \(em create message object file"
-.IX "messages" "create message object file"
-.SH DESCRIPTION
-.LP
-.B msgfmt
-creates a
-message object
-.I filename
-.B \&.mo
-file from the portable message file
-.I filename\c
-.BR \&.po .
-.LP
-The 
-.B .po 
-file contains strings extracted from source code.
-.B .po
-files can be edited, and the
-messages in them can changed to accomodate
-any language supported by the system.
-.LP
-The
-.B xgettext
-command (see
-.BR xgettext (1))
-can be used to create the
-.B default.po
-file.
-.LP
-The
-.B msgfmt
-command does not modify the
-portable object files.
-.SS "Portable Object Files"
-.IX "messages" "creating portable object files"
-.IX "messages" "editing messages"
-.IX "\&.po files" "portable object files"
-.IX "\&.mo files" "message object files"
-.LP
-Each
-.B .po
-file contains one or more lines.
-Each line
-contains either a comment or a statement.
-Comments start the line with a hash mark (#) and end with
-the newline character and are ignored.
-.LP
-Each directive starts on a new line and is
-separated from
-.BI < value >
-by white space (such as one or more space or tab characters).
-.BI < value >
-consists of one or more quoted strings separated by white space or <CR>.
-The following are valid directives:
-.IX "messages" "setting the domain"
-.IX "messages" "setting the message identifier"
-.IX "messages" "setting the message string"
-.RS
-.B domain
-.I domainname
-.br
-.B msgid
-.I message_identifier
-.br
-.B msgstr
-.I message_string
-.RE
-.LP
-The
-.B domain
-directive identifies all following directives until
-another
-.B domain
-directive is encountered as applying to the domain
-.I domainname.
-The
-.I domainname
-is a string up to
-.SM MAXDOMAIN
-bytes long, and can contain any characters
-allowed in legal filenames.
-Until the first
-.B domain
-directive is encountered in the file, all target strings
-belong to the default domain.
-The default domain is called 
-.BR default .
-.LP
-The
-.B msgid
-directive specifies the message identifier for the following
-.B msgstr directive.
-The
-.I message_identifier
-string identifies a target string at retrieval time.
-Every statement containing a
-.B msgid
-directive must be followed by a statement containing a
-.B msgstr
-directive.
-.LP
-The
-.B msgstr
-directive specifies the target string associated with the
-.I message_identifier
-string declared in the immediately preceding
-.B msgid
-directive.
-.SH OPTIONS
-.TP 10
-.B \-v
-Verbose.  List duplicate message identifiers.
-Message strings are not redefined.
-.SH EXAMPLES
-.LP
-The following command creates a named
-.B " .mo" 
-file for each domain named in the portable message objects
-.BR " filename1.po " and " filename2.po" . 
-.LP
-.RS
-.nf
-.B msgfmt filename1.po filename2.po
-.RE
-.fi
-.LP
-Running
-.BR msgfmt (1)
-on the following sample
-.B .po
-file creates two
-.B .mo
-files, named
-.B first.mo
-and
-.B second.mo.
-.RS
-.nf
-domain "first.mo"
-msgid "aao"
-msgstr "first sample message"
-domain "second.mo"
-msgid "bbo"
-msgstr "second sample message"
-.RE
-.fi
-.SH "SEE ALSO"
-.BR xgettext (1) ,
-.BR gettext (3) .
diff -rNu xview-3.2p1.4-old/util/msgfmt/msgfmt_xv.c xview-3.2p1.4/util/msgfmt/msgfmt_xv.c
--- xview-3.2p1.4-old/util/msgfmt/msgfmt_xv.c	1970-01-01 01:00:00.000000000 +0100
+++ xview-3.2p1.4/util/msgfmt/msgfmt_xv.c	2013-08-28 17:13:08.948682186 +0200
@@ -0,0 +1,669 @@
+#ifndef lint
+#ifdef sccs
+static char     sccsid[] = "@(#)msgfmt.c 1.3 91/09/14";
+#endif
+#endif
+
+#include "msgfmt.h"
+
+/*
+ * msgfmt - Generate binary tree for runtime gettext() using psffm:
+ *           "Portable Source File Format for Messages" file template.
+ *	     This file may have previously been generated by the
+ *	     c2psffm filter for c source files.
+ */
+
+#define    ignore(a)    ((void) a)
+
+char	*consume_whitespace();
+char	expand_meta();
+char    *calloc();
+off_t    tellpt;
+off_t    sortit();
+char    *mktemp();
+char    *savestr();
+char    *strcat();
+char    *strcpy();
+
+off_t    mesgpt;
+
+/*
+ * Strings is a flat file of id, string pairs, used by cflg
+ */
+
+char    *strings =    "strings";
+
+char	linebuf[MAX_VALUE_LEN];
+char	*domain_name = DEFAULT_DOMAIN;
+
+int    cflg = 0;
+int    verbose = 0;
+int    debug = 0;
+int    readstd;
+
+struct list_struct list;
+
+main(argc, argv)
+    int argc;
+    char *argv[];
+{
+
+    argc--, argv++;
+    while (argc > 0 && argv[0][0] == '-') {
+
+        register char *cp = &(*argv++)[1];
+
+        argc--;
+
+        if (*cp == 0) {
+            readstd++;
+        }
+
+        do switch (*cp++) {
+
+/*
+ *	cflag stuff not yet implemented.
+
+        case 'c':
+            cflg++;
+            continue;
+ */
+
+	case 'd':
+	    debug++;
+	    break;
+
+        case 'v':
+            verbose++;
+            continue;
+
+        default:
+/*
+            fprintf(stderr,
+                "usage: msgfmt [ -v ] [ -c ] [ - ] [ name ... ]\n");
+*/
+            fprintf(stderr,
+                "usage: msgfmt [ -dv ] [ - ] [ name ... ]\n");
+	    break;;
+
+        } while (*cp);	/* do switch ... */
+
+    } /* while (argc ... */
+
+
+    while (readstd || argc > 0) {
+
+        if (!readstd && freopen(argv[0], "r", stdin) == NULL) {
+            perror(argv[0]);
+	    exit(2);
+	}
+
+    	read_psffm(argv[0]);
+
+        if (readstd == 0) {
+            argc--; argv++;
+	} else {
+            readstd = 0;
+	}
+    }	/* while (readstd ... */
+
+    exit(0);
+}
+
+
+/* 
+ * read_psffm - read in "psffm" format file, check syntax, printing
+ * 		error messages as needed, output binary tree to
+ *		file <domain>
+*/
+
+read_psffm(filename)
+    char *filename;
+{
+
+    static char current_domain[MAX_DOMAIN_LENGTH];
+    static char msgfile[MAXPATHLEN];
+
+
+    char *linebufptr;
+    char *current_locale;
+    char msgid [MAX_VALUE_LEN+1];
+    char msgstr [MAX_VALUE_LEN+1];
+    register char *bufptr;
+    
+
+    int linenum = 0;
+    int	domain_set = 0;
+    int whitespace = 0;
+    int quotefound = 0;
+    int ignored = 0;
+    int indomain = 0;
+    int inmsgid = 0;
+    int inmsgstr = 0;
+    char c;
+
+
+    while (1) {
+	memset(linebuf, 0, sizeof(linebuf));
+        if (fgets(linebuf, sizeof(linebuf), stdin) == NULL) {
+            if (ferror(stdin)) {
+                perror(filename);
+                exit(2);
+            }
+            break;
+        }
+	linenum ++;
+
+	if (verbose) {
+	    printf("Scanning line number %d: %s\n", linenum, linebuf);
+	}
+
+	linebufptr = linebuf;
+	whitespace = 0;
+
+        switch (*linebufptr) {
+	case '#': 	/*   comment    */
+	case '\n':
+	ignored = 1;
+	break;
+
+	case '\"':
+	case ' ':	/*   whitespace should be handled correctly */
+	case '\t':
+	    whitespace = 1;
+	default:
+	    ignored = 0;
+	    break;
+	}
+
+	if (ignored) {
+	    continue;
+	}
+
+	/*
+	 * Process MSGID Tokens, must not have just seen one unless
+	 * this line begins with whitespace -or- "
+	 */
+
+	if ((!strncmp(MSGID_TOKEN, linebuf, sizeof(MSGID_TOKEN)-1))
+	    || (whitespace && inmsgid)) {
+	    if (inmsgid && !whitespace) {
+		fprintf(stderr, "Consecutive MSGID tokens encountered ");
+		fprintf(stderr, "at line number: %d, exiting\n", linenum);
+/*
+		exit(1);
+*/
+	    }
+	    if (inmsgstr) {
+		sortit(msgid, msgstr, 1);
+
+		memset(msgid, 0, sizeof(msgid));
+		memset(msgstr, 0, sizeof(msgstr));
+	    }
+
+
+	    if (inmsgid) {
+	        linebufptr = consume_whitespace(linebuf);
+	    } else {
+	        linebufptr = consume_whitespace(linebuf +
+		    sizeof(MSGID_TOKEN)-1);
+		bufptr = msgid;
+	    }
+
+	    inmsgid = 1;
+	    inmsgstr = 0;
+	    indomain = 0;
+	    goto load_buffer;
+	}
+
+	/*
+	 * Process MSGSTR Tokens, must not have just seen one unless
+	 * this line begins with whitespace -or- "
+	 */
+
+	if ((!strncmp(MSGSTR_TOKEN, linebuf, sizeof(MSGSTR_TOKEN)-1))
+	    || (whitespace && inmsgstr)) {
+	    if (inmsgstr && !whitespace) {
+		fprintf(stderr, "Consecutive MSGSTR tokens encountered ");
+		fprintf(stderr, "at line number: %d, exiting\n", linenum);
+/*
+		exit(1);
+*/
+	    }
+
+	    if (inmsgstr) {
+	        linebufptr = consume_whitespace(linebuf);
+	    } else {
+	        linebufptr = consume_whitespace(linebuf +
+		    sizeof(MSGSTR_TOKEN)-1);
+		bufptr = msgstr;
+	    }
+
+	    inmsgstr = 1;
+	    inmsgid = 0;
+	    indomain = 0;
+	    goto load_buffer;
+	}
+
+	/*
+	 * Process DOMAIN Tokens, add message id and message string to
+	 * sorted list if msgstr was being processed, 
+	 * write out file for existing domain if it exists (domain_set = 1)
+	*/
+
+	if (!strncmp(DOMAIN_TOKEN, linebuf, sizeof(DOMAIN_TOKEN)-1)) {
+	    if (inmsgstr) {
+		sortit(msgid, msgstr, 1);
+	    }
+
+	    if (inmsgstr || inmsgid) {
+		memset(msgid, 0, sizeof(msgid));
+		memset(msgstr, 0, sizeof(msgstr));
+	    }
+
+	    if (domain_set) {
+		output_file(msgfile);
+	    }
+	    domain_set = 1;
+	    indomain = 1;
+	    inmsgid = 0;
+	    inmsgstr = 0;
+		
+	    linebufptr = consume_whitespace(linebuf+ sizeof(DOMAIN_TOKEN));
+	    memset(current_domain, 0, sizeof(current_domain));
+	    bufptr = current_domain;
+	}
+
+load_buffer:
+
+	if (*linebufptr++ != '\"') {
+	    fprintf(stderr, "Warning, Syntax at line number: %d, ",
+		linenum);
+	    fprintf(stderr, "Missing \", ignored\n");
+	    --linebufptr;
+	}
+
+	quotefound = 0;
+
+	while (c=*linebufptr++) {
+	    switch (c) {
+	    case '\n':
+		if (!quotefound) {
+		    fprintf(stderr, "Warning, Syntax at line number: %d, ",
+			linenum);
+		    fprintf(stderr, "Missing \" at EOL, ignored\n");
+		}
+		break;
+
+	    case '\"':
+		quotefound = 1;
+	        break;
+
+	    case '\\':
+		*bufptr++ = expand_meta(&linebufptr);
+		break;
+
+	    default:
+	        *bufptr++ = c;
+	    }
+	}
+
+	if (indomain) {
+	    memset(msgfile, 0, sizeof(msgfile));
+	    strcpy(msgfile, current_domain);
+	    strcat(msgfile, ".mo");
+/*
+	    strcpy(msgfile, LOCALEDIR);
+	    strcat(msgfile, current_locale);
+	    strcat(msgfile, "/");
+	    strcat(msgfile, current_domain);
+*/
+	}
+    }
+
+    if (inmsgstr) {
+	sortit(msgid, msgstr, 1);
+    }
+
+    if (inmsgstr || inmsgid) {
+	memset(msgid, 0, sizeof(msgid));
+	memset(msgstr, 0, sizeof(msgstr));
+    }
+
+    if (domain_set) {
+	output_file(msgfile);
+    }
+    return(0);
+}
+
+
+char *
+consume_whitespace(buf)
+    char *buf;
+{
+    register char *bufptr = buf;
+    char c;
+    while (c = *bufptr++) {
+	switch (c) {
+	    case ' ':
+	    case '\t' :
+		continue;
+	    default:
+		return(bufptr-1);
+	}
+    }
+}
+
+char
+expand_meta(buf)
+    char **buf;
+{
+    register char c = **buf;
+
+    switch (c) {
+        case '"':
+	    (*buf)++;
+	    return ('\"');
+	case '\\':
+	    (*buf)++;
+	    return ('\\');
+        case 'b' :
+	    (*buf)++;
+	    return ('\b');
+        case 'f' :
+	    (*buf)++;
+	    return ('\f');
+        case 'n' :
+	    (*buf)++;
+	    return ('\n');
+        case 'r' :
+	    (*buf)++;
+	    return ('\r');
+        case 't' :
+	    (*buf)++;
+	    return ('\t');
+        case 'v' :
+	    (*buf)++;
+	    return ('\v');
+        default:
+	    return ('\\');
+    }
+}
+
+
+
+/*
+ * sortit - insertion sort, place message identifier = str and
+ * message string = msgstr into list sorted by message identifier
+*/
+
+off_t
+sortit(msgid, msgstr, new)
+    char *msgid, *msgstr;
+    int new;
+{
+    int i, j, lessthan;
+    register struct list_struct *hp, *hp0, *hp1;
+
+    if (debug)
+	fprintf(stderr,
+	    "==> sortit(), msgid = %s, msgstr = %s\n", msgid, msgstr);
+    lessthan = 0;
+    hp = hp0 = &list;
+    while (hp->hnext && !lessthan) {
+        hp0 = hp;
+        hp = hp->hnext;
+        i = istail(hp->msgid, msgid);
+        if (i < 0) {
+            lessthan = 1;
+            hp1 = hp;
+            continue;
+        }
+        if (i == 0) {             /* found! */
+            return(hp->hpt);
+	}
+    }
+    if (!lessthan) {
+        hp0 = hp;
+    }
+    if ((hp = (struct list_struct *) calloc(1, sizeof(*hp))) == NULL) {
+        perror("msgfmt");
+        exit(8);
+    }
+    hp->hpt = mesgpt;
+    hp->msgid = savestr(msgid);
+    hp->msg = savestr(msgstr);
+    mesgpt += strlen(hp->msgid) + strlen(hp->msg);
+
+    if (hp0->hnext) {
+        hp->hnext = hp1;
+        hp0->hnext = hp;
+        hp->hnew = new;
+    } else {
+        hp->hnew = new;
+        hp0->hnext = hp;
+    }
+    return(hp->hpt);
+}
+
+printlist()
+{
+    struct list_struct *hp1;
+
+    hp1 = &list;
+    fprintf(stderr, "dumping record at offset hpt = %d\n", hp1->hpt);
+    fprintf(stderr, "message id is %s\n", hp1->msgid);
+    fprintf(stderr, "message string is %s\n", hp1->msg);
+
+    while (hp1->hnext) {
+	fprintf(stderr, "dumping record at offset hpt = %d\n", hp1->hpt);
+        fprintf(stderr, "message id is %s\n", hp1->hnext->msgid);
+	fprintf(stderr, "message string is %s\n", hp1->hnext->msg);
+        hp1 = hp1->hnext;
+    }
+
+}
+
+
+/*
+ * binary_compute is used for pre-computing a binary search. 
+ */
+int
+binary_compute(i, j, more, less)
+    int i,j;
+    int more[],less[];
+{
+    int k;
+
+    if (i > j ) {
+        return -99;
+    }
+    k = (i + j)/2;
+
+    less[k] = binary_compute(i, k-1, more, less);
+    more[k] = binary_compute(k+1, j, more, less);
+    return k;
+}
+
+/*
+ * Write out static_message File contains static structure of messages.
+ */
+#ifdef USE_MMAP
+output_file(file)
+    char *file;
+{
+        FILE *xdotcf = fopen(file, "w");
+        struct list_struct *lp;
+        int     message_count;
+        int     string_count_msgid=0;
+        int     string_count_msg=0;
+        int     msgid_index=0;
+        int     msg_index=0;
+        int     *less,*more;
+        int     i;
+ 
+        if (xdotcf == NULL) {
+	    perror("static_messages");
+	    exit(6);
+	}
+ 
+        message_count = 0;
+        lp = &list;
+        while (lp->hnext) { /* get offsets and counts */
+                lp->hnext->msgid_offset = msgid_index;
+                lp->hnext->msg_offset = msg_index;
+                msgid_index += strlen(lp->hnext->msgid)+1;
+                msg_index += strlen(lp->hnext->msg)+1;
+                message_count++;
+                lp = lp->hnext;
+        }
+        string_count_msgid = msgid_index;
+        string_count_msg = msg_index;
+        if ((less = (int *) calloc(message_count, sizeof(int))) == NULL) {
+                perror("msgfmt output_file()");
+                exit(8);
+        }
+        if ((more = (int *) calloc(message_count, sizeof(int))) == NULL) {
+                perror("msgfmt output_file()");
+                exit(8);
+        }
+        (void) binary_compute(0, message_count-1, more, less);
+        if (message_count == 2) {
+                less[1] = -99; /* kludge that works! */
+        }
+ 
+        /* write out the message.mo */
+        i = (message_count-1)/2; /* this is the first message to check */
+        (void) fwrite(&i, sizeof(int), 1, xdotcf);
+        (void) fwrite(&message_count, sizeof(int), 1, xdotcf);
+        (void) fwrite(&string_count_msgid, sizeof(int), 1, xdotcf);
+        (void) fwrite(&string_count_msg, sizeof(int), 1, xdotcf);
+        i = sizeof(struct list_struct) * message_count;
+        (void) fwrite(&i, sizeof(int), 1, xdotcf);
+        i = 0; /* used to get more and less */
+        lp = &list;
+        while (lp->hnext) { /* put out message struct */
+                (void) fwrite(&less[i], sizeof(int), 1, xdotcf);
+                (void) fwrite(&more[i], sizeof(int), 1, xdotcf);
+                (void) fwrite(&lp->hnext->msgid_offset, sizeof(int), 1, xdotcf);
+                (void) fwrite(&lp->hnext->msg_offset, sizeof(int), 1, xdotcf);
+                i++;
+                lp = lp->hnext;
+        }
+        lp = &list;
+        while (lp->hnext) { /* put out messageid strings */
+                (void) fwrite(lp->hnext->msgid, strlen(lp->hnext->msgid)+1, 1, xdotcf);            
+                lp = lp->hnext;
+        }
+        lp = &list;
+        while (lp->hnext) { /* put out message strings */
+                (void) fwrite(lp->hnext->msg, strlen(lp->hnext->msg)+1, 1, xdotcf);
+                lp = lp->hnext;
+        }
+        ignore(fclose(xdotcf));
+        /* clear list */
+        list.hpt =0;
+        list.msgid_offset =0;
+        list.msg_offset =0;
+        list.msgid =(char )0;
+        list.msg =(char )0;
+        list.hnext = NULL;
+        list.hnew = 0;
+}
+
+#else
+
+
+output_file(file)
+    char *file;
+{
+    FILE *xdotcf = fopen(file, "w");
+    struct list_struct *lp;
+    int    message_count;
+    int    *less, *more;
+    int    i;
+
+    if (xdotcf == NULL){
+        perror(file);
+	 exit(6);
+    }
+
+    message_count = 0;
+    lp = &list;
+    while (lp->hnext) {
+        message_count++;
+        lp = lp->hnext;
+    }
+    if ((less = (int *) calloc(message_count, sizeof(int))) == NULL) {
+        perror("msgfmt output_file()");
+        exit(8);
+    }
+    if ((more = (int *) calloc(message_count, sizeof(int))) == NULL) {
+        perror("msgfmt output_file()");
+        exit(8);
+    }
+    binary_compute(0, message_count-1, more, less);
+    if (message_count == 2) {
+        less[1] = 0; /* kludge that works! */
+    }
+
+    
+
+    /* put out messages in binary format */
+
+    fprintf(xdotcf,"%d\n%d\n", message_count, (message_count-1)/2);
+    lp = &list;
+    while (lp->hnext) {
+        fprintf(xdotcf,"%s\n", lp->hnext->msgid); /* message id */
+        fprintf(xdotcf,"%d\n%d\n", *less++, *more++);
+        fprintf(xdotcf,"%s\n", lp->hnext->msg); /* message id */
+        lp = lp->hnext;
+    }
+    ignore(fclose(xdotcf));
+
+    freelist();
+}
+#endif
+
+/*
+ * freelist() - frees all members of the sorted list after the list
+ * 		is written out to the binary tree file, called when
+ *		changing domains and when exiting the program
+*/
+
+freelist()
+{
+    register struct list_struct *hp, *hp0;
+
+    hp0 = &list;
+    hp = hp0->hnext;
+
+    while (hp->hnext) {
+        hp0 = hp;
+        hp = hp->hnext;
+        free(hp0);
+    }
+    free(hp);
+    list.hnext = 0;
+}
+
+char *
+savestr(cp)
+    register char *cp;
+{
+    register char *dp;
+
+    if ((dp = (char *) calloc(1, strlen(cp) + 1)) == NULL) {
+        perror("msgfmt");
+        exit(8);
+    }
+    return(strcpy(dp, cp));
+}
+
+
+istail(str, of)
+    register char *str, *of;
+{
+
+        return(strcmp(of, str));
+}
diff -rNu xview-3.2p1.4-old/util/msgfmt/msgfmt_xv.man xview-3.2p1.4/util/msgfmt/msgfmt_xv.man
--- xview-3.2p1.4-old/util/msgfmt/msgfmt_xv.man	1970-01-01 01:00:00.000000000 +0100
+++ xview-3.2p1.4/util/msgfmt/msgfmt_xv.man	2013-08-28 17:13:08.948682186 +0200
@@ -0,0 +1,161 @@
+.\" @(#)msgfmt_xv.1 1.6 90/10/12 SMI; from Sun
+.TH msgfmt_xv 1 "25 July 1990"
+.SH NAME
+msgfmt_xv \- create a message object from a message file
+.SH SYNOPSIS
+.B msgfmt_xv
+[
+.B \-v
+]
+.I filename\c
+.B \&.po
+\&.\|.\|.
+.IX "msgfmt_xv" "" "\fLmsgfmt\fP \(em create message object file"
+.IX "messages" "create message object file"
+.SH DESCRIPTION
+.LP
+.B msgfmt_xv
+creates a
+message object
+.I filename
+.B \&.mo
+file from the portable message file
+.I filename\c
+.BR \&.po .
+.LP
+The 
+.B .po 
+file contains strings extracted from source code.
+.B .po
+files can be edited, and the
+messages in them can changed to accomodate
+any language supported by the system.
+.LP
+The
+.B xgettext_xv
+command (see
+.BR xgettext_xv (1))
+can be used to create the
+.B default.po
+file.
+.LP
+The
+.B msgfmt_xv
+command does not modify the
+portable object files.
+.SS "Portable Object Files"
+.IX "messages" "creating portable object files"
+.IX "messages" "editing messages"
+.IX "\&.po files" "portable object files"
+.IX "\&.mo files" "message object files"
+.LP
+Each
+.B .po
+file contains one or more lines.
+Each line
+contains either a comment or a statement.
+Comments start the line with a hash mark (#) and end with
+the newline character and are ignored.
+.LP
+Each directive starts on a new line and is
+separated from
+.BI < value >
+by white space (such as one or more space or tab characters).
+.BI < value >
+consists of one or more quoted strings separated by white space or <CR>.
+The following are valid directives:
+.IX "messages" "setting the domain"
+.IX "messages" "setting the message identifier"
+.IX "messages" "setting the message string"
+.RS
+.B domain
+.I domainname
+.br
+.B msgid
+.I message_identifier
+.br
+.B msgstr
+.I message_string
+.RE
+.LP
+The
+.B domain
+directive identifies all following directives until
+another
+.B domain
+directive is encountered as applying to the domain
+.I domainname.
+The
+.I domainname
+is a string up to
+.SM MAXDOMAIN
+bytes long, and can contain any characters
+allowed in legal filenames.
+Until the first
+.B domain
+directive is encountered in the file, all target strings
+belong to the default domain.
+The default domain is called 
+.BR default .
+.LP
+The
+.B msgid
+directive specifies the message identifier for the following
+.B msgstr directive.
+The
+.I message_identifier
+string identifies a target string at retrieval time.
+Every statement containing a
+.B msgid
+directive must be followed by a statement containing a
+.B msgstr
+directive.
+.LP
+The
+.B msgstr
+directive specifies the target string associated with the
+.I message_identifier
+string declared in the immediately preceding
+.B msgid
+directive.
+.SH OPTIONS
+.TP 10
+.B \-v
+Verbose.  List duplicate message identifiers.
+Message strings are not redefined.
+.SH EXAMPLES
+.LP
+The following command creates a named
+.B " .mo" 
+file for each domain named in the portable message objects
+.BR " filename1.po " and " filename2.po" . 
+.LP
+.RS
+.nf
+.B msgfmt_xv filename1.po filename2.po
+.RE
+.fi
+.LP
+Running
+.BR msgfmt_xv (1)
+on the following sample
+.B .po
+file creates two
+.B .mo
+files, named
+.B first.mo
+and
+.B second.mo.
+.RS
+.nf
+domain "first.mo"
+msgid "aao"
+msgstr "first sample message"
+domain "second.mo"
+msgid "bbo"
+msgstr "second sample message"
+.RE
+.fi
+.SH "SEE ALSO"
+.BR xgettext (1) ,
+.BR gettext (3) .
diff -rNu xview-3.2p1.4-old/util/xgettext/Imakefile xview-3.2p1.4/util/xgettext/Imakefile
--- xview-3.2p1.4-old/util/xgettext/Imakefile	2013-08-28 17:12:56.308682001 +0200
+++ xview-3.2p1.4/util/xgettext/Imakefile	2013-08-28 17:13:08.948682186 +0200
@@ -4,4 +4,4 @@
 #include	<XView.tmpl>
 
 MANSUFFIX =1
-SimpleProgramTarget(xgettext)
+SimpleProgramTarget(xgettext_xv)
diff -rNu xview-3.2p1.4-old/util/xgettext/xgettext.c xview-3.2p1.4/util/xgettext/xgettext.c
--- xview-3.2p1.4-old/util/xgettext/xgettext.c	2013-08-28 17:12:56.308682001 +0200
+++ xview-3.2p1.4/util/xgettext/xgettext.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,1509 +0,0 @@
-#ifndef lint
-#ifdef sccs
-static char     sccsid[] = "@(#)xgettext.c 1.10 91/09/14";
-#endif
-#endif
-
-#include "xgettext.h"
-
-/*
- * gettext - extract strings from gettext() calls in a C language
- *           source file and create a psffm:
- *           "Portable Source File Format for Messages"
- *           file template.
- */
-
-int	write_args(), get_arguments(),  sort_message(),
-	write_sorted_psffm();
-char	*calloc(), *malloc(), *realloc();
-char	*strcat(), *strcpy(), *strdup();
-
-void	process(), print_usage(), init_lists(), add_comment_to_domain(),
-	read_psffm();
-char	*consume_whitespace(), *consume_symbol(), *consume_comment(),
-	    *consume_quoted_string(), *consume_delim();
-char	*get_nextline(), *write_comment(), *sort_comment();
-
-FILE 	*defaultfp = NULL;
-FILE	*currentfp = NULL;
-FILE	*exclude_stream = NULL;
-
-struct  list_head *get_list();
-struct  list_head lists, *last_list;
-
-char	*comment_cookie;
-char	*message_string = "";
-char	*default_domain = "messages";
-char	*file_path = ".";
-char	*currentf = "psffm";
-char	*exclude_file;
-
-int	readstd = 0;
-int	textdomain_call = 0;
-int	dgettext_call = 0;
-int	gettext_call = 0;
-int	verbose = 0;
-int	exclude = 0;
-int	number_lines = 0;
-int	use_pp = 0;
-int	use_msg_ids = 0;
-int	extract_comments = 0;
-int     linenum = 0;
-int	sorted_output = 1;
-int	all_strings = 0;
-int	update = 0;
-/*
-int	overwrite = 0;
-*/
-
-
-char	cfilename [MAXPATHLEN+1];
-
-char	linebuf[LINEBUF_SIZ];
-char	default_filepath[MAXPATHLEN+1];
-
-main(argc, argv, envp)
-    int argc;
-    char **argv, **envp;
-{
-
-    (void) get_arguments(&argc, &argv, envp);
-    
-
-    if (readstd) {
-	strcpy(cfilename, "stdin");
-	linenum = 0;
-	process();
-        readstd = 0;
-    }
-
-    while (argc > 0) {
-	if (verbose)
-	    fprintf(stderr, "scanning file # %d = %s\n", argc, *argv);
-
-        if (freopen(*argv, "r", stdin) == NULL) {
-            perror(*argv);
-	    exit(2);
-	}
-
-	strcpy(cfilename, *argv);
-	linenum = 0;
-        process(*argv);
-
-        argc--; argv++;
-    }
-
-    if (sorted_output || all_strings) {
-	write_sorted_psffm();
-    }
-
-    exit(0);
-}
-
-void
-print_usage()
-{
-    fprintf(stderr,
-	"\nusage: xgettext [-adnuv] [-c<flag>] [-m<tag>] [-o<default>]\n");
-    fprintf(stderr,
-	"            ... [-p<path>] [-x<xlist>] - | file\n");
-    fprintf(stderr,
-	"       xgettext -h (HELP)\n");
-}
-
-print_help()
-{
-    fprintf(stderr, "\n");
-    fprintf(stderr,
-	"-a\t\tfind ALL strings\n");
-    fprintf(stderr,
-	"-c<flag>\tget comments beginning with <flag>\n");
-    fprintf(stderr,
-	"-d\t\tgenerate duplicates\n");
-    fprintf(stderr,
-	"-h\t\tHELP !!!\n");
-    fprintf(stderr,
-	"-m<tag>\t\tfill in msgstr with msgid<tag>\n");
-    fprintf(stderr,
-	"-n\t\tline# comments in output\n");
-    fprintf(stderr,
-	"-o<default>\tuse <default> for default file name\n");
-    fprintf(stderr,
-	"-p<path>\tuse <path> for file path\n");
-    fprintf(stderr,
-	"-u\t\tgenerate list of updated messages in <domain>.new\n");
-    fprintf(stderr,
-	"-v\t\tverbose mode on, lists xgettext's actions\n");
-/*
-    fprintf(stderr,
-	"-w\t\toverwrite existing \".po\" files\n");
-*/
-    fprintf(stderr,
-	"-x<xlist>\texclude strings in file <xlist> from output\n");
-    fprintf(stderr,
-	"-\t\tread stdin, use as a filter (input only)\n");
-}
-
-void
-init_lists() {
-    lists.domain = strdup(default_domain);
-    last_list = &lists;
-    read_psffm(default_domain);
-}
-
-char *
-build_path(domain, pathbuf)
-    char *domain, pathbuf[];
-{
-    strcpy(pathbuf, file_path);
-    strcat(pathbuf, "/");
-    strcat(pathbuf, domain);
-    strcat(pathbuf, ".po");
-    return (pathbuf);
-}
-
-int
-get_arguments(argc, argv, envp)
-    int *argc;
-    char ***argv, **envp;
-{
-/*
- * Process input arguments of the form:
- *		
- *	-a	emit ALL strings
- *	-c	output comments beginning with <tag> <filename>
- *	-d	dups mode
- *	-h	HELP !!!
- *	-m	output message string using message id
- *	-n	insert line and file # comments in output
- *	-o 	specify default file name
- *	-p	file path
- *	-P	use preprocessor directives
- *	-u	create update list, new messages only
- *	-v	verbose mode on, outputs info on symbols encountered, etc.
- *	-w	overwrite existing .po files
- *	-x	exclude strings in exclude list <file>
- * 	 -	read stdin, aka use as an input only filter
- *	
-*/
-    (*argc)--, (*argv)++;
-    while (*argc > 0 && *argv[0][0] == '-') {
-	register char *cp = &(*(*argv)++)[1];
-        (*argc)--;
-	
-	switch (*cp) {
-
-	case 0:
-            readstd++;
-            break;
-
-	case 'a':
-	    all_strings = 1;
-	    if (verbose)
-		printf("placing all strings in .po file\n");
-	    break;
-
-	case 'c':
-	    extract_comments = 1;
-	    if (*argc < 1) {
-		fprintf(stderr,
-		  "NULL comment flag, try -c<flag>, exiting ...\n");
-		exit (1);
-	    }
-
-	    if (*(++cp) != NULL) {
-	    	comment_cookie = strdup(cp);
-	    } else {
-		comment_cookie = strdup(**argv);
-		(*argv)++; (*argc)--;
-	    }
-	    if (verbose)
-		printf("Placing comments in \".po\" files ...\n");
-	    break;
-
-	case 'd':
-	    sorted_output = 0;
-	    if (verbose)
-		printf("Writing ALL msgid's to \".po\" files\n");
-	    break;
-
-	case 'm':
-	    use_msg_ids = 1;
-	    if (*argc < 1) {
-		fprintf(stderr, 
-		  "NULL message tag, try -m<tag>, exiting ...\n");
-		exit (1);
-	    }
-	    if (*(++cp) != NULL) {
-	    	message_string = strdup(cp);
-	    } else {
-		message_string = strdup(**argv);
-		(*argv)++; (*argc)--;
-	    }
-	    if (verbose)
-		printf("Using \"<msgid> %s\" for msgstr\n", message_string);
-	    break;
-
-
-	case 'n':
-	    number_lines = 1;
-	    if (verbose)
-		printf("Numbering lines in \"psffm\" files ...\n");
-	    break;
-
-	case 'o':
-	    if (*argc < 1) {
-		fprintf(stderr, 
-		  "NULL output file, try -o<file>, exiting ...\n");
-		exit (1);
-	    }
-
-	    if (*(++cp) != NULL) {
-	    	default_domain = strdup(cp);
-	    } else {
-		default_domain = strdup(**argv);
-		(*argv)++; (*argc)--;
-	    }
-	    break;
-
-	case'P':
-	    use_pp = 1;
-	    break;
-
-	case 'p':
-	    if (*argc < 1) {
-		fprintf(stderr, 
-		  "NULL path, try -p<path>, exiting ...\n");
-		exit (1);
-	    }
-
-	    if (*(++cp) != NULL) {
-	    	file_path = strdup(cp);
-	    } else {
-		file_path = strdup(**argv);
-		(*argv)++; (*argc)--;
-	    }
-
-	    break;
-
-	case 'u':
-	    update = 1;
-	    break;
-
-	case 'v':
-	    verbose = 1;
-	    fprintf(stderr, "VERBOSE ON\n");
-	    break;
-
-/*
-	case 'w':
-	    overwrite = 1;
-	    break;
-*/
-
-	case 'x':
-	    exclude = 1;
-	    if (*argc < 1) {
-		fprintf(stderr, 
-		  "NULL exclude file, try -x<xfile>, exiting ...\n");
-		exit (1);
-	    }
-	    if (*(++cp) != NULL) {
-	    	exclude_file = strdup(cp);
-	    } else {
-		exclude_file = strdup(**argv);
-		(*argv)++; (*argc)--;
-	    }
-
-            if ((exclude_stream = fopen(exclude_file, "r")) == NULL) {
-		fprintf(stderr, "Exclude list file: %s not found,",
-		    exclude_file);
-		fprintf(stderr, " -x option reset, continuing ...\n");
-		exclude = 0;
-	    }
-
-	    if (verbose)
-		printf("Using \"<msgid>%s\" for msgstr\n", message_string);
-
-	    break;
-
-	default:
-    	    fprintf(stderr, "Unrecognized option: %c\n", *cp);
-	    print_usage();
-	    break;
-
-	case 'h':
-	    print_usage();
-	    print_help();
-	    exit(0);
-	}
-	
-    }
-
-    if (*argc == 0 && !readstd )  {
-	fprintf(stderr,
-	    "No input files specified, exiting ...\n");
-	print_usage();
-	exit (1);
-    }
-	
-    if (sorted_output) {
-	init_lists();
-    }
-
-    build_path(default_domain, default_filepath);
-    return (1);
-}
-
-void
-process()
-{
-    char *cp;
-    unsigned char c;
-    int ret;
-    int delim = 1;
-
-    /*
-     * Outer loop scans for the beginning of label, beginning of an
-     * argument list, and the beginning of comments, and calls the
-     * appropriate function to process them. It ignores all lines
-     * where linebuf [0] == '#'.
-     * 
-     * Labels are detected by looking for an appropriate delimiter,
-     * then calling is_symbol() to verify the label. If valid, the type of
-     * call is noted in a global variable, then the loop scans
-     * for the beginning of the argument list, calling write_args()
-     * if a quoted argument is found.
-     *
-     * Comments are detected by looking for comment delimiters. If a
-     * comment is found, write_comment() is called.
-     */
-
-    while (1) {
-	
-	if (!(cp = get_nextline())) {
-	    return;
-	}
-
-	while (c = *cp++)
-	switch (c) {
-	    case 't':
-		if (!delim) {
-		    break;
-		}
-		delim = 0;
-		if (is_symbol(&cp, "extdomain")) {
-		    if (!(cp = consume_whitespace(cp))) {
-			goto out;
-		    }
-		    if (textdomain_call = (*cp == '(')) {
-			if (!(cp = consume_whitespace(++cp))) {
-			    goto out;
-			}
-			if (verbose)
-			    printf("textdomain call, arg = %s\n", cp);
-		    }
-		}
-
-		break;
-
-	    case 'd':
-		if (!delim) {
-		    break;
-		}
-		delim = 0;
-		if (is_symbol(&cp, "gettext")) {
-		    if(!(cp = consume_whitespace(cp))) {
-			goto out;
-		    }
-		    if (dgettext_call = (*cp == '(')) {
-			if (!(cp = consume_whitespace(++cp))) {
-			    goto out;
-			}
-			if (verbose)
-			    printf("dgettext call, arg = %s\n", cp);
-		    }
-		}
-		break;
-
-	    case 'g': 
-		if (!delim) {
-		    break;
-		}
-		delim = 0;
-		if (is_symbol(&cp, "ettext")) {
-		    if (!(cp = consume_whitespace(cp))) {
-			goto out;
-		    }
-		    if (gettext_call = (*cp == '(')) {
-			if (!(cp = consume_whitespace(++cp))) {
-			    goto out;
-			}
-			if (verbose)
-			    printf("gettext call, arg = %s\n", cp);
-		    }
-		}
-		break;
-
-	   case '"':
-		delim = 0;
-
-		if (cp[-2] == '\\') {
- 		    break;
-		}
-		if(cp[-2] == '\'') {
-		    break;
-		}
-
-		if (!(gettext_call || dgettext_call || textdomain_call
-			|| all_strings)) {
-		    if (!(cp = consume_quoted_string(cp))) {
-			goto out;
-		    }
-		    break;
-		}
-
-		if ((ret = (int) write_args(&cp)) == -1) {
-		    goto out;
-		}
-
-		textdomain_call = 0;
-		dgettext_call = 0;
-		gettext_call = 0;
-		break;
-
-	    case '/':
-		delim = 1;
-		if (*cp != '*') {
-		    break;
-		}
-		if (extract_comments) {
-		    cp++;
-		    if (sorted_output) {
-			cp = sort_comment(cp);
-		    } else {
-			cp = write_comment(cp);
-		    }
-		} else {
-		    cp = consume_comment(cp);
-		}
-		if (!cp)
-		    goto out;
-		break;
-
-
-            default:
-		textdomain_call = 0;
-		dgettext_call = 0;
-		gettext_call = 0;
-		delim = !(SYMBOL_CHAR(c));
-		break;
-
-        }	/* switch (c) */
-	 
-    }	    /* for (cp = ... */
-
-out:
-
-    if (ferror(stdout)) {
-	printf("Oops\n");
-        perror(cfilename);
-	exit(0);
-    }
-}
-
-char *
-consume_comment(buf)
-    char *buf;
-{
-    register char *bufptr = buf;
-    register char c;
-
-    while (c = *bufptr++) {
-	switch (c) {
-            case '*':
-                if (*bufptr != '/') {
-                    break;
-                }
-                return (bufptr++);
- 
-            case '\n':
-		if (!(bufptr = get_nextline())) {
-		    fprintf(stderr, 
-			"==>ERROR, end of comment never reached\n");
-		    return (0);
-		}
-		break;
-
-            default:
-                break;
-	}
-    }
-}
-
-
-char *
-consume_symbol(buf)
-    char *buf;
-{
-    register char *bufptr = buf;
-    register char c;
-
-    while (c = *bufptr) {
-	if (SYMBOL_CHAR(c)) {
-	    bufptr++;
-	    continue;
-	}
-	break;
-    }    
-    return (bufptr);
-}
-
-char *
-consume_quoted_string(buf)
-    char *buf;
-{
-    register char *bufptr = buf;
-    register char c;
-
-    while (c = *bufptr++) {
-        switch (c) {
-
-	case '\n':
-	    fprintf(stderr,
-		"\"%s\", line %d: newline in string or char constant\n",
-		    cfilename, linenum);
-	    if (!(bufptr = get_nextline())) {
-		fprintf(stderr, 
-		"\"%s\", line %d: end of string never reached\n",
-		    cfilename, linenum);
-		return (0);
-	    } 
-
-	case '"':
-	    if (!(bufptr = consume_whitespace(bufptr)))
-		return (0);
-	    if (bufptr[0] != '"')
-		return (bufptr);
-	    bufptr++;
-
-	case '\\':
-            if (*bufptr == '\n') {
-		if (!(bufptr = get_nextline())) {
-		    fprintf(stderr, 
-			"\"%s\", line %d: end of string never reached\n",
-			cfilename, linenum);
-		    return (0);
-		}
-	    } else {
-		bufptr++;
-	    }
-            break;
-
-	default:
-	    break;
-	}
-    }
-/* 
- * SHOULDN"T REACH HERE
-*/
-    fprintf(stderr, "ERROR ==> end of quoted string never reached\n");
-    return (--bufptr);
-}
-
-char *
-consume_blankspace(buf)
-    char *buf;
-{
-    register char *bufptr = buf;
-    register char c;
-
-    while (c = *bufptr) {
-        switch (c) {
-        case '\t' :
-        case ' ':
-	    bufptr++;
-	    break;
-
-	case '\\':
-	    if (bufptr[1] != '\n')
-		return (bufptr);
-
-        default:
-            return (bufptr);
-        }
-    }    
-    return (0);
-}
-
-char *
-consume_whitespace(buf)
-    char *buf;
-{
-    register char *bufptr = buf;
-    register char c;
-
-    while (c = *bufptr) {
-        switch (c) {
-        case '\t' :
-        case ' ':
-	    bufptr++;
-	    break;
-
-	case '\\':
-	    if (bufptr[1] != '\n')
-		return (bufptr);
-	case '\n':
-	    if (!(bufptr = get_nextline()))
-		return (0);
-	    break;
-
-        default:
-            return (bufptr);
-        }
-    }    
-    return (0);
-}
-
-char *
-consume_delim(buf)
-    char *buf;
-{
-    register char *bufptr = buf;
-    register char c;
-
-    while (c = *bufptr) {
-	if (c == '\n') {
-	    if (!(bufptr = get_nextline()))
-		return (0);
-        } else if (SYMBOL_CHAR(c)) {
-	    return (bufptr);
-	} else {
-	    bufptr++;
-	}
-    }    
-    return (0);
-}
-
-int
-is_symbol(lptr, label_id)
-    char **lptr, *label_id;
-{
-    int len = 0;
-    if (strncmp(label_id, *lptr, len = strlen(label_id))) {
-	*lptr = consume_symbol(*lptr);
-	return (0);
-    }
-
-    *lptr += len;
-
-    switch (**lptr) {
-	case ' ':
-	case '\t':
-	case '\(':
-	case '\n':
-	    return (1);
-
-	default:
-	    *lptr = consume_symbol(*lptr);
-	    return (0);
-    }
-}
-
-
-/*
- *	FIX ME !!!!!!!!
-*/
-int
-exclude_string(test_string)
-    char *test_string;
-{
-        char file_string[BUFSIZ];
-        fseek(exclude_stream, 0, 0); /* start from begining */
-        for (;;) {
-            if (fgets(file_string, sizeof file_string, exclude_stream) == NULL) {
-                break; /* reached EOF */
-            }
-            file_string[strlen(file_string)-1] = '\0';
-            if (!strcmp(test_string, file_string)) {
-                return (1);
-            }
-        }
- 
-        return (0);
-}
-
-char *
-get_nextline()
-{
-
-    char *bptr;
-    do {
-	if (fgets(linebuf, sizeof (linebuf), stdin) == NULL) {
-	    if (ferror(stdin)) {
-		perror("xgettext");
-		exit(2);
-	    }
-	    return (0);
-	}
-	linenum ++;
-	if (use_pp) {
-	    break;
-	}
-	if (readstd && linebuf[0] == '#') {
-	    sscanf(linebuf, "#%d%s", &linenum, cfilename);
-	    linenum--;
-	    if (verbose) {
-		printf("file: %s seen at stdin, linenum: %d\n",
-		    cfilename, linenum);
-	    }
-	}
-    } while (linebuf[0] == '#');
-
-    return (linebuf);
-}
-
-char *
-extract_comment(cpp)
-    char **cpp;
-{
-
-    register char c, *dp, *cp = *cpp;
-    static char *commentbuf = NULL; 
-    static bufsiz = 0; 
-    int offset;
-
-    if (!commentbuf) {
-    	commentbuf = malloc(COMMENTBUF_SIZ);
-	bufsiz = COMMENTBUF_SIZ;
-    }
-
-    memset(commentbuf, 0, bufsiz);
-    commentbuf[0] = '#';
-    dp = commentbuf + 1;
-    offset = 1;
-    
-    while (c = *cp++) {
- 	if (offset >= (bufsiz-3)) {
-	    commentbuf = realloc(commentbuf, bufsiz += COMMENTBUF_SIZ);
-	    dp = commentbuf + offset;
-	}
-	
-	switch(c) {
-
-	    case '\n':
-		*dp++ = c;
-		offset++;
-		*dp++ = '#';
-		offset++;
-                if (!(cp = get_nextline())) {
-		    fprintf(stderr,
-			"==> ERROR, end of comment never reached\n");
-		    return (0);
-		}
-		break;
-		
-	    case '*': 
-		if (*cp == '/') {
-		    *dp = '\n';
-		    return (commentbuf);
-		}
-		break;
-
-	    default:
-		*dp++ = c;
-		offset++;
-		break;
-	}
-    }
-    /*
-     * ERROR, SHOULDN'T EVER GET HERE ...
-     */
-	
-    fprintf(stderr, "ERROR, end of comment never reached\n");
-    return (cp);
-}
-
-char *
-sort_comment(cp)
-    char *cp;
-{
-
-    char isitme[BUFSIZ];
-    char domain[MAXNAMLEN+1]; 	/* MAXNAMLEN from sys/dir.h	*/
-    char *comment;
-
-    (void) sscanf(cp, "%s%s", isitme, domain);
-    if (strcmp(isitme, comment_cookie)) {
-	return (consume_comment(cp));
-    }
-    if (!(comment = extract_comment(&cp))) {
-	return (0);
-    }
-    add_comment_to_domain(domain, comment);
-    return (cp);
-}
-
-void
-add_comment_to_domain(domain, commentbuf)
-	char *domain, *commentbuf;
-{
-    struct list_head *head;
-    if (!strcmp(domain, "-")) {
-	head = get_list(default_domain);
-    } else {
-	head = get_list(domain);
-    }
-
-    if (!head->comments) {
-	head->comments = head->last_comment =
-		(struct comment_str *) calloc(1, sizeof(struct comment_str));
-	if (!head->comments) {
-	    perror("malloc error");
-	    exit(3);
-	}
-    } else {
-	head->last_comment = head->last_comment->next =
-		(struct comment_str *) calloc(1, sizeof(struct comment_str));
-	if (!head->last_comment) {
-	    perror("malloc error");
-	    exit(3);
-	}
-    }
-    head->last_comment->str = strdup(commentbuf);
-}
-
-char *
-write_comment (cp)
-    char *cp;
-{
-
-    char isitme[BUFSIZ];
-    char domain[MAXNAMLEN+1]; 	/* MAXNAMLEN from sys/dir.h	*/
-    char comment_path[MAXPATHLEN+1];	/* MAXPATHLEN from sys/param.h	*/
-    FILE *commentfp;
-    char *comment;
-
-
-    (void) sscanf(cp, "%s%s", isitme, domain);
-    if (strcmp(isitme, comment_cookie)) {
-	return (consume_comment(cp));
-    }
-
-    if (!defaultfp) {
-        if ((defaultfp = fopen(default_filepath, "a+")) == NULL) {
-            perror("xgettext");
-            fprintf(stderr,
-		"FATAL ERROR, can't open output file: %s\n", default_filepath);
-            exit(2);
-        }
-    }
-
-    if (strcmp(domain, "-")) {
-	memset(comment_path, 0, sizeof(comment_path));
-	build_path(domain, comment_path);
-	if ((commentfp = fopen(comment_path, "a+")) == NULL) {
-	    perror("xgettext");
-            fprintf(stderr,
-                "FATAL ERROR, can't open comment file: %s\n", commentfp);
-            exit(2);
-        }  
-    } else {
-	strcpy(domain, default_domain);
-	commentfp = defaultfp;
-    }
-
-    comment = extract_comment(&cp);
-    fprintf(commentfp, "%s\n", comment);
-    close (commentfp);
-    return (cp);
-}
-
-int
-write_args(cpp)
-    char **cpp;
-{
-    register char *cp = *cpp;
-    register int c;
-    register char *dp;
-
-    char msgkey[MAX_MSGID_LEN+1];
-    char domain[MAX_MSGSTR_LEN+1];
-
-    int secondarg = 0;
-
-    memset(msgkey, 0, sizeof(msgkey));
-    memset(domain, 0, sizeof(domain));
-
-    if (gettext_call || all_strings) {
-	dp = msgkey;
-    } else {
-	dp = domain;
-    }
-
-    while (c = *cp++) {
-
-	switch (c) {
-
-	    case '"':
-		if (!(cp = consume_whitespace(cp))) {
-		    return (0);
-		}
-		if (cp[0] == '"') {
-		    cp++;
-		    continue; 
-		}
-
-		if (dgettext_call && !secondarg) {
-		    if (cp[0] == ',') {
-			if(!(cp = consume_whitespace(++cp)))
-			    return (0);
-			if (cp[0] == '"') {
-			    secondarg++;
-			    dp = msgkey;
-			    cp++;
-			    continue;
-			} else {
-			    *cpp = cp;
-			    return (1);
-			}
-		    } else {
-			fprintf(stderr, "Syntax error\n");
-			*cpp = cp;
-			return (1);
-		    }
-		}
-		cp++;
-		goto out;
-
-	    case '\\':
-		if (*cp == '\n') {
-		    if (!(cp = get_nextline())) {
-			fprintf(stderr, 
-			"==>ERROR, end of string never reached\n");
-			return (0);
-		    }
-		    break;
-		}
-		*dp++ = c;
-		c = *cp++;
-
-	    default:
-		*dp++ = c;
-		break;
-	}
-nextarg:
-	continue;
-    }
-
-out:
-
-    *cpp = --cp;
-
-    if (exclude && exclude_string(msgkey)) {
-	return (1);
-    }
-
-    if (sorted_output) {
-	if (textdomain_call) {
-	    char linebuf[MAXPATHLEN+100];
-	    sprintf(linebuf,
-		"#\n# file: %s, line number: %d, textdomain(\"%s\")\n",
-		cfilename, linenum, domain);
-	    add_comment_to_domain(domain, linebuf);
-	    return (1);
-	} else {
-	    return (sort_message(domain, msgkey, "", 1));
-	}
-    }
-
-    if (all_strings) {
-	return (write_psffm(msgkey, NULL));
-    } else if (gettext_call) {
-	return (write_psffm(msgkey, NULL));
-    } else if (dgettext_call) {
-	return (write_psffm(msgkey, domain));
-    } else if (textdomain_call) {
-	return (write_psffm(NULL, domain));
-    }
-}
-
-int
-write_psffm(msgkey, domain)
-char *msgkey, *domain;
-{
-    static char saved_domain[MAXNAMLEN+1];
-    static char domain_path[MAXPATHLEN+1];
-    struct stat psffm_stat;
-
-    FILE *psffmfp;
-
-    if (!defaultfp) {
-	if ((defaultfp = fopen(default_filepath, "a+")) == NULL) {
-	    perror("xgettext");
-	    fprintf(stderr,
-		"FATAL ERROR, can't open output file: %s\n",
-		    default_filepath);
-	    exit(2);
-	}
-    }
-
-
-    if (domain && dgettext_call) {
-	if (strcmp(saved_domain, domain)) {
-
-	    if (verbose) {
-		printf("entering new domain, ");
-		printf("old domain: %s  new domain: %s\n",
-		    saved_domain, domain);
-	    }
-
-	    memset(saved_domain, 0, sizeof(saved_domain));
-	    strcpy(saved_domain, domain);
-
-	    memset(domain_path, 0, sizeof(domain_path));
-	    build_path(domain, domain_path);
-
-	    if (currentfp) {
-		fclose(currentfp);
-	    }
-	    
-	    if ((currentfp = fopen(domain_path, "a+")) == NULL) {
-		perror("xgettext");
-		fprintf(stderr, "FATAL ERROR, can't open output file: %s\n",
-		    domain_path);
-		exit(2);
-	    }
-
-	    if (stat(domain_path, &psffm_stat) == -1) {
-		perror("xgettext");
-		fprintf(stderr, "FATAL ERROR, can't stat output file: %s\n",
-		    domain_path);
-		exit(2);
-	    }
-
-	    if (psffm_stat.st_size < sizeof("domain")) {
-		if (verbose) 
-		    printf("adding domain token: %s to file: %s\n",
-			domain, domain_path);
-		fprintf(currentfp, "domain ");
-		fprintf(currentfp, "\"%s\"\n", domain);
-		
-		/*
-		 * Shouldn't happen ...
-		 */
-		if (msgkey == NULL) {
-		    return (ferror(currentfp));
-		}
-	    }
-
-	}
-	psffmfp = currentfp;
-    } else {
-	psffmfp = defaultfp;
-    }
-
-    fseek(psffmfp, 0, 2);
-
-    if (textdomain_call) {
-	fprintf(psffmfp, "#\n# %s: textdomain(), line number: %d, domain: %s\n",
-			cfilename, linenum, domain);
-    }
-
-    if (msgkey) {
-	if (verbose) {
-	    printf("writing message key: %s to file: %s\n",
-		msgkey, domain_path);
-	    if (use_msg_ids)
-	    	printf("using message id as messsage string\n");
-	}
-
-	if (number_lines) {
-		fprintf(psffmfp, "#\n# %s: line number: %d\n",
-			cfilename, linenum);
-	}
-	fprintf(psffmfp, "msgid ");
-	fprintf(psffmfp, "\"%s\"\n", msgkey);
-	fprintf(psffmfp, "msgstr ");
-	if (use_msg_ids) {
-	    fprintf(psffmfp, "\"%s%s\"\n", msgkey, message_string);
-	} else {
-	    fprintf(psffmfp, "\n");
-	}
-    }
-    fflush(psffmfp);
-    return (ferror(psffmfp));
-}
-
-struct list_head *
-get_list(domain) 
-    char *domain;
-{
-
-/*
- * Find sorted list for a given domain
- * make new list if domain not found
-*/
- 
-    if (domain[0] != NULL) {
-        register struct list_head *head = &lists;
-	register int found;
-
-	while (head) {
-	    if (!strcmp(head->domain, domain)) {
-		return (head);
-	    }
-	    head = head->next_list;
-	}
-
-	last_list = last_list->next_list =
-	    (struct list_head *) calloc(1, sizeof(struct list_head));
-	if (!last_list) {
-	    perror("malloc error");
-	    exit(3);
-	}
-	last_list->domain = strdup(domain);
-	read_psffm(domain);
-	return (last_list);
-    } else {
-	return (&lists);
-    }
-}
-
-int
-sort_message(domain, msgid, msgstr, new)
-    char *domain, *msgid, *msgstr;
-    short   new;
-{
-    register struct list_element *lp, *lplt, *lpgt;
-    int             i, lessthan;
-    struct list_head *head;
-
-/*
- * Find correct list to add output to
-*/
- 
-    head = get_list(domain);
-    lp = head->first_element;
-    lplt = lpgt = 0;
-    while (lp) {
-        i = strcmp(msgid, lp->msgid);
-        if (i < 0) {
-            lpgt = lp;
-            break;
-        } else if (i == 0) {           /* found! */
-            goto add_comments;
-        }
-        lplt = lp;
-        lp = lp->next;
-    }
-
-    if (!(lp = (struct list_element *)calloc(1, sizeof(struct list_element)))){
-        perror("xgettext malloc error");
-        exit(3);
-    }
-    lp->msgid = strdup(msgid);
-    lp->msgstr = strdup(msgstr);
-    lp->new = new;
-
-    if (lplt == 0) {
-	head->first_element = lp;
-	lp->next = lpgt;
-    } else if (lpgt == 0) {
-	lplt->next = lp;
-    } else {
-	lp->next = lpgt;
-	lplt->next = lp;
-    }
-
-add_comments:
-
-    if (head->comments) {
-	if (!lp->comments) {
-	    lp->comments = head->comments;
-	} else {
-	    lp->last_comment->next = head->comments;
-	}
-	lp->last_comment = head->last_comment;
-	head->comments = head->last_comment = 0;
-    }
-
-    if (number_lines) {
-	char linebuf[MAXPATHLEN+100];
-	sprintf(linebuf, "#\n# file: %s, line number: %d\n",
-			cfilename, linenum);
-	if (!lp->comments) {
-	    lp->comments = lp->last_comment =
-		(struct comment_str *) calloc(1, sizeof(struct comment_str));
-	    if (!lp->comments) {
-		perror("malloc error");
-		exit(3);
-	    }
-	} else {
-	    lp->last_comment = lp->last_comment->next =
-		(struct comment_str *) calloc(1, sizeof(struct comment_str));
-	    if (!lp->last_comment) {
-		perror("malloc error");
-		exit(3);
-	    }
-	}
-	lp->last_comment->str = strdup(linebuf);
-    }
-
-    return (0);
-}
-
-int
-write_sorted_psffm()
-{
-    FILE			*fp;
-    register struct list_head	*list;
-    struct list_element		*lp;
-    register struct comment_str *cp;
-    char			output_filename[MAXPATHLEN];
-
-    list = &lists;
-    while (list) {
-	strcpy(output_filename, file_path);
-	strcat(output_filename, "/");
-	strcat(output_filename, list->domain);
-	if (update) {
-	    strcat(output_filename, ".update");
-	} else {
-	    strcat(output_filename, ".po");
-	}
-	fp = fopen(output_filename, "w");
-	fprintf(fp, "domain ");
-	fprintf(fp, "\"%s\"\n", list->domain);
-	
-	if (fp == NULL) {
-	    perror(default_filepath);
-	    exit(2);
-	}
-	
-	lp = list->first_element;
-	while (lp) {
-	    if (update && !lp->new) {
-		lp = lp->next;
-		continue;
-	    }
-	    cp = lp->comments;
-	    while (cp) {
-		fprintf(fp, "%s", cp->str);
-		cp = cp->next;
-	    }
-	    fprintf(fp, "msgid \"%s\"\n", lp->msgid);
-	    if (use_msg_ids) {
-		fprintf(fp, "msgstr \"%s%s\"\n",
-		    lp->msgid, message_string);
-	    } else {
-		if (lp->msgstr[0] == '\0') {
-		    fprintf(fp, "msgstr\n");
-		} else {
-		    fprintf(fp, "msgstr \"%s\"\n",
-			lp->msgstr);
-		}
-	    }
-	    lp = lp->next;
-	}
-
-	cp = list->comments;
-	while (cp) {
-	    fprintf(fp, "%s", cp->str);
-	    cp = cp->next;
-	}
-
-	(void) fclose(fp);
-	list = list->next_list;
-    }
-}
-
-void
-read_psffm(domain)
-    char *domain;
-{
-    FILE *msgfileptr = NULL;
-
-    char inbuf[MAX_VALUE_LEN+32];
-    char *inbufptr;
-    char msgfile[MAXPATHLEN];
-    char current_domain[MAX_DOMAIN_LENGTH];
-    char msgid[MAX_VALUE_LEN+1];
-    char msgstr[MAX_VALUE_LEN+1];
-    register char *bufptr;
-
-    int inlinenum = 0;
-    int	domain_set = 0;
-    int whitespace = 0;
-    int quotefound = 0;
-    int ignored = 0;
-    int indomain = 0;
-    int inmsgid = 0;
-    int inmsgstr = 0;
-    char c;
-    int number_lines_state = number_lines;
-    number_lines = 0;
-
-    build_path(domain, msgfile);
-    if (!(msgfileptr = fopen(msgfile, "r"))) {
-	number_lines = number_lines_state;
-	return;
-    }
-
-    memset(msgid, 0, sizeof(msgid));
-    memset(msgstr, 0, sizeof(msgstr));
-
-    while (1) {
-	memset(inbuf, 0, sizeof(inbuf));
-        if (fgets(inbuf, sizeof(inbuf), msgfileptr) == NULL) {
-            break;
-        }
-	inlinenum ++;
-
-	if (verbose) {
-	    printf("Scanning: %s, line number %d:\n%s\n",
-		msgfile, inlinenum, inbuf);
-	}
-
-	inbufptr = inbuf;
-	whitespace = 0;
-
-        switch (*inbufptr) {
-	    case '#': 	/*   comment    */
-		if (inmsgstr) {
-		    sort_message(domain, msgid, msgstr, 0);
-		    memset(msgid, 0, sizeof(msgid));
-		    memset(msgstr, 0, sizeof(msgstr));
-		    inmsgid = 0;
-		    inmsgstr = 0;
-		    indomain = 0;
-		}
-		add_comment_to_domain(domain, inbufptr);
-	    case '\n':
-		ignored = 1;
-		break;
-
-	    case '\"':
-	    case ' ':
-	    case '\t':
-		whitespace = 1;
-	    default:
-		ignored = 0;
-		break;
-	}
-
-	if (ignored) {
-	    continue;
-	}
-
-	/*
-	 * Process MSGID Tokens, must not have just seen one unless
-	 * this line begins with whitespace -or- "
-	 */
-
-	if ((!strncmp(MSGID_TOKEN, inbuf, sizeof(MSGID_TOKEN)-1))
-	    || (whitespace && inmsgid)) {
-	    if (inmsgid && !whitespace) {
-		fprintf(stderr, "Consecutive MSGID tokens, file: %s", msgfile);
-		fprintf(stderr, "line number: %d\n", inlinenum);
-	    }
-	    if (inmsgstr) {
-		sort_message(domain, msgid, msgstr, 0);
-
-		memset(msgid, 0, sizeof(msgid));
-		memset(msgstr, 0, sizeof(msgstr));
-	    }
-
-
-	    if (inmsgid) {
-	        inbufptr = consume_blankspace(inbuf);
-	    } else {
-	        inbufptr = consume_blankspace(inbuf +
-		    sizeof(MSGID_TOKEN)-1);
-		bufptr = msgid;
-	    }
-
-	    if (!inbufptr)
-		return;
-	    inmsgid = 1;
-	    inmsgstr = 0;
-	    indomain = 0;
-	    goto load_buffer;
-	}
-
-	/*
-	 * Process MSGSTR Tokens, must not have just seen one unless
-	 * this line begins with whitespace -or- "
-	 */
-
-	if ((!strncmp(MSGSTR_TOKEN, inbuf, sizeof(MSGSTR_TOKEN)-1))
-	    || (whitespace && inmsgstr)) {
-	    if (inmsgstr && !whitespace) {
-		fprintf(stderr, "Consecutive MSGSTR tokens, file: %s", msgfile);
-		fprintf(stderr, "line number: %d\n", inlinenum);
-	    }
-
-	    if (inmsgstr) {
-	        inbufptr = consume_blankspace(inbuf);
-	    } else {
-	        inbufptr = consume_blankspace(inbuf +
-		    sizeof(MSGSTR_TOKEN)-1);
-		bufptr = msgstr;
-	    }
-
-	    if (!inbufptr)
-		return;
-	    inmsgstr = 1;
-	    inmsgid = 0;
-	    indomain = 0;
-	    goto load_buffer;
-	}
-
-	/*
-	 * Process DOMAIN Tokens, add message id and message string to
-	 * sorted list if msgstr was being processed, 
-	*/
-
-	if (!strncmp(DOMAIN_TOKEN, inbuf, sizeof(DOMAIN_TOKEN)-1)) {
-	    if (inmsgstr) {
-		sort_message(domain, msgid, msgstr, 0);
-		memset(msgid, 0, sizeof(msgid));
-		memset(msgstr, 0, sizeof(msgstr));
-	    }
-
-	    domain_set = 1;
-	    indomain = 1;
-	    inmsgid = 0;
-	    inmsgstr = 0;
-		
-	    inbufptr = consume_blankspace(inbuf+ sizeof(DOMAIN_TOKEN));
-	    memset(current_domain, 0, sizeof(current_domain));
-	    bufptr = domain = current_domain;
-	    if (!inbufptr)
-		return;
-	}
-
-load_buffer:
-
-	quotefound = 0;
-
-	while (c=*inbufptr++) {
-	    switch (c) {
-
-	    case '\n':
-	    case '"':
-	        break;
-
-	    default:
-	        *bufptr++ = c;
-	    }
-	}
-
-    }
-
-    if (inmsgstr) {
-	sort_message(domain, msgid, msgstr, 0);
-    }
-    number_lines = number_lines_state;
-    return;
-}
diff -rNu xview-3.2p1.4-old/util/xgettext/xgettext.man xview-3.2p1.4/util/xgettext/xgettext.man
--- xview-3.2p1.4-old/util/xgettext/xgettext.man	2013-08-28 17:12:56.308682001 +0200
+++ xview-3.2p1.4/util/xgettext/xgettext.man	1970-01-01 01:00:00.000000000 +0100
@@ -1,164 +0,0 @@
-.\" @(#)xgettext.1 1.4 90/08/20 SMI; from Sun
-.TH xgettext 1 "14 Sep 1990"
-.SH NAME
-xgettext \- conditionally extract strings from C programs
-.SH SYNOPSIS
-.br
-.B xgettext
-.B \-d
-[
-.B cmnopvhP
-]
-[
-.BI \-o \&directory-prefix
-]
-[
-.BI \-x \&exclude-list
-]
-[
-.I filename \|.\|.\|.
-]
-.br
-.B xgettext
-[
-.B \-amopvhP
-]
-[
-.BI \-x \&exclude-list
-] 
-[
-.I filename \|.\|.\|.
-]
-.br
-.\"... gwen please check indexes.
-.IX xgettext "" "\fLxgettext\fP \(em conditionally extract strings"
-.IX messages "conditionally extract strings" "" "conditionally extract strings"
-.SH DESCRIPTION
-.LP
-.B xgettext
-is used to automate the creation of portable message files.
-A portable message file contains copies of "C" strings that are found in 
-"C" source code in
-.I filename.
-When the 
-.B -d
-option is specified,
-.B xgettext
-places the extracted strings in the file 
-.I name\c
-.BR \&.po .
-.I name 
-is either the domain specified in a
-.B dgettext
-call, or
-.B messages.po
-for strings extracted from 
-.B gettext
-and
-.B textdomain
-calls. If the
-.B -d
-flag is not specified,
-.B xgettext
-places all the strings in
-.BR messages.po .
-The portable message file can be used as input to the 
-.BR msgfmt (1)
-utility, which will produce a binary form of the message file than can be 
-used at application run-time.
-.SH OPTIONS
-.TP 10
-.BI \-a
-Extract ALL strings, not just those found in
-.BR gettext ,
-.BR dgettext ,
-and
-.B textdomain
-calls.
-.TP 10
-.BI \-c flag
-Comments beginning with
-.I flag filename
-on the first line of the comment are added to file
-.IR filename
-as 
-.I #
-delimited comments.
-.TP 10
-.B \-d
-Produce duplicates. Does not sort output when
-writing the portable message
-file and will not overwrite existing output files.
-Places output
-from each domain specified in a
-.B dgettext
-call into a separate file named for the domain, 
-.IR ie .
-.IB name .po
-.TP 10
-.BI \-c flag
-Comments beginning with
-.I flag filename
-on the first line of the comment are added to file
-.IR filename
-as 
-.I #
-delimited comments.
-.TP 10
-.BI \-m string
-Causes
-.B xgettext
-to fill in the
-.B msgstr
-line of the portable message files it produces.
-.B xgettext
-uses the
-corresponding msgid string
-extracted from the "C" file, appending
-.IR string .
-Useful for debugging purposes.
-.TP 10
-.B \-n
-Add
-.I # 
-delimited line number comments to output file indicating
-the line number in the source file
-where each extracted string is encountered.
-.TP 10
-.BI \-o filename
-rename the default output file from
-.BR messages.po
-to
-.IR filename .
-.TP 10
-.BI \-p pathname
-Specify the directory where the output files will be placed.
-This option overrides the current working 
-directory. 
-.TP 10
-.BI \-x filename
-Specify a file that contains a list of strings that
-are not be extracted from the input files.
-Each string to be excluded must appear on a line by itself
-in the file
-.I filename.
-.TP 10
-.B \-P
-include strings in pre-processor statements.
-.TP 10
-.B \-v
-Verbose mode.
-.TP 10
-.B \-h
-Print a help message on standard output.
-.SH FILES
-.TP 14
-.TP
-.B messages.po
-is always created, but may be empty.
-.SH "SEE ALSO"
-.BR msgfmt (1) ,
-.BR xstr (1) ,
-.BR gettext ,
-.BR dgettext ,
-.BR textdomain (3) .
diff -rNu xview-3.2p1.4-old/util/xgettext/xgettext_xv.c xview-3.2p1.4/util/xgettext/xgettext_xv.c
--- xview-3.2p1.4-old/util/xgettext/xgettext_xv.c	1970-01-01 01:00:00.000000000 +0100
+++ xview-3.2p1.4/util/xgettext/xgettext_xv.c	2013-08-28 17:13:08.956682186 +0200
@@ -0,0 +1,1509 @@
+#ifndef lint
+#ifdef sccs
+static char     sccsid[] = "@(#)xgettext.c 1.10 91/09/14";
+#endif
+#endif
+
+#include "xgettext.h"
+
+/*
+ * gettext - extract strings from gettext() calls in a C language
+ *           source file and create a psffm:
+ *           "Portable Source File Format for Messages"
+ *           file template.
+ */
+
+int	write_args(), get_arguments(),  sort_message(),
+	write_sorted_psffm();
+char	*calloc(), *malloc(), *realloc();
+char	*strcat(), *strcpy(), *strdup();
+
+void	process(), print_usage(), init_lists(), add_comment_to_domain(),
+	read_psffm();
+char	*consume_whitespace(), *consume_symbol(), *consume_comment(),
+	    *consume_quoted_string(), *consume_delim();
+char	*get_nextline(), *write_comment(), *sort_comment();
+
+FILE 	*defaultfp = NULL;
+FILE	*currentfp = NULL;
+FILE	*exclude_stream = NULL;
+
+struct  list_head *get_list();
+struct  list_head lists, *last_list;
+
+char	*comment_cookie;
+char	*message_string = "";
+char	*default_domain = "messages";
+char	*file_path = ".";
+char	*currentf = "psffm";
+char	*exclude_file;
+
+int	readstd = 0;
+int	textdomain_call = 0;
+int	dgettext_call = 0;
+int	gettext_call = 0;
+int	verbose = 0;
+int	exclude = 0;
+int	number_lines = 0;
+int	use_pp = 0;
+int	use_msg_ids = 0;
+int	extract_comments = 0;
+int     linenum = 0;
+int	sorted_output = 1;
+int	all_strings = 0;
+int	update = 0;
+/*
+int	overwrite = 0;
+*/
+
+
+char	cfilename [MAXPATHLEN+1];
+
+char	linebuf[LINEBUF_SIZ];
+char	default_filepath[MAXPATHLEN+1];
+
+main(argc, argv, envp)
+    int argc;
+    char **argv, **envp;
+{
+
+    (void) get_arguments(&argc, &argv, envp);
+    
+
+    if (readstd) {
+	strcpy(cfilename, "stdin");
+	linenum = 0;
+	process();
+        readstd = 0;
+    }
+
+    while (argc > 0) {
+	if (verbose)
+	    fprintf(stderr, "scanning file # %d = %s\n", argc, *argv);
+
+        if (freopen(*argv, "r", stdin) == NULL) {
+            perror(*argv);
+	    exit(2);
+	}
+
+	strcpy(cfilename, *argv);
+	linenum = 0;
+        process(*argv);
+
+        argc--; argv++;
+    }
+
+    if (sorted_output || all_strings) {
+	write_sorted_psffm();
+    }
+
+    exit(0);
+}
+
+void
+print_usage()
+{
+    fprintf(stderr,
+	"\nusage: xgettext [-adnuv] [-c<flag>] [-m<tag>] [-o<default>]\n");
+    fprintf(stderr,
+	"            ... [-p<path>] [-x<xlist>] - | file\n");
+    fprintf(stderr,
+	"       xgettext -h (HELP)\n");
+}
+
+print_help()
+{
+    fprintf(stderr, "\n");
+    fprintf(stderr,
+	"-a\t\tfind ALL strings\n");
+    fprintf(stderr,
+	"-c<flag>\tget comments beginning with <flag>\n");
+    fprintf(stderr,
+	"-d\t\tgenerate duplicates\n");
+    fprintf(stderr,
+	"-h\t\tHELP !!!\n");
+    fprintf(stderr,
+	"-m<tag>\t\tfill in msgstr with msgid<tag>\n");
+    fprintf(stderr,
+	"-n\t\tline# comments in output\n");
+    fprintf(stderr,
+	"-o<default>\tuse <default> for default file name\n");
+    fprintf(stderr,
+	"-p<path>\tuse <path> for file path\n");
+    fprintf(stderr,
+	"-u\t\tgenerate list of updated messages in <domain>.new\n");
+    fprintf(stderr,
+	"-v\t\tverbose mode on, lists xgettext's actions\n");
+/*
+    fprintf(stderr,
+	"-w\t\toverwrite existing \".po\" files\n");
+*/
+    fprintf(stderr,
+	"-x<xlist>\texclude strings in file <xlist> from output\n");
+    fprintf(stderr,
+	"-\t\tread stdin, use as a filter (input only)\n");
+}
+
+void
+init_lists() {
+    lists.domain = strdup(default_domain);
+    last_list = &lists;
+    read_psffm(default_domain);
+}
+
+char *
+build_path(domain, pathbuf)
+    char *domain, pathbuf[];
+{
+    strcpy(pathbuf, file_path);
+    strcat(pathbuf, "/");
+    strcat(pathbuf, domain);
+    strcat(pathbuf, ".po");
+    return (pathbuf);
+}
+
+int
+get_arguments(argc, argv, envp)
+    int *argc;
+    char ***argv, **envp;
+{
+/*
+ * Process input arguments of the form:
+ *		
+ *	-a	emit ALL strings
+ *	-c	output comments beginning with <tag> <filename>
+ *	-d	dups mode
+ *	-h	HELP !!!
+ *	-m	output message string using message id
+ *	-n	insert line and file # comments in output
+ *	-o 	specify default file name
+ *	-p	file path
+ *	-P	use preprocessor directives
+ *	-u	create update list, new messages only
+ *	-v	verbose mode on, outputs info on symbols encountered, etc.
+ *	-w	overwrite existing .po files
+ *	-x	exclude strings in exclude list <file>
+ * 	 -	read stdin, aka use as an input only filter
+ *	
+*/
+    (*argc)--, (*argv)++;
+    while (*argc > 0 && *argv[0][0] == '-') {
+	register char *cp = &(*(*argv)++)[1];
+        (*argc)--;
+	
+	switch (*cp) {
+
+	case 0:
+            readstd++;
+            break;
+
+	case 'a':
+	    all_strings = 1;
+	    if (verbose)
+		printf("placing all strings in .po file\n");
+	    break;
+
+	case 'c':
+	    extract_comments = 1;
+	    if (*argc < 1) {
+		fprintf(stderr,
+		  "NULL comment flag, try -c<flag>, exiting ...\n");
+		exit (1);
+	    }
+
+	    if (*(++cp) != NULL) {
+	    	comment_cookie = strdup(cp);
+	    } else {
+		comment_cookie = strdup(**argv);
+		(*argv)++; (*argc)--;
+	    }
+	    if (verbose)
+		printf("Placing comments in \".po\" files ...\n");
+	    break;
+
+	case 'd':
+	    sorted_output = 0;
+	    if (verbose)
+		printf("Writing ALL msgid's to \".po\" files\n");
+	    break;
+
+	case 'm':
+	    use_msg_ids = 1;
+	    if (*argc < 1) {
+		fprintf(stderr, 
+		  "NULL message tag, try -m<tag>, exiting ...\n");
+		exit (1);
+	    }
+	    if (*(++cp) != NULL) {
+	    	message_string = strdup(cp);
+	    } else {
+		message_string = strdup(**argv);
+		(*argv)++; (*argc)--;
+	    }
+	    if (verbose)
+		printf("Using \"<msgid> %s\" for msgstr\n", message_string);
+	    break;
+
+
+	case 'n':
+	    number_lines = 1;
+	    if (verbose)
+		printf("Numbering lines in \"psffm\" files ...\n");
+	    break;
+
+	case 'o':
+	    if (*argc < 1) {
+		fprintf(stderr, 
+		  "NULL output file, try -o<file>, exiting ...\n");
+		exit (1);
+	    }
+
+	    if (*(++cp) != NULL) {
+	    	default_domain = strdup(cp);
+	    } else {
+		default_domain = strdup(**argv);
+		(*argv)++; (*argc)--;
+	    }
+	    break;
+
+	case'P':
+	    use_pp = 1;
+	    break;
+
+	case 'p':
+	    if (*argc < 1) {
+		fprintf(stderr, 
+		  "NULL path, try -p<path>, exiting ...\n");
+		exit (1);
+	    }
+
+	    if (*(++cp) != NULL) {
+	    	file_path = strdup(cp);
+	    } else {
+		file_path = strdup(**argv);
+		(*argv)++; (*argc)--;
+	    }
+
+	    break;
+
+	case 'u':
+	    update = 1;
+	    break;
+
+	case 'v':
+	    verbose = 1;
+	    fprintf(stderr, "VERBOSE ON\n");
+	    break;
+
+/*
+	case 'w':
+	    overwrite = 1;
+	    break;
+*/
+
+	case 'x':
+	    exclude = 1;
+	    if (*argc < 1) {
+		fprintf(stderr, 
+		  "NULL exclude file, try -x<xfile>, exiting ...\n");
+		exit (1);
+	    }
+	    if (*(++cp) != NULL) {
+	    	exclude_file = strdup(cp);
+	    } else {
+		exclude_file = strdup(**argv);
+		(*argv)++; (*argc)--;
+	    }
+
+            if ((exclude_stream = fopen(exclude_file, "r")) == NULL) {
+		fprintf(stderr, "Exclude list file: %s not found,",
+		    exclude_file);
+		fprintf(stderr, " -x option reset, continuing ...\n");
+		exclude = 0;
+	    }
+
+	    if (verbose)
+		printf("Using \"<msgid>%s\" for msgstr\n", message_string);
+
+	    break;
+
+	default:
+    	    fprintf(stderr, "Unrecognized option: %c\n", *cp);
+	    print_usage();
+	    break;
+
+	case 'h':
+	    print_usage();
+	    print_help();
+	    exit(0);
+	}
+	
+    }
+
+    if (*argc == 0 && !readstd )  {
+	fprintf(stderr,
+	    "No input files specified, exiting ...\n");
+	print_usage();
+	exit (1);
+    }
+	
+    if (sorted_output) {
+	init_lists();
+    }
+
+    build_path(default_domain, default_filepath);
+    return (1);
+}
+
+void
+process()
+{
+    char *cp;
+    unsigned char c;
+    int ret;
+    int delim = 1;
+
+    /*
+     * Outer loop scans for the beginning of label, beginning of an
+     * argument list, and the beginning of comments, and calls the
+     * appropriate function to process them. It ignores all lines
+     * where linebuf [0] == '#'.
+     * 
+     * Labels are detected by looking for an appropriate delimiter,
+     * then calling is_symbol() to verify the label. If valid, the type of
+     * call is noted in a global variable, then the loop scans
+     * for the beginning of the argument list, calling write_args()
+     * if a quoted argument is found.
+     *
+     * Comments are detected by looking for comment delimiters. If a
+     * comment is found, write_comment() is called.
+     */
+
+    while (1) {
+	
+	if (!(cp = get_nextline())) {
+	    return;
+	}
+
+	while (c = *cp++)
+	switch (c) {
+	    case 't':
+		if (!delim) {
+		    break;
+		}
+		delim = 0;
+		if (is_symbol(&cp, "extdomain")) {
+		    if (!(cp = consume_whitespace(cp))) {
+			goto out;
+		    }
+		    if (textdomain_call = (*cp == '(')) {
+			if (!(cp = consume_whitespace(++cp))) {
+			    goto out;
+			}
+			if (verbose)
+			    printf("textdomain call, arg = %s\n", cp);
+		    }
+		}
+
+		break;
+
+	    case 'd':
+		if (!delim) {
+		    break;
+		}
+		delim = 0;
+		if (is_symbol(&cp, "gettext")) {
+		    if(!(cp = consume_whitespace(cp))) {
+			goto out;
+		    }
+		    if (dgettext_call = (*cp == '(')) {
+			if (!(cp = consume_whitespace(++cp))) {
+			    goto out;
+			}
+			if (verbose)
+			    printf("dgettext call, arg = %s\n", cp);
+		    }
+		}
+		break;
+
+	    case 'g': 
+		if (!delim) {
+		    break;
+		}
+		delim = 0;
+		if (is_symbol(&cp, "ettext")) {
+		    if (!(cp = consume_whitespace(cp))) {
+			goto out;
+		    }
+		    if (gettext_call = (*cp == '(')) {
+			if (!(cp = consume_whitespace(++cp))) {
+			    goto out;
+			}
+			if (verbose)
+			    printf("gettext call, arg = %s\n", cp);
+		    }
+		}
+		break;
+
+	   case '"':
+		delim = 0;
+
+		if (cp[-2] == '\\') {
+ 		    break;
+		}
+		if(cp[-2] == '\'') {
+		    break;
+		}
+
+		if (!(gettext_call || dgettext_call || textdomain_call
+			|| all_strings)) {
+		    if (!(cp = consume_quoted_string(cp))) {
+			goto out;
+		    }
+		    break;
+		}
+
+		if ((ret = (int) write_args(&cp)) == -1) {
+		    goto out;
+		}
+
+		textdomain_call = 0;
+		dgettext_call = 0;
+		gettext_call = 0;
+		break;
+
+	    case '/':
+		delim = 1;
+		if (*cp != '*') {
+		    break;
+		}
+		if (extract_comments) {
+		    cp++;
+		    if (sorted_output) {
+			cp = sort_comment(cp);
+		    } else {
+			cp = write_comment(cp);
+		    }
+		} else {
+		    cp = consume_comment(cp);
+		}
+		if (!cp)
+		    goto out;
+		break;
+
+
+            default:
+		textdomain_call = 0;
+		dgettext_call = 0;
+		gettext_call = 0;
+		delim = !(SYMBOL_CHAR(c));
+		break;
+
+        }	/* switch (c) */
+	 
+    }	    /* for (cp = ... */
+
+out:
+
+    if (ferror(stdout)) {
+	printf("Oops\n");
+        perror(cfilename);
+	exit(0);
+    }
+}
+
+char *
+consume_comment(buf)
+    char *buf;
+{
+    register char *bufptr = buf;
+    register char c;
+
+    while (c = *bufptr++) {
+	switch (c) {
+            case '*':
+                if (*bufptr != '/') {
+                    break;
+                }
+                return (bufptr++);
+ 
+            case '\n':
+		if (!(bufptr = get_nextline())) {
+		    fprintf(stderr, 
+			"==>ERROR, end of comment never reached\n");
+		    return (0);
+		}
+		break;
+
+            default:
+                break;
+	}
+    }
+}
+
+
+char *
+consume_symbol(buf)
+    char *buf;
+{
+    register char *bufptr = buf;
+    register char c;
+
+    while (c = *bufptr) {
+	if (SYMBOL_CHAR(c)) {
+	    bufptr++;
+	    continue;
+	}
+	break;
+    }    
+    return (bufptr);
+}
+
+char *
+consume_quoted_string(buf)
+    char *buf;
+{
+    register char *bufptr = buf;
+    register char c;
+
+    while (c = *bufptr++) {
+        switch (c) {
+
+	case '\n':
+	    fprintf(stderr,
+		"\"%s\", line %d: newline in string or char constant\n",
+		    cfilename, linenum);
+	    if (!(bufptr = get_nextline())) {
+		fprintf(stderr, 
+		"\"%s\", line %d: end of string never reached\n",
+		    cfilename, linenum);
+		return (0);
+	    } 
+
+	case '"':
+	    if (!(bufptr = consume_whitespace(bufptr)))
+		return (0);
+	    if (bufptr[0] != '"')
+		return (bufptr);
+	    bufptr++;
+
+	case '\\':
+            if (*bufptr == '\n') {
+		if (!(bufptr = get_nextline())) {
+		    fprintf(stderr, 
+			"\"%s\", line %d: end of string never reached\n",
+			cfilename, linenum);
+		    return (0);
+		}
+	    } else {
+		bufptr++;
+	    }
+            break;
+
+	default:
+	    break;
+	}
+    }
+/* 
+ * SHOULDN"T REACH HERE
+*/
+    fprintf(stderr, "ERROR ==> end of quoted string never reached\n");
+    return (--bufptr);
+}
+
+char *
+consume_blankspace(buf)
+    char *buf;
+{
+    register char *bufptr = buf;
+    register char c;
+
+    while (c = *bufptr) {
+        switch (c) {
+        case '\t' :
+        case ' ':
+	    bufptr++;
+	    break;
+
+	case '\\':
+	    if (bufptr[1] != '\n')
+		return (bufptr);
+
+        default:
+            return (bufptr);
+        }
+    }    
+    return (0);
+}
+
+char *
+consume_whitespace(buf)
+    char *buf;
+{
+    register char *bufptr = buf;
+    register char c;
+
+    while (c = *bufptr) {
+        switch (c) {
+        case '\t' :
+        case ' ':
+	    bufptr++;
+	    break;
+
+	case '\\':
+	    if (bufptr[1] != '\n')
+		return (bufptr);
+	case '\n':
+	    if (!(bufptr = get_nextline()))
+		return (0);
+	    break;
+
+        default:
+            return (bufptr);
+        }
+    }    
+    return (0);
+}
+
+char *
+consume_delim(buf)
+    char *buf;
+{
+    register char *bufptr = buf;
+    register char c;
+
+    while (c = *bufptr) {
+	if (c == '\n') {
+	    if (!(bufptr = get_nextline()))
+		return (0);
+        } else if (SYMBOL_CHAR(c)) {
+	    return (bufptr);
+	} else {
+	    bufptr++;
+	}
+    }    
+    return (0);
+}
+
+int
+is_symbol(lptr, label_id)
+    char **lptr, *label_id;
+{
+    int len = 0;
+    if (strncmp(label_id, *lptr, len = strlen(label_id))) {
+	*lptr = consume_symbol(*lptr);
+	return (0);
+    }
+
+    *lptr += len;
+
+    switch (**lptr) {
+	case ' ':
+	case '\t':
+	case '\(':
+	case '\n':
+	    return (1);
+
+	default:
+	    *lptr = consume_symbol(*lptr);
+	    return (0);
+    }
+}
+
+
+/*
+ *	FIX ME !!!!!!!!
+*/
+int
+exclude_string(test_string)
+    char *test_string;
+{
+        char file_string[BUFSIZ];
+        fseek(exclude_stream, 0, 0); /* start from begining */
+        for (;;) {
+            if (fgets(file_string, sizeof file_string, exclude_stream) == NULL) {
+                break; /* reached EOF */
+            }
+            file_string[strlen(file_string)-1] = '\0';
+            if (!strcmp(test_string, file_string)) {
+                return (1);
+            }
+        }
+ 
+        return (0);
+}
+
+char *
+get_nextline()
+{
+
+    char *bptr;
+    do {
+	if (fgets(linebuf, sizeof (linebuf), stdin) == NULL) {
+	    if (ferror(stdin)) {
+		perror("xgettext");
+		exit(2);
+	    }
+	    return (0);
+	}
+	linenum ++;
+	if (use_pp) {
+	    break;
+	}
+	if (readstd && linebuf[0] == '#') {
+	    sscanf(linebuf, "#%d%s", &linenum, cfilename);
+	    linenum--;
+	    if (verbose) {
+		printf("file: %s seen at stdin, linenum: %d\n",
+		    cfilename, linenum);
+	    }
+	}
+    } while (linebuf[0] == '#');
+
+    return (linebuf);
+}
+
+char *
+extract_comment(cpp)
+    char **cpp;
+{
+
+    register char c, *dp, *cp = *cpp;
+    static char *commentbuf = NULL; 
+    static bufsiz = 0; 
+    int offset;
+
+    if (!commentbuf) {
+    	commentbuf = malloc(COMMENTBUF_SIZ);
+	bufsiz = COMMENTBUF_SIZ;
+    }
+
+    memset(commentbuf, 0, bufsiz);
+    commentbuf[0] = '#';
+    dp = commentbuf + 1;
+    offset = 1;
+    
+    while (c = *cp++) {
+ 	if (offset >= (bufsiz-3)) {
+	    commentbuf = realloc(commentbuf, bufsiz += COMMENTBUF_SIZ);
+	    dp = commentbuf + offset;
+	}
+	
+	switch(c) {
+
+	    case '\n':
+		*dp++ = c;
+		offset++;
+		*dp++ = '#';
+		offset++;
+                if (!(cp = get_nextline())) {
+		    fprintf(stderr,
+			"==> ERROR, end of comment never reached\n");
+		    return (0);
+		}
+		break;
+		
+	    case '*': 
+		if (*cp == '/') {
+		    *dp = '\n';
+		    return (commentbuf);
+		}
+		break;
+
+	    default:
+		*dp++ = c;
+		offset++;
+		break;
+	}
+    }
+    /*
+     * ERROR, SHOULDN'T EVER GET HERE ...
+     */
+	
+    fprintf(stderr, "ERROR, end of comment never reached\n");
+    return (cp);
+}
+
+char *
+sort_comment(cp)
+    char *cp;
+{
+
+    char isitme[BUFSIZ];
+    char domain[MAXNAMLEN+1]; 	/* MAXNAMLEN from sys/dir.h	*/
+    char *comment;
+
+    (void) sscanf(cp, "%s%s", isitme, domain);
+    if (strcmp(isitme, comment_cookie)) {
+	return (consume_comment(cp));
+    }
+    if (!(comment = extract_comment(&cp))) {
+	return (0);
+    }
+    add_comment_to_domain(domain, comment);
+    return (cp);
+}
+
+void
+add_comment_to_domain(domain, commentbuf)
+	char *domain, *commentbuf;
+{
+    struct list_head *head;
+    if (!strcmp(domain, "-")) {
+	head = get_list(default_domain);
+    } else {
+	head = get_list(domain);
+    }
+
+    if (!head->comments) {
+	head->comments = head->last_comment =
+		(struct comment_str *) calloc(1, sizeof(struct comment_str));
+	if (!head->comments) {
+	    perror("malloc error");
+	    exit(3);
+	}
+    } else {
+	head->last_comment = head->last_comment->next =
+		(struct comment_str *) calloc(1, sizeof(struct comment_str));
+	if (!head->last_comment) {
+	    perror("malloc error");
+	    exit(3);
+	}
+    }
+    head->last_comment->str = strdup(commentbuf);
+}
+
+char *
+write_comment (cp)
+    char *cp;
+{
+
+    char isitme[BUFSIZ];
+    char domain[MAXNAMLEN+1]; 	/* MAXNAMLEN from sys/dir.h	*/
+    char comment_path[MAXPATHLEN+1];	/* MAXPATHLEN from sys/param.h	*/
+    FILE *commentfp;
+    char *comment;
+
+
+    (void) sscanf(cp, "%s%s", isitme, domain);
+    if (strcmp(isitme, comment_cookie)) {
+	return (consume_comment(cp));
+    }
+
+    if (!defaultfp) {
+        if ((defaultfp = fopen(default_filepath, "a+")) == NULL) {
+            perror("xgettext");
+            fprintf(stderr,
+		"FATAL ERROR, can't open output file: %s\n", default_filepath);
+            exit(2);
+        }
+    }
+
+    if (strcmp(domain, "-")) {
+	memset(comment_path, 0, sizeof(comment_path));
+	build_path(domain, comment_path);
+	if ((commentfp = fopen(comment_path, "a+")) == NULL) {
+	    perror("xgettext");
+            fprintf(stderr,
+                "FATAL ERROR, can't open comment file: %s\n", commentfp);
+            exit(2);
+        }  
+    } else {
+	strcpy(domain, default_domain);
+	commentfp = defaultfp;
+    }
+
+    comment = extract_comment(&cp);
+    fprintf(commentfp, "%s\n", comment);
+    close (commentfp);
+    return (cp);
+}
+
+int
+write_args(cpp)
+    char **cpp;
+{
+    register char *cp = *cpp;
+    register int c;
+    register char *dp;
+
+    char msgkey[MAX_MSGID_LEN+1];
+    char domain[MAX_MSGSTR_LEN+1];
+
+    int secondarg = 0;
+
+    memset(msgkey, 0, sizeof(msgkey));
+    memset(domain, 0, sizeof(domain));
+
+    if (gettext_call || all_strings) {
+	dp = msgkey;
+    } else {
+	dp = domain;
+    }
+
+    while (c = *cp++) {
+
+	switch (c) {
+
+	    case '"':
+		if (!(cp = consume_whitespace(cp))) {
+		    return (0);
+		}
+		if (cp[0] == '"') {
+		    cp++;
+		    continue; 
+		}
+
+		if (dgettext_call && !secondarg) {
+		    if (cp[0] == ',') {
+			if(!(cp = consume_whitespace(++cp)))
+			    return (0);
+			if (cp[0] == '"') {
+			    secondarg++;
+			    dp = msgkey;
+			    cp++;
+			    continue;
+			} else {
+			    *cpp = cp;
+			    return (1);
+			}
+		    } else {
+			fprintf(stderr, "Syntax error\n");
+			*cpp = cp;
+			return (1);
+		    }
+		}
+		cp++;
+		goto out;
+
+	    case '\\':
+		if (*cp == '\n') {
+		    if (!(cp = get_nextline())) {
+			fprintf(stderr, 
+			"==>ERROR, end of string never reached\n");
+			return (0);
+		    }
+		    break;
+		}
+		*dp++ = c;
+		c = *cp++;
+
+	    default:
+		*dp++ = c;
+		break;
+	}
+nextarg:
+	continue;
+    }
+
+out:
+
+    *cpp = --cp;
+
+    if (exclude && exclude_string(msgkey)) {
+	return (1);
+    }
+
+    if (sorted_output) {
+	if (textdomain_call) {
+	    char linebuf[MAXPATHLEN+100];
+	    sprintf(linebuf,
+		"#\n# file: %s, line number: %d, textdomain(\"%s\")\n",
+		cfilename, linenum, domain);
+	    add_comment_to_domain(domain, linebuf);
+	    return (1);
+	} else {
+	    return (sort_message(domain, msgkey, "", 1));
+	}
+    }
+
+    if (all_strings) {
+	return (write_psffm(msgkey, NULL));
+    } else if (gettext_call) {
+	return (write_psffm(msgkey, NULL));
+    } else if (dgettext_call) {
+	return (write_psffm(msgkey, domain));
+    } else if (textdomain_call) {
+	return (write_psffm(NULL, domain));
+    }
+}
+
+int
+write_psffm(msgkey, domain)
+char *msgkey, *domain;
+{
+    static char saved_domain[MAXNAMLEN+1];
+    static char domain_path[MAXPATHLEN+1];
+    struct stat psffm_stat;
+
+    FILE *psffmfp;
+
+    if (!defaultfp) {
+	if ((defaultfp = fopen(default_filepath, "a+")) == NULL) {
+	    perror("xgettext");
+	    fprintf(stderr,
+		"FATAL ERROR, can't open output file: %s\n",
+		    default_filepath);
+	    exit(2);
+	}
+    }
+
+
+    if (domain && dgettext_call) {
+	if (strcmp(saved_domain, domain)) {
+
+	    if (verbose) {
+		printf("entering new domain, ");
+		printf("old domain: %s  new domain: %s\n",
+		    saved_domain, domain);
+	    }
+
+	    memset(saved_domain, 0, sizeof(saved_domain));
+	    strcpy(saved_domain, domain);
+
+	    memset(domain_path, 0, sizeof(domain_path));
+	    build_path(domain, domain_path);
+
+	    if (currentfp) {
+		fclose(currentfp);
+	    }
+	    
+	    if ((currentfp = fopen(domain_path, "a+")) == NULL) {
+		perror("xgettext");
+		fprintf(stderr, "FATAL ERROR, can't open output file: %s\n",
+		    domain_path);
+		exit(2);
+	    }
+
+	    if (stat(domain_path, &psffm_stat) == -1) {
+		perror("xgettext");
+		fprintf(stderr, "FATAL ERROR, can't stat output file: %s\n",
+		    domain_path);
+		exit(2);
+	    }
+
+	    if (psffm_stat.st_size < sizeof("domain")) {
+		if (verbose) 
+		    printf("adding domain token: %s to file: %s\n",
+			domain, domain_path);
+		fprintf(currentfp, "domain ");
+		fprintf(currentfp, "\"%s\"\n", domain);
+		
+		/*
+		 * Shouldn't happen ...
+		 */
+		if (msgkey == NULL) {
+		    return (ferror(currentfp));
+		}
+	    }
+
+	}
+	psffmfp = currentfp;
+    } else {
+	psffmfp = defaultfp;
+    }
+
+    fseek(psffmfp, 0, 2);
+
+    if (textdomain_call) {
+	fprintf(psffmfp, "#\n# %s: textdomain(), line number: %d, domain: %s\n",
+			cfilename, linenum, domain);
+    }
+
+    if (msgkey) {
+	if (verbose) {
+	    printf("writing message key: %s to file: %s\n",
+		msgkey, domain_path);
+	    if (use_msg_ids)
+	    	printf("using message id as messsage string\n");
+	}
+
+	if (number_lines) {
+		fprintf(psffmfp, "#\n# %s: line number: %d\n",
+			cfilename, linenum);
+	}
+	fprintf(psffmfp, "msgid ");
+	fprintf(psffmfp, "\"%s\"\n", msgkey);
+	fprintf(psffmfp, "msgstr ");
+	if (use_msg_ids) {
+	    fprintf(psffmfp, "\"%s%s\"\n", msgkey, message_string);
+	} else {
+	    fprintf(psffmfp, "\n");
+	}
+    }
+    fflush(psffmfp);
+    return (ferror(psffmfp));
+}
+
+struct list_head *
+get_list(domain) 
+    char *domain;
+{
+
+/*
+ * Find sorted list for a given domain
+ * make new list if domain not found
+*/
+ 
+    if (domain[0] != NULL) {
+        register struct list_head *head = &lists;
+	register int found;
+
+	while (head) {
+	    if (!strcmp(head->domain, domain)) {
+		return (head);
+	    }
+	    head = head->next_list;
+	}
+
+	last_list = last_list->next_list =
+	    (struct list_head *) calloc(1, sizeof(struct list_head));
+	if (!last_list) {
+	    perror("malloc error");
+	    exit(3);
+	}
+	last_list->domain = strdup(domain);
+	read_psffm(domain);
+	return (last_list);
+    } else {
+	return (&lists);
+    }
+}
+
+int
+sort_message(domain, msgid, msgstr, new)
+    char *domain, *msgid, *msgstr;
+    short   new;
+{
+    register struct list_element *lp, *lplt, *lpgt;
+    int             i, lessthan;
+    struct list_head *head;
+
+/*
+ * Find correct list to add output to
+*/
+ 
+    head = get_list(domain);
+    lp = head->first_element;
+    lplt = lpgt = 0;
+    while (lp) {
+        i = strcmp(msgid, lp->msgid);
+        if (i < 0) {
+            lpgt = lp;
+            break;
+        } else if (i == 0) {           /* found! */
+            goto add_comments;
+        }
+        lplt = lp;
+        lp = lp->next;
+    }
+
+    if (!(lp = (struct list_element *)calloc(1, sizeof(struct list_element)))){
+        perror("xgettext malloc error");
+        exit(3);
+    }
+    lp->msgid = strdup(msgid);
+    lp->msgstr = strdup(msgstr);
+    lp->new = new;
+
+    if (lplt == 0) {
+	head->first_element = lp;
+	lp->next = lpgt;
+    } else if (lpgt == 0) {
+	lplt->next = lp;
+    } else {
+	lp->next = lpgt;
+	lplt->next = lp;
+    }
+
+add_comments:
+
+    if (head->comments) {
+	if (!lp->comments) {
+	    lp->comments = head->comments;
+	} else {
+	    lp->last_comment->next = head->comments;
+	}
+	lp->last_comment = head->last_comment;
+	head->comments = head->last_comment = 0;
+    }
+
+    if (number_lines) {
+	char linebuf[MAXPATHLEN+100];
+	sprintf(linebuf, "#\n# file: %s, line number: %d\n",
+			cfilename, linenum);
+	if (!lp->comments) {
+	    lp->comments = lp->last_comment =
+		(struct comment_str *) calloc(1, sizeof(struct comment_str));
+	    if (!lp->comments) {
+		perror("malloc error");
+		exit(3);
+	    }
+	} else {
+	    lp->last_comment = lp->last_comment->next =
+		(struct comment_str *) calloc(1, sizeof(struct comment_str));
+	    if (!lp->last_comment) {
+		perror("malloc error");
+		exit(3);
+	    }
+	}
+	lp->last_comment->str = strdup(linebuf);
+    }
+
+    return (0);
+}
+
+int
+write_sorted_psffm()
+{
+    FILE			*fp;
+    register struct list_head	*list;
+    struct list_element		*lp;
+    register struct comment_str *cp;
+    char			output_filename[MAXPATHLEN];
+
+    list = &lists;
+    while (list) {
+	strcpy(output_filename, file_path);
+	strcat(output_filename, "/");
+	strcat(output_filename, list->domain);
+	if (update) {
+	    strcat(output_filename, ".update");
+	} else {
+	    strcat(output_filename, ".po");
+	}
+	fp = fopen(output_filename, "w");
+	fprintf(fp, "domain ");
+	fprintf(fp, "\"%s\"\n", list->domain);
+	
+	if (fp == NULL) {
+	    perror(default_filepath);
+	    exit(2);
+	}
+	
+	lp = list->first_element;
+	while (lp) {
+	    if (update && !lp->new) {
+		lp = lp->next;
+		continue;
+	    }
+	    cp = lp->comments;
+	    while (cp) {
+		fprintf(fp, "%s", cp->str);
+		cp = cp->next;
+	    }
+	    fprintf(fp, "msgid \"%s\"\n", lp->msgid);
+	    if (use_msg_ids) {
+		fprintf(fp, "msgstr \"%s%s\"\n",
+		    lp->msgid, message_string);
+	    } else {
+		if (lp->msgstr[0] == '\0') {
+		    fprintf(fp, "msgstr\n");
+		} else {
+		    fprintf(fp, "msgstr \"%s\"\n",
+			lp->msgstr);
+		}
+	    }
+	    lp = lp->next;
+	}
+
+	cp = list->comments;
+	while (cp) {
+	    fprintf(fp, "%s", cp->str);
+	    cp = cp->next;
+	}
+
+	(void) fclose(fp);
+	list = list->next_list;
+    }
+}
+
+void
+read_psffm(domain)
+    char *domain;
+{
+    FILE *msgfileptr = NULL;
+
+    char inbuf[MAX_VALUE_LEN+32];
+    char *inbufptr;
+    char msgfile[MAXPATHLEN];
+    char current_domain[MAX_DOMAIN_LENGTH];
+    char msgid[MAX_VALUE_LEN+1];
+    char msgstr[MAX_VALUE_LEN+1];
+    register char *bufptr;
+
+    int inlinenum = 0;
+    int	domain_set = 0;
+    int whitespace = 0;
+    int quotefound = 0;
+    int ignored = 0;
+    int indomain = 0;
+    int inmsgid = 0;
+    int inmsgstr = 0;
+    char c;
+    int number_lines_state = number_lines;
+    number_lines = 0;
+
+    build_path(domain, msgfile);
+    if (!(msgfileptr = fopen(msgfile, "r"))) {
+	number_lines = number_lines_state;
+	return;
+    }
+
+    memset(msgid, 0, sizeof(msgid));
+    memset(msgstr, 0, sizeof(msgstr));
+
+    while (1) {
+	memset(inbuf, 0, sizeof(inbuf));
+        if (fgets(inbuf, sizeof(inbuf), msgfileptr) == NULL) {
+            break;
+        }
+	inlinenum ++;
+
+	if (verbose) {
+	    printf("Scanning: %s, line number %d:\n%s\n",
+		msgfile, inlinenum, inbuf);
+	}
+
+	inbufptr = inbuf;
+	whitespace = 0;
+
+        switch (*inbufptr) {
+	    case '#': 	/*   comment    */
+		if (inmsgstr) {
+		    sort_message(domain, msgid, msgstr, 0);
+		    memset(msgid, 0, sizeof(msgid));
+		    memset(msgstr, 0, sizeof(msgstr));
+		    inmsgid = 0;
+		    inmsgstr = 0;
+		    indomain = 0;
+		}
+		add_comment_to_domain(domain, inbufptr);
+	    case '\n':
+		ignored = 1;
+		break;
+
+	    case '\"':
+	    case ' ':
+	    case '\t':
+		whitespace = 1;
+	    default:
+		ignored = 0;
+		break;
+	}
+
+	if (ignored) {
+	    continue;
+	}
+
+	/*
+	 * Process MSGID Tokens, must not have just seen one unless
+	 * this line begins with whitespace -or- "
+	 */
+
+	if ((!strncmp(MSGID_TOKEN, inbuf, sizeof(MSGID_TOKEN)-1))
+	    || (whitespace && inmsgid)) {
+	    if (inmsgid && !whitespace) {
+		fprintf(stderr, "Consecutive MSGID tokens, file: %s", msgfile);
+		fprintf(stderr, "line number: %d\n", inlinenum);
+	    }
+	    if (inmsgstr) {
+		sort_message(domain, msgid, msgstr, 0);
+
+		memset(msgid, 0, sizeof(msgid));
+		memset(msgstr, 0, sizeof(msgstr));
+	    }
+
+
+	    if (inmsgid) {
+	        inbufptr = consume_blankspace(inbuf);
+	    } else {
+	        inbufptr = consume_blankspace(inbuf +
+		    sizeof(MSGID_TOKEN)-1);
+		bufptr = msgid;
+	    }
+
+	    if (!inbufptr)
+		return;
+	    inmsgid = 1;
+	    inmsgstr = 0;
+	    indomain = 0;
+	    goto load_buffer;
+	}
+
+	/*
+	 * Process MSGSTR Tokens, must not have just seen one unless
+	 * this line begins with whitespace -or- "
+	 */
+
+	if ((!strncmp(MSGSTR_TOKEN, inbuf, sizeof(MSGSTR_TOKEN)-1))
+	    || (whitespace && inmsgstr)) {
+	    if (inmsgstr && !whitespace) {
+		fprintf(stderr, "Consecutive MSGSTR tokens, file: %s", msgfile);
+		fprintf(stderr, "line number: %d\n", inlinenum);
+	    }
+
+	    if (inmsgstr) {
+	        inbufptr = consume_blankspace(inbuf);
+	    } else {
+	        inbufptr = consume_blankspace(inbuf +
+		    sizeof(MSGSTR_TOKEN)-1);
+		bufptr = msgstr;
+	    }
+
+	    if (!inbufptr)
+		return;
+	    inmsgstr = 1;
+	    inmsgid = 0;
+	    indomain = 0;
+	    goto load_buffer;
+	}
+
+	/*
+	 * Process DOMAIN Tokens, add message id and message string to
+	 * sorted list if msgstr was being processed, 
+	*/
+
+	if (!strncmp(DOMAIN_TOKEN, inbuf, sizeof(DOMAIN_TOKEN)-1)) {
+	    if (inmsgstr) {
+		sort_message(domain, msgid, msgstr, 0);
+		memset(msgid, 0, sizeof(msgid));
+		memset(msgstr, 0, sizeof(msgstr));
+	    }
+
+	    domain_set = 1;
+	    indomain = 1;
+	    inmsgid = 0;
+	    inmsgstr = 0;
+		
+	    inbufptr = consume_blankspace(inbuf+ sizeof(DOMAIN_TOKEN));
+	    memset(current_domain, 0, sizeof(current_domain));
+	    bufptr = domain = current_domain;
+	    if (!inbufptr)
+		return;
+	}
+
+load_buffer:
+
+	quotefound = 0;
+
+	while (c=*inbufptr++) {
+	    switch (c) {
+
+	    case '\n':
+	    case '"':
+	        break;
+
+	    default:
+	        *bufptr++ = c;
+	    }
+	}
+
+    }
+
+    if (inmsgstr) {
+	sort_message(domain, msgid, msgstr, 0);
+    }
+    number_lines = number_lines_state;
+    return;
+}
diff -rNu xview-3.2p1.4-old/util/xgettext/xgettext_xv.man xview-3.2p1.4/util/xgettext/xgettext_xv.man
--- xview-3.2p1.4-old/util/xgettext/xgettext_xv.man	1970-01-01 01:00:00.000000000 +0100
+++ xview-3.2p1.4/util/xgettext/xgettext_xv.man	2013-08-28 17:13:08.956682186 +0200
@@ -0,0 +1,164 @@
+.\" @(#)xgettext_xv.1 1.4 90/08/20 SMI; from Sun
+.TH xgettext_xv 1 "14 Sep 1990"
+.SH NAME
+xgettext_xv \- conditionally extract strings from C programs
+.SH SYNOPSIS
+.br
+.B xgettext_xv
+.B \-d
+[
+.B cmnopvhP
+]
+[
+.BI \-o \&directory-prefix
+]
+[
+.BI \-x \&exclude-list
+]
+[
+.I filename \|.\|.\|.
+]
+.br
+.B xgettext_xv
+[
+.B \-amopvhP
+]
+[
+.BI \-x \&exclude-list
+] 
+[
+.I filename \|.\|.\|.
+]
+.br
+.\"... gwen please check indexes.
+.IX xgettext_xv "" "\fLxgettext\fP \(em conditionally extract strings"
+.IX messages "conditionally extract strings" "" "conditionally extract strings"
+.SH DESCRIPTION
+.LP
+.B xgettext_xv
+is used to automate the creation of portable message files.
+A portable message file contains copies of "C" strings that are found in 
+"C" source code in
+.I filename.
+When the 
+.B -d
+option is specified,
+.B xgettext_xv
+places the extracted strings in the file 
+.I name\c
+.BR \&.po .
+.I name 
+is either the domain specified in a
+.B dgettext
+call, or
+.B messages.po
+for strings extracted from 
+.B gettext
+and
+.B textdomain
+calls. If the
+.B -d
+flag is not specified,
+.B xgettext_xv
+places all the strings in
+.BR messages.po .
+The portable message file can be used as input to the 
+.BR msgfmt_xv (1)
+utility, which will produce a binary form of the message file than can be 
+used at application run-time.
+.SH OPTIONS
+.TP 10
+.BI \-a
+Extract ALL strings, not just those found in
+.BR gettext ,
+.BR dgettext ,
+and
+.B textdomain
+calls.
+.TP 10
+.BI \-c flag
+Comments beginning with
+.I flag filename
+on the first line of the comment are added to file
+.IR filename
+as 
+.I #
+delimited comments.
+.TP 10
+.B \-d
+Produce duplicates. Does not sort output when
+writing the portable message
+file and will not overwrite existing output files.
+Places output
+from each domain specified in a
+.B dgettext
+call into a separate file named for the domain, 
+.IR ie .
+.IB name .po
+.TP 10
+.BI \-c flag
+Comments beginning with
+.I flag filename
+on the first line of the comment are added to file
+.IR filename
+as 
+.I #
+delimited comments.
+.TP 10
+.BI \-m string
+Causes
+.B xgettext_xv
+to fill in the
+.B msgstr
+line of the portable message files it produces.
+.B xgettext_xv
+uses the
+corresponding msgid string
+extracted from the "C" file, appending
+.IR string .
+Useful for debugging purposes.
+.TP 10
+.B \-n
+Add
+.I # 
+delimited line number comments to output file indicating
+the line number in the source file
+where each extracted string is encountered.
+.TP 10
+.BI \-o filename
+rename the default output file from
+.BR messages.po
+to
+.IR filename .
+.TP 10
+.BI \-p pathname
+Specify the directory where the output files will be placed.
+This option overrides the current working 
+directory. 
+.TP 10
+.BI \-x filename
+Specify a file that contains a list of strings that
+are not be extracted from the input files.
+Each string to be excluded must appear on a line by itself
+in the file
+.I filename.
+.TP 10
+.B \-P
+include strings in pre-processor statements.
+.TP 10
+.B \-v
+Verbose mode.
+.TP 10
+.B \-h
+Print a help message on standard output.
+.SH FILES
+.TP 14
+.TP
+.B messages.po
+is always created, but may be empty.
+.SH "SEE ALSO"
+.BR msgfmt_xv (1) ,
+.BR xstr (1) ,
+.BR gettext ,
+.BR dgettext ,
+.BR textdomain (3) .
openSUSE Build Service is sponsored by