#! /bin/sh

# xmkdir
# $Id: xmkdir,v 1.2 1998/07/10 19:17:15 cdua Exp cdua $
# Carlos Duarte, 960905/960910

USAGE="\
usage: $0 [-hn] paths... 

  -h      this help
  -n      no op
  -v      write mkdir commands, as they are executed
  -1      use method 1
  -2      use method 2
  -3      use method 3

Create a directory and all necessary sub-dirs to make it. 
"

method=-1
VERBOSE=
while : ; do
	case x"$1" in 
	x-h)	echo "$USAGE"; exit 1 ;;
	x-n)	prog=cat ;;
	x-v)	VERBOSE='\&\& echo "mkdir \1"' ;;
	x-[123])	
		method=$1 ;;
	x--)	shift; break ;;
	x-?)	echo "invalid option -- `echo $1|cut -c2-`"
		echo "$USAGE"; exit 1 ;;
	*)	break ;;
	esac
	shift
done

# if _must_ accept on extra argument after options
if test $# -eq 0; then echo "$USAGE"; exit 1; fi

echo $* | tr \  \\012 | {

	case $method in
		-1) sed -n '

			s/\/\/*/\//g
			s/\/$//

			h
			bb
 
			:a
			G
			h
			s/\n.*//
			tb
			:b
			s/\/[^/][^/]*$//
			/./!bd
			ta
 
			:d
			g

			s/$/\
/
			s/\([^\
]*\)\n/test -d \1 || { mkdir \1 '"${VERBOSE}"'; }\
/g
			s/.$//
			p

		' 

		;;

		-2) sed -n '

			s/\/\/*/\//g
			s/\/$//

			h
			tb
			bb
			:a
			H
			:b
			s/\/[^/][^/]*$//
			/./!bd
			ta
			:d
			tb

			g
			p

		' | sed -n '

			s/\(.*\)/test -d & || { mkdir & '"${VERBOSE}"'; }/

			1{h;b;}
			G;h
			${x;p;}

		' 

		;;

		-3) sed -n '

			s/\/\/*/\//g
			s/\/$//

			/^\//!bb

			s/\// /g
			s/^ /\//
			bc

			:b
			s/\// /g

			:c

			h

			i\
pushd . >/dev/null

			:d
			g
			s/ .*//
			x
			s/[^ ]* \?//
			x

			/./!be

			s/.*/cd & 2>\/dev\/null || { mkdir & \&\& cd & \&\& echo mkdir &; }/p

			bd

			:e
			i\
popd >/dev/null


		'

		;;
	esac

} | ${prog-sh}
