+while (@f) {
+ $f = uc shift @f;
+ if ($f eq 'ALL') {
+ @ref = @all;
+ $n = @ref;
+ $sel++;
+ } elsif ($f =~ /^O/o) { # dir/own
+ @ref = grep { $_->to eq $self->call || $_->from eq $self->call } @all;
+ $sel++;
+ } elsif ($f =~ /^N/o) { # dir/new
+ @ref = grep { $_->t > $self->user->lastin } @all;
+ $sel++;
+ } elsif ($f =~ /^S/o) { # dir/subject
+ $f = shift @f;
+ if ($f) {
+ $f =~ s{(.)}{"\Q$1"}ge;
+ @ref = grep { $_->subject =~ m{$f}i } @all;
+ $sel++;
+ }
+ } elsif ($f eq '>' || $f =~ /^T/o){
+ $f = uc shift @f;
+ if ($f) {
+ $f = shellregex($f);
+ @ref = grep { $_->to =~ m{$f} } @all;
+ $sel++;
+ }
+ } elsif ($f eq '<' || $f =~ /^F/o){
+ $f = uc shift @f;
+ if ($f) {
+ $f = shellregex($f);
+ @ref = grep { $_->from =~ m{$f} } @all;
+ $sel++;
+ }
+ } elsif ($f =~ /^(\d+)-(\d+)$/) { # a range of items
+ $from = $1;
+ $to = $2;
+ } elsif ($f =~ /^\d+$/ && $f > 0) { # a number of items
+ $n = $f;
+ }