#!/usr/bin/perl -w

# quickie to send mail to my pager

# $Id: mail-by-pager.pl,v 2.6 2001/08/12 09:48:47 davidtg Exp $ #


## set up some stuff

$formail = "/usr/bin/formail";				# where is formail?
$formailargs = "-t -A'X-No-Loop: mail-by-pager.pl'";	# any args?
$qmail = "/var/qmail/bin/qmail-inject";			# how to give to qmail?
($junk,$min,$hour,$junk,$junk,$junk,$wday,$junk,$junk)	### *duh* could just name this big-ass list @mytime and refer as $mytime[2]...
  = localtime(time);	# get time (sec,min,hour,mday,mon,year,wday,yday,isdst)
$home = $ENV{HOME};					# home dir
$logname = $ENV{LOGNAME};				# user name
$pmdir = "$home/.procmail";				# procmail dir
$qmailargs = '-f' . $logname . '@justpickone.org';	# any args?
$pager = $logname . '-pager-only@justpickone.org';	# pager addr

$list = "on";						# (default) send or no?
$send = "no";						# (default) send or not?

if (! -f "$pmdir/pager.on") { exit 0; }			# turned on?


## grab the email

@message = ( <> );					# suck up for processing
for (@message) { /^From / && do { $from_ = $_ } }	# who sent it?


## check for flag files

( -f "$pmdir/pager.work") && do { $list = $list . ",work" } ;	# workday
( -f "$pmdir/pager.days") && do { $list = $list . ",days" } ;	# 7 days
( -f "$pmdir/pager.nite") && do { $list = $list . ",nite" } ;	# 7 nites
( -f "$pmdir/pager.wknd") && do { $list = $list . ",wknd" } ;	# 24-hr weekend
( -f "$pmdir/pager.week") && do { $list = $list . ",week" } ;	# 24-hr workweek
( -f "$pmdir/pager.late") && do { $list = $list . ",late" } ;	# late evening
( -f "$pmdir/pager.pfno") && do { $list = $list . ",pfno" } ;	# no PFE bounces
( -f "$pmdir/pager.chch") && do { $list = $list . ",chch" } ;	# wait in church
( -f "$pmdir/pager.pals") && do 				# special pals
  { 
    $list = $list . ",pals"; 
    open (PALS, "$pmdir/pager.pals"); @pals = <PALS>; close PALS;	# who?
    for (@pals) { chomp($_) && ( $from_ =~ /$_/ ) && do { $send = "yes" } }
  } ;


## what do the flags mean?

$myhour = "days";					# probably daytime ...
if ( $hour > 19 ) { $myhour = "late"; }			# ... but maybe evening
if ( $hour < 7 ) { $myhour = "nite"; }			# ... otherwise sleeping
$myday = "week";					# probably weekday ...
if ( $wday == 0 || $wday == 6 ) { $myday = "wknd"; }	# ... but maybe weekend


## so, do we send?
print ("wday = $wday\nhour = $hour\n");	###
print ("list = $list\n");	###

for ($list)						# one way to case stmt
{
  ( $myhour eq "days" ) && /days/ && do { $send = "yes" } ;	# 
  ( $myhour eq "late" ) && /late/ && do { $send = "yes" } ;	# 
  ( $myhour eq "late" ) && /nite/ && do { $send = "yes" } ;	# kludge...
  ( $myhour eq "nite" ) && /nite/ && do { $send = "yes" } ;	# 
  ( $myday eq "wknd" ) && /wknd/ && do { $send = "yes" } ;	# 
  ( $myday eq "week" ) && /week/ && do { $send = "yes" } ;	# 
  ( $myday eq "week" ) && ( $myhour eq "day" ) && /work/ 
    && do { $send = "yes" } ;					# 
  ( $wday == 0 ) && ( $hour == 10 ) && /chch/ && ( $send eq "yes" )	# church
      && do { sleep ( ( ( 60 - $min ) * 60 ) + $min * 6 ) } ;	# then wait!
  ( $wday == 3 ) && ( $hour == 19 ) && /chch/ && ( $send eq "yes" )	# church
      && do { sleep ( ( ( 60 - $min ) * 60 ) + $min * 6 ) } ;	# then wait
}


## send == yes => bounce it out

( $send eq "yes" ) && do 
  { 
    #open (FORMAIL, "|$formail $formailargs");		# pipe thru formail
    #@formessage = print (FORMAIL @message);		# mung it a bit
    #print (FORMAIL @message);###
    #print ("formessage=\n@formessage\n");###
    #close FORMAIL;					# cleanup
    ###
    ### I don't like it much, but what about
    ### @formessage = `echo @message | $formail $formailargs`
    ### mebbe?
    ###
    #open (QMAIL, "|$qmail $qmailargs $pager");		# hand off to qmail
    #print (QMAIL @formessage);				# send it out
    #print (QMAIL @message);				# send it out
    #close QMAIL;					# cleanup
    open (MAILIT, "|$formail $formailargs | $qmail $qmailargs $pager");	# messy, but until I can trap @formessage ...
    print (MAILIT @message);				# mung + hand off
    close MAILIT;					# cleanup
  } ;


## done!

exit 0;

