123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- #!/usr/bin/env perl
- #***************************************************************************
- # _ _ ____ _
- # Project ___| | | | _ \| |
- # / __| | | | |_) | |
- # | (__| |_| | _ <| |___
- # \___|\___/|_| \_\_____|
- #
- # Copyright (C) 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 https://curl.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.
- #
- # SPDX-License-Identifier: curl
- #
- ###########################################################################
- # 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;
- }
- push @out, " _ _ ____ _\n";
- push @out, " Project ___| | | | _ \\| |\n";
- push @out, " / __| | | | |_) | |\n";
- push @out, " | (__| |_| | _ <| |___\n";
- push @out, " \\___|\\___/|_| \\_\\_____|\n";
- my $olen=0;
- while (<STDIN>) {
- my $line = $_;
- # this should be removed:
- $line =~ s/(.|_)//g;
- # remove trailing CR from line. msysgit checks out files as line+CRLF
- $line =~ s/\r$//;
- if($line =~ /^([ \t]*\n|curl)/i) {
- # cut off headers and empty lines
- $wline++; # count number of cut off lines
- next;
- }
- my $text = $line;
- $text =~ s/^\s+//g; # cut off preceding...
- $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;
- }
- $olen = $tlen;
- if($wline) {
- # we only make one empty line max
- $wline = 0;
- push @out, "\n";
- }
- push @out, $line;
- }
- push @out, "\n"; # just an extra newline
- print <<HEAD
- /*
- * NEVER EVER edit this manually, fix the mkhelp.pl script instead!
- */
- #ifdef USE_MANUAL
- #include "tool_hugehelp.h"
- HEAD
- ;
- if($c) {
- # If compression requested, check that the Gzip module is available
- # or else disable compression
- $c = eval
- {
- require IO::Compress::Gzip;
- IO::Compress::Gzip->import();
- 1;
- };
- print STDERR "Warning: compression requested but Gzip is not available\n" if (!$c)
- }
- if($c)
- {
- my $content = join("", @out);
- my $gzippedContent;
- IO::Compress::Gzip::gzip(
- \$content, \$gzippedContent, Level => 9, TextFlag => 1, Time=>0) or die "gzip failed:";
- $gzip = length($content);
- $gzipped = length($gzippedContent);
- print <<HEAD
- #include <zlib.h>
- #include "memdebug.h" /* keep this as LAST include */
- 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 shrank 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(split(//, $gzippedContent)) {
- my $num=ord($_);
- printf(" 0x%02x,", 0+$num);
- if(!(++$c % 12)) {
- print "\n ";
- }
- }
- print "\n};\n";
- print <<EOF
- #define BUF_SIZE 0x10000
- 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);
- }
- /* Decompress and send to stdout a gzip-compressed buffer */
- void hugehelp(void)
- {
- unsigned char* buf;
- int status,headerlen;
- z_stream z;
- /* Make sure no gzip options are set */
- if (hugehelpgz[3] & 0xfe)
- return;
- headerlen = 10;
- memset(&z, 0, sizeof(z_stream));
- z.zalloc = (alloc_func)zalloc_func;
- z.zfree = (free_func)zfree_func;
- z.avail_in = (unsigned int)(sizeof(hugehelpgz) - headerlen);
- z.next_in = (unsigned char *)hugehelpgz + headerlen;
- if (inflateInit2(&z, -MAX_WBITS) != Z_OK)
- return;
- 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) {
- fwrite(buf, BUF_SIZE - z.avail_out, 1, stdout);
- if (status == Z_STREAM_END)
- break;
- }
- else
- break; /* Error */
- }
- free(buf);
- }
- inflateEnd(&z);
- }
- EOF
- ;
- foot();
- exit;
- }
- else {
- print <<HEAD
- void hugehelp(void)
- {
- fputs(
- HEAD
- ;
- }
- $outsize=0;
- for(@out) {
- chop;
- $new = $_;
- $outsize += length($new)+1; # one for the newline
- $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);
- }
- print ", stdout) ;\n}\n";
- foot();
- sub foot {
- print <<FOOT
- #endif /* USE_MANUAL */
- FOOT
- ;
- }
|