::dirname [OPTION] NAME... {

    # dont expect any data on stdin
    #

    >0 : None ;


    # each (non-option) argument must be a path
    #

    NAME : Path
           ~<Seq PathSegment
                 ~<Seq Char>>
           ~<SepSeq Char '/'>
           ~<Seq Char>
	   ~UTF-8
	   ~<Seq Byte> ;


    matchopt OPTION {

        # help and version flags will bypass any data processing
	#

        --help    { <1 : Help~<Seq Char> ; }
	--version { <1 : VersionInfo~<Seq Char> ; }


        # in case neither --help nor --version is set
	# ...

        * {

	    # if zero-flag is set, use '\0' instead of '\n'
	    # as delimiter in output sequence

            DELIM =
	        match OPTION {
                    -z--zero { '\0' }
                    * { '\n' }
                };


            # output a sequence of paths to stdout
	    #

            <1 : <Seq Path
                      ~<Seq PathSegment~<Seq Char>>
                      ~<SepSeq Char '/'>
                      ~<Seq Char>>
                 ~<SepSeq Char DELIM>
		 ~<Seq Char> ;
        }
    }
}