Initial commit
authorJulien Valroff <julien@kirya.net>
Sat, 23 Apr 2011 08:16:35 +0000 (10:16 +0200)
committerJulien Valroff <julien@kirya.net>
Sat, 23 Apr 2011 08:16:35 +0000 (10:16 +0200)
17 files changed:
apache2-ssl-certificate [new file with mode: 0755]
apt-listrepository [new file with mode: 0755]
clear-dpkg-status [new file with mode: 0755]
closed-bugs [new file with mode: 0755]
count_debian_packages.sh [new file with mode: 0755]
count_ubuntu_packages.sh [new file with mode: 0755]
create_x_infos.sh [new file with mode: 0755]
deb.li [new file with mode: 0755]
debconf-stats [new file with mode: 0755]
gmail-abook-contact-converter.py [new file with mode: 0755]
imap-passwords.py [new file with mode: 0755]
lastcommit [new file with mode: 0755]
sort-subscriptions.sh [new file with mode: 0755]
start-daemon.sh [new file with mode: 0755]
update-pbuilder [new file with mode: 0755]
uploaded.sh [new file with mode: 0755]
xterm-colortest [new file with mode: 0755]

diff --git a/apache2-ssl-certificate b/apache2-ssl-certificate
new file mode 100755 (executable)
index 0000000..f0c821a
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+DIR='/etc/apache2/ssl'
+
+export RANDFILE=/dev/random
+openssl req -nodes -new -keyout $DIR/private.key -out $DIR/server.csr
+chmod 600 $DIR/{private.key,server.csr}
diff --git a/apt-listrepository b/apt-listrepository
new file mode 100755 (executable)
index 0000000..b22f490
--- /dev/null
@@ -0,0 +1,73 @@
+#!/usr/bin/perl
+
+# Copyright (C) 2004 Marcel Meckel <debian [at] thermoman [dot] de>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# apt-listrepository 0.0.1
+# list packages with corresponding repository
+
+
+ sub usage {
+    print 'Usage: apt-listrepository
+
+Lists all installed packages and the corresponding
+repository it was installed from.
+
+  --help          - this usage message
+
+';
+ }
+
+ unless ($#ARGV ne 0) {
+    &usage();
+    exit 1;
+ }
+
+ # all installed packages
+ open(DATA, 'dpkg --get-selections|') or die "Can not execute dpkg\n";
+ @tmp = <DATA>;
+ close DATA;
+
+ chomp(@tmp);
+ $tmp2 = join("\n", @tmp)."\n";
+
+ $packages_nl = $tmp2;
+ $packages_nl =~ s/([^\s]+)\s+([^\n]+)/\1/g;
+ $packages    = $packages_nl;
+ $packages    =~ s/\n/ /g;
+ # get policy of all installed packages
+ open(DATA, "apt-cache policy $packages|") or die "Can not execute apt-cache\n";
+ @tmp = <DATA>;
+ close DATA;
+   
+ chomp(@tmp);
+ $tmp2 = join("\n", @tmp)."\n";
+
+ $tmp2 =~ s/^  (Candidate|Installed|Version Table):.*\n//mg;
+ $tmp2 =~ s/([^:\s\n]+):\n[^\*]+\*\*\* ([^\s\n]+)[^\n]+\n\s+-?[0-9]+ ([^\n]+)\n(\s+[^\n]+\n)*/\1|\2|\3\n/g;
+
+ # all packages with version nr. and repository per line
+ @packages = split(/\n/, $tmp2);
+
+ foreach my $line (@packages) {
+    my ($name, $version, $repository) = split (/\|/, $line);
+    $repository =~ s/ Packages$//;
+    printf("%-35s %s\n", $name, $repository)
+ }
+
+exit 0;
+
diff --git a/clear-dpkg-status b/clear-dpkg-status
new file mode 100755 (executable)
index 0000000..f60700f
--- /dev/null
@@ -0,0 +1,26 @@
+#! /bin/bash
+#
+# clear-dpkg-status
+# Copyright 2005 Julien Valroff <julien@kirya.net>
+#
+# Clears dpkg status file marked as "purge ok not-installed"
+
+
+if [ $UID != 0 ]; then
+       echo "This script requires to be root"
+       exit 1;
+fi
+
+rep=/var/lib/dpkg
+
+cp $rep/status $rep/status.backup
+savelog -p -q -c 7 $rep/status.backup && rm -f $rep/status.backup > /dev/null 2>&1
+
+sed -i -e '/./,$!d' -e ':a;N;/\n$/!{$!b a};/\nStatus: purge ok not-installed\n/d' $rep/status
+
+if [ $? = 0 ]
+then
+  echo "Done."
+else
+  echo "Script exited with code $?."
+fi
diff --git a/closed-bugs b/closed-bugs
new file mode 100755 (executable)
index 0000000..81b8a8a
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/sh
+# Display bugs closed in the last changelog entries
+
+sed -n "0,/^ --/{//d;p}" debian/changelog | grep -o -E "#[[:digit:]]{6}" | sed 's/#//'
diff --git a/count_debian_packages.sh b/count_debian_packages.sh
new file mode 100755 (executable)
index 0000000..321f013
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/sh
+# Count number of source packages available in Debian
+
+if [ $# -lt 1 ]; then
+  echo "Please add at least one distribution as argument"
+  echo "Exiting"
+  exit 1
+fi
+
+for arg in $*
+do
+
+  echo "Number of source packages in $arg: "
+  for dist in main contrib non-free; do
+    echo -n "  $dist: "
+    wget -q -O - ftp://ftp.debian.org/debian/dists/$arg/$dist/source/Sources.gz | zgrep -c '^Package: '
+  done
+
+done
diff --git a/count_ubuntu_packages.sh b/count_ubuntu_packages.sh
new file mode 100755 (executable)
index 0000000..2c3ac63
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh
+if [ $# -lt 1 ]; then
+  echo "Please add at least one distribution as argument"
+  echo "Exiting"
+  exit 1
+fi
+for arg in $*
+do
+  echo -n "Number of source packages in $arg: "
+  wget -q -O - ftp://ftp.ubuntu.com/ubuntu/dists/$arg/main/source/Sources.gz | zgrep -c '^Package: '
+done
diff --git a/create_x_infos.sh b/create_x_infos.sh
new file mode 100755 (executable)
index 0000000..4a1dbaf
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/sh
+# Export the dbus session address on startup so it can be used by cron
+touch $HOME/.Xdbus
+chmod 600 $HOME/.Xdbus
+env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.Xdbus
+echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.Xdbus
diff --git a/deb.li b/deb.li
new file mode 100755 (executable)
index 0000000..3b5971e
--- /dev/null
+++ b/deb.li
@@ -0,0 +1,3 @@
+# call me 'deb.li' and use me as 'deb.li http://some/long/url', stdout is a cut-and-paste friendly URL
+hash=$(ssh alioth.debian.org ~bzed/godebian-client/add_url \"$@\")
+echo "http://deb.li/$hash"
diff --git a/debconf-stats b/debconf-stats
new file mode 100755 (executable)
index 0000000..fcb14e5
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+#
+# Displays status of debconf translation in a Debian source package
+
+for i in $(ls debian/po/*.po); do
+    basename $i
+    echo -n "    "
+    msgfmt -o /dev/null --statistics $i
+done
diff --git a/gmail-abook-contact-converter.py b/gmail-abook-contact-converter.py
new file mode 100755 (executable)
index 0000000..7155725
--- /dev/null
@@ -0,0 +1,35 @@
+#!/usr/bin/python
+# adr_conv.py
+#
+# Converts a vCard address book into abook addressbook format
+#
+# Author:   Gavin Costello
+# Date:     19.02.2009
+name = '';
+phone = '';
+email = '';
+count = 0;
+
+cfile = open('contacts.vcf', 'r')
+for line in cfile.readlines():
+    if (line.startswith('FN')):
+        count += 1
+        name = line.split(':')[1]
+        print
+        print u'[%d]' % count
+        print u'name=%s' % unicode(name, "utf-8"),
+    if (line.startswith('EMAIL')):
+        email = line.split(':')[1]
+        print u'email=%s' % email,
+    if (line.startswith('TEL')):
+        tel = line.split(';')[1]
+        fulltype = tel.split('=')[1]
+        type = fulltype.split(':')[0]
+        #print u'type=%s' % type,
+        phone = line.split(':')[1]
+        if (type.endswith('CELL')):
+            print u'mobile=%s' % phone,
+        elif (type.endswith('HOME')):
+            print u'phone=%s' % phone,
+        elif (type.endswith('WORK')):
+            print u'work=%s' % phone,
diff --git a/imap-passwords.py b/imap-passwords.py
new file mode 100755 (executable)
index 0000000..8535fcc
--- /dev/null
@@ -0,0 +1,43 @@
+#!/usr/bin/python
+
+#import gtk
+import gnomekeyring as gkey
+import getpass
+
+class Keyring(object):
+    def __init__(self, name, server, protocol):
+        self._name = name
+        self._server = server
+        self._protocol = protocol
+        self._keyring = gkey.get_default_keyring_sync()
+
+    def has_credentials(self):
+        try:
+            attrs = {"server": self._server, "protocol": self._protocol}
+            items = gkey.find_items_sync(gkey.ITEM_NETWORK_PASSWORD, attrs)
+            return len(items) > 0
+        except gkey.DeniedError:
+            return False
+
+    def get_credentials(self):
+        attrs = {"server": self._server, "protocol": self._protocol}
+        items = gkey.find_items_sync(gkey.ITEM_NETWORK_PASSWORD, attrs)
+        return (items[0].attributes["user"], items[0].secret)
+
+    def set_credentials(self, (user, pw)):
+        attrs = {
+                "user": user,
+                "server": self._server,
+                "protocol": self._protocol,
+            }
+        gkey.item_create_sync(gkey.get_default_keyring_sync(),
+                gkey.ITEM_NETWORK_PASSWORD, self._name, attrs, pw, True)
+
+server = raw_input("Server: ")
+username = raw_input("Username: ")
+password = getpass.getpass(prompt="Password: ")
+print
+
+keyring = Keyring("offlineimap", server, "imap")
+
+keyring.set_credentials((username, password))
diff --git a/lastcommit b/lastcommit
new file mode 100755 (executable)
index 0000000..59fa747
--- /dev/null
@@ -0,0 +1,34 @@
+#!/bin/sh
+#
+# Copyright 2010-2011 Julien Valroff <julien@debian.org>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+if [ -d .git ]; then
+
+    echo -n "git"
+    git log -1 --format='%cd.%h' --date=short | sed 's/-//g'
+
+elif [ -d .hg ]; then
+
+    echo -n "hg"
+    hg log --limit 1 | grep ^changeset | awk '{print $2}' | cut -d":" -f1
+
+else
+
+    echo "Not in a VCS repository or unsupported VCS"
+    exit 1
+
+fi
diff --git a/sort-subscriptions.sh b/sort-subscriptions.sh
new file mode 100755 (executable)
index 0000000..3606905
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+f=`mktemp`
+s=$HOME/Maildir/subscriptions
+
+grep '^INBOX' $s | sort > $f
+grep -v '^INBOX' $s | sort >> $f
+
+cat $f > $s
+rm -f $f
diff --git a/start-daemon.sh b/start-daemon.sh
new file mode 100755 (executable)
index 0000000..7cdc5cd
--- /dev/null
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+set -efu
+
+ionice_class=
+ionice_priority=
+nice=
+
+while getopts c:p:n: f; do
+    case $f in
+    c) ionice_class=$OPTARG;;
+    p) ionice_priority=$OPTARG;;
+    n) nice=$OPTARG;;
+    *) exit 2;;
+    esac
+done
+shift $((OPTIND - 1))
+
+cmd=$*
+io=
+
+if pgrep -u "$(id -u)" -xf -- "$cmd" >/dev/null 2>&1; then
+    exit 0
+fi
+
+if type ionice >/dev/null 2>&1; then
+    [ -n "$ionice_class" ]    && { io=1; cmd="-c $ionice_class $cmd"; }
+    [ -n "$ionice_priority" ] && { io=1; cmd="-n $ionice_priority $cmd"; }
+    [ -n "$io" ] && cmd="ionice $cmd"
+fi
+
+if type nice >/dev/null 2>&1; then
+    [ -n "$nice" ] && cmd="nice -n $nice $cmd"
+fi
+
+exec nohup $cmd >/dev/null 2>&1 &
diff --git a/update-pbuilder b/update-pbuilder
new file mode 100755 (executable)
index 0000000..513e3c0
--- /dev/null
@@ -0,0 +1,16 @@
+#!/bin/sh
+# Update all cowbuilder base images in the directory
+# specified in the $BASEPATH variable
+
+BASEPATH=/home/julien/debian/pbuilder/
+
+if [ "$1" = "clean" ]; then
+       OPT="--autocleanaptcache"
+fi
+
+for i in $(find $BASEPATH -maxdepth 1 -type d -name \*.cow); do
+    echo "====== Updating $i ====="
+    sudo cowbuilder --update --no-cowdancer --basepath $i $OPT
+    echo ""
+    echo ""
+done
diff --git a/uploaded.sh b/uploaded.sh
new file mode 100755 (executable)
index 0000000..aa3d3ea
--- /dev/null
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+set -e
+
+MAILTO="debian-uploads@lists.kirya.net"
+
+BASEDIR="/var/www/packages.kirya.net/debian"
+
+TMPF=`mktemp --tmpdir=$BASEDIR/tmp`
+cp $1 $TMPF
+
+reprepro -b $BASEDIR processincoming kirya
+
+if [ $? = 0 -a -r $TMPF ]; then
+
+       Source=$(grep -m1 ^Source: $TMPF  | awk '{print $2}')
+    Version=$(grep -m1 ^Version: $TMPF  | awk '{print $2}')
+    Architecture=$(grep -m1 ^Architecture: $TMPF  | sed 's/Architecture: //')
+
+       Uploader=$(grep -m1 ^Changed-By: $TMPF | sed 's/Changed-By: //')
+       [ -z "$Uploader" ] && Uploader=$(grep -m1 ^Maintainer: $TMPF | sed 's/Maintainer: //')
+
+    cat $TMPF | mail -a"From: $Uploader" -s"Uploaded $Source $Version ($Architecture) to packages.kirya.net" $MAILTO
+
+fi
+
+rm -f $TMPF
diff --git a/xterm-colortest b/xterm-colortest
new file mode 100755 (executable)
index 0000000..a069696
--- /dev/null
@@ -0,0 +1,365 @@
+#!/usr/bin/perl
+
+# by entheon, do whatever the hell you want with this file
+
+print "\n";
+print "**************************\n";
+print "*XTERM 256Color Test Chart\n";
+print "**************************\n";
+print "* 16  = black\n";
+print "* 255 = white\n";
+print "*\n";
+print "* Usage:\n";
+print "* colortest -w\n";
+print "*    wide display\n";
+print "*\n";
+print "* colortest -w -r\n";
+print "*    wide display reversed\n";
+print "*\n";
+print "* colortest -w -s\n";
+print "*    extra spaces padding\n";
+print "*\n";
+print "* colortest -w -r -s\n";
+print "*    available combination\n";
+print "*\n";
+print "**************************\n";
+
+if( $ARGV[0] eq "-w" || $ARGV[1] eq "-w" || $ARGV[2] eq "-w" ) {
+    push(@arr, [(  "\e[38;5;16m 16:  00/00/00",     "\e[38;5;17m 17:  00/00/5f",     "\e[38;5;18m 18:  00/00/87",     "\e[38;5;19m 19:  00/00/af",     "\e[38;5;20m 20:  00/00/d7",     "\e[38;5;21m 21:  00/00/ff")] );  
+    push(@arr, [(  "\e[38;5;22m 22:  00/5f/00",     "\e[38;5;23m 23:  00/5f/5f",     "\e[38;5;24m 24:  00/5f/87",     "\e[38;5;25m 25:  00/5f/af",     "\e[38;5;26m 26:  00/5f/d7",     "\e[38;5;27m 27:  00/5f/ff")] );  
+    push(@arr, [(  "\e[38;5;28m 28:  00/87/00",     "\e[38;5;29m 29:  00/87/5f",     "\e[38;5;30m 30:  00/87/87",     "\e[38;5;31m 31:  00/87/af",     "\e[38;5;32m 32:  00/87/d7",     "\e[38;5;33m 33:  00/87/ff")] );  
+    push(@arr, [(  "\e[38;5;34m 34:  00/af/00",     "\e[38;5;35m 35:  00/af/5f",     "\e[38;5;36m 36:  00/af/87",     "\e[38;5;37m 37:  00/af/af",     "\e[38;5;38m 38:  00/af/d7",     "\e[38;5;39m 39:  00/af/ff")] );  
+    push(@arr, [(  "\e[38;5;40m 40:  00/d7/00",     "\e[38;5;41m 41:  00/d7/5f",     "\e[38;5;42m 42:  00/d7/87",     "\e[38;5;43m 43:  00/d7/af",     "\e[38;5;44m 44:  00/d7/d7",     "\e[38;5;45m 45:  00/d7/ff")] );  
+    push(@arr, [(  "\e[38;5;46m 46:  00/ff/00",     "\e[38;5;47m 47:  00/ff/5f",     "\e[38;5;48m 48:  00/ff/87",     "\e[38;5;49m 49:  00/ff/af",     "\e[38;5;50m 50:  00/ff/d7",     "\e[38;5;51m 51:  00/ff/ff")] );  
+    push(@arr, [(  "\e[38;5;52m 52:  5f/00/00",     "\e[38;5;53m 53:  5f/00/5f",     "\e[38;5;54m 54:  5f/00/87",     "\e[38;5;55m 55:  5f/00/af",     "\e[38;5;56m 56:  5f/00/d7",     "\e[38;5;57m 57:  5f/00/ff")] );  
+    push(@arr, [(  "\e[38;5;58m 58:  5f/5f/00",     "\e[38;5;59m 59:  5f/5f/5f",     "\e[38;5;60m 60:  5f/5f/87",     "\e[38;5;61m 61:  5f/5f/af",     "\e[38;5;62m 62:  5f/5f/d7",     "\e[38;5;63m 63:  5f/5f/ff")] );  
+    push(@arr, [(  "\e[38;5;64m 64:  5f/87/00",     "\e[38;5;65m 65:  5f/87/5f",     "\e[38;5;66m 66:  5f/87/87",     "\e[38;5;67m 67:  5f/87/af",     "\e[38;5;68m 68:  5f/87/d7",     "\e[38;5;69m 69:  5f/87/ff")] );  
+    push(@arr, [(  "\e[38;5;70m 70:  5f/af/00",     "\e[38;5;71m 71:  5f/af/5f",     "\e[38;5;72m 72:  5f/af/87",     "\e[38;5;73m 73:  5f/af/af",     "\e[38;5;74m 74:  5f/af/d7",     "\e[38;5;75m 75:  5f/af/ff")] );  
+    push(@arr, [(  "\e[38;5;76m 76:  5f/d7/00",     "\e[38;5;77m 77:  5f/d7/5f",     "\e[38;5;78m 78:  5f/d7/87",     "\e[38;5;79m 79:  5f/d7/af",     "\e[38;5;80m 80:  5f/d7/d7",     "\e[38;5;81m 81:  5f/d7/ff")] );  
+    push(@arr, [(  "\e[38;5;82m 82:  5f/ff/00",     "\e[38;5;83m 83:  5f/ff/5f",     "\e[38;5;84m 84:  5f/ff/87",     "\e[38;5;85m 85:  5f/ff/af",     "\e[38;5;86m 86:  5f/ff/d7",     "\e[38;5;87m 87:  5f/ff/ff")] );  
+    push(@arr, [(  "\e[38;5;88m 88:  87/00/00",     "\e[38;5;89m 89:  87/00/5f",     "\e[38;5;90m 90:  87/00/87",     "\e[38;5;91m 91:  87/00/af",     "\e[38;5;92m 92:  87/00/d7",     "\e[38;5;93m 93:  87/00/ff")] );  
+    push(@arr, [(  "\e[38;5;94m 94:  87/5f/00",     "\e[38;5;95m 95:  87/5f/5f",     "\e[38;5;96m 96:  87/5f/87",     "\e[38;5;97m 97:  87/5f/af",     "\e[38;5;98m 98:  87/5f/d7",     "\e[38;5;99m 99:  87/5f/ff")] );  
+    push(@arr, [( "\e[38;5;100m 100: 87/87/00",    "\e[38;5;101m 101: 87/87/5f",    "\e[38;5;102m 102: 87/87/87",    "\e[38;5;103m 103: 87/87/af",    "\e[38;5;104m 104: 87/87/d7",    "\e[38;5;105m 105: 87/87/ff")] );
+    push(@arr, [( "\e[38;5;106m 106: 87/af/00",    "\e[38;5;107m 107: 87/af/5f",    "\e[38;5;108m 108: 87/af/87",    "\e[38;5;109m 109: 87/af/af",    "\e[38;5;110m 110: 87/af/d7",    "\e[38;5;111m 111: 87/af/ff")] );
+    push(@arr, [( "\e[38;5;112m 112: 87/d7/00",    "\e[38;5;113m 113: 87/d7/5f",    "\e[38;5;114m 114: 87/d7/87",    "\e[38;5;115m 115: 87/d7/af",    "\e[38;5;116m 116: 87/d7/d7",    "\e[38;5;117m 117: 87/d7/ff")] );
+    push(@arr, [( "\e[38;5;118m 118: 87/ff/00",    "\e[38;5;119m 119: 87/ff/5f",    "\e[38;5;120m 120: 87/ff/87",    "\e[38;5;121m 121: 87/ff/af",    "\e[38;5;122m 122: 87/ff/d7",    "\e[38;5;123m 123: 87/ff/ff")] );
+    push(@arr, [( "\e[38;5;124m 124: af/00/00",    "\e[38;5;125m 125: af/00/5f",    "\e[38;5;126m 126: af/00/87",    "\e[38;5;127m 127: af/00/af",    "\e[38;5;128m 128: af/00/d7",    "\e[38;5;129m 129: af/00/ff")] );
+    push(@arr, [( "\e[38;5;130m 130: af/5f/00",    "\e[38;5;131m 131: af/5f/5f",    "\e[38;5;132m 132: af/5f/87",    "\e[38;5;133m 133: af/5f/af",    "\e[38;5;134m 134: af/5f/d7",    "\e[38;5;135m 135: af/5f/ff")] );
+    push(@arr, [( "\e[38;5;136m 136: af/87/00",    "\e[38;5;137m 137: af/87/5f",    "\e[38;5;138m 138: af/87/87",    "\e[38;5;139m 139: af/87/af",    "\e[38;5;140m 140: af/87/d7",    "\e[38;5;141m 141: af/87/ff")] );
+    push(@arr, [( "\e[38;5;142m 142: af/af/00",    "\e[38;5;143m 143: af/af/5f",    "\e[38;5;144m 144: af/af/87",    "\e[38;5;145m 145: af/af/af",    "\e[38;5;146m 146: af/af/d7",    "\e[38;5;147m 147: af/af/ff")] );
+    push(@arr, [( "\e[38;5;148m 148: af/d7/00",    "\e[38;5;149m 149: af/d7/5f",    "\e[38;5;150m 150: af/d7/87",    "\e[38;5;151m 151: af/d7/af",    "\e[38;5;152m 152: af/d7/d7",    "\e[38;5;153m 153: af/d7/ff")] );
+    push(@arr, [( "\e[38;5;154m 154: af/ff/00",    "\e[38;5;155m 155: af/ff/5f",    "\e[38;5;156m 156: af/ff/87",    "\e[38;5;157m 157: af/ff/af",    "\e[38;5;158m 158: af/ff/d7",    "\e[38;5;159m 159: af/ff/ff")] );
+    push(@arr, [( "\e[38;5;160m 160: d7/00/00",    "\e[38;5;161m 161: d7/00/5f",    "\e[38;5;162m 162: d7/00/87",    "\e[38;5;163m 163: d7/00/af",    "\e[38;5;164m 164: d7/00/d7",    "\e[38;5;165m 165: d7/00/ff")] );
+    push(@arr, [( "\e[38;5;166m 166: d7/5f/00",    "\e[38;5;167m 167: d7/5f/5f",    "\e[38;5;168m 168: d7/5f/87",    "\e[38;5;169m 169: d7/5f/af",    "\e[38;5;170m 170: d7/5f/d7",    "\e[38;5;171m 171: d7/5f/ff")] );
+    push(@arr, [( "\e[38;5;172m 172: d7/87/00",    "\e[38;5;173m 173: d7/87/5f",    "\e[38;5;174m 174: d7/87/87",    "\e[38;5;175m 175: d7/87/af",    "\e[38;5;176m 176: d7/87/d7",    "\e[38;5;177m 177: d7/87/ff")] );
+    push(@arr, [( "\e[38;5;178m 178: d7/af/00",    "\e[38;5;179m 179: d7/af/5f",    "\e[38;5;180m 180: d7/af/87",    "\e[38;5;181m 181: d7/af/af",    "\e[38;5;182m 182: d7/af/d7",    "\e[38;5;183m 183: d7/af/ff")] );
+    push(@arr, [( "\e[38;5;184m 184: d7/d7/00",    "\e[38;5;185m 185: d7/d7/5f",    "\e[38;5;186m 186: d7/d7/87",    "\e[38;5;187m 187: d7/d7/af",    "\e[38;5;188m 188: d7/d7/d7",    "\e[38;5;189m 189: d7/d7/ff")] );
+    push(@arr, [( "\e[38;5;190m 190: d7/ff/00",    "\e[38;5;191m 191: d7/ff/5f",    "\e[38;5;192m 192: d7/ff/87",    "\e[38;5;193m 193: d7/ff/af",    "\e[38;5;194m 194: d7/ff/d7",    "\e[38;5;195m 195: d7/ff/ff")] );
+    push(@arr, [( "\e[38;5;196m 196: ff/00/00",    "\e[38;5;197m 197: ff/00/5f",    "\e[38;5;198m 198: ff/00/87",    "\e[38;5;199m 199: ff/00/af",    "\e[38;5;200m 200: ff/00/d7",    "\e[38;5;201m 201: ff/00/ff")] );
+    push(@arr, [( "\e[38;5;202m 202: ff/5f/00",    "\e[38;5;203m 203: ff/5f/5f",    "\e[38;5;204m 204: ff/5f/87",    "\e[38;5;205m 205: ff/5f/af",    "\e[38;5;206m 206: ff/5f/d7",    "\e[38;5;207m 207: ff/5f/ff")] );
+    push(@arr, [( "\e[38;5;208m 208: ff/87/00",    "\e[38;5;209m 209: ff/87/5f",    "\e[38;5;210m 210: ff/87/87",    "\e[38;5;211m 211: ff/87/af",    "\e[38;5;212m 212: ff/87/d7",    "\e[38;5;213m 213: ff/87/ff")] );
+    push(@arr, [( "\e[38;5;214m 214: ff/af/00",    "\e[38;5;215m 215: ff/af/5f",    "\e[38;5;216m 216: ff/af/87",    "\e[38;5;217m 217: ff/af/af",    "\e[38;5;218m 218: ff/af/d7",    "\e[38;5;219m 219: ff/af/ff")] );
+    push(@arr, [( "\e[38;5;220m 220: ff/d7/00",    "\e[38;5;221m 221: ff/d7/5f",    "\e[38;5;222m 222: ff/d7/87",    "\e[38;5;223m 223: ff/d7/af",    "\e[38;5;224m 224: ff/d7/d7",    "\e[38;5;225m 225: ff/d7/ff")] );
+    push(@arr, [( "\e[38;5;226m 226: ff/ff/00",    "\e[38;5;227m 227: ff/ff/5f",    "\e[38;5;228m 228: ff/ff/87",    "\e[38;5;229m 229: ff/ff/af",    "\e[38;5;230m 230: ff/ff/d7",    "\e[38;5;231m 231: ff/ff/ff")] );
+    push(@arr, [( "\e[38;5;232m 232: 08/08/08",    "\e[38;5;233m 233: 12/12/12",    "\e[38;5;234m 234: 1c/1c/1c",    "\e[38;5;235m 235: 26/26/26",    "\e[38;5;236m 236: 30/30/30",    "\e[38;5;237m 237: 3a/3a/3a")] );
+    push(@arr, [( "\e[38;5;238m 238: 44/44/44",    "\e[38;5;239m 239: 4e/4e/4e",    "\e[38;5;240m 240: 58/58/58",    "\e[38;5;241m 241: 62/62/62",    "\e[38;5;242m 242: 6c/6c/6c",    "\e[38;5;243m 243: 76/76/76")] );
+    push(@arr, [( "\e[38;5;244m 244: 80/80/80",    "\e[38;5;245m 245: 8a/8a/8a",    "\e[38;5;246m 246: 94/94/94",    "\e[38;5;247m 247: 9e/9e/9e",    "\e[38;5;248m 248: a8/a8/a8",    "\e[38;5;249m 249: b2/b2/b2")] );
+    push(@arr, [( "\e[38;5;250m 250: bc/bc/bc",    "\e[38;5;251m 251: c6/c6/c6",    "\e[38;5;252m 252: d0/d0/d0",    "\e[38;5;253m 253: da/da/da",    "\e[38;5;254m 254: e4/e4/e4",    "\e[38;5;255m 255: ee/ee/ee")] );
+
+    if( $ARGV[0] eq "-s" || $ARGV[1] eq "-s" || $ARGV[2] eq "-s" ){
+        $padding = "    ";
+    }
+    else {
+        
+    }
+
+    # display in reverse order
+    if( $ARGV[0] eq "-r" || $ARGV[1] eq "-r" || $ARGV[2] eq "-r" ){
+        for( $dimone = 0; $dimone < scalar @arr; $dimone++ ) {
+
+            $seed = ($dimone % 6) * -1;
+            for( $dimtwo = 0; $dimtwo < 6; $dimtwo++ ) {
+
+                $movone = $seed;
+                $movtwo = $seed * -1;
+
+                print $arr[$dimone][$dimtwo] . $padding;
+
+                $seed = $seed+1;
+            }
+
+            print "\n";
+        }
+    }
+    else {
+        for( $dimone = 0; $dimone < scalar @arr; $dimone++ ) {
+
+            $seed = ($dimone % 6) * -1;
+            for( $dimtwo = 0; $dimtwo < 6; $dimtwo++ ) {
+
+                $movone = $seed;
+                $movtwo = $seed * -1;
+
+                $newone = $dimone+$movone;
+                $newtwo = $dimtwo+$movtwo;
+
+                if( $newone < scalar @arr ){
+                    print $arr[$newone][$newtwo] . $padding;
+                }
+
+                $seed = $seed+1;
+            }
+
+            print "\n";
+        }
+    }
+    print "\n";
+    print "\n";
+
+}
+else {
+    print "\e[38;5;16m 16:  00/00/00\n";
+    print "\e[38;5;17m 17:  00/00/5f\n";
+    print "\e[38;5;18m 18:  00/00/87\n";
+    print "\e[38;5;19m 19:  00/00/af\n";
+    print "\e[38;5;20m 20:  00/00/d7\n";
+    print "\e[38;5;21m 21:  00/00/ff\n";
+    print "\e[38;5;22m 22:  00/5f/00\n";
+    print "\e[38;5;23m 23:  00/5f/5f\n";
+    print "\e[38;5;24m 24:  00/5f/87\n";
+    print "\e[38;5;25m 25:  00/5f/af\n";
+    print "\e[38;5;26m 26:  00/5f/d7\n";
+    print "\e[38;5;27m 27:  00/5f/ff\n";
+    print "\e[38;5;28m 28:  00/87/00\n";
+    print "\e[38;5;29m 29:  00/87/5f\n";
+    print "\e[38;5;30m 30:  00/87/87\n";
+    print "\e[38;5;31m 31:  00/87/af\n";
+    print "\e[38;5;32m 32:  00/87/d7\n";
+    print "\e[38;5;33m 33:  00/87/ff\n";
+    print "\e[38;5;34m 34:  00/af/00\n";
+    print "\e[38;5;35m 35:  00/af/5f\n";
+    print "\e[38;5;36m 36:  00/af/87\n";
+    print "\e[38;5;37m 37:  00/af/af\n";
+    print "\e[38;5;38m 38:  00/af/d7\n";
+    print "\e[38;5;39m 39:  00/af/ff\n";
+    print "\e[38;5;40m 40:  00/d7/00\n";
+    print "\e[38;5;41m 41:  00/d7/5f\n";
+    print "\e[38;5;42m 42:  00/d7/87\n";
+    print "\e[38;5;43m 43:  00/d7/af\n";
+    print "\e[38;5;44m 44:  00/d7/d7\n";
+    print "\e[38;5;45m 45:  00/d7/ff\n";
+    print "\e[38;5;46m 46:  00/ff/00\n";
+    print "\e[38;5;47m 47:  00/ff/5f\n";
+    print "\e[38;5;48m 48:  00/ff/87\n";
+    print "\e[38;5;49m 49:  00/ff/af\n";
+    print "\e[38;5;50m 50:  00/ff/d7\n";
+    print "\e[38;5;51m 51:  00/ff/ff\n";
+    print "\e[38;5;52m 52:  5f/00/00\n";
+    print "\e[38;5;53m 53:  5f/00/5f\n";
+    print "\e[38;5;54m 54:  5f/00/87\n";
+    print "\e[38;5;55m 55:  5f/00/af\n";
+    print "\e[38;5;56m 56:  5f/00/d7\n";
+    print "\e[38;5;57m 57:  5f/00/ff\n";
+    print "\e[38;5;58m 58:  5f/5f/00\n";
+    print "\e[38;5;59m 59:  5f/5f/5f\n";
+    print "\e[38;5;60m 60:  5f/5f/87\n";
+    print "\e[38;5;61m 61:  5f/5f/af\n";
+    print "\e[38;5;62m 62:  5f/5f/d7\n";
+    print "\e[38;5;63m 63:  5f/5f/ff\n";
+    print "\e[38;5;64m 64:  5f/87/00\n";
+    print "\e[38;5;65m 65:  5f/87/5f\n";
+    print "\e[38;5;66m 66:  5f/87/87\n";
+    print "\e[38;5;67m 67:  5f/87/af\n";
+    print "\e[38;5;68m 68:  5f/87/d7\n";
+    print "\e[38;5;69m 69:  5f/87/ff\n";
+    print "\e[38;5;70m 70:  5f/af/00\n";
+    print "\e[38;5;71m 71:  5f/af/5f\n";
+    print "\e[38;5;72m 72:  5f/af/87\n";
+    print "\e[38;5;73m 73:  5f/af/af\n";
+    print "\e[38;5;74m 74:  5f/af/d7\n";
+    print "\e[38;5;75m 75:  5f/af/ff\n";
+    print "\e[38;5;76m 76:  5f/d7/00\n";
+    print "\e[38;5;77m 77:  5f/d7/5f\n";
+    print "\e[38;5;78m 78:  5f/d7/87\n";
+    print "\e[38;5;79m 79:  5f/d7/af\n";
+    print "\e[38;5;80m 80:  5f/d7/d7\n";
+    print "\e[38;5;81m 81:  5f/d7/ff\n";
+    print "\e[38;5;82m 82:  5f/ff/00\n";
+    print "\e[38;5;83m 83:  5f/ff/5f\n";
+    print "\e[38;5;84m 84:  5f/ff/87\n";
+    print "\e[38;5;85m 85:  5f/ff/af\n";
+    print "\e[38;5;86m 86:  5f/ff/d7\n";
+    print "\e[38;5;87m 87:  5f/ff/ff\n";
+    print "\e[38;5;88m 88:  87/00/00\n";
+    print "\e[38;5;89m 89:  87/00/5f\n";
+    print "\e[38;5;90m 90:  87/00/87\n";
+    print "\e[38;5;91m 91:  87/00/af\n";
+    print "\e[38;5;92m 92:  87/00/d7\n";
+    print "\e[38;5;93m 93:  87/00/ff\n";
+    print "\e[38;5;94m 94:  87/5f/00\n";
+    print "\e[38;5;95m 95:  87/5f/5f\n";
+    print "\e[38;5;96m 96:  87/5f/87\n";
+    print "\e[38;5;97m 97:  87/5f/af\n";
+    print "\e[38;5;98m 98:  87/5f/d7\n";
+    print "\e[38;5;99m 99:  87/5f/ff\n";
+    print "\e[38;5;100m 100 :87/87/00\n";
+    print "\e[38;5;101m 101 :87/87/5f\n";
+    print "\e[38;5;102m 102 :87/87/87\n";
+    print "\e[38;5;103m 103 :87/87/af\n";
+    print "\e[38;5;104m 104 :87/87/d7\n";
+    print "\e[38;5;105m 105 :87/87/ff\n";
+    print "\e[38;5;106m 106 :87/af/00\n";
+    print "\e[38;5;107m 107 :87/af/5f\n";
+    print "\e[38;5;108m 108 :87/af/87\n";
+    print "\e[38;5;109m 109 :87/af/af\n";
+    print "\e[38;5;110m 110 :87/af/d7\n";
+    print "\e[38;5;111m 111 :87/af/ff\n";
+    print "\e[38;5;112m 112 :87/d7/00\n";
+    print "\e[38;5;113m 113 :87/d7/5f\n";
+    print "\e[38;5;114m 114 :87/d7/87\n";
+    print "\e[38;5;115m 115 :87/d7/af\n";
+    print "\e[38;5;116m 116 :87/d7/d7\n";
+    print "\e[38;5;117m 117 :87/d7/ff\n";
+    print "\e[38;5;118m 118 :87/ff/00\n";
+    print "\e[38;5;119m 119 :87/ff/5f\n";
+    print "\e[38;5;120m 120 :87/ff/87\n";
+    print "\e[38;5;121m 121 :87/ff/af\n";
+    print "\e[38;5;122m 122 :87/ff/d7\n";
+    print "\e[38;5;123m 123 :87/ff/ff\n";
+    print "\e[38;5;124m 124 :af/00/00\n";
+    print "\e[38;5;125m 125 :af/00/5f\n";
+    print "\e[38;5;126m 126 :af/00/87\n";
+    print "\e[38;5;127m 127 :af/00/af\n";
+    print "\e[38;5;128m 128 :af/00/d7\n";
+    print "\e[38;5;129m 129 :af/00/ff\n";
+    print "\e[38;5;130m 130 :af/5f/00\n";
+    print "\e[38;5;131m 131 :af/5f/5f\n";
+    print "\e[38;5;132m 132 :af/5f/87\n";
+    print "\e[38;5;133m 133 :af/5f/af\n";
+    print "\e[38;5;134m 134 :af/5f/d7\n";
+    print "\e[38;5;135m 135 :af/5f/ff\n";
+    print "\e[38;5;136m 136 :af/87/00\n";
+    print "\e[38;5;137m 137 :af/87/5f\n";
+    print "\e[38;5;138m 138 :af/87/87\n";
+    print "\e[38;5;139m 139 :af/87/af\n";
+    print "\e[38;5;140m 140 :af/87/d7\n";
+    print "\e[38;5;141m 141 :af/87/ff\n";
+    print "\e[38;5;142m 142 :af/af/00\n";
+    print "\e[38;5;143m 143 :af/af/5f\n";
+    print "\e[38;5;144m 144 :af/af/87\n";
+    print "\e[38;5;145m 145 :af/af/af\n";
+    print "\e[38;5;146m 146 :af/af/d7\n";
+    print "\e[38;5;147m 147 :af/af/ff\n";
+    print "\e[38;5;148m 148 :af/d7/00\n";
+    print "\e[38;5;149m 149 :af/d7/5f\n";
+    print "\e[38;5;150m 150 :af/d7/87\n";
+    print "\e[38;5;151m 151 :af/d7/af\n";
+    print "\e[38;5;152m 152 :af/d7/d7\n";
+    print "\e[38;5;153m 153 :af/d7/ff\n";
+    print "\e[38;5;154m 154 :af/ff/00\n";
+    print "\e[38;5;155m 155 :af/ff/5f\n";
+    print "\e[38;5;156m 156 :af/ff/87\n";
+    print "\e[38;5;157m 157 :af/ff/af\n";
+    print "\e[38;5;158m 158 :af/ff/d7\n";
+    print "\e[38;5;159m 159 :af/ff/ff\n";
+    print "\e[38;5;160m 160 :d7/00/00\n";
+    print "\e[38;5;161m 161 :d7/00/5f\n";
+    print "\e[38;5;162m 162 :d7/00/87\n";
+    print "\e[38;5;163m 163 :d7/00/af\n";
+    print "\e[38;5;164m 164 :d7/00/d7\n";
+    print "\e[38;5;165m 165 :d7/00/ff\n";
+    print "\e[38;5;166m 166 :d7/5f/00\n";
+    print "\e[38;5;167m 167 :d7/5f/5f\n";
+    print "\e[38;5;168m 168 :d7/5f/87\n";
+    print "\e[38;5;169m 169 :d7/5f/af\n";
+    print "\e[38;5;170m 170 :d7/5f/d7\n";
+    print "\e[38;5;171m 171 :d7/5f/ff\n";
+    print "\e[38;5;172m 172 :d7/87/00\n";
+    print "\e[38;5;173m 173 :d7/87/5f\n";
+    print "\e[38;5;174m 174 :d7/87/87\n";
+    print "\e[38;5;175m 175 :d7/87/af\n";
+    print "\e[38;5;176m 176 :d7/87/d7\n";
+    print "\e[38;5;177m 177 :d7/87/ff\n";
+    print "\e[38;5;178m 178 :d7/af/00\n";
+    print "\e[38;5;179m 179 :d7/af/5f\n";
+    print "\e[38;5;180m 180 :d7/af/87\n";
+    print "\e[38;5;181m 181 :d7/af/af\n";
+    print "\e[38;5;182m 182 :d7/af/d7\n";
+    print "\e[38;5;183m 183 :d7/af/ff\n";
+    print "\e[38;5;184m 184 :d7/d7/00\n";
+    print "\e[38;5;185m 185 :d7/d7/5f\n";
+    print "\e[38;5;186m 186 :d7/d7/87\n";
+    print "\e[38;5;187m 187 :d7/d7/af\n";
+    print "\e[38;5;188m 188 :d7/d7/d7\n";
+    print "\e[38;5;189m 189 :d7/d7/ff\n";
+    print "\e[38;5;190m 190 :d7/ff/00\n";
+    print "\e[38;5;191m 191 :d7/ff/5f\n";
+    print "\e[38;5;192m 192 :d7/ff/87\n";
+    print "\e[38;5;193m 193 :d7/ff/af\n";
+    print "\e[38;5;194m 194 :d7/ff/d7\n";
+    print "\e[38;5;195m 195 :d7/ff/ff\n";
+    print "\e[38;5;196m 196 :ff/00/00\n";
+    print "\e[38;5;197m 197 :ff/00/5f\n";
+    print "\e[38;5;198m 198 :ff/00/87\n";
+    print "\e[38;5;199m 199 :ff/00/af\n";
+    print "\e[38;5;200m 200 :ff/00/d7\n";
+    print "\e[38;5;201m 201 :ff/00/ff\n";
+    print "\e[38;5;202m 202 :ff/5f/00\n";
+    print "\e[38;5;203m 203 :ff/5f/5f\n";
+    print "\e[38;5;204m 204 :ff/5f/87\n";
+    print "\e[38;5;205m 205 :ff/5f/af\n";
+    print "\e[38;5;206m 206 :ff/5f/d7\n";
+    print "\e[38;5;207m 207 :ff/5f/ff\n";
+    print "\e[38;5;208m 208 :ff/87/00\n";
+    print "\e[38;5;209m 209 :ff/87/5f\n";
+    print "\e[38;5;210m 210 :ff/87/87\n";
+    print "\e[38;5;211m 211 :ff/87/af\n";
+    print "\e[38;5;212m 212 :ff/87/d7\n";
+    print "\e[38;5;213m 213 :ff/87/ff\n";
+    print "\e[38;5;214m 214 :ff/af/00\n";
+    print "\e[38;5;215m 215 :ff/af/5f\n";
+    print "\e[38;5;216m 216 :ff/af/87\n";
+    print "\e[38;5;217m 217 :ff/af/af\n";
+    print "\e[38;5;218m 218 :ff/af/d7\n";
+    print "\e[38;5;219m 219 :ff/af/ff\n";
+    print "\e[38;5;220m 220 :ff/d7/00\n";
+    print "\e[38;5;221m 221 :ff/d7/5f\n";
+    print "\e[38;5;222m 222 :ff/d7/87\n";
+    print "\e[38;5;223m 223 :ff/d7/af\n";
+    print "\e[38;5;224m 224 :ff/d7/d7\n";
+    print "\e[38;5;225m 225 :ff/d7/ff\n";
+    print "\e[38;5;226m 226 :ff/ff/00\n";
+    print "\e[38;5;227m 227 :ff/ff/5f\n";
+    print "\e[38;5;228m 228 :ff/ff/87\n";
+    print "\e[38;5;229m 229 :ff/ff/af\n";
+    print "\e[38;5;230m 230 :ff/ff/d7\n";
+    print "\e[38;5;231m 231 :ff/ff/ff\n";
+    print "\e[38;5;232m 232 :08/08/08\n";
+    print "\e[38;5;233m 233 :12/12/12\n";
+    print "\e[38;5;234m 234 :1c/1c/1c\n";
+    print "\e[38;5;235m 235 :26/26/26\n";
+    print "\e[38;5;236m 236 :30/30/30\n";
+    print "\e[38;5;237m 237 :3a/3a/3a\n";
+    print "\e[38;5;238m 238 :44/44/44\n";
+    print "\e[38;5;239m 239 :4e/4e/4e\n";
+    print "\e[38;5;240m 240 :58/58/58\n";
+    print "\e[38;5;241m 241 :62/62/62\n";
+    print "\e[38;5;242m 242 :6c/6c/6c\n";
+    print "\e[38;5;243m 243 :76/76/76\n";
+    print "\e[38;5;244m 244 :80/80/80\n";
+    print "\e[38;5;245m 245 :8a/8a/8a\n";
+    print "\e[38;5;246m 246 :94/94/94\n";
+    print "\e[38;5;247m 247 :9e/9e/9e\n";
+    print "\e[38;5;248m 248 :a8/a8/a8\n";
+    print "\e[38;5;249m 249 :b2/b2/b2\n";
+    print "\e[38;5;250m 250 :bc/bc/bc\n";
+    print "\e[38;5;251m 251 :c6/c6/c6\n";
+    print "\e[38;5;252m 252 :d0/d0/d0\n";
+    print "\e[38;5;253m 253 :da/da/da\n";
+    print "\e[38;5;254m 254 :e4/e4/e4\n";
+    print "\e[38;5;255m 255 :ee/ee/ee\n";
+    print "\n";
+    print "\n";
+}
+#print "\e0m";
+exit;