p4t #1

  • //
  • guest/
  • freebsdfrau/
  • p4t/
  • p4t
  • View
  • Commits
  • Open Download .zip Download (3 KB)
#!/bin/sh
############################################################ IDENT(1)
#
# $Title: Script to access other scripts in the `libexec/p4t' directory $
#
############################################################ CONFIGURATION

LIBEXEC=libexec/p4t

############################################################ GLOBALS

#
# Global exit status
#
SUCCESS=0
FAILURE=1

pgm="${0##*/}" # program basename
progdir="${0%/*}" # program directory

############################################################ FUNCTIONS

usage()
{
	local cmd_list= # Calculated below

	# If our libexec dir exists, get a list of [executable] files within
	# NB: No need to preserve CWD (headed toward exit)
	cd "$progdir/../$LIBEXEC" && cmd_list=$( find -xs . \
		-maxdepth 1 -type f -perm +111 | awk 'sub("^\\./","")||1' )

	# Determine the longest command-length vs terminal width
	local max_size="$( stty size 2> /dev/null )"
	local max_width="${max_size#*[$IFS]}"
	local longest_cmd="$( echo "$cmd_list" | awk '
		{ longest = ((len = length($0)) > longest ? len : longest) }
		END { print longest }
	' )"

	# Using the longest command-length as the width of a single column,
	# determine if we can use more than one column to display commands.
	local x=$longest_cmd ncols=1
	x=$(( $x + 8 )) # Accommodate leading tab character
	x=$(( $x + 3 + $longest_cmd )) # Preload end of next column
	while [ $x -lt ${max_width:=80} ]; do
		ncols=$(( $ncols + 1 ))
		x=$(( $x + 3 + $longest_cmd ))
	done

	# Re-format the command-list into multiple columns
	cmd_list=$( eval "$( echo "$cmd_list" |
		awk -v ncols=$ncols -v size=$longest_cmd '
		BEGIN { row_item[1] = "" }
		function print_row() {
			fmt = "printf \"\\t%-" size "s"
			for (i = 1; i < cur_col; i++)
				fmt = fmt "   %-" size "s"
			fmt = fmt "\\n\""
			printf "%s", fmt
			for (i = 1; i <= cur_col; i++)
				printf " \"%s\"", row_item[i]
			print ""
		} {
			cur_col = ((NR - 1) % ncols) + 1
			row_item[cur_col] = $0
			if (cur_col == ncols) print_row()
		}
		END { if (cur_col < ncols) print_row() }
	' )" )
	
	exec >&2
	printf "Usage: %s [command [args ...]]\n" "$pgm"
	printf "COMMANDS:\n%s\n" "$cmd_list"
	exit $FAILURE
}

############################################################ MAIN

#
# Validate command-line arguments
#
[ $# -gt 0 ] || usage

#
# Hand execution over to `libexec/p4t/command'
#
COMMAND=${1%%[^a-zA-Z_0-9.-]*}
shift
exec /usr/local/libexec/p4t/$COMMAND "$@"

################################################################################
# END
################################################################################
#
# $Copyright: 2015 Devin Teske. All rights reserved. $
#
# $Header: //guest/freebsdfrau/p4t/p4t#1 $
#
################################################################################
# Change User Description Committed
#1 16366 freebsdfrau Import p4t - p4d admin tool