1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
use CGI::SSI;
sub main
{
my %opts;
my $input;
my $output;
$SIG{'__WARN__'} = \&warning;
Getopt::Long::Configure("no_ignore_case", "bundling", "gnu_compat",
"no_getopt_compat");
if (not GetOptions(\%opts,
"o=s",
"h|help",
"V|version",
)) {
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, --help Display this information\n");
print(" -V, --version 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();
|