summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorP. J. McDermott <pjm@nac.net>2013-09-22 13:33:23 (EDT)
committer P. J. McDermott <pjm@nac.net>2013-09-22 13:33:23 (EDT)
commit54231a8541deca709baeb49e35e62a4d7ecea00a (patch)
treebbec00177ad1c74958d9802b06abe39cb08924b7
downloadssic-54231a8541deca709baeb49e35e62a4d7ecea00a.zip
ssic-54231a8541deca709baeb49e35e62a4d7ecea00a.tar.gz
ssic-54231a8541deca709baeb49e35e62a4d7ecea00a.tar.bz2
Initial commit.
-rw-r--r--src/ssic.pl113
1 files changed, 113 insertions, 0 deletions
diff --git a/src/ssic.pl b/src/ssic.pl
new file mode 100644
index 0000000..30f1f25
--- /dev/null
+++ b/src/ssic.pl
@@ -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();