chiark / gitweb /
pregen: wip
[d.git] / evade-mail-pregen
index 9fcafc66fbbc2e93ac8857192cea01cde14782a7..91466a1cc6271c2013d6816bceec8b7084c2d521 100755 (executable)
@@ -54,7 +54,7 @@ sub run_generator {
            ($alias,$comment) = ($1,$2);
        } elsif (m/^\#/) {
            next; # future extension
-       } elsif (m/^([^#: ])\: [^#]* (\#.*)$/) {
+       } elsif (m/^([^#: ]+)\: [^#]* (\#.*)$/) {
            ($alias,$comment) = ($1,$2);
        } else {
            die "generator output $_ ?";
@@ -81,9 +81,9 @@ sub fetch_list () {
 
 sub perhaps_generate ($) {
     my ($num) = @_;
-    return undef if $no_generate;
     my $alias = $by_number[$num];
     return $alias if $alias;
+    return undef if $no_generate;
     return undef unless $num > $#by_number;
     run_generator qw(create), (comment_make $num);
     $alias = $by_number[$num];
@@ -142,9 +142,11 @@ sub action_list {
     @ARGV==0 or
        badusage "invalid arguments to list";
     my $num = $min_number;
-    while ($num <= $#by_number) {
+    $num ||= 0;
+    for (; $num <= $#by_number; $num++) {
        my $alias = $by_number[$num];
        report $alias if $alias;
+       $num++;
     }
 }
 
@@ -154,13 +156,19 @@ sub action_some {
      badusage "invalid arguments to some";
     my ($count) = $1;
     my $num = $min_number;
+    $num ||= 0;
     while ($count > 0) {
-       my $alias = generate $num;
+       my $alias = perhaps_generate $num;
        if ($alias) {
            report $alias;
            $count--;
        } else {
-           last if $num > $#by_number; # -N
+           if ($num > $#by_number) {
+               print STDERR <<END or fail "stderr: $!";
+$us: fewer than requested aliases printed, due to -N
+END
+               last;
+           }
            $num++;
        }
     }
@@ -176,7 +184,7 @@ sub action_range {
        $op eq '-' ? $rarg :
        confess "$op ??";
     for (; $num<=$limit; $num++) {
-       my $alias = generate $num;
+       my $alias = perhaps_generate $num;
        report $alias if $alias;
     }
 }    
@@ -210,7 +218,7 @@ $comment_pattern =~ m/^#/s
     or badusage "comment pattern must start with \`#'";
 $comment_re = $comment_pattern;
 $comment_re =~ s/\W/\\$&/g;
-($comment_re =~ s'\\<number\\>'([1-9]\d{0,8})'g) == 1 #'
+($comment_re =~ s'\\<number\\>'(0|[1-9]\d{0,8})'g) == 1 #'
     or badusage "comment pattern (\`$comment_pattern')".
          " must contain \`<number>' exactly once";