Compare commits

...

3 Commits

Author SHA1 Message Date
377c3b02b7 more fuzzed fixes 2024-03-30 20:10:41 -04:00
6aa1219f2e remove binary 2024-03-27 21:42:10 -04:00
d6a0e3d742 the implementation begins 2024-03-27 21:41:34 -04:00
147 changed files with 1658 additions and 353 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
.DS_Store
./cowsay

17
cows/MechAndCow.cow Normal file
View File

@ -0,0 +1,17 @@
## OFFSET 10
$thoughts ,-----.
$thoughts | |
$thoughts ,--| |-.
__,----| | | |
,;:: | `_____' |
`._______| i^i |
`----| |---'| .
,-------._| |== ||//
| |_|P`. /'/
`-------' 'Y Y/'/'
.==\ /_\
^__^ / /'| `i
($eyes)\_______ /' / | |
(__)\ )\/\ /' / | `i
$tongue ||----w | ___,;`----'.___L_,-'`\__
|| || i_____;----\.____i""\____\

20
cows/TuxStab.cow Normal file
View File

@ -0,0 +1,20 @@
## OFFSET 8
$thoughts , ,
$thoughts /( )`
$thoughts \ \___ / |
/- _ `-/ '
(/\/ \ \ /\
/ / | ` \
O O ) / |
`-^--'`< '
.--. (_.) _ ) /
|o_o | `.___/` /
|:_/ | `-----' /
//<- \ \----. __ / __ \
(| <- | )---|====O)))==) \) /====
/'\ <- _/`\---' `--' `.__,' \
\___)=(___/ | |
\ /
______( (_ / \______
,' ,-----' | \
`--\{__________) \/

View File

@ -1,10 +1,9 @@
##
## Beavis, with Zen philosophy removed.
##
$the_cow = <<EOC;
$thoughts __------~~-,
$thoughts ,' ,
/ \\
/ \
/ :
| '
| |
@ -12,12 +11,11 @@ $the_cow = <<EOC;
| _-- |
_| =-. .-. ||
o|/o/ _. |
/ ~ \\ |
(____\@) ___~ |
/ ~ \ |
(____@) ___~ |
|_===~~~.` |
_______.--~ |
\\________ |
\\ |
\________ |
\ |
__/-___-- -__
/ _ \\
EOC
/ _ \

View File

@ -1,29 +1,26 @@
##
## Blowfish
##
$the_cow = <<EOC;
$thoughts
$thoughts
| .
. |L /|
_ . |\\ _| \\--+._/| .
/ ||\\| Y J ) / |/| ./
_ . |\ _| \--+._/| .
/ ||\| Y J ) / |/| ./
J |)'( | ` F`.'/
-<| F __ .-<
| / .-'. `. /-. L___
J \\ < \\ | | O\\|.-'
_J \\ .- \\/ O | | \\ |F
'-F -<_. \\ .-' `-' L__
J \ < \ | | O\|.-'
_J \ .- \/ O | | \ |F
'-F -<_. \ .-' `-' L__
__J _ _. >-' )._. |-'
`-|.' /_. \\_| F
`-|.' /_. \_| F
/.- . _.<
/' /.' .' `\\
/L /' |/ _.-'-\\
/'J ___.---'\\|
|\\ .--' V | `. `
/' /.' .' `\
/L /' |/ _.-'-\
/'J ___.---'\|
|\ .--' V | `. `
|/`. `-. `._)
/ .-.\\
VK \\ ( `\\
`.\\
EOC
/ .-.\
VK \ ( `\
`.\

View File

@ -1,16 +1,14 @@
##
## A cow with a bong, from lars@csua.berkeley.edu
##
$the_cow = <<EOC;
$thoughts
$thoughts
^__^
_______/($eyes)
/\\/( /(__)
/\/( /(__)
| W----|| |~|
|| || |~| ~~
|~| ~
|_| o
|#|/
_+#+_
EOC

View File

@ -1,12 +1,10 @@
##
## The Budweiser frogs
##
$the_cow = <<EOC;
$thoughts
$thoughts
oO)-. .-(Oo
/__ _\\ /_ __\\
\\ \\( | ()~() | )/ /
\\__|\\ | (-___-) | /|__/
/__ _\ /_ __\
\ \( | ()~() | )/ /
\__|\ | (-___-) | /|__/
' '--' ==`-'== '--' '
EOC

View File

@ -1,10 +1,8 @@
##
## A cute little wabbit
##
$the_cow = <<EOC;
$thoughts
$thoughts \\
\\ /\\
$thoughts \
\ /\
( )
.( o ).
EOC

View File

@ -1,23 +1,21 @@
##
## The cheese from milk & cheese
##
$the_cow = <<EOC;
$thoughts
$thoughts
_____ _________
/ \\_/ |
/ \_/ |
| ||
| ||
| ###\\ /### | |
| 0 \\/ 0 | |
| ###\ /### | |
| 0 \/ 0 | |
/| | |
/ | < |\\ \\
/ | < |\ \
| /| | | |
| | \\_______/ | | |
| | \_______/ | | |
| | | / /
/|| /|||
----------------|
| | | |
*** ***
/___\\ /___\\
EOC
/___\ /___\

View File

@ -1,14 +1,12 @@
##
## A cowering cow
##
$the_cow = <<EOC;
$thoughts
$thoughts
,__, | |
(oo)\\| |___
(__)\\| | )\\_
| |_w | \\
(oo)\| |___
(__)\| | )\_
| |_w | \
| | || *
Cower....
EOC

View File

@ -1,24 +1,22 @@
##
## 4.4 >> 5.4
##
$the_cow = <<EOC;
$thoughts , ,
$thoughts /( )`
$thoughts \\ \\___ / |
$thoughts \ \___ / |
/- _ `-/ '
(/\\/ \\ \\ /\\
/ / | ` \\
(/\/ \ \ /\
/ / | ` \
O O ) / |
`-^--'`< '
(_.) _ ) /
`.___/` /
`-----' /
<----. __ / __ \\
<----|====O)))==) \\) /====
<----' `--' `.__,' \\
<----. __ / __ \
<----|====O)))==) \) /====
<----' `--' `.__,' \
| |
\\ /
______( (_ / \\______
,' ,-----' | \\
`--{__________) \\/
EOC
\ /
______( (_ / \______
,' ,-----' | \
`--{__________) \/

View File

@ -1,7 +1,8 @@
$the_cow = <<"EOC";
##
## The default cow
##
$thoughts ^__^
$thoughts ($eyes)\\_______
(__)\\ )\\/\\
$thoughts ($eyes)\_______
(__)\ )\/\
$tongue ||----w |
|| ||
EOC

View File

@ -1,21 +1,20 @@
##
## A dragon smiting a cow, possible credit to kube@csua.berkeley.edu
##
$the_cow = <<EOC;
## OFFSET 16
$thoughts ^ /^
$thoughts / \\ // \\
$thoughts |\\___/| / \\// .\\
$thoughts /O O \\__ / // | \\ \\ *----*
/ / \\/_/ // | \\ \\ \\ |
\@___\@` \\/_ // | \\ \\ \\/\\ \\
0/0/| \\/_ // | \\ \\ \\ \\
0/0/0/0/| \\/// | \\ \\ | |
0/0/0/0/0/_|_ / ( // | \\ _\\ | /
0/0/0/0/0/0/`/,_ _ _/ ) ; -. | _ _\\.-~ / /
$thoughts / \ // \
$thoughts |\___/| / \// .\
$thoughts /O O \__ / // | \ \ *----*
/ / \/_/ // | \ \ \ |
@___@` \/_ // | \ \ \/\ \
0/0/| \/_ // | \ \ \ \
0/0/0/0/| \/// | \ \ | |
0/0/0/0/0/_|_ / ( // | \ _\ | /
0/0/0/0/0/0/`/,_ _ _/ ) ; -. | _ _\.-~ / /
,-} _ *-.|.-~-. .~ ~
\\ \\__/ `/\\ / ~-. _ .-~ /
\\____($eyes) *. } { /
( (--) .----~-.\\ \\-` .~
//__\\\\ \\__ Ack! ///.----..< \\ _ -~
// \\\\ ///-._ _ _ _ _ _ _{^ - - - - ~
EOC
\ \__/ `/\ / ~-. _ .-~ /
\____($eyes) *. } { /
( (--) .----~-.\ \-` .~
//__\\ \__ Ack! ///.----..< \ _ -~
// \\ ///-._ _ _ _ _ _ _{^ - - - - ~

View File

@ -1,21 +1,19 @@
##
## The Whitespace Dragon
##
$the_cow = <<EOC;
$thoughts / \\ //\\
$thoughts |\\___/| / \\// \\\\
/0 0 \\__ / // | \\ \\
/ / \\/_/ // | \\ \\
\@_^_\@'/ \\/_ // | \\ \\
//_^_/ \\/_ // | \\ \\
( //) | \\/// | \\ \\
( / /) _|_ / ) // | \\ _\\
( // /) '/,_ _ _/ ( ; -. | _ _\\.-~ .-~~~^-.
$thoughts / \ //\
$thoughts |\___/| / \// \\
/0 0 \__ / // | \ \
/ / \/_/ // | \ \
@_^_@'/ \/_ // | \ \
//_^_/ \/_ // | \ \
( //) | \/// | \ \
( / /) _|_ / ) // | \ _\
( // /) '/,_ _ _/ ( ; -. | _ _\.-~ .-~~~^-.
(( / / )) ,-{ _ `-.|.-~-. .~ `.
(( // / )) '/\\ / ~-. _ .-~ .-~^-. \\
(( /// )) `. { } / \\ \\
(( / )) .----~-.\\ \\-' .~ \\ `. \\^-.
///.----..> \\ _ -~ `. ^-` ^-_
(( // / )) '/\ / ~-. _ .-~ .-~^-. \
(( /// )) `. { } / \ \
(( / )) .----~-.\ \-' .~ \ `. \^-.
///.----..> \ _ -~ `. ^-` ^-_
///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~
/.-~
EOC

View File

@ -1,7 +1,6 @@
##
## Do we need to explain this?
##
$the_cow = <<EOC;
$thoughts
$thoughts ....
........ .
@ -11,4 +10,3 @@ $the_cow = <<EOC;
..............................
Elephant inside ASCII snake
EOC

View File

@ -1,15 +1,13 @@
##
## An elephant out and about
##
$the_cow = <<EOC;
$thoughts /\\ ___ /\\
$thoughts // \\/ \\/ \\\\
$thoughts /\ ___ /\
$thoughts // \/ \/ \\
(( O O ))
\\\\ / \\ //
\\/ | | \\/
\\ / \ //
\/ | | \/
| | | |
| | | |
| o |
| | | |
|m| |m|
EOC

View File

@ -1,16 +1,14 @@
##
## Evil-looking eyes
##
$the_cow = <<EOC;
$thoughts
$thoughts
.::!!!!!!!:.
.!!!!!:. .:!!!!!!!!!!!!
~~~~!!!!!!. .:!!!!!!!!!UWWW\$\$\$
:\$\$NWX!!: .:!!!!!!XUWW\$\$\$\$\$\$\$\$\$P
\$\$\$\$\$##WX!: .<!!!!UW\$\$\$\$" \$\$\$\$\$\$\$\$#
\$\$\$\$\$ \$\$\$UX :!!UW\$\$\$\$\$\$\$\$\$ 4\$\$\$\$\$*
^\$\$\$B \$\$\$\$\\ \$\$\$\$\$\$\$\$\$\$\$\$ d\$\$R"
"*\$bd\$\$\$\$ '*\$\$\$\$\$\$\$\$\$\$\$o+#"
~~~~!!!!!!. .:!!!!!!!!!UWWW$$$
:$$NWX!!: .:!!!!!!XUWW$$$$$$$$$P
$$$$$##WX!: .<!!!!UW$$$$" $$$$$$$$#
$$$$$ $$$UX :!!UW$$$$$$$$$ 4$$$$$*
^$$$B $$$$\ $$$$$$$$$$$$ d$$R"
"*$bd$$$$ '*$$$$$$$$$$$o+#"
"""" """""""
EOC

View File

@ -1,15 +1,13 @@
##
## The flaming sheep, contributed by Geordan Rosario (geordan@csua.berkeley.edu)
##
$the_cow = <<EOC;
$thoughts . . .
$thoughts . . . ` ,
$thoughts .; . : .' : : : .
$thoughts i..`: i` i.i.,i i .
$thoughts `,--.|i |i|ii|ii|i:
U${eyes}U\\.'\@\@\@\@\@\@`.||'
\\__/(\@\@\@\@\@\@\@\@\@\@)'
(\@\@\@\@\@\@\@\@)
U$eyesU\.'@@@@@@`.||'
\__/(@@@@@@@@@@)'
(@@@@@@@@)
`YY~~~~YY'
|| ||
EOC

View File

@ -1,26 +1,24 @@
##
## Ghostbusters!
##
$the_cow = <<EOC;
$thoughts
$thoughts
$thoughts __---__
_- /--______
__--( / \\ )XXXXXXXXXXX\\v.
__--( / \ )XXXXXXXXXXX\v.
.-XXX( O O )XXXXXXXXXXXXXXX-
/XXX( U ) XXXXXXX\\
/XXXXX( )--_ XXXXXXXXXXX\\
/XXXXX/ ( O ) XXXXXX \\XXXXX\\
XXXXX/ / XXXXXX \\__ \\XXXXX
XXXXXX__/ XXXXXX \\__---->
---___ XXX__/ XXXXXX \\__ /
\\- --__/ ___/\\ XXXXXX / ___--/=
\\-\\ ___/ XXXXXX '--- XXXXXX
\\-\\/XXX\\ XXXXXX /XXXXX
\\XXXXXXXXX \\ /XXXXX/
\\XXXXXX > _/XXXXX/
\\XXXXX--__/ __-- XXXX/
/XXX( U ) XXXXXXX\
/XXXXX( )--_ XXXXXXXXXXX\
/XXXXX/ ( O ) XXXXXX \XXXXX\
XXXXX/ / XXXXXX \__ \XXXXX
XXXXXX__/ XXXXXX \__---->
---___ XXX__/ XXXXXX \__ /
\- --__/ ___/\ XXXXXX / ___--/=
\-\ ___/ XXXXXX '--- XXXXXX
\-\/XXX\ XXXXXX /XXXXX
\XXXXXXXXX \ /XXXXX/
\XXXXXX > _/XXXXX/
\XXXXX--__/ __-- XXXX/
-XXXXXXXX--------------- XXXXXX-
\\XXXXXXXXXXXXXXXXXXXXXXXXXX/
\XXXXXXXXXXXXXXXXXXXXXXXXXX/
""VXXXXXXXXXXXXXXXXXXV""
EOC

View File

@ -1,11 +1,9 @@
##
## Hello Kitty
##
$the_cow = <<EOC;
$thoughts
$thoughts
/\\_)o<
| \\
/\_)o<
| \
| O . O|
\\_____/
EOC
\_____/

View File

@ -1,26 +1,24 @@
##
## A lovers' empbrace
## A lovers' embrace
##
$the_cow = <<EOC;
$thoughts
$thoughts
,;;;;;;;,
;;;;;;;;;;;,
;;;;;'_____;'
;;;(/))))|((\\
;;;(/))))|((\
_;;((((((|))))
/ |_\\\\\\\\\\\\\\\\\\\\\\\\
.--~( \\ ~))))))))))))
/ \\ `\\-(((((((((((\\\\
| | `\\ ) |\\ /|)
| | `. _/ \\_____/ |
| , `\\~ /
| \\ \\ /
| `. `\\| /
| ~- `\\ /
\\____~._/~ -_, (\\
|-----|\\ \\ ';;
| | :;;;' \\
/ |_\\\\\\\\\\\\
.--~( \ ~))))))))))))
/ \ `\-(((((((((((\\
| | `\ ) |\ /|)
| | `. _/ \_____/ |
| , `\~ /
| \ \ /
| `. `\| /
| ~- `\ /
\____~._/~ -_, (\
|-----|\ \ ';;
| | :;;;' \
| / | |
| | |
EOC

View File

@ -1,7 +1,6 @@
##
## A kitten of sorts, I think
##
$the_cow = <<EOC;
$thoughts
$thoughts
("`-' '-/") .___..--' ' "`-._
@ -9,4 +8,3 @@ $the_cow = <<EOC;
(_Y_.) ' ._ ) `._` ; `` -. .-'
_.. `--'_..-_/ /--' _ .' ,4
( i l ),-'' ( l i),' ( ( ! .-'
EOC

View File

@ -1,7 +1,6 @@
##
## From the canonical koala collection
##
$the_cow = <<EOC;
$thoughts
$thoughts
___
@ -9,4 +8,3 @@ $the_cow = <<EOC;
( Y )
()~*~()
(_)-(_)
EOC

View File

@ -1,19 +1,17 @@
##
## It's a Kosh Cow!
##
$the_cow = <<EOC;
$thoughts
$thoughts
$thoughts
___ _____ ___
/ \\ / /| / \\
/ \ / /| / \
| | / / | | |
| | /____/ | | |
| | | | | | |
| | | {} | / | |
| | |____|/ | |
| | |==| | |
| \\___________/ |
| \___________/ |
| |
| |
EOC

View File

@ -1,7 +1,6 @@
##
## From the canonical koala collection
##
$the_cow = <<EOC;
$thoughts
$thoughts .
___ //
@ -12,4 +11,3 @@ $the_cow = <<EOC;
Luke
Sywalker
koala
EOC

View File

@ -1,15 +1,13 @@
##
## A meowing tiger?
##
$the_cow = <<EOC;
$thoughts
$thoughts , _ ___.--'''`--''//-,-_--_.
\\`"' ` || \\\\ \\ \\\\/ / // / ,-\\\\`,_
/'` \\ \\ || Y | \\|/ / // / - |__ `-,
/\@"\\ ` \\ `\\ | | ||/ // | \\/ \\ `-._`-,_.,
/ _.-. `.-\\,___/\\ _/|_/_\\_\\/|_/ | `-._._)
`-'``/ / | // \\__/\\__ / \\__/ \\
`-' /-\\/ | -| \\__ \\ |-' |
__/\\ / _/ \\/ __,-' ) ,' _|'
\`"' ` || \\ \ \\/ / // / ,-\\`,_
/'` \ \ || Y | \|/ / // / - |__ `-,
/@"\ ` \ `\ | | ||/ // | \/ \ `-._`-,_.,
/ _.-. `.-\,___/\ _/|_/_\_\/|_/ | `-._._)
`-'``/ / | // \__/\__ / \__/ \
`-' /-\/ | -| \__ \ |-' |
__/\ / _/ \/ __,-' ) ,' _|'
(((__/(((_.' ((___..-'((__,'
EOC

View File

@ -1,21 +1,19 @@
##
## Milk from Milk and Cheese
##
$the_cow = <<EOC;
$thoughts ____________
$thoughts |__________|
/ /\\
/ / \\
/ /\
/ / \
/___________/___/|
| | |
| ==\\ /== | |
| O O | \\ \\ |
| < | \\ \\|
/| | \\ \\
/ | \\_____/ | / /
| ==\ /== | |
| O O | \ \ |
| < | \ \|
/| | \ \
/ | \_____/ | / /
/ /| | / /|
/||\\| | /||\\/
/||\| | /||\/
-------------|
| | | |
<__/ \\__>
EOC
<__/ \__>

View File

@ -1,14 +1,12 @@
##
## MOOfasa.
##
$the_cow = <<EOC;
$thoughts ____
$thoughts / \\
$thoughts / \
| ^__^ |
| ($eyes) |______
| (__) | )\\/\\
\\____/|----w |
| (__) | )\/\
\____/|----w |
|| ||
Moofasa
EOC

View File

@ -1,9 +1,10 @@
$the_cow = <<EOC;
##
## A moose.
##
$thoughts
$thoughts \\_\\_ _/_/
$thoughts \\__/
($eyes)\\_______
(__)\\ )\\/\\
$thoughts \_\_ _/_/
$thoughts \__/
($eyes)\_______
(__)\ )\/\
$tongue ||----w |
|| ||
EOC

View File

@ -1,10 +1,8 @@
##
## A mutilated cow, from aspolito@csua.berkeley.edu
##
$the_cow = <<EOC;
$thoughts \\_______
v__v $thoughts \\ O )
$thoughts \_______
v__v $thoughts \ O )
($eyes) ||----w |
(__) || || \\/\\
(__) || || \/\
$tongue
EOC

View File

@ -1,22 +1,20 @@
##
## Ren
##
$the_cow = <<EOC;
$thoughts
$thoughts
____
/# /_\\_
| |/o\\o\\
| \\\\_/_/
/# /_\_
| |/o\o\
| \\_/_/
/ |_ |
| ||\\_ ~|
| ||| \\/
| ||\_ ~|
| ||| \/
| |||_
\\// |
\// |
|| |
||_ \\
\\_| o|
/\\___/
||_ \
\_| o|
/\___/
/ ||||__
(___)_)
EOC

View File

@ -1,12 +1,10 @@
##
## Satanic cow, source unknown.
##
$the_cow = <<EOC;
$thoughts
$thoughts (__)
(\\/)
/-------\\/
(\/)
/-------\/
/ | 666 ||
* ||----||
~~ ~~
EOC

View File

@ -1,13 +1,11 @@
##
## The non-flaming sheep.
##
$the_cow = <<EOC
$thoughts
$thoughts
__
U${eyes}U\\.'\@\@\@\@\@\@`.
\\__/(\@\@\@\@\@\@\@\@\@\@)
(\@\@\@\@\@\@\@\@)
U$eyesU\.'@@@@@@`.
\__/(@@@@@@@@@@)
(@@@@@@@@)
`YY~~~~YY'
|| ||
EOC

View File

@ -2,14 +2,12 @@
## This 'Scowleton' brought to you by one of
## {appel,kube,rowe}@csua.berkeley.edu
##
$the_cow = <<EOC;
$thoughts (__)
$thoughts /$eyes|
$thoughts (_"_)*+++++++++*
//I#\\\\\\\\\\\\\\\\I\\
//I#\\\\\\\\I\
I[I|I|||||I I `
I`I'///'' I I
I I I I
~ ~ ~ ~
Scowleton
EOC

View File

@ -1,10 +1,7 @@
##
## A small cow, artist unknown
##
$eyes = ".." unless ($eyes);
$the_cow = <<EOC;
$thoughts ,__,
$thoughts ($eyes)____
(__) )\\
(__) )\
$tongue||--|| *
EOC

View File

@ -1,19 +1,17 @@
##
## A stegosaur with a top hat?
##
$the_cow = <<EOC;
$thoughts . .
$thoughts / `. .' "
$thoughts .---. < > < > .---.
$thoughts | \\ \\ - ~ ~ - / / |
$thoughts | \ \ - ~ ~ - / / |
_____ ..-~ ~-..-~
| | \\~~~\\.' `./~~~/
--------- \\__/ \\__/
.' O \\ / / \\ "
(_____, `._.' | } \\/~~~/
`----. / } | / \\__/
| | \~~~\.' `./~~~/
--------- \__/ \__/
.' O \ / / \ "
(_____, `._.' | } \/~~~/
`----. / } | / \__/
`-. | / | / `. ,~~|
~-.__| /_ - ~ ^| /- _ `..-'
| / | / ~-. `-. _ _ _
|_____| |_____| ~ - . _ _ _ _ _>
EOC

View File

@ -1,19 +1,17 @@
##
## Stimpy!
##
$the_cow = <<EOC;
$thoughts . _ .
$thoughts |\\_|/__/|
/ / \\/ \\ \\
/__|O||O|__ \\
|/_ \\_/\\_/ _\\ |
$thoughts |\_|/__/|
/ / \/ \ \
/__|O||O|__ \
|/_ \_/\_/ _\ |
| | (____) | ||
\\/\\___/\\__/ //
\/\___/\__/ //
(_/ ||
| ||
| ||\\
\\ //_/
\\______//
| ||\
\ //_/
\______//
__ || __||
(____(____)
EOC

View File

@ -1,10 +1,8 @@
##
## A cow being milked, probably from Lars Smith (lars@csua.berkeley.edu)
##
$the_cow = <<EOC;
$thoughts ^__^
$thoughts ($eyes)\\_______ ________
(__)\\ )\\/\\ |Super |
$thoughts ($eyes)\_______ ________
(__)\ )\/\ |Super |
$tongue ||----W | |Milker|
|| UDDDDDDDDD|______|
EOC

View File

@ -1,24 +1,22 @@
##
## A cow operation, artist unknown
##
$the_cow = <<EOC;
$thoughts \\ /
$thoughts \\/
(__) /\\
$thoughts \ /
$thoughts \/
(__) /\
($eyes) O O
_\\/_ //
_\/_ //
* ( ) //
\\ (\\\\ //
\\( \\\\ )
( \\\\ ) /\\
___[\\______/^^^^^^^\\__/) o-)__
|\\__[=======______//________)__\\
\\|_______________//____________|
\ (\\ //
\( \\ )
( \\ ) /\
___[\______/^^^^^^^\__/) o-)__
|\__[=======______//________)__\
\|_______________//____________|
||| || //|| |||
||| || @.|| |||
|| \\/ .\\/ ||
|| \/ .\/ ||
. .
'.'.`
COW-OPERATION
EOC

View File

@ -1,12 +1,8 @@
##
## A cow with three eyes, brought to you by dpetrou@csua.berkeley.edu
##
$extra = chop($eyes);
$eyes .= ($extra x 2);
$the_cow = <<EOC;
$thoughts ^___^
$thoughts ($eyes)\\_______
(___)\\ )\\/\\
$thoughts ($el$el$el)\_______
(___)\ )\/\
$tongue ||----w |
|| ||
EOC

View File

@ -1,26 +1,24 @@
##
## Turkey!
##
$the_cow = <<EOC;
$thoughts ,+*^^*+___+++_
$thoughts ,*^^^^ )
$thoughts _+* ^**+_
$thoughts +^ _ _++*+_+++_, )
_+^^*+_ ( ,+*^ ^ \\+_ )
{ ) ( ,( ,_+--+--, ^) ^\\
{ (\@) } f ,( ,+-^ __*_*_ ^^\\_ ^\\ )
_+^^*+_ ( ,+*^ ^ \+_ )
{ ) ( ,( ,_+--+--, ^) ^\
{ (@) } f ,( ,+-^ __*_*_ ^^\_ ^\ )
{:;-/ (_+*-+^^^^^+*+*<_ _++_)_ ) ) /
( / ( ( ,___ ^*+_+* ) < < \\
U _/ ) *--< ) ^\\-----++__) ) ) )
( ) _(^)^^)) ) )\\^^^^^))^*+/ / /
( / ( ( ,___ ^*+_+* ) < < \
U _/ ) *--< ) ^\-----++__) ) ) )
( ) _(^)^^)) ) )\^^^^^))^*+/ / /
( / (_))_^)) ) ) ))^^^^^))^^^)__/ +^^
( ,/ (^))^)) ) ) ))^^^^^^^))^^) _)
*+__+* (_))^) ) ) ))^^^^^^))^^^^^)____*^
\\ \\_)^)_)) ))^^^^^^^^^^))^^^^)
(_ ^\\__^^^^^^^^^^^^))^^^^^^^)
^\\___ ^\\__^^^^^^))^^^^^^^^)\\\\
^^^^^\\uuu/^^\\uuu/^^^^\\^\\^\\^\\^\\^\\^\\^\\
___) >____) >___ ^\\_\\_\\_\\_\\_\\_\\)
^^^//\\\\_^^//\\\\_^ ^(\\_\\_\\_\\)
\ \_)^)_)) ))^^^^^^^^^^))^^^^)
(_ ^\__^^^^^^^^^^^^))^^^^^^^)
^\___ ^\__^^^^^^))^^^^^^^^)\\
^^^^^\uuu/^^\uuu/^^^^\^\^\^\^\^\^\^\
___) >____) >___ ^\_\_\_\_\_\_\)
^^^//\\_^^//\\_^ ^(\_\_\_\)
^^^ ^^ ^^^ ^
EOC

View File

@ -1,20 +1,18 @@
##
## A mysterious turtle...
##
$the_cow = <<EOC;
$thoughts ___-------___
$thoughts _-~~ ~~-_
$thoughts _-~ /~-_
/^\\__/^\\ /~ \\ / \\
/| O|| O| / \\_______________/ \\
| |___||__| / / \\ \\
| \\ / / \\ \\
| (_______) /______/ \\_________ \\
| / / \\ / \\
\\ \\^\\\\ \\ / \\ /
\\ || \\______________/ _-_ //\\__//
\\ ||------_-~~-_ ------------- \\ --/~ ~\\ || __/
/^\__/^\ /~ \ / \
/| O|| O| / \_______________/ \
| |___||__| / / \ \
| \ / / \ \
| (_______) /______/ \_________ \
| / / \ / \
\ \^\\ \ / \ /
\ || \______________/ _-_ //\__//
\ ||------_-~~-_ ------------- \ --/~ ~\ || __/
~-----||====/~ |==================| |/~~~~~
(_(__/ ./ / \\_\\ \\.
(_(___/ \\_____)_)
EOC
(_(__/ ./ / \_\ \.
(_(___/ \_____)_)

View File

@ -2,15 +2,12 @@
## TuX
## (c) pborys@p-soft.silesia.linux.org.pl
##
$the_cow = <<EOC;
$thoughts
$thoughts
.--.
|o_o |
|:_/ |
// \\ \\
// \ \
(| | )
/'\\_ _/`\\
\\___)=(___/
EOC
/'\_ _/`\
\___)=(___/

View File

@ -1,16 +1,12 @@
##
## The cow from a file called cow-n-horn, artist unknown.
##
$other_eye = chop($eyes);
$eyes .= " $other_eye";
$the_cow = <<EOC;
$thoughts
$thoughts (__)
$eyes\\
('') \\---------
$tongue\\ \\
| |\\
$el $er\
('') \---------
$tongue\ \
| |\
||---( )_|| *
|| UU ||
== ==
EOC

View File

@ -1,7 +1,6 @@
##
## Another canonical koala?
##
$the_cow = <<EOC;
$thoughts
$thoughts .
.---. //
@ -13,4 +12,3 @@ $the_cow = <<EOC;
Darth
Vader
koala
EOC

View File

@ -1,13 +1,11 @@
##
## Cowth Vader, from geordan@csua.berkeley.edu
##
$the_cow = <<EOC;
$thoughts ,-^-.
$thoughts !oYo!
$thoughts /./=\\.\\______
## )\\/\\
$thoughts /./=\.\______
## )\/\
||-----w||
|| ||
Cowth Vader
EOC

View File

@ -1,10 +1,8 @@
##
## A cow wadvertising the World Wide Web, from lim@csua.berkeley.edu
## A cow advertising the World Wide Web, from lim@csua.berkeley.edu
##
$the_cow = <<EOC;
$thoughts ^__^
$thoughts ($eyes)\\_______
(__)\\ )\\/\\
$thoughts ($eyes)\_______
(__)\ )\/\
$tongue ||--WWW |
|| ||
EOC

7
go.mod Normal file
View File

@ -0,0 +1,7 @@
module git.yetaga.in/alazyreader/cowsay
go 1.22.1
require golang.org/x/term v0.18.0
require golang.org/x/sys v0.18.0 // indirect

4
go.sum Normal file
View File

@ -0,0 +1,4 @@
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=

313
main.go Normal file
View File

@ -0,0 +1,313 @@
package main
import (
"bytes"
"embed"
"flag"
"fmt"
"io"
"log"
"os"
"strconv"
"strings"
"golang.org/x/term"
)
const DEBUG = false
var (
// upper-left, upper-right, left side, right side, bottom-left, bottom-right
SAY_BORDER = []rune{'/', '\\', '|', '|', '\\', '/'}
SINGLE_BORDER = []rune{'<', '>'}
THINK_BORDER = []rune{'(', ')', '(', ')', '(', ')'}
)
type options struct {
thinking bool
tongue string
eyes string
leftEye string
rightEye string
wrapWidth int
}
// the cowfiles
//
//go:embed cows/*
var cowTemplates embed.FS
func main() {
// basic flags
cowFile := flag.String("cow", "default.cow", "the cowfile to use")
tongue := flag.String("T", " ", "the tongue to print")
eyesFlag := flag.String("e", "oo", "the eyes")
width := flag.Int("W", 40, "approximate column width for the word-wrap")
// also need to check for binary name here
thinkFlag := flag.Bool("think", false, "if the cow is thinking the input instead")
// flags for special conditions
// these flags override -e and -T if set
borgFlag := flag.Bool("b", false, "borg cow") // ==
deadFlag := flag.Bool("d", false, "dead cow") // xx AND tongue "U "
greedyFlag := flag.Bool("g", false, "greedy cow") // $$
paranoidFlag := flag.Bool("p", false, "paranoid cow") // @@
stonedFlag := flag.Bool("s", false, "stoned cow") // ** AND tongue "U "
tiredFlag := flag.Bool("t", false, "tired cow") // --
wiredFlag := flag.Bool("w", false, "wired cow") // OO
youngFlag := flag.Bool("y", false, "young cow") // ..
flag.Parse()
input := flag.Arg(0)
if len(*tongue) < 2 {
*tongue = *tongue + strings.Repeat(" ", 2-len(*tongue))
}
if len(*eyesFlag) < 2 {
*eyesFlag = *eyesFlag + strings.Repeat(" ", 2-len(*eyesFlag))
}
opts := options{
thinking: *thinkFlag,
tongue: (*tongue)[0:2],
eyes: (*eyesFlag)[0:2],
wrapWidth: *width,
}
switch {
case *borgFlag:
opts.eyes = "=="
case *deadFlag:
opts.eyes = "xx"
opts.tongue = "U "
case *greedyFlag:
opts.eyes = "$$"
case *paranoidFlag:
opts.eyes = "@@"
case *stonedFlag:
opts.eyes = "**"
opts.tongue = "U "
case *tiredFlag:
opts.eyes = "--"
case *wiredFlag:
opts.eyes = "OO"
case *youngFlag:
opts.eyes = ".."
}
opts.leftEye = strings.Split(*eyesFlag, "")[0]
opts.rightEye = strings.Split(*eyesFlag, "")[1]
// if there is command-line input, ignore stdin.
if !term.IsTerminal(0) && input != "" {
pipedInput, err := io.ReadAll(os.Stdin)
if err != nil {
log.Fatalf("error reading from stdin: %v", err)
}
input = string(bytes.TrimSpace(pipedInput))
}
if input == "" {
log.Fatal("no input; cow can't say anything")
}
b, err := cowTemplates.ReadFile("cows/" + *cowFile)
if err != nil {
log.Fatal(err)
}
fmt.Print(generateCow(string(b), input, opts))
}
func generateCow(cow, say string, opt options) string {
cowSlice := strings.Split(cow, "\n")
offset := 0
// Remove comments
i := 0
for _, s := range cowSlice {
if strings.HasPrefix(s, "##") && strings.Contains(s, "OFFSET") {
_, off, found := strings.Cut(s, "OFFSET ")
if found {
offset, _ = strconv.Atoi(off)
}
}
if !strings.HasPrefix(s, "##") {
cowSlice[i] = s
i++
}
}
cow = strings.Join(cowSlice[:i], "\n")
// do replaces
tail := `\`
if opt.thinking {
tail = `o`
}
cow = strings.ReplaceAll(cow, "$thoughts", tail)
cow = strings.ReplaceAll(cow, "$eyes", opt.eyes)
cow = strings.ReplaceAll(cow, "$el", opt.leftEye)
cow = strings.ReplaceAll(cow, "$er", opt.rightEye)
cow = strings.ReplaceAll(cow, "$tongue", opt.tongue)
out := &bytes.Buffer{}
fmt.Fprint(out, bubble(say, opt.thinking, opt.wrapWidth, offset))
fmt.Fprintln(out)
fmt.Fprint(out, cow)
fmt.Fprintln(out)
return out.String()
}
// this is an attempt to emulate the rather poorly-documented behavior of Text::Wrap::fill
// from CPAN: https://github.com/ap/Text-Tabs/blob/master/lib.modern/Text/Wrap.pm
// The basic idea is: take an input. Format each "paragraph" of text independently,
// then merge with empty lines between.
//
// What is under-defined in the documentation is what fill() considers a "paragraph".
// From testing and reviewing the rather obtuse code, a paragraph is any number of lines
// that start with a line that has optional whitespace at its start, then all subsequent lines
// that have no whitespace at the start, until either reaching another line that has leading
// whitespace, or a blank line. fill() also "destroy[s] any whitespace in the original text",
// by which it appearently means all tabs and multiple-spaces are replaced with single-spaces.
//
// So, for example, `text\ntext` is one paragraph, `text\n text` is two paragraphs. Since for
// our purposes we don't want any indentation of paragraphs, the output of these two examples
// should be `text text` and `text\n\ntext`, respectively.
//
// This is a pretty gnarly! Might be easier in a multi-pass model: collect together each paragraph,
// collapse them into single strings and format in a sub-function, then merge them all together.
// That's closer to how the perl module does it.
func wordWrap(text []string, column int) ([]string, int) {
out := []string{}
length := 0
var b strings.Builder
var inParagraph bool
for beginning, line := range text {
// remove control character whitespace
line = strings.ReplaceAll(line, "\t", " ")
line = strings.ReplaceAll(line, "\v", " ")
line = strings.ReplaceAll(line, "\f", " ")
line = strings.ReplaceAll(line, "\r", " ")
words := strings.Split(line, " ")
// skip empty newlines if not in a paragraph, but start a new paragraph if we are.
if strings.TrimSpace(line) == "" {
if inParagraph {
length = max(length, b.Len()-1)
out = append(out, b.String()[0:b.Len()-1])
out = append(out, "")
b = strings.Builder{}
inParagraph = false
}
continue
}
// we -1 all over the place to clean up the loose space on the end of the builder
for i, word := range words { // split into words
if DEBUG {
log.Printf("%d, `%s`", i, b.String())
}
if inParagraph && i == 0 && word == "" && len(words) != 0 {
// we've found a new paragraph while we were still processing the old one.
// (that is, the new line we're parsing had leading whitespace)
length = max(length, b.Len()-1)
out = append(out, b.String()[0:b.Len()-1])
out = append(out, "")
b = strings.Builder{}
log.Println("here")
}
// bizarrely, cowsay allows for indentation to survive in the /first/ paragraph,
// but only up to two spaces worth.
if beginning == 0 && (b.Len() == 0 || b.String() == " ") && word == "" {
b.WriteRune(' ')
}
if b.Len() == 0 && word != "" {
inParagraph = true
}
if b.Len() >= 0 && word == "" && i+1 != len(words) {
// skip multiple spaces in a row...
// ...but a single trailing space on a line is OK??
continue
}
if b.Len() > 0 && b.Len()+len(word)+1 > column {
// if the word we want to append is bigger than we have room for,
// save off the maximum length, save the current line to the output,
// and start a new builder.
length = max(length, b.Len()-1)
out = append(out, b.String()[0:b.Len()-1])
b = strings.Builder{}
}
for b.Len() == 0 && len(word) >= column {
// our word is longer than our maximum column size. let's break it up.
// we loop until we've consumed the full overly-long word.
length = max(length, column-1)
out = append(out, word[0:column-1])
word = word[column-1:]
b = strings.Builder{}
}
// actually append the word and a space
b.WriteString(word)
b.WriteRune(' ')
if DEBUG {
log.Printf("%d, `%s`", i, b.String())
}
}
}
// out of words! save off our last line.
length = max(length, b.Len()-1)
out = append(out, b.String()[0:b.Len()-1])
return out, length
}
func padText(text []string, maxLength int) []string {
for i, line := range text {
if len(line) < maxLength {
text[i] = text[i] + strings.Repeat(" ", maxLength-len(line))
}
}
return text
}
func bubble(text string, think bool, column int, offset int) string {
s, column := wordWrap(strings.Split(text, "\n"), column)
s = padText(s, column)
b := strings.Builder{}
padding := strings.Repeat(" ", offset)
b.WriteString(padding)
b.WriteString(" ")
b.WriteString(strings.Repeat("_", column+2))
b.WriteString(" \n")
var borderStyle []rune
if think {
borderStyle = THINK_BORDER
} else if len(s) == 1 {
borderStyle = SINGLE_BORDER
} else {
borderStyle = SAY_BORDER
}
for i := range s {
b.WriteString(padding)
if i == 0 {
b.WriteRune(borderStyle[0])
} else if i == len(s)-1 {
b.WriteRune(borderStyle[4])
} else {
b.WriteRune(borderStyle[2])
}
b.WriteRune(' ')
b.WriteString(s[i])
b.WriteRune(' ')
if i == 0 {
b.WriteRune(borderStyle[1])
} else if i == len(s)-1 {
b.WriteRune(borderStyle[5])
} else {
b.WriteRune(borderStyle[3])
}
b.WriteRune('\n')
}
b.WriteString(padding)
b.WriteString(" ")
b.WriteString(strings.Repeat("-", column+2))
b.WriteString(" ")
return b.String()
}

172
main_test.go Normal file
View File

@ -0,0 +1,172 @@
package main
import (
"os"
"os/exec"
"strings"
"testing"
)
func must[T any](t T, err error) T {
if err != nil {
panic(err)
}
return t
}
var defaultOptions options = options{
tongue: " ",
eyes: "oo",
leftEye: "o",
rightEye: "o",
wrapWidth: 40,
}
func TestGenerateCow(t *testing.T) {
type args struct {
cow string
say string
opt options
}
tests := []struct {
name string
args args
expected string
}{
{
name: "basic cow",
args: args{
cow: string(must(os.ReadFile("./cows/default.cow"))),
say: "test text",
opt: defaultOptions,
},
expected: string(must(os.ReadFile("./testdata/basic.cow"))),
},
{
name: "single-paragraph test",
args: args{
cow: string(must(os.ReadFile("./cows/default.cow"))),
say: "test\ntext",
opt: defaultOptions,
},
expected: string(must(os.ReadFile("./testdata/one_paragraph.cow"))),
},
{
name: "multiline with wordwrap test",
args: args{
cow: string(must(os.ReadFile("./cows/default.cow"))),
say: "this is a long block of text.\nIt goes over many lines! It'll even word-wrap for us.",
opt: defaultOptions,
},
expected: string(must(os.ReadFile("./testdata/longer_multiline.cow"))),
},
{
name: "two-paragraph multiline with wordwrap test",
args: args{
cow: string(must(os.ReadFile("./cows/default.cow"))),
say: "this is a long block of text.\n\nIt goes over many lines! It'll even word-wrap for us.",
opt: defaultOptions,
},
expected: string(must(os.ReadFile("./testdata/two_paragraph_multiline.cow"))),
},
{
name: "offset bubble",
args: args{
cow: string(must(os.ReadFile("./cows/dragon-and-cow.cow"))),
say: "this is a long block of text.\nIt goes over many lines! It'll even word-wrap for us.",
opt: defaultOptions,
},
expected: string(must(os.ReadFile("./testdata/dragon.cow"))),
},
{
name: "leading space cow",
args: args{
cow: string(must(os.ReadFile("./cows/default.cow"))),
say: " text",
opt: defaultOptions,
},
expected: string(must(os.ReadFile("./testdata/leading_space.cow"))),
},
{
name: "extra spaces cow",
args: args{
cow: string(must(os.ReadFile("./cows/default.cow"))),
say: "some text",
opt: defaultOptions,
},
expected: string(must(os.ReadFile("./testdata/extra_spaces.cow"))),
},
{
name: "vertical tab cow",
args: args{
cow: string(must(os.ReadFile("./cows/default.cow"))),
say: "some\vtext",
opt: defaultOptions,
},
expected: string(must(os.ReadFile("./testdata/extra_spaces.cow"))),
},
{
name: "a word that's too long cow",
args: args{
cow: string(must(os.ReadFile("./cows/default.cow"))),
say: "00000000000000000000000000000000000000000000000000 11",
opt: defaultOptions,
},
expected: string(must(os.ReadFile("./testdata/too_long.cow"))),
},
{
name: "fortune cow",
args: args{
cow: string(must(os.ReadFile("./cows/default.cow"))),
say: `Most people eat as though they were fattening themselves for market.
-- E.W. Howe`,
opt: defaultOptions,
},
expected: string(must(os.ReadFile("./testdata/fortune.cow"))),
},
{
name: "trailing space cow",
args: args{
cow: string(must(os.ReadFile("./cows/default.cow"))),
say: `test `,
opt: defaultOptions,
},
expected: string(must(os.ReadFile("./testdata/trailing_space.cow"))),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
out := generateCow(tt.args.cow, tt.args.say, tt.args.opt)
if out != tt.expected {
t.Logf("expected: \n%v", tt.expected)
t.Logf("got: \n%v", out)
t.Fatal()
}
})
}
}
// fuzz testing requires perl to be installed and in the PATH
func FuzzCow(f *testing.F) {
cowString := string(must(os.ReadFile("./cows/default.cow")))
f.Add("phrase")
f.Add("phrase with many many words in it so that we get a word-wrap situation")
f.Fuzz(func(t *testing.T, phrase string) {
if strings.TrimSpace(phrase) != phrase || phrase == "" {
// uninteresting degenerate cases where there's a bug in the perl
t.Skip()
}
res := generateCow(cowString, phrase, options{tongue: " ", eyes: "oo", wrapWidth: 40})
cmd := exec.Command("perl", "./perl/cowsay", "-f", "./perl/cows/default.cow")
cmd.Stdin = strings.NewReader(phrase)
var out strings.Builder
cmd.Stdout = &out
err := cmd.Run()
if err != nil {
t.Error(err)
}
if res != out.String() {
t.Errorf("mismatch between perl and go.\nPerl:\n%s\ngo:\n%s", out.String(), res)
}
})
}

View File

View File

23
perl/cows/beavis.zen.cow Normal file
View File

@ -0,0 +1,23 @@
##
## Beavis, with Zen philosophy removed.
##
$the_cow = <<EOC;
$thoughts __------~~-,
$thoughts ,' ,
/ \\
/ :
| '
| |
| |
| _-- |
_| =-. .-. ||
o|/o/ _. |
/ ~ \\ |
(____\@) ___~ |
|_===~~~.` |
_______.--~ |
\\________ |
\\ |
__/-___-- -__
/ _ \\
EOC

29
perl/cows/blowfish.cow Normal file
View File

@ -0,0 +1,29 @@
##
## Blowfish
##
$the_cow = <<EOC;
$thoughts
$thoughts
| .
. |L /|
_ . |\\ _| \\--+._/| .
/ ||\\| Y J ) / |/| ./
J |)'( | ` F`.'/
-<| F __ .-<
| / .-'. `. /-. L___
J \\ < \\ | | O\\|.-'
_J \\ .- \\/ O | | \\ |F
'-F -<_. \\ .-' `-' L__
__J _ _. >-' )._. |-'
`-|.' /_. \\_| F
/.- . _.<
/' /.' .' `\\
/L /' |/ _.-'-\\
/'J ___.---'\\|
|\\ .--' V | `. `
|/`. `-. `._)
/ .-.\\
VK \\ ( `\\
`.\\
EOC

16
perl/cows/bong.cow Normal file
View File

@ -0,0 +1,16 @@
##
## A cow with a bong, from lars@csua.berkeley.edu
##
$the_cow = <<EOC;
$thoughts
$thoughts
^__^
_______/($eyes)
/\\/( /(__)
| W----|| |~|
|| || |~| ~~
|~| ~
|_| o
|#|/
_+#+_
EOC

12
perl/cows/bud-frogs.cow Normal file
View File

@ -0,0 +1,12 @@
##
## The Budweiser frogs
##
$the_cow = <<EOC;
$thoughts
$thoughts
oO)-. .-(Oo
/__ _\\ /_ __\\
\\ \\( | ()~() | )/ /
\\__|\\ | (-___-) | /|__/
' '--' ==`-'== '--' '
EOC

10
perl/cows/bunny.cow Normal file
View File

@ -0,0 +1,10 @@
##
## A cute little wabbit
##
$the_cow = <<EOC;
$thoughts
$thoughts \\
\\ /\\
( )
.( o ).
EOC

23
perl/cows/cheese.cow Normal file
View File

@ -0,0 +1,23 @@
##
## The cheese from milk & cheese
##
$the_cow = <<EOC;
$thoughts
$thoughts
_____ _________
/ \\_/ |
| ||
| ||
| ###\\ /### | |
| 0 \\/ 0 | |
/| | |
/ | < |\\ \\
| /| | | |
| | \\_______/ | | |
| | | / /
/|| /|||
----------------|
| | | |
*** ***
/___\\ /___\\
EOC

14
perl/cows/cower.cow Normal file
View File

@ -0,0 +1,14 @@
##
## A cowering cow
##
$the_cow = <<EOC;
$thoughts
$thoughts
,__, | |
(oo)\\| |___
(__)\\| | )\\_
| |_w | \\
| | || *
Cower....
EOC

24
perl/cows/daemon.cow Normal file
View File

@ -0,0 +1,24 @@
##
## 4.4 >> 5.4
##
$the_cow = <<EOC;
$thoughts , ,
$thoughts /( )`
$thoughts \\ \\___ / |
/- _ `-/ '
(/\\/ \\ \\ /\\
/ / | ` \\
O O ) / |
`-^--'`< '
(_.) _ ) /
`.___/` /
`-----' /
<----. __ / __ \\
<----|====O)))==) \\) /====
<----' `--' `.__,' \\
| |
\\ /
______( (_ / \\______
,' ,-----' | \\
`--{__________) \\/
EOC

7
perl/cows/default.cow Normal file
View File

@ -0,0 +1,7 @@
$the_cow = <<"EOC";
$thoughts ^__^
$thoughts ($eyes)\\_______
(__)\\ )\\/\\
$tongue ||----w |
|| ||
EOC

View File

@ -0,0 +1,21 @@
##
## A dragon smiting a cow, possible credit to kube@csua.berkeley.edu
##
$the_cow = <<EOC;
$thoughts ^ /^
$thoughts / \\ // \\
$thoughts |\\___/| / \\// .\\
$thoughts /O O \\__ / // | \\ \\ *----*
/ / \\/_/ // | \\ \\ \\ |
\@___\@` \\/_ // | \\ \\ \\/\\ \\
0/0/| \\/_ // | \\ \\ \\ \\
0/0/0/0/| \\/// | \\ \\ | |
0/0/0/0/0/_|_ / ( // | \\ _\\ | /
0/0/0/0/0/0/`/,_ _ _/ ) ; -. | _ _\\.-~ / /
,-} _ *-.|.-~-. .~ ~
\\ \\__/ `/\\ / ~-. _ .-~ /
\\____($eyes) *. } { /
( (--) .----~-.\\ \\-` .~
//__\\\\ \\__ Ack! ///.----..< \\ _ -~
// \\\\ ///-._ _ _ _ _ _ _{^ - - - - ~
EOC

21
perl/cows/dragon.cow Normal file
View File

@ -0,0 +1,21 @@
##
## The Whitespace Dragon
##
$the_cow = <<EOC;
$thoughts / \\ //\\
$thoughts |\\___/| / \\// \\\\
/0 0 \\__ / // | \\ \\
/ / \\/_/ // | \\ \\
\@_^_\@'/ \\/_ // | \\ \\
//_^_/ \\/_ // | \\ \\
( //) | \\/// | \\ \\
( / /) _|_ / ) // | \\ _\\
( // /) '/,_ _ _/ ( ; -. | _ _\\.-~ .-~~~^-.
(( / / )) ,-{ _ `-.|.-~-. .~ `.
(( // / )) '/\\ / ~-. _ .-~ .-~^-. \\
(( /// )) `. { } / \\ \\
(( / )) .----~-.\\ \\-' .~ \\ `. \\^-.
///.----..> \\ _ -~ `. ^-` ^-_
///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~
/.-~
EOC

View File

@ -0,0 +1,14 @@
##
## Do we need to explain this?
##
$the_cow = <<EOC;
$thoughts
$thoughts ....
........ .
. .
. .
......... .......
..............................
Elephant inside ASCII snake
EOC

15
perl/cows/elephant.cow Normal file
View File

@ -0,0 +1,15 @@
##
## An elephant out and about
##
$the_cow = <<EOC;
$thoughts /\\ ___ /\\
$thoughts // \\/ \\/ \\\\
(( O O ))
\\\\ / \\ //
\\/ | | \\/
| | | |
| | | |
| o |
| | | |
|m| |m|
EOC

16
perl/cows/eyes.cow Normal file
View File

@ -0,0 +1,16 @@
##
## Evil-looking eyes
##
$the_cow = <<EOC;
$thoughts
$thoughts
.::!!!!!!!:.
.!!!!!:. .:!!!!!!!!!!!!
~~~~!!!!!!. .:!!!!!!!!!UWWW\$\$\$
:\$\$NWX!!: .:!!!!!!XUWW\$\$\$\$\$\$\$\$\$P
\$\$\$\$\$##WX!: .<!!!!UW\$\$\$\$" \$\$\$\$\$\$\$\$#
\$\$\$\$\$ \$\$\$UX :!!UW\$\$\$\$\$\$\$\$\$ 4\$\$\$\$\$*
^\$\$\$B \$\$\$\$\\ \$\$\$\$\$\$\$\$\$\$\$\$ d\$\$R"
"*\$bd\$\$\$\$ '*\$\$\$\$\$\$\$\$\$\$\$o+#"
"""" """""""
EOC

View File

@ -0,0 +1,15 @@
##
## The flaming sheep, contributed by Geordan Rosario (geordan@csua.berkeley.edu)
##
$the_cow = <<EOC;
$thoughts . . .
$thoughts . . . ` ,
$thoughts .; . : .' : : : .
$thoughts i..`: i` i.i.,i i .
$thoughts `,--.|i |i|ii|ii|i:
U${eyes}U\\.'\@\@\@\@\@\@`.||'
\\__/(\@\@\@\@\@\@\@\@\@\@)'
(\@\@\@\@\@\@\@\@)
`YY~~~~YY'
|| ||
EOC

View File

@ -0,0 +1,26 @@
##
## Ghostbusters!
##
$the_cow = <<EOC;
$thoughts
$thoughts
$thoughts __---__
_- /--______
__--( / \\ )XXXXXXXXXXX\\v.
.-XXX( O O )XXXXXXXXXXXXXXX-
/XXX( U ) XXXXXXX\\
/XXXXX( )--_ XXXXXXXXXXX\\
/XXXXX/ ( O ) XXXXXX \\XXXXX\\
XXXXX/ / XXXXXX \\__ \\XXXXX
XXXXXX__/ XXXXXX \\__---->
---___ XXX__/ XXXXXX \\__ /
\\- --__/ ___/\\ XXXXXX / ___--/=
\\-\\ ___/ XXXXXX '--- XXXXXX
\\-\\/XXX\\ XXXXXX /XXXXX
\\XXXXXXXXX \\ /XXXXX/
\\XXXXXX > _/XXXXX/
\\XXXXX--__/ __-- XXXX/
-XXXXXXXX--------------- XXXXXX-
\\XXXXXXXXXXXXXXXXXXXXXXXXXX/
""VXXXXXXXXXXXXXXXXXXV""
EOC

11
perl/cows/hellokitty.cow Normal file
View File

@ -0,0 +1,11 @@
##
## Hello Kitty
##
$the_cow = <<EOC;
$thoughts
$thoughts
/\\_)o<
| \\
| O . O|
\\_____/
EOC

26
perl/cows/kiss.cow Normal file
View File

@ -0,0 +1,26 @@
##
## A lovers' empbrace
##
$the_cow = <<EOC;
$thoughts
$thoughts
,;;;;;;;,
;;;;;;;;;;;,
;;;;;'_____;'
;;;(/))))|((\\
_;;((((((|))))
/ |_\\\\\\\\\\\\\\\\\\\\\\\\
.--~( \\ ~))))))))))))
/ \\ `\\-(((((((((((\\\\
| | `\\ ) |\\ /|)
| | `. _/ \\_____/ |
| , `\\~ /
| \\ \\ /
| `. `\\| /
| ~- `\\ /
\\____~._/~ -_, (\\
|-----|\\ \\ ';;
| | :;;;' \\
| / | |
| | |
EOC

12
perl/cows/kitty.cow Normal file
View File

@ -0,0 +1,12 @@
##
## A kitten of sorts, I think
##
$the_cow = <<EOC;
$thoughts
$thoughts
("`-' '-/") .___..--' ' "`-._
` *_ * ) `-. ( ) .`-.__. `)
(_Y_.) ' ._ ) `._` ; `` -. .-'
_.. `--'_..-_/ /--' _ .' ,4
( i l ),-'' ( l i),' ( ( ! .-'
EOC

12
perl/cows/koala.cow Normal file
View File

@ -0,0 +1,12 @@
##
## From the canonical koala collection
##
$the_cow = <<EOC;
$thoughts
$thoughts
___
{~._.~}
( Y )
()~*~()
(_)-(_)
EOC

19
perl/cows/kosh.cow Normal file
View File

@ -0,0 +1,19 @@
##
## It's a Kosh Cow!
##
$the_cow = <<EOC;
$thoughts
$thoughts
$thoughts
___ _____ ___
/ \\ / /| / \\
| | / / | | |
| | /____/ | | |
| | | | | | |
| | | {} | / | |
| | |____|/ | |
| | |==| | |
| \\___________/ |
| |
| |
EOC

15
perl/cows/luke-koala.cow Normal file
View File

@ -0,0 +1,15 @@
##
## From the canonical koala collection
##
$the_cow = <<EOC;
$thoughts
$thoughts .
___ //
{~._.~}//
( Y )K/
()~*~()
(_)-(_)
Luke
Sywalker
koala
EOC

15
perl/cows/meow.cow Normal file
View File

@ -0,0 +1,15 @@
##
## A meowing tiger?
##
$the_cow = <<EOC;
$thoughts
$thoughts , _ ___.--'''`--''//-,-_--_.
\\`"' ` || \\\\ \\ \\\\/ / // / ,-\\\\`,_
/'` \\ \\ || Y | \\|/ / // / - |__ `-,
/\@"\\ ` \\ `\\ | | ||/ // | \\/ \\ `-._`-,_.,
/ _.-. `.-\\,___/\\ _/|_/_\\_\\/|_/ | `-._._)
`-'``/ / | // \\__/\\__ / \\__/ \\
`-' /-\\/ | -| \\__ \\ |-' |
__/\\ / _/ \\/ __,-' ) ,' _|'
(((__/(((_.' ((___..-'((__,'
EOC

21
perl/cows/milk.cow Normal file
View File

@ -0,0 +1,21 @@
##
## Milk from Milk and Cheese
##
$the_cow = <<EOC;
$thoughts ____________
$thoughts |__________|
/ /\\
/ / \\
/___________/___/|
| | |
| ==\\ /== | |
| O O | \\ \\ |
| < | \\ \\|
/| | \\ \\
/ | \\_____/ | / /
/ /| | / /|
/||\\| | /||\\/
-------------|
| | | |
<__/ \\__>
EOC

14
perl/cows/moofasa.cow Normal file
View File

@ -0,0 +1,14 @@
##
## MOOfasa.
##
$the_cow = <<EOC;
$thoughts ____
$thoughts / \\
| ^__^ |
| ($eyes) |______
| (__) | )\\/\\
\\____/|----w |
|| ||
Moofasa
EOC

9
perl/cows/moose.cow Normal file
View File

@ -0,0 +1,9 @@
$the_cow = <<EOC;
$thoughts
$thoughts \\_\\_ _/_/
$thoughts \\__/
($eyes)\\_______
(__)\\ )\\/\\
$tongue ||----w |
|| ||
EOC

10
perl/cows/mutilated.cow Normal file
View File

@ -0,0 +1,10 @@
##
## A mutilated cow, from aspolito@csua.berkeley.edu
##
$the_cow = <<EOC;
$thoughts \\_______
v__v $thoughts \\ O )
($eyes) ||----w |
(__) || || \\/\\
$tongue
EOC

22
perl/cows/ren.cow Normal file
View File

@ -0,0 +1,22 @@
##
## Ren
##
$the_cow = <<EOC;
$thoughts
$thoughts
____
/# /_\\_
| |/o\\o\\
| \\\\_/_/
/ |_ |
| ||\\_ ~|
| ||| \\/
| |||_
\\// |
|| |
||_ \\
\\_| o|
/\\___/
/ ||||__
(___)_)
EOC

Some files were not shown because too many files have changed in this diff Show More