Rp

From Organic Design wiki
Revision as of 23:33, 25 July 2006 by Nad (talk | contribs) (comment better)
  1. !/usr/bin/perl

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

  1. 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;

  1. Command to list running peerd's (or null for Win32)

$ps = $ux ? 'ps lx|egrep peerd:' : ; $qxps = qx($ps);

  1. 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 => {} );

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

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; }
    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); }