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>