1999-12-29 09:20:26 -05:00
|
|
|
|
#!/usr/local/bin/perl
|
2011-03-22 17:48:11 -04:00
|
|
|
|
#***************************************************************************
|
|
|
|
|
# _ _ ____ _
|
|
|
|
|
# Project ___| | | | _ \| |
|
|
|
|
|
# / __| | | | |_) | |
|
|
|
|
|
# | (__| |_| | _ <| |___
|
|
|
|
|
# \___|\___/|_| \_\_____|
|
|
|
|
|
#
|
|
|
|
|
# Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
|
|
|
#
|
|
|
|
|
# This software is licensed as described in the file COPYING, which
|
|
|
|
|
# you should have received as part of this distribution. The terms
|
|
|
|
|
# are also available at http://curl.haxx.se/docs/copyright.html.
|
|
|
|
|
#
|
|
|
|
|
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
|
|
|
# copies of the Software, and permit persons to whom the Software is
|
|
|
|
|
# furnished to do so, under the terms of the COPYING file.
|
|
|
|
|
#
|
|
|
|
|
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
|
|
|
# KIND, either express or implied.
|
|
|
|
|
#
|
|
|
|
|
###########################################################################
|
1999-12-29 09:20:26 -05:00
|
|
|
|
|
|
|
|
|
# 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:
|
2003-07-28 19:00:56 -04:00
|
|
|
|
|
|
|
|
|
if($ARGV[0] eq "-c") {
|
|
|
|
|
$c=1;
|
|
|
|
|
shift @ARGV;
|
|
|
|
|
}
|
|
|
|
|
|
2003-06-12 08:54:34 -04:00
|
|
|
|
my $README = $ARGV[0];
|
1999-12-29 09:20:26 -05:00
|
|
|
|
|
|
|
|
|
if($README eq "") {
|
2003-06-12 08:54:34 -04:00
|
|
|
|
print "usage: mkreadme.pl [-c] <README> < manpage\n";
|
1999-12-29 09:20:26 -05:00
|
|
|
|
exit;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2010-02-16 08:32:45 -05:00
|
|
|
|
push @out, " _ _ ____ _\n";
|
|
|
|
|
push @out, " Project ___| | | | _ \\| |\n";
|
|
|
|
|
push @out, " / __| | | | |_) | |\n";
|
|
|
|
|
push @out, " | (__| |_| | _ <| |___\n";
|
1999-12-29 09:20:26 -05:00
|
|
|
|
push @out, " \\___|\\___/|_| \\_\\_____|\n";
|
|
|
|
|
|
2003-07-28 19:00:56 -04:00
|
|
|
|
my $olen=0;
|
1999-12-29 09:20:26 -05:00
|
|
|
|
while (<STDIN>) {
|
2003-06-26 07:34:07 -04:00
|
|
|
|
my $line = $_;
|
1999-12-29 09:20:26 -05:00
|
|
|
|
|
2003-06-26 07:34:07 -04:00
|
|
|
|
# this should be removed:
|
|
|
|
|
$line =~ s/(.|_)//g;
|
1999-12-29 09:20:26 -05:00
|
|
|
|
|
2003-06-26 07:34:07 -04:00
|
|
|
|
if($line =~ /^([ \t]*\n|curl)/i) {
|
|
|
|
|
# cut off headers and empty lines
|
2010-02-16 08:32:45 -05:00
|
|
|
|
$wline++; # count number of cut off lines
|
|
|
|
|
next;
|
2003-06-26 07:34:07 -04:00
|
|
|
|
}
|
1999-12-29 09:20:26 -05:00
|
|
|
|
|
2003-06-26 07:34:07 -04:00
|
|
|
|
my $text = $line;
|
2011-04-19 10:06:47 -04:00
|
|
|
|
$text =~ s/^\s+//g; # cut off preceding...
|
2003-06-26 07:34:07 -04:00
|
|
|
|
$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 09:20:26 -05:00
|
|
|
|
}
|
2003-06-26 07:34:07 -04:00
|
|
|
|
$olen = $tlen;
|
|
|
|
|
|
1999-12-29 09:20:26 -05:00
|
|
|
|
if($wline) {
|
2010-02-16 08:32:45 -05:00
|
|
|
|
# we only make one empty line max
|
|
|
|
|
$wline = 0;
|
2003-06-26 07:34:07 -04:00
|
|
|
|
push @out, "\n";
|
1999-12-29 09:20:26 -05:00
|
|
|
|
}
|
|
|
|
|
push @out, $line;
|
|
|
|
|
}
|
|
|
|
|
push @out, "\n"; # just an extra newline
|
|
|
|
|
|
|
|
|
|
open(READ, "<$README") ||
|
2003-06-12 08:54:34 -04:00
|
|
|
|
die "couldn't read the README infile $README";
|
1999-12-29 09:20:26 -05:00
|
|
|
|
|
|
|
|
|
while(<READ>) {
|
|
|
|
|
push @out, $_;
|
|
|
|
|
}
|
|
|
|
|
close(READ);
|
|
|
|
|
|
2003-06-12 08:54:34 -04:00
|
|
|
|
# if compressed
|
|
|
|
|
if($c) {
|
|
|
|
|
my @test = `gzip --version 2>&1`;
|
|
|
|
|
if($test[0] =~ /gzip/) {
|
2003-07-28 19:00:56 -04:00
|
|
|
|
open(GZIP, ">dumpit") ||
|
|
|
|
|
die "can't create the dumpit file, try without -c";
|
2003-06-12 08:54:34 -04:00
|
|
|
|
binmode GZIP;
|
|
|
|
|
for(@out) {
|
|
|
|
|
print GZIP $_;
|
|
|
|
|
$gzip += length($_);
|
|
|
|
|
}
|
|
|
|
|
close(GZIP);
|
2003-07-28 19:00:56 -04:00
|
|
|
|
|
|
|
|
|
system("gzip --best --no-name dumpit");
|
2010-02-14 14:40:18 -05:00
|
|
|
|
|
2003-07-28 19:00:56 -04:00
|
|
|
|
open(GZIP, "<dumpit.gz") ||
|
|
|
|
|
die "can't read the dumpit.gz file, try without -c";
|
2003-06-12 08:54:34 -04:00
|
|
|
|
binmode GZIP;
|
|
|
|
|
while(<GZIP>) {
|
|
|
|
|
push @gzip, $_;
|
|
|
|
|
$gzipped += length($_);
|
|
|
|
|
}
|
|
|
|
|
close(GZIP);
|
2003-06-12 15:17:08 -04:00
|
|
|
|
|
|
|
|
|
unlink("dumpit.gz");
|
2003-06-12 08:54:34 -04:00
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
# no gzip, no compression!
|
|
|
|
|
undef $c;
|
|
|
|
|
print STDERR "MEEEP: Couldn't find gzip, disable compression\n";
|
|
|
|
|
}
|
|
|
|
|
}
|
1999-12-29 09:20:26 -05:00
|
|
|
|
|
2003-06-12 08:54:34 -04:00
|
|
|
|
$now = localtime;
|
|
|
|
|
print <<HEAD
|
|
|
|
|
/*
|
|
|
|
|
* NEVER EVER edit this manually, fix the mkhelp.pl script instead!
|
|
|
|
|
* Generation time: $now
|
|
|
|
|
*/
|
2004-04-25 04:13:07 -04:00
|
|
|
|
#ifdef USE_MANUAL
|
2012-12-26 17:30:54 -05:00
|
|
|
|
#include "tool_hugehelp.h"
|
2003-06-12 08:54:34 -04:00
|
|
|
|
HEAD
|
|
|
|
|
;
|
|
|
|
|
if($c) {
|
2003-06-26 07:34:07 -04:00
|
|
|
|
print <<HEAD
|
|
|
|
|
#include <zlib.h>
|
2013-01-03 20:50:28 -05:00
|
|
|
|
#include "memdebug.h" /* keep this as LAST include */
|
2003-06-26 07:34:07 -04:00
|
|
|
|
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
|
|
|
|
|
;
|
2003-06-12 08:54:34 -04:00
|
|
|
|
my $c=0;
|
2006-10-09 10:59:53 -04:00
|
|
|
|
print " ";
|
2003-06-12 08:54:34 -04:00
|
|
|
|
for(@gzip) {
|
|
|
|
|
my @all=split(//, $_);
|
|
|
|
|
for(@all) {
|
|
|
|
|
my $num=ord($_);
|
2006-10-09 10:59:53 -04:00
|
|
|
|
printf(" 0x%02x,", 0+$num);
|
2003-06-12 08:54:34 -04:00
|
|
|
|
if(++$c>11) {
|
2006-10-09 10:59:53 -04:00
|
|
|
|
print "\n ";
|
2003-06-12 08:54:34 -04:00
|
|
|
|
$c=0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
print "\n};\n";
|
|
|
|
|
|
|
|
|
|
print <<EOF
|
2008-04-21 19:17:20 -04:00
|
|
|
|
#define BUF_SIZE 0x10000
|
2011-08-21 07:15:34 -04:00
|
|
|
|
static voidpf zalloc_func(voidpf opaque, unsigned int items, unsigned int size)
|
|
|
|
|
{
|
|
|
|
|
(void) opaque;
|
|
|
|
|
/* not a typo, keep it calloc() */
|
|
|
|
|
return (voidpf) calloc(items, size);
|
|
|
|
|
}
|
|
|
|
|
static void zfree_func(voidpf opaque, voidpf ptr)
|
|
|
|
|
{
|
|
|
|
|
(void) opaque;
|
|
|
|
|
free(ptr);
|
|
|
|
|
}
|
2003-06-12 08:54:34 -04:00
|
|
|
|
/* Decompress and send to stdout a gzip-compressed buffer */
|
|
|
|
|
void hugehelp(void)
|
|
|
|
|
{
|
2008-04-21 19:17:20 -04:00
|
|
|
|
unsigned char* buf;
|
2003-06-12 08:54:34 -04:00
|
|
|
|
int status,headerlen;
|
|
|
|
|
z_stream z;
|
|
|
|
|
|
|
|
|
|
/* Make sure no gzip options are set */
|
|
|
|
|
if (hugehelpgz[3] & 0xfe)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
headerlen = 10;
|
2011-08-18 14:09:26 -04:00
|
|
|
|
memset(&z, 0, sizeof(z_stream));
|
2011-08-21 07:15:34 -04:00
|
|
|
|
z.zalloc = (alloc_func)zalloc_func;
|
|
|
|
|
z.zfree = (free_func)zfree_func;
|
2005-12-05 09:10:48 -05:00
|
|
|
|
z.avail_in = (unsigned int)(sizeof(hugehelpgz) - headerlen);
|
2003-06-12 08:54:34 -04:00
|
|
|
|
z.next_in = (unsigned char *)hugehelpgz + headerlen;
|
|
|
|
|
|
|
|
|
|
if (inflateInit2(&z, -MAX_WBITS) != Z_OK)
|
|
|
|
|
return;
|
|
|
|
|
|
2008-04-21 19:17:20 -04:00
|
|
|
|
buf = malloc(BUF_SIZE);
|
|
|
|
|
if (buf) {
|
|
|
|
|
while(1) {
|
|
|
|
|
z.avail_out = BUF_SIZE;
|
|
|
|
|
z.next_out = buf;
|
|
|
|
|
status = inflate(&z, Z_SYNC_FLUSH);
|
|
|
|
|
if (status == Z_OK || status == Z_STREAM_END) {
|
2010-02-16 08:32:45 -05:00
|
|
|
|
fwrite(buf, BUF_SIZE - z.avail_out, 1, stdout);
|
|
|
|
|
if (status == Z_STREAM_END)
|
|
|
|
|
break;
|
2008-04-21 19:17:20 -04:00
|
|
|
|
}
|
2010-02-16 08:32:45 -05:00
|
|
|
|
else
|
|
|
|
|
break; /* Error */
|
2004-01-29 08:49:41 -05:00
|
|
|
|
}
|
2008-04-21 19:17:20 -04:00
|
|
|
|
free(buf);
|
2003-06-12 08:54:34 -04:00
|
|
|
|
}
|
|
|
|
|
inflateEnd(&z);
|
|
|
|
|
}
|
|
|
|
|
EOF
|
|
|
|
|
;
|
2004-04-25 04:13:07 -04:00
|
|
|
|
foot();
|
2003-06-12 08:54:34 -04:00
|
|
|
|
exit;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
print <<HEAD
|
|
|
|
|
void hugehelp(void)
|
|
|
|
|
{
|
|
|
|
|
fputs(
|
|
|
|
|
HEAD
|
|
|
|
|
;
|
|
|
|
|
}
|
1999-12-29 09:20:26 -05:00
|
|
|
|
|
2000-05-23 06:25:30 -04:00
|
|
|
|
$outsize=0;
|
1999-12-29 09:20:26 -05:00
|
|
|
|
for(@out) {
|
|
|
|
|
chop;
|
|
|
|
|
|
|
|
|
|
$new = $_;
|
|
|
|
|
|
2001-03-09 08:11:28 -05:00
|
|
|
|
$outsize += length($new)+1; # one for the newline
|
2000-05-23 06:25:30 -04:00
|
|
|
|
|
1999-12-29 09:20:26 -05:00
|
|
|
|
$new =~ s/\\/\\\\/g;
|
|
|
|
|
$new =~ s/\"/\\\"/g;
|
|
|
|
|
|
2001-03-09 08:11:28 -05:00
|
|
|
|
# gcc 2.96 claims ISO C89 only is required to support 509 letter strings
|
|
|
|
|
if($outsize > 500) {
|
2003-05-21 03:21:44 -04:00
|
|
|
|
# terminate and make another fputs() call here
|
|
|
|
|
print ", stdout);\n fputs(\n";
|
2001-03-09 08:11:28 -05:00
|
|
|
|
$outsize=length($new)+1;
|
2000-05-23 06:25:30 -04:00
|
|
|
|
}
|
2001-03-09 08:11:28 -05:00
|
|
|
|
printf("\"%s\\n\"\n", $new);
|
2000-05-23 06:25:30 -04:00
|
|
|
|
|
1999-12-29 09:20:26 -05:00
|
|
|
|
}
|
|
|
|
|
|
2004-04-25 04:13:07 -04:00
|
|
|
|
print ", stdout) ;\n}\n";
|
|
|
|
|
|
|
|
|
|
foot();
|
|
|
|
|
|
|
|
|
|
sub foot {
|
|
|
|
|
print <<FOOT
|
|
|
|
|
#endif /* USE_MANUAL */
|
|
|
|
|
FOOT
|
|
|
|
|
;
|
|
|
|
|
}
|