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; | |||||
} | |||||