--- /dev/null
+#!/bin/sh
+
+. patchfns >/dev/null || . /usr/lib/patch-scripts/patchfns >/dev/null || { \
+ echo "Impossible to find my library 'patchfns'."
+ echo "Check your install, or go to the right directory"
+ exit 1
+}
+
+usage()
+{
+ echo "Usage: mpatch patchname [output_dir]"
+ exit 1
+}
+
+doit()
+{
+ echo $* 1>&2
+ $* || {
+ echo oops
+ exit 1
+ }
+}
+
+epoch()
+{
+# doit touch -t 7001011000.00 $1
+ doit touch -t 7001010000.00 $1
+}
+
+dirfor()
+{
+ dir=$(dirname $1)
+ if [ ! -d $dir ]
+ then
+ doit mkdir -p $dir
+ RMDIRS="$RMDIRS $dir"
+ fi
+}
+
+if [ $# == 0 ]
+then
+ usage
+fi
+
+PATCH_NAME=$(stripit $1)
+OUTPUT_DIR=$2
+
+FILES=$(cat $P/pc/$PATCH_NAME.pc)
+OUT=$P/patches/$PATCH_NAME.patch
+TMPOUT=$(mktemp /tmp/patch-$PATCH_NAME-XXXXXX)
+TXT=$P/txt/$PATCH_NAME.txt
+OLDDIR=$(basename $(/bin/pwd))
+NEWDIR=$OLDDIR-$LOGNAME
+
+if is_applied_last $PATCH_NAME
+then
+ true
+else
+ echo $PATCH_NAME is not the last-applied patch
+ exit 1
+fi
+
+doit rm -f $OUT
+echo "Placing patch in " $OUT
+
+if [ -e $TXT -a -s $TXT ]
+then
+ echo >> $OUT
+ body $TXT >> $OUT
+ echo >> $OUT
+ echo >> $OUT
+else
+ echo "**** No patch description for $PATCH_NAME ****"
+fi
+
+rm -f $TMPOUT
+
+for file in $FILES
+do
+ OLD_FILE="$file"~"$PATCH_NAME"
+ if [ ! -e $OLD_FILE ]
+ then
+ OLD_FILE=/dev/null
+ fi
+ NEW_FILE=$file
+ XDIFF_OPTS=""
+ if [ ! -e $NEW_FILE ]
+ then
+ NEW_FILE=/dev/null
+ XDIFF_OPTS="-L $file"
+ fi
+
+ echo diff -puN $XDIFF_OPTS $DIFF_OPTS $OLD_FILE $NEW_FILE
+ diff -puN $XDIFF_OPTS $DIFF_OPTS $OLD_FILE $NEW_FILE | p0-2-p1 $OLDDIR $NEWDIR >> $TMPOUT
+done
+diffstat -p1 $TMPOUT >> $OUT 2>/dev/null
+echo >> $OUT
+cat $TMPOUT >> $OUT
+echo >> $OUT
+echo "_" >> $OUT
+rm -f $TMPOUT