#!/usr/bin/perl $maxnlines= 22; open(SRC,"helpmsgs.src") || die $!; open(NC,">helpmsgs.cc.new") || die $!; open(NH,">helpmsgs.h.new") || die $!; &autowarn('NC'); &autowarn('NH'); print(NC "#include \"helpmsgs.h\"\n") || die $!; print(NH <<'END') || die $!; #ifndef HELPMSGS_H #define HELPMSGS_H struct helpmessage { const char *title; const char *text; }; END $state= 'start'; $nblanks= 0; $nlines= 0; while () { s/\"/\\\"/g; if (m/^\@\@\@ (\w+)\s+(\S.*\S)\s+$/) { &finishif; $currentname= $1; $currenttitle= $2; print(NH "extern const struct helpmessage hlp_$currentname;\n") || die $!; print(NC "const struct helpmessage hlp_$currentname = {\n". " \"$currenttitle\", \"") || die $!; } elsif (m/^\@\@\@/) { die; } elsif (!m/\S/) { $nblanks++; } else { if ($state ne 'start' && $nblanks) { print(NC ("\\n"x$nblanks)."\\\n") || die $!; $nlines+= $nblanks; } $state= 'middle'; $nblanks= 0; s/\s*\n$//; print(NC "\\\n".$_."\\n") || die $!; $nlines++; } } &finishif; close(NC) || die $!; print(NH "#endif /* HELPMSGS_H */\n") || die $!; close(NH) || die $!; rename("helpmsgs.cc.new","helpmsgs.cc") || die $!; rename("helpmsgs.h.new","helpmsgs.h") || die $!; sub finishif { if ($state ne 'start') { print(NC "\"\n};\n") || die $!; printf "\t\t%s: %d lines\n",$currentname,$nlines; if ($nlines > $maxnlines) { warn "Too many lines in $currentname"; } } $state= 'start'; $nblanks= 0; $nlines= 0; } sub autowarn { $fh= $_[0]; print($fh <<'END') || die $!; /* * WARNING - THIS FILE IS GENERATED AUTOMATICALLY - DO NOT EDIT * It is generated by mkhelpmsgs.pl from helpmsgs.src. */ END }