diff --git a/colors/Makefile b/colors/Makefile new file mode 100644 index 0000000..6a9d61b --- /dev/null +++ b/colors/Makefile @@ -0,0 +1,18 @@ + +PRGNAM := colors +CC := gcc +CFLAGS := -O2 -g + +bindir := /usr/bin + +all: $(PRGNAM) + +$(PRGNAM): $(PRGNAM).c + $(CC) $(CFLAGS) -DHAVE_STATE -o $@ $< + +install: $(PRGNAM) + install -D -m 0755 -s $(PRGNAM) $(DESTDIR)$(bindir)/$(PRGNAM) + +clean: + rm -rf $(PRGNAM) *.o *~ + diff --git a/colors/colors.c b/colors/colors.c new file mode 100644 index 0000000..bc73078 --- /dev/null +++ b/colors/colors.c @@ -0,0 +1,94 @@ +/* + + Copyright 2011 Vincent Batts, Vienna, VA, USA + All rights reserved. + + Redistribution and use of this source, with or without modification, is + permitted provided that the following conditions are met: + + 1. Redistributions of this source must retain the above copyright + notice, this list of conditions and the following disclaimer. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''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 AUTHOR 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. + + */ + +#include +#include +#include +#include + +const int WRAP = 20; + +const char* FG_ESCAPE = "\x1b[38;5;"; +const char* BG_ESCAPE = "\x1b[48;5;"; +const char* CLEAR = "\x1b[0m"; + +// Color Tone: +// We set it up here so others can use it. +// 0 is black, so we'll steer from that. +int tone = 0; + +void set_escape_clear() +{ + printf("%s", CLEAR); +} + +void set_escape_color(int color) +{ + // "\x1b[38;5;123m" + printf("%s%dm", FG_ESCAPE, color); +} + +void cleanup(int sig) +{ + set_escape_clear(); + signal(sig, SIG_DFL); +} + +int main() +{ + int count = 0; + int i; + + // This way we won't leave a painted mess behind ourselves :) + // FIXME: SIGPIPE is not doing as it should :( + signal( SIGINT, cleanup); + signal( SIGPIPE, cleanup); + signal( SIGQUIT, cleanup); + signal( SIGHUP, cleanup); + signal( SIGABRT, cleanup); + signal( SIGCHLD, cleanup); + signal( SIGUSR1, cleanup); + signal( SIGUSR2, cleanup); + + for (i = 0; i < 256; i++) + { + set_escape_color(tone); + + printf("%4.3d", tone); + + tone++; + count++; + if (count == WRAP) + { + printf("\n"); + count = 0 ; + } + + } + + set_escape_clear(); + printf("\n"); + + return 0; +}