Difference between revisions of "Rp"

From Organic Design wiki
m
(make rp work for Win32 too (use libwww instead of curl))
Line 1: Line 1:
 
#!/usr/bin/perl
 
#!/usr/bin/perl
 +
use HTTP::Request;
 +
use LWP::UserAgent;
 +
use Cwd;
  
 +
our $cwd = cwd;
 +
our $ux = ($cwd =~ m/^\//);
 +
$ux ? $cwd = cwd : $cwd =~ s/\//\\/g;
 +
$cwd =~ s/\//\\/g unless $cwd =~ m/^\//;
 +
$cwd =~ s/[\\\/]$//g;
 +
$client = LWP::UserAgent->new( cookie_jar => {} );
 
$wiki = "http://www.organicdesign.co.nz/wiki/index.php";
 
$wiki = "http://www.organicdesign.co.nz/wiki/index.php";
$ps = 'ps lx';
+
$ps = $ux ? 'ps lx|egrep peerd:' : '';
$grep = "$ps|egrep peerd[:]";
+
$qxps = qx($ps);
 
 
 
print "\n";
 
print "\n";
$qxps = [split /^/, qx($ps)]->[0].qx($grep); # adds column header
 
$k = $#{[split /^/, $qxps]};
 
$s = $k>1?'s':'';
 
  
# sub to kill currently running instances of peerd
+
# Sync files specified in args, or obtain a list of files from Benders fileSync list
sub kp {
+
if ($#ARGV<0) {
if ($k) {
+
print "Retrieving files specified in OD:Bender/fileSync list...\n";
for (split /^/, $qxps) { qx(kill -9 $1) if /^.+?([0-9]{2,}).+?\d+:\d\d\s*(.+)/ }
+
my $fileSync = $client->request(HTTP::Request->new(GET => "$wiki?title=Bender/fileSync&xpath:view:"));
print "\n$qxps$k instance$s killed.\n\n";
+
$fileSync = $fileSync->content;
} else { print "Nothing to kill :-(\n\n" }
+
$fileSync =~ s/<\/ul>.+$//ms;
 +
%articles = $fileSync =~ /<li>.+?title="(.+?)">(.+?)<\/a>/g;
 
}
 
}
 
+
else {
# rp k
+
print "Retrieving files specified in command line args...\n";
# - kills currently running peerd's and exits
+
$articles{$_} = "/home/peerd/$_" for @ARGV;
if ($ARGV[0] eq 'k') {
 
kp;
 
exit;
 
 
}
 
}
  
# rp l
+
# Retrieve each article and save to specified filepath
# - lists currently running peerd's and exits
+
for my $article (keys %articles) {
if ($ARGV[0] eq 'l') {
+
print "\t$article\n";
if ($k) { print ("$qxps$k instance$s of peerd running.\n\n") }
+
if (open FH, '>', $ux ? $articles{$article} : "$cwd/$article") {
else { print "There are no instances of peerd running.\n\n" }
+
binmode FH;
exit;
+
$article = $client->request(HTTP::Request->new(GET => "$wiki?title=$article&action=raw"))->content;
 +
print FH "$article\n";
 +
close FH;
 +
}
 
}
 
}
  
# rp c
+
# Don't do any compilation unless ux
# - compiles without syncing any files
+
exit unless $ux;
if ($ARGV[0] ne 'c') {
 
 
 
# Sync files specified in args, or obtain a list of files from Benders fileSync list
 
if ($#ARGV<0) {
 
print "Retrieving files specified in OD:Bender/fileSync list...\n";
 
$fileSync = qx(curl -s "$wiki?title=Bender/fileSync&xpath:view:");
 
$fileSync =~ s/<\/ul>.+$//ms;
 
%articles = $fileSync =~ /<li>.+?title="(.+?)">(.+?)<\/a>/g;
 
}
 
else {
 
print "Retrieving files specified in command line args...\n";
 
$articles{$_} = "/home/peerd/$_" for @ARGV;
 
}
 
 
 
# Retrieve each article and save to specified filepath
 
for my $article (keys %articles) {
 
print "\t$article\n";
 
if (open FH, '>', $articles{$article}) {
 
binmode FH;
 
print FH qx(curl -s "$wiki?title=$article&action=raw")."\n";
 
close FH;
 
}
 
}
 
 
 
}
 
  
 
# Compile husk and format output
 
# Compile husk and format output
 
print "\nCompiling...\n";
 
print "\nCompiling...\n";
$err = qx( gcc -lSDL -lSDL_image -o /home/peerd/husk.bin /home/peerd/husk.c 2>&1 );
+
$err = qx( gcc -o /home/peerd/husk.bin /home/peerd/husk.c 2>&1 );
 
$err =~ s/^In file.+?$//mg;
 
$err =~ s/^In file.+?$//mg;
 
$err =~ s/^\s+from/\nfrom/mg;
 
$err =~ s/^\s+from/\nfrom/mg;
Line 74: Line 55:
 
if ($err) { print "$err\n\nAborting: There are errors or warnings!\nNothing killed or executed.\n\n" }
 
if ($err) { print "$err\n\nAborting: There are errors or warnings!\nNothing killed or executed.\n\n" }
 
else {
 
else {
print "Compiled successfully!\n";
+
print "\nCompiled successfully!\n";
# Kill running peers (kp) and start a new instance
+
 
kp;
+
# kill currently running instances of peerd
print "Starting new instance now...\n\n";
+
if ($qxps) {
qx( /home/peerd/husk.bin Gir port=2012 );
+
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);
 
print qx($ps);
 
}
 
}

Revision as of 08:01, 25 July 2006

  1. !/usr/bin/perl

use HTTP::Request; use LWP::UserAgent; use Cwd;

our $cwd = cwd; our $ux = ($cwd =~ m/^\//); $ux ? $cwd = cwd : $cwd =~ s/\//\\/g; $cwd =~ s/\//\\/g unless $cwd =~ m/^\//; $cwd =~ s/[\\\/]$//g; $client = LWP::UserAgent->new( cookie_jar => {} ); $wiki = "http://www.organicdesign.co.nz/wiki/index.php"; $ps = $ux ? 'ps lx|egrep peerd:' : ; $qxps = qx($ps); print "\n";

  1. Sync files specified in args, or obtain a list of files from Benders fileSync list

if ($#ARGV<0) { print "Retrieving 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 "Retrieving files specified in command line args...\n"; $articles{$_} = "/home/peerd/$_" for @ARGV; }
    1. Retrieve each article 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; } }
    1. Don't do any compilation unless ux
    exit unless $ux;
    1. 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;
    1. 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); }