# Copyright (c) 2017 The NetBSD Foundation, Inc. # All rights reserved. # # This code is derived from software contributed to The NetBSD Foundation # by Johnny C. Lam. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # NAME # say.subr -- write to standard output with a tag # # SYNOPSIS # task_say [string ...] # # DESCRIPTION # The task_say function writes any specified operands, separated by # single blank (" ") characters and followed by a newline ("\n") # character, to the standard output. The tag specifies the type of # information that is written. # # If the terminal supports color, then the tags cause the output to # be written in a matching color: # # info cyan # error red # pass green # skip blue # warn yellow # - or none white # # RETURN VALUES # Returns 0 on success, and >0 if an error occurs. # # ENVIRONMENT # The following variables are used if they are set: # # PRINTF The name or path to the printf(1) utility. # __task_say__="yes" _task_say_ansi_color() { : ${TPUT:=tput} case $__task_say_ansi_color__ in yes) return 0 ;; no) return 1 ;; esac # Only attempt to output ANSI color sequences if standard output # is connected to a terminal. # [ -t 1 ] || return 1 local colors local property for property in Co colors; do colors=$( ${TPUT} Co 2>/dev/null ) if [ $? -eq 0 ] && [ "$colors" -gt 2 ]; then __task_say_ansi_color__="yes" && return 0 fi done __task_say_ansi_color="no" && return 1 } task_say() { : ${PRINTF:=printf} local none="\033[0m" local blue="\033[34m" local cyan="\033[36m" local green="\033[32m" local red="\033[31m" local yellow="\033[33m" local color local msgtype="$1"; shift case $msgtype in info) color=$cyan ;; error) color=$red ;; pass) color=$green ;; skip) color=$blue ;; warn) color=$yellow ;; -|none) color=$none ;; esac if _task_say_ansi_color && [ -n "$color" ]; then ${PRINTF} "$color$*$none\n" else echo "$*" fi } # Static variable for whether the terminal supports ANSI colors. __task_say_ansi_color__=