Initial commit.
authorP. J. McDermott <pjm@nac.net>
Sun, 22 Sep 2013 17:33:23 +0000 (13:33 -0400)
committerP. J. McDermott <pjm@nac.net>
Sun, 22 Sep 2013 17:33:23 +0000 (13:33 -0400)
src/ssic.pl [new file with mode: 0644]

diff --git a/src/ssic.pl b/src/ssic.pl
new file mode 100644 (file)
index 0000000..30f1f25
--- /dev/null
@@ -0,0 +1,113 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Getopt::Std;
+use CGI::SSI;
+
+sub main
+{
+       my %opts;
+       my $input;
+       my $output;
+
+       $SIG{'__WARN__'} = \&warning;
+
+       if (not getopts('o:hV', \%opts)) {
+               usage(*STDERR);
+       }
+
+       if (exists($opts{'h'})) {
+               help(*STDERR);
+               exit(0);
+       }
+       if (exists($opts{'V'})) {
+               version(*STDERR);
+               exit(0);
+       }
+
+       if ($#ARGV lt 0) {
+               error(4, "No input files\n");
+       }
+       if (exists($opts{'o'})) {
+               if ($#ARGV gt 0) {
+                       error(4, "Cannot specify -o with multiple files\n");
+               }
+               compile($ARGV[0], $opts{'o'});
+       } else {
+               for $input (@ARGV) {
+                       $output = $input;
+                       $output =~ s/\.[^.]+$/.html/;
+                       compile($input, $output);
+               }
+       }
+}
+
+sub usage
+{
+       my ($fh) = @_;
+
+       printf($fh "Usage: %s [-o <output>] <input> ...\n", $0);
+}
+
+sub help
+{
+       my ($fh) = @_;
+
+       usage($fh);
+       print("Options:\n");
+       print("  -o <output>  Place the output into <output>\n");
+       print("  -h           Display this information\n");
+       print("  -V           Display compiler version information\n");
+}
+
+sub version
+{
+       my ($fh) = @_;
+
+       print("ssic 0.1.0\n");
+       print("Copyright (C) 2013 Patrick \"P. J.\" McDermott\n");
+       print("License GPLv3+: GNU GPL version 3 or later " .
+               "<http://gnu.org/licenses/gpl.html>.\n");
+       print("This is free software: you are free to change and " .
+               "redistribute it.\n");
+       print("There is NO WARRANTY, to the extent permitted by law.\n");
+}
+
+sub warning
+{
+       my ($fmt, $args) = @_;
+
+       printf("ssic: Warning: " . $fmt, $args);
+}
+
+sub error
+{
+       my ($status, $fmt, $args) = @_;
+
+       printf("ssic: Error: " . $fmt, $args);
+       exit($status);
+}
+
+sub compile
+{
+       my ($input, $output) = @_;
+       my $input_fh;
+       my $output_fh;
+       my $ssi;
+
+       if ($input eq $output) {
+               error(4, "Input and output files are equal\n");
+       }
+
+       open($input_fh, "<", $input);
+       open($output_fh, ">", $output);
+
+       $CGI::SSI::DEBUG = 0;
+       $ssi = CGI::SSI->new();
+
+       print($output_fh $ssi->process(<$input_fh>));
+}
+
+main();