瀏覽代碼

* Powerpipo proof of concept. Needs the SVN version of TOIlet, but will

eventually be standalone.


git-svn-id: file:///srv/caca.zoy.org/var/lib/svn/powerpipo/trunk@1818 92316355-f0b4-4df1-b90c-862c8a59935f
master
sam 17 年之前
父節點
當前提交
09b93e0265
共有 11 個文件被更改,包括 357 次插入0 次删除
  1. +1
    -0
      AUTHORS
  2. +14
    -0
      COPYING
  3. +0
    -0
      ChangeLog
  4. +7
    -0
      Makefile.am
  5. +0
    -0
      NEWS
  6. +0
    -0
      README
  7. +1
    -0
      TODO
  8. +124
    -0
      bootstrap
  9. +43
    -0
      configure.ac
  10. +7
    -0
      src/Makefile.am
  11. +160
    -0
      src/main.c

+ 1
- 0
AUTHORS 查看文件

@@ -0,0 +1 @@
Sam Hocevar <sam@zoy.org>

+ 14
- 0
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.


+ 0
- 0
ChangeLog 查看文件


+ 7
- 0
Makefile.am 查看文件

@@ -0,0 +1,7 @@

SUBDIRS = src
DIST_SUBDIRS = $(SUBDIRS)

EXTRA_DIST = bootstrap
AUTOMAKE_OPTIONS = foreign dist-bzip2


+ 0
- 0
NEWS 查看文件


+ 0
- 0
README 查看文件


+ 1
- 0
TODO 查看文件

@@ -0,0 +1 @@
* Almost everything

+ 124
- 0
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 <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


+ 43
- 0
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
])


+ 7
- 0
src/Makefile.am 查看文件

@@ -0,0 +1,7 @@

bin_PROGRAMS = powerpipo

powerpipo_SOURCES = main.c
powerpipo_CFLAGS = @CACA_CFLAGS@
powerpipo_LDADD = @CACA_LIBS@


+ 160
- 0
src/main.c 查看文件

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


Loading…
取消
儲存