eventually be standalone. git-svn-id: file:///srv/caca.zoy.org/var/lib/svn/powerpipo/trunk@1818 92316355-f0b4-4df1-b90c-862c8a59935fmaster
| @@ -0,0 +1 @@ | |||||
| Sam Hocevar <sam@zoy.org> | |||||
| @@ -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. | |||||
| @@ -0,0 +1,7 @@ | |||||
| SUBDIRS = src | |||||
| DIST_SUBDIRS = $(SUBDIRS) | |||||
| EXTRA_DIST = bootstrap | |||||
| AUTOMAKE_OPTIONS = foreign dist-bzip2 | |||||
| @@ -0,0 +1 @@ | |||||
| * Almost everything | |||||
| @@ -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 <sam@zoy.org> | |||||
| # | |||||
| # 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 | |||||
| @@ -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 | |||||
| ]) | |||||
| @@ -0,0 +1,7 @@ | |||||
| bin_PROGRAMS = powerpipo | |||||
| powerpipo_SOURCES = main.c | |||||
| powerpipo_CFLAGS = @CACA_CFLAGS@ | |||||
| powerpipo_LDADD = @CACA_LIBS@ | |||||
| @@ -0,0 +1,160 @@ | |||||
| /* | |||||
| * powerpipo business presentation software | |||||
| * Copyright (c) 2007 Sam Hocevar <sam@zoy.org> | |||||
| * 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 <stdio.h> | |||||
| #include <cucul.h> | |||||
| #include <caca.h> | |||||
| 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; | |||||
| } | |||||