X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXUtil.pm;h=9d475ed89c8f2f17713b3aabdc9aa6c79d93d4df;hb=8e095bdba5dc26a87b0f1ed0254d08ba80636725;hp=56e36d4220ba05bc43a6bd3195c4efa672a19b81;hpb=78cf2dcb9be8128af7f8dc5ae37540c9c53c6057;p=spider.git diff --git a/perl/DXUtil.pm b/perl/DXUtil.pm index 56e36d42..9d475ed8 100644 --- a/perl/DXUtil.pm +++ b/perl/DXUtil.pm @@ -12,6 +12,16 @@ use Date::Parse; use IO::File; use Data::Dumper; +use strict; + +use vars qw($VERSION $BRANCH); +$VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ ); +$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ ) || 0; +$main::build += $VERSION; +$main::branch += $BRANCH; + +use vars qw(@month %patmap @ISA @EXPORT); + require Exporter; @ISA = qw(Exporter); @EXPORT = qw(atime ztime cldate cldatetime slat slong yesno promptf @@ -20,6 +30,7 @@ require Exporter; is_qra is_freq is_digits is_pctext is_pcflag insertitem deleteitem ); + @month = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); %patmap = ( '*' => '.*', @@ -172,6 +183,14 @@ sub parraypairs return $out; } +sub _sort_fields +{ + my $ref = shift; + my @a = split /,/, $ref->field_prompt(shift); + my @b = split /,/, $ref->field_prompt(shift); + return lc $a[1] cmp lc $b[1]; +} + # print all the fields for a record according to privilege # # The prompt record is of the format ',[,' @@ -184,15 +203,17 @@ sub print_all_fields my @out; my @fields = $ref->fields; my $field; + my $width = $self->width - 1; + $width ||= 80; - foreach $field (sort {$ref->field_prompt($a) cmp $ref->field_prompt($b)} @fields) { + foreach $field (sort {_sort_fields($ref, $a, $b)} @fields) { if (defined $ref->{$field}) { my ($priv, $ans) = promptf($ref->field_prompt($field), $ref->{$field}); my @tmp; - if (length $ans > 79) { + if (length $ans > $width) { my ($p, $a) = split /: /, $ans, 2; my $l = (length $p) + 2; - my $al = 79 - $l; + my $al = ($width - 1) - $l; my $bit; while (length $a > $al ) { ($bit, $a) = unpack "A$al A*", $a; @@ -330,7 +351,7 @@ sub is_pcflag # check that a thing is a frequency sub is_freq { - return $_[0] =~ /^[\d\.]+$/; + return $_[0] =~ /^\d+(?:\.\d+)?$/; } # check that a thing is just digits