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