{ brad brace } on Wed, 2 Jun 1999 07:53:04 +0200 (CEST)


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

<nettime> 12hr shell script


From: Robin Stephenson <robin.stephenson@blackwell.co.uk>

------------------------------ cut here ------------------------------
#!/usr/bin/perl -w
# $Id: get12,v 1.1 1999/02/19 17:03:28 trss Exp trss $

# Get an image by FTP, possibly mangle it about, and place it on the
# root window of an X workstation.  Use `--help' for brief docs, or
# read the code.  Intended to be used with Brad Brace's 12hr-ISBN-JPEG
# project <http://www.teleport.com/~bbrace/bbrace.html>: install it in
# your crontab and enjoy.  Based on a shell script from Need To Know
# <http://www.ntk.net/>, and written by Robin Stephenson <quux@usa.net>.

use strict;
use Getopt::Long;
use URI::URL;
use Net::FTP;

## configuration
my($help, $verbose, $email, $URL, $image, $mangle);
GetOptions("help"     => \$help,
           "verbose"  => \$verbose,
           "email=s"  => \$email,
           "src=s"    => \$URL,
           "dest=s"   => \$image,
           "mangle"   => \$mangle);
if (defined($help)) {
    usage();
    exit(0);
}


# defaults
if (!defined($verbose)) { $verbose = 0 } else { $verbose = 1 };
if (!defined($email))   { $email   = "quux\@usa.net" };
if (!defined($URL))     {
    $URL = "ftp://ftp.rdrop.com/pub/users/bbrace/12hr.jpeg" };
if (!defined($image))   { $image   = "/tmp/12hr-isbn-jpeg.jpeg" };
if (!defined($mangle))  { $mangle  = 0 };

# this is a bit clunky, and really easy to break  *shrug*  works for me
my($DISPLAY) = $ENV{'DISPLAY'} || "unix:0";

my($XMESSAGE) = '/usr/X11R6/bin/xmessage';
my($XV)       = '/usr/X11R6/bin/xv';
my($CONVERT)  = '/usr/X11R6/bin/convert';


## main program
$URL = new URI::URL $URL;
getfile($URL, $image);
$mangle and $image = processimage($image);
setbackground($image);

if ($verbose) {
    my($date)=`date +"%l:%M %p %A %d %B"`;
    chomp($date);
    message($date, "Updated root window from\n$URL");
}

exit(0);

## subroutines
# Print some basic usage information.
sub usage () {
    print STDERR << "EOF";
get12  [-verbose] [-email="your\@email.here"] [-src="URL of image"]
                  [-dest="/tmp/image.jpeg"]  [-mangle]

    --email        your email address: used to log you in to anonymous FTP
    --src          an FTP URL of an image file (see below)
    --dest         where the image file will be stored locally
    --mangle       post-process the image after it arrives (see source)

    URLs for the 12hr-ISBN-JPEG project are as follows:
        ftp://ftp.rdrop.com/pub/users/bbrace/12hr.jpeg
        ftp://ftp.pacifier.com/pub/users/bbrace/12hr.jpeg
        ftp://ftp.netcom.com/pub/bb/bbrace/12hr.jpeg
        ftp://ftp.teleport.com/users/bbrace/12hr.jpeg
        ftp://ftp.wco.com/pub/users/bbrace/12hr.jpeg
EOF
    ;
}

# Get the current picture from $URL by FTP and place in $dest.
sub getfile ($$) {
    my($URL, $dest) = @_;

    if($URL->scheme ne 'ftp') {
        die("Not an FTP URL: $URL\n");
    }

    my($site) = $URL->netloc;
    my($file) = $URL->path;

    my($ftp) = Net::FTP->new("$site");
    $ftp->login("ftp", "$email");
    $ftp->get($file, $dest) or die("Couldn't get $URL: $!\n");
    $ftp->quit();
}

# Display a message in an X window (click to dismiss).
sub message ($$) {
    my($title, $message) = @_;

    # primitive escaping of special characters
    $title   =~ s/\"/\\"/g;
    $message =~ s/\"/\\"/g;

    if (-x $XMESSAGE) {
        # This is a bit ugly: xmessage idea is from Jamie Zawinski's cid hack.
        my($command) = << "EOF";
/usr/X11R6/bin/xmessage -display $DISPLAY -name "$title"                            -xrm '*Font: -*-lucida-medium-r-*-*-*-190-*-*-*-*-*-*'                          -xrm   '*Foreground: black'                                                     -xrm   '*Ba

ckground: lightgreen'                                                -xrm   '*Command.Background: red'                                               -buttons ''                                                                     -xrm   '*Command.horizDist

ance: 25'                                             -xrm   '*message.borderWidth:0'                                                 -xrm   '*Translations: #override <BtnDown>: exit(0)'                            "$message" &
EOF
    ;
        system($command);
    } else {
        warn("xmessage not found in $XMESSAGE\n");
    }
}

# Mangle an image from the $image file in some interesting
# NON-DESTRUCTIVE way.  Return the filename of the modified image.
sub processimage ($) {
    my($image) = @_;

    # add a blue tint
    if (-x $CONVERT) {
        system("$CONVERT $image -colorize 0/0/40 $image.blue");
        return("$image.blue");
    } else {
        warn("no conversion performed\n");
        return($image);
    }
}

# Set the root window image to the image contained in the $image file.
sub setbackground ($) {
    my($image) = @_;

    if (-x $XV) {
        system("$XV -display $DISPLAY -quit -root -rmode 5 -maxpect $image");
    } else {
        warn("xv not found in $XV\n");
    }
}
                      



__


/:b

---
#  distributed via nettime-l : no commercial use without permission
#  <nettime> is a closed moderated mailinglist for net criticism,
#  collaborative text filtering and cultural politics of the nets
#  more info: majordomo@desk.nl and "info nettime-l" in the msg body
#  URL: http://www.desk.nl/~nettime/  contact: nettime-owner@desk.nl