123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- #!/usr/local/bin/perl
- # 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;
- }
- my $README = $ARGV[0];
- if($README eq "") {
- print "usage: mkreadme.pl [-c] <README> < manpage\n";
- exit;
- }
- 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;
- 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 preceeding...
- $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
- open(READ, "<$README") ||
- die "couldn't read the README infile $README";
- while(<READ>) {
- push @out, $_;
- }
- close(READ);
- # if compressed
- if($c) {
- my @test = `gzip --version 2>&1`;
- if($test[0] =~ /gzip/) {
- open(GZIP, ">dumpit") ||
- die "can't create the dumpit file, try without -c";
- binmode GZIP;
- for(@out) {
- print GZIP $_;
- $gzip += length($_);
- }
- close(GZIP);
- system("gzip --best --no-name dumpit");
-
- open(GZIP, "<dumpit.gz") ||
- die "can't read the dumpit.gz file, try without -c";
- binmode GZIP;
- while(<GZIP>) {
- push @gzip, $_;
- $gzipped += length($_);
- }
- close(GZIP);
- unlink("dumpit.gz");
- }
- else {
- # no gzip, no compression!
- undef $c;
- print STDERR "MEEEP: Couldn't find gzip, disable compression\n";
- }
- }
- $now = localtime;
- print <<HEAD
- /*
- * NEVER EVER edit this manually, fix the mkhelp.pl script instead!
- * Generation time: $now
- */
- #include "hugehelp.h"
- #include <stdio.h>
- HEAD
- ;
- if($c) {
- print <<HEAD
- #include <zlib.h>
- 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 shrunk 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(@gzip) {
- my @all=split(//, $_);
- for(@all) {
- my $num=ord($_);
- printf("0x%02x, ", 0+$num);
- if(++$c>11) {
- print "\n ";
- $c=0;
- }
- }
- }
- print "\n};\n";
- print <<EOF
- /* Decompress and send to stdout a gzip-compressed buffer */
- void hugehelp(void)
- {
- unsigned char buf[0x10000];
- int status,headerlen;
- z_stream z;
- /* Make sure no gzip options are set */
- if (hugehelpgz[3] & 0xfe)
- return;
- headerlen = 10;
- z.avail_in = sizeof(hugehelpgz) - headerlen;
- z.next_in = (unsigned char *)hugehelpgz + headerlen;
- z.zalloc = (alloc_func)Z_NULL;
- z.zfree = (free_func)Z_NULL;
- z.opaque = 0;
- if (inflateInit2(&z, -MAX_WBITS) != Z_OK)
- return;
- while(1) {
- z.avail_out = (int)sizeof(buf);
- z.next_out = buf;
- status = inflate(&z, Z_SYNC_FLUSH);
- if (status == Z_OK || status == Z_STREAM_END) {
- fwrite(buf, sizeof(buf) - z.avail_out, 1, stdout);
- if (status == Z_STREAM_END)
- break;
- }
- else
- break; /* Error */
- }
- inflateEnd(&z);
- }
- EOF
- ;
- 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"
-
|