| 1 | <?php header("Content-Type: text/html; charset=utf-8"); ?> |
|---|
| 2 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" |
|---|
| 3 | "http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd"> |
|---|
| 4 | |
|---|
| 5 | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> |
|---|
| 6 | |
|---|
| 7 | <head> |
|---|
| 8 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
|---|
| 9 | <meta name="GENERATOR" content="vim" /> |
|---|
| 10 | <meta name="Author" content="sam@zoy.org (Sam Hocevar)" /> |
|---|
| 11 | <meta name="Description" content="libcaca - Colour AsCii Art library" /> |
|---|
| 12 | <meta name="Keywords" content="libcaca, ASCII, ASCII ART, console, text mode, ncurses, slang, AAlib" /> |
|---|
| 13 | <title>libcaca - Colour AsCii Art library</title> |
|---|
| 14 | <link rel="icon" type="image/x-icon" href="/favicon.ico" /> |
|---|
| 15 | <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" /> |
|---|
| 16 | <link rel="stylesheet" type="text/css" href="/main.css" /> |
|---|
| 17 | </head> |
|---|
| 18 | |
|---|
| 19 | <body> |
|---|
| 20 | |
|---|
| 21 | <?php include($_SERVER["DOCUMENT_ROOT"]."/header.inc"); ?> |
|---|
| 22 | |
|---|
| 23 | <img src="logo-caca.png" width="128" height="128" |
|---|
| 24 | alt="libcaca logo" class="caca" /> |
|---|
| 25 | |
|---|
| 26 | <h2> Introduction </h2> |
|---|
| 27 | |
|---|
| 28 | <p> <i>libcaca</i> is a graphics library that outputs text instead of pixels, |
|---|
| 29 | so that it can work on older video cards or text terminals. It is not unlike |
|---|
| 30 | the famous <a href="http://aa-project.sourceforge.net/aalib/">AAlib</a> |
|---|
| 31 | library, with the following improvements: </p> |
|---|
| 32 | |
|---|
| 33 | <ul> |
|---|
| 34 | <li> Unicode support </li> |
|---|
| 35 | <li> 2048 available colours (some devices can only handle 16) </li> |
|---|
| 36 | <li> dithering of colour images </li> |
|---|
| 37 | <li> advanced text canvas operations (blitting, rotations) </li> |
|---|
| 38 | </ul> |
|---|
| 39 | |
|---|
| 40 | <p> Libcaca works in a text terminal (and should thus work on all Unix |
|---|
| 41 | systems including Mac OS X) using the S-Lang or ncurses libraries. It also |
|---|
| 42 | works natively on DOS and Windows. </p> |
|---|
| 43 | |
|---|
| 44 | <p> Libcaca was written by Sam Hocevar <<a |
|---|
| 45 | href="mailto:sam@zoy.org">sam@zoy.org</a>> and Jean-Yves Lamoureux |
|---|
| 46 | <<a href="mailto:jylam@lnxscene.org">jylam@lnxscene.org</a>>. It is |
|---|
| 47 | <a href="http://www.gnu.org/philosophy/free-sw.html">free software</a>, |
|---|
| 48 | and can be used, modified and distributed under the terms of the <a |
|---|
| 49 | href="http://sam.zoy.org/wtfpl/">Do What The Fuck You Want To Public |
|---|
| 50 | License</a>. </p> |
|---|
| 51 | |
|---|
| 52 | <h2> News </h2> |
|---|
| 53 | |
|---|
| 54 | <p> <b>30 Sep 2007</b>: libcaca 0.99.beta12 </p> |
|---|
| 55 | <p> <b>16 Nov 2006</b>: libcaca 0.99.beta11 </p> |
|---|
| 56 | <p> <b>16 Nov 2006</b>: <a href="/toilet.html">TOIlet</a> 0.1 </p> |
|---|
| 57 | <p> <b>12 Nov 2006</b>: libcaca 0.99.beta10 </p> |
|---|
| 58 | <p> <b>6 Nov 2006</b>: libcaca 0.99.beta9 </p> |
|---|
| 59 | <p> <b>22 Oct 2006</b>: libcaca 0.99.beta8 </p> |
|---|
| 60 | <!-- old news |
|---|
| 61 | <p> <b>4 Oct 2006</b>: libcaca 0.99.beta7 </p> |
|---|
| 62 | --> |
|---|
| 63 | |
|---|
| 64 | <h2> Screenshots </h2> |
|---|
| 65 | |
|---|
| 66 | <p> Here are a few <i>libcaca</i> screenshots. </p> |
|---|
| 67 | |
|---|
| 68 | <table cellspacing="5" border="0"> |
|---|
| 69 | <tr> |
|---|
| 70 | <td align="center"> |
|---|
| 71 | <a href="img/stitch-80x45.png"><img alt="cacaview" |
|---|
| 72 | width="73" height="90" |
|---|
| 73 | src="img/tn-stitch-80x45.jpeg" /></a> |
|---|
| 74 | <br /><small><code>cacaview</code></small> |
|---|
| 75 | </td> |
|---|
| 76 | <td align="center"> |
|---|
| 77 | <a href="img/cacaball-80x50.png"><img alt="cacaball" |
|---|
| 78 | width="101" height="90" |
|---|
| 79 | src="img/tn-cacaball-80x50.jpeg" /></a> |
|---|
| 80 | <br /><small><code>cacaball</code></small> |
|---|
| 81 | </td> |
|---|
| 82 | <td align="center"> |
|---|
| 83 | <a href="img/cacaplas-80x50.png"><img alt="cacaplas" |
|---|
| 84 | width="101" height="90" |
|---|
| 85 | src="img/tn-cacaplas-80x50.jpeg" /></a> |
|---|
| 86 | <br /><small><code>cacaplas</code></small> |
|---|
| 87 | </td> |
|---|
| 88 | <td align="center"> |
|---|
| 89 | <a href="img/truecolor-32x16.png"><img alt="truecolor" |
|---|
| 90 | width="87" height="90" |
|---|
| 91 | src="img/tn-truecolor-32x16.jpeg" /></a> |
|---|
| 92 | <br /><small>TrueColor</small> |
|---|
| 93 | </td> |
|---|
| 94 | <td align="center"> |
|---|
| 95 | <a href="img/unicode-80x24.png"><img alt="unicode" |
|---|
| 96 | width="120" height="75" |
|---|
| 97 | src="img/tn-unicode-80x24.jpeg" /></a> |
|---|
| 98 | <br /><small>Unicode</small> |
|---|
| 99 | </td> |
|---|
| 100 | </tr> |
|---|
| 101 | <tr> |
|---|
| 102 | <td align="center"> |
|---|
| 103 | <a href="img/swallow-80x32.png"><img alt="swallow" |
|---|
| 104 | width="120" height="81" |
|---|
| 105 | src="img/tn-swallow-80x32.jpeg" /></a> |
|---|
| 106 | <br /><small>swallowing applications</small> |
|---|
| 107 | </td> |
|---|
| 108 | <td align="center"> |
|---|
| 109 | <a href="img/rotate.png"><img alt="rotation" |
|---|
| 110 | width="120" height="81" |
|---|
| 111 | src="img/tn-rotate.jpeg" /></a> |
|---|
| 112 | <br /><small>canvas rotation</small> |
|---|
| 113 | </td> |
|---|
| 114 | </tr> |
|---|
| 115 | </table> |
|---|
| 116 | |
|---|
| 117 | <p> See also the various export formats, generated from an old |
|---|
| 118 | <a href="lc-mw1.ans">ANSI file</a>: |
|---|
| 119 | <a href="export.png">PNG</a> (through TGA), |
|---|
| 120 | <a href="export.html">HTML</a>, |
|---|
| 121 | <a href="export.svg">SVG</a>, |
|---|
| 122 | <a href="export.ps">PostScript</a>. |
|---|
| 123 | </p> |
|---|
| 124 | |
|---|
| 125 | <!-- |
|---|
| 126 | <p> Here are my first libcaca attempts. The first image is, |
|---|
| 127 | <code>cacaview</code>, the libcaca image viewer. Then, two |
|---|
| 128 | screenshots of my first port of an application to libcaca: the <a |
|---|
| 129 | href="http://www.videolan.org/vlc/">VLC</a> media player. The last |
|---|
| 130 | screenshots are from <code>cacafire</code> (the libcaca port of aafire) and |
|---|
| 131 | <code>cacaball</code> (a mini metaballs demo). </p> |
|---|
| 132 | |
|---|
| 133 | <table cellspacing="5" border="0"> |
|---|
| 134 | <tr> |
|---|
| 135 | <td align="center"> |
|---|
| 136 | <a href="caca-stitch.png"><img alt="cacaview" |
|---|
| 137 | width="78" height="90" |
|---|
| 138 | src="tn-caca-stitch.jpeg" /><br /><code>cacaview</code></a> |
|---|
| 139 | </td> |
|---|
| 140 | <td align="center"> |
|---|
| 141 | <a href="caca-vlc.png"><img alt="VLC playing the Matrix: Revolutions" |
|---|
| 142 | width="120" height="74" |
|---|
| 143 | src="tn-caca-vlc.jpeg" /><br />VLC media player</a> |
|---|
| 144 | </td> |
|---|
| 145 | <td align="center"> |
|---|
| 146 | <a href="caca-vlc3.png"><img alt="VLC playing a Dolby trailer" |
|---|
| 147 | width="120" height="74" |
|---|
| 148 | src="tn-caca-vlc3.jpeg" /><br />VLC media player</a> |
|---|
| 149 | </td> |
|---|
| 150 | <td align="center"> |
|---|
| 151 | <a href="caca-fire.png"><img alt="cacafire" |
|---|
| 152 | width="120" height="87" |
|---|
| 153 | src="tn-caca-fire.jpeg" /><br /><code>cacafire</code></a> |
|---|
| 154 | </td> |
|---|
| 155 | <td align="center"> |
|---|
| 156 | <a href="caca-ball.png"><img alt="cacaball" |
|---|
| 157 | width="104" height="90" |
|---|
| 158 | src="tn-caca-ball.jpeg" /><br /><code>cacaball</code></a> |
|---|
| 159 | </td> |
|---|
| 160 | </tr> |
|---|
| 161 | </table> |
|---|
| 162 | |
|---|
| 163 | <p> As with all image processing applications, I needed the obligatory <a |
|---|
| 164 | href="http://www-2.cs.cmu.edu/~chuck/lennapg/">Lenna</a> samples. From |
|---|
| 165 | left to right: the currently in development Floyd-Steinberg dithering, the |
|---|
| 166 | antialiasing introduced in libcaca 0.5, the new renderer in libcaca 0.2, no |
|---|
| 167 | dithering, ordered dithering, random dithering. </p> |
|---|
| 168 | |
|---|
| 169 | <table cellspacing="5" border="0"> |
|---|
| 170 | <tr> |
|---|
| 171 | <td align="center"> |
|---|
| 172 | <a href="lenna-fs.png"><img alt="Lenna (Floyd-Steinberg)" |
|---|
| 173 | width="87" height="90" |
|---|
| 174 | src="tn-lenna-fs.jpeg" /><br />Floyd-Steinberg</a> |
|---|
| 175 | </td> |
|---|
| 176 | <td align="center"> |
|---|
| 177 | <a href="lenna-antialias.png"><img alt="Lenna (antialiased)" |
|---|
| 178 | width="97" height="90" |
|---|
| 179 | src="tn-lenna-antialias.jpeg" /><br />antialiasing</a> |
|---|
| 180 | </td> |
|---|
| 181 | <td align="center"> |
|---|
| 182 | <a href="lenna-new.png"><img alt="Lenna (new renderer)" |
|---|
| 183 | width="99" height="90" |
|---|
| 184 | src="tn-lenna-new.jpeg" /><br />new renderer</a> |
|---|
| 185 | </td> |
|---|
| 186 | <td align="center"> |
|---|
| 187 | <a href="lenna-nodither.png"><img alt="Lenna (no dithering)" |
|---|
| 188 | width="99" height="90" |
|---|
| 189 | src="tn-lenna-nodither.jpeg" /><br />no dithering</a> |
|---|
| 190 | </td> |
|---|
| 191 | <td align="center"> |
|---|
| 192 | <a href="lenna-ordered.png"><img alt="Lenna (ordered dithering)" |
|---|
| 193 | width="99" height="90" |
|---|
| 194 | src="tn-lenna-ordered.jpeg" /><br />ordered dithering</a> |
|---|
| 195 | </td> |
|---|
| 196 | <td align="center"> |
|---|
| 197 | <a href="lenna-random.png"><img alt="Lenna (random dithering)" |
|---|
| 198 | width="99" height="90" |
|---|
| 199 | src="tn-lenna-random.jpeg" /><br />random dithering</a> |
|---|
| 200 | </td> |
|---|
| 201 | </tr> |
|---|
| 202 | </table> |
|---|
| 203 | |
|---|
| 204 | <p> Here are a few examples of my libcaca patch for libSDL. Once there is a |
|---|
| 205 | libcaca backend for <a href="http://www.libsdl.org">libSDL</a>, any program |
|---|
| 206 | using SDL can automatically benefit from libcaca’s rendering routines. These |
|---|
| 207 | examples show <a href="http://www.frozen-bubble.org/">Frozen Bubble</a>, the |
|---|
| 208 | <a href="http://sabre.cobite.com/">SABRE</a> flight simulator, and the famous |
|---|
| 209 | <a href="http://www.idsoftware.com/games/doom/">Doom</a>. Frozen Bubble is |
|---|
| 210 | fully playable, but SABRE and Doom aren’t much due to the Ctrl and Shift keys |
|---|
| 211 | not being recognized (see the TODO list about that). </p> |
|---|
| 212 | |
|---|
| 213 | <table cellspacing="5" border="0"> |
|---|
| 214 | <tr> |
|---|
| 215 | <td align="center"> |
|---|
| 216 | <a href="caca-fb.png"><img alt="ASCII art Frozen Bubble" |
|---|
| 217 | width="120" height="90" |
|---|
| 218 | src="tn-caca-fb.jpeg" /><br />Frozen Bubble</a> |
|---|
| 219 | </td> |
|---|
| 220 | <td align="center"> |
|---|
| 221 | <a href="caca-sabre.png"><img alt="the SABRE flight simulator" |
|---|
| 222 | width="120" height="90" |
|---|
| 223 | src="tn-caca-sabre.jpeg" /><br />SABRE</a> |
|---|
| 224 | </td> |
|---|
| 225 | <td align="center"> |
|---|
| 226 | <a href="caca-doom.png"><img alt="the Doom splash screen in ASCII art" |
|---|
| 227 | width="120" height="90" |
|---|
| 228 | src="tn-caca-doom.jpeg" /><br />Doom splash screen</a> |
|---|
| 229 | </td> |
|---|
| 230 | <td align="center"> |
|---|
| 231 | <a href="caca-doom2.png"><img alt="Doom in ASCII art" |
|---|
| 232 | width="120" height="90" |
|---|
| 233 | src="tn-caca-doom2.jpeg" /><br />first Doom level</a> |
|---|
| 234 | </td> |
|---|
| 235 | </tr> |
|---|
| 236 | </table> |
|---|
| 237 | |
|---|
| 238 | <h2> Download libcaca </h2> |
|---|
| 239 | |
|---|
| 240 | <p> libcaca is already in the Debian sid distribution. Debian woody users or |
|---|
| 241 | sid users in a hurry may use one of the following apt sources: (sorry, sarge |
|---|
| 242 | is not supported yet) </p> |
|---|
| 243 | |
|---|
| 244 | <table class="leftmenu" cellspacing="5" cellpadding="0"> |
|---|
| 245 | <tr> |
|---|
| 246 | <td class="nowrap" valign="top"> |
|---|
| 247 | <code> |
|---|
| 248 | deb http://sam.zoy.org/projects/debian woody main<br /> |
|---|
| 249 | deb-src http://sam.zoy.org/projects/debian woody main<br /> |
|---|
| 250 | <br /> |
|---|
| 251 | deb http://sam.zoy.org/projects/debian sid main<br /> |
|---|
| 252 | deb-src http://sam.zoy.org/projects/debian sid main<br /> |
|---|
| 253 | </code> |
|---|
| 254 | </td> |
|---|
| 255 | </tr> |
|---|
| 256 | </table> |
|---|
| 257 | |
|---|
| 258 | <p> Users of RPM-based distributions (Red Hat, Fedora, Mandrake) may find RPM |
|---|
| 259 | packages on the <a href="http://yarrow.freshrpms.net/rpm.html?id=552">Fresh |
|---|
| 260 | RPMs</a> page. If no package is available, you are encouraged |
|---|
| 261 | to build packages for your system using this SRPM (<a |
|---|
| 262 | href="libcaca-0.9-1.src.rpm">libcaca-0.9-1.src.rpm</a>, 176KB) and this simple |
|---|
| 263 | command line: </p> |
|---|
| 264 | |
|---|
| 265 | <table class="leftmenu" cellspacing="5" cellpadding="0"> |
|---|
| 266 | <tr> |
|---|
| 267 | <td class="nowrap" valign="top"> |
|---|
| 268 | <code>rpm -<!>-rebuild libcaca-0.9-1.src.rpm</code> |
|---|
| 269 | </td> |
|---|
| 270 | </tr> |
|---|
| 271 | </table> |
|---|
| 272 | |
|---|
| 273 | <p> BSD users should see the <a |
|---|
| 274 | href="http://www.netbsd.org/packages/graphics/libcaca/README.html">NetBSD port |
|---|
| 275 | page</a> and the <a href="http://www.freshports.org/graphics/libcaca/">FreeBSD |
|---|
| 276 | port page</a> (I am not aware of an OpenBSD port yet, but <a |
|---|
| 277 | href="http://news.gw.com/openbsd.ports/15502">this email</a> has |
|---|
| 278 | information on it), Gentoo users may find information on the <a |
|---|
| 279 | href="http://gentoo-portage.com/browse-program.php?program=6273">Gentoo |
|---|
| 280 | portage</a> and Slackware users have a package on <a |
|---|
| 281 | href="http://www.linuxpackages.net/pkg_details.php?id=2144">linuxpackages.net</a>. |
|---|
| 282 | </p> |
|---|
| 283 | |
|---|
| 284 | <h2> Patch for libSDL </h2> |
|---|
| 285 | |
|---|
| 286 | <p> This simple patch was quickly hacked from the AAlib video |
|---|
| 287 | driver. Apply it to the libSDL sources and configuree libSDL with |
|---|
| 288 | <code>-<!>-enable-video-caca</code>. Then use the <code>SDL_VIDEODRIVER</code> |
|---|
| 289 | environment variable to run your SDL programs with libcaca output, for |
|---|
| 290 | instance Frozen Bubble: </p> |
|---|
| 291 | |
|---|
| 292 | <table class="leftmenu" cellspacing="5" cellpadding="0"> |
|---|
| 293 | <tr> |
|---|
| 294 | <td class="nowrap" valign="top"> |
|---|
| 295 | <code>SDL_VIDEODRIVER=caca frozen-bubble</code> |
|---|
| 296 | </td> |
|---|
| 297 | </tr> |
|---|
| 298 | </table> |
|---|
| 299 | |
|---|
| 300 | <p> Download <a href="patch-libsdl1.2-libcaca0.7.diff">patch-libsdl1.2-libcaca0.7.diff</a> (to be used with the Debian unstable SDL sources and libcaca 0.7. </p> |
|---|
| 301 | |
|---|
| 302 | <h2> Patches for VLC, xine, mplayer... </h2> |
|---|
| 303 | |
|---|
| 304 | <p> The libcaca patch for the <a href="http://www.videolan.org/vlc/">VLC</a> |
|---|
| 305 | media player was already applied upstream. Check the CVS version. </p> |
|---|
| 306 | |
|---|
| 307 | <p> There is a work in progress for <a href="http://xine.sf.net/">xine</a> |
|---|
| 308 | called cacaxine (see <a href="http://sourceforge.net/mailarchive/forum.php?thread_id=3605187&forum_id=7131">this email</a>). Zeeshan Ali wrote a |
|---|
| 309 | <a href="http://gstreamer.sf.net/">GStreamer</a> plugin. I am not |
|---|
| 310 | aware of an <a href="http://mplayerhq.hu/">MPlayer</a> patch yet (but you |
|---|
| 311 | should not be using MPlayer anyway, because it sucks). </p> |
|---|
| 312 | |
|---|
| 313 | <h2> Development </h2> |
|---|
| 314 | |
|---|
| 315 | --> |
|---|
| 316 | |
|---|
| 317 | <h2> Why? </h2> |
|---|
| 318 | |
|---|
| 319 | <blockquote><p> |
|---|
| 320 | Que dites-vous ?... C’est inutile ?... Je le sais ! |
|---|
| 321 | <br />Mais on ne se bat pas dans l’espoir du succès ! |
|---|
| 322 | <br />Non ! non, c’est bien plus beau lorsque c’est inutile ! |
|---|
| 323 | <br /><small> -- Edmond Rostand, <i>Cyrano de Bergerac</i> </small> |
|---|
| 324 | </p></blockquote> |
|---|
| 325 | |
|---|
| 326 | <p> I am perfectly aware that <i>libcaca</i> is the waste of time it looks to |
|---|
| 327 | be. No need to tell me about that. I urge you to read Théophile Gautier’s |
|---|
| 328 | preface to <i>Mademoiselle de Maupin</i>, which also gives an excellent |
|---|
| 329 | explanation for the name “libcaca”: </p> |
|---|
| 330 | |
|---|
| 331 | <blockquote><p> |
|---|
| 332 | Il n’y a rien de vraiment beau que ce qui ne peut servir à rien ; tout ce |
|---|
| 333 | qui est utile est laid ; car c’est l’expression de quelque besoin ; et ceux |
|---|
| 334 | de l’homme sont ignobles et dégoûtants, comme sa pauvre et infirme nature. - |
|---|
| 335 | L’endroit le plus utile d’une maison, ce sont les latrines. |
|---|
| 336 | </p></blockquote> |
|---|
| 337 | |
|---|
| 338 | <p> As for the name “libcucul”, please refer to the pioneer of modernist |
|---|
| 339 | Polish fiction: </p> |
|---|
| 340 | |
|---|
| 341 | <blockquote><p> |
|---|
| 342 | Mais contre le cucul, il n’y a pas de refuge. Courez après moi |
|---|
| 343 | si vous voulez, je m’enfuis la gueule entre les mains. Et voilà, |
|---|
| 344 | tralala, Zut à celui qui le lira ! |
|---|
| 345 | <br /><small> -- Witold Gombrowicz, <i>Ferdydurke</i> </small> |
|---|
| 346 | </p></blockquote> |
|---|
| 347 | |
|---|
| 348 | <?php $rev = '$Id$'; |
|---|
| 349 | include($_SERVER['DOCUMENT_ROOT'].'/footer.inc'); ?> |
|---|
| 350 | |
|---|
| 351 | </body> |
|---|
| 352 | </html> |
|---|