www.jetmore.org/john/code

Nothing's guaranteed. If it breaks it's not my fault. All programs have
usage information available through --help option.
 
bak - low cognitive-load file archiving
exipick - display messages from Exim queue based on a variety of criteria
exixpand - An overlay for Exim string expansion testing (exim -be) providing history, command editing, and macro expansion
gen-auth - generate and decode SMTP authentication strings (PLAIN, LOGIN, CRAM-MD5, SPA)
parse-ipod-db - display info on music in iPod DB (unsupported)
myclear - clear to bottom of terminal instead of top
rand - generate random numbers for scripts
swaks - Swiss Army Knife SMTP

bak - low cognitive-load file archiving (latest version)

TODO
- 20030422 work w/ directories, too...
- 20030422 work across file systems?

Version History 20030322.0
* 19990415 initial implementation
* 20021028 changed #! line from /local to /usr
* 20021028 rewritten 3.5 years later
             - ensures files exist
             - mkdirs bak dir rel to file, rather than CWD
             - preserves file attrs (owner, grp, mode)
             - better error checking
             - suffix from .# to .YYYYMMDD.#
             - changed to 'use strict';
* 20021104 added -p option to select path for save dir.  By default it
           uses the same path as the argument
* 20021104 added -d option to specify name of save dir.  By default it
           uses 'bak'
* 20021104 added -n option to add one line note to comment file
* 20021104 added -c option to add multiline comment to comment file
* 20021104 added better error checking
* 20021202 added ext_usage function for --help
* 20021202 started filling in info for detailed --help option
* 20021223 added -n and -c options to usage strings
* 20021223 changed behaviour of comment strings.  Now the comments
           go into <file>.note (not <file>.<dstr>.<s>.note
* 20021223 changed default save location to BAK (from bak)
* 20021223 finished --help screen
* 20021226 added -a option
* 20021226 .note file now gets created w/ x bits masked off.
* 20021226 added "0" entry for exit status in --help
* 20021226 moved from usage() model to mexit() model
* 20030322 added --version, moved --help to POD

exipick - display messages from Exim queue based on a variety of criteria (latest version)
If you would like to receive email notifications when new versions are released, please send an email to updates-exipick@jetmore.net

TODO

Version History 20100323.0
* 20100323 fixed doc typo for -bpra (debian 574778)
20100222.0
* 20100222 added --input-dir and --finput options to allow non-std
           queue locations (esp. the "Finput" "frozen queue")
20100104.1
* 20070628 updated copyright to 2007
* 20070628 added support for $max_received_linelength (4.68-PH/11)
* 20071217 added header_path and data_path variables,haven't documented
* 20080422 fixed documentation bug regarding behavior of -r and -f
* 20100104 fixed doc type, exim bug 942, reported by andreas
* 20100104 updated copyright date to 2010
* 20100104 documented data_path and header_path variables
20061117.2
* 20061016 implemented $h_ shortcuts for $header_ variables
* 20061017 re-implemented header parsing.  Processing of h_*,
           message_headers, reply_address, and received_count is now
           defered until var is actually requested
* 20061017 implemented rh_* and bh_*, and reimplemented h_* vars
           to match spec. I'm 100% sure rh_ is right, I'm pretty
           sure bh_ is right, and I feel pretty good about h_.  Perl
           Encode module is required to translate between character sets
* 20061017 created --charset option to override default local charset
* 20061017 made $message_headers match spec definition and implemented
           new var $message_headers_raw as per 4.64-PH/13
> 20061017 released 20061017.1-dev to exim-users@exim.org
* 20061019 explicitly pre-set a couple of boolean vars to "0" to match
           exim's behaviour
* 20061019 added --just-vars option to aid debugging
* 20061116 processing was allowed to go on too long when a criterion
           was found to be invalid resulting in non-sensical errors.
* 20061116 20061107 numeric operators did not handle negative values
           correctly
* 20061117 added and documented $message_body_missing variable
* 20061117 added and documented $received_ip_address and
           $received_port (4.64-PH/43)
* 20061117 punted on h_ vars.  rh_ and bh_ match exim behavior, h_
           always matches bh_ (like exim w/ no iconv support) until
           I can figure out how to make perl and exim match
* 20061117 rejiggered bh_ and h_ line endings to match new
           behavior in 4.64-PH/27
20060919.0
* 20060919 changed spool reading code to handle arbitrary acl_ 
           variables (4.64-PH/09)
* 20060919 an args starting with '^' supplied to --show-vars is now
           a regular expression applied against all variable names.
           Variable names matching will be displayed.
* 20060919 fixed getopt declaration to make args to some options
           required, not optional (--spool, -f, -r, -s, -y, -o,
           --sort, --freeze, --thaw, --show-vars)
20060721.2
* 20060606 added --reverse option (and -R for exiqgrep compatibility)
* 20060606 added --random option
* 20060609 added --size option
* 20060622 Updated FSF address in GPL notice
* 20060623 implemented and documented --sort option
* 20060623 changed guts of Exim::SpoolFile::print_message to
           Exim::SpoolFile::format_message and made print_message
           a wrapper call to format_message
* 20060623 reimplemented --sort, storing output from format_message
           instead of using IO::Scalar/tie/untie method, which
           was slower than I'd like.
* 20060721 format_message/print_message change 0n 6/23 introduced
           bug where -i no longer worked.  fixed.
* 20060721 removed requirement for IO::Scalar left over from
           previous --sort implementation
* 20060721 added --not to negate all tests
* 20060721 redid --help text to hopefully be more clear.  added
           ToolExipick and ToolExipickManPage pages to wiki.  Added
           link to ToolExipickManPage in exim spec
20060307.1
* 20060216 20050728 added --unsorted to enable unsorted output in
           all output formats (previously only available via exim
           options -bpr, -bpru, and -bpra)
* 20060222 added --freeze and --thaw methods
* 20060223 documented --freeze and --thaw
* 20060223 added and documented ! operator to negate entire criteria.
* 20060223 fixed bug where -bpc and -c didn't work w/ --freeze
* 20060223 performance enhancements (11.5% reduction in execution
           time from previous version)
* 20060302 (done 20060224) checkin more perf enhancement (~24%
           from initial review)
20060216.1
* 20060216 removed parentheses from 'next' and 'last' calls that
           specified labels.  This cause compilation failure on
           older perls (5.005_03 specifically)
* 20060216 refactored code to remove -w error on deprecated split
           usage in new-ish perls
* 20060216 updated copyright year
* 20060216 20050701 -bpc always showed count of all messages on
           queue.  Changed to only show those matching criteria
20051215.3
* 20051215 fixed --show-vars/-b bug ("Vars:" was shown regardless
           of whether --show-vars was used);
* 20051215 made var retrieval using get_var() caseless
* 20051215 added support for new -aclc and -aclm spool format
           introduced in 4.61-PH/06
20050802.0
* 20050802 added message_exim_id var (4.53-PH/04)
20050604.1
* 20050604 20050516 fixed so eq/ne crit can use quotes on the value
           if you want (kept doing it out of habit)
* 20050604 20050603 documented --flatq, --show-vars, --show-tests
* 20050604 20050603 documented --show-vars, confirmed working status
* 20050604 implemented new var shown_message_size and documented
* 20050604 finally implemented exiqgrep's -s option and documented
* 20050604 fixed --show-vars to display in the order specified
* 20050604 20050603 made --show-vars work w/ -i, --flatq, -b
* 20050604 noted in docs $received_time is now a std var as of 4.51
* 20050604 fixed login/uid/gid parsing per exim change 4.51-PH/34
* 20050604 add variable message_linecount (4.51-PH/41)
20050225.0
* 20050117 set $| to unbuffer STDOUT
* 20050223 updated copyright date to 2005
* 20050223 Fixed spool file reading of login/uid/gid line per
           exim ChangeLog 4.50/80
* 20050223 added $host_lookup_deferred, $smtp_active_hostname,
           $spam_score, $spam_score_int, $bmi_verdicts (exim-4.50)
* 20050224 actually added $spam_score this time
* 20050225 added --show-tests option to show criteria exactly as they
           are processed against each message
* 20050225 added $each_recipients, $each_recipients_del and
           $each_recipients_undel pseudo vars
* 20050225 in documentation, mark every variable with a $ to make it
           easier to read.  Other doc cleanups.
* 20050225 reformatted some of the code for easier reading
20041110.0
* 20041102 added optimization when searching for specific message_id
* 20041103 changed '=' op to be caseless by dafault, added --caseful
           option to change this back to old behavior.
* 20041110 fixed recipients_del POD to note that it includes
           generated addrs
* 20041110 added variables recipients_{del,undel}_count
20040725.0
* 20040301 doc fixes (just stupid typos)
* 20040422 added --show-rules opt to display compiled rules
* 20040422 fixed bug in compilation regexps.  caused 'recipients =
           domain.net' to parse as var = 'recipients = domain.' and
           cmp = '("$var" ne "t") ? 1 : 0'
* 20040724 added $body_zerocount, $allow_unqualified_recipient,
           $allow_unqualified_sender (exim-4.41)
20040221.0
* 20040220 added f, r, y, o, z, x, c, l, i, b options to mimic
           interface to exiqgrep
* 20040220 added --flatq option (I hate exiqgrep's -b output)
* 20040221 documented new options
* 20040221 added and documented -show-vars option
20040104.2
* 20031229 started building Exim::HeaderFile module internally, got
           loose structure and started figuring out how to parse hdr
* 20031229 finished header parsing, started modeling how to access data
* 20031231 finished rough model of module and program
* 20031231 reworked module to handle multiple messages per instance
* 20031231 add on-demand body loading
* 20031231 implemented message_body_size and message_size
* 20040101 fix to read headers > 999 bytes
* 20040101 better handling of messages which disappear (get delivered)
* 20040101 fixed calc for message_size to match exim's method
* 20040101 reworked criteria processing to support multiple types
* 20040102 changed output to match exim's if -D file missing
* 20040102 allow M/K, d/h/m suffixes on numeric comparisons
* 20040102 changed Exim::HeaderFile to Exim::SpoolFile
* 20040102 fixed misc bugs in criteria processing
* 20040102 fixed recipient parsing to handle multiple styles of listing
* 20040102 added meaningful error framework to Exim::SpoolFile
* 20040102 added release framework
* 20040102 added -spool, -bp, -bpa, -bpc, -bpr, -bpra, -bpru, -bpu opts
* 20040102 fixed bug w/ multiple criteria using same variable
* 20040102 added -and and -or to specify type of processing
* 20040102 fixed bug in calculation of received_count
* 20040104 wrote --help POD
* 20040104 fixed stupid bug in -bpc calculation
* 20040104 changed deliver_firsttime to first_delivery and
           deliver_manual_thaw to manually_thawed
* 20040104 allow variably cased criteria vars (to allow header_To, etc)
* 20040104 add originator_login to output when applicable

exixpand - An overlay for Exim string expansion testing (exim -be) providing history, command editing, and macro expansion (latest version)

TODO
- 20040421 need to handle wrapped lines better
- 20040422 do .commands need to be added to history
- 20040422 how do history and multiline editing work together?
- 20040521 should somehow keep track of MACROs, also.  possibly
           a little harder because we don't get the $ leader?
- 20040715 catch ^C as a line-clearer (EOT to exit)
- 20041124 use IPC::Open3 to talk to exim.  wrap in a timer to
           handle deadlock issues

Version History 20050922.1
* 20040421 built basic wrapper w/ history support
* 20040421 added .track, .untrack, and .showvar commands for doing
           internal variable interpolation
* 20040421 started adding support for header variables
* 20040421 added warning for unrecognized commands
* 20041125 added docs
* 20041125 moved quit|exit to .quit|.exit
* 20050922 updated copyright
* 20050922 updated/moved/commented exim binary path

gen-auth - generate and decode SMTP authentication strings (PLAIN, LOGIN, CRAM-MD5, SPA) (latest version)
If you would like to receive email notifications when new versions are released, please send an email to updates-gen-auth@jetmore.net

TODO

Version History 20060620.0
* 20040315 added rce and rcd methods
* 20040316 added and documented encrypt and saltencrypt methods
* 20040316 added -s option to suppress echo on all inputs
* 20040316 added wcsencode and wcsdecode methods
* 20041110 added md5-hex and md5-base64 methods
* 20060201 updated copyright date from 2003 to 2006
* 20060201 rewrote (simplified) get-digest().
* 20060201 added and documented CRAM-SHA1 support
* 20060430 added rot13 support
* 20060430 adde atbash support (needed it for google/davinci game)
* 20060620 added and documented APOP support (contributed by
           anthonyu#killa.net)
* 20060620 general doc revisions for format, typos, etc.  Documented
           previously undocumented methods rot13, atbash
* 20060620 change license to straight GPL
* 20060620 implemented and documented HTTP-BASIC
20031101.2
* 20031101 fixed bug in NTLM (worked w/ exim but not communigate)
20031027.2
* 20031027 reworked command line/stdin processing to be more unified
* 20031027 allow '<>' as args on command line meaning empty string
* 20031027 made Digest::MD5 required only for CRAM-MD5, exit cleanly
           if not found
* 20031027 added NTLM/SPA/MSN authentication (using Authen::NTLM)
* 20031027 updated --help text
20030322.1
* 20030322 unique exit status for unrecognized type
* 20030322 added --help, --version, made release compliant
* 20030322 turned off extraneous printing in CRAM-MD5
* 20030322 changed to allow case-insensitive type specifications
20030312.0
* 20030312 fixed problem with base 64 encoding on lines longer than
           76 chars encoded (~58 plain)
20030310
* 20030310 initial version

parse-ipod-db - display info on music in iPod DB (latest version)

TODO
- 20031027 implement complete DB format as detailed in ACM article.

Version History 20040316.0
* 20040316 placed under the GPL and added comment declaring the 
           script abondonware
20030601.0
* 20030531 initial version

myclear - clear to bottom of terminal instead of top (latest version)

TODO

Version History 20030322.0
* 20030322 added --help, --verion, made release compliant
20030319.0
* 20020514 initial implementation
* 20030122 added ability to use Term::ReadKey (if present) to get
           dimensions of screen.  This means that variable screen
           sizes finally work.  Left old code if ReadKey not installed.
* 20030122 cleaned up the code a bit

rand - generate random numbers for scripts (latest version)

TODO

Version History 20030319.2
* 20030319 added --version, changed --help to use POD
20030319.1
* 20011017 initial implementation
* 20021226 'use strict' compliant
* 20021226 fix $max (defined but not used)
* 20021226 changed default from 0-99 to 1-100.
* 20021226 added usage() function
* 20021226 added and populated ext_usage function
* 20021226 allowed max to be an arbitrary range (x-y means >=x and
           <=y
* 20021226 -s option for specifying srand seed
* 20021226 -n option to specify a number of random nums to produce
* 20021226 option specifying int or float (-f)
* 20021226 added -p option to set precision for float.
* 20021226 option to change default from 0->x-1 to 1->x (-i)
* 20021226 moved from usage() model to mexit() model
* 20030319 changed contact addess to proj-rand

swaks - Swiss Army Knife SMTP; Command line SMTP testing, including TLS and AUTH (Project Page)
If you would like to receive email notifications when new versions are released, please send an email to updates-swaks@jetmore.net