aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--COPYING2
-rw-r--r--CREDITS16
-rw-r--r--README.md21
-rw-r--r--ponysaytruncater.c198
4 files changed, 116 insertions, 121 deletions
diff --git a/COPYING b/COPYING
index 9dbbef9..c749fa1 100644
--- a/COPYING
+++ b/COPYING
@@ -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
diff --git a/CREDITS b/CREDITS
new file mode 100644
index 0000000..9367855
--- /dev/null
+++ b/CREDITS
@@ -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
diff --git a/README.md b/README.md
index 95c160d..0bc5f6f 100644
--- a/README.md
+++ b/README.md
@@ -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;
}
-