Annotation of embedaddon/curl/src/mkhelp.pl, revision 1.1.1.1
1.1 misho 1: #!/usr/bin/env perl
2: #***************************************************************************
3: # _ _ ____ _
4: # Project ___| | | | _ \| |
5: # / __| | | | |_) | |
6: # | (__| |_| | _ <| |___
7: # \___|\___/|_| \_\_____|
8: #
9: # Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
10: #
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.
14: #
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.
18: #
19: # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
20: # KIND, either express or implied.
21: #
22: ###########################################################################
23:
24: # Yeah, I know, probably 1000 other persons already wrote a script like
25: # this, but I'll tell ya:
26:
27: # THEY DON'T FIT ME :-)
28:
29: # Get readme file as parameter:
30:
31: if($ARGV[0] eq "-c") {
32: $c=1;
33: shift @ARGV;
34: }
35:
36: push @out, " _ _ ____ _\n";
37: push @out, " Project ___| | | | _ \\| |\n";
38: push @out, " / __| | | | |_) | |\n";
39: push @out, " | (__| |_| | _ <| |___\n";
40: push @out, " \\___|\\___/|_| \\_\\_____|\n";
41:
42: my $olen=0;
43: while (<STDIN>) {
44: my $line = $_;
45:
46: # this should be removed:
47: $line =~ s/(.|_)//g;
48:
49: # remove trailing CR from line. msysgit checks out files as line+CRLF
50: $line =~ s/\r$//;
51:
52: if($line =~ /^([ \t]*\n|curl)/i) {
53: # cut off headers and empty lines
54: $wline++; # count number of cut off lines
55: next;
56: }
57:
58: my $text = $line;
59: $text =~ s/^\s+//g; # cut off preceding...
60: $text =~ s/\s+$//g; # and trailing whitespaces
61:
62: $tlen = length($text);
63:
64: if($wline && ($olen == $tlen)) {
65: # if the previous line with contents was exactly as long as
66: # this line, then we ignore the newlines!
67:
68: # We do this magic because a header may abort a paragraph at
69: # any line, but we don't want that to be noticed in the output
70: # here
71: $wline=0;
72: }
73: $olen = $tlen;
74:
75: if($wline) {
76: # we only make one empty line max
77: $wline = 0;
78: push @out, "\n";
79: }
80: push @out, $line;
81: }
82: push @out, "\n"; # just an extra newline
83:
84: print <<HEAD
85: /*
86: * NEVER EVER edit this manually, fix the mkhelp.pl script instead!
87: */
88: #ifdef USE_MANUAL
89: #include "tool_hugehelp.h"
90: HEAD
91: ;
92: if($c) {
93: # If compression requested, check that the Gzip module is available
94: # or else disable compression
95: $c = eval
96: {
97: require IO::Compress::Gzip;
98: IO::Compress::Gzip->import();
99: 1;
100: };
101: print STDERR "Warning: compression requested but Gzip is not available\n" if (!$c)
102: }
103:
104: if($c)
105: {
106: my $content = join("", @out);
107: my $gzippedContent;
108: IO::Compress::Gzip::gzip(
109: \$content, \$gzippedContent, Level => 9, TextFlag => 1, Time=>0) or die "gzip failed:";
110: $gzip = length($content);
111: $gzipped = length($gzippedContent);
112:
113: print <<HEAD
114: #include <zlib.h>
115: #include "memdebug.h" /* keep this as LAST include */
116: static const unsigned char hugehelpgz[] = {
117: /* This mumbo-jumbo is the huge help text compressed with gzip.
118: Thanks to this operation, the size of this data shrank from $gzip
119: to $gzipped bytes. You can disable the use of compressed help
120: texts by NOT passing -c to the mkhelp.pl tool. */
121: HEAD
122: ;
123:
124: my $c=0;
125: print " ";
126: for(split(//, $gzippedContent)) {
127: my $num=ord($_);
128: printf(" 0x%02x,", 0+$num);
129: if(!(++$c % 12)) {
130: print "\n ";
131: }
132: }
133: print "\n};\n";
134:
135: print <<EOF
136: #define BUF_SIZE 0x10000
137: static voidpf zalloc_func(voidpf opaque, unsigned int items, unsigned int size)
138: {
139: (void) opaque;
140: /* not a typo, keep it calloc() */
141: return (voidpf) calloc(items, size);
142: }
143: static void zfree_func(voidpf opaque, voidpf ptr)
144: {
145: (void) opaque;
146: free(ptr);
147: }
148: /* Decompress and send to stdout a gzip-compressed buffer */
149: void hugehelp(void)
150: {
151: unsigned char* buf;
152: int status,headerlen;
153: z_stream z;
154:
155: /* Make sure no gzip options are set */
156: if (hugehelpgz[3] & 0xfe)
157: return;
158:
159: headerlen = 10;
160: memset(&z, 0, sizeof(z_stream));
161: z.zalloc = (alloc_func)zalloc_func;
162: z.zfree = (free_func)zfree_func;
163: z.avail_in = (unsigned int)(sizeof(hugehelpgz) - headerlen);
164: z.next_in = (unsigned char *)hugehelpgz + headerlen;
165:
166: if (inflateInit2(&z, -MAX_WBITS) != Z_OK)
167: return;
168:
169: buf = malloc(BUF_SIZE);
170: if (buf) {
171: while(1) {
172: z.avail_out = BUF_SIZE;
173: z.next_out = buf;
174: status = inflate(&z, Z_SYNC_FLUSH);
175: if (status == Z_OK || status == Z_STREAM_END) {
176: fwrite(buf, BUF_SIZE - z.avail_out, 1, stdout);
177: if (status == Z_STREAM_END)
178: break;
179: }
180: else
181: break; /* Error */
182: }
183: free(buf);
184: }
185: inflateEnd(&z);
186: }
187: EOF
188: ;
189: foot();
190: exit;
191: }
192: else {
193: print <<HEAD
194: void hugehelp(void)
195: {
196: fputs(
197: HEAD
198: ;
199: }
200:
201: $outsize=0;
202: for(@out) {
203: chop;
204:
205: $new = $_;
206:
207: $outsize += length($new)+1; # one for the newline
208:
209: $new =~ s/\\/\\\\/g;
210: $new =~ s/\"/\\\"/g;
211:
212: # gcc 2.96 claims ISO C89 only is required to support 509 letter strings
213: if($outsize > 500) {
214: # terminate and make another fputs() call here
215: print ", stdout);\n fputs(\n";
216: $outsize=length($new)+1;
217: }
218: printf("\"%s\\n\"\n", $new);
219:
220: }
221:
222: print ", stdout) ;\n}\n";
223:
224: foot();
225:
226: sub foot {
227: print <<FOOT
228: #else /* !USE_MANUAL */
229: /* built-in manual is disabled, blank function */
230: #include "tool_hugehelp.h"
231: void hugehelp(void) {}
232: #endif /* USE_MANUAL */
233: FOOT
234: ;
235: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>