curl/src/mkhelp.pl

216 lines
4.7 KiB
Perl
Raw Normal View History

1999-12-29 15:20:26 +01:00
#!/usr/local/bin/perl
# Yeah, I know, probably 1000 other persons already wrote a script like
# this, but I'll tell ya:
# THEY DON'T FIT ME :-)
# Get readme file as parameter:
if($ARGV[0] eq "-c") {
$c=1;
shift @ARGV;
}
my $README = $ARGV[0];
1999-12-29 15:20:26 +01:00
if($README eq "") {
print "usage: mkreadme.pl [-c] <README> < manpage\n";
1999-12-29 15:20:26 +01:00
exit;
}
push @out, " _ _ ____ _ \n";
push @out, " Project ___| | | | _ \\| | \n";
push @out, " / __| | | | |_) | | \n";
push @out, " | (__| |_| | _ <| |___ \n";
push @out, " \\___|\\___/|_| \\_\\_____|\n";
my $olen=0;
1999-12-29 15:20:26 +01:00
while (<STDIN>) {
my $line = $_;
1999-12-29 15:20:26 +01:00
# this should be removed:
$line =~ s/(.|_)//g;
1999-12-29 15:20:26 +01:00
if($line =~ /^([ \t]*\n|curl)/i) {
# cut off headers and empty lines
$wline++; # count number of cut off lines
next;
}
1999-12-29 15:20:26 +01:00
my $text = $line;
$text =~ s/^\s+//g; # cut off preceeding...
$text =~ s/\s+$//g; # and trailing whitespaces
$tlen = length($text);
if($wline && ($olen == $tlen)) {
# if the previous line with contents was exactly as long as
# this line, then we ignore the newlines!
# We do this magic because a header may abort a paragraph at
# any line, but we don't want that to be noticed in the output
# here
$wline=0;
1999-12-29 15:20:26 +01:00
}
$olen = $tlen;
1999-12-29 15:20:26 +01:00
if($wline) {
# we only make one empty line max
1999-12-29 15:20:26 +01:00
$wline = 0;
push @out, "\n";
1999-12-29 15:20:26 +01:00
}
push @out, $line;
}
push @out, "\n"; # just an extra newline
open(READ, "<$README") ||
die "couldn't read the README infile $README";
1999-12-29 15:20:26 +01:00
while(<READ>) {
push @out, $_;
}
close(READ);
# if compressed
if($c) {
my @test = `gzip --version 2>&1`;
if($test[0] =~ /gzip/) {
open(GZIP, ">dumpit") ||
die "can't create the dumpit file, try without -c";
binmode GZIP;
for(@out) {
print GZIP $_;
$gzip += length($_);
}
close(GZIP);
system("gzip --best --no-name dumpit");
open(GZIP, "<dumpit.gz") ||
die "can't read the dumpit.gz file, try without -c";
binmode GZIP;
while(<GZIP>) {
push @gzip, $_;
$gzipped += length($_);
}
close(GZIP);
2003-06-12 21:17:08 +02:00
unlink("dumpit.gz");
}
else {
# no gzip, no compression!
undef $c;
print STDERR "MEEEP: Couldn't find gzip, disable compression\n";
}
}
1999-12-29 15:20:26 +01:00
$now = localtime;
print <<HEAD
/*
* NEVER EVER edit this manually, fix the mkhelp.pl script instead!
* Generation time: $now
*/
#include "hugehelp.h"
#include <stdio.h>
HEAD
;
if($c) {
print <<HEAD
#include <zlib.h>
static const unsigned char hugehelpgz[] = {
/* This mumbo-jumbo is the huge help text compressed with gzip.
Thanks to this operation, the size of this data shrunk from $gzip
to $gzipped bytes. You can disable the use of compressed help
texts by NOT passing -c to the mkhelp.pl tool. */
HEAD
;
my $c=0;
print " ";
for(@gzip) {
my @all=split(//, $_);
for(@all) {
my $num=ord($_);
printf("0x%02x, ", 0+$num);
if(++$c>11) {
print "\n ";
$c=0;
}
}
}
print "\n};\n";
print <<EOF
/* Decompress and send to stdout a gzip-compressed buffer */
void hugehelp(void)
{
unsigned char buf[0x10000];
int status,headerlen;
z_stream z;
/* Make sure no gzip options are set */
if (hugehelpgz[3] & 0xfe)
return;
headerlen = 10;
z.avail_in = sizeof(hugehelpgz) - headerlen;
z.next_in = (unsigned char *)hugehelpgz + headerlen;
z.zalloc = (alloc_func)Z_NULL;
z.zfree = (free_func)Z_NULL;
z.opaque = 0;
if (inflateInit2(&z, -MAX_WBITS) != Z_OK)
return;
while(1) {
z.avail_out = (int)sizeof(buf);
z.next_out = buf;
status = inflate(&z, Z_SYNC_FLUSH);
if (status == Z_OK || status == Z_STREAM_END) {
fwrite(buf, sizeof(buf) - z.avail_out, 1, stdout);
if (status == Z_STREAM_END)
break;
}
else
break; /* Error */
}
inflateEnd(&z);
}
EOF
;
exit;
}
else {
print <<HEAD
void hugehelp(void)
{
fputs(
HEAD
;
}
1999-12-29 15:20:26 +01:00
$outsize=0;
1999-12-29 15:20:26 +01:00
for(@out) {
chop;
$new = $_;
$outsize += length($new)+1; # one for the newline
1999-12-29 15:20:26 +01:00
$new =~ s/\\/\\\\/g;
$new =~ s/\"/\\\"/g;
# gcc 2.96 claims ISO C89 only is required to support 509 letter strings
if($outsize > 500) {
# terminate and make another fputs() call here
print ", stdout);\n fputs(\n";
$outsize=length($new)+1;
}
printf("\"%s\\n\"\n", $new);
1999-12-29 15:20:26 +01:00
}
print ", stdout) ;\n}\n"
1999-12-29 15:20:26 +01:00