aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2007-04-17 09:32:18 +0000
committerRoy Marples <roy@marples.name>2007-04-17 09:32:18 +0000
commitf657d87b997f5b599d74a8f2eb6fef8dd6381550 (patch)
tree5bd3799657e97edabe5ff83e5ac145f3d15931d8
parent0f92b5e7df4ead366984b5624de12446bd968478 (diff)
Rationalise our colour usage a little.
-rw-r--r--ChangeLog2
-rwxr-xr-xinit.d.Linux/consolefont6
-rwxr-xr-xsh.Linux/init.sh17
-rw-r--r--sh/functions.sh9
-rw-r--r--src/Makefile2
-rw-r--r--src/einfo.h30
-rw-r--r--src/libeinfo.c95
-rw-r--r--src/rc-status.c18
-rw-r--r--src/rc.c48
9 files changed, 114 insertions, 113 deletions
diff --git a/ChangeLog b/ChangeLog
index 45531aa5..68728bae 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,7 +3,7 @@
17 Apr 2007; Roy Marples <uberlord@gentoo.org>:
- env vars EINFO_GOOD and friends now override our hardcoded builtins.
+ env vars ECOLOR_GOOD and friends now override our hardcoded builtins.
16 Apr 2007; Mike Frysinger <vapier@gentoo.org>:
diff --git a/init.d.Linux/consolefont b/init.d.Linux/consolefont
index 5401a7b3..64003fa5 100755
--- a/init.d.Linux/consolefont
+++ b/init.d.Linux/consolefont
@@ -79,6 +79,12 @@ start() {
|| rm -f "${RC_LIBDIR}"/console/map
/bin/setfont -ou "${RC_LIBDIR}"/console/unimap 2>/dev/null \
|| rm -f "${RC_LIBDIR}"/console/unimap
+
+ if [ "${UNICODE}" = "yes" ] ; then
+ touch "${RC_LIBDIR}"/console/unicode
+ else
+ rm -f "${RC_LIBDIR}"/console/unicode
+ fi
fi
return ${retval}
diff --git a/sh.Linux/init.sh b/sh.Linux/init.sh
index 74b88e0a..1f3f301e 100755
--- a/sh.Linux/init.sh
+++ b/sh.Linux/init.sh
@@ -88,17 +88,20 @@ get_KV() {
# Try and set a font as early as we can
ttydev=${CONSOLE:-/dev/tty1}
-if [ -c "${ttydev}" ] ; then
- ttydev="-C ${ttydev}"
-else
- [ -c /dev/vc/1 ] && ttydev="-C /dev/vc/1" || ttydev=
+if [ ! -c "${ttydev}" ] ; then
+ [ -c /dev/vc/1 ] && ttydev="/dev/vc/1" || ttydev=
fi
[ -r "${RC_LIBDIR}"/console/font ] \
- && /bin/setfont ${ttydev} "${RC_LIBDIR}"/console/font
+ && /bin/setfont ${ttydev:+-C} ${ttydev} "${RC_LIBDIR}"/console/font
[ -r "${RC_LIBDIR}"/console/map ] \
- && /bin/setfont ${ttydev} -m "${RC_LIBDIR}"/console/map
+ && /bin/setfont ${ttydev:+-C} ${ttydev} -m "${RC_LIBDIR}"/console/map
[ -r "${RC_LIBDIR}"/console/unimap ] \
- && /bin/setfont ${ttydev} -u "${RC_LIBDIR}"/console/unimap
+ && /bin/setfont ${ttydev:+-C} ${ttydev} -u "${RC_LIBDIR}"/console/unimap
+if [ -e "${RC_LIBDIR}"/console/unicode ] ; then
+ eval printf "\033%%G" ${ttydev:+>} ${ttydev}
+else
+ eval printf "\033(K" ${ttydev:+>} ${ttydev}
+fi
unset ttydev
. /etc/init.d/functions.sh
diff --git a/sh/functions.sh b/sh/functions.sh
index 48505c5e..99c937e1 100644
--- a/sh/functions.sh
+++ b/sh/functions.sh
@@ -144,14 +144,7 @@ for arg in "$@" ; do
done
if [ "${RC_NOCOLOR}" != "yes" -a -z "${GOOD}" ] ; then
- if color_terminal ; then
- GOOD=${EINFO_GOOD:-$'\e[32;01m'}
- WARN=${EINFO_WARN:-$'\e[33;01m'}
- BAD=${EINFO_BAD:-$'\e[31;01m'}
- HILITE=${EINFO_HILITE:-$'\e[36;01m'}
- BRACKET=${EINFO_BRACKET:-$'\e[34;01m'}
- NORMAL=$'\e[0m'
- fi
+ eval $(eval_ecolors)
fi
# vim: set ts=4 :
diff --git a/src/Makefile b/src/Makefile
index a2691bca..e255f193 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -38,7 +38,7 @@ SYS_WHITELIST = env_whitelist
TARGET = $(LIB_TARGETS) $(BIN_TARGETS) $(SBIN_TARGETS) $(PRIV_BIN_TARGETS)
RCLINKS = einfon einfo ewarnn ewarn eerrorn eerror ebegin eend ewend \
- eindent eoutdent eflush color_terminal \
+ eindent eoutdent eflush eval_ecolors \
veinfo vewarn vebegin veend vewend veindent veoutdent \
service_starting service_inactive service_started \
service_stopping service_stopped \
diff --git a/src/einfo.h b/src/einfo.h
index 29f831a2..a99af240 100644
--- a/src/einfo.h
+++ b/src/einfo.h
@@ -18,30 +18,14 @@
typedef enum
{
- einfo_good,
- einfo_warn,
- einfo_bad,
- einfo_hilite,
- einfo_bracket,
- einfo_normal
+ ecolor_good,
+ ecolor_warn,
+ ecolor_bad,
+ ecolor_hilite,
+ ecolor_bracket,
+ ecolor_normal
} einfo_color_t;
-/* Colour codes used by the below functions. */
-#define EINFO_GOOD "\033[32;01m"
-#define EINFO_WARN "\033[33;01m"
-#define EINFO_BAD "\033[31;01m"
-#define EINFO_HILITE "\033[36;01m"
-#define EINFO_BRACKET "\033[34;01m"
-#define EINFO_NORMAL "\033[0m"
-
-/* Handy macros to easily use the above in a custom manner */
-#define PEINFO_GOOD if (colour_terminal ()) printf (EINFO_GOOD)
-#define PEINFO_WARN if (colour_terminal ()) printf (EINFO_WARN)
-#define PEINFO_BAD if (colour_terminal ()) printf (EINFO_BAD)
-#define PEINFO_HILITE if (colour_terminal ()) printf (EINFO_HILITE)
-#define PEINFO_BRACKET if (colour_terminal ()) printf (EINFO_BRACKET)
-#define PEINFO_NORMAL if (colour_terminal ()) printf (EINFO_NORMAL)
-
/* We work out if the terminal supports colour or not through the use
of the TERM env var. We cache the reslt in a static bool, so
subsequent calls are very fast.
@@ -51,7 +35,7 @@ typedef enum
in the future, but veinfo is used by shell scripts as they don't
have the va_list concept
*/
-bool colour_terminal (void);
+const char *ecolor (einfo_color_t);
int einfon (const char *fmt, ...) EINFO_PRINTF (1, 2);
int ewarnn (const char *fmt, ...) EINFO_PRINTF (1, 2);
int eerrorn (const char *fmt, ...) EINFO_PRINTF (1, 2);
diff --git a/src/libeinfo.c b/src/libeinfo.c
index a4f5825c..8c7671da 100644
--- a/src/libeinfo.c
+++ b/src/libeinfo.c
@@ -22,7 +22,7 @@
#include "rc-misc.h"
#include "hidden-visibility.h"
-hidden_proto(colour_terminal)
+hidden_proto(ecolor)
hidden_proto(ebegin)
hidden_proto(ebeginv)
hidden_proto(ebracket)
@@ -48,26 +48,35 @@ hidden_proto(ewarnx)
hidden_proto(ewend)
hidden_proto(ewendv)
-/* Incase we cannot work out how many columns from ioctl, supply a default */
+ /* Incase we cannot work out how many columns from ioctl, supply a default */
#define DEFAULT_COLS 80
-#define OK "ok"
-#define NOT_OK "!!"
+#define OK "ok"
+#define NOT_OK "!!"
#define CHECK_VERBOSE if (! is_env ("RC_VERBOSE", "yes")) return 0
-/* Number of spaces for an indent */
+ /* Number of spaces for an indent */
#define INDENT_WIDTH 2
-/* How wide can the indent go? */
-#define INDENT_MAX 40
+ /* How wide can the indent go? */
+#define INDENT_MAX 40
#define EBUFFER_LOCK RC_SVCDIR "ebuffer/.lock"
+/* Default colours */
+#define ECOLOR_GOOD "\033[32;01m"
+#define ECOLOR_WARN "\033[33;01m"
+#define ECOLOR_BAD "\033[31;01m"
+#define ECOLOR_HILITE "\033[36;01m"
+#define ECOLOR_BRACKET "\033[34;01m"
+#define ECOLOR_NORMAL "\033[0m"
+#define ECOLOR_FLUSH "\033[K"
+
/* A cheat sheet of colour capable terminals
This is taken from DIR_COLORS from GNU coreutils
We embed it here as we shouldn't depend on coreutils */
-static const char *colour_terms[] = {
+static const char *color_terms[] = {
"Eterm",
"ansi",
"color-xterm",
@@ -123,7 +132,7 @@ static bool is_env (const char *var, const char *val)
return (strcasecmp (v, val) ? false : true);
}
-bool colour_terminal (void)
+static bool colour_terminal (void)
{
static int in_colour = -1;
int i = 0;
@@ -139,8 +148,8 @@ bool colour_terminal (void)
if (! term)
return (true);
- while (colour_terms[i]) {
- if (strcmp (colour_terms[i], term) == 0) {
+ while (color_terms[i]) {
+ if (strcmp (color_terms[i], term) == 0) {
in_colour = 1;
return (true);
}
@@ -150,7 +159,6 @@ bool colour_terminal (void)
in_colour = 0;
return (false);
}
-hidden_def(colour_terminal)
static int get_term_columns (void)
{
@@ -397,43 +405,44 @@ static int _eindent (FILE *stream)
return (fprintf (stream, "%s", indent));
}
-static const char *ecolor (einfo_color_t color) {
+const char *ecolor (einfo_color_t color) {
const char *col = NULL;
+
+ if (! colour_terminal ())
+ return ("");
switch (color) {
- case einfo_good:
- if (! (col = getenv ("EINFO_GOOD")))
- col = EINFO_GOOD;
+ case ecolor_good:
+ if (! (col = getenv ("ECOLOR_GOOD")))
+ col = ECOLOR_GOOD;
break;
- case einfo_warn:
- if (! (col = getenv ("EINFO_WARN")))
- col = EINFO_WARN;
+ case ecolor_warn:
+ if (! (col = getenv ("ECOLOR_WARN")))
+ col = ECOLOR_WARN;
break;
- case einfo_bad:
- if (! (col = getenv ("EINFO_BAD")))
- col = EINFO_BAD;
+ case ecolor_bad:
+ if (! (col = getenv ("ECOLOR_BAD")))
+ col = ECOLOR_BAD;
break;
- case einfo_hilite:
- if (! (col = getenv ("EINFO_HILITE")))
- col = EINFO_HILITE;
+ case ecolor_hilite:
+ if (! (col = getenv ("ECOLOR_HILITE")))
+ col = ECOLOR_HILITE;
break;
- case einfo_bracket:
- if (! (col = getenv ("EINFO_BRACKET")))
- col = EINFO_BRACKET;
+ case ecolor_bracket:
+ if (! (col = getenv ("ECOLOR_BRACKET")))
+ col = ECOLOR_BRACKET;
break;
- case einfo_normal:
- col = EINFO_NORMAL;
+ case ecolor_normal:
+ col = ECOLOR_NORMAL;
break;
}
return (col);
}
+hidden_def(ecolor)
#define EINFOVN(_file, _color) \
- if (colour_terminal ()) \
-fprintf (_file, " %s*%s ", ecolor (_color), ecolor (einfo_normal)); \
-else \
-fprintf (_file, " * "); \
+fprintf (_file, " %s*%s ", ecolor (_color), ecolor (ecolor_normal)); \
retval += _eindent (_file); \
{ \
va_list _ap; \
@@ -442,13 +451,13 @@ retval += _eindent (_file); \
va_end (_ap); \
} \
if (colour_terminal ()) \
-fprintf (_file, "\033[K");
+fprintf (_file, ECOLOR_FLUSH);
static int _einfovn (const char *fmt, va_list ap)
{
int retval = 0;
- EINFOVN (stdout, einfo_good);
+ EINFOVN (stdout, ecolor_good);
return (retval);
}
@@ -456,7 +465,7 @@ static int _ewarnvn (const char *fmt, va_list ap)
{
int retval = 0;
- EINFOVN (stdout, einfo_warn);
+ EINFOVN (stdout, ecolor_warn);
return (retval);
}
@@ -464,7 +473,7 @@ static int _eerrorvn (const char *fmt, va_list ap)
{
int retval = 0;
- EINFOVN (stderr, einfo_bad);
+ EINFOVN (stderr, ecolor_bad);
return (retval);
}
@@ -637,15 +646,15 @@ static void _eend (int col, einfo_color_t color, const char *msg)
if (! msg)
return;
- if (color == einfo_bad)
+ if (color == ecolor_bad)
fp = stderr;
cols = get_term_columns () - (strlen (msg) + 6);
if (cols > 0 && colour_terminal ()) {
fprintf (fp, "\033[A\033[%dC %s[ %s%s %s]%s\n", cols,
- ecolor (einfo_bracket), ecolor (color), msg,
- ecolor (einfo_bracket), ecolor (einfo_normal));
+ ecolor (ecolor_bracket), ecolor (color), msg,
+ ecolor (ecolor_bracket), ecolor (ecolor_normal));
} else {
for (i = -1; i < cols - col; i++)
fprintf (fp, " ");
@@ -682,7 +691,9 @@ static int _do_eend (const char *cmd, int retval, const char *fmt, va_list ap)
fprintf (fp, "\n");
}
- _eend (col, retval == 0 ? einfo_good : einfo_bad, retval == 0 ? OK : NOT_OK);
+ _eend (col,
+ retval == 0 ? ecolor_good : ecolor_bad,
+ retval == 0 ? OK : NOT_OK);
return (retval);
}
diff --git a/src/rc-status.c b/src/rc-status.c
index 76dedce9..2cf4ed0c 100644
--- a/src/rc-status.c
+++ b/src/rc-status.c
@@ -18,34 +18,34 @@
static void print_level (char *level)
{
- printf ("Runlevel: ");
- PEINFO_HILITE;
- printf ("%s\n", level);
- PEINFO_NORMAL;
+ printf ("Runlevel: %s%s%s\n",
+ ecolor (ecolor_hilite),
+ level,
+ ecolor (ecolor_normal));
}
static void print_service (char *service)
{
char status[10];
int cols = printf (" %s\n", service);
- einfo_color_t color = einfo_bad;
+ einfo_color_t color = ecolor_bad;
if (rc_service_state (service, rc_service_stopping))
snprintf (status, sizeof (status), "stopping ");
else if (rc_service_state (service, rc_service_starting)) {
snprintf (status, sizeof (status), "starting ");
- color = einfo_warn;
+ color = ecolor_warn;
} else if (rc_service_state (service, rc_service_inactive)) {
snprintf (status, sizeof (status), "inactive ");
- color = einfo_warn;
+ color = ecolor_warn;
} else if (geteuid () == 0 && rc_service_state (service, rc_service_crashed))
snprintf (status, sizeof (status), " crashed ");
else if (rc_service_state (service, rc_service_started)) {
snprintf (status, sizeof (status), " started ");
- color = einfo_good;
+ color = ecolor_good;
} else if (rc_service_state (service, rc_service_scheduled)) {
snprintf (status, sizeof (status), "scheduled");
- color = einfo_warn;
+ color = ecolor_warn;
} else
snprintf (status, sizeof (status), " stopped ");
ebracket (cols, color, status);
diff --git a/src/rc.c b/src/rc.c
index b5465d67..4a583ad8 100644
--- a/src/rc.c
+++ b/src/rc.c
@@ -33,17 +33,17 @@
#include "rc-plugin.h"
#include "strlist.h"
-#define INITSH RC_LIBDIR "sh/init.sh"
-#define HALTSH RC_INITDIR "halt.sh"
+#define INITSH RC_LIBDIR "sh/init.sh"
+#define HALTSH RC_INITDIR "halt.sh"
-#define RC_SVCDIR_STARTING RC_SVCDIR "starting/"
-#define RC_SVCDIR_INACTIVE RC_SVCDIR "inactive/"
-#define RC_SVCDIR_STARTED RC_SVCDIR "started/"
+#define RC_SVCDIR_STARTING RC_SVCDIR "starting/"
+#define RC_SVCDIR_INACTIVE RC_SVCDIR "inactive/"
+#define RC_SVCDIR_STARTED RC_SVCDIR "started/"
#define RC_SVCDIR_COLDPLUGGED RC_SVCDIR "coldplugged/"
-#define INTERACTIVE RC_SVCDIR "interactive"
+#define INTERACTIVE RC_SVCDIR "interactive"
-#define DEVBOOT "/dev/.rcboot"
+#define DEVBOOT "/dev/.rcboot"
/* Cleanup anything in main */
#define CHAR_FREE(_item) if (_item) { \
@@ -114,6 +114,17 @@ static int do_e (int argc, char **argv)
char *p;
char *fmt = NULL;
+ if (strcmp (applet, "eval_ecolors") == 0) {
+ printf ("GOOD='%s'\nWARN='%s'\nBAD='%s'\nHILITE='%s'\nBRACKET='%s'\nNORMAL='%s'\n",
+ ecolor (ecolor_good),
+ ecolor (ecolor_warn),
+ ecolor (ecolor_bad),
+ ecolor (ecolor_hilite),
+ ecolor (ecolor_bracket),
+ ecolor (ecolor_normal));
+ exit (EXIT_SUCCESS);
+ }
+
if (strcmp (applet, "eend") == 0 ||
strcmp (applet, "ewend") == 0 ||
strcmp (applet, "veend") == 0 ||
@@ -497,8 +508,6 @@ int main (int argc, char **argv)
exit (rc_runlevel_starting () ? 0 : 1);
else if (strcmp (applet, "is_runlevel_stop") == 0)
exit (rc_runlevel_stopping () ? 0 : 1);
- else if (strcmp (applet, "color_terminal") == 0)
- exit (colour_terminal () ? 0 : 1);
if (strcmp (applet, "rc" ) != 0)
eerrorx ("%s: unknown applet", applet);
@@ -578,19 +587,14 @@ int main (int argc, char **argv)
uname (&uts);
printf ("\n");
- PEINFO_GOOD;
- printf (" Gentoo/%s; ", uts.sysname);
- PEINFO_BRACKET;
- printf ("http://www.gentoo.org/");
- PEINFO_NORMAL;
- printf ("\n Copyright 1999-2007 Gentoo Foundation; "
- "Distributed under the GPLv2\n\n");
-
- printf ("Press ");
- PEINFO_GOOD;
- printf ("I");
- PEINFO_NORMAL;
- printf (" to enter interactive boot mode\n\n");
+ printf (" %sGentoo/%s; %shttp://www.gentoo.org/%s"
+ "\n Copyright 1999-2007 Gentoo Foundation; "
+ "Distributed under the GPLv2\n\n",
+ ecolor (ecolor_good), uts.sysname, ecolor (ecolor_bracket),
+ ecolor (ecolor_normal));
+
+ printf ("Press %sI%s to enter interactive boot mode\n\n",
+ ecolor (ecolor_good), ecolor (ecolor_normal));
setenv ("RC_SOFTLEVEL", newlevel, 1);
rc_plugin_run (rc_hook_runlevel_start_in, newlevel);