- !/usr/bin/perl
use HTTP::Request;
use LWP::UserAgent;
use Cwd;
- Get CWD and determine OS
our $cwd = cwd;
our $ux = ($cwd =~ m/^\//);
$ux ? $cwd = cwd : $cwd =~ s/\//\\/g;
$cwd =~ s/\//\\/g unless $cwd =~ m/^\//;
$cwd =~ s/[\\\/]$//g;
- Command to list running peerd's (or null for Win32)
$ps = $ux ? 'ps lx|egrep peerd:' : ;
$qxps = qx($ps);
- Set up a www-user-agent and source-url for syncing
$wiki = "http://www.organicdesign.co.nz/wiki/index.php";
$client = LWP::UserAgent->new( cookie_jar => {} );
- Build sync-list from args, or if none, obtain list from Bender/fileSync article in OD wiki
if ($#ARGV<0) {
print "\nRetrieving files specified in OD:Bender/fileSync list...\n";
my $fileSync = $client->request(HTTP::Request->new(GET => "$wiki?title=Bender/fileSync&xpath:view:"));
$fileSync = $fileSync->content;
$fileSync =~ s/<\/ul>.+$//ms;
%articles = $fileSync =~ /
.+?title="(.+?)">(.+?)<\/a>/g;
}
else {
print "\nRetrieving files specified in command line args...\n";
$articles{$_} = "/home/peerd/$_" for @ARGV;
}
- Retrieve each article in sync-list and save to specified filepath
for my $article (keys %articles) {
print "\t$article\n";
if (open FH, '>', $ux ? $articles{$article} : "$cwd/$article") {
binmode FH;
$article = $client->request(HTTP::Request->new(GET => "$wiki?title=$article&action=raw"))->content;
print FH "$article\n";
close FH;
}
}
- Don't do any compilation unless ux
exit unless $ux;
- Compile husk and format output
print "\nCompiling...\n";
$err = qx( gcc -o /home/peerd/husk.bin /home/peerd/husk.c 2>&1 );
$err =~ s/^In file.+?$//mg;
$err =~ s/^\s+from/\nfrom/mg;
$err =~ s/^/\t/mg;
$err =~ s/\/home\/peerd\///g;
$err =~ s/^\s+//g;
$err =~ s/\s+$//g;
- Execute compiled result if compiled without any problems
if ($err) { print "$err\n\nAborting: There are errors or warnings!\nNothing killed or executed.\n\n" }
else {
print "\nCompiled successfully!\n";
# kill currently running instances of peerd
if ($qxps) {
print "Killing currently running peerd instances:\n";
print $qxps;
for (split /\n/, $qxps) { qx(kill $1) if /^.+?([0-9]{2,}).+?\d+:\d\d\s*(.+)/ }
} else { print "Nothing to kill :-(\n" }
print "Passing execution over now...\n\n";
qx( /home/peerd/husk.bin );
print qx($ps);
}