Annotation of embedaddon/curl/src/mkhelp.pl, revision 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>