diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..f5bde17 --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +Sam Hocevar diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..cb33446 --- /dev/null +++ b/COPYING @@ -0,0 +1,14 @@ + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar + 22 rue de Plaisance, 75014 Paris, France + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. + diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..e69de29 diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..ac21647 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,7 @@ + +SUBDIRS = src +DIST_SUBDIRS = $(SUBDIRS) + +EXTRA_DIST = bootstrap +AUTOMAKE_OPTIONS = foreign dist-bzip2 + diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..e69de29 diff --git a/README b/README new file mode 100644 index 0000000..e69de29 diff --git a/TODO b/TODO new file mode 100644 index 0000000..0addc54 --- /dev/null +++ b/TODO @@ -0,0 +1 @@ + * Almost everything \ No newline at end of file diff --git a/bootstrap b/bootstrap new file mode 100755 index 0000000..87deb20 --- /dev/null +++ b/bootstrap @@ -0,0 +1,124 @@ +#! /bin/sh + +# bootstrap: the ultimate bootstrap/autogen.sh script for autotools projects +# Copyright (c) 2002, 2003, 2004, 2005, 2006 Sam Hocevar +# +# This program is free software. It comes without any warranty, to +# the extent permitted by applicable law. You can redistribute it +# and/or modify it under the terms of the Do What The Fuck You Want +# To Public License, Version 2, as published by Sam Hocevar. See +# http://sam.zoy.org/wtfpl/COPYING for more details. +# +# The latest version of this script can be found at the following place: +# http://sam.zoy.org/autotools/ + +# Die if an error occurs +set -e + +# Guess whether we are using configure.ac or configure.in +if test -f configure.ac; then + conffile="configure.ac" +elif test -f configure.in; then + conffile="configure.in" +else + echo "$0: could not find configure.ac or configure.in" + exit 1 +fi + +# Check for needed features +auxdir="`sed -ne 's/^[ \t]*A._CONFIG_AUX_DIR *([\[ ]*\([^\] )]*\).*/\1/p' $conffile`" +libtool="`grep -q '^[ \t]*A._PROG_LIBTOOL' $conffile && echo yes || echo no`" +header="`grep -q '^[ \t]*A._CONFIG_HEADER' $conffile && echo yes || echo no`" +aclocalflags="`sed -ne 's/^[ \t]*ACLOCAL_AMFLAGS[ \t]*=//p' Makefile.am`" + +# Check for automake +amvers="no" +for v in "-1.10" "110" "-1.9" "19" "-1.8" "18" "-1.7" "17" "-1.6" "16" "-1.5" "15"; do + if automake${v} --version >/dev/null 2>&1; then + amvers="${v}" + break + fi +done + +if test "${amvers}" = "no" && automake --version > /dev/null 2>&1; then + amvers="`automake --version | sed -e '1s/[^0-9]*//' -e q`" + if expr "$amvers" "<" "1.5" > /dev/null 2>&1; then + amvers="no" + else + amvers="" + fi +fi + +if test "$amvers" = "no"; then + echo "$0: you need automake version 1.5 or later" + exit 1 +fi + +# Check for autoconf +acvers="no" +for v in "" "259" "253"; do + if autoconf${v} --version >/dev/null 2>&1; then + acvers="${v}" + break + fi +done + +if test "$acvers" = "no"; then + echo "$0: you need autoconf" + exit 1 +fi + +# Check for libtool +if test "$libtool" = "yes"; then + libtoolize="no" + if glibtoolize --version >/dev/null 2>&1; then + libtoolize="glibtoolize" + else + for v in "16" "15" "" "14"; do + if libtoolize${v} --version >/dev/null 2>&1; then + libtoolize="libtoolize${v}" + break + fi + done + fi + + if test "$libtoolize" = "no"; then + echo "$0: you need libtool" + exit 1 + fi +fi + +# Remove old cruft +for x in aclocal.m4 configure config.guess config.log config.sub config.cache config.h.in config.h compile libtool.m4 ltoptions.m4 ltsugar.m4 ltversion.m4 ltmain.sh libtool ltconfig missing mkinstalldirs depcomp install-sh; do rm -f $x autotools/$x; if test -n "$auxdir"; then rm -f "$auxdir/$x"; fi; done +rm -Rf autom4te.cache +if test -n "$auxdir"; then + if test ! -d "$auxdir"; then + mkdir "$auxdir" + fi + aclocalflags="${aclocalflags} -I $auxdir -I ." +fi + +# Explain what we are doing from now +set -x + +# Bootstrap package +if test "$libtool" = "yes"; then + ${libtoolize} --copy --force + if test -n "$auxdir" -a ! "$auxdir" = "." -a -f "ltmain.sh"; then + echo "$0: working around a minor libtool issue" + mv ltmain.sh "$auxdir/" + fi +fi + +aclocal${amvers} ${aclocalflags} +autoconf${acvers} +if test "$header" = "yes"; then + autoheader${acvers} +fi +#add --include-deps if you want to bootstrap with any other compiler than gcc +#automake${amvers} --add-missing --copy --include-deps +automake${amvers} --foreign --add-missing --copy + +# Remove cruft that we no longer want +rm -Rf autom4te.cache + diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..4d89aaa --- /dev/null +++ b/configure.ac @@ -0,0 +1,43 @@ +# $Id: configure.ac 98 2006-09-22 16:27:37Z sam $ + +AC_INIT(powerpipo, 0.0) + +AC_PREREQ(2.50) +AC_CONFIG_SRCDIR(src/main.c) +AC_CONFIG_AUX_DIR(autotools) +AC_CANONICAL_SYSTEM + +AM_INIT_AUTOMAKE(powerpipo, 0.0) +AM_CONFIG_HEADER(config.h) + +AM_PROG_CC_C_O +AC_PROG_CPP + +dnl AC_PROG_EGREP only exists in autoconf 2.54+, so we use AC_EGREP_CPP right +dnl now otherwise it might be set in an obscure if statement. Same thing for +dnl PKG_PROG_PKG_CONFIG which needs to be called first. +AC_EGREP_CPP(yes, foo) +PKG_PROG_PKG_CONFIG() + +dnl Don't let pkg-config fuck our cross-compilation environment +m4_pattern_allow([^PKG_CONFIG_LIBDIR$]) +if test "$build" != "$host" -a "${PKG_CONFIG_LIBDIR}" = ""; then + export PKG_CONFIG_LIBDIR=/dev/null +fi + +CACA="no" +PKG_CHECK_MODULES(CACA, caca >= 0.99.beta9, + [CACA="yes"], + [AC_MSG_RESULT(no) + AC_MSG_ERROR([you need libcaca version 0.99.beta9 or later])]) + +# Optimizations +CFLAGS="${CFLAGS} -g -O2 -fno-strength-reduce -fomit-frame-pointer" +# Code qui fait des warnings == code de porc == deux baffes dans ta gueule +CFLAGS="${CFLAGS} -Wall -Wpointer-arith -Wcast-align -Wcast-qual -Wstrict-prototypes -Wshadow -Waggregate-return -Wmissing-prototypes -Wnested-externs -Wsign-compare" + +AC_OUTPUT([ + Makefile + src/Makefile +]) + diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..7727f7d --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,7 @@ + +bin_PROGRAMS = powerpipo + +powerpipo_SOURCES = main.c +powerpipo_CFLAGS = @CACA_CFLAGS@ +powerpipo_LDADD = @CACA_LIBS@ + diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..d664ea6 --- /dev/null +++ b/src/main.c @@ -0,0 +1,160 @@ +/* + * powerpipo business presentation software + * Copyright (c) 2007 Sam Hocevar + * All Rights Reserved + * + * $Id$ + * + * This program is free software. It comes without any warranty, to + * the extent permitted by applicable law. You can redistribute it + * and/or modify it under the terms of the Do What The Fuck You Want + * To Public License, Version 2, as published by Sam Hocevar. See + * http://sam.zoy.org/wtfpl/COPYING for more details. + */ + +#include "config.h" + +#include + +#include +#include + +static void do_page(cucul_canvas_t *, int); +static void runtoilet(cucul_canvas_t *, char const *, char const *); + +int main(int argc, char *argv[]) +{ + caca_display_t *dp; + cucul_canvas_t *cv; + int page = 0, npages = 10, changed = 1; + + cv = cucul_create_canvas(0, 0); + + dp = caca_create_display(cv); + if(!dp) + return 1; + + caca_set_display_time(dp, 20000); + caca_set_display_title(dp, "PowerPIPO presentation tool"); + + for(;;) + { + caca_event_t ev; + + /* Handle events */ + while(caca_get_event(dp, CACA_EVENT_KEY_PRESS + | CACA_EVENT_QUIT, &ev, 10000)) + { + if(ev.type == CACA_EVENT_QUIT) + goto end; + switch(ev.data.key.ch) + { + case CACA_KEY_ESCAPE: + goto end; + break; + case ' ': + case CACA_KEY_PAGEDOWN: + page++; + if(page > npages - 1) + page = npages - 1; + changed = 1; + break; + case CACA_KEY_PAGEUP: + page--; + if(page < 0) + page = 0; + changed = 1; + break; + } + } + + if(changed) + { + do_page(cv, page); + caca_refresh_display(dp); + changed = 0; + } + } + + end: + caca_free_display(dp); + cucul_free_canvas(cv); + + return 0; +} + +static void do_page(cucul_canvas_t *cv, int page) +{ + char str[BUFSIZ]; + cucul_canvas_t *tmp; + + cucul_clear_canvas(cv); + tmp = cucul_create_canvas(0, 0); + + if(page < 1) goto end; + sprintf(str, "\x1b[33;93m» \x1b[37;97mEfficient presentations"); + runtoilet(tmp, "-f smmono12", str); + cucul_blit(cv, 4, 0, tmp, NULL); + + if(page < 2) goto end; + sprintf(str, "\x1b[32;92m» \x1b[37;97mWhy text mode?"); + runtoilet(tmp, "-f smmono9", str); + cucul_blit(cv, 11, 9, tmp, NULL); + + if(page < 3) goto end; + sprintf(str, "\x1b[32;92m» \x1b[37;97mExample: \x1b[34mp\x1b[35mo\x1b[36mw\x1b[32me\x1b[31mr\x1b[34mp\x1b[35mi\x1b[36mp\x1b[32mo\x1b[37m™"); + runtoilet(tmp, "-f smmono9", str); + cucul_blit(cv, 11, 16, tmp, NULL); + + if(page < 4) goto end; + sprintf(str, "\x1b[33;93m» \x1b[37;97mAdvanced stuff"); + runtoilet(tmp, "-f smmono12", str); + cucul_blit(cv, 4, 24, tmp, NULL); + + if(page < 5) goto end; + sprintf(str, "\x1b[32;92m» \x1b[37;97mTransition effects"); + runtoilet(tmp, "-f smmono9", str); + cucul_blit(cv, 11, 34, tmp, NULL); + + if(page < 6) goto end; + sprintf(str, "\x1b[32;92m» \x1b[37;97mColor filters"); + runtoilet(tmp, "-f smmono9 --gay", str); + cucul_blit(cv, 11, 41, tmp, NULL); + + if(page < 7) goto end; + sprintf(str, "\x1b[32;92m» \x1b[37;97mPictures and movies"); + runtoilet(tmp, "-f smmono9", str); + cucul_blit(cv, 11, 48, tmp, NULL); + + if(page < 8) goto end; + sprintf(str, "\x1b[32;92m» \x1b[37;97mEmbedded applications"); + runtoilet(tmp, "-f smmono9", str); + cucul_blit(cv, 11, 55, tmp, NULL); + +end: + cucul_printf(cv, 0, 0, "page %i", page); +} + +/* Warning: quotes are not safe */ +static void runtoilet(cucul_canvas_t *cv, char const *options, char const *str) +{ + char buf[BUFSIZ], cmd[BUFSIZ]; + FILE *f; + int ret; + + cucul_set_canvas_size(cv, 0, 0); + + sprintf(cmd, "toilet -w 1000 %s '%s'", options, str); + f = popen(cmd, "r"); + if(!f) + return; + ret = fread(buf, 1, BUFSIZ, f); + fclose(f); + if(ret <= 0) + return; + + ret = cucul_import_memory(cv, buf, ret, "utf8"); + if(ret <= 0) + return; +} +