Imported from ../bash-3.0.tar.gz.

This commit is contained in:
Jari Aalto 2004-07-27 13:29:18 +00:00
commit b80f6443b6
400 changed files with 69247 additions and 13346 deletions

Binary file not shown.

View file

@ -63,7 +63,7 @@ function coprocess ()
shift
local old_trap=$(trap -p SIGPIPE)
trap 'coprocess close -SIGPIPE' SIGPIPE
if [ $# -eq 1 -a "$1" = "--stdin" ] ; then
if [ $# -eq 1 ] && [ "$1" = "--stdin" ] ; then
cat >&61
else
echo "$@" >&61
@ -106,4 +106,3 @@ function coprocess ()
coprocess status
return $?
}

View file

@ -33,15 +33,16 @@ function alias ()
then
declare -f $1
else
echo $2 | egrep -s '(\!|#)' 2>/dev/null
if [ $? -eq 0 ]
then
case $2 in
*[#\!]*)
comm=$(echo $2 | sed 's/\\!\*/\"$\@\"/g
s/\\!:\([1-9]\)/\"$\1\"/g
s/#/\\#/g')
else
comm="$2 \"\$@\""
fi
;;
*)
comm="$2 \"\$@\"" ;;
esac
eval function $1 \(\) "{" command "$comm" "; }"
fi
}

View file

@ -8,7 +8,7 @@ function check_exit_status ()
local status="$?"
local signal=""
if [ ${status} -ne 0 -a ${status} != 128 ]; then
if [ ${status} -ne 0 ] && [ ${status} != 128 ]; then
# If process exited by a signal, determine name of signal.
if [ ${status} -gt 128 ]; then
signal="$(builtin kill -l $((${status} - 128)) 2>/dev/null)"

View file

@ -134,7 +134,7 @@ function getoptex()
let OPTIND || OPTIND=1
[ $OPTIND -lt $# ] || return 1
shift $OPTIND
if [ "$1" != "-" -a "$1" != "${1#-}" ]
if [ "$1" != "-" ] && [ "$1" != "${1#-}" ]
then OPTIND=$[OPTIND+1]; if [ "$1" != "--" ]
then
local o
@ -299,4 +299,3 @@ function getopt()
#**************************************
#*** (end of getopt2) ***

View file

@ -207,7 +207,7 @@ substring ()
;;
esac
# test for too few or too many arguments
if [ x"$1" = x -o $# -gt 2 ]; then
if [ x"$1" = x ] || [ $# -gt 2 ]; then
print -u2 'substring: bad argument count'
return 1
fi

View file

@ -70,7 +70,7 @@ function whatis ()
function apropos ()
{
whatis_internal "$1" "fgrep"
whatis_internal "$1" "grep -F"
}
# Note: "-" and "-t" together not supported. This man could be
@ -102,7 +102,7 @@ function man ()
g="grep -w"
a=$(basename "$2")
else
g=fgrep
g="grep -F"
a="$2"
fi
whatis_internal "$a" "$g"

View file

@ -44,15 +44,15 @@ function recurse
if cd "$1" ; then
for file in $2; do
if [ -f "$file" -o -d "$file" ]; then
if [ -f "$file" ] || [ -d "$file" ]; then
eval "$3"
fi
done
for file in .* * ; do
if [ "$file" = "." -o "$file" = ".." ] ; then
if [ "$file" = "." ] || [ "$file" = ".." ] ; then
continue
fi
if [ -d "$file" -a ! -L "$file" ]; then
if [ -d "$file" ] && [ ! -L "$file" ]; then
recurse "$file" "$2" "$3" "$path"
fi
done
@ -61,4 +61,3 @@ function recurse
}
recurse "$1" "$2" 'echo "$path$file"'

View file

@ -30,7 +30,7 @@ substr()
;;
esac
if [ "$#" -eq 0 -o "$#" -gt 2 ] ; then
if [ "$#" -eq 0 ] || [ "$#" -gt 2 ] ; then
echo "substr: bad argument count"
return 2
fi

View file

@ -32,7 +32,7 @@ substr()
shift $[ $OPTIND -1 ]
fi
if [ "$#" -eq 0 -o "$#" -gt 2 ] ; then
if [ "$#" -eq 0 ] || [ "$#" -gt 2 ] ; then
echo "substr: bad argument count"
return 2
fi

View file

@ -7,15 +7,16 @@ function xalias ()
then
declare -f $1
else
echo $2 | egrep -q '(\!|#)'
if [ $? -eq 0 ]
then
case $2 in
*[#\!]*)
comm=$(echo $2 | sed 's/\\!\*/\"$\@\"/g
s/\\!:\([1-9]\)/\"$\1\"/g
s/#/\\#/g')
else
comm="$2 \"\$@\""
fi
;;
*)
comm="$2 \"\$@\"" ;;
esac
eval function $1 \(\) "{" command "$comm" "; }"
fi
}

View file

@ -39,7 +39,7 @@ xfind()
# and directories that start with a period.
for x in * ; do
if [ -d "$x" -a ! -L "$x" ] ; then
if [ -d "$x" ] && [ ! -L "$x" ] ; then
$FUNCNAME "$x" "$2" "$action"
fi
done

View file

@ -72,7 +72,7 @@ INC = -I. -I.. -I$(topdir) -I$(topdir)/lib -I$(topdir)/builtins \
ALLPROG = print truefalse sleep pushd finfo logname basename dirname \
tty pathchk tee head mkdir rmdir printenv id whoami \
uname sync push ln unlink cut realpath getconf
uname sync push ln unlink cut realpath getconf strftime
OTHERPROG = necho hello cat
all: $(SHOBJ_STATUS)
@ -172,6 +172,9 @@ cut: cut.o
realpath: realpath.o
$(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ realpath.o $(SHOBJ_LIBS)
strftime: strftime.o
$(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ strftime.o $(SHOBJ_LIBS)
# pushd is a special case. We use the same source that the builtin version
# uses, with special compilation options.
#
@ -221,3 +224,4 @@ sync.o: sync.c
push.o: push.c
mkdir.o: mkdir.c
realpath.o: realpath.c
strftime.o: strftime.c

View file

@ -247,10 +247,17 @@ struct stat *st;
struct passwd *pw;
struct group *gr;
char *owner;
int ma, mi, d;
ma = major (st->st_rdev);
mi = minor (st->st_rdev);
#if defined (makedev)
d = makedev (ma, mi);
#else
d = st->st_rdev & 0xFF;
#endif
printf("Device (major/minor): %d (%d/%d)\n", d, ma, mi);
printf("Device (major/minor): %d (%d/%d)\n", (int) (st->st_dev & 0xFF),
(int) major (st->st_dev),
(int) minor (st->st_dev));
printf("Inode: %d\n", (int) st->st_ino);
printf("Mode: (%o) ", (int) st->st_mode);
printmode((int) st->st_mode);

View file

@ -78,7 +78,7 @@ extern int errno;
struct conf_variable
{
const char *name;
enum { SYSCONF, CONFSTR, PATHCONF, CONSTANT, G_UNDEF } type;
enum { SYSCONF, CONFSTR, PATHCONF, CONSTANT, LLCONST, G_UNDEF } type;
long value;
};
@ -94,6 +94,11 @@ static long sysconf __P((int));
static long pathconf __P((const char *, int));
#endif
/* Hack to `encode' values wider than long into a conf_variable */
#define VAL_LLONG_MIN -1000
#define VAL_LLONG_MAX -1001
#define VAL_ULLONG_MAX -1002
static const struct conf_variable conf_table[] =
{
/* POSIX.2 Configurable Variable Values */
@ -169,6 +174,8 @@ static const struct conf_variable conf_table[] =
{ "POSIX_V6_ILP32_OFF32_CFLAGS", CONFSTR, _CS_POSIX_V6_ILP32_OFF32_CFLAGS },
{ "POSIX_V6_ILP32_OFF32_LDFLAGS", CONFSTR, _CS_POSIX_V6_ILP32_OFF32_LDFLAGS },
{ "POSIX_V6_ILP32_OFF32_LIBS", CONFSTR, _CS_POSIX_V6_ILP32_OFF32_LIBS },
#endif
#if defined (_CS_POSIX_V6_ILP32_OFF32_LINTFLAGS)
{ "POSIX_V6_ILP32_OFF32_LINTFLAGS", CONFSTR, _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS },
#endif
#if defined (_SC_POSIX_V6_ILP32_OFFBIG)
@ -178,6 +185,8 @@ static const struct conf_variable conf_table[] =
{ "POSIX_V6_ILP32_OFFBIG_CFLAGS", CONFSTR, _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS },
{ "POSIX_V6_ILP32_OFFBIG_LDFLAGS", CONFSTR, _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS },
{ "POSIX_V6_ILP32_OFFBIG_LIBS", CONFSTR, _CS_POSIX_V6_ILP32_OFFBIG_LIBS },
#endif
#if defined (_CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS)
{ "POSIX_V6_ILP32_OFFBIG_LINTFLAGS", CONFSTR, _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS },
#endif
#if defined (_SC_POSIX_V6_LP64_OFF64)
@ -187,6 +196,8 @@ static const struct conf_variable conf_table[] =
{ "POSIX_V6_LP64_OFF64_CFLAGS", CONFSTR, _CS_POSIX_V6_LP64_OFF64_CFLAGS },
{ "POSIX_V6_LP64_OFF64_LDFLAGS", CONFSTR, _CS_POSIX_V6_LP64_OFF64_LDFLAGS },
{ "POSIX_V6_LP64_OFF64_LIBS", CONFSTR, _CS_POSIX_V6_LP64_OFF64_LIBS },
#endif
#if defined (CS_POSIX_V6_LP64_OFF64_LINTFLAGS)
{ "POSIX_V6_LP64_OFF64_LINTFLAGS", CONFSTR, _CS_POSIX_V6_LP64_OFF64_LINTFLAGS },
#endif
#if defined (_SC_POSIX_V6_LPBIG_OFFBIG)
@ -196,9 +207,15 @@ static const struct conf_variable conf_table[] =
{ "POSIX_V6_LPBIG_OFFBIG_CFLAGS", CONFSTR, _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS },
{ "POSIX_V6_LPBIG_OFFBIG_LDFLAGS", CONFSTR, _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS },
{ "POSIX_V6_LPBIG_OFFBIG_LIBS", CONFSTR, _CS_POSIX_V6_LPBIG_OFFBIG_LIBS },
#endif
#if defined (_CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS)
{ "POSIX_V6_LPBIG_OFFBIG_LINTFLAGS", CONFSTR, _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS },
#endif
#if defined (_CS_POSIX_V6_WIDTH_RESTRICTED_ENVS)
{ "POSIX_6_WIDTH_RESTRICTED_ENVS", CONFSTR, _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS },
#endif
/* POSIX.2 Utility Limit Minimum Values */
#ifdef _POSIX2_BC_BASE_MAX
{ "POSIX2_BC_BASE_MAX", CONSTANT, _POSIX2_BC_BASE_MAX },
@ -220,6 +237,11 @@ static const struct conf_variable conf_table[] =
#else
{ "POSIX2_BC_STRING_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX2_CHARCLASS_NAME_MAX
{ "POSIX2_CHARCLASS_NAME_MAX", CONSTANT, _POSIX2_CHARCLASS_NAME_MAX },
#else
{ "POSIX2_CHARCLASS_NAME_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX2_COLL_WEIGHTS_MAX
{ "POSIX2_COLL_WEIGHTS_MAX", CONSTANT, _POSIX2_COLL_WEIGHTS_MAX },
#else
@ -251,7 +273,83 @@ static const struct conf_variable conf_table[] =
# endif
#endif
#ifdef _POSIX2_BC_BASE_MAX
{ "_POSIX2_BC_BASE_MAX", CONSTANT, _POSIX2_BC_BASE_MAX },
#else
{ "_POSIX2_BC_BASE_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX2_BC_DIM_MAX
{ "_POSIX2_BC_DIM_MAX", CONSTANT, _POSIX2_BC_DIM_MAX },
#else
{ "_POSIX2_BC_DIM_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX2_BC_SCALE_MAX
{ "_POSIX2_BC_SCALE_MAX", CONSTANT, _POSIX2_BC_SCALE_MAX },
#else
{ "_POSIX2_BC_SCALE_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX2_BC_STRING_MAX
{ "_POSIX2_BC_STRING_MAX", CONSTANT, _POSIX2_BC_STRING_MAX },
#else
{ "_POSIX2_BC_STRING_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX2_CHARCLASS_NAME_MAX
{ "_POSIX2_CHARCLASS_NAME_MAX", CONSTANT, _POSIX2_CHARCLASS_NAME_MAX },
#else
{ "_POSIX2_CHARCLASS_NAME_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX2_COLL_WEIGHTS_MAX
{ "_POSIX2_COLL_WEIGHTS_MAX", CONSTANT, _POSIX2_COLL_WEIGHTS_MAX },
#else
{ "_POSIX2_COLL_WEIGHTS_MAX", G_UNDEF, -1 },
#endif
#if defined (_POSIX2_EQUIV_CLASS_MAX)
{ "POSIX2_EQUIV_CLASS_MAX", CONSTANT, _POSIX2_EQUIV_CLASS_MAX },
#endif
#ifdef _POSIX2_EXPR_NEST_MAX
{ "_POSIX2_EXPR_NEST_MAX", CONSTANT, _POSIX2_EXPR_NEST_MAX },
#else
{ "_POSIX2_EXPR_NEST_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX2_LINE_MAX
{ "_POSIX2_LINE_MAX", CONSTANT, _POSIX2_LINE_MAX },
#else
{ "_POSIX2_LINE_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX2_RE_DUP_MAX
{ "_POSIX2_RE_DUP_MAX", CONSTANT, _POSIX2_RE_DUP_MAX },
#else
{ "_POSIX2_RE_DUP_MAX", G_UNDEF, -1 },
#endif
/* X/OPEN Maxmimum Values */
#ifdef _XOPEN_IOV_MAX
{ "_XOPEN_IOV_MAX", CONSTANT, _XOPEN_IOV_MAX },
#else
{ "_XOPEN_IOV_MAX", G_UNDEF, -1 },
#endif
#ifdef _XOPEN_NAME_MAX
{ "_XOPEN_NAME_MAX", CONSTANT, _XOPEN_NAME_MAX },
#else
{ "_XOPEN_NAME_MAX", G_UNDEF, -1 },
#endif
#ifdef _XOPEN_PATH_MAX
{ "_XOPEN_PATH_MAX", CONSTANT, _XOPEN_PATH_MAX },
#else
{ "_XOPEN_PATH_MAX", G_UNDEF, -1 },
#endif
/* POSIX.1 Minimum Values */
#ifdef _POSIX_AIO_LISTIO_MAX
{ "_POSIX_AIO_LISTIO_MAX", CONSTANT, _POSIX_AIO_LISTIO_MAX },
#else
{ "_POSIX_AIO_LISTIO_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_AIO_MAX
{ "_POSIX_AIO_MAX", CONSTANT, _POSIX_AIO_MAX },
#else
{ "_POSIX_AIO_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_ARG_MAX
{ "_POSIX_ARG_MAX", CONSTANT, _POSIX_ARG_MAX },
#else
@ -260,13 +358,28 @@ static const struct conf_variable conf_table[] =
#ifdef _POSIX_CHILD_MAX
{ "_POSIX_CHILD_MAX", CONSTANT, _POSIX_CHILD_MAX },
#else
{ "_POSIX_CHILD_MAX", G_UNDEF, -1 },
{ "_POSIX_CHILD_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_DELAYTIMER_MAX
{ "_POSIX_DELAYTIMER_MAX", CONSTANT, _POSIX_DELAYTIMER_MAX },
#else
{ "_POSIX_DELAYTIMER_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_HOST_NAME_MAX
{ "_POSIX_HOST_NAME_MAX", CONSTANT, _POSIX_HOST_NAME_MAX },
#else
{ "_POSIX_HOST_NAME_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_LINK_MAX
{ "_POSIX_LINK_MAX", CONSTANT, _POSIX_LINK_MAX },
#else
{ "_POSIX_LINK_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_LOGIN_NAME_MAX
{ "_POSIX_LOGIN_NAME_MAX", CONSTANT, _POSIX_LOGIN_NAME_MAX },
#else
{ "_POSIX_LOGIN_NAME_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_MAX_CANON
{ "_POSIX_MAX_CANON", CONSTANT, _POSIX_MAX_CANON },
#else
@ -277,6 +390,16 @@ static const struct conf_variable conf_table[] =
#else
{ "_POSIX_MAX_INPUT", G_UNDEF, -1 },
#endif
#ifdef _POSIX_MQ_OPEN_MAX
{ "_POSIX_MQ_OPEN_MAX", CONSTANT, _POSIX_MQ_OPEN_MAX },
#else
{ "_POSIX_MQ_OPEN_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_MQ_PRIO_MAX
{ "_POSIX_MQ_PRIO_MAX", CONSTANT, _POSIX_MQ_PRIO_MAX },
#else
{ "_POSIX_MQ_PRIO_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_NAME_MAX
{ "_POSIX_NAME_MAX", CONSTANT, _POSIX_NAME_MAX },
#else
@ -302,20 +425,129 @@ static const struct conf_variable conf_table[] =
#else
{ "_POSIX_PIPE_BUF", G_UNDEF, -1 },
#endif
#ifdef _POSIX_RE_DUP_MAX
{ "_POSIX_RE_DUP_MAX", CONSTANT, _POSIX_RE_DUP_MAX },
#else
{ "_POSIX_RE_DUP_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_RTSIG_MAX
{ "_POSIX_RTSIG_MAX", CONSTANT, _POSIX_RTSIG_MAX },
#else
{ "_POSIX_RTSIG_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_SEM_NSEMS_MAX
{ "_POSIX_SEM_NSEMS_MAX", CONSTANT, _POSIX_SEM_NSEMS_MAX },
#else
{ "_POSIX_SEM_NSEMS_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_SEM_VALUE_MAX
{ "_POSIX_SEM_VALUE_MAX", CONSTANT, _POSIX_SEM_VALUE_MAX },
#else
{ "_POSIX_SEM_VALUE_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_SIGQUEUE_MAX
{ "_POSIX_SIGQUEUE_MAX", CONSTANT, _POSIX_SIGQUEUE_MAX },
#else
{ "_POSIX_SIGQUEUE_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_SSIZE_MAX
{ "_POSIX_SSIZE_MAX", CONSTANT, _POSIX_SSIZE_MAX },
#else
{ "_POSIX_SSIZE_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_SS_REPL_MAX
{ "_POSIX_SS_REPL_MAX", CONSTANT, _POSIX_SS_REPL_MAX },
#else
{ "_POSIX_SS_REPL_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_STREAM_MAX
{ "_POSIX_STREAM_MAX", CONSTANT, _POSIX_STREAM_MAX },
#else
{ "_POSIX_STREAM_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_SYMLINK_MAX
{ "_POSIX_SYMLINK_MAX", CONSTANT, _POSIX_SYMLINK_MAX },
#else
{ "_POSIX_SYMLINK_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_SYMLOOP_MAX
{ "_POSIX_SYMLOOP_MAX", CONSTANT, _POSIX_SYMLOOP_MAX },
#else
{ "_POSIX_SYMLOOP_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_THREAD_DESTRUCTOR_ITERATIONS
{ "_POSIX_THREAD_DESTRUCTOR_ITERATIONS", CONSTANT, _POSIX_THREAD_DESTRUCTOR_ITERATIONS },
#else
{ "_POSIX_THREAD_DESTRUCTOR_ITERATIONS", G_UNDEF, -1 },
#endif
#ifdef _POSIX_THREAD_KEYS_MAX
{ "_POSIX_THREAD_KEYS_MAX", CONSTANT, _POSIX_THREAD_KEYS_MAX },
#else
{ "_POSIX_THREAD_KEYS_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_THREAD_THREADS_MAX
{ "_POSIX_THREAD_THREADS_MAX",CONSTANT, _POSIX_THREAD_THREADS_MAX },
#else
{ "_POSIX_THREAD_THREADS_MAX",G_UNDEF, -1 },
#endif
#ifdef _POSIX_TIMER_MAX
{ "_POSIX_TIMER_MAX", CONSTANT, _POSIX_TIMER_MAX },
#else
{ "_POSIX_TIMER_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_TRACE_EVENT_NAME_MAX
{ "_POSIX_TRACE_EVENT_NAME_MAX", CONSTANT, _POSIX_TRACE_EVENT_NAME_MAX },
#else
{ "_POSIX_TRACE_EVENT_NAME_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_TRACE_NAME_MAX
{ "_POSIX_TRACE_NAME_MAX", CONSTANT, _POSIX_TRACE_NAME_MAX },
#else
{ "_POSIX_TRACE_NAME_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_TRACE_SYS_MAX
{ "_POSIX_TRACE_SYS_MAX", CONSTANT, _POSIX_TRACE_SYS_MAX },
#else
{ "_POSIX_TRACE_SYS_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_TRACE_USER_EVENT_MAX
{ "_POSIX_TRACE_USER_EVENT_MAX", CONSTANT, _POSIX_TRACE_USER_EVENT_MAX },
#else
{ "_POSIX_TRACE_USER_EVENT_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_TTY_NAME_MAX
{ "_POSIX_TTY_NAME_MAX", CONSTANT, _POSIX_TTY_NAME_MAX },
#else
{ "_POSIX_TTY_NAME_MAX", G_UNDEF, -1 },
#endif
#ifdef _POSIX_TZNAME_MAX
{ "_POSIX_TZNAME_MAX", CONSTANT, _POSIX_TZNAME_MAX },
#else
{ "_POSIX_TZNAME_MAX", G_UNDEF, -1 },
{ "_POSIX_TZNAME_MAX", G_UNDEF, -1 },
#endif
/* POSIX.1 Maximum Values */
#ifdef _POSIX_CLOCKRES_MIN
{ "_POSIX_CLOCKRES_MIN", CONSTANT, _POSIX_CLOCKRES_MIN },
#else
{ "_POSIX_CLOCKRES_MIN", G_UNDEF, -1 },
#endif
/* POSIX.1-2001/XPG6 (and later) Runtime Invariants from <limits.h> */
#ifdef _SC_SS_REPL_MAX
{ "SS_REPL_MAX", SYSCONF, _SC_SS_REPL_MAX },
#endif
#ifdef _SC_TRACE_EVENT_NAME_MAX
{ "TRACE_EVENT_NAME_MAX", SYSCONF, _SC_TRACE_EVENT_NAME_MAX },
#endif
#ifdef _SC_TRACE_NAME_MAX
{ "TRACE_NAME_MAX", SYSCONF, _SC_TRACE_NAME_MAX },
#endif
#ifdef _SC_TRACE_SYS_MAX
{ "TRACE_SYS_MAX", SYSCONF, _SC_TRACE_SYS_MAX },
#endif
#ifdef _SC_TRACE_USER_EVENT_MAX
{ "TRACE_USER_EVENT_MAX", SYSCONF, _SC_TRACE_USER_EVENT_MAX },
#endif
/* POSIX.2/XPG 4.2 (and later) Symbolic Utility Limits */
@ -361,55 +593,58 @@ static const struct conf_variable conf_table[] =
#ifdef NL_TEXTMAX
{ "NL_TEXTMAX", CONSTANT, NL_TEXTMAX },
#endif
#ifdef _SC_RAW_SOCKET
{ "RAW_SOCKET", SYSCONF, _SC_RAW_SOCKET },
#endif
#ifdef _SC_RE_DUP_MAX
{ "RE_DUP_MAX", SYSCONF, _SC_RE_DUP_MAX },
#endif
/* POSIX.2 Optional Facility Configuration Values */
#ifdef _SC_2_C_BIND
{ "_POSIX2_C_BIND", SYSCONF, _SC_2_C_BIND },
{ "POSIX2_C_BIND", SYSCONF, _SC_2_C_BIND },
#else
{ "_POSIX2_C_BIND", G_UNDEF, -1 },
{ "POSIX2_C_BIND", G_UNDEF, -1 },
#endif
#ifdef _SC_2_C_DEV
{ "_POSIX2_C_DEV", SYSCONF, _SC_2_C_DEV },
{ "POSIX2_C_DEV", SYSCONF, _SC_2_C_DEV },
#else
{ "_POSIX2_C_DEV", G_UNDEF, -1 },
{ "POSIX2_C_DEV", G_UNDEF, -1 },
#endif
#if defined (_SC_2_C_VERSION)
{ "_POSIX2_C_VERSION", SYSCONF, _SC_2_C_VERSION },
{ "POSIX2_C_VERSION", SYSCONF, _SC_2_C_VERSION },
#else
{ "_POSIX2_C_VERSION", G_UNDEF, -1 },
{ "POSIX2_C_VERSION", G_UNDEF, -1 },
#endif
#if defined (_SC_2_CHAR_TERM)
{ "_POSIX2_CHAR_TERM", SYSCONF, _SC_2_CHAR_TERM },
{ "POSIX2_CHAR_TERM", SYSCONF, _SC_2_CHAR_TERM },
#else
{ "_POSIX2_CHAR_TERM", G_UNDEF, -1 },
{ "POSIX2_CHAR_TERM", G_UNDEF, -1 },
#endif
#ifdef _SC_2_FORT_DEV
{ "_POSIX2_FORT_DEV", SYSCONF, _SC_2_FORT_DEV },
{ "POSIX2_FORT_DEV", SYSCONF, _SC_2_FORT_DEV },
#else
{ "_POSIX2_FORT_DEV", G_UNDEF, -1 },
{ "POSIX2_FORT_DEV", G_UNDEF, -1 },
#endif
#ifdef _SC_2_FORT_RUN
{ "_POSIX2_FORT_RUN", SYSCONF, _SC_2_FORT_RUN },
{ "POSIX2_FORT_RUN", SYSCONF, _SC_2_FORT_RUN },
#else
{ "_POSIX2_FORT_RUN", G_UNDEF, -1 },
{ "POSIX2_FORT_RUN", G_UNDEF, -1 },
#endif
#ifdef _SC_2_LOCALEDEF
{ "_POSIX2_LOCALEDEF", SYSCONF, _SC_2_LOCALEDEF },
{ "POSIX2_LOCALEDEF", SYSCONF, _SC_2_LOCALEDEF },
#else
{ "_POSIX2_LOCALEDEF", G_UNDEF, -1 },
{ "POSIX2_LOCALEDEF", G_UNDEF, -1 },
#endif
#ifdef _SC_2_SW_DEV
{ "_POSIX2_SW_DEV", SYSCONF, _SC_2_SW_DEV },
{ "POSIX2_SW_DEV", SYSCONF, _SC_2_SW_DEV },
#else
{ "_POSIX2_SW_DEV", G_UNDEF, -1 },
{ "POSIX2_SW_DEV", G_UNDEF, -1 },
#endif
#if defined (_SC2_UPE)
{ "_POSIX2_UPE", SYSCONF, _SC_2_UPE },
{ "POSIX2_UPE", SYSCONF, _SC_2_UPE },
#else
{ "_POSIX2_UPE", G_UNDEF, -1 },
{ "POSIX2_UPE", G_UNDEF, -1 },
#endif
#if !defined (_POSIX2_VERSION) && defined (_SC_2_VERSION)
{ "_POSIX2_VERSION", SYSCONF, _SC_2_VERSION },
@ -418,13 +653,18 @@ static const struct conf_variable conf_table[] =
#endif
#if defined (_SC_REGEX_VERSION)
{ "REGEX_VERSION", SYSCONF, _SC_REGEX_VERSION },
{ "_REGEX_VERSION", SYSCONF, _SC_REGEX_VERSION },
#else
{ "REGEX_VERSION", G_UNDEF, -1 },
{ "_REGEX_VERSION", G_UNDEF, -1 },
#endif
#if defined (_SC_2_PBS)
{ "_POSIX2_PBS", SYSCONF, _SC_2_PBS },
{ "_POSIX2_PBS_ACCOUNTING", SYSCONF, _SC_2_PBS_ACCOUNTING },
# if defined (_SC_2_PBS_CHECKPOINT)
{ "_POSIX2_PBS_CHECKPOINT", SYSCONF, _SC_2_PBS_CHECKPOINT },
# endif
{ "_POSIX2_PBS_LOCATE", SYSCONF, _SC_2_PBS_LOCATE },
{ "_POSIX2_PBS_MESSAGE", SYSCONF, _SC_2_PBS_MESSAGE },
{ "_POSIX2_PBS_TRACK", SYSCONF, _SC_2_PBS_TRACK },
@ -517,6 +757,9 @@ static const struct conf_variable conf_table[] =
#if defined (_SC_FSYNC)
{ "_POSIX_FSYNC", SYSCONF, _SC_FSYNC },
#endif
#if defined (_SC_IPV6)
{ "_POSIX_IPV6", SYSCONF, _SC_IPV6 },
#endif
#if defined (_SC_JOB_CONTROL)
{ "_POSIX_JOB_CONTROL", SYSCONF, _SC_JOB_CONTROL },
#endif
@ -556,6 +799,9 @@ static const struct conf_variable conf_table[] =
#if defined (_SC_READER_WRITER_LOCKS)
{ "_POSIX_READER_WRITER_LOCKS", SYSCONF, _SC_READER_WRITER_LOCKS },
#endif
#if defined (_SC_RAW_SOCKETS)
{ "_POSIX_RAW_SOCKETS", SYSCONF, _SC_RAW_SOCKETS },
#endif
#if defined (_SC_REALTIME_SIGNALS)
{ "_POSIX_REALTIME_SIGNALS", SYSCONF, _SC_REALTIME_SIGNALS },
#endif
@ -587,6 +833,9 @@ static const struct conf_variable conf_table[] =
#if defined (_SC_SPORADIC_SERVER)
{ "_POSIX_SPORADIC_SERVER", SYSCONF, _SC_SPORADIC_SERVER },
#endif
#if defined (_SC_SYMLOOP_MAX)
{ "_POSIX_SYMLOOP_MAX", SYSCONF, _SC_SYMLOOP_MAX },
#endif
#if defined (_SC_SYNCHRONIZED_IO)
{ "_POSIX_SYNCHRONIZED_IO", SYSCONF, _SC_SYNCHRONIZED_IO },
#endif
@ -701,9 +950,6 @@ static const struct conf_variable conf_table[] =
#if defined (_SC_AIO_PRIO_DELTA_MAX)
{ "AIO_PRIO_DELTA_MAX", SYSCONF, _SC_AIO_PRIO_DELTA_MAX },
#endif
#if defined (_SC_DELAYTIMER_MAX)
{ "DELAYTIMER_MAX", SYSCONF, _SC_DELAYTIMER_MAX },
#endif
#if defined (_SC_MQ_OPEN_MAX)
{ "MQ_OPEN_MAX", SYSCONF, _SC_MQ_OPEN_MAX },
#endif
@ -758,6 +1004,9 @@ static const struct conf_variable conf_table[] =
#if defined (_SC_XOPEN_SHM)
{ "_XOPEN_SHM", SYSCONF, _SC_XOPEN_SHM },
#endif
#if defined (_SC_XOPEN_STREAMS)
{ "_XOPEN_STREAMS", SYSCONF, _SC_XOPEN_STREAMS },
#endif
#if defined (_SC_XOPEN_UNIX)
{ "_XOPEN_UNIX", SYSCONF, _SC_XOPEN_UNIX },
#endif
@ -842,6 +1091,10 @@ static const struct conf_variable conf_table[] =
{ "INT_BIT", CONSTANT, INT_BIT },
{ "INT_MAX", CONSTANT, INT_MAX },
{ "INT_MIN", CONSTANT, INT_MIN },
#ifdef LLONG_MAX
{ "LLONG_MAX", LLCONST, VAL_LLONG_MAX },
{ "LLONG_MIN", LLCONST, VAL_LLONG_MIN },
#endif
{ "LONG_BIT", CONSTANT, LONG_BIT },
{ "LONG_MAX", CONSTANT, LONG_MAX },
{ "LONG_MIN", CONSTANT, LONG_MIN },
@ -856,6 +1109,9 @@ static const struct conf_variable conf_table[] =
{ "SSIZE_MAX", CONSTANT, SSIZE_MAX },
{ "UCHAR_MAX", CONSTANT, UCHAR_MAX },
{ "UINT_MAX", CONSTANT, UINT_MAX },
#ifdef ULLONG_MAX
{ "ULLONG_MAX", LLCONST, VAL_ULLONG_MAX },
#endif
{ "ULONG_MAX", CONSTANT, ULONG_MAX },
{ "USHRT_MAX", CONSTANT, USHRT_MAX },
{ "WORD_BIT", CONSTANT, WORD_BIT },
@ -940,6 +1196,24 @@ int all;
printf("undefined\n");
break;
#ifdef LLONG_MAX
case LLCONST:
switch (cp->value) {
default:
case VAL_LLONG_MIN:
printf ("%lld\n", LLONG_MIN);
break;
case VAL_LLONG_MAX:
printf ("%lld\n", LLONG_MAX);
break;
# if (ULLONG_MAX != LLONG_MAX)
case VAL_ULLONG_MAX:
printf ("%llu\n", ULLONG_MAX);
break;
# endif
}
break;
#endif
case CONSTANT:
switch (cp->value) {
case UCHAR_MAX:

View file

@ -0,0 +1,105 @@
/* strftime - loadable builtin interface to strftime(3) */
/* See Makefile for compilation details. */
#include <config.h>
#if defined (HAVE_UNISTD_H)
# include <unistd.h>
#endif
#include "bashtypes.h"
#include "posixtime.h"
#include <stdio.h>
#include "builtins.h"
#include "shell.h"
#include "common.h"
int
strftime_builtin (list)
WORD_LIST *list;
{
char *format, *tbuf;
size_t tbsize, tsize;
time_t secs;
struct tm *t;
int n;
intmax_t i;
if (list == 0)
{
builtin_usage ();
return (EX_USAGE);
}
if (no_options (list))
return (EX_USAGE);
format = list->word->word;
if (format == 0 || *format == 0)
{
printf ("\n");
return (EXECUTION_SUCCESS);
}
list = list->next;
if (list && list->word->word)
{
n = legal_number (list->word->word, &i);
if (n == 0 || i < 0 || i != (time_t)i)
{
sh_invalidnum (list->word->word);
return (EXECUTION_FAILURE);
}
else
secs = i;
}
else
secs = NOW;
t = localtime (&secs);
tbsize = strlen (format) * 4;
tbuf = 0;
/* Now try to figure out how big the buffer should really be. strftime(3)
will return the number of bytes placed in the buffer unless it's greater
than MAXSIZE, in which case it returns 0. */
for (n = 1; n < 4; n++)
{
tbuf = xrealloc (tbuf, tbsize * n);
tsize = strftime (tbuf, tbsize * n, format, t);
if (tsize)
break;
}
printf ("%s\n", tbuf);
free (tbuf);
return (EXECUTION_SUCCESS);
}
/* An array of strings forming the `long' documentation for a builtin xxx,
which is printed by `help xxx'. It must end with a NULL. */
char *strftime_doc[] = {
"Converts date and time format to a string and displays it on the",
"standard output. If the optional second argument is supplied, it",
"is used as the number of seconds since the epoch to use in the",
"conversion, otherwise the current time is used.",
(char *)NULL
};
/* The standard structure describing a builtin command. bash keeps an array
of these structures. The flags must include BUILTIN_ENABLED so the
builtin can be used. */
struct builtin strftime_struct = {
"strftime", /* builtin name */
strftime_builtin, /* function implementing the builtin */
BUILTIN_ENABLED, /* initial flags for builtin */
strftime_doc, /* array of long documentation strings. */
"strftime format [seconds]", /* usage synopsis; becomes short_doc */
0 /* reserved for internal use */
};

View file

@ -14,16 +14,16 @@ T=$'\t'
cat << \EOF >/tmp/cb$$.1
mkalias ()
{
if [ "x$2" = "x" ]; then
echo alias ${1}="''"
elif echo "$2" | egrep -s '(\!|#)' >/dev/null 2>&1; then
case $2 in
'') echo alias ${1}="''" ;;
*[#\!]*)
comm=$(echo $2 | sed 's/\!\*/"$\@"/g
s/\!:\([1-9]\)/"$\1"/g
s/#/\#/g')
echo $1 \(\) "{" command "$comm" "; }"
else
echo alias ${1}=\'$(echo "${2}" | sed "s:':'\\\\'':")\'
fi
;;
*) echo alias ${1}=\'$(echo "${2}" | sed "s:':'\\\\'':")\' ;;
esac
}
EOF

View file

@ -14,16 +14,16 @@ T=' '
cat << \EOF >/tmp/cb$$.1
mkalias ()
{
if [ "x$2" = "x" ]; then
echo alias ${1}="''"
elif echo "$2" | egrep -s '(\!|#)' >/dev/null 2>&1; then
case $2 in
'') echo alias ${1}="''" ;;
*[#\!]*)
comm=`echo $2 | sed 's/\\!\*/"$\@"/g
s/\\!:\([1-9]\)/"$\1"/g
s/#/\#/g'`
echo $1 \(\) "{" command "$comm" "; }"
else
echo alias ${1}=\'`echo "${2}" | sed "s:':'\\\\\\\\'':"`\'
fi
;;
*) echo alias ${1}=\'`echo "${2}" | sed "s:':'\\\\\\\\'':"`\' ;;
esac
}
EOF

View file

@ -36,16 +36,16 @@ EOF
cat << \EOF >/tmp/cb$$.1
mkalias ()
{
if [ -z "$2" ]; then
echo alias ${1}="''"
elif echo "$2" | egrep -s '(\!|#)' >/dev/null 2>&1; then
case $2 in
'') echo alias ${1}="''" ;;
*[#\!]*)
comm=$(echo $2 | sed 's/\!\*/"$\@"/g
s/\!:\([1-9]\)/"$\1"/g
s/#/\#/g')
echo $1 \(\) "{" command "$comm" "; }"
else
echo alias ${1}=\'$(echo "${2}" | sed "s:':'\\\\'':")\'
fi
;;
*) echo alias ${1}=\'$(echo "${2}" | sed "s:':'\\\\'':")\' ;;
esac
}
EOF

View file

@ -4,5 +4,9 @@ and Associates (ISBN 1-56592-054-6).
The original `kshdb' is available for anonymous FTP with the URL
ftp://ftp.uu.net/published/oreilly/nutshell/ksh/ksh.tar.Z
http://examples.oreilly.com/korn/ksh.tar.Z
A revised edition is available at:
http://examples.oreilly.com/korn2/korn2_examples.tar.gz

View file

@ -88,7 +88,7 @@ _at_linenumbp() {
if [ -z "${_linebp}" ]; then
return 1
fi
echo "${_curline}" | egrep "(${_linebp%\|})" >/dev/null 2>&1
echo "${_curline}" | grep -E "(${_linebp%\|})" >/dev/null 2>&1
return $?
}
@ -101,7 +101,7 @@ _at_stringbp() {
return 1;
fi
l=${_lines[$_curline-$_firstline+1]}
echo "${l}" | egrep "*(${_stringbp%\|})*" >/dev/null 2>&1
echo "${l}" | grep -E "\\*(${_stringbp%\|})\\*" >/dev/null 2>&1
return $?
}

View file

@ -108,7 +108,7 @@ function number ()
;;
0 ) : ;;
* )
if test ".${val2}" != '.' -a ".${d1}" != '.0' ; then
if test ".${val2}" != '.' && test ".${d1}" != '.0' ; then
val2="${val2}-"
fi
case "${d1}" in

View file

@ -95,11 +95,11 @@ function strcmp ()
###;;;autoload
function strncmp ()
{
if [ -z "${3}" -o "${3}" -le "0" ]; then
if [ -z "${3}" ] || [ "${3}" -le "0" ]; then
return 0
fi
if [ ${3} -ge ${#1} -a ${3} -ge ${#2} ]; then
if [ ${3} -ge ${#1} ] && [ ${3} -ge ${#2} ]; then
strcmp "$1" "$2"
return $?
else

View file

@ -39,7 +39,7 @@ cd()
set -- $HOME
fi
if [ "$CDHISTFILE" -a -r "$CDHISTFILE" ] # if directory history exists
if [ "$CDHISTFILE" ] && [ -r "$CDHISTFILE" ] # if directory history exists
then
typeset CDHIST
i=-1
@ -49,7 +49,7 @@ cd()
done <$CDHISTFILE
fi
if [ "${CDHIST[0]}" != "$PWD" -a "$PWD" != "" ]
if [ "${CDHIST[0]}" != "$PWD" ] && [ -n "$PWD" ]
then
_cdins # insert $PWD into cd history
fi

View file

@ -56,13 +56,13 @@ FindSectionsInIndex ()
fi
done
[ -z "$indexes" ] && return
# Make egrep give filename
# Make grep give filename
[ NIndex -lt 2 ] && indexes="$indexes /dev/null"
# set positional parameters to
# indexfile:searchname pagename section ...
# e.g.
# /usr/man/index:FP_OFF Routines DOS
set -- `egrep "^$page[ ]" $indexes`
set -- `grep "^$page[ ]" $indexes`
while [ $# -gt 2 ]; do
FileNames[i]=${1%%index*}cat$3/$2.$3
Sections[i]=$3

View file

@ -110,7 +110,7 @@ function CopyFiles {
*/) ;; # don't add / if trailing / already present
*) if [ $# -gt 2 ] || # if more than two args given, last must be a dir
# If dest in on local machine, check whether it is a directory
[ $DestMach = $LocalMach -a -d $DestPath ] ||
[ $DestMach = $LocalMach ] && [ -d "$DestPath" ] ||
# If dest ends with . or .., it is a directory
lastisdot "$DestPath"
then

View file

@ -103,7 +103,7 @@ esac
shift
[ -z "$end" -o $count -le "$end" ] && increment=1 || increment=-1
[ -z "$end" ] && [ $count -le "$end" ] && increment=1 || increment=-1
istrue $verbose && echo "start=$count end=$end" 1>&2

View file

@ -38,7 +38,7 @@ for i in "$@"; do
vars="$vars $i"
;;
*)
if [ ! -x $i -o ! -d $i ]; then # arg must be a dir and executable
if [ ! -x $i ] || [ ! -d $i ]; then # arg must be a dir and executable
echo "$i: directory not accessible."
exit
fi

View file

@ -389,7 +389,7 @@ esac
trap ':' 2
trap exit 3
trap "tail -$savehist $histfile>/tmp/hist$$;uniq /tmp/hist$$ > $histfile;\
trap "tail -n $savehist $histfile>/tmp/hist$$;uniq /tmp/hist$$ > $histfile;\
rm -f /tmp/*$$;exit 0" 15
getcmd=yes
@ -517,7 +517,7 @@ do
esac
cmd="${cmd};$line"
while test "$line" != "done" -a "$line" != "end"
while test "$line" != "done" && test "$line" != "end"
do
echo $n "$PS2$c"
read line
@ -531,7 +531,7 @@ do
echo "$cmd" > /tmp/bcsh$$
;;
if[\ \ ]*)
while test "$line" != "fi" -a "$line" != "endif"
while test "$line" != "fi" && test "$line" != "endif"
do
echo $n "$PS2$c"
read line
@ -659,7 +659,7 @@ esac/
-[0-9]*)
wanted="`expr \"$i\" : '-\([0-9][0-9]*\).*'`"
rest="`expr \"$i\" : '-[0-9][0-9]*\(.*\)'`"
i="`tail -$wanted $histfile | sed -e "1q"`"
i="`tail -n $wanted $histfile | sed -e "1q"`"
;;
esac
;;
@ -917,14 +917,14 @@ esac/
continue
;;
exec[\ \ ]*)
tail -$savehist $histfile>/tmp/hist$$
tail -n $savehist $histfile>/tmp/hist$$
uniq /tmp/hist$$ > $histfile
rm -f /tmp/*$$
echo $cmd > /tmp/cmd$$
. /tmp/cmd$$
;;
login[\ \ ]*|newgrp[\ \ ]*)
tail -$savehist $histfile>/tmp/hist$$
tail -n $savehist $histfile>/tmp/hist$$
uniq /tmp/hist$$ > $histfile
rm -f /tmp/*$$
echo $cmd > /tmp/cmd$$
@ -936,22 +936,22 @@ esac/
# sh $logoutfile
$SHELL $logoutfile
fi
tail -$savehist $histfile > /tmp/hist$$
tail -n $savehist $histfile > /tmp/hist$$
uniq /tmp/hist$$ > $histfile
rm -f /tmp/*$$
exit 0
;;
h|history)
grep -n . $histfile | tail -$history | sed -e 's@:@ @' | $PAGER
grep -n . $histfile | tail -n $history | sed -e 's@:@ @' | $PAGER
continue
;;
h[\ \ ]\|*|h[\ \ ]\>*|h\|*|h\>*)
cmd="`echo \"$cmd\" | sed -e \"s@h@grep -n . $histfile | tail -$history | sed -e 's@:@ @'@\"`"
cmd="`echo \"$cmd\" | sed -e \"s@h@grep -n . $histfile | tail -n $history | sed -e 's@:@ @'@\"`"
getcmd=no
continue
;;
history[\ \ ]*\|*|history[\ \ ]*\>*)
cmd="`echo \"$cmd\" | sed -e \"s@history@grep -n . $histfile | tail -$history | sed -e 's@:@ @'@\"`"
cmd="`echo \"$cmd\" | sed -e \"s@history@grep -n . $histfile | tail -n $history | sed -e 's@:@ @'@\"`"
getcmd=no
continue
;;

View file

@ -62,7 +62,7 @@ processdir()
set +f
for file in * ; do
set -f
if [ "$file" != "." -a "$file" != ".." ] ; then
if [ "$file" != "." ] && [ "$file" != ".." ] ; then
if [ -L "$file" ] ; then
echo "skipping symlink" $file in `pwd`
elif [ -d "$file" ] ; then

View file

@ -125,11 +125,11 @@ function getline
unset linesave # forget temp var
;;
 )
while [ "${line% }" != "$line" -a ${#line} != 0 ] ; do
while [ "${line% }" != "$line" ] && [ ${#line} != 0 ] ; do
echo -n " "
line="${line%?}"
done
while [ "${line% }" = "$line" -a ${#line} != 0 ] ; do
while [ "${line% }" = "$line" ] && [ ${#line} != 0 ] ; do
echo -n " "
line="${line%?}"
done
@ -151,7 +151,7 @@ function getline
# If length is restricted, and the line is too
# long, then beep...
if [ "$2" != 0 -a $(( ${#line} >= $2 )) = 1 ] ; then
if [ "$2" != 0 ] && [ $(( ${#line} >= $2 )) = 1 ] ; then
echo -n 
else # Otherwise add
line="$line$key" # the character.
@ -182,4 +182,3 @@ getline LINE 50
restore
echo "<$LINE>"