2 #***************************************************************************
4 # Project ___| | | | _ \| |
6 # | (__| |_| | _ <| |___
7 # \___|\___/|_| \_\_____|
9 # Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
11 # This software is licensed as described in the file COPYING, which
12 # you should have received as part of this distribution. The terms
13 # are also available at https://curl.haxx.se/docs/copyright.html.
15 # You may opt to use, copy, modify, merge, publish, distribute and/or sell
16 # copies of the Software, and permit persons to whom the Software is
17 # furnished to do so, under the terms of the COPYING file.
19 # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
20 # KIND, either express or implied.
22 ###########################################################################
24 # Yeah, I know, probably 1000 other persons already wrote a script like
25 # this, but I'll tell ya:
27 # THEY DON'T FIT ME :-)
29 # Get readme file as parameter:
31 if($ARGV[0] eq "-c") {
36 my $README = $ARGV[0];
39 print "usage: mkhelp.pl [-c] <README> < manpage\n";
44 push @out, " _ _ ____ _\n";
45 push @out, " Project ___| | | | _ \\| |\n";
46 push @out, " / __| | | | |_) | |\n";
47 push @out, " | (__| |_| | _ <| |___\n";
48 push @out, " \\___|\\___/|_| \\_\\_____|\n";
54 # this should be removed:
55 $line =~ s/(
\b.|_
\b)//g;
57 # remove trailing CR from line. msysgit checks out files as line+CRLF
60 if($line =~ /^([ \t]*\n|curl)/i) {
61 # cut off headers and empty lines
62 $wline++; # count number of cut off lines
67 $text =~ s/^\s+//g; # cut off preceding...
68 $text =~ s/\s+$//g; # and trailing whitespaces
70 $tlen = length($text);
72 if($wline && ($olen == $tlen)) {
73 # if the previous line with contents was exactly as long as
74 # this line, then we ignore the newlines!
76 # We do this magic because a header may abort a paragraph at
77 # any line, but we don't want that to be noticed in the output
84 # we only make one empty line max
90 push @out, "\n"; # just an extra newline
92 open(READ, "<$README") ||
93 die "couldn't read the README infile $README";
98 # remove trailing CR from line. msysgit checks out files as line+CRLF
108 * NEVER EVER edit this manually, fix the mkhelp.pl script instead!
109 * Generation time: $now
112 #include "tool_hugehelp.h"
116 # If compression requested, check that the Gzip module is available
117 # or else disable compression
120 require IO::Compress::Gzip;
121 IO::Compress::Gzip->import();
124 print STDERR "Warning: compression requested but Gzip is not available\n" if (!$c)
129 my $content = join("", @out);
131 IO::Compress::Gzip::gzip(
132 \$content, \$gzippedContent, Level => 9, TextFlag => 1, Time=>0) or die "gzip failed:";
133 $gzip = length($content);
134 $gzipped = length($gzippedContent);
138 #include "memdebug.h" /* keep this as LAST include */
139 static const unsigned char hugehelpgz[] = {
140 /* This mumbo-jumbo is the huge help text compressed with gzip.
141 Thanks to this operation, the size of this data shrank from $gzip
142 to $gzipped bytes. You can disable the use of compressed help
143 texts by NOT passing -c to the mkhelp.pl tool. */
149 for(split(//, $gzippedContent)) {
151 printf(" 0x%02x,", 0+$num);
159 #define BUF_SIZE 0x10000
160 static voidpf zalloc_func(voidpf opaque, unsigned int items, unsigned int size)
163 /* not a typo, keep it calloc() */
164 return (voidpf) calloc(items, size);
166 static void zfree_func(voidpf opaque, voidpf ptr)
171 /* Decompress and send to stdout a gzip-compressed buffer */
175 int status,headerlen;
178 /* Make sure no gzip options are set */
179 if (hugehelpgz[3] & 0xfe)
183 memset(&z, 0, sizeof(z_stream));
184 z.zalloc = (alloc_func)zalloc_func;
185 z.zfree = (free_func)zfree_func;
186 z.avail_in = (unsigned int)(sizeof(hugehelpgz) - headerlen);
187 z.next_in = (unsigned char *)hugehelpgz + headerlen;
189 if (inflateInit2(&z, -MAX_WBITS) != Z_OK)
192 buf = malloc(BUF_SIZE);
195 z.avail_out = BUF_SIZE;
197 status = inflate(&z, Z_SYNC_FLUSH);
198 if (status == Z_OK || status == Z_STREAM_END) {
199 fwrite(buf, BUF_SIZE - z.avail_out, 1, stdout);
200 if (status == Z_STREAM_END)
230 $outsize += length($new)+1; # one for the newline
235 # gcc 2.96 claims ISO C89 only is required to support 509 letter strings
237 # terminate and make another fputs() call here
238 print ", stdout);\n fputs(\n";
239 $outsize=length($new)+1;
241 printf("\"%s\\n\"\n", $new);
245 print ", stdout) ;\n}\n";
251 #else /* !USE_MANUAL */
252 /* built-in manual is disabled, blank function */
253 #include "tool_hugehelp.h"
254 void hugehelp(void) {}
255 #endif /* USE_MANUAL */