xref: /netbsd-src/external/bsd/less/dist/mkhelp.pl (revision e4a6e799a67c2028562d75b4e61407b22434aa36)
1*e4a6e799Ssimonb#! /usr/bin/env perl
2*e4a6e799Ssimonbuse strict;
3*e4a6e799Ssimonb
4*e4a6e799Ssimonb# Silly little program to generate the help.c source file
5*e4a6e799Ssimonb# from the less.hlp text file.
6*e4a6e799Ssimonb# The output of this script is a C program defining a char array
7*e4a6e799Ssimonb# whose content is the input to this script.
8*e4a6e799Ssimonb
9*e4a6e799Ssimonb{
10*e4a6e799Ssimonb    my ($sec,$min,$hour,$mday,$mon,$year) = gmtime();
11*e4a6e799Ssimonb    printf "/* This file was generated by mkhelp.pl from less.hlp at %d:%02d on %d/%d/%d */\n",
12*e4a6e799Ssimonb        $hour, $min, $year+1900, $mon+1, $mday;
13*e4a6e799Ssimonb    print "#include \"less.h\"\n";
14*e4a6e799Ssimonb    print "constant char helpdata[] = {\n";
15*e4a6e799Ssimonb    my $ch = 0;
16*e4a6e799Ssimonb    my $prevch;
17*e4a6e799Ssimonb    for (;;) {
18*e4a6e799Ssimonb        $prevch = $ch;
19*e4a6e799Ssimonb        $ch = getc();
20*e4a6e799Ssimonb        last if not defined $ch;
21*e4a6e799Ssimonb        if ($ch eq "'") {
22*e4a6e799Ssimonb            print "'\\'',";
23*e4a6e799Ssimonb        } elsif ($ch eq "\\") {
24*e4a6e799Ssimonb            print "'\\\\',";
25*e4a6e799Ssimonb        } elsif ($ch eq "\b") {
26*e4a6e799Ssimonb            print "'\\b',";
27*e4a6e799Ssimonb        } elsif ($ch eq "\t") {
28*e4a6e799Ssimonb            print "'\\t',";
29*e4a6e799Ssimonb        } elsif ($ch eq "\n") {
30*e4a6e799Ssimonb            print "'\\n',\n" if $prevch ne "\r";
31*e4a6e799Ssimonb        } elsif ($ch eq "\r") {
32*e4a6e799Ssimonb            print "'\\n',\n" if $prevch ne "\n";
33*e4a6e799Ssimonb        } else {
34*e4a6e799Ssimonb            if (ord($ch) >= ord(' ') && ord($ch) < 0x7f) {
35*e4a6e799Ssimonb                print "'$ch',";
36*e4a6e799Ssimonb            } else {
37*e4a6e799Ssimonb                printf "0x%02x,", ord($ch);
38*e4a6e799Ssimonb            }
39*e4a6e799Ssimonb        }
40*e4a6e799Ssimonb    }
41*e4a6e799Ssimonb    # Add an extra null char to avoid having a trailing comma.
42*e4a6e799Ssimonb    print " 0 };\n";
43*e4a6e799Ssimonb    print "constant int size_helpdata = sizeof(helpdata) - 1;\n";
44*e4a6e799Ssimonb}
45