#!/usr/bin/perl -n # NOTE the use of -n above; this script is called in a loop. use warnings; use strict; our $scanning; our %used_chars; BEGIN { $scanning = 0; %used_chars = (); open STDIN, "../src/main.c" or die "main.c: $!\n"; } if (/^static struct cmdline_option option_data/) { $scanning = 1; } elsif (/[}];/) { $scanning = 0; } elsif ( $scanning && /^[\t ]*\{ "[^"]*", '(.)', OPT_[A-Z0-9_]*, / ) { $used_chars{$1} = 1; } END { my $cols = 0; my $max_cols = 13; my $opt_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; print "Free chars:\n\t"; for (my $i = 0; $i < length $opt_chars; ++$i, ++$cols) { if ($cols == $max_cols) { $cols = 0; print "\n\t"; } my $opt = substr($opt_chars,$i,1); print ' '; if (!$used_chars{ $opt }) { print "-$opt"; } else { print ' '; } } print "\n"; }