diff options
-rw-r--r-- | COPYING | 2 | ||||
-rw-r--r-- | CREDITS | 16 | ||||
-rw-r--r-- | README.md | 21 | ||||
-rw-r--r-- | ponysaytruncater.c | 198 |
4 files changed, 116 insertions, 121 deletions
@@ -1,7 +1,7 @@ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE Version 2, December 2004 - Copyright (C) 2012 Sven-Hendrik Haase, Jan Alexander Steffens and Erkin Batu Altunbaş + Copyright (C) 2012 Erkin Batu Altunbaş Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long @@ -0,0 +1,16 @@ +# Pretty much all the contributors in alphabetic order. + +# Active developers +Erkin Batu Altunbaş +Jan Alexander Steffens +Mattias Andrée +Sven-Hendrik Haase + +# Patchers and other contributors +Duane Bekaert +Elis +James Ross-Gowan +Jannis +Kyah Rindlisbacher +Louis Taylor +Pablo Lezaeta @@ -1,22 +1,23 @@ -`ponysay` - A cowsay wrapper with ponies. +`ponysay` - A cowsay wrapper for ponies. ![Derp](http://i.imgur.com/xOJbE.png) + Today your terminal, tomorrow the world! Installation on Linux (or other Unix) ------------------------------------- -If you do not already have `cowsay` you will need to install it +First of all, you need `cowsay` from your local repositories. +Obtain it from [here](http://www.nog.net/~tony/warez/cowsay.shtml) if you wish to compile it yourself. - apt-get install cowsay # assuming dpkg +[Download](https://github.com/erkin/ponysay/downloads) or clone the project. +In the terminal, `cd` into the ponysay directory and `make install`. -[Download](https://github.com/erkin/ponysay/downloads) the latest project. In the terminal, `cd` into the ponysay directory and run - - sudo make +This will install ponysay into the $PREFIX (`/usr` by default, meaning you may need to make as root). -This will install ponysay into the $PREFIX (`/usr` by default). In order to use ponysay, run +In order to use ponysay, run: - ponysay "I am just the cutest pony" + ponysay "I am just the cutest pony!" Or if you have a specific pony in your mind: @@ -24,9 +25,7 @@ Or if you have a specific pony in your mind: ### Pony fortune on terminal startup -This requires that you have the `fortune` utility installed - - apt-get install fortune +This requires that you have the `fortune` utility installed. You can install it from your repositories or just fetch the source code from [here](ftp://ftp.ibiblio.org/pub/linux/games/amusements/fortune/). You can try [this](http://www.reddit.com/r/mylittlelinux/comments/srixi/using_ponysay_with_a_ponified_fortune_warning/) script to ponify fortunes. diff --git a/ponysaytruncater.c b/ponysaytruncater.c index 9c7191e..a89b1e0 100644 --- a/ponysaytruncater.c +++ b/ponysaytruncater.c @@ -1,58 +1,37 @@ -/** - * ponysaytruncater — Output truncater used by ponysay to stop large ponies from being printed badly. +/* ponysaytruncater + * Output truncater used by ponysay to stop + * large ponies from being printed badly. * - * DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + * Licensed under WTFPL * See COPYING for details */ #include <stdio.h> - - #define String char* #define boolean char - #define true 1 #define false 0 - - -/** - * Stdin file descriptor ID - */ +/* Stdin file descriptor ID */ #define STDIN 0 - - -/** - * The number of columns on the current line - */ +/* The number of columns on the current line */ static int x = 0; -/** - * Escape sequence state - */ +/* Escape sequence state */ static int esc = 0; -/** - * Last bytes as written - */ +/* Last bytes as written */ static boolean ok = true; - - - void write(char b, int width); int toInt(String string); - -/** - * <p>Mane method!</p> - * <p> +/* Mane method! * The only argument, in addition to the executed file, * should be the width of the terminal which you get by * adding <code>`tput cols || echo 0`</code> as and argument. - * </p> - * + * * @param argc The number of startup arguments * @param argv The startup arguments, the first is the file itself * @@ -60,115 +39,116 @@ int toInt(String string); */ void main(int argc, String* argv) { - int width = 0; - if (argc > 1) - width = toInt(*(argv + 1)); - - char b = 0; - - if (width > 15) //sanity - while (read(STDIN, &b, 1)) - write(b, width); - else - while (read(STDIN, &b, 1)) - printf("%c", b); + int width = 0; + if (argc > 1) + width = toInt(*(argv + 1)); + + char b = 0; + + if (width > 15) /* sanity */ + while (read(STDIN, &b, 1)) + write(b, width); + else + while (read(STDIN, &b, 1)) + printf("%c", b); } - -/** - * Writes a character to stdout, iff it fits within the terminal +/* Writes a character to stdout, iff it fits within the terminal * * @param b The character (byte) to write * @param width The width of the terminal */ void write(char b, int width) { - int i; - char nx; - - if (esc == 0) + int i; + char nx; + + if (esc == 0) { - if (b == '\n') + if (b == '\n') { - if (x >= width) + if (x >= width) { - // Reset background colour - write('\e', width); - write('[', width); - write('4', width); - write('9', width); - write('m', width); + /* Reset background colour */ + write('\e', width); + write('[', width); + write('4', width); + write('9', width); + write('m', width); } - x = -1; + x = -1; } - else if (b == '\t') + else if (b == '\t') { - // Tab to next pos ≡₈ 0 - nx = 8 - (x & 7); - for (i = 0; i < nx; i++) - write(' ', width); - return; //(!) + /* Tab to next pos ≡₈ 0 */ + nx = 8 - (x & 7); + for (i = 0; i < nx; i++) + write(' ', width); + return; /* (!) */ } - else if (b == '\e') - esc = 1; + else if (b == '\e') + esc = 1; } - else if (esc == 1) + else if (esc == 1) { - if (b == '[') esc = 2; //CSI ends with a letter, m is for colour - else if (b == ']') esc = 3; //OSI, OSI P is for palett editing in Linux VT - else esc = 10; //Nothing to see here, move along + /* CSI ends with a letter, m is for colour + OSI, OSI P is for palett editing in Linux VT */ + if (b == '[') esc = 2; + else if (b == ']') esc = 3; + else esc = 10; /* Nothing to see here, move along */ } - else if (esc == 2) + else if (esc == 2) { - if ((('a' <= b) && (b <= 'z')) || (('A' <= b) && (b <= 'Z'))) - esc = 10; + if ((('a' <= b) && (b <= 'z')) || (('A' <= b) && (b <= 'Z'))) + esc = 10; } - else if ((esc == 3) && (b == 'P')) + else if ((esc == 3) && (b == 'P')) { - esc = ~0; + esc = ~0; } - else if (esc < 0) + else if (esc < 0) { - esc--; - if (esc == ~7) - esc = 10; + esc--; + if (esc == ~7) + esc = 10; } - else - esc = 10; - - if ( // Can be printed: - (x < width) || // within bounds ∨ - (esc != 0) || // ∨ escape sequence ∨ - (ok && ((b & 0xC0) == 0x80))) // ∨ last with printed ∧ not first byte in character + else + esc = 10; + + if ( + /* Can be printed: + within bounds ∨ + ∨ escape sequence ∨ + ∨ last with printed ∧ not first byte in character */ + (x < width) || + (esc != 0) || + (ok && ((b & 0xC0) == 0x80))) { - printf("%c", b); - if ((esc == 0) && ((b & 0xC0) != 0x80)) // Count up columns of not in escape sequnce and - x++; // the byte is not the first byte in the character - ok = true; + printf("%c", b); + if ((esc == 0) && ((b & 0xC0) != 0x80)) + /* Count up columns of not in escape sequnce and */ + x++; /* the byte is not the first byte in the character */ + ok = true; } - else - ok = false; - - if (esc == 10) - esc = 0; + else + ok = false; + + if (esc == 10) + esc = 0; } - -/** - * Converts a string to an integer - * +/* Converts a string to an integer * @param string The string to convert * @return The integer represented by the string */ int toInt(String string) { - int rc = 0; - String str = string; - char c = 0; - - while ((c = *str++) != 0) - rc = (rc << 1) + (rc << 3) - (c & 15); - - return -rc; + int rc = 0; + String str = string; + char c = 0; + + while ((c = *str++) != 0) + rc = (rc << 1) + (rc << 3) - (c & 15); + + return -rc; } - |